OSDN Git Service

./:
[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 /* Create a new main C++ lexer, the lexer that gets tokens from the
251    preprocessor.  */
252
253 static cp_lexer *
254 cp_lexer_new_main (void)
255 {
256   cp_token first_token;
257   cp_lexer *lexer;
258   cp_token *pos;
259   size_t alloc;
260   size_t space;
261   cp_token *buffer;
262
263   /* It's possible that parsing the first pragma will load a PCH file,
264      which is a GC collection point.  So we have to do that before
265      allocating any memory.  */
266   cp_parser_initial_pragma (&first_token);
267
268   c_common_no_more_pch ();
269
270   /* Allocate the memory.  */
271   lexer = GGC_CNEW (cp_lexer);
272
273 #ifdef ENABLE_CHECKING
274   /* Initially we are not debugging.  */
275   lexer->debugging_p = false;
276 #endif /* ENABLE_CHECKING */
277   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
278                                    CP_SAVED_TOKEN_STACK);
279
280   /* Create the buffer.  */
281   alloc = CP_LEXER_BUFFER_SIZE;
282   buffer = GGC_NEWVEC (cp_token, alloc);
283
284   /* Put the first token in the buffer.  */
285   space = alloc;
286   pos = buffer;
287   *pos = first_token;
288
289   /* Get the remaining tokens from the preprocessor.  */
290   while (pos->type != CPP_EOF)
291     {
292       pos++;
293       if (!--space)
294         {
295           space = alloc;
296           alloc *= 2;
297           buffer = GGC_RESIZEVEC (cp_token, buffer, alloc);
298           pos = buffer + space;
299         }
300       cp_lexer_get_preprocessor_token (lexer, pos);
301     }
302   lexer->buffer = buffer;
303   lexer->buffer_length = alloc - space;
304   lexer->last_token = pos;
305   lexer->next_token = lexer->buffer_length ? buffer : &eof_token;
306
307   /* Subsequent preprocessor diagnostics should use compiler
308      diagnostic functions to get the compiler source location.  */
309   done_lexing = true;
310
311   gcc_assert (lexer->next_token->type != CPP_PURGED);
312   return lexer;
313 }
314
315 /* Create a new lexer whose token stream is primed with the tokens in
316    CACHE.  When these tokens are exhausted, no new tokens will be read.  */
317
318 static cp_lexer *
319 cp_lexer_new_from_tokens (cp_token_cache *cache)
320 {
321   cp_token *first = cache->first;
322   cp_token *last = cache->last;
323   cp_lexer *lexer = GGC_CNEW (cp_lexer);
324
325   /* We do not own the buffer.  */
326   lexer->buffer = NULL;
327   lexer->buffer_length = 0;
328   lexer->next_token = first == last ? &eof_token : first;
329   lexer->last_token = last;
330
331   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
332                                    CP_SAVED_TOKEN_STACK);
333
334 #ifdef ENABLE_CHECKING
335   /* Initially we are not debugging.  */
336   lexer->debugging_p = false;
337 #endif
338
339   gcc_assert (lexer->next_token->type != CPP_PURGED);
340   return lexer;
341 }
342
343 /* Frees all resources associated with LEXER.  */
344
345 static void
346 cp_lexer_destroy (cp_lexer *lexer)
347 {
348   if (lexer->buffer)
349     ggc_free (lexer->buffer);
350   VEC_free (cp_token_position, heap, lexer->saved_tokens);
351   ggc_free (lexer);
352 }
353
354 /* Returns nonzero if debugging information should be output.  */
355
356 #ifdef ENABLE_CHECKING
357
358 static inline bool
359 cp_lexer_debugging_p (cp_lexer *lexer)
360 {
361   return lexer->debugging_p;
362 }
363
364 #endif /* ENABLE_CHECKING */
365
366 static inline cp_token_position
367 cp_lexer_token_position (cp_lexer *lexer, bool previous_p)
368 {
369   gcc_assert (!previous_p || lexer->next_token != &eof_token);
370
371   return lexer->next_token - previous_p;
372 }
373
374 static inline cp_token *
375 cp_lexer_token_at (cp_lexer *lexer ATTRIBUTE_UNUSED, cp_token_position pos)
376 {
377   return pos;
378 }
379
380 /* nonzero if we are presently saving tokens.  */
381
382 static inline int
383 cp_lexer_saving_tokens (const cp_lexer* lexer)
384 {
385   return VEC_length (cp_token_position, lexer->saved_tokens) != 0;
386 }
387
388 /* Store the next token from the preprocessor in *TOKEN.  Return true
389    if we reach EOF.  If LEXER is NULL, assume we are handling an
390    initial #pragma pch_preprocess, and thus want the lexer to return
391    processed strings.  */
392
393 static void
394 cp_lexer_get_preprocessor_token (cp_lexer *lexer, cp_token *token)
395 {
396   static int is_extern_c = 0;
397
398    /* Get a new token from the preprocessor.  */
399   token->type
400     = c_lex_with_flags (&token->u.value, &token->location, &token->flags,
401                         lexer == NULL ? 0 : C_LEX_RAW_STRINGS);
402   token->keyword = RID_MAX;
403   token->pragma_kind = PRAGMA_NONE;
404
405   /* On some systems, some header files are surrounded by an
406      implicit extern "C" block.  Set a flag in the token if it
407      comes from such a header.  */
408   is_extern_c += pending_lang_change;
409   pending_lang_change = 0;
410   token->implicit_extern_c = is_extern_c > 0;
411
412   /* Check to see if this token is a keyword.  */
413   if (token->type == CPP_NAME)
414     {
415       if (C_IS_RESERVED_WORD (token->u.value))
416         {
417           /* Mark this token as a keyword.  */
418           token->type = CPP_KEYWORD;
419           /* Record which keyword.  */
420           token->keyword = C_RID_CODE (token->u.value);
421         }
422       else
423         {
424           if (warn_cxx0x_compat
425               && C_RID_CODE (token->u.value) >= RID_FIRST_CXX0X
426               && C_RID_CODE (token->u.value) <= RID_LAST_CXX0X)
427             {
428               /* Warn about the C++0x keyword (but still treat it as
429                  an identifier).  */
430               warning (OPT_Wc__0x_compat, 
431                        "identifier %qE will become a keyword in C++0x",
432                        token->u.value);
433
434               /* Clear out the C_RID_CODE so we don't warn about this
435                  particular identifier-turned-keyword again.  */
436               C_SET_RID_CODE (token->u.value, RID_MAX);
437             }
438
439           token->ambiguous_p = false;
440           token->keyword = RID_MAX;
441         }
442     }
443   /* Handle Objective-C++ keywords.  */
444   else if (token->type == CPP_AT_NAME)
445     {
446       token->type = CPP_KEYWORD;
447       switch (C_RID_CODE (token->u.value))
448         {
449         /* Map 'class' to '@class', 'private' to '@private', etc.  */
450         case RID_CLASS: token->keyword = RID_AT_CLASS; break;
451         case RID_PRIVATE: token->keyword = RID_AT_PRIVATE; break;
452         case RID_PROTECTED: token->keyword = RID_AT_PROTECTED; break;
453         case RID_PUBLIC: token->keyword = RID_AT_PUBLIC; break;
454         case RID_THROW: token->keyword = RID_AT_THROW; break;
455         case RID_TRY: token->keyword = RID_AT_TRY; break;
456         case RID_CATCH: token->keyword = RID_AT_CATCH; break;
457         default: token->keyword = C_RID_CODE (token->u.value);
458         }
459     }
460   else if (token->type == CPP_PRAGMA)
461     {
462       /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST.  */
463       token->pragma_kind = ((enum pragma_kind)
464                             TREE_INT_CST_LOW (token->u.value));
465       token->u.value = NULL_TREE;
466     }
467 }
468
469 /* Update the globals input_location and the input file stack from TOKEN.  */
470 static inline void
471 cp_lexer_set_source_position_from_token (cp_token *token)
472 {
473   if (token->type != CPP_EOF)
474     {
475       input_location = token->location;
476     }
477 }
478
479 /* Return a pointer to the next token in the token stream, but do not
480    consume it.  */
481
482 static inline cp_token *
483 cp_lexer_peek_token (cp_lexer *lexer)
484 {
485   if (cp_lexer_debugging_p (lexer))
486     {
487       fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
488       cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
489       putc ('\n', cp_lexer_debug_stream);
490     }
491   return lexer->next_token;
492 }
493
494 /* Return true if the next token has the indicated TYPE.  */
495
496 static inline bool
497 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
498 {
499   return cp_lexer_peek_token (lexer)->type == type;
500 }
501
502 /* Return true if the next token does not have the indicated TYPE.  */
503
504 static inline bool
505 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
506 {
507   return !cp_lexer_next_token_is (lexer, type);
508 }
509
510 /* Return true if the next token is the indicated KEYWORD.  */
511
512 static inline bool
513 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
514 {
515   return cp_lexer_peek_token (lexer)->keyword == keyword;
516 }
517
518 /* Return true if the next token is not the indicated KEYWORD.  */
519
520 static inline bool
521 cp_lexer_next_token_is_not_keyword (cp_lexer* lexer, enum rid keyword)
522 {
523   return cp_lexer_peek_token (lexer)->keyword != keyword;
524 }
525
526 /* Return true if the next token is a keyword for a decl-specifier.  */
527
528 static bool
529 cp_lexer_next_token_is_decl_specifier_keyword (cp_lexer *lexer)
530 {
531   cp_token *token;
532
533   token = cp_lexer_peek_token (lexer);
534   switch (token->keyword) 
535     {
536       /* auto specifier: storage-class-specifier in C++,
537          simple-type-specifier in C++0x.  */
538     case RID_AUTO:
539       /* Storage classes.  */
540     case RID_REGISTER:
541     case RID_STATIC:
542     case RID_EXTERN:
543     case RID_MUTABLE:
544     case RID_THREAD:
545       /* Elaborated type specifiers.  */
546     case RID_ENUM:
547     case RID_CLASS:
548     case RID_STRUCT:
549     case RID_UNION:
550     case RID_TYPENAME:
551       /* Simple type specifiers.  */
552     case RID_CHAR:
553     case RID_CHAR16:
554     case RID_CHAR32:
555     case RID_WCHAR:
556     case RID_BOOL:
557     case RID_SHORT:
558     case RID_INT:
559     case RID_LONG:
560     case RID_SIGNED:
561     case RID_UNSIGNED:
562     case RID_FLOAT:
563     case RID_DOUBLE:
564     case RID_VOID:
565       /* GNU extensions.  */ 
566     case RID_ATTRIBUTE:
567     case RID_TYPEOF:
568       /* C++0x extensions.  */
569     case RID_DECLTYPE:
570       return true;
571
572     default:
573       return false;
574     }
575 }
576
577 /* Return a pointer to the Nth token in the token stream.  If N is 1,
578    then this is precisely equivalent to cp_lexer_peek_token (except
579    that it is not inline).  One would like to disallow that case, but
580    there is one case (cp_parser_nth_token_starts_template_id) where
581    the caller passes a variable for N and it might be 1.  */
582
583 static cp_token *
584 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
585 {
586   cp_token *token;
587
588   /* N is 1-based, not zero-based.  */
589   gcc_assert (n > 0);
590
591   if (cp_lexer_debugging_p (lexer))
592     fprintf (cp_lexer_debug_stream,
593              "cp_lexer: peeking ahead %ld at token: ", (long)n);
594
595   --n;
596   token = lexer->next_token;
597   gcc_assert (!n || token != &eof_token);
598   while (n != 0)
599     {
600       ++token;
601       if (token == lexer->last_token)
602         {
603           token = &eof_token;
604           break;
605         }
606
607       if (token->type != CPP_PURGED)
608         --n;
609     }
610
611   if (cp_lexer_debugging_p (lexer))
612     {
613       cp_lexer_print_token (cp_lexer_debug_stream, token);
614       putc ('\n', cp_lexer_debug_stream);
615     }
616
617   return token;
618 }
619
620 /* Return the next token, and advance the lexer's next_token pointer
621    to point to the next non-purged token.  */
622
623 static cp_token *
624 cp_lexer_consume_token (cp_lexer* lexer)
625 {
626   cp_token *token = lexer->next_token;
627
628   gcc_assert (token != &eof_token);
629   gcc_assert (!lexer->in_pragma || token->type != CPP_PRAGMA_EOL);
630
631   do
632     {
633       lexer->next_token++;
634       if (lexer->next_token == lexer->last_token)
635         {
636           lexer->next_token = &eof_token;
637           break;
638         }
639
640     }
641   while (lexer->next_token->type == CPP_PURGED);
642
643   cp_lexer_set_source_position_from_token (token);
644
645   /* Provide debugging output.  */
646   if (cp_lexer_debugging_p (lexer))
647     {
648       fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
649       cp_lexer_print_token (cp_lexer_debug_stream, token);
650       putc ('\n', cp_lexer_debug_stream);
651     }
652
653   return token;
654 }
655
656 /* Permanently remove the next token from the token stream, and
657    advance the next_token pointer to refer to the next non-purged
658    token.  */
659
660 static void
661 cp_lexer_purge_token (cp_lexer *lexer)
662 {
663   cp_token *tok = lexer->next_token;
664
665   gcc_assert (tok != &eof_token);
666   tok->type = CPP_PURGED;
667   tok->location = UNKNOWN_LOCATION;
668   tok->u.value = NULL_TREE;
669   tok->keyword = RID_MAX;
670
671   do
672     {
673       tok++;
674       if (tok == lexer->last_token)
675         {
676           tok = &eof_token;
677           break;
678         }
679     }
680   while (tok->type == CPP_PURGED);
681   lexer->next_token = tok;
682 }
683
684 /* Permanently remove all tokens after TOK, up to, but not
685    including, the token that will be returned next by
686    cp_lexer_peek_token.  */
687
688 static void
689 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
690 {
691   cp_token *peek = lexer->next_token;
692
693   if (peek == &eof_token)
694     peek = lexer->last_token;
695
696   gcc_assert (tok < peek);
697
698   for ( tok += 1; tok != peek; tok += 1)
699     {
700       tok->type = CPP_PURGED;
701       tok->location = UNKNOWN_LOCATION;
702       tok->u.value = NULL_TREE;
703       tok->keyword = RID_MAX;
704     }
705 }
706
707 /* Begin saving tokens.  All tokens consumed after this point will be
708    preserved.  */
709
710 static void
711 cp_lexer_save_tokens (cp_lexer* lexer)
712 {
713   /* Provide debugging output.  */
714   if (cp_lexer_debugging_p (lexer))
715     fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
716
717   VEC_safe_push (cp_token_position, heap,
718                  lexer->saved_tokens, lexer->next_token);
719 }
720
721 /* Commit to the portion of the token stream most recently saved.  */
722
723 static void
724 cp_lexer_commit_tokens (cp_lexer* lexer)
725 {
726   /* Provide debugging output.  */
727   if (cp_lexer_debugging_p (lexer))
728     fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
729
730   VEC_pop (cp_token_position, lexer->saved_tokens);
731 }
732
733 /* Return all tokens saved since the last call to cp_lexer_save_tokens
734    to the token stream.  Stop saving tokens.  */
735
736 static void
737 cp_lexer_rollback_tokens (cp_lexer* lexer)
738 {
739   /* Provide debugging output.  */
740   if (cp_lexer_debugging_p (lexer))
741     fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
742
743   lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
744 }
745
746 /* Print a representation of the TOKEN on the STREAM.  */
747
748 #ifdef ENABLE_CHECKING
749
750 static void
751 cp_lexer_print_token (FILE * stream, cp_token *token)
752 {
753   /* We don't use cpp_type2name here because the parser defines
754      a few tokens of its own.  */
755   static const char *const token_names[] = {
756     /* cpplib-defined token types */
757 #define OP(e, s) #e,
758 #define TK(e, s) #e,
759     TTYPE_TABLE
760 #undef OP
761 #undef TK
762     /* C++ parser token types - see "Manifest constants", above.  */
763     "KEYWORD",
764     "TEMPLATE_ID",
765     "NESTED_NAME_SPECIFIER",
766     "PURGED"
767   };
768
769   /* If we have a name for the token, print it out.  Otherwise, we
770      simply give the numeric code.  */
771   gcc_assert (token->type < ARRAY_SIZE(token_names));
772   fputs (token_names[token->type], stream);
773
774   /* For some tokens, print the associated data.  */
775   switch (token->type)
776     {
777     case CPP_KEYWORD:
778       /* Some keywords have a value that is not an IDENTIFIER_NODE.
779          For example, `struct' is mapped to an INTEGER_CST.  */
780       if (TREE_CODE (token->u.value) != IDENTIFIER_NODE)
781         break;
782       /* else fall through */
783     case CPP_NAME:
784       fputs (IDENTIFIER_POINTER (token->u.value), stream);
785       break;
786
787     case CPP_STRING:
788     case CPP_STRING16:
789     case CPP_STRING32:
790     case CPP_WSTRING:
791       fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->u.value));
792       break;
793
794     default:
795       break;
796     }
797 }
798
799 /* Start emitting debugging information.  */
800
801 static void
802 cp_lexer_start_debugging (cp_lexer* lexer)
803 {
804   lexer->debugging_p = true;
805 }
806
807 /* Stop emitting debugging information.  */
808
809 static void
810 cp_lexer_stop_debugging (cp_lexer* lexer)
811 {
812   lexer->debugging_p = false;
813 }
814
815 #endif /* ENABLE_CHECKING */
816
817 /* Create a new cp_token_cache, representing a range of tokens.  */
818
819 static cp_token_cache *
820 cp_token_cache_new (cp_token *first, cp_token *last)
821 {
822   cp_token_cache *cache = GGC_NEW (cp_token_cache);
823   cache->first = first;
824   cache->last = last;
825   return cache;
826 }
827
828 \f
829 /* Decl-specifiers.  */
830
831 /* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
832
833 static void
834 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
835 {
836   memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
837 }
838
839 /* Declarators.  */
840
841 /* Nothing other than the parser should be creating declarators;
842    declarators are a semi-syntactic representation of C++ entities.
843    Other parts of the front end that need to create entities (like
844    VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
845
846 static cp_declarator *make_call_declarator
847   (cp_declarator *, tree, cp_cv_quals, tree, tree);
848 static cp_declarator *make_array_declarator
849   (cp_declarator *, tree);
850 static cp_declarator *make_pointer_declarator
851   (cp_cv_quals, cp_declarator *);
852 static cp_declarator *make_reference_declarator
853   (cp_cv_quals, cp_declarator *, bool);
854 static cp_parameter_declarator *make_parameter_declarator
855   (cp_decl_specifier_seq *, cp_declarator *, tree);
856 static cp_declarator *make_ptrmem_declarator
857   (cp_cv_quals, tree, cp_declarator *);
858
859 /* An erroneous declarator.  */
860 static cp_declarator *cp_error_declarator;
861
862 /* The obstack on which declarators and related data structures are
863    allocated.  */
864 static struct obstack declarator_obstack;
865
866 /* Alloc BYTES from the declarator memory pool.  */
867
868 static inline void *
869 alloc_declarator (size_t bytes)
870 {
871   return obstack_alloc (&declarator_obstack, bytes);
872 }
873
874 /* Allocate a declarator of the indicated KIND.  Clear fields that are
875    common to all declarators.  */
876
877 static cp_declarator *
878 make_declarator (cp_declarator_kind kind)
879 {
880   cp_declarator *declarator;
881
882   declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
883   declarator->kind = kind;
884   declarator->attributes = NULL_TREE;
885   declarator->declarator = NULL;
886   declarator->parameter_pack_p = false;
887
888   return declarator;
889 }
890
891 /* Make a declarator for a generalized identifier.  If
892    QUALIFYING_SCOPE is non-NULL, the identifier is
893    QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
894    UNQUALIFIED_NAME.  SFK indicates the kind of special function this
895    is, if any.   */
896
897 static cp_declarator *
898 make_id_declarator (tree qualifying_scope, tree unqualified_name,
899                     special_function_kind sfk)
900 {
901   cp_declarator *declarator;
902
903   /* It is valid to write:
904
905        class C { void f(); };
906        typedef C D;
907        void D::f();
908
909      The standard is not clear about whether `typedef const C D' is
910      legal; as of 2002-09-15 the committee is considering that
911      question.  EDG 3.0 allows that syntax.  Therefore, we do as
912      well.  */
913   if (qualifying_scope && TYPE_P (qualifying_scope))
914     qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
915
916   gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
917               || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
918               || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
919
920   declarator = make_declarator (cdk_id);
921   declarator->u.id.qualifying_scope = qualifying_scope;
922   declarator->u.id.unqualified_name = unqualified_name;
923   declarator->u.id.sfk = sfk;
924   
925   return declarator;
926 }
927
928 /* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
929    of modifiers such as const or volatile to apply to the pointer
930    type, represented as identifiers.  */
931
932 cp_declarator *
933 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
934 {
935   cp_declarator *declarator;
936
937   declarator = make_declarator (cdk_pointer);
938   declarator->declarator = target;
939   declarator->u.pointer.qualifiers = cv_qualifiers;
940   declarator->u.pointer.class_type = NULL_TREE;
941   if (target)
942     {
943       declarator->parameter_pack_p = target->parameter_pack_p;
944       target->parameter_pack_p = false;
945     }
946   else
947     declarator->parameter_pack_p = false;
948
949   return declarator;
950 }
951
952 /* Like make_pointer_declarator -- but for references.  */
953
954 cp_declarator *
955 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target,
956                            bool rvalue_ref)
957 {
958   cp_declarator *declarator;
959
960   declarator = make_declarator (cdk_reference);
961   declarator->declarator = target;
962   declarator->u.reference.qualifiers = cv_qualifiers;
963   declarator->u.reference.rvalue_ref = rvalue_ref;
964   if (target)
965     {
966       declarator->parameter_pack_p = target->parameter_pack_p;
967       target->parameter_pack_p = false;
968     }
969   else
970     declarator->parameter_pack_p = false;
971
972   return declarator;
973 }
974
975 /* Like make_pointer_declarator -- but for a pointer to a non-static
976    member of CLASS_TYPE.  */
977
978 cp_declarator *
979 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
980                         cp_declarator *pointee)
981 {
982   cp_declarator *declarator;
983
984   declarator = make_declarator (cdk_ptrmem);
985   declarator->declarator = pointee;
986   declarator->u.pointer.qualifiers = cv_qualifiers;
987   declarator->u.pointer.class_type = class_type;
988
989   if (pointee)
990     {
991       declarator->parameter_pack_p = pointee->parameter_pack_p;
992       pointee->parameter_pack_p = false;
993     }
994   else
995     declarator->parameter_pack_p = false;
996
997   return declarator;
998 }
999
1000 /* Make a declarator for the function given by TARGET, with the
1001    indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
1002    "const"-qualified member function.  The EXCEPTION_SPECIFICATION
1003    indicates what exceptions can be thrown.  */
1004
1005 cp_declarator *
1006 make_call_declarator (cp_declarator *target,
1007                       tree parms,
1008                       cp_cv_quals cv_qualifiers,
1009                       tree exception_specification,
1010                       tree late_return_type)
1011 {
1012   cp_declarator *declarator;
1013
1014   declarator = make_declarator (cdk_function);
1015   declarator->declarator = target;
1016   declarator->u.function.parameters = parms;
1017   declarator->u.function.qualifiers = cv_qualifiers;
1018   declarator->u.function.exception_specification = exception_specification;
1019   declarator->u.function.late_return_type = late_return_type;
1020   if (target)
1021     {
1022       declarator->parameter_pack_p = target->parameter_pack_p;
1023       target->parameter_pack_p = false;
1024     }
1025   else
1026     declarator->parameter_pack_p = false;
1027
1028   return declarator;
1029 }
1030
1031 /* Make a declarator for an array of BOUNDS elements, each of which is
1032    defined by ELEMENT.  */
1033
1034 cp_declarator *
1035 make_array_declarator (cp_declarator *element, tree bounds)
1036 {
1037   cp_declarator *declarator;
1038
1039   declarator = make_declarator (cdk_array);
1040   declarator->declarator = element;
1041   declarator->u.array.bounds = bounds;
1042   if (element)
1043     {
1044       declarator->parameter_pack_p = element->parameter_pack_p;
1045       element->parameter_pack_p = false;
1046     }
1047   else
1048     declarator->parameter_pack_p = false;
1049
1050   return declarator;
1051 }
1052
1053 /* Determine whether the declarator we've seen so far can be a
1054    parameter pack, when followed by an ellipsis.  */
1055 static bool 
1056 declarator_can_be_parameter_pack (cp_declarator *declarator)
1057 {
1058   /* Search for a declarator name, or any other declarator that goes
1059      after the point where the ellipsis could appear in a parameter
1060      pack. If we find any of these, then this declarator can not be
1061      made into a parameter pack.  */
1062   bool found = false;
1063   while (declarator && !found)
1064     {
1065       switch ((int)declarator->kind)
1066         {
1067         case cdk_id:
1068         case cdk_array:
1069           found = true;
1070           break;
1071
1072         case cdk_error:
1073           return true;
1074
1075         default:
1076           declarator = declarator->declarator;
1077           break;
1078         }
1079     }
1080
1081   return !found;
1082 }
1083
1084 cp_parameter_declarator *no_parameters;
1085
1086 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
1087    DECLARATOR and DEFAULT_ARGUMENT.  */
1088
1089 cp_parameter_declarator *
1090 make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
1091                            cp_declarator *declarator,
1092                            tree default_argument)
1093 {
1094   cp_parameter_declarator *parameter;
1095
1096   parameter = ((cp_parameter_declarator *)
1097                alloc_declarator (sizeof (cp_parameter_declarator)));
1098   parameter->next = NULL;
1099   if (decl_specifiers)
1100     parameter->decl_specifiers = *decl_specifiers;
1101   else
1102     clear_decl_specs (&parameter->decl_specifiers);
1103   parameter->declarator = declarator;
1104   parameter->default_argument = default_argument;
1105   parameter->ellipsis_p = false;
1106
1107   return parameter;
1108 }
1109
1110 /* Returns true iff DECLARATOR  is a declaration for a function.  */
1111
1112 static bool
1113 function_declarator_p (const cp_declarator *declarator)
1114 {
1115   while (declarator)
1116     {
1117       if (declarator->kind == cdk_function
1118           && declarator->declarator->kind == cdk_id)
1119         return true;
1120       if (declarator->kind == cdk_id
1121           || declarator->kind == cdk_error)
1122         return false;
1123       declarator = declarator->declarator;
1124     }
1125   return false;
1126 }
1127  
1128 /* The parser.  */
1129
1130 /* Overview
1131    --------
1132
1133    A cp_parser parses the token stream as specified by the C++
1134    grammar.  Its job is purely parsing, not semantic analysis.  For
1135    example, the parser breaks the token stream into declarators,
1136    expressions, statements, and other similar syntactic constructs.
1137    It does not check that the types of the expressions on either side
1138    of an assignment-statement are compatible, or that a function is
1139    not declared with a parameter of type `void'.
1140
1141    The parser invokes routines elsewhere in the compiler to perform
1142    semantic analysis and to build up the abstract syntax tree for the
1143    code processed.
1144
1145    The parser (and the template instantiation code, which is, in a
1146    way, a close relative of parsing) are the only parts of the
1147    compiler that should be calling push_scope and pop_scope, or
1148    related functions.  The parser (and template instantiation code)
1149    keeps track of what scope is presently active; everything else
1150    should simply honor that.  (The code that generates static
1151    initializers may also need to set the scope, in order to check
1152    access control correctly when emitting the initializers.)
1153
1154    Methodology
1155    -----------
1156
1157    The parser is of the standard recursive-descent variety.  Upcoming
1158    tokens in the token stream are examined in order to determine which
1159    production to use when parsing a non-terminal.  Some C++ constructs
1160    require arbitrary look ahead to disambiguate.  For example, it is
1161    impossible, in the general case, to tell whether a statement is an
1162    expression or declaration without scanning the entire statement.
1163    Therefore, the parser is capable of "parsing tentatively."  When the
1164    parser is not sure what construct comes next, it enters this mode.
1165    Then, while we attempt to parse the construct, the parser queues up
1166    error messages, rather than issuing them immediately, and saves the
1167    tokens it consumes.  If the construct is parsed successfully, the
1168    parser "commits", i.e., it issues any queued error messages and
1169    the tokens that were being preserved are permanently discarded.
1170    If, however, the construct is not parsed successfully, the parser
1171    rolls back its state completely so that it can resume parsing using
1172    a different alternative.
1173
1174    Future Improvements
1175    -------------------
1176
1177    The performance of the parser could probably be improved substantially.
1178    We could often eliminate the need to parse tentatively by looking ahead
1179    a little bit.  In some places, this approach might not entirely eliminate
1180    the need to parse tentatively, but it might still speed up the average
1181    case.  */
1182
1183 /* Flags that are passed to some parsing functions.  These values can
1184    be bitwise-ored together.  */
1185
1186 enum
1187 {
1188   /* No flags.  */
1189   CP_PARSER_FLAGS_NONE = 0x0,
1190   /* The construct is optional.  If it is not present, then no error
1191      should be issued.  */
1192   CP_PARSER_FLAGS_OPTIONAL = 0x1,
1193   /* When parsing a type-specifier, do not allow user-defined types.  */
1194   CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2
1195 };
1196
1197 /* This type is used for parameters and variables which hold
1198    combinations of the above flags.  */
1199 typedef int cp_parser_flags;
1200
1201 /* The different kinds of declarators we want to parse.  */
1202
1203 typedef enum cp_parser_declarator_kind
1204 {
1205   /* We want an abstract declarator.  */
1206   CP_PARSER_DECLARATOR_ABSTRACT,
1207   /* We want a named declarator.  */
1208   CP_PARSER_DECLARATOR_NAMED,
1209   /* We don't mind, but the name must be an unqualified-id.  */
1210   CP_PARSER_DECLARATOR_EITHER
1211 } cp_parser_declarator_kind;
1212
1213 /* The precedence values used to parse binary expressions.  The minimum value
1214    of PREC must be 1, because zero is reserved to quickly discriminate
1215    binary operators from other tokens.  */
1216
1217 enum cp_parser_prec
1218 {
1219   PREC_NOT_OPERATOR,
1220   PREC_LOGICAL_OR_EXPRESSION,
1221   PREC_LOGICAL_AND_EXPRESSION,
1222   PREC_INCLUSIVE_OR_EXPRESSION,
1223   PREC_EXCLUSIVE_OR_EXPRESSION,
1224   PREC_AND_EXPRESSION,
1225   PREC_EQUALITY_EXPRESSION,
1226   PREC_RELATIONAL_EXPRESSION,
1227   PREC_SHIFT_EXPRESSION,
1228   PREC_ADDITIVE_EXPRESSION,
1229   PREC_MULTIPLICATIVE_EXPRESSION,
1230   PREC_PM_EXPRESSION,
1231   NUM_PREC_VALUES = PREC_PM_EXPRESSION
1232 };
1233
1234 /* A mapping from a token type to a corresponding tree node type, with a
1235    precedence value.  */
1236
1237 typedef struct cp_parser_binary_operations_map_node
1238 {
1239   /* The token type.  */
1240   enum cpp_ttype token_type;
1241   /* The corresponding tree code.  */
1242   enum tree_code tree_type;
1243   /* The precedence of this operator.  */
1244   enum cp_parser_prec prec;
1245 } cp_parser_binary_operations_map_node;
1246
1247 /* The status of a tentative parse.  */
1248
1249 typedef enum cp_parser_status_kind
1250 {
1251   /* No errors have occurred.  */
1252   CP_PARSER_STATUS_KIND_NO_ERROR,
1253   /* An error has occurred.  */
1254   CP_PARSER_STATUS_KIND_ERROR,
1255   /* We are committed to this tentative parse, whether or not an error
1256      has occurred.  */
1257   CP_PARSER_STATUS_KIND_COMMITTED
1258 } cp_parser_status_kind;
1259
1260 typedef struct cp_parser_expression_stack_entry
1261 {
1262   /* Left hand side of the binary operation we are currently
1263      parsing.  */
1264   tree lhs;
1265   /* Original tree code for left hand side, if it was a binary
1266      expression itself (used for -Wparentheses).  */
1267   enum tree_code lhs_type;
1268   /* Tree code for the binary operation we are parsing.  */
1269   enum tree_code tree_type;
1270   /* Precedence of the binary operation we are parsing.  */
1271   enum cp_parser_prec prec;
1272 } cp_parser_expression_stack_entry;
1273
1274 /* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1275    entries because precedence levels on the stack are monotonically
1276    increasing.  */
1277 typedef struct cp_parser_expression_stack_entry
1278   cp_parser_expression_stack[NUM_PREC_VALUES];
1279
1280 /* Context that is saved and restored when parsing tentatively.  */
1281 typedef struct GTY (()) cp_parser_context {
1282   /* If this is a tentative parsing context, the status of the
1283      tentative parse.  */
1284   enum cp_parser_status_kind status;
1285   /* If non-NULL, we have just seen a `x->' or `x.' expression.  Names
1286      that are looked up in this context must be looked up both in the
1287      scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1288      the context of the containing expression.  */
1289   tree object_type;
1290
1291   /* The next parsing context in the stack.  */
1292   struct cp_parser_context *next;
1293 } cp_parser_context;
1294
1295 /* Prototypes.  */
1296
1297 /* Constructors and destructors.  */
1298
1299 static cp_parser_context *cp_parser_context_new
1300   (cp_parser_context *);
1301
1302 /* Class variables.  */
1303
1304 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1305
1306 /* The operator-precedence table used by cp_parser_binary_expression.
1307    Transformed into an associative array (binops_by_token) by
1308    cp_parser_new.  */
1309
1310 static const cp_parser_binary_operations_map_node binops[] = {
1311   { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1312   { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1313
1314   { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1315   { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1316   { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1317
1318   { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1319   { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1320
1321   { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1322   { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1323
1324   { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1325   { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1326   { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1327   { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1328
1329   { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1330   { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1331
1332   { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1333
1334   { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1335
1336   { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1337
1338   { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1339
1340   { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1341 };
1342
1343 /* The same as binops, but initialized by cp_parser_new so that
1344    binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1345    for speed.  */
1346 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1347
1348 /* Constructors and destructors.  */
1349
1350 /* Construct a new context.  The context below this one on the stack
1351    is given by NEXT.  */
1352
1353 static cp_parser_context *
1354 cp_parser_context_new (cp_parser_context* next)
1355 {
1356   cp_parser_context *context;
1357
1358   /* Allocate the storage.  */
1359   if (cp_parser_context_free_list != NULL)
1360     {
1361       /* Pull the first entry from the free list.  */
1362       context = cp_parser_context_free_list;
1363       cp_parser_context_free_list = context->next;
1364       memset (context, 0, sizeof (*context));
1365     }
1366   else
1367     context = GGC_CNEW (cp_parser_context);
1368
1369   /* No errors have occurred yet in this context.  */
1370   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1371   /* If this is not the bottommost context, copy information that we
1372      need from the previous context.  */
1373   if (next)
1374     {
1375       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1376          expression, then we are parsing one in this context, too.  */
1377       context->object_type = next->object_type;
1378       /* Thread the stack.  */
1379       context->next = next;
1380     }
1381
1382   return context;
1383 }
1384
1385 /* The cp_parser structure represents the C++ parser.  */
1386
1387 typedef struct GTY(()) cp_parser {
1388   /* The lexer from which we are obtaining tokens.  */
1389   cp_lexer *lexer;
1390
1391   /* The scope in which names should be looked up.  If NULL_TREE, then
1392      we look up names in the scope that is currently open in the
1393      source program.  If non-NULL, this is either a TYPE or
1394      NAMESPACE_DECL for the scope in which we should look.  It can
1395      also be ERROR_MARK, when we've parsed a bogus scope.
1396
1397      This value is not cleared automatically after a name is looked
1398      up, so we must be careful to clear it before starting a new look
1399      up sequence.  (If it is not cleared, then `X::Y' followed by `Z'
1400      will look up `Z' in the scope of `X', rather than the current
1401      scope.)  Unfortunately, it is difficult to tell when name lookup
1402      is complete, because we sometimes peek at a token, look it up,
1403      and then decide not to consume it.   */
1404   tree scope;
1405
1406   /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1407      last lookup took place.  OBJECT_SCOPE is used if an expression
1408      like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1409      respectively.  QUALIFYING_SCOPE is used for an expression of the
1410      form "X::Y"; it refers to X.  */
1411   tree object_scope;
1412   tree qualifying_scope;
1413
1414   /* A stack of parsing contexts.  All but the bottom entry on the
1415      stack will be tentative contexts.
1416
1417      We parse tentatively in order to determine which construct is in
1418      use in some situations.  For example, in order to determine
1419      whether a statement is an expression-statement or a
1420      declaration-statement we parse it tentatively as a
1421      declaration-statement.  If that fails, we then reparse the same
1422      token stream as an expression-statement.  */
1423   cp_parser_context *context;
1424
1425   /* True if we are parsing GNU C++.  If this flag is not set, then
1426      GNU extensions are not recognized.  */
1427   bool allow_gnu_extensions_p;
1428
1429   /* TRUE if the `>' token should be interpreted as the greater-than
1430      operator.  FALSE if it is the end of a template-id or
1431      template-parameter-list. In C++0x mode, this flag also applies to
1432      `>>' tokens, which are viewed as two consecutive `>' tokens when
1433      this flag is FALSE.  */
1434   bool greater_than_is_operator_p;
1435
1436   /* TRUE if default arguments are allowed within a parameter list
1437      that starts at this point. FALSE if only a gnu extension makes
1438      them permissible.  */
1439   bool default_arg_ok_p;
1440
1441   /* TRUE if we are parsing an integral constant-expression.  See
1442      [expr.const] for a precise definition.  */
1443   bool integral_constant_expression_p;
1444
1445   /* TRUE if we are parsing an integral constant-expression -- but a
1446      non-constant expression should be permitted as well.  This flag
1447      is used when parsing an array bound so that GNU variable-length
1448      arrays are tolerated.  */
1449   bool allow_non_integral_constant_expression_p;
1450
1451   /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1452      been seen that makes the expression non-constant.  */
1453   bool non_integral_constant_expression_p;
1454
1455   /* TRUE if local variable names and `this' are forbidden in the
1456      current context.  */
1457   bool local_variables_forbidden_p;
1458
1459   /* TRUE if the declaration we are parsing is part of a
1460      linkage-specification of the form `extern string-literal
1461      declaration'.  */
1462   bool in_unbraced_linkage_specification_p;
1463
1464   /* TRUE if we are presently parsing a declarator, after the
1465      direct-declarator.  */
1466   bool in_declarator_p;
1467
1468   /* TRUE if we are presently parsing a template-argument-list.  */
1469   bool in_template_argument_list_p;
1470
1471   /* Set to IN_ITERATION_STMT if parsing an iteration-statement,
1472      to IN_OMP_BLOCK if parsing OpenMP structured block and
1473      IN_OMP_FOR if parsing OpenMP loop.  If parsing a switch statement,
1474      this is bitwise ORed with IN_SWITCH_STMT, unless parsing an
1475      iteration-statement, OpenMP block or loop within that switch.  */
1476 #define IN_SWITCH_STMT          1
1477 #define IN_ITERATION_STMT       2
1478 #define IN_OMP_BLOCK            4
1479 #define IN_OMP_FOR              8
1480 #define IN_IF_STMT             16
1481   unsigned char in_statement;
1482
1483   /* TRUE if we are presently parsing the body of a switch statement.
1484      Note that this doesn't quite overlap with in_statement above.
1485      The difference relates to giving the right sets of error messages:
1486      "case not in switch" vs "break statement used with OpenMP...".  */
1487   bool in_switch_statement_p;
1488
1489   /* TRUE if we are parsing a type-id in an expression context.  In
1490      such a situation, both "type (expr)" and "type (type)" are valid
1491      alternatives.  */
1492   bool in_type_id_in_expr_p;
1493
1494   /* TRUE if we are currently in a header file where declarations are
1495      implicitly extern "C".  */
1496   bool implicit_extern_c;
1497
1498   /* TRUE if strings in expressions should be translated to the execution
1499      character set.  */
1500   bool translate_strings_p;
1501
1502   /* TRUE if we are presently parsing the body of a function, but not
1503      a local class.  */
1504   bool in_function_body;
1505
1506   /* If non-NULL, then we are parsing a construct where new type
1507      definitions are not permitted.  The string stored here will be
1508      issued as an error message if a type is defined.  */
1509   const char *type_definition_forbidden_message;
1510
1511   /* A list of lists. The outer list is a stack, used for member
1512      functions of local classes. At each level there are two sub-list,
1513      one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1514      sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1515      TREE_VALUE's. The functions are chained in reverse declaration
1516      order.
1517
1518      The TREE_PURPOSE sublist contains those functions with default
1519      arguments that need post processing, and the TREE_VALUE sublist
1520      contains those functions with definitions that need post
1521      processing.
1522
1523      These lists can only be processed once the outermost class being
1524      defined is complete.  */
1525   tree unparsed_functions_queues;
1526
1527   /* The number of classes whose definitions are currently in
1528      progress.  */
1529   unsigned num_classes_being_defined;
1530
1531   /* The number of template parameter lists that apply directly to the
1532      current declaration.  */
1533   unsigned num_template_parameter_lists;
1534 } cp_parser;
1535
1536 /* Prototypes.  */
1537
1538 /* Constructors and destructors.  */
1539
1540 static cp_parser *cp_parser_new
1541   (void);
1542
1543 /* Routines to parse various constructs.
1544
1545    Those that return `tree' will return the error_mark_node (rather
1546    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1547    Sometimes, they will return an ordinary node if error-recovery was
1548    attempted, even though a parse error occurred.  So, to check
1549    whether or not a parse error occurred, you should always use
1550    cp_parser_error_occurred.  If the construct is optional (indicated
1551    either by an `_opt' in the name of the function that does the
1552    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1553    the construct is not present.  */
1554
1555 /* Lexical conventions [gram.lex]  */
1556
1557 static tree cp_parser_identifier
1558   (cp_parser *);
1559 static tree cp_parser_string_literal
1560   (cp_parser *, bool, bool);
1561
1562 /* Basic concepts [gram.basic]  */
1563
1564 static bool cp_parser_translation_unit
1565   (cp_parser *);
1566
1567 /* Expressions [gram.expr]  */
1568
1569 static tree cp_parser_primary_expression
1570   (cp_parser *, bool, bool, bool, cp_id_kind *);
1571 static tree cp_parser_id_expression
1572   (cp_parser *, bool, bool, bool *, bool, bool);
1573 static tree cp_parser_unqualified_id
1574   (cp_parser *, bool, bool, bool, bool);
1575 static tree cp_parser_nested_name_specifier_opt
1576   (cp_parser *, bool, bool, bool, bool);
1577 static tree cp_parser_nested_name_specifier
1578   (cp_parser *, bool, bool, bool, bool);
1579 static tree cp_parser_qualifying_entity
1580   (cp_parser *, bool, bool, bool, bool, bool);
1581 static tree cp_parser_postfix_expression
1582   (cp_parser *, bool, bool, bool, cp_id_kind *);
1583 static tree cp_parser_postfix_open_square_expression
1584   (cp_parser *, tree, bool);
1585 static tree cp_parser_postfix_dot_deref_expression
1586   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *, location_t);
1587 static VEC(tree,gc) *cp_parser_parenthesized_expression_list
1588   (cp_parser *, bool, bool, bool, bool *);
1589 static void cp_parser_pseudo_destructor_name
1590   (cp_parser *, tree *, tree *);
1591 static tree cp_parser_unary_expression
1592   (cp_parser *, bool, bool, cp_id_kind *);
1593 static enum tree_code cp_parser_unary_operator
1594   (cp_token *);
1595 static tree cp_parser_new_expression
1596   (cp_parser *);
1597 static VEC(tree,gc) *cp_parser_new_placement
1598   (cp_parser *);
1599 static tree cp_parser_new_type_id
1600   (cp_parser *, tree *);
1601 static cp_declarator *cp_parser_new_declarator_opt
1602   (cp_parser *);
1603 static cp_declarator *cp_parser_direct_new_declarator
1604   (cp_parser *);
1605 static VEC(tree,gc) *cp_parser_new_initializer
1606   (cp_parser *);
1607 static tree cp_parser_delete_expression
1608   (cp_parser *);
1609 static tree cp_parser_cast_expression
1610   (cp_parser *, bool, bool, cp_id_kind *);
1611 static tree cp_parser_binary_expression
1612   (cp_parser *, bool, bool, enum cp_parser_prec, cp_id_kind *);
1613 static tree cp_parser_question_colon_clause
1614   (cp_parser *, tree);
1615 static tree cp_parser_assignment_expression
1616   (cp_parser *, bool, cp_id_kind *);
1617 static enum tree_code cp_parser_assignment_operator_opt
1618   (cp_parser *);
1619 static tree cp_parser_expression
1620   (cp_parser *, bool, cp_id_kind *);
1621 static tree cp_parser_constant_expression
1622   (cp_parser *, bool, bool *);
1623 static tree cp_parser_builtin_offsetof
1624   (cp_parser *);
1625
1626 /* Statements [gram.stmt.stmt]  */
1627
1628 static void cp_parser_statement
1629   (cp_parser *, tree, bool, bool *);
1630 static void cp_parser_label_for_labeled_statement
1631   (cp_parser *);
1632 static tree cp_parser_expression_statement
1633   (cp_parser *, tree);
1634 static tree cp_parser_compound_statement
1635   (cp_parser *, tree, bool);
1636 static void cp_parser_statement_seq_opt
1637   (cp_parser *, tree);
1638 static tree cp_parser_selection_statement
1639   (cp_parser *, bool *);
1640 static tree cp_parser_condition
1641   (cp_parser *);
1642 static tree cp_parser_iteration_statement
1643   (cp_parser *);
1644 static void cp_parser_for_init_statement
1645   (cp_parser *);
1646 static tree cp_parser_jump_statement
1647   (cp_parser *);
1648 static void cp_parser_declaration_statement
1649   (cp_parser *);
1650
1651 static tree cp_parser_implicitly_scoped_statement
1652   (cp_parser *, bool *);
1653 static void cp_parser_already_scoped_statement
1654   (cp_parser *);
1655
1656 /* Declarations [gram.dcl.dcl] */
1657
1658 static void cp_parser_declaration_seq_opt
1659   (cp_parser *);
1660 static void cp_parser_declaration
1661   (cp_parser *);
1662 static void cp_parser_block_declaration
1663   (cp_parser *, bool);
1664 static void cp_parser_simple_declaration
1665   (cp_parser *, bool);
1666 static void cp_parser_decl_specifier_seq
1667   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1668 static tree cp_parser_storage_class_specifier_opt
1669   (cp_parser *);
1670 static tree cp_parser_function_specifier_opt
1671   (cp_parser *, cp_decl_specifier_seq *);
1672 static tree cp_parser_type_specifier
1673   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1674    int *, bool *);
1675 static tree cp_parser_simple_type_specifier
1676   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1677 static tree cp_parser_type_name
1678   (cp_parser *);
1679 static tree cp_parser_nonclass_name 
1680   (cp_parser* parser);
1681 static tree cp_parser_elaborated_type_specifier
1682   (cp_parser *, bool, bool);
1683 static tree cp_parser_enum_specifier
1684   (cp_parser *);
1685 static void cp_parser_enumerator_list
1686   (cp_parser *, tree);
1687 static void cp_parser_enumerator_definition
1688   (cp_parser *, tree);
1689 static tree cp_parser_namespace_name
1690   (cp_parser *);
1691 static void cp_parser_namespace_definition
1692   (cp_parser *);
1693 static void cp_parser_namespace_body
1694   (cp_parser *);
1695 static tree cp_parser_qualified_namespace_specifier
1696   (cp_parser *);
1697 static void cp_parser_namespace_alias_definition
1698   (cp_parser *);
1699 static bool cp_parser_using_declaration
1700   (cp_parser *, bool);
1701 static void cp_parser_using_directive
1702   (cp_parser *);
1703 static void cp_parser_asm_definition
1704   (cp_parser *);
1705 static void cp_parser_linkage_specification
1706   (cp_parser *);
1707 static void cp_parser_static_assert
1708   (cp_parser *, bool);
1709 static tree cp_parser_decltype
1710   (cp_parser *);
1711
1712 /* Declarators [gram.dcl.decl] */
1713
1714 static tree cp_parser_init_declarator
1715   (cp_parser *, cp_decl_specifier_seq *, VEC (deferred_access_check,gc)*, bool, bool, int, bool *);
1716 static cp_declarator *cp_parser_declarator
1717   (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1718 static cp_declarator *cp_parser_direct_declarator
1719   (cp_parser *, cp_parser_declarator_kind, int *, bool);
1720 static enum tree_code cp_parser_ptr_operator
1721   (cp_parser *, tree *, cp_cv_quals *);
1722 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1723   (cp_parser *);
1724 static tree cp_parser_late_return_type_opt
1725   (cp_parser *);
1726 static tree cp_parser_declarator_id
1727   (cp_parser *, bool);
1728 static tree cp_parser_type_id
1729   (cp_parser *);
1730 static tree cp_parser_template_type_arg
1731   (cp_parser *);
1732 static tree cp_parser_type_id_1
1733   (cp_parser *, bool);
1734 static void cp_parser_type_specifier_seq
1735   (cp_parser *, bool, cp_decl_specifier_seq *);
1736 static tree cp_parser_parameter_declaration_clause
1737   (cp_parser *);
1738 static tree cp_parser_parameter_declaration_list
1739   (cp_parser *, bool *);
1740 static cp_parameter_declarator *cp_parser_parameter_declaration
1741   (cp_parser *, bool, bool *);
1742 static tree cp_parser_default_argument 
1743   (cp_parser *, bool);
1744 static void cp_parser_function_body
1745   (cp_parser *);
1746 static tree cp_parser_initializer
1747   (cp_parser *, bool *, bool *);
1748 static tree cp_parser_initializer_clause
1749   (cp_parser *, bool *);
1750 static tree cp_parser_braced_list
1751   (cp_parser*, bool*);
1752 static VEC(constructor_elt,gc) *cp_parser_initializer_list
1753   (cp_parser *, bool *);
1754
1755 static bool cp_parser_ctor_initializer_opt_and_function_body
1756   (cp_parser *);
1757
1758 /* Classes [gram.class] */
1759
1760 static tree cp_parser_class_name
1761   (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
1762 static tree cp_parser_class_specifier
1763   (cp_parser *);
1764 static tree cp_parser_class_head
1765   (cp_parser *, bool *, tree *, tree *);
1766 static enum tag_types cp_parser_class_key
1767   (cp_parser *);
1768 static void cp_parser_member_specification_opt
1769   (cp_parser *);
1770 static void cp_parser_member_declaration
1771   (cp_parser *);
1772 static tree cp_parser_pure_specifier
1773   (cp_parser *);
1774 static tree cp_parser_constant_initializer
1775   (cp_parser *);
1776
1777 /* Derived classes [gram.class.derived] */
1778
1779 static tree cp_parser_base_clause
1780   (cp_parser *);
1781 static tree cp_parser_base_specifier
1782   (cp_parser *);
1783
1784 /* Special member functions [gram.special] */
1785
1786 static tree cp_parser_conversion_function_id
1787   (cp_parser *);
1788 static tree cp_parser_conversion_type_id
1789   (cp_parser *);
1790 static cp_declarator *cp_parser_conversion_declarator_opt
1791   (cp_parser *);
1792 static bool cp_parser_ctor_initializer_opt
1793   (cp_parser *);
1794 static void cp_parser_mem_initializer_list
1795   (cp_parser *);
1796 static tree cp_parser_mem_initializer
1797   (cp_parser *);
1798 static tree cp_parser_mem_initializer_id
1799   (cp_parser *);
1800
1801 /* Overloading [gram.over] */
1802
1803 static tree cp_parser_operator_function_id
1804   (cp_parser *);
1805 static tree cp_parser_operator
1806   (cp_parser *);
1807
1808 /* Templates [gram.temp] */
1809
1810 static void cp_parser_template_declaration
1811   (cp_parser *, bool);
1812 static tree cp_parser_template_parameter_list
1813   (cp_parser *);
1814 static tree cp_parser_template_parameter
1815   (cp_parser *, bool *, bool *);
1816 static tree cp_parser_type_parameter
1817   (cp_parser *, bool *);
1818 static tree cp_parser_template_id
1819   (cp_parser *, bool, bool, bool);
1820 static tree cp_parser_template_name
1821   (cp_parser *, bool, bool, bool, bool *);
1822 static tree cp_parser_template_argument_list
1823   (cp_parser *);
1824 static tree cp_parser_template_argument
1825   (cp_parser *);
1826 static void cp_parser_explicit_instantiation
1827   (cp_parser *);
1828 static void cp_parser_explicit_specialization
1829   (cp_parser *);
1830
1831 /* Exception handling [gram.exception] */
1832
1833 static tree cp_parser_try_block
1834   (cp_parser *);
1835 static bool cp_parser_function_try_block
1836   (cp_parser *);
1837 static void cp_parser_handler_seq
1838   (cp_parser *);
1839 static void cp_parser_handler
1840   (cp_parser *);
1841 static tree cp_parser_exception_declaration
1842   (cp_parser *);
1843 static tree cp_parser_throw_expression
1844   (cp_parser *);
1845 static tree cp_parser_exception_specification_opt
1846   (cp_parser *);
1847 static tree cp_parser_type_id_list
1848   (cp_parser *);
1849
1850 /* GNU Extensions */
1851
1852 static tree cp_parser_asm_specification_opt
1853   (cp_parser *);
1854 static tree cp_parser_asm_operand_list
1855   (cp_parser *);
1856 static tree cp_parser_asm_clobber_list
1857   (cp_parser *);
1858 static tree cp_parser_attributes_opt
1859   (cp_parser *);
1860 static tree cp_parser_attribute_list
1861   (cp_parser *);
1862 static bool cp_parser_extension_opt
1863   (cp_parser *, int *);
1864 static void cp_parser_label_declaration
1865   (cp_parser *);
1866
1867 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1868 static bool cp_parser_pragma
1869   (cp_parser *, enum pragma_context);
1870
1871 /* Objective-C++ Productions */
1872
1873 static tree cp_parser_objc_message_receiver
1874   (cp_parser *);
1875 static tree cp_parser_objc_message_args
1876   (cp_parser *);
1877 static tree cp_parser_objc_message_expression
1878   (cp_parser *);
1879 static tree cp_parser_objc_encode_expression
1880   (cp_parser *);
1881 static tree cp_parser_objc_defs_expression
1882   (cp_parser *);
1883 static tree cp_parser_objc_protocol_expression
1884   (cp_parser *);
1885 static tree cp_parser_objc_selector_expression
1886   (cp_parser *);
1887 static tree cp_parser_objc_expression
1888   (cp_parser *);
1889 static bool cp_parser_objc_selector_p
1890   (enum cpp_ttype);
1891 static tree cp_parser_objc_selector
1892   (cp_parser *);
1893 static tree cp_parser_objc_protocol_refs_opt
1894   (cp_parser *);
1895 static void cp_parser_objc_declaration
1896   (cp_parser *);
1897 static tree cp_parser_objc_statement
1898   (cp_parser *);
1899
1900 /* Utility Routines */
1901
1902 static tree cp_parser_lookup_name
1903   (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *, location_t);
1904 static tree cp_parser_lookup_name_simple
1905   (cp_parser *, tree, location_t);
1906 static tree cp_parser_maybe_treat_template_as_class
1907   (tree, bool);
1908 static bool cp_parser_check_declarator_template_parameters
1909   (cp_parser *, cp_declarator *, location_t);
1910 static bool cp_parser_check_template_parameters
1911   (cp_parser *, unsigned, location_t, cp_declarator *);
1912 static tree cp_parser_simple_cast_expression
1913   (cp_parser *);
1914 static tree cp_parser_global_scope_opt
1915   (cp_parser *, bool);
1916 static bool cp_parser_constructor_declarator_p
1917   (cp_parser *, bool);
1918 static tree cp_parser_function_definition_from_specifiers_and_declarator
1919   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1920 static tree cp_parser_function_definition_after_declarator
1921   (cp_parser *, bool);
1922 static void cp_parser_template_declaration_after_export
1923   (cp_parser *, bool);
1924 static void cp_parser_perform_template_parameter_access_checks
1925   (VEC (deferred_access_check,gc)*);
1926 static tree cp_parser_single_declaration
1927   (cp_parser *, VEC (deferred_access_check,gc)*, bool, bool, bool *);
1928 static tree cp_parser_functional_cast
1929   (cp_parser *, tree);
1930 static tree cp_parser_save_member_function_body
1931   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1932 static tree cp_parser_enclosed_template_argument_list
1933   (cp_parser *);
1934 static void cp_parser_save_default_args
1935   (cp_parser *, tree);
1936 static void cp_parser_late_parsing_for_member
1937   (cp_parser *, tree);
1938 static void cp_parser_late_parsing_default_args
1939   (cp_parser *, tree);
1940 static tree cp_parser_sizeof_operand
1941   (cp_parser *, enum rid);
1942 static tree cp_parser_trait_expr
1943   (cp_parser *, enum rid);
1944 static bool cp_parser_declares_only_class_p
1945   (cp_parser *);
1946 static void cp_parser_set_storage_class
1947   (cp_parser *, cp_decl_specifier_seq *, enum rid, location_t);
1948 static void cp_parser_set_decl_spec_type
1949   (cp_decl_specifier_seq *, tree, location_t, bool);
1950 static bool cp_parser_friend_p
1951   (const cp_decl_specifier_seq *);
1952 static cp_token *cp_parser_require
1953   (cp_parser *, enum cpp_ttype, const char *);
1954 static cp_token *cp_parser_require_keyword
1955   (cp_parser *, enum rid, const char *);
1956 static bool cp_parser_token_starts_function_definition_p
1957   (cp_token *);
1958 static bool cp_parser_next_token_starts_class_definition_p
1959   (cp_parser *);
1960 static bool cp_parser_next_token_ends_template_argument_p
1961   (cp_parser *);
1962 static bool cp_parser_nth_token_starts_template_argument_list_p
1963   (cp_parser *, size_t);
1964 static enum tag_types cp_parser_token_is_class_key
1965   (cp_token *);
1966 static void cp_parser_check_class_key
1967   (enum tag_types, tree type);
1968 static void cp_parser_check_access_in_redeclaration
1969   (tree type, location_t location);
1970 static bool cp_parser_optional_template_keyword
1971   (cp_parser *);
1972 static void cp_parser_pre_parsed_nested_name_specifier
1973   (cp_parser *);
1974 static bool cp_parser_cache_group
1975   (cp_parser *, enum cpp_ttype, unsigned);
1976 static void cp_parser_parse_tentatively
1977   (cp_parser *);
1978 static void cp_parser_commit_to_tentative_parse
1979   (cp_parser *);
1980 static void cp_parser_abort_tentative_parse
1981   (cp_parser *);
1982 static bool cp_parser_parse_definitely
1983   (cp_parser *);
1984 static inline bool cp_parser_parsing_tentatively
1985   (cp_parser *);
1986 static bool cp_parser_uncommitted_to_tentative_parse_p
1987   (cp_parser *);
1988 static void cp_parser_error
1989   (cp_parser *, const char *);
1990 static void cp_parser_name_lookup_error
1991   (cp_parser *, tree, tree, const char *, location_t);
1992 static bool cp_parser_simulate_error
1993   (cp_parser *);
1994 static bool cp_parser_check_type_definition
1995   (cp_parser *);
1996 static void cp_parser_check_for_definition_in_return_type
1997   (cp_declarator *, tree, location_t type_location);
1998 static void cp_parser_check_for_invalid_template_id
1999   (cp_parser *, tree, location_t location);
2000 static bool cp_parser_non_integral_constant_expression
2001   (cp_parser *, const char *);
2002 static void cp_parser_diagnose_invalid_type_name
2003   (cp_parser *, tree, tree, location_t);
2004 static bool cp_parser_parse_and_diagnose_invalid_type_name
2005   (cp_parser *);
2006 static int cp_parser_skip_to_closing_parenthesis
2007   (cp_parser *, bool, bool, bool);
2008 static void cp_parser_skip_to_end_of_statement
2009   (cp_parser *);
2010 static void cp_parser_consume_semicolon_at_end_of_statement
2011   (cp_parser *);
2012 static void cp_parser_skip_to_end_of_block_or_statement
2013   (cp_parser *);
2014 static bool cp_parser_skip_to_closing_brace
2015   (cp_parser *);
2016 static void cp_parser_skip_to_end_of_template_parameter_list
2017   (cp_parser *);
2018 static void cp_parser_skip_to_pragma_eol
2019   (cp_parser*, cp_token *);
2020 static bool cp_parser_error_occurred
2021   (cp_parser *);
2022 static bool cp_parser_allow_gnu_extensions_p
2023   (cp_parser *);
2024 static bool cp_parser_is_string_literal
2025   (cp_token *);
2026 static bool cp_parser_is_keyword
2027   (cp_token *, enum rid);
2028 static tree cp_parser_make_typename_type
2029   (cp_parser *, tree, tree, location_t location);
2030 static cp_declarator * cp_parser_make_indirect_declarator
2031   (enum tree_code, tree, cp_cv_quals, cp_declarator *);
2032
2033 /* Returns nonzero if we are parsing tentatively.  */
2034
2035 static inline bool
2036 cp_parser_parsing_tentatively (cp_parser* parser)
2037 {
2038   return parser->context->next != NULL;
2039 }
2040
2041 /* Returns nonzero if TOKEN is a string literal.  */
2042
2043 static bool
2044 cp_parser_is_string_literal (cp_token* token)
2045 {
2046   return (token->type == CPP_STRING ||
2047           token->type == CPP_STRING16 ||
2048           token->type == CPP_STRING32 ||
2049           token->type == CPP_WSTRING);
2050 }
2051
2052 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
2053
2054 static bool
2055 cp_parser_is_keyword (cp_token* token, enum rid keyword)
2056 {
2057   return token->keyword == keyword;
2058 }
2059
2060 /* If not parsing tentatively, issue a diagnostic of the form
2061       FILE:LINE: MESSAGE before TOKEN
2062    where TOKEN is the next token in the input stream.  MESSAGE
2063    (specified by the caller) is usually of the form "expected
2064    OTHER-TOKEN".  */
2065
2066 static void
2067 cp_parser_error (cp_parser* parser, const char* message)
2068 {
2069   if (!cp_parser_simulate_error (parser))
2070     {
2071       cp_token *token = cp_lexer_peek_token (parser->lexer);
2072       /* This diagnostic makes more sense if it is tagged to the line
2073          of the token we just peeked at.  */
2074       cp_lexer_set_source_position_from_token (token);
2075
2076       if (token->type == CPP_PRAGMA)
2077         {
2078           error ("%H%<#pragma%> is not allowed here", &token->location);
2079           cp_parser_skip_to_pragma_eol (parser, token);
2080           return;
2081         }
2082
2083       c_parse_error (message,
2084                      /* Because c_parser_error does not understand
2085                         CPP_KEYWORD, keywords are treated like
2086                         identifiers.  */
2087                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
2088                      token->u.value, token->flags);
2089     }
2090 }
2091
2092 /* Issue an error about name-lookup failing.  NAME is the
2093    IDENTIFIER_NODE DECL is the result of
2094    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
2095    the thing that we hoped to find.  */
2096
2097 static void
2098 cp_parser_name_lookup_error (cp_parser* parser,
2099                              tree name,
2100                              tree decl,
2101                              const char* desired,
2102                              location_t location)
2103 {
2104   /* If name lookup completely failed, tell the user that NAME was not
2105      declared.  */
2106   if (decl == error_mark_node)
2107     {
2108       if (parser->scope && parser->scope != global_namespace)
2109         error ("%H%<%E::%E%> has not been declared",
2110                &location, parser->scope, name);
2111       else if (parser->scope == global_namespace)
2112         error ("%H%<::%E%> has not been declared", &location, name);
2113       else if (parser->object_scope
2114                && !CLASS_TYPE_P (parser->object_scope))
2115         error ("%Hrequest for member %qE in non-class type %qT",
2116                &location, name, parser->object_scope);
2117       else if (parser->object_scope)
2118         error ("%H%<%T::%E%> has not been declared",
2119                &location, parser->object_scope, name);
2120       else
2121         error ("%H%qE has not been declared", &location, name);
2122     }
2123   else if (parser->scope && parser->scope != global_namespace)
2124     error ("%H%<%E::%E%> %s", &location, parser->scope, name, desired);
2125   else if (parser->scope == global_namespace)
2126     error ("%H%<::%E%> %s", &location, name, desired);
2127   else
2128     error ("%H%qE %s", &location, name, desired);
2129 }
2130
2131 /* If we are parsing tentatively, remember that an error has occurred
2132    during this tentative parse.  Returns true if the error was
2133    simulated; false if a message should be issued by the caller.  */
2134
2135 static bool
2136 cp_parser_simulate_error (cp_parser* parser)
2137 {
2138   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2139     {
2140       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2141       return true;
2142     }
2143   return false;
2144 }
2145
2146 /* Check for repeated decl-specifiers.  */
2147
2148 static void
2149 cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs,
2150                            location_t location)
2151 {
2152   int ds;
2153
2154   for (ds = ds_first; ds != ds_last; ++ds)
2155     {
2156       unsigned count = decl_specs->specs[ds];
2157       if (count < 2)
2158         continue;
2159       /* The "long" specifier is a special case because of "long long".  */
2160       if (ds == ds_long)
2161         {
2162           if (count > 2)
2163             error ("%H%<long long long%> is too long for GCC", &location);
2164           else 
2165             pedwarn_cxx98 (location, OPT_Wlong_long, 
2166                            "ISO C++ 1998 does not support %<long long%>");
2167         }
2168       else if (count > 1)
2169         {
2170           static const char *const decl_spec_names[] = {
2171             "signed",
2172             "unsigned",
2173             "short",
2174             "long",
2175             "const",
2176             "volatile",
2177             "restrict",
2178             "inline",
2179             "virtual",
2180             "explicit",
2181             "friend",
2182             "typedef",
2183             "__complex",
2184             "__thread"
2185           };
2186           error ("%Hduplicate %qs", &location, decl_spec_names[ds]);
2187         }
2188     }
2189 }
2190
2191 /* This function is called when a type is defined.  If type
2192    definitions are forbidden at this point, an error message is
2193    issued.  */
2194
2195 static bool
2196 cp_parser_check_type_definition (cp_parser* parser)
2197 {
2198   /* If types are forbidden here, issue a message.  */
2199   if (parser->type_definition_forbidden_message)
2200     {
2201       /* Don't use `%s' to print the string, because quotations (`%<', `%>')
2202          in the message need to be interpreted.  */
2203       error (parser->type_definition_forbidden_message);
2204       return false;
2205     }
2206   return true;
2207 }
2208
2209 /* This function is called when the DECLARATOR is processed.  The TYPE
2210    was a type defined in the decl-specifiers.  If it is invalid to
2211    define a type in the decl-specifiers for DECLARATOR, an error is
2212    issued. TYPE_LOCATION is the location of TYPE and is used
2213    for error reporting.  */
2214
2215 static void
2216 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2217                                                tree type, location_t type_location)
2218 {
2219   /* [dcl.fct] forbids type definitions in return types.
2220      Unfortunately, it's not easy to know whether or not we are
2221      processing a return type until after the fact.  */
2222   while (declarator
2223          && (declarator->kind == cdk_pointer
2224              || declarator->kind == cdk_reference
2225              || declarator->kind == cdk_ptrmem))
2226     declarator = declarator->declarator;
2227   if (declarator
2228       && declarator->kind == cdk_function)
2229     {
2230       error ("%Hnew types may not be defined in a return type", &type_location);
2231       inform (type_location, 
2232               "(perhaps a semicolon is missing after the definition of %qT)",
2233               type);
2234     }
2235 }
2236
2237 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2238    "<" in any valid C++ program.  If the next token is indeed "<",
2239    issue a message warning the user about what appears to be an
2240    invalid attempt to form a template-id. LOCATION is the location
2241    of the type-specifier (TYPE) */
2242
2243 static void
2244 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2245                                          tree type, location_t location)
2246 {
2247   cp_token_position start = 0;
2248
2249   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2250     {
2251       if (TYPE_P (type))
2252         error ("%H%qT is not a template", &location, type);
2253       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2254         error ("%H%qE is not a template", &location, type);
2255       else
2256         error ("%Hinvalid template-id", &location);
2257       /* Remember the location of the invalid "<".  */
2258       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2259         start = cp_lexer_token_position (parser->lexer, true);
2260       /* Consume the "<".  */
2261       cp_lexer_consume_token (parser->lexer);
2262       /* Parse the template arguments.  */
2263       cp_parser_enclosed_template_argument_list (parser);
2264       /* Permanently remove the invalid template arguments so that
2265          this error message is not issued again.  */
2266       if (start)
2267         cp_lexer_purge_tokens_after (parser->lexer, start);
2268     }
2269 }
2270
2271 /* If parsing an integral constant-expression, issue an error message
2272    about the fact that THING appeared and return true.  Otherwise,
2273    return false.  In either case, set
2274    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2275
2276 static bool
2277 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2278                                             const char *thing)
2279 {
2280   parser->non_integral_constant_expression_p = true;
2281   if (parser->integral_constant_expression_p)
2282     {
2283       if (!parser->allow_non_integral_constant_expression_p)
2284         {
2285           /* Don't use `%s' to print THING, because quotations (`%<', `%>')
2286              in the message need to be interpreted.  */
2287           char *message = concat (thing,
2288                                   " cannot appear in a constant-expression",
2289                                   NULL);
2290           error (message);
2291           free (message);
2292           return true;
2293         }
2294     }
2295   return false;
2296 }
2297
2298 /* Emit a diagnostic for an invalid type name.  SCOPE is the
2299    qualifying scope (or NULL, if none) for ID.  This function commits
2300    to the current active tentative parse, if any.  (Otherwise, the
2301    problematic construct might be encountered again later, resulting
2302    in duplicate error messages.) LOCATION is the location of ID.  */
2303
2304 static void
2305 cp_parser_diagnose_invalid_type_name (cp_parser *parser,
2306                                       tree scope, tree id,
2307                                       location_t location)
2308 {
2309   tree decl, old_scope;
2310   /* Try to lookup the identifier.  */
2311   old_scope = parser->scope;
2312   parser->scope = scope;
2313   decl = cp_parser_lookup_name_simple (parser, id, location);
2314   parser->scope = old_scope;
2315   /* If the lookup found a template-name, it means that the user forgot
2316   to specify an argument list. Emit a useful error message.  */
2317   if (TREE_CODE (decl) == TEMPLATE_DECL)
2318     error ("%Hinvalid use of template-name %qE without an argument list",
2319            &location, decl);
2320   else if (TREE_CODE (id) == BIT_NOT_EXPR)
2321     error ("%Hinvalid use of destructor %qD as a type", &location, id);
2322   else if (TREE_CODE (decl) == TYPE_DECL)
2323     /* Something like 'unsigned A a;'  */
2324     error ("%Hinvalid combination of multiple type-specifiers",
2325            &location);
2326   else if (!parser->scope)
2327     {
2328       /* Issue an error message.  */
2329       error ("%H%qE does not name a type", &location, id);
2330       /* If we're in a template class, it's possible that the user was
2331          referring to a type from a base class.  For example:
2332
2333            template <typename T> struct A { typedef T X; };
2334            template <typename T> struct B : public A<T> { X x; };
2335
2336          The user should have said "typename A<T>::X".  */
2337       if (processing_template_decl && current_class_type
2338           && TYPE_BINFO (current_class_type))
2339         {
2340           tree b;
2341
2342           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2343                b;
2344                b = TREE_CHAIN (b))
2345             {
2346               tree base_type = BINFO_TYPE (b);
2347               if (CLASS_TYPE_P (base_type)
2348                   && dependent_type_p (base_type))
2349                 {
2350                   tree field;
2351                   /* Go from a particular instantiation of the
2352                      template (which will have an empty TYPE_FIELDs),
2353                      to the main version.  */
2354                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2355                   for (field = TYPE_FIELDS (base_type);
2356                        field;
2357                        field = TREE_CHAIN (field))
2358                     if (TREE_CODE (field) == TYPE_DECL
2359                         && DECL_NAME (field) == id)
2360                       {
2361                         inform (location, 
2362                                 "(perhaps %<typename %T::%E%> was intended)",
2363                                 BINFO_TYPE (b), id);
2364                         break;
2365                       }
2366                   if (field)
2367                     break;
2368                 }
2369             }
2370         }
2371     }
2372   /* Here we diagnose qualified-ids where the scope is actually correct,
2373      but the identifier does not resolve to a valid type name.  */
2374   else if (parser->scope != error_mark_node)
2375     {
2376       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2377         error ("%H%qE in namespace %qE does not name a type",
2378                &location, id, parser->scope);
2379       else if (TYPE_P (parser->scope))
2380         error ("%H%qE in class %qT does not name a type",
2381                &location, id, parser->scope);
2382       else
2383         gcc_unreachable ();
2384     }
2385   cp_parser_commit_to_tentative_parse (parser);
2386 }
2387
2388 /* Check for a common situation where a type-name should be present,
2389    but is not, and issue a sensible error message.  Returns true if an
2390    invalid type-name was detected.
2391
2392    The situation handled by this function are variable declarations of the
2393    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2394    Usually, `ID' should name a type, but if we got here it means that it
2395    does not. We try to emit the best possible error message depending on
2396    how exactly the id-expression looks like.  */
2397
2398 static bool
2399 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2400 {
2401   tree id;
2402   cp_token *token = cp_lexer_peek_token (parser->lexer);
2403
2404   cp_parser_parse_tentatively (parser);
2405   id = cp_parser_id_expression (parser,
2406                                 /*template_keyword_p=*/false,
2407                                 /*check_dependency_p=*/true,
2408                                 /*template_p=*/NULL,
2409                                 /*declarator_p=*/true,
2410                                 /*optional_p=*/false);
2411   /* After the id-expression, there should be a plain identifier,
2412      otherwise this is not a simple variable declaration. Also, if
2413      the scope is dependent, we cannot do much.  */
2414   if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2415       || (parser->scope && TYPE_P (parser->scope)
2416           && dependent_type_p (parser->scope))
2417       || TREE_CODE (id) == TYPE_DECL)
2418     {
2419       cp_parser_abort_tentative_parse (parser);
2420       return false;
2421     }
2422   if (!cp_parser_parse_definitely (parser))
2423     return false;
2424
2425   /* Emit a diagnostic for the invalid type.  */
2426   cp_parser_diagnose_invalid_type_name (parser, parser->scope,
2427                                         id, token->location);
2428   /* Skip to the end of the declaration; there's no point in
2429      trying to process it.  */
2430   cp_parser_skip_to_end_of_block_or_statement (parser);
2431   return true;
2432 }
2433
2434 /* Consume tokens up to, and including, the next non-nested closing `)'.
2435    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2436    are doing error recovery. Returns -1 if OR_COMMA is true and we
2437    found an unnested comma.  */
2438
2439 static int
2440 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2441                                        bool recovering,
2442                                        bool or_comma,
2443                                        bool consume_paren)
2444 {
2445   unsigned paren_depth = 0;
2446   unsigned brace_depth = 0;
2447
2448   if (recovering && !or_comma
2449       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2450     return 0;
2451
2452   while (true)
2453     {
2454       cp_token * token = cp_lexer_peek_token (parser->lexer);
2455
2456       switch (token->type)
2457         {
2458         case CPP_EOF:
2459         case CPP_PRAGMA_EOL:
2460           /* If we've run out of tokens, then there is no closing `)'.  */
2461           return 0;
2462
2463         case CPP_SEMICOLON:
2464           /* This matches the processing in skip_to_end_of_statement.  */
2465           if (!brace_depth)
2466             return 0;
2467           break;
2468
2469         case CPP_OPEN_BRACE:
2470           ++brace_depth;
2471           break;
2472         case CPP_CLOSE_BRACE:
2473           if (!brace_depth--)
2474             return 0;
2475           break;
2476
2477         case CPP_COMMA:
2478           if (recovering && or_comma && !brace_depth && !paren_depth)
2479             return -1;
2480           break;
2481
2482         case CPP_OPEN_PAREN:
2483           if (!brace_depth)
2484             ++paren_depth;
2485           break;
2486
2487         case CPP_CLOSE_PAREN:
2488           if (!brace_depth && !paren_depth--)
2489             {
2490               if (consume_paren)
2491                 cp_lexer_consume_token (parser->lexer);
2492               return 1;
2493             }
2494           break;
2495
2496         default:
2497           break;
2498         }
2499
2500       /* Consume the token.  */
2501       cp_lexer_consume_token (parser->lexer);
2502     }
2503 }
2504
2505 /* Consume tokens until we reach the end of the current statement.
2506    Normally, that will be just before consuming a `;'.  However, if a
2507    non-nested `}' comes first, then we stop before consuming that.  */
2508
2509 static void
2510 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2511 {
2512   unsigned nesting_depth = 0;
2513
2514   while (true)
2515     {
2516       cp_token *token = cp_lexer_peek_token (parser->lexer);
2517
2518       switch (token->type)
2519         {
2520         case CPP_EOF:
2521         case CPP_PRAGMA_EOL:
2522           /* If we've run out of tokens, stop.  */
2523           return;
2524
2525         case CPP_SEMICOLON:
2526           /* If the next token is a `;', we have reached the end of the
2527              statement.  */
2528           if (!nesting_depth)
2529             return;
2530           break;
2531
2532         case CPP_CLOSE_BRACE:
2533           /* If this is a non-nested '}', stop before consuming it.
2534              That way, when confronted with something like:
2535
2536                { 3 + }
2537
2538              we stop before consuming the closing '}', even though we
2539              have not yet reached a `;'.  */
2540           if (nesting_depth == 0)
2541             return;
2542
2543           /* If it is the closing '}' for a block that we have
2544              scanned, stop -- but only after consuming the token.
2545              That way given:
2546
2547                 void f g () { ... }
2548                 typedef int I;
2549
2550              we will stop after the body of the erroneously declared
2551              function, but before consuming the following `typedef'
2552              declaration.  */
2553           if (--nesting_depth == 0)
2554             {
2555               cp_lexer_consume_token (parser->lexer);
2556               return;
2557             }
2558
2559         case CPP_OPEN_BRACE:
2560           ++nesting_depth;
2561           break;
2562
2563         default:
2564           break;
2565         }
2566
2567       /* Consume the token.  */
2568       cp_lexer_consume_token (parser->lexer);
2569     }
2570 }
2571
2572 /* This function is called at the end of a statement or declaration.
2573    If the next token is a semicolon, it is consumed; otherwise, error
2574    recovery is attempted.  */
2575
2576 static void
2577 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2578 {
2579   /* Look for the trailing `;'.  */
2580   if (!cp_parser_require (parser, CPP_SEMICOLON, "%<;%>"))
2581     {
2582       /* If there is additional (erroneous) input, skip to the end of
2583          the statement.  */
2584       cp_parser_skip_to_end_of_statement (parser);
2585       /* If the next token is now a `;', consume it.  */
2586       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2587         cp_lexer_consume_token (parser->lexer);
2588     }
2589 }
2590
2591 /* Skip tokens until we have consumed an entire block, or until we
2592    have consumed a non-nested `;'.  */
2593
2594 static void
2595 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2596 {
2597   int nesting_depth = 0;
2598
2599   while (nesting_depth >= 0)
2600     {
2601       cp_token *token = cp_lexer_peek_token (parser->lexer);
2602
2603       switch (token->type)
2604         {
2605         case CPP_EOF:
2606         case CPP_PRAGMA_EOL:
2607           /* If we've run out of tokens, stop.  */
2608           return;
2609
2610         case CPP_SEMICOLON:
2611           /* Stop if this is an unnested ';'. */
2612           if (!nesting_depth)
2613             nesting_depth = -1;
2614           break;
2615
2616         case CPP_CLOSE_BRACE:
2617           /* Stop if this is an unnested '}', or closes the outermost
2618              nesting level.  */
2619           nesting_depth--;
2620           if (nesting_depth < 0)
2621             return;
2622           if (!nesting_depth)
2623             nesting_depth = -1;
2624           break;
2625
2626         case CPP_OPEN_BRACE:
2627           /* Nest. */
2628           nesting_depth++;
2629           break;
2630
2631         default:
2632           break;
2633         }
2634
2635       /* Consume the token.  */
2636       cp_lexer_consume_token (parser->lexer);
2637     }
2638 }
2639
2640 /* Skip tokens until a non-nested closing curly brace is the next
2641    token, or there are no more tokens. Return true in the first case,
2642    false otherwise.  */
2643
2644 static bool
2645 cp_parser_skip_to_closing_brace (cp_parser *parser)
2646 {
2647   unsigned nesting_depth = 0;
2648
2649   while (true)
2650     {
2651       cp_token *token = cp_lexer_peek_token (parser->lexer);
2652
2653       switch (token->type)
2654         {
2655         case CPP_EOF:
2656         case CPP_PRAGMA_EOL:
2657           /* If we've run out of tokens, stop.  */
2658           return false;
2659
2660         case CPP_CLOSE_BRACE:
2661           /* If the next token is a non-nested `}', then we have reached
2662              the end of the current block.  */
2663           if (nesting_depth-- == 0)
2664             return true;
2665           break;
2666
2667         case CPP_OPEN_BRACE:
2668           /* If it the next token is a `{', then we are entering a new
2669              block.  Consume the entire block.  */
2670           ++nesting_depth;
2671           break;
2672
2673         default:
2674           break;
2675         }
2676
2677       /* Consume the token.  */
2678       cp_lexer_consume_token (parser->lexer);
2679     }
2680 }
2681
2682 /* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
2683    parameter is the PRAGMA token, allowing us to purge the entire pragma
2684    sequence.  */
2685
2686 static void
2687 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
2688 {
2689   cp_token *token;
2690
2691   parser->lexer->in_pragma = false;
2692
2693   do
2694     token = cp_lexer_consume_token (parser->lexer);
2695   while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
2696
2697   /* Ensure that the pragma is not parsed again.  */
2698   cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
2699 }
2700
2701 /* Require pragma end of line, resyncing with it as necessary.  The
2702    arguments are as for cp_parser_skip_to_pragma_eol.  */
2703
2704 static void
2705 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
2706 {
2707   parser->lexer->in_pragma = false;
2708   if (!cp_parser_require (parser, CPP_PRAGMA_EOL, "end of line"))
2709     cp_parser_skip_to_pragma_eol (parser, pragma_tok);
2710 }
2711
2712 /* This is a simple wrapper around make_typename_type. When the id is
2713    an unresolved identifier node, we can provide a superior diagnostic
2714    using cp_parser_diagnose_invalid_type_name.  */
2715
2716 static tree
2717 cp_parser_make_typename_type (cp_parser *parser, tree scope,
2718                               tree id, location_t id_location)
2719 {
2720   tree result;
2721   if (TREE_CODE (id) == IDENTIFIER_NODE)
2722     {
2723       result = make_typename_type (scope, id, typename_type,
2724                                    /*complain=*/tf_none);
2725       if (result == error_mark_node)
2726         cp_parser_diagnose_invalid_type_name (parser, scope, id, id_location);
2727       return result;
2728     }
2729   return make_typename_type (scope, id, typename_type, tf_error);
2730 }
2731
2732 /* This is a wrapper around the
2733    make_{pointer,ptrmem,reference}_declarator functions that decides
2734    which one to call based on the CODE and CLASS_TYPE arguments. The
2735    CODE argument should be one of the values returned by
2736    cp_parser_ptr_operator. */
2737 static cp_declarator *
2738 cp_parser_make_indirect_declarator (enum tree_code code, tree class_type,
2739                                     cp_cv_quals cv_qualifiers,
2740                                     cp_declarator *target)
2741 {
2742   if (code == ERROR_MARK)
2743     return cp_error_declarator;
2744
2745   if (code == INDIRECT_REF)
2746     if (class_type == NULL_TREE)
2747       return make_pointer_declarator (cv_qualifiers, target);
2748     else
2749       return make_ptrmem_declarator (cv_qualifiers, class_type, target);
2750   else if (code == ADDR_EXPR && class_type == NULL_TREE)
2751     return make_reference_declarator (cv_qualifiers, target, false);
2752   else if (code == NON_LVALUE_EXPR && class_type == NULL_TREE)
2753     return make_reference_declarator (cv_qualifiers, target, true);
2754   gcc_unreachable ();
2755 }
2756
2757 /* Create a new C++ parser.  */
2758
2759 static cp_parser *
2760 cp_parser_new (void)
2761 {
2762   cp_parser *parser;
2763   cp_lexer *lexer;
2764   unsigned i;
2765
2766   /* cp_lexer_new_main is called before calling ggc_alloc because
2767      cp_lexer_new_main might load a PCH file.  */
2768   lexer = cp_lexer_new_main ();
2769
2770   /* Initialize the binops_by_token so that we can get the tree
2771      directly from the token.  */
2772   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2773     binops_by_token[binops[i].token_type] = binops[i];
2774
2775   parser = GGC_CNEW (cp_parser);
2776   parser->lexer = lexer;
2777   parser->context = cp_parser_context_new (NULL);
2778
2779   /* For now, we always accept GNU extensions.  */
2780   parser->allow_gnu_extensions_p = 1;
2781
2782   /* The `>' token is a greater-than operator, not the end of a
2783      template-id.  */
2784   parser->greater_than_is_operator_p = true;
2785
2786   parser->default_arg_ok_p = true;
2787
2788   /* We are not parsing a constant-expression.  */
2789   parser->integral_constant_expression_p = false;
2790   parser->allow_non_integral_constant_expression_p = false;
2791   parser->non_integral_constant_expression_p = false;
2792
2793   /* Local variable names are not forbidden.  */
2794   parser->local_variables_forbidden_p = false;
2795
2796   /* We are not processing an `extern "C"' declaration.  */
2797   parser->in_unbraced_linkage_specification_p = false;
2798
2799   /* We are not processing a declarator.  */
2800   parser->in_declarator_p = false;
2801
2802   /* We are not processing a template-argument-list.  */
2803   parser->in_template_argument_list_p = false;
2804
2805   /* We are not in an iteration statement.  */
2806   parser->in_statement = 0;
2807
2808   /* We are not in a switch statement.  */
2809   parser->in_switch_statement_p = false;
2810
2811   /* We are not parsing a type-id inside an expression.  */
2812   parser->in_type_id_in_expr_p = false;
2813
2814   /* Declarations aren't implicitly extern "C".  */
2815   parser->implicit_extern_c = false;
2816
2817   /* String literals should be translated to the execution character set.  */
2818   parser->translate_strings_p = true;
2819
2820   /* We are not parsing a function body.  */
2821   parser->in_function_body = false;
2822
2823   /* The unparsed function queue is empty.  */
2824   parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE);
2825
2826   /* There are no classes being defined.  */
2827   parser->num_classes_being_defined = 0;
2828
2829   /* No template parameters apply.  */
2830   parser->num_template_parameter_lists = 0;
2831
2832   return parser;
2833 }
2834
2835 /* Create a cp_lexer structure which will emit the tokens in CACHE
2836    and push it onto the parser's lexer stack.  This is used for delayed
2837    parsing of in-class method bodies and default arguments, and should
2838    not be confused with tentative parsing.  */
2839 static void
2840 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
2841 {
2842   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
2843   lexer->next = parser->lexer;
2844   parser->lexer = lexer;
2845
2846   /* Move the current source position to that of the first token in the
2847      new lexer.  */
2848   cp_lexer_set_source_position_from_token (lexer->next_token);
2849 }
2850
2851 /* Pop the top lexer off the parser stack.  This is never used for the
2852    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
2853 static void
2854 cp_parser_pop_lexer (cp_parser *parser)
2855 {
2856   cp_lexer *lexer = parser->lexer;
2857   parser->lexer = lexer->next;
2858   cp_lexer_destroy (lexer);
2859
2860   /* Put the current source position back where it was before this
2861      lexer was pushed.  */
2862   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
2863 }
2864
2865 /* Lexical conventions [gram.lex]  */
2866
2867 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
2868    identifier.  */
2869
2870 static tree
2871 cp_parser_identifier (cp_parser* parser)
2872 {
2873   cp_token *token;
2874
2875   /* Look for the identifier.  */
2876   token = cp_parser_require (parser, CPP_NAME, "identifier");
2877   /* Return the value.  */
2878   return token ? token->u.value : error_mark_node;
2879 }
2880
2881 /* Parse a sequence of adjacent string constants.  Returns a
2882    TREE_STRING representing the combined, nul-terminated string
2883    constant.  If TRANSLATE is true, translate the string to the
2884    execution character set.  If WIDE_OK is true, a wide string is
2885    invalid here.
2886
2887    C++98 [lex.string] says that if a narrow string literal token is
2888    adjacent to a wide string literal token, the behavior is undefined.
2889    However, C99 6.4.5p4 says that this results in a wide string literal.
2890    We follow C99 here, for consistency with the C front end.
2891
2892    This code is largely lifted from lex_string() in c-lex.c.
2893
2894    FUTURE: ObjC++ will need to handle @-strings here.  */
2895 static tree
2896 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
2897 {
2898   tree value;
2899   size_t count;
2900   struct obstack str_ob;
2901   cpp_string str, istr, *strs;
2902   cp_token *tok;
2903   enum cpp_ttype type;
2904
2905   tok = cp_lexer_peek_token (parser->lexer);
2906   if (!cp_parser_is_string_literal (tok))
2907     {
2908       cp_parser_error (parser, "expected string-literal");
2909       return error_mark_node;
2910     }
2911
2912   type = tok->type;
2913
2914   /* Try to avoid the overhead of creating and destroying an obstack
2915      for the common case of just one string.  */
2916   if (!cp_parser_is_string_literal
2917       (cp_lexer_peek_nth_token (parser->lexer, 2)))
2918     {
2919       cp_lexer_consume_token (parser->lexer);
2920
2921       str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
2922       str.len = TREE_STRING_LENGTH (tok->u.value);
2923       count = 1;
2924
2925       strs = &str;
2926     }
2927   else
2928     {
2929       gcc_obstack_init (&str_ob);
2930       count = 0;
2931
2932       do
2933         {
2934           cp_lexer_consume_token (parser->lexer);
2935           count++;
2936           str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
2937           str.len = TREE_STRING_LENGTH (tok->u.value);
2938
2939           if (type != tok->type)
2940             {
2941               if (type == CPP_STRING)
2942                 type = tok->type;
2943               else if (tok->type != CPP_STRING)
2944                 error ("%Hunsupported non-standard concatenation "
2945                        "of string literals", &tok->location);
2946             }
2947
2948           obstack_grow (&str_ob, &str, sizeof (cpp_string));
2949
2950           tok = cp_lexer_peek_token (parser->lexer);
2951         }
2952       while (cp_parser_is_string_literal (tok));
2953
2954       strs = (cpp_string *) obstack_finish (&str_ob);
2955     }
2956
2957   if (type != CPP_STRING && !wide_ok)
2958     {
2959       cp_parser_error (parser, "a wide string is invalid in this context");
2960       type = CPP_STRING;
2961     }
2962
2963   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
2964       (parse_in, strs, count, &istr, type))
2965     {
2966       value = build_string (istr.len, (const char *)istr.text);
2967       free (CONST_CAST (unsigned char *, istr.text));
2968
2969       switch (type)
2970         {
2971         default:
2972         case CPP_STRING:
2973           TREE_TYPE (value) = char_array_type_node;
2974           break;
2975         case CPP_STRING16:
2976           TREE_TYPE (value) = char16_array_type_node;
2977           break;
2978         case CPP_STRING32:
2979           TREE_TYPE (value) = char32_array_type_node;
2980           break;
2981         case CPP_WSTRING:
2982           TREE_TYPE (value) = wchar_array_type_node;
2983           break;
2984         }
2985
2986       value = fix_string_type (value);
2987     }
2988   else
2989     /* cpp_interpret_string has issued an error.  */
2990     value = error_mark_node;
2991
2992   if (count > 1)
2993     obstack_free (&str_ob, 0);
2994
2995   return value;
2996 }
2997
2998
2999 /* Basic concepts [gram.basic]  */
3000
3001 /* Parse a translation-unit.
3002
3003    translation-unit:
3004      declaration-seq [opt]
3005
3006    Returns TRUE if all went well.  */
3007
3008 static bool
3009 cp_parser_translation_unit (cp_parser* parser)
3010 {
3011   /* The address of the first non-permanent object on the declarator
3012      obstack.  */
3013   static void *declarator_obstack_base;
3014
3015   bool success;
3016
3017   /* Create the declarator obstack, if necessary.  */
3018   if (!cp_error_declarator)
3019     {
3020       gcc_obstack_init (&declarator_obstack);
3021       /* Create the error declarator.  */
3022       cp_error_declarator = make_declarator (cdk_error);
3023       /* Create the empty parameter list.  */
3024       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
3025       /* Remember where the base of the declarator obstack lies.  */
3026       declarator_obstack_base = obstack_next_free (&declarator_obstack);
3027     }
3028
3029   cp_parser_declaration_seq_opt (parser);
3030
3031   /* If there are no tokens left then all went well.  */
3032   if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
3033     {
3034       /* Get rid of the token array; we don't need it any more.  */
3035       cp_lexer_destroy (parser->lexer);
3036       parser->lexer = NULL;
3037
3038       /* This file might have been a context that's implicitly extern
3039          "C".  If so, pop the lang context.  (Only relevant for PCH.) */
3040       if (parser->implicit_extern_c)
3041         {
3042           pop_lang_context ();
3043           parser->implicit_extern_c = false;
3044         }
3045
3046       /* Finish up.  */
3047       finish_translation_unit ();
3048
3049       success = true;
3050     }
3051   else
3052     {
3053       cp_parser_error (parser, "expected declaration");
3054       success = false;
3055     }
3056
3057   /* Make sure the declarator obstack was fully cleaned up.  */
3058   gcc_assert (obstack_next_free (&declarator_obstack)
3059               == declarator_obstack_base);
3060
3061   /* All went well.  */
3062   return success;
3063 }
3064
3065 /* Expressions [gram.expr] */
3066
3067 /* Parse a primary-expression.
3068
3069    primary-expression:
3070      literal
3071      this
3072      ( expression )
3073      id-expression
3074
3075    GNU Extensions:
3076
3077    primary-expression:
3078      ( compound-statement )
3079      __builtin_va_arg ( assignment-expression , type-id )
3080      __builtin_offsetof ( type-id , offsetof-expression )
3081
3082    C++ Extensions:
3083      __has_nothrow_assign ( type-id )   
3084      __has_nothrow_constructor ( type-id )
3085      __has_nothrow_copy ( type-id )
3086      __has_trivial_assign ( type-id )   
3087      __has_trivial_constructor ( type-id )
3088      __has_trivial_copy ( type-id )
3089      __has_trivial_destructor ( type-id )
3090      __has_virtual_destructor ( type-id )     
3091      __is_abstract ( type-id )
3092      __is_base_of ( type-id , type-id )
3093      __is_class ( type-id )
3094      __is_convertible_to ( type-id , type-id )     
3095      __is_empty ( type-id )
3096      __is_enum ( type-id )
3097      __is_pod ( type-id )
3098      __is_polymorphic ( type-id )
3099      __is_union ( type-id )
3100
3101    Objective-C++ Extension:
3102
3103    primary-expression:
3104      objc-expression
3105
3106    literal:
3107      __null
3108
3109    ADDRESS_P is true iff this expression was immediately preceded by
3110    "&" and therefore might denote a pointer-to-member.  CAST_P is true
3111    iff this expression is the target of a cast.  TEMPLATE_ARG_P is
3112    true iff this expression is a template argument.
3113
3114    Returns a representation of the expression.  Upon return, *IDK
3115    indicates what kind of id-expression (if any) was present.  */
3116
3117 static tree
3118 cp_parser_primary_expression (cp_parser *parser,
3119                               bool address_p,
3120                               bool cast_p,
3121                               bool template_arg_p,
3122                               cp_id_kind *idk)
3123 {
3124   cp_token *token = NULL;
3125
3126   /* Assume the primary expression is not an id-expression.  */
3127   *idk = CP_ID_KIND_NONE;
3128
3129   /* Peek at the next token.  */
3130   token = cp_lexer_peek_token (parser->lexer);
3131   switch (token->type)
3132     {
3133       /* literal:
3134            integer-literal
3135            character-literal
3136            floating-literal
3137            string-literal
3138            boolean-literal  */
3139     case CPP_CHAR:
3140     case CPP_CHAR16:
3141     case CPP_CHAR32:
3142     case CPP_WCHAR:
3143     case CPP_NUMBER:
3144       token = cp_lexer_consume_token (parser->lexer);
3145       if (TREE_CODE (token->u.value) == FIXED_CST)
3146         {
3147           error ("%Hfixed-point types not supported in C++",
3148                  &token->location);
3149           return error_mark_node;
3150         }
3151       /* Floating-point literals are only allowed in an integral
3152          constant expression if they are cast to an integral or
3153          enumeration type.  */
3154       if (TREE_CODE (token->u.value) == REAL_CST
3155           && parser->integral_constant_expression_p
3156           && pedantic)
3157         {
3158           /* CAST_P will be set even in invalid code like "int(2.7 +
3159              ...)".   Therefore, we have to check that the next token
3160              is sure to end the cast.  */
3161           if (cast_p)
3162             {
3163               cp_token *next_token;
3164
3165               next_token = cp_lexer_peek_token (parser->lexer);
3166               if (/* The comma at the end of an
3167                      enumerator-definition.  */
3168                   next_token->type != CPP_COMMA
3169                   /* The curly brace at the end of an enum-specifier.  */
3170                   && next_token->type != CPP_CLOSE_BRACE
3171                   /* The end of a statement.  */
3172                   && next_token->type != CPP_SEMICOLON
3173                   /* The end of the cast-expression.  */
3174                   && next_token->type != CPP_CLOSE_PAREN
3175                   /* The end of an array bound.  */
3176                   && next_token->type != CPP_CLOSE_SQUARE
3177                   /* The closing ">" in a template-argument-list.  */
3178                   && (next_token->type != CPP_GREATER
3179                       || parser->greater_than_is_operator_p)
3180                   /* C++0x only: A ">>" treated like two ">" tokens,
3181                      in a template-argument-list.  */
3182                   && (next_token->type != CPP_RSHIFT
3183                       || (cxx_dialect == cxx98)
3184                       || parser->greater_than_is_operator_p))
3185                 cast_p = false;
3186             }
3187
3188           /* If we are within a cast, then the constraint that the
3189              cast is to an integral or enumeration type will be
3190              checked at that point.  If we are not within a cast, then
3191              this code is invalid.  */
3192           if (!cast_p)
3193             cp_parser_non_integral_constant_expression
3194               (parser, "floating-point literal");
3195         }
3196       return token->u.value;
3197
3198     case CPP_STRING:
3199     case CPP_STRING16:
3200     case CPP_STRING32:
3201     case CPP_WSTRING:
3202       /* ??? Should wide strings be allowed when parser->translate_strings_p
3203          is false (i.e. in attributes)?  If not, we can kill the third
3204          argument to cp_parser_string_literal.  */
3205       return cp_parser_string_literal (parser,
3206                                        parser->translate_strings_p,
3207                                        true);
3208
3209     case CPP_OPEN_PAREN:
3210       {
3211         tree expr;
3212         bool saved_greater_than_is_operator_p;
3213
3214         /* Consume the `('.  */
3215         cp_lexer_consume_token (parser->lexer);
3216         /* Within a parenthesized expression, a `>' token is always
3217            the greater-than operator.  */
3218         saved_greater_than_is_operator_p
3219           = parser->greater_than_is_operator_p;
3220         parser->greater_than_is_operator_p = true;
3221         /* If we see `( { ' then we are looking at the beginning of
3222            a GNU statement-expression.  */
3223         if (cp_parser_allow_gnu_extensions_p (parser)
3224             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
3225           {
3226             /* Statement-expressions are not allowed by the standard.  */
3227             pedwarn (token->location, OPT_pedantic, 
3228                      "ISO C++ forbids braced-groups within expressions");
3229
3230             /* And they're not allowed outside of a function-body; you
3231                cannot, for example, write:
3232
3233                  int i = ({ int j = 3; j + 1; });
3234
3235                at class or namespace scope.  */
3236             if (!parser->in_function_body
3237                 || parser->in_template_argument_list_p)
3238               {
3239                 error ("%Hstatement-expressions are not allowed outside "
3240                        "functions nor in template-argument lists",
3241                        &token->location);
3242                 cp_parser_skip_to_end_of_block_or_statement (parser);
3243                 expr = error_mark_node;
3244               }
3245             else
3246               {
3247                 /* Start the statement-expression.  */
3248                 expr = begin_stmt_expr ();
3249                 /* Parse the compound-statement.  */
3250                 cp_parser_compound_statement (parser, expr, false);
3251                 /* Finish up.  */
3252                 expr = finish_stmt_expr (expr, false);
3253               }
3254           }
3255         else
3256           {
3257             /* Parse the parenthesized expression.  */
3258             expr = cp_parser_expression (parser, cast_p, idk);
3259             /* Let the front end know that this expression was
3260                enclosed in parentheses. This matters in case, for
3261                example, the expression is of the form `A::B', since
3262                `&A::B' might be a pointer-to-member, but `&(A::B)' is
3263                not.  */
3264             finish_parenthesized_expr (expr);
3265           }
3266         /* The `>' token might be the end of a template-id or
3267            template-parameter-list now.  */
3268         parser->greater_than_is_operator_p
3269           = saved_greater_than_is_operator_p;
3270         /* Consume the `)'.  */
3271         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
3272           cp_parser_skip_to_end_of_statement (parser);
3273
3274         return expr;
3275       }
3276
3277     case CPP_KEYWORD:
3278       switch (token->keyword)
3279         {
3280           /* These two are the boolean literals.  */
3281         case RID_TRUE:
3282           cp_lexer_consume_token (parser->lexer);
3283           return boolean_true_node;
3284         case RID_FALSE:
3285           cp_lexer_consume_token (parser->lexer);
3286           return boolean_false_node;
3287
3288           /* The `__null' literal.  */
3289         case RID_NULL:
3290           cp_lexer_consume_token (parser->lexer);
3291           return null_node;
3292
3293           /* Recognize the `this' keyword.  */
3294         case RID_THIS:
3295           cp_lexer_consume_token (parser->lexer);
3296           if (parser->local_variables_forbidden_p)
3297             {
3298               error ("%H%<this%> may not be used in this context",
3299                      &token->location);
3300               return error_mark_node;
3301             }
3302           /* Pointers cannot appear in constant-expressions.  */
3303           if (cp_parser_non_integral_constant_expression (parser, "%<this%>"))
3304             return error_mark_node;
3305           return finish_this_expr ();
3306
3307           /* The `operator' keyword can be the beginning of an
3308              id-expression.  */
3309         case RID_OPERATOR:
3310           goto id_expression;
3311
3312         case RID_FUNCTION_NAME:
3313         case RID_PRETTY_FUNCTION_NAME:
3314         case RID_C99_FUNCTION_NAME:
3315           {
3316             const char *name;
3317
3318             /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
3319                __func__ are the names of variables -- but they are
3320                treated specially.  Therefore, they are handled here,
3321                rather than relying on the generic id-expression logic
3322                below.  Grammatically, these names are id-expressions.
3323
3324                Consume the token.  */
3325             token = cp_lexer_consume_token (parser->lexer);
3326
3327             switch (token->keyword)
3328               {
3329               case RID_FUNCTION_NAME:
3330                 name = "%<__FUNCTION__%>";
3331                 break;
3332               case RID_PRETTY_FUNCTION_NAME:
3333                 name = "%<__PRETTY_FUNCTION__%>";
3334                 break;
3335               case RID_C99_FUNCTION_NAME:
3336                 name = "%<__func__%>";
3337                 break;
3338               default:
3339                 gcc_unreachable ();
3340               }
3341
3342             if (cp_parser_non_integral_constant_expression (parser, name))
3343               return error_mark_node;
3344
3345             /* Look up the name.  */
3346             return finish_fname (token->u.value);
3347           }
3348
3349         case RID_VA_ARG:
3350           {
3351             tree expression;
3352             tree type;
3353
3354             /* The `__builtin_va_arg' construct is used to handle
3355                `va_arg'.  Consume the `__builtin_va_arg' token.  */
3356             cp_lexer_consume_token (parser->lexer);
3357             /* Look for the opening `('.  */
3358             cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
3359             /* Now, parse the assignment-expression.  */
3360             expression = cp_parser_assignment_expression (parser,
3361                                                           /*cast_p=*/false, NULL);
3362             /* Look for the `,'.  */
3363             cp_parser_require (parser, CPP_COMMA, "%<,%>");
3364             /* Parse the type-id.  */
3365             type = cp_parser_type_id (parser);
3366             /* Look for the closing `)'.  */
3367             cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
3368             /* Using `va_arg' in a constant-expression is not
3369                allowed.  */
3370             if (cp_parser_non_integral_constant_expression (parser,
3371                                                             "%<va_arg%>"))
3372               return error_mark_node;
3373             return build_x_va_arg (expression, type);
3374           }
3375
3376         case RID_OFFSETOF:
3377           return cp_parser_builtin_offsetof (parser);
3378
3379         case RID_HAS_NOTHROW_ASSIGN:
3380         case RID_HAS_NOTHROW_CONSTRUCTOR:
3381         case RID_HAS_NOTHROW_COPY:        
3382         case RID_HAS_TRIVIAL_ASSIGN:
3383         case RID_HAS_TRIVIAL_CONSTRUCTOR:
3384         case RID_HAS_TRIVIAL_COPY:        
3385         case RID_HAS_TRIVIAL_DESTRUCTOR:
3386         case RID_HAS_VIRTUAL_DESTRUCTOR:
3387         case RID_IS_ABSTRACT:
3388         case RID_IS_BASE_OF:
3389         case RID_IS_CLASS:
3390         case RID_IS_CONVERTIBLE_TO:
3391         case RID_IS_EMPTY:
3392         case RID_IS_ENUM:
3393         case RID_IS_POD:
3394         case RID_IS_POLYMORPHIC:
3395         case RID_IS_UNION:
3396           return cp_parser_trait_expr (parser, token->keyword);
3397
3398         /* Objective-C++ expressions.  */
3399         case RID_AT_ENCODE:
3400         case RID_AT_PROTOCOL:
3401         case RID_AT_SELECTOR:
3402           return cp_parser_objc_expression (parser);
3403
3404         default:
3405           cp_parser_error (parser, "expected primary-expression");
3406           return error_mark_node;
3407         }
3408
3409       /* An id-expression can start with either an identifier, a
3410          `::' as the beginning of a qualified-id, or the "operator"
3411          keyword.  */
3412     case CPP_NAME:
3413     case CPP_SCOPE:
3414     case CPP_TEMPLATE_ID:
3415     case CPP_NESTED_NAME_SPECIFIER:
3416       {
3417         tree id_expression;
3418         tree decl;
3419         const char *error_msg;
3420         bool template_p;
3421         bool done;
3422         cp_token *id_expr_token;
3423
3424       id_expression:
3425         /* Parse the id-expression.  */
3426         id_expression
3427           = cp_parser_id_expression (parser,
3428                                      /*template_keyword_p=*/false,
3429                                      /*check_dependency_p=*/true,
3430                                      &template_p,
3431                                      /*declarator_p=*/false,
3432                                      /*optional_p=*/false);
3433         if (id_expression == error_mark_node)
3434           return error_mark_node;
3435         id_expr_token = token;
3436         token = cp_lexer_peek_token (parser->lexer);
3437         done = (token->type != CPP_OPEN_SQUARE
3438                 && token->type != CPP_OPEN_PAREN
3439                 && token->type != CPP_DOT
3440                 && token->type != CPP_DEREF
3441                 && token->type != CPP_PLUS_PLUS
3442                 && token->type != CPP_MINUS_MINUS);
3443         /* If we have a template-id, then no further lookup is
3444            required.  If the template-id was for a template-class, we
3445            will sometimes have a TYPE_DECL at this point.  */
3446         if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
3447                  || TREE_CODE (id_expression) == TYPE_DECL)
3448           decl = id_expression;
3449         /* Look up the name.  */
3450         else
3451           {
3452             tree ambiguous_decls;
3453
3454             decl = cp_parser_lookup_name (parser, id_expression,
3455                                           none_type,
3456                                           template_p,
3457                                           /*is_namespace=*/false,
3458                                           /*check_dependency=*/true,
3459                                           &ambiguous_decls,
3460                                           id_expr_token->location);
3461             /* If the lookup was ambiguous, an error will already have
3462                been issued.  */
3463             if (ambiguous_decls)
3464               return error_mark_node;
3465
3466             /* In Objective-C++, an instance variable (ivar) may be preferred
3467                to whatever cp_parser_lookup_name() found.  */
3468             decl = objc_lookup_ivar (decl, id_expression);
3469
3470             /* If name lookup gives us a SCOPE_REF, then the
3471                qualifying scope was dependent.  */
3472             if (TREE_CODE (decl) == SCOPE_REF)
3473               {
3474                 /* At this point, we do not know if DECL is a valid
3475                    integral constant expression.  We assume that it is
3476                    in fact such an expression, so that code like:
3477
3478                       template <int N> struct A {
3479                         int a[B<N>::i];
3480                       };
3481                      
3482                    is accepted.  At template-instantiation time, we
3483                    will check that B<N>::i is actually a constant.  */
3484                 return decl;
3485               }
3486             /* Check to see if DECL is a local variable in a context
3487                where that is forbidden.  */
3488             if (parser->local_variables_forbidden_p
3489                 && local_variable_p (decl))
3490               {
3491                 /* It might be that we only found DECL because we are
3492                    trying to be generous with pre-ISO scoping rules.
3493                    For example, consider:
3494
3495                      int i;
3496                      void g() {
3497                        for (int i = 0; i < 10; ++i) {}
3498                        extern void f(int j = i);
3499                      }
3500
3501                    Here, name look up will originally find the out
3502                    of scope `i'.  We need to issue a warning message,
3503                    but then use the global `i'.  */
3504                 decl = check_for_out_of_scope_variable (decl);
3505                 if (local_variable_p (decl))
3506                   {
3507                     error ("%Hlocal variable %qD may not appear in this context",
3508                            &id_expr_token->location, decl);
3509                     return error_mark_node;
3510                   }
3511               }
3512           }
3513
3514         decl = (finish_id_expression
3515                 (id_expression, decl, parser->scope,
3516                  idk,
3517                  parser->integral_constant_expression_p,
3518                  parser->allow_non_integral_constant_expression_p,
3519                  &parser->non_integral_constant_expression_p,
3520                  template_p, done, address_p,
3521                  template_arg_p,
3522                  &error_msg,
3523                  id_expr_token->location));
3524         if (error_msg)
3525           cp_parser_error (parser, error_msg);
3526         return decl;
3527       }
3528
3529       /* Anything else is an error.  */
3530     default:
3531       /* ...unless we have an Objective-C++ message or string literal,
3532          that is.  */
3533       if (c_dialect_objc ()
3534           && (token->type == CPP_OPEN_SQUARE
3535               || token->type == CPP_OBJC_STRING))
3536         return cp_parser_objc_expression (parser);
3537
3538       cp_parser_error (parser, "expected primary-expression");
3539       return error_mark_node;
3540     }
3541 }
3542
3543 /* Parse an id-expression.
3544
3545    id-expression:
3546      unqualified-id
3547      qualified-id
3548
3549    qualified-id:
3550      :: [opt] nested-name-specifier template [opt] unqualified-id
3551      :: identifier
3552      :: operator-function-id
3553      :: template-id
3554
3555    Return a representation of the unqualified portion of the
3556    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
3557    a `::' or nested-name-specifier.
3558
3559    Often, if the id-expression was a qualified-id, the caller will
3560    want to make a SCOPE_REF to represent the qualified-id.  This
3561    function does not do this in order to avoid wastefully creating
3562    SCOPE_REFs when they are not required.
3563
3564    If TEMPLATE_KEYWORD_P is true, then we have just seen the
3565    `template' keyword.
3566
3567    If CHECK_DEPENDENCY_P is false, then names are looked up inside
3568    uninstantiated templates.
3569
3570    If *TEMPLATE_P is non-NULL, it is set to true iff the
3571    `template' keyword is used to explicitly indicate that the entity
3572    named is a template.
3573
3574    If DECLARATOR_P is true, the id-expression is appearing as part of
3575    a declarator, rather than as part of an expression.  */
3576
3577 static tree
3578 cp_parser_id_expression (cp_parser *parser,
3579                          bool template_keyword_p,
3580                          bool check_dependency_p,
3581                          bool *template_p,
3582                          bool declarator_p,
3583                          bool optional_p)
3584 {
3585   bool global_scope_p;
3586   bool nested_name_specifier_p;
3587
3588   /* Assume the `template' keyword was not used.  */
3589   if (template_p)
3590     *template_p = template_keyword_p;
3591
3592   /* Look for the optional `::' operator.  */
3593   global_scope_p
3594     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3595        != NULL_TREE);
3596   /* Look for the optional nested-name-specifier.  */
3597   nested_name_specifier_p
3598     = (cp_parser_nested_name_specifier_opt (parser,
3599                                             /*typename_keyword_p=*/false,
3600                                             check_dependency_p,
3601                                             /*type_p=*/false,
3602                                             declarator_p)
3603        != NULL_TREE);
3604   /* If there is a nested-name-specifier, then we are looking at
3605      the first qualified-id production.  */
3606   if (nested_name_specifier_p)
3607     {
3608       tree saved_scope;
3609       tree saved_object_scope;
3610       tree saved_qualifying_scope;
3611       tree unqualified_id;
3612       bool is_template;
3613
3614       /* See if the next token is the `template' keyword.  */
3615       if (!template_p)
3616         template_p = &is_template;
3617       *template_p = cp_parser_optional_template_keyword (parser);
3618       /* Name lookup we do during the processing of the
3619          unqualified-id might obliterate SCOPE.  */
3620       saved_scope = parser->scope;
3621       saved_object_scope = parser->object_scope;
3622       saved_qualifying_scope = parser->qualifying_scope;
3623       /* Process the final unqualified-id.  */
3624       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3625                                                  check_dependency_p,
3626                                                  declarator_p,
3627                                                  /*optional_p=*/false);
3628       /* Restore the SAVED_SCOPE for our caller.  */
3629       parser->scope = saved_scope;
3630       parser->object_scope = saved_object_scope;
3631       parser->qualifying_scope = saved_qualifying_scope;
3632
3633       return unqualified_id;
3634     }
3635   /* Otherwise, if we are in global scope, then we are looking at one
3636      of the other qualified-id productions.  */
3637   else if (global_scope_p)
3638     {
3639       cp_token *token;
3640       tree id;
3641
3642       /* Peek at the next token.  */
3643       token = cp_lexer_peek_token (parser->lexer);
3644
3645       /* If it's an identifier, and the next token is not a "<", then
3646          we can avoid the template-id case.  This is an optimization
3647          for this common case.  */
3648       if (token->type == CPP_NAME
3649           && !cp_parser_nth_token_starts_template_argument_list_p
3650                (parser, 2))
3651         return cp_parser_identifier (parser);
3652
3653       cp_parser_parse_tentatively (parser);
3654       /* Try a template-id.  */
3655       id = cp_parser_template_id (parser,
3656                                   /*template_keyword_p=*/false,
3657                                   /*check_dependency_p=*/true,
3658                                   declarator_p);
3659       /* If that worked, we're done.  */
3660       if (cp_parser_parse_definitely (parser))
3661         return id;
3662
3663       /* Peek at the next token.  (Changes in the token buffer may
3664          have invalidated the pointer obtained above.)  */
3665       token = cp_lexer_peek_token (parser->lexer);
3666
3667       switch (token->type)
3668         {
3669         case CPP_NAME:
3670           return cp_parser_identifier (parser);
3671
3672         case CPP_KEYWORD:
3673           if (token->keyword == RID_OPERATOR)
3674             return cp_parser_operator_function_id (parser);
3675           /* Fall through.  */
3676
3677         default:
3678           cp_parser_error (parser, "expected id-expression");
3679           return error_mark_node;
3680         }
3681     }
3682   else
3683     return cp_parser_unqualified_id (parser, template_keyword_p,
3684                                      /*check_dependency_p=*/true,
3685                                      declarator_p,
3686                                      optional_p);
3687 }
3688
3689 /* Parse an unqualified-id.
3690
3691    unqualified-id:
3692      identifier
3693      operator-function-id
3694      conversion-function-id
3695      ~ class-name
3696      template-id
3697
3698    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3699    keyword, in a construct like `A::template ...'.
3700
3701    Returns a representation of unqualified-id.  For the `identifier'
3702    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3703    production a BIT_NOT_EXPR is returned; the operand of the
3704    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3705    other productions, see the documentation accompanying the
3706    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3707    names are looked up in uninstantiated templates.  If DECLARATOR_P
3708    is true, the unqualified-id is appearing as part of a declarator,
3709    rather than as part of an expression.  */
3710
3711 static tree
3712 cp_parser_unqualified_id (cp_parser* parser,
3713                           bool template_keyword_p,
3714                           bool check_dependency_p,
3715                           bool declarator_p,
3716                           bool optional_p)
3717 {
3718   cp_token *token;
3719
3720   /* Peek at the next token.  */
3721   token = cp_lexer_peek_token (parser->lexer);
3722
3723   switch (token->type)
3724     {
3725     case CPP_NAME:
3726       {
3727         tree id;
3728
3729         /* We don't know yet whether or not this will be a
3730            template-id.  */
3731         cp_parser_parse_tentatively (parser);
3732         /* Try a template-id.  */
3733         id = cp_parser_template_id (parser, template_keyword_p,
3734                                     check_dependency_p,
3735                                     declarator_p);
3736         /* If it worked, we're done.  */
3737         if (cp_parser_parse_definitely (parser))
3738           return id;
3739         /* Otherwise, it's an ordinary identifier.  */
3740         return cp_parser_identifier (parser);
3741       }
3742
3743     case CPP_TEMPLATE_ID:
3744       return cp_parser_template_id (parser, template_keyword_p,
3745                                     check_dependency_p,
3746                                     declarator_p);
3747
3748     case CPP_COMPL:
3749       {
3750         tree type_decl;
3751         tree qualifying_scope;
3752         tree object_scope;
3753         tree scope;
3754         bool done;
3755
3756         /* Consume the `~' token.  */
3757         cp_lexer_consume_token (parser->lexer);
3758         /* Parse the class-name.  The standard, as written, seems to
3759            say that:
3760
3761              template <typename T> struct S { ~S (); };
3762              template <typename T> S<T>::~S() {}
3763
3764            is invalid, since `~' must be followed by a class-name, but
3765            `S<T>' is dependent, and so not known to be a class.
3766            That's not right; we need to look in uninstantiated
3767            templates.  A further complication arises from:
3768
3769              template <typename T> void f(T t) {
3770                t.T::~T();
3771              }
3772
3773            Here, it is not possible to look up `T' in the scope of `T'
3774            itself.  We must look in both the current scope, and the
3775            scope of the containing complete expression.
3776
3777            Yet another issue is:
3778
3779              struct S {
3780                int S;
3781                ~S();
3782              };
3783
3784              S::~S() {}
3785
3786            The standard does not seem to say that the `S' in `~S'
3787            should refer to the type `S' and not the data member
3788            `S::S'.  */
3789
3790         /* DR 244 says that we look up the name after the "~" in the
3791            same scope as we looked up the qualifying name.  That idea
3792            isn't fully worked out; it's more complicated than that.  */
3793         scope = parser->scope;
3794         object_scope = parser->object_scope;
3795         qualifying_scope = parser->qualifying_scope;
3796
3797         /* Check for invalid scopes.  */
3798         if (scope == error_mark_node)
3799           {
3800             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3801               cp_lexer_consume_token (parser->lexer);
3802             return error_mark_node;
3803           }
3804         if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
3805           {
3806             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3807               error ("%Hscope %qT before %<~%> is not a class-name",
3808                      &token->location, scope);
3809             cp_parser_simulate_error (parser);
3810             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3811               cp_lexer_consume_token (parser->lexer);
3812             return error_mark_node;
3813           }
3814         gcc_assert (!scope || TYPE_P (scope));
3815
3816         /* If the name is of the form "X::~X" it's OK.  */
3817         token = cp_lexer_peek_token (parser->lexer);
3818         if (scope
3819             && token->type == CPP_NAME
3820             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3821                 == CPP_OPEN_PAREN)
3822             && constructor_name_p (token->u.value, scope))
3823           {
3824             cp_lexer_consume_token (parser->lexer);
3825             return build_nt (BIT_NOT_EXPR, scope);
3826           }
3827
3828         /* If there was an explicit qualification (S::~T), first look
3829            in the scope given by the qualification (i.e., S).  */
3830         done = false;
3831         type_decl = NULL_TREE;
3832         if (scope)
3833           {
3834             cp_parser_parse_tentatively (parser);
3835             type_decl = cp_parser_class_name (parser,
3836                                               /*typename_keyword_p=*/false,
3837                                               /*template_keyword_p=*/false,
3838                                               none_type,
3839                                               /*check_dependency=*/false,
3840                                               /*class_head_p=*/false,
3841                                               declarator_p);
3842             if (cp_parser_parse_definitely (parser))
3843               done = true;
3844           }
3845         /* In "N::S::~S", look in "N" as well.  */
3846         if (!done && scope && qualifying_scope)
3847           {
3848             cp_parser_parse_tentatively (parser);
3849             parser->scope = qualifying_scope;
3850             parser->object_scope = NULL_TREE;
3851             parser->qualifying_scope = NULL_TREE;
3852             type_decl
3853               = cp_parser_class_name (parser,
3854                                       /*typename_keyword_p=*/false,
3855                                       /*template_keyword_p=*/false,
3856                                       none_type,
3857                                       /*check_dependency=*/false,
3858                                       /*class_head_p=*/false,
3859                                       declarator_p);
3860             if (cp_parser_parse_definitely (parser))
3861               done = true;
3862           }
3863         /* In "p->S::~T", look in the scope given by "*p" as well.  */
3864         else if (!done && object_scope)
3865           {
3866             cp_parser_parse_tentatively (parser);
3867             parser->scope = object_scope;
3868             parser->object_scope = NULL_TREE;
3869             parser->qualifying_scope = NULL_TREE;
3870             type_decl
3871               = cp_parser_class_name (parser,
3872                                       /*typename_keyword_p=*/false,
3873                                       /*template_keyword_p=*/false,
3874                                       none_type,
3875                                       /*check_dependency=*/false,
3876                                       /*class_head_p=*/false,
3877                                       declarator_p);
3878             if (cp_parser_parse_definitely (parser))
3879               done = true;
3880           }
3881         /* Look in the surrounding context.  */
3882         if (!done)
3883           {
3884             parser->scope = NULL_TREE;
3885             parser->object_scope = NULL_TREE;
3886             parser->qualifying_scope = NULL_TREE;
3887             if (processing_template_decl)
3888               cp_parser_parse_tentatively (parser);
3889             type_decl
3890               = cp_parser_class_name (parser,
3891                                       /*typename_keyword_p=*/false,
3892                                       /*template_keyword_p=*/false,
3893                                       none_type,
3894                                       /*check_dependency=*/false,
3895                                       /*class_head_p=*/false,
3896                                       declarator_p);
3897             if (processing_template_decl
3898                 && ! cp_parser_parse_definitely (parser))
3899               {
3900                 /* We couldn't find a type with this name, so just accept
3901                    it and check for a match at instantiation time.  */
3902                 type_decl = cp_parser_identifier (parser);
3903                 if (type_decl != error_mark_node)
3904                   type_decl = build_nt (BIT_NOT_EXPR, type_decl);
3905                 return type_decl;
3906               }
3907           }
3908         /* If an error occurred, assume that the name of the
3909            destructor is the same as the name of the qualifying
3910            class.  That allows us to keep parsing after running
3911            into ill-formed destructor names.  */
3912         if (type_decl == error_mark_node && scope)
3913           return build_nt (BIT_NOT_EXPR, scope);
3914         else if (type_decl == error_mark_node)
3915           return error_mark_node;
3916
3917         /* Check that destructor name and scope match.  */
3918         if (declarator_p && scope && !check_dtor_name (scope, type_decl))
3919           {
3920             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3921               error ("%Hdeclaration of %<~%T%> as member of %qT",
3922                      &token->location, type_decl, scope);
3923             cp_parser_simulate_error (parser);
3924             return error_mark_node;
3925           }
3926
3927         /* [class.dtor]
3928
3929            A typedef-name that names a class shall not be used as the
3930            identifier in the declarator for a destructor declaration.  */
3931         if (declarator_p
3932             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
3933             && !DECL_SELF_REFERENCE_P (type_decl)
3934             && !cp_parser_uncommitted_to_tentative_parse_p (parser))
3935           error ("%Htypedef-name %qD used as destructor declarator",
3936                  &token->location, type_decl);
3937
3938         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3939       }
3940
3941     case CPP_KEYWORD:
3942       if (token->keyword == RID_OPERATOR)
3943         {
3944           tree id;
3945
3946           /* This could be a template-id, so we try that first.  */
3947           cp_parser_parse_tentatively (parser);
3948           /* Try a template-id.  */
3949           id = cp_parser_template_id (parser, template_keyword_p,
3950                                       /*check_dependency_p=*/true,
3951                                       declarator_p);
3952           /* If that worked, we're done.  */
3953           if (cp_parser_parse_definitely (parser))
3954             return id;
3955           /* We still don't know whether we're looking at an
3956              operator-function-id or a conversion-function-id.  */
3957           cp_parser_parse_tentatively (parser);
3958           /* Try an operator-function-id.  */
3959           id = cp_parser_operator_function_id (parser);
3960           /* If that didn't work, try a conversion-function-id.  */
3961           if (!cp_parser_parse_definitely (parser))
3962             id = cp_parser_conversion_function_id (parser);
3963
3964           return id;
3965         }
3966       /* Fall through.  */
3967
3968     default:
3969       if (optional_p)
3970         return NULL_TREE;
3971       cp_parser_error (parser, "expected unqualified-id");
3972       return error_mark_node;
3973     }
3974 }
3975
3976 /* Parse an (optional) nested-name-specifier.
3977
3978    nested-name-specifier: [C++98]
3979      class-or-namespace-name :: nested-name-specifier [opt]
3980      class-or-namespace-name :: template nested-name-specifier [opt]
3981
3982    nested-name-specifier: [C++0x]
3983      type-name ::
3984      namespace-name ::
3985      nested-name-specifier identifier ::
3986      nested-name-specifier template [opt] simple-template-id ::
3987
3988    PARSER->SCOPE should be set appropriately before this function is
3989    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
3990    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
3991    in name lookups.
3992
3993    Sets PARSER->SCOPE to the class (TYPE) or namespace
3994    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
3995    it unchanged if there is no nested-name-specifier.  Returns the new
3996    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
3997
3998    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
3999    part of a declaration and/or decl-specifier.  */
4000
4001 static tree
4002 cp_parser_nested_name_specifier_opt (cp_parser *parser,
4003                                      bool typename_keyword_p,
4004                                      bool check_dependency_p,
4005                                      bool type_p,
4006                                      bool is_declaration)
4007 {
4008   bool success = false;
4009   cp_token_position start = 0;
4010   cp_token *token;
4011
4012   /* Remember where the nested-name-specifier starts.  */
4013   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4014     {
4015       start = cp_lexer_token_position (parser->lexer, false);
4016       push_deferring_access_checks (dk_deferred);
4017     }
4018
4019   while (true)
4020     {
4021       tree new_scope;
4022       tree old_scope;
4023       tree saved_qualifying_scope;
4024       bool template_keyword_p;
4025
4026       /* Spot cases that cannot be the beginning of a
4027          nested-name-specifier.  */
4028       token = cp_lexer_peek_token (parser->lexer);
4029
4030       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
4031          the already parsed nested-name-specifier.  */
4032       if (token->type == CPP_NESTED_NAME_SPECIFIER)
4033         {
4034           /* Grab the nested-name-specifier and continue the loop.  */
4035           cp_parser_pre_parsed_nested_name_specifier (parser);
4036           /* If we originally encountered this nested-name-specifier
4037              with IS_DECLARATION set to false, we will not have
4038              resolved TYPENAME_TYPEs, so we must do so here.  */
4039           if (is_declaration
4040               && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4041             {
4042               new_scope = resolve_typename_type (parser->scope,
4043                                                  /*only_current_p=*/false);
4044               if (TREE_CODE (new_scope) != TYPENAME_TYPE)
4045                 parser->scope = new_scope;
4046             }
4047           success = true;
4048           continue;
4049         }
4050
4051       /* Spot cases that cannot be the beginning of a
4052          nested-name-specifier.  On the second and subsequent times
4053          through the loop, we look for the `template' keyword.  */
4054       if (success && token->keyword == RID_TEMPLATE)
4055         ;
4056       /* A template-id can start a nested-name-specifier.  */
4057       else if (token->type == CPP_TEMPLATE_ID)
4058         ;
4059       else
4060         {
4061           /* If the next token is not an identifier, then it is
4062              definitely not a type-name or namespace-name.  */
4063           if (token->type != CPP_NAME)
4064             break;
4065           /* If the following token is neither a `<' (to begin a
4066              template-id), nor a `::', then we are not looking at a
4067              nested-name-specifier.  */
4068           token = cp_lexer_peek_nth_token (parser->lexer, 2);
4069           if (token->type != CPP_SCOPE
4070               && !cp_parser_nth_token_starts_template_argument_list_p
4071                   (parser, 2))
4072             break;
4073         }
4074
4075       /* The nested-name-specifier is optional, so we parse
4076          tentatively.  */
4077       cp_parser_parse_tentatively (parser);
4078
4079       /* Look for the optional `template' keyword, if this isn't the
4080          first time through the loop.  */
4081       if (success)
4082         template_keyword_p = cp_parser_optional_template_keyword (parser);
4083       else
4084         template_keyword_p = false;
4085
4086       /* Save the old scope since the name lookup we are about to do
4087          might destroy it.  */
4088       old_scope = parser->scope;
4089       saved_qualifying_scope = parser->qualifying_scope;
4090       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
4091          look up names in "X<T>::I" in order to determine that "Y" is
4092          a template.  So, if we have a typename at this point, we make
4093          an effort to look through it.  */
4094       if (is_declaration
4095           && !typename_keyword_p
4096           && parser->scope
4097           && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4098         parser->scope = resolve_typename_type (parser->scope,
4099                                                /*only_current_p=*/false);
4100       /* Parse the qualifying entity.  */
4101       new_scope
4102         = cp_parser_qualifying_entity (parser,
4103                                        typename_keyword_p,
4104                                        template_keyword_p,
4105                                        check_dependency_p,
4106                                        type_p,
4107                                        is_declaration);
4108       /* Look for the `::' token.  */
4109       cp_parser_require (parser, CPP_SCOPE, "%<::%>");
4110
4111       /* If we found what we wanted, we keep going; otherwise, we're
4112          done.  */
4113       if (!cp_parser_parse_definitely (parser))
4114         {
4115           bool error_p = false;
4116
4117           /* Restore the OLD_SCOPE since it was valid before the
4118              failed attempt at finding the last
4119              class-or-namespace-name.  */
4120           parser->scope = old_scope;
4121           parser->qualifying_scope = saved_qualifying_scope;
4122           if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4123             break;
4124           /* If the next token is an identifier, and the one after
4125              that is a `::', then any valid interpretation would have
4126              found a class-or-namespace-name.  */
4127           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
4128                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4129                      == CPP_SCOPE)
4130                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
4131                      != CPP_COMPL))
4132             {
4133               token = cp_lexer_consume_token (parser->lexer);
4134               if (!error_p)
4135                 {
4136                   if (!token->ambiguous_p)
4137                     {
4138                       tree decl;
4139                       tree ambiguous_decls;
4140
4141                       decl = cp_parser_lookup_name (parser, token->u.value,
4142                                                     none_type,
4143                                                     /*is_template=*/false,
4144                                                     /*is_namespace=*/false,
4145                                                     /*check_dependency=*/true,
4146                                                     &ambiguous_decls,
4147                                                     token->location);
4148                       if (TREE_CODE (decl) == TEMPLATE_DECL)
4149                         error ("%H%qD used without template parameters",
4150                                &token->location, decl);
4151                       else if (ambiguous_decls)
4152                         {
4153                           error ("%Hreference to %qD is ambiguous",
4154                                  &token->location, token->u.value);
4155                           print_candidates (ambiguous_decls);
4156                           decl = error_mark_node;
4157                         }
4158                       else
4159                         {
4160                           const char* msg = "is not a class or namespace";
4161                           if (cxx_dialect != cxx98)
4162                             msg = "is not a class, namespace, or enumeration";
4163                           cp_parser_name_lookup_error
4164                             (parser, token->u.value, decl, msg,
4165                              token->location);
4166                         }
4167                     }
4168                   parser->scope = error_mark_node;
4169                   error_p = true;
4170                   /* Treat this as a successful nested-name-specifier
4171                      due to:
4172
4173                      [basic.lookup.qual]
4174
4175                      If the name found is not a class-name (clause
4176                      _class_) or namespace-name (_namespace.def_), the
4177                      program is ill-formed.  */
4178                   success = true;
4179                 }
4180               cp_lexer_consume_token (parser->lexer);
4181             }
4182           break;
4183         }
4184       /* We've found one valid nested-name-specifier.  */
4185       success = true;
4186       /* Name lookup always gives us a DECL.  */
4187       if (TREE_CODE (new_scope) == TYPE_DECL)
4188         new_scope = TREE_TYPE (new_scope);
4189       /* Uses of "template" must be followed by actual templates.  */
4190       if (template_keyword_p
4191           && !(CLASS_TYPE_P (new_scope)
4192                && ((CLASSTYPE_USE_TEMPLATE (new_scope)
4193                     && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
4194                    || CLASSTYPE_IS_TEMPLATE (new_scope)))
4195           && !(TREE_CODE (new_scope) == TYPENAME_TYPE
4196                && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
4197                    == TEMPLATE_ID_EXPR)))
4198         permerror (input_location, TYPE_P (new_scope)
4199                    ? "%qT is not a template"
4200                    : "%qD is not a template",
4201                    new_scope);
4202       /* If it is a class scope, try to complete it; we are about to
4203          be looking up names inside the class.  */
4204       if (TYPE_P (new_scope)
4205           /* Since checking types for dependency can be expensive,
4206              avoid doing it if the type is already complete.  */
4207           && !COMPLETE_TYPE_P (new_scope)
4208           /* Do not try to complete dependent types.  */
4209           && !dependent_type_p (new_scope))
4210         {
4211           new_scope = complete_type (new_scope);
4212           /* If it is a typedef to current class, use the current
4213              class instead, as the typedef won't have any names inside
4214              it yet.  */
4215           if (!COMPLETE_TYPE_P (new_scope)
4216               && currently_open_class (new_scope))
4217             new_scope = TYPE_MAIN_VARIANT (new_scope);
4218         }
4219       /* Make sure we look in the right scope the next time through
4220          the loop.  */
4221       parser->scope = new_scope;
4222     }
4223
4224   /* If parsing tentatively, replace the sequence of tokens that makes
4225      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
4226      token.  That way, should we re-parse the token stream, we will
4227      not have to repeat the effort required to do the parse, nor will
4228      we issue duplicate error messages.  */
4229   if (success && start)
4230     {
4231       cp_token *token;
4232
4233       token = cp_lexer_token_at (parser->lexer, start);
4234       /* Reset the contents of the START token.  */
4235       token->type = CPP_NESTED_NAME_SPECIFIER;
4236       /* Retrieve any deferred checks.  Do not pop this access checks yet
4237          so the memory will not be reclaimed during token replacing below.  */
4238       token->u.tree_check_value = GGC_CNEW (struct tree_check);
4239       token->u.tree_check_value->value = parser->scope;
4240       token->u.tree_check_value->checks = get_deferred_access_checks ();
4241       token->u.tree_check_value->qualifying_scope =
4242         parser->qualifying_scope;
4243       token->keyword = RID_MAX;
4244
4245       /* Purge all subsequent tokens.  */
4246       cp_lexer_purge_tokens_after (parser->lexer, start);
4247     }
4248
4249   if (start)
4250     pop_to_parent_deferring_access_checks ();
4251
4252   return success ? parser->scope : NULL_TREE;
4253 }
4254
4255 /* Parse a nested-name-specifier.  See
4256    cp_parser_nested_name_specifier_opt for details.  This function
4257    behaves identically, except that it will an issue an error if no
4258    nested-name-specifier is present.  */
4259
4260 static tree
4261 cp_parser_nested_name_specifier (cp_parser *parser,
4262                                  bool typename_keyword_p,
4263                                  bool check_dependency_p,
4264                                  bool type_p,
4265                                  bool is_declaration)
4266 {
4267   tree scope;
4268
4269   /* Look for the nested-name-specifier.  */
4270   scope = cp_parser_nested_name_specifier_opt (parser,
4271                                                typename_keyword_p,
4272                                                check_dependency_p,
4273                                                type_p,
4274                                                is_declaration);
4275   /* If it was not present, issue an error message.  */
4276   if (!scope)
4277     {
4278       cp_parser_error (parser, "expected nested-name-specifier");
4279       parser->scope = NULL_TREE;
4280     }
4281
4282   return scope;
4283 }
4284
4285 /* Parse the qualifying entity in a nested-name-specifier. For C++98,
4286    this is either a class-name or a namespace-name (which corresponds
4287    to the class-or-namespace-name production in the grammar). For
4288    C++0x, it can also be a type-name that refers to an enumeration
4289    type.
4290
4291    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
4292    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
4293    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
4294    TYPE_P is TRUE iff the next name should be taken as a class-name,
4295    even the same name is declared to be another entity in the same
4296    scope.
4297
4298    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
4299    specified by the class-or-namespace-name.  If neither is found the
4300    ERROR_MARK_NODE is returned.  */
4301
4302 static tree
4303 cp_parser_qualifying_entity (cp_parser *parser,
4304                              bool typename_keyword_p,
4305                              bool template_keyword_p,
4306                              bool check_dependency_p,
4307                              bool type_p,
4308                              bool is_declaration)
4309 {
4310   tree saved_scope;
4311   tree saved_qualifying_scope;
4312   tree saved_object_scope;
4313   tree scope;
4314   bool only_class_p;
4315   bool successful_parse_p;
4316
4317   /* Before we try to parse the class-name, we must save away the
4318      current PARSER->SCOPE since cp_parser_class_name will destroy
4319      it.  */
4320   saved_scope = parser->scope;
4321   saved_qualifying_scope = parser->qualifying_scope;
4322   saved_object_scope = parser->object_scope;
4323   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
4324      there is no need to look for a namespace-name.  */
4325   only_class_p = template_keyword_p 
4326     || (saved_scope && TYPE_P (saved_scope) && cxx_dialect == cxx98);
4327   if (!only_class_p)
4328     cp_parser_parse_tentatively (parser);
4329   scope = cp_parser_class_name (parser,
4330                                 typename_keyword_p,
4331                                 template_keyword_p,
4332                                 type_p ? class_type : none_type,
4333                                 check_dependency_p,
4334                                 /*class_head_p=*/false,
4335                                 is_declaration);
4336   successful_parse_p = only_class_p || cp_parser_parse_definitely (parser);
4337   /* If that didn't work and we're in C++0x mode, try for a type-name.  */
4338   if (!only_class_p 
4339       && cxx_dialect != cxx98
4340       && !successful_parse_p)
4341     {
4342       /* Restore the saved scope.  */
4343       parser->scope = saved_scope;
4344       parser->qualifying_scope = saved_qualifying_scope;
4345       parser->object_scope = saved_object_scope;
4346
4347       /* Parse tentatively.  */
4348       cp_parser_parse_tentatively (parser);
4349      
4350       /* Parse a typedef-name or enum-name.  */
4351       scope = cp_parser_nonclass_name (parser);
4352       successful_parse_p = cp_parser_parse_definitely (parser);
4353     }
4354   /* If that didn't work, try for a namespace-name.  */
4355   if (!only_class_p && !successful_parse_p)
4356     {
4357       /* Restore the saved scope.  */
4358       parser->scope = saved_scope;
4359       parser->qualifying_scope = saved_qualifying_scope;
4360       parser->object_scope = saved_object_scope;
4361       /* If we are not looking at an identifier followed by the scope
4362          resolution operator, then this is not part of a
4363          nested-name-specifier.  (Note that this function is only used
4364          to parse the components of a nested-name-specifier.)  */
4365       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
4366           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
4367         return error_mark_node;
4368       scope = cp_parser_namespace_name (parser);
4369     }
4370
4371   return scope;
4372 }
4373
4374 /* Parse a postfix-expression.
4375
4376    postfix-expression:
4377      primary-expression
4378      postfix-expression [ expression ]
4379      postfix-expression ( expression-list [opt] )
4380      simple-type-specifier ( expression-list [opt] )
4381      typename :: [opt] nested-name-specifier identifier
4382        ( expression-list [opt] )
4383      typename :: [opt] nested-name-specifier template [opt] template-id
4384        ( expression-list [opt] )
4385      postfix-expression . template [opt] id-expression
4386      postfix-expression -> template [opt] id-expression
4387      postfix-expression . pseudo-destructor-name
4388      postfix-expression -> pseudo-destructor-name
4389      postfix-expression ++
4390      postfix-expression --
4391      dynamic_cast < type-id > ( expression )
4392      static_cast < type-id > ( expression )
4393      reinterpret_cast < type-id > ( expression )
4394      const_cast < type-id > ( expression )
4395      typeid ( expression )
4396      typeid ( type-id )
4397
4398    GNU Extension:
4399
4400    postfix-expression:
4401      ( type-id ) { initializer-list , [opt] }
4402
4403    This extension is a GNU version of the C99 compound-literal
4404    construct.  (The C99 grammar uses `type-name' instead of `type-id',
4405    but they are essentially the same concept.)
4406
4407    If ADDRESS_P is true, the postfix expression is the operand of the
4408    `&' operator.  CAST_P is true if this expression is the target of a
4409    cast.
4410
4411    If MEMBER_ACCESS_ONLY_P, we only allow postfix expressions that are
4412    class member access expressions [expr.ref].
4413
4414    Returns a representation of the expression.  */
4415
4416 static tree
4417 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
4418                               bool member_access_only_p,
4419                               cp_id_kind * pidk_return)
4420 {
4421   cp_token *token;
4422   enum rid keyword;
4423   cp_id_kind idk = CP_ID_KIND_NONE;
4424   tree postfix_expression = NULL_TREE;
4425   bool is_member_access = false;
4426
4427   /* Peek at the next token.  */
4428   token = cp_lexer_peek_token (parser->lexer);
4429   /* Some of the productions are determined by keywords.  */
4430   keyword = token->keyword;
4431   switch (keyword)
4432     {
4433     case RID_DYNCAST:
4434     case RID_STATCAST:
4435     case RID_REINTCAST:
4436     case RID_CONSTCAST:
4437       {
4438         tree type;
4439         tree expression;
4440         const char *saved_message;
4441
4442         /* All of these can be handled in the same way from the point
4443            of view of parsing.  Begin by consuming the token
4444            identifying the cast.  */
4445         cp_lexer_consume_token (parser->lexer);
4446
4447         /* New types cannot be defined in the cast.  */
4448         saved_message = parser->type_definition_forbidden_message;
4449         parser->type_definition_forbidden_message
4450           = "types may not be defined in casts";
4451
4452         /* Look for the opening `<'.  */
4453         cp_parser_require (parser, CPP_LESS, "%<<%>");
4454         /* Parse the type to which we are casting.  */
4455         type = cp_parser_type_id (parser);
4456         /* Look for the closing `>'.  */
4457         cp_parser_require (parser, CPP_GREATER, "%<>%>");
4458         /* Restore the old message.  */
4459         parser->type_definition_forbidden_message = saved_message;
4460
4461         /* And the expression which is being cast.  */
4462         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
4463         expression = cp_parser_expression (parser, /*cast_p=*/true, & idk);
4464         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4465
4466         /* Only type conversions to integral or enumeration types
4467            can be used in constant-expressions.  */
4468         if (!cast_valid_in_integral_constant_expression_p (type)
4469             && (cp_parser_non_integral_constant_expression
4470                 (parser,
4471                  "a cast to a type other than an integral or "
4472                  "enumeration type")))
4473           return error_mark_node;
4474
4475         switch (keyword)
4476           {
4477           case RID_DYNCAST:
4478             postfix_expression
4479               = build_dynamic_cast (type, expression, tf_warning_or_error);
4480             break;
4481           case RID_STATCAST:
4482             postfix_expression
4483               = build_static_cast (type, expression, tf_warning_or_error);
4484             break;
4485           case RID_REINTCAST:
4486             postfix_expression
4487               = build_reinterpret_cast (type, expression, 
4488                                         tf_warning_or_error);
4489             break;
4490           case RID_CONSTCAST:
4491             postfix_expression
4492               = build_const_cast (type, expression, tf_warning_or_error);
4493             break;
4494           default:
4495             gcc_unreachable ();
4496           }
4497       }
4498       break;
4499
4500     case RID_TYPEID:
4501       {
4502         tree type;
4503         const char *saved_message;
4504         bool saved_in_type_id_in_expr_p;
4505
4506         /* Consume the `typeid' token.  */
4507         cp_lexer_consume_token (parser->lexer);
4508         /* Look for the `(' token.  */
4509         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
4510         /* Types cannot be defined in a `typeid' expression.  */
4511         saved_message = parser->type_definition_forbidden_message;
4512         parser->type_definition_forbidden_message
4513           = "types may not be defined in a %<typeid%> expression";
4514         /* We can't be sure yet whether we're looking at a type-id or an
4515            expression.  */
4516         cp_parser_parse_tentatively (parser);
4517         /* Try a type-id first.  */
4518         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4519         parser->in_type_id_in_expr_p = true;
4520         type = cp_parser_type_id (parser);
4521         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4522         /* Look for the `)' token.  Otherwise, we can't be sure that
4523            we're not looking at an expression: consider `typeid (int
4524            (3))', for example.  */
4525         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4526         /* If all went well, simply lookup the type-id.  */
4527         if (cp_parser_parse_definitely (parser))
4528           postfix_expression = get_typeid (type);
4529         /* Otherwise, fall back to the expression variant.  */
4530         else
4531           {
4532             tree expression;
4533
4534             /* Look for an expression.  */
4535             expression = cp_parser_expression (parser, /*cast_p=*/false, & idk);
4536             /* Compute its typeid.  */
4537             postfix_expression = build_typeid (expression);
4538             /* Look for the `)' token.  */
4539             cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4540           }
4541         /* Restore the saved message.  */
4542         parser->type_definition_forbidden_message = saved_message;
4543         /* `typeid' may not appear in an integral constant expression.  */
4544         if (cp_parser_non_integral_constant_expression(parser,
4545                                                        "%<typeid%> operator"))
4546           return error_mark_node;
4547       }
4548       break;
4549
4550     case RID_TYPENAME:
4551       {
4552         tree type;
4553         /* The syntax permitted here is the same permitted for an
4554            elaborated-type-specifier.  */
4555         type = cp_parser_elaborated_type_specifier (parser,
4556                                                     /*is_friend=*/false,
4557                                                     /*is_declaration=*/false);
4558         postfix_expression = cp_parser_functional_cast (parser, type);
4559       }
4560       break;
4561
4562     default:
4563       {
4564         tree type;
4565
4566         /* If the next thing is a simple-type-specifier, we may be
4567            looking at a functional cast.  We could also be looking at
4568            an id-expression.  So, we try the functional cast, and if
4569            that doesn't work we fall back to the primary-expression.  */
4570         cp_parser_parse_tentatively (parser);
4571         /* Look for the simple-type-specifier.  */
4572         type = cp_parser_simple_type_specifier (parser,
4573                                                 /*decl_specs=*/NULL,
4574                                                 CP_PARSER_FLAGS_NONE);
4575         /* Parse the cast itself.  */
4576         if (!cp_parser_error_occurred (parser))
4577           postfix_expression
4578             = cp_parser_functional_cast (parser, type);
4579         /* If that worked, we're done.  */
4580         if (cp_parser_parse_definitely (parser))
4581           break;
4582
4583         /* If the functional-cast didn't work out, try a
4584            compound-literal.  */
4585         if (cp_parser_allow_gnu_extensions_p (parser)
4586             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4587           {
4588             VEC(constructor_elt,gc) *initializer_list = NULL;
4589             bool saved_in_type_id_in_expr_p;
4590
4591             cp_parser_parse_tentatively (parser);
4592             /* Consume the `('.  */
4593             cp_lexer_consume_token (parser->lexer);
4594             /* Parse the type.  */
4595             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4596             parser->in_type_id_in_expr_p = true;
4597             type = cp_parser_type_id (parser);
4598             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4599             /* Look for the `)'.  */
4600             cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4601             /* Look for the `{'.  */
4602             cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>");
4603             /* If things aren't going well, there's no need to
4604                keep going.  */
4605             if (!cp_parser_error_occurred (parser))
4606               {
4607                 bool non_constant_p;
4608                 /* Parse the initializer-list.  */
4609                 initializer_list
4610                   = cp_parser_initializer_list (parser, &non_constant_p);
4611                 /* Allow a trailing `,'.  */
4612                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
4613                   cp_lexer_consume_token (parser->lexer);
4614                 /* Look for the final `}'.  */
4615                 cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
4616               }
4617             /* If that worked, we're definitely looking at a
4618                compound-literal expression.  */
4619             if (cp_parser_parse_definitely (parser))
4620               {
4621                 /* Warn the user that a compound literal is not
4622                    allowed in standard C++.  */
4623                 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids compound-literals");
4624                 /* For simplicity, we disallow compound literals in
4625                    constant-expressions.  We could
4626                    allow compound literals of integer type, whose
4627                    initializer was a constant, in constant
4628                    expressions.  Permitting that usage, as a further
4629                    extension, would not change the meaning of any
4630                    currently accepted programs.  (Of course, as
4631                    compound literals are not part of ISO C++, the
4632                    standard has nothing to say.)  */
4633                 if (cp_parser_non_integral_constant_expression 
4634                     (parser, "non-constant compound literals"))
4635                   {
4636                     postfix_expression = error_mark_node;
4637                     break;
4638                   }
4639                 /* Form the representation of the compound-literal.  */
4640                 postfix_expression
4641                   = (finish_compound_literal
4642                      (type, build_constructor (init_list_type_node,
4643                                                initializer_list)));
4644                 break;
4645               }
4646           }
4647
4648         /* It must be a primary-expression.  */
4649         postfix_expression
4650           = cp_parser_primary_expression (parser, address_p, cast_p,
4651                                           /*template_arg_p=*/false,
4652                                           &idk);
4653       }
4654       break;
4655     }
4656
4657   /* Keep looping until the postfix-expression is complete.  */
4658   while (true)
4659     {
4660       if (idk == CP_ID_KIND_UNQUALIFIED
4661           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
4662           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
4663         /* It is not a Koenig lookup function call.  */
4664         postfix_expression
4665           = unqualified_name_lookup_error (postfix_expression);
4666
4667       /* Peek at the next token.  */
4668       token = cp_lexer_peek_token (parser->lexer);
4669
4670       switch (token->type)
4671         {
4672         case CPP_OPEN_SQUARE:
4673           postfix_expression
4674             = cp_parser_postfix_open_square_expression (parser,
4675                                                         postfix_expression,
4676                                                         false);
4677           idk = CP_ID_KIND_NONE;
4678           is_member_access = false;
4679           break;
4680
4681         case CPP_OPEN_PAREN:
4682           /* postfix-expression ( expression-list [opt] ) */
4683           {
4684             bool koenig_p;
4685             bool is_builtin_constant_p;
4686             bool saved_integral_constant_expression_p = false;
4687             bool saved_non_integral_constant_expression_p = false;
4688             VEC(tree,gc) *args;
4689
4690             is_member_access = false;
4691
4692             is_builtin_constant_p
4693               = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
4694             if (is_builtin_constant_p)
4695               {
4696                 /* The whole point of __builtin_constant_p is to allow
4697                    non-constant expressions to appear as arguments.  */
4698                 saved_integral_constant_expression_p
4699                   = parser->integral_constant_expression_p;
4700                 saved_non_integral_constant_expression_p
4701                   = parser->non_integral_constant_expression_p;
4702                 parser->integral_constant_expression_p = false;
4703               }
4704             args = (cp_parser_parenthesized_expression_list
4705                     (parser, /*is_attribute_list=*/false,
4706                      /*cast_p=*/false, /*allow_expansion_p=*/true,
4707                      /*non_constant_p=*/NULL));
4708             if (is_builtin_constant_p)
4709               {
4710                 parser->integral_constant_expression_p
4711                   = saved_integral_constant_expression_p;
4712                 parser->non_integral_constant_expression_p
4713                   = saved_non_integral_constant_expression_p;
4714               }
4715
4716             if (args == NULL)
4717               {
4718                 postfix_expression = error_mark_node;
4719                 break;
4720               }
4721
4722             /* Function calls are not permitted in
4723                constant-expressions.  */
4724             if (! builtin_valid_in_constant_expr_p (postfix_expression)
4725                 && cp_parser_non_integral_constant_expression (parser,
4726                                                                "a function call"))
4727               {
4728                 postfix_expression = error_mark_node;
4729                 release_tree_vector (args);
4730                 break;
4731               }
4732
4733             koenig_p = false;
4734             if (idk == CP_ID_KIND_UNQUALIFIED
4735                 || idk == CP_ID_KIND_TEMPLATE_ID)
4736               {
4737                 if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
4738                   {
4739                     if (!VEC_empty (tree, args))
4740                       {
4741                         koenig_p = true;
4742                         if (!any_type_dependent_arguments_p (args))
4743                           postfix_expression
4744                             = perform_koenig_lookup (postfix_expression, args);
4745                       }
4746                     else
4747                       postfix_expression
4748                         = unqualified_fn_lookup_error (postfix_expression);
4749                   }
4750                 /* We do not perform argument-dependent lookup if
4751                    normal lookup finds a non-function, in accordance
4752                    with the expected resolution of DR 218.  */
4753                 else if (!VEC_empty (tree, args)
4754                          && is_overloaded_fn (postfix_expression))
4755                   {
4756                     tree fn = get_first_fn (postfix_expression);
4757
4758                     if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4759                       fn = OVL_CURRENT (TREE_OPERAND (fn, 0));
4760
4761                     /* Only do argument dependent lookup if regular
4762                        lookup does not find a set of member functions.
4763                        [basic.lookup.koenig]/2a  */
4764                     if (!DECL_FUNCTION_MEMBER_P (fn))
4765                       {
4766                         koenig_p = true;
4767                         if (!any_type_dependent_arguments_p (args))
4768                           postfix_expression
4769                             = perform_koenig_lookup (postfix_expression, args);
4770                       }
4771                   }
4772               }
4773
4774             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
4775               {
4776                 tree instance = TREE_OPERAND (postfix_expression, 0);
4777                 tree fn = TREE_OPERAND (postfix_expression, 1);
4778
4779                 if (processing_template_decl
4780                     && (type_dependent_expression_p (instance)
4781                         || (!BASELINK_P (fn)
4782                             && TREE_CODE (fn) != FIELD_DECL)
4783                         || type_dependent_expression_p (fn)
4784                         || any_type_dependent_arguments_p (args)))
4785                   {
4786                     postfix_expression
4787                       = build_nt_call_vec (postfix_expression, args);
4788                     release_tree_vector (args);
4789                     break;
4790                   }
4791
4792                 if (BASELINK_P (fn))
4793                   {
4794                   postfix_expression
4795                     = (build_new_method_call
4796                        (instance, fn, &args, NULL_TREE,
4797                         (idk == CP_ID_KIND_QUALIFIED
4798                          ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL),
4799                         /*fn_p=*/NULL,
4800                         tf_warning_or_error));
4801                   }
4802                 else
4803                   postfix_expression
4804                     = finish_call_expr (postfix_expression, &args,
4805                                         /*disallow_virtual=*/false,
4806                                         /*koenig_p=*/false,
4807                                         tf_warning_or_error);
4808               }
4809             else if (TREE_CODE (postfix_expression) == OFFSET_REF
4810                      || TREE_CODE (postfix_expression) == MEMBER_REF
4811                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
4812               postfix_expression = (build_offset_ref_call_from_tree
4813                                     (postfix_expression, &args));
4814             else if (idk == CP_ID_KIND_QUALIFIED)
4815               /* A call to a static class member, or a namespace-scope
4816                  function.  */
4817               postfix_expression
4818                 = finish_call_expr (postfix_expression, &args,
4819                                     /*disallow_virtual=*/true,
4820                                     koenig_p,
4821                                     tf_warning_or_error);
4822             else
4823               /* All other function calls.  */
4824               postfix_expression
4825                 = finish_call_expr (postfix_expression, &args,
4826                                     /*disallow_virtual=*/false,
4827                                     koenig_p,
4828                                     tf_warning_or_error);
4829
4830             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
4831             idk = CP_ID_KIND_NONE;
4832
4833             release_tree_vector (args);
4834           }
4835           break;
4836
4837         case CPP_DOT:
4838         case CPP_DEREF:
4839           /* postfix-expression . template [opt] id-expression
4840              postfix-expression . pseudo-destructor-name
4841              postfix-expression -> template [opt] id-expression
4842              postfix-expression -> pseudo-destructor-name */
4843
4844           /* Consume the `.' or `->' operator.  */
4845           cp_lexer_consume_token (parser->lexer);
4846
4847           postfix_expression
4848             = cp_parser_postfix_dot_deref_expression (parser, token->type,
4849                                                       postfix_expression,
4850                                                       false, &idk,
4851                                                       token->location);
4852
4853           is_member_access = true;
4854           break;
4855
4856         case CPP_PLUS_PLUS:
4857           /* postfix-expression ++  */
4858           /* Consume the `++' token.  */
4859           cp_lexer_consume_token (parser->lexer);
4860           /* Generate a representation for the complete expression.  */
4861           postfix_expression
4862             = finish_increment_expr (postfix_expression,
4863                                      POSTINCREMENT_EXPR);
4864           /* Increments may not appear in constant-expressions.  */
4865           if (cp_parser_non_integral_constant_expression (parser,
4866                                                           "an increment"))
4867             postfix_expression = error_mark_node;
4868           idk = CP_ID_KIND_NONE;
4869           is_member_access = false;
4870           break;
4871
4872         case CPP_MINUS_MINUS:
4873           /* postfix-expression -- */
4874           /* Consume the `--' token.  */
4875           cp_lexer_consume_token (parser->lexer);
4876           /* Generate a representation for the complete expression.  */
4877           postfix_expression
4878             = finish_increment_expr (postfix_expression,
4879                                      POSTDECREMENT_EXPR);
4880           /* Decrements may not appear in constant-expressions.  */
4881           if (cp_parser_non_integral_constant_expression (parser,
4882                                                           "a decrement"))
4883             postfix_expression = error_mark_node;
4884           idk = CP_ID_KIND_NONE;
4885           is_member_access = false;
4886           break;
4887
4888         default:
4889           if (pidk_return != NULL)
4890             * pidk_return = idk;
4891           if (member_access_only_p)
4892             return is_member_access? postfix_expression : error_mark_node;
4893           else
4894             return postfix_expression;
4895         }
4896     }
4897
4898   /* We should never get here.  */
4899   gcc_unreachable ();
4900   return error_mark_node;
4901 }
4902
4903 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4904    by cp_parser_builtin_offsetof.  We're looking for
4905
4906      postfix-expression [ expression ]
4907
4908    FOR_OFFSETOF is set if we're being called in that context, which
4909    changes how we deal with integer constant expressions.  */
4910
4911 static tree
4912 cp_parser_postfix_open_square_expression (cp_parser *parser,
4913                                           tree postfix_expression,
4914                                           bool for_offsetof)
4915 {
4916   tree index;
4917
4918   /* Consume the `[' token.  */
4919   cp_lexer_consume_token (parser->lexer);
4920
4921   /* Parse the index expression.  */
4922   /* ??? For offsetof, there is a question of what to allow here.  If
4923      offsetof is not being used in an integral constant expression context,
4924      then we *could* get the right answer by computing the value at runtime.
4925      If we are in an integral constant expression context, then we might
4926      could accept any constant expression; hard to say without analysis.
4927      Rather than open the barn door too wide right away, allow only integer
4928      constant expressions here.  */
4929   if (for_offsetof)
4930     index = cp_parser_constant_expression (parser, false, NULL);
4931   else
4932     index = cp_parser_expression (parser, /*cast_p=*/false, NULL);
4933
4934   /* Look for the closing `]'.  */
4935   cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
4936
4937   /* Build the ARRAY_REF.  */
4938   postfix_expression = grok_array_decl (postfix_expression, index);
4939
4940   /* When not doing offsetof, array references are not permitted in
4941      constant-expressions.  */
4942   if (!for_offsetof
4943       && (cp_parser_non_integral_constant_expression
4944           (parser, "an array reference")))
4945     postfix_expression = error_mark_node;
4946
4947   return postfix_expression;
4948 }
4949
4950 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4951    by cp_parser_builtin_offsetof.  We're looking for
4952
4953      postfix-expression . template [opt] id-expression
4954      postfix-expression . pseudo-destructor-name
4955      postfix-expression -> template [opt] id-expression
4956      postfix-expression -> pseudo-destructor-name
4957
4958    FOR_OFFSETOF is set if we're being called in that context.  That sorta
4959    limits what of the above we'll actually accept, but nevermind.
4960    TOKEN_TYPE is the "." or "->" token, which will already have been
4961    removed from the stream.  */
4962
4963 static tree
4964 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
4965                                         enum cpp_ttype token_type,
4966                                         tree postfix_expression,
4967                                         bool for_offsetof, cp_id_kind *idk,
4968                                         location_t location)
4969 {
4970   tree name;
4971   bool dependent_p;
4972   bool pseudo_destructor_p;
4973   tree scope = NULL_TREE;
4974
4975   /* If this is a `->' operator, dereference the pointer.  */
4976   if (token_type == CPP_DEREF)
4977     postfix_expression = build_x_arrow (postfix_expression);
4978   /* Check to see whether or not the expression is type-dependent.  */
4979   dependent_p = type_dependent_expression_p (postfix_expression);
4980   /* The identifier following the `->' or `.' is not qualified.  */
4981   parser->scope = NULL_TREE;
4982   parser->qualifying_scope = NULL_TREE;
4983   parser->object_scope = NULL_TREE;
4984   *idk = CP_ID_KIND_NONE;
4985
4986   /* Enter the scope corresponding to the type of the object
4987      given by the POSTFIX_EXPRESSION.  */
4988   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
4989     {
4990       scope = TREE_TYPE (postfix_expression);
4991       /* According to the standard, no expression should ever have
4992          reference type.  Unfortunately, we do not currently match
4993          the standard in this respect in that our internal representation
4994          of an expression may have reference type even when the standard
4995          says it does not.  Therefore, we have to manually obtain the
4996          underlying type here.  */
4997       scope = non_reference (scope);
4998       /* The type of the POSTFIX_EXPRESSION must be complete.  */
4999       if (scope == unknown_type_node)
5000         {
5001           error ("%H%qE does not have class type", &location, postfix_expression);
5002           scope = NULL_TREE;
5003         }
5004       else
5005         scope = complete_type_or_else (scope, NULL_TREE);
5006       /* Let the name lookup machinery know that we are processing a
5007          class member access expression.  */
5008       parser->context->object_type = scope;
5009       /* If something went wrong, we want to be able to discern that case,
5010          as opposed to the case where there was no SCOPE due to the type
5011          of expression being dependent.  */
5012       if (!scope)
5013         scope = error_mark_node;
5014       /* If the SCOPE was erroneous, make the various semantic analysis
5015          functions exit quickly -- and without issuing additional error
5016          messages.  */
5017       if (scope == error_mark_node)
5018         postfix_expression = error_mark_node;
5019     }
5020
5021   /* Assume this expression is not a pseudo-destructor access.  */
5022   pseudo_destructor_p = false;
5023
5024   /* If the SCOPE is a scalar type, then, if this is a valid program,
5025      we must be looking at a pseudo-destructor-name.  If POSTFIX_EXPRESSION
5026      is type dependent, it can be pseudo-destructor-name or something else.
5027      Try to parse it as pseudo-destructor-name first.  */
5028   if ((scope && SCALAR_TYPE_P (scope)) || dependent_p)
5029     {
5030       tree s;
5031       tree type;
5032
5033       cp_parser_parse_tentatively (parser);
5034       /* Parse the pseudo-destructor-name.  */
5035       s = NULL_TREE;
5036       cp_parser_pseudo_destructor_name (parser, &s, &type);
5037       if (dependent_p
5038           && (cp_parser_error_occurred (parser)
5039               || TREE_CODE (type) != TYPE_DECL
5040               || !SCALAR_TYPE_P (TREE_TYPE (type))))
5041         cp_parser_abort_tentative_parse (parser);
5042       else if (cp_parser_parse_definitely (parser))
5043         {
5044           pseudo_destructor_p = true;
5045           postfix_expression
5046             = finish_pseudo_destructor_expr (postfix_expression,
5047                                              s, TREE_TYPE (type));
5048         }
5049     }
5050
5051   if (!pseudo_destructor_p)
5052     {
5053       /* If the SCOPE is not a scalar type, we are looking at an
5054          ordinary class member access expression, rather than a
5055          pseudo-destructor-name.  */
5056       bool template_p;
5057       cp_token *token = cp_lexer_peek_token (parser->lexer);
5058       /* Parse the id-expression.  */
5059       name = (cp_parser_id_expression
5060               (parser,
5061                cp_parser_optional_template_keyword (parser),
5062                /*check_dependency_p=*/true,
5063                &template_p,
5064                /*declarator_p=*/false,
5065                /*optional_p=*/false));
5066       /* In general, build a SCOPE_REF if the member name is qualified.
5067          However, if the name was not dependent and has already been
5068          resolved; there is no need to build the SCOPE_REF.  For example;
5069
5070              struct X { void f(); };
5071              template <typename T> void f(T* t) { t->X::f(); }
5072
5073          Even though "t" is dependent, "X::f" is not and has been resolved
5074          to a BASELINK; there is no need to include scope information.  */
5075
5076       /* But we do need to remember that there was an explicit scope for
5077          virtual function calls.  */
5078       if (parser->scope)
5079         *idk = CP_ID_KIND_QUALIFIED;
5080
5081       /* If the name is a template-id that names a type, we will get a
5082          TYPE_DECL here.  That is invalid code.  */
5083       if (TREE_CODE (name) == TYPE_DECL)
5084         {
5085           error ("%Hinvalid use of %qD", &token->location, name);
5086           postfix_expression = error_mark_node;
5087         }
5088       else
5089         {
5090           if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
5091             {
5092               name = build_qualified_name (/*type=*/NULL_TREE,
5093                                            parser->scope,
5094                                            name,
5095                                            template_p);
5096               parser->scope = NULL_TREE;
5097               parser->qualifying_scope = NULL_TREE;
5098               parser->object_scope = NULL_TREE;
5099             }
5100           if (scope && name && BASELINK_P (name))
5101             adjust_result_of_qualified_name_lookup
5102               (name, BINFO_TYPE (BASELINK_ACCESS_BINFO (name)), scope);
5103           postfix_expression
5104             = finish_class_member_access_expr (postfix_expression, name,
5105                                                template_p, 
5106                                                tf_warning_or_error);
5107         }
5108     }
5109
5110   /* We no longer need to look up names in the scope of the object on
5111      the left-hand side of the `.' or `->' operator.  */
5112   parser->context->object_type = NULL_TREE;
5113
5114   /* Outside of offsetof, these operators may not appear in
5115      constant-expressions.  */
5116   if (!for_offsetof
5117       && (cp_parser_non_integral_constant_expression
5118           (parser, token_type == CPP_DEREF ? "%<->%>" : "%<.%>")))
5119     postfix_expression = error_mark_node;
5120
5121   return postfix_expression;
5122 }
5123
5124 /* Parse a parenthesized expression-list.
5125
5126    expression-list:
5127      assignment-expression
5128      expression-list, assignment-expression
5129
5130    attribute-list:
5131      expression-list
5132      identifier
5133      identifier, expression-list
5134
5135    CAST_P is true if this expression is the target of a cast.
5136
5137    ALLOW_EXPANSION_P is true if this expression allows expansion of an
5138    argument pack.
5139
5140    Returns a vector of trees.  Each element is a representation of an
5141    assignment-expression.  NULL is returned if the ( and or ) are
5142    missing.  An empty, but allocated, vector is returned on no
5143    expressions.  The parentheses are eaten.  IS_ATTRIBUTE_LIST is true
5144    if this is really an attribute list being parsed.  If
5145    NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P indicates whether or
5146    not all of the expressions in the list were constant.  */
5147
5148 static VEC(tree,gc) *
5149 cp_parser_parenthesized_expression_list (cp_parser* parser,
5150                                          bool is_attribute_list,
5151                                          bool cast_p,
5152                                          bool allow_expansion_p,
5153                                          bool *non_constant_p)
5154 {
5155   VEC(tree,gc) *expression_list;
5156   bool fold_expr_p = is_attribute_list;
5157   tree identifier = NULL_TREE;
5158   bool saved_greater_than_is_operator_p;
5159
5160   /* Assume all the expressions will be constant.  */
5161   if (non_constant_p)
5162     *non_constant_p = false;
5163
5164   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
5165     return NULL;
5166
5167   expression_list = make_tree_vector ();
5168
5169   /* Within a parenthesized expression, a `>' token is always
5170      the greater-than operator.  */
5171   saved_greater_than_is_operator_p
5172     = parser->greater_than_is_operator_p;
5173   parser->greater_than_is_operator_p = true;
5174
5175   /* Consume expressions until there are no more.  */
5176   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
5177     while (true)
5178       {
5179         tree expr;
5180
5181         /* At the beginning of attribute lists, check to see if the
5182            next token is an identifier.  */
5183         if (is_attribute_list
5184             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
5185           {
5186             cp_token *token;
5187
5188             /* Consume the identifier.  */
5189             token = cp_lexer_consume_token (parser->lexer);
5190             /* Save the identifier.  */
5191             identifier = token->u.value;
5192           }
5193         else
5194           {
5195             bool expr_non_constant_p;
5196
5197             /* Parse the next assignment-expression.  */
5198             if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
5199               {
5200                 /* A braced-init-list.  */
5201                 maybe_warn_cpp0x ("extended initializer lists");
5202                 expr = cp_parser_braced_list (parser, &expr_non_constant_p);
5203                 if (non_constant_p && expr_non_constant_p)
5204                   *non_constant_p = true;
5205               }
5206             else if (non_constant_p)
5207               {
5208                 expr = (cp_parser_constant_expression
5209                         (parser, /*allow_non_constant_p=*/true,
5210                          &expr_non_constant_p));
5211                 if (expr_non_constant_p)
5212                   *non_constant_p = true;
5213               }
5214             else
5215               expr = cp_parser_assignment_expression (parser, cast_p, NULL);
5216
5217             if (fold_expr_p)
5218               expr = fold_non_dependent_expr (expr);
5219
5220             /* If we have an ellipsis, then this is an expression
5221                expansion.  */
5222             if (allow_expansion_p
5223                 && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
5224               {
5225                 /* Consume the `...'.  */
5226                 cp_lexer_consume_token (parser->lexer);
5227
5228                 /* Build the argument pack.  */
5229                 expr = make_pack_expansion (expr);
5230               }
5231
5232              /* Add it to the list.  We add error_mark_node
5233                 expressions to the list, so that we can still tell if
5234                 the correct form for a parenthesized expression-list
5235                 is found. That gives better errors.  */
5236             VEC_safe_push (tree, gc, expression_list, expr);
5237
5238             if (expr == error_mark_node)
5239               goto skip_comma;
5240           }
5241
5242         /* After the first item, attribute lists look the same as
5243            expression lists.  */
5244         is_attribute_list = false;
5245
5246       get_comma:;
5247         /* If the next token isn't a `,', then we are done.  */
5248         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
5249           break;
5250
5251         /* Otherwise, consume the `,' and keep going.  */
5252         cp_lexer_consume_token (parser->lexer);
5253       }
5254
5255   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
5256     {
5257       int ending;
5258
5259     skip_comma:;
5260       /* We try and resync to an unnested comma, as that will give the
5261          user better diagnostics.  */
5262       ending = cp_parser_skip_to_closing_parenthesis (parser,
5263                                                       /*recovering=*/true,
5264                                                       /*or_comma=*/true,
5265                                                       /*consume_paren=*/true);
5266       if (ending < 0)
5267         goto get_comma;
5268       if (!ending)
5269         {
5270           parser->greater_than_is_operator_p
5271             = saved_greater_than_is_operator_p;
5272           return NULL;
5273         }
5274     }
5275
5276   parser->greater_than_is_operator_p
5277     = saved_greater_than_is_operator_p;
5278
5279   if (identifier)
5280     VEC_safe_insert (tree, gc, expression_list, 0, identifier);
5281
5282   return expression_list;
5283 }
5284
5285 /* Parse a pseudo-destructor-name.
5286
5287    pseudo-destructor-name:
5288      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
5289      :: [opt] nested-name-specifier template template-id :: ~ type-name
5290      :: [opt] nested-name-specifier [opt] ~ type-name
5291
5292    If either of the first two productions is used, sets *SCOPE to the
5293    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
5294    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
5295    or ERROR_MARK_NODE if the parse fails.  */
5296
5297 static void
5298 cp_parser_pseudo_destructor_name (cp_parser* parser,
5299                                   tree* scope,
5300                                   tree* type)
5301 {
5302   bool nested_name_specifier_p;
5303
5304   /* Assume that things will not work out.  */
5305   *type = error_mark_node;
5306
5307   /* Look for the optional `::' operator.  */
5308   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
5309   /* Look for the optional nested-name-specifier.  */
5310   nested_name_specifier_p
5311     = (cp_parser_nested_name_specifier_opt (parser,
5312                                             /*typename_keyword_p=*/false,
5313                                             /*check_dependency_p=*/true,
5314                                             /*type_p=*/false,
5315                                             /*is_declaration=*/false)
5316        != NULL_TREE);
5317   /* Now, if we saw a nested-name-specifier, we might be doing the
5318      second production.  */
5319   if (nested_name_specifier_p
5320       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
5321     {
5322       /* Consume the `template' keyword.  */
5323       cp_lexer_consume_token (parser->lexer);
5324       /* Parse the template-id.  */
5325       cp_parser_template_id (parser,
5326                              /*template_keyword_p=*/true,
5327                              /*check_dependency_p=*/false,
5328                              /*is_declaration=*/true);
5329       /* Look for the `::' token.  */
5330       cp_parser_require (parser, CPP_SCOPE, "%<::%>");
5331     }
5332   /* If the next token is not a `~', then there might be some
5333      additional qualification.  */
5334   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
5335     {
5336       /* At this point, we're looking for "type-name :: ~".  The type-name
5337          must not be a class-name, since this is a pseudo-destructor.  So,
5338          it must be either an enum-name, or a typedef-name -- both of which
5339          are just identifiers.  So, we peek ahead to check that the "::"
5340          and "~" tokens are present; if they are not, then we can avoid
5341          calling type_name.  */
5342       if (cp_lexer_peek_token (parser->lexer)->type != CPP_NAME
5343           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE
5344           || cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_COMPL)
5345         {
5346           cp_parser_error (parser, "non-scalar type");
5347           return;
5348         }
5349
5350       /* Look for the type-name.  */
5351       *scope = TREE_TYPE (cp_parser_nonclass_name (parser));
5352       if (*scope == error_mark_node)
5353         return;
5354
5355       /* Look for the `::' token.  */
5356       cp_parser_require (parser, CPP_SCOPE, "%<::%>");
5357     }
5358   else
5359     *scope = NULL_TREE;
5360
5361   /* Look for the `~'.  */
5362   cp_parser_require (parser, CPP_COMPL, "%<~%>");
5363   /* Look for the type-name again.  We are not responsible for
5364      checking that it matches the first type-name.  */
5365   *type = cp_parser_nonclass_name (parser);
5366 }
5367
5368 /* Parse a unary-expression.
5369
5370    unary-expression:
5371      postfix-expression
5372      ++ cast-expression
5373      -- cast-expression
5374      unary-operator cast-expression
5375      sizeof unary-expression
5376      sizeof ( type-id )
5377      new-expression
5378      delete-expression
5379
5380    GNU Extensions:
5381
5382    unary-expression:
5383      __extension__ cast-expression
5384      __alignof__ unary-expression
5385      __alignof__ ( type-id )
5386      __real__ cast-expression
5387      __imag__ cast-expression
5388      && identifier
5389
5390    ADDRESS_P is true iff the unary-expression is appearing as the
5391    operand of the `&' operator.   CAST_P is true if this expression is
5392    the target of a cast.
5393
5394    Returns a representation of the expression.  */
5395
5396 static tree
5397 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p,
5398                             cp_id_kind * pidk)
5399 {
5400   cp_token *token;
5401   enum tree_code unary_operator;
5402
5403   /* Peek at the next token.  */
5404   token = cp_lexer_peek_token (parser->lexer);
5405   /* Some keywords give away the kind of expression.  */
5406   if (token->type == CPP_KEYWORD)
5407     {
5408       enum rid keyword = token->keyword;
5409
5410       switch (keyword)
5411         {
5412         case RID_ALIGNOF:
5413         case RID_SIZEOF:
5414           {
5415             tree operand;
5416             enum tree_code op;
5417
5418             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
5419             /* Consume the token.  */
5420             cp_lexer_consume_token (parser->lexer);
5421             /* Parse the operand.  */
5422             operand = cp_parser_sizeof_operand (parser, keyword);
5423
5424             if (TYPE_P (operand))
5425               return cxx_sizeof_or_alignof_type (operand, op, true);
5426             else
5427               return cxx_sizeof_or_alignof_expr (operand, op, true);
5428           }
5429
5430         case RID_NEW:
5431           return cp_parser_new_expression (parser);
5432
5433         case RID_DELETE:
5434           return cp_parser_delete_expression (parser);
5435
5436         case RID_EXTENSION:
5437           {
5438             /* The saved value of the PEDANTIC flag.  */
5439             int saved_pedantic;
5440             tree expr;
5441
5442             /* Save away the PEDANTIC flag.  */
5443             cp_parser_extension_opt (parser, &saved_pedantic);
5444             /* Parse the cast-expression.  */
5445             expr = cp_parser_simple_cast_expression (parser);
5446             /* Restore the PEDANTIC flag.  */
5447             pedantic = saved_pedantic;
5448
5449             return expr;
5450           }
5451
5452         case RID_REALPART:
5453         case RID_IMAGPART:
5454           {
5455             tree expression;
5456
5457             /* Consume the `__real__' or `__imag__' token.  */
5458             cp_lexer_consume_token (parser->lexer);
5459             /* Parse the cast-expression.  */
5460             expression = cp_parser_simple_cast_expression (parser);
5461             /* Create the complete representation.  */
5462             return build_x_unary_op ((keyword == RID_REALPART
5463                                       ? REALPART_EXPR : IMAGPART_EXPR),
5464                                      expression,
5465                                      tf_warning_or_error);
5466           }
5467           break;
5468
5469         default:
5470           break;
5471         }
5472     }
5473
5474   /* Look for the `:: new' and `:: delete', which also signal the
5475      beginning of a new-expression, or delete-expression,
5476      respectively.  If the next token is `::', then it might be one of
5477      these.  */
5478   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
5479     {
5480       enum rid keyword;
5481
5482       /* See if the token after the `::' is one of the keywords in
5483          which we're interested.  */
5484       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
5485       /* If it's `new', we have a new-expression.  */
5486       if (keyword == RID_NEW)
5487         return cp_parser_new_expression (parser);
5488       /* Similarly, for `delete'.  */
5489       else if (keyword == RID_DELETE)
5490         return cp_parser_delete_expression (parser);
5491     }
5492
5493   /* Look for a unary operator.  */
5494   unary_operator = cp_parser_unary_operator (token);
5495   /* The `++' and `--' operators can be handled similarly, even though
5496      they are not technically unary-operators in the grammar.  */
5497   if (unary_operator == ERROR_MARK)
5498     {
5499       if (token->type == CPP_PLUS_PLUS)
5500         unary_operator = PREINCREMENT_EXPR;
5501       else if (token->type == CPP_MINUS_MINUS)
5502         unary_operator = PREDECREMENT_EXPR;
5503       /* Handle the GNU address-of-label extension.  */
5504       else if (cp_parser_allow_gnu_extensions_p (parser)
5505                && token->type == CPP_AND_AND)
5506         {
5507           tree identifier;
5508           tree expression;
5509           location_t loc = cp_lexer_peek_token (parser->lexer)->location;
5510
5511           /* Consume the '&&' token.  */
5512           cp_lexer_consume_token (parser->lexer);
5513           /* Look for the identifier.  */
5514           identifier = cp_parser_identifier (parser);
5515           /* Create an expression representing the address.  */
5516           expression = finish_label_address_expr (identifier, loc);
5517           if (cp_parser_non_integral_constant_expression (parser,
5518                                                 "the address of a label"))
5519             expression = error_mark_node;
5520           return expression;
5521         }
5522     }
5523   if (unary_operator != ERROR_MARK)
5524     {
5525       tree cast_expression;
5526       tree expression = error_mark_node;
5527       const char *non_constant_p = NULL;
5528
5529       /* Consume the operator token.  */
5530       token = cp_lexer_consume_token (parser->lexer);
5531       /* Parse the cast-expression.  */
5532       cast_expression
5533         = cp_parser_cast_expression (parser,
5534                                      unary_operator == ADDR_EXPR,
5535                                      /*cast_p=*/false, pidk);
5536       /* Now, build an appropriate representation.  */
5537       switch (unary_operator)
5538         {
5539         case INDIRECT_REF:
5540           non_constant_p = "%<*%>";
5541           expression = build_x_indirect_ref (cast_expression, "unary *",
5542                                              tf_warning_or_error);
5543           break;
5544
5545         case ADDR_EXPR:
5546           non_constant_p = "%<&%>";
5547           /* Fall through.  */
5548         case BIT_NOT_EXPR:
5549           expression = build_x_unary_op (unary_operator, cast_expression,
5550                                          tf_warning_or_error);
5551           break;
5552
5553         case PREINCREMENT_EXPR:
5554         case PREDECREMENT_EXPR:
5555           non_constant_p = (unary_operator == PREINCREMENT_EXPR
5556                             ? "%<++%>" : "%<--%>");
5557           /* Fall through.  */
5558         case UNARY_PLUS_EXPR:
5559         case NEGATE_EXPR:
5560         case TRUTH_NOT_EXPR:
5561           expression = finish_unary_op_expr (unary_operator, cast_expression);
5562           break;
5563
5564         default:
5565           gcc_unreachable ();
5566         }
5567
5568       if (non_constant_p
5569           && cp_parser_non_integral_constant_expression (parser,
5570                                                          non_constant_p))
5571         expression = error_mark_node;
5572
5573       return expression;
5574     }
5575
5576   return cp_parser_postfix_expression (parser, address_p, cast_p,
5577                                        /*member_access_only_p=*/false,
5578                                        pidk);
5579 }
5580
5581 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
5582    unary-operator, the corresponding tree code is returned.  */
5583
5584 static enum tree_code
5585 cp_parser_unary_operator (cp_token* token)
5586 {
5587   switch (token->type)
5588     {
5589     case CPP_MULT:
5590       return INDIRECT_REF;
5591
5592     case CPP_AND:
5593       return ADDR_EXPR;
5594
5595     case CPP_PLUS:
5596       return UNARY_PLUS_EXPR;
5597
5598     case CPP_MINUS:
5599       return NEGATE_EXPR;
5600
5601     case CPP_NOT:
5602       return TRUTH_NOT_EXPR;
5603
5604     case CPP_COMPL:
5605       return BIT_NOT_EXPR;
5606
5607     default:
5608       return ERROR_MARK;
5609     }
5610 }
5611
5612 /* Parse a new-expression.
5613
5614    new-expression:
5615      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
5616      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
5617
5618    Returns a representation of the expression.  */
5619
5620 static tree
5621 cp_parser_new_expression (cp_parser* parser)
5622 {
5623   bool global_scope_p;
5624   VEC(tree,gc) *placement;
5625   tree type;
5626   VEC(tree,gc) *initializer;
5627   tree nelts;
5628   tree ret;
5629
5630   /* Look for the optional `::' operator.  */
5631   global_scope_p
5632     = (cp_parser_global_scope_opt (parser,
5633                                    /*current_scope_valid_p=*/false)
5634        != NULL_TREE);
5635   /* Look for the `new' operator.  */
5636   cp_parser_require_keyword (parser, RID_NEW, "%<new%>");
5637   /* There's no easy way to tell a new-placement from the
5638      `( type-id )' construct.  */
5639   cp_parser_parse_tentatively (parser);
5640   /* Look for a new-placement.  */
5641   placement = cp_parser_new_placement (parser);
5642   /* If that didn't work out, there's no new-placement.  */
5643   if (!cp_parser_parse_definitely (parser))
5644     {
5645       if (placement != NULL)
5646         release_tree_vector (placement);
5647       placement = NULL;
5648     }
5649
5650   /* If the next token is a `(', then we have a parenthesized
5651      type-id.  */
5652   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5653     {
5654       cp_token *token;
5655       /* Consume the `('.  */
5656       cp_lexer_consume_token (parser->lexer);
5657       /* Parse the type-id.  */
5658       type = cp_parser_type_id (parser);
5659       /* Look for the closing `)'.  */
5660       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
5661       token = cp_lexer_peek_token (parser->lexer);
5662       /* There should not be a direct-new-declarator in this production,
5663          but GCC used to allowed this, so we check and emit a sensible error
5664          message for this case.  */
5665       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5666         {
5667           error ("%Harray bound forbidden after parenthesized type-id",
5668                  &token->location);
5669           inform (token->location, 
5670                   "try removing the parentheses around the type-id");
5671           cp_parser_direct_new_declarator (parser);
5672         }
5673       nelts = NULL_TREE;
5674     }
5675   /* Otherwise, there must be a new-type-id.  */
5676   else
5677     type = cp_parser_new_type_id (parser, &nelts);
5678
5679   /* If the next token is a `(' or '{', then we have a new-initializer.  */
5680   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
5681       || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
5682     initializer = cp_parser_new_initializer (parser);
5683   else
5684     initializer = NULL;
5685
5686   /* A new-expression may not appear in an integral constant
5687      expression.  */
5688   if (cp_parser_non_integral_constant_expression (parser, "%<new%>"))
5689     ret = error_mark_node;
5690   else
5691     {
5692       /* Create a representation of the new-expression.  */
5693       ret = build_new (&placement, type, nelts, &initializer, global_scope_p,
5694                        tf_warning_or_error);
5695     }
5696
5697   if (placement != NULL)
5698     release_tree_vector (placement);
5699   if (initializer != NULL)
5700     release_tree_vector (initializer);
5701
5702   return ret;
5703 }
5704
5705 /* Parse a new-placement.
5706
5707    new-placement:
5708      ( expression-list )
5709
5710    Returns the same representation as for an expression-list.  */
5711
5712 static VEC(tree,gc) *
5713 cp_parser_new_placement (cp_parser* parser)
5714 {
5715   VEC(tree,gc) *expression_list;
5716
5717   /* Parse the expression-list.  */
5718   expression_list = (cp_parser_parenthesized_expression_list
5719                      (parser, false, /*cast_p=*/false, /*allow_expansion_p=*/true,
5720                       /*non_constant_p=*/NULL));
5721
5722   return expression_list;
5723 }
5724
5725 /* Parse a new-type-id.
5726
5727    new-type-id:
5728      type-specifier-seq new-declarator [opt]
5729
5730    Returns the TYPE allocated.  If the new-type-id indicates an array
5731    type, *NELTS is set to the number of elements in the last array
5732    bound; the TYPE will not include the last array bound.  */
5733
5734 static tree
5735 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
5736 {
5737   cp_decl_specifier_seq type_specifier_seq;
5738   cp_declarator *new_declarator;
5739   cp_declarator *declarator;
5740   cp_declarator *outer_declarator;
5741   const char *saved_message;
5742   tree type;
5743
5744   /* The type-specifier sequence must not contain type definitions.
5745      (It cannot contain declarations of new types either, but if they
5746      are not definitions we will catch that because they are not
5747      complete.)  */
5748   saved_message = parser->type_definition_forbidden_message;
5749   parser->type_definition_forbidden_message
5750     = "types may not be defined in a new-type-id";
5751   /* Parse the type-specifier-seq.  */
5752   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
5753                                 &type_specifier_seq);
5754   /* Restore the old message.  */
5755   parser->type_definition_forbidden_message = saved_message;
5756   /* Parse the new-declarator.  */
5757   new_declarator = cp_parser_new_declarator_opt (parser);
5758
5759   /* Determine the number of elements in the last array dimension, if
5760      any.  */
5761   *nelts = NULL_TREE;
5762   /* Skip down to the last array dimension.  */
5763   declarator = new_declarator;
5764   outer_declarator = NULL;
5765   while (declarator && (declarator->kind == cdk_pointer
5766                         || declarator->kind == cdk_ptrmem))
5767     {
5768       outer_declarator = declarator;
5769       declarator = declarator->declarator;
5770     }
5771   while (declarator
5772          && declarator->kind == cdk_array
5773          && declarator->declarator
5774          && declarator->declarator->kind == cdk_array)
5775     {
5776       outer_declarator = declarator;
5777       declarator = declarator->declarator;
5778     }
5779
5780   if (declarator && declarator->kind == cdk_array)
5781     {
5782       *nelts = declarator->u.array.bounds;
5783       if (*nelts == error_mark_node)
5784         *nelts = integer_one_node;
5785
5786       if (outer_declarator)
5787         outer_declarator->declarator = declarator->declarator;
5788       else
5789         new_declarator = NULL;
5790     }
5791
5792   type = groktypename (&type_specifier_seq, new_declarator, false);
5793   return type;
5794 }
5795
5796 /* Parse an (optional) new-declarator.
5797
5798    new-declarator:
5799      ptr-operator new-declarator [opt]
5800      direct-new-declarator
5801
5802    Returns the declarator.  */
5803
5804 static cp_declarator *
5805 cp_parser_new_declarator_opt (cp_parser* parser)
5806 {
5807   enum tree_code code;
5808   tree type;
5809   cp_cv_quals cv_quals;
5810
5811   /* We don't know if there's a ptr-operator next, or not.  */
5812   cp_parser_parse_tentatively (parser);
5813   /* Look for a ptr-operator.  */
5814   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
5815   /* If that worked, look for more new-declarators.  */
5816   if (cp_parser_parse_definitely (parser))
5817     {
5818       cp_declarator *declarator;
5819
5820       /* Parse another optional declarator.  */
5821       declarator = cp_parser_new_declarator_opt (parser);
5822
5823       return cp_parser_make_indirect_declarator
5824         (code, type, cv_quals, declarator);
5825     }
5826
5827   /* If the next token is a `[', there is a direct-new-declarator.  */
5828   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5829     return cp_parser_direct_new_declarator (parser);
5830
5831   return NULL;
5832 }
5833
5834 /* Parse a direct-new-declarator.
5835
5836    direct-new-declarator:
5837      [ expression ]
5838      direct-new-declarator [constant-expression]
5839
5840    */
5841
5842 static cp_declarator *
5843 cp_parser_direct_new_declarator (cp_parser* parser)
5844 {
5845   cp_declarator *declarator = NULL;
5846
5847   while (true)
5848     {
5849       tree expression;
5850
5851       /* Look for the opening `['.  */
5852       cp_parser_require (parser, CPP_OPEN_SQUARE, "%<[%>");
5853       /* The first expression is not required to be constant.  */
5854       if (!declarator)
5855         {
5856           cp_token *token = cp_lexer_peek_token (parser->lexer);
5857           expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
5858           /* The standard requires that the expression have integral
5859              type.  DR 74 adds enumeration types.  We believe that the
5860              real intent is that these expressions be handled like the
5861              expression in a `switch' condition, which also allows
5862              classes with a single conversion to integral or
5863              enumeration type.  */
5864           if (!processing_template_decl)
5865             {
5866               expression
5867                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5868                                               expression,
5869                                               /*complain=*/true);
5870               if (!expression)
5871                 {
5872                   error ("%Hexpression in new-declarator must have integral "
5873                          "or enumeration type", &token->location);
5874                   expression = error_mark_node;
5875                 }
5876             }
5877         }
5878       /* But all the other expressions must be.  */
5879       else
5880         expression
5881           = cp_parser_constant_expression (parser,
5882                                            /*allow_non_constant=*/false,
5883                                            NULL);
5884       /* Look for the closing `]'.  */
5885       cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
5886
5887       /* Add this bound to the declarator.  */
5888       declarator = make_array_declarator (declarator, expression);
5889
5890       /* If the next token is not a `[', then there are no more
5891          bounds.  */
5892       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
5893         break;
5894     }
5895
5896   return declarator;
5897 }
5898
5899 /* Parse a new-initializer.
5900
5901    new-initializer:
5902      ( expression-list [opt] )
5903      braced-init-list
5904
5905    Returns a representation of the expression-list.  */
5906
5907 static VEC(tree,gc) *
5908 cp_parser_new_initializer (cp_parser* parser)
5909 {
5910   VEC(tree,gc) *expression_list;
5911
5912   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
5913     {
5914       tree t;
5915       bool expr_non_constant_p;
5916       maybe_warn_cpp0x ("extended initializer lists");
5917       t = cp_parser_braced_list (parser, &expr_non_constant_p);
5918       CONSTRUCTOR_IS_DIRECT_INIT (t) = 1;
5919       expression_list = make_tree_vector_single (t);
5920     }
5921   else
5922     expression_list = (cp_parser_parenthesized_expression_list
5923                        (parser, false, /*cast_p=*/false, /*allow_expansion_p=*/true,
5924                         /*non_constant_p=*/NULL));
5925
5926   return expression_list;
5927 }
5928
5929 /* Parse a delete-expression.
5930
5931    delete-expression:
5932      :: [opt] delete cast-expression
5933      :: [opt] delete [ ] cast-expression
5934
5935    Returns a representation of the expression.  */
5936
5937 static tree
5938 cp_parser_delete_expression (cp_parser* parser)
5939 {
5940   bool global_scope_p;
5941   bool array_p;
5942   tree expression;
5943
5944   /* Look for the optional `::' operator.  */
5945   global_scope_p
5946     = (cp_parser_global_scope_opt (parser,
5947                                    /*current_scope_valid_p=*/false)
5948        != NULL_TREE);
5949   /* Look for the `delete' keyword.  */
5950   cp_parser_require_keyword (parser, RID_DELETE, "%<delete%>");
5951   /* See if the array syntax is in use.  */
5952   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5953     {
5954       /* Consume the `[' token.  */
5955       cp_lexer_consume_token (parser->lexer);
5956       /* Look for the `]' token.  */
5957       cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
5958       /* Remember that this is the `[]' construct.  */
5959       array_p = true;
5960     }
5961   else
5962     array_p = false;
5963
5964   /* Parse the cast-expression.  */
5965   expression = cp_parser_simple_cast_expression (parser);
5966
5967   /* A delete-expression may not appear in an integral constant
5968      expression.  */
5969   if (cp_parser_non_integral_constant_expression (parser, "%<delete%>"))
5970     return error_mark_node;
5971
5972   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p);
5973 }
5974
5975 /* Returns true if TOKEN may start a cast-expression and false
5976    otherwise.  */
5977
5978 static bool
5979 cp_parser_token_starts_cast_expression (cp_token *token)
5980 {
5981   switch (token->type)
5982     {
5983     case CPP_COMMA:
5984     case CPP_SEMICOLON:
5985     case CPP_QUERY:
5986     case CPP_COLON:
5987     case CPP_CLOSE_SQUARE:
5988     case CPP_CLOSE_PAREN:
5989     case CPP_CLOSE_BRACE:
5990     case CPP_DOT:
5991     case CPP_DOT_STAR:
5992     case CPP_DEREF:
5993     case CPP_DEREF_STAR:
5994     case CPP_DIV:
5995     case CPP_MOD:
5996     case CPP_LSHIFT:
5997     case CPP_RSHIFT:
5998     case CPP_LESS:
5999     case CPP_GREATER:
6000     case CPP_LESS_EQ:
6001     case CPP_GREATER_EQ:
6002     case CPP_EQ_EQ:
6003     case CPP_NOT_EQ:
6004     case CPP_EQ:
6005     case CPP_MULT_EQ:
6006     case CPP_DIV_EQ:
6007     case CPP_MOD_EQ:
6008     case CPP_PLUS_EQ:
6009     case CPP_MINUS_EQ:
6010     case CPP_RSHIFT_EQ:
6011     case CPP_LSHIFT_EQ:
6012     case CPP_AND_EQ:
6013     case CPP_XOR_EQ:
6014     case CPP_OR_EQ:
6015     case CPP_XOR:
6016     case CPP_OR:
6017     case CPP_OR_OR:
6018     case CPP_EOF:
6019       return false;
6020
6021       /* '[' may start a primary-expression in obj-c++.  */
6022     case CPP_OPEN_SQUARE:
6023       return c_dialect_objc ();
6024
6025     default:
6026       return true;
6027     }
6028 }
6029
6030 /* Parse a cast-expression.
6031
6032    cast-expression:
6033      unary-expression
6034      ( type-id ) cast-expression
6035
6036    ADDRESS_P is true iff the unary-expression is appearing as the
6037    operand of the `&' operator.   CAST_P is true if this expression is
6038    the target of a cast.
6039
6040    Returns a representation of the expression.  */
6041
6042 static tree
6043 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p,
6044                            cp_id_kind * pidk)
6045 {
6046   /* If it's a `(', then we might be looking at a cast.  */
6047   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
6048     {
6049       tree type = NULL_TREE;
6050       tree expr = NULL_TREE;
6051       bool compound_literal_p;
6052       const char *saved_message;
6053
6054       /* There's no way to know yet whether or not this is a cast.
6055          For example, `(int (3))' is a unary-expression, while `(int)
6056          3' is a cast.  So, we resort to parsing tentatively.  */
6057       cp_parser_parse_tentatively (parser);
6058       /* Types may not be defined in a cast.  */
6059       saved_message = parser->type_definition_forbidden_message;
6060       parser->type_definition_forbidden_message
6061         = "types may not be defined in casts";
6062       /* Consume the `('.  */
6063       cp_lexer_consume_token (parser->lexer);
6064       /* A very tricky bit is that `(struct S) { 3 }' is a
6065          compound-literal (which we permit in C++ as an extension).
6066          But, that construct is not a cast-expression -- it is a
6067          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
6068          is legal; if the compound-literal were a cast-expression,
6069          you'd need an extra set of parentheses.)  But, if we parse
6070          the type-id, and it happens to be a class-specifier, then we
6071          will commit to the parse at that point, because we cannot
6072          undo the action that is done when creating a new class.  So,
6073          then we cannot back up and do a postfix-expression.
6074
6075          Therefore, we scan ahead to the closing `)', and check to see
6076          if the token after the `)' is a `{'.  If so, we are not
6077          looking at a cast-expression.
6078
6079          Save tokens so that we can put them back.  */
6080       cp_lexer_save_tokens (parser->lexer);
6081       /* Skip tokens until the next token is a closing parenthesis.
6082          If we find the closing `)', and the next token is a `{', then
6083          we are looking at a compound-literal.  */
6084       compound_literal_p
6085         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
6086                                                   /*consume_paren=*/true)
6087            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
6088       /* Roll back the tokens we skipped.  */
6089       cp_lexer_rollback_tokens (parser->lexer);
6090       /* If we were looking at a compound-literal, simulate an error
6091          so that the call to cp_parser_parse_definitely below will
6092          fail.  */
6093       if (compound_literal_p)
6094         cp_parser_simulate_error (parser);
6095       else
6096         {
6097           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
6098           parser->in_type_id_in_expr_p = true;
6099           /* Look for the type-id.  */
6100           type = cp_parser_type_id (parser);
6101           /* Look for the closing `)'.  */
6102           cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
6103           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
6104         }
6105
6106       /* Restore the saved message.  */
6107       parser->type_definition_forbidden_message = saved_message;
6108
6109       /* At this point this can only be either a cast or a
6110          parenthesized ctor such as `(T ())' that looks like a cast to
6111          function returning T.  */
6112       if (!cp_parser_error_occurred (parser)
6113           && cp_parser_token_starts_cast_expression (cp_lexer_peek_token
6114                                                      (parser->lexer)))
6115         {
6116           cp_parser_parse_definitely (parser);
6117           expr = cp_parser_cast_expression (parser,
6118                                             /*address_p=*/false,
6119                                             /*cast_p=*/true, pidk);
6120
6121           /* Warn about old-style casts, if so requested.  */
6122           if (warn_old_style_cast
6123               && !in_system_header
6124               && !VOID_TYPE_P (type)
6125               && current_lang_name != lang_name_c)
6126             warning (OPT_Wold_style_cast, "use of old-style cast");
6127
6128           /* Only type conversions to integral or enumeration types
6129              can be used in constant-expressions.  */
6130           if (!cast_valid_in_integral_constant_expression_p (type)
6131               && (cp_parser_non_integral_constant_expression
6132                   (parser,
6133                    "a cast to a type other than an integral or "
6134                    "enumeration type")))
6135             return error_mark_node;
6136
6137           /* Perform the cast.  */
6138           expr = build_c_cast (type, expr);
6139           return expr;
6140         }
6141       else 
6142         cp_parser_abort_tentative_parse (parser);
6143     }
6144
6145   /* If we get here, then it's not a cast, so it must be a
6146      unary-expression.  */
6147   return cp_parser_unary_expression (parser, address_p, cast_p, pidk);
6148 }
6149
6150 /* Parse a binary expression of the general form:
6151
6152    pm-expression:
6153      cast-expression
6154      pm-expression .* cast-expression
6155      pm-expression ->* cast-expression
6156
6157    multiplicative-expression:
6158      pm-expression
6159      multiplicative-expression * pm-expression
6160      multiplicative-expression / pm-expression
6161      multiplicative-expression % pm-expression
6162
6163    additive-expression:
6164      multiplicative-expression
6165      additive-expression + multiplicative-expression
6166      additive-expression - multiplicative-expression
6167
6168    shift-expression:
6169      additive-expression
6170      shift-expression << additive-expression
6171      shift-expression >> additive-expression
6172
6173    relational-expression:
6174      shift-expression
6175      relational-expression < shift-expression
6176      relational-expression > shift-expression
6177      relational-expression <= shift-expression
6178      relational-expression >= shift-expression
6179
6180   GNU Extension:
6181
6182    relational-expression:
6183      relational-expression <? shift-expression
6184      relational-expression >? shift-expression
6185
6186    equality-expression:
6187      relational-expression
6188      equality-expression == relational-expression
6189      equality-expression != relational-expression
6190
6191    and-expression:
6192      equality-expression
6193      and-expression & equality-expression
6194
6195    exclusive-or-expression:
6196      and-expression
6197      exclusive-or-expression ^ and-expression
6198
6199    inclusive-or-expression:
6200      exclusive-or-expression
6201      inclusive-or-expression | exclusive-or-expression
6202
6203    logical-and-expression:
6204      inclusive-or-expression
6205      logical-and-expression && inclusive-or-expression
6206
6207    logical-or-expression:
6208      logical-and-expression
6209      logical-or-expression || logical-and-expression
6210
6211    All these are implemented with a single function like:
6212
6213    binary-expression:
6214      simple-cast-expression
6215      binary-expression <token> binary-expression
6216
6217    CAST_P is true if this expression is the target of a cast.
6218
6219    The binops_by_token map is used to get the tree codes for each <token> type.
6220    binary-expressions are associated according to a precedence table.  */
6221
6222 #define TOKEN_PRECEDENCE(token)                              \
6223 (((token->type == CPP_GREATER                                \
6224    || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT)) \
6225   && !parser->greater_than_is_operator_p)                    \
6226  ? PREC_NOT_OPERATOR                                         \
6227  : binops_by_token[token->type].prec)
6228
6229 static tree
6230 cp_parser_binary_expression (cp_parser* parser, bool cast_p,
6231                              bool no_toplevel_fold_p,
6232                              enum cp_parser_prec prec,
6233                              cp_id_kind * pidk)
6234 {
6235   cp_parser_expression_stack stack;
6236   cp_parser_expression_stack_entry *sp = &stack[0];
6237   tree lhs, rhs;
6238   cp_token *token;
6239   enum tree_code tree_type, lhs_type, rhs_type;
6240   enum cp_parser_prec new_prec, lookahead_prec;
6241   bool overloaded_p;
6242
6243   /* Parse the first expression.  */
6244   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p, pidk);
6245   lhs_type = ERROR_MARK;
6246
6247   for (;;)
6248     {
6249       /* Get an operator token.  */
6250       token = cp_lexer_peek_token (parser->lexer);
6251
6252       if (warn_cxx0x_compat
6253           && token->type == CPP_RSHIFT
6254           && !parser->greater_than_is_operator_p)
6255         {
6256           warning (OPT_Wc__0x_compat, 
6257                    "%H%<>>%> operator will be treated as two right angle brackets in C++0x", 
6258                    &token->location);
6259           warning (OPT_Wc__0x_compat, 
6260                    "suggest parentheses around %<>>%> expression");
6261         }
6262
6263       new_prec = TOKEN_PRECEDENCE (token);
6264
6265       /* Popping an entry off the stack means we completed a subexpression:
6266          - either we found a token which is not an operator (`>' where it is not
6267            an operator, or prec == PREC_NOT_OPERATOR), in which case popping
6268            will happen repeatedly;
6269          - or, we found an operator which has lower priority.  This is the case
6270            where the recursive descent *ascends*, as in `3 * 4 + 5' after
6271            parsing `3 * 4'.  */
6272       if (new_prec <= prec)
6273         {
6274           if (sp == stack)
6275             break;
6276           else
6277             goto pop;
6278         }
6279
6280      get_rhs:
6281       tree_type = binops_by_token[token->type].tree_type;
6282
6283       /* We used the operator token.  */
6284       cp_lexer_consume_token (parser->lexer);
6285
6286       /* Extract another operand.  It may be the RHS of this expression
6287          or the LHS of a new, higher priority expression.  */
6288       rhs = cp_parser_simple_cast_expression (parser);
6289       rhs_type = ERROR_MARK;
6290
6291       /* Get another operator token.  Look up its precedence to avoid
6292          building a useless (immediately popped) stack entry for common
6293          cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
6294       token = cp_lexer_peek_token (parser->lexer);
6295       lookahead_prec = TOKEN_PRECEDENCE (token);
6296       if (lookahead_prec > new_prec)
6297         {
6298           /* ... and prepare to parse the RHS of the new, higher priority
6299              expression.  Since precedence levels on the stack are
6300              monotonically increasing, we do not have to care about
6301              stack overflows.  */
6302           sp->prec = prec;
6303           sp->tree_type = tree_type;
6304           sp->lhs = lhs;
6305           sp->lhs_type = lhs_type;
6306           sp++;
6307           lhs = rhs;
6308           lhs_type = rhs_type;
6309           prec = new_prec;
6310           new_prec = lookahead_prec;
6311           goto get_rhs;
6312
6313          pop:
6314           lookahead_prec = new_prec;
6315           /* If the stack is not empty, we have parsed into LHS the right side
6316              (`4' in the example above) of an expression we had suspended.
6317              We can use the information on the stack to recover the LHS (`3')
6318              from the stack together with the tree code (`MULT_EXPR'), and
6319              the precedence of the higher level subexpression
6320              (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
6321              which will be used to actually build the additive expression.  */
6322           --sp;
6323           prec = sp->prec;
6324           tree_type = sp->tree_type;
6325           rhs = lhs;
6326           rhs_type = lhs_type;
6327           lhs = sp->lhs;
6328           lhs_type = sp->lhs_type;
6329         }
6330
6331       overloaded_p = false;
6332       /* ??? Currently we pass lhs_type == ERROR_MARK and rhs_type ==
6333          ERROR_MARK for everything that is not a binary expression.
6334          This makes warn_about_parentheses miss some warnings that
6335          involve unary operators.  For unary expressions we should
6336          pass the correct tree_code unless the unary expression was
6337          surrounded by parentheses.
6338       */
6339       if (no_toplevel_fold_p
6340           && lookahead_prec <= prec
6341           && sp == stack
6342           && TREE_CODE_CLASS (tree_type) == tcc_comparison)
6343         lhs = build2 (tree_type, boolean_type_node, lhs, rhs);
6344       else
6345         lhs = build_x_binary_op (tree_type, lhs, lhs_type, rhs, rhs_type,
6346                                  &overloaded_p, tf_warning_or_error);
6347       lhs_type = tree_type;
6348
6349       /* If the binary operator required the use of an overloaded operator,
6350          then this expression cannot be an integral constant-expression.
6351          An overloaded operator can be used even if both operands are
6352          otherwise permissible in an integral constant-expression if at
6353          least one of the operands is of enumeration type.  */
6354
6355       if (overloaded_p
6356           && (cp_parser_non_integral_constant_expression
6357               (parser, "calls to overloaded operators")))
6358         return error_mark_node;
6359     }
6360
6361   return lhs;
6362 }
6363
6364
6365 /* Parse the `? expression : assignment-expression' part of a
6366    conditional-expression.  The LOGICAL_OR_EXPR is the
6367    logical-or-expression that started the conditional-expression.
6368    Returns a representation of the entire conditional-expression.
6369
6370    This routine is used by cp_parser_assignment_expression.
6371
6372      ? expression : assignment-expression
6373
6374    GNU Extensions:
6375
6376      ? : assignment-expression */
6377
6378 static tree
6379 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
6380 {
6381   tree expr;
6382   tree assignment_expr;
6383
6384   /* Consume the `?' token.  */
6385   cp_lexer_consume_token (parser->lexer);
6386   if (cp_parser_allow_gnu_extensions_p (parser)
6387       && cp_lexer_next_token_is (parser->lexer, CPP_COLON))
6388     /* Implicit true clause.  */
6389     expr = NULL_TREE;
6390   else
6391     /* Parse the expression.  */
6392     expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
6393
6394   /* The next token should be a `:'.  */
6395   cp_parser_require (parser, CPP_COLON, "%<:%>");
6396   /* Parse the assignment-expression.  */
6397   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
6398
6399   /* Build the conditional-expression.  */
6400   return build_x_conditional_expr (logical_or_expr,
6401                                    expr,
6402                                    assignment_expr,
6403                                    tf_warning_or_error);
6404 }
6405
6406 /* Parse an assignment-expression.
6407
6408    assignment-expression:
6409      conditional-expression
6410      logical-or-expression assignment-operator assignment_expression
6411      throw-expression
6412
6413    CAST_P is true if this expression is the target of a cast.
6414
6415    Returns a representation for the expression.  */
6416
6417 static tree
6418 cp_parser_assignment_expression (cp_parser* parser, bool cast_p,
6419                                  cp_id_kind * pidk)
6420 {
6421   tree expr;
6422
6423   /* If the next token is the `throw' keyword, then we're looking at
6424      a throw-expression.  */
6425   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
6426     expr = cp_parser_throw_expression (parser);
6427   /* Otherwise, it must be that we are looking at a
6428      logical-or-expression.  */
6429   else
6430     {
6431       /* Parse the binary expressions (logical-or-expression).  */
6432       expr = cp_parser_binary_expression (parser, cast_p, false,
6433                                           PREC_NOT_OPERATOR, pidk);
6434       /* If the next token is a `?' then we're actually looking at a
6435          conditional-expression.  */
6436       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
6437         return cp_parser_question_colon_clause (parser, expr);
6438       else
6439         {
6440           enum tree_code assignment_operator;
6441
6442           /* If it's an assignment-operator, we're using the second
6443              production.  */
6444           assignment_operator
6445             = cp_parser_assignment_operator_opt (parser);
6446           if (assignment_operator != ERROR_MARK)
6447             {
6448               bool non_constant_p;
6449
6450               /* Parse the right-hand side of the assignment.  */
6451               tree rhs = cp_parser_initializer_clause (parser, &non_constant_p);
6452
6453               if (BRACE_ENCLOSED_INITIALIZER_P (rhs))
6454                 maybe_warn_cpp0x ("extended initializer lists");
6455
6456               /* An assignment may not appear in a
6457                  constant-expression.  */
6458               if (cp_parser_non_integral_constant_expression (parser,
6459                                                               "an assignment"))
6460                 return error_mark_node;
6461               /* Build the assignment expression.  */
6462               expr = build_x_modify_expr (expr,
6463                                           assignment_operator,
6464                                           rhs,
6465                                           tf_warning_or_error);
6466             }
6467         }
6468     }
6469
6470   return expr;
6471 }
6472
6473 /* Parse an (optional) assignment-operator.
6474
6475    assignment-operator: one of
6476      = *= /= %= += -= >>= <<= &= ^= |=
6477
6478    GNU Extension:
6479
6480    assignment-operator: one of
6481      <?= >?=
6482
6483    If the next token is an assignment operator, the corresponding tree
6484    code is returned, and the token is consumed.  For example, for
6485    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
6486    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
6487    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
6488    operator, ERROR_MARK is returned.  */
6489
6490 static enum tree_code
6491 cp_parser_assignment_operator_opt (cp_parser* parser)
6492 {
6493   enum tree_code op;
6494   cp_token *token;
6495
6496   /* Peek at the next token.  */
6497   token = cp_lexer_peek_token (parser->lexer);
6498
6499   switch (token->type)
6500     {
6501     case CPP_EQ:
6502       op = NOP_EXPR;
6503       break;
6504
6505     case CPP_MULT_EQ:
6506       op = MULT_EXPR;
6507       break;
6508
6509     case CPP_DIV_EQ:
6510       op = TRUNC_DIV_EXPR;
6511       break;
6512
6513     case CPP_MOD_EQ:
6514       op = TRUNC_MOD_EXPR;
6515       break;
6516
6517     case CPP_PLUS_EQ:
6518       op = PLUS_EXPR;
6519       break;
6520
6521     case CPP_MINUS_EQ:
6522       op = MINUS_EXPR;
6523       break;
6524
6525     case CPP_RSHIFT_EQ:
6526       op = RSHIFT_EXPR;
6527       break;
6528
6529     case CPP_LSHIFT_EQ:
6530       op = LSHIFT_EXPR;
6531       break;
6532
6533     case CPP_AND_EQ:
6534       op = BIT_AND_EXPR;
6535       break;
6536
6537     case CPP_XOR_EQ:
6538       op = BIT_XOR_EXPR;
6539       break;
6540
6541     case CPP_OR_EQ:
6542       op = BIT_IOR_EXPR;
6543       break;
6544
6545     default:
6546       /* Nothing else is an assignment operator.  */
6547       op = ERROR_MARK;
6548     }
6549
6550   /* If it was an assignment operator, consume it.  */
6551   if (op != ERROR_MARK)
6552     cp_lexer_consume_token (parser->lexer);
6553
6554   return op;
6555 }
6556
6557 /* Parse an expression.
6558
6559    expression:
6560      assignment-expression
6561      expression , assignment-expression
6562
6563    CAST_P is true if this expression is the target of a cast.
6564
6565    Returns a representation of the expression.  */
6566
6567 static tree
6568 cp_parser_expression (cp_parser* parser, bool cast_p, cp_id_kind * pidk)
6569 {
6570   tree expression = NULL_TREE;
6571
6572   while (true)
6573     {
6574       tree assignment_expression;
6575
6576       /* Parse the next assignment-expression.  */
6577       assignment_expression
6578         = cp_parser_assignment_expression (parser, cast_p, pidk);
6579       /* If this is the first assignment-expression, we can just
6580          save it away.  */
6581       if (!expression)
6582         expression = assignment_expression;
6583       else
6584         expression = build_x_compound_expr (expression,
6585                                             assignment_expression,
6586                                             tf_warning_or_error);
6587       /* If the next token is not a comma, then we are done with the
6588          expression.  */
6589       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
6590         break;
6591       /* Consume the `,'.  */
6592       cp_lexer_consume_token (parser->lexer);
6593       /* A comma operator cannot appear in a constant-expression.  */
6594       if (cp_parser_non_integral_constant_expression (parser,
6595                                                       "a comma operator"))
6596         expression = error_mark_node;
6597     }
6598
6599   return expression;
6600 }
6601
6602 /* Parse a constant-expression.
6603
6604    constant-expression:
6605      conditional-expression
6606
6607   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
6608   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
6609   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
6610   is false, NON_CONSTANT_P should be NULL.  */
6611
6612 static tree
6613 cp_parser_constant_expression (cp_parser* parser,
6614                                bool allow_non_constant_p,
6615                                bool *non_constant_p)
6616 {
6617   bool saved_integral_constant_expression_p;
6618   bool saved_allow_non_integral_constant_expression_p;
6619   bool saved_non_integral_constant_expression_p;
6620   tree expression;
6621
6622   /* It might seem that we could simply parse the
6623      conditional-expression, and then check to see if it were
6624      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
6625      one that the compiler can figure out is constant, possibly after
6626      doing some simplifications or optimizations.  The standard has a
6627      precise definition of constant-expression, and we must honor
6628      that, even though it is somewhat more restrictive.
6629
6630      For example:
6631
6632        int i[(2, 3)];
6633
6634      is not a legal declaration, because `(2, 3)' is not a
6635      constant-expression.  The `,' operator is forbidden in a
6636      constant-expression.  However, GCC's constant-folding machinery
6637      will fold this operation to an INTEGER_CST for `3'.  */
6638
6639   /* Save the old settings.  */
6640   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
6641   saved_allow_non_integral_constant_expression_p
6642     = parser->allow_non_integral_constant_expression_p;
6643   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
6644   /* We are now parsing a constant-expression.  */
6645   parser->integral_constant_expression_p = true;
6646   parser->allow_non_integral_constant_expression_p = allow_non_constant_p;
6647   parser->non_integral_constant_expression_p = false;
6648   /* Although the grammar says "conditional-expression", we parse an
6649      "assignment-expression", which also permits "throw-expression"
6650      and the use of assignment operators.  In the case that
6651      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
6652      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
6653      actually essential that we look for an assignment-expression.
6654      For example, cp_parser_initializer_clauses uses this function to
6655      determine whether a particular assignment-expression is in fact
6656      constant.  */
6657   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
6658   /* Restore the old settings.  */
6659   parser->integral_constant_expression_p
6660     = saved_integral_constant_expression_p;
6661   parser->allow_non_integral_constant_expression_p
6662     = saved_allow_non_integral_constant_expression_p;
6663   if (allow_non_constant_p)
6664     *non_constant_p = parser->non_integral_constant_expression_p;
6665   else if (parser->non_integral_constant_expression_p)
6666     expression = error_mark_node;
6667   parser->non_integral_constant_expression_p
6668     = saved_non_integral_constant_expression_p;
6669
6670   return expression;
6671 }
6672
6673 /* Parse __builtin_offsetof.
6674
6675    offsetof-expression:
6676      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
6677
6678    offsetof-member-designator:
6679      id-expression
6680      | offsetof-member-designator "." id-expression
6681      | offsetof-member-designator "[" expression "]"
6682      | offsetof-member-designator "->" id-expression  */
6683
6684 static tree
6685 cp_parser_builtin_offsetof (cp_parser *parser)
6686 {
6687   int save_ice_p, save_non_ice_p;
6688   tree type, expr;
6689   cp_id_kind dummy;
6690   cp_token *token;
6691
6692   /* We're about to accept non-integral-constant things, but will
6693      definitely yield an integral constant expression.  Save and
6694      restore these values around our local parsing.  */
6695   save_ice_p = parser->integral_constant_expression_p;
6696   save_non_ice_p = parser->non_integral_constant_expression_p;
6697
6698   /* Consume the "__builtin_offsetof" token.  */
6699   cp_lexer_consume_token (parser->lexer);
6700   /* Consume the opening `('.  */
6701   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
6702   /* Parse the type-id.  */
6703   type = cp_parser_type_id (parser);
6704   /* Look for the `,'.  */
6705   cp_parser_require (parser, CPP_COMMA, "%<,%>");
6706   token = cp_lexer_peek_token (parser->lexer);
6707
6708   /* Build the (type *)null that begins the traditional offsetof macro.  */
6709   expr = build_static_cast (build_pointer_type (type), null_pointer_node,
6710                             tf_warning_or_error);
6711
6712   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
6713   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
6714                                                  true, &dummy, token->location);
6715   while (true)
6716     {
6717       token = cp_lexer_peek_token (parser->lexer);
6718       switch (token->type)
6719         {
6720         case CPP_OPEN_SQUARE:
6721           /* offsetof-member-designator "[" expression "]" */
6722           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
6723           break;
6724
6725         case CPP_DEREF:
6726           /* offsetof-member-designator "->" identifier */
6727           expr = grok_array_decl (expr, integer_zero_node);
6728           /* FALLTHRU */
6729
6730         case CPP_DOT:
6731           /* offsetof-member-designator "." identifier */
6732           cp_lexer_consume_token (parser->lexer);
6733           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT,
6734                                                          expr, true, &dummy,
6735                                                          token->location);
6736           break;
6737
6738         case CPP_CLOSE_PAREN:
6739           /* Consume the ")" token.  */
6740           cp_lexer_consume_token (parser->lexer);
6741           goto success;
6742
6743         default:
6744           /* Error.  We know the following require will fail, but
6745              that gives the proper error message.  */
6746           cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
6747           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
6748           expr = error_mark_node;
6749           goto failure;
6750         }
6751     }
6752
6753  success:
6754   /* If we're processing a template, we can't finish the semantics yet.
6755      Otherwise we can fold the entire expression now.  */
6756   if (processing_template_decl)
6757     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
6758   else
6759     expr = finish_offsetof (expr);
6760
6761  failure:
6762   parser->integral_constant_expression_p = save_ice_p;
6763   parser->non_integral_constant_expression_p = save_non_ice_p;
6764
6765   return expr;
6766 }
6767
6768 /* Parse a trait expression.  */
6769
6770 static tree
6771 cp_parser_trait_expr (cp_parser* parser, enum rid keyword)
6772 {
6773   cp_trait_kind kind;
6774   tree type1, type2 = NULL_TREE;
6775   bool binary = false;
6776   cp_decl_specifier_seq decl_specs;
6777
6778   switch (keyword)
6779     {
6780     case RID_HAS_NOTHROW_ASSIGN:
6781       kind = CPTK_HAS_NOTHROW_ASSIGN;
6782       break;
6783     case RID_HAS_NOTHROW_CONSTRUCTOR:
6784       kind = CPTK_HAS_NOTHROW_CONSTRUCTOR;
6785       break;
6786     case RID_HAS_NOTHROW_COPY:
6787       kind = CPTK_HAS_NOTHROW_COPY;
6788       break;
6789     case RID_HAS_TRIVIAL_ASSIGN:
6790       kind = CPTK_HAS_TRIVIAL_ASSIGN;
6791       break;
6792     case RID_HAS_TRIVIAL_CONSTRUCTOR:
6793       kind = CPTK_HAS_TRIVIAL_CONSTRUCTOR;
6794       break;
6795     case RID_HAS_TRIVIAL_COPY:
6796       kind = CPTK_HAS_TRIVIAL_COPY;
6797       break;
6798     case RID_HAS_TRIVIAL_DESTRUCTOR:
6799       kind = CPTK_HAS_TRIVIAL_DESTRUCTOR;
6800       break;
6801     case RID_HAS_VIRTUAL_DESTRUCTOR:
6802       kind = CPTK_HAS_VIRTUAL_DESTRUCTOR;
6803       break;
6804     case RID_IS_ABSTRACT:
6805       kind = CPTK_IS_ABSTRACT;
6806       break;
6807     case RID_IS_BASE_OF:
6808       kind = CPTK_IS_BASE_OF;
6809       binary = true;
6810       break;
6811     case RID_IS_CLASS:
6812       kind = CPTK_IS_CLASS;
6813       break;
6814     case RID_IS_CONVERTIBLE_TO:
6815       kind = CPTK_IS_CONVERTIBLE_TO;
6816       binary = true;
6817       break;
6818     case RID_IS_EMPTY:
6819       kind = CPTK_IS_EMPTY;
6820       break;
6821     case RID_IS_ENUM:
6822       kind = CPTK_IS_ENUM;
6823       break;
6824     case RID_IS_POD:
6825       kind = CPTK_IS_POD;
6826       break;
6827     case RID_IS_POLYMORPHIC:
6828       kind = CPTK_IS_POLYMORPHIC;
6829       break;
6830     case RID_IS_UNION:
6831       kind = CPTK_IS_UNION;
6832       break;
6833     default:
6834       gcc_unreachable ();
6835     }
6836
6837   /* Consume the token.  */
6838   cp_lexer_consume_token (parser->lexer);
6839
6840   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
6841
6842   type1 = cp_parser_type_id (parser);
6843
6844   if (type1 == error_mark_node)
6845     return error_mark_node;
6846
6847   /* Build a trivial decl-specifier-seq.  */
6848   clear_decl_specs (&decl_specs);
6849   decl_specs.type = type1;
6850
6851   /* Call grokdeclarator to figure out what type this is.  */
6852   type1 = grokdeclarator (NULL, &decl_specs, TYPENAME,
6853                           /*initialized=*/0, /*attrlist=*/NULL);
6854
6855   if (binary)
6856     {
6857       cp_parser_require (parser, CPP_COMMA, "%<,%>");
6858  
6859       type2 = cp_parser_type_id (parser);
6860
6861       if (type2 == error_mark_node)
6862         return error_mark_node;
6863
6864       /* Build a trivial decl-specifier-seq.  */
6865       clear_decl_specs (&decl_specs);
6866       decl_specs.type = type2;
6867
6868       /* Call grokdeclarator to figure out what type this is.  */
6869       type2 = grokdeclarator (NULL, &decl_specs, TYPENAME,
6870                               /*initialized=*/0, /*attrlist=*/NULL);
6871     }
6872
6873   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
6874
6875   /* Complete the trait expression, which may mean either processing
6876      the trait expr now or saving it for template instantiation.  */
6877   return finish_trait_expr (kind, type1, type2);
6878 }
6879
6880 /* Statements [gram.stmt.stmt]  */
6881
6882 /* Parse a statement.
6883
6884    statement:
6885      labeled-statement
6886      expression-statement
6887      compound-statement
6888      selection-statement
6889      iteration-statement
6890      jump-statement
6891      declaration-statement
6892      try-block
6893
6894   IN_COMPOUND is true when the statement is nested inside a
6895   cp_parser_compound_statement; this matters for certain pragmas.
6896
6897   If IF_P is not NULL, *IF_P is set to indicate whether the statement
6898   is a (possibly labeled) if statement which is not enclosed in braces
6899   and has an else clause.  This is used to implement -Wparentheses.  */
6900
6901 static void
6902 cp_parser_statement (cp_parser* parser, tree in_statement_expr,
6903                      bool in_compound, bool *if_p)
6904 {
6905   tree statement;
6906   cp_token *token;
6907   location_t statement_location;
6908
6909  restart:
6910   if (if_p != NULL)
6911     *if_p = false;
6912   /* There is no statement yet.  */
6913   statement = NULL_TREE;
6914   /* Peek at the next token.  */
6915   token = cp_lexer_peek_token (parser->lexer);
6916   /* Remember the location of the first token in the statement.  */
6917   statement_location = token->location;
6918   /* If this is a keyword, then that will often determine what kind of
6919      statement we have.  */
6920   if (token->type == CPP_KEYWORD)
6921     {
6922       enum rid keyword = token->keyword;
6923
6924       switch (keyword)
6925         {
6926         case RID_CASE:
6927         case RID_DEFAULT:
6928           /* Looks like a labeled-statement with a case label.
6929              Parse the label, and then use tail recursion to parse
6930              the statement.  */
6931           cp_parser_label_for_labeled_statement (parser);
6932           goto restart;
6933
6934         case RID_IF:
6935         case RID_SWITCH:
6936           statement = cp_parser_selection_statement (parser, if_p);
6937           break;
6938
6939         case RID_WHILE:
6940         case RID_DO:
6941         case RID_FOR:
6942           statement = cp_parser_iteration_statement (parser);
6943           break;
6944
6945         case RID_BREAK:
6946         case RID_CONTINUE:
6947         case RID_RETURN:
6948         case RID_GOTO:
6949           statement = cp_parser_jump_statement (parser);
6950           break;
6951
6952           /* Objective-C++ exception-handling constructs.  */
6953         case RID_AT_TRY:
6954         case RID_AT_CATCH:
6955         case RID_AT_FINALLY:
6956         case RID_AT_SYNCHRONIZED:
6957         case RID_AT_THROW:
6958           statement = cp_parser_objc_statement (parser);
6959           break;
6960
6961         case RID_TRY:
6962           statement = cp_parser_try_block (parser);
6963           break;
6964
6965         case RID_NAMESPACE:
6966           /* This must be a namespace alias definition.  */
6967           cp_parser_declaration_statement (parser);
6968           return;
6969           
6970         default:
6971           /* It might be a keyword like `int' that can start a
6972              declaration-statement.  */
6973           break;
6974         }
6975     }
6976   else if (token->type == CPP_NAME)
6977     {
6978       /* If the next token is a `:', then we are looking at a
6979          labeled-statement.  */
6980       token = cp_lexer_peek_nth_token (parser->lexer, 2);
6981       if (token->type == CPP_COLON)
6982         {
6983           /* Looks like a labeled-statement with an ordinary label.
6984              Parse the label, and then use tail recursion to parse
6985              the statement.  */
6986           cp_parser_label_for_labeled_statement (parser);
6987           goto restart;
6988         }
6989     }
6990   /* Anything that starts with a `{' must be a compound-statement.  */
6991   else if (token->type == CPP_OPEN_BRACE)
6992     statement = cp_parser_compound_statement (parser, NULL, false);
6993   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
6994      a statement all its own.  */
6995   else if (token->type == CPP_PRAGMA)
6996     {
6997       /* Only certain OpenMP pragmas are attached to statements, and thus
6998          are considered statements themselves.  All others are not.  In
6999          the context of a compound, accept the pragma as a "statement" and
7000          return so that we can check for a close brace.  Otherwise we
7001          require a real statement and must go back and read one.  */
7002       if (in_compound)
7003         cp_parser_pragma (parser, pragma_compound);
7004       else if (!cp_parser_pragma (parser, pragma_stmt))
7005         goto restart;
7006       return;
7007     }
7008   else if (token->type == CPP_EOF)
7009     {
7010       cp_parser_error (parser, "expected statement");
7011       return;
7012     }
7013
7014   /* Everything else must be a declaration-statement or an
7015      expression-statement.  Try for the declaration-statement
7016      first, unless we are looking at a `;', in which case we know that
7017      we have an expression-statement.  */
7018   if (!statement)
7019     {
7020       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7021         {
7022           cp_parser_parse_tentatively (parser);
7023           /* Try to parse the declaration-statement.  */
7024           cp_parser_declaration_statement (parser);
7025           /* If that worked, we're done.  */
7026           if (cp_parser_parse_definitely (parser))
7027             return;
7028         }
7029       /* Look for an expression-statement instead.  */
7030       statement = cp_parser_expression_statement (parser, in_statement_expr);
7031     }
7032
7033   /* Set the line number for the statement.  */
7034   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
7035     SET_EXPR_LOCATION (statement, statement_location);
7036 }
7037
7038 /* Parse the label for a labeled-statement, i.e.
7039
7040    identifier :
7041    case constant-expression :
7042    default :
7043
7044    GNU Extension:
7045    case constant-expression ... constant-expression : statement
7046
7047    When a label is parsed without errors, the label is added to the
7048    parse tree by the finish_* functions, so this function doesn't
7049    have to return the label.  */
7050
7051 static void
7052 cp_parser_label_for_labeled_statement (cp_parser* parser)
7053 {
7054   cp_token *token;
7055
7056   /* The next token should be an identifier.  */
7057   token = cp_lexer_peek_token (parser->lexer);
7058   if (token->type != CPP_NAME
7059       && token->type != CPP_KEYWORD)
7060     {
7061       cp_parser_error (parser, "expected labeled-statement");
7062       return;
7063     }
7064
7065   switch (token->keyword)
7066     {
7067     case RID_CASE:
7068       {
7069         tree expr, expr_hi;
7070         cp_token *ellipsis;
7071
7072         /* Consume the `case' token.  */
7073         cp_lexer_consume_token (parser->lexer);
7074         /* Parse the constant-expression.  */
7075         expr = cp_parser_constant_expression (parser,
7076                                               /*allow_non_constant_p=*/false,
7077                                               NULL);
7078
7079         ellipsis = cp_lexer_peek_token (parser->lexer);
7080         if (ellipsis->type == CPP_ELLIPSIS)
7081           {
7082             /* Consume the `...' token.  */
7083             cp_lexer_consume_token (parser->lexer);
7084             expr_hi =
7085               cp_parser_constant_expression (parser,
7086                                              /*allow_non_constant_p=*/false,
7087                                              NULL);
7088             /* We don't need to emit warnings here, as the common code
7089                will do this for us.  */
7090           }
7091         else
7092           expr_hi = NULL_TREE;
7093
7094         if (parser->in_switch_statement_p)
7095           finish_case_label (expr, expr_hi);
7096         else
7097           error ("%Hcase label %qE not within a switch statement",
7098                  &token->location, expr);
7099       }
7100       break;
7101
7102     case RID_DEFAULT:
7103       /* Consume the `default' token.  */
7104       cp_lexer_consume_token (parser->lexer);
7105
7106       if (parser->in_switch_statement_p)
7107         finish_case_label (NULL_TREE, NULL_TREE);
7108       else
7109         error ("%Hcase label not within a switch statement", &token->location);
7110       break;
7111
7112     default:
7113       /* Anything else must be an ordinary label.  */
7114       finish_label_stmt (cp_parser_identifier (parser));
7115       break;
7116     }
7117
7118   /* Require the `:' token.  */
7119   cp_parser_require (parser, CPP_COLON, "%<:%>");
7120 }
7121
7122 /* Parse an expression-statement.
7123
7124    expression-statement:
7125      expression [opt] ;
7126
7127    Returns the new EXPR_STMT -- or NULL_TREE if the expression
7128    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
7129    indicates whether this expression-statement is part of an
7130    expression statement.  */
7131
7132 static tree
7133 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
7134 {
7135   tree statement = NULL_TREE;
7136
7137   /* If the next token is a ';', then there is no expression
7138      statement.  */
7139   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7140     statement = cp_parser_expression (parser, /*cast_p=*/false, NULL);
7141
7142   /* Consume the final `;'.  */
7143   cp_parser_consume_semicolon_at_end_of_statement (parser);
7144
7145   if (in_statement_expr
7146       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
7147     /* This is the final expression statement of a statement
7148        expression.  */
7149     statement = finish_stmt_expr_expr (statement, in_statement_expr);
7150   else if (statement)
7151     statement = finish_expr_stmt (statement);
7152   else
7153     finish_stmt ();
7154
7155   return statement;
7156 }
7157
7158 /* Parse a compound-statement.
7159
7160    compound-statement:
7161      { statement-seq [opt] }
7162
7163    GNU extension:
7164
7165    compound-statement:
7166      { label-declaration-seq [opt] statement-seq [opt] }
7167
7168    label-declaration-seq:
7169      label-declaration
7170      label-declaration-seq label-declaration
7171
7172    Returns a tree representing the statement.  */
7173
7174 static tree
7175 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
7176                               bool in_try)
7177 {
7178   tree compound_stmt;
7179
7180   /* Consume the `{'.  */
7181   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>"))
7182     return error_mark_node;
7183   /* Begin the compound-statement.  */
7184   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
7185   /* If the next keyword is `__label__' we have a label declaration.  */
7186   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
7187     cp_parser_label_declaration (parser);
7188   /* Parse an (optional) statement-seq.  */
7189   cp_parser_statement_seq_opt (parser, in_statement_expr);
7190   /* Finish the compound-statement.  */
7191   finish_compound_stmt (compound_stmt);
7192   /* Consume the `}'.  */
7193   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
7194
7195   return compound_stmt;
7196 }
7197
7198 /* Parse an (optional) statement-seq.
7199
7200    statement-seq:
7201      statement
7202      statement-seq [opt] statement  */
7203
7204 static void
7205 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
7206 {
7207   /* Scan statements until there aren't any more.  */
7208   while (true)
7209     {
7210       cp_token *token = cp_lexer_peek_token (parser->lexer);
7211
7212       /* If we're looking at a `}', then we've run out of statements.  */
7213       if (token->type == CPP_CLOSE_BRACE
7214           || token->type == CPP_EOF
7215           || token->type == CPP_PRAGMA_EOL)
7216         break;
7217       
7218       /* If we are in a compound statement and find 'else' then
7219          something went wrong.  */
7220       else if (token->type == CPP_KEYWORD && token->keyword == RID_ELSE)
7221         {
7222           if (parser->in_statement & IN_IF_STMT) 
7223             break;
7224           else
7225             {
7226               token = cp_lexer_consume_token (parser->lexer);
7227               error ("%H%<else%> without a previous %<if%>", &token->location);
7228             }
7229         }
7230
7231       /* Parse the statement.  */
7232       cp_parser_statement (parser, in_statement_expr, true, NULL);
7233     }
7234 }
7235
7236 /* Parse a selection-statement.
7237
7238    selection-statement:
7239      if ( condition ) statement
7240      if ( condition ) statement else statement
7241      switch ( condition ) statement
7242
7243    Returns the new IF_STMT or SWITCH_STMT.
7244
7245    If IF_P is not NULL, *IF_P is set to indicate whether the statement
7246    is a (possibly labeled) if statement which is not enclosed in
7247    braces and has an else clause.  This is used to implement
7248    -Wparentheses.  */
7249
7250 static tree
7251 cp_parser_selection_statement (cp_parser* parser, bool *if_p)
7252 {
7253   cp_token *token;
7254   enum rid keyword;
7255
7256   if (if_p != NULL)
7257     *if_p = false;
7258
7259   /* Peek at the next token.  */
7260   token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
7261
7262   /* See what kind of keyword it is.  */
7263   keyword = token->keyword;
7264   switch (keyword)
7265     {
7266     case RID_IF:
7267     case RID_SWITCH:
7268       {
7269         tree statement;
7270         tree condition;
7271
7272         /* Look for the `('.  */
7273         if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
7274           {
7275             cp_parser_skip_to_end_of_statement (parser);
7276             return error_mark_node;
7277           }
7278
7279         /* Begin the selection-statement.  */
7280         if (keyword == RID_IF)
7281           statement = begin_if_stmt ();
7282         else
7283           statement = begin_switch_stmt ();
7284
7285         /* Parse the condition.  */
7286         condition = cp_parser_condition (parser);
7287         /* Look for the `)'.  */
7288         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
7289           cp_parser_skip_to_closing_parenthesis (parser, true, false,
7290                                                  /*consume_paren=*/true);
7291
7292         if (keyword == RID_IF)
7293           {
7294             bool nested_if;
7295             unsigned char in_statement;
7296
7297             /* Add the condition.  */
7298             finish_if_stmt_cond (condition, statement);
7299
7300             /* Parse the then-clause.  */
7301             in_statement = parser->in_statement;
7302             parser->in_statement |= IN_IF_STMT;
7303             if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7304               {
7305                 location_t loc = cp_lexer_peek_token (parser->lexer)->location;
7306                 add_stmt (build_empty_stmt ());
7307                 cp_lexer_consume_token (parser->lexer);
7308                 if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_ELSE))
7309                   warning_at (loc, OPT_Wempty_body, "suggest braces around "
7310                               "empty body in an %<if%> statement");
7311                 nested_if = false;
7312               }
7313             else
7314               cp_parser_implicitly_scoped_statement (parser, &nested_if);
7315             parser->in_statement = in_statement;
7316
7317             finish_then_clause (statement);
7318
7319             /* If the next token is `else', parse the else-clause.  */
7320             if (cp_lexer_next_token_is_keyword (parser->lexer,
7321                                                 RID_ELSE))
7322               {
7323                 /* Consume the `else' keyword.  */
7324                 cp_lexer_consume_token (parser->lexer);
7325                 begin_else_clause (statement);
7326                 /* Parse the else-clause.  */
7327                 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7328                   {
7329                     warning_at (cp_lexer_peek_token (parser->lexer)->location,
7330                                 OPT_Wempty_body, "suggest braces around "
7331                                 "empty body in an %<else%> statement");
7332                     add_stmt (build_empty_stmt ());
7333                     cp_lexer_consume_token (parser->lexer);
7334                   }
7335                 else
7336                   cp_parser_implicitly_scoped_statement (parser, NULL);
7337
7338                 finish_else_clause (statement);
7339
7340                 /* If we are currently parsing a then-clause, then
7341                    IF_P will not be NULL.  We set it to true to
7342                    indicate that this if statement has an else clause.
7343                    This may trigger the Wparentheses warning below
7344                    when we get back up to the parent if statement.  */
7345                 if (if_p != NULL)
7346                   *if_p = true;
7347               }
7348             else
7349               {
7350                 /* This if statement does not have an else clause.  If
7351                    NESTED_IF is true, then the then-clause is an if
7352                    statement which does have an else clause.  We warn
7353                    about the potential ambiguity.  */
7354                 if (nested_if)
7355                   warning (OPT_Wparentheses,
7356                            ("%Hsuggest explicit braces "
7357                             "to avoid ambiguous %<else%>"),
7358                            EXPR_LOCUS (statement));
7359               }
7360
7361             /* Now we're all done with the if-statement.  */
7362             finish_if_stmt (statement);
7363           }
7364         else
7365           {
7366             bool in_switch_statement_p;
7367             unsigned char in_statement;
7368
7369             /* Add the condition.  */
7370             finish_switch_cond (condition, statement);
7371
7372             /* Parse the body of the switch-statement.  */
7373             in_switch_statement_p = parser->in_switch_statement_p;
7374             in_statement = parser->in_statement;
7375             parser->in_switch_statement_p = true;
7376             parser->in_statement |= IN_SWITCH_STMT;
7377             cp_parser_implicitly_scoped_statement (parser, NULL);
7378             parser->in_switch_statement_p = in_switch_statement_p;
7379             parser->in_statement = in_statement;
7380
7381             /* Now we're all done with the switch-statement.  */
7382             finish_switch_stmt (statement);
7383           }
7384
7385         return statement;
7386       }
7387       break;
7388
7389     default:
7390       cp_parser_error (parser, "expected selection-statement");
7391       return error_mark_node;
7392     }
7393 }
7394
7395 /* Parse a condition.
7396
7397    condition:
7398      expression
7399      type-specifier-seq declarator = initializer-clause
7400      type-specifier-seq declarator braced-init-list
7401
7402    GNU Extension:
7403
7404    condition:
7405      type-specifier-seq declarator asm-specification [opt]
7406        attributes [opt] = assignment-expression
7407
7408    Returns the expression that should be tested.  */
7409
7410 static tree
7411 cp_parser_condition (cp_parser* parser)
7412 {
7413   cp_decl_specifier_seq type_specifiers;
7414   const char *saved_message;
7415
7416   /* Try the declaration first.  */
7417   cp_parser_parse_tentatively (parser);
7418   /* New types are not allowed in the type-specifier-seq for a
7419      condition.  */
7420   saved_message = parser->type_definition_forbidden_message;
7421   parser->type_definition_forbidden_message
7422     = "types may not be defined in conditions";
7423   /* Parse the type-specifier-seq.  */
7424   cp_parser_type_specifier_seq (parser, /*is_condition==*/true,
7425                                 &type_specifiers);
7426   /* Restore the saved message.  */
7427   parser->type_definition_forbidden_message = saved_message;
7428   /* If all is well, we might be looking at a declaration.  */
7429   if (!cp_parser_error_occurred (parser))
7430     {
7431       tree decl;
7432       tree asm_specification;
7433       tree attributes;
7434       cp_declarator *declarator;
7435       tree initializer = NULL_TREE;
7436
7437       /* Parse the declarator.  */
7438       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
7439                                          /*ctor_dtor_or_conv_p=*/NULL,
7440                                          /*parenthesized_p=*/NULL,
7441                                          /*member_p=*/false);
7442       /* Parse the attributes.  */
7443       attributes = cp_parser_attributes_opt (parser);
7444       /* Parse the asm-specification.  */
7445       asm_specification = cp_parser_asm_specification_opt (parser);
7446       /* If the next token is not an `=' or '{', then we might still be
7447          looking at an expression.  For example:
7448
7449            if (A(a).x)
7450
7451          looks like a decl-specifier-seq and a declarator -- but then
7452          there is no `=', so this is an expression.  */
7453       if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
7454           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
7455         cp_parser_simulate_error (parser);
7456         
7457       /* If we did see an `=' or '{', then we are looking at a declaration
7458          for sure.  */
7459       if (cp_parser_parse_definitely (parser))
7460         {
7461           tree pushed_scope;
7462           bool non_constant_p;
7463           bool flags = LOOKUP_ONLYCONVERTING;
7464
7465           /* Create the declaration.  */
7466           decl = start_decl (declarator, &type_specifiers,
7467                              /*initialized_p=*/true,
7468                              attributes, /*prefix_attributes=*/NULL_TREE,
7469                              &pushed_scope);
7470
7471           /* Parse the initializer.  */
7472           if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7473             {
7474               initializer = cp_parser_braced_list (parser, &non_constant_p);
7475               CONSTRUCTOR_IS_DIRECT_INIT (initializer) = 1;
7476               flags = 0;
7477             }
7478           else
7479             {
7480               /* Consume the `='.  */
7481               cp_parser_require (parser, CPP_EQ, "%<=%>");
7482               initializer = cp_parser_initializer_clause (parser, &non_constant_p);
7483             }
7484           if (BRACE_ENCLOSED_INITIALIZER_P (initializer))
7485             maybe_warn_cpp0x ("extended initializer lists");
7486
7487           if (!non_constant_p)
7488             initializer = fold_non_dependent_expr (initializer);
7489
7490           /* Process the initializer.  */
7491           cp_finish_decl (decl,
7492                           initializer, !non_constant_p,
7493                           asm_specification,
7494                           flags);
7495
7496           if (pushed_scope)
7497             pop_scope (pushed_scope);
7498
7499           return convert_from_reference (decl);
7500         }
7501     }
7502   /* If we didn't even get past the declarator successfully, we are
7503      definitely not looking at a declaration.  */
7504   else
7505     cp_parser_abort_tentative_parse (parser);
7506
7507   /* Otherwise, we are looking at an expression.  */
7508   return cp_parser_expression (parser, /*cast_p=*/false, NULL);
7509 }
7510
7511 /* Parse an iteration-statement.
7512
7513    iteration-statement:
7514      while ( condition ) statement
7515      do statement while ( expression ) ;
7516      for ( for-init-statement condition [opt] ; expression [opt] )
7517        statement
7518
7519    Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
7520
7521 static tree
7522 cp_parser_iteration_statement (cp_parser* parser)
7523 {
7524   cp_token *token;
7525   enum rid keyword;
7526   tree statement;
7527   unsigned char in_statement;
7528
7529   /* Peek at the next token.  */
7530   token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
7531   if (!token)
7532     return error_mark_node;
7533
7534   /* Remember whether or not we are already within an iteration
7535      statement.  */
7536   in_statement = parser->in_statement;
7537
7538   /* See what kind of keyword it is.  */
7539   keyword = token->keyword;
7540   switch (keyword)
7541     {
7542     case RID_WHILE:
7543       {
7544         tree condition;
7545
7546         /* Begin the while-statement.  */
7547         statement = begin_while_stmt ();
7548         /* Look for the `('.  */
7549         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
7550         /* Parse the condition.  */
7551         condition = cp_parser_condition (parser);
7552         finish_while_stmt_cond (condition, statement);
7553         /* Look for the `)'.  */
7554         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
7555         /* Parse the dependent statement.  */
7556         parser->in_statement = IN_ITERATION_STMT;
7557         cp_parser_already_scoped_statement (parser);
7558         parser->in_statement = in_statement;
7559         /* We're done with the while-statement.  */
7560         finish_while_stmt (statement);
7561       }
7562       break;
7563
7564     case RID_DO:
7565       {
7566         tree expression;
7567
7568         /* Begin the do-statement.  */
7569         statement = begin_do_stmt ();
7570         /* Parse the body of the do-statement.  */
7571         parser->in_statement = IN_ITERATION_STMT;
7572         cp_parser_implicitly_scoped_statement (parser, NULL);
7573         parser->in_statement = in_statement;
7574         finish_do_body (statement);
7575         /* Look for the `while' keyword.  */
7576         cp_parser_require_keyword (parser, RID_WHILE, "%<while%>");
7577         /* Look for the `('.  */
7578         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
7579         /* Parse the expression.  */
7580         expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
7581         /* We're done with the do-statement.  */
7582         finish_do_stmt (expression, statement);
7583         /* Look for the `)'.  */
7584         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
7585         /* Look for the `;'.  */
7586         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7587       }
7588       break;
7589
7590     case RID_FOR:
7591       {
7592         tree condition = NULL_TREE;
7593         tree expression = NULL_TREE;
7594
7595         /* Begin the for-statement.  */
7596         statement = begin_for_stmt ();
7597         /* Look for the `('.  */
7598         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
7599         /* Parse the initialization.  */
7600         cp_parser_for_init_statement (parser);
7601         finish_for_init_stmt (statement);
7602
7603         /* If there's a condition, process it.  */
7604         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7605           condition = cp_parser_condition (parser);
7606         finish_for_cond (condition, statement);
7607         /* Look for the `;'.  */
7608         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7609
7610         /* If there's an expression, process it.  */
7611         if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
7612           expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
7613         finish_for_expr (expression, statement);
7614         /* Look for the `)'.  */
7615         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
7616
7617         /* Parse the body of the for-statement.  */
7618         parser->in_statement = IN_ITERATION_STMT;
7619         cp_parser_already_scoped_statement (parser);
7620         parser->in_statement = in_statement;
7621
7622         /* We're done with the for-statement.  */
7623         finish_for_stmt (statement);
7624       }
7625       break;
7626
7627     default:
7628       cp_parser_error (parser, "expected iteration-statement");
7629       statement = error_mark_node;
7630       break;
7631     }
7632
7633   return statement;
7634 }
7635
7636 /* Parse a for-init-statement.
7637
7638    for-init-statement:
7639      expression-statement
7640      simple-declaration  */
7641
7642 static void
7643 cp_parser_for_init_statement (cp_parser* parser)
7644 {
7645   /* If the next token is a `;', then we have an empty
7646      expression-statement.  Grammatically, this is also a
7647      simple-declaration, but an invalid one, because it does not
7648      declare anything.  Therefore, if we did not handle this case
7649      specially, we would issue an error message about an invalid
7650      declaration.  */
7651   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7652     {
7653       /* We're going to speculatively look for a declaration, falling back
7654          to an expression, if necessary.  */
7655       cp_parser_parse_tentatively (parser);
7656       /* Parse the declaration.  */
7657       cp_parser_simple_declaration (parser,
7658                                     /*function_definition_allowed_p=*/false);
7659       /* If the tentative parse failed, then we shall need to look for an
7660          expression-statement.  */
7661       if (cp_parser_parse_definitely (parser))
7662         return;
7663     }
7664
7665   cp_parser_expression_statement (parser, false);
7666 }
7667
7668 /* Parse a jump-statement.
7669
7670    jump-statement:
7671      break ;
7672      continue ;
7673      return expression [opt] ;
7674      return braced-init-list ;
7675      goto identifier ;
7676
7677    GNU extension:
7678
7679    jump-statement:
7680      goto * expression ;
7681
7682    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
7683
7684 static tree
7685 cp_parser_jump_statement (cp_parser* parser)
7686 {
7687   tree statement = error_mark_node;
7688   cp_token *token;
7689   enum rid keyword;
7690   unsigned char in_statement;
7691
7692   /* Peek at the next token.  */
7693   token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
7694   if (!token)
7695     return error_mark_node;
7696
7697   /* See what kind of keyword it is.  */
7698   keyword = token->keyword;
7699   switch (keyword)
7700     {
7701     case RID_BREAK:
7702       in_statement = parser->in_statement & ~IN_IF_STMT;      
7703       switch (in_statement)
7704         {
7705         case 0:
7706           error ("%Hbreak statement not within loop or switch", &token->location);
7707           break;
7708         default:
7709           gcc_assert ((in_statement & IN_SWITCH_STMT)
7710                       || in_statement == IN_ITERATION_STMT);
7711           statement = finish_break_stmt ();
7712           break;
7713         case IN_OMP_BLOCK:
7714           error ("%Hinvalid exit from OpenMP structured block", &token->location);
7715           break;
7716         case IN_OMP_FOR:
7717           error ("%Hbreak statement used with OpenMP for loop", &token->location);
7718           break;
7719         }
7720       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7721       break;
7722
7723     case RID_CONTINUE:
7724       switch (parser->in_statement & ~(IN_SWITCH_STMT | IN_IF_STMT))
7725         {
7726         case 0:
7727           error ("%Hcontinue statement not within a loop", &token->location);
7728           break;
7729         case IN_ITERATION_STMT:
7730         case IN_OMP_FOR:
7731           statement = finish_continue_stmt ();
7732           break;
7733         case IN_OMP_BLOCK:
7734           error ("%Hinvalid exit from OpenMP structured block", &token->location);
7735           break;
7736         default:
7737           gcc_unreachable ();
7738         }
7739       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7740       break;
7741
7742     case RID_RETURN:
7743       {
7744         tree expr;
7745         bool expr_non_constant_p;
7746
7747         if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7748           {
7749             maybe_warn_cpp0x ("extended initializer lists");
7750             expr = cp_parser_braced_list (parser, &expr_non_constant_p);
7751           }
7752         else if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7753           expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
7754         else
7755           /* If the next token is a `;', then there is no
7756              expression.  */
7757           expr = NULL_TREE;
7758         /* Build the return-statement.  */
7759         statement = finish_return_stmt (expr);
7760         /* Look for the final `;'.  */
7761         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7762       }
7763       break;
7764
7765     case RID_GOTO:
7766       /* Create the goto-statement.  */
7767       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
7768         {
7769           /* Issue a warning about this use of a GNU extension.  */
7770           pedwarn (token->location, OPT_pedantic, "ISO C++ forbids computed gotos");
7771           /* Consume the '*' token.  */
7772           cp_lexer_consume_token (parser->lexer);
7773           /* Parse the dependent expression.  */
7774           finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false, NULL));
7775         }
7776       else
7777         finish_goto_stmt (cp_parser_identifier (parser));
7778       /* Look for the final `;'.  */
7779       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7780       break;
7781
7782     default:
7783       cp_parser_error (parser, "expected jump-statement");
7784       break;
7785     }
7786
7787   return statement;
7788 }
7789
7790 /* Parse a declaration-statement.
7791
7792    declaration-statement:
7793      block-declaration  */
7794
7795 static void
7796 cp_parser_declaration_statement (cp_parser* parser)
7797 {
7798   void *p;
7799
7800   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7801   p = obstack_alloc (&declarator_obstack, 0);
7802
7803  /* Parse the block-declaration.  */
7804   cp_parser_block_declaration (parser, /*statement_p=*/true);
7805
7806   /* Free any declarators allocated.  */
7807   obstack_free (&declarator_obstack, p);
7808
7809   /* Finish off the statement.  */
7810   finish_stmt ();
7811 }
7812
7813 /* Some dependent statements (like `if (cond) statement'), are
7814    implicitly in their own scope.  In other words, if the statement is
7815    a single statement (as opposed to a compound-statement), it is
7816    none-the-less treated as if it were enclosed in braces.  Any
7817    declarations appearing in the dependent statement are out of scope
7818    after control passes that point.  This function parses a statement,
7819    but ensures that is in its own scope, even if it is not a
7820    compound-statement.
7821
7822    If IF_P is not NULL, *IF_P is set to indicate whether the statement
7823    is a (possibly labeled) if statement which is not enclosed in
7824    braces and has an else clause.  This is used to implement
7825    -Wparentheses.
7826
7827    Returns the new statement.  */
7828
7829 static tree
7830 cp_parser_implicitly_scoped_statement (cp_parser* parser, bool *if_p)
7831 {
7832   tree statement;
7833
7834   if (if_p != NULL)
7835     *if_p = false;
7836
7837   /* Mark if () ; with a special NOP_EXPR.  */
7838   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7839     {
7840       cp_lexer_consume_token (parser->lexer);
7841       statement = add_stmt (build_empty_stmt ());
7842     }
7843   /* if a compound is opened, we simply parse the statement directly.  */
7844   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7845     statement = cp_parser_compound_statement (parser, NULL, false);
7846   /* If the token is not a `{', then we must take special action.  */
7847   else
7848     {
7849       /* Create a compound-statement.  */
7850       statement = begin_compound_stmt (0);
7851       /* Parse the dependent-statement.  */
7852       cp_parser_statement (parser, NULL_TREE, false, if_p);
7853       /* Finish the dummy compound-statement.  */
7854       finish_compound_stmt (statement);
7855     }
7856
7857   /* Return the statement.  */
7858   return statement;
7859 }
7860
7861 /* For some dependent statements (like `while (cond) statement'), we
7862    have already created a scope.  Therefore, even if the dependent
7863    statement is a compound-statement, we do not want to create another
7864    scope.  */
7865
7866 static void
7867 cp_parser_already_scoped_statement (cp_parser* parser)
7868 {
7869   /* If the token is a `{', then we must take special action.  */
7870   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
7871     cp_parser_statement (parser, NULL_TREE, false, NULL);
7872   else
7873     {
7874       /* Avoid calling cp_parser_compound_statement, so that we
7875          don't create a new scope.  Do everything else by hand.  */
7876       cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>");
7877       /* If the next keyword is `__label__' we have a label declaration.  */
7878       while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
7879         cp_parser_label_declaration (parser);
7880       /* Parse an (optional) statement-seq.  */
7881       cp_parser_statement_seq_opt (parser, NULL_TREE);
7882       cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
7883     }
7884 }
7885
7886 /* Declarations [gram.dcl.dcl] */
7887
7888 /* Parse an optional declaration-sequence.
7889
7890    declaration-seq:
7891      declaration
7892      declaration-seq declaration  */
7893
7894 static void
7895 cp_parser_declaration_seq_opt (cp_parser* parser)
7896 {
7897   while (true)
7898     {
7899       cp_token *token;
7900
7901       token = cp_lexer_peek_token (parser->lexer);
7902
7903       if (token->type == CPP_CLOSE_BRACE
7904           || token->type == CPP_EOF
7905           || token->type == CPP_PRAGMA_EOL)
7906         break;
7907
7908       if (token->type == CPP_SEMICOLON)
7909         {
7910           /* A declaration consisting of a single semicolon is
7911              invalid.  Allow it unless we're being pedantic.  */
7912           cp_lexer_consume_token (parser->lexer);
7913           if (!in_system_header)
7914             pedwarn (input_location, OPT_pedantic, "extra %<;%>");
7915           continue;
7916         }
7917
7918       /* If we're entering or exiting a region that's implicitly
7919          extern "C", modify the lang context appropriately.  */
7920       if (!parser->implicit_extern_c && token->implicit_extern_c)
7921         {
7922           push_lang_context (lang_name_c);
7923           parser->implicit_extern_c = true;
7924         }
7925       else if (parser->implicit_extern_c && !token->implicit_extern_c)
7926         {
7927           pop_lang_context ();
7928           parser->implicit_extern_c = false;
7929         }
7930
7931       if (token->type == CPP_PRAGMA)
7932         {
7933           /* A top-level declaration can consist solely of a #pragma.
7934              A nested declaration cannot, so this is done here and not
7935              in cp_parser_declaration.  (A #pragma at block scope is
7936              handled in cp_parser_statement.)  */
7937           cp_parser_pragma (parser, pragma_external);
7938           continue;
7939         }
7940
7941       /* Parse the declaration itself.  */
7942       cp_parser_declaration (parser);
7943     }
7944 }
7945
7946 /* Parse a declaration.
7947
7948    declaration:
7949      block-declaration
7950      function-definition
7951      template-declaration
7952      explicit-instantiation
7953      explicit-specialization
7954      linkage-specification
7955      namespace-definition
7956
7957    GNU extension:
7958
7959    declaration:
7960       __extension__ declaration */
7961
7962 static void
7963 cp_parser_declaration (cp_parser* parser)
7964 {
7965   cp_token token1;
7966   cp_token token2;
7967   int saved_pedantic;
7968   void *p;
7969
7970   /* Check for the `__extension__' keyword.  */
7971   if (cp_parser_extension_opt (parser, &saved_pedantic))
7972     {
7973       /* Parse the qualified declaration.  */
7974       cp_parser_declaration (parser);
7975       /* Restore the PEDANTIC flag.  */
7976       pedantic = saved_pedantic;
7977
7978       return;
7979     }
7980
7981   /* Try to figure out what kind of declaration is present.  */
7982   token1 = *cp_lexer_peek_token (parser->lexer);
7983
7984   if (token1.type != CPP_EOF)
7985     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
7986   else
7987     {
7988       token2.type = CPP_EOF;
7989       token2.keyword = RID_MAX;
7990     }
7991
7992   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7993   p = obstack_alloc (&declarator_obstack, 0);
7994
7995   /* If the next token is `extern' and the following token is a string
7996      literal, then we have a linkage specification.  */
7997   if (token1.keyword == RID_EXTERN
7998       && cp_parser_is_string_literal (&token2))
7999     cp_parser_linkage_specification (parser);
8000   /* If the next token is `template', then we have either a template
8001      declaration, an explicit instantiation, or an explicit
8002      specialization.  */
8003   else if (token1.keyword == RID_TEMPLATE)
8004     {
8005       /* `template <>' indicates a template specialization.  */
8006       if (token2.type == CPP_LESS
8007           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
8008         cp_parser_explicit_specialization (parser);
8009       /* `template <' indicates a template declaration.  */
8010       else if (token2.type == CPP_LESS)
8011         cp_parser_template_declaration (parser, /*member_p=*/false);
8012       /* Anything else must be an explicit instantiation.  */
8013       else
8014         cp_parser_explicit_instantiation (parser);
8015     }
8016   /* If the next token is `export', then we have a template
8017      declaration.  */
8018   else if (token1.keyword == RID_EXPORT)
8019     cp_parser_template_declaration (parser, /*member_p=*/false);
8020   /* If the next token is `extern', 'static' or 'inline' and the one
8021      after that is `template', we have a GNU extended explicit
8022      instantiation directive.  */
8023   else if (cp_parser_allow_gnu_extensions_p (parser)
8024            && (token1.keyword == RID_EXTERN
8025                || token1.keyword == RID_STATIC
8026                || token1.keyword == RID_INLINE)
8027            && token2.keyword == RID_TEMPLATE)
8028     cp_parser_explicit_instantiation (parser);
8029   /* If the next token is `namespace', check for a named or unnamed
8030      namespace definition.  */
8031   else if (token1.keyword == RID_NAMESPACE
8032            && (/* A named namespace definition.  */
8033                (token2.type == CPP_NAME
8034                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
8035                     != CPP_EQ))
8036                /* An unnamed namespace definition.  */
8037                || token2.type == CPP_OPEN_BRACE
8038                || token2.keyword == RID_ATTRIBUTE))
8039     cp_parser_namespace_definition (parser);
8040   /* An inline (associated) namespace definition.  */
8041   else if (token1.keyword == RID_INLINE
8042            && token2.keyword == RID_NAMESPACE)
8043     cp_parser_namespace_definition (parser);
8044   /* Objective-C++ declaration/definition.  */
8045   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
8046     cp_parser_objc_declaration (parser);
8047   /* We must have either a block declaration or a function
8048      definition.  */
8049   else
8050     /* Try to parse a block-declaration, or a function-definition.  */
8051     cp_parser_block_declaration (parser, /*statement_p=*/false);
8052
8053   /* Free any declarators allocated.  */
8054   obstack_free (&declarator_obstack, p);
8055 }
8056
8057 /* Parse a block-declaration.
8058
8059    block-declaration:
8060      simple-declaration
8061      asm-definition
8062      namespace-alias-definition
8063      using-declaration
8064      using-directive
8065
8066    GNU Extension:
8067
8068    block-declaration:
8069      __extension__ block-declaration
8070
8071    C++0x Extension:
8072
8073    block-declaration:
8074      static_assert-declaration
8075
8076    If STATEMENT_P is TRUE, then this block-declaration is occurring as
8077    part of a declaration-statement.  */
8078
8079 static void
8080 cp_parser_block_declaration (cp_parser *parser,
8081                              bool      statement_p)
8082 {
8083   cp_token *token1;
8084   int saved_pedantic;
8085
8086   /* Check for the `__extension__' keyword.  */
8087   if (cp_parser_extension_opt (parser, &saved_pedantic))
8088     {
8089       /* Parse the qualified declaration.  */
8090       cp_parser_block_declaration (parser, statement_p);
8091       /* Restore the PEDANTIC flag.  */
8092       pedantic = saved_pedantic;
8093
8094       return;
8095     }
8096
8097   /* Peek at the next token to figure out which kind of declaration is
8098      present.  */
8099   token1 = cp_lexer_peek_token (parser->lexer);
8100
8101   /* If the next keyword is `asm', we have an asm-definition.  */
8102   if (token1->keyword == RID_ASM)
8103     {
8104       if (statement_p)
8105         cp_parser_commit_to_tentative_parse (parser);
8106       cp_parser_asm_definition (parser);
8107     }
8108   /* If the next keyword is `namespace', we have a
8109      namespace-alias-definition.  */
8110   else if (token1->keyword == RID_NAMESPACE)
8111     cp_parser_namespace_alias_definition (parser);
8112   /* If the next keyword is `using', we have either a
8113      using-declaration or a using-directive.  */
8114   else if (token1->keyword == RID_USING)
8115     {
8116       cp_token *token2;
8117
8118       if (statement_p)
8119         cp_parser_commit_to_tentative_parse (parser);
8120       /* If the token after `using' is `namespace', then we have a
8121          using-directive.  */
8122       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
8123       if (token2->keyword == RID_NAMESPACE)
8124         cp_parser_using_directive (parser);
8125       /* Otherwise, it's a using-declaration.  */
8126       else
8127         cp_parser_using_declaration (parser,
8128                                      /*access_declaration_p=*/false);
8129     }
8130   /* If the next keyword is `__label__' we have a misplaced label
8131      declaration.  */
8132   else if (token1->keyword == RID_LABEL)
8133     {
8134       cp_lexer_consume_token (parser->lexer);
8135       error ("%H%<__label__%> not at the beginning of a block", &token1->location);
8136       cp_parser_skip_to_end_of_statement (parser);
8137       /* If the next token is now a `;', consume it.  */
8138       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
8139         cp_lexer_consume_token (parser->lexer);
8140     }
8141   /* If the next token is `static_assert' we have a static assertion.  */
8142   else if (token1->keyword == RID_STATIC_ASSERT)
8143     cp_parser_static_assert (parser, /*member_p=*/false);
8144   /* Anything else must be a simple-declaration.  */
8145   else
8146     cp_parser_simple_declaration (parser, !statement_p);
8147 }
8148
8149 /* Parse a simple-declaration.
8150
8151    simple-declaration:
8152      decl-specifier-seq [opt] init-declarator-list [opt] ;
8153
8154    init-declarator-list:
8155      init-declarator
8156      init-declarator-list , init-declarator
8157
8158    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
8159    function-definition as a simple-declaration.  */
8160
8161 static void
8162 cp_parser_simple_declaration (cp_parser* parser,
8163                               bool function_definition_allowed_p)
8164 {
8165   cp_decl_specifier_seq decl_specifiers;
8166   int declares_class_or_enum;
8167   bool saw_declarator;
8168
8169   /* Defer access checks until we know what is being declared; the
8170      checks for names appearing in the decl-specifier-seq should be
8171      done as if we were in the scope of the thing being declared.  */
8172   push_deferring_access_checks (dk_deferred);
8173
8174   /* Parse the decl-specifier-seq.  We have to keep track of whether
8175      or not the decl-specifier-seq declares a named class or
8176      enumeration type, since that is the only case in which the
8177      init-declarator-list is allowed to be empty.
8178
8179      [dcl.dcl]
8180
8181      In a simple-declaration, the optional init-declarator-list can be
8182      omitted only when declaring a class or enumeration, that is when
8183      the decl-specifier-seq contains either a class-specifier, an
8184      elaborated-type-specifier, or an enum-specifier.  */
8185   cp_parser_decl_specifier_seq (parser,
8186                                 CP_PARSER_FLAGS_OPTIONAL,
8187                                 &decl_specifiers,
8188                                 &declares_class_or_enum);
8189   /* We no longer need to defer access checks.  */
8190   stop_deferring_access_checks ();
8191
8192   /* In a block scope, a valid declaration must always have a
8193      decl-specifier-seq.  By not trying to parse declarators, we can
8194      resolve the declaration/expression ambiguity more quickly.  */
8195   if (!function_definition_allowed_p
8196       && !decl_specifiers.any_specifiers_p)
8197     {
8198       cp_parser_error (parser, "expected declaration");
8199       goto done;
8200     }
8201
8202   /* If the next two tokens are both identifiers, the code is
8203      erroneous. The usual cause of this situation is code like:
8204
8205        T t;
8206
8207      where "T" should name a type -- but does not.  */
8208   if (!decl_specifiers.type
8209       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
8210     {
8211       /* If parsing tentatively, we should commit; we really are
8212          looking at a declaration.  */
8213       cp_parser_commit_to_tentative_parse (parser);
8214       /* Give up.  */
8215       goto done;
8216     }
8217
8218   /* If we have seen at least one decl-specifier, and the next token
8219      is not a parenthesis, then we must be looking at a declaration.
8220      (After "int (" we might be looking at a functional cast.)  */
8221   if (decl_specifiers.any_specifiers_p
8222       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN)
8223       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
8224       && !cp_parser_error_occurred (parser))
8225     cp_parser_commit_to_tentative_parse (parser);
8226
8227   /* Keep going until we hit the `;' at the end of the simple
8228      declaration.  */
8229   saw_declarator = false;
8230   while (cp_lexer_next_token_is_not (parser->lexer,
8231                                      CPP_SEMICOLON))
8232     {
8233       cp_token *token;
8234       bool function_definition_p;
8235       tree decl;
8236
8237       if (saw_declarator)
8238         {
8239           /* If we are processing next declarator, coma is expected */
8240           token = cp_lexer_peek_token (parser->lexer);
8241           gcc_assert (token->type == CPP_COMMA);
8242           cp_lexer_consume_token (parser->lexer);
8243         }
8244       else
8245         saw_declarator = true;
8246
8247       /* Parse the init-declarator.  */
8248       decl = cp_parser_init_declarator (parser, &decl_specifiers,
8249                                         /*checks=*/NULL,
8250                                         function_definition_allowed_p,
8251                                         /*member_p=*/false,
8252                                         declares_class_or_enum,
8253                                         &function_definition_p);
8254       /* If an error occurred while parsing tentatively, exit quickly.
8255          (That usually happens when in the body of a function; each
8256          statement is treated as a declaration-statement until proven
8257          otherwise.)  */
8258       if (cp_parser_error_occurred (parser))
8259         goto done;
8260       /* Handle function definitions specially.  */
8261       if (function_definition_p)
8262         {
8263           /* If the next token is a `,', then we are probably
8264              processing something like:
8265
8266                void f() {}, *p;
8267
8268              which is erroneous.  */
8269           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
8270             {
8271               cp_token *token = cp_lexer_peek_token (parser->lexer);
8272               error ("%Hmixing declarations and function-definitions is forbidden",
8273                      &token->location);
8274             }
8275           /* Otherwise, we're done with the list of declarators.  */
8276           else
8277             {
8278               pop_deferring_access_checks ();
8279               return;
8280             }
8281         }
8282       /* The next token should be either a `,' or a `;'.  */
8283       token = cp_lexer_peek_token (parser->lexer);
8284       /* If it's a `,', there are more declarators to come.  */
8285       if (token->type == CPP_COMMA)
8286         /* will be consumed next time around */;
8287       /* If it's a `;', we are done.  */
8288       else if (token->type == CPP_SEMICOLON)
8289         break;
8290       /* Anything else is an error.  */
8291       else
8292         {
8293           /* If we have already issued an error message we don't need
8294              to issue another one.  */
8295           if (decl != error_mark_node
8296               || cp_parser_uncommitted_to_tentative_parse_p (parser))
8297             cp_parser_error (parser, "expected %<,%> or %<;%>");
8298           /* Skip tokens until we reach the end of the statement.  */
8299           cp_parser_skip_to_end_of_statement (parser);
8300           /* If the next token is now a `;', consume it.  */
8301           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
8302             cp_lexer_consume_token (parser->lexer);
8303           goto done;
8304         }
8305       /* After the first time around, a function-definition is not
8306          allowed -- even if it was OK at first.  For example:
8307
8308            int i, f() {}
8309
8310          is not valid.  */
8311       function_definition_allowed_p = false;
8312     }
8313
8314   /* Issue an error message if no declarators are present, and the
8315      decl-specifier-seq does not itself declare a class or
8316      enumeration.  */
8317   if (!saw_declarator)
8318     {
8319       if (cp_parser_declares_only_class_p (parser))
8320         shadow_tag (&decl_specifiers);
8321       /* Perform any deferred access checks.  */
8322       perform_deferred_access_checks ();
8323     }
8324
8325   /* Consume the `;'.  */
8326   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
8327
8328  done:
8329   pop_deferring_access_checks ();
8330 }
8331
8332 /* Parse a decl-specifier-seq.
8333
8334    decl-specifier-seq:
8335      decl-specifier-seq [opt] decl-specifier
8336
8337    decl-specifier:
8338      storage-class-specifier
8339      type-specifier
8340      function-specifier
8341      friend
8342      typedef
8343
8344    GNU Extension:
8345
8346    decl-specifier:
8347      attributes
8348
8349    Set *DECL_SPECS to a representation of the decl-specifier-seq.
8350
8351    The parser flags FLAGS is used to control type-specifier parsing.
8352
8353    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
8354    flags:
8355
8356      1: one of the decl-specifiers is an elaborated-type-specifier
8357         (i.e., a type declaration)
8358      2: one of the decl-specifiers is an enum-specifier or a
8359         class-specifier (i.e., a type definition)
8360
8361    */
8362
8363 static void
8364 cp_parser_decl_specifier_seq (cp_parser* parser,
8365                               cp_parser_flags flags,
8366                               cp_decl_specifier_seq *decl_specs,
8367                               int* declares_class_or_enum)
8368 {
8369   bool constructor_possible_p = !parser->in_declarator_p;
8370   cp_token *start_token = NULL;
8371
8372   /* Clear DECL_SPECS.  */
8373   clear_decl_specs (decl_specs);
8374
8375   /* Assume no class or enumeration type is declared.  */
8376   *declares_class_or_enum = 0;
8377
8378   /* Keep reading specifiers until there are no more to read.  */
8379   while (true)
8380     {
8381       bool constructor_p;
8382       bool found_decl_spec;
8383       cp_token *token;
8384
8385       /* Peek at the next token.  */
8386       token = cp_lexer_peek_token (parser->lexer);
8387
8388       /* Save the first token of the decl spec list for error
8389          reporting.  */
8390       if (!start_token)
8391         start_token = token;
8392       /* Handle attributes.  */
8393       if (token->keyword == RID_ATTRIBUTE)
8394         {
8395           /* Parse the attributes.  */
8396           decl_specs->attributes
8397             = chainon (decl_specs->attributes,
8398                        cp_parser_attributes_opt (parser));
8399           continue;
8400         }
8401       /* Assume we will find a decl-specifier keyword.  */
8402       found_decl_spec = true;
8403       /* If the next token is an appropriate keyword, we can simply
8404          add it to the list.  */
8405       switch (token->keyword)
8406         {
8407           /* decl-specifier:
8408                friend  */
8409         case RID_FRIEND:
8410           if (!at_class_scope_p ())
8411             {
8412               error ("%H%<friend%> used outside of class", &token->location);
8413               cp_lexer_purge_token (parser->lexer);
8414             }
8415           else
8416             {
8417               ++decl_specs->specs[(int) ds_friend];
8418               /* Consume the token.  */
8419               cp_lexer_consume_token (parser->lexer);
8420             }
8421           break;
8422
8423           /* function-specifier:
8424                inline
8425                virtual
8426                explicit  */
8427         case RID_INLINE:
8428         case RID_VIRTUAL:
8429         case RID_EXPLICIT:
8430           cp_parser_function_specifier_opt (parser, decl_specs);
8431           break;
8432
8433           /* decl-specifier:
8434                typedef  */
8435         case RID_TYPEDEF:
8436           ++decl_specs->specs[(int) ds_typedef];
8437           /* Consume the token.  */
8438           cp_lexer_consume_token (parser->lexer);
8439           /* A constructor declarator cannot appear in a typedef.  */
8440           constructor_possible_p = false;
8441           /* The "typedef" keyword can only occur in a declaration; we
8442              may as well commit at this point.  */
8443           cp_parser_commit_to_tentative_parse (parser);
8444
8445           if (decl_specs->storage_class != sc_none)
8446             decl_specs->conflicting_specifiers_p = true;
8447           break;
8448
8449           /* storage-class-specifier:
8450                auto
8451                register
8452                static
8453                extern
8454                mutable
8455
8456              GNU Extension:
8457                thread  */
8458         case RID_AUTO:
8459           if (cxx_dialect == cxx98) 
8460             {
8461               /* Consume the token.  */
8462               cp_lexer_consume_token (parser->lexer);
8463
8464               /* Complain about `auto' as a storage specifier, if
8465                  we're complaining about C++0x compatibility.  */
8466               warning 
8467                 (OPT_Wc__0x_compat, 
8468                  "%H%<auto%> will change meaning in C++0x; please remove it",
8469                  &token->location);
8470
8471               /* Set the storage class anyway.  */
8472               cp_parser_set_storage_class (parser, decl_specs, RID_AUTO,
8473                                            token->location);
8474             }
8475           else
8476             /* C++0x auto type-specifier.  */
8477             found_decl_spec = false;
8478           break;
8479
8480         case RID_REGISTER:
8481         case RID_STATIC:
8482         case RID_EXTERN:
8483         case RID_MUTABLE:
8484           /* Consume the token.  */
8485           cp_lexer_consume_token (parser->lexer);
8486           cp_parser_set_storage_class (parser, decl_specs, token->keyword,
8487                                        token->location);
8488           break;
8489         case RID_THREAD:
8490           /* Consume the token.  */
8491           cp_lexer_consume_token (parser->lexer);
8492           ++decl_specs->specs[(int) ds_thread];
8493           break;
8494
8495         default:
8496           /* We did not yet find a decl-specifier yet.  */
8497           found_decl_spec = false;
8498           break;
8499         }
8500
8501       /* Constructors are a special case.  The `S' in `S()' is not a
8502          decl-specifier; it is the beginning of the declarator.  */
8503       constructor_p
8504         = (!found_decl_spec
8505            && constructor_possible_p
8506            && (cp_parser_constructor_declarator_p
8507                (parser, decl_specs->specs[(int) ds_friend] != 0)));
8508
8509       /* If we don't have a DECL_SPEC yet, then we must be looking at
8510          a type-specifier.  */
8511       if (!found_decl_spec && !constructor_p)
8512         {
8513           int decl_spec_declares_class_or_enum;
8514           bool is_cv_qualifier;
8515           tree type_spec;
8516
8517           type_spec
8518             = cp_parser_type_specifier (parser, flags,
8519                                         decl_specs,
8520                                         /*is_declaration=*/true,
8521                                         &decl_spec_declares_class_or_enum,
8522                                         &is_cv_qualifier);
8523           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
8524
8525           /* If this type-specifier referenced a user-defined type
8526              (a typedef, class-name, etc.), then we can't allow any
8527              more such type-specifiers henceforth.
8528
8529              [dcl.spec]
8530
8531              The longest sequence of decl-specifiers that could
8532              possibly be a type name is taken as the
8533              decl-specifier-seq of a declaration.  The sequence shall
8534              be self-consistent as described below.
8535
8536              [dcl.type]
8537
8538              As a general rule, at most one type-specifier is allowed
8539              in the complete decl-specifier-seq of a declaration.  The
8540              only exceptions are the following:
8541
8542              -- const or volatile can be combined with any other
8543                 type-specifier.
8544
8545              -- signed or unsigned can be combined with char, long,
8546                 short, or int.
8547
8548              -- ..
8549
8550              Example:
8551
8552                typedef char* Pc;
8553                void g (const int Pc);
8554
8555              Here, Pc is *not* part of the decl-specifier seq; it's
8556              the declarator.  Therefore, once we see a type-specifier
8557              (other than a cv-qualifier), we forbid any additional
8558              user-defined types.  We *do* still allow things like `int
8559              int' to be considered a decl-specifier-seq, and issue the
8560              error message later.  */
8561           if (type_spec && !is_cv_qualifier)
8562             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
8563           /* A constructor declarator cannot follow a type-specifier.  */
8564           if (type_spec)
8565             {
8566               constructor_possible_p = false;
8567               found_decl_spec = true;
8568             }
8569         }
8570
8571       /* If we still do not have a DECL_SPEC, then there are no more
8572          decl-specifiers.  */
8573       if (!found_decl_spec)
8574         break;
8575
8576       decl_specs->any_specifiers_p = true;
8577       /* After we see one decl-specifier, further decl-specifiers are
8578          always optional.  */
8579       flags |= CP_PARSER_FLAGS_OPTIONAL;
8580     }
8581
8582   cp_parser_check_decl_spec (decl_specs, start_token->location);
8583
8584   /* Don't allow a friend specifier with a class definition.  */
8585   if (decl_specs->specs[(int) ds_friend] != 0
8586       && (*declares_class_or_enum & 2))
8587     error ("%Hclass definition may not be declared a friend",
8588             &start_token->location);
8589 }
8590
8591 /* Parse an (optional) storage-class-specifier.
8592
8593    storage-class-specifier:
8594      auto
8595      register
8596      static
8597      extern
8598      mutable
8599
8600    GNU Extension:
8601
8602    storage-class-specifier:
8603      thread
8604
8605    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
8606
8607 static tree
8608 cp_parser_storage_class_specifier_opt (cp_parser* parser)
8609 {
8610   switch (cp_lexer_peek_token (parser->lexer)->keyword)
8611     {
8612     case RID_AUTO:
8613       if (cxx_dialect != cxx98)
8614         return NULL_TREE;
8615       /* Fall through for C++98.  */
8616
8617     case RID_REGISTER:
8618     case RID_STATIC:
8619     case RID_EXTERN:
8620     case RID_MUTABLE:
8621     case RID_THREAD:
8622       /* Consume the token.  */
8623       return cp_lexer_consume_token (parser->lexer)->u.value;
8624
8625     default:
8626       return NULL_TREE;
8627     }
8628 }
8629
8630 /* Parse an (optional) function-specifier.
8631
8632    function-specifier:
8633      inline
8634      virtual
8635      explicit
8636
8637    Returns an IDENTIFIER_NODE corresponding to the keyword used.
8638    Updates DECL_SPECS, if it is non-NULL.  */
8639
8640 static tree
8641 cp_parser_function_specifier_opt (cp_parser* parser,
8642                                   cp_decl_specifier_seq *decl_specs)
8643 {
8644   cp_token *token = cp_lexer_peek_token (parser->lexer);
8645   switch (token->keyword)
8646     {
8647     case RID_INLINE:
8648       if (decl_specs)
8649         ++decl_specs->specs[(int) ds_inline];
8650       break;
8651
8652     case RID_VIRTUAL:
8653       /* 14.5.2.3 [temp.mem]
8654
8655          A member function template shall not be virtual.  */
8656       if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8657         error ("%Htemplates may not be %<virtual%>", &token->location);
8658       else if (decl_specs)
8659         ++decl_specs->specs[(int) ds_virtual];
8660       break;
8661
8662     case RID_EXPLICIT:
8663       if (decl_specs)
8664         ++decl_specs->specs[(int) ds_explicit];
8665       break;
8666
8667     default:
8668       return NULL_TREE;
8669     }
8670
8671   /* Consume the token.  */
8672   return cp_lexer_consume_token (parser->lexer)->u.value;
8673 }
8674
8675 /* Parse a linkage-specification.
8676
8677    linkage-specification:
8678      extern string-literal { declaration-seq [opt] }
8679      extern string-literal declaration  */
8680
8681 static void
8682 cp_parser_linkage_specification (cp_parser* parser)
8683 {
8684   tree linkage;
8685
8686   /* Look for the `extern' keyword.  */
8687   cp_parser_require_keyword (parser, RID_EXTERN, "%<extern%>");
8688
8689   /* Look for the string-literal.  */
8690   linkage = cp_parser_string_literal (parser, false, false);
8691
8692   /* Transform the literal into an identifier.  If the literal is a
8693      wide-character string, or contains embedded NULs, then we can't
8694      handle it as the user wants.  */
8695   if (strlen (TREE_STRING_POINTER (linkage))
8696       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
8697     {
8698       cp_parser_error (parser, "invalid linkage-specification");
8699       /* Assume C++ linkage.  */
8700       linkage = lang_name_cplusplus;
8701     }
8702   else
8703     linkage = get_identifier (TREE_STRING_POINTER (linkage));
8704
8705   /* We're now using the new linkage.  */
8706   push_lang_context (linkage);
8707
8708   /* If the next token is a `{', then we're using the first
8709      production.  */
8710   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
8711     {
8712       /* Consume the `{' token.  */
8713       cp_lexer_consume_token (parser->lexer);
8714       /* Parse the declarations.  */
8715       cp_parser_declaration_seq_opt (parser);
8716       /* Look for the closing `}'.  */
8717       cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
8718     }
8719   /* Otherwise, there's just one declaration.  */
8720   else
8721     {
8722       bool saved_in_unbraced_linkage_specification_p;
8723
8724       saved_in_unbraced_linkage_specification_p
8725         = parser->in_unbraced_linkage_specification_p;
8726       parser->in_unbraced_linkage_specification_p = true;
8727       cp_parser_declaration (parser);
8728       parser->in_unbraced_linkage_specification_p
8729         = saved_in_unbraced_linkage_specification_p;
8730     }
8731
8732   /* We're done with the linkage-specification.  */
8733   pop_lang_context ();
8734 }
8735
8736 /* Parse a static_assert-declaration.
8737
8738    static_assert-declaration:
8739      static_assert ( constant-expression , string-literal ) ; 
8740
8741    If MEMBER_P, this static_assert is a class member.  */
8742
8743 static void 
8744 cp_parser_static_assert(cp_parser *parser, bool member_p)
8745 {
8746   tree condition;
8747   tree message;
8748   cp_token *token;
8749   location_t saved_loc;
8750
8751   /* Peek at the `static_assert' token so we can keep track of exactly
8752      where the static assertion started.  */
8753   token = cp_lexer_peek_token (parser->lexer);
8754   saved_loc = token->location;
8755
8756   /* Look for the `static_assert' keyword.  */
8757   if (!cp_parser_require_keyword (parser, RID_STATIC_ASSERT, 
8758                                   "%<static_assert%>"))
8759     return;
8760
8761   /*  We know we are in a static assertion; commit to any tentative
8762       parse.  */
8763   if (cp_parser_parsing_tentatively (parser))
8764     cp_parser_commit_to_tentative_parse (parser);
8765
8766   /* Parse the `(' starting the static assertion condition.  */
8767   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
8768
8769   /* Parse the constant-expression.  */
8770   condition = 
8771     cp_parser_constant_expression (parser,
8772                                    /*allow_non_constant_p=*/false,
8773                                    /*non_constant_p=*/NULL);
8774
8775   /* Parse the separating `,'.  */
8776   cp_parser_require (parser, CPP_COMMA, "%<,%>");
8777
8778   /* Parse the string-literal message.  */
8779   message = cp_parser_string_literal (parser, 
8780                                       /*translate=*/false,
8781                                       /*wide_ok=*/true);
8782
8783   /* A `)' completes the static assertion.  */
8784   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
8785     cp_parser_skip_to_closing_parenthesis (parser, 
8786                                            /*recovering=*/true, 
8787                                            /*or_comma=*/false,
8788                                            /*consume_paren=*/true);
8789
8790   /* A semicolon terminates the declaration.  */
8791   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
8792
8793   /* Complete the static assertion, which may mean either processing 
8794      the static assert now or saving it for template instantiation.  */
8795   finish_static_assert (condition, message, saved_loc, member_p);
8796 }
8797
8798 /* Parse a `decltype' type. Returns the type. 
8799
8800    simple-type-specifier:
8801      decltype ( expression )  */
8802
8803 static tree
8804 cp_parser_decltype (cp_parser *parser)
8805 {
8806   tree expr;
8807   bool id_expression_or_member_access_p = false;
8808   const char *saved_message;
8809   bool saved_integral_constant_expression_p;
8810   bool saved_non_integral_constant_expression_p;
8811   cp_token *id_expr_start_token;
8812
8813   /* Look for the `decltype' token.  */
8814   if (!cp_parser_require_keyword (parser, RID_DECLTYPE, "%<decltype%>"))
8815     return error_mark_node;
8816
8817   /* Types cannot be defined in a `decltype' expression.  Save away the
8818      old message.  */
8819   saved_message = parser->type_definition_forbidden_message;
8820
8821   /* And create the new one.  */
8822   parser->type_definition_forbidden_message
8823     = "types may not be defined in %<decltype%> expressions";
8824
8825   /* The restrictions on constant-expressions do not apply inside
8826      decltype expressions.  */
8827   saved_integral_constant_expression_p
8828     = parser->integral_constant_expression_p;
8829   saved_non_integral_constant_expression_p
8830     = parser->non_integral_constant_expression_p;
8831   parser->integral_constant_expression_p = false;
8832
8833   /* Do not actually evaluate the expression.  */
8834   ++skip_evaluation;
8835
8836   /* Parse the opening `('.  */
8837   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
8838     return error_mark_node;
8839   
8840   /* First, try parsing an id-expression.  */
8841   id_expr_start_token = cp_lexer_peek_token (parser->lexer);
8842   cp_parser_parse_tentatively (parser);
8843   expr = cp_parser_id_expression (parser,
8844                                   /*template_keyword_p=*/false,
8845                                   /*check_dependency_p=*/true,
8846                                   /*template_p=*/NULL,
8847                                   /*declarator_p=*/false,
8848                                   /*optional_p=*/false);
8849
8850   if (!cp_parser_error_occurred (parser) && expr != error_mark_node)
8851     {
8852       bool non_integral_constant_expression_p = false;
8853       tree id_expression = expr;
8854       cp_id_kind idk;
8855       const char *error_msg;
8856
8857       if (TREE_CODE (expr) == IDENTIFIER_NODE)
8858         /* Lookup the name we got back from the id-expression.  */
8859         expr = cp_parser_lookup_name (parser, expr,
8860                                       none_type,
8861                                       /*is_template=*/false,
8862                                       /*is_namespace=*/false,
8863                                       /*check_dependency=*/true,
8864                                       /*ambiguous_decls=*/NULL,
8865                                       id_expr_start_token->location);
8866
8867       if (expr
8868           && expr != error_mark_node
8869           && TREE_CODE (expr) != TEMPLATE_ID_EXPR
8870           && TREE_CODE (expr) != TYPE_DECL
8871           && (TREE_CODE (expr) != BIT_NOT_EXPR
8872               || !TYPE_P (TREE_OPERAND (expr, 0)))
8873           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
8874         {
8875           /* Complete lookup of the id-expression.  */
8876           expr = (finish_id_expression
8877                   (id_expression, expr, parser->scope, &idk,
8878                    /*integral_constant_expression_p=*/false,
8879                    /*allow_non_integral_constant_expression_p=*/true,
8880                    &non_integral_constant_expression_p,
8881                    /*template_p=*/false,
8882                    /*done=*/true,
8883                    /*address_p=*/false,
8884                    /*template_arg_p=*/false,
8885                    &error_msg,
8886                    id_expr_start_token->location));
8887
8888           if (expr == error_mark_node)
8889             /* We found an id-expression, but it was something that we
8890                should not have found. This is an error, not something
8891                we can recover from, so note that we found an
8892                id-expression and we'll recover as gracefully as
8893                possible.  */
8894             id_expression_or_member_access_p = true;
8895         }
8896
8897       if (expr 
8898           && expr != error_mark_node
8899           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
8900         /* We have an id-expression.  */
8901         id_expression_or_member_access_p = true;
8902     }
8903
8904   if (!id_expression_or_member_access_p)
8905     {
8906       /* Abort the id-expression parse.  */
8907       cp_parser_abort_tentative_parse (parser);
8908
8909       /* Parsing tentatively, again.  */
8910       cp_parser_parse_tentatively (parser);
8911
8912       /* Parse a class member access.  */
8913       expr = cp_parser_postfix_expression (parser, /*address_p=*/false,
8914                                            /*cast_p=*/false,
8915                                            /*member_access_only_p=*/true, NULL);
8916
8917       if (expr 
8918           && expr != error_mark_node
8919           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
8920         /* We have an id-expression.  */
8921         id_expression_or_member_access_p = true;
8922     }
8923
8924   if (id_expression_or_member_access_p)
8925     /* We have parsed the complete id-expression or member access.  */
8926     cp_parser_parse_definitely (parser);
8927   else
8928     {
8929       /* Abort our attempt to parse an id-expression or member access
8930          expression.  */
8931       cp_parser_abort_tentative_parse (parser);
8932
8933       /* Parse a full expression.  */
8934       expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
8935     }
8936
8937   /* Go back to evaluating expressions.  */
8938   --skip_evaluation;
8939
8940   /* Restore the old message and the integral constant expression
8941      flags.  */
8942   parser->type_definition_forbidden_message = saved_message;
8943   parser->integral_constant_expression_p
8944     = saved_integral_constant_expression_p;
8945   parser->non_integral_constant_expression_p
8946     = saved_non_integral_constant_expression_p;
8947
8948   if (expr == error_mark_node)
8949     {
8950       /* Skip everything up to the closing `)'.  */
8951       cp_parser_skip_to_closing_parenthesis (parser, true, false,
8952                                              /*consume_paren=*/true);
8953       return error_mark_node;
8954     }
8955   
8956   /* Parse to the closing `)'.  */
8957   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
8958     {
8959       cp_parser_skip_to_closing_parenthesis (parser, true, false,
8960                                              /*consume_paren=*/true);
8961       return error_mark_node;
8962     }
8963
8964   return finish_decltype_type (expr, id_expression_or_member_access_p);
8965 }
8966
8967 /* Special member functions [gram.special] */
8968
8969 /* Parse a conversion-function-id.
8970
8971    conversion-function-id:
8972      operator conversion-type-id
8973
8974    Returns an IDENTIFIER_NODE representing the operator.  */
8975
8976 static tree
8977 cp_parser_conversion_function_id (cp_parser* parser)
8978 {
8979   tree type;
8980   tree saved_scope;
8981   tree saved_qualifying_scope;
8982   tree saved_object_scope;
8983   tree pushed_scope = NULL_TREE;
8984
8985   /* Look for the `operator' token.  */
8986   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "%<operator%>"))
8987     return error_mark_node;
8988   /* When we parse the conversion-type-id, the current scope will be
8989      reset.  However, we need that information in able to look up the
8990      conversion function later, so we save it here.  */
8991   saved_scope = parser->scope;
8992   saved_qualifying_scope = parser->qualifying_scope;
8993   saved_object_scope = parser->object_scope;
8994   /* We must enter the scope of the class so that the names of
8995      entities declared within the class are available in the
8996      conversion-type-id.  For example, consider:
8997
8998        struct S {
8999          typedef int I;
9000          operator I();
9001        };
9002
9003        S::operator I() { ... }
9004
9005      In order to see that `I' is a type-name in the definition, we
9006      must be in the scope of `S'.  */
9007   if (saved_scope)
9008     pushed_scope = push_scope (saved_scope);
9009   /* Parse the conversion-type-id.  */
9010   type = cp_parser_conversion_type_id (parser);
9011   /* Leave the scope of the class, if any.  */
9012   if (pushed_scope)
9013     pop_scope (pushed_scope);
9014   /* Restore the saved scope.  */
9015   parser->scope = saved_scope;
9016   parser->qualifying_scope = saved_qualifying_scope;
9017   parser->object_scope = saved_object_scope;
9018   /* If the TYPE is invalid, indicate failure.  */
9019   if (type == error_mark_node)
9020     return error_mark_node;
9021   return mangle_conv_op_name_for_type (type);
9022 }
9023
9024 /* Parse a conversion-type-id:
9025
9026    conversion-type-id:
9027      type-specifier-seq conversion-declarator [opt]
9028
9029    Returns the TYPE specified.  */
9030
9031 static tree
9032 cp_parser_conversion_type_id (cp_parser* parser)
9033 {
9034   tree attributes;
9035   cp_decl_specifier_seq type_specifiers;
9036   cp_declarator *declarator;
9037   tree type_specified;
9038
9039   /* Parse the attributes.  */
9040   attributes = cp_parser_attributes_opt (parser);
9041   /* Parse the type-specifiers.  */
9042   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
9043                                 &type_specifiers);
9044   /* If that didn't work, stop.  */
9045   if (type_specifiers.type == error_mark_node)
9046     return error_mark_node;
9047   /* Parse the conversion-declarator.  */
9048   declarator = cp_parser_conversion_declarator_opt (parser);
9049
9050   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
9051                                     /*initialized=*/0, &attributes);
9052   if (attributes)
9053     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
9054
9055   /* Don't give this error when parsing tentatively.  This happens to
9056      work because we always parse this definitively once.  */
9057   if (! cp_parser_uncommitted_to_tentative_parse_p (parser)
9058       && type_uses_auto (type_specified))
9059     {
9060       error ("invalid use of %<auto%> in conversion operator");
9061       return error_mark_node;
9062     }
9063
9064   return type_specified;
9065 }
9066
9067 /* Parse an (optional) conversion-declarator.
9068
9069    conversion-declarator:
9070      ptr-operator conversion-declarator [opt]
9071
9072    */
9073
9074 static cp_declarator *
9075 cp_parser_conversion_declarator_opt (cp_parser* parser)
9076 {
9077   enum tree_code code;
9078   tree class_type;
9079   cp_cv_quals cv_quals;
9080
9081   /* We don't know if there's a ptr-operator next, or not.  */
9082   cp_parser_parse_tentatively (parser);
9083   /* Try the ptr-operator.  */
9084   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
9085   /* If it worked, look for more conversion-declarators.  */
9086   if (cp_parser_parse_definitely (parser))
9087     {
9088       cp_declarator *declarator;
9089
9090       /* Parse another optional declarator.  */
9091       declarator = cp_parser_conversion_declarator_opt (parser);
9092
9093       return cp_parser_make_indirect_declarator
9094         (code, class_type, cv_quals, declarator);
9095    }
9096
9097   return NULL;
9098 }
9099
9100 /* Parse an (optional) ctor-initializer.
9101
9102    ctor-initializer:
9103      : mem-initializer-list
9104
9105    Returns TRUE iff the ctor-initializer was actually present.  */
9106
9107 static bool
9108 cp_parser_ctor_initializer_opt (cp_parser* parser)
9109 {
9110   /* If the next token is not a `:', then there is no
9111      ctor-initializer.  */
9112   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
9113     {
9114       /* Do default initialization of any bases and members.  */
9115       if (DECL_CONSTRUCTOR_P (current_function_decl))
9116         finish_mem_initializers (NULL_TREE);
9117
9118       return false;
9119     }
9120
9121   /* Consume the `:' token.  */
9122   cp_lexer_consume_token (parser->lexer);
9123   /* And the mem-initializer-list.  */
9124   cp_parser_mem_initializer_list (parser);
9125
9126   return true;
9127 }
9128
9129 /* Parse a mem-initializer-list.
9130
9131    mem-initializer-list:
9132      mem-initializer ... [opt]
9133      mem-initializer ... [opt] , mem-initializer-list  */
9134
9135 static void
9136 cp_parser_mem_initializer_list (cp_parser* parser)
9137 {
9138   tree mem_initializer_list = NULL_TREE;
9139   cp_token *token = cp_lexer_peek_token (parser->lexer);
9140
9141   /* Let the semantic analysis code know that we are starting the
9142      mem-initializer-list.  */
9143   if (!DECL_CONSTRUCTOR_P (current_function_decl))
9144     error ("%Honly constructors take base initializers",
9145            &token->location);
9146
9147   /* Loop through the list.  */
9148   while (true)
9149     {
9150       tree mem_initializer;
9151
9152       token = cp_lexer_peek_token (parser->lexer);
9153       /* Parse the mem-initializer.  */
9154       mem_initializer = cp_parser_mem_initializer (parser);
9155       /* If the next token is a `...', we're expanding member initializers. */
9156       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
9157         {
9158           /* Consume the `...'. */
9159           cp_lexer_consume_token (parser->lexer);
9160
9161           /* The TREE_PURPOSE must be a _TYPE, because base-specifiers
9162              can be expanded but members cannot. */
9163           if (mem_initializer != error_mark_node
9164               && !TYPE_P (TREE_PURPOSE (mem_initializer)))
9165             {
9166               error ("%Hcannot expand initializer for member %<%D%>",
9167                      &token->location, TREE_PURPOSE (mem_initializer));
9168               mem_initializer = error_mark_node;
9169             }
9170
9171           /* Construct the pack expansion type. */
9172           if (mem_initializer != error_mark_node)
9173             mem_initializer = make_pack_expansion (mem_initializer);
9174         }
9175       /* Add it to the list, unless it was erroneous.  */
9176       if (mem_initializer != error_mark_node)
9177         {
9178           TREE_CHAIN (mem_initializer) = mem_initializer_list;
9179           mem_initializer_list = mem_initializer;
9180         }
9181       /* If the next token is not a `,', we're done.  */
9182       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
9183         break;
9184       /* Consume the `,' token.  */
9185       cp_lexer_consume_token (parser->lexer);
9186     }
9187
9188   /* Perform semantic analysis.  */
9189   if (DECL_CONSTRUCTOR_P (current_function_decl))
9190     finish_mem_initializers (mem_initializer_list);
9191 }
9192
9193 /* Parse a mem-initializer.
9194
9195    mem-initializer:
9196      mem-initializer-id ( expression-list [opt] )
9197      mem-initializer-id braced-init-list
9198
9199    GNU extension:
9200
9201    mem-initializer:
9202      ( expression-list [opt] )
9203
9204    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
9205    class) or FIELD_DECL (for a non-static data member) to initialize;
9206    the TREE_VALUE is the expression-list.  An empty initialization
9207    list is represented by void_list_node.  */
9208
9209 static tree
9210 cp_parser_mem_initializer (cp_parser* parser)
9211 {
9212   tree mem_initializer_id;
9213   tree expression_list;
9214   tree member;
9215   cp_token *token = cp_lexer_peek_token (parser->lexer);
9216
9217   /* Find out what is being initialized.  */
9218   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
9219     {
9220       permerror (token->location,
9221                  "anachronistic old-style base class initializer");
9222       mem_initializer_id = NULL_TREE;
9223     }
9224   else
9225     {
9226       mem_initializer_id = cp_parser_mem_initializer_id (parser);
9227       if (mem_initializer_id == error_mark_node)
9228         return mem_initializer_id;
9229     }
9230   member = expand_member_init (mem_initializer_id);
9231   if (member && !DECL_P (member))
9232     in_base_initializer = 1;
9233
9234   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9235     {
9236       bool expr_non_constant_p;
9237       maybe_warn_cpp0x ("extended initializer lists");
9238       expression_list = cp_parser_braced_list (parser, &expr_non_constant_p);
9239       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
9240       expression_list = build_tree_list (NULL_TREE, expression_list);
9241     }
9242   else
9243     {
9244       VEC(tree,gc)* vec;
9245       vec = cp_parser_parenthesized_expression_list (parser, false,
9246                                                      /*cast_p=*/false,
9247                                                      /*allow_expansion_p=*/true,
9248                                                      /*non_constant_p=*/NULL);
9249       if (vec == NULL)
9250         return error_mark_node;
9251       expression_list = build_tree_list_vec (vec);
9252       release_tree_vector (vec);
9253     }
9254
9255   if (expression_list == error_mark_node)
9256     return error_mark_node;
9257   if (!expression_list)
9258     expression_list = void_type_node;
9259
9260   in_base_initializer = 0;
9261
9262   return member ? build_tree_list (member, expression_list) : error_mark_node;
9263 }
9264
9265 /* Parse a mem-initializer-id.
9266
9267    mem-initializer-id:
9268      :: [opt] nested-name-specifier [opt] class-name
9269      identifier
9270
9271    Returns a TYPE indicating the class to be initializer for the first
9272    production.  Returns an IDENTIFIER_NODE indicating the data member
9273    to be initialized for the second production.  */
9274
9275 static tree
9276 cp_parser_mem_initializer_id (cp_parser* parser)
9277 {
9278   bool global_scope_p;
9279   bool nested_name_specifier_p;
9280   bool template_p = false;
9281   tree id;
9282
9283   cp_token *token = cp_lexer_peek_token (parser->lexer);
9284
9285   /* `typename' is not allowed in this context ([temp.res]).  */
9286   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
9287     {
9288       error ("%Hkeyword %<typename%> not allowed in this context (a qualified "
9289              "member initializer is implicitly a type)",
9290              &token->location);
9291       cp_lexer_consume_token (parser->lexer);
9292     }
9293   /* Look for the optional `::' operator.  */
9294   global_scope_p
9295     = (cp_parser_global_scope_opt (parser,
9296                                    /*current_scope_valid_p=*/false)
9297        != NULL_TREE);
9298   /* Look for the optional nested-name-specifier.  The simplest way to
9299      implement:
9300
9301        [temp.res]
9302
9303        The keyword `typename' is not permitted in a base-specifier or
9304        mem-initializer; in these contexts a qualified name that
9305        depends on a template-parameter is implicitly assumed to be a
9306        type name.
9307
9308      is to assume that we have seen the `typename' keyword at this
9309      point.  */
9310   nested_name_specifier_p
9311     = (cp_parser_nested_name_specifier_opt (parser,
9312                                             /*typename_keyword_p=*/true,
9313                                             /*check_dependency_p=*/true,
9314                                             /*type_p=*/true,
9315                                             /*is_declaration=*/true)
9316        != NULL_TREE);
9317   if (nested_name_specifier_p)
9318     template_p = cp_parser_optional_template_keyword (parser);
9319   /* If there is a `::' operator or a nested-name-specifier, then we
9320      are definitely looking for a class-name.  */
9321   if (global_scope_p || nested_name_specifier_p)
9322     return cp_parser_class_name (parser,
9323                                  /*typename_keyword_p=*/true,
9324                                  /*template_keyword_p=*/template_p,
9325                                  none_type,
9326                                  /*check_dependency_p=*/true,
9327                                  /*class_head_p=*/false,
9328                                  /*is_declaration=*/true);
9329   /* Otherwise, we could also be looking for an ordinary identifier.  */
9330   cp_parser_parse_tentatively (parser);
9331   /* Try a class-name.  */
9332   id = cp_parser_class_name (parser,
9333                              /*typename_keyword_p=*/true,
9334                              /*template_keyword_p=*/false,
9335                              none_type,
9336                              /*check_dependency_p=*/true,
9337                              /*class_head_p=*/false,
9338                              /*is_declaration=*/true);
9339   /* If we found one, we're done.  */
9340   if (cp_parser_parse_definitely (parser))
9341     return id;
9342   /* Otherwise, look for an ordinary identifier.  */
9343   return cp_parser_identifier (parser);
9344 }
9345
9346 /* Overloading [gram.over] */
9347
9348 /* Parse an operator-function-id.
9349
9350    operator-function-id:
9351      operator operator
9352
9353    Returns an IDENTIFIER_NODE for the operator which is a
9354    human-readable spelling of the identifier, e.g., `operator +'.  */
9355
9356 static tree
9357 cp_parser_operator_function_id (cp_parser* parser)
9358 {
9359   /* Look for the `operator' keyword.  */
9360   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "%<operator%>"))
9361     return error_mark_node;
9362   /* And then the name of the operator itself.  */
9363   return cp_parser_operator (parser);
9364 }
9365
9366 /* Parse an operator.
9367
9368    operator:
9369      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
9370      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
9371      || ++ -- , ->* -> () []
9372
9373    GNU Extensions:
9374
9375    operator:
9376      <? >? <?= >?=
9377
9378    Returns an IDENTIFIER_NODE for the operator which is a
9379    human-readable spelling of the identifier, e.g., `operator +'.  */
9380
9381 static tree
9382 cp_parser_operator (cp_parser* parser)
9383 {
9384   tree id = NULL_TREE;
9385   cp_token *token;
9386
9387   /* Peek at the next token.  */
9388   token = cp_lexer_peek_token (parser->lexer);
9389   /* Figure out which operator we have.  */
9390   switch (token->type)
9391     {
9392     case CPP_KEYWORD:
9393       {
9394         enum tree_code op;
9395
9396         /* The keyword should be either `new' or `delete'.  */
9397         if (token->keyword == RID_NEW)
9398           op = NEW_EXPR;
9399         else if (token->keyword == RID_DELETE)
9400           op = DELETE_EXPR;
9401         else
9402           break;
9403
9404         /* Consume the `new' or `delete' token.  */
9405         cp_lexer_consume_token (parser->lexer);
9406
9407         /* Peek at the next token.  */
9408         token = cp_lexer_peek_token (parser->lexer);
9409         /* If it's a `[' token then this is the array variant of the
9410            operator.  */
9411         if (token->type == CPP_OPEN_SQUARE)
9412           {
9413             /* Consume the `[' token.  */
9414             cp_lexer_consume_token (parser->lexer);
9415             /* Look for the `]' token.  */
9416             cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
9417             id = ansi_opname (op == NEW_EXPR
9418                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
9419           }
9420         /* Otherwise, we have the non-array variant.  */
9421         else
9422           id = ansi_opname (op);
9423
9424         return id;
9425       }
9426
9427     case CPP_PLUS:
9428       id = ansi_opname (PLUS_EXPR);
9429       break;
9430
9431     case CPP_MINUS:
9432       id = ansi_opname (MINUS_EXPR);
9433       break;
9434
9435     case CPP_MULT:
9436       id = ansi_opname (MULT_EXPR);
9437       break;
9438
9439     case CPP_DIV:
9440       id = ansi_opname (TRUNC_DIV_EXPR);
9441       break;
9442
9443     case CPP_MOD:
9444       id = ansi_opname (TRUNC_MOD_EXPR);
9445       break;
9446
9447     case CPP_XOR:
9448       id = ansi_opname (BIT_XOR_EXPR);
9449       break;
9450
9451     case CPP_AND:
9452       id = ansi_opname (BIT_AND_EXPR);
9453       break;
9454
9455     case CPP_OR:
9456       id = ansi_opname (BIT_IOR_EXPR);
9457       break;
9458
9459     case CPP_COMPL:
9460       id = ansi_opname (BIT_NOT_EXPR);
9461       break;
9462
9463     case CPP_NOT:
9464       id = ansi_opname (TRUTH_NOT_EXPR);
9465       break;
9466
9467     case CPP_EQ:
9468       id = ansi_assopname (NOP_EXPR);
9469       break;
9470
9471     case CPP_LESS:
9472       id = ansi_opname (LT_EXPR);
9473       break;
9474
9475     case CPP_GREATER:
9476       id = ansi_opname (GT_EXPR);
9477       break;
9478
9479     case CPP_PLUS_EQ:
9480       id = ansi_assopname (PLUS_EXPR);
9481       break;
9482
9483     case CPP_MINUS_EQ:
9484       id = ansi_assopname (MINUS_EXPR);
9485       break;
9486
9487     case CPP_MULT_EQ:
9488       id = ansi_assopname (MULT_EXPR);
9489       break;
9490
9491     case CPP_DIV_EQ:
9492       id = ansi_assopname (TRUNC_DIV_EXPR);
9493       break;
9494
9495     case CPP_MOD_EQ:
9496       id = ansi_assopname (TRUNC_MOD_EXPR);
9497       break;
9498
9499     case CPP_XOR_EQ:
9500       id = ansi_assopname (BIT_XOR_EXPR);
9501       break;
9502
9503     case CPP_AND_EQ:
9504       id = ansi_assopname (BIT_AND_EXPR);
9505       break;
9506
9507     case CPP_OR_EQ:
9508       id = ansi_assopname (BIT_IOR_EXPR);
9509       break;
9510
9511     case CPP_LSHIFT:
9512       id = ansi_opname (LSHIFT_EXPR);
9513       break;
9514
9515     case CPP_RSHIFT:
9516       id = ansi_opname (RSHIFT_EXPR);
9517       break;
9518
9519     case CPP_LSHIFT_EQ:
9520       id = ansi_assopname (LSHIFT_EXPR);
9521       break;
9522
9523     case CPP_RSHIFT_EQ:
9524       id = ansi_assopname (RSHIFT_EXPR);
9525       break;
9526
9527     case CPP_EQ_EQ:
9528       id = ansi_opname (EQ_EXPR);
9529       break;
9530
9531     case CPP_NOT_EQ:
9532       id = ansi_opname (NE_EXPR);
9533       break;
9534
9535     case CPP_LESS_EQ:
9536       id = ansi_opname (LE_EXPR);
9537       break;
9538
9539     case CPP_GREATER_EQ:
9540       id = ansi_opname (GE_EXPR);
9541       break;
9542
9543     case CPP_AND_AND:
9544       id = ansi_opname (TRUTH_ANDIF_EXPR);
9545       break;
9546
9547     case CPP_OR_OR:
9548       id = ansi_opname (TRUTH_ORIF_EXPR);
9549       break;
9550
9551     case CPP_PLUS_PLUS:
9552       id = ansi_opname (POSTINCREMENT_EXPR);
9553       break;
9554
9555     case CPP_MINUS_MINUS:
9556       id = ansi_opname (PREDECREMENT_EXPR);
9557       break;
9558
9559     case CPP_COMMA:
9560       id = ansi_opname (COMPOUND_EXPR);
9561       break;
9562
9563     case CPP_DEREF_STAR:
9564       id = ansi_opname (MEMBER_REF);
9565       break;
9566
9567     case CPP_DEREF:
9568       id = ansi_opname (COMPONENT_REF);
9569       break;
9570
9571     case CPP_OPEN_PAREN:
9572       /* Consume the `('.  */
9573       cp_lexer_consume_token (parser->lexer);
9574       /* Look for the matching `)'.  */
9575       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
9576       return ansi_opname (CALL_EXPR);
9577
9578     case CPP_OPEN_SQUARE:
9579       /* Consume the `['.  */
9580       cp_lexer_consume_token (parser->lexer);
9581       /* Look for the matching `]'.  */
9582       cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
9583       return ansi_opname (ARRAY_REF);
9584
9585     default:
9586       /* Anything else is an error.  */
9587       break;
9588     }
9589
9590   /* If we have selected an identifier, we need to consume the
9591      operator token.  */
9592   if (id)
9593     cp_lexer_consume_token (parser->lexer);
9594   /* Otherwise, no valid operator name was present.  */
9595   else
9596     {
9597       cp_parser_error (parser, "expected operator");
9598       id = error_mark_node;
9599     }
9600
9601   return id;
9602 }
9603
9604 /* Parse a template-declaration.
9605
9606    template-declaration:
9607      export [opt] template < template-parameter-list > declaration
9608
9609    If MEMBER_P is TRUE, this template-declaration occurs within a
9610    class-specifier.
9611
9612    The grammar rule given by the standard isn't correct.  What
9613    is really meant is:
9614
9615    template-declaration:
9616      export [opt] template-parameter-list-seq
9617        decl-specifier-seq [opt] init-declarator [opt] ;
9618      export [opt] template-parameter-list-seq
9619        function-definition
9620
9621    template-parameter-list-seq:
9622      template-parameter-list-seq [opt]
9623      template < template-parameter-list >  */
9624
9625 static void
9626 cp_parser_template_declaration (cp_parser* parser, bool member_p)
9627 {
9628   /* Check for `export'.  */
9629   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
9630     {
9631       /* Consume the `export' token.  */
9632       cp_lexer_consume_token (parser->lexer);
9633       /* Warn that we do not support `export'.  */
9634       warning (0, "keyword %<export%> not implemented, and will be ignored");
9635     }
9636
9637   cp_parser_template_declaration_after_export (parser, member_p);
9638 }
9639
9640 /* Parse a template-parameter-list.
9641
9642    template-parameter-list:
9643      template-parameter
9644      template-parameter-list , template-parameter
9645
9646    Returns a TREE_LIST.  Each node represents a template parameter.
9647    The nodes are connected via their TREE_CHAINs.  */
9648
9649 static tree
9650 cp_parser_template_parameter_list (cp_parser* parser)
9651 {
9652   tree parameter_list = NULL_TREE;
9653
9654   begin_template_parm_list ();
9655   while (true)
9656     {
9657       tree parameter;
9658       bool is_non_type;
9659       bool is_parameter_pack;
9660
9661       /* Parse the template-parameter.  */
9662       parameter = cp_parser_template_parameter (parser, 
9663                                                 &is_non_type,
9664                                                 &is_parameter_pack);
9665       /* Add it to the list.  */
9666       if (parameter != error_mark_node)
9667         parameter_list = process_template_parm (parameter_list,
9668                                                 parameter,
9669                                                 is_non_type,
9670                                                 is_parameter_pack);
9671       else
9672        {
9673          tree err_parm = build_tree_list (parameter, parameter);
9674          TREE_VALUE (err_parm) = error_mark_node;
9675          parameter_list = chainon (parameter_list, err_parm);
9676        }
9677
9678       /* If the next token is not a `,', we're done.  */
9679       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
9680         break;
9681       /* Otherwise, consume the `,' token.  */
9682       cp_lexer_consume_token (parser->lexer);
9683     }
9684
9685   return end_template_parm_list (parameter_list);
9686 }
9687
9688 /* Parse a template-parameter.
9689
9690    template-parameter:
9691      type-parameter
9692      parameter-declaration
9693
9694    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
9695    the parameter.  The TREE_PURPOSE is the default value, if any.
9696    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
9697    iff this parameter is a non-type parameter.  *IS_PARAMETER_PACK is
9698    set to true iff this parameter is a parameter pack. */
9699
9700 static tree
9701 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type,
9702                               bool *is_parameter_pack)
9703 {
9704   cp_token *token;
9705   cp_parameter_declarator *parameter_declarator;
9706   cp_declarator *id_declarator;
9707   tree parm;
9708
9709   /* Assume it is a type parameter or a template parameter.  */
9710   *is_non_type = false;
9711   /* Assume it not a parameter pack. */
9712   *is_parameter_pack = false;
9713   /* Peek at the next token.  */
9714   token = cp_lexer_peek_token (parser->lexer);
9715   /* If it is `class' or `template', we have a type-parameter.  */
9716   if (token->keyword == RID_TEMPLATE)
9717     return cp_parser_type_parameter (parser, is_parameter_pack);
9718   /* If it is `class' or `typename' we do not know yet whether it is a
9719      type parameter or a non-type parameter.  Consider:
9720
9721        template <typename T, typename T::X X> ...
9722
9723      or:
9724
9725        template <class C, class D*> ...
9726
9727      Here, the first parameter is a type parameter, and the second is
9728      a non-type parameter.  We can tell by looking at the token after
9729      the identifier -- if it is a `,', `=', or `>' then we have a type
9730      parameter.  */
9731   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
9732     {
9733       /* Peek at the token after `class' or `typename'.  */
9734       token = cp_lexer_peek_nth_token (parser->lexer, 2);
9735       /* If it's an ellipsis, we have a template type parameter
9736          pack. */
9737       if (token->type == CPP_ELLIPSIS)
9738         return cp_parser_type_parameter (parser, is_parameter_pack);
9739       /* If it's an identifier, skip it.  */
9740       if (token->type == CPP_NAME)
9741         token = cp_lexer_peek_nth_token (parser->lexer, 3);
9742       /* Now, see if the token looks like the end of a template
9743          parameter.  */
9744       if (token->type == CPP_COMMA
9745           || token->type == CPP_EQ
9746           || token->type == CPP_GREATER)
9747         return cp_parser_type_parameter (parser, is_parameter_pack);
9748     }
9749
9750   /* Otherwise, it is a non-type parameter.
9751
9752      [temp.param]
9753
9754      When parsing a default template-argument for a non-type
9755      template-parameter, the first non-nested `>' is taken as the end
9756      of the template parameter-list rather than a greater-than
9757      operator.  */
9758   *is_non_type = true;
9759   parameter_declarator
9760      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
9761                                         /*parenthesized_p=*/NULL);
9762
9763   /* If the parameter declaration is marked as a parameter pack, set
9764      *IS_PARAMETER_PACK to notify the caller. Also, unmark the
9765      declarator's PACK_EXPANSION_P, otherwise we'll get errors from
9766      grokdeclarator. */
9767   if (parameter_declarator
9768       && parameter_declarator->declarator
9769       && parameter_declarator->declarator->parameter_pack_p)
9770     {
9771       *is_parameter_pack = true;
9772       parameter_declarator->declarator->parameter_pack_p = false;
9773     }
9774
9775   /* If the next token is an ellipsis, and we don't already have it
9776      marked as a parameter pack, then we have a parameter pack (that
9777      has no declarator).  */
9778   if (!*is_parameter_pack
9779       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
9780       && declarator_can_be_parameter_pack (parameter_declarator->declarator))
9781     {
9782       /* Consume the `...'.  */
9783       cp_lexer_consume_token (parser->lexer);
9784       maybe_warn_variadic_templates ();
9785       
9786       *is_parameter_pack = true;
9787     }
9788   /* We might end up with a pack expansion as the type of the non-type
9789      template parameter, in which case this is a non-type template
9790      parameter pack.  */
9791   else if (parameter_declarator
9792            && parameter_declarator->decl_specifiers.type
9793            && PACK_EXPANSION_P (parameter_declarator->decl_specifiers.type))
9794     {
9795       *is_parameter_pack = true;
9796       parameter_declarator->decl_specifiers.type = 
9797         PACK_EXPANSION_PATTERN (parameter_declarator->decl_specifiers.type);
9798     }
9799
9800   if (*is_parameter_pack && cp_lexer_next_token_is (parser->lexer, CPP_EQ))
9801     {
9802       /* Parameter packs cannot have default arguments.  However, a
9803          user may try to do so, so we'll parse them and give an
9804          appropriate diagnostic here.  */
9805
9806       /* Consume the `='.  */
9807       cp_token *start_token = cp_lexer_peek_token (parser->lexer);
9808       cp_lexer_consume_token (parser->lexer);
9809       
9810       /* Find the name of the parameter pack.  */     
9811       id_declarator = parameter_declarator->declarator;
9812       while (id_declarator && id_declarator->kind != cdk_id)
9813         id_declarator = id_declarator->declarator;
9814       
9815       if (id_declarator && id_declarator->kind == cdk_id)
9816         error ("%Htemplate parameter pack %qD cannot have a default argument",
9817                &start_token->location, id_declarator->u.id.unqualified_name);
9818       else
9819         error ("%Htemplate parameter pack cannot have a default argument",
9820                &start_token->location);
9821       
9822       /* Parse the default argument, but throw away the result.  */
9823       cp_parser_default_argument (parser, /*template_parm_p=*/true);
9824     }
9825
9826   parm = grokdeclarator (parameter_declarator->declarator,
9827                          &parameter_declarator->decl_specifiers,
9828                          PARM, /*initialized=*/0,
9829                          /*attrlist=*/NULL);
9830   if (parm == error_mark_node)
9831     return error_mark_node;
9832
9833   return build_tree_list (parameter_declarator->default_argument, parm);
9834 }
9835
9836 /* Parse a type-parameter.
9837
9838    type-parameter:
9839      class identifier [opt]
9840      class identifier [opt] = type-id
9841      typename identifier [opt]
9842      typename identifier [opt] = type-id
9843      template < template-parameter-list > class identifier [opt]
9844      template < template-parameter-list > class identifier [opt]
9845        = id-expression
9846
9847    GNU Extension (variadic templates):
9848
9849    type-parameter:
9850      class ... identifier [opt]
9851      typename ... identifier [opt]
9852
9853    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
9854    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
9855    the declaration of the parameter.
9856
9857    Sets *IS_PARAMETER_PACK if this is a template parameter pack. */
9858
9859 static tree
9860 cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
9861 {
9862   cp_token *token;
9863   tree parameter;
9864
9865   /* Look for a keyword to tell us what kind of parameter this is.  */
9866   token = cp_parser_require (parser, CPP_KEYWORD,
9867                              "%<class%>, %<typename%>, or %<template%>");
9868   if (!token)
9869     return error_mark_node;
9870
9871   switch (token->keyword)
9872     {
9873     case RID_CLASS:
9874     case RID_TYPENAME:
9875       {
9876         tree identifier;
9877         tree default_argument;
9878
9879         /* If the next token is an ellipsis, we have a template
9880            argument pack. */
9881         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
9882           {
9883             /* Consume the `...' token. */
9884             cp_lexer_consume_token (parser->lexer);
9885             maybe_warn_variadic_templates ();
9886
9887             *is_parameter_pack = true;
9888           }
9889
9890         /* If the next token is an identifier, then it names the
9891            parameter.  */
9892         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
9893           identifier = cp_parser_identifier (parser);
9894         else
9895           identifier = NULL_TREE;
9896
9897         /* Create the parameter.  */
9898         parameter = finish_template_type_parm (class_type_node, identifier);
9899
9900         /* If the next token is an `=', we have a default argument.  */
9901         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
9902           {
9903             /* Consume the `=' token.  */
9904             cp_lexer_consume_token (parser->lexer);
9905             /* Parse the default-argument.  */
9906             push_deferring_access_checks (dk_no_deferred);
9907             default_argument = cp_parser_type_id (parser);
9908
9909             /* Template parameter packs cannot have default
9910                arguments. */
9911             if (*is_parameter_pack)
9912               {
9913                 if (identifier)
9914                   error ("%Htemplate parameter pack %qD cannot have a "
9915                          "default argument", &token->location, identifier);
9916                 else
9917                   error ("%Htemplate parameter packs cannot have "
9918                          "default arguments", &token->location);
9919                 default_argument = NULL_TREE;
9920               }
9921             pop_deferring_access_checks ();
9922           }
9923         else
9924           default_argument = NULL_TREE;
9925
9926         /* Create the combined representation of the parameter and the
9927            default argument.  */
9928         parameter = build_tree_list (default_argument, parameter);
9929       }
9930       break;
9931
9932     case RID_TEMPLATE:
9933       {
9934         tree parameter_list;
9935         tree identifier;
9936         tree default_argument;
9937
9938         /* Look for the `<'.  */
9939         cp_parser_require (parser, CPP_LESS, "%<<%>");
9940         /* Parse the template-parameter-list.  */
9941         parameter_list = cp_parser_template_parameter_list (parser);
9942         /* Look for the `>'.  */
9943         cp_parser_require (parser, CPP_GREATER, "%<>%>");
9944         /* Look for the `class' keyword.  */
9945         cp_parser_require_keyword (parser, RID_CLASS, "%<class%>");
9946         /* If the next token is an ellipsis, we have a template
9947            argument pack. */
9948         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
9949           {
9950             /* Consume the `...' token. */
9951             cp_lexer_consume_token (parser->lexer);
9952             maybe_warn_variadic_templates ();
9953
9954             *is_parameter_pack = true;
9955           }
9956         /* If the next token is an `=', then there is a
9957            default-argument.  If the next token is a `>', we are at
9958            the end of the parameter-list.  If the next token is a `,',
9959            then we are at the end of this parameter.  */
9960         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
9961             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
9962             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
9963           {
9964             identifier = cp_parser_identifier (parser);
9965             /* Treat invalid names as if the parameter were nameless.  */
9966             if (identifier == error_mark_node)
9967               identifier = NULL_TREE;
9968           }
9969         else
9970           identifier = NULL_TREE;
9971
9972         /* Create the template parameter.  */
9973         parameter = finish_template_template_parm (class_type_node,
9974                                                    identifier);
9975
9976         /* If the next token is an `=', then there is a
9977            default-argument.  */
9978         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
9979           {
9980             bool is_template;
9981
9982             /* Consume the `='.  */
9983             cp_lexer_consume_token (parser->lexer);
9984             /* Parse the id-expression.  */
9985             push_deferring_access_checks (dk_no_deferred);
9986             /* save token before parsing the id-expression, for error
9987                reporting */
9988             token = cp_lexer_peek_token (parser->lexer);
9989             default_argument
9990               = cp_parser_id_expression (parser,
9991                                          /*template_keyword_p=*/false,
9992                                          /*check_dependency_p=*/true,
9993                                          /*template_p=*/&is_template,
9994                                          /*declarator_p=*/false,
9995                                          /*optional_p=*/false);
9996             if (TREE_CODE (default_argument) == TYPE_DECL)
9997               /* If the id-expression was a template-id that refers to
9998                  a template-class, we already have the declaration here,
9999                  so no further lookup is needed.  */
10000                  ;
10001             else
10002               /* Look up the name.  */
10003               default_argument
10004                 = cp_parser_lookup_name (parser, default_argument,
10005                                          none_type,
10006                                          /*is_template=*/is_template,
10007                                          /*is_namespace=*/false,
10008                                          /*check_dependency=*/true,
10009                                          /*ambiguous_decls=*/NULL,
10010                                          token->location);
10011             /* See if the default argument is valid.  */
10012             default_argument
10013               = check_template_template_default_arg (default_argument);
10014
10015             /* Template parameter packs cannot have default
10016                arguments. */
10017             if (*is_parameter_pack)
10018               {
10019                 if (identifier)
10020                   error ("%Htemplate parameter pack %qD cannot "
10021                          "have a default argument",
10022                          &token->location, identifier);
10023                 else
10024                   error ("%Htemplate parameter packs cannot "
10025                          "have default arguments",
10026                          &token->location);
10027                 default_argument = NULL_TREE;
10028               }
10029             pop_deferring_access_checks ();
10030           }
10031         else
10032           default_argument = NULL_TREE;
10033
10034         /* Create the combined representation of the parameter and the
10035            default argument.  */
10036         parameter = build_tree_list (default_argument, parameter);
10037       }
10038       break;
10039
10040     default:
10041       gcc_unreachable ();
10042       break;
10043     }
10044
10045   return parameter;
10046 }
10047
10048 /* Parse a template-id.
10049
10050    template-id:
10051      template-name < template-argument-list [opt] >
10052
10053    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
10054    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
10055    returned.  Otherwise, if the template-name names a function, or set
10056    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
10057    names a class, returns a TYPE_DECL for the specialization.
10058
10059    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
10060    uninstantiated templates.  */
10061
10062 static tree
10063 cp_parser_template_id (cp_parser *parser,
10064                        bool template_keyword_p,
10065                        bool check_dependency_p,
10066                        bool is_declaration)
10067 {
10068   int i;
10069   tree templ;
10070   tree arguments;
10071   tree template_id;
10072   cp_token_position start_of_id = 0;
10073   deferred_access_check *chk;
10074   VEC (deferred_access_check,gc) *access_check;
10075   cp_token *next_token = NULL, *next_token_2 = NULL, *token = NULL;
10076   bool is_identifier;
10077
10078   /* If the next token corresponds to a template-id, there is no need
10079      to reparse it.  */
10080   next_token = cp_lexer_peek_token (parser->lexer);
10081   if (next_token->type == CPP_TEMPLATE_ID)
10082     {
10083       struct tree_check *check_value;
10084
10085       /* Get the stored value.  */
10086       check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
10087       /* Perform any access checks that were deferred.  */
10088       access_check = check_value->checks;
10089       if (access_check)
10090         {
10091           for (i = 0 ;
10092                VEC_iterate (deferred_access_check, access_check, i, chk) ;
10093                ++i)
10094             {
10095               perform_or_defer_access_check (chk->binfo,
10096                                              chk->decl,
10097                                              chk->diag_decl);
10098             }
10099         }
10100       /* Return the stored value.  */
10101       return check_value->value;
10102     }
10103
10104   /* Avoid performing name lookup if there is no possibility of
10105      finding a template-id.  */
10106   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
10107       || (next_token->type == CPP_NAME
10108           && !cp_parser_nth_token_starts_template_argument_list_p
10109                (parser, 2)))
10110     {
10111       cp_parser_error (parser, "expected template-id");
10112       return error_mark_node;
10113     }
10114
10115   /* Remember where the template-id starts.  */
10116   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
10117     start_of_id = cp_lexer_token_position (parser->lexer, false);
10118
10119   push_deferring_access_checks (dk_deferred);
10120
10121   /* Parse the template-name.  */
10122   is_identifier = false;
10123   token = cp_lexer_peek_token (parser->lexer);
10124   templ = cp_parser_template_name (parser, template_keyword_p,
10125                                    check_dependency_p,
10126                                    is_declaration,
10127                                    &is_identifier);
10128   if (templ == error_mark_node || is_identifier)
10129     {
10130       pop_deferring_access_checks ();
10131       return templ;
10132     }
10133
10134   /* If we find the sequence `[:' after a template-name, it's probably
10135      a digraph-typo for `< ::'. Substitute the tokens and check if we can
10136      parse correctly the argument list.  */
10137   next_token = cp_lexer_peek_token (parser->lexer);
10138   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
10139   if (next_token->type == CPP_OPEN_SQUARE
10140       && next_token->flags & DIGRAPH
10141       && next_token_2->type == CPP_COLON
10142       && !(next_token_2->flags & PREV_WHITE))
10143     {
10144       cp_parser_parse_tentatively (parser);
10145       /* Change `:' into `::'.  */
10146       next_token_2->type = CPP_SCOPE;
10147       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
10148          CPP_LESS.  */
10149       cp_lexer_consume_token (parser->lexer);
10150
10151       /* Parse the arguments.  */
10152       arguments = cp_parser_enclosed_template_argument_list (parser);
10153       if (!cp_parser_parse_definitely (parser))
10154         {
10155           /* If we couldn't parse an argument list, then we revert our changes
10156              and return simply an error. Maybe this is not a template-id
10157              after all.  */
10158           next_token_2->type = CPP_COLON;
10159           cp_parser_error (parser, "expected %<<%>");
10160           pop_deferring_access_checks ();
10161           return error_mark_node;
10162         }
10163       /* Otherwise, emit an error about the invalid digraph, but continue
10164          parsing because we got our argument list.  */
10165       if (permerror (next_token->location,
10166                      "%<<::%> cannot begin a template-argument list"))
10167         {
10168           static bool hint = false;
10169           inform (next_token->location,
10170                   "%<<:%> is an alternate spelling for %<[%>."
10171                   " Insert whitespace between %<<%> and %<::%>");
10172           if (!hint && !flag_permissive)
10173             {
10174               inform (next_token->location, "(if you use %<-fpermissive%>"
10175                       " G++ will accept your code)");
10176               hint = true;
10177             }
10178         }
10179     }
10180   else
10181     {
10182       /* Look for the `<' that starts the template-argument-list.  */
10183       if (!cp_parser_require (parser, CPP_LESS, "%<<%>"))
10184         {
10185           pop_deferring_access_checks ();
10186           return error_mark_node;
10187         }
10188       /* Parse the arguments.  */
10189       arguments = cp_parser_enclosed_template_argument_list (parser);
10190     }
10191
10192   /* Build a representation of the specialization.  */
10193   if (TREE_CODE (templ) == IDENTIFIER_NODE)
10194     template_id = build_min_nt (TEMPLATE_ID_EXPR, templ, arguments);
10195   else if (DECL_CLASS_TEMPLATE_P (templ)
10196            || DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
10197     {
10198       bool entering_scope;
10199       /* In "template <typename T> ... A<T>::", A<T> is the abstract A
10200          template (rather than some instantiation thereof) only if
10201          is not nested within some other construct.  For example, in
10202          "template <typename T> void f(T) { A<T>::", A<T> is just an
10203          instantiation of A.  */
10204       entering_scope = (template_parm_scope_p ()
10205                         && cp_lexer_next_token_is (parser->lexer,
10206                                                    CPP_SCOPE));
10207       template_id
10208         = finish_template_type (templ, arguments, entering_scope);
10209     }
10210   else
10211     {
10212       /* If it's not a class-template or a template-template, it should be
10213          a function-template.  */
10214       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (templ)
10215                    || TREE_CODE (templ) == OVERLOAD
10216                    || BASELINK_P (templ)));
10217
10218       template_id = lookup_template_function (templ, arguments);
10219     }
10220
10221   /* If parsing tentatively, replace the sequence of tokens that makes
10222      up the template-id with a CPP_TEMPLATE_ID token.  That way,
10223      should we re-parse the token stream, we will not have to repeat
10224      the effort required to do the parse, nor will we issue duplicate
10225      error messages about problems during instantiation of the
10226      template.  */
10227   if (start_of_id)
10228     {
10229       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
10230
10231       /* Reset the contents of the START_OF_ID token.  */
10232       token->type = CPP_TEMPLATE_ID;
10233       /* Retrieve any deferred checks.  Do not pop this access checks yet
10234          so the memory will not be reclaimed during token replacing below.  */
10235       token->u.tree_check_value = GGC_CNEW (struct tree_check);
10236       token->u.tree_check_value->value = template_id;
10237       token->u.tree_check_value->checks = get_deferred_access_checks ();
10238       token->keyword = RID_MAX;
10239
10240       /* Purge all subsequent tokens.  */
10241       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
10242
10243       /* ??? Can we actually assume that, if template_id ==
10244          error_mark_node, we will have issued a diagnostic to the
10245          user, as opposed to simply marking the tentative parse as
10246          failed?  */
10247       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
10248         error ("%Hparse error in template argument list",
10249                &token->location);
10250     }
10251
10252   pop_deferring_access_checks ();
10253   return template_id;
10254 }
10255
10256 /* Parse a template-name.
10257
10258    template-name:
10259      identifier
10260
10261    The standard should actually say:
10262
10263    template-name:
10264      identifier
10265      operator-function-id
10266
10267    A defect report has been filed about this issue.
10268
10269    A conversion-function-id cannot be a template name because they cannot
10270    be part of a template-id. In fact, looking at this code:
10271
10272    a.operator K<int>()
10273
10274    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
10275    It is impossible to call a templated conversion-function-id with an
10276    explicit argument list, since the only allowed template parameter is
10277    the type to which it is converting.
10278
10279    If TEMPLATE_KEYWORD_P is true, then we have just seen the
10280    `template' keyword, in a construction like:
10281
10282      T::template f<3>()
10283
10284    In that case `f' is taken to be a template-name, even though there
10285    is no way of knowing for sure.
10286
10287    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
10288    name refers to a set of overloaded functions, at least one of which
10289    is a template, or an IDENTIFIER_NODE with the name of the template,
10290    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
10291    names are looked up inside uninstantiated templates.  */
10292
10293 static tree
10294 cp_parser_template_name (cp_parser* parser,
10295                          bool template_keyword_p,
10296                          bool check_dependency_p,
10297                          bool is_declaration,
10298                          bool *is_identifier)
10299 {
10300   tree identifier;
10301   tree decl;
10302   tree fns;
10303   cp_token *token = cp_lexer_peek_token (parser->lexer);
10304
10305   /* If the next token is `operator', then we have either an
10306      operator-function-id or a conversion-function-id.  */
10307   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
10308     {
10309       /* We don't know whether we're looking at an
10310          operator-function-id or a conversion-function-id.  */
10311       cp_parser_parse_tentatively (parser);
10312       /* Try an operator-function-id.  */
10313       identifier = cp_parser_operator_function_id (parser);
10314       /* If that didn't work, try a conversion-function-id.  */
10315       if (!cp_parser_parse_definitely (parser))
10316         {
10317           cp_parser_error (parser, "expected template-name");
10318           return error_mark_node;
10319         }
10320     }
10321   /* Look for the identifier.  */
10322   else
10323     identifier = cp_parser_identifier (parser);
10324
10325   /* If we didn't find an identifier, we don't have a template-id.  */
10326   if (identifier == error_mark_node)
10327     return error_mark_node;
10328
10329   /* If the name immediately followed the `template' keyword, then it
10330      is a template-name.  However, if the next token is not `<', then
10331      we do not treat it as a template-name, since it is not being used
10332      as part of a template-id.  This enables us to handle constructs
10333      like:
10334
10335        template <typename T> struct S { S(); };
10336        template <typename T> S<T>::S();
10337
10338      correctly.  We would treat `S' as a template -- if it were `S<T>'
10339      -- but we do not if there is no `<'.  */
10340
10341   if (processing_template_decl
10342       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
10343     {
10344       /* In a declaration, in a dependent context, we pretend that the
10345          "template" keyword was present in order to improve error
10346          recovery.  For example, given:
10347
10348            template <typename T> void f(T::X<int>);
10349
10350          we want to treat "X<int>" as a template-id.  */
10351       if (is_declaration
10352           && !template_keyword_p
10353           && parser->scope && TYPE_P (parser->scope)
10354           && check_dependency_p
10355           && dependent_scope_p (parser->scope)
10356           /* Do not do this for dtors (or ctors), since they never
10357              need the template keyword before their name.  */
10358           && !constructor_name_p (identifier, parser->scope))
10359         {
10360           cp_token_position start = 0;
10361
10362           /* Explain what went wrong.  */
10363           error ("%Hnon-template %qD used as template",
10364                  &token->location, identifier);
10365           inform (input_location, "use %<%T::template %D%> to indicate that it is a template",
10366                   parser->scope, identifier);
10367           /* If parsing tentatively, find the location of the "<" token.  */
10368           if (cp_parser_simulate_error (parser))
10369             start = cp_lexer_token_position (parser->lexer, true);
10370           /* Parse the template arguments so that we can issue error
10371              messages about them.  */
10372           cp_lexer_consume_token (parser->lexer);
10373           cp_parser_enclosed_template_argument_list (parser);
10374           /* Skip tokens until we find a good place from which to
10375              continue parsing.  */
10376           cp_parser_skip_to_closing_parenthesis (parser,
10377                                                  /*recovering=*/true,
10378                                                  /*or_comma=*/true,
10379                                                  /*consume_paren=*/false);
10380           /* If parsing tentatively, permanently remove the
10381              template argument list.  That will prevent duplicate
10382              error messages from being issued about the missing
10383              "template" keyword.  */
10384           if (start)
10385             cp_lexer_purge_tokens_after (parser->lexer, start);
10386           if (is_identifier)
10387             *is_identifier = true;
10388           return identifier;
10389         }
10390
10391       /* If the "template" keyword is present, then there is generally
10392          no point in doing name-lookup, so we just return IDENTIFIER.
10393          But, if the qualifying scope is non-dependent then we can
10394          (and must) do name-lookup normally.  */
10395       if (template_keyword_p
10396           && (!parser->scope
10397               || (TYPE_P (parser->scope)
10398                   && dependent_type_p (parser->scope))))
10399         return identifier;
10400     }
10401
10402   /* Look up the name.  */
10403   decl = cp_parser_lookup_name (parser, identifier,
10404                                 none_type,
10405                                 /*is_template=*/false,
10406                                 /*is_namespace=*/false,
10407                                 check_dependency_p,
10408                                 /*ambiguous_decls=*/NULL,
10409                                 token->location);
10410   decl = maybe_get_template_decl_from_type_decl (decl);
10411
10412   /* If DECL is a template, then the name was a template-name.  */
10413   if (TREE_CODE (decl) == TEMPLATE_DECL)
10414     ;
10415   else
10416     {
10417       tree fn = NULL_TREE;
10418
10419       /* The standard does not explicitly indicate whether a name that
10420          names a set of overloaded declarations, some of which are
10421          templates, is a template-name.  However, such a name should
10422          be a template-name; otherwise, there is no way to form a
10423          template-id for the overloaded templates.  */
10424       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
10425       if (TREE_CODE (fns) == OVERLOAD)
10426         for (fn = fns; fn; fn = OVL_NEXT (fn))
10427           if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
10428             break;
10429
10430       if (!fn)
10431         {
10432           /* The name does not name a template.  */
10433           cp_parser_error (parser, "expected template-name");
10434           return error_mark_node;
10435         }
10436     }
10437
10438   /* If DECL is dependent, and refers to a function, then just return
10439      its name; we will look it up again during template instantiation.  */
10440   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
10441     {
10442       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
10443       if (TYPE_P (scope) && dependent_type_p (scope))
10444         return identifier;
10445     }
10446
10447   return decl;
10448 }
10449
10450 /* Parse a template-argument-list.
10451
10452    template-argument-list:
10453      template-argument ... [opt]
10454      template-argument-list , template-argument ... [opt]
10455
10456    Returns a TREE_VEC containing the arguments.  */
10457
10458 static tree
10459 cp_parser_template_argument_list (cp_parser* parser)
10460 {
10461   tree fixed_args[10];
10462   unsigned n_args = 0;
10463   unsigned alloced = 10;
10464   tree *arg_ary = fixed_args;
10465   tree vec;
10466   bool saved_in_template_argument_list_p;
10467   bool saved_ice_p;
10468   bool saved_non_ice_p;
10469
10470   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
10471   parser->in_template_argument_list_p = true;
10472   /* Even if the template-id appears in an integral
10473      constant-expression, the contents of the argument list do
10474      not.  */
10475   saved_ice_p = parser->integral_constant_expression_p;
10476   parser->integral_constant_expression_p = false;
10477   saved_non_ice_p = parser->non_integral_constant_expression_p;
10478   parser->non_integral_constant_expression_p = false;
10479   /* Parse the arguments.  */
10480   do
10481     {
10482       tree argument;
10483
10484       if (n_args)
10485         /* Consume the comma.  */
10486         cp_lexer_consume_token (parser->lexer);
10487
10488       /* Parse the template-argument.  */
10489       argument = cp_parser_template_argument (parser);
10490
10491       /* If the next token is an ellipsis, we're expanding a template
10492          argument pack. */
10493       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
10494         {
10495           if (argument == error_mark_node)
10496             {
10497               cp_token *token = cp_lexer_peek_token (parser->lexer);
10498               error ("%Hexpected parameter pack before %<...%>",
10499                      &token->location);
10500             }
10501           /* Consume the `...' token. */
10502           cp_lexer_consume_token (parser->lexer);
10503
10504           /* Make the argument into a TYPE_PACK_EXPANSION or
10505              EXPR_PACK_EXPANSION. */
10506           argument = make_pack_expansion (argument);
10507         }
10508
10509       if (n_args == alloced)
10510         {
10511           alloced *= 2;
10512
10513           if (arg_ary == fixed_args)
10514             {
10515               arg_ary = XNEWVEC (tree, alloced);
10516               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
10517             }
10518           else
10519             arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
10520         }
10521       arg_ary[n_args++] = argument;
10522     }
10523   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
10524
10525   vec = make_tree_vec (n_args);
10526
10527   while (n_args--)
10528     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
10529
10530   if (arg_ary != fixed_args)
10531     free (arg_ary);
10532   parser->non_integral_constant_expression_p = saved_non_ice_p;
10533   parser->integral_constant_expression_p = saved_ice_p;
10534   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
10535   return vec;
10536 }
10537
10538 /* Parse a template-argument.
10539
10540    template-argument:
10541      assignment-expression
10542      type-id
10543      id-expression
10544
10545    The representation is that of an assignment-expression, type-id, or
10546    id-expression -- except that the qualified id-expression is
10547    evaluated, so that the value returned is either a DECL or an
10548    OVERLOAD.
10549
10550    Although the standard says "assignment-expression", it forbids
10551    throw-expressions or assignments in the template argument.
10552    Therefore, we use "conditional-expression" instead.  */
10553
10554 static tree
10555 cp_parser_template_argument (cp_parser* parser)
10556 {
10557   tree argument;
10558   bool template_p;
10559   bool address_p;
10560   bool maybe_type_id = false;
10561   cp_token *token = NULL, *argument_start_token = NULL;
10562   cp_id_kind idk;
10563
10564   /* There's really no way to know what we're looking at, so we just
10565      try each alternative in order.
10566
10567        [temp.arg]
10568
10569        In a template-argument, an ambiguity between a type-id and an
10570        expression is resolved to a type-id, regardless of the form of
10571        the corresponding template-parameter.
10572
10573      Therefore, we try a type-id first.  */
10574   cp_parser_parse_tentatively (parser);
10575   argument = cp_parser_template_type_arg (parser);
10576   /* If there was no error parsing the type-id but the next token is a
10577      '>>', our behavior depends on which dialect of C++ we're
10578      parsing. In C++98, we probably found a typo for '> >'. But there
10579      are type-id which are also valid expressions. For instance:
10580
10581      struct X { int operator >> (int); };
10582      template <int V> struct Foo {};
10583      Foo<X () >> 5> r;
10584
10585      Here 'X()' is a valid type-id of a function type, but the user just
10586      wanted to write the expression "X() >> 5". Thus, we remember that we
10587      found a valid type-id, but we still try to parse the argument as an
10588      expression to see what happens. 
10589
10590      In C++0x, the '>>' will be considered two separate '>'
10591      tokens.  */
10592   if (!cp_parser_error_occurred (parser)
10593       && cxx_dialect == cxx98
10594       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
10595     {
10596       maybe_type_id = true;
10597       cp_parser_abort_tentative_parse (parser);
10598     }
10599   else
10600     {
10601       /* If the next token isn't a `,' or a `>', then this argument wasn't
10602       really finished. This means that the argument is not a valid
10603       type-id.  */
10604       if (!cp_parser_next_token_ends_template_argument_p (parser))
10605         cp_parser_error (parser, "expected template-argument");
10606       /* If that worked, we're done.  */
10607       if (cp_parser_parse_definitely (parser))
10608         return argument;
10609     }
10610   /* We're still not sure what the argument will be.  */
10611   cp_parser_parse_tentatively (parser);
10612   /* Try a template.  */
10613   argument_start_token = cp_lexer_peek_token (parser->lexer);
10614   argument = cp_parser_id_expression (parser,
10615                                       /*template_keyword_p=*/false,
10616                                       /*check_dependency_p=*/true,
10617                                       &template_p,
10618                                       /*declarator_p=*/false,
10619                                       /*optional_p=*/false);
10620   /* If the next token isn't a `,' or a `>', then this argument wasn't
10621      really finished.  */
10622   if (!cp_parser_next_token_ends_template_argument_p (parser))
10623     cp_parser_error (parser, "expected template-argument");
10624   if (!cp_parser_error_occurred (parser))
10625     {
10626       /* Figure out what is being referred to.  If the id-expression
10627          was for a class template specialization, then we will have a
10628          TYPE_DECL at this point.  There is no need to do name lookup
10629          at this point in that case.  */
10630       if (TREE_CODE (argument) != TYPE_DECL)
10631         argument = cp_parser_lookup_name (parser, argument,
10632                                           none_type,
10633                                           /*is_template=*/template_p,
10634                                           /*is_namespace=*/false,
10635                                           /*check_dependency=*/true,
10636                                           /*ambiguous_decls=*/NULL,
10637                                           argument_start_token->location);
10638       if (TREE_CODE (argument) != TEMPLATE_DECL
10639           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
10640         cp_parser_error (parser, "expected template-name");
10641     }
10642   if (cp_parser_parse_definitely (parser))
10643     return argument;
10644   /* It must be a non-type argument.  There permitted cases are given
10645      in [temp.arg.nontype]:
10646
10647      -- an integral constant-expression of integral or enumeration
10648         type; or
10649
10650      -- the name of a non-type template-parameter; or
10651
10652      -- the name of an object or function with external linkage...
10653
10654      -- the address of an object or function with external linkage...
10655
10656      -- a pointer to member...  */
10657   /* Look for a non-type template parameter.  */
10658   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10659     {
10660       cp_parser_parse_tentatively (parser);
10661       argument = cp_parser_primary_expression (parser,
10662                                                /*address_p=*/false,
10663                                                /*cast_p=*/false,
10664                                                /*template_arg_p=*/true,
10665                                                &idk);
10666       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
10667           || !cp_parser_next_token_ends_template_argument_p (parser))
10668         cp_parser_simulate_error (parser);
10669       if (cp_parser_parse_definitely (parser))
10670         return argument;
10671     }
10672
10673   /* If the next token is "&", the argument must be the address of an
10674      object or function with external linkage.  */
10675   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
10676   if (address_p)
10677     cp_lexer_consume_token (parser->lexer);
10678   /* See if we might have an id-expression.  */
10679   token = cp_lexer_peek_token (parser->lexer);
10680   if (token->type == CPP_NAME
10681       || token->keyword == RID_OPERATOR
10682       || token->type == CPP_SCOPE
10683       || token->type == CPP_TEMPLATE_ID
10684       || token->type == CPP_NESTED_NAME_SPECIFIER)
10685     {
10686       cp_parser_parse_tentatively (parser);
10687       argument = cp_parser_primary_expression (parser,
10688                                                address_p,
10689                                                /*cast_p=*/false,
10690                                                /*template_arg_p=*/true,
10691                                                &idk);
10692       if (cp_parser_error_occurred (parser)
10693           || !cp_parser_next_token_ends_template_argument_p (parser))
10694         cp_parser_abort_tentative_parse (parser);
10695       else
10696         {
10697           if (TREE_CODE (argument) == INDIRECT_REF)
10698             {
10699               gcc_assert (REFERENCE_REF_P (argument));
10700               argument = TREE_OPERAND (argument, 0);
10701             }
10702
10703           if (TREE_CODE (argument) == VAR_DECL)
10704             {
10705               /* A variable without external linkage might still be a
10706                  valid constant-expression, so no error is issued here
10707                  if the external-linkage check fails.  */
10708               if (!address_p && !DECL_EXTERNAL_LINKAGE_P (argument))
10709                 cp_parser_simulate_error (parser);
10710             }
10711           else if (is_overloaded_fn (argument))
10712             /* All overloaded functions are allowed; if the external
10713                linkage test does not pass, an error will be issued
10714                later.  */
10715             ;
10716           else if (address_p
10717                    && (TREE_CODE (argument) == OFFSET_REF
10718                        || TREE_CODE (argument) == SCOPE_REF))
10719             /* A pointer-to-member.  */
10720             ;
10721           else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
10722             ;
10723           else
10724             cp_parser_simulate_error (parser);
10725
10726           if (cp_parser_parse_definitely (parser))
10727             {
10728               if (address_p)
10729                 argument = build_x_unary_op (ADDR_EXPR, argument,
10730                                              tf_warning_or_error);
10731               return argument;
10732             }
10733         }
10734     }
10735   /* If the argument started with "&", there are no other valid
10736      alternatives at this point.  */
10737   if (address_p)
10738     {
10739       cp_parser_error (parser, "invalid non-type template argument");
10740       return error_mark_node;
10741     }
10742
10743   /* If the argument wasn't successfully parsed as a type-id followed
10744      by '>>', the argument can only be a constant expression now.
10745      Otherwise, we try parsing the constant-expression tentatively,
10746      because the argument could really be a type-id.  */
10747   if (maybe_type_id)
10748     cp_parser_parse_tentatively (parser);
10749   argument = cp_parser_constant_expression (parser,
10750                                             /*allow_non_constant_p=*/false,
10751                                             /*non_constant_p=*/NULL);
10752   argument = fold_non_dependent_expr (argument);
10753   if (!maybe_type_id)
10754     return argument;
10755   if (!cp_parser_next_token_ends_template_argument_p (parser))
10756     cp_parser_error (parser, "expected template-argument");
10757   if (cp_parser_parse_definitely (parser))
10758     return argument;
10759   /* We did our best to parse the argument as a non type-id, but that
10760      was the only alternative that matched (albeit with a '>' after
10761      it). We can assume it's just a typo from the user, and a
10762      diagnostic will then be issued.  */
10763   return cp_parser_template_type_arg (parser);
10764 }
10765
10766 /* Parse an explicit-instantiation.
10767
10768    explicit-instantiation:
10769      template declaration
10770
10771    Although the standard says `declaration', what it really means is:
10772
10773    explicit-instantiation:
10774      template decl-specifier-seq [opt] declarator [opt] ;
10775
10776    Things like `template int S<int>::i = 5, int S<double>::j;' are not
10777    supposed to be allowed.  A defect report has been filed about this
10778    issue.
10779
10780    GNU Extension:
10781
10782    explicit-instantiation:
10783      storage-class-specifier template
10784        decl-specifier-seq [opt] declarator [opt] ;
10785      function-specifier template
10786        decl-specifier-seq [opt] declarator [opt] ;  */
10787
10788 static void
10789 cp_parser_explicit_instantiation (cp_parser* parser)
10790 {
10791   int declares_class_or_enum;
10792   cp_decl_specifier_seq decl_specifiers;
10793   tree extension_specifier = NULL_TREE;
10794   cp_token *token;
10795
10796   /* Look for an (optional) storage-class-specifier or
10797      function-specifier.  */
10798   if (cp_parser_allow_gnu_extensions_p (parser))
10799     {
10800       extension_specifier
10801         = cp_parser_storage_class_specifier_opt (parser);
10802       if (!extension_specifier)
10803         extension_specifier
10804           = cp_parser_function_specifier_opt (parser,
10805                                               /*decl_specs=*/NULL);
10806     }
10807
10808   /* Look for the `template' keyword.  */
10809   cp_parser_require_keyword (parser, RID_TEMPLATE, "%<template%>");
10810   /* Let the front end know that we are processing an explicit
10811      instantiation.  */
10812   begin_explicit_instantiation ();
10813   /* [temp.explicit] says that we are supposed to ignore access
10814      control while processing explicit instantiation directives.  */
10815   push_deferring_access_checks (dk_no_check);
10816   /* Parse a decl-specifier-seq.  */
10817   token = cp_lexer_peek_token (parser->lexer);
10818   cp_parser_decl_specifier_seq (parser,
10819                                 CP_PARSER_FLAGS_OPTIONAL,
10820                                 &decl_specifiers,
10821                                 &declares_class_or_enum);
10822   /* If there was exactly one decl-specifier, and it declared a class,
10823      and there's no declarator, then we have an explicit type
10824      instantiation.  */
10825   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
10826     {
10827       tree type;
10828
10829       type = check_tag_decl (&decl_specifiers);
10830       /* Turn access control back on for names used during
10831          template instantiation.  */
10832       pop_deferring_access_checks ();
10833       if (type)
10834         do_type_instantiation (type, extension_specifier,
10835                                /*complain=*/tf_error);
10836     }
10837   else
10838     {
10839       cp_declarator *declarator;
10840       tree decl;
10841
10842       /* Parse the declarator.  */
10843       declarator
10844         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
10845                                 /*ctor_dtor_or_conv_p=*/NULL,
10846                                 /*parenthesized_p=*/NULL,
10847                                 /*member_p=*/false);
10848       if (declares_class_or_enum & 2)
10849         cp_parser_check_for_definition_in_return_type (declarator,
10850                                                        decl_specifiers.type,
10851                                                        decl_specifiers.type_location);
10852       if (declarator != cp_error_declarator)
10853         {
10854           decl = grokdeclarator (declarator, &decl_specifiers,
10855                                  NORMAL, 0, &decl_specifiers.attributes);
10856           /* Turn access control back on for names used during
10857              template instantiation.  */
10858           pop_deferring_access_checks ();
10859           /* Do the explicit instantiation.  */
10860           do_decl_instantiation (decl, extension_specifier);
10861         }
10862       else
10863         {
10864           pop_deferring_access_checks ();
10865           /* Skip the body of the explicit instantiation.  */
10866           cp_parser_skip_to_end_of_statement (parser);
10867         }
10868     }
10869   /* We're done with the instantiation.  */
10870   end_explicit_instantiation ();
10871
10872   cp_parser_consume_semicolon_at_end_of_statement (parser);
10873 }
10874
10875 /* Parse an explicit-specialization.
10876
10877    explicit-specialization:
10878      template < > declaration
10879
10880    Although the standard says `declaration', what it really means is:
10881
10882    explicit-specialization:
10883      template <> decl-specifier [opt] init-declarator [opt] ;
10884      template <> function-definition
10885      template <> explicit-specialization
10886      template <> template-declaration  */
10887
10888 static void
10889 cp_parser_explicit_specialization (cp_parser* parser)
10890 {
10891   bool need_lang_pop;
10892   cp_token *token = cp_lexer_peek_token (parser->lexer);
10893
10894   /* Look for the `template' keyword.  */
10895   cp_parser_require_keyword (parser, RID_TEMPLATE, "%<template%>");
10896   /* Look for the `<'.  */
10897   cp_parser_require (parser, CPP_LESS, "%<<%>");
10898   /* Look for the `>'.  */
10899   cp_parser_require (parser, CPP_GREATER, "%<>%>");
10900   /* We have processed another parameter list.  */
10901   ++parser->num_template_parameter_lists;
10902   /* [temp]
10903
10904      A template ... explicit specialization ... shall not have C
10905      linkage.  */
10906   if (current_lang_name == lang_name_c)
10907     {
10908       error ("%Htemplate specialization with C linkage", &token->location);
10909       /* Give it C++ linkage to avoid confusing other parts of the
10910          front end.  */
10911       push_lang_context (lang_name_cplusplus);
10912       need_lang_pop = true;
10913     }
10914   else
10915     need_lang_pop = false;
10916   /* Let the front end know that we are beginning a specialization.  */
10917   if (!begin_specialization ())
10918     {
10919       end_specialization ();
10920       return;
10921     }
10922
10923   /* If the next keyword is `template', we need to figure out whether
10924      or not we're looking a template-declaration.  */
10925   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
10926     {
10927       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
10928           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
10929         cp_parser_template_declaration_after_export (parser,
10930                                                      /*member_p=*/false);
10931       else
10932         cp_parser_explicit_specialization (parser);
10933     }
10934   else
10935     /* Parse the dependent declaration.  */
10936     cp_parser_single_declaration (parser,
10937                                   /*checks=*/NULL,
10938                                   /*member_p=*/false,
10939                                   /*explicit_specialization_p=*/true,
10940                                   /*friend_p=*/NULL);
10941   /* We're done with the specialization.  */
10942   end_specialization ();
10943   /* For the erroneous case of a template with C linkage, we pushed an
10944      implicit C++ linkage scope; exit that scope now.  */
10945   if (need_lang_pop)
10946     pop_lang_context ();
10947   /* We're done with this parameter list.  */
10948   --parser->num_template_parameter_lists;
10949 }
10950
10951 /* Parse a type-specifier.
10952
10953    type-specifier:
10954      simple-type-specifier
10955      class-specifier
10956      enum-specifier
10957      elaborated-type-specifier
10958      cv-qualifier
10959
10960    GNU Extension:
10961
10962    type-specifier:
10963      __complex__
10964
10965    Returns a representation of the type-specifier.  For a
10966    class-specifier, enum-specifier, or elaborated-type-specifier, a
10967    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
10968
10969    The parser flags FLAGS is used to control type-specifier parsing.
10970
10971    If IS_DECLARATION is TRUE, then this type-specifier is appearing
10972    in a decl-specifier-seq.
10973
10974    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
10975    class-specifier, enum-specifier, or elaborated-type-specifier, then
10976    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
10977    if a type is declared; 2 if it is defined.  Otherwise, it is set to
10978    zero.
10979
10980    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
10981    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
10982    is set to FALSE.  */
10983
10984 static tree
10985 cp_parser_type_specifier (cp_parser* parser,
10986                           cp_parser_flags flags,
10987                           cp_decl_specifier_seq *decl_specs,
10988                           bool is_declaration,
10989                           int* declares_class_or_enum,
10990                           bool* is_cv_qualifier)
10991 {
10992   tree type_spec = NULL_TREE;
10993   cp_token *token;
10994   enum rid keyword;
10995   cp_decl_spec ds = ds_last;
10996
10997   /* Assume this type-specifier does not declare a new type.  */
10998   if (declares_class_or_enum)
10999     *declares_class_or_enum = 0;
11000   /* And that it does not specify a cv-qualifier.  */
11001   if (is_cv_qualifier)
11002     *is_cv_qualifier = false;
11003   /* Peek at the next token.  */
11004   token = cp_lexer_peek_token (parser->lexer);
11005
11006   /* If we're looking at a keyword, we can use that to guide the
11007      production we choose.  */
11008   keyword = token->keyword;
11009   switch (keyword)
11010     {
11011     case RID_ENUM:
11012       /* Look for the enum-specifier.  */
11013       type_spec = cp_parser_enum_specifier (parser);
11014       /* If that worked, we're done.  */
11015       if (type_spec)
11016         {
11017           if (declares_class_or_enum)
11018             *declares_class_or_enum = 2;
11019           if (decl_specs)
11020             cp_parser_set_decl_spec_type (decl_specs,
11021                                           type_spec,
11022                                           token->location,
11023                                           /*user_defined_p=*/true);
11024           return type_spec;
11025         }
11026       else
11027         goto elaborated_type_specifier;
11028
11029       /* Any of these indicate either a class-specifier, or an
11030          elaborated-type-specifier.  */
11031     case RID_CLASS:
11032     case RID_STRUCT:
11033     case RID_UNION:
11034       /* Parse tentatively so that we can back up if we don't find a
11035          class-specifier.  */
11036       cp_parser_parse_tentatively (parser);
11037       /* Look for the class-specifier.  */
11038       type_spec = cp_parser_class_specifier (parser);
11039       invoke_plugin_callbacks (PLUGIN_FINISH_TYPE, type_spec);
11040       /* If that worked, we're done.  */
11041       if (cp_parser_parse_definitely (parser))
11042         {
11043           if (declares_class_or_enum)
11044             *declares_class_or_enum = 2;
11045           if (decl_specs)
11046             cp_parser_set_decl_spec_type (decl_specs,
11047                                           type_spec,
11048                                           token->location,
11049                                           /*user_defined_p=*/true);
11050           return type_spec;
11051         }
11052
11053       /* Fall through.  */
11054     elaborated_type_specifier:
11055       /* We're declaring (not defining) a class or enum.  */
11056       if (declares_class_or_enum)
11057         *declares_class_or_enum = 1;
11058
11059       /* Fall through.  */
11060     case RID_TYPENAME:
11061       /* Look for an elaborated-type-specifier.  */
11062       type_spec
11063         = (cp_parser_elaborated_type_specifier
11064            (parser,
11065             decl_specs && decl_specs->specs[(int) ds_friend],
11066             is_declaration));
11067       if (decl_specs)
11068         cp_parser_set_decl_spec_type (decl_specs,
11069                                       type_spec,
11070                                       token->location,
11071                                       /*user_defined_p=*/true);
11072       return type_spec;
11073
11074     case RID_CONST:
11075       ds = ds_const;
11076       if (is_cv_qualifier)
11077         *is_cv_qualifier = true;
11078       break;
11079
11080     case RID_VOLATILE:
11081       ds = ds_volatile;
11082       if (is_cv_qualifier)
11083         *is_cv_qualifier = true;
11084       break;
11085
11086     case RID_RESTRICT:
11087       ds = ds_restrict;
11088       if (is_cv_qualifier)
11089         *is_cv_qualifier = true;
11090       break;
11091
11092     case RID_COMPLEX:
11093       /* The `__complex__' keyword is a GNU extension.  */
11094       ds = ds_complex;
11095       break;
11096
11097     default:
11098       break;
11099     }
11100
11101   /* Handle simple keywords.  */
11102   if (ds != ds_last)
11103     {
11104       if (decl_specs)
11105         {
11106           ++decl_specs->specs[(int)ds];
11107           decl_specs->any_specifiers_p = true;
11108         }
11109       return cp_lexer_consume_token (parser->lexer)->u.value;
11110     }
11111
11112   /* If we do not already have a type-specifier, assume we are looking
11113      at a simple-type-specifier.  */
11114   type_spec = cp_parser_simple_type_specifier (parser,
11115                                                decl_specs,
11116                                                flags);
11117
11118   /* If we didn't find a type-specifier, and a type-specifier was not
11119      optional in this context, issue an error message.  */
11120   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
11121     {
11122       cp_parser_error (parser, "expected type specifier");
11123       return error_mark_node;
11124     }
11125
11126   return type_spec;
11127 }
11128
11129 /* Parse a simple-type-specifier.
11130
11131    simple-type-specifier:
11132      :: [opt] nested-name-specifier [opt] type-name
11133      :: [opt] nested-name-specifier template template-id
11134      char
11135      wchar_t
11136      bool
11137      short
11138      int
11139      long
11140      signed
11141      unsigned
11142      float
11143      double
11144      void
11145
11146    C++0x Extension:
11147
11148    simple-type-specifier:
11149      auto
11150      decltype ( expression )   
11151      char16_t
11152      char32_t
11153
11154    GNU Extension:
11155
11156    simple-type-specifier:
11157      __typeof__ unary-expression
11158      __typeof__ ( type-id )
11159
11160    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
11161    appropriately updated.  */
11162
11163 static tree
11164 cp_parser_simple_type_specifier (cp_parser* parser,
11165                                  cp_decl_specifier_seq *decl_specs,
11166                                  cp_parser_flags flags)
11167 {
11168   tree type = NULL_TREE;
11169   cp_token *token;
11170
11171   /* Peek at the next token.  */
11172   token = cp_lexer_peek_token (parser->lexer);
11173
11174   /* If we're looking at a keyword, things are easy.  */
11175   switch (token->keyword)
11176     {
11177     case RID_CHAR:
11178       if (decl_specs)
11179         decl_specs->explicit_char_p = true;
11180       type = char_type_node;
11181       break;
11182     case RID_CHAR16:
11183       type = char16_type_node;
11184       break;
11185     case RID_CHAR32:
11186       type = char32_type_node;
11187       break;
11188     case RID_WCHAR:
11189       type = wchar_type_node;
11190       break;
11191     case RID_BOOL:
11192       type = boolean_type_node;
11193       break;
11194     case RID_SHORT:
11195       if (decl_specs)
11196         ++decl_specs->specs[(int) ds_short];
11197       type = short_integer_type_node;
11198       break;
11199     case RID_INT:
11200       if (decl_specs)
11201         decl_specs->explicit_int_p = true;
11202       type = integer_type_node;
11203       break;
11204     case RID_LONG:
11205       if (decl_specs)
11206         ++decl_specs->specs[(int) ds_long];
11207       type = long_integer_type_node;
11208       break;
11209     case RID_SIGNED:
11210       if (decl_specs)
11211         ++decl_specs->specs[(int) ds_signed];
11212       type = integer_type_node;
11213       break;
11214     case RID_UNSIGNED:
11215       if (decl_specs)
11216         ++decl_specs->specs[(int) ds_unsigned];
11217       type = unsigned_type_node;
11218       break;
11219     case RID_FLOAT:
11220       type = float_type_node;
11221       break;
11222     case RID_DOUBLE:
11223       type = double_type_node;
11224       break;
11225     case RID_VOID:
11226       type = void_type_node;
11227       break;
11228       
11229     case RID_AUTO:
11230       maybe_warn_cpp0x ("C++0x auto");
11231       type = make_auto ();
11232       break;
11233
11234     case RID_DECLTYPE:
11235       /* Parse the `decltype' type.  */
11236       type = cp_parser_decltype (parser);
11237
11238       if (decl_specs)
11239         cp_parser_set_decl_spec_type (decl_specs, type,
11240                                       token->location,
11241                                       /*user_defined_p=*/true);
11242
11243       return type;
11244
11245     case RID_TYPEOF:
11246       /* Consume the `typeof' token.  */
11247       cp_lexer_consume_token (parser->lexer);
11248       /* Parse the operand to `typeof'.  */
11249       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
11250       /* If it is not already a TYPE, take its type.  */
11251       if (!TYPE_P (type))
11252         type = finish_typeof (type);
11253
11254       if (decl_specs)
11255         cp_parser_set_decl_spec_type (decl_specs, type,
11256                                       token->location,
11257                                       /*user_defined_p=*/true);
11258
11259       return type;
11260
11261     default:
11262       break;
11263     }
11264
11265   /* If the type-specifier was for a built-in type, we're done.  */
11266   if (type)
11267     {
11268       tree id;
11269
11270       /* Record the type.  */
11271       if (decl_specs
11272           && (token->keyword != RID_SIGNED
11273               && token->keyword != RID_UNSIGNED
11274               && token->keyword != RID_SHORT
11275               && token->keyword != RID_LONG))
11276         cp_parser_set_decl_spec_type (decl_specs,
11277                                       type,
11278                                       token->location,
11279                                       /*user_defined=*/false);
11280       if (decl_specs)
11281         decl_specs->any_specifiers_p = true;
11282
11283       /* Consume the token.  */
11284       id = cp_lexer_consume_token (parser->lexer)->u.value;
11285
11286       /* There is no valid C++ program where a non-template type is
11287          followed by a "<".  That usually indicates that the user thought
11288          that the type was a template.  */
11289       cp_parser_check_for_invalid_template_id (parser, type, token->location);
11290
11291       return TYPE_NAME (type);
11292     }
11293
11294   /* The type-specifier must be a user-defined type.  */
11295   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
11296     {
11297       bool qualified_p;
11298       bool global_p;
11299
11300       /* Don't gobble tokens or issue error messages if this is an
11301          optional type-specifier.  */
11302       if (flags & CP_PARSER_FLAGS_OPTIONAL)
11303         cp_parser_parse_tentatively (parser);
11304
11305       /* Look for the optional `::' operator.  */
11306       global_p
11307         = (cp_parser_global_scope_opt (parser,
11308                                        /*current_scope_valid_p=*/false)
11309            != NULL_TREE);
11310       /* Look for the nested-name specifier.  */
11311       qualified_p
11312         = (cp_parser_nested_name_specifier_opt (parser,
11313                                                 /*typename_keyword_p=*/false,
11314                                                 /*check_dependency_p=*/true,
11315                                                 /*type_p=*/false,
11316                                                 /*is_declaration=*/false)
11317            != NULL_TREE);
11318       token = cp_lexer_peek_token (parser->lexer);
11319       /* If we have seen a nested-name-specifier, and the next token
11320          is `template', then we are using the template-id production.  */
11321       if (parser->scope
11322           && cp_parser_optional_template_keyword (parser))
11323         {
11324           /* Look for the template-id.  */
11325           type = cp_parser_template_id (parser,
11326                                         /*template_keyword_p=*/true,
11327                                         /*check_dependency_p=*/true,
11328                                         /*is_declaration=*/false);
11329           /* If the template-id did not name a type, we are out of
11330              luck.  */
11331           if (TREE_CODE (type) != TYPE_DECL)
11332             {
11333               cp_parser_error (parser, "expected template-id for type");
11334               type = NULL_TREE;
11335             }
11336         }
11337       /* Otherwise, look for a type-name.  */
11338       else
11339         type = cp_parser_type_name (parser);
11340       /* Keep track of all name-lookups performed in class scopes.  */
11341       if (type
11342           && !global_p
11343           && !qualified_p
11344           && TREE_CODE (type) == TYPE_DECL
11345           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
11346         maybe_note_name_used_in_class (DECL_NAME (type), type);
11347       /* If it didn't work out, we don't have a TYPE.  */
11348       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
11349           && !cp_parser_parse_definitely (parser))
11350         type = NULL_TREE;
11351       if (type && decl_specs)
11352         cp_parser_set_decl_spec_type (decl_specs, type,
11353                                       token->location,
11354                                       /*user_defined=*/true);
11355     }
11356
11357   /* If we didn't get a type-name, issue an error message.  */
11358   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
11359     {
11360       cp_parser_error (parser, "expected type-name");
11361       return error_mark_node;
11362     }
11363
11364   /* There is no valid C++ program where a non-template type is
11365      followed by a "<".  That usually indicates that the user thought
11366      that the type was a template.  */
11367   if (type && type != error_mark_node)
11368     {
11369       /* As a last-ditch effort, see if TYPE is an Objective-C type.
11370          If it is, then the '<'...'>' enclose protocol names rather than
11371          template arguments, and so everything is fine.  */
11372       if (c_dialect_objc ()
11373           && (objc_is_id (type) || objc_is_class_name (type)))
11374         {
11375           tree protos = cp_parser_objc_protocol_refs_opt (parser);
11376           tree qual_type = objc_get_protocol_qualified_type (type, protos);
11377
11378           /* Clobber the "unqualified" type previously entered into
11379              DECL_SPECS with the new, improved protocol-qualified version.  */
11380           if (decl_specs)
11381             decl_specs->type = qual_type;
11382
11383           return qual_type;
11384         }
11385
11386       cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type),
11387                                                token->location);
11388     }
11389
11390   return type;
11391 }
11392
11393 /* Parse a type-name.
11394
11395    type-name:
11396      class-name
11397      enum-name
11398      typedef-name
11399
11400    enum-name:
11401      identifier
11402
11403    typedef-name:
11404      identifier
11405
11406    Returns a TYPE_DECL for the type.  */
11407
11408 static tree
11409 cp_parser_type_name (cp_parser* parser)
11410 {
11411   tree type_decl;
11412
11413   /* We can't know yet whether it is a class-name or not.  */
11414   cp_parser_parse_tentatively (parser);
11415   /* Try a class-name.  */
11416   type_decl = cp_parser_class_name (parser,
11417                                     /*typename_keyword_p=*/false,
11418                                     /*template_keyword_p=*/false,
11419                                     none_type,
11420                                     /*check_dependency_p=*/true,
11421                                     /*class_head_p=*/false,
11422                                     /*is_declaration=*/false);
11423   /* If it's not a class-name, keep looking.  */
11424   if (!cp_parser_parse_definitely (parser))
11425     {
11426       /* It must be a typedef-name or an enum-name.  */
11427       return cp_parser_nonclass_name (parser);
11428     }
11429
11430   return type_decl;
11431 }
11432
11433 /* Parse a non-class type-name, that is, either an enum-name or a typedef-name.
11434
11435    enum-name:
11436      identifier
11437
11438    typedef-name:
11439      identifier
11440
11441    Returns a TYPE_DECL for the type.  */
11442
11443 static tree
11444 cp_parser_nonclass_name (cp_parser* parser)
11445 {
11446   tree type_decl;
11447   tree identifier;
11448
11449   cp_token *token = cp_lexer_peek_token (parser->lexer);
11450   identifier = cp_parser_identifier (parser);
11451   if (identifier == error_mark_node)
11452     return error_mark_node;
11453
11454   /* Look up the type-name.  */
11455   type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
11456
11457   if (TREE_CODE (type_decl) != TYPE_DECL
11458       && (objc_is_id (identifier) || objc_is_class_name (identifier)))
11459     {
11460       /* See if this is an Objective-C type.  */
11461       tree protos = cp_parser_objc_protocol_refs_opt (parser);
11462       tree type = objc_get_protocol_qualified_type (identifier, protos);
11463       if (type)
11464         type_decl = TYPE_NAME (type);
11465     }
11466   
11467   /* Issue an error if we did not find a type-name.  */
11468   if (TREE_CODE (type_decl) != TYPE_DECL)
11469     {
11470       if (!cp_parser_simulate_error (parser))
11471         cp_parser_name_lookup_error (parser, identifier, type_decl,
11472                                      "is not a type", token->location);
11473       return error_mark_node;
11474     }
11475   /* Remember that the name was used in the definition of the
11476      current class so that we can check later to see if the
11477      meaning would have been different after the class was
11478      entirely defined.  */
11479   else if (type_decl != error_mark_node
11480            && !parser->scope)
11481     maybe_note_name_used_in_class (identifier, type_decl);
11482   
11483   return type_decl;
11484 }
11485
11486 /* Parse an elaborated-type-specifier.  Note that the grammar given
11487    here incorporates the resolution to DR68.
11488
11489    elaborated-type-specifier:
11490      class-key :: [opt] nested-name-specifier [opt] identifier
11491      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
11492      enum-key :: [opt] nested-name-specifier [opt] identifier
11493      typename :: [opt] nested-name-specifier identifier
11494      typename :: [opt] nested-name-specifier template [opt]
11495        template-id
11496
11497    GNU extension:
11498
11499    elaborated-type-specifier:
11500      class-key attributes :: [opt] nested-name-specifier [opt] identifier
11501      class-key attributes :: [opt] nested-name-specifier [opt]
11502                template [opt] template-id
11503      enum attributes :: [opt] nested-name-specifier [opt] identifier
11504
11505    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
11506    declared `friend'.  If IS_DECLARATION is TRUE, then this
11507    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
11508    something is being declared.
11509
11510    Returns the TYPE specified.  */
11511
11512 static tree
11513 cp_parser_elaborated_type_specifier (cp_parser* parser,
11514                                      bool is_friend,
11515                                      bool is_declaration)
11516 {
11517   enum tag_types tag_type;
11518   tree identifier;
11519   tree type = NULL_TREE;
11520   tree attributes = NULL_TREE;
11521   cp_token *token = NULL;
11522
11523   /* See if we're looking at the `enum' keyword.  */
11524   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
11525     {
11526       /* Consume the `enum' token.  */
11527       cp_lexer_consume_token (parser->lexer);
11528       /* Remember that it's an enumeration type.  */
11529       tag_type = enum_type;
11530       /* Parse the optional `struct' or `class' key (for C++0x scoped
11531          enums).  */
11532       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
11533           || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
11534         {
11535           if (cxx_dialect == cxx98)
11536             maybe_warn_cpp0x ("scoped enums");
11537
11538           /* Consume the `struct' or `class'.  */
11539           cp_lexer_consume_token (parser->lexer);
11540         }
11541       /* Parse the attributes.  */
11542       attributes = cp_parser_attributes_opt (parser);
11543     }
11544   /* Or, it might be `typename'.  */
11545   else if (cp_lexer_next_token_is_keyword (parser->lexer,
11546                                            RID_TYPENAME))
11547     {
11548       /* Consume the `typename' token.  */
11549       cp_lexer_consume_token (parser->lexer);
11550       /* Remember that it's a `typename' type.  */
11551       tag_type = typename_type;
11552       /* The `typename' keyword is only allowed in templates.  */
11553       if (!processing_template_decl)
11554         permerror (input_location, "using %<typename%> outside of template");
11555     }
11556   /* Otherwise it must be a class-key.  */
11557   else
11558     {
11559       tag_type = cp_parser_class_key (parser);
11560       if (tag_type == none_type)
11561         return error_mark_node;
11562       /* Parse the attributes.  */
11563       attributes = cp_parser_attributes_opt (parser);
11564     }
11565
11566   /* Look for the `::' operator.  */
11567   cp_parser_global_scope_opt (parser,
11568                               /*current_scope_valid_p=*/false);
11569   /* Look for the nested-name-specifier.  */
11570   if (tag_type == typename_type)
11571     {
11572       if (!cp_parser_nested_name_specifier (parser,
11573                                            /*typename_keyword_p=*/true,
11574                                            /*check_dependency_p=*/true,
11575                                            /*type_p=*/true,
11576                                             is_declaration))
11577         return error_mark_node;
11578     }
11579   else
11580     /* Even though `typename' is not present, the proposed resolution
11581        to Core Issue 180 says that in `class A<T>::B', `B' should be
11582        considered a type-name, even if `A<T>' is dependent.  */
11583     cp_parser_nested_name_specifier_opt (parser,
11584                                          /*typename_keyword_p=*/true,
11585                                          /*check_dependency_p=*/true,
11586                                          /*type_p=*/true,
11587                                          is_declaration);
11588  /* For everything but enumeration types, consider a template-id.
11589     For an enumeration type, consider only a plain identifier.  */
11590   if (tag_type != enum_type)
11591     {
11592       bool template_p = false;
11593       tree decl;
11594
11595       /* Allow the `template' keyword.  */
11596       template_p = cp_parser_optional_template_keyword (parser);
11597       /* If we didn't see `template', we don't know if there's a
11598          template-id or not.  */
11599       if (!template_p)
11600         cp_parser_parse_tentatively (parser);
11601       /* Parse the template-id.  */
11602       token = cp_lexer_peek_token (parser->lexer);
11603       decl = cp_parser_template_id (parser, template_p,
11604                                     /*check_dependency_p=*/true,
11605                                     is_declaration);
11606       /* If we didn't find a template-id, look for an ordinary
11607          identifier.  */
11608       if (!template_p && !cp_parser_parse_definitely (parser))
11609         ;
11610       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
11611          in effect, then we must assume that, upon instantiation, the
11612          template will correspond to a class.  */
11613       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
11614                && tag_type == typename_type)
11615         type = make_typename_type (parser->scope, decl,
11616                                    typename_type,
11617                                    /*complain=*/tf_error);
11618       /* If the `typename' keyword is in effect and DECL is not a type
11619          decl. Then type is non existant.   */
11620       else if (tag_type == typename_type && TREE_CODE (decl) != TYPE_DECL)
11621         type = NULL_TREE; 
11622       else 
11623         type = TREE_TYPE (decl);
11624     }
11625
11626   if (!type)
11627     {
11628       token = cp_lexer_peek_token (parser->lexer);
11629       identifier = cp_parser_identifier (parser);
11630
11631       if (identifier == error_mark_node)
11632         {
11633           parser->scope = NULL_TREE;
11634           return error_mark_node;
11635         }
11636
11637       /* For a `typename', we needn't call xref_tag.  */
11638       if (tag_type == typename_type
11639           && TREE_CODE (parser->scope) != NAMESPACE_DECL)
11640         return cp_parser_make_typename_type (parser, parser->scope,
11641                                              identifier,
11642                                              token->location);
11643       /* Look up a qualified name in the usual way.  */
11644       if (parser->scope)
11645         {
11646           tree decl;
11647           tree ambiguous_decls;
11648
11649           decl = cp_parser_lookup_name (parser, identifier,
11650                                         tag_type,
11651                                         /*is_template=*/false,
11652                                         /*is_namespace=*/false,
11653                                         /*check_dependency=*/true,
11654                                         &ambiguous_decls,
11655                                         token->location);
11656
11657           /* If the lookup was ambiguous, an error will already have been
11658              issued.  */
11659           if (ambiguous_decls)
11660             return error_mark_node;
11661
11662           /* If we are parsing friend declaration, DECL may be a
11663              TEMPLATE_DECL tree node here.  However, we need to check
11664              whether this TEMPLATE_DECL results in valid code.  Consider
11665              the following example:
11666
11667                namespace N {
11668                  template <class T> class C {};
11669                }
11670                class X {
11671                  template <class T> friend class N::C; // #1, valid code
11672                };
11673                template <class T> class Y {
11674                  friend class N::C;                    // #2, invalid code
11675                };
11676
11677              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
11678              name lookup of `N::C'.  We see that friend declaration must
11679              be template for the code to be valid.  Note that
11680              processing_template_decl does not work here since it is
11681              always 1 for the above two cases.  */
11682
11683           decl = (cp_parser_maybe_treat_template_as_class
11684                   (decl, /*tag_name_p=*/is_friend
11685                          && parser->num_template_parameter_lists));
11686
11687           if (TREE_CODE (decl) != TYPE_DECL)
11688             {
11689               cp_parser_diagnose_invalid_type_name (parser,
11690                                                     parser->scope,
11691                                                     identifier,
11692                                                     token->location);
11693               return error_mark_node;
11694             }
11695
11696           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
11697             {
11698               bool allow_template = (parser->num_template_parameter_lists
11699                                       || DECL_SELF_REFERENCE_P (decl));
11700               type = check_elaborated_type_specifier (tag_type, decl, 
11701                                                       allow_template);
11702
11703               if (type == error_mark_node)
11704                 return error_mark_node;
11705             }
11706
11707           /* Forward declarations of nested types, such as
11708
11709                class C1::C2;
11710                class C1::C2::C3;
11711
11712              are invalid unless all components preceding the final '::'
11713              are complete.  If all enclosing types are complete, these
11714              declarations become merely pointless.
11715
11716              Invalid forward declarations of nested types are errors
11717              caught elsewhere in parsing.  Those that are pointless arrive
11718              here.  */
11719
11720           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
11721               && !is_friend && !processing_explicit_instantiation)
11722             warning (0, "declaration %qD does not declare anything", decl);
11723
11724           type = TREE_TYPE (decl);
11725         }
11726       else
11727         {
11728           /* An elaborated-type-specifier sometimes introduces a new type and
11729              sometimes names an existing type.  Normally, the rule is that it
11730              introduces a new type only if there is not an existing type of
11731              the same name already in scope.  For example, given:
11732
11733                struct S {};
11734                void f() { struct S s; }
11735
11736              the `struct S' in the body of `f' is the same `struct S' as in
11737              the global scope; the existing definition is used.  However, if
11738              there were no global declaration, this would introduce a new
11739              local class named `S'.
11740
11741              An exception to this rule applies to the following code:
11742
11743                namespace N { struct S; }
11744
11745              Here, the elaborated-type-specifier names a new type
11746              unconditionally; even if there is already an `S' in the
11747              containing scope this declaration names a new type.
11748              This exception only applies if the elaborated-type-specifier
11749              forms the complete declaration:
11750
11751                [class.name]
11752
11753                A declaration consisting solely of `class-key identifier ;' is
11754                either a redeclaration of the name in the current scope or a
11755                forward declaration of the identifier as a class name.  It
11756                introduces the name into the current scope.
11757
11758              We are in this situation precisely when the next token is a `;'.
11759
11760              An exception to the exception is that a `friend' declaration does
11761              *not* name a new type; i.e., given:
11762
11763                struct S { friend struct T; };
11764
11765              `T' is not a new type in the scope of `S'.
11766
11767              Also, `new struct S' or `sizeof (struct S)' never results in the
11768              definition of a new type; a new type can only be declared in a
11769              declaration context.  */
11770
11771           tag_scope ts;
11772           bool template_p;
11773
11774           if (is_friend)
11775             /* Friends have special name lookup rules.  */
11776             ts = ts_within_enclosing_non_class;
11777           else if (is_declaration
11778                    && cp_lexer_next_token_is (parser->lexer,
11779                                               CPP_SEMICOLON))
11780             /* This is a `class-key identifier ;' */
11781             ts = ts_current;
11782           else
11783             ts = ts_global;
11784
11785           template_p =
11786             (parser->num_template_parameter_lists
11787              && (cp_parser_next_token_starts_class_definition_p (parser)
11788                  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
11789           /* An unqualified name was used to reference this type, so
11790              there were no qualifying templates.  */
11791           if (!cp_parser_check_template_parameters (parser,
11792                                                     /*num_templates=*/0,
11793                                                     token->location,
11794                                                     /*declarator=*/NULL))
11795             return error_mark_node;
11796           type = xref_tag (tag_type, identifier, ts, template_p);
11797         }
11798     }
11799
11800   if (type == error_mark_node)
11801     return error_mark_node;
11802
11803   /* Allow attributes on forward declarations of classes.  */
11804   if (attributes)
11805     {
11806       if (TREE_CODE (type) == TYPENAME_TYPE)
11807         warning (OPT_Wattributes,
11808                  "attributes ignored on uninstantiated type");
11809       else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
11810                && ! processing_explicit_instantiation)
11811         warning (OPT_Wattributes,
11812                  "attributes ignored on template instantiation");
11813       else if (is_declaration && cp_parser_declares_only_class_p (parser))
11814         cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
11815       else
11816         warning (OPT_Wattributes,
11817                  "attributes ignored on elaborated-type-specifier that is not a forward declaration");
11818     }
11819
11820   if (tag_type != enum_type)
11821     cp_parser_check_class_key (tag_type, type);
11822
11823   /* A "<" cannot follow an elaborated type specifier.  If that
11824      happens, the user was probably trying to form a template-id.  */
11825   cp_parser_check_for_invalid_template_id (parser, type, token->location);
11826
11827   return type;
11828 }
11829
11830 /* Parse an enum-specifier.
11831
11832    enum-specifier:
11833      enum-key identifier [opt] enum-base [opt] { enumerator-list [opt] }
11834
11835    enum-key:
11836      enum
11837      enum class   [C++0x]
11838      enum struct  [C++0x]
11839
11840    enum-base:   [C++0x]
11841      : type-specifier-seq
11842
11843    GNU Extensions:
11844      enum-key attributes[opt] identifier [opt] enum-base [opt] 
11845        { enumerator-list [opt] }attributes[opt]
11846
11847    Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
11848    if the token stream isn't an enum-specifier after all.  */
11849
11850 static tree
11851 cp_parser_enum_specifier (cp_parser* parser)
11852 {
11853   tree identifier;
11854   tree type;
11855   tree attributes;
11856   bool scoped_enum_p = false;
11857   bool has_underlying_type = false;
11858   tree underlying_type = NULL_TREE;
11859
11860   /* Parse tentatively so that we can back up if we don't find a
11861      enum-specifier.  */
11862   cp_parser_parse_tentatively (parser);
11863
11864   /* Caller guarantees that the current token is 'enum', an identifier
11865      possibly follows, and the token after that is an opening brace.
11866      If we don't have an identifier, fabricate an anonymous name for
11867      the enumeration being defined.  */
11868   cp_lexer_consume_token (parser->lexer);
11869
11870   /* Parse the "class" or "struct", which indicates a scoped
11871      enumeration type in C++0x.  */
11872   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
11873       || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
11874     {
11875       if (cxx_dialect == cxx98)
11876         maybe_warn_cpp0x ("scoped enums");
11877
11878       /* Consume the `struct' or `class' token.  */
11879       cp_lexer_consume_token (parser->lexer);
11880
11881       scoped_enum_p = true;
11882     }
11883
11884   attributes = cp_parser_attributes_opt (parser);
11885
11886   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
11887     identifier = cp_parser_identifier (parser);
11888   else
11889     identifier = make_anon_name ();
11890
11891   /* Check for the `:' that denotes a specified underlying type in C++0x.  */
11892   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
11893     {
11894       cp_decl_specifier_seq type_specifiers;
11895
11896       /* At this point this is surely not elaborated type specifier.  */
11897       if (!cp_parser_parse_definitely (parser))
11898         return NULL_TREE;
11899
11900       if (cxx_dialect == cxx98)
11901         maybe_warn_cpp0x ("scoped enums");
11902
11903       /* Consume the `:'.  */
11904       cp_lexer_consume_token (parser->lexer);
11905
11906       has_underlying_type = true;
11907
11908       /* Parse the type-specifier-seq.  */
11909       cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
11910                                     &type_specifiers);
11911
11912       /* If that didn't work, stop.  */
11913       if (type_specifiers.type != error_mark_node)
11914         {
11915           underlying_type = grokdeclarator (NULL, &type_specifiers, TYPENAME,
11916                                             /*initialized=*/0, NULL);
11917           if (underlying_type == error_mark_node)
11918             underlying_type = NULL_TREE;
11919         }
11920     }
11921
11922   /* Look for the `{' but don't consume it yet.  */
11923   if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
11924     {
11925       cp_parser_error (parser, "expected %<{%>");
11926       if (has_underlying_type)
11927         return NULL_TREE;
11928     }
11929
11930   if (!has_underlying_type && !cp_parser_parse_definitely (parser))
11931     return NULL_TREE;
11932
11933   /* Issue an error message if type-definitions are forbidden here.  */
11934   if (!cp_parser_check_type_definition (parser))
11935     type = error_mark_node;
11936   else
11937     /* Create the new type.  We do this before consuming the opening
11938        brace so the enum will be recorded as being on the line of its
11939        tag (or the 'enum' keyword, if there is no tag).  */
11940     type = start_enum (identifier, underlying_type, scoped_enum_p);
11941   
11942   /* Consume the opening brace.  */
11943   cp_lexer_consume_token (parser->lexer);
11944
11945   if (type == error_mark_node)
11946     {
11947       cp_parser_skip_to_end_of_block_or_statement (parser);
11948       return error_mark_node;
11949     }
11950
11951   /* If the next token is not '}', then there are some enumerators.  */
11952   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
11953     cp_parser_enumerator_list (parser, type);
11954
11955   /* Consume the final '}'.  */
11956   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
11957
11958   /* Look for trailing attributes to apply to this enumeration, and
11959      apply them if appropriate.  */
11960   if (cp_parser_allow_gnu_extensions_p (parser))
11961     {
11962       tree trailing_attr = cp_parser_attributes_opt (parser);
11963       trailing_attr = chainon (trailing_attr, attributes);
11964       cplus_decl_attributes (&type,
11965                              trailing_attr,
11966                              (int) ATTR_FLAG_TYPE_IN_PLACE);
11967     }
11968
11969   /* Finish up the enumeration.  */
11970   finish_enum (type);
11971
11972   return type;
11973 }
11974
11975 /* Parse an enumerator-list.  The enumerators all have the indicated
11976    TYPE.
11977
11978    enumerator-list:
11979      enumerator-definition
11980      enumerator-list , enumerator-definition  */
11981
11982 static void
11983 cp_parser_enumerator_list (cp_parser* parser, tree type)
11984 {
11985   while (true)
11986     {
11987       /* Parse an enumerator-definition.  */
11988       cp_parser_enumerator_definition (parser, type);
11989
11990       /* If the next token is not a ',', we've reached the end of
11991          the list.  */
11992       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11993         break;
11994       /* Otherwise, consume the `,' and keep going.  */
11995       cp_lexer_consume_token (parser->lexer);
11996       /* If the next token is a `}', there is a trailing comma.  */
11997       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
11998         {
11999           if (!in_system_header)
12000             pedwarn (input_location, OPT_pedantic, "comma at end of enumerator list");
12001           break;
12002         }
12003     }
12004 }
12005
12006 /* Parse an enumerator-definition.  The enumerator has the indicated
12007    TYPE.
12008
12009    enumerator-definition:
12010      enumerator
12011      enumerator = constant-expression
12012
12013    enumerator:
12014      identifier  */
12015
12016 static void
12017 cp_parser_enumerator_definition (cp_parser* parser, tree type)
12018 {
12019   tree identifier;
12020   tree value;
12021
12022   /* Look for the identifier.  */
12023   identifier = cp_parser_identifier (parser);
12024   if (identifier == error_mark_node)
12025     return;
12026
12027   /* If the next token is an '=', then there is an explicit value.  */
12028   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12029     {
12030       /* Consume the `=' token.  */
12031       cp_lexer_consume_token (parser->lexer);
12032       /* Parse the value.  */
12033       value = cp_parser_constant_expression (parser,
12034                                              /*allow_non_constant_p=*/false,
12035                                              NULL);
12036     }
12037   else
12038     value = NULL_TREE;
12039
12040   /* If we are processing a template, make sure the initializer of the
12041      enumerator doesn't contain any bare template parameter pack.  */
12042   if (check_for_bare_parameter_packs (value))
12043     value = error_mark_node;
12044
12045   /* Create the enumerator.  */
12046   build_enumerator (identifier, value, type);
12047 }
12048
12049 /* Parse a namespace-name.
12050
12051    namespace-name:
12052      original-namespace-name
12053      namespace-alias
12054
12055    Returns the NAMESPACE_DECL for the namespace.  */
12056
12057 static tree
12058 cp_parser_namespace_name (cp_parser* parser)
12059 {
12060   tree identifier;
12061   tree namespace_decl;
12062
12063   cp_token *token = cp_lexer_peek_token (parser->lexer);
12064
12065   /* Get the name of the namespace.  */
12066   identifier = cp_parser_identifier (parser);
12067   if (identifier == error_mark_node)
12068     return error_mark_node;
12069
12070   /* Look up the identifier in the currently active scope.  Look only
12071      for namespaces, due to:
12072
12073        [basic.lookup.udir]
12074
12075        When looking up a namespace-name in a using-directive or alias
12076        definition, only namespace names are considered.
12077
12078      And:
12079
12080        [basic.lookup.qual]
12081
12082        During the lookup of a name preceding the :: scope resolution
12083        operator, object, function, and enumerator names are ignored.
12084
12085      (Note that cp_parser_qualifying_entity only calls this
12086      function if the token after the name is the scope resolution
12087      operator.)  */
12088   namespace_decl = cp_parser_lookup_name (parser, identifier,
12089                                           none_type,
12090                                           /*is_template=*/false,
12091                                           /*is_namespace=*/true,
12092                                           /*check_dependency=*/true,
12093                                           /*ambiguous_decls=*/NULL,
12094                                           token->location);
12095   /* If it's not a namespace, issue an error.  */
12096   if (namespace_decl == error_mark_node
12097       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
12098     {
12099       if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
12100         error ("%H%qD is not a namespace-name", &token->location, identifier);
12101       cp_parser_error (parser, "expected namespace-name");
12102       namespace_decl = error_mark_node;
12103     }
12104
12105   return namespace_decl;
12106 }
12107
12108 /* Parse a namespace-definition.
12109
12110    namespace-definition:
12111      named-namespace-definition
12112      unnamed-namespace-definition
12113
12114    named-namespace-definition:
12115      original-namespace-definition
12116      extension-namespace-definition
12117
12118    original-namespace-definition:
12119      namespace identifier { namespace-body }
12120
12121    extension-namespace-definition:
12122      namespace original-namespace-name { namespace-body }
12123
12124    unnamed-namespace-definition:
12125      namespace { namespace-body } */
12126
12127 static void
12128 cp_parser_namespace_definition (cp_parser* parser)
12129 {
12130   tree identifier, attribs;
12131   bool has_visibility;
12132   bool is_inline;
12133
12134   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_INLINE))
12135     {
12136       is_inline = true;
12137       cp_lexer_consume_token (parser->lexer);
12138     }
12139   else
12140     is_inline = false;
12141
12142   /* Look for the `namespace' keyword.  */
12143   cp_parser_require_keyword (parser, RID_NAMESPACE, "%<namespace%>");
12144
12145   /* Get the name of the namespace.  We do not attempt to distinguish
12146      between an original-namespace-definition and an
12147      extension-namespace-definition at this point.  The semantic
12148      analysis routines are responsible for that.  */
12149   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12150     identifier = cp_parser_identifier (parser);
12151   else
12152     identifier = NULL_TREE;
12153
12154   /* Parse any specified attributes.  */
12155   attribs = cp_parser_attributes_opt (parser);
12156
12157   /* Look for the `{' to start the namespace.  */
12158   cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>");
12159   /* Start the namespace.  */
12160   push_namespace (identifier);
12161
12162   /* "inline namespace" is equivalent to a stub namespace definition
12163      followed by a strong using directive.  */
12164   if (is_inline)
12165     {
12166       tree name_space = current_namespace;
12167       /* Set up namespace association.  */
12168       DECL_NAMESPACE_ASSOCIATIONS (name_space)
12169         = tree_cons (CP_DECL_CONTEXT (name_space), NULL_TREE,
12170                      DECL_NAMESPACE_ASSOCIATIONS (name_space));
12171       /* Import the contents of the inline namespace.  */
12172       pop_namespace ();
12173       do_using_directive (name_space);
12174       push_namespace (identifier);
12175     }
12176
12177   has_visibility = handle_namespace_attrs (current_namespace, attribs);
12178
12179   /* Parse the body of the namespace.  */
12180   cp_parser_namespace_body (parser);
12181
12182 #ifdef HANDLE_PRAGMA_VISIBILITY
12183   if (has_visibility)
12184     pop_visibility ();
12185 #endif
12186
12187   /* Finish the namespace.  */
12188   pop_namespace ();
12189   /* Look for the final `}'.  */
12190   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
12191 }
12192
12193 /* Parse a namespace-body.
12194
12195    namespace-body:
12196      declaration-seq [opt]  */
12197
12198 static void
12199 cp_parser_namespace_body (cp_parser* parser)
12200 {
12201   cp_parser_declaration_seq_opt (parser);
12202 }
12203
12204 /* Parse a namespace-alias-definition.
12205
12206    namespace-alias-definition:
12207      namespace identifier = qualified-namespace-specifier ;  */
12208
12209 static void
12210 cp_parser_namespace_alias_definition (cp_parser* parser)
12211 {
12212   tree identifier;
12213   tree namespace_specifier;
12214
12215   cp_token *token = cp_lexer_peek_token (parser->lexer);
12216
12217   /* Look for the `namespace' keyword.  */
12218   cp_parser_require_keyword (parser, RID_NAMESPACE, "%<namespace%>");
12219   /* Look for the identifier.  */
12220   identifier = cp_parser_identifier (parser);
12221   if (identifier == error_mark_node)
12222     return;
12223   /* Look for the `=' token.  */
12224   if (!cp_parser_uncommitted_to_tentative_parse_p (parser)
12225       && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) 
12226     {
12227       error ("%H%<namespace%> definition is not allowed here", &token->location);
12228       /* Skip the definition.  */
12229       cp_lexer_consume_token (parser->lexer);
12230       if (cp_parser_skip_to_closing_brace (parser))
12231         cp_lexer_consume_token (parser->lexer);
12232       return;
12233     }
12234   cp_parser_require (parser, CPP_EQ, "%<=%>");
12235   /* Look for the qualified-namespace-specifier.  */
12236   namespace_specifier
12237     = cp_parser_qualified_namespace_specifier (parser);
12238   /* Look for the `;' token.  */
12239   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
12240
12241   /* Register the alias in the symbol table.  */
12242   do_namespace_alias (identifier, namespace_specifier);
12243 }
12244
12245 /* Parse a qualified-namespace-specifier.
12246
12247    qualified-namespace-specifier:
12248      :: [opt] nested-name-specifier [opt] namespace-name
12249
12250    Returns a NAMESPACE_DECL corresponding to the specified
12251    namespace.  */
12252
12253 static tree
12254 cp_parser_qualified_namespace_specifier (cp_parser* parser)
12255 {
12256   /* Look for the optional `::'.  */
12257   cp_parser_global_scope_opt (parser,
12258                               /*current_scope_valid_p=*/false);
12259
12260   /* Look for the optional nested-name-specifier.  */
12261   cp_parser_nested_name_specifier_opt (parser,
12262                                        /*typename_keyword_p=*/false,
12263                                        /*check_dependency_p=*/true,
12264                                        /*type_p=*/false,
12265                                        /*is_declaration=*/true);
12266
12267   return cp_parser_namespace_name (parser);
12268 }
12269
12270 /* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
12271    access declaration.
12272
12273    using-declaration:
12274      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
12275      using :: unqualified-id ;  
12276
12277    access-declaration:
12278      qualified-id ;  
12279
12280    */
12281
12282 static bool
12283 cp_parser_using_declaration (cp_parser* parser, 
12284                              bool access_declaration_p)
12285 {
12286   cp_token *token;
12287   bool typename_p = false;
12288   bool global_scope_p;
12289   tree decl;
12290   tree identifier;
12291   tree qscope;
12292
12293   if (access_declaration_p)
12294     cp_parser_parse_tentatively (parser);
12295   else
12296     {
12297       /* Look for the `using' keyword.  */
12298       cp_parser_require_keyword (parser, RID_USING, "%<using%>");
12299       
12300       /* Peek at the next token.  */
12301       token = cp_lexer_peek_token (parser->lexer);
12302       /* See if it's `typename'.  */
12303       if (token->keyword == RID_TYPENAME)
12304         {
12305           /* Remember that we've seen it.  */
12306           typename_p = true;
12307           /* Consume the `typename' token.  */
12308           cp_lexer_consume_token (parser->lexer);
12309         }
12310     }
12311
12312   /* Look for the optional global scope qualification.  */
12313   global_scope_p
12314     = (cp_parser_global_scope_opt (parser,
12315                                    /*current_scope_valid_p=*/false)
12316        != NULL_TREE);
12317
12318   /* If we saw `typename', or didn't see `::', then there must be a
12319      nested-name-specifier present.  */
12320   if (typename_p || !global_scope_p)
12321     qscope = cp_parser_nested_name_specifier (parser, typename_p,
12322                                               /*check_dependency_p=*/true,
12323                                               /*type_p=*/false,
12324                                               /*is_declaration=*/true);
12325   /* Otherwise, we could be in either of the two productions.  In that
12326      case, treat the nested-name-specifier as optional.  */
12327   else
12328     qscope = cp_parser_nested_name_specifier_opt (parser,
12329                                                   /*typename_keyword_p=*/false,
12330                                                   /*check_dependency_p=*/true,
12331                                                   /*type_p=*/false,
12332                                                   /*is_declaration=*/true);
12333   if (!qscope)
12334     qscope = global_namespace;
12335
12336   if (access_declaration_p && cp_parser_error_occurred (parser))
12337     /* Something has already gone wrong; there's no need to parse
12338        further.  Since an error has occurred, the return value of
12339        cp_parser_parse_definitely will be false, as required.  */
12340     return cp_parser_parse_definitely (parser);
12341
12342   token = cp_lexer_peek_token (parser->lexer);
12343   /* Parse the unqualified-id.  */
12344   identifier = cp_parser_unqualified_id (parser,
12345                                          /*template_keyword_p=*/false,
12346                                          /*check_dependency_p=*/true,
12347                                          /*declarator_p=*/true,
12348                                          /*optional_p=*/false);
12349
12350   if (access_declaration_p)
12351     {
12352       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
12353         cp_parser_simulate_error (parser);
12354       if (!cp_parser_parse_definitely (parser))
12355         return false;
12356     }
12357
12358   /* The function we call to handle a using-declaration is different
12359      depending on what scope we are in.  */
12360   if (qscope == error_mark_node || identifier == error_mark_node)
12361     ;
12362   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
12363            && TREE_CODE (identifier) != BIT_NOT_EXPR)
12364     /* [namespace.udecl]
12365
12366        A using declaration shall not name a template-id.  */
12367     error ("%Ha template-id may not appear in a using-declaration",
12368             &token->location);
12369   else
12370     {
12371       if (at_class_scope_p ())
12372         {
12373           /* Create the USING_DECL.  */
12374           decl = do_class_using_decl (parser->scope, identifier);
12375
12376           if (check_for_bare_parameter_packs (decl))
12377             return false;
12378           else
12379             /* Add it to the list of members in this class.  */
12380             finish_member_declaration (decl);
12381         }
12382       else
12383         {
12384           decl = cp_parser_lookup_name_simple (parser,
12385                                                identifier,
12386                                                token->location);
12387           if (decl == error_mark_node)
12388             cp_parser_name_lookup_error (parser, identifier,
12389                                          decl, NULL,
12390                                          token->location);
12391           else if (check_for_bare_parameter_packs (decl))
12392             return false;
12393           else if (!at_namespace_scope_p ())
12394             do_local_using_decl (decl, qscope, identifier);
12395           else
12396             do_toplevel_using_decl (decl, qscope, identifier);
12397         }
12398     }
12399
12400   /* Look for the final `;'.  */
12401   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
12402   
12403   return true;
12404 }
12405
12406 /* Parse a using-directive.
12407
12408    using-directive:
12409      using namespace :: [opt] nested-name-specifier [opt]
12410        namespace-name ;  */
12411
12412 static void
12413 cp_parser_using_directive (cp_parser* parser)
12414 {
12415   tree namespace_decl;
12416   tree attribs;
12417
12418   /* Look for the `using' keyword.  */
12419   cp_parser_require_keyword (parser, RID_USING, "%<using%>");
12420   /* And the `namespace' keyword.  */
12421   cp_parser_require_keyword (parser, RID_NAMESPACE, "%<namespace%>");
12422   /* Look for the optional `::' operator.  */
12423   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
12424   /* And the optional nested-name-specifier.  */
12425   cp_parser_nested_name_specifier_opt (parser,
12426                                        /*typename_keyword_p=*/false,
12427                                        /*check_dependency_p=*/true,
12428                                        /*type_p=*/false,
12429                                        /*is_declaration=*/true);
12430   /* Get the namespace being used.  */
12431   namespace_decl = cp_parser_namespace_name (parser);
12432   /* And any specified attributes.  */
12433   attribs = cp_parser_attributes_opt (parser);
12434   /* Update the symbol table.  */
12435   parse_using_directive (namespace_decl, attribs);
12436   /* Look for the final `;'.  */
12437   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
12438 }
12439
12440 /* Parse an asm-definition.
12441
12442    asm-definition:
12443      asm ( string-literal ) ;
12444
12445    GNU Extension:
12446
12447    asm-definition:
12448      asm volatile [opt] ( string-literal ) ;
12449      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
12450      asm volatile [opt] ( string-literal : asm-operand-list [opt]
12451                           : asm-operand-list [opt] ) ;
12452      asm volatile [opt] ( string-literal : asm-operand-list [opt]
12453                           : asm-operand-list [opt]
12454                           : asm-operand-list [opt] ) ;  */
12455
12456 static void
12457 cp_parser_asm_definition (cp_parser* parser)
12458 {
12459   tree string;
12460   tree outputs = NULL_TREE;
12461   tree inputs = NULL_TREE;
12462   tree clobbers = NULL_TREE;
12463   tree asm_stmt;
12464   bool volatile_p = false;
12465   bool extended_p = false;
12466   bool invalid_inputs_p = false;
12467   bool invalid_outputs_p = false;
12468
12469   /* Look for the `asm' keyword.  */
12470   cp_parser_require_keyword (parser, RID_ASM, "%<asm%>");
12471   /* See if the next token is `volatile'.  */
12472   if (cp_parser_allow_gnu_extensions_p (parser)
12473       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
12474     {
12475       /* Remember that we saw the `volatile' keyword.  */
12476       volatile_p = true;
12477       /* Consume the token.  */
12478       cp_lexer_consume_token (parser->lexer);
12479     }
12480   /* Look for the opening `('.  */
12481   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
12482     return;
12483   /* Look for the string.  */
12484   string = cp_parser_string_literal (parser, false, false);
12485   if (string == error_mark_node)
12486     {
12487       cp_parser_skip_to_closing_parenthesis (parser, true, false,
12488                                              /*consume_paren=*/true);
12489       return;
12490     }
12491
12492   /* If we're allowing GNU extensions, check for the extended assembly
12493      syntax.  Unfortunately, the `:' tokens need not be separated by
12494      a space in C, and so, for compatibility, we tolerate that here
12495      too.  Doing that means that we have to treat the `::' operator as
12496      two `:' tokens.  */
12497   if (cp_parser_allow_gnu_extensions_p (parser)
12498       && parser->in_function_body
12499       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
12500           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
12501     {
12502       bool inputs_p = false;
12503       bool clobbers_p = false;
12504
12505       /* The extended syntax was used.  */
12506       extended_p = true;
12507
12508       /* Look for outputs.  */
12509       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
12510         {
12511           /* Consume the `:'.  */
12512           cp_lexer_consume_token (parser->lexer);
12513           /* Parse the output-operands.  */
12514           if (cp_lexer_next_token_is_not (parser->lexer,
12515                                           CPP_COLON)
12516               && cp_lexer_next_token_is_not (parser->lexer,
12517                                              CPP_SCOPE)
12518               && cp_lexer_next_token_is_not (parser->lexer,
12519                                              CPP_CLOSE_PAREN))
12520             outputs = cp_parser_asm_operand_list (parser);
12521
12522             if (outputs == error_mark_node)
12523               invalid_outputs_p = true;
12524         }
12525       /* If the next token is `::', there are no outputs, and the
12526          next token is the beginning of the inputs.  */
12527       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12528         /* The inputs are coming next.  */
12529         inputs_p = true;
12530
12531       /* Look for inputs.  */
12532       if (inputs_p
12533           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
12534         {
12535           /* Consume the `:' or `::'.  */
12536           cp_lexer_consume_token (parser->lexer);
12537           /* Parse the output-operands.  */
12538           if (cp_lexer_next_token_is_not (parser->lexer,
12539                                           CPP_COLON)
12540               && cp_lexer_next_token_is_not (parser->lexer,
12541                                              CPP_CLOSE_PAREN))
12542             inputs = cp_parser_asm_operand_list (parser);
12543
12544             if (inputs == error_mark_node)
12545               invalid_inputs_p = true;
12546         }
12547       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12548         /* The clobbers are coming next.  */
12549         clobbers_p = true;
12550
12551       /* Look for clobbers.  */
12552       if (clobbers_p
12553           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
12554         {
12555           /* Consume the `:' or `::'.  */
12556           cp_lexer_consume_token (parser->lexer);
12557           /* Parse the clobbers.  */
12558           if (cp_lexer_next_token_is_not (parser->lexer,
12559                                           CPP_CLOSE_PAREN))
12560             clobbers = cp_parser_asm_clobber_list (parser);
12561         }
12562     }
12563   /* Look for the closing `)'.  */
12564   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
12565     cp_parser_skip_to_closing_parenthesis (parser, true, false,
12566                                            /*consume_paren=*/true);
12567   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
12568
12569   if (!invalid_inputs_p && !invalid_outputs_p)
12570     {
12571       /* Create the ASM_EXPR.  */
12572       if (parser->in_function_body)
12573         {
12574           asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
12575                                       inputs, clobbers);
12576           /* If the extended syntax was not used, mark the ASM_EXPR.  */
12577           if (!extended_p)
12578             {
12579               tree temp = asm_stmt;
12580               if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
12581                 temp = TREE_OPERAND (temp, 0);
12582
12583               ASM_INPUT_P (temp) = 1;
12584             }
12585         }
12586       else
12587         cgraph_add_asm_node (string);
12588     }
12589 }
12590
12591 /* Declarators [gram.dcl.decl] */
12592
12593 /* Parse an init-declarator.
12594
12595    init-declarator:
12596      declarator initializer [opt]
12597
12598    GNU Extension:
12599
12600    init-declarator:
12601      declarator asm-specification [opt] attributes [opt] initializer [opt]
12602
12603    function-definition:
12604      decl-specifier-seq [opt] declarator ctor-initializer [opt]
12605        function-body
12606      decl-specifier-seq [opt] declarator function-try-block
12607
12608    GNU Extension:
12609
12610    function-definition:
12611      __extension__ function-definition
12612
12613    The DECL_SPECIFIERS apply to this declarator.  Returns a
12614    representation of the entity declared.  If MEMBER_P is TRUE, then
12615    this declarator appears in a class scope.  The new DECL created by
12616    this declarator is returned.
12617
12618    The CHECKS are access checks that should be performed once we know
12619    what entity is being declared (and, therefore, what classes have
12620    befriended it).
12621
12622    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
12623    for a function-definition here as well.  If the declarator is a
12624    declarator for a function-definition, *FUNCTION_DEFINITION_P will
12625    be TRUE upon return.  By that point, the function-definition will
12626    have been completely parsed.
12627
12628    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
12629    is FALSE.  */
12630
12631 static tree
12632 cp_parser_init_declarator (cp_parser* parser,
12633                            cp_decl_specifier_seq *decl_specifiers,
12634                            VEC (deferred_access_check,gc)* checks,
12635                            bool function_definition_allowed_p,
12636                            bool member_p,
12637                            int declares_class_or_enum,
12638                            bool* function_definition_p)
12639 {
12640   cp_token *token = NULL, *asm_spec_start_token = NULL,
12641            *attributes_start_token = NULL;
12642   cp_declarator *declarator;
12643   tree prefix_attributes;
12644   tree attributes;
12645   tree asm_specification;
12646   tree initializer;
12647   tree decl = NULL_TREE;
12648   tree scope;
12649   int is_initialized;
12650   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
12651      initialized with "= ..", CPP_OPEN_PAREN if initialized with
12652      "(...)".  */
12653   enum cpp_ttype initialization_kind;
12654   bool is_direct_init = false;
12655   bool is_non_constant_init;
12656   int ctor_dtor_or_conv_p;
12657   bool friend_p;
12658   tree pushed_scope = NULL;
12659
12660   /* Gather the attributes that were provided with the
12661      decl-specifiers.  */
12662   prefix_attributes = decl_specifiers->attributes;
12663
12664   /* Assume that this is not the declarator for a function
12665      definition.  */
12666   if (function_definition_p)
12667     *function_definition_p = false;
12668
12669   /* Defer access checks while parsing the declarator; we cannot know
12670      what names are accessible until we know what is being
12671      declared.  */
12672   resume_deferring_access_checks ();
12673
12674   /* Parse the declarator.  */
12675   token = cp_lexer_peek_token (parser->lexer);
12676   declarator
12677     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
12678                             &ctor_dtor_or_conv_p,
12679                             /*parenthesized_p=*/NULL,
12680                             /*member_p=*/false);
12681   /* Gather up the deferred checks.  */
12682   stop_deferring_access_checks ();
12683
12684   /* If the DECLARATOR was erroneous, there's no need to go
12685      further.  */
12686   if (declarator == cp_error_declarator)
12687     return error_mark_node;
12688
12689   /* Check that the number of template-parameter-lists is OK.  */
12690   if (!cp_parser_check_declarator_template_parameters (parser, declarator,
12691                                                        token->location))
12692     return error_mark_node;
12693
12694   if (declares_class_or_enum & 2)
12695     cp_parser_check_for_definition_in_return_type (declarator,
12696                                                    decl_specifiers->type,
12697                                                    decl_specifiers->type_location);
12698
12699   /* Figure out what scope the entity declared by the DECLARATOR is
12700      located in.  `grokdeclarator' sometimes changes the scope, so
12701      we compute it now.  */
12702   scope = get_scope_of_declarator (declarator);
12703
12704   /* If we're allowing GNU extensions, look for an asm-specification
12705      and attributes.  */
12706   if (cp_parser_allow_gnu_extensions_p (parser))
12707     {
12708       /* Look for an asm-specification.  */
12709       asm_spec_start_token = cp_lexer_peek_token (parser->lexer);
12710       asm_specification = cp_parser_asm_specification_opt (parser);
12711       /* And attributes.  */
12712       attributes_start_token = cp_lexer_peek_token (parser->lexer);
12713       attributes = cp_parser_attributes_opt (parser);
12714     }
12715   else
12716     {
12717       asm_specification = NULL_TREE;
12718       attributes = NULL_TREE;
12719     }
12720
12721   /* Peek at the next token.  */
12722   token = cp_lexer_peek_token (parser->lexer);
12723   /* Check to see if the token indicates the start of a
12724      function-definition.  */
12725   if (function_declarator_p (declarator)
12726       && cp_parser_token_starts_function_definition_p (token))
12727     {
12728       if (!function_definition_allowed_p)
12729         {
12730           /* If a function-definition should not appear here, issue an
12731              error message.  */
12732           cp_parser_error (parser,
12733                            "a function-definition is not allowed here");
12734           return error_mark_node;
12735         }
12736       else
12737         {
12738           location_t func_brace_location
12739             = cp_lexer_peek_token (parser->lexer)->location;
12740
12741           /* Neither attributes nor an asm-specification are allowed
12742              on a function-definition.  */
12743           if (asm_specification)
12744             error ("%Han asm-specification is not allowed "
12745                    "on a function-definition",
12746                    &asm_spec_start_token->location);
12747           if (attributes)
12748             error ("%Hattributes are not allowed on a function-definition",
12749                    &attributes_start_token->location);
12750           /* This is a function-definition.  */
12751           *function_definition_p = true;
12752
12753           /* Parse the function definition.  */
12754           if (member_p)
12755             decl = cp_parser_save_member_function_body (parser,
12756                                                         decl_specifiers,
12757                                                         declarator,
12758                                                         prefix_attributes);
12759           else
12760             decl
12761               = (cp_parser_function_definition_from_specifiers_and_declarator
12762                  (parser, decl_specifiers, prefix_attributes, declarator));
12763
12764           if (decl != error_mark_node && DECL_STRUCT_FUNCTION (decl))
12765             {
12766               /* This is where the prologue starts...  */
12767               DECL_STRUCT_FUNCTION (decl)->function_start_locus
12768                 = func_brace_location;
12769             }
12770
12771           return decl;
12772         }
12773     }
12774
12775   /* [dcl.dcl]
12776
12777      Only in function declarations for constructors, destructors, and
12778      type conversions can the decl-specifier-seq be omitted.
12779
12780      We explicitly postpone this check past the point where we handle
12781      function-definitions because we tolerate function-definitions
12782      that are missing their return types in some modes.  */
12783   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
12784     {
12785       cp_parser_error (parser,
12786                        "expected constructor, destructor, or type conversion");
12787       return error_mark_node;
12788     }
12789
12790   /* An `=' or an `(', or an '{' in C++0x, indicates an initializer.  */
12791   if (token->type == CPP_EQ
12792       || token->type == CPP_OPEN_PAREN
12793       || token->type == CPP_OPEN_BRACE)
12794     {
12795       is_initialized = SD_INITIALIZED;
12796       initialization_kind = token->type;
12797
12798       if (token->type == CPP_EQ
12799           && function_declarator_p (declarator))
12800         {
12801           cp_token *t2 = cp_lexer_peek_nth_token (parser->lexer, 2);
12802           if (t2->keyword == RID_DEFAULT)
12803             is_initialized = SD_DEFAULTED;
12804           else if (t2->keyword == RID_DELETE)
12805             is_initialized = SD_DELETED;
12806         }
12807     }
12808   else
12809     {
12810       /* If the init-declarator isn't initialized and isn't followed by a
12811          `,' or `;', it's not a valid init-declarator.  */
12812       if (token->type != CPP_COMMA
12813           && token->type != CPP_SEMICOLON)
12814         {
12815           cp_parser_error (parser, "expected initializer");
12816           return error_mark_node;
12817         }
12818       is_initialized = SD_UNINITIALIZED;
12819       initialization_kind = CPP_EOF;
12820     }
12821
12822   /* Because start_decl has side-effects, we should only call it if we
12823      know we're going ahead.  By this point, we know that we cannot
12824      possibly be looking at any other construct.  */
12825   cp_parser_commit_to_tentative_parse (parser);
12826
12827   /* If the decl specifiers were bad, issue an error now that we're
12828      sure this was intended to be a declarator.  Then continue
12829      declaring the variable(s), as int, to try to cut down on further
12830      errors.  */
12831   if (decl_specifiers->any_specifiers_p
12832       && decl_specifiers->type == error_mark_node)
12833     {
12834       cp_parser_error (parser, "invalid type in declaration");
12835       decl_specifiers->type = integer_type_node;
12836     }
12837
12838   /* Check to see whether or not this declaration is a friend.  */
12839   friend_p = cp_parser_friend_p (decl_specifiers);
12840
12841   /* Enter the newly declared entry in the symbol table.  If we're
12842      processing a declaration in a class-specifier, we wait until
12843      after processing the initializer.  */
12844   if (!member_p)
12845     {
12846       if (parser->in_unbraced_linkage_specification_p)
12847         decl_specifiers->storage_class = sc_extern;
12848       decl = start_decl (declarator, decl_specifiers,
12849                          is_initialized, attributes, prefix_attributes,
12850                          &pushed_scope);
12851     }
12852   else if (scope)
12853     /* Enter the SCOPE.  That way unqualified names appearing in the
12854        initializer will be looked up in SCOPE.  */
12855     pushed_scope = push_scope (scope);
12856
12857   /* Perform deferred access control checks, now that we know in which
12858      SCOPE the declared entity resides.  */
12859   if (!member_p && decl)
12860     {
12861       tree saved_current_function_decl = NULL_TREE;
12862
12863       /* If the entity being declared is a function, pretend that we
12864          are in its scope.  If it is a `friend', it may have access to
12865          things that would not otherwise be accessible.  */
12866       if (TREE_CODE (decl) == FUNCTION_DECL)
12867         {
12868           saved_current_function_decl = current_function_decl;
12869           current_function_decl = decl;
12870         }
12871
12872       /* Perform access checks for template parameters.  */
12873       cp_parser_perform_template_parameter_access_checks (checks);
12874
12875       /* Perform the access control checks for the declarator and the
12876          decl-specifiers.  */
12877       perform_deferred_access_checks ();
12878
12879       /* Restore the saved value.  */
12880       if (TREE_CODE (decl) == FUNCTION_DECL)
12881         current_function_decl = saved_current_function_decl;
12882     }
12883
12884   /* Parse the initializer.  */
12885   initializer = NULL_TREE;
12886   is_direct_init = false;
12887   is_non_constant_init = true;
12888   if (is_initialized)
12889     {
12890       if (function_declarator_p (declarator))
12891         {
12892           cp_token *initializer_start_token = cp_lexer_peek_token (parser->lexer);
12893            if (initialization_kind == CPP_EQ)
12894              initializer = cp_parser_pure_specifier (parser);
12895            else
12896              {
12897                /* If the declaration was erroneous, we don't really
12898                   know what the user intended, so just silently
12899                   consume the initializer.  */
12900                if (decl != error_mark_node)
12901                  error ("%Hinitializer provided for function",
12902                         &initializer_start_token->location);
12903                cp_parser_skip_to_closing_parenthesis (parser,
12904                                                       /*recovering=*/true,
12905                                                       /*or_comma=*/false,
12906                                                       /*consume_paren=*/true);
12907              }
12908         }
12909       else
12910         initializer = cp_parser_initializer (parser,
12911                                              &is_direct_init,
12912                                              &is_non_constant_init);
12913     }
12914
12915   /* The old parser allows attributes to appear after a parenthesized
12916      initializer.  Mark Mitchell proposed removing this functionality
12917      on the GCC mailing lists on 2002-08-13.  This parser accepts the
12918      attributes -- but ignores them.  */
12919   if (cp_parser_allow_gnu_extensions_p (parser)
12920       && initialization_kind == CPP_OPEN_PAREN)
12921     if (cp_parser_attributes_opt (parser))
12922       warning (OPT_Wattributes,
12923                "attributes after parenthesized initializer ignored");
12924
12925   /* For an in-class declaration, use `grokfield' to create the
12926      declaration.  */
12927   if (member_p)
12928     {
12929       if (pushed_scope)
12930         {
12931           pop_scope (pushed_scope);
12932           pushed_scope = false;
12933         }
12934       decl = grokfield (declarator, decl_specifiers,
12935                         initializer, !is_non_constant_init,
12936                         /*asmspec=*/NULL_TREE,
12937                         prefix_attributes);
12938       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
12939         cp_parser_save_default_args (parser, decl);
12940     }
12941
12942   /* Finish processing the declaration.  But, skip friend
12943      declarations.  */
12944   if (!friend_p && decl && decl != error_mark_node)
12945     {
12946       cp_finish_decl (decl,
12947                       initializer, !is_non_constant_init,
12948                       asm_specification,
12949                       /* If the initializer is in parentheses, then this is
12950                          a direct-initialization, which means that an
12951                          `explicit' constructor is OK.  Otherwise, an
12952                          `explicit' constructor cannot be used.  */
12953                       ((is_direct_init || !is_initialized)
12954                        ? 0 : LOOKUP_ONLYCONVERTING));
12955     }
12956   else if ((cxx_dialect != cxx98) && friend_p
12957            && decl && TREE_CODE (decl) == FUNCTION_DECL)
12958     /* Core issue #226 (C++0x only): A default template-argument
12959        shall not be specified in a friend class template
12960        declaration. */
12961     check_default_tmpl_args (decl, current_template_parms, /*is_primary=*/1, 
12962                              /*is_partial=*/0, /*is_friend_decl=*/1);
12963
12964   if (!friend_p && pushed_scope)
12965     pop_scope (pushed_scope);
12966
12967   return decl;
12968 }
12969
12970 /* Parse a declarator.
12971
12972    declarator:
12973      direct-declarator
12974      ptr-operator declarator
12975
12976    abstract-declarator:
12977      ptr-operator abstract-declarator [opt]
12978      direct-abstract-declarator
12979
12980    GNU Extensions:
12981
12982    declarator:
12983      attributes [opt] direct-declarator
12984      attributes [opt] ptr-operator declarator
12985
12986    abstract-declarator:
12987      attributes [opt] ptr-operator abstract-declarator [opt]
12988      attributes [opt] direct-abstract-declarator
12989
12990    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
12991    detect constructor, destructor or conversion operators. It is set
12992    to -1 if the declarator is a name, and +1 if it is a
12993    function. Otherwise it is set to zero. Usually you just want to
12994    test for >0, but internally the negative value is used.
12995
12996    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
12997    a decl-specifier-seq unless it declares a constructor, destructor,
12998    or conversion.  It might seem that we could check this condition in
12999    semantic analysis, rather than parsing, but that makes it difficult
13000    to handle something like `f()'.  We want to notice that there are
13001    no decl-specifiers, and therefore realize that this is an
13002    expression, not a declaration.)
13003
13004    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
13005    the declarator is a direct-declarator of the form "(...)".
13006
13007    MEMBER_P is true iff this declarator is a member-declarator.  */
13008
13009 static cp_declarator *
13010 cp_parser_declarator (cp_parser* parser,
13011                       cp_parser_declarator_kind dcl_kind,
13012                       int* ctor_dtor_or_conv_p,
13013                       bool* parenthesized_p,
13014                       bool member_p)
13015 {
13016   cp_token *token;
13017   cp_declarator *declarator;
13018   enum tree_code code;
13019   cp_cv_quals cv_quals;
13020   tree class_type;
13021   tree attributes = NULL_TREE;
13022
13023   /* Assume this is not a constructor, destructor, or type-conversion
13024      operator.  */
13025   if (ctor_dtor_or_conv_p)
13026     *ctor_dtor_or_conv_p = 0;
13027
13028   if (cp_parser_allow_gnu_extensions_p (parser))
13029     attributes = cp_parser_attributes_opt (parser);
13030
13031   /* Peek at the next token.  */
13032   token = cp_lexer_peek_token (parser->lexer);
13033
13034   /* Check for the ptr-operator production.  */
13035   cp_parser_parse_tentatively (parser);
13036   /* Parse the ptr-operator.  */
13037   code = cp_parser_ptr_operator (parser,
13038                                  &class_type,
13039                                  &cv_quals);
13040   /* If that worked, then we have a ptr-operator.  */
13041   if (cp_parser_parse_definitely (parser))
13042     {
13043       /* If a ptr-operator was found, then this declarator was not
13044          parenthesized.  */
13045       if (parenthesized_p)
13046         *parenthesized_p = true;
13047       /* The dependent declarator is optional if we are parsing an
13048          abstract-declarator.  */
13049       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
13050         cp_parser_parse_tentatively (parser);
13051
13052       /* Parse the dependent declarator.  */
13053       declarator = cp_parser_declarator (parser, dcl_kind,
13054                                          /*ctor_dtor_or_conv_p=*/NULL,
13055                                          /*parenthesized_p=*/NULL,
13056                                          /*member_p=*/false);
13057
13058       /* If we are parsing an abstract-declarator, we must handle the
13059          case where the dependent declarator is absent.  */
13060       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
13061           && !cp_parser_parse_definitely (parser))
13062         declarator = NULL;
13063
13064       declarator = cp_parser_make_indirect_declarator
13065         (code, class_type, cv_quals, declarator);
13066     }
13067   /* Everything else is a direct-declarator.  */
13068   else
13069     {
13070       if (parenthesized_p)
13071         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
13072                                                    CPP_OPEN_PAREN);
13073       declarator = cp_parser_direct_declarator (parser, dcl_kind,
13074                                                 ctor_dtor_or_conv_p,
13075                                                 member_p);
13076     }
13077
13078   if (attributes && declarator && declarator != cp_error_declarator)
13079     declarator->attributes = attributes;
13080
13081   return declarator;
13082 }
13083
13084 /* Parse a direct-declarator or direct-abstract-declarator.
13085
13086    direct-declarator:
13087      declarator-id
13088      direct-declarator ( parameter-declaration-clause )
13089        cv-qualifier-seq [opt]
13090        exception-specification [opt]
13091      direct-declarator [ constant-expression [opt] ]
13092      ( declarator )
13093
13094    direct-abstract-declarator:
13095      direct-abstract-declarator [opt]
13096        ( parameter-declaration-clause )
13097        cv-qualifier-seq [opt]
13098        exception-specification [opt]
13099      direct-abstract-declarator [opt] [ constant-expression [opt] ]
13100      ( abstract-declarator )
13101
13102    Returns a representation of the declarator.  DCL_KIND is
13103    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
13104    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
13105    we are parsing a direct-declarator.  It is
13106    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
13107    of ambiguity we prefer an abstract declarator, as per
13108    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
13109    cp_parser_declarator.  */
13110
13111 static cp_declarator *
13112 cp_parser_direct_declarator (cp_parser* parser,
13113                              cp_parser_declarator_kind dcl_kind,
13114                              int* ctor_dtor_or_conv_p,
13115                              bool member_p)
13116 {
13117   cp_token *token;
13118   cp_declarator *declarator = NULL;
13119   tree scope = NULL_TREE;
13120   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
13121   bool saved_in_declarator_p = parser->in_declarator_p;
13122   bool first = true;
13123   tree pushed_scope = NULL_TREE;
13124
13125   while (true)
13126     {
13127       /* Peek at the next token.  */
13128       token = cp_lexer_peek_token (parser->lexer);
13129       if (token->type == CPP_OPEN_PAREN)
13130         {
13131           /* This is either a parameter-declaration-clause, or a
13132              parenthesized declarator. When we know we are parsing a
13133              named declarator, it must be a parenthesized declarator
13134              if FIRST is true. For instance, `(int)' is a
13135              parameter-declaration-clause, with an omitted
13136              direct-abstract-declarator. But `((*))', is a
13137              parenthesized abstract declarator. Finally, when T is a
13138              template parameter `(T)' is a
13139              parameter-declaration-clause, and not a parenthesized
13140              named declarator.
13141
13142              We first try and parse a parameter-declaration-clause,
13143              and then try a nested declarator (if FIRST is true).
13144
13145              It is not an error for it not to be a
13146              parameter-declaration-clause, even when FIRST is
13147              false. Consider,
13148
13149                int i (int);
13150                int i (3);
13151
13152              The first is the declaration of a function while the
13153              second is the definition of a variable, including its
13154              initializer.
13155
13156              Having seen only the parenthesis, we cannot know which of
13157              these two alternatives should be selected.  Even more
13158              complex are examples like:
13159
13160                int i (int (a));
13161                int i (int (3));
13162
13163              The former is a function-declaration; the latter is a
13164              variable initialization.
13165
13166              Thus again, we try a parameter-declaration-clause, and if
13167              that fails, we back out and return.  */
13168
13169           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
13170             {
13171               tree params;
13172               unsigned saved_num_template_parameter_lists;
13173               bool is_declarator = false;
13174               tree t;
13175
13176               /* In a member-declarator, the only valid interpretation
13177                  of a parenthesis is the start of a
13178                  parameter-declaration-clause.  (It is invalid to
13179                  initialize a static data member with a parenthesized
13180                  initializer; only the "=" form of initialization is
13181                  permitted.)  */
13182               if (!member_p)
13183                 cp_parser_parse_tentatively (parser);
13184
13185               /* Consume the `('.  */
13186               cp_lexer_consume_token (parser->lexer);
13187               if (first)
13188                 {
13189                   /* If this is going to be an abstract declarator, we're
13190                      in a declarator and we can't have default args.  */
13191                   parser->default_arg_ok_p = false;
13192                   parser->in_declarator_p = true;
13193                 }
13194
13195               /* Inside the function parameter list, surrounding
13196                  template-parameter-lists do not apply.  */
13197               saved_num_template_parameter_lists
13198                 = parser->num_template_parameter_lists;
13199               parser->num_template_parameter_lists = 0;
13200
13201               begin_scope (sk_function_parms, NULL_TREE);
13202
13203               /* Parse the parameter-declaration-clause.  */
13204               params = cp_parser_parameter_declaration_clause (parser);
13205
13206               parser->num_template_parameter_lists
13207                 = saved_num_template_parameter_lists;
13208
13209               /* If all went well, parse the cv-qualifier-seq and the
13210                  exception-specification.  */
13211               if (member_p || cp_parser_parse_definitely (parser))
13212                 {
13213                   cp_cv_quals cv_quals;
13214                   tree exception_specification;
13215                   tree late_return;
13216
13217                   is_declarator = true;
13218
13219                   if (ctor_dtor_or_conv_p)
13220                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
13221                   first = false;
13222                   /* Consume the `)'.  */
13223                   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
13224
13225                   /* Parse the cv-qualifier-seq.  */
13226                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
13227                   /* And the exception-specification.  */
13228                   exception_specification
13229                     = cp_parser_exception_specification_opt (parser);
13230
13231                   late_return
13232                     = cp_parser_late_return_type_opt (parser);
13233
13234                   /* Create the function-declarator.  */
13235                   declarator = make_call_declarator (declarator,
13236                                                      params,
13237                                                      cv_quals,
13238                                                      exception_specification,
13239                                                      late_return);
13240                   /* Any subsequent parameter lists are to do with
13241                      return type, so are not those of the declared
13242                      function.  */
13243                   parser->default_arg_ok_p = false;
13244                 }
13245
13246               /* Remove the function parms from scope.  */
13247               for (t = current_binding_level->names; t; t = TREE_CHAIN (t))
13248                 pop_binding (DECL_NAME (t), t);
13249               leave_scope();
13250
13251               if (is_declarator)
13252                 /* Repeat the main loop.  */
13253                 continue;
13254             }
13255
13256           /* If this is the first, we can try a parenthesized
13257              declarator.  */
13258           if (first)
13259             {
13260               bool saved_in_type_id_in_expr_p;
13261
13262               parser->default_arg_ok_p = saved_default_arg_ok_p;
13263               parser->in_declarator_p = saved_in_declarator_p;
13264
13265               /* Consume the `('.  */
13266               cp_lexer_consume_token (parser->lexer);
13267               /* Parse the nested declarator.  */
13268               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
13269               parser->in_type_id_in_expr_p = true;
13270               declarator
13271                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
13272                                         /*parenthesized_p=*/NULL,
13273                                         member_p);
13274               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
13275               first = false;
13276               /* Expect a `)'.  */
13277               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
13278                 declarator = cp_error_declarator;
13279               if (declarator == cp_error_declarator)
13280                 break;
13281
13282               goto handle_declarator;
13283             }
13284           /* Otherwise, we must be done.  */
13285           else
13286             break;
13287         }
13288       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
13289                && token->type == CPP_OPEN_SQUARE)
13290         {
13291           /* Parse an array-declarator.  */
13292           tree bounds;
13293
13294           if (ctor_dtor_or_conv_p)
13295             *ctor_dtor_or_conv_p = 0;
13296
13297           first = false;
13298           parser->default_arg_ok_p = false;
13299           parser->in_declarator_p = true;
13300           /* Consume the `['.  */
13301           cp_lexer_consume_token (parser->lexer);
13302           /* Peek at the next token.  */
13303           token = cp_lexer_peek_token (parser->lexer);
13304           /* If the next token is `]', then there is no
13305              constant-expression.  */
13306           if (token->type != CPP_CLOSE_SQUARE)
13307             {
13308               bool non_constant_p;
13309
13310               bounds
13311                 = cp_parser_constant_expression (parser,
13312                                                  /*allow_non_constant=*/true,
13313                                                  &non_constant_p);
13314               if (!non_constant_p)
13315                 bounds = fold_non_dependent_expr (bounds);
13316               else if (processing_template_decl)
13317                 {
13318                   /* Remember this wasn't a constant-expression.  */
13319                   bounds = build_nop (TREE_TYPE (bounds), bounds);
13320                   TREE_SIDE_EFFECTS (bounds) = 1;
13321                 }
13322
13323               /* Normally, the array bound must be an integral constant
13324                  expression.  However, as an extension, we allow VLAs
13325                  in function scopes.  */
13326               else if (!parser->in_function_body)
13327                 {
13328                   error ("%Harray bound is not an integer constant",
13329                          &token->location);
13330                   bounds = error_mark_node;
13331                 }
13332             }
13333           else
13334             bounds = NULL_TREE;
13335           /* Look for the closing `]'.  */
13336           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>"))
13337             {
13338               declarator = cp_error_declarator;
13339               break;
13340             }
13341
13342           declarator = make_array_declarator (declarator, bounds);
13343         }
13344       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
13345         {
13346           tree qualifying_scope;
13347           tree unqualified_name;
13348           special_function_kind sfk;
13349           bool abstract_ok;
13350           bool pack_expansion_p = false;
13351           cp_token *declarator_id_start_token;
13352
13353           /* Parse a declarator-id */
13354           abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
13355           if (abstract_ok)
13356             {
13357               cp_parser_parse_tentatively (parser);
13358
13359               /* If we see an ellipsis, we should be looking at a
13360                  parameter pack. */
13361               if (token->type == CPP_ELLIPSIS)
13362                 {
13363                   /* Consume the `...' */
13364                   cp_lexer_consume_token (parser->lexer);
13365
13366                   pack_expansion_p = true;
13367                 }
13368             }
13369
13370           declarator_id_start_token = cp_lexer_peek_token (parser->lexer);
13371           unqualified_name
13372             = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
13373           qualifying_scope = parser->scope;
13374           if (abstract_ok)
13375             {
13376               bool okay = false;
13377
13378               if (!unqualified_name && pack_expansion_p)
13379                 {
13380                   /* Check whether an error occurred. */
13381                   okay = !cp_parser_error_occurred (parser);
13382
13383                   /* We already consumed the ellipsis to mark a
13384                      parameter pack, but we have no way to report it,
13385                      so abort the tentative parse. We will be exiting
13386                      immediately anyway. */
13387                   cp_parser_abort_tentative_parse (parser);
13388                 }
13389               else
13390                 okay = cp_parser_parse_definitely (parser);
13391
13392               if (!okay)
13393                 unqualified_name = error_mark_node;
13394               else if (unqualified_name
13395                        && (qualifying_scope
13396                            || (TREE_CODE (unqualified_name)
13397                                != IDENTIFIER_NODE)))
13398                 {
13399                   cp_parser_error (parser, "expected unqualified-id");
13400                   unqualified_name = error_mark_node;
13401                 }
13402             }
13403
13404           if (!unqualified_name)
13405             return NULL;
13406           if (unqualified_name == error_mark_node)
13407             {
13408               declarator = cp_error_declarator;
13409               pack_expansion_p = false;
13410               declarator->parameter_pack_p = false;
13411               break;
13412             }
13413
13414           if (qualifying_scope && at_namespace_scope_p ()
13415               && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
13416             {
13417               /* In the declaration of a member of a template class
13418                  outside of the class itself, the SCOPE will sometimes
13419                  be a TYPENAME_TYPE.  For example, given:
13420
13421                  template <typename T>
13422                  int S<T>::R::i = 3;
13423
13424                  the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
13425                  this context, we must resolve S<T>::R to an ordinary
13426                  type, rather than a typename type.
13427
13428                  The reason we normally avoid resolving TYPENAME_TYPEs
13429                  is that a specialization of `S' might render
13430                  `S<T>::R' not a type.  However, if `S' is
13431                  specialized, then this `i' will not be used, so there
13432                  is no harm in resolving the types here.  */
13433               tree type;
13434
13435               /* Resolve the TYPENAME_TYPE.  */
13436               type = resolve_typename_type (qualifying_scope,
13437                                             /*only_current_p=*/false);
13438               /* If that failed, the declarator is invalid.  */
13439               if (TREE_CODE (type) == TYPENAME_TYPE)
13440                 error ("%H%<%T::%E%> is not a type",
13441                        &declarator_id_start_token->location,
13442                        TYPE_CONTEXT (qualifying_scope),
13443                        TYPE_IDENTIFIER (qualifying_scope));
13444               qualifying_scope = type;
13445             }
13446
13447           sfk = sfk_none;
13448
13449           if (unqualified_name)
13450             {
13451               tree class_type;
13452
13453               if (qualifying_scope
13454                   && CLASS_TYPE_P (qualifying_scope))
13455                 class_type = qualifying_scope;
13456               else
13457                 class_type = current_class_type;
13458
13459               if (TREE_CODE (unqualified_name) == TYPE_DECL)
13460                 {
13461                   tree name_type = TREE_TYPE (unqualified_name);
13462                   if (class_type && same_type_p (name_type, class_type))
13463                     {
13464                       if (qualifying_scope
13465                           && CLASSTYPE_USE_TEMPLATE (name_type))
13466                         {
13467                           error ("%Hinvalid use of constructor as a template",
13468                                  &declarator_id_start_token->location);
13469                           inform (input_location, "use %<%T::%D%> instead of %<%T::%D%> to "
13470                                   "name the constructor in a qualified name",
13471                                   class_type,
13472                                   DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
13473                                   class_type, name_type);
13474                           declarator = cp_error_declarator;
13475                           break;
13476                         }
13477                       else
13478                         unqualified_name = constructor_name (class_type);
13479                     }
13480                   else
13481                     {
13482                       /* We do not attempt to print the declarator
13483                          here because we do not have enough
13484                          information about its original syntactic
13485                          form.  */
13486                       cp_parser_error (parser, "invalid declarator");
13487                       declarator = cp_error_declarator;
13488                       break;
13489                     }
13490                 }
13491
13492               if (class_type)
13493                 {
13494                   if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
13495                     sfk = sfk_destructor;
13496                   else if (IDENTIFIER_TYPENAME_P (unqualified_name))
13497                     sfk = sfk_conversion;
13498                   else if (/* There's no way to declare a constructor
13499                               for an anonymous type, even if the type
13500                               got a name for linkage purposes.  */
13501                            !TYPE_WAS_ANONYMOUS (class_type)
13502                            && constructor_name_p (unqualified_name,
13503                                                   class_type))
13504                     {
13505                       unqualified_name = constructor_name (class_type);
13506                       sfk = sfk_constructor;
13507                     }
13508
13509                   if (ctor_dtor_or_conv_p && sfk != sfk_none)
13510                     *ctor_dtor_or_conv_p = -1;
13511                 }
13512             }
13513           declarator = make_id_declarator (qualifying_scope,
13514                                            unqualified_name,
13515                                            sfk);
13516           declarator->id_loc = token->location;
13517           declarator->parameter_pack_p = pack_expansion_p;
13518
13519           if (pack_expansion_p)
13520             maybe_warn_variadic_templates ();
13521
13522         handle_declarator:;
13523           scope = get_scope_of_declarator (declarator);
13524           if (scope)
13525             /* Any names that appear after the declarator-id for a
13526                member are looked up in the containing scope.  */
13527             pushed_scope = push_scope (scope);
13528           parser->in_declarator_p = true;
13529           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
13530               || (declarator && declarator->kind == cdk_id))
13531             /* Default args are only allowed on function
13532                declarations.  */
13533             parser->default_arg_ok_p = saved_default_arg_ok_p;
13534           else
13535             parser->default_arg_ok_p = false;
13536
13537           first = false;
13538         }
13539       /* We're done.  */
13540       else
13541         break;
13542     }
13543
13544   /* For an abstract declarator, we might wind up with nothing at this
13545      point.  That's an error; the declarator is not optional.  */
13546   if (!declarator)
13547     cp_parser_error (parser, "expected declarator");
13548
13549   /* If we entered a scope, we must exit it now.  */
13550   if (pushed_scope)
13551     pop_scope (pushed_scope);
13552
13553   parser->default_arg_ok_p = saved_default_arg_ok_p;
13554   parser->in_declarator_p = saved_in_declarator_p;
13555
13556   return declarator;
13557 }
13558
13559 /* Parse a ptr-operator.
13560
13561    ptr-operator:
13562      * cv-qualifier-seq [opt]
13563      &
13564      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
13565
13566    GNU Extension:
13567
13568    ptr-operator:
13569      & cv-qualifier-seq [opt]
13570
13571    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
13572    Returns ADDR_EXPR if a reference was used, or NON_LVALUE_EXPR for
13573    an rvalue reference. In the case of a pointer-to-member, *TYPE is
13574    filled in with the TYPE containing the member.  *CV_QUALS is
13575    filled in with the cv-qualifier-seq, or TYPE_UNQUALIFIED, if there
13576    are no cv-qualifiers.  Returns ERROR_MARK if an error occurred.
13577    Note that the tree codes returned by this function have nothing
13578    to do with the types of trees that will be eventually be created
13579    to represent the pointer or reference type being parsed. They are
13580    just constants with suggestive names. */
13581 static enum tree_code
13582 cp_parser_ptr_operator (cp_parser* parser,
13583                         tree* type,
13584                         cp_cv_quals *cv_quals)
13585 {
13586   enum tree_code code = ERROR_MARK;
13587   cp_token *token;
13588
13589   /* Assume that it's not a pointer-to-member.  */
13590   *type = NULL_TREE;
13591   /* And that there are no cv-qualifiers.  */
13592   *cv_quals = TYPE_UNQUALIFIED;
13593
13594   /* Peek at the next token.  */
13595   token = cp_lexer_peek_token (parser->lexer);
13596
13597   /* If it's a `*', `&' or `&&' we have a pointer or reference.  */
13598   if (token->type == CPP_MULT)
13599     code = INDIRECT_REF;
13600   else if (token->type == CPP_AND)
13601     code = ADDR_EXPR;
13602   else if ((cxx_dialect != cxx98) &&
13603            token->type == CPP_AND_AND) /* C++0x only */
13604     code = NON_LVALUE_EXPR;
13605
13606   if (code != ERROR_MARK)
13607     {
13608       /* Consume the `*', `&' or `&&'.  */
13609       cp_lexer_consume_token (parser->lexer);
13610
13611       /* A `*' can be followed by a cv-qualifier-seq, and so can a
13612          `&', if we are allowing GNU extensions.  (The only qualifier
13613          that can legally appear after `&' is `restrict', but that is
13614          enforced during semantic analysis.  */
13615       if (code == INDIRECT_REF
13616           || cp_parser_allow_gnu_extensions_p (parser))
13617         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
13618     }
13619   else
13620     {
13621       /* Try the pointer-to-member case.  */
13622       cp_parser_parse_tentatively (parser);
13623       /* Look for the optional `::' operator.  */
13624       cp_parser_global_scope_opt (parser,
13625                                   /*current_scope_valid_p=*/false);
13626       /* Look for the nested-name specifier.  */
13627       token = cp_lexer_peek_token (parser->lexer);
13628       cp_parser_nested_name_specifier (parser,
13629                                        /*typename_keyword_p=*/false,
13630                                        /*check_dependency_p=*/true,
13631                                        /*type_p=*/false,
13632                                        /*is_declaration=*/false);
13633       /* If we found it, and the next token is a `*', then we are
13634          indeed looking at a pointer-to-member operator.  */
13635       if (!cp_parser_error_occurred (parser)
13636           && cp_parser_require (parser, CPP_MULT, "%<*%>"))
13637         {
13638           /* Indicate that the `*' operator was used.  */
13639           code = INDIRECT_REF;
13640
13641           if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
13642             error ("%H%qD is a namespace", &token->location, parser->scope);
13643           else
13644             {
13645               /* The type of which the member is a member is given by the
13646                  current SCOPE.  */
13647               *type = parser->scope;
13648               /* The next name will not be qualified.  */
13649               parser->scope = NULL_TREE;
13650               parser->qualifying_scope = NULL_TREE;
13651               parser->object_scope = NULL_TREE;
13652               /* Look for the optional cv-qualifier-seq.  */
13653               *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
13654             }
13655         }
13656       /* If that didn't work we don't have a ptr-operator.  */
13657       if (!cp_parser_parse_definitely (parser))
13658         cp_parser_error (parser, "expected ptr-operator");
13659     }
13660
13661   return code;
13662 }
13663
13664 /* Parse an (optional) cv-qualifier-seq.
13665
13666    cv-qualifier-seq:
13667      cv-qualifier cv-qualifier-seq [opt]
13668
13669    cv-qualifier:
13670      const
13671      volatile
13672
13673    GNU Extension:
13674
13675    cv-qualifier:
13676      __restrict__
13677
13678    Returns a bitmask representing the cv-qualifiers.  */
13679
13680 static cp_cv_quals
13681 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
13682 {
13683   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
13684
13685   while (true)
13686     {
13687       cp_token *token;
13688       cp_cv_quals cv_qualifier;
13689
13690       /* Peek at the next token.  */
13691       token = cp_lexer_peek_token (parser->lexer);
13692       /* See if it's a cv-qualifier.  */
13693       switch (token->keyword)
13694         {
13695         case RID_CONST:
13696           cv_qualifier = TYPE_QUAL_CONST;
13697           break;
13698
13699         case RID_VOLATILE:
13700           cv_qualifier = TYPE_QUAL_VOLATILE;
13701           break;
13702
13703         case RID_RESTRICT:
13704           cv_qualifier = TYPE_QUAL_RESTRICT;
13705           break;
13706
13707         default:
13708           cv_qualifier = TYPE_UNQUALIFIED;
13709           break;
13710         }
13711
13712       if (!cv_qualifier)
13713         break;
13714
13715       if (cv_quals & cv_qualifier)
13716         {
13717           error ("%Hduplicate cv-qualifier", &token->location);
13718           cp_lexer_purge_token (parser->lexer);
13719         }
13720       else
13721         {
13722           cp_lexer_consume_token (parser->lexer);
13723           cv_quals |= cv_qualifier;
13724         }
13725     }
13726
13727   return cv_quals;
13728 }
13729
13730 /* Parse a late-specified return type, if any.  This is not a separate
13731    non-terminal, but part of a function declarator, which looks like
13732
13733    -> type-id
13734
13735    Returns the type indicated by the type-id.  */
13736
13737 static tree
13738 cp_parser_late_return_type_opt (cp_parser* parser)
13739 {
13740   cp_token *token;
13741
13742   /* Peek at the next token.  */
13743   token = cp_lexer_peek_token (parser->lexer);
13744   /* A late-specified return type is indicated by an initial '->'. */
13745   if (token->type != CPP_DEREF)
13746     return NULL_TREE;
13747
13748   /* Consume the ->.  */
13749   cp_lexer_consume_token (parser->lexer);
13750
13751   return cp_parser_type_id (parser);
13752 }
13753
13754 /* Parse a declarator-id.
13755
13756    declarator-id:
13757      id-expression
13758      :: [opt] nested-name-specifier [opt] type-name
13759
13760    In the `id-expression' case, the value returned is as for
13761    cp_parser_id_expression if the id-expression was an unqualified-id.
13762    If the id-expression was a qualified-id, then a SCOPE_REF is
13763    returned.  The first operand is the scope (either a NAMESPACE_DECL
13764    or TREE_TYPE), but the second is still just a representation of an
13765    unqualified-id.  */
13766
13767 static tree
13768 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
13769 {
13770   tree id;
13771   /* The expression must be an id-expression.  Assume that qualified
13772      names are the names of types so that:
13773
13774        template <class T>
13775        int S<T>::R::i = 3;
13776
13777      will work; we must treat `S<T>::R' as the name of a type.
13778      Similarly, assume that qualified names are templates, where
13779      required, so that:
13780
13781        template <class T>
13782        int S<T>::R<T>::i = 3;
13783
13784      will work, too.  */
13785   id = cp_parser_id_expression (parser,
13786                                 /*template_keyword_p=*/false,
13787                                 /*check_dependency_p=*/false,
13788                                 /*template_p=*/NULL,
13789                                 /*declarator_p=*/true,
13790                                 optional_p);
13791   if (id && BASELINK_P (id))
13792     id = BASELINK_FUNCTIONS (id);
13793   return id;
13794 }
13795
13796 /* Parse a type-id.
13797
13798    type-id:
13799      type-specifier-seq abstract-declarator [opt]
13800
13801    Returns the TYPE specified.  */
13802
13803 static tree
13804 cp_parser_type_id_1 (cp_parser* parser, bool is_template_arg)
13805 {
13806   cp_decl_specifier_seq type_specifier_seq;
13807   cp_declarator *abstract_declarator;
13808
13809   /* Parse the type-specifier-seq.  */
13810   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
13811                                 &type_specifier_seq);
13812   if (type_specifier_seq.type == error_mark_node)
13813     return error_mark_node;
13814
13815   /* There might or might not be an abstract declarator.  */
13816   cp_parser_parse_tentatively (parser);
13817   /* Look for the declarator.  */
13818   abstract_declarator
13819     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
13820                             /*parenthesized_p=*/NULL,
13821                             /*member_p=*/false);
13822   /* Check to see if there really was a declarator.  */
13823   if (!cp_parser_parse_definitely (parser))
13824     abstract_declarator = NULL;
13825
13826   if (type_specifier_seq.type
13827       && type_uses_auto (type_specifier_seq.type))
13828     {
13829       error ("invalid use of %<auto%>");
13830       return error_mark_node;
13831     }
13832   
13833   return groktypename (&type_specifier_seq, abstract_declarator,
13834                        is_template_arg);
13835 }
13836
13837 static tree cp_parser_type_id (cp_parser *parser)
13838 {
13839   return cp_parser_type_id_1 (parser, false);
13840 }
13841
13842 static tree cp_parser_template_type_arg (cp_parser *parser)
13843 {
13844   return cp_parser_type_id_1 (parser, true);
13845 }
13846
13847 /* Parse a type-specifier-seq.
13848
13849    type-specifier-seq:
13850      type-specifier type-specifier-seq [opt]
13851
13852    GNU extension:
13853
13854    type-specifier-seq:
13855      attributes type-specifier-seq [opt]
13856
13857    If IS_CONDITION is true, we are at the start of a "condition",
13858    e.g., we've just seen "if (".
13859
13860    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
13861
13862 static void
13863 cp_parser_type_specifier_seq (cp_parser* parser,
13864                               bool is_condition,
13865                               cp_decl_specifier_seq *type_specifier_seq)
13866 {
13867   bool seen_type_specifier = false;
13868   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
13869   cp_token *start_token = NULL;
13870
13871   /* Clear the TYPE_SPECIFIER_SEQ.  */
13872   clear_decl_specs (type_specifier_seq);
13873
13874   /* Parse the type-specifiers and attributes.  */
13875   while (true)
13876     {
13877       tree type_specifier;
13878       bool is_cv_qualifier;
13879
13880       /* Check for attributes first.  */
13881       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
13882         {
13883           type_specifier_seq->attributes =
13884             chainon (type_specifier_seq->attributes,
13885                      cp_parser_attributes_opt (parser));
13886           continue;
13887         }
13888
13889       /* record the token of the beginning of the type specifier seq,
13890          for error reporting purposes*/
13891      if (!start_token)
13892        start_token = cp_lexer_peek_token (parser->lexer);
13893
13894       /* Look for the type-specifier.  */
13895       type_specifier = cp_parser_type_specifier (parser,
13896                                                  flags,
13897                                                  type_specifier_seq,
13898                                                  /*is_declaration=*/false,
13899                                                  NULL,
13900                                                  &is_cv_qualifier);
13901       if (!type_specifier)
13902         {
13903           /* If the first type-specifier could not be found, this is not a
13904              type-specifier-seq at all.  */
13905           if (!seen_type_specifier)
13906             {
13907               cp_parser_error (parser, "expected type-specifier");
13908               type_specifier_seq->type = error_mark_node;
13909               return;
13910             }
13911           /* If subsequent type-specifiers could not be found, the
13912              type-specifier-seq is complete.  */
13913           break;
13914         }
13915
13916       seen_type_specifier = true;
13917       /* The standard says that a condition can be:
13918
13919             type-specifier-seq declarator = assignment-expression
13920
13921          However, given:
13922
13923            struct S {};
13924            if (int S = ...)
13925
13926          we should treat the "S" as a declarator, not as a
13927          type-specifier.  The standard doesn't say that explicitly for
13928          type-specifier-seq, but it does say that for
13929          decl-specifier-seq in an ordinary declaration.  Perhaps it
13930          would be clearer just to allow a decl-specifier-seq here, and
13931          then add a semantic restriction that if any decl-specifiers
13932          that are not type-specifiers appear, the program is invalid.  */
13933       if (is_condition && !is_cv_qualifier)
13934         flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
13935     }
13936
13937   cp_parser_check_decl_spec (type_specifier_seq, start_token->location);
13938 }
13939
13940 /* Parse a parameter-declaration-clause.
13941
13942    parameter-declaration-clause:
13943      parameter-declaration-list [opt] ... [opt]
13944      parameter-declaration-list , ...
13945
13946    Returns a representation for the parameter declarations.  A return
13947    value of NULL indicates a parameter-declaration-clause consisting
13948    only of an ellipsis.  */
13949
13950 static tree
13951 cp_parser_parameter_declaration_clause (cp_parser* parser)
13952 {
13953   tree parameters;
13954   cp_token *token;
13955   bool ellipsis_p;
13956   bool is_error;
13957
13958   /* Peek at the next token.  */
13959   token = cp_lexer_peek_token (parser->lexer);
13960   /* Check for trivial parameter-declaration-clauses.  */
13961   if (token->type == CPP_ELLIPSIS)
13962     {
13963       /* Consume the `...' token.  */
13964       cp_lexer_consume_token (parser->lexer);
13965       return NULL_TREE;
13966     }
13967   else if (token->type == CPP_CLOSE_PAREN)
13968     /* There are no parameters.  */
13969     {
13970 #ifndef NO_IMPLICIT_EXTERN_C
13971       if (in_system_header && current_class_type == NULL
13972           && current_lang_name == lang_name_c)
13973         return NULL_TREE;
13974       else
13975 #endif
13976         return void_list_node;
13977     }
13978   /* Check for `(void)', too, which is a special case.  */
13979   else if (token->keyword == RID_VOID
13980            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
13981                == CPP_CLOSE_PAREN))
13982     {
13983       /* Consume the `void' token.  */
13984       cp_lexer_consume_token (parser->lexer);
13985       /* There are no parameters.  */
13986       return void_list_node;
13987     }
13988
13989   /* Parse the parameter-declaration-list.  */
13990   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
13991   /* If a parse error occurred while parsing the
13992      parameter-declaration-list, then the entire
13993      parameter-declaration-clause is erroneous.  */
13994   if (is_error)
13995     return NULL;
13996
13997   /* Peek at the next token.  */
13998   token = cp_lexer_peek_token (parser->lexer);
13999   /* If it's a `,', the clause should terminate with an ellipsis.  */
14000   if (token->type == CPP_COMMA)
14001     {
14002       /* Consume the `,'.  */
14003       cp_lexer_consume_token (parser->lexer);
14004       /* Expect an ellipsis.  */
14005       ellipsis_p
14006         = (cp_parser_require (parser, CPP_ELLIPSIS, "%<...%>") != NULL);
14007     }
14008   /* It might also be `...' if the optional trailing `,' was
14009      omitted.  */
14010   else if (token->type == CPP_ELLIPSIS)
14011     {
14012       /* Consume the `...' token.  */
14013       cp_lexer_consume_token (parser->lexer);
14014       /* And remember that we saw it.  */
14015       ellipsis_p = true;
14016     }
14017   else
14018     ellipsis_p = false;
14019
14020   /* Finish the parameter list.  */
14021   if (!ellipsis_p)
14022     parameters = chainon (parameters, void_list_node);
14023
14024   return parameters;
14025 }
14026
14027 /* Parse a parameter-declaration-list.
14028
14029    parameter-declaration-list:
14030      parameter-declaration
14031      parameter-declaration-list , parameter-declaration
14032
14033    Returns a representation of the parameter-declaration-list, as for
14034    cp_parser_parameter_declaration_clause.  However, the
14035    `void_list_node' is never appended to the list.  Upon return,
14036    *IS_ERROR will be true iff an error occurred.  */
14037
14038 static tree
14039 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
14040 {
14041   tree parameters = NULL_TREE;
14042   tree *tail = &parameters; 
14043   bool saved_in_unbraced_linkage_specification_p;
14044
14045   /* Assume all will go well.  */
14046   *is_error = false;
14047   /* The special considerations that apply to a function within an
14048      unbraced linkage specifications do not apply to the parameters
14049      to the function.  */
14050   saved_in_unbraced_linkage_specification_p 
14051     = parser->in_unbraced_linkage_specification_p;
14052   parser->in_unbraced_linkage_specification_p = false;
14053
14054   /* Look for more parameters.  */
14055   while (true)
14056     {
14057       cp_parameter_declarator *parameter;
14058       tree decl = error_mark_node;
14059       bool parenthesized_p;
14060       /* Parse the parameter.  */
14061       parameter
14062         = cp_parser_parameter_declaration (parser,
14063                                            /*template_parm_p=*/false,
14064                                            &parenthesized_p);
14065
14066       /* We don't know yet if the enclosing context is deprecated, so wait
14067          and warn in grokparms if appropriate.  */
14068       deprecated_state = DEPRECATED_SUPPRESS;
14069
14070       if (parameter)
14071         decl = grokdeclarator (parameter->declarator,
14072                                &parameter->decl_specifiers,
14073                                PARM,
14074                                parameter->default_argument != NULL_TREE,
14075                                &parameter->decl_specifiers.attributes);
14076
14077       deprecated_state = DEPRECATED_NORMAL;
14078
14079       /* If a parse error occurred parsing the parameter declaration,
14080          then the entire parameter-declaration-list is erroneous.  */
14081       if (decl == error_mark_node)
14082         {
14083           *is_error = true;
14084           parameters = error_mark_node;
14085           break;
14086         }
14087
14088       if (parameter->decl_specifiers.attributes)
14089         cplus_decl_attributes (&decl,
14090                                parameter->decl_specifiers.attributes,
14091                                0);
14092       if (DECL_NAME (decl))
14093         decl = pushdecl (decl);
14094
14095       /* Add the new parameter to the list.  */
14096       *tail = build_tree_list (parameter->default_argument, decl);
14097       tail = &TREE_CHAIN (*tail);
14098
14099       /* Peek at the next token.  */
14100       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
14101           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
14102           /* These are for Objective-C++ */
14103           || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
14104           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
14105         /* The parameter-declaration-list is complete.  */
14106         break;
14107       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
14108         {
14109           cp_token *token;
14110
14111           /* Peek at the next token.  */
14112           token = cp_lexer_peek_nth_token (parser->lexer, 2);
14113           /* If it's an ellipsis, then the list is complete.  */
14114           if (token->type == CPP_ELLIPSIS)
14115             break;
14116           /* Otherwise, there must be more parameters.  Consume the
14117              `,'.  */
14118           cp_lexer_consume_token (parser->lexer);
14119           /* When parsing something like:
14120
14121                 int i(float f, double d)
14122
14123              we can tell after seeing the declaration for "f" that we
14124              are not looking at an initialization of a variable "i",
14125              but rather at the declaration of a function "i".
14126
14127              Due to the fact that the parsing of template arguments
14128              (as specified to a template-id) requires backtracking we
14129              cannot use this technique when inside a template argument
14130              list.  */
14131           if (!parser->in_template_argument_list_p
14132               && !parser->in_type_id_in_expr_p
14133               && cp_parser_uncommitted_to_tentative_parse_p (parser)
14134               /* However, a parameter-declaration of the form
14135                  "foat(f)" (which is a valid declaration of a
14136                  parameter "f") can also be interpreted as an
14137                  expression (the conversion of "f" to "float").  */
14138               && !parenthesized_p)
14139             cp_parser_commit_to_tentative_parse (parser);
14140         }
14141       else
14142         {
14143           cp_parser_error (parser, "expected %<,%> or %<...%>");
14144           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
14145             cp_parser_skip_to_closing_parenthesis (parser,
14146                                                    /*recovering=*/true,
14147                                                    /*or_comma=*/false,
14148                                                    /*consume_paren=*/false);
14149           break;
14150         }
14151     }
14152
14153   parser->in_unbraced_linkage_specification_p
14154     = saved_in_unbraced_linkage_specification_p;
14155
14156   return parameters;
14157 }
14158
14159 /* Parse a parameter declaration.
14160
14161    parameter-declaration:
14162      decl-specifier-seq ... [opt] declarator
14163      decl-specifier-seq declarator = assignment-expression
14164      decl-specifier-seq ... [opt] abstract-declarator [opt]
14165      decl-specifier-seq abstract-declarator [opt] = assignment-expression
14166
14167    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
14168    declares a template parameter.  (In that case, a non-nested `>'
14169    token encountered during the parsing of the assignment-expression
14170    is not interpreted as a greater-than operator.)
14171
14172    Returns a representation of the parameter, or NULL if an error
14173    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
14174    true iff the declarator is of the form "(p)".  */
14175
14176 static cp_parameter_declarator *
14177 cp_parser_parameter_declaration (cp_parser *parser,
14178                                  bool template_parm_p,
14179                                  bool *parenthesized_p)
14180 {
14181   int declares_class_or_enum;
14182   bool greater_than_is_operator_p;
14183   cp_decl_specifier_seq decl_specifiers;
14184   cp_declarator *declarator;
14185   tree default_argument;
14186   cp_token *token = NULL, *declarator_token_start = NULL;
14187   const char *saved_message;
14188
14189   /* In a template parameter, `>' is not an operator.
14190
14191      [temp.param]
14192
14193      When parsing a default template-argument for a non-type
14194      template-parameter, the first non-nested `>' is taken as the end
14195      of the template parameter-list rather than a greater-than
14196      operator.  */
14197   greater_than_is_operator_p = !template_parm_p;
14198
14199   /* Type definitions may not appear in parameter types.  */
14200   saved_message = parser->type_definition_forbidden_message;
14201   parser->type_definition_forbidden_message
14202     = "types may not be defined in parameter types";
14203
14204   /* Parse the declaration-specifiers.  */
14205   cp_parser_decl_specifier_seq (parser,
14206                                 CP_PARSER_FLAGS_NONE,
14207                                 &decl_specifiers,
14208                                 &declares_class_or_enum);
14209   /* If an error occurred, there's no reason to attempt to parse the
14210      rest of the declaration.  */
14211   if (cp_parser_error_occurred (parser))
14212     {
14213       parser->type_definition_forbidden_message = saved_message;
14214       return NULL;
14215     }
14216
14217   /* Peek at the next token.  */
14218   token = cp_lexer_peek_token (parser->lexer);
14219
14220   /* If the next token is a `)', `,', `=', `>', or `...', then there
14221      is no declarator. However, when variadic templates are enabled,
14222      there may be a declarator following `...'.  */
14223   if (token->type == CPP_CLOSE_PAREN
14224       || token->type == CPP_COMMA
14225       || token->type == CPP_EQ
14226       || token->type == CPP_GREATER)
14227     {
14228       declarator = NULL;
14229       if (parenthesized_p)
14230         *parenthesized_p = false;
14231     }
14232   /* Otherwise, there should be a declarator.  */
14233   else
14234     {
14235       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
14236       parser->default_arg_ok_p = false;
14237
14238       /* After seeing a decl-specifier-seq, if the next token is not a
14239          "(", there is no possibility that the code is a valid
14240          expression.  Therefore, if parsing tentatively, we commit at
14241          this point.  */
14242       if (!parser->in_template_argument_list_p
14243           /* In an expression context, having seen:
14244
14245                (int((char ...
14246
14247              we cannot be sure whether we are looking at a
14248              function-type (taking a "char" as a parameter) or a cast
14249              of some object of type "char" to "int".  */
14250           && !parser->in_type_id_in_expr_p
14251           && cp_parser_uncommitted_to_tentative_parse_p (parser)
14252           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
14253         cp_parser_commit_to_tentative_parse (parser);
14254       /* Parse the declarator.  */
14255       declarator_token_start = token;
14256       declarator = cp_parser_declarator (parser,
14257                                          CP_PARSER_DECLARATOR_EITHER,
14258                                          /*ctor_dtor_or_conv_p=*/NULL,
14259                                          parenthesized_p,
14260                                          /*member_p=*/false);
14261       parser->default_arg_ok_p = saved_default_arg_ok_p;
14262       /* After the declarator, allow more attributes.  */
14263       decl_specifiers.attributes
14264         = chainon (decl_specifiers.attributes,
14265                    cp_parser_attributes_opt (parser));
14266     }
14267
14268   /* If the next token is an ellipsis, and we have not seen a
14269      declarator name, and the type of the declarator contains parameter
14270      packs but it is not a TYPE_PACK_EXPANSION, then we actually have
14271      a parameter pack expansion expression. Otherwise, leave the
14272      ellipsis for a C-style variadic function. */
14273   token = cp_lexer_peek_token (parser->lexer);
14274   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
14275     {
14276       tree type = decl_specifiers.type;
14277
14278       if (type && DECL_P (type))
14279         type = TREE_TYPE (type);
14280
14281       if (type
14282           && TREE_CODE (type) != TYPE_PACK_EXPANSION
14283           && declarator_can_be_parameter_pack (declarator)
14284           && (!declarator || !declarator->parameter_pack_p)
14285           && uses_parameter_packs (type))
14286         {
14287           /* Consume the `...'. */
14288           cp_lexer_consume_token (parser->lexer);
14289           maybe_warn_variadic_templates ();
14290           
14291           /* Build a pack expansion type */
14292           if (declarator)
14293             declarator->parameter_pack_p = true;
14294           else
14295             decl_specifiers.type = make_pack_expansion (type);
14296         }
14297     }
14298
14299   /* The restriction on defining new types applies only to the type
14300      of the parameter, not to the default argument.  */
14301   parser->type_definition_forbidden_message = saved_message;
14302
14303   /* If the next token is `=', then process a default argument.  */
14304   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
14305     {
14306       /* Consume the `='.  */
14307       cp_lexer_consume_token (parser->lexer);
14308
14309       /* If we are defining a class, then the tokens that make up the
14310          default argument must be saved and processed later.  */
14311       if (!template_parm_p && at_class_scope_p ()
14312           && TYPE_BEING_DEFINED (current_class_type))
14313         {
14314           unsigned depth = 0;
14315           int maybe_template_id = 0;
14316           cp_token *first_token;
14317           cp_token *token;
14318
14319           /* Add tokens until we have processed the entire default
14320              argument.  We add the range [first_token, token).  */
14321           first_token = cp_lexer_peek_token (parser->lexer);
14322           while (true)
14323             {
14324               bool done = false;
14325
14326               /* Peek at the next token.  */
14327               token = cp_lexer_peek_token (parser->lexer);
14328               /* What we do depends on what token we have.  */
14329               switch (token->type)
14330                 {
14331                   /* In valid code, a default argument must be
14332                      immediately followed by a `,' `)', or `...'.  */
14333                 case CPP_COMMA:
14334                   if (depth == 0 && maybe_template_id)
14335                     {
14336                       /* If we've seen a '<', we might be in a
14337                          template-argument-list.  Until Core issue 325 is
14338                          resolved, we don't know how this situation ought
14339                          to be handled, so try to DTRT.  We check whether
14340                          what comes after the comma is a valid parameter
14341                          declaration list.  If it is, then the comma ends
14342                          the default argument; otherwise the default
14343                          argument continues.  */
14344                       bool error = false;
14345
14346                       /* Set ITALP so cp_parser_parameter_declaration_list
14347                          doesn't decide to commit to this parse.  */
14348                       bool saved_italp = parser->in_template_argument_list_p;
14349                       parser->in_template_argument_list_p = true;
14350
14351                       cp_parser_parse_tentatively (parser);
14352                       cp_lexer_consume_token (parser->lexer);
14353                       cp_parser_parameter_declaration_list (parser, &error);
14354                       if (!cp_parser_error_occurred (parser) && !error)
14355                         done = true;
14356                       cp_parser_abort_tentative_parse (parser);
14357
14358                       parser->in_template_argument_list_p = saved_italp;
14359                       break;
14360                     }
14361                 case CPP_CLOSE_PAREN:
14362                 case CPP_ELLIPSIS:
14363                   /* If we run into a non-nested `;', `}', or `]',
14364                      then the code is invalid -- but the default
14365                      argument is certainly over.  */
14366                 case CPP_SEMICOLON:
14367                 case CPP_CLOSE_BRACE:
14368                 case CPP_CLOSE_SQUARE:
14369                   if (depth == 0)
14370                     done = true;
14371                   /* Update DEPTH, if necessary.  */
14372                   else if (token->type == CPP_CLOSE_PAREN
14373                            || token->type == CPP_CLOSE_BRACE
14374                            || token->type == CPP_CLOSE_SQUARE)
14375                     --depth;
14376                   break;
14377
14378                 case CPP_OPEN_PAREN:
14379                 case CPP_OPEN_SQUARE:
14380                 case CPP_OPEN_BRACE:
14381                   ++depth;
14382                   break;
14383
14384                 case CPP_LESS:
14385                   if (depth == 0)
14386                     /* This might be the comparison operator, or it might
14387                        start a template argument list.  */
14388                     ++maybe_template_id;
14389                   break;
14390
14391                 case CPP_RSHIFT:
14392                   if (cxx_dialect == cxx98)
14393                     break;
14394                   /* Fall through for C++0x, which treats the `>>'
14395                      operator like two `>' tokens in certain
14396                      cases.  */
14397
14398                 case CPP_GREATER:
14399                   if (depth == 0)
14400                     {
14401                       /* This might be an operator, or it might close a
14402                          template argument list.  But if a previous '<'
14403                          started a template argument list, this will have
14404                          closed it, so we can't be in one anymore.  */
14405                       maybe_template_id -= 1 + (token->type == CPP_RSHIFT);
14406                       if (maybe_template_id < 0)
14407                         maybe_template_id = 0;
14408                     }
14409                   break;
14410
14411                   /* If we run out of tokens, issue an error message.  */
14412                 case CPP_EOF:
14413                 case CPP_PRAGMA_EOL:
14414                   error ("%Hfile ends in default argument", &token->location);
14415                   done = true;
14416                   break;
14417
14418                 case CPP_NAME:
14419                 case CPP_SCOPE:
14420                   /* In these cases, we should look for template-ids.
14421                      For example, if the default argument is
14422                      `X<int, double>()', we need to do name lookup to
14423                      figure out whether or not `X' is a template; if
14424                      so, the `,' does not end the default argument.
14425
14426                      That is not yet done.  */
14427                   break;
14428
14429                 default:
14430                   break;
14431                 }
14432
14433               /* If we've reached the end, stop.  */
14434               if (done)
14435                 break;
14436
14437               /* Add the token to the token block.  */
14438               token = cp_lexer_consume_token (parser->lexer);
14439             }
14440
14441           /* Create a DEFAULT_ARG to represent the unparsed default
14442              argument.  */
14443           default_argument = make_node (DEFAULT_ARG);
14444           DEFARG_TOKENS (default_argument)
14445             = cp_token_cache_new (first_token, token);
14446           DEFARG_INSTANTIATIONS (default_argument) = NULL;
14447         }
14448       /* Outside of a class definition, we can just parse the
14449          assignment-expression.  */
14450       else
14451         {
14452           token = cp_lexer_peek_token (parser->lexer);
14453           default_argument 
14454             = cp_parser_default_argument (parser, template_parm_p);
14455         }
14456
14457       if (!parser->default_arg_ok_p)
14458         {
14459           if (flag_permissive)
14460             warning (0, "deprecated use of default argument for parameter of non-function");
14461           else
14462             {
14463               error ("%Hdefault arguments are only "
14464                      "permitted for function parameters",
14465                      &token->location);
14466               default_argument = NULL_TREE;
14467             }
14468         }
14469       else if ((declarator && declarator->parameter_pack_p)
14470                || (decl_specifiers.type
14471                    && PACK_EXPANSION_P (decl_specifiers.type)))
14472         {
14473           const char* kind = template_parm_p? "template " : "";
14474           
14475           /* Find the name of the parameter pack.  */     
14476           cp_declarator *id_declarator = declarator;
14477           while (id_declarator && id_declarator->kind != cdk_id)
14478             id_declarator = id_declarator->declarator;
14479           
14480           if (id_declarator && id_declarator->kind == cdk_id)
14481             error ("%H%sparameter pack %qD cannot have a default argument",
14482                    &declarator_token_start->location,
14483                    kind, id_declarator->u.id.unqualified_name);
14484           else
14485             error ("%H%sparameter pack cannot have a default argument",
14486                    &declarator_token_start->location, kind);
14487           
14488           default_argument = NULL_TREE;
14489         }
14490     }
14491   else
14492     default_argument = NULL_TREE;
14493
14494   return make_parameter_declarator (&decl_specifiers,
14495                                     declarator,
14496                                     default_argument);
14497 }
14498
14499 /* Parse a default argument and return it.
14500
14501    TEMPLATE_PARM_P is true if this is a default argument for a
14502    non-type template parameter.  */
14503 static tree
14504 cp_parser_default_argument (cp_parser *parser, bool template_parm_p)
14505 {
14506   tree default_argument = NULL_TREE;
14507   bool saved_greater_than_is_operator_p;
14508   bool saved_local_variables_forbidden_p;
14509
14510   /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
14511      set correctly.  */
14512   saved_greater_than_is_operator_p = parser->greater_than_is_operator_p;
14513   parser->greater_than_is_operator_p = !template_parm_p;
14514   /* Local variable names (and the `this' keyword) may not
14515      appear in a default argument.  */
14516   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
14517   parser->local_variables_forbidden_p = true;
14518   /* The default argument expression may cause implicitly
14519      defined member functions to be synthesized, which will
14520      result in garbage collection.  We must treat this
14521      situation as if we were within the body of function so as
14522      to avoid collecting live data on the stack.  */
14523   ++function_depth;
14524   /* Parse the assignment-expression.  */
14525   if (template_parm_p)
14526     push_deferring_access_checks (dk_no_deferred);
14527   default_argument
14528     = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
14529   if (template_parm_p)
14530     pop_deferring_access_checks ();
14531   /* Restore saved state.  */
14532   --function_depth;
14533   parser->greater_than_is_operator_p = saved_greater_than_is_operator_p;
14534   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
14535
14536   return default_argument;
14537 }
14538
14539 /* Parse a function-body.
14540
14541    function-body:
14542      compound_statement  */
14543
14544 static void
14545 cp_parser_function_body (cp_parser *parser)
14546 {
14547   cp_parser_compound_statement (parser, NULL, false);
14548 }
14549
14550 /* Parse a ctor-initializer-opt followed by a function-body.  Return
14551    true if a ctor-initializer was present.  */
14552
14553 static bool
14554 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
14555 {
14556   tree body;
14557   bool ctor_initializer_p;
14558
14559   /* Begin the function body.  */
14560   body = begin_function_body ();
14561   /* Parse the optional ctor-initializer.  */
14562   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
14563   /* Parse the function-body.  */
14564   cp_parser_function_body (parser);
14565   /* Finish the function body.  */
14566   finish_function_body (body);
14567
14568   return ctor_initializer_p;
14569 }
14570
14571 /* Parse an initializer.
14572
14573    initializer:
14574      = initializer-clause
14575      ( expression-list )
14576
14577    Returns an expression representing the initializer.  If no
14578    initializer is present, NULL_TREE is returned.
14579
14580    *IS_DIRECT_INIT is set to FALSE if the `= initializer-clause'
14581    production is used, and TRUE otherwise.  *IS_DIRECT_INIT is
14582    set to TRUE if there is no initializer present.  If there is an
14583    initializer, and it is not a constant-expression, *NON_CONSTANT_P
14584    is set to true; otherwise it is set to false.  */
14585
14586 static tree
14587 cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
14588                        bool* non_constant_p)
14589 {
14590   cp_token *token;
14591   tree init;
14592
14593   /* Peek at the next token.  */
14594   token = cp_lexer_peek_token (parser->lexer);
14595
14596   /* Let our caller know whether or not this initializer was
14597      parenthesized.  */
14598   *is_direct_init = (token->type != CPP_EQ);
14599   /* Assume that the initializer is constant.  */
14600   *non_constant_p = false;
14601
14602   if (token->type == CPP_EQ)
14603     {
14604       /* Consume the `='.  */
14605       cp_lexer_consume_token (parser->lexer);
14606       /* Parse the initializer-clause.  */
14607       init = cp_parser_initializer_clause (parser, non_constant_p);
14608     }
14609   else if (token->type == CPP_OPEN_PAREN)
14610     {
14611       VEC(tree,gc) *vec;
14612       vec = cp_parser_parenthesized_expression_list (parser, false,
14613                                                      /*cast_p=*/false,
14614                                                      /*allow_expansion_p=*/true,
14615                                                      non_constant_p);
14616       if (vec == NULL)
14617         return error_mark_node;
14618       init = build_tree_list_vec (vec);
14619       release_tree_vector (vec);
14620     }
14621   else if (token->type == CPP_OPEN_BRACE)
14622     {
14623       maybe_warn_cpp0x ("extended initializer lists");
14624       init = cp_parser_braced_list (parser, non_constant_p);
14625       CONSTRUCTOR_IS_DIRECT_INIT (init) = 1;
14626     }
14627   else
14628     {
14629       /* Anything else is an error.  */
14630       cp_parser_error (parser, "expected initializer");
14631       init = error_mark_node;
14632     }
14633
14634   return init;
14635 }
14636
14637 /* Parse an initializer-clause.
14638
14639    initializer-clause:
14640      assignment-expression
14641      braced-init-list
14642
14643    Returns an expression representing the initializer.
14644
14645    If the `assignment-expression' production is used the value
14646    returned is simply a representation for the expression.
14647
14648    Otherwise, calls cp_parser_braced_list.  */
14649
14650 static tree
14651 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
14652 {
14653   tree initializer;
14654
14655   /* Assume the expression is constant.  */
14656   *non_constant_p = false;
14657
14658   /* If it is not a `{', then we are looking at an
14659      assignment-expression.  */
14660   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
14661     {
14662       initializer
14663         = cp_parser_constant_expression (parser,
14664                                         /*allow_non_constant_p=*/true,
14665                                         non_constant_p);
14666       if (!*non_constant_p)
14667         initializer = fold_non_dependent_expr (initializer);
14668     }
14669   else
14670     initializer = cp_parser_braced_list (parser, non_constant_p);
14671
14672   return initializer;
14673 }
14674
14675 /* Parse a brace-enclosed initializer list.
14676
14677    braced-init-list:
14678      { initializer-list , [opt] }
14679      { }
14680
14681    Returns a CONSTRUCTOR.  The CONSTRUCTOR_ELTS will be
14682    the elements of the initializer-list (or NULL, if the last
14683    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
14684    NULL_TREE.  There is no way to detect whether or not the optional
14685    trailing `,' was provided.  NON_CONSTANT_P is as for
14686    cp_parser_initializer.  */     
14687
14688 static tree
14689 cp_parser_braced_list (cp_parser* parser, bool* non_constant_p)
14690 {
14691   tree initializer;
14692
14693   /* Consume the `{' token.  */
14694   cp_lexer_consume_token (parser->lexer);
14695   /* Create a CONSTRUCTOR to represent the braced-initializer.  */
14696   initializer = make_node (CONSTRUCTOR);
14697   /* If it's not a `}', then there is a non-trivial initializer.  */
14698   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
14699     {
14700       /* Parse the initializer list.  */
14701       CONSTRUCTOR_ELTS (initializer)
14702         = cp_parser_initializer_list (parser, non_constant_p);
14703       /* A trailing `,' token is allowed.  */
14704       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
14705         cp_lexer_consume_token (parser->lexer);
14706     }
14707   /* Now, there should be a trailing `}'.  */
14708   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
14709   TREE_TYPE (initializer) = init_list_type_node;
14710   return initializer;
14711 }
14712
14713 /* Parse an initializer-list.
14714
14715    initializer-list:
14716      initializer-clause ... [opt]
14717      initializer-list , initializer-clause ... [opt]
14718
14719    GNU Extension:
14720
14721    initializer-list:
14722      identifier : initializer-clause
14723      initializer-list, identifier : initializer-clause
14724
14725    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
14726    for the initializer.  If the INDEX of the elt is non-NULL, it is the
14727    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
14728    as for cp_parser_initializer.  */
14729
14730 static VEC(constructor_elt,gc) *
14731 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
14732 {
14733   VEC(constructor_elt,gc) *v = NULL;
14734
14735   /* Assume all of the expressions are constant.  */
14736   *non_constant_p = false;
14737
14738   /* Parse the rest of the list.  */
14739   while (true)
14740     {
14741       cp_token *token;
14742       tree identifier;
14743       tree initializer;
14744       bool clause_non_constant_p;
14745
14746       /* If the next token is an identifier and the following one is a
14747          colon, we are looking at the GNU designated-initializer
14748          syntax.  */
14749       if (cp_parser_allow_gnu_extensions_p (parser)
14750           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
14751           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
14752         {
14753           /* Warn the user that they are using an extension.  */
14754           pedwarn (input_location, OPT_pedantic, 
14755                    "ISO C++ does not allow designated initializers");
14756           /* Consume the identifier.  */
14757           identifier = cp_lexer_consume_token (parser->lexer)->u.value;
14758           /* Consume the `:'.  */
14759           cp_lexer_consume_token (parser->lexer);
14760         }
14761       else
14762         identifier = NULL_TREE;
14763
14764       /* Parse the initializer.  */
14765       initializer = cp_parser_initializer_clause (parser,
14766                                                   &clause_non_constant_p);
14767       /* If any clause is non-constant, so is the entire initializer.  */
14768       if (clause_non_constant_p)
14769         *non_constant_p = true;
14770
14771       /* If we have an ellipsis, this is an initializer pack
14772          expansion.  */
14773       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
14774         {
14775           /* Consume the `...'.  */
14776           cp_lexer_consume_token (parser->lexer);
14777
14778           /* Turn the initializer into an initializer expansion.  */
14779           initializer = make_pack_expansion (initializer);
14780         }
14781
14782       /* Add it to the vector.  */
14783       CONSTRUCTOR_APPEND_ELT(v, identifier, initializer);
14784
14785       /* If the next token is not a comma, we have reached the end of
14786          the list.  */
14787       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14788         break;
14789
14790       /* Peek at the next token.  */
14791       token = cp_lexer_peek_nth_token (parser->lexer, 2);
14792       /* If the next token is a `}', then we're still done.  An
14793          initializer-clause can have a trailing `,' after the
14794          initializer-list and before the closing `}'.  */
14795       if (token->type == CPP_CLOSE_BRACE)
14796         break;
14797
14798       /* Consume the `,' token.  */
14799       cp_lexer_consume_token (parser->lexer);
14800     }
14801
14802   return v;
14803 }
14804
14805 /* Classes [gram.class] */
14806
14807 /* Parse a class-name.
14808
14809    class-name:
14810      identifier
14811      template-id
14812
14813    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
14814    to indicate that names looked up in dependent types should be
14815    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
14816    keyword has been used to indicate that the name that appears next
14817    is a template.  TAG_TYPE indicates the explicit tag given before
14818    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
14819    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
14820    is the class being defined in a class-head.
14821
14822    Returns the TYPE_DECL representing the class.  */
14823
14824 static tree
14825 cp_parser_class_name (cp_parser *parser,
14826                       bool typename_keyword_p,
14827                       bool template_keyword_p,
14828                       enum tag_types tag_type,
14829                       bool check_dependency_p,
14830                       bool class_head_p,
14831                       bool is_declaration)
14832 {
14833   tree decl;
14834   tree scope;
14835   bool typename_p;
14836   cp_token *token;
14837   tree identifier = NULL_TREE;
14838
14839   /* All class-names start with an identifier.  */
14840   token = cp_lexer_peek_token (parser->lexer);
14841   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
14842     {
14843       cp_parser_error (parser, "expected class-name");
14844       return error_mark_node;
14845     }
14846
14847   /* PARSER->SCOPE can be cleared when parsing the template-arguments
14848      to a template-id, so we save it here.  */
14849   scope = parser->scope;
14850   if (scope == error_mark_node)
14851     return error_mark_node;
14852
14853   /* Any name names a type if we're following the `typename' keyword
14854      in a qualified name where the enclosing scope is type-dependent.  */
14855   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
14856                 && dependent_type_p (scope));
14857   /* Handle the common case (an identifier, but not a template-id)
14858      efficiently.  */
14859   if (token->type == CPP_NAME
14860       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
14861     {
14862       cp_token *identifier_token;
14863       bool ambiguous_p;
14864
14865       /* Look for the identifier.  */
14866       identifier_token = cp_lexer_peek_token (parser->lexer);
14867       ambiguous_p = identifier_token->ambiguous_p;
14868       identifier = cp_parser_identifier (parser);
14869       /* If the next token isn't an identifier, we are certainly not
14870          looking at a class-name.  */
14871       if (identifier == error_mark_node)
14872         decl = error_mark_node;
14873       /* If we know this is a type-name, there's no need to look it
14874          up.  */
14875       else if (typename_p)
14876         decl = identifier;
14877       else
14878         {
14879           tree ambiguous_decls;
14880           /* If we already know that this lookup is ambiguous, then
14881              we've already issued an error message; there's no reason
14882              to check again.  */
14883           if (ambiguous_p)
14884             {
14885               cp_parser_simulate_error (parser);
14886               return error_mark_node;
14887             }
14888           /* If the next token is a `::', then the name must be a type
14889              name.
14890
14891              [basic.lookup.qual]
14892
14893              During the lookup for a name preceding the :: scope
14894              resolution operator, object, function, and enumerator
14895              names are ignored.  */
14896           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
14897             tag_type = typename_type;
14898           /* Look up the name.  */
14899           decl = cp_parser_lookup_name (parser, identifier,
14900                                         tag_type,
14901                                         /*is_template=*/false,
14902                                         /*is_namespace=*/false,
14903                                         check_dependency_p,
14904                                         &ambiguous_decls,
14905                                         identifier_token->location);
14906           if (ambiguous_decls)
14907             {
14908               error ("%Hreference to %qD is ambiguous",
14909                      &identifier_token->location, identifier);
14910               print_candidates (ambiguous_decls);
14911               if (cp_parser_parsing_tentatively (parser))
14912                 {
14913                   identifier_token->ambiguous_p = true;
14914                   cp_parser_simulate_error (parser);
14915                 }
14916               return error_mark_node;
14917             }
14918         }
14919     }
14920   else
14921     {
14922       /* Try a template-id.  */
14923       decl = cp_parser_template_id (parser, template_keyword_p,
14924                                     check_dependency_p,
14925                                     is_declaration);
14926       if (decl == error_mark_node)
14927         return error_mark_node;
14928     }
14929
14930   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
14931
14932   /* If this is a typename, create a TYPENAME_TYPE.  */
14933   if (typename_p && decl != error_mark_node)
14934     {
14935       decl = make_typename_type (scope, decl, typename_type,
14936                                  /*complain=*/tf_error);
14937       if (decl != error_mark_node)
14938         decl = TYPE_NAME (decl);
14939     }
14940
14941   /* Check to see that it is really the name of a class.  */
14942   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
14943       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
14944       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
14945     /* Situations like this:
14946
14947          template <typename T> struct A {
14948            typename T::template X<int>::I i;
14949          };
14950
14951        are problematic.  Is `T::template X<int>' a class-name?  The
14952        standard does not seem to be definitive, but there is no other
14953        valid interpretation of the following `::'.  Therefore, those
14954        names are considered class-names.  */
14955     {
14956       decl = make_typename_type (scope, decl, tag_type, tf_error);
14957       if (decl != error_mark_node)
14958         decl = TYPE_NAME (decl);
14959     }
14960   else if (TREE_CODE (decl) != TYPE_DECL
14961            || TREE_TYPE (decl) == error_mark_node
14962            || !MAYBE_CLASS_TYPE_P (TREE_TYPE (decl)))
14963     decl = error_mark_node;
14964
14965   if (decl == error_mark_node)
14966     cp_parser_error (parser, "expected class-name");
14967   else if (identifier && !parser->scope)
14968     maybe_note_name_used_in_class (identifier, decl);
14969
14970   return decl;
14971 }
14972
14973 /* Parse a class-specifier.
14974
14975    class-specifier:
14976      class-head { member-specification [opt] }
14977
14978    Returns the TREE_TYPE representing the class.  */
14979
14980 static tree
14981 cp_parser_class_specifier (cp_parser* parser)
14982 {
14983   tree type;
14984   tree attributes = NULL_TREE;
14985   bool nested_name_specifier_p;
14986   unsigned saved_num_template_parameter_lists;
14987   bool saved_in_function_body;
14988   bool saved_in_unbraced_linkage_specification_p;
14989   tree old_scope = NULL_TREE;
14990   tree scope = NULL_TREE;
14991   tree bases;
14992
14993   push_deferring_access_checks (dk_no_deferred);
14994
14995   /* Parse the class-head.  */
14996   type = cp_parser_class_head (parser,
14997                                &nested_name_specifier_p,
14998                                &attributes,
14999                                &bases);
15000   /* If the class-head was a semantic disaster, skip the entire body
15001      of the class.  */
15002   if (!type)
15003     {
15004       cp_parser_skip_to_end_of_block_or_statement (parser);
15005       pop_deferring_access_checks ();
15006       return error_mark_node;
15007     }
15008
15009   /* Look for the `{'.  */
15010   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>"))
15011     {
15012       pop_deferring_access_checks ();
15013       return error_mark_node;
15014     }
15015
15016   /* Process the base classes. If they're invalid, skip the 
15017      entire class body.  */
15018   if (!xref_basetypes (type, bases))
15019     {
15020       /* Consuming the closing brace yields better error messages
15021          later on.  */
15022       if (cp_parser_skip_to_closing_brace (parser))
15023         cp_lexer_consume_token (parser->lexer);
15024       pop_deferring_access_checks ();
15025       return error_mark_node;
15026     }
15027
15028   /* Issue an error message if type-definitions are forbidden here.  */
15029   cp_parser_check_type_definition (parser);
15030   /* Remember that we are defining one more class.  */
15031   ++parser->num_classes_being_defined;
15032   /* Inside the class, surrounding template-parameter-lists do not
15033      apply.  */
15034   saved_num_template_parameter_lists
15035     = parser->num_template_parameter_lists;
15036   parser->num_template_parameter_lists = 0;
15037   /* We are not in a function body.  */
15038   saved_in_function_body = parser->in_function_body;
15039   parser->in_function_body = false;
15040   /* We are not immediately inside an extern "lang" block.  */
15041   saved_in_unbraced_linkage_specification_p
15042     = parser->in_unbraced_linkage_specification_p;
15043   parser->in_unbraced_linkage_specification_p = false;
15044
15045   /* Start the class.  */
15046   if (nested_name_specifier_p)
15047     {
15048       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
15049       old_scope = push_inner_scope (scope);
15050     }
15051   type = begin_class_definition (type, attributes);
15052
15053   if (type == error_mark_node)
15054     /* If the type is erroneous, skip the entire body of the class.  */
15055     cp_parser_skip_to_closing_brace (parser);
15056   else
15057     /* Parse the member-specification.  */
15058     cp_parser_member_specification_opt (parser);
15059
15060   /* Look for the trailing `}'.  */
15061   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
15062   /* Look for trailing attributes to apply to this class.  */
15063   if (cp_parser_allow_gnu_extensions_p (parser))
15064     attributes = cp_parser_attributes_opt (parser);
15065   if (type != error_mark_node)
15066     type = finish_struct (type, attributes);
15067   if (nested_name_specifier_p)
15068     pop_inner_scope (old_scope, scope);
15069   /* If this class is not itself within the scope of another class,
15070      then we need to parse the bodies of all of the queued function
15071      definitions.  Note that the queued functions defined in a class
15072      are not always processed immediately following the
15073      class-specifier for that class.  Consider:
15074
15075        struct A {
15076          struct B { void f() { sizeof (A); } };
15077        };
15078
15079      If `f' were processed before the processing of `A' were
15080      completed, there would be no way to compute the size of `A'.
15081      Note that the nesting we are interested in here is lexical --
15082      not the semantic nesting given by TYPE_CONTEXT.  In particular,
15083      for:
15084
15085        struct A { struct B; };
15086        struct A::B { void f() { } };
15087
15088      there is no need to delay the parsing of `A::B::f'.  */
15089   if (--parser->num_classes_being_defined == 0)
15090     {
15091       tree queue_entry;
15092       tree fn;
15093       tree class_type = NULL_TREE;
15094       tree pushed_scope = NULL_TREE;
15095
15096       /* In a first pass, parse default arguments to the functions.
15097          Then, in a second pass, parse the bodies of the functions.
15098          This two-phased approach handles cases like:
15099
15100             struct S {
15101               void f() { g(); }
15102               void g(int i = 3);
15103             };
15104
15105          */
15106       for (TREE_PURPOSE (parser->unparsed_functions_queues)
15107              = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
15108            (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
15109            TREE_PURPOSE (parser->unparsed_functions_queues)
15110              = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
15111         {
15112           fn = TREE_VALUE (queue_entry);
15113           /* If there are default arguments that have not yet been processed,
15114              take care of them now.  */
15115           if (class_type != TREE_PURPOSE (queue_entry))
15116             {
15117               if (pushed_scope)
15118                 pop_scope (pushed_scope);
15119               class_type = TREE_PURPOSE (queue_entry);
15120               pushed_scope = push_scope (class_type);
15121             }
15122           /* Make sure that any template parameters are in scope.  */
15123           maybe_begin_member_template_processing (fn);
15124           /* Parse the default argument expressions.  */
15125           cp_parser_late_parsing_default_args (parser, fn);
15126           /* Remove any template parameters from the symbol table.  */
15127           maybe_end_member_template_processing ();
15128         }
15129       if (pushed_scope)
15130         pop_scope (pushed_scope);
15131       /* Now parse the body of the functions.  */
15132       for (TREE_VALUE (parser->unparsed_functions_queues)
15133              = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
15134            (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
15135            TREE_VALUE (parser->unparsed_functions_queues)
15136              = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
15137         {
15138           /* Figure out which function we need to process.  */
15139           fn = TREE_VALUE (queue_entry);
15140           /* Parse the function.  */
15141           cp_parser_late_parsing_for_member (parser, fn);
15142         }
15143     }
15144
15145   /* Put back any saved access checks.  */
15146   pop_deferring_access_checks ();
15147
15148   /* Restore saved state.  */
15149   parser->in_function_body = saved_in_function_body;
15150   parser->num_template_parameter_lists
15151     = saved_num_template_parameter_lists;
15152   parser->in_unbraced_linkage_specification_p
15153     = saved_in_unbraced_linkage_specification_p;
15154
15155   return type;
15156 }
15157
15158 /* Parse a class-head.
15159
15160    class-head:
15161      class-key identifier [opt] base-clause [opt]
15162      class-key nested-name-specifier identifier base-clause [opt]
15163      class-key nested-name-specifier [opt] template-id
15164        base-clause [opt]
15165
15166    GNU Extensions:
15167      class-key attributes identifier [opt] base-clause [opt]
15168      class-key attributes nested-name-specifier identifier base-clause [opt]
15169      class-key attributes nested-name-specifier [opt] template-id
15170        base-clause [opt]
15171
15172    Upon return BASES is initialized to the list of base classes (or
15173    NULL, if there are none) in the same form returned by
15174    cp_parser_base_clause.
15175
15176    Returns the TYPE of the indicated class.  Sets
15177    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
15178    involving a nested-name-specifier was used, and FALSE otherwise.
15179
15180    Returns error_mark_node if this is not a class-head.
15181
15182    Returns NULL_TREE if the class-head is syntactically valid, but
15183    semantically invalid in a way that means we should skip the entire
15184    body of the class.  */
15185
15186 static tree
15187 cp_parser_class_head (cp_parser* parser,
15188                       bool* nested_name_specifier_p,
15189                       tree *attributes_p,
15190                       tree *bases)
15191 {
15192   tree nested_name_specifier;
15193   enum tag_types class_key;
15194   tree id = NULL_TREE;
15195   tree type = NULL_TREE;
15196   tree attributes;
15197   bool template_id_p = false;
15198   bool qualified_p = false;
15199   bool invalid_nested_name_p = false;
15200   bool invalid_explicit_specialization_p = false;
15201   tree pushed_scope = NULL_TREE;
15202   unsigned num_templates;
15203   cp_token *type_start_token = NULL, *nested_name_specifier_token_start = NULL;
15204   /* Assume no nested-name-specifier will be present.  */
15205   *nested_name_specifier_p = false;
15206   /* Assume no template parameter lists will be used in defining the
15207      type.  */
15208   num_templates = 0;
15209
15210   *bases = NULL_TREE;
15211
15212   /* Look for the class-key.  */
15213   class_key = cp_parser_class_key (parser);
15214   if (class_key == none_type)
15215     return error_mark_node;
15216
15217   /* Parse the attributes.  */
15218   attributes = cp_parser_attributes_opt (parser);
15219
15220   /* If the next token is `::', that is invalid -- but sometimes
15221      people do try to write:
15222
15223        struct ::S {};
15224
15225      Handle this gracefully by accepting the extra qualifier, and then
15226      issuing an error about it later if this really is a
15227      class-head.  If it turns out just to be an elaborated type
15228      specifier, remain silent.  */
15229   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
15230     qualified_p = true;
15231
15232   push_deferring_access_checks (dk_no_check);
15233
15234   /* Determine the name of the class.  Begin by looking for an
15235      optional nested-name-specifier.  */
15236   nested_name_specifier_token_start = cp_lexer_peek_token (parser->lexer);
15237   nested_name_specifier
15238     = cp_parser_nested_name_specifier_opt (parser,
15239                                            /*typename_keyword_p=*/false,
15240                                            /*check_dependency_p=*/false,
15241                                            /*type_p=*/false,
15242                                            /*is_declaration=*/false);
15243   /* If there was a nested-name-specifier, then there *must* be an
15244      identifier.  */
15245   if (nested_name_specifier)
15246     {
15247       type_start_token = cp_lexer_peek_token (parser->lexer);
15248       /* Although the grammar says `identifier', it really means
15249          `class-name' or `template-name'.  You are only allowed to
15250          define a class that has already been declared with this
15251          syntax.
15252
15253          The proposed resolution for Core Issue 180 says that wherever
15254          you see `class T::X' you should treat `X' as a type-name.
15255
15256          It is OK to define an inaccessible class; for example:
15257
15258            class A { class B; };
15259            class A::B {};
15260
15261          We do not know if we will see a class-name, or a
15262          template-name.  We look for a class-name first, in case the
15263          class-name is a template-id; if we looked for the
15264          template-name first we would stop after the template-name.  */
15265       cp_parser_parse_tentatively (parser);
15266       type = cp_parser_class_name (parser,
15267                                    /*typename_keyword_p=*/false,
15268                                    /*template_keyword_p=*/false,
15269                                    class_type,
15270                                    /*check_dependency_p=*/false,
15271                                    /*class_head_p=*/true,
15272                                    /*is_declaration=*/false);
15273       /* If that didn't work, ignore the nested-name-specifier.  */
15274       if (!cp_parser_parse_definitely (parser))
15275         {
15276           invalid_nested_name_p = true;
15277           type_start_token = cp_lexer_peek_token (parser->lexer);
15278           id = cp_parser_identifier (parser);
15279           if (id == error_mark_node)
15280             id = NULL_TREE;
15281         }
15282       /* If we could not find a corresponding TYPE, treat this
15283          declaration like an unqualified declaration.  */
15284       if (type == error_mark_node)
15285         nested_name_specifier = NULL_TREE;
15286       /* Otherwise, count the number of templates used in TYPE and its
15287          containing scopes.  */
15288       else
15289         {
15290           tree scope;
15291
15292           for (scope = TREE_TYPE (type);
15293                scope && TREE_CODE (scope) != NAMESPACE_DECL;
15294                scope = (TYPE_P (scope)
15295                         ? TYPE_CONTEXT (scope)
15296                         : DECL_CONTEXT (scope)))
15297             if (TYPE_P (scope)
15298                 && CLASS_TYPE_P (scope)
15299                 && CLASSTYPE_TEMPLATE_INFO (scope)
15300                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
15301                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
15302               ++num_templates;
15303         }
15304     }
15305   /* Otherwise, the identifier is optional.  */
15306   else
15307     {
15308       /* We don't know whether what comes next is a template-id,
15309          an identifier, or nothing at all.  */
15310       cp_parser_parse_tentatively (parser);
15311       /* Check for a template-id.  */
15312       type_start_token = cp_lexer_peek_token (parser->lexer);
15313       id = cp_parser_template_id (parser,
15314                                   /*template_keyword_p=*/false,
15315                                   /*check_dependency_p=*/true,
15316                                   /*is_declaration=*/true);
15317       /* If that didn't work, it could still be an identifier.  */
15318       if (!cp_parser_parse_definitely (parser))
15319         {
15320           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
15321             {
15322               type_start_token = cp_lexer_peek_token (parser->lexer);
15323               id = cp_parser_identifier (parser);
15324             }
15325           else
15326             id = NULL_TREE;
15327         }
15328       else
15329         {
15330           template_id_p = true;
15331           ++num_templates;
15332         }
15333     }
15334
15335   pop_deferring_access_checks ();
15336
15337   if (id)
15338     cp_parser_check_for_invalid_template_id (parser, id,
15339                                              type_start_token->location);
15340
15341   /* If it's not a `:' or a `{' then we can't really be looking at a
15342      class-head, since a class-head only appears as part of a
15343      class-specifier.  We have to detect this situation before calling
15344      xref_tag, since that has irreversible side-effects.  */
15345   if (!cp_parser_next_token_starts_class_definition_p (parser))
15346     {
15347       cp_parser_error (parser, "expected %<{%> or %<:%>");
15348       return error_mark_node;
15349     }
15350
15351   /* At this point, we're going ahead with the class-specifier, even
15352      if some other problem occurs.  */
15353   cp_parser_commit_to_tentative_parse (parser);
15354   /* Issue the error about the overly-qualified name now.  */
15355   if (qualified_p)
15356     {
15357       cp_parser_error (parser,
15358                        "global qualification of class name is invalid");
15359       return error_mark_node;
15360     }
15361   else if (invalid_nested_name_p)
15362     {
15363       cp_parser_error (parser,
15364                        "qualified name does not name a class");
15365       return error_mark_node;
15366     }
15367   else if (nested_name_specifier)
15368     {
15369       tree scope;
15370
15371       /* Reject typedef-names in class heads.  */
15372       if (!DECL_IMPLICIT_TYPEDEF_P (type))
15373         {
15374           error ("%Hinvalid class name in declaration of %qD",
15375                  &type_start_token->location, type);
15376           type = NULL_TREE;
15377           goto done;
15378         }
15379
15380       /* Figure out in what scope the declaration is being placed.  */
15381       scope = current_scope ();
15382       /* If that scope does not contain the scope in which the
15383          class was originally declared, the program is invalid.  */
15384       if (scope && !is_ancestor (scope, nested_name_specifier))
15385         {
15386           if (at_namespace_scope_p ())
15387             error ("%Hdeclaration of %qD in namespace %qD which does not "
15388                    "enclose %qD",
15389                    &type_start_token->location,
15390                    type, scope, nested_name_specifier);
15391           else
15392             error ("%Hdeclaration of %qD in %qD which does not enclose %qD",
15393                    &type_start_token->location,
15394                    type, scope, nested_name_specifier);
15395           type = NULL_TREE;
15396           goto done;
15397         }
15398       /* [dcl.meaning]
15399
15400          A declarator-id shall not be qualified except for the
15401          definition of a ... nested class outside of its class
15402          ... [or] the definition or explicit instantiation of a
15403          class member of a namespace outside of its namespace.  */
15404       if (scope == nested_name_specifier)
15405         {
15406           permerror (input_location, "%Hextra qualification not allowed",
15407                      &nested_name_specifier_token_start->location);
15408           nested_name_specifier = NULL_TREE;
15409           num_templates = 0;
15410         }
15411     }
15412   /* An explicit-specialization must be preceded by "template <>".  If
15413      it is not, try to recover gracefully.  */
15414   if (at_namespace_scope_p ()
15415       && parser->num_template_parameter_lists == 0
15416       && template_id_p)
15417     {
15418       error ("%Han explicit specialization must be preceded by %<template <>%>",
15419              &type_start_token->location);
15420       invalid_explicit_specialization_p = true;
15421       /* Take the same action that would have been taken by
15422          cp_parser_explicit_specialization.  */
15423       ++parser->num_template_parameter_lists;
15424       begin_specialization ();
15425     }
15426   /* There must be no "return" statements between this point and the
15427      end of this function; set "type "to the correct return value and
15428      use "goto done;" to return.  */
15429   /* Make sure that the right number of template parameters were
15430      present.  */
15431   if (!cp_parser_check_template_parameters (parser, num_templates,
15432                                             type_start_token->location,
15433                                             /*declarator=*/NULL))
15434     {
15435       /* If something went wrong, there is no point in even trying to
15436          process the class-definition.  */
15437       type = NULL_TREE;
15438       goto done;
15439     }
15440
15441   /* Look up the type.  */
15442   if (template_id_p)
15443     {
15444       if (TREE_CODE (id) == TEMPLATE_ID_EXPR
15445           && (DECL_FUNCTION_TEMPLATE_P (TREE_OPERAND (id, 0))
15446               || TREE_CODE (TREE_OPERAND (id, 0)) == OVERLOAD))
15447         {
15448           error ("%Hfunction template %qD redeclared as a class template",
15449                  &type_start_token->location, id);
15450           type = error_mark_node;
15451         }
15452       else
15453         {
15454           type = TREE_TYPE (id);
15455           type = maybe_process_partial_specialization (type);
15456         }
15457       if (nested_name_specifier)
15458         pushed_scope = push_scope (nested_name_specifier);
15459     }
15460   else if (nested_name_specifier)
15461     {
15462       tree class_type;
15463
15464       /* Given:
15465
15466             template <typename T> struct S { struct T };
15467             template <typename T> struct S<T>::T { };
15468
15469          we will get a TYPENAME_TYPE when processing the definition of
15470          `S::T'.  We need to resolve it to the actual type before we
15471          try to define it.  */
15472       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
15473         {
15474           class_type = resolve_typename_type (TREE_TYPE (type),
15475                                               /*only_current_p=*/false);
15476           if (TREE_CODE (class_type) != TYPENAME_TYPE)
15477             type = TYPE_NAME (class_type);
15478           else
15479             {
15480               cp_parser_error (parser, "could not resolve typename type");
15481               type = error_mark_node;
15482             }
15483         }
15484
15485       if (maybe_process_partial_specialization (TREE_TYPE (type))
15486           == error_mark_node)
15487         {
15488           type = NULL_TREE;
15489           goto done;
15490         }
15491
15492       class_type = current_class_type;
15493       /* Enter the scope indicated by the nested-name-specifier.  */
15494       pushed_scope = push_scope (nested_name_specifier);
15495       /* Get the canonical version of this type.  */
15496       type = TYPE_MAIN_DECL (TREE_TYPE (type));
15497       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
15498           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
15499         {
15500           type = push_template_decl (type);
15501           if (type == error_mark_node)
15502             {
15503               type = NULL_TREE;
15504               goto done;
15505             }
15506         }
15507
15508       type = TREE_TYPE (type);
15509       *nested_name_specifier_p = true;
15510     }
15511   else      /* The name is not a nested name.  */
15512     {
15513       /* If the class was unnamed, create a dummy name.  */
15514       if (!id)
15515         id = make_anon_name ();
15516       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
15517                        parser->num_template_parameter_lists);
15518     }
15519
15520   /* Indicate whether this class was declared as a `class' or as a
15521      `struct'.  */
15522   if (TREE_CODE (type) == RECORD_TYPE)
15523     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
15524   cp_parser_check_class_key (class_key, type);
15525
15526   /* If this type was already complete, and we see another definition,
15527      that's an error.  */
15528   if (type != error_mark_node && COMPLETE_TYPE_P (type))
15529     {
15530       error ("%Hredefinition of %q#T",
15531              &type_start_token->location, type);
15532       error ("%Hprevious definition of %q+#T",
15533              &type_start_token->location, type);
15534       type = NULL_TREE;
15535       goto done;
15536     }
15537   else if (type == error_mark_node)
15538     type = NULL_TREE;
15539
15540   /* We will have entered the scope containing the class; the names of
15541      base classes should be looked up in that context.  For example:
15542
15543        struct A { struct B {}; struct C; };
15544        struct A::C : B {};
15545
15546      is valid.  */
15547
15548   /* Get the list of base-classes, if there is one.  */
15549   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
15550     *bases = cp_parser_base_clause (parser);
15551
15552  done:
15553   /* Leave the scope given by the nested-name-specifier.  We will
15554      enter the class scope itself while processing the members.  */
15555   if (pushed_scope)
15556     pop_scope (pushed_scope);
15557
15558   if (invalid_explicit_specialization_p)
15559     {
15560       end_specialization ();
15561       --parser->num_template_parameter_lists;
15562     }
15563   *attributes_p = attributes;
15564   return type;
15565 }
15566
15567 /* Parse a class-key.
15568
15569    class-key:
15570      class
15571      struct
15572      union
15573
15574    Returns the kind of class-key specified, or none_type to indicate
15575    error.  */
15576
15577 static enum tag_types
15578 cp_parser_class_key (cp_parser* parser)
15579 {
15580   cp_token *token;
15581   enum tag_types tag_type;
15582
15583   /* Look for the class-key.  */
15584   token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
15585   if (!token)
15586     return none_type;
15587
15588   /* Check to see if the TOKEN is a class-key.  */
15589   tag_type = cp_parser_token_is_class_key (token);
15590   if (!tag_type)
15591     cp_parser_error (parser, "expected class-key");
15592   return tag_type;
15593 }
15594
15595 /* Parse an (optional) member-specification.
15596
15597    member-specification:
15598      member-declaration member-specification [opt]
15599      access-specifier : member-specification [opt]  */
15600
15601 static void
15602 cp_parser_member_specification_opt (cp_parser* parser)
15603 {
15604   while (true)
15605     {
15606       cp_token *token;
15607       enum rid keyword;
15608
15609       /* Peek at the next token.  */
15610       token = cp_lexer_peek_token (parser->lexer);
15611       /* If it's a `}', or EOF then we've seen all the members.  */
15612       if (token->type == CPP_CLOSE_BRACE
15613           || token->type == CPP_EOF
15614           || token->type == CPP_PRAGMA_EOL)
15615         break;
15616
15617       /* See if this token is a keyword.  */
15618       keyword = token->keyword;
15619       switch (keyword)
15620         {
15621         case RID_PUBLIC:
15622         case RID_PROTECTED:
15623         case RID_PRIVATE:
15624           /* Consume the access-specifier.  */
15625           cp_lexer_consume_token (parser->lexer);
15626           /* Remember which access-specifier is active.  */
15627           current_access_specifier = token->u.value;
15628           /* Look for the `:'.  */
15629           cp_parser_require (parser, CPP_COLON, "%<:%>");
15630           break;
15631
15632         default:
15633           /* Accept #pragmas at class scope.  */
15634           if (token->type == CPP_PRAGMA)
15635             {
15636               cp_parser_pragma (parser, pragma_external);
15637               break;
15638             }
15639
15640           /* Otherwise, the next construction must be a
15641              member-declaration.  */
15642           cp_parser_member_declaration (parser);
15643         }
15644     }
15645 }
15646
15647 /* Parse a member-declaration.
15648
15649    member-declaration:
15650      decl-specifier-seq [opt] member-declarator-list [opt] ;
15651      function-definition ; [opt]
15652      :: [opt] nested-name-specifier template [opt] unqualified-id ;
15653      using-declaration
15654      template-declaration
15655
15656    member-declarator-list:
15657      member-declarator
15658      member-declarator-list , member-declarator
15659
15660    member-declarator:
15661      declarator pure-specifier [opt]
15662      declarator constant-initializer [opt]
15663      identifier [opt] : constant-expression
15664
15665    GNU Extensions:
15666
15667    member-declaration:
15668      __extension__ member-declaration
15669
15670    member-declarator:
15671      declarator attributes [opt] pure-specifier [opt]
15672      declarator attributes [opt] constant-initializer [opt]
15673      identifier [opt] attributes [opt] : constant-expression  
15674
15675    C++0x Extensions:
15676
15677    member-declaration:
15678      static_assert-declaration  */
15679
15680 static void
15681 cp_parser_member_declaration (cp_parser* parser)
15682 {
15683   cp_decl_specifier_seq decl_specifiers;
15684   tree prefix_attributes;
15685   tree decl;
15686   int declares_class_or_enum;
15687   bool friend_p;
15688   cp_token *token = NULL;
15689   cp_token *decl_spec_token_start = NULL;
15690   cp_token *initializer_token_start = NULL;
15691   int saved_pedantic;
15692
15693   /* Check for the `__extension__' keyword.  */
15694   if (cp_parser_extension_opt (parser, &saved_pedantic))
15695     {
15696       /* Recurse.  */
15697       cp_parser_member_declaration (parser);
15698       /* Restore the old value of the PEDANTIC flag.  */
15699       pedantic = saved_pedantic;
15700
15701       return;
15702     }
15703
15704   /* Check for a template-declaration.  */
15705   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
15706     {
15707       /* An explicit specialization here is an error condition, and we
15708          expect the specialization handler to detect and report this.  */
15709       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
15710           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
15711         cp_parser_explicit_specialization (parser);
15712       else
15713         cp_parser_template_declaration (parser, /*member_p=*/true);
15714
15715       return;
15716     }
15717
15718   /* Check for a using-declaration.  */
15719   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
15720     {
15721       /* Parse the using-declaration.  */
15722       cp_parser_using_declaration (parser,
15723                                    /*access_declaration_p=*/false);
15724       return;
15725     }
15726
15727   /* Check for @defs.  */
15728   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
15729     {
15730       tree ivar, member;
15731       tree ivar_chains = cp_parser_objc_defs_expression (parser);
15732       ivar = ivar_chains;
15733       while (ivar)
15734         {
15735           member = ivar;
15736           ivar = TREE_CHAIN (member);
15737           TREE_CHAIN (member) = NULL_TREE;
15738           finish_member_declaration (member);
15739         }
15740       return;
15741     }
15742
15743   /* If the next token is `static_assert' we have a static assertion.  */
15744   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC_ASSERT))
15745     {
15746       cp_parser_static_assert (parser, /*member_p=*/true);
15747       return;
15748     }
15749
15750   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
15751     return;
15752
15753   /* Parse the decl-specifier-seq.  */
15754   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
15755   cp_parser_decl_specifier_seq (parser,
15756                                 CP_PARSER_FLAGS_OPTIONAL,
15757                                 &decl_specifiers,
15758                                 &declares_class_or_enum);
15759   prefix_attributes = decl_specifiers.attributes;
15760   decl_specifiers.attributes = NULL_TREE;
15761   /* Check for an invalid type-name.  */
15762   if (!decl_specifiers.type
15763       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
15764     return;
15765   /* If there is no declarator, then the decl-specifier-seq should
15766      specify a type.  */
15767   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
15768     {
15769       /* If there was no decl-specifier-seq, and the next token is a
15770          `;', then we have something like:
15771
15772            struct S { ; };
15773
15774          [class.mem]
15775
15776          Each member-declaration shall declare at least one member
15777          name of the class.  */
15778       if (!decl_specifiers.any_specifiers_p)
15779         {
15780           cp_token *token = cp_lexer_peek_token (parser->lexer);
15781           if (!in_system_header_at (token->location))
15782             pedwarn (token->location, OPT_pedantic, "extra %<;%>");
15783         }
15784       else
15785         {
15786           tree type;
15787
15788           /* See if this declaration is a friend.  */
15789           friend_p = cp_parser_friend_p (&decl_specifiers);
15790           /* If there were decl-specifiers, check to see if there was
15791              a class-declaration.  */
15792           type = check_tag_decl (&decl_specifiers);
15793           /* Nested classes have already been added to the class, but
15794              a `friend' needs to be explicitly registered.  */
15795           if (friend_p)
15796             {
15797               /* If the `friend' keyword was present, the friend must
15798                  be introduced with a class-key.  */
15799                if (!declares_class_or_enum)
15800                  error ("%Ha class-key must be used when declaring a friend",
15801                         &decl_spec_token_start->location);
15802                /* In this case:
15803
15804                     template <typename T> struct A {
15805                       friend struct A<T>::B;
15806                     };
15807
15808                   A<T>::B will be represented by a TYPENAME_TYPE, and
15809                   therefore not recognized by check_tag_decl.  */
15810                if (!type
15811                    && decl_specifiers.type
15812                    && TYPE_P (decl_specifiers.type))
15813                  type = decl_specifiers.type;
15814                if (!type || !TYPE_P (type))
15815                  error ("%Hfriend declaration does not name a class or "
15816                         "function", &decl_spec_token_start->location);
15817                else
15818                  make_friend_class (current_class_type, type,
15819                                     /*complain=*/true);
15820             }
15821           /* If there is no TYPE, an error message will already have
15822              been issued.  */
15823           else if (!type || type == error_mark_node)
15824             ;
15825           /* An anonymous aggregate has to be handled specially; such
15826              a declaration really declares a data member (with a
15827              particular type), as opposed to a nested class.  */
15828           else if (ANON_AGGR_TYPE_P (type))
15829             {
15830               /* Remove constructors and such from TYPE, now that we
15831                  know it is an anonymous aggregate.  */
15832               fixup_anonymous_aggr (type);
15833               /* And make the corresponding data member.  */
15834               decl = build_decl (FIELD_DECL, NULL_TREE, type);
15835               /* Add it to the class.  */
15836               finish_member_declaration (decl);
15837             }
15838           else
15839             cp_parser_check_access_in_redeclaration
15840                                               (TYPE_NAME (type),
15841                                                decl_spec_token_start->location);
15842         }
15843     }
15844   else
15845     {
15846       /* See if these declarations will be friends.  */
15847       friend_p = cp_parser_friend_p (&decl_specifiers);
15848
15849       /* Keep going until we hit the `;' at the end of the
15850          declaration.  */
15851       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
15852         {
15853           tree attributes = NULL_TREE;
15854           tree first_attribute;
15855
15856           /* Peek at the next token.  */
15857           token = cp_lexer_peek_token (parser->lexer);
15858
15859           /* Check for a bitfield declaration.  */
15860           if (token->type == CPP_COLON
15861               || (token->type == CPP_NAME
15862                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
15863                   == CPP_COLON))
15864             {
15865               tree identifier;
15866               tree width;
15867
15868               /* Get the name of the bitfield.  Note that we cannot just
15869                  check TOKEN here because it may have been invalidated by
15870                  the call to cp_lexer_peek_nth_token above.  */
15871               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
15872                 identifier = cp_parser_identifier (parser);
15873               else
15874                 identifier = NULL_TREE;
15875
15876               /* Consume the `:' token.  */
15877               cp_lexer_consume_token (parser->lexer);
15878               /* Get the width of the bitfield.  */
15879               width
15880                 = cp_parser_constant_expression (parser,
15881                                                  /*allow_non_constant=*/false,
15882                                                  NULL);
15883
15884               /* Look for attributes that apply to the bitfield.  */
15885               attributes = cp_parser_attributes_opt (parser);
15886               /* Remember which attributes are prefix attributes and
15887                  which are not.  */
15888               first_attribute = attributes;
15889               /* Combine the attributes.  */
15890               attributes = chainon (prefix_attributes, attributes);
15891
15892               /* Create the bitfield declaration.  */
15893               decl = grokbitfield (identifier
15894                                    ? make_id_declarator (NULL_TREE,
15895                                                          identifier,
15896                                                          sfk_none)
15897                                    : NULL,
15898                                    &decl_specifiers,
15899                                    width,
15900                                    attributes);
15901             }
15902           else
15903             {
15904               cp_declarator *declarator;
15905               tree initializer;
15906               tree asm_specification;
15907               int ctor_dtor_or_conv_p;
15908
15909               /* Parse the declarator.  */
15910               declarator
15911                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
15912                                         &ctor_dtor_or_conv_p,
15913                                         /*parenthesized_p=*/NULL,
15914                                         /*member_p=*/true);
15915
15916               /* If something went wrong parsing the declarator, make sure
15917                  that we at least consume some tokens.  */
15918               if (declarator == cp_error_declarator)
15919                 {
15920                   /* Skip to the end of the statement.  */
15921                   cp_parser_skip_to_end_of_statement (parser);
15922                   /* If the next token is not a semicolon, that is
15923                      probably because we just skipped over the body of
15924                      a function.  So, we consume a semicolon if
15925                      present, but do not issue an error message if it
15926                      is not present.  */
15927                   if (cp_lexer_next_token_is (parser->lexer,
15928                                               CPP_SEMICOLON))
15929                     cp_lexer_consume_token (parser->lexer);
15930                   return;
15931                 }
15932
15933               if (declares_class_or_enum & 2)
15934                 cp_parser_check_for_definition_in_return_type
15935                                             (declarator, decl_specifiers.type,
15936                                              decl_specifiers.type_location);
15937
15938               /* Look for an asm-specification.  */
15939               asm_specification = cp_parser_asm_specification_opt (parser);
15940               /* Look for attributes that apply to the declaration.  */
15941               attributes = cp_parser_attributes_opt (parser);
15942               /* Remember which attributes are prefix attributes and
15943                  which are not.  */
15944               first_attribute = attributes;
15945               /* Combine the attributes.  */
15946               attributes = chainon (prefix_attributes, attributes);
15947
15948               /* If it's an `=', then we have a constant-initializer or a
15949                  pure-specifier.  It is not correct to parse the
15950                  initializer before registering the member declaration
15951                  since the member declaration should be in scope while
15952                  its initializer is processed.  However, the rest of the
15953                  front end does not yet provide an interface that allows
15954                  us to handle this correctly.  */
15955               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
15956                 {
15957                   /* In [class.mem]:
15958
15959                      A pure-specifier shall be used only in the declaration of
15960                      a virtual function.
15961
15962                      A member-declarator can contain a constant-initializer
15963                      only if it declares a static member of integral or
15964                      enumeration type.
15965
15966                      Therefore, if the DECLARATOR is for a function, we look
15967                      for a pure-specifier; otherwise, we look for a
15968                      constant-initializer.  When we call `grokfield', it will
15969                      perform more stringent semantics checks.  */
15970                   initializer_token_start = cp_lexer_peek_token (parser->lexer);
15971                   if (function_declarator_p (declarator))
15972                     initializer = cp_parser_pure_specifier (parser);
15973                   else
15974                     /* Parse the initializer.  */
15975                     initializer = cp_parser_constant_initializer (parser);
15976                 }
15977               /* Otherwise, there is no initializer.  */
15978               else
15979                 initializer = NULL_TREE;
15980
15981               /* See if we are probably looking at a function
15982                  definition.  We are certainly not looking at a
15983                  member-declarator.  Calling `grokfield' has
15984                  side-effects, so we must not do it unless we are sure
15985                  that we are looking at a member-declarator.  */
15986               if (cp_parser_token_starts_function_definition_p
15987                   (cp_lexer_peek_token (parser->lexer)))
15988                 {
15989                   /* The grammar does not allow a pure-specifier to be
15990                      used when a member function is defined.  (It is
15991                      possible that this fact is an oversight in the
15992                      standard, since a pure function may be defined
15993                      outside of the class-specifier.  */
15994                   if (initializer)
15995                     error ("%Hpure-specifier on function-definition",
15996                            &initializer_token_start->location);
15997                   decl = cp_parser_save_member_function_body (parser,
15998                                                               &decl_specifiers,
15999                                                               declarator,
16000                                                               attributes);
16001                   /* If the member was not a friend, declare it here.  */
16002                   if (!friend_p)
16003                     finish_member_declaration (decl);
16004                   /* Peek at the next token.  */
16005                   token = cp_lexer_peek_token (parser->lexer);
16006                   /* If the next token is a semicolon, consume it.  */
16007                   if (token->type == CPP_SEMICOLON)
16008                     cp_lexer_consume_token (parser->lexer);
16009                   return;
16010                 }
16011               else
16012                 if (declarator->kind == cdk_function)
16013                   declarator->id_loc = token->location;
16014                 /* Create the declaration.  */
16015                 decl = grokfield (declarator, &decl_specifiers,
16016                                   initializer, /*init_const_expr_p=*/true,
16017                                   asm_specification,
16018                                   attributes);
16019             }
16020
16021           /* Reset PREFIX_ATTRIBUTES.  */
16022           while (attributes && TREE_CHAIN (attributes) != first_attribute)
16023             attributes = TREE_CHAIN (attributes);
16024           if (attributes)
16025             TREE_CHAIN (attributes) = NULL_TREE;
16026
16027           /* If there is any qualification still in effect, clear it
16028              now; we will be starting fresh with the next declarator.  */
16029           parser->scope = NULL_TREE;
16030           parser->qualifying_scope = NULL_TREE;
16031           parser->object_scope = NULL_TREE;
16032           /* If it's a `,', then there are more declarators.  */
16033           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
16034             cp_lexer_consume_token (parser->lexer);
16035           /* If the next token isn't a `;', then we have a parse error.  */
16036           else if (cp_lexer_next_token_is_not (parser->lexer,
16037                                                CPP_SEMICOLON))
16038             {
16039               cp_parser_error (parser, "expected %<;%>");
16040               /* Skip tokens until we find a `;'.  */
16041               cp_parser_skip_to_end_of_statement (parser);
16042
16043               break;
16044             }
16045
16046           if (decl)
16047             {
16048               /* Add DECL to the list of members.  */
16049               if (!friend_p)
16050                 finish_member_declaration (decl);
16051
16052               if (TREE_CODE (decl) == FUNCTION_DECL)
16053                 cp_parser_save_default_args (parser, decl);
16054             }
16055         }
16056     }
16057
16058   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
16059 }
16060
16061 /* Parse a pure-specifier.
16062
16063    pure-specifier:
16064      = 0
16065
16066    Returns INTEGER_ZERO_NODE if a pure specifier is found.
16067    Otherwise, ERROR_MARK_NODE is returned.  */
16068
16069 static tree
16070 cp_parser_pure_specifier (cp_parser* parser)
16071 {
16072   cp_token *token;
16073
16074   /* Look for the `=' token.  */
16075   if (!cp_parser_require (parser, CPP_EQ, "%<=%>"))
16076     return error_mark_node;
16077   /* Look for the `0' token.  */
16078   token = cp_lexer_peek_token (parser->lexer);
16079
16080   if (token->type == CPP_EOF
16081       || token->type == CPP_PRAGMA_EOL)
16082     return error_mark_node;
16083
16084   cp_lexer_consume_token (parser->lexer);
16085
16086   /* Accept = default or = delete in c++0x mode.  */
16087   if (token->keyword == RID_DEFAULT
16088       || token->keyword == RID_DELETE)
16089     {
16090       maybe_warn_cpp0x ("defaulted and deleted functions");
16091       return token->u.value;
16092     }
16093
16094   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
16095   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
16096     {
16097       cp_parser_error (parser,
16098                        "invalid pure specifier (only %<= 0%> is allowed)");
16099       cp_parser_skip_to_end_of_statement (parser);
16100       return error_mark_node;
16101     }
16102   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
16103     {
16104       error ("%Htemplates may not be %<virtual%>", &token->location);
16105       return error_mark_node;
16106     }
16107
16108   return integer_zero_node;
16109 }
16110
16111 /* Parse a constant-initializer.
16112
16113    constant-initializer:
16114      = constant-expression
16115
16116    Returns a representation of the constant-expression.  */
16117
16118 static tree
16119 cp_parser_constant_initializer (cp_parser* parser)
16120 {
16121   /* Look for the `=' token.  */
16122   if (!cp_parser_require (parser, CPP_EQ, "%<=%>"))
16123     return error_mark_node;
16124
16125   /* It is invalid to write:
16126
16127        struct S { static const int i = { 7 }; };
16128
16129      */
16130   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
16131     {
16132       cp_parser_error (parser,
16133                        "a brace-enclosed initializer is not allowed here");
16134       /* Consume the opening brace.  */
16135       cp_lexer_consume_token (parser->lexer);
16136       /* Skip the initializer.  */
16137       cp_parser_skip_to_closing_brace (parser);
16138       /* Look for the trailing `}'.  */
16139       cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
16140
16141       return error_mark_node;
16142     }
16143
16144   return cp_parser_constant_expression (parser,
16145                                         /*allow_non_constant=*/false,
16146                                         NULL);
16147 }
16148
16149 /* Derived classes [gram.class.derived] */
16150
16151 /* Parse a base-clause.
16152
16153    base-clause:
16154      : base-specifier-list
16155
16156    base-specifier-list:
16157      base-specifier ... [opt]
16158      base-specifier-list , base-specifier ... [opt]
16159
16160    Returns a TREE_LIST representing the base-classes, in the order in
16161    which they were declared.  The representation of each node is as
16162    described by cp_parser_base_specifier.
16163
16164    In the case that no bases are specified, this function will return
16165    NULL_TREE, not ERROR_MARK_NODE.  */
16166
16167 static tree
16168 cp_parser_base_clause (cp_parser* parser)
16169 {
16170   tree bases = NULL_TREE;
16171
16172   /* Look for the `:' that begins the list.  */
16173   cp_parser_require (parser, CPP_COLON, "%<:%>");
16174
16175   /* Scan the base-specifier-list.  */
16176   while (true)
16177     {
16178       cp_token *token;
16179       tree base;
16180       bool pack_expansion_p = false;
16181
16182       /* Look for the base-specifier.  */
16183       base = cp_parser_base_specifier (parser);
16184       /* Look for the (optional) ellipsis. */
16185       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
16186         {
16187           /* Consume the `...'. */
16188           cp_lexer_consume_token (parser->lexer);
16189
16190           pack_expansion_p = true;
16191         }
16192
16193       /* Add BASE to the front of the list.  */
16194       if (base != error_mark_node)
16195         {
16196           if (pack_expansion_p)
16197             /* Make this a pack expansion type. */
16198             TREE_VALUE (base) = make_pack_expansion (TREE_VALUE (base));
16199           
16200
16201           if (!check_for_bare_parameter_packs (TREE_VALUE (base)))
16202             {
16203               TREE_CHAIN (base) = bases;
16204               bases = base;
16205             }
16206         }
16207       /* Peek at the next token.  */
16208       token = cp_lexer_peek_token (parser->lexer);
16209       /* If it's not a comma, then the list is complete.  */
16210       if (token->type != CPP_COMMA)
16211         break;
16212       /* Consume the `,'.  */
16213       cp_lexer_consume_token (parser->lexer);
16214     }
16215
16216   /* PARSER->SCOPE may still be non-NULL at this point, if the last
16217      base class had a qualified name.  However, the next name that
16218      appears is certainly not qualified.  */
16219   parser->scope = NULL_TREE;
16220   parser->qualifying_scope = NULL_TREE;
16221   parser->object_scope = NULL_TREE;
16222
16223   return nreverse (bases);
16224 }
16225
16226 /* Parse a base-specifier.
16227
16228    base-specifier:
16229      :: [opt] nested-name-specifier [opt] class-name
16230      virtual access-specifier [opt] :: [opt] nested-name-specifier
16231        [opt] class-name
16232      access-specifier virtual [opt] :: [opt] nested-name-specifier
16233        [opt] class-name
16234
16235    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
16236    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
16237    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
16238    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
16239
16240 static tree
16241 cp_parser_base_specifier (cp_parser* parser)
16242 {
16243   cp_token *token;
16244   bool done = false;
16245   bool virtual_p = false;
16246   bool duplicate_virtual_error_issued_p = false;
16247   bool duplicate_access_error_issued_p = false;
16248   bool class_scope_p, template_p;
16249   tree access = access_default_node;
16250   tree type;
16251
16252   /* Process the optional `virtual' and `access-specifier'.  */
16253   while (!done)
16254     {
16255       /* Peek at the next token.  */
16256       token = cp_lexer_peek_token (parser->lexer);
16257       /* Process `virtual'.  */
16258       switch (token->keyword)
16259         {
16260         case RID_VIRTUAL:
16261           /* If `virtual' appears more than once, issue an error.  */
16262           if (virtual_p && !duplicate_virtual_error_issued_p)
16263             {
16264               cp_parser_error (parser,
16265                                "%<virtual%> specified more than once in base-specified");
16266               duplicate_virtual_error_issued_p = true;
16267             }
16268
16269           virtual_p = true;
16270
16271           /* Consume the `virtual' token.  */
16272           cp_lexer_consume_token (parser->lexer);
16273
16274           break;
16275
16276         case RID_PUBLIC:
16277         case RID_PROTECTED:
16278         case RID_PRIVATE:
16279           /* If more than one access specifier appears, issue an
16280              error.  */
16281           if (access != access_default_node
16282               && !duplicate_access_error_issued_p)
16283             {
16284               cp_parser_error (parser,
16285                                "more than one access specifier in base-specified");
16286               duplicate_access_error_issued_p = true;
16287             }
16288
16289           access = ridpointers[(int) token->keyword];
16290
16291           /* Consume the access-specifier.  */
16292           cp_lexer_consume_token (parser->lexer);
16293
16294           break;
16295
16296         default:
16297           done = true;
16298           break;
16299         }
16300     }
16301   /* It is not uncommon to see programs mechanically, erroneously, use
16302      the 'typename' keyword to denote (dependent) qualified types
16303      as base classes.  */
16304   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
16305     {
16306       token = cp_lexer_peek_token (parser->lexer);
16307       if (!processing_template_decl)
16308         error ("%Hkeyword %<typename%> not allowed outside of templates",
16309                &token->location);
16310       else
16311         error ("%Hkeyword %<typename%> not allowed in this context "
16312                "(the base class is implicitly a type)",
16313                &token->location);
16314       cp_lexer_consume_token (parser->lexer);
16315     }
16316
16317   /* Look for the optional `::' operator.  */
16318   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
16319   /* Look for the nested-name-specifier.  The simplest way to
16320      implement:
16321
16322        [temp.res]
16323
16324        The keyword `typename' is not permitted in a base-specifier or
16325        mem-initializer; in these contexts a qualified name that
16326        depends on a template-parameter is implicitly assumed to be a
16327        type name.
16328
16329      is to pretend that we have seen the `typename' keyword at this
16330      point.  */
16331   cp_parser_nested_name_specifier_opt (parser,
16332                                        /*typename_keyword_p=*/true,
16333                                        /*check_dependency_p=*/true,
16334                                        typename_type,
16335                                        /*is_declaration=*/true);
16336   /* If the base class is given by a qualified name, assume that names
16337      we see are type names or templates, as appropriate.  */
16338   class_scope_p = (parser->scope && TYPE_P (parser->scope));
16339   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
16340
16341   /* Finally, look for the class-name.  */
16342   type = cp_parser_class_name (parser,
16343                                class_scope_p,
16344                                template_p,
16345                                typename_type,
16346                                /*check_dependency_p=*/true,
16347                                /*class_head_p=*/false,
16348                                /*is_declaration=*/true);
16349
16350   if (type == error_mark_node)
16351     return error_mark_node;
16352
16353   return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
16354 }
16355
16356 /* Exception handling [gram.exception] */
16357
16358 /* Parse an (optional) exception-specification.
16359
16360    exception-specification:
16361      throw ( type-id-list [opt] )
16362
16363    Returns a TREE_LIST representing the exception-specification.  The
16364    TREE_VALUE of each node is a type.  */
16365
16366 static tree
16367 cp_parser_exception_specification_opt (cp_parser* parser)
16368 {
16369   cp_token *token;
16370   tree type_id_list;
16371
16372   /* Peek at the next token.  */
16373   token = cp_lexer_peek_token (parser->lexer);
16374   /* If it's not `throw', then there's no exception-specification.  */
16375   if (!cp_parser_is_keyword (token, RID_THROW))
16376     return NULL_TREE;
16377
16378   /* Consume the `throw'.  */
16379   cp_lexer_consume_token (parser->lexer);
16380
16381   /* Look for the `('.  */
16382   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16383
16384   /* Peek at the next token.  */
16385   token = cp_lexer_peek_token (parser->lexer);
16386   /* If it's not a `)', then there is a type-id-list.  */
16387   if (token->type != CPP_CLOSE_PAREN)
16388     {
16389       const char *saved_message;
16390
16391       /* Types may not be defined in an exception-specification.  */
16392       saved_message = parser->type_definition_forbidden_message;
16393       parser->type_definition_forbidden_message
16394         = "types may not be defined in an exception-specification";
16395       /* Parse the type-id-list.  */
16396       type_id_list = cp_parser_type_id_list (parser);
16397       /* Restore the saved message.  */
16398       parser->type_definition_forbidden_message = saved_message;
16399     }
16400   else
16401     type_id_list = empty_except_spec;
16402
16403   /* Look for the `)'.  */
16404   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16405
16406   return type_id_list;
16407 }
16408
16409 /* Parse an (optional) type-id-list.
16410
16411    type-id-list:
16412      type-id ... [opt]
16413      type-id-list , type-id ... [opt]
16414
16415    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
16416    in the order that the types were presented.  */
16417
16418 static tree
16419 cp_parser_type_id_list (cp_parser* parser)
16420 {
16421   tree types = NULL_TREE;
16422
16423   while (true)
16424     {
16425       cp_token *token;
16426       tree type;
16427
16428       /* Get the next type-id.  */
16429       type = cp_parser_type_id (parser);
16430       /* Parse the optional ellipsis. */
16431       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
16432         {
16433           /* Consume the `...'. */
16434           cp_lexer_consume_token (parser->lexer);
16435
16436           /* Turn the type into a pack expansion expression. */
16437           type = make_pack_expansion (type);
16438         }
16439       /* Add it to the list.  */
16440       types = add_exception_specifier (types, type, /*complain=*/1);
16441       /* Peek at the next token.  */
16442       token = cp_lexer_peek_token (parser->lexer);
16443       /* If it is not a `,', we are done.  */
16444       if (token->type != CPP_COMMA)
16445         break;
16446       /* Consume the `,'.  */
16447       cp_lexer_consume_token (parser->lexer);
16448     }
16449
16450   return nreverse (types);
16451 }
16452
16453 /* Parse a try-block.
16454
16455    try-block:
16456      try compound-statement handler-seq  */
16457
16458 static tree
16459 cp_parser_try_block (cp_parser* parser)
16460 {
16461   tree try_block;
16462
16463   cp_parser_require_keyword (parser, RID_TRY, "%<try%>");
16464   try_block = begin_try_block ();
16465   cp_parser_compound_statement (parser, NULL, true);
16466   finish_try_block (try_block);
16467   cp_parser_handler_seq (parser);
16468   finish_handler_sequence (try_block);
16469
16470   return try_block;
16471 }
16472
16473 /* Parse a function-try-block.
16474
16475    function-try-block:
16476      try ctor-initializer [opt] function-body handler-seq  */
16477
16478 static bool
16479 cp_parser_function_try_block (cp_parser* parser)
16480 {
16481   tree compound_stmt;
16482   tree try_block;
16483   bool ctor_initializer_p;
16484
16485   /* Look for the `try' keyword.  */
16486   if (!cp_parser_require_keyword (parser, RID_TRY, "%<try%>"))
16487     return false;
16488   /* Let the rest of the front end know where we are.  */
16489   try_block = begin_function_try_block (&compound_stmt);
16490   /* Parse the function-body.  */
16491   ctor_initializer_p
16492     = cp_parser_ctor_initializer_opt_and_function_body (parser);
16493   /* We're done with the `try' part.  */
16494   finish_function_try_block (try_block);
16495   /* Parse the handlers.  */
16496   cp_parser_handler_seq (parser);
16497   /* We're done with the handlers.  */
16498   finish_function_handler_sequence (try_block, compound_stmt);
16499
16500   return ctor_initializer_p;
16501 }
16502
16503 /* Parse a handler-seq.
16504
16505    handler-seq:
16506      handler handler-seq [opt]  */
16507
16508 static void
16509 cp_parser_handler_seq (cp_parser* parser)
16510 {
16511   while (true)
16512     {
16513       cp_token *token;
16514
16515       /* Parse the handler.  */
16516       cp_parser_handler (parser);
16517       /* Peek at the next token.  */
16518       token = cp_lexer_peek_token (parser->lexer);
16519       /* If it's not `catch' then there are no more handlers.  */
16520       if (!cp_parser_is_keyword (token, RID_CATCH))
16521         break;
16522     }
16523 }
16524
16525 /* Parse a handler.
16526
16527    handler:
16528      catch ( exception-declaration ) compound-statement  */
16529
16530 static void
16531 cp_parser_handler (cp_parser* parser)
16532 {
16533   tree handler;
16534   tree declaration;
16535
16536   cp_parser_require_keyword (parser, RID_CATCH, "%<catch%>");
16537   handler = begin_handler ();
16538   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16539   declaration = cp_parser_exception_declaration (parser);
16540   finish_handler_parms (declaration, handler);
16541   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16542   cp_parser_compound_statement (parser, NULL, false);
16543   finish_handler (handler);
16544 }
16545
16546 /* Parse an exception-declaration.
16547
16548    exception-declaration:
16549      type-specifier-seq declarator
16550      type-specifier-seq abstract-declarator
16551      type-specifier-seq
16552      ...
16553
16554    Returns a VAR_DECL for the declaration, or NULL_TREE if the
16555    ellipsis variant is used.  */
16556
16557 static tree
16558 cp_parser_exception_declaration (cp_parser* parser)
16559 {
16560   cp_decl_specifier_seq type_specifiers;
16561   cp_declarator *declarator;
16562   const char *saved_message;
16563
16564   /* If it's an ellipsis, it's easy to handle.  */
16565   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
16566     {
16567       /* Consume the `...' token.  */
16568       cp_lexer_consume_token (parser->lexer);
16569       return NULL_TREE;
16570     }
16571
16572   /* Types may not be defined in exception-declarations.  */
16573   saved_message = parser->type_definition_forbidden_message;
16574   parser->type_definition_forbidden_message
16575     = "types may not be defined in exception-declarations";
16576
16577   /* Parse the type-specifier-seq.  */
16578   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
16579                                 &type_specifiers);
16580   /* If it's a `)', then there is no declarator.  */
16581   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
16582     declarator = NULL;
16583   else
16584     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
16585                                        /*ctor_dtor_or_conv_p=*/NULL,
16586                                        /*parenthesized_p=*/NULL,
16587                                        /*member_p=*/false);
16588
16589   /* Restore the saved message.  */
16590   parser->type_definition_forbidden_message = saved_message;
16591
16592   if (!type_specifiers.any_specifiers_p)
16593     return error_mark_node;
16594
16595   return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
16596 }
16597
16598 /* Parse a throw-expression.
16599
16600    throw-expression:
16601      throw assignment-expression [opt]
16602
16603    Returns a THROW_EXPR representing the throw-expression.  */
16604
16605 static tree
16606 cp_parser_throw_expression (cp_parser* parser)
16607 {
16608   tree expression;
16609   cp_token* token;
16610
16611   cp_parser_require_keyword (parser, RID_THROW, "%<throw%>");
16612   token = cp_lexer_peek_token (parser->lexer);
16613   /* Figure out whether or not there is an assignment-expression
16614      following the "throw" keyword.  */
16615   if (token->type == CPP_COMMA
16616       || token->type == CPP_SEMICOLON
16617       || token->type == CPP_CLOSE_PAREN
16618       || token->type == CPP_CLOSE_SQUARE
16619       || token->type == CPP_CLOSE_BRACE
16620       || token->type == CPP_COLON)
16621     expression = NULL_TREE;
16622   else
16623     expression = cp_parser_assignment_expression (parser,
16624                                                   /*cast_p=*/false, NULL);
16625
16626   return build_throw (expression);
16627 }
16628
16629 /* GNU Extensions */
16630
16631 /* Parse an (optional) asm-specification.
16632
16633    asm-specification:
16634      asm ( string-literal )
16635
16636    If the asm-specification is present, returns a STRING_CST
16637    corresponding to the string-literal.  Otherwise, returns
16638    NULL_TREE.  */
16639
16640 static tree
16641 cp_parser_asm_specification_opt (cp_parser* parser)
16642 {
16643   cp_token *token;
16644   tree asm_specification;
16645
16646   /* Peek at the next token.  */
16647   token = cp_lexer_peek_token (parser->lexer);
16648   /* If the next token isn't the `asm' keyword, then there's no
16649      asm-specification.  */
16650   if (!cp_parser_is_keyword (token, RID_ASM))
16651     return NULL_TREE;
16652
16653   /* Consume the `asm' token.  */
16654   cp_lexer_consume_token (parser->lexer);
16655   /* Look for the `('.  */
16656   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16657
16658   /* Look for the string-literal.  */
16659   asm_specification = cp_parser_string_literal (parser, false, false);
16660
16661   /* Look for the `)'.  */
16662   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16663
16664   return asm_specification;
16665 }
16666
16667 /* Parse an asm-operand-list.
16668
16669    asm-operand-list:
16670      asm-operand
16671      asm-operand-list , asm-operand
16672
16673    asm-operand:
16674      string-literal ( expression )
16675      [ string-literal ] string-literal ( expression )
16676
16677    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
16678    each node is the expression.  The TREE_PURPOSE is itself a
16679    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
16680    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
16681    is a STRING_CST for the string literal before the parenthesis. Returns
16682    ERROR_MARK_NODE if any of the operands are invalid.  */
16683
16684 static tree
16685 cp_parser_asm_operand_list (cp_parser* parser)
16686 {
16687   tree asm_operands = NULL_TREE;
16688   bool invalid_operands = false;
16689
16690   while (true)
16691     {
16692       tree string_literal;
16693       tree expression;
16694       tree name;
16695
16696       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
16697         {
16698           /* Consume the `[' token.  */
16699           cp_lexer_consume_token (parser->lexer);
16700           /* Read the operand name.  */
16701           name = cp_parser_identifier (parser);
16702           if (name != error_mark_node)
16703             name = build_string (IDENTIFIER_LENGTH (name),
16704                                  IDENTIFIER_POINTER (name));
16705           /* Look for the closing `]'.  */
16706           cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
16707         }
16708       else
16709         name = NULL_TREE;
16710       /* Look for the string-literal.  */
16711       string_literal = cp_parser_string_literal (parser, false, false);
16712
16713       /* Look for the `('.  */
16714       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16715       /* Parse the expression.  */
16716       expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
16717       /* Look for the `)'.  */
16718       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16719
16720       if (name == error_mark_node 
16721           || string_literal == error_mark_node 
16722           || expression == error_mark_node)
16723         invalid_operands = true;
16724
16725       /* Add this operand to the list.  */
16726       asm_operands = tree_cons (build_tree_list (name, string_literal),
16727                                 expression,
16728                                 asm_operands);
16729       /* If the next token is not a `,', there are no more
16730          operands.  */
16731       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
16732         break;
16733       /* Consume the `,'.  */
16734       cp_lexer_consume_token (parser->lexer);
16735     }
16736
16737   return invalid_operands ? error_mark_node : nreverse (asm_operands);
16738 }
16739
16740 /* Parse an asm-clobber-list.
16741
16742    asm-clobber-list:
16743      string-literal
16744      asm-clobber-list , string-literal
16745
16746    Returns a TREE_LIST, indicating the clobbers in the order that they
16747    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
16748
16749 static tree
16750 cp_parser_asm_clobber_list (cp_parser* parser)
16751 {
16752   tree clobbers = NULL_TREE;
16753
16754   while (true)
16755     {
16756       tree string_literal;
16757
16758       /* Look for the string literal.  */
16759       string_literal = cp_parser_string_literal (parser, false, false);
16760       /* Add it to the list.  */
16761       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
16762       /* If the next token is not a `,', then the list is
16763          complete.  */
16764       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
16765         break;
16766       /* Consume the `,' token.  */
16767       cp_lexer_consume_token (parser->lexer);
16768     }
16769
16770   return clobbers;
16771 }
16772
16773 /* Parse an (optional) series of attributes.
16774
16775    attributes:
16776      attributes attribute
16777
16778    attribute:
16779      __attribute__ (( attribute-list [opt] ))
16780
16781    The return value is as for cp_parser_attribute_list.  */
16782
16783 static tree
16784 cp_parser_attributes_opt (cp_parser* parser)
16785 {
16786   tree attributes = NULL_TREE;
16787
16788   while (true)
16789     {
16790       cp_token *token;
16791       tree attribute_list;
16792
16793       /* Peek at the next token.  */
16794       token = cp_lexer_peek_token (parser->lexer);
16795       /* If it's not `__attribute__', then we're done.  */
16796       if (token->keyword != RID_ATTRIBUTE)
16797         break;
16798
16799       /* Consume the `__attribute__' keyword.  */
16800       cp_lexer_consume_token (parser->lexer);
16801       /* Look for the two `(' tokens.  */
16802       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16803       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16804
16805       /* Peek at the next token.  */
16806       token = cp_lexer_peek_token (parser->lexer);
16807       if (token->type != CPP_CLOSE_PAREN)
16808         /* Parse the attribute-list.  */
16809         attribute_list = cp_parser_attribute_list (parser);
16810       else
16811         /* If the next token is a `)', then there is no attribute
16812            list.  */
16813         attribute_list = NULL;
16814
16815       /* Look for the two `)' tokens.  */
16816       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16817       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16818
16819       /* Add these new attributes to the list.  */
16820       attributes = chainon (attributes, attribute_list);
16821     }
16822
16823   return attributes;
16824 }
16825
16826 /* Parse an attribute-list.
16827
16828    attribute-list:
16829      attribute
16830      attribute-list , attribute
16831
16832    attribute:
16833      identifier
16834      identifier ( identifier )
16835      identifier ( identifier , expression-list )
16836      identifier ( expression-list )
16837
16838    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
16839    to an attribute.  The TREE_PURPOSE of each node is the identifier
16840    indicating which attribute is in use.  The TREE_VALUE represents
16841    the arguments, if any.  */
16842
16843 static tree
16844 cp_parser_attribute_list (cp_parser* parser)
16845 {
16846   tree attribute_list = NULL_TREE;
16847   bool save_translate_strings_p = parser->translate_strings_p;
16848
16849   parser->translate_strings_p = false;
16850   while (true)
16851     {
16852       cp_token *token;
16853       tree identifier;
16854       tree attribute;
16855
16856       /* Look for the identifier.  We also allow keywords here; for
16857          example `__attribute__ ((const))' is legal.  */
16858       token = cp_lexer_peek_token (parser->lexer);
16859       if (token->type == CPP_NAME
16860           || token->type == CPP_KEYWORD)
16861         {
16862           tree arguments = NULL_TREE;
16863
16864           /* Consume the token.  */
16865           token = cp_lexer_consume_token (parser->lexer);
16866
16867           /* Save away the identifier that indicates which attribute
16868              this is.  */
16869           identifier = (token->type == CPP_KEYWORD) 
16870             /* For keywords, use the canonical spelling, not the
16871                parsed identifier.  */
16872             ? ridpointers[(int) token->keyword]
16873             : token->u.value;
16874           
16875           attribute = build_tree_list (identifier, NULL_TREE);
16876
16877           /* Peek at the next token.  */
16878           token = cp_lexer_peek_token (parser->lexer);
16879           /* If it's an `(', then parse the attribute arguments.  */
16880           if (token->type == CPP_OPEN_PAREN)
16881             {
16882               VEC(tree,gc) *vec;
16883               vec = cp_parser_parenthesized_expression_list
16884                     (parser, true, /*cast_p=*/false,
16885                      /*allow_expansion_p=*/false,
16886                      /*non_constant_p=*/NULL);
16887               if (vec == NULL)
16888                 arguments = error_mark_node;
16889               else
16890                 {
16891                   arguments = build_tree_list_vec (vec);
16892                   release_tree_vector (vec);
16893                 }
16894               /* Save the arguments away.  */
16895               TREE_VALUE (attribute) = arguments;
16896             }
16897
16898           if (arguments != error_mark_node)
16899             {
16900               /* Add this attribute to the list.  */
16901               TREE_CHAIN (attribute) = attribute_list;
16902               attribute_list = attribute;
16903             }
16904
16905           token = cp_lexer_peek_token (parser->lexer);
16906         }
16907       /* Now, look for more attributes.  If the next token isn't a
16908          `,', we're done.  */
16909       if (token->type != CPP_COMMA)
16910         break;
16911
16912       /* Consume the comma and keep going.  */
16913       cp_lexer_consume_token (parser->lexer);
16914     }
16915   parser->translate_strings_p = save_translate_strings_p;
16916
16917   /* We built up the list in reverse order.  */
16918   return nreverse (attribute_list);
16919 }
16920
16921 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
16922    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
16923    current value of the PEDANTIC flag, regardless of whether or not
16924    the `__extension__' keyword is present.  The caller is responsible
16925    for restoring the value of the PEDANTIC flag.  */
16926
16927 static bool
16928 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
16929 {
16930   /* Save the old value of the PEDANTIC flag.  */
16931   *saved_pedantic = pedantic;
16932
16933   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
16934     {
16935       /* Consume the `__extension__' token.  */
16936       cp_lexer_consume_token (parser->lexer);
16937       /* We're not being pedantic while the `__extension__' keyword is
16938          in effect.  */
16939       pedantic = 0;
16940
16941       return true;
16942     }
16943
16944   return false;
16945 }
16946
16947 /* Parse a label declaration.
16948
16949    label-declaration:
16950      __label__ label-declarator-seq ;
16951
16952    label-declarator-seq:
16953      identifier , label-declarator-seq
16954      identifier  */
16955
16956 static void
16957 cp_parser_label_declaration (cp_parser* parser)
16958 {
16959   /* Look for the `__label__' keyword.  */
16960   cp_parser_require_keyword (parser, RID_LABEL, "%<__label__%>");
16961
16962   while (true)
16963     {
16964       tree identifier;
16965
16966       /* Look for an identifier.  */
16967       identifier = cp_parser_identifier (parser);
16968       /* If we failed, stop.  */
16969       if (identifier == error_mark_node)
16970         break;
16971       /* Declare it as a label.  */
16972       finish_label_decl (identifier);
16973       /* If the next token is a `;', stop.  */
16974       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
16975         break;
16976       /* Look for the `,' separating the label declarations.  */
16977       cp_parser_require (parser, CPP_COMMA, "%<,%>");
16978     }
16979
16980   /* Look for the final `;'.  */
16981   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
16982 }
16983
16984 /* Support Functions */
16985
16986 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
16987    NAME should have one of the representations used for an
16988    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
16989    is returned.  If PARSER->SCOPE is a dependent type, then a
16990    SCOPE_REF is returned.
16991
16992    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
16993    returned; the name was already resolved when the TEMPLATE_ID_EXPR
16994    was formed.  Abstractly, such entities should not be passed to this
16995    function, because they do not need to be looked up, but it is
16996    simpler to check for this special case here, rather than at the
16997    call-sites.
16998
16999    In cases not explicitly covered above, this function returns a
17000    DECL, OVERLOAD, or baselink representing the result of the lookup.
17001    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
17002    is returned.
17003
17004    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
17005    (e.g., "struct") that was used.  In that case bindings that do not
17006    refer to types are ignored.
17007
17008    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
17009    ignored.
17010
17011    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
17012    are ignored.
17013
17014    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
17015    types.
17016
17017    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
17018    TREE_LIST of candidates if name-lookup results in an ambiguity, and
17019    NULL_TREE otherwise.  */
17020
17021 static tree
17022 cp_parser_lookup_name (cp_parser *parser, tree name,
17023                        enum tag_types tag_type,
17024                        bool is_template,
17025                        bool is_namespace,
17026                        bool check_dependency,
17027                        tree *ambiguous_decls,
17028                        location_t name_location)
17029 {
17030   int flags = 0;
17031   tree decl;
17032   tree object_type = parser->context->object_type;
17033
17034   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
17035     flags |= LOOKUP_COMPLAIN;
17036
17037   /* Assume that the lookup will be unambiguous.  */
17038   if (ambiguous_decls)
17039     *ambiguous_decls = NULL_TREE;
17040
17041   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
17042      no longer valid.  Note that if we are parsing tentatively, and
17043      the parse fails, OBJECT_TYPE will be automatically restored.  */
17044   parser->context->object_type = NULL_TREE;
17045
17046   if (name == error_mark_node)
17047     return error_mark_node;
17048
17049   /* A template-id has already been resolved; there is no lookup to
17050      do.  */
17051   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
17052     return name;
17053   if (BASELINK_P (name))
17054     {
17055       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
17056                   == TEMPLATE_ID_EXPR);
17057       return name;
17058     }
17059
17060   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
17061      it should already have been checked to make sure that the name
17062      used matches the type being destroyed.  */
17063   if (TREE_CODE (name) == BIT_NOT_EXPR)
17064     {
17065       tree type;
17066
17067       /* Figure out to which type this destructor applies.  */
17068       if (parser->scope)
17069         type = parser->scope;
17070       else if (object_type)
17071         type = object_type;
17072       else
17073         type = current_class_type;
17074       /* If that's not a class type, there is no destructor.  */
17075       if (!type || !CLASS_TYPE_P (type))
17076         return error_mark_node;
17077       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
17078         lazily_declare_fn (sfk_destructor, type);
17079       if (!CLASSTYPE_DESTRUCTORS (type))
17080           return error_mark_node;
17081       /* If it was a class type, return the destructor.  */
17082       return CLASSTYPE_DESTRUCTORS (type);
17083     }
17084
17085   /* By this point, the NAME should be an ordinary identifier.  If
17086      the id-expression was a qualified name, the qualifying scope is
17087      stored in PARSER->SCOPE at this point.  */
17088   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
17089
17090   /* Perform the lookup.  */
17091   if (parser->scope)
17092     {
17093       bool dependent_p;
17094
17095       if (parser->scope == error_mark_node)
17096         return error_mark_node;
17097
17098       /* If the SCOPE is dependent, the lookup must be deferred until
17099          the template is instantiated -- unless we are explicitly
17100          looking up names in uninstantiated templates.  Even then, we
17101          cannot look up the name if the scope is not a class type; it
17102          might, for example, be a template type parameter.  */
17103       dependent_p = (TYPE_P (parser->scope)
17104                      && dependent_scope_p (parser->scope));
17105       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
17106           && dependent_p)
17107         /* Defer lookup.  */
17108         decl = error_mark_node;
17109       else
17110         {
17111           tree pushed_scope = NULL_TREE;
17112
17113           /* If PARSER->SCOPE is a dependent type, then it must be a
17114              class type, and we must not be checking dependencies;
17115              otherwise, we would have processed this lookup above.  So
17116              that PARSER->SCOPE is not considered a dependent base by
17117              lookup_member, we must enter the scope here.  */
17118           if (dependent_p)
17119             pushed_scope = push_scope (parser->scope);
17120           /* If the PARSER->SCOPE is a template specialization, it
17121              may be instantiated during name lookup.  In that case,
17122              errors may be issued.  Even if we rollback the current
17123              tentative parse, those errors are valid.  */
17124           decl = lookup_qualified_name (parser->scope, name,
17125                                         tag_type != none_type,
17126                                         /*complain=*/true);
17127
17128           /* If we have a single function from a using decl, pull it out.  */
17129           if (TREE_CODE (decl) == OVERLOAD
17130               && !really_overloaded_fn (decl))
17131             decl = OVL_FUNCTION (decl);
17132
17133           if (pushed_scope)
17134             pop_scope (pushed_scope);
17135         }
17136
17137       /* If the scope is a dependent type and either we deferred lookup or
17138          we did lookup but didn't find the name, rememeber the name.  */
17139       if (decl == error_mark_node && TYPE_P (parser->scope)
17140           && dependent_type_p (parser->scope))
17141         {
17142           if (tag_type)
17143             {
17144               tree type;
17145
17146               /* The resolution to Core Issue 180 says that `struct
17147                  A::B' should be considered a type-name, even if `A'
17148                  is dependent.  */
17149               type = make_typename_type (parser->scope, name, tag_type,
17150                                          /*complain=*/tf_error);
17151               decl = TYPE_NAME (type);
17152             }
17153           else if (is_template
17154                    && (cp_parser_next_token_ends_template_argument_p (parser)
17155                        || cp_lexer_next_token_is (parser->lexer,
17156                                                   CPP_CLOSE_PAREN)))
17157             decl = make_unbound_class_template (parser->scope,
17158                                                 name, NULL_TREE,
17159                                                 /*complain=*/tf_error);
17160           else
17161             decl = build_qualified_name (/*type=*/NULL_TREE,
17162                                          parser->scope, name,
17163                                          is_template);
17164         }
17165       parser->qualifying_scope = parser->scope;
17166       parser->object_scope = NULL_TREE;
17167     }
17168   else if (object_type)
17169     {
17170       tree object_decl = NULL_TREE;
17171       /* Look up the name in the scope of the OBJECT_TYPE, unless the
17172          OBJECT_TYPE is not a class.  */
17173       if (CLASS_TYPE_P (object_type))
17174         /* If the OBJECT_TYPE is a template specialization, it may
17175            be instantiated during name lookup.  In that case, errors
17176            may be issued.  Even if we rollback the current tentative
17177            parse, those errors are valid.  */
17178         object_decl = lookup_member (object_type,
17179                                      name,
17180                                      /*protect=*/0,
17181                                      tag_type != none_type);
17182       /* Look it up in the enclosing context, too.  */
17183       decl = lookup_name_real (name, tag_type != none_type,
17184                                /*nonclass=*/0,
17185                                /*block_p=*/true, is_namespace, flags);
17186       parser->object_scope = object_type;
17187       parser->qualifying_scope = NULL_TREE;
17188       if (object_decl)
17189         decl = object_decl;
17190     }
17191   else
17192     {
17193       decl = lookup_name_real (name, tag_type != none_type,
17194                                /*nonclass=*/0,
17195                                /*block_p=*/true, is_namespace, flags);
17196       parser->qualifying_scope = NULL_TREE;
17197       parser->object_scope = NULL_TREE;
17198     }
17199
17200   /* If the lookup failed, let our caller know.  */
17201   if (!decl || decl == error_mark_node)
17202     return error_mark_node;
17203
17204   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
17205   if (TREE_CODE (decl) == TREE_LIST)
17206     {
17207       if (ambiguous_decls)
17208         *ambiguous_decls = decl;
17209       /* The error message we have to print is too complicated for
17210          cp_parser_error, so we incorporate its actions directly.  */
17211       if (!cp_parser_simulate_error (parser))
17212         {
17213           error ("%Hreference to %qD is ambiguous",
17214                  &name_location, name);
17215           print_candidates (decl);
17216         }
17217       return error_mark_node;
17218     }
17219
17220   gcc_assert (DECL_P (decl)
17221               || TREE_CODE (decl) == OVERLOAD
17222               || TREE_CODE (decl) == SCOPE_REF
17223               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
17224               || BASELINK_P (decl));
17225
17226   /* If we have resolved the name of a member declaration, check to
17227      see if the declaration is accessible.  When the name resolves to
17228      set of overloaded functions, accessibility is checked when
17229      overload resolution is done.
17230
17231      During an explicit instantiation, access is not checked at all,
17232      as per [temp.explicit].  */
17233   if (DECL_P (decl))
17234     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
17235
17236   return decl;
17237 }
17238
17239 /* Like cp_parser_lookup_name, but for use in the typical case where
17240    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
17241    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
17242
17243 static tree
17244 cp_parser_lookup_name_simple (cp_parser* parser, tree name, location_t location)
17245 {
17246   return cp_parser_lookup_name (parser, name,
17247                                 none_type,
17248                                 /*is_template=*/false,
17249                                 /*is_namespace=*/false,
17250                                 /*check_dependency=*/true,
17251                                 /*ambiguous_decls=*/NULL,
17252                                 location);
17253 }
17254
17255 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
17256    the current context, return the TYPE_DECL.  If TAG_NAME_P is
17257    true, the DECL indicates the class being defined in a class-head,
17258    or declared in an elaborated-type-specifier.
17259
17260    Otherwise, return DECL.  */
17261
17262 static tree
17263 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
17264 {
17265   /* If the TEMPLATE_DECL is being declared as part of a class-head,
17266      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
17267
17268        struct A {
17269          template <typename T> struct B;
17270        };
17271
17272        template <typename T> struct A::B {};
17273
17274      Similarly, in an elaborated-type-specifier:
17275
17276        namespace N { struct X{}; }
17277
17278        struct A {
17279          template <typename T> friend struct N::X;
17280        };
17281
17282      However, if the DECL refers to a class type, and we are in
17283      the scope of the class, then the name lookup automatically
17284      finds the TYPE_DECL created by build_self_reference rather
17285      than a TEMPLATE_DECL.  For example, in:
17286
17287        template <class T> struct S {
17288          S s;
17289        };
17290
17291      there is no need to handle such case.  */
17292
17293   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
17294     return DECL_TEMPLATE_RESULT (decl);
17295
17296   return decl;
17297 }
17298
17299 /* If too many, or too few, template-parameter lists apply to the
17300    declarator, issue an error message.  Returns TRUE if all went well,
17301    and FALSE otherwise.  */
17302
17303 static bool
17304 cp_parser_check_declarator_template_parameters (cp_parser* parser,
17305                                                 cp_declarator *declarator,
17306                                                 location_t declarator_location)
17307 {
17308   unsigned num_templates;
17309
17310   /* We haven't seen any classes that involve template parameters yet.  */
17311   num_templates = 0;
17312
17313   switch (declarator->kind)
17314     {
17315     case cdk_id:
17316       if (declarator->u.id.qualifying_scope)
17317         {
17318           tree scope;
17319           tree member;
17320
17321           scope = declarator->u.id.qualifying_scope;
17322           member = declarator->u.id.unqualified_name;
17323
17324           while (scope && CLASS_TYPE_P (scope))
17325             {
17326               /* You're supposed to have one `template <...>'
17327                  for every template class, but you don't need one
17328                  for a full specialization.  For example:
17329
17330                  template <class T> struct S{};
17331                  template <> struct S<int> { void f(); };
17332                  void S<int>::f () {}
17333
17334                  is correct; there shouldn't be a `template <>' for
17335                  the definition of `S<int>::f'.  */
17336               if (!CLASSTYPE_TEMPLATE_INFO (scope))
17337                 /* If SCOPE does not have template information of any
17338                    kind, then it is not a template, nor is it nested
17339                    within a template.  */
17340                 break;
17341               if (explicit_class_specialization_p (scope))
17342                 break;
17343               if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
17344                 ++num_templates;
17345
17346               scope = TYPE_CONTEXT (scope);
17347             }
17348         }
17349       else if (TREE_CODE (declarator->u.id.unqualified_name)
17350                == TEMPLATE_ID_EXPR)
17351         /* If the DECLARATOR has the form `X<y>' then it uses one
17352            additional level of template parameters.  */
17353         ++num_templates;
17354
17355       return cp_parser_check_template_parameters 
17356         (parser, num_templates, declarator_location, declarator);
17357
17358
17359     case cdk_function:
17360     case cdk_array:
17361     case cdk_pointer:
17362     case cdk_reference:
17363     case cdk_ptrmem:
17364       return (cp_parser_check_declarator_template_parameters
17365               (parser, declarator->declarator, declarator_location));
17366
17367     case cdk_error:
17368       return true;
17369
17370     default:
17371       gcc_unreachable ();
17372     }
17373   return false;
17374 }
17375
17376 /* NUM_TEMPLATES were used in the current declaration.  If that is
17377    invalid, return FALSE and issue an error messages.  Otherwise,
17378    return TRUE.  If DECLARATOR is non-NULL, then we are checking a
17379    declarator and we can print more accurate diagnostics.  */
17380
17381 static bool
17382 cp_parser_check_template_parameters (cp_parser* parser,
17383                                      unsigned num_templates,
17384                                      location_t location,
17385                                      cp_declarator *declarator)
17386 {
17387   /* If there are the same number of template classes and parameter
17388      lists, that's OK.  */
17389   if (parser->num_template_parameter_lists == num_templates)
17390     return true;
17391   /* If there are more, but only one more, then we are referring to a
17392      member template.  That's OK too.  */
17393   if (parser->num_template_parameter_lists == num_templates + 1)
17394     return true;
17395   /* If there are more template classes than parameter lists, we have
17396      something like:
17397
17398        template <class T> void S<T>::R<T>::f ();  */
17399   if (parser->num_template_parameter_lists < num_templates)
17400     {
17401       if (declarator)
17402         error_at (location, "specializing member %<%T::%E%> "
17403                   "requires %<template<>%> syntax", 
17404                   declarator->u.id.qualifying_scope,
17405                   declarator->u.id.unqualified_name);
17406       else 
17407         error_at (location, "too few template-parameter-lists");
17408       return false;
17409     }
17410   /* Otherwise, there are too many template parameter lists.  We have
17411      something like:
17412
17413      template <class T> template <class U> void S::f();  */
17414   error ("%Htoo many template-parameter-lists", &location);
17415   return false;
17416 }
17417
17418 /* Parse an optional `::' token indicating that the following name is
17419    from the global namespace.  If so, PARSER->SCOPE is set to the
17420    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
17421    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
17422    Returns the new value of PARSER->SCOPE, if the `::' token is
17423    present, and NULL_TREE otherwise.  */
17424
17425 static tree
17426 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
17427 {
17428   cp_token *token;
17429
17430   /* Peek at the next token.  */
17431   token = cp_lexer_peek_token (parser->lexer);
17432   /* If we're looking at a `::' token then we're starting from the
17433      global namespace, not our current location.  */
17434   if (token->type == CPP_SCOPE)
17435     {
17436       /* Consume the `::' token.  */
17437       cp_lexer_consume_token (parser->lexer);
17438       /* Set the SCOPE so that we know where to start the lookup.  */
17439       parser->scope = global_namespace;
17440       parser->qualifying_scope = global_namespace;
17441       parser->object_scope = NULL_TREE;
17442
17443       return parser->scope;
17444     }
17445   else if (!current_scope_valid_p)
17446     {
17447       parser->scope = NULL_TREE;
17448       parser->qualifying_scope = NULL_TREE;
17449       parser->object_scope = NULL_TREE;
17450     }
17451
17452   return NULL_TREE;
17453 }
17454
17455 /* Returns TRUE if the upcoming token sequence is the start of a
17456    constructor declarator.  If FRIEND_P is true, the declarator is
17457    preceded by the `friend' specifier.  */
17458
17459 static bool
17460 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
17461 {
17462   bool constructor_p;
17463   tree type_decl = NULL_TREE;
17464   bool nested_name_p;
17465   cp_token *next_token;
17466
17467   /* The common case is that this is not a constructor declarator, so
17468      try to avoid doing lots of work if at all possible.  It's not
17469      valid declare a constructor at function scope.  */
17470   if (parser->in_function_body)
17471     return false;
17472   /* And only certain tokens can begin a constructor declarator.  */
17473   next_token = cp_lexer_peek_token (parser->lexer);
17474   if (next_token->type != CPP_NAME
17475       && next_token->type != CPP_SCOPE
17476       && next_token->type != CPP_NESTED_NAME_SPECIFIER
17477       && next_token->type != CPP_TEMPLATE_ID)
17478     return false;
17479
17480   /* Parse tentatively; we are going to roll back all of the tokens
17481      consumed here.  */
17482   cp_parser_parse_tentatively (parser);
17483   /* Assume that we are looking at a constructor declarator.  */
17484   constructor_p = true;
17485
17486   /* Look for the optional `::' operator.  */
17487   cp_parser_global_scope_opt (parser,
17488                               /*current_scope_valid_p=*/false);
17489   /* Look for the nested-name-specifier.  */
17490   nested_name_p
17491     = (cp_parser_nested_name_specifier_opt (parser,
17492                                             /*typename_keyword_p=*/false,
17493                                             /*check_dependency_p=*/false,
17494                                             /*type_p=*/false,
17495                                             /*is_declaration=*/false)
17496        != NULL_TREE);
17497   /* Outside of a class-specifier, there must be a
17498      nested-name-specifier.  */
17499   if (!nested_name_p &&
17500       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
17501        || friend_p))
17502     constructor_p = false;
17503   /* If we still think that this might be a constructor-declarator,
17504      look for a class-name.  */
17505   if (constructor_p)
17506     {
17507       /* If we have:
17508
17509            template <typename T> struct S { S(); };
17510            template <typename T> S<T>::S ();
17511
17512          we must recognize that the nested `S' names a class.
17513          Similarly, for:
17514
17515            template <typename T> S<T>::S<T> ();
17516
17517          we must recognize that the nested `S' names a template.  */
17518       type_decl = cp_parser_class_name (parser,
17519                                         /*typename_keyword_p=*/false,
17520                                         /*template_keyword_p=*/false,
17521                                         none_type,
17522                                         /*check_dependency_p=*/false,
17523                                         /*class_head_p=*/false,
17524                                         /*is_declaration=*/false);
17525       /* If there was no class-name, then this is not a constructor.  */
17526       constructor_p = !cp_parser_error_occurred (parser);
17527     }
17528
17529   /* If we're still considering a constructor, we have to see a `(',
17530      to begin the parameter-declaration-clause, followed by either a
17531      `)', an `...', or a decl-specifier.  We need to check for a
17532      type-specifier to avoid being fooled into thinking that:
17533
17534        S::S (f) (int);
17535
17536      is a constructor.  (It is actually a function named `f' that
17537      takes one parameter (of type `int') and returns a value of type
17538      `S::S'.  */
17539   if (constructor_p
17540       && cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
17541     {
17542       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
17543           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
17544           /* A parameter declaration begins with a decl-specifier,
17545              which is either the "attribute" keyword, a storage class
17546              specifier, or (usually) a type-specifier.  */
17547           && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
17548         {
17549           tree type;
17550           tree pushed_scope = NULL_TREE;
17551           unsigned saved_num_template_parameter_lists;
17552
17553           /* Names appearing in the type-specifier should be looked up
17554              in the scope of the class.  */
17555           if (current_class_type)
17556             type = NULL_TREE;
17557           else
17558             {
17559               type = TREE_TYPE (type_decl);
17560               if (TREE_CODE (type) == TYPENAME_TYPE)
17561                 {
17562                   type = resolve_typename_type (type,
17563                                                 /*only_current_p=*/false);
17564                   if (TREE_CODE (type) == TYPENAME_TYPE)
17565                     {
17566                       cp_parser_abort_tentative_parse (parser);
17567                       return false;
17568                     }
17569                 }
17570               pushed_scope = push_scope (type);
17571             }
17572
17573           /* Inside the constructor parameter list, surrounding
17574              template-parameter-lists do not apply.  */
17575           saved_num_template_parameter_lists
17576             = parser->num_template_parameter_lists;
17577           parser->num_template_parameter_lists = 0;
17578
17579           /* Look for the type-specifier.  */
17580           cp_parser_type_specifier (parser,
17581                                     CP_PARSER_FLAGS_NONE,
17582                                     /*decl_specs=*/NULL,
17583                                     /*is_declarator=*/true,
17584                                     /*declares_class_or_enum=*/NULL,
17585                                     /*is_cv_qualifier=*/NULL);
17586
17587           parser->num_template_parameter_lists
17588             = saved_num_template_parameter_lists;
17589
17590           /* Leave the scope of the class.  */
17591           if (pushed_scope)
17592             pop_scope (pushed_scope);
17593
17594           constructor_p = !cp_parser_error_occurred (parser);
17595         }
17596     }
17597   else
17598     constructor_p = false;
17599   /* We did not really want to consume any tokens.  */
17600   cp_parser_abort_tentative_parse (parser);
17601
17602   return constructor_p;
17603 }
17604
17605 /* Parse the definition of the function given by the DECL_SPECIFIERS,
17606    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
17607    they must be performed once we are in the scope of the function.
17608
17609    Returns the function defined.  */
17610
17611 static tree
17612 cp_parser_function_definition_from_specifiers_and_declarator
17613   (cp_parser* parser,
17614    cp_decl_specifier_seq *decl_specifiers,
17615    tree attributes,
17616    const cp_declarator *declarator)
17617 {
17618   tree fn;
17619   bool success_p;
17620
17621   /* Begin the function-definition.  */
17622   success_p = start_function (decl_specifiers, declarator, attributes);
17623
17624   /* The things we're about to see are not directly qualified by any
17625      template headers we've seen thus far.  */
17626   reset_specialization ();
17627
17628   /* If there were names looked up in the decl-specifier-seq that we
17629      did not check, check them now.  We must wait until we are in the
17630      scope of the function to perform the checks, since the function
17631      might be a friend.  */
17632   perform_deferred_access_checks ();
17633
17634   if (!success_p)
17635     {
17636       /* Skip the entire function.  */
17637       cp_parser_skip_to_end_of_block_or_statement (parser);
17638       fn = error_mark_node;
17639     }
17640   else if (DECL_INITIAL (current_function_decl) != error_mark_node)
17641     {
17642       /* Seen already, skip it.  An error message has already been output.  */
17643       cp_parser_skip_to_end_of_block_or_statement (parser);
17644       fn = current_function_decl;
17645       current_function_decl = NULL_TREE;
17646       /* If this is a function from a class, pop the nested class.  */
17647       if (current_class_name)
17648         pop_nested_class ();
17649     }
17650   else
17651     fn = cp_parser_function_definition_after_declarator (parser,
17652                                                          /*inline_p=*/false);
17653
17654   return fn;
17655 }
17656
17657 /* Parse the part of a function-definition that follows the
17658    declarator.  INLINE_P is TRUE iff this function is an inline
17659    function defined with a class-specifier.
17660
17661    Returns the function defined.  */
17662
17663 static tree
17664 cp_parser_function_definition_after_declarator (cp_parser* parser,
17665                                                 bool inline_p)
17666 {
17667   tree fn;
17668   bool ctor_initializer_p = false;
17669   bool saved_in_unbraced_linkage_specification_p;
17670   bool saved_in_function_body;
17671   unsigned saved_num_template_parameter_lists;
17672   cp_token *token;
17673
17674   saved_in_function_body = parser->in_function_body;
17675   parser->in_function_body = true;
17676   /* If the next token is `return', then the code may be trying to
17677      make use of the "named return value" extension that G++ used to
17678      support.  */
17679   token = cp_lexer_peek_token (parser->lexer);
17680   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
17681     {
17682       /* Consume the `return' keyword.  */
17683       cp_lexer_consume_token (parser->lexer);
17684       /* Look for the identifier that indicates what value is to be
17685          returned.  */
17686       cp_parser_identifier (parser);
17687       /* Issue an error message.  */
17688       error ("%Hnamed return values are no longer supported",
17689              &token->location);
17690       /* Skip tokens until we reach the start of the function body.  */
17691       while (true)
17692         {
17693           cp_token *token = cp_lexer_peek_token (parser->lexer);
17694           if (token->type == CPP_OPEN_BRACE
17695               || token->type == CPP_EOF
17696               || token->type == CPP_PRAGMA_EOL)
17697             break;
17698           cp_lexer_consume_token (parser->lexer);
17699         }
17700     }
17701   /* The `extern' in `extern "C" void f () { ... }' does not apply to
17702      anything declared inside `f'.  */
17703   saved_in_unbraced_linkage_specification_p
17704     = parser->in_unbraced_linkage_specification_p;
17705   parser->in_unbraced_linkage_specification_p = false;
17706   /* Inside the function, surrounding template-parameter-lists do not
17707      apply.  */
17708   saved_num_template_parameter_lists
17709     = parser->num_template_parameter_lists;
17710   parser->num_template_parameter_lists = 0;
17711   /* If the next token is `try', then we are looking at a
17712      function-try-block.  */
17713   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
17714     ctor_initializer_p = cp_parser_function_try_block (parser);
17715   /* A function-try-block includes the function-body, so we only do
17716      this next part if we're not processing a function-try-block.  */
17717   else
17718     ctor_initializer_p
17719       = cp_parser_ctor_initializer_opt_and_function_body (parser);
17720
17721   /* Finish the function.  */
17722   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
17723                         (inline_p ? 2 : 0));
17724   /* Generate code for it, if necessary.  */
17725   expand_or_defer_fn (fn);
17726   /* Restore the saved values.  */
17727   parser->in_unbraced_linkage_specification_p
17728     = saved_in_unbraced_linkage_specification_p;
17729   parser->num_template_parameter_lists
17730     = saved_num_template_parameter_lists;
17731   parser->in_function_body = saved_in_function_body;
17732
17733   return fn;
17734 }
17735
17736 /* Parse a template-declaration, assuming that the `export' (and
17737    `extern') keywords, if present, has already been scanned.  MEMBER_P
17738    is as for cp_parser_template_declaration.  */
17739
17740 static void
17741 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
17742 {
17743   tree decl = NULL_TREE;
17744   VEC (deferred_access_check,gc) *checks;
17745   tree parameter_list;
17746   bool friend_p = false;
17747   bool need_lang_pop;
17748   cp_token *token;
17749
17750   /* Look for the `template' keyword.  */
17751   token = cp_lexer_peek_token (parser->lexer);
17752   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "%<template%>"))
17753     return;
17754
17755   /* And the `<'.  */
17756   if (!cp_parser_require (parser, CPP_LESS, "%<<%>"))
17757     return;
17758   if (at_class_scope_p () && current_function_decl)
17759     {
17760       /* 14.5.2.2 [temp.mem]
17761
17762          A local class shall not have member templates.  */
17763       error ("%Hinvalid declaration of member template in local class",
17764              &token->location);
17765       cp_parser_skip_to_end_of_block_or_statement (parser);
17766       return;
17767     }
17768   /* [temp]
17769
17770      A template ... shall not have C linkage.  */
17771   if (current_lang_name == lang_name_c)
17772     {
17773       error ("%Htemplate with C linkage", &token->location);
17774       /* Give it C++ linkage to avoid confusing other parts of the
17775          front end.  */
17776       push_lang_context (lang_name_cplusplus);
17777       need_lang_pop = true;
17778     }
17779   else
17780     need_lang_pop = false;
17781
17782   /* We cannot perform access checks on the template parameter
17783      declarations until we know what is being declared, just as we
17784      cannot check the decl-specifier list.  */
17785   push_deferring_access_checks (dk_deferred);
17786
17787   /* If the next token is `>', then we have an invalid
17788      specialization.  Rather than complain about an invalid template
17789      parameter, issue an error message here.  */
17790   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
17791     {
17792       cp_parser_error (parser, "invalid explicit specialization");
17793       begin_specialization ();
17794       parameter_list = NULL_TREE;
17795     }
17796   else
17797     /* Parse the template parameters.  */
17798     parameter_list = cp_parser_template_parameter_list (parser);
17799
17800   /* Get the deferred access checks from the parameter list.  These
17801      will be checked once we know what is being declared, as for a
17802      member template the checks must be performed in the scope of the
17803      class containing the member.  */
17804   checks = get_deferred_access_checks ();
17805
17806   /* Look for the `>'.  */
17807   cp_parser_skip_to_end_of_template_parameter_list (parser);
17808   /* We just processed one more parameter list.  */
17809   ++parser->num_template_parameter_lists;
17810   /* If the next token is `template', there are more template
17811      parameters.  */
17812   if (cp_lexer_next_token_is_keyword (parser->lexer,
17813                                       RID_TEMPLATE))
17814     cp_parser_template_declaration_after_export (parser, member_p);
17815   else
17816     {
17817       /* There are no access checks when parsing a template, as we do not
17818          know if a specialization will be a friend.  */
17819       push_deferring_access_checks (dk_no_check);
17820       token = cp_lexer_peek_token (parser->lexer);
17821       decl = cp_parser_single_declaration (parser,
17822                                            checks,
17823                                            member_p,
17824                                            /*explicit_specialization_p=*/false,
17825                                            &friend_p);
17826       pop_deferring_access_checks ();
17827
17828       /* If this is a member template declaration, let the front
17829          end know.  */
17830       if (member_p && !friend_p && decl)
17831         {
17832           if (TREE_CODE (decl) == TYPE_DECL)
17833             cp_parser_check_access_in_redeclaration (decl, token->location);
17834
17835           decl = finish_member_template_decl (decl);
17836         }
17837       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
17838         make_friend_class (current_class_type, TREE_TYPE (decl),
17839                            /*complain=*/true);
17840     }
17841   /* We are done with the current parameter list.  */
17842   --parser->num_template_parameter_lists;
17843
17844   pop_deferring_access_checks ();
17845
17846   /* Finish up.  */
17847   finish_template_decl (parameter_list);
17848
17849   /* Register member declarations.  */
17850   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
17851     finish_member_declaration (decl);
17852   /* For the erroneous case of a template with C linkage, we pushed an
17853      implicit C++ linkage scope; exit that scope now.  */
17854   if (need_lang_pop)
17855     pop_lang_context ();
17856   /* If DECL is a function template, we must return to parse it later.
17857      (Even though there is no definition, there might be default
17858      arguments that need handling.)  */
17859   if (member_p && decl
17860       && (TREE_CODE (decl) == FUNCTION_DECL
17861           || DECL_FUNCTION_TEMPLATE_P (decl)))
17862     TREE_VALUE (parser->unparsed_functions_queues)
17863       = tree_cons (NULL_TREE, decl,
17864                    TREE_VALUE (parser->unparsed_functions_queues));
17865 }
17866
17867 /* Perform the deferred access checks from a template-parameter-list.
17868    CHECKS is a TREE_LIST of access checks, as returned by
17869    get_deferred_access_checks.  */
17870
17871 static void
17872 cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
17873 {
17874   ++processing_template_parmlist;
17875   perform_access_checks (checks);
17876   --processing_template_parmlist;
17877 }
17878
17879 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
17880    `function-definition' sequence.  MEMBER_P is true, this declaration
17881    appears in a class scope.
17882
17883    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
17884    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
17885
17886 static tree
17887 cp_parser_single_declaration (cp_parser* parser,
17888                               VEC (deferred_access_check,gc)* checks,
17889                               bool member_p,
17890                               bool explicit_specialization_p,
17891                               bool* friend_p)
17892 {
17893   int declares_class_or_enum;
17894   tree decl = NULL_TREE;
17895   cp_decl_specifier_seq decl_specifiers;
17896   bool function_definition_p = false;
17897   cp_token *decl_spec_token_start;
17898
17899   /* This function is only used when processing a template
17900      declaration.  */
17901   gcc_assert (innermost_scope_kind () == sk_template_parms
17902               || innermost_scope_kind () == sk_template_spec);
17903
17904   /* Defer access checks until we know what is being declared.  */
17905   push_deferring_access_checks (dk_deferred);
17906
17907   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
17908      alternative.  */
17909   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
17910   cp_parser_decl_specifier_seq (parser,
17911                                 CP_PARSER_FLAGS_OPTIONAL,
17912                                 &decl_specifiers,
17913                                 &declares_class_or_enum);
17914   if (friend_p)
17915     *friend_p = cp_parser_friend_p (&decl_specifiers);
17916
17917   /* There are no template typedefs.  */
17918   if (decl_specifiers.specs[(int) ds_typedef])
17919     {
17920       error ("%Htemplate declaration of %qs",
17921              &decl_spec_token_start->location, "typedef");
17922       decl = error_mark_node;
17923     }
17924
17925   /* Gather up the access checks that occurred the
17926      decl-specifier-seq.  */
17927   stop_deferring_access_checks ();
17928
17929   /* Check for the declaration of a template class.  */
17930   if (declares_class_or_enum)
17931     {
17932       if (cp_parser_declares_only_class_p (parser))
17933         {
17934           decl = shadow_tag (&decl_specifiers);
17935
17936           /* In this case:
17937
17938                struct C {
17939                  friend template <typename T> struct A<T>::B;
17940                };
17941
17942              A<T>::B will be represented by a TYPENAME_TYPE, and
17943              therefore not recognized by shadow_tag.  */
17944           if (friend_p && *friend_p
17945               && !decl
17946               && decl_specifiers.type
17947               && TYPE_P (decl_specifiers.type))
17948             decl = decl_specifiers.type;
17949
17950           if (decl && decl != error_mark_node)
17951             decl = TYPE_NAME (decl);
17952           else
17953             decl = error_mark_node;
17954
17955           /* Perform access checks for template parameters.  */
17956           cp_parser_perform_template_parameter_access_checks (checks);
17957         }
17958     }
17959   /* If it's not a template class, try for a template function.  If
17960      the next token is a `;', then this declaration does not declare
17961      anything.  But, if there were errors in the decl-specifiers, then
17962      the error might well have come from an attempted class-specifier.
17963      In that case, there's no need to warn about a missing declarator.  */
17964   if (!decl
17965       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
17966           || decl_specifiers.type != error_mark_node))
17967     {
17968       decl = cp_parser_init_declarator (parser,
17969                                         &decl_specifiers,
17970                                         checks,
17971                                         /*function_definition_allowed_p=*/true,
17972                                         member_p,
17973                                         declares_class_or_enum,
17974                                         &function_definition_p);
17975
17976     /* 7.1.1-1 [dcl.stc]
17977
17978        A storage-class-specifier shall not be specified in an explicit
17979        specialization...  */
17980     if (decl
17981         && explicit_specialization_p
17982         && decl_specifiers.storage_class != sc_none)
17983       {
17984         error ("%Hexplicit template specialization cannot have a storage class",
17985                &decl_spec_token_start->location);
17986         decl = error_mark_node;
17987       }
17988     }
17989
17990   pop_deferring_access_checks ();
17991
17992   /* Clear any current qualification; whatever comes next is the start
17993      of something new.  */
17994   parser->scope = NULL_TREE;
17995   parser->qualifying_scope = NULL_TREE;
17996   parser->object_scope = NULL_TREE;
17997   /* Look for a trailing `;' after the declaration.  */
17998   if (!function_definition_p
17999       && (decl == error_mark_node
18000           || !cp_parser_require (parser, CPP_SEMICOLON, "%<;%>")))
18001     cp_parser_skip_to_end_of_block_or_statement (parser);
18002
18003   return decl;
18004 }
18005
18006 /* Parse a cast-expression that is not the operand of a unary "&".  */
18007
18008 static tree
18009 cp_parser_simple_cast_expression (cp_parser *parser)
18010 {
18011   return cp_parser_cast_expression (parser, /*address_p=*/false,
18012                                     /*cast_p=*/false, NULL);
18013 }
18014
18015 /* Parse a functional cast to TYPE.  Returns an expression
18016    representing the cast.  */
18017
18018 static tree
18019 cp_parser_functional_cast (cp_parser* parser, tree type)
18020 {
18021   VEC(tree,gc) *vec;
18022   tree expression_list;
18023   tree cast;
18024   bool nonconst_p;
18025
18026   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
18027     {
18028       maybe_warn_cpp0x ("extended initializer lists");
18029       expression_list = cp_parser_braced_list (parser, &nonconst_p);
18030       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
18031       if (TREE_CODE (type) == TYPE_DECL)
18032         type = TREE_TYPE (type);
18033       return finish_compound_literal (type, expression_list);
18034     }
18035
18036
18037   vec = cp_parser_parenthesized_expression_list (parser, false,
18038                                                  /*cast_p=*/true,
18039                                                  /*allow_expansion_p=*/true,
18040                                                  /*non_constant_p=*/NULL);
18041   if (vec == NULL)
18042     expression_list = error_mark_node;
18043   else
18044     {
18045       expression_list = build_tree_list_vec (vec);
18046       release_tree_vector (vec);
18047     }
18048
18049   cast = build_functional_cast (type, expression_list,
18050                                 tf_warning_or_error);
18051   /* [expr.const]/1: In an integral constant expression "only type
18052      conversions to integral or enumeration type can be used".  */
18053   if (TREE_CODE (type) == TYPE_DECL)
18054     type = TREE_TYPE (type);
18055   if (cast != error_mark_node
18056       && !cast_valid_in_integral_constant_expression_p (type)
18057       && (cp_parser_non_integral_constant_expression
18058           (parser, "a call to a constructor")))
18059     return error_mark_node;
18060   return cast;
18061 }
18062
18063 /* Save the tokens that make up the body of a member function defined
18064    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
18065    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
18066    specifiers applied to the declaration.  Returns the FUNCTION_DECL
18067    for the member function.  */
18068
18069 static tree
18070 cp_parser_save_member_function_body (cp_parser* parser,
18071                                      cp_decl_specifier_seq *decl_specifiers,
18072                                      cp_declarator *declarator,
18073                                      tree attributes)
18074 {
18075   cp_token *first;
18076   cp_token *last;
18077   tree fn;
18078
18079   /* Create the function-declaration.  */
18080   fn = start_method (decl_specifiers, declarator, attributes);
18081   /* If something went badly wrong, bail out now.  */
18082   if (fn == error_mark_node)
18083     {
18084       /* If there's a function-body, skip it.  */
18085       if (cp_parser_token_starts_function_definition_p
18086           (cp_lexer_peek_token (parser->lexer)))
18087         cp_parser_skip_to_end_of_block_or_statement (parser);
18088       return error_mark_node;
18089     }
18090
18091   /* Remember it, if there default args to post process.  */
18092   cp_parser_save_default_args (parser, fn);
18093
18094   /* Save away the tokens that make up the body of the
18095      function.  */
18096   first = parser->lexer->next_token;
18097   /* We can have braced-init-list mem-initializers before the fn body.  */
18098   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
18099     {
18100       cp_lexer_consume_token (parser->lexer);
18101       while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
18102              && cp_lexer_next_token_is_not_keyword (parser->lexer, RID_TRY))
18103         {
18104           /* cache_group will stop after an un-nested { } pair, too.  */
18105           if (cp_parser_cache_group (parser, CPP_CLOSE_PAREN, /*depth=*/0))
18106             break;
18107
18108           /* variadic mem-inits have ... after the ')'.  */
18109           if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
18110             cp_lexer_consume_token (parser->lexer);
18111         }
18112     }
18113   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
18114   /* Handle function try blocks.  */
18115   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
18116     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
18117   last = parser->lexer->next_token;
18118
18119   /* Save away the inline definition; we will process it when the
18120      class is complete.  */
18121   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
18122   DECL_PENDING_INLINE_P (fn) = 1;
18123
18124   /* We need to know that this was defined in the class, so that
18125      friend templates are handled correctly.  */
18126   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
18127
18128   /* We're done with the inline definition.  */
18129   finish_method (fn);
18130
18131   /* Add FN to the queue of functions to be parsed later.  */
18132   TREE_VALUE (parser->unparsed_functions_queues)
18133     = tree_cons (NULL_TREE, fn,
18134                  TREE_VALUE (parser->unparsed_functions_queues));
18135
18136   return fn;
18137 }
18138
18139 /* Parse a template-argument-list, as well as the trailing ">" (but
18140    not the opening ">").  See cp_parser_template_argument_list for the
18141    return value.  */
18142
18143 static tree
18144 cp_parser_enclosed_template_argument_list (cp_parser* parser)
18145 {
18146   tree arguments;
18147   tree saved_scope;
18148   tree saved_qualifying_scope;
18149   tree saved_object_scope;
18150   bool saved_greater_than_is_operator_p;
18151   bool saved_skip_evaluation;
18152
18153   /* [temp.names]
18154
18155      When parsing a template-id, the first non-nested `>' is taken as
18156      the end of the template-argument-list rather than a greater-than
18157      operator.  */
18158   saved_greater_than_is_operator_p
18159     = parser->greater_than_is_operator_p;
18160   parser->greater_than_is_operator_p = false;
18161   /* Parsing the argument list may modify SCOPE, so we save it
18162      here.  */
18163   saved_scope = parser->scope;
18164   saved_qualifying_scope = parser->qualifying_scope;
18165   saved_object_scope = parser->object_scope;
18166   /* We need to evaluate the template arguments, even though this
18167      template-id may be nested within a "sizeof".  */
18168   saved_skip_evaluation = skip_evaluation;
18169   skip_evaluation = false;
18170   /* Parse the template-argument-list itself.  */
18171   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER)
18172       || cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
18173     arguments = NULL_TREE;
18174   else
18175     arguments = cp_parser_template_argument_list (parser);
18176   /* Look for the `>' that ends the template-argument-list. If we find
18177      a '>>' instead, it's probably just a typo.  */
18178   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
18179     {
18180       if (cxx_dialect != cxx98)
18181         {
18182           /* In C++0x, a `>>' in a template argument list or cast
18183              expression is considered to be two separate `>'
18184              tokens. So, change the current token to a `>', but don't
18185              consume it: it will be consumed later when the outer
18186              template argument list (or cast expression) is parsed.
18187              Note that this replacement of `>' for `>>' is necessary
18188              even if we are parsing tentatively: in the tentative
18189              case, after calling
18190              cp_parser_enclosed_template_argument_list we will always
18191              throw away all of the template arguments and the first
18192              closing `>', either because the template argument list
18193              was erroneous or because we are replacing those tokens
18194              with a CPP_TEMPLATE_ID token.  The second `>' (which will
18195              not have been thrown away) is needed either to close an
18196              outer template argument list or to complete a new-style
18197              cast.  */
18198           cp_token *token = cp_lexer_peek_token (parser->lexer);
18199           token->type = CPP_GREATER;
18200         }
18201       else if (!saved_greater_than_is_operator_p)
18202         {
18203           /* If we're in a nested template argument list, the '>>' has
18204             to be a typo for '> >'. We emit the error message, but we
18205             continue parsing and we push a '>' as next token, so that
18206             the argument list will be parsed correctly.  Note that the
18207             global source location is still on the token before the
18208             '>>', so we need to say explicitly where we want it.  */
18209           cp_token *token = cp_lexer_peek_token (parser->lexer);
18210           error ("%H%<>>%> should be %<> >%> "
18211                  "within a nested template argument list",
18212                  &token->location);
18213
18214           token->type = CPP_GREATER;
18215         }
18216       else
18217         {
18218           /* If this is not a nested template argument list, the '>>'
18219             is a typo for '>'. Emit an error message and continue.
18220             Same deal about the token location, but here we can get it
18221             right by consuming the '>>' before issuing the diagnostic.  */
18222           cp_token *token = cp_lexer_consume_token (parser->lexer);
18223           error ("%Hspurious %<>>%>, use %<>%> to terminate "
18224                  "a template argument list", &token->location);
18225         }
18226     }
18227   else
18228     cp_parser_skip_to_end_of_template_parameter_list (parser);
18229   /* The `>' token might be a greater-than operator again now.  */
18230   parser->greater_than_is_operator_p
18231     = saved_greater_than_is_operator_p;
18232   /* Restore the SAVED_SCOPE.  */
18233   parser->scope = saved_scope;
18234   parser->qualifying_scope = saved_qualifying_scope;
18235   parser->object_scope = saved_object_scope;
18236   skip_evaluation = saved_skip_evaluation;
18237
18238   return arguments;
18239 }
18240
18241 /* MEMBER_FUNCTION is a member function, or a friend.  If default
18242    arguments, or the body of the function have not yet been parsed,
18243    parse them now.  */
18244
18245 static void
18246 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
18247 {
18248   /* If this member is a template, get the underlying
18249      FUNCTION_DECL.  */
18250   if (DECL_FUNCTION_TEMPLATE_P (member_function))
18251     member_function = DECL_TEMPLATE_RESULT (member_function);
18252
18253   /* There should not be any class definitions in progress at this
18254      point; the bodies of members are only parsed outside of all class
18255      definitions.  */
18256   gcc_assert (parser->num_classes_being_defined == 0);
18257   /* While we're parsing the member functions we might encounter more
18258      classes.  We want to handle them right away, but we don't want
18259      them getting mixed up with functions that are currently in the
18260      queue.  */
18261   parser->unparsed_functions_queues
18262     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
18263
18264   /* Make sure that any template parameters are in scope.  */
18265   maybe_begin_member_template_processing (member_function);
18266
18267   /* If the body of the function has not yet been parsed, parse it
18268      now.  */
18269   if (DECL_PENDING_INLINE_P (member_function))
18270     {
18271       tree function_scope;
18272       cp_token_cache *tokens;
18273
18274       /* The function is no longer pending; we are processing it.  */
18275       tokens = DECL_PENDING_INLINE_INFO (member_function);
18276       DECL_PENDING_INLINE_INFO (member_function) = NULL;
18277       DECL_PENDING_INLINE_P (member_function) = 0;
18278
18279       /* If this is a local class, enter the scope of the containing
18280          function.  */
18281       function_scope = current_function_decl;
18282       if (function_scope)
18283         push_function_context ();
18284
18285       /* Push the body of the function onto the lexer stack.  */
18286       cp_parser_push_lexer_for_tokens (parser, tokens);
18287
18288       /* Let the front end know that we going to be defining this
18289          function.  */
18290       start_preparsed_function (member_function, NULL_TREE,
18291                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
18292
18293       /* Don't do access checking if it is a templated function.  */
18294       if (processing_template_decl)
18295         push_deferring_access_checks (dk_no_check);
18296
18297       /* Now, parse the body of the function.  */
18298       cp_parser_function_definition_after_declarator (parser,
18299                                                       /*inline_p=*/true);
18300
18301       if (processing_template_decl)
18302         pop_deferring_access_checks ();
18303
18304       /* Leave the scope of the containing function.  */
18305       if (function_scope)
18306         pop_function_context ();
18307       cp_parser_pop_lexer (parser);
18308     }
18309
18310   /* Remove any template parameters from the symbol table.  */
18311   maybe_end_member_template_processing ();
18312
18313   /* Restore the queue.  */
18314   parser->unparsed_functions_queues
18315     = TREE_CHAIN (parser->unparsed_functions_queues);
18316 }
18317
18318 /* If DECL contains any default args, remember it on the unparsed
18319    functions queue.  */
18320
18321 static void
18322 cp_parser_save_default_args (cp_parser* parser, tree decl)
18323 {
18324   tree probe;
18325
18326   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
18327        probe;
18328        probe = TREE_CHAIN (probe))
18329     if (TREE_PURPOSE (probe))
18330       {
18331         TREE_PURPOSE (parser->unparsed_functions_queues)
18332           = tree_cons (current_class_type, decl,
18333                        TREE_PURPOSE (parser->unparsed_functions_queues));
18334         break;
18335       }
18336 }
18337
18338 /* FN is a FUNCTION_DECL which may contains a parameter with an
18339    unparsed DEFAULT_ARG.  Parse the default args now.  This function
18340    assumes that the current scope is the scope in which the default
18341    argument should be processed.  */
18342
18343 static void
18344 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
18345 {
18346   bool saved_local_variables_forbidden_p;
18347   tree parm;
18348
18349   /* While we're parsing the default args, we might (due to the
18350      statement expression extension) encounter more classes.  We want
18351      to handle them right away, but we don't want them getting mixed
18352      up with default args that are currently in the queue.  */
18353   parser->unparsed_functions_queues
18354     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
18355
18356   /* Local variable names (and the `this' keyword) may not appear
18357      in a default argument.  */
18358   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
18359   parser->local_variables_forbidden_p = true;
18360
18361   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
18362        parm;
18363        parm = TREE_CHAIN (parm))
18364     {
18365       cp_token_cache *tokens;
18366       tree default_arg = TREE_PURPOSE (parm);
18367       tree parsed_arg;
18368       VEC(tree,gc) *insts;
18369       tree copy;
18370       unsigned ix;
18371
18372       if (!default_arg)
18373         continue;
18374
18375       if (TREE_CODE (default_arg) != DEFAULT_ARG)
18376         /* This can happen for a friend declaration for a function
18377            already declared with default arguments.  */
18378         continue;
18379
18380        /* Push the saved tokens for the default argument onto the parser's
18381           lexer stack.  */
18382       tokens = DEFARG_TOKENS (default_arg);
18383       cp_parser_push_lexer_for_tokens (parser, tokens);
18384
18385       /* Parse the assignment-expression.  */
18386       parsed_arg = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
18387       if (parsed_arg == error_mark_node)
18388         {
18389           cp_parser_pop_lexer (parser);
18390           continue;
18391         }
18392
18393       if (!processing_template_decl)
18394         parsed_arg = check_default_argument (TREE_VALUE (parm), parsed_arg);
18395
18396       TREE_PURPOSE (parm) = parsed_arg;
18397
18398       /* Update any instantiations we've already created.  */
18399       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
18400            VEC_iterate (tree, insts, ix, copy); ix++)
18401         TREE_PURPOSE (copy) = parsed_arg;
18402
18403       /* If the token stream has not been completely used up, then
18404          there was extra junk after the end of the default
18405          argument.  */
18406       if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
18407         cp_parser_error (parser, "expected %<,%>");
18408
18409       /* Revert to the main lexer.  */
18410       cp_parser_pop_lexer (parser);
18411     }
18412
18413   /* Make sure no default arg is missing.  */
18414   check_default_args (fn);
18415
18416   /* Restore the state of local_variables_forbidden_p.  */
18417   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
18418
18419   /* Restore the queue.  */
18420   parser->unparsed_functions_queues
18421     = TREE_CHAIN (parser->unparsed_functions_queues);
18422 }
18423
18424 /* Parse the operand of `sizeof' (or a similar operator).  Returns
18425    either a TYPE or an expression, depending on the form of the
18426    input.  The KEYWORD indicates which kind of expression we have
18427    encountered.  */
18428
18429 static tree
18430 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
18431 {
18432   tree expr = NULL_TREE;
18433   const char *saved_message;
18434   char *tmp;
18435   bool saved_integral_constant_expression_p;
18436   bool saved_non_integral_constant_expression_p;
18437   bool pack_expansion_p = false;
18438
18439   /* Types cannot be defined in a `sizeof' expression.  Save away the
18440      old message.  */
18441   saved_message = parser->type_definition_forbidden_message;
18442   /* And create the new one.  */
18443   tmp = concat ("types may not be defined in %<",
18444                 IDENTIFIER_POINTER (ridpointers[keyword]),
18445                 "%> expressions", NULL);
18446   parser->type_definition_forbidden_message = tmp;
18447
18448   /* The restrictions on constant-expressions do not apply inside
18449      sizeof expressions.  */
18450   saved_integral_constant_expression_p
18451     = parser->integral_constant_expression_p;
18452   saved_non_integral_constant_expression_p
18453     = parser->non_integral_constant_expression_p;
18454   parser->integral_constant_expression_p = false;
18455
18456   /* If it's a `...', then we are computing the length of a parameter
18457      pack.  */
18458   if (keyword == RID_SIZEOF
18459       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
18460     {
18461       /* Consume the `...'.  */
18462       cp_lexer_consume_token (parser->lexer);
18463       maybe_warn_variadic_templates ();
18464
18465       /* Note that this is an expansion.  */
18466       pack_expansion_p = true;
18467     }
18468
18469   /* Do not actually evaluate the expression.  */
18470   ++skip_evaluation;
18471   /* If it's a `(', then we might be looking at the type-id
18472      construction.  */
18473   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18474     {
18475       tree type;
18476       bool saved_in_type_id_in_expr_p;
18477
18478       /* We can't be sure yet whether we're looking at a type-id or an
18479          expression.  */
18480       cp_parser_parse_tentatively (parser);
18481       /* Consume the `('.  */
18482       cp_lexer_consume_token (parser->lexer);
18483       /* Parse the type-id.  */
18484       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
18485       parser->in_type_id_in_expr_p = true;
18486       type = cp_parser_type_id (parser);
18487       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
18488       /* Now, look for the trailing `)'.  */
18489       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
18490       /* If all went well, then we're done.  */
18491       if (cp_parser_parse_definitely (parser))
18492         {
18493           cp_decl_specifier_seq decl_specs;
18494
18495           /* Build a trivial decl-specifier-seq.  */
18496           clear_decl_specs (&decl_specs);
18497           decl_specs.type = type;
18498
18499           /* Call grokdeclarator to figure out what type this is.  */
18500           expr = grokdeclarator (NULL,
18501                                  &decl_specs,
18502                                  TYPENAME,
18503                                  /*initialized=*/0,
18504                                  /*attrlist=*/NULL);
18505         }
18506     }
18507
18508   /* If the type-id production did not work out, then we must be
18509      looking at the unary-expression production.  */
18510   if (!expr)
18511     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
18512                                        /*cast_p=*/false, NULL);
18513
18514   if (pack_expansion_p)
18515     /* Build a pack expansion. */
18516     expr = make_pack_expansion (expr);
18517
18518   /* Go back to evaluating expressions.  */
18519   --skip_evaluation;
18520
18521   /* Free the message we created.  */
18522   free (tmp);
18523   /* And restore the old one.  */
18524   parser->type_definition_forbidden_message = saved_message;
18525   parser->integral_constant_expression_p
18526     = saved_integral_constant_expression_p;
18527   parser->non_integral_constant_expression_p
18528     = saved_non_integral_constant_expression_p;
18529
18530   return expr;
18531 }
18532
18533 /* If the current declaration has no declarator, return true.  */
18534
18535 static bool
18536 cp_parser_declares_only_class_p (cp_parser *parser)
18537 {
18538   /* If the next token is a `;' or a `,' then there is no
18539      declarator.  */
18540   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
18541           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
18542 }
18543
18544 /* Update the DECL_SPECS to reflect the storage class indicated by
18545    KEYWORD.  */
18546
18547 static void
18548 cp_parser_set_storage_class (cp_parser *parser,
18549                              cp_decl_specifier_seq *decl_specs,
18550                              enum rid keyword,
18551                              location_t location)
18552 {
18553   cp_storage_class storage_class;
18554
18555   if (parser->in_unbraced_linkage_specification_p)
18556     {
18557       error ("%Hinvalid use of %qD in linkage specification",
18558              &location, ridpointers[keyword]);
18559       return;
18560     }
18561   else if (decl_specs->storage_class != sc_none)
18562     {
18563       decl_specs->conflicting_specifiers_p = true;
18564       return;
18565     }
18566
18567   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
18568       && decl_specs->specs[(int) ds_thread])
18569     {
18570       error ("%H%<__thread%> before %qD", &location, ridpointers[keyword]);
18571       decl_specs->specs[(int) ds_thread] = 0;
18572     }
18573
18574   switch (keyword)
18575     {
18576     case RID_AUTO:
18577       storage_class = sc_auto;
18578       break;
18579     case RID_REGISTER:
18580       storage_class = sc_register;
18581       break;
18582     case RID_STATIC:
18583       storage_class = sc_static;
18584       break;
18585     case RID_EXTERN:
18586       storage_class = sc_extern;
18587       break;
18588     case RID_MUTABLE:
18589       storage_class = sc_mutable;
18590       break;
18591     default:
18592       gcc_unreachable ();
18593     }
18594   decl_specs->storage_class = storage_class;
18595
18596   /* A storage class specifier cannot be applied alongside a typedef 
18597      specifier. If there is a typedef specifier present then set 
18598      conflicting_specifiers_p which will trigger an error later
18599      on in grokdeclarator. */
18600   if (decl_specs->specs[(int)ds_typedef])
18601     decl_specs->conflicting_specifiers_p = true;
18602 }
18603
18604 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
18605    is true, the type is a user-defined type; otherwise it is a
18606    built-in type specified by a keyword.  */
18607
18608 static void
18609 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
18610                               tree type_spec,
18611                               location_t location,
18612                               bool user_defined_p)
18613 {
18614   decl_specs->any_specifiers_p = true;
18615
18616   /* If the user tries to redeclare bool, char16_t, char32_t, or wchar_t
18617      (with, for example, in "typedef int wchar_t;") we remember that
18618      this is what happened.  In system headers, we ignore these
18619      declarations so that G++ can work with system headers that are not
18620      C++-safe.  */
18621   if (decl_specs->specs[(int) ds_typedef]
18622       && !user_defined_p
18623       && (type_spec == boolean_type_node
18624           || type_spec == char16_type_node
18625           || type_spec == char32_type_node
18626           || type_spec == wchar_type_node)
18627       && (decl_specs->type
18628           || decl_specs->specs[(int) ds_long]
18629           || decl_specs->specs[(int) ds_short]
18630           || decl_specs->specs[(int) ds_unsigned]
18631           || decl_specs->specs[(int) ds_signed]))
18632     {
18633       decl_specs->redefined_builtin_type = type_spec;
18634       if (!decl_specs->type)
18635         {
18636           decl_specs->type = type_spec;
18637           decl_specs->user_defined_type_p = false;
18638           decl_specs->type_location = location;
18639         }
18640     }
18641   else if (decl_specs->type)
18642     decl_specs->multiple_types_p = true;
18643   else
18644     {
18645       decl_specs->type = type_spec;
18646       decl_specs->user_defined_type_p = user_defined_p;
18647       decl_specs->redefined_builtin_type = NULL_TREE;
18648       decl_specs->type_location = location;
18649     }
18650 }
18651
18652 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
18653    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
18654
18655 static bool
18656 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
18657 {
18658   return decl_specifiers->specs[(int) ds_friend] != 0;
18659 }
18660
18661 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
18662    issue an error message indicating that TOKEN_DESC was expected.
18663
18664    Returns the token consumed, if the token had the appropriate type.
18665    Otherwise, returns NULL.  */
18666
18667 static cp_token *
18668 cp_parser_require (cp_parser* parser,
18669                    enum cpp_ttype type,
18670                    const char* token_desc)
18671 {
18672   if (cp_lexer_next_token_is (parser->lexer, type))
18673     return cp_lexer_consume_token (parser->lexer);
18674   else
18675     {
18676       /* Output the MESSAGE -- unless we're parsing tentatively.  */
18677       if (!cp_parser_simulate_error (parser))
18678         {
18679           char *message = concat ("expected ", token_desc, NULL);
18680           cp_parser_error (parser, message);
18681           free (message);
18682         }
18683       return NULL;
18684     }
18685 }
18686
18687 /* An error message is produced if the next token is not '>'.
18688    All further tokens are skipped until the desired token is
18689    found or '{', '}', ';' or an unbalanced ')' or ']'.  */
18690
18691 static void
18692 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
18693 {
18694   /* Current level of '< ... >'.  */
18695   unsigned level = 0;
18696   /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
18697   unsigned nesting_depth = 0;
18698
18699   /* Are we ready, yet?  If not, issue error message.  */
18700   if (cp_parser_require (parser, CPP_GREATER, "%<>%>"))
18701     return;
18702
18703   /* Skip tokens until the desired token is found.  */
18704   while (true)
18705     {
18706       /* Peek at the next token.  */
18707       switch (cp_lexer_peek_token (parser->lexer)->type)
18708         {
18709         case CPP_LESS:
18710           if (!nesting_depth)
18711             ++level;
18712           break;
18713
18714         case CPP_RSHIFT:
18715           if (cxx_dialect == cxx98)
18716             /* C++0x views the `>>' operator as two `>' tokens, but
18717                C++98 does not. */
18718             break;
18719           else if (!nesting_depth && level-- == 0)
18720             {
18721               /* We've hit a `>>' where the first `>' closes the
18722                  template argument list, and the second `>' is
18723                  spurious.  Just consume the `>>' and stop; we've
18724                  already produced at least one error.  */
18725               cp_lexer_consume_token (parser->lexer);
18726               return;
18727             }
18728           /* Fall through for C++0x, so we handle the second `>' in
18729              the `>>'.  */
18730
18731         case CPP_GREATER:
18732           if (!nesting_depth && level-- == 0)
18733             {
18734               /* We've reached the token we want, consume it and stop.  */
18735               cp_lexer_consume_token (parser->lexer);
18736               return;
18737             }
18738           break;
18739
18740         case CPP_OPEN_PAREN:
18741         case CPP_OPEN_SQUARE:
18742           ++nesting_depth;
18743           break;
18744
18745         case CPP_CLOSE_PAREN:
18746         case CPP_CLOSE_SQUARE:
18747           if (nesting_depth-- == 0)
18748             return;
18749           break;
18750
18751         case CPP_EOF:
18752         case CPP_PRAGMA_EOL:
18753         case CPP_SEMICOLON:
18754         case CPP_OPEN_BRACE:
18755         case CPP_CLOSE_BRACE:
18756           /* The '>' was probably forgotten, don't look further.  */
18757           return;
18758
18759         default:
18760           break;
18761         }
18762
18763       /* Consume this token.  */
18764       cp_lexer_consume_token (parser->lexer);
18765     }
18766 }
18767
18768 /* If the next token is the indicated keyword, consume it.  Otherwise,
18769    issue an error message indicating that TOKEN_DESC was expected.
18770
18771    Returns the token consumed, if the token had the appropriate type.
18772    Otherwise, returns NULL.  */
18773
18774 static cp_token *
18775 cp_parser_require_keyword (cp_parser* parser,
18776                            enum rid keyword,
18777                            const char* token_desc)
18778 {
18779   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
18780
18781   if (token && token->keyword != keyword)
18782     {
18783       dyn_string_t error_msg;
18784
18785       /* Format the error message.  */
18786       error_msg = dyn_string_new (0);
18787       dyn_string_append_cstr (error_msg, "expected ");
18788       dyn_string_append_cstr (error_msg, token_desc);
18789       cp_parser_error (parser, error_msg->s);
18790       dyn_string_delete (error_msg);
18791       return NULL;
18792     }
18793
18794   return token;
18795 }
18796
18797 /* Returns TRUE iff TOKEN is a token that can begin the body of a
18798    function-definition.  */
18799
18800 static bool
18801 cp_parser_token_starts_function_definition_p (cp_token* token)
18802 {
18803   return (/* An ordinary function-body begins with an `{'.  */
18804           token->type == CPP_OPEN_BRACE
18805           /* A ctor-initializer begins with a `:'.  */
18806           || token->type == CPP_COLON
18807           /* A function-try-block begins with `try'.  */
18808           || token->keyword == RID_TRY
18809           /* The named return value extension begins with `return'.  */
18810           || token->keyword == RID_RETURN);
18811 }
18812
18813 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
18814    definition.  */
18815
18816 static bool
18817 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
18818 {
18819   cp_token *token;
18820
18821   token = cp_lexer_peek_token (parser->lexer);
18822   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
18823 }
18824
18825 /* Returns TRUE iff the next token is the "," or ">" (or `>>', in
18826    C++0x) ending a template-argument.  */
18827
18828 static bool
18829 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
18830 {
18831   cp_token *token;
18832
18833   token = cp_lexer_peek_token (parser->lexer);
18834   return (token->type == CPP_COMMA 
18835           || token->type == CPP_GREATER
18836           || token->type == CPP_ELLIPSIS
18837           || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT));
18838 }
18839
18840 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
18841    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
18842
18843 static bool
18844 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
18845                                                      size_t n)
18846 {
18847   cp_token *token;
18848
18849   token = cp_lexer_peek_nth_token (parser->lexer, n);
18850   if (token->type == CPP_LESS)
18851     return true;
18852   /* Check for the sequence `<::' in the original code. It would be lexed as
18853      `[:', where `[' is a digraph, and there is no whitespace before
18854      `:'.  */
18855   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
18856     {
18857       cp_token *token2;
18858       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
18859       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
18860         return true;
18861     }
18862   return false;
18863 }
18864
18865 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
18866    or none_type otherwise.  */
18867
18868 static enum tag_types
18869 cp_parser_token_is_class_key (cp_token* token)
18870 {
18871   switch (token->keyword)
18872     {
18873     case RID_CLASS:
18874       return class_type;
18875     case RID_STRUCT:
18876       return record_type;
18877     case RID_UNION:
18878       return union_type;
18879
18880     default:
18881       return none_type;
18882     }
18883 }
18884
18885 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
18886
18887 static void
18888 cp_parser_check_class_key (enum tag_types class_key, tree type)
18889 {
18890   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
18891     permerror (input_location, "%qs tag used in naming %q#T",
18892             class_key == union_type ? "union"
18893              : class_key == record_type ? "struct" : "class",
18894              type);
18895 }
18896
18897 /* Issue an error message if DECL is redeclared with different
18898    access than its original declaration [class.access.spec/3].
18899    This applies to nested classes and nested class templates.
18900    [class.mem/1].  */
18901
18902 static void
18903 cp_parser_check_access_in_redeclaration (tree decl, location_t location)
18904 {
18905   if (!decl || !CLASS_TYPE_P (TREE_TYPE (decl)))
18906     return;
18907
18908   if ((TREE_PRIVATE (decl)
18909        != (current_access_specifier == access_private_node))
18910       || (TREE_PROTECTED (decl)
18911           != (current_access_specifier == access_protected_node)))
18912     error ("%H%qD redeclared with different access", &location, decl);
18913 }
18914
18915 /* Look for the `template' keyword, as a syntactic disambiguator.
18916    Return TRUE iff it is present, in which case it will be
18917    consumed.  */
18918
18919 static bool
18920 cp_parser_optional_template_keyword (cp_parser *parser)
18921 {
18922   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
18923     {
18924       /* The `template' keyword can only be used within templates;
18925          outside templates the parser can always figure out what is a
18926          template and what is not.  */
18927       if (!processing_template_decl)
18928         {
18929           cp_token *token = cp_lexer_peek_token (parser->lexer);
18930           error ("%H%<template%> (as a disambiguator) is only allowed "
18931                  "within templates", &token->location);
18932           /* If this part of the token stream is rescanned, the same
18933              error message would be generated.  So, we purge the token
18934              from the stream.  */
18935           cp_lexer_purge_token (parser->lexer);
18936           return false;
18937         }
18938       else
18939         {
18940           /* Consume the `template' keyword.  */
18941           cp_lexer_consume_token (parser->lexer);
18942           return true;
18943         }
18944     }
18945
18946   return false;
18947 }
18948
18949 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
18950    set PARSER->SCOPE, and perform other related actions.  */
18951
18952 static void
18953 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
18954 {
18955   int i;
18956   struct tree_check *check_value;
18957   deferred_access_check *chk;
18958   VEC (deferred_access_check,gc) *checks;
18959
18960   /* Get the stored value.  */
18961   check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
18962   /* Perform any access checks that were deferred.  */
18963   checks = check_value->checks;
18964   if (checks)
18965     {
18966       for (i = 0 ;
18967            VEC_iterate (deferred_access_check, checks, i, chk) ;
18968            ++i)
18969         {
18970           perform_or_defer_access_check (chk->binfo,
18971                                          chk->decl,
18972                                          chk->diag_decl);
18973         }
18974     }
18975   /* Set the scope from the stored value.  */
18976   parser->scope = check_value->value;
18977   parser->qualifying_scope = check_value->qualifying_scope;
18978   parser->object_scope = NULL_TREE;
18979 }
18980
18981 /* Consume tokens up through a non-nested END token.  Returns TRUE if we
18982    encounter the end of a block before what we were looking for.  */
18983
18984 static bool
18985 cp_parser_cache_group (cp_parser *parser,
18986                        enum cpp_ttype end,
18987                        unsigned depth)
18988 {
18989   while (true)
18990     {
18991       cp_token *token = cp_lexer_peek_token (parser->lexer);
18992
18993       /* Abort a parenthesized expression if we encounter a semicolon.  */
18994       if ((end == CPP_CLOSE_PAREN || depth == 0)
18995           && token->type == CPP_SEMICOLON)
18996         return true;
18997       /* If we've reached the end of the file, stop.  */
18998       if (token->type == CPP_EOF
18999           || (end != CPP_PRAGMA_EOL
19000               && token->type == CPP_PRAGMA_EOL))
19001         return true;
19002       if (token->type == CPP_CLOSE_BRACE && depth == 0)
19003         /* We've hit the end of an enclosing block, so there's been some
19004            kind of syntax error.  */
19005         return true;
19006
19007       /* Consume the token.  */
19008       cp_lexer_consume_token (parser->lexer);
19009       /* See if it starts a new group.  */
19010       if (token->type == CPP_OPEN_BRACE)
19011         {
19012           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
19013           /* In theory this should probably check end == '}', but
19014              cp_parser_save_member_function_body needs it to exit
19015              after either '}' or ')' when called with ')'.  */
19016           if (depth == 0)
19017             return false;
19018         }
19019       else if (token->type == CPP_OPEN_PAREN)
19020         {
19021           cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
19022           if (depth == 0 && end == CPP_CLOSE_PAREN)
19023             return false;
19024         }
19025       else if (token->type == CPP_PRAGMA)
19026         cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
19027       else if (token->type == end)
19028         return false;
19029     }
19030 }
19031
19032 /* Begin parsing tentatively.  We always save tokens while parsing
19033    tentatively so that if the tentative parsing fails we can restore the
19034    tokens.  */
19035
19036 static void
19037 cp_parser_parse_tentatively (cp_parser* parser)
19038 {
19039   /* Enter a new parsing context.  */
19040   parser->context = cp_parser_context_new (parser->context);
19041   /* Begin saving tokens.  */
19042   cp_lexer_save_tokens (parser->lexer);
19043   /* In order to avoid repetitive access control error messages,
19044      access checks are queued up until we are no longer parsing
19045      tentatively.  */
19046   push_deferring_access_checks (dk_deferred);
19047 }
19048
19049 /* Commit to the currently active tentative parse.  */
19050
19051 static void
19052 cp_parser_commit_to_tentative_parse (cp_parser* parser)
19053 {
19054   cp_parser_context *context;
19055   cp_lexer *lexer;
19056
19057   /* Mark all of the levels as committed.  */
19058   lexer = parser->lexer;
19059   for (context = parser->context; context->next; context = context->next)
19060     {
19061       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
19062         break;
19063       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
19064       while (!cp_lexer_saving_tokens (lexer))
19065         lexer = lexer->next;
19066       cp_lexer_commit_tokens (lexer);
19067     }
19068 }
19069
19070 /* Abort the currently active tentative parse.  All consumed tokens
19071    will be rolled back, and no diagnostics will be issued.  */
19072
19073 static void
19074 cp_parser_abort_tentative_parse (cp_parser* parser)
19075 {
19076   cp_parser_simulate_error (parser);
19077   /* Now, pretend that we want to see if the construct was
19078      successfully parsed.  */
19079   cp_parser_parse_definitely (parser);
19080 }
19081
19082 /* Stop parsing tentatively.  If a parse error has occurred, restore the
19083    token stream.  Otherwise, commit to the tokens we have consumed.
19084    Returns true if no error occurred; false otherwise.  */
19085
19086 static bool
19087 cp_parser_parse_definitely (cp_parser* parser)
19088 {
19089   bool error_occurred;
19090   cp_parser_context *context;
19091
19092   /* Remember whether or not an error occurred, since we are about to
19093      destroy that information.  */
19094   error_occurred = cp_parser_error_occurred (parser);
19095   /* Remove the topmost context from the stack.  */
19096   context = parser->context;
19097   parser->context = context->next;
19098   /* If no parse errors occurred, commit to the tentative parse.  */
19099   if (!error_occurred)
19100     {
19101       /* Commit to the tokens read tentatively, unless that was
19102          already done.  */
19103       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
19104         cp_lexer_commit_tokens (parser->lexer);
19105
19106       pop_to_parent_deferring_access_checks ();
19107     }
19108   /* Otherwise, if errors occurred, roll back our state so that things
19109      are just as they were before we began the tentative parse.  */
19110   else
19111     {
19112       cp_lexer_rollback_tokens (parser->lexer);
19113       pop_deferring_access_checks ();
19114     }
19115   /* Add the context to the front of the free list.  */
19116   context->next = cp_parser_context_free_list;
19117   cp_parser_context_free_list = context;
19118
19119   return !error_occurred;
19120 }
19121
19122 /* Returns true if we are parsing tentatively and are not committed to
19123    this tentative parse.  */
19124
19125 static bool
19126 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
19127 {
19128   return (cp_parser_parsing_tentatively (parser)
19129           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
19130 }
19131
19132 /* Returns nonzero iff an error has occurred during the most recent
19133    tentative parse.  */
19134
19135 static bool
19136 cp_parser_error_occurred (cp_parser* parser)
19137 {
19138   return (cp_parser_parsing_tentatively (parser)
19139           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
19140 }
19141
19142 /* Returns nonzero if GNU extensions are allowed.  */
19143
19144 static bool
19145 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
19146 {
19147   return parser->allow_gnu_extensions_p;
19148 }
19149 \f
19150 /* Objective-C++ Productions */
19151
19152
19153 /* Parse an Objective-C expression, which feeds into a primary-expression
19154    above.
19155
19156    objc-expression:
19157      objc-message-expression
19158      objc-string-literal
19159      objc-encode-expression
19160      objc-protocol-expression
19161      objc-selector-expression
19162
19163   Returns a tree representation of the expression.  */
19164
19165 static tree
19166 cp_parser_objc_expression (cp_parser* parser)
19167 {
19168   /* Try to figure out what kind of declaration is present.  */
19169   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
19170
19171   switch (kwd->type)
19172     {
19173     case CPP_OPEN_SQUARE:
19174       return cp_parser_objc_message_expression (parser);
19175
19176     case CPP_OBJC_STRING:
19177       kwd = cp_lexer_consume_token (parser->lexer);
19178       return objc_build_string_object (kwd->u.value);
19179
19180     case CPP_KEYWORD:
19181       switch (kwd->keyword)
19182         {
19183         case RID_AT_ENCODE:
19184           return cp_parser_objc_encode_expression (parser);
19185
19186         case RID_AT_PROTOCOL:
19187           return cp_parser_objc_protocol_expression (parser);
19188
19189         case RID_AT_SELECTOR:
19190           return cp_parser_objc_selector_expression (parser);
19191
19192         default:
19193           break;
19194         }
19195     default:
19196       error ("%Hmisplaced %<@%D%> Objective-C++ construct",
19197              &kwd->location, kwd->u.value);
19198       cp_parser_skip_to_end_of_block_or_statement (parser);
19199     }
19200
19201   return error_mark_node;
19202 }
19203
19204 /* Parse an Objective-C message expression.
19205
19206    objc-message-expression:
19207      [ objc-message-receiver objc-message-args ]
19208
19209    Returns a representation of an Objective-C message.  */
19210
19211 static tree
19212 cp_parser_objc_message_expression (cp_parser* parser)
19213 {
19214   tree receiver, messageargs;
19215
19216   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
19217   receiver = cp_parser_objc_message_receiver (parser);
19218   messageargs = cp_parser_objc_message_args (parser);
19219   cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
19220
19221   return objc_build_message_expr (build_tree_list (receiver, messageargs));
19222 }
19223
19224 /* Parse an objc-message-receiver.
19225
19226    objc-message-receiver:
19227      expression
19228      simple-type-specifier
19229
19230   Returns a representation of the type or expression.  */
19231
19232 static tree
19233 cp_parser_objc_message_receiver (cp_parser* parser)
19234 {
19235   tree rcv;
19236
19237   /* An Objective-C message receiver may be either (1) a type
19238      or (2) an expression.  */
19239   cp_parser_parse_tentatively (parser);
19240   rcv = cp_parser_expression (parser, false, NULL);
19241
19242   if (cp_parser_parse_definitely (parser))
19243     return rcv;
19244
19245   rcv = cp_parser_simple_type_specifier (parser,
19246                                          /*decl_specs=*/NULL,
19247                                          CP_PARSER_FLAGS_NONE);
19248
19249   return objc_get_class_reference (rcv);
19250 }
19251
19252 /* Parse the arguments and selectors comprising an Objective-C message.
19253
19254    objc-message-args:
19255      objc-selector
19256      objc-selector-args
19257      objc-selector-args , objc-comma-args
19258
19259    objc-selector-args:
19260      objc-selector [opt] : assignment-expression
19261      objc-selector-args objc-selector [opt] : assignment-expression
19262
19263    objc-comma-args:
19264      assignment-expression
19265      objc-comma-args , assignment-expression
19266
19267    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
19268    selector arguments and TREE_VALUE containing a list of comma
19269    arguments.  */
19270
19271 static tree
19272 cp_parser_objc_message_args (cp_parser* parser)
19273 {
19274   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
19275   bool maybe_unary_selector_p = true;
19276   cp_token *token = cp_lexer_peek_token (parser->lexer);
19277
19278   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
19279     {
19280       tree selector = NULL_TREE, arg;
19281
19282       if (token->type != CPP_COLON)
19283         selector = cp_parser_objc_selector (parser);
19284
19285       /* Detect if we have a unary selector.  */
19286       if (maybe_unary_selector_p
19287           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
19288         return build_tree_list (selector, NULL_TREE);
19289
19290       maybe_unary_selector_p = false;
19291       cp_parser_require (parser, CPP_COLON, "%<:%>");
19292       arg = cp_parser_assignment_expression (parser, false, NULL);
19293
19294       sel_args
19295         = chainon (sel_args,
19296                    build_tree_list (selector, arg));
19297
19298       token = cp_lexer_peek_token (parser->lexer);
19299     }
19300
19301   /* Handle non-selector arguments, if any. */
19302   while (token->type == CPP_COMMA)
19303     {
19304       tree arg;
19305
19306       cp_lexer_consume_token (parser->lexer);
19307       arg = cp_parser_assignment_expression (parser, false, NULL);
19308
19309       addl_args
19310         = chainon (addl_args,
19311                    build_tree_list (NULL_TREE, arg));
19312
19313       token = cp_lexer_peek_token (parser->lexer);
19314     }
19315
19316   return build_tree_list (sel_args, addl_args);
19317 }
19318
19319 /* Parse an Objective-C encode expression.
19320
19321    objc-encode-expression:
19322      @encode objc-typename
19323
19324    Returns an encoded representation of the type argument.  */
19325
19326 static tree
19327 cp_parser_objc_encode_expression (cp_parser* parser)
19328 {
19329   tree type;
19330   cp_token *token;
19331
19332   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
19333   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
19334   token = cp_lexer_peek_token (parser->lexer);
19335   type = complete_type (cp_parser_type_id (parser));
19336   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19337
19338   if (!type)
19339     {
19340       error ("%H%<@encode%> must specify a type as an argument",
19341              &token->location);
19342       return error_mark_node;
19343     }
19344
19345   return objc_build_encode_expr (type);
19346 }
19347
19348 /* Parse an Objective-C @defs expression.  */
19349
19350 static tree
19351 cp_parser_objc_defs_expression (cp_parser *parser)
19352 {
19353   tree name;
19354
19355   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
19356   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
19357   name = cp_parser_identifier (parser);
19358   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19359
19360   return objc_get_class_ivars (name);
19361 }
19362
19363 /* Parse an Objective-C protocol expression.
19364
19365   objc-protocol-expression:
19366     @protocol ( identifier )
19367
19368   Returns a representation of the protocol expression.  */
19369
19370 static tree
19371 cp_parser_objc_protocol_expression (cp_parser* parser)
19372 {
19373   tree proto;
19374
19375   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
19376   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
19377   proto = cp_parser_identifier (parser);
19378   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19379
19380   return objc_build_protocol_expr (proto);
19381 }
19382
19383 /* Parse an Objective-C selector expression.
19384
19385    objc-selector-expression:
19386      @selector ( objc-method-signature )
19387
19388    objc-method-signature:
19389      objc-selector
19390      objc-selector-seq
19391
19392    objc-selector-seq:
19393      objc-selector :
19394      objc-selector-seq objc-selector :
19395
19396   Returns a representation of the method selector.  */
19397
19398 static tree
19399 cp_parser_objc_selector_expression (cp_parser* parser)
19400 {
19401   tree sel_seq = NULL_TREE;
19402   bool maybe_unary_selector_p = true;
19403   cp_token *token;
19404
19405   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
19406   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
19407   token = cp_lexer_peek_token (parser->lexer);
19408
19409   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
19410          || token->type == CPP_SCOPE)
19411     {
19412       tree selector = NULL_TREE;
19413
19414       if (token->type != CPP_COLON
19415           || token->type == CPP_SCOPE)
19416         selector = cp_parser_objc_selector (parser);
19417
19418       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
19419           && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
19420         {
19421           /* Detect if we have a unary selector.  */
19422           if (maybe_unary_selector_p)
19423             {
19424               sel_seq = selector;
19425               goto finish_selector;
19426             }
19427           else
19428             {
19429               cp_parser_error (parser, "expected %<:%>");
19430             }
19431         }
19432       maybe_unary_selector_p = false;
19433       token = cp_lexer_consume_token (parser->lexer);
19434
19435       if (token->type == CPP_SCOPE)
19436         {
19437           sel_seq
19438             = chainon (sel_seq,
19439                        build_tree_list (selector, NULL_TREE));
19440           sel_seq
19441             = chainon (sel_seq,
19442                        build_tree_list (NULL_TREE, NULL_TREE));
19443         }
19444       else
19445         sel_seq
19446           = chainon (sel_seq,
19447                      build_tree_list (selector, NULL_TREE));
19448
19449       token = cp_lexer_peek_token (parser->lexer);
19450     }
19451
19452  finish_selector:
19453   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19454
19455   return objc_build_selector_expr (sel_seq);
19456 }
19457
19458 /* Parse a list of identifiers.
19459
19460    objc-identifier-list:
19461      identifier
19462      objc-identifier-list , identifier
19463
19464    Returns a TREE_LIST of identifier nodes.  */
19465
19466 static tree
19467 cp_parser_objc_identifier_list (cp_parser* parser)
19468 {
19469   tree list = build_tree_list (NULL_TREE, cp_parser_identifier (parser));
19470   cp_token *sep = cp_lexer_peek_token (parser->lexer);
19471
19472   while (sep->type == CPP_COMMA)
19473     {
19474       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
19475       list = chainon (list,
19476                       build_tree_list (NULL_TREE,
19477                                        cp_parser_identifier (parser)));
19478       sep = cp_lexer_peek_token (parser->lexer);
19479     }
19480
19481   return list;
19482 }
19483
19484 /* Parse an Objective-C alias declaration.
19485
19486    objc-alias-declaration:
19487      @compatibility_alias identifier identifier ;
19488
19489    This function registers the alias mapping with the Objective-C front end.
19490    It returns nothing.  */
19491
19492 static void
19493 cp_parser_objc_alias_declaration (cp_parser* parser)
19494 {
19495   tree alias, orig;
19496
19497   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
19498   alias = cp_parser_identifier (parser);
19499   orig = cp_parser_identifier (parser);
19500   objc_declare_alias (alias, orig);
19501   cp_parser_consume_semicolon_at_end_of_statement (parser);
19502 }
19503
19504 /* Parse an Objective-C class forward-declaration.
19505
19506    objc-class-declaration:
19507      @class objc-identifier-list ;
19508
19509    The function registers the forward declarations with the Objective-C
19510    front end.  It returns nothing.  */
19511
19512 static void
19513 cp_parser_objc_class_declaration (cp_parser* parser)
19514 {
19515   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
19516   objc_declare_class (cp_parser_objc_identifier_list (parser));
19517   cp_parser_consume_semicolon_at_end_of_statement (parser);
19518 }
19519
19520 /* Parse a list of Objective-C protocol references.
19521
19522    objc-protocol-refs-opt:
19523      objc-protocol-refs [opt]
19524
19525    objc-protocol-refs:
19526      < objc-identifier-list >
19527
19528    Returns a TREE_LIST of identifiers, if any.  */
19529
19530 static tree
19531 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
19532 {
19533   tree protorefs = NULL_TREE;
19534
19535   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
19536     {
19537       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
19538       protorefs = cp_parser_objc_identifier_list (parser);
19539       cp_parser_require (parser, CPP_GREATER, "%<>%>");
19540     }
19541
19542   return protorefs;
19543 }
19544
19545 /* Parse a Objective-C visibility specification.  */
19546
19547 static void
19548 cp_parser_objc_visibility_spec (cp_parser* parser)
19549 {
19550   cp_token *vis = cp_lexer_peek_token (parser->lexer);
19551
19552   switch (vis->keyword)
19553     {
19554     case RID_AT_PRIVATE:
19555       objc_set_visibility (2);
19556       break;
19557     case RID_AT_PROTECTED:
19558       objc_set_visibility (0);
19559       break;
19560     case RID_AT_PUBLIC:
19561       objc_set_visibility (1);
19562       break;
19563     default:
19564       return;
19565     }
19566
19567   /* Eat '@private'/'@protected'/'@public'.  */
19568   cp_lexer_consume_token (parser->lexer);
19569 }
19570
19571 /* Parse an Objective-C method type.  */
19572
19573 static void
19574 cp_parser_objc_method_type (cp_parser* parser)
19575 {
19576   objc_set_method_type
19577    (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS
19578     ? PLUS_EXPR
19579     : MINUS_EXPR);
19580 }
19581
19582 /* Parse an Objective-C protocol qualifier.  */
19583
19584 static tree
19585 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
19586 {
19587   tree quals = NULL_TREE, node;
19588   cp_token *token = cp_lexer_peek_token (parser->lexer);
19589
19590   node = token->u.value;
19591
19592   while (node && TREE_CODE (node) == IDENTIFIER_NODE
19593          && (node == ridpointers [(int) RID_IN]
19594              || node == ridpointers [(int) RID_OUT]
19595              || node == ridpointers [(int) RID_INOUT]
19596              || node == ridpointers [(int) RID_BYCOPY]
19597              || node == ridpointers [(int) RID_BYREF]
19598              || node == ridpointers [(int) RID_ONEWAY]))
19599     {
19600       quals = tree_cons (NULL_TREE, node, quals);
19601       cp_lexer_consume_token (parser->lexer);
19602       token = cp_lexer_peek_token (parser->lexer);
19603       node = token->u.value;
19604     }
19605
19606   return quals;
19607 }
19608
19609 /* Parse an Objective-C typename.  */
19610
19611 static tree
19612 cp_parser_objc_typename (cp_parser* parser)
19613 {
19614   tree type_name = NULL_TREE;
19615
19616   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
19617     {
19618       tree proto_quals, cp_type = NULL_TREE;
19619
19620       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
19621       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
19622
19623       /* An ObjC type name may consist of just protocol qualifiers, in which
19624          case the type shall default to 'id'.  */
19625       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
19626         cp_type = cp_parser_type_id (parser);
19627
19628       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19629       type_name = build_tree_list (proto_quals, cp_type);
19630     }
19631
19632   return type_name;
19633 }
19634
19635 /* Check to see if TYPE refers to an Objective-C selector name.  */
19636
19637 static bool
19638 cp_parser_objc_selector_p (enum cpp_ttype type)
19639 {
19640   return (type == CPP_NAME || type == CPP_KEYWORD
19641           || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
19642           || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
19643           || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
19644           || type == CPP_XOR || type == CPP_XOR_EQ);
19645 }
19646
19647 /* Parse an Objective-C selector.  */
19648
19649 static tree
19650 cp_parser_objc_selector (cp_parser* parser)
19651 {
19652   cp_token *token = cp_lexer_consume_token (parser->lexer);
19653
19654   if (!cp_parser_objc_selector_p (token->type))
19655     {
19656       error ("%Hinvalid Objective-C++ selector name", &token->location);
19657       return error_mark_node;
19658     }
19659
19660   /* C++ operator names are allowed to appear in ObjC selectors.  */
19661   switch (token->type)
19662     {
19663     case CPP_AND_AND: return get_identifier ("and");
19664     case CPP_AND_EQ: return get_identifier ("and_eq");
19665     case CPP_AND: return get_identifier ("bitand");
19666     case CPP_OR: return get_identifier ("bitor");
19667     case CPP_COMPL: return get_identifier ("compl");
19668     case CPP_NOT: return get_identifier ("not");
19669     case CPP_NOT_EQ: return get_identifier ("not_eq");
19670     case CPP_OR_OR: return get_identifier ("or");
19671     case CPP_OR_EQ: return get_identifier ("or_eq");
19672     case CPP_XOR: return get_identifier ("xor");
19673     case CPP_XOR_EQ: return get_identifier ("xor_eq");
19674     default: return token->u.value;
19675     }
19676 }
19677
19678 /* Parse an Objective-C params list.  */
19679
19680 static tree
19681 cp_parser_objc_method_keyword_params (cp_parser* parser)
19682 {
19683   tree params = NULL_TREE;
19684   bool maybe_unary_selector_p = true;
19685   cp_token *token = cp_lexer_peek_token (parser->lexer);
19686
19687   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
19688     {
19689       tree selector = NULL_TREE, type_name, identifier;
19690
19691       if (token->type != CPP_COLON)
19692         selector = cp_parser_objc_selector (parser);
19693
19694       /* Detect if we have a unary selector.  */
19695       if (maybe_unary_selector_p
19696           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
19697         return selector;
19698
19699       maybe_unary_selector_p = false;
19700       cp_parser_require (parser, CPP_COLON, "%<:%>");
19701       type_name = cp_parser_objc_typename (parser);
19702       identifier = cp_parser_identifier (parser);
19703
19704       params
19705         = chainon (params,
19706                    objc_build_keyword_decl (selector,
19707                                             type_name,
19708                                             identifier));
19709
19710       token = cp_lexer_peek_token (parser->lexer);
19711     }
19712
19713   return params;
19714 }
19715
19716 /* Parse the non-keyword Objective-C params.  */
19717
19718 static tree
19719 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp)
19720 {
19721   tree params = make_node (TREE_LIST);
19722   cp_token *token = cp_lexer_peek_token (parser->lexer);
19723   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
19724
19725   while (token->type == CPP_COMMA)
19726     {
19727       cp_parameter_declarator *parmdecl;
19728       tree parm;
19729
19730       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
19731       token = cp_lexer_peek_token (parser->lexer);
19732
19733       if (token->type == CPP_ELLIPSIS)
19734         {
19735           cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
19736           *ellipsisp = true;
19737           break;
19738         }
19739
19740       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
19741       parm = grokdeclarator (parmdecl->declarator,
19742                              &parmdecl->decl_specifiers,
19743                              PARM, /*initialized=*/0,
19744                              /*attrlist=*/NULL);
19745
19746       chainon (params, build_tree_list (NULL_TREE, parm));
19747       token = cp_lexer_peek_token (parser->lexer);
19748     }
19749
19750   return params;
19751 }
19752
19753 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
19754
19755 static void
19756 cp_parser_objc_interstitial_code (cp_parser* parser)
19757 {
19758   cp_token *token = cp_lexer_peek_token (parser->lexer);
19759
19760   /* If the next token is `extern' and the following token is a string
19761      literal, then we have a linkage specification.  */
19762   if (token->keyword == RID_EXTERN
19763       && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser->lexer, 2)))
19764     cp_parser_linkage_specification (parser);
19765   /* Handle #pragma, if any.  */
19766   else if (token->type == CPP_PRAGMA)
19767     cp_parser_pragma (parser, pragma_external);
19768   /* Allow stray semicolons.  */
19769   else if (token->type == CPP_SEMICOLON)
19770     cp_lexer_consume_token (parser->lexer);
19771   /* Finally, try to parse a block-declaration, or a function-definition.  */
19772   else
19773     cp_parser_block_declaration (parser, /*statement_p=*/false);
19774 }
19775
19776 /* Parse a method signature.  */
19777
19778 static tree
19779 cp_parser_objc_method_signature (cp_parser* parser)
19780 {
19781   tree rettype, kwdparms, optparms;
19782   bool ellipsis = false;
19783
19784   cp_parser_objc_method_type (parser);
19785   rettype = cp_parser_objc_typename (parser);
19786   kwdparms = cp_parser_objc_method_keyword_params (parser);
19787   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis);
19788
19789   return objc_build_method_signature (rettype, kwdparms, optparms, ellipsis);
19790 }
19791
19792 /* Pars an Objective-C method prototype list.  */
19793
19794 static void
19795 cp_parser_objc_method_prototype_list (cp_parser* parser)
19796 {
19797   cp_token *token = cp_lexer_peek_token (parser->lexer);
19798
19799   while (token->keyword != RID_AT_END)
19800     {
19801       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
19802         {
19803           objc_add_method_declaration
19804            (cp_parser_objc_method_signature (parser));
19805           cp_parser_consume_semicolon_at_end_of_statement (parser);
19806         }
19807       else
19808         /* Allow for interspersed non-ObjC++ code.  */
19809         cp_parser_objc_interstitial_code (parser);
19810
19811       token = cp_lexer_peek_token (parser->lexer);
19812     }
19813
19814   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
19815   objc_finish_interface ();
19816 }
19817
19818 /* Parse an Objective-C method definition list.  */
19819
19820 static void
19821 cp_parser_objc_method_definition_list (cp_parser* parser)
19822 {
19823   cp_token *token = cp_lexer_peek_token (parser->lexer);
19824
19825   while (token->keyword != RID_AT_END)
19826     {
19827       tree meth;
19828
19829       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
19830         {
19831           push_deferring_access_checks (dk_deferred);
19832           objc_start_method_definition
19833            (cp_parser_objc_method_signature (parser));
19834
19835           /* For historical reasons, we accept an optional semicolon.  */
19836           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
19837             cp_lexer_consume_token (parser->lexer);
19838
19839           perform_deferred_access_checks ();
19840           stop_deferring_access_checks ();
19841           meth = cp_parser_function_definition_after_declarator (parser,
19842                                                                  false);
19843           pop_deferring_access_checks ();
19844           objc_finish_method_definition (meth);
19845         }
19846       else
19847         /* Allow for interspersed non-ObjC++ code.  */
19848         cp_parser_objc_interstitial_code (parser);
19849
19850       token = cp_lexer_peek_token (parser->lexer);
19851     }
19852
19853   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
19854   objc_finish_implementation ();
19855 }
19856
19857 /* Parse Objective-C ivars.  */
19858
19859 static void
19860 cp_parser_objc_class_ivars (cp_parser* parser)
19861 {
19862   cp_token *token = cp_lexer_peek_token (parser->lexer);
19863
19864   if (token->type != CPP_OPEN_BRACE)
19865     return;     /* No ivars specified.  */
19866
19867   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
19868   token = cp_lexer_peek_token (parser->lexer);
19869
19870   while (token->type != CPP_CLOSE_BRACE)
19871     {
19872       cp_decl_specifier_seq declspecs;
19873       int decl_class_or_enum_p;
19874       tree prefix_attributes;
19875
19876       cp_parser_objc_visibility_spec (parser);
19877
19878       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
19879         break;
19880
19881       cp_parser_decl_specifier_seq (parser,
19882                                     CP_PARSER_FLAGS_OPTIONAL,
19883                                     &declspecs,
19884                                     &decl_class_or_enum_p);
19885       prefix_attributes = declspecs.attributes;
19886       declspecs.attributes = NULL_TREE;
19887
19888       /* Keep going until we hit the `;' at the end of the
19889          declaration.  */
19890       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
19891         {
19892           tree width = NULL_TREE, attributes, first_attribute, decl;
19893           cp_declarator *declarator = NULL;
19894           int ctor_dtor_or_conv_p;
19895
19896           /* Check for a (possibly unnamed) bitfield declaration.  */
19897           token = cp_lexer_peek_token (parser->lexer);
19898           if (token->type == CPP_COLON)
19899             goto eat_colon;
19900
19901           if (token->type == CPP_NAME
19902               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
19903                   == CPP_COLON))
19904             {
19905               /* Get the name of the bitfield.  */
19906               declarator = make_id_declarator (NULL_TREE,
19907                                                cp_parser_identifier (parser),
19908                                                sfk_none);
19909
19910              eat_colon:
19911               cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
19912               /* Get the width of the bitfield.  */
19913               width
19914                 = cp_parser_constant_expression (parser,
19915                                                  /*allow_non_constant=*/false,
19916                                                  NULL);
19917             }
19918           else
19919             {
19920               /* Parse the declarator.  */
19921               declarator
19922                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
19923                                         &ctor_dtor_or_conv_p,
19924                                         /*parenthesized_p=*/NULL,
19925                                         /*member_p=*/false);
19926             }
19927
19928           /* Look for attributes that apply to the ivar.  */
19929           attributes = cp_parser_attributes_opt (parser);
19930           /* Remember which attributes are prefix attributes and
19931              which are not.  */
19932           first_attribute = attributes;
19933           /* Combine the attributes.  */
19934           attributes = chainon (prefix_attributes, attributes);
19935
19936           if (width)
19937               /* Create the bitfield declaration.  */
19938               decl = grokbitfield (declarator, &declspecs,
19939                                    width,
19940                                    attributes);
19941           else
19942             decl = grokfield (declarator, &declspecs,
19943                               NULL_TREE, /*init_const_expr_p=*/false,
19944                               NULL_TREE, attributes);
19945
19946           /* Add the instance variable.  */
19947           objc_add_instance_variable (decl);
19948
19949           /* Reset PREFIX_ATTRIBUTES.  */
19950           while (attributes && TREE_CHAIN (attributes) != first_attribute)
19951             attributes = TREE_CHAIN (attributes);
19952           if (attributes)
19953             TREE_CHAIN (attributes) = NULL_TREE;
19954
19955           token = cp_lexer_peek_token (parser->lexer);
19956
19957           if (token->type == CPP_COMMA)
19958             {
19959               cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
19960               continue;
19961             }
19962           break;
19963         }
19964
19965       cp_parser_consume_semicolon_at_end_of_statement (parser);
19966       token = cp_lexer_peek_token (parser->lexer);
19967     }
19968
19969   cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
19970   /* For historical reasons, we accept an optional semicolon.  */
19971   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
19972     cp_lexer_consume_token (parser->lexer);
19973 }
19974
19975 /* Parse an Objective-C protocol declaration.  */
19976
19977 static void
19978 cp_parser_objc_protocol_declaration (cp_parser* parser)
19979 {
19980   tree proto, protorefs;
19981   cp_token *tok;
19982
19983   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
19984   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
19985     {
19986       tok = cp_lexer_peek_token (parser->lexer);
19987       error ("%Hidentifier expected after %<@protocol%>", &tok->location);
19988       goto finish;
19989     }
19990
19991   /* See if we have a forward declaration or a definition.  */
19992   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
19993
19994   /* Try a forward declaration first.  */
19995   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
19996     {
19997       objc_declare_protocols (cp_parser_objc_identifier_list (parser));
19998      finish:
19999       cp_parser_consume_semicolon_at_end_of_statement (parser);
20000     }
20001
20002   /* Ok, we got a full-fledged definition (or at least should).  */
20003   else
20004     {
20005       proto = cp_parser_identifier (parser);
20006       protorefs = cp_parser_objc_protocol_refs_opt (parser);
20007       objc_start_protocol (proto, protorefs);
20008       cp_parser_objc_method_prototype_list (parser);
20009     }
20010 }
20011
20012 /* Parse an Objective-C superclass or category.  */
20013
20014 static void
20015 cp_parser_objc_superclass_or_category (cp_parser *parser, tree *super,
20016                                                           tree *categ)
20017 {
20018   cp_token *next = cp_lexer_peek_token (parser->lexer);
20019
20020   *super = *categ = NULL_TREE;
20021   if (next->type == CPP_COLON)
20022     {
20023       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
20024       *super = cp_parser_identifier (parser);
20025     }
20026   else if (next->type == CPP_OPEN_PAREN)
20027     {
20028       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
20029       *categ = cp_parser_identifier (parser);
20030       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
20031     }
20032 }
20033
20034 /* Parse an Objective-C class interface.  */
20035
20036 static void
20037 cp_parser_objc_class_interface (cp_parser* parser)
20038 {
20039   tree name, super, categ, protos;
20040
20041   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
20042   name = cp_parser_identifier (parser);
20043   cp_parser_objc_superclass_or_category (parser, &super, &categ);
20044   protos = cp_parser_objc_protocol_refs_opt (parser);
20045
20046   /* We have either a class or a category on our hands.  */
20047   if (categ)
20048     objc_start_category_interface (name, categ, protos);
20049   else
20050     {
20051       objc_start_class_interface (name, super, protos);
20052       /* Handle instance variable declarations, if any.  */
20053       cp_parser_objc_class_ivars (parser);
20054       objc_continue_interface ();
20055     }
20056
20057   cp_parser_objc_method_prototype_list (parser);
20058 }
20059
20060 /* Parse an Objective-C class implementation.  */
20061
20062 static void
20063 cp_parser_objc_class_implementation (cp_parser* parser)
20064 {
20065   tree name, super, categ;
20066
20067   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
20068   name = cp_parser_identifier (parser);
20069   cp_parser_objc_superclass_or_category (parser, &super, &categ);
20070
20071   /* We have either a class or a category on our hands.  */
20072   if (categ)
20073     objc_start_category_implementation (name, categ);
20074   else
20075     {
20076       objc_start_class_implementation (name, super);
20077       /* Handle instance variable declarations, if any.  */
20078       cp_parser_objc_class_ivars (parser);
20079       objc_continue_implementation ();
20080     }
20081
20082   cp_parser_objc_method_definition_list (parser);
20083 }
20084
20085 /* Consume the @end token and finish off the implementation.  */
20086
20087 static void
20088 cp_parser_objc_end_implementation (cp_parser* parser)
20089 {
20090   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
20091   objc_finish_implementation ();
20092 }
20093
20094 /* Parse an Objective-C declaration.  */
20095
20096 static void
20097 cp_parser_objc_declaration (cp_parser* parser)
20098 {
20099   /* Try to figure out what kind of declaration is present.  */
20100   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
20101
20102   switch (kwd->keyword)
20103     {
20104     case RID_AT_ALIAS:
20105       cp_parser_objc_alias_declaration (parser);
20106       break;
20107     case RID_AT_CLASS:
20108       cp_parser_objc_class_declaration (parser);
20109       break;
20110     case RID_AT_PROTOCOL:
20111       cp_parser_objc_protocol_declaration (parser);
20112       break;
20113     case RID_AT_INTERFACE:
20114       cp_parser_objc_class_interface (parser);
20115       break;
20116     case RID_AT_IMPLEMENTATION:
20117       cp_parser_objc_class_implementation (parser);
20118       break;
20119     case RID_AT_END:
20120       cp_parser_objc_end_implementation (parser);
20121       break;
20122     default:
20123       error ("%Hmisplaced %<@%D%> Objective-C++ construct",
20124              &kwd->location, kwd->u.value);
20125       cp_parser_skip_to_end_of_block_or_statement (parser);
20126     }
20127 }
20128
20129 /* Parse an Objective-C try-catch-finally statement.
20130
20131    objc-try-catch-finally-stmt:
20132      @try compound-statement objc-catch-clause-seq [opt]
20133        objc-finally-clause [opt]
20134
20135    objc-catch-clause-seq:
20136      objc-catch-clause objc-catch-clause-seq [opt]
20137
20138    objc-catch-clause:
20139      @catch ( exception-declaration ) compound-statement
20140
20141    objc-finally-clause
20142      @finally compound-statement
20143
20144    Returns NULL_TREE.  */
20145
20146 static tree
20147 cp_parser_objc_try_catch_finally_statement (cp_parser *parser) {
20148   location_t location;
20149   tree stmt;
20150
20151   cp_parser_require_keyword (parser, RID_AT_TRY, "%<@try%>");
20152   location = cp_lexer_peek_token (parser->lexer)->location;
20153   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
20154      node, lest it get absorbed into the surrounding block.  */
20155   stmt = push_stmt_list ();
20156   cp_parser_compound_statement (parser, NULL, false);
20157   objc_begin_try_stmt (location, pop_stmt_list (stmt));
20158
20159   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
20160     {
20161       cp_parameter_declarator *parmdecl;
20162       tree parm;
20163
20164       cp_lexer_consume_token (parser->lexer);
20165       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
20166       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
20167       parm = grokdeclarator (parmdecl->declarator,
20168                              &parmdecl->decl_specifiers,
20169                              PARM, /*initialized=*/0,
20170                              /*attrlist=*/NULL);
20171       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
20172       objc_begin_catch_clause (parm);
20173       cp_parser_compound_statement (parser, NULL, false);
20174       objc_finish_catch_clause ();
20175     }
20176
20177   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
20178     {
20179       cp_lexer_consume_token (parser->lexer);
20180       location = cp_lexer_peek_token (parser->lexer)->location;
20181       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
20182          node, lest it get absorbed into the surrounding block.  */
20183       stmt = push_stmt_list ();
20184       cp_parser_compound_statement (parser, NULL, false);
20185       objc_build_finally_clause (location, pop_stmt_list (stmt));
20186     }
20187
20188   return objc_finish_try_stmt ();
20189 }
20190
20191 /* Parse an Objective-C synchronized statement.
20192
20193    objc-synchronized-stmt:
20194      @synchronized ( expression ) compound-statement
20195
20196    Returns NULL_TREE.  */
20197
20198 static tree
20199 cp_parser_objc_synchronized_statement (cp_parser *parser) {
20200   location_t location;
20201   tree lock, stmt;
20202
20203   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, "%<@synchronized%>");
20204
20205   location = cp_lexer_peek_token (parser->lexer)->location;
20206   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
20207   lock = cp_parser_expression (parser, false, NULL);
20208   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
20209
20210   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
20211      node, lest it get absorbed into the surrounding block.  */
20212   stmt = push_stmt_list ();
20213   cp_parser_compound_statement (parser, NULL, false);
20214
20215   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
20216 }
20217
20218 /* Parse an Objective-C throw statement.
20219
20220    objc-throw-stmt:
20221      @throw assignment-expression [opt] ;
20222
20223    Returns a constructed '@throw' statement.  */
20224
20225 static tree
20226 cp_parser_objc_throw_statement (cp_parser *parser) {
20227   tree expr = NULL_TREE;
20228
20229   cp_parser_require_keyword (parser, RID_AT_THROW, "%<@throw%>");
20230
20231   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
20232     expr = cp_parser_assignment_expression (parser, false, NULL);
20233
20234   cp_parser_consume_semicolon_at_end_of_statement (parser);
20235
20236   return objc_build_throw_stmt (expr);
20237 }
20238
20239 /* Parse an Objective-C statement.  */
20240
20241 static tree
20242 cp_parser_objc_statement (cp_parser * parser) {
20243   /* Try to figure out what kind of declaration is present.  */
20244   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
20245
20246   switch (kwd->keyword)
20247     {
20248     case RID_AT_TRY:
20249       return cp_parser_objc_try_catch_finally_statement (parser);
20250     case RID_AT_SYNCHRONIZED:
20251       return cp_parser_objc_synchronized_statement (parser);
20252     case RID_AT_THROW:
20253       return cp_parser_objc_throw_statement (parser);
20254     default:
20255       error ("%Hmisplaced %<@%D%> Objective-C++ construct",
20256              &kwd->location, kwd->u.value);
20257       cp_parser_skip_to_end_of_block_or_statement (parser);
20258     }
20259
20260   return error_mark_node;
20261 }
20262 \f
20263 /* OpenMP 2.5 parsing routines.  */
20264
20265 /* Returns name of the next clause.
20266    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
20267    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
20268    returned and the token is consumed.  */
20269
20270 static pragma_omp_clause
20271 cp_parser_omp_clause_name (cp_parser *parser)
20272 {
20273   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
20274
20275   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
20276     result = PRAGMA_OMP_CLAUSE_IF;
20277   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
20278     result = PRAGMA_OMP_CLAUSE_DEFAULT;
20279   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
20280     result = PRAGMA_OMP_CLAUSE_PRIVATE;
20281   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
20282     {
20283       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
20284       const char *p = IDENTIFIER_POINTER (id);
20285
20286       switch (p[0])
20287         {
20288         case 'c':
20289           if (!strcmp ("collapse", p))
20290             result = PRAGMA_OMP_CLAUSE_COLLAPSE;
20291           else if (!strcmp ("copyin", p))
20292             result = PRAGMA_OMP_CLAUSE_COPYIN;
20293           else if (!strcmp ("copyprivate", p))
20294             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
20295           break;
20296         case 'f':
20297           if (!strcmp ("firstprivate", p))
20298             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
20299           break;
20300         case 'l':
20301           if (!strcmp ("lastprivate", p))
20302             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
20303           break;
20304         case 'n':
20305           if (!strcmp ("nowait", p))
20306             result = PRAGMA_OMP_CLAUSE_NOWAIT;
20307           else if (!strcmp ("num_threads", p))
20308             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
20309           break;
20310         case 'o':
20311           if (!strcmp ("ordered", p))
20312             result = PRAGMA_OMP_CLAUSE_ORDERED;
20313           break;
20314         case 'r':
20315           if (!strcmp ("reduction", p))
20316             result = PRAGMA_OMP_CLAUSE_REDUCTION;
20317           break;
20318         case 's':
20319           if (!strcmp ("schedule", p))
20320             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
20321           else if (!strcmp ("shared", p))
20322             result = PRAGMA_OMP_CLAUSE_SHARED;
20323           break;
20324         case 'u':
20325           if (!strcmp ("untied", p))
20326             result = PRAGMA_OMP_CLAUSE_UNTIED;
20327           break;
20328         }
20329     }
20330
20331   if (result != PRAGMA_OMP_CLAUSE_NONE)
20332     cp_lexer_consume_token (parser->lexer);
20333
20334   return result;
20335 }
20336
20337 /* Validate that a clause of the given type does not already exist.  */
20338
20339 static void
20340 check_no_duplicate_clause (tree clauses, enum omp_clause_code code,
20341                            const char *name, location_t location)
20342 {
20343   tree c;
20344
20345   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
20346     if (OMP_CLAUSE_CODE (c) == code)
20347       {
20348         error ("%Htoo many %qs clauses", &location, name);
20349         break;
20350       }
20351 }
20352
20353 /* OpenMP 2.5:
20354    variable-list:
20355      identifier
20356      variable-list , identifier
20357
20358    In addition, we match a closing parenthesis.  An opening parenthesis
20359    will have been consumed by the caller.
20360
20361    If KIND is nonzero, create the appropriate node and install the decl
20362    in OMP_CLAUSE_DECL and add the node to the head of the list.
20363
20364    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
20365    return the list created.  */
20366
20367 static tree
20368 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
20369                                 tree list)
20370 {
20371   cp_token *token;
20372   while (1)
20373     {
20374       tree name, decl;
20375
20376       token = cp_lexer_peek_token (parser->lexer);
20377       name = cp_parser_id_expression (parser, /*template_p=*/false,
20378                                       /*check_dependency_p=*/true,
20379                                       /*template_p=*/NULL,
20380                                       /*declarator_p=*/false,
20381                                       /*optional_p=*/false);
20382       if (name == error_mark_node)
20383         goto skip_comma;
20384
20385       decl = cp_parser_lookup_name_simple (parser, name, token->location);
20386       if (decl == error_mark_node)
20387         cp_parser_name_lookup_error (parser, name, decl, NULL, token->location);
20388       else if (kind != 0)
20389         {
20390           tree u = build_omp_clause (kind);
20391           OMP_CLAUSE_DECL (u) = decl;
20392           OMP_CLAUSE_CHAIN (u) = list;
20393           list = u;
20394         }
20395       else
20396         list = tree_cons (decl, NULL_TREE, list);
20397
20398     get_comma:
20399       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
20400         break;
20401       cp_lexer_consume_token (parser->lexer);
20402     }
20403
20404   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20405     {
20406       int ending;
20407
20408       /* Try to resync to an unnested comma.  Copied from
20409          cp_parser_parenthesized_expression_list.  */
20410     skip_comma:
20411       ending = cp_parser_skip_to_closing_parenthesis (parser,
20412                                                       /*recovering=*/true,
20413                                                       /*or_comma=*/true,
20414                                                       /*consume_paren=*/true);
20415       if (ending < 0)
20416         goto get_comma;
20417     }
20418
20419   return list;
20420 }
20421
20422 /* Similarly, but expect leading and trailing parenthesis.  This is a very
20423    common case for omp clauses.  */
20424
20425 static tree
20426 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
20427 {
20428   if (cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20429     return cp_parser_omp_var_list_no_open (parser, kind, list);
20430   return list;
20431 }
20432
20433 /* OpenMP 3.0:
20434    collapse ( constant-expression ) */
20435
20436 static tree
20437 cp_parser_omp_clause_collapse (cp_parser *parser, tree list, location_t location)
20438 {
20439   tree c, num;
20440   location_t loc;
20441   HOST_WIDE_INT n;
20442
20443   loc = cp_lexer_peek_token (parser->lexer)->location;
20444   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20445     return list;
20446
20447   num = cp_parser_constant_expression (parser, false, NULL);
20448
20449   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20450     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20451                                            /*or_comma=*/false,
20452                                            /*consume_paren=*/true);
20453
20454   if (num == error_mark_node)
20455     return list;
20456   num = fold_non_dependent_expr (num);
20457   if (!INTEGRAL_TYPE_P (TREE_TYPE (num))
20458       || !host_integerp (num, 0)
20459       || (n = tree_low_cst (num, 0)) <= 0
20460       || (int) n != n)
20461     {
20462       error ("%Hcollapse argument needs positive constant integer expression",
20463              &loc);
20464       return list;
20465     }
20466
20467   check_no_duplicate_clause (list, OMP_CLAUSE_COLLAPSE, "collapse", location);
20468   c = build_omp_clause (OMP_CLAUSE_COLLAPSE);
20469   OMP_CLAUSE_CHAIN (c) = list;
20470   OMP_CLAUSE_COLLAPSE_EXPR (c) = num;
20471
20472   return c;
20473 }
20474
20475 /* OpenMP 2.5:
20476    default ( shared | none ) */
20477
20478 static tree
20479 cp_parser_omp_clause_default (cp_parser *parser, tree list, location_t location)
20480 {
20481   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
20482   tree c;
20483
20484   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20485     return list;
20486   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
20487     {
20488       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
20489       const char *p = IDENTIFIER_POINTER (id);
20490
20491       switch (p[0])
20492         {
20493         case 'n':
20494           if (strcmp ("none", p) != 0)
20495             goto invalid_kind;
20496           kind = OMP_CLAUSE_DEFAULT_NONE;
20497           break;
20498
20499         case 's':
20500           if (strcmp ("shared", p) != 0)
20501             goto invalid_kind;
20502           kind = OMP_CLAUSE_DEFAULT_SHARED;
20503           break;
20504
20505         default:
20506           goto invalid_kind;
20507         }
20508
20509       cp_lexer_consume_token (parser->lexer);
20510     }
20511   else
20512     {
20513     invalid_kind:
20514       cp_parser_error (parser, "expected %<none%> or %<shared%>");
20515     }
20516
20517   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20518     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20519                                            /*or_comma=*/false,
20520                                            /*consume_paren=*/true);
20521
20522   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
20523     return list;
20524
20525   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default", location);
20526   c = build_omp_clause (OMP_CLAUSE_DEFAULT);
20527   OMP_CLAUSE_CHAIN (c) = list;
20528   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
20529
20530   return c;
20531 }
20532
20533 /* OpenMP 2.5:
20534    if ( expression ) */
20535
20536 static tree
20537 cp_parser_omp_clause_if (cp_parser *parser, tree list, location_t location)
20538 {
20539   tree t, c;
20540
20541   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20542     return list;
20543
20544   t = cp_parser_condition (parser);
20545
20546   if (t == error_mark_node
20547       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20548     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20549                                            /*or_comma=*/false,
20550                                            /*consume_paren=*/true);
20551
20552   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if", location);
20553
20554   c = build_omp_clause (OMP_CLAUSE_IF);
20555   OMP_CLAUSE_IF_EXPR (c) = t;
20556   OMP_CLAUSE_CHAIN (c) = list;
20557
20558   return c;
20559 }
20560
20561 /* OpenMP 2.5:
20562    nowait */
20563
20564 static tree
20565 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED,
20566                              tree list, location_t location)
20567 {
20568   tree c;
20569
20570   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait", location);
20571
20572   c = build_omp_clause (OMP_CLAUSE_NOWAIT);
20573   OMP_CLAUSE_CHAIN (c) = list;
20574   return c;
20575 }
20576
20577 /* OpenMP 2.5:
20578    num_threads ( expression ) */
20579
20580 static tree
20581 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list,
20582                                   location_t location)
20583 {
20584   tree t, c;
20585
20586   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20587     return list;
20588
20589   t = cp_parser_expression (parser, false, NULL);
20590
20591   if (t == error_mark_node
20592       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20593     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20594                                            /*or_comma=*/false,
20595                                            /*consume_paren=*/true);
20596
20597   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS,
20598                              "num_threads", location);
20599
20600   c = build_omp_clause (OMP_CLAUSE_NUM_THREADS);
20601   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
20602   OMP_CLAUSE_CHAIN (c) = list;
20603
20604   return c;
20605 }
20606
20607 /* OpenMP 2.5:
20608    ordered */
20609
20610 static tree
20611 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED,
20612                               tree list, location_t location)
20613 {
20614   tree c;
20615
20616   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED,
20617                              "ordered", location);
20618
20619   c = build_omp_clause (OMP_CLAUSE_ORDERED);
20620   OMP_CLAUSE_CHAIN (c) = list;
20621   return c;
20622 }
20623
20624 /* OpenMP 2.5:
20625    reduction ( reduction-operator : variable-list )
20626
20627    reduction-operator:
20628      One of: + * - & ^ | && || */
20629
20630 static tree
20631 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
20632 {
20633   enum tree_code code;
20634   tree nlist, c;
20635
20636   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20637     return list;
20638
20639   switch (cp_lexer_peek_token (parser->lexer)->type)
20640     {
20641     case CPP_PLUS:
20642       code = PLUS_EXPR;
20643       break;
20644     case CPP_MULT:
20645       code = MULT_EXPR;
20646       break;
20647     case CPP_MINUS:
20648       code = MINUS_EXPR;
20649       break;
20650     case CPP_AND:
20651       code = BIT_AND_EXPR;
20652       break;
20653     case CPP_XOR:
20654       code = BIT_XOR_EXPR;
20655       break;
20656     case CPP_OR:
20657       code = BIT_IOR_EXPR;
20658       break;
20659     case CPP_AND_AND:
20660       code = TRUTH_ANDIF_EXPR;
20661       break;
20662     case CPP_OR_OR:
20663       code = TRUTH_ORIF_EXPR;
20664       break;
20665     default:
20666       cp_parser_error (parser, "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, "
20667                                "%<|%>, %<&&%>, or %<||%>");
20668     resync_fail:
20669       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20670                                              /*or_comma=*/false,
20671                                              /*consume_paren=*/true);
20672       return list;
20673     }
20674   cp_lexer_consume_token (parser->lexer);
20675
20676   if (!cp_parser_require (parser, CPP_COLON, "%<:%>"))
20677     goto resync_fail;
20678
20679   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
20680   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
20681     OMP_CLAUSE_REDUCTION_CODE (c) = code;
20682
20683   return nlist;
20684 }
20685
20686 /* OpenMP 2.5:
20687    schedule ( schedule-kind )
20688    schedule ( schedule-kind , expression )
20689
20690    schedule-kind:
20691      static | dynamic | guided | runtime | auto  */
20692
20693 static tree
20694 cp_parser_omp_clause_schedule (cp_parser *parser, tree list, location_t location)
20695 {
20696   tree c, t;
20697
20698   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20699     return list;
20700
20701   c = build_omp_clause (OMP_CLAUSE_SCHEDULE);
20702
20703   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
20704     {
20705       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
20706       const char *p = IDENTIFIER_POINTER (id);
20707
20708       switch (p[0])
20709         {
20710         case 'd':
20711           if (strcmp ("dynamic", p) != 0)
20712             goto invalid_kind;
20713           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
20714           break;
20715
20716         case 'g':
20717           if (strcmp ("guided", p) != 0)
20718             goto invalid_kind;
20719           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
20720           break;
20721
20722         case 'r':
20723           if (strcmp ("runtime", p) != 0)
20724             goto invalid_kind;
20725           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
20726           break;
20727
20728         default:
20729           goto invalid_kind;
20730         }
20731     }
20732   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
20733     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
20734   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AUTO))
20735     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_AUTO;
20736   else
20737     goto invalid_kind;
20738   cp_lexer_consume_token (parser->lexer);
20739
20740   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
20741     {
20742       cp_token *token;
20743       cp_lexer_consume_token (parser->lexer);
20744
20745       token = cp_lexer_peek_token (parser->lexer);
20746       t = cp_parser_assignment_expression (parser, false, NULL);
20747
20748       if (t == error_mark_node)
20749         goto resync_fail;
20750       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
20751         error ("%Hschedule %<runtime%> does not take "
20752                "a %<chunk_size%> parameter", &token->location);
20753       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_AUTO)
20754         error ("%Hschedule %<auto%> does not take "
20755                "a %<chunk_size%> parameter", &token->location);
20756       else
20757         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
20758
20759       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20760         goto resync_fail;
20761     }
20762   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<,%> or %<)%>"))
20763     goto resync_fail;
20764
20765   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule", location);
20766   OMP_CLAUSE_CHAIN (c) = list;
20767   return c;
20768
20769  invalid_kind:
20770   cp_parser_error (parser, "invalid schedule kind");
20771  resync_fail:
20772   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20773                                          /*or_comma=*/false,
20774                                          /*consume_paren=*/true);
20775   return list;
20776 }
20777
20778 /* OpenMP 3.0:
20779    untied */
20780
20781 static tree
20782 cp_parser_omp_clause_untied (cp_parser *parser ATTRIBUTE_UNUSED,
20783                              tree list, location_t location)
20784 {
20785   tree c;
20786
20787   check_no_duplicate_clause (list, OMP_CLAUSE_UNTIED, "untied", location);
20788
20789   c = build_omp_clause (OMP_CLAUSE_UNTIED);
20790   OMP_CLAUSE_CHAIN (c) = list;
20791   return c;
20792 }
20793
20794 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
20795    is a bitmask in MASK.  Return the list of clauses found; the result
20796    of clause default goes in *pdefault.  */
20797
20798 static tree
20799 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
20800                            const char *where, cp_token *pragma_tok)
20801 {
20802   tree clauses = NULL;
20803   bool first = true;
20804   cp_token *token = NULL;
20805
20806   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
20807     {
20808       pragma_omp_clause c_kind;
20809       const char *c_name;
20810       tree prev = clauses;
20811
20812       if (!first && cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
20813         cp_lexer_consume_token (parser->lexer);
20814
20815       token = cp_lexer_peek_token (parser->lexer);
20816       c_kind = cp_parser_omp_clause_name (parser);
20817       first = false;
20818
20819       switch (c_kind)
20820         {
20821         case PRAGMA_OMP_CLAUSE_COLLAPSE:
20822           clauses = cp_parser_omp_clause_collapse (parser, clauses,
20823                                                    token->location);
20824           c_name = "collapse";
20825           break;
20826         case PRAGMA_OMP_CLAUSE_COPYIN:
20827           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
20828           c_name = "copyin";
20829           break;
20830         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
20831           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
20832                                             clauses);
20833           c_name = "copyprivate";
20834           break;
20835         case PRAGMA_OMP_CLAUSE_DEFAULT:
20836           clauses = cp_parser_omp_clause_default (parser, clauses,
20837                                                   token->location);
20838           c_name = "default";
20839           break;
20840         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
20841           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
20842                                             clauses);
20843           c_name = "firstprivate";
20844           break;
20845         case PRAGMA_OMP_CLAUSE_IF:
20846           clauses = cp_parser_omp_clause_if (parser, clauses, token->location);
20847           c_name = "if";
20848           break;
20849         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
20850           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
20851                                             clauses);
20852           c_name = "lastprivate";
20853           break;
20854         case PRAGMA_OMP_CLAUSE_NOWAIT:
20855           clauses = cp_parser_omp_clause_nowait (parser, clauses, token->location);
20856           c_name = "nowait";
20857           break;
20858         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
20859           clauses = cp_parser_omp_clause_num_threads (parser, clauses,
20860                                                       token->location);
20861           c_name = "num_threads";
20862           break;
20863         case PRAGMA_OMP_CLAUSE_ORDERED:
20864           clauses = cp_parser_omp_clause_ordered (parser, clauses,
20865                                                   token->location);
20866           c_name = "ordered";
20867           break;
20868         case PRAGMA_OMP_CLAUSE_PRIVATE:
20869           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
20870                                             clauses);
20871           c_name = "private";
20872           break;
20873         case PRAGMA_OMP_CLAUSE_REDUCTION:
20874           clauses = cp_parser_omp_clause_reduction (parser, clauses);
20875           c_name = "reduction";
20876           break;
20877         case PRAGMA_OMP_CLAUSE_SCHEDULE:
20878           clauses = cp_parser_omp_clause_schedule (parser, clauses,
20879                                                    token->location);
20880           c_name = "schedule";
20881           break;
20882         case PRAGMA_OMP_CLAUSE_SHARED:
20883           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
20884                                             clauses);
20885           c_name = "shared";
20886           break;
20887         case PRAGMA_OMP_CLAUSE_UNTIED:
20888           clauses = cp_parser_omp_clause_untied (parser, clauses,
20889                                                  token->location);
20890           c_name = "nowait";
20891           break;
20892         default:
20893           cp_parser_error (parser, "expected %<#pragma omp%> clause");
20894           goto saw_error;
20895         }
20896
20897       if (((mask >> c_kind) & 1) == 0)
20898         {
20899           /* Remove the invalid clause(s) from the list to avoid
20900              confusing the rest of the compiler.  */
20901           clauses = prev;
20902           error ("%H%qs is not valid for %qs", &token->location, c_name, where);
20903         }
20904     }
20905  saw_error:
20906   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
20907   return finish_omp_clauses (clauses);
20908 }
20909
20910 /* OpenMP 2.5:
20911    structured-block:
20912      statement
20913
20914    In practice, we're also interested in adding the statement to an
20915    outer node.  So it is convenient if we work around the fact that
20916    cp_parser_statement calls add_stmt.  */
20917
20918 static unsigned
20919 cp_parser_begin_omp_structured_block (cp_parser *parser)
20920 {
20921   unsigned save = parser->in_statement;
20922
20923   /* Only move the values to IN_OMP_BLOCK if they weren't false.
20924      This preserves the "not within loop or switch" style error messages
20925      for nonsense cases like
20926         void foo() {
20927         #pragma omp single
20928           break;
20929         }
20930   */
20931   if (parser->in_statement)
20932     parser->in_statement = IN_OMP_BLOCK;
20933
20934   return save;
20935 }
20936
20937 static void
20938 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
20939 {
20940   parser->in_statement = save;
20941 }
20942
20943 static tree
20944 cp_parser_omp_structured_block (cp_parser *parser)
20945 {
20946   tree stmt = begin_omp_structured_block ();
20947   unsigned int save = cp_parser_begin_omp_structured_block (parser);
20948
20949   cp_parser_statement (parser, NULL_TREE, false, NULL);
20950
20951   cp_parser_end_omp_structured_block (parser, save);
20952   return finish_omp_structured_block (stmt);
20953 }
20954
20955 /* OpenMP 2.5:
20956    # pragma omp atomic new-line
20957      expression-stmt
20958
20959    expression-stmt:
20960      x binop= expr | x++ | ++x | x-- | --x
20961    binop:
20962      +, *, -, /, &, ^, |, <<, >>
20963
20964   where x is an lvalue expression with scalar type.  */
20965
20966 static void
20967 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
20968 {
20969   tree lhs, rhs;
20970   enum tree_code code;
20971
20972   cp_parser_require_pragma_eol (parser, pragma_tok);
20973
20974   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
20975                                     /*cast_p=*/false, NULL);
20976   switch (TREE_CODE (lhs))
20977     {
20978     case ERROR_MARK:
20979       goto saw_error;
20980
20981     case PREINCREMENT_EXPR:
20982     case POSTINCREMENT_EXPR:
20983       lhs = TREE_OPERAND (lhs, 0);
20984       code = PLUS_EXPR;
20985       rhs = integer_one_node;
20986       break;
20987
20988     case PREDECREMENT_EXPR:
20989     case POSTDECREMENT_EXPR:
20990       lhs = TREE_OPERAND (lhs, 0);
20991       code = MINUS_EXPR;
20992       rhs = integer_one_node;
20993       break;
20994
20995     default:
20996       switch (cp_lexer_peek_token (parser->lexer)->type)
20997         {
20998         case CPP_MULT_EQ:
20999           code = MULT_EXPR;
21000           break;
21001         case CPP_DIV_EQ:
21002           code = TRUNC_DIV_EXPR;
21003           break;
21004         case CPP_PLUS_EQ:
21005           code = PLUS_EXPR;
21006           break;
21007         case CPP_MINUS_EQ:
21008           code = MINUS_EXPR;
21009           break;
21010         case CPP_LSHIFT_EQ:
21011           code = LSHIFT_EXPR;
21012           break;
21013         case CPP_RSHIFT_EQ:
21014           code = RSHIFT_EXPR;
21015           break;
21016         case CPP_AND_EQ:
21017           code = BIT_AND_EXPR;
21018           break;
21019         case CPP_OR_EQ:
21020           code = BIT_IOR_EXPR;
21021           break;
21022         case CPP_XOR_EQ:
21023           code = BIT_XOR_EXPR;
21024           break;
21025         default:
21026           cp_parser_error (parser,
21027                            "invalid operator for %<#pragma omp atomic%>");
21028           goto saw_error;
21029         }
21030       cp_lexer_consume_token (parser->lexer);
21031
21032       rhs = cp_parser_expression (parser, false, NULL);
21033       if (rhs == error_mark_node)
21034         goto saw_error;
21035       break;
21036     }
21037   finish_omp_atomic (code, lhs, rhs);
21038   cp_parser_consume_semicolon_at_end_of_statement (parser);
21039   return;
21040
21041  saw_error:
21042   cp_parser_skip_to_end_of_block_or_statement (parser);
21043 }
21044
21045
21046 /* OpenMP 2.5:
21047    # pragma omp barrier new-line  */
21048
21049 static void
21050 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
21051 {
21052   cp_parser_require_pragma_eol (parser, pragma_tok);
21053   finish_omp_barrier ();
21054 }
21055
21056 /* OpenMP 2.5:
21057    # pragma omp critical [(name)] new-line
21058      structured-block  */
21059
21060 static tree
21061 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
21062 {
21063   tree stmt, name = NULL;
21064
21065   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
21066     {
21067       cp_lexer_consume_token (parser->lexer);
21068
21069       name = cp_parser_identifier (parser);
21070
21071       if (name == error_mark_node
21072           || !cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
21073         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
21074                                                /*or_comma=*/false,
21075                                                /*consume_paren=*/true);
21076       if (name == error_mark_node)
21077         name = NULL;
21078     }
21079   cp_parser_require_pragma_eol (parser, pragma_tok);
21080
21081   stmt = cp_parser_omp_structured_block (parser);
21082   return c_finish_omp_critical (stmt, name);
21083 }
21084
21085 /* OpenMP 2.5:
21086    # pragma omp flush flush-vars[opt] new-line
21087
21088    flush-vars:
21089      ( variable-list ) */
21090
21091 static void
21092 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
21093 {
21094   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
21095     (void) cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
21096   cp_parser_require_pragma_eol (parser, pragma_tok);
21097
21098   finish_omp_flush ();
21099 }
21100
21101 /* Helper function, to parse omp for increment expression.  */
21102
21103 static tree
21104 cp_parser_omp_for_cond (cp_parser *parser, tree decl)
21105 {
21106   tree cond = cp_parser_binary_expression (parser, false, true,
21107                                            PREC_NOT_OPERATOR, NULL);
21108   bool overloaded_p;
21109
21110   if (cond == error_mark_node
21111       || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
21112     {
21113       cp_parser_skip_to_end_of_statement (parser);
21114       return error_mark_node;
21115     }
21116
21117   switch (TREE_CODE (cond))
21118     {
21119     case GT_EXPR:
21120     case GE_EXPR:
21121     case LT_EXPR:
21122     case LE_EXPR:
21123       break;
21124     default:
21125       return error_mark_node;
21126     }
21127
21128   /* If decl is an iterator, preserve LHS and RHS of the relational
21129      expr until finish_omp_for.  */
21130   if (decl
21131       && (type_dependent_expression_p (decl)
21132           || CLASS_TYPE_P (TREE_TYPE (decl))))
21133     return cond;
21134
21135   return build_x_binary_op (TREE_CODE (cond),
21136                             TREE_OPERAND (cond, 0), ERROR_MARK,
21137                             TREE_OPERAND (cond, 1), ERROR_MARK,
21138                             &overloaded_p, tf_warning_or_error);
21139 }
21140
21141 /* Helper function, to parse omp for increment expression.  */
21142
21143 static tree
21144 cp_parser_omp_for_incr (cp_parser *parser, tree decl)
21145 {
21146   cp_token *token = cp_lexer_peek_token (parser->lexer);
21147   enum tree_code op;
21148   tree lhs, rhs;
21149   cp_id_kind idk;
21150   bool decl_first;
21151
21152   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
21153     {
21154       op = (token->type == CPP_PLUS_PLUS
21155             ? PREINCREMENT_EXPR : PREDECREMENT_EXPR);
21156       cp_lexer_consume_token (parser->lexer);
21157       lhs = cp_parser_cast_expression (parser, false, false, NULL);
21158       if (lhs != decl)
21159         return error_mark_node;
21160       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
21161     }
21162
21163   lhs = cp_parser_primary_expression (parser, false, false, false, &idk);
21164   if (lhs != decl)
21165     return error_mark_node;
21166
21167   token = cp_lexer_peek_token (parser->lexer);
21168   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
21169     {
21170       op = (token->type == CPP_PLUS_PLUS
21171             ? POSTINCREMENT_EXPR : POSTDECREMENT_EXPR);
21172       cp_lexer_consume_token (parser->lexer);
21173       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
21174     }
21175
21176   op = cp_parser_assignment_operator_opt (parser);
21177   if (op == ERROR_MARK)
21178     return error_mark_node;
21179
21180   if (op != NOP_EXPR)
21181     {
21182       rhs = cp_parser_assignment_expression (parser, false, NULL);
21183       rhs = build2 (op, TREE_TYPE (decl), decl, rhs);
21184       return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
21185     }
21186
21187   lhs = cp_parser_binary_expression (parser, false, false,
21188                                      PREC_ADDITIVE_EXPRESSION, NULL);
21189   token = cp_lexer_peek_token (parser->lexer);
21190   decl_first = lhs == decl;
21191   if (decl_first)
21192     lhs = NULL_TREE;
21193   if (token->type != CPP_PLUS
21194       && token->type != CPP_MINUS)
21195     return error_mark_node;
21196
21197   do
21198     {
21199       op = token->type == CPP_PLUS ? PLUS_EXPR : MINUS_EXPR;
21200       cp_lexer_consume_token (parser->lexer);
21201       rhs = cp_parser_binary_expression (parser, false, false,
21202                                          PREC_ADDITIVE_EXPRESSION, NULL);
21203       token = cp_lexer_peek_token (parser->lexer);
21204       if (token->type == CPP_PLUS || token->type == CPP_MINUS || decl_first)
21205         {
21206           if (lhs == NULL_TREE)
21207             {
21208               if (op == PLUS_EXPR)
21209                 lhs = rhs;
21210               else
21211                 lhs = build_x_unary_op (NEGATE_EXPR, rhs, tf_warning_or_error);
21212             }
21213           else
21214             lhs = build_x_binary_op (op, lhs, ERROR_MARK, rhs, ERROR_MARK,
21215                                      NULL, tf_warning_or_error);
21216         }
21217     }
21218   while (token->type == CPP_PLUS || token->type == CPP_MINUS);
21219
21220   if (!decl_first)
21221     {
21222       if (rhs != decl || op == MINUS_EXPR)
21223         return error_mark_node;
21224       rhs = build2 (op, TREE_TYPE (decl), lhs, decl);
21225     }
21226   else
21227     rhs = build2 (PLUS_EXPR, TREE_TYPE (decl), decl, lhs);
21228
21229   return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
21230 }
21231
21232 /* Parse the restricted form of the for statement allowed by OpenMP.  */
21233
21234 static tree
21235 cp_parser_omp_for_loop (cp_parser *parser, tree clauses, tree *par_clauses)
21236 {
21237   tree init, cond, incr, body, decl, pre_body = NULL_TREE, ret;
21238   tree for_block = NULL_TREE, real_decl, initv, condv, incrv, declv;
21239   tree this_pre_body, cl;
21240   location_t loc_first;
21241   bool collapse_err = false;
21242   int i, collapse = 1, nbraces = 0;
21243
21244   for (cl = clauses; cl; cl = OMP_CLAUSE_CHAIN (cl))
21245     if (OMP_CLAUSE_CODE (cl) == OMP_CLAUSE_COLLAPSE)
21246       collapse = tree_low_cst (OMP_CLAUSE_COLLAPSE_EXPR (cl), 0);
21247
21248   gcc_assert (collapse >= 1);
21249
21250   declv = make_tree_vec (collapse);
21251   initv = make_tree_vec (collapse);
21252   condv = make_tree_vec (collapse);
21253   incrv = make_tree_vec (collapse);
21254
21255   loc_first = cp_lexer_peek_token (parser->lexer)->location;
21256
21257   for (i = 0; i < collapse; i++)
21258     {
21259       int bracecount = 0;
21260       bool add_private_clause = false;
21261       location_t loc;
21262
21263       if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
21264         {
21265           cp_parser_error (parser, "for statement expected");
21266           return NULL;
21267         }
21268       loc = cp_lexer_consume_token (parser->lexer)->location;
21269
21270       if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
21271         return NULL;
21272
21273       init = decl = real_decl = NULL;
21274       this_pre_body = push_stmt_list ();
21275       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
21276         {
21277           /* See 2.5.1 (in OpenMP 3.0, similar wording is in 2.5 standard too):
21278
21279              init-expr:
21280                        var = lb
21281                        integer-type var = lb
21282                        random-access-iterator-type var = lb
21283                        pointer-type var = lb
21284           */
21285           cp_decl_specifier_seq type_specifiers;
21286
21287           /* First, try to parse as an initialized declaration.  See
21288              cp_parser_condition, from whence the bulk of this is copied.  */
21289
21290           cp_parser_parse_tentatively (parser);
21291           cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
21292                                         &type_specifiers);
21293           if (cp_parser_parse_definitely (parser))
21294             {
21295               /* If parsing a type specifier seq succeeded, then this
21296                  MUST be a initialized declaration.  */
21297               tree asm_specification, attributes;
21298               cp_declarator *declarator;
21299
21300               declarator = cp_parser_declarator (parser,
21301                                                  CP_PARSER_DECLARATOR_NAMED,
21302                                                  /*ctor_dtor_or_conv_p=*/NULL,
21303                                                  /*parenthesized_p=*/NULL,
21304                                                  /*member_p=*/false);
21305               attributes = cp_parser_attributes_opt (parser);
21306               asm_specification = cp_parser_asm_specification_opt (parser);
21307
21308               if (declarator == cp_error_declarator) 
21309                 cp_parser_skip_to_end_of_statement (parser);
21310
21311               else 
21312                 {
21313                   tree pushed_scope, auto_node;
21314
21315                   decl = start_decl (declarator, &type_specifiers,
21316                                      SD_INITIALIZED, attributes,
21317                                      /*prefix_attributes=*/NULL_TREE,
21318                                      &pushed_scope);
21319
21320                   auto_node = type_uses_auto (TREE_TYPE (decl));
21321                   if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
21322                     {
21323                       if (cp_lexer_next_token_is (parser->lexer, 
21324                                                   CPP_OPEN_PAREN))
21325                         error ("parenthesized initialization is not allowed in "
21326                                "OpenMP %<for%> loop");
21327                       else
21328                         /* Trigger an error.  */
21329                         cp_parser_require (parser, CPP_EQ, "%<=%>");
21330
21331                       init = error_mark_node;
21332                       cp_parser_skip_to_end_of_statement (parser);
21333                     }
21334                   else if (CLASS_TYPE_P (TREE_TYPE (decl))
21335                            || type_dependent_expression_p (decl)
21336                            || auto_node)
21337                     {
21338                       bool is_direct_init, is_non_constant_init;
21339
21340                       init = cp_parser_initializer (parser,
21341                                                     &is_direct_init,
21342                                                     &is_non_constant_init);
21343
21344                       if (auto_node && describable_type (init))
21345                         {
21346                           TREE_TYPE (decl)
21347                             = do_auto_deduction (TREE_TYPE (decl), init,
21348                                                  auto_node);
21349
21350                           if (!CLASS_TYPE_P (TREE_TYPE (decl))
21351                               && !type_dependent_expression_p (decl))
21352                             goto non_class;
21353                         }
21354                       
21355                       cp_finish_decl (decl, init, !is_non_constant_init,
21356                                       asm_specification,
21357                                       LOOKUP_ONLYCONVERTING);
21358                       if (CLASS_TYPE_P (TREE_TYPE (decl)))
21359                         {
21360                           for_block
21361                             = tree_cons (NULL, this_pre_body, for_block);
21362                           init = NULL_TREE;
21363                         }
21364                       else
21365                         init = pop_stmt_list (this_pre_body);
21366                       this_pre_body = NULL_TREE;
21367                     }
21368                   else
21369                     {
21370                       /* Consume '='.  */
21371                       cp_lexer_consume_token (parser->lexer);
21372                       init = cp_parser_assignment_expression (parser, false, NULL);
21373
21374                     non_class:
21375                       if (TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
21376                         init = error_mark_node;
21377                       else
21378                         cp_finish_decl (decl, NULL_TREE,
21379                                         /*init_const_expr_p=*/false,
21380                                         asm_specification,
21381                                         LOOKUP_ONLYCONVERTING);
21382                     }
21383
21384                   if (pushed_scope)
21385                     pop_scope (pushed_scope);
21386                 }
21387             }
21388           else 
21389             {
21390               cp_id_kind idk;
21391               /* If parsing a type specifier sequence failed, then
21392                  this MUST be a simple expression.  */
21393               cp_parser_parse_tentatively (parser);
21394               decl = cp_parser_primary_expression (parser, false, false,
21395                                                    false, &idk);
21396               if (!cp_parser_error_occurred (parser)
21397                   && decl
21398                   && DECL_P (decl)
21399                   && CLASS_TYPE_P (TREE_TYPE (decl)))
21400                 {
21401                   tree rhs;
21402
21403                   cp_parser_parse_definitely (parser);
21404                   cp_parser_require (parser, CPP_EQ, "%<=%>");
21405                   rhs = cp_parser_assignment_expression (parser, false, NULL);
21406                   finish_expr_stmt (build_x_modify_expr (decl, NOP_EXPR,
21407                                                          rhs,
21408                                                          tf_warning_or_error));
21409                   add_private_clause = true;
21410                 }
21411               else
21412                 {
21413                   decl = NULL;
21414                   cp_parser_abort_tentative_parse (parser);
21415                   init = cp_parser_expression (parser, false, NULL);
21416                   if (init)
21417                     {
21418                       if (TREE_CODE (init) == MODIFY_EXPR
21419                           || TREE_CODE (init) == MODOP_EXPR)
21420                         real_decl = TREE_OPERAND (init, 0);
21421                     }
21422                 }
21423             }
21424         }
21425       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
21426       if (this_pre_body)
21427         {
21428           this_pre_body = pop_stmt_list (this_pre_body);
21429           if (pre_body)
21430             {
21431               tree t = pre_body;
21432               pre_body = push_stmt_list ();
21433               add_stmt (t);
21434               add_stmt (this_pre_body);
21435               pre_body = pop_stmt_list (pre_body);
21436             }
21437           else
21438             pre_body = this_pre_body;
21439         }
21440
21441       if (decl)
21442         real_decl = decl;
21443       if (par_clauses != NULL && real_decl != NULL_TREE)
21444         {
21445           tree *c;
21446           for (c = par_clauses; *c ; )
21447             if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_FIRSTPRIVATE
21448                 && OMP_CLAUSE_DECL (*c) == real_decl)
21449               {
21450                 error ("%Hiteration variable %qD should not be firstprivate",
21451                        &loc, real_decl);
21452                 *c = OMP_CLAUSE_CHAIN (*c);
21453               }
21454             else if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_LASTPRIVATE
21455                      && OMP_CLAUSE_DECL (*c) == real_decl)
21456               {
21457                 /* Add lastprivate (decl) clause to OMP_FOR_CLAUSES,
21458                    change it to shared (decl) in OMP_PARALLEL_CLAUSES.  */
21459                 tree l = build_omp_clause (OMP_CLAUSE_LASTPRIVATE);
21460                 OMP_CLAUSE_DECL (l) = real_decl;
21461                 OMP_CLAUSE_CHAIN (l) = clauses;
21462                 CP_OMP_CLAUSE_INFO (l) = CP_OMP_CLAUSE_INFO (*c);
21463                 clauses = l;
21464                 OMP_CLAUSE_SET_CODE (*c, OMP_CLAUSE_SHARED);
21465                 CP_OMP_CLAUSE_INFO (*c) = NULL;
21466                 add_private_clause = false;
21467               }
21468             else
21469               {
21470                 if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_PRIVATE
21471                     && OMP_CLAUSE_DECL (*c) == real_decl)
21472                   add_private_clause = false;
21473                 c = &OMP_CLAUSE_CHAIN (*c);
21474               }
21475         }
21476
21477       if (add_private_clause)
21478         {
21479           tree c;
21480           for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
21481             {
21482               if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
21483                    || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
21484                   && OMP_CLAUSE_DECL (c) == decl)
21485                 break;
21486               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
21487                        && OMP_CLAUSE_DECL (c) == decl)
21488                 error ("%Hiteration variable %qD should not be firstprivate",
21489                        &loc, decl);
21490               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
21491                        && OMP_CLAUSE_DECL (c) == decl)
21492                 error ("%Hiteration variable %qD should not be reduction",
21493                        &loc, decl);
21494             }
21495           if (c == NULL)
21496             {
21497               c = build_omp_clause (OMP_CLAUSE_PRIVATE);
21498               OMP_CLAUSE_DECL (c) = decl;
21499               c = finish_omp_clauses (c);
21500               if (c)
21501                 {
21502                   OMP_CLAUSE_CHAIN (c) = clauses;
21503                   clauses = c;
21504                 }
21505             }
21506         }
21507
21508       cond = NULL;
21509       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
21510         cond = cp_parser_omp_for_cond (parser, decl);
21511       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
21512
21513       incr = NULL;
21514       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
21515         {
21516           /* If decl is an iterator, preserve the operator on decl
21517              until finish_omp_for.  */
21518           if (decl
21519               && (type_dependent_expression_p (decl)
21520                   || CLASS_TYPE_P (TREE_TYPE (decl))))
21521             incr = cp_parser_omp_for_incr (parser, decl);
21522           else
21523             incr = cp_parser_expression (parser, false, NULL);
21524         }
21525
21526       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
21527         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
21528                                                /*or_comma=*/false,
21529                                                /*consume_paren=*/true);
21530
21531       TREE_VEC_ELT (declv, i) = decl;
21532       TREE_VEC_ELT (initv, i) = init;
21533       TREE_VEC_ELT (condv, i) = cond;
21534       TREE_VEC_ELT (incrv, i) = incr;
21535
21536       if (i == collapse - 1)
21537         break;
21538
21539       /* FIXME: OpenMP 3.0 draft isn't very clear on what exactly is allowed
21540          in between the collapsed for loops to be still considered perfectly
21541          nested.  Hopefully the final version clarifies this.
21542          For now handle (multiple) {'s and empty statements.  */
21543       cp_parser_parse_tentatively (parser);
21544       do
21545         {
21546           if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
21547             break;
21548           else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
21549             {
21550               cp_lexer_consume_token (parser->lexer);
21551               bracecount++;
21552             }
21553           else if (bracecount
21554                    && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
21555             cp_lexer_consume_token (parser->lexer);
21556           else
21557             {
21558               loc = cp_lexer_peek_token (parser->lexer)->location;
21559               error ("%Hnot enough collapsed for loops", &loc);
21560               collapse_err = true;
21561               cp_parser_abort_tentative_parse (parser);
21562               declv = NULL_TREE;
21563               break;
21564             }
21565         }
21566       while (1);
21567
21568       if (declv)
21569         {
21570           cp_parser_parse_definitely (parser);
21571           nbraces += bracecount;
21572         }
21573     }
21574
21575   /* Note that we saved the original contents of this flag when we entered
21576      the structured block, and so we don't need to re-save it here.  */
21577   parser->in_statement = IN_OMP_FOR;
21578
21579   /* Note that the grammar doesn't call for a structured block here,
21580      though the loop as a whole is a structured block.  */
21581   body = push_stmt_list ();
21582   cp_parser_statement (parser, NULL_TREE, false, NULL);
21583   body = pop_stmt_list (body);
21584
21585   if (declv == NULL_TREE)
21586     ret = NULL_TREE;
21587   else
21588     ret = finish_omp_for (loc_first, declv, initv, condv, incrv, body,
21589                           pre_body, clauses);
21590
21591   while (nbraces)
21592     {
21593       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
21594         {
21595           cp_lexer_consume_token (parser->lexer);
21596           nbraces--;
21597         }
21598       else if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
21599         cp_lexer_consume_token (parser->lexer);
21600       else
21601         {
21602           if (!collapse_err)
21603             {
21604               location_t loc = cp_lexer_peek_token (parser->lexer)->location;
21605               error ("%Hcollapsed loops not perfectly nested", &loc);
21606             }
21607           collapse_err = true;
21608           cp_parser_statement_seq_opt (parser, NULL);
21609           cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
21610         }
21611     }
21612
21613   while (for_block)
21614     {
21615       add_stmt (pop_stmt_list (TREE_VALUE (for_block)));
21616       for_block = TREE_CHAIN (for_block);
21617     }
21618
21619   return ret;
21620 }
21621
21622 /* OpenMP 2.5:
21623    #pragma omp for for-clause[optseq] new-line
21624      for-loop  */
21625
21626 #define OMP_FOR_CLAUSE_MASK                             \
21627         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
21628         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
21629         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
21630         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
21631         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
21632         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
21633         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT)              \
21634         | (1u << PRAGMA_OMP_CLAUSE_COLLAPSE))
21635
21636 static tree
21637 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
21638 {
21639   tree clauses, sb, ret;
21640   unsigned int save;
21641
21642   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
21643                                        "#pragma omp for", pragma_tok);
21644
21645   sb = begin_omp_structured_block ();
21646   save = cp_parser_begin_omp_structured_block (parser);
21647
21648   ret = cp_parser_omp_for_loop (parser, clauses, NULL);
21649
21650   cp_parser_end_omp_structured_block (parser, save);
21651   add_stmt (finish_omp_structured_block (sb));
21652
21653   return ret;
21654 }
21655
21656 /* OpenMP 2.5:
21657    # pragma omp master new-line
21658      structured-block  */
21659
21660 static tree
21661 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
21662 {
21663   cp_parser_require_pragma_eol (parser, pragma_tok);
21664   return c_finish_omp_master (cp_parser_omp_structured_block (parser));
21665 }
21666
21667 /* OpenMP 2.5:
21668    # pragma omp ordered new-line
21669      structured-block  */
21670
21671 static tree
21672 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
21673 {
21674   cp_parser_require_pragma_eol (parser, pragma_tok);
21675   return c_finish_omp_ordered (cp_parser_omp_structured_block (parser));
21676 }
21677
21678 /* OpenMP 2.5:
21679
21680    section-scope:
21681      { section-sequence }
21682
21683    section-sequence:
21684      section-directive[opt] structured-block
21685      section-sequence section-directive structured-block  */
21686
21687 static tree
21688 cp_parser_omp_sections_scope (cp_parser *parser)
21689 {
21690   tree stmt, substmt;
21691   bool error_suppress = false;
21692   cp_token *tok;
21693
21694   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>"))
21695     return NULL_TREE;
21696
21697   stmt = push_stmt_list ();
21698
21699   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
21700     {
21701       unsigned save;
21702
21703       substmt = begin_omp_structured_block ();
21704       save = cp_parser_begin_omp_structured_block (parser);
21705
21706       while (1)
21707         {
21708           cp_parser_statement (parser, NULL_TREE, false, NULL);
21709
21710           tok = cp_lexer_peek_token (parser->lexer);
21711           if (tok->pragma_kind == PRAGMA_OMP_SECTION)
21712             break;
21713           if (tok->type == CPP_CLOSE_BRACE)
21714             break;
21715           if (tok->type == CPP_EOF)
21716             break;
21717         }
21718
21719       cp_parser_end_omp_structured_block (parser, save);
21720       substmt = finish_omp_structured_block (substmt);
21721       substmt = build1 (OMP_SECTION, void_type_node, substmt);
21722       add_stmt (substmt);
21723     }
21724
21725   while (1)
21726     {
21727       tok = cp_lexer_peek_token (parser->lexer);
21728       if (tok->type == CPP_CLOSE_BRACE)
21729         break;
21730       if (tok->type == CPP_EOF)
21731         break;
21732
21733       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
21734         {
21735           cp_lexer_consume_token (parser->lexer);
21736           cp_parser_require_pragma_eol (parser, tok);
21737           error_suppress = false;
21738         }
21739       else if (!error_suppress)
21740         {
21741           cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
21742           error_suppress = true;
21743         }
21744
21745       substmt = cp_parser_omp_structured_block (parser);
21746       substmt = build1 (OMP_SECTION, void_type_node, substmt);
21747       add_stmt (substmt);
21748     }
21749   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
21750
21751   substmt = pop_stmt_list (stmt);
21752
21753   stmt = make_node (OMP_SECTIONS);
21754   TREE_TYPE (stmt) = void_type_node;
21755   OMP_SECTIONS_BODY (stmt) = substmt;
21756
21757   add_stmt (stmt);
21758   return stmt;
21759 }
21760
21761 /* OpenMP 2.5:
21762    # pragma omp sections sections-clause[optseq] newline
21763      sections-scope  */
21764
21765 #define OMP_SECTIONS_CLAUSE_MASK                        \
21766         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
21767         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
21768         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
21769         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
21770         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
21771
21772 static tree
21773 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
21774 {
21775   tree clauses, ret;
21776
21777   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
21778                                        "#pragma omp sections", pragma_tok);
21779
21780   ret = cp_parser_omp_sections_scope (parser);
21781   if (ret)
21782     OMP_SECTIONS_CLAUSES (ret) = clauses;
21783
21784   return ret;
21785 }
21786
21787 /* OpenMP 2.5:
21788    # pragma parallel parallel-clause new-line
21789    # pragma parallel for parallel-for-clause new-line
21790    # pragma parallel sections parallel-sections-clause new-line  */
21791
21792 #define OMP_PARALLEL_CLAUSE_MASK                        \
21793         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
21794         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
21795         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
21796         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
21797         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
21798         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
21799         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
21800         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
21801
21802 static tree
21803 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
21804 {
21805   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
21806   const char *p_name = "#pragma omp parallel";
21807   tree stmt, clauses, par_clause, ws_clause, block;
21808   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
21809   unsigned int save;
21810
21811   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
21812     {
21813       cp_lexer_consume_token (parser->lexer);
21814       p_kind = PRAGMA_OMP_PARALLEL_FOR;
21815       p_name = "#pragma omp parallel for";
21816       mask |= OMP_FOR_CLAUSE_MASK;
21817       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
21818     }
21819   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
21820     {
21821       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
21822       const char *p = IDENTIFIER_POINTER (id);
21823       if (strcmp (p, "sections") == 0)
21824         {
21825           cp_lexer_consume_token (parser->lexer);
21826           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
21827           p_name = "#pragma omp parallel sections";
21828           mask |= OMP_SECTIONS_CLAUSE_MASK;
21829           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
21830         }
21831     }
21832
21833   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
21834   block = begin_omp_parallel ();
21835   save = cp_parser_begin_omp_structured_block (parser);
21836
21837   switch (p_kind)
21838     {
21839     case PRAGMA_OMP_PARALLEL:
21840       cp_parser_statement (parser, NULL_TREE, false, NULL);
21841       par_clause = clauses;
21842       break;
21843
21844     case PRAGMA_OMP_PARALLEL_FOR:
21845       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
21846       cp_parser_omp_for_loop (parser, ws_clause, &par_clause);
21847       break;
21848
21849     case PRAGMA_OMP_PARALLEL_SECTIONS:
21850       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
21851       stmt = cp_parser_omp_sections_scope (parser);
21852       if (stmt)
21853         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
21854       break;
21855
21856     default:
21857       gcc_unreachable ();
21858     }
21859
21860   cp_parser_end_omp_structured_block (parser, save);
21861   stmt = finish_omp_parallel (par_clause, block);
21862   if (p_kind != PRAGMA_OMP_PARALLEL)
21863     OMP_PARALLEL_COMBINED (stmt) = 1;
21864   return stmt;
21865 }
21866
21867 /* OpenMP 2.5:
21868    # pragma omp single single-clause[optseq] new-line
21869      structured-block  */
21870
21871 #define OMP_SINGLE_CLAUSE_MASK                          \
21872         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
21873         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
21874         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
21875         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
21876
21877 static tree
21878 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
21879 {
21880   tree stmt = make_node (OMP_SINGLE);
21881   TREE_TYPE (stmt) = void_type_node;
21882
21883   OMP_SINGLE_CLAUSES (stmt)
21884     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
21885                                  "#pragma omp single", pragma_tok);
21886   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
21887
21888   return add_stmt (stmt);
21889 }
21890
21891 /* OpenMP 3.0:
21892    # pragma omp task task-clause[optseq] new-line
21893      structured-block  */
21894
21895 #define OMP_TASK_CLAUSE_MASK                            \
21896         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
21897         | (1u << PRAGMA_OMP_CLAUSE_UNTIED)              \
21898         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
21899         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
21900         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
21901         | (1u << PRAGMA_OMP_CLAUSE_SHARED))
21902
21903 static tree
21904 cp_parser_omp_task (cp_parser *parser, cp_token *pragma_tok)
21905 {
21906   tree clauses, block;
21907   unsigned int save;
21908
21909   clauses = cp_parser_omp_all_clauses (parser, OMP_TASK_CLAUSE_MASK,
21910                                        "#pragma omp task", pragma_tok);
21911   block = begin_omp_task ();
21912   save = cp_parser_begin_omp_structured_block (parser);
21913   cp_parser_statement (parser, NULL_TREE, false, NULL);
21914   cp_parser_end_omp_structured_block (parser, save);
21915   return finish_omp_task (clauses, block);
21916 }
21917
21918 /* OpenMP 3.0:
21919    # pragma omp taskwait new-line  */
21920
21921 static void
21922 cp_parser_omp_taskwait (cp_parser *parser, cp_token *pragma_tok)
21923 {
21924   cp_parser_require_pragma_eol (parser, pragma_tok);
21925   finish_omp_taskwait ();
21926 }
21927
21928 /* OpenMP 2.5:
21929    # pragma omp threadprivate (variable-list) */
21930
21931 static void
21932 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
21933 {
21934   tree vars;
21935
21936   vars = cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
21937   cp_parser_require_pragma_eol (parser, pragma_tok);
21938
21939   finish_omp_threadprivate (vars);
21940 }
21941
21942 /* Main entry point to OpenMP statement pragmas.  */
21943
21944 static void
21945 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
21946 {
21947   tree stmt;
21948
21949   switch (pragma_tok->pragma_kind)
21950     {
21951     case PRAGMA_OMP_ATOMIC:
21952       cp_parser_omp_atomic (parser, pragma_tok);
21953       return;
21954     case PRAGMA_OMP_CRITICAL:
21955       stmt = cp_parser_omp_critical (parser, pragma_tok);
21956       break;
21957     case PRAGMA_OMP_FOR:
21958       stmt = cp_parser_omp_for (parser, pragma_tok);
21959       break;
21960     case PRAGMA_OMP_MASTER:
21961       stmt = cp_parser_omp_master (parser, pragma_tok);
21962       break;
21963     case PRAGMA_OMP_ORDERED:
21964       stmt = cp_parser_omp_ordered (parser, pragma_tok);
21965       break;
21966     case PRAGMA_OMP_PARALLEL:
21967       stmt = cp_parser_omp_parallel (parser, pragma_tok);
21968       break;
21969     case PRAGMA_OMP_SECTIONS:
21970       stmt = cp_parser_omp_sections (parser, pragma_tok);
21971       break;
21972     case PRAGMA_OMP_SINGLE:
21973       stmt = cp_parser_omp_single (parser, pragma_tok);
21974       break;
21975     case PRAGMA_OMP_TASK:
21976       stmt = cp_parser_omp_task (parser, pragma_tok);
21977       break;
21978     default:
21979       gcc_unreachable ();
21980     }
21981
21982   if (stmt)
21983     SET_EXPR_LOCATION (stmt, pragma_tok->location);
21984 }
21985 \f
21986 /* The parser.  */
21987
21988 static GTY (()) cp_parser *the_parser;
21989
21990 \f
21991 /* Special handling for the first token or line in the file.  The first
21992    thing in the file might be #pragma GCC pch_preprocess, which loads a
21993    PCH file, which is a GC collection point.  So we need to handle this
21994    first pragma without benefit of an existing lexer structure.
21995
21996    Always returns one token to the caller in *FIRST_TOKEN.  This is
21997    either the true first token of the file, or the first token after
21998    the initial pragma.  */
21999
22000 static void
22001 cp_parser_initial_pragma (cp_token *first_token)
22002 {
22003   tree name = NULL;
22004
22005   cp_lexer_get_preprocessor_token (NULL, first_token);
22006   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
22007     return;
22008
22009   cp_lexer_get_preprocessor_token (NULL, first_token);
22010   if (first_token->type == CPP_STRING)
22011     {
22012       name = first_token->u.value;
22013
22014       cp_lexer_get_preprocessor_token (NULL, first_token);
22015       if (first_token->type != CPP_PRAGMA_EOL)
22016         error ("%Hjunk at end of %<#pragma GCC pch_preprocess%>",
22017                &first_token->location);
22018     }
22019   else
22020     error ("%Hexpected string literal", &first_token->location);
22021
22022   /* Skip to the end of the pragma.  */
22023   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
22024     cp_lexer_get_preprocessor_token (NULL, first_token);
22025
22026   /* Now actually load the PCH file.  */
22027   if (name)
22028     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
22029
22030   /* Read one more token to return to our caller.  We have to do this
22031      after reading the PCH file in, since its pointers have to be
22032      live.  */
22033   cp_lexer_get_preprocessor_token (NULL, first_token);
22034 }
22035
22036 /* Normal parsing of a pragma token.  Here we can (and must) use the
22037    regular lexer.  */
22038
22039 static bool
22040 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
22041 {
22042   cp_token *pragma_tok;
22043   unsigned int id;
22044
22045   pragma_tok = cp_lexer_consume_token (parser->lexer);
22046   gcc_assert (pragma_tok->type == CPP_PRAGMA);
22047   parser->lexer->in_pragma = true;
22048
22049   id = pragma_tok->pragma_kind;
22050   switch (id)
22051     {
22052     case PRAGMA_GCC_PCH_PREPROCESS:
22053       error ("%H%<#pragma GCC pch_preprocess%> must be first",
22054              &pragma_tok->location);
22055       break;
22056
22057     case PRAGMA_OMP_BARRIER:
22058       switch (context)
22059         {
22060         case pragma_compound:
22061           cp_parser_omp_barrier (parser, pragma_tok);
22062           return false;
22063         case pragma_stmt:
22064           error ("%H%<#pragma omp barrier%> may only be "
22065                  "used in compound statements", &pragma_tok->location);
22066           break;
22067         default:
22068           goto bad_stmt;
22069         }
22070       break;
22071
22072     case PRAGMA_OMP_FLUSH:
22073       switch (context)
22074         {
22075         case pragma_compound:
22076           cp_parser_omp_flush (parser, pragma_tok);
22077           return false;
22078         case pragma_stmt:
22079           error ("%H%<#pragma omp flush%> may only be "
22080                  "used in compound statements", &pragma_tok->location);
22081           break;
22082         default:
22083           goto bad_stmt;
22084         }
22085       break;
22086
22087     case PRAGMA_OMP_TASKWAIT:
22088       switch (context)
22089         {
22090         case pragma_compound:
22091           cp_parser_omp_taskwait (parser, pragma_tok);
22092           return false;
22093         case pragma_stmt:
22094           error ("%H%<#pragma omp taskwait%> may only be "
22095                  "used in compound statements",
22096                  &pragma_tok->location);
22097           break;
22098         default:
22099           goto bad_stmt;
22100         }
22101       break;
22102
22103     case PRAGMA_OMP_THREADPRIVATE:
22104       cp_parser_omp_threadprivate (parser, pragma_tok);
22105       return false;
22106
22107     case PRAGMA_OMP_ATOMIC:
22108     case PRAGMA_OMP_CRITICAL:
22109     case PRAGMA_OMP_FOR:
22110     case PRAGMA_OMP_MASTER:
22111     case PRAGMA_OMP_ORDERED:
22112     case PRAGMA_OMP_PARALLEL:
22113     case PRAGMA_OMP_SECTIONS:
22114     case PRAGMA_OMP_SINGLE:
22115     case PRAGMA_OMP_TASK:
22116       if (context == pragma_external)
22117         goto bad_stmt;
22118       cp_parser_omp_construct (parser, pragma_tok);
22119       return true;
22120
22121     case PRAGMA_OMP_SECTION:
22122       error ("%H%<#pragma omp section%> may only be used in "
22123              "%<#pragma omp sections%> construct", &pragma_tok->location);
22124       break;
22125
22126     default:
22127       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
22128       c_invoke_pragma_handler (id);
22129       break;
22130
22131     bad_stmt:
22132       cp_parser_error (parser, "expected declaration specifiers");
22133       break;
22134     }
22135
22136   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
22137   return false;
22138 }
22139
22140 /* The interface the pragma parsers have to the lexer.  */
22141
22142 enum cpp_ttype
22143 pragma_lex (tree *value)
22144 {
22145   cp_token *tok;
22146   enum cpp_ttype ret;
22147
22148   tok = cp_lexer_peek_token (the_parser->lexer);
22149
22150   ret = tok->type;
22151   *value = tok->u.value;
22152
22153   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
22154     ret = CPP_EOF;
22155   else if (ret == CPP_STRING)
22156     *value = cp_parser_string_literal (the_parser, false, false);
22157   else
22158     {
22159       cp_lexer_consume_token (the_parser->lexer);
22160       if (ret == CPP_KEYWORD)
22161         ret = CPP_NAME;
22162     }
22163
22164   return ret;
22165 }
22166
22167 \f
22168 /* External interface.  */
22169
22170 /* Parse one entire translation unit.  */
22171
22172 void
22173 c_parse_file (void)
22174 {
22175   bool error_occurred;
22176   static bool already_called = false;
22177
22178   if (already_called)
22179     {
22180       sorry ("inter-module optimizations not implemented for C++");
22181       return;
22182     }
22183   already_called = true;
22184
22185   the_parser = cp_parser_new ();
22186   push_deferring_access_checks (flag_access_control
22187                                 ? dk_no_deferred : dk_no_check);
22188   error_occurred = cp_parser_translation_unit (the_parser);
22189   the_parser = NULL;
22190 }
22191
22192 #include "gt-cp-parser.h"