OSDN Git Service

PR c++/37962
[pf3gnuchains/gcc-fork.git] / gcc / cp / parser.c
1 /* C++ Parser.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004,
3    2005, 2007, 2008  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
41 \f
42 /* The lexer.  */
43
44 /* The cp_lexer_* routines mediate between the lexer proper (in libcpp
45    and c-lex.c) and the C++ parser.  */
46
47 /* A token's value and its associated deferred access checks and
48    qualifying scope.  */
49
50 struct tree_check GTY(())
51 {
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 cp_token GTY (())
64 {
65   /* The kind of token.  */
66   ENUM_BITFIELD (cpp_ttype) type : 8;
67   /* If this token is a keyword, this value indicates which keyword.
68      Otherwise, this value is RID_MAX.  */
69   ENUM_BITFIELD (rid) keyword : 8;
70   /* Token flags.  */
71   unsigned char flags;
72   /* Identifier for the pragma.  */
73   ENUM_BITFIELD (pragma_kind) pragma_kind : 6;
74   /* True if this token is from a context where it is implicitly extern "C" */
75   BOOL_BITFIELD implicit_extern_c : 1;
76   /* True for a CPP_NAME token that is not a keyword (i.e., for which
77      KEYWORD is RID_MAX) iff this name was looked up and found to be
78      ambiguous.  An error has already been reported.  */
79   BOOL_BITFIELD ambiguous_p : 1;
80   /* The value associated with this token, if any.  */
81   union cp_token_value {
82     /* Used for CPP_NESTED_NAME_SPECIFIER and CPP_TEMPLATE_ID.  */
83     struct tree_check* GTY((tag ("1"))) tree_check_value;
84     /* Use for all other tokens.  */
85     tree GTY((tag ("0"))) value;
86   } GTY((desc ("(%1.type == CPP_TEMPLATE_ID) || (%1.type == CPP_NESTED_NAME_SPECIFIER)"))) u;
87   /* The location at which this token was found.  */
88   location_t location;
89 } cp_token;
90
91 /* We use a stack of token pointer for saving token sets.  */
92 typedef struct cp_token *cp_token_position;
93 DEF_VEC_P (cp_token_position);
94 DEF_VEC_ALLOC_P (cp_token_position,heap);
95
96 static cp_token eof_token =
97 {
98   CPP_EOF, RID_MAX, 0, PRAGMA_NONE, false, 0, { NULL },
99   0
100 };
101
102 /* The cp_lexer structure represents the C++ lexer.  It is responsible
103    for managing the token stream from the preprocessor and supplying
104    it to the parser.  Tokens are never added to the cp_lexer after
105    it is created.  */
106
107 typedef struct cp_lexer GTY (())
108 {
109   /* The memory allocated for the buffer.  NULL if this lexer does not
110      own the token buffer.  */
111   cp_token * GTY ((length ("%h.buffer_length"))) buffer;
112   /* If the lexer owns the buffer, this is the number of tokens in the
113      buffer.  */
114   size_t buffer_length;
115
116   /* A pointer just past the last available token.  The tokens
117      in this lexer are [buffer, last_token).  */
118   cp_token_position GTY ((skip)) last_token;
119
120   /* The next available token.  If NEXT_TOKEN is &eof_token, then there are
121      no more available tokens.  */
122   cp_token_position GTY ((skip)) next_token;
123
124   /* A stack indicating positions at which cp_lexer_save_tokens was
125      called.  The top entry is the most recent position at which we
126      began saving tokens.  If the stack is non-empty, we are saving
127      tokens.  */
128   VEC(cp_token_position,heap) *GTY ((skip)) saved_tokens;
129
130   /* The next lexer in a linked list of lexers.  */
131   struct cp_lexer *next;
132
133   /* True if we should output debugging information.  */
134   bool debugging_p;
135
136   /* True if we're in the context of parsing a pragma, and should not
137      increment past the end-of-line marker.  */
138   bool in_pragma;
139 } cp_lexer;
140
141 /* cp_token_cache is a range of tokens.  There is no need to represent
142    allocate heap memory for it, since tokens are never removed from the
143    lexer's array.  There is also no need for the GC to walk through
144    a cp_token_cache, since everything in here is referenced through
145    a lexer.  */
146
147 typedef struct cp_token_cache GTY(())
148 {
149   /* The beginning of the token range.  */
150   cp_token * GTY((skip)) first;
151
152   /* Points immediately after the last token in the range.  */
153   cp_token * GTY ((skip)) last;
154 } cp_token_cache;
155
156 /* Prototypes.  */
157
158 static cp_lexer *cp_lexer_new_main
159   (void);
160 static cp_lexer *cp_lexer_new_from_tokens
161   (cp_token_cache *tokens);
162 static void cp_lexer_destroy
163   (cp_lexer *);
164 static int cp_lexer_saving_tokens
165   (const cp_lexer *);
166 static cp_token_position cp_lexer_token_position
167   (cp_lexer *, bool);
168 static cp_token *cp_lexer_token_at
169   (cp_lexer *, cp_token_position);
170 static void cp_lexer_get_preprocessor_token
171   (cp_lexer *, cp_token *);
172 static inline cp_token *cp_lexer_peek_token
173   (cp_lexer *);
174 static cp_token *cp_lexer_peek_nth_token
175   (cp_lexer *, size_t);
176 static inline bool cp_lexer_next_token_is
177   (cp_lexer *, enum cpp_ttype);
178 static bool cp_lexer_next_token_is_not
179   (cp_lexer *, enum cpp_ttype);
180 static bool cp_lexer_next_token_is_keyword
181   (cp_lexer *, enum rid);
182 static cp_token *cp_lexer_consume_token
183   (cp_lexer *);
184 static void cp_lexer_purge_token
185   (cp_lexer *);
186 static void cp_lexer_purge_tokens_after
187   (cp_lexer *, cp_token_position);
188 static void cp_lexer_save_tokens
189   (cp_lexer *);
190 static void cp_lexer_commit_tokens
191   (cp_lexer *);
192 static void cp_lexer_rollback_tokens
193   (cp_lexer *);
194 #ifdef ENABLE_CHECKING
195 static void cp_lexer_print_token
196   (FILE *, cp_token *);
197 static inline bool cp_lexer_debugging_p
198   (cp_lexer *);
199 static void cp_lexer_start_debugging
200   (cp_lexer *) ATTRIBUTE_UNUSED;
201 static void cp_lexer_stop_debugging
202   (cp_lexer *) ATTRIBUTE_UNUSED;
203 #else
204 /* If we define cp_lexer_debug_stream to NULL it will provoke warnings
205    about passing NULL to functions that require non-NULL arguments
206    (fputs, fprintf).  It will never be used, so all we need is a value
207    of the right type that's guaranteed not to be NULL.  */
208 #define cp_lexer_debug_stream stdout
209 #define cp_lexer_print_token(str, tok) (void) 0
210 #define cp_lexer_debugging_p(lexer) 0
211 #endif /* ENABLE_CHECKING */
212
213 static cp_token_cache *cp_token_cache_new
214   (cp_token *, cp_token *);
215
216 static void cp_parser_initial_pragma
217   (cp_token *);
218
219 /* Manifest constants.  */
220 #define CP_LEXER_BUFFER_SIZE ((256 * 1024) / sizeof (cp_token))
221 #define CP_SAVED_TOKEN_STACK 5
222
223 /* A token type for keywords, as opposed to ordinary identifiers.  */
224 #define CPP_KEYWORD ((enum cpp_ttype) (N_TTYPES + 1))
225
226 /* A token type for template-ids.  If a template-id is processed while
227    parsing tentatively, it is replaced with a CPP_TEMPLATE_ID token;
228    the value of the CPP_TEMPLATE_ID is whatever was returned by
229    cp_parser_template_id.  */
230 #define CPP_TEMPLATE_ID ((enum cpp_ttype) (CPP_KEYWORD + 1))
231
232 /* A token type for nested-name-specifiers.  If a
233    nested-name-specifier is processed while parsing tentatively, it is
234    replaced with a CPP_NESTED_NAME_SPECIFIER token; the value of the
235    CPP_NESTED_NAME_SPECIFIER is whatever was returned by
236    cp_parser_nested_name_specifier_opt.  */
237 #define CPP_NESTED_NAME_SPECIFIER ((enum cpp_ttype) (CPP_TEMPLATE_ID + 1))
238
239 /* A token type for tokens that are not tokens at all; these are used
240    to represent slots in the array where there used to be a token
241    that has now been deleted.  */
242 #define CPP_PURGED ((enum cpp_ttype) (CPP_NESTED_NAME_SPECIFIER + 1))
243
244 /* The number of token types, including C++-specific ones.  */
245 #define N_CP_TTYPES ((int) (CPP_PURGED + 1))
246
247 /* Variables.  */
248
249 #ifdef ENABLE_CHECKING
250 /* The stream to which debugging output should be written.  */
251 static FILE *cp_lexer_debug_stream;
252 #endif /* ENABLE_CHECKING */
253
254 /* Create a new main C++ lexer, the lexer that gets tokens from the
255    preprocessor.  */
256
257 static cp_lexer *
258 cp_lexer_new_main (void)
259 {
260   cp_token first_token;
261   cp_lexer *lexer;
262   cp_token *pos;
263   size_t alloc;
264   size_t space;
265   cp_token *buffer;
266
267   /* It's possible that parsing the first pragma will load a PCH file,
268      which is a GC collection point.  So we have to do that before
269      allocating any memory.  */
270   cp_parser_initial_pragma (&first_token);
271
272   c_common_no_more_pch ();
273
274   /* Allocate the memory.  */
275   lexer = GGC_CNEW (cp_lexer);
276
277 #ifdef ENABLE_CHECKING
278   /* Initially we are not debugging.  */
279   lexer->debugging_p = false;
280 #endif /* ENABLE_CHECKING */
281   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
282                                    CP_SAVED_TOKEN_STACK);
283
284   /* Create the buffer.  */
285   alloc = CP_LEXER_BUFFER_SIZE;
286   buffer = GGC_NEWVEC (cp_token, alloc);
287
288   /* Put the first token in the buffer.  */
289   space = alloc;
290   pos = buffer;
291   *pos = first_token;
292
293   /* Get the remaining tokens from the preprocessor.  */
294   while (pos->type != CPP_EOF)
295     {
296       pos++;
297       if (!--space)
298         {
299           space = alloc;
300           alloc *= 2;
301           buffer = GGC_RESIZEVEC (cp_token, buffer, alloc);
302           pos = buffer + space;
303         }
304       cp_lexer_get_preprocessor_token (lexer, pos);
305     }
306   lexer->buffer = buffer;
307   lexer->buffer_length = alloc - space;
308   lexer->last_token = pos;
309   lexer->next_token = lexer->buffer_length ? buffer : &eof_token;
310
311   /* Subsequent preprocessor diagnostics should use compiler
312      diagnostic functions to get the compiler source location.  */
313   cpp_get_options (parse_in)->client_diagnostic = true;
314   cpp_get_callbacks (parse_in)->error = cp_cpp_error;
315
316   gcc_assert (lexer->next_token->type != CPP_PURGED);
317   return lexer;
318 }
319
320 /* Create a new lexer whose token stream is primed with the tokens in
321    CACHE.  When these tokens are exhausted, no new tokens will be read.  */
322
323 static cp_lexer *
324 cp_lexer_new_from_tokens (cp_token_cache *cache)
325 {
326   cp_token *first = cache->first;
327   cp_token *last = cache->last;
328   cp_lexer *lexer = GGC_CNEW (cp_lexer);
329
330   /* We do not own the buffer.  */
331   lexer->buffer = NULL;
332   lexer->buffer_length = 0;
333   lexer->next_token = first == last ? &eof_token : first;
334   lexer->last_token = last;
335
336   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
337                                    CP_SAVED_TOKEN_STACK);
338
339 #ifdef ENABLE_CHECKING
340   /* Initially we are not debugging.  */
341   lexer->debugging_p = false;
342 #endif
343
344   gcc_assert (lexer->next_token->type != CPP_PURGED);
345   return lexer;
346 }
347
348 /* Frees all resources associated with LEXER.  */
349
350 static void
351 cp_lexer_destroy (cp_lexer *lexer)
352 {
353   if (lexer->buffer)
354     ggc_free (lexer->buffer);
355   VEC_free (cp_token_position, heap, lexer->saved_tokens);
356   ggc_free (lexer);
357 }
358
359 /* Returns nonzero if debugging information should be output.  */
360
361 #ifdef ENABLE_CHECKING
362
363 static inline bool
364 cp_lexer_debugging_p (cp_lexer *lexer)
365 {
366   return lexer->debugging_p;
367 }
368
369 #endif /* ENABLE_CHECKING */
370
371 static inline cp_token_position
372 cp_lexer_token_position (cp_lexer *lexer, bool previous_p)
373 {
374   gcc_assert (!previous_p || lexer->next_token != &eof_token);
375
376   return lexer->next_token - previous_p;
377 }
378
379 static inline cp_token *
380 cp_lexer_token_at (cp_lexer *lexer ATTRIBUTE_UNUSED, cp_token_position pos)
381 {
382   return pos;
383 }
384
385 /* nonzero if we are presently saving tokens.  */
386
387 static inline int
388 cp_lexer_saving_tokens (const cp_lexer* lexer)
389 {
390   return VEC_length (cp_token_position, lexer->saved_tokens) != 0;
391 }
392
393 /* Store the next token from the preprocessor in *TOKEN.  Return true
394    if we reach EOF.  If LEXER is NULL, assume we are handling an
395    initial #pragma pch_preprocess, and thus want the lexer to return
396    processed strings.  */
397
398 static void
399 cp_lexer_get_preprocessor_token (cp_lexer *lexer, cp_token *token)
400 {
401   static int is_extern_c = 0;
402
403    /* Get a new token from the preprocessor.  */
404   token->type
405     = c_lex_with_flags (&token->u.value, &token->location, &token->flags,
406                         lexer == NULL ? 0 : C_LEX_RAW_STRINGS);
407   token->keyword = RID_MAX;
408   token->pragma_kind = PRAGMA_NONE;
409
410   /* On some systems, some header files are surrounded by an
411      implicit extern "C" block.  Set a flag in the token if it
412      comes from such a header.  */
413   is_extern_c += pending_lang_change;
414   pending_lang_change = 0;
415   token->implicit_extern_c = is_extern_c > 0;
416
417   /* Check to see if this token is a keyword.  */
418   if (token->type == CPP_NAME)
419     {
420       if (C_IS_RESERVED_WORD (token->u.value))
421         {
422           /* Mark this token as a keyword.  */
423           token->type = CPP_KEYWORD;
424           /* Record which keyword.  */
425           token->keyword = C_RID_CODE (token->u.value);
426           /* Update the value.  Some keywords are mapped to particular
427              entities, rather than simply having the value of the
428              corresponding IDENTIFIER_NODE.  For example, `__const' is
429              mapped to `const'.  */
430           token->u.value = ridpointers[token->keyword];
431         }
432       else
433         {
434           if (warn_cxx0x_compat
435               && C_RID_CODE (token->u.value) >= RID_FIRST_CXX0X
436               && C_RID_CODE (token->u.value) <= RID_LAST_CXX0X)
437             {
438               /* Warn about the C++0x keyword (but still treat it as
439                  an identifier).  */
440               warning (OPT_Wc__0x_compat, 
441                        "identifier %<%s%> will become a keyword in C++0x",
442                        IDENTIFIER_POINTER (token->u.value));
443
444               /* Clear out the C_RID_CODE so we don't warn about this
445                  particular identifier-turned-keyword again.  */
446               C_SET_RID_CODE (token->u.value, RID_MAX);
447             }
448
449           token->ambiguous_p = false;
450           token->keyword = RID_MAX;
451         }
452     }
453   /* Handle Objective-C++ keywords.  */
454   else if (token->type == CPP_AT_NAME)
455     {
456       token->type = CPP_KEYWORD;
457       switch (C_RID_CODE (token->u.value))
458         {
459         /* Map 'class' to '@class', 'private' to '@private', etc.  */
460         case RID_CLASS: token->keyword = RID_AT_CLASS; break;
461         case RID_PRIVATE: token->keyword = RID_AT_PRIVATE; break;
462         case RID_PROTECTED: token->keyword = RID_AT_PROTECTED; break;
463         case RID_PUBLIC: token->keyword = RID_AT_PUBLIC; break;
464         case RID_THROW: token->keyword = RID_AT_THROW; break;
465         case RID_TRY: token->keyword = RID_AT_TRY; break;
466         case RID_CATCH: token->keyword = RID_AT_CATCH; break;
467         default: token->keyword = C_RID_CODE (token->u.value);
468         }
469     }
470   else if (token->type == CPP_PRAGMA)
471     {
472       /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST.  */
473       token->pragma_kind = TREE_INT_CST_LOW (token->u.value);
474       token->u.value = NULL_TREE;
475     }
476 }
477
478 /* Update the globals input_location and the input file stack from TOKEN.  */
479 static inline void
480 cp_lexer_set_source_position_from_token (cp_token *token)
481 {
482   if (token->type != CPP_EOF)
483     {
484       input_location = token->location;
485     }
486 }
487
488 /* Return a pointer to the next token in the token stream, but do not
489    consume it.  */
490
491 static inline cp_token *
492 cp_lexer_peek_token (cp_lexer *lexer)
493 {
494   if (cp_lexer_debugging_p (lexer))
495     {
496       fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
497       cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
498       putc ('\n', cp_lexer_debug_stream);
499     }
500   return lexer->next_token;
501 }
502
503 /* Return true if the next token has the indicated TYPE.  */
504
505 static inline bool
506 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
507 {
508   return cp_lexer_peek_token (lexer)->type == type;
509 }
510
511 /* Return true if the next token does not have the indicated TYPE.  */
512
513 static inline bool
514 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
515 {
516   return !cp_lexer_next_token_is (lexer, type);
517 }
518
519 /* Return true if the next token is the indicated KEYWORD.  */
520
521 static inline bool
522 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
523 {
524   return cp_lexer_peek_token (lexer)->keyword == keyword;
525 }
526
527 /* Return true if the next token is not the indicated KEYWORD.  */
528
529 static inline bool
530 cp_lexer_next_token_is_not_keyword (cp_lexer* lexer, enum rid keyword)
531 {
532   return cp_lexer_peek_token (lexer)->keyword != keyword;
533 }
534
535 /* Return true if the next token is a keyword for a decl-specifier.  */
536
537 static bool
538 cp_lexer_next_token_is_decl_specifier_keyword (cp_lexer *lexer)
539 {
540   cp_token *token;
541
542   token = cp_lexer_peek_token (lexer);
543   switch (token->keyword) 
544     {
545       /* auto specifier: storage-class-specifier in C++,
546          simple-type-specifier in C++0x.  */
547     case RID_AUTO:
548       /* Storage classes.  */
549     case RID_REGISTER:
550     case RID_STATIC:
551     case RID_EXTERN:
552     case RID_MUTABLE:
553     case RID_THREAD:
554       /* Elaborated type specifiers.  */
555     case RID_ENUM:
556     case RID_CLASS:
557     case RID_STRUCT:
558     case RID_UNION:
559     case RID_TYPENAME:
560       /* Simple type specifiers.  */
561     case RID_CHAR:
562     case RID_CHAR16:
563     case RID_CHAR32:
564     case RID_WCHAR:
565     case RID_BOOL:
566     case RID_SHORT:
567     case RID_INT:
568     case RID_LONG:
569     case RID_SIGNED:
570     case RID_UNSIGNED:
571     case RID_FLOAT:
572     case RID_DOUBLE:
573     case RID_VOID:
574       /* GNU extensions.  */ 
575     case RID_ATTRIBUTE:
576     case RID_TYPEOF:
577       /* C++0x extensions.  */
578     case RID_DECLTYPE:
579       return true;
580
581     default:
582       return false;
583     }
584 }
585
586 /* Return a pointer to the Nth token in the token stream.  If N is 1,
587    then this is precisely equivalent to cp_lexer_peek_token (except
588    that it is not inline).  One would like to disallow that case, but
589    there is one case (cp_parser_nth_token_starts_template_id) where
590    the caller passes a variable for N and it might be 1.  */
591
592 static cp_token *
593 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
594 {
595   cp_token *token;
596
597   /* N is 1-based, not zero-based.  */
598   gcc_assert (n > 0);
599
600   if (cp_lexer_debugging_p (lexer))
601     fprintf (cp_lexer_debug_stream,
602              "cp_lexer: peeking ahead %ld at token: ", (long)n);
603
604   --n;
605   token = lexer->next_token;
606   gcc_assert (!n || token != &eof_token);
607   while (n != 0)
608     {
609       ++token;
610       if (token == lexer->last_token)
611         {
612           token = &eof_token;
613           break;
614         }
615
616       if (token->type != CPP_PURGED)
617         --n;
618     }
619
620   if (cp_lexer_debugging_p (lexer))
621     {
622       cp_lexer_print_token (cp_lexer_debug_stream, token);
623       putc ('\n', cp_lexer_debug_stream);
624     }
625
626   return token;
627 }
628
629 /* Return the next token, and advance the lexer's next_token pointer
630    to point to the next non-purged token.  */
631
632 static cp_token *
633 cp_lexer_consume_token (cp_lexer* lexer)
634 {
635   cp_token *token = lexer->next_token;
636
637   gcc_assert (token != &eof_token);
638   gcc_assert (!lexer->in_pragma || token->type != CPP_PRAGMA_EOL);
639
640   do
641     {
642       lexer->next_token++;
643       if (lexer->next_token == lexer->last_token)
644         {
645           lexer->next_token = &eof_token;
646           break;
647         }
648
649     }
650   while (lexer->next_token->type == CPP_PURGED);
651
652   cp_lexer_set_source_position_from_token (token);
653
654   /* Provide debugging output.  */
655   if (cp_lexer_debugging_p (lexer))
656     {
657       fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
658       cp_lexer_print_token (cp_lexer_debug_stream, token);
659       putc ('\n', cp_lexer_debug_stream);
660     }
661
662   return token;
663 }
664
665 /* Permanently remove the next token from the token stream, and
666    advance the next_token pointer to refer to the next non-purged
667    token.  */
668
669 static void
670 cp_lexer_purge_token (cp_lexer *lexer)
671 {
672   cp_token *tok = lexer->next_token;
673
674   gcc_assert (tok != &eof_token);
675   tok->type = CPP_PURGED;
676   tok->location = UNKNOWN_LOCATION;
677   tok->u.value = NULL_TREE;
678   tok->keyword = RID_MAX;
679
680   do
681     {
682       tok++;
683       if (tok == lexer->last_token)
684         {
685           tok = &eof_token;
686           break;
687         }
688     }
689   while (tok->type == CPP_PURGED);
690   lexer->next_token = tok;
691 }
692
693 /* Permanently remove all tokens after TOK, up to, but not
694    including, the token that will be returned next by
695    cp_lexer_peek_token.  */
696
697 static void
698 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
699 {
700   cp_token *peek = lexer->next_token;
701
702   if (peek == &eof_token)
703     peek = lexer->last_token;
704
705   gcc_assert (tok < peek);
706
707   for ( tok += 1; tok != peek; tok += 1)
708     {
709       tok->type = CPP_PURGED;
710       tok->location = UNKNOWN_LOCATION;
711       tok->u.value = NULL_TREE;
712       tok->keyword = RID_MAX;
713     }
714 }
715
716 /* Begin saving tokens.  All tokens consumed after this point will be
717    preserved.  */
718
719 static void
720 cp_lexer_save_tokens (cp_lexer* lexer)
721 {
722   /* Provide debugging output.  */
723   if (cp_lexer_debugging_p (lexer))
724     fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
725
726   VEC_safe_push (cp_token_position, heap,
727                  lexer->saved_tokens, lexer->next_token);
728 }
729
730 /* Commit to the portion of the token stream most recently saved.  */
731
732 static void
733 cp_lexer_commit_tokens (cp_lexer* lexer)
734 {
735   /* Provide debugging output.  */
736   if (cp_lexer_debugging_p (lexer))
737     fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
738
739   VEC_pop (cp_token_position, lexer->saved_tokens);
740 }
741
742 /* Return all tokens saved since the last call to cp_lexer_save_tokens
743    to the token stream.  Stop saving tokens.  */
744
745 static void
746 cp_lexer_rollback_tokens (cp_lexer* lexer)
747 {
748   /* Provide debugging output.  */
749   if (cp_lexer_debugging_p (lexer))
750     fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
751
752   lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
753 }
754
755 /* Print a representation of the TOKEN on the STREAM.  */
756
757 #ifdef ENABLE_CHECKING
758
759 static void
760 cp_lexer_print_token (FILE * stream, cp_token *token)
761 {
762   /* We don't use cpp_type2name here because the parser defines
763      a few tokens of its own.  */
764   static const char *const token_names[] = {
765     /* cpplib-defined token types */
766 #define OP(e, s) #e,
767 #define TK(e, s) #e,
768     TTYPE_TABLE
769 #undef OP
770 #undef TK
771     /* C++ parser token types - see "Manifest constants", above.  */
772     "KEYWORD",
773     "TEMPLATE_ID",
774     "NESTED_NAME_SPECIFIER",
775     "PURGED"
776   };
777
778   /* If we have a name for the token, print it out.  Otherwise, we
779      simply give the numeric code.  */
780   gcc_assert (token->type < ARRAY_SIZE(token_names));
781   fputs (token_names[token->type], stream);
782
783   /* For some tokens, print the associated data.  */
784   switch (token->type)
785     {
786     case CPP_KEYWORD:
787       /* Some keywords have a value that is not an IDENTIFIER_NODE.
788          For example, `struct' is mapped to an INTEGER_CST.  */
789       if (TREE_CODE (token->u.value) != IDENTIFIER_NODE)
790         break;
791       /* else fall through */
792     case CPP_NAME:
793       fputs (IDENTIFIER_POINTER (token->u.value), stream);
794       break;
795
796     case CPP_STRING:
797     case CPP_STRING16:
798     case CPP_STRING32:
799     case CPP_WSTRING:
800       fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->u.value));
801       break;
802
803     default:
804       break;
805     }
806 }
807
808 /* Start emitting debugging information.  */
809
810 static void
811 cp_lexer_start_debugging (cp_lexer* lexer)
812 {
813   lexer->debugging_p = true;
814 }
815
816 /* Stop emitting debugging information.  */
817
818 static void
819 cp_lexer_stop_debugging (cp_lexer* lexer)
820 {
821   lexer->debugging_p = false;
822 }
823
824 #endif /* ENABLE_CHECKING */
825
826 /* Create a new cp_token_cache, representing a range of tokens.  */
827
828 static cp_token_cache *
829 cp_token_cache_new (cp_token *first, cp_token *last)
830 {
831   cp_token_cache *cache = GGC_NEW (cp_token_cache);
832   cache->first = first;
833   cache->last = last;
834   return cache;
835 }
836
837 \f
838 /* Decl-specifiers.  */
839
840 /* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
841
842 static void
843 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
844 {
845   memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
846 }
847
848 /* Declarators.  */
849
850 /* Nothing other than the parser should be creating declarators;
851    declarators are a semi-syntactic representation of C++ entities.
852    Other parts of the front end that need to create entities (like
853    VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
854
855 static cp_declarator *make_call_declarator
856   (cp_declarator *, tree, cp_cv_quals, tree, tree);
857 static cp_declarator *make_array_declarator
858   (cp_declarator *, tree);
859 static cp_declarator *make_pointer_declarator
860   (cp_cv_quals, cp_declarator *);
861 static cp_declarator *make_reference_declarator
862   (cp_cv_quals, cp_declarator *, bool);
863 static cp_parameter_declarator *make_parameter_declarator
864   (cp_decl_specifier_seq *, cp_declarator *, tree);
865 static cp_declarator *make_ptrmem_declarator
866   (cp_cv_quals, tree, cp_declarator *);
867
868 /* An erroneous declarator.  */
869 static cp_declarator *cp_error_declarator;
870
871 /* The obstack on which declarators and related data structures are
872    allocated.  */
873 static struct obstack declarator_obstack;
874
875 /* Alloc BYTES from the declarator memory pool.  */
876
877 static inline void *
878 alloc_declarator (size_t bytes)
879 {
880   return obstack_alloc (&declarator_obstack, bytes);
881 }
882
883 /* Allocate a declarator of the indicated KIND.  Clear fields that are
884    common to all declarators.  */
885
886 static cp_declarator *
887 make_declarator (cp_declarator_kind kind)
888 {
889   cp_declarator *declarator;
890
891   declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
892   declarator->kind = kind;
893   declarator->attributes = NULL_TREE;
894   declarator->declarator = NULL;
895   declarator->parameter_pack_p = false;
896
897   return declarator;
898 }
899
900 /* Make a declarator for a generalized identifier.  If
901    QUALIFYING_SCOPE is non-NULL, the identifier is
902    QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
903    UNQUALIFIED_NAME.  SFK indicates the kind of special function this
904    is, if any.   */
905
906 static cp_declarator *
907 make_id_declarator (tree qualifying_scope, tree unqualified_name,
908                     special_function_kind sfk)
909 {
910   cp_declarator *declarator;
911
912   /* It is valid to write:
913
914        class C { void f(); };
915        typedef C D;
916        void D::f();
917
918      The standard is not clear about whether `typedef const C D' is
919      legal; as of 2002-09-15 the committee is considering that
920      question.  EDG 3.0 allows that syntax.  Therefore, we do as
921      well.  */
922   if (qualifying_scope && TYPE_P (qualifying_scope))
923     qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
924
925   gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
926               || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
927               || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
928
929   declarator = make_declarator (cdk_id);
930   declarator->u.id.qualifying_scope = qualifying_scope;
931   declarator->u.id.unqualified_name = unqualified_name;
932   declarator->u.id.sfk = sfk;
933   
934   return declarator;
935 }
936
937 /* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
938    of modifiers such as const or volatile to apply to the pointer
939    type, represented as identifiers.  */
940
941 cp_declarator *
942 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
943 {
944   cp_declarator *declarator;
945
946   declarator = make_declarator (cdk_pointer);
947   declarator->declarator = target;
948   declarator->u.pointer.qualifiers = cv_qualifiers;
949   declarator->u.pointer.class_type = NULL_TREE;
950   if (target)
951     {
952       declarator->parameter_pack_p = target->parameter_pack_p;
953       target->parameter_pack_p = false;
954     }
955   else
956     declarator->parameter_pack_p = false;
957
958   return declarator;
959 }
960
961 /* Like make_pointer_declarator -- but for references.  */
962
963 cp_declarator *
964 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target,
965                            bool rvalue_ref)
966 {
967   cp_declarator *declarator;
968
969   declarator = make_declarator (cdk_reference);
970   declarator->declarator = target;
971   declarator->u.reference.qualifiers = cv_qualifiers;
972   declarator->u.reference.rvalue_ref = rvalue_ref;
973   if (target)
974     {
975       declarator->parameter_pack_p = target->parameter_pack_p;
976       target->parameter_pack_p = false;
977     }
978   else
979     declarator->parameter_pack_p = false;
980
981   return declarator;
982 }
983
984 /* Like make_pointer_declarator -- but for a pointer to a non-static
985    member of CLASS_TYPE.  */
986
987 cp_declarator *
988 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
989                         cp_declarator *pointee)
990 {
991   cp_declarator *declarator;
992
993   declarator = make_declarator (cdk_ptrmem);
994   declarator->declarator = pointee;
995   declarator->u.pointer.qualifiers = cv_qualifiers;
996   declarator->u.pointer.class_type = class_type;
997
998   if (pointee)
999     {
1000       declarator->parameter_pack_p = pointee->parameter_pack_p;
1001       pointee->parameter_pack_p = false;
1002     }
1003   else
1004     declarator->parameter_pack_p = false;
1005
1006   return declarator;
1007 }
1008
1009 /* Make a declarator for the function given by TARGET, with the
1010    indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
1011    "const"-qualified member function.  The EXCEPTION_SPECIFICATION
1012    indicates what exceptions can be thrown.  */
1013
1014 cp_declarator *
1015 make_call_declarator (cp_declarator *target,
1016                       tree parms,
1017                       cp_cv_quals cv_qualifiers,
1018                       tree exception_specification,
1019                       tree late_return_type)
1020 {
1021   cp_declarator *declarator;
1022
1023   declarator = make_declarator (cdk_function);
1024   declarator->declarator = target;
1025   declarator->u.function.parameters = parms;
1026   declarator->u.function.qualifiers = cv_qualifiers;
1027   declarator->u.function.exception_specification = exception_specification;
1028   declarator->u.function.late_return_type = late_return_type;
1029   if (target)
1030     {
1031       declarator->parameter_pack_p = target->parameter_pack_p;
1032       target->parameter_pack_p = false;
1033     }
1034   else
1035     declarator->parameter_pack_p = false;
1036
1037   return declarator;
1038 }
1039
1040 /* Make a declarator for an array of BOUNDS elements, each of which is
1041    defined by ELEMENT.  */
1042
1043 cp_declarator *
1044 make_array_declarator (cp_declarator *element, tree bounds)
1045 {
1046   cp_declarator *declarator;
1047
1048   declarator = make_declarator (cdk_array);
1049   declarator->declarator = element;
1050   declarator->u.array.bounds = bounds;
1051   if (element)
1052     {
1053       declarator->parameter_pack_p = element->parameter_pack_p;
1054       element->parameter_pack_p = false;
1055     }
1056   else
1057     declarator->parameter_pack_p = false;
1058
1059   return declarator;
1060 }
1061
1062 /* Determine whether the declarator we've seen so far can be a
1063    parameter pack, when followed by an ellipsis.  */
1064 static bool 
1065 declarator_can_be_parameter_pack (cp_declarator *declarator)
1066 {
1067   /* Search for a declarator name, or any other declarator that goes
1068      after the point where the ellipsis could appear in a parameter
1069      pack. If we find any of these, then this declarator can not be
1070      made into a parameter pack.  */
1071   bool found = false;
1072   while (declarator && !found)
1073     {
1074       switch ((int)declarator->kind)
1075         {
1076         case cdk_id:
1077         case cdk_array:
1078           found = true;
1079           break;
1080
1081         case cdk_error:
1082           return true;
1083
1084         default:
1085           declarator = declarator->declarator;
1086           break;
1087         }
1088     }
1089
1090   return !found;
1091 }
1092
1093 cp_parameter_declarator *no_parameters;
1094
1095 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
1096    DECLARATOR and DEFAULT_ARGUMENT.  */
1097
1098 cp_parameter_declarator *
1099 make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
1100                            cp_declarator *declarator,
1101                            tree default_argument)
1102 {
1103   cp_parameter_declarator *parameter;
1104
1105   parameter = ((cp_parameter_declarator *)
1106                alloc_declarator (sizeof (cp_parameter_declarator)));
1107   parameter->next = NULL;
1108   if (decl_specifiers)
1109     parameter->decl_specifiers = *decl_specifiers;
1110   else
1111     clear_decl_specs (&parameter->decl_specifiers);
1112   parameter->declarator = declarator;
1113   parameter->default_argument = default_argument;
1114   parameter->ellipsis_p = false;
1115
1116   return parameter;
1117 }
1118
1119 /* Returns true iff DECLARATOR  is a declaration for a function.  */
1120
1121 static bool
1122 function_declarator_p (const cp_declarator *declarator)
1123 {
1124   while (declarator)
1125     {
1126       if (declarator->kind == cdk_function
1127           && declarator->declarator->kind == cdk_id)
1128         return true;
1129       if (declarator->kind == cdk_id
1130           || declarator->kind == cdk_error)
1131         return false;
1132       declarator = declarator->declarator;
1133     }
1134   return false;
1135 }
1136  
1137 /* The parser.  */
1138
1139 /* Overview
1140    --------
1141
1142    A cp_parser parses the token stream as specified by the C++
1143    grammar.  Its job is purely parsing, not semantic analysis.  For
1144    example, the parser breaks the token stream into declarators,
1145    expressions, statements, and other similar syntactic constructs.
1146    It does not check that the types of the expressions on either side
1147    of an assignment-statement are compatible, or that a function is
1148    not declared with a parameter of type `void'.
1149
1150    The parser invokes routines elsewhere in the compiler to perform
1151    semantic analysis and to build up the abstract syntax tree for the
1152    code processed.
1153
1154    The parser (and the template instantiation code, which is, in a
1155    way, a close relative of parsing) are the only parts of the
1156    compiler that should be calling push_scope and pop_scope, or
1157    related functions.  The parser (and template instantiation code)
1158    keeps track of what scope is presently active; everything else
1159    should simply honor that.  (The code that generates static
1160    initializers may also need to set the scope, in order to check
1161    access control correctly when emitting the initializers.)
1162
1163    Methodology
1164    -----------
1165
1166    The parser is of the standard recursive-descent variety.  Upcoming
1167    tokens in the token stream are examined in order to determine which
1168    production to use when parsing a non-terminal.  Some C++ constructs
1169    require arbitrary look ahead to disambiguate.  For example, it is
1170    impossible, in the general case, to tell whether a statement is an
1171    expression or declaration without scanning the entire statement.
1172    Therefore, the parser is capable of "parsing tentatively."  When the
1173    parser is not sure what construct comes next, it enters this mode.
1174    Then, while we attempt to parse the construct, the parser queues up
1175    error messages, rather than issuing them immediately, and saves the
1176    tokens it consumes.  If the construct is parsed successfully, the
1177    parser "commits", i.e., it issues any queued error messages and
1178    the tokens that were being preserved are permanently discarded.
1179    If, however, the construct is not parsed successfully, the parser
1180    rolls back its state completely so that it can resume parsing using
1181    a different alternative.
1182
1183    Future Improvements
1184    -------------------
1185
1186    The performance of the parser could probably be improved substantially.
1187    We could often eliminate the need to parse tentatively by looking ahead
1188    a little bit.  In some places, this approach might not entirely eliminate
1189    the need to parse tentatively, but it might still speed up the average
1190    case.  */
1191
1192 /* Flags that are passed to some parsing functions.  These values can
1193    be bitwise-ored together.  */
1194
1195 typedef enum cp_parser_flags
1196 {
1197   /* No flags.  */
1198   CP_PARSER_FLAGS_NONE = 0x0,
1199   /* The construct is optional.  If it is not present, then no error
1200      should be issued.  */
1201   CP_PARSER_FLAGS_OPTIONAL = 0x1,
1202   /* When parsing a type-specifier, do not allow user-defined types.  */
1203   CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2
1204 } cp_parser_flags;
1205
1206 /* The different kinds of declarators we want to parse.  */
1207
1208 typedef enum cp_parser_declarator_kind
1209 {
1210   /* We want an abstract declarator.  */
1211   CP_PARSER_DECLARATOR_ABSTRACT,
1212   /* We want a named declarator.  */
1213   CP_PARSER_DECLARATOR_NAMED,
1214   /* We don't mind, but the name must be an unqualified-id.  */
1215   CP_PARSER_DECLARATOR_EITHER
1216 } cp_parser_declarator_kind;
1217
1218 /* The precedence values used to parse binary expressions.  The minimum value
1219    of PREC must be 1, because zero is reserved to quickly discriminate
1220    binary operators from other tokens.  */
1221
1222 enum cp_parser_prec
1223 {
1224   PREC_NOT_OPERATOR,
1225   PREC_LOGICAL_OR_EXPRESSION,
1226   PREC_LOGICAL_AND_EXPRESSION,
1227   PREC_INCLUSIVE_OR_EXPRESSION,
1228   PREC_EXCLUSIVE_OR_EXPRESSION,
1229   PREC_AND_EXPRESSION,
1230   PREC_EQUALITY_EXPRESSION,
1231   PREC_RELATIONAL_EXPRESSION,
1232   PREC_SHIFT_EXPRESSION,
1233   PREC_ADDITIVE_EXPRESSION,
1234   PREC_MULTIPLICATIVE_EXPRESSION,
1235   PREC_PM_EXPRESSION,
1236   NUM_PREC_VALUES = PREC_PM_EXPRESSION
1237 };
1238
1239 /* A mapping from a token type to a corresponding tree node type, with a
1240    precedence value.  */
1241
1242 typedef struct cp_parser_binary_operations_map_node
1243 {
1244   /* The token type.  */
1245   enum cpp_ttype token_type;
1246   /* The corresponding tree code.  */
1247   enum tree_code tree_type;
1248   /* The precedence of this operator.  */
1249   enum cp_parser_prec prec;
1250 } cp_parser_binary_operations_map_node;
1251
1252 /* The status of a tentative parse.  */
1253
1254 typedef enum cp_parser_status_kind
1255 {
1256   /* No errors have occurred.  */
1257   CP_PARSER_STATUS_KIND_NO_ERROR,
1258   /* An error has occurred.  */
1259   CP_PARSER_STATUS_KIND_ERROR,
1260   /* We are committed to this tentative parse, whether or not an error
1261      has occurred.  */
1262   CP_PARSER_STATUS_KIND_COMMITTED
1263 } cp_parser_status_kind;
1264
1265 typedef struct cp_parser_expression_stack_entry
1266 {
1267   /* Left hand side of the binary operation we are currently
1268      parsing.  */
1269   tree lhs;
1270   /* Original tree code for left hand side, if it was a binary
1271      expression itself (used for -Wparentheses).  */
1272   enum tree_code lhs_type;
1273   /* Tree code for the binary operation we are parsing.  */
1274   enum tree_code tree_type;
1275   /* Precedence of the binary operation we are parsing.  */
1276   int prec;
1277 } cp_parser_expression_stack_entry;
1278
1279 /* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1280    entries because precedence levels on the stack are monotonically
1281    increasing.  */
1282 typedef struct cp_parser_expression_stack_entry
1283   cp_parser_expression_stack[NUM_PREC_VALUES];
1284
1285 /* Context that is saved and restored when parsing tentatively.  */
1286 typedef struct cp_parser_context GTY (())
1287 {
1288   /* If this is a tentative parsing context, the status of the
1289      tentative parse.  */
1290   enum cp_parser_status_kind status;
1291   /* If non-NULL, we have just seen a `x->' or `x.' expression.  Names
1292      that are looked up in this context must be looked up both in the
1293      scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1294      the context of the containing expression.  */
1295   tree object_type;
1296
1297   /* The next parsing context in the stack.  */
1298   struct cp_parser_context *next;
1299 } cp_parser_context;
1300
1301 /* Prototypes.  */
1302
1303 /* Constructors and destructors.  */
1304
1305 static cp_parser_context *cp_parser_context_new
1306   (cp_parser_context *);
1307
1308 /* Class variables.  */
1309
1310 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1311
1312 /* The operator-precedence table used by cp_parser_binary_expression.
1313    Transformed into an associative array (binops_by_token) by
1314    cp_parser_new.  */
1315
1316 static const cp_parser_binary_operations_map_node binops[] = {
1317   { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1318   { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1319
1320   { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1321   { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1322   { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1323
1324   { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1325   { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1326
1327   { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1328   { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1329
1330   { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1331   { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1332   { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1333   { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1334
1335   { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1336   { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1337
1338   { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1339
1340   { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1341
1342   { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1343
1344   { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1345
1346   { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1347 };
1348
1349 /* The same as binops, but initialized by cp_parser_new so that
1350    binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1351    for speed.  */
1352 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1353
1354 /* Constructors and destructors.  */
1355
1356 /* Construct a new context.  The context below this one on the stack
1357    is given by NEXT.  */
1358
1359 static cp_parser_context *
1360 cp_parser_context_new (cp_parser_context* next)
1361 {
1362   cp_parser_context *context;
1363
1364   /* Allocate the storage.  */
1365   if (cp_parser_context_free_list != NULL)
1366     {
1367       /* Pull the first entry from the free list.  */
1368       context = cp_parser_context_free_list;
1369       cp_parser_context_free_list = context->next;
1370       memset (context, 0, sizeof (*context));
1371     }
1372   else
1373     context = GGC_CNEW (cp_parser_context);
1374
1375   /* No errors have occurred yet in this context.  */
1376   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1377   /* If this is not the bottommost context, copy information that we
1378      need from the previous context.  */
1379   if (next)
1380     {
1381       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1382          expression, then we are parsing one in this context, too.  */
1383       context->object_type = next->object_type;
1384       /* Thread the stack.  */
1385       context->next = next;
1386     }
1387
1388   return context;
1389 }
1390
1391 /* The cp_parser structure represents the C++ parser.  */
1392
1393 typedef struct cp_parser GTY(())
1394 {
1395   /* The lexer from which we are obtaining tokens.  */
1396   cp_lexer *lexer;
1397
1398   /* The scope in which names should be looked up.  If NULL_TREE, then
1399      we look up names in the scope that is currently open in the
1400      source program.  If non-NULL, this is either a TYPE or
1401      NAMESPACE_DECL for the scope in which we should look.  It can
1402      also be ERROR_MARK, when we've parsed a bogus scope.
1403
1404      This value is not cleared automatically after a name is looked
1405      up, so we must be careful to clear it before starting a new look
1406      up sequence.  (If it is not cleared, then `X::Y' followed by `Z'
1407      will look up `Z' in the scope of `X', rather than the current
1408      scope.)  Unfortunately, it is difficult to tell when name lookup
1409      is complete, because we sometimes peek at a token, look it up,
1410      and then decide not to consume it.   */
1411   tree scope;
1412
1413   /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1414      last lookup took place.  OBJECT_SCOPE is used if an expression
1415      like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1416      respectively.  QUALIFYING_SCOPE is used for an expression of the
1417      form "X::Y"; it refers to X.  */
1418   tree object_scope;
1419   tree qualifying_scope;
1420
1421   /* A stack of parsing contexts.  All but the bottom entry on the
1422      stack will be tentative contexts.
1423
1424      We parse tentatively in order to determine which construct is in
1425      use in some situations.  For example, in order to determine
1426      whether a statement is an expression-statement or a
1427      declaration-statement we parse it tentatively as a
1428      declaration-statement.  If that fails, we then reparse the same
1429      token stream as an expression-statement.  */
1430   cp_parser_context *context;
1431
1432   /* True if we are parsing GNU C++.  If this flag is not set, then
1433      GNU extensions are not recognized.  */
1434   bool allow_gnu_extensions_p;
1435
1436   /* TRUE if the `>' token should be interpreted as the greater-than
1437      operator.  FALSE if it is the end of a template-id or
1438      template-parameter-list. In C++0x mode, this flag also applies to
1439      `>>' tokens, which are viewed as two consecutive `>' tokens when
1440      this flag is FALSE.  */
1441   bool greater_than_is_operator_p;
1442
1443   /* TRUE if default arguments are allowed within a parameter list
1444      that starts at this point. FALSE if only a gnu extension makes
1445      them permissible.  */
1446   bool default_arg_ok_p;
1447
1448   /* TRUE if we are parsing an integral constant-expression.  See
1449      [expr.const] for a precise definition.  */
1450   bool integral_constant_expression_p;
1451
1452   /* TRUE if we are parsing an integral constant-expression -- but a
1453      non-constant expression should be permitted as well.  This flag
1454      is used when parsing an array bound so that GNU variable-length
1455      arrays are tolerated.  */
1456   bool allow_non_integral_constant_expression_p;
1457
1458   /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1459      been seen that makes the expression non-constant.  */
1460   bool non_integral_constant_expression_p;
1461
1462   /* TRUE if local variable names and `this' are forbidden in the
1463      current context.  */
1464   bool local_variables_forbidden_p;
1465
1466   /* TRUE if the declaration we are parsing is part of a
1467      linkage-specification of the form `extern string-literal
1468      declaration'.  */
1469   bool in_unbraced_linkage_specification_p;
1470
1471   /* TRUE if we are presently parsing a declarator, after the
1472      direct-declarator.  */
1473   bool in_declarator_p;
1474
1475   /* TRUE if we are presently parsing a template-argument-list.  */
1476   bool in_template_argument_list_p;
1477
1478   /* Set to IN_ITERATION_STMT if parsing an iteration-statement,
1479      to IN_OMP_BLOCK if parsing OpenMP structured block and
1480      IN_OMP_FOR if parsing OpenMP loop.  If parsing a switch statement,
1481      this is bitwise ORed with IN_SWITCH_STMT, unless parsing an
1482      iteration-statement, OpenMP block or loop within that switch.  */
1483 #define IN_SWITCH_STMT          1
1484 #define IN_ITERATION_STMT       2
1485 #define IN_OMP_BLOCK            4
1486 #define IN_OMP_FOR              8
1487 #define IN_IF_STMT             16
1488   unsigned char in_statement;
1489
1490   /* TRUE if we are presently parsing the body of a switch statement.
1491      Note that this doesn't quite overlap with in_statement above.
1492      The difference relates to giving the right sets of error messages:
1493      "case not in switch" vs "break statement used with OpenMP...".  */
1494   bool in_switch_statement_p;
1495
1496   /* TRUE if we are parsing a type-id in an expression context.  In
1497      such a situation, both "type (expr)" and "type (type)" are valid
1498      alternatives.  */
1499   bool in_type_id_in_expr_p;
1500
1501   /* TRUE if we are currently in a header file where declarations are
1502      implicitly extern "C".  */
1503   bool implicit_extern_c;
1504
1505   /* TRUE if strings in expressions should be translated to the execution
1506      character set.  */
1507   bool translate_strings_p;
1508
1509   /* TRUE if we are presently parsing the body of a function, but not
1510      a local class.  */
1511   bool in_function_body;
1512
1513   /* If non-NULL, then we are parsing a construct where new type
1514      definitions are not permitted.  The string stored here will be
1515      issued as an error message if a type is defined.  */
1516   const char *type_definition_forbidden_message;
1517
1518   /* A list of lists. The outer list is a stack, used for member
1519      functions of local classes. At each level there are two sub-list,
1520      one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1521      sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1522      TREE_VALUE's. The functions are chained in reverse declaration
1523      order.
1524
1525      The TREE_PURPOSE sublist contains those functions with default
1526      arguments that need post processing, and the TREE_VALUE sublist
1527      contains those functions with definitions that need post
1528      processing.
1529
1530      These lists can only be processed once the outermost class being
1531      defined is complete.  */
1532   tree unparsed_functions_queues;
1533
1534   /* The number of classes whose definitions are currently in
1535      progress.  */
1536   unsigned num_classes_being_defined;
1537
1538   /* The number of template parameter lists that apply directly to the
1539      current declaration.  */
1540   unsigned num_template_parameter_lists;
1541 } cp_parser;
1542
1543 /* Prototypes.  */
1544
1545 /* Constructors and destructors.  */
1546
1547 static cp_parser *cp_parser_new
1548   (void);
1549
1550 /* Routines to parse various constructs.
1551
1552    Those that return `tree' will return the error_mark_node (rather
1553    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1554    Sometimes, they will return an ordinary node if error-recovery was
1555    attempted, even though a parse error occurred.  So, to check
1556    whether or not a parse error occurred, you should always use
1557    cp_parser_error_occurred.  If the construct is optional (indicated
1558    either by an `_opt' in the name of the function that does the
1559    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1560    the construct is not present.  */
1561
1562 /* Lexical conventions [gram.lex]  */
1563
1564 static tree cp_parser_identifier
1565   (cp_parser *);
1566 static tree cp_parser_string_literal
1567   (cp_parser *, bool, bool);
1568
1569 /* Basic concepts [gram.basic]  */
1570
1571 static bool cp_parser_translation_unit
1572   (cp_parser *);
1573
1574 /* Expressions [gram.expr]  */
1575
1576 static tree cp_parser_primary_expression
1577   (cp_parser *, bool, bool, bool, cp_id_kind *);
1578 static tree cp_parser_id_expression
1579   (cp_parser *, bool, bool, bool *, bool, bool);
1580 static tree cp_parser_unqualified_id
1581   (cp_parser *, bool, bool, bool, bool);
1582 static tree cp_parser_nested_name_specifier_opt
1583   (cp_parser *, bool, bool, bool, bool);
1584 static tree cp_parser_nested_name_specifier
1585   (cp_parser *, bool, bool, bool, bool);
1586 static tree cp_parser_qualifying_entity
1587   (cp_parser *, bool, bool, bool, bool, bool);
1588 static tree cp_parser_postfix_expression
1589   (cp_parser *, bool, bool, bool);
1590 static tree cp_parser_postfix_open_square_expression
1591   (cp_parser *, tree, bool);
1592 static tree cp_parser_postfix_dot_deref_expression
1593   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *, location_t);
1594 static tree cp_parser_parenthesized_expression_list
1595   (cp_parser *, bool, bool, bool, bool *);
1596 static void cp_parser_pseudo_destructor_name
1597   (cp_parser *, tree *, tree *);
1598 static tree cp_parser_unary_expression
1599   (cp_parser *, bool, bool);
1600 static enum tree_code cp_parser_unary_operator
1601   (cp_token *);
1602 static tree cp_parser_new_expression
1603   (cp_parser *);
1604 static tree cp_parser_new_placement
1605   (cp_parser *);
1606 static tree cp_parser_new_type_id
1607   (cp_parser *, tree *);
1608 static cp_declarator *cp_parser_new_declarator_opt
1609   (cp_parser *);
1610 static cp_declarator *cp_parser_direct_new_declarator
1611   (cp_parser *);
1612 static tree cp_parser_new_initializer
1613   (cp_parser *);
1614 static tree cp_parser_delete_expression
1615   (cp_parser *);
1616 static tree cp_parser_cast_expression
1617   (cp_parser *, bool, bool);
1618 static tree cp_parser_binary_expression
1619   (cp_parser *, bool, enum cp_parser_prec);
1620 static tree cp_parser_question_colon_clause
1621   (cp_parser *, tree);
1622 static tree cp_parser_assignment_expression
1623   (cp_parser *, bool);
1624 static enum tree_code cp_parser_assignment_operator_opt
1625   (cp_parser *);
1626 static tree cp_parser_expression
1627   (cp_parser *, bool);
1628 static tree cp_parser_constant_expression
1629   (cp_parser *, bool, bool *);
1630 static tree cp_parser_builtin_offsetof
1631   (cp_parser *);
1632
1633 /* Statements [gram.stmt.stmt]  */
1634
1635 static void cp_parser_statement
1636   (cp_parser *, tree, bool, bool *);
1637 static void cp_parser_label_for_labeled_statement
1638   (cp_parser *);
1639 static tree cp_parser_expression_statement
1640   (cp_parser *, tree);
1641 static tree cp_parser_compound_statement
1642   (cp_parser *, tree, bool);
1643 static void cp_parser_statement_seq_opt
1644   (cp_parser *, tree);
1645 static tree cp_parser_selection_statement
1646   (cp_parser *, bool *);
1647 static tree cp_parser_condition
1648   (cp_parser *);
1649 static tree cp_parser_iteration_statement
1650   (cp_parser *);
1651 static void cp_parser_for_init_statement
1652   (cp_parser *);
1653 static tree cp_parser_jump_statement
1654   (cp_parser *);
1655 static void cp_parser_declaration_statement
1656   (cp_parser *);
1657
1658 static tree cp_parser_implicitly_scoped_statement
1659   (cp_parser *, bool *);
1660 static void cp_parser_already_scoped_statement
1661   (cp_parser *);
1662
1663 /* Declarations [gram.dcl.dcl] */
1664
1665 static void cp_parser_declaration_seq_opt
1666   (cp_parser *);
1667 static void cp_parser_declaration
1668   (cp_parser *);
1669 static void cp_parser_block_declaration
1670   (cp_parser *, bool);
1671 static void cp_parser_simple_declaration
1672   (cp_parser *, bool);
1673 static void cp_parser_decl_specifier_seq
1674   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1675 static tree cp_parser_storage_class_specifier_opt
1676   (cp_parser *);
1677 static tree cp_parser_function_specifier_opt
1678   (cp_parser *, cp_decl_specifier_seq *);
1679 static tree cp_parser_type_specifier
1680   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1681    int *, bool *);
1682 static tree cp_parser_simple_type_specifier
1683   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1684 static tree cp_parser_type_name
1685   (cp_parser *);
1686 static tree cp_parser_nonclass_name 
1687   (cp_parser* parser);
1688 static tree cp_parser_elaborated_type_specifier
1689   (cp_parser *, bool, bool);
1690 static tree cp_parser_enum_specifier
1691   (cp_parser *);
1692 static void cp_parser_enumerator_list
1693   (cp_parser *, tree);
1694 static void cp_parser_enumerator_definition
1695   (cp_parser *, tree);
1696 static tree cp_parser_namespace_name
1697   (cp_parser *);
1698 static void cp_parser_namespace_definition
1699   (cp_parser *);
1700 static void cp_parser_namespace_body
1701   (cp_parser *);
1702 static tree cp_parser_qualified_namespace_specifier
1703   (cp_parser *);
1704 static void cp_parser_namespace_alias_definition
1705   (cp_parser *);
1706 static bool cp_parser_using_declaration
1707   (cp_parser *, bool);
1708 static void cp_parser_using_directive
1709   (cp_parser *);
1710 static void cp_parser_asm_definition
1711   (cp_parser *);
1712 static void cp_parser_linkage_specification
1713   (cp_parser *);
1714 static void cp_parser_static_assert
1715   (cp_parser *, bool);
1716 static tree cp_parser_decltype
1717   (cp_parser *);
1718
1719 /* Declarators [gram.dcl.decl] */
1720
1721 static tree cp_parser_init_declarator
1722   (cp_parser *, cp_decl_specifier_seq *, VEC (deferred_access_check,gc)*, bool, bool, int, bool *);
1723 static cp_declarator *cp_parser_declarator
1724   (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1725 static cp_declarator *cp_parser_direct_declarator
1726   (cp_parser *, cp_parser_declarator_kind, int *, bool);
1727 static enum tree_code cp_parser_ptr_operator
1728   (cp_parser *, tree *, cp_cv_quals *);
1729 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1730   (cp_parser *);
1731 static tree cp_parser_late_return_type_opt
1732   (cp_parser *);
1733 static tree cp_parser_declarator_id
1734   (cp_parser *, bool);
1735 static tree cp_parser_type_id
1736   (cp_parser *);
1737 static void cp_parser_type_specifier_seq
1738   (cp_parser *, bool, cp_decl_specifier_seq *);
1739 static tree cp_parser_parameter_declaration_clause
1740   (cp_parser *);
1741 static tree cp_parser_parameter_declaration_list
1742   (cp_parser *, bool *);
1743 static cp_parameter_declarator *cp_parser_parameter_declaration
1744   (cp_parser *, bool, bool *);
1745 static tree cp_parser_default_argument 
1746   (cp_parser *, bool);
1747 static void cp_parser_function_body
1748   (cp_parser *);
1749 static tree cp_parser_initializer
1750   (cp_parser *, bool *, bool *);
1751 static tree cp_parser_initializer_clause
1752   (cp_parser *, bool *);
1753 static tree cp_parser_braced_list
1754   (cp_parser*, bool*);
1755 static VEC(constructor_elt,gc) *cp_parser_initializer_list
1756   (cp_parser *, bool *);
1757
1758 static bool cp_parser_ctor_initializer_opt_and_function_body
1759   (cp_parser *);
1760
1761 /* Classes [gram.class] */
1762
1763 static tree cp_parser_class_name
1764   (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
1765 static tree cp_parser_class_specifier
1766   (cp_parser *);
1767 static tree cp_parser_class_head
1768   (cp_parser *, bool *, tree *, tree *);
1769 static enum tag_types cp_parser_class_key
1770   (cp_parser *);
1771 static void cp_parser_member_specification_opt
1772   (cp_parser *);
1773 static void cp_parser_member_declaration
1774   (cp_parser *);
1775 static tree cp_parser_pure_specifier
1776   (cp_parser *);
1777 static tree cp_parser_constant_initializer
1778   (cp_parser *);
1779
1780 /* Derived classes [gram.class.derived] */
1781
1782 static tree cp_parser_base_clause
1783   (cp_parser *);
1784 static tree cp_parser_base_specifier
1785   (cp_parser *);
1786
1787 /* Special member functions [gram.special] */
1788
1789 static tree cp_parser_conversion_function_id
1790   (cp_parser *);
1791 static tree cp_parser_conversion_type_id
1792   (cp_parser *);
1793 static cp_declarator *cp_parser_conversion_declarator_opt
1794   (cp_parser *);
1795 static bool cp_parser_ctor_initializer_opt
1796   (cp_parser *);
1797 static void cp_parser_mem_initializer_list
1798   (cp_parser *);
1799 static tree cp_parser_mem_initializer
1800   (cp_parser *);
1801 static tree cp_parser_mem_initializer_id
1802   (cp_parser *);
1803
1804 /* Overloading [gram.over] */
1805
1806 static tree cp_parser_operator_function_id
1807   (cp_parser *);
1808 static tree cp_parser_operator
1809   (cp_parser *);
1810
1811 /* Templates [gram.temp] */
1812
1813 static void cp_parser_template_declaration
1814   (cp_parser *, bool);
1815 static tree cp_parser_template_parameter_list
1816   (cp_parser *);
1817 static tree cp_parser_template_parameter
1818   (cp_parser *, bool *, bool *);
1819 static tree cp_parser_type_parameter
1820   (cp_parser *, bool *);
1821 static tree cp_parser_template_id
1822   (cp_parser *, bool, bool, bool);
1823 static tree cp_parser_template_name
1824   (cp_parser *, bool, bool, bool, bool *);
1825 static tree cp_parser_template_argument_list
1826   (cp_parser *);
1827 static tree cp_parser_template_argument
1828   (cp_parser *);
1829 static void cp_parser_explicit_instantiation
1830   (cp_parser *);
1831 static void cp_parser_explicit_specialization
1832   (cp_parser *);
1833
1834 /* Exception handling [gram.exception] */
1835
1836 static tree cp_parser_try_block
1837   (cp_parser *);
1838 static bool cp_parser_function_try_block
1839   (cp_parser *);
1840 static void cp_parser_handler_seq
1841   (cp_parser *);
1842 static void cp_parser_handler
1843   (cp_parser *);
1844 static tree cp_parser_exception_declaration
1845   (cp_parser *);
1846 static tree cp_parser_throw_expression
1847   (cp_parser *);
1848 static tree cp_parser_exception_specification_opt
1849   (cp_parser *);
1850 static tree cp_parser_type_id_list
1851   (cp_parser *);
1852
1853 /* GNU Extensions */
1854
1855 static tree cp_parser_asm_specification_opt
1856   (cp_parser *);
1857 static tree cp_parser_asm_operand_list
1858   (cp_parser *);
1859 static tree cp_parser_asm_clobber_list
1860   (cp_parser *);
1861 static tree cp_parser_attributes_opt
1862   (cp_parser *);
1863 static tree cp_parser_attribute_list
1864   (cp_parser *);
1865 static bool cp_parser_extension_opt
1866   (cp_parser *, int *);
1867 static void cp_parser_label_declaration
1868   (cp_parser *);
1869
1870 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1871 static bool cp_parser_pragma
1872   (cp_parser *, enum pragma_context);
1873
1874 /* Objective-C++ Productions */
1875
1876 static tree cp_parser_objc_message_receiver
1877   (cp_parser *);
1878 static tree cp_parser_objc_message_args
1879   (cp_parser *);
1880 static tree cp_parser_objc_message_expression
1881   (cp_parser *);
1882 static tree cp_parser_objc_encode_expression
1883   (cp_parser *);
1884 static tree cp_parser_objc_defs_expression
1885   (cp_parser *);
1886 static tree cp_parser_objc_protocol_expression
1887   (cp_parser *);
1888 static tree cp_parser_objc_selector_expression
1889   (cp_parser *);
1890 static tree cp_parser_objc_expression
1891   (cp_parser *);
1892 static bool cp_parser_objc_selector_p
1893   (enum cpp_ttype);
1894 static tree cp_parser_objc_selector
1895   (cp_parser *);
1896 static tree cp_parser_objc_protocol_refs_opt
1897   (cp_parser *);
1898 static void cp_parser_objc_declaration
1899   (cp_parser *);
1900 static tree cp_parser_objc_statement
1901   (cp_parser *);
1902
1903 /* Utility Routines */
1904
1905 static tree cp_parser_lookup_name
1906   (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *, location_t);
1907 static tree cp_parser_lookup_name_simple
1908   (cp_parser *, tree, location_t);
1909 static tree cp_parser_maybe_treat_template_as_class
1910   (tree, bool);
1911 static bool cp_parser_check_declarator_template_parameters
1912   (cp_parser *, cp_declarator *, location_t);
1913 static bool cp_parser_check_template_parameters
1914   (cp_parser *, unsigned, location_t);
1915 static tree cp_parser_simple_cast_expression
1916   (cp_parser *);
1917 static tree cp_parser_global_scope_opt
1918   (cp_parser *, bool);
1919 static bool cp_parser_constructor_declarator_p
1920   (cp_parser *, bool);
1921 static tree cp_parser_function_definition_from_specifiers_and_declarator
1922   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1923 static tree cp_parser_function_definition_after_declarator
1924   (cp_parser *, bool);
1925 static void cp_parser_template_declaration_after_export
1926   (cp_parser *, bool);
1927 static void cp_parser_perform_template_parameter_access_checks
1928   (VEC (deferred_access_check,gc)*);
1929 static tree cp_parser_single_declaration
1930   (cp_parser *, VEC (deferred_access_check,gc)*, bool, bool, bool *);
1931 static tree cp_parser_functional_cast
1932   (cp_parser *, tree);
1933 static tree cp_parser_save_member_function_body
1934   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1935 static tree cp_parser_enclosed_template_argument_list
1936   (cp_parser *);
1937 static void cp_parser_save_default_args
1938   (cp_parser *, tree);
1939 static void cp_parser_late_parsing_for_member
1940   (cp_parser *, tree);
1941 static void cp_parser_late_parsing_default_args
1942   (cp_parser *, tree);
1943 static tree cp_parser_sizeof_operand
1944   (cp_parser *, enum rid);
1945 static tree cp_parser_trait_expr
1946   (cp_parser *, enum rid);
1947 static bool cp_parser_declares_only_class_p
1948   (cp_parser *);
1949 static void cp_parser_set_storage_class
1950   (cp_parser *, cp_decl_specifier_seq *, enum rid, location_t);
1951 static void cp_parser_set_decl_spec_type
1952   (cp_decl_specifier_seq *, tree, location_t, bool);
1953 static bool cp_parser_friend_p
1954   (const cp_decl_specifier_seq *);
1955 static cp_token *cp_parser_require
1956   (cp_parser *, enum cpp_ttype, const char *);
1957 static cp_token *cp_parser_require_keyword
1958   (cp_parser *, enum rid, const char *);
1959 static bool cp_parser_token_starts_function_definition_p
1960   (cp_token *);
1961 static bool cp_parser_next_token_starts_class_definition_p
1962   (cp_parser *);
1963 static bool cp_parser_next_token_ends_template_argument_p
1964   (cp_parser *);
1965 static bool cp_parser_nth_token_starts_template_argument_list_p
1966   (cp_parser *, size_t);
1967 static enum tag_types cp_parser_token_is_class_key
1968   (cp_token *);
1969 static void cp_parser_check_class_key
1970   (enum tag_types, tree type);
1971 static void cp_parser_check_access_in_redeclaration
1972   (tree type, location_t location);
1973 static bool cp_parser_optional_template_keyword
1974   (cp_parser *);
1975 static void cp_parser_pre_parsed_nested_name_specifier
1976   (cp_parser *);
1977 static bool cp_parser_cache_group
1978   (cp_parser *, enum cpp_ttype, unsigned);
1979 static void cp_parser_parse_tentatively
1980   (cp_parser *);
1981 static void cp_parser_commit_to_tentative_parse
1982   (cp_parser *);
1983 static void cp_parser_abort_tentative_parse
1984   (cp_parser *);
1985 static bool cp_parser_parse_definitely
1986   (cp_parser *);
1987 static inline bool cp_parser_parsing_tentatively
1988   (cp_parser *);
1989 static bool cp_parser_uncommitted_to_tentative_parse_p
1990   (cp_parser *);
1991 static void cp_parser_error
1992   (cp_parser *, const char *);
1993 static void cp_parser_name_lookup_error
1994   (cp_parser *, tree, tree, const char *, location_t);
1995 static bool cp_parser_simulate_error
1996   (cp_parser *);
1997 static bool cp_parser_check_type_definition
1998   (cp_parser *);
1999 static void cp_parser_check_for_definition_in_return_type
2000   (cp_declarator *, tree, location_t type_location);
2001 static void cp_parser_check_for_invalid_template_id
2002   (cp_parser *, tree, location_t location);
2003 static bool cp_parser_non_integral_constant_expression
2004   (cp_parser *, const char *);
2005 static void cp_parser_diagnose_invalid_type_name
2006   (cp_parser *, tree, tree, location_t);
2007 static bool cp_parser_parse_and_diagnose_invalid_type_name
2008   (cp_parser *);
2009 static int cp_parser_skip_to_closing_parenthesis
2010   (cp_parser *, bool, bool, bool);
2011 static void cp_parser_skip_to_end_of_statement
2012   (cp_parser *);
2013 static void cp_parser_consume_semicolon_at_end_of_statement
2014   (cp_parser *);
2015 static void cp_parser_skip_to_end_of_block_or_statement
2016   (cp_parser *);
2017 static bool cp_parser_skip_to_closing_brace
2018   (cp_parser *);
2019 static void cp_parser_skip_to_end_of_template_parameter_list
2020   (cp_parser *);
2021 static void cp_parser_skip_to_pragma_eol
2022   (cp_parser*, cp_token *);
2023 static bool cp_parser_error_occurred
2024   (cp_parser *);
2025 static bool cp_parser_allow_gnu_extensions_p
2026   (cp_parser *);
2027 static bool cp_parser_is_string_literal
2028   (cp_token *);
2029 static bool cp_parser_is_keyword
2030   (cp_token *, enum rid);
2031 static tree cp_parser_make_typename_type
2032   (cp_parser *, tree, tree, location_t location);
2033 static cp_declarator * cp_parser_make_indirect_declarator
2034   (enum tree_code, tree, cp_cv_quals, cp_declarator *);
2035
2036 /* Returns nonzero if we are parsing tentatively.  */
2037
2038 static inline bool
2039 cp_parser_parsing_tentatively (cp_parser* parser)
2040 {
2041   return parser->context->next != NULL;
2042 }
2043
2044 /* Returns nonzero if TOKEN is a string literal.  */
2045
2046 static bool
2047 cp_parser_is_string_literal (cp_token* token)
2048 {
2049   return (token->type == CPP_STRING ||
2050           token->type == CPP_STRING16 ||
2051           token->type == CPP_STRING32 ||
2052           token->type == CPP_WSTRING);
2053 }
2054
2055 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
2056
2057 static bool
2058 cp_parser_is_keyword (cp_token* token, enum rid keyword)
2059 {
2060   return token->keyword == keyword;
2061 }
2062
2063 /* If not parsing tentatively, issue a diagnostic of the form
2064       FILE:LINE: MESSAGE before TOKEN
2065    where TOKEN is the next token in the input stream.  MESSAGE
2066    (specified by the caller) is usually of the form "expected
2067    OTHER-TOKEN".  */
2068
2069 static void
2070 cp_parser_error (cp_parser* parser, const char* message)
2071 {
2072   if (!cp_parser_simulate_error (parser))
2073     {
2074       cp_token *token = cp_lexer_peek_token (parser->lexer);
2075       /* This diagnostic makes more sense if it is tagged to the line
2076          of the token we just peeked at.  */
2077       cp_lexer_set_source_position_from_token (token);
2078
2079       if (token->type == CPP_PRAGMA)
2080         {
2081           error ("%H%<#pragma%> is not allowed here", &token->location);
2082           cp_parser_skip_to_pragma_eol (parser, token);
2083           return;
2084         }
2085
2086       c_parse_error (message,
2087                      /* Because c_parser_error does not understand
2088                         CPP_KEYWORD, keywords are treated like
2089                         identifiers.  */
2090                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
2091                      token->u.value);
2092     }
2093 }
2094
2095 /* Issue an error about name-lookup failing.  NAME is the
2096    IDENTIFIER_NODE DECL is the result of
2097    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
2098    the thing that we hoped to find.  */
2099
2100 static void
2101 cp_parser_name_lookup_error (cp_parser* parser,
2102                              tree name,
2103                              tree decl,
2104                              const char* desired,
2105                              location_t location)
2106 {
2107   /* If name lookup completely failed, tell the user that NAME was not
2108      declared.  */
2109   if (decl == error_mark_node)
2110     {
2111       if (parser->scope && parser->scope != global_namespace)
2112         error ("%H%<%E::%E%> has not been declared",
2113                &location, parser->scope, name);
2114       else if (parser->scope == global_namespace)
2115         error ("%H%<::%E%> has not been declared", &location, name);
2116       else if (parser->object_scope
2117                && !CLASS_TYPE_P (parser->object_scope))
2118         error ("%Hrequest for member %qE in non-class type %qT",
2119                &location, name, parser->object_scope);
2120       else if (parser->object_scope)
2121         error ("%H%<%T::%E%> has not been declared",
2122                &location, parser->object_scope, name);
2123       else
2124         error ("%H%qE has not been declared", &location, name);
2125     }
2126   else if (parser->scope && parser->scope != global_namespace)
2127     error ("%H%<%E::%E%> %s", &location, parser->scope, name, desired);
2128   else if (parser->scope == global_namespace)
2129     error ("%H%<::%E%> %s", &location, name, desired);
2130   else
2131     error ("%H%qE %s", &location, name, desired);
2132 }
2133
2134 /* If we are parsing tentatively, remember that an error has occurred
2135    during this tentative parse.  Returns true if the error was
2136    simulated; false if a message should be issued by the caller.  */
2137
2138 static bool
2139 cp_parser_simulate_error (cp_parser* parser)
2140 {
2141   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2142     {
2143       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2144       return true;
2145     }
2146   return false;
2147 }
2148
2149 /* Check for repeated decl-specifiers.  */
2150
2151 static void
2152 cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs,
2153                            location_t location)
2154 {
2155   cp_decl_spec ds;
2156
2157   for (ds = ds_first; ds != ds_last; ++ds)
2158     {
2159       unsigned count = decl_specs->specs[(int)ds];
2160       if (count < 2)
2161         continue;
2162       /* The "long" specifier is a special case because of "long long".  */
2163       if (ds == ds_long)
2164         {
2165           if (count > 2)
2166             error ("%H%<long long long%> is too long for GCC", &location);
2167           else if (pedantic && !in_system_header && warn_long_long
2168                    && cxx_dialect == cxx98)
2169             pedwarn (location, OPT_Wlong_long, 
2170                      "ISO C++ 1998 does not support %<long long%>");
2171         }
2172       else if (count > 1)
2173         {
2174           static const char *const decl_spec_names[] = {
2175             "signed",
2176             "unsigned",
2177             "short",
2178             "long",
2179             "const",
2180             "volatile",
2181             "restrict",
2182             "inline",
2183             "virtual",
2184             "explicit",
2185             "friend",
2186             "typedef",
2187             "__complex",
2188             "__thread"
2189           };
2190           error ("%Hduplicate %qs", &location, decl_spec_names[(int)ds]);
2191         }
2192     }
2193 }
2194
2195 /* This function is called when a type is defined.  If type
2196    definitions are forbidden at this point, an error message is
2197    issued.  */
2198
2199 static bool
2200 cp_parser_check_type_definition (cp_parser* parser)
2201 {
2202   /* If types are forbidden here, issue a message.  */
2203   if (parser->type_definition_forbidden_message)
2204     {
2205       /* Don't use `%s' to print the string, because quotations (`%<', `%>')
2206          in the message need to be interpreted.  */
2207       error (parser->type_definition_forbidden_message);
2208       return false;
2209     }
2210   return true;
2211 }
2212
2213 /* This function is called when the DECLARATOR is processed.  The TYPE
2214    was a type defined in the decl-specifiers.  If it is invalid to
2215    define a type in the decl-specifiers for DECLARATOR, an error is
2216    issued. TYPE_LOCATION is the location of TYPE and is used
2217    for error reporting.  */
2218
2219 static void
2220 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2221                                                tree type, location_t type_location)
2222 {
2223   /* [dcl.fct] forbids type definitions in return types.
2224      Unfortunately, it's not easy to know whether or not we are
2225      processing a return type until after the fact.  */
2226   while (declarator
2227          && (declarator->kind == cdk_pointer
2228              || declarator->kind == cdk_reference
2229              || declarator->kind == cdk_ptrmem))
2230     declarator = declarator->declarator;
2231   if (declarator
2232       && declarator->kind == cdk_function)
2233     {
2234       error ("%Hnew types may not be defined in a return type", &type_location);
2235       inform (type_location, 
2236               "(perhaps a semicolon is missing after the definition of %qT)",
2237               type);
2238     }
2239 }
2240
2241 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2242    "<" in any valid C++ program.  If the next token is indeed "<",
2243    issue a message warning the user about what appears to be an
2244    invalid attempt to form a template-id. LOCATION is the location
2245    of the type-specifier (TYPE) */
2246
2247 static void
2248 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2249                                          tree type, location_t location)
2250 {
2251   cp_token_position start = 0;
2252
2253   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2254     {
2255       if (TYPE_P (type))
2256         error ("%H%qT is not a template", &location, type);
2257       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2258         error ("%H%qE is not a template", &location, type);
2259       else
2260         error ("%Hinvalid template-id", &location);
2261       /* Remember the location of the invalid "<".  */
2262       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2263         start = cp_lexer_token_position (parser->lexer, true);
2264       /* Consume the "<".  */
2265       cp_lexer_consume_token (parser->lexer);
2266       /* Parse the template arguments.  */
2267       cp_parser_enclosed_template_argument_list (parser);
2268       /* Permanently remove the invalid template arguments so that
2269          this error message is not issued again.  */
2270       if (start)
2271         cp_lexer_purge_tokens_after (parser->lexer, start);
2272     }
2273 }
2274
2275 /* If parsing an integral constant-expression, issue an error message
2276    about the fact that THING appeared and return true.  Otherwise,
2277    return false.  In either case, set
2278    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2279
2280 static bool
2281 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2282                                             const char *thing)
2283 {
2284   parser->non_integral_constant_expression_p = true;
2285   if (parser->integral_constant_expression_p)
2286     {
2287       if (!parser->allow_non_integral_constant_expression_p)
2288         {
2289           /* Don't use `%s' to print THING, because quotations (`%<', `%>')
2290              in the message need to be interpreted.  */
2291           char *message = concat (thing,
2292                                   " cannot appear in a constant-expression",
2293                                   NULL);
2294           error (message);
2295           free (message);
2296           return true;
2297         }
2298     }
2299   return false;
2300 }
2301
2302 /* Emit a diagnostic for an invalid type name.  SCOPE is the
2303    qualifying scope (or NULL, if none) for ID.  This function commits
2304    to the current active tentative parse, if any.  (Otherwise, the
2305    problematic construct might be encountered again later, resulting
2306    in duplicate error messages.) LOCATION is the location of ID.  */
2307
2308 static void
2309 cp_parser_diagnose_invalid_type_name (cp_parser *parser,
2310                                       tree scope, tree id,
2311                                       location_t location)
2312 {
2313   tree decl, old_scope;
2314   /* Try to lookup the identifier.  */
2315   old_scope = parser->scope;
2316   parser->scope = scope;
2317   decl = cp_parser_lookup_name_simple (parser, id, location);
2318   parser->scope = old_scope;
2319   /* If the lookup found a template-name, it means that the user forgot
2320   to specify an argument list. Emit a useful error message.  */
2321   if (TREE_CODE (decl) == TEMPLATE_DECL)
2322     error ("%Hinvalid use of template-name %qE without an argument list",
2323            &location, decl);
2324   else if (TREE_CODE (id) == BIT_NOT_EXPR)
2325     error ("%Hinvalid use of destructor %qD as a type", &location, id);
2326   else if (TREE_CODE (decl) == TYPE_DECL)
2327     /* Something like 'unsigned A a;'  */
2328     error ("%Hinvalid combination of multiple type-specifiers",
2329            &location);
2330   else if (!parser->scope)
2331     {
2332       /* Issue an error message.  */
2333       error ("%H%qE does not name a type", &location, id);
2334       /* If we're in a template class, it's possible that the user was
2335          referring to a type from a base class.  For example:
2336
2337            template <typename T> struct A { typedef T X; };
2338            template <typename T> struct B : public A<T> { X x; };
2339
2340          The user should have said "typename A<T>::X".  */
2341       if (processing_template_decl && current_class_type
2342           && TYPE_BINFO (current_class_type))
2343         {
2344           tree b;
2345
2346           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2347                b;
2348                b = TREE_CHAIN (b))
2349             {
2350               tree base_type = BINFO_TYPE (b);
2351               if (CLASS_TYPE_P (base_type)
2352                   && dependent_type_p (base_type))
2353                 {
2354                   tree field;
2355                   /* Go from a particular instantiation of the
2356                      template (which will have an empty TYPE_FIELDs),
2357                      to the main version.  */
2358                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2359                   for (field = TYPE_FIELDS (base_type);
2360                        field;
2361                        field = TREE_CHAIN (field))
2362                     if (TREE_CODE (field) == TYPE_DECL
2363                         && DECL_NAME (field) == id)
2364                       {
2365                         inform (location, 
2366                                 "(perhaps %<typename %T::%E%> was intended)",
2367                                 BINFO_TYPE (b), id);
2368                         break;
2369                       }
2370                   if (field)
2371                     break;
2372                 }
2373             }
2374         }
2375     }
2376   /* Here we diagnose qualified-ids where the scope is actually correct,
2377      but the identifier does not resolve to a valid type name.  */
2378   else if (parser->scope != error_mark_node)
2379     {
2380       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2381         error ("%H%qE in namespace %qE does not name a type",
2382                &location, id, parser->scope);
2383       else if (TYPE_P (parser->scope))
2384         error ("%H%qE in class %qT does not name a type",
2385                &location, id, parser->scope);
2386       else
2387         gcc_unreachable ();
2388     }
2389   cp_parser_commit_to_tentative_parse (parser);
2390 }
2391
2392 /* Check for a common situation where a type-name should be present,
2393    but is not, and issue a sensible error message.  Returns true if an
2394    invalid type-name was detected.
2395
2396    The situation handled by this function are variable declarations of the
2397    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2398    Usually, `ID' should name a type, but if we got here it means that it
2399    does not. We try to emit the best possible error message depending on
2400    how exactly the id-expression looks like.  */
2401
2402 static bool
2403 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2404 {
2405   tree id;
2406   cp_token *token = cp_lexer_peek_token (parser->lexer);
2407
2408   cp_parser_parse_tentatively (parser);
2409   id = cp_parser_id_expression (parser,
2410                                 /*template_keyword_p=*/false,
2411                                 /*check_dependency_p=*/true,
2412                                 /*template_p=*/NULL,
2413                                 /*declarator_p=*/true,
2414                                 /*optional_p=*/false);
2415   /* After the id-expression, there should be a plain identifier,
2416      otherwise this is not a simple variable declaration. Also, if
2417      the scope is dependent, we cannot do much.  */
2418   if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2419       || (parser->scope && TYPE_P (parser->scope)
2420           && dependent_type_p (parser->scope))
2421       || TREE_CODE (id) == TYPE_DECL)
2422     {
2423       cp_parser_abort_tentative_parse (parser);
2424       return false;
2425     }
2426   if (!cp_parser_parse_definitely (parser))
2427     return false;
2428
2429   /* Emit a diagnostic for the invalid type.  */
2430   cp_parser_diagnose_invalid_type_name (parser, parser->scope,
2431                                         id, token->location);
2432   /* Skip to the end of the declaration; there's no point in
2433      trying to process it.  */
2434   cp_parser_skip_to_end_of_block_or_statement (parser);
2435   return true;
2436 }
2437
2438 /* Consume tokens up to, and including, the next non-nested closing `)'.
2439    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2440    are doing error recovery. Returns -1 if OR_COMMA is true and we
2441    found an unnested comma.  */
2442
2443 static int
2444 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2445                                        bool recovering,
2446                                        bool or_comma,
2447                                        bool consume_paren)
2448 {
2449   unsigned paren_depth = 0;
2450   unsigned brace_depth = 0;
2451
2452   if (recovering && !or_comma
2453       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2454     return 0;
2455
2456   while (true)
2457     {
2458       cp_token * token = cp_lexer_peek_token (parser->lexer);
2459
2460       switch (token->type)
2461         {
2462         case CPP_EOF:
2463         case CPP_PRAGMA_EOL:
2464           /* If we've run out of tokens, then there is no closing `)'.  */
2465           return 0;
2466
2467         case CPP_SEMICOLON:
2468           /* This matches the processing in skip_to_end_of_statement.  */
2469           if (!brace_depth)
2470             return 0;
2471           break;
2472
2473         case CPP_OPEN_BRACE:
2474           ++brace_depth;
2475           break;
2476         case CPP_CLOSE_BRACE:
2477           if (!brace_depth--)
2478             return 0;
2479           break;
2480
2481         case CPP_COMMA:
2482           if (recovering && or_comma && !brace_depth && !paren_depth)
2483             return -1;
2484           break;
2485
2486         case CPP_OPEN_PAREN:
2487           if (!brace_depth)
2488             ++paren_depth;
2489           break;
2490
2491         case CPP_CLOSE_PAREN:
2492           if (!brace_depth && !paren_depth--)
2493             {
2494               if (consume_paren)
2495                 cp_lexer_consume_token (parser->lexer);
2496               return 1;
2497             }
2498           break;
2499
2500         default:
2501           break;
2502         }
2503
2504       /* Consume the token.  */
2505       cp_lexer_consume_token (parser->lexer);
2506     }
2507 }
2508
2509 /* Consume tokens until we reach the end of the current statement.
2510    Normally, that will be just before consuming a `;'.  However, if a
2511    non-nested `}' comes first, then we stop before consuming that.  */
2512
2513 static void
2514 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2515 {
2516   unsigned nesting_depth = 0;
2517
2518   while (true)
2519     {
2520       cp_token *token = cp_lexer_peek_token (parser->lexer);
2521
2522       switch (token->type)
2523         {
2524         case CPP_EOF:
2525         case CPP_PRAGMA_EOL:
2526           /* If we've run out of tokens, stop.  */
2527           return;
2528
2529         case CPP_SEMICOLON:
2530           /* If the next token is a `;', we have reached the end of the
2531              statement.  */
2532           if (!nesting_depth)
2533             return;
2534           break;
2535
2536         case CPP_CLOSE_BRACE:
2537           /* If this is a non-nested '}', stop before consuming it.
2538              That way, when confronted with something like:
2539
2540                { 3 + }
2541
2542              we stop before consuming the closing '}', even though we
2543              have not yet reached a `;'.  */
2544           if (nesting_depth == 0)
2545             return;
2546
2547           /* If it is the closing '}' for a block that we have
2548              scanned, stop -- but only after consuming the token.
2549              That way given:
2550
2551                 void f g () { ... }
2552                 typedef int I;
2553
2554              we will stop after the body of the erroneously declared
2555              function, but before consuming the following `typedef'
2556              declaration.  */
2557           if (--nesting_depth == 0)
2558             {
2559               cp_lexer_consume_token (parser->lexer);
2560               return;
2561             }
2562
2563         case CPP_OPEN_BRACE:
2564           ++nesting_depth;
2565           break;
2566
2567         default:
2568           break;
2569         }
2570
2571       /* Consume the token.  */
2572       cp_lexer_consume_token (parser->lexer);
2573     }
2574 }
2575
2576 /* This function is called at the end of a statement or declaration.
2577    If the next token is a semicolon, it is consumed; otherwise, error
2578    recovery is attempted.  */
2579
2580 static void
2581 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2582 {
2583   /* Look for the trailing `;'.  */
2584   if (!cp_parser_require (parser, CPP_SEMICOLON, "%<;%>"))
2585     {
2586       /* If there is additional (erroneous) input, skip to the end of
2587          the statement.  */
2588       cp_parser_skip_to_end_of_statement (parser);
2589       /* If the next token is now a `;', consume it.  */
2590       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2591         cp_lexer_consume_token (parser->lexer);
2592     }
2593 }
2594
2595 /* Skip tokens until we have consumed an entire block, or until we
2596    have consumed a non-nested `;'.  */
2597
2598 static void
2599 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2600 {
2601   int nesting_depth = 0;
2602
2603   while (nesting_depth >= 0)
2604     {
2605       cp_token *token = cp_lexer_peek_token (parser->lexer);
2606
2607       switch (token->type)
2608         {
2609         case CPP_EOF:
2610         case CPP_PRAGMA_EOL:
2611           /* If we've run out of tokens, stop.  */
2612           return;
2613
2614         case CPP_SEMICOLON:
2615           /* Stop if this is an unnested ';'. */
2616           if (!nesting_depth)
2617             nesting_depth = -1;
2618           break;
2619
2620         case CPP_CLOSE_BRACE:
2621           /* Stop if this is an unnested '}', or closes the outermost
2622              nesting level.  */
2623           nesting_depth--;
2624           if (!nesting_depth)
2625             nesting_depth = -1;
2626           break;
2627
2628         case CPP_OPEN_BRACE:
2629           /* Nest. */
2630           nesting_depth++;
2631           break;
2632
2633         default:
2634           break;
2635         }
2636
2637       /* Consume the token.  */
2638       cp_lexer_consume_token (parser->lexer);
2639     }
2640 }
2641
2642 /* Skip tokens until a non-nested closing curly brace is the next
2643    token, or there are no more tokens. Return true in the first case,
2644    false otherwise.  */
2645
2646 static bool
2647 cp_parser_skip_to_closing_brace (cp_parser *parser)
2648 {
2649   unsigned nesting_depth = 0;
2650
2651   while (true)
2652     {
2653       cp_token *token = cp_lexer_peek_token (parser->lexer);
2654
2655       switch (token->type)
2656         {
2657         case CPP_EOF:
2658         case CPP_PRAGMA_EOL:
2659           /* If we've run out of tokens, stop.  */
2660           return false;
2661
2662         case CPP_CLOSE_BRACE:
2663           /* If the next token is a non-nested `}', then we have reached
2664              the end of the current block.  */
2665           if (nesting_depth-- == 0)
2666             return true;
2667           break;
2668
2669         case CPP_OPEN_BRACE:
2670           /* If it the next token is a `{', then we are entering a new
2671              block.  Consume the entire block.  */
2672           ++nesting_depth;
2673           break;
2674
2675         default:
2676           break;
2677         }
2678
2679       /* Consume the token.  */
2680       cp_lexer_consume_token (parser->lexer);
2681     }
2682 }
2683
2684 /* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
2685    parameter is the PRAGMA token, allowing us to purge the entire pragma
2686    sequence.  */
2687
2688 static void
2689 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
2690 {
2691   cp_token *token;
2692
2693   parser->lexer->in_pragma = false;
2694
2695   do
2696     token = cp_lexer_consume_token (parser->lexer);
2697   while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
2698
2699   /* Ensure that the pragma is not parsed again.  */
2700   cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
2701 }
2702
2703 /* Require pragma end of line, resyncing with it as necessary.  The
2704    arguments are as for cp_parser_skip_to_pragma_eol.  */
2705
2706 static void
2707 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
2708 {
2709   parser->lexer->in_pragma = false;
2710   if (!cp_parser_require (parser, CPP_PRAGMA_EOL, "end of line"))
2711     cp_parser_skip_to_pragma_eol (parser, pragma_tok);
2712 }
2713
2714 /* This is a simple wrapper around make_typename_type. When the id is
2715    an unresolved identifier node, we can provide a superior diagnostic
2716    using cp_parser_diagnose_invalid_type_name.  */
2717
2718 static tree
2719 cp_parser_make_typename_type (cp_parser *parser, tree scope,
2720                               tree id, location_t id_location)
2721 {
2722   tree result;
2723   if (TREE_CODE (id) == IDENTIFIER_NODE)
2724     {
2725       result = make_typename_type (scope, id, typename_type,
2726                                    /*complain=*/tf_none);
2727       if (result == error_mark_node)
2728         cp_parser_diagnose_invalid_type_name (parser, scope, id, id_location);
2729       return result;
2730     }
2731   return make_typename_type (scope, id, typename_type, tf_error);
2732 }
2733
2734 /* This is a wrapper around the
2735    make_{pointer,ptrmem,reference}_declarator functions that decides
2736    which one to call based on the CODE and CLASS_TYPE arguments. The
2737    CODE argument should be one of the values returned by
2738    cp_parser_ptr_operator. */
2739 static cp_declarator *
2740 cp_parser_make_indirect_declarator (enum tree_code code, tree class_type,
2741                                     cp_cv_quals cv_qualifiers,
2742                                     cp_declarator *target)
2743 {
2744   if (code == ERROR_MARK)
2745     return cp_error_declarator;
2746
2747   if (code == INDIRECT_REF)
2748     if (class_type == NULL_TREE)
2749       return make_pointer_declarator (cv_qualifiers, target);
2750     else
2751       return make_ptrmem_declarator (cv_qualifiers, class_type, target);
2752   else if (code == ADDR_EXPR && class_type == NULL_TREE)
2753     return make_reference_declarator (cv_qualifiers, target, false);
2754   else if (code == NON_LVALUE_EXPR && class_type == NULL_TREE)
2755     return make_reference_declarator (cv_qualifiers, target, true);
2756   gcc_unreachable ();
2757 }
2758
2759 /* Create a new C++ parser.  */
2760
2761 static cp_parser *
2762 cp_parser_new (void)
2763 {
2764   cp_parser *parser;
2765   cp_lexer *lexer;
2766   unsigned i;
2767
2768   /* cp_lexer_new_main is called before calling ggc_alloc because
2769      cp_lexer_new_main might load a PCH file.  */
2770   lexer = cp_lexer_new_main ();
2771
2772   /* Initialize the binops_by_token so that we can get the tree
2773      directly from the token.  */
2774   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2775     binops_by_token[binops[i].token_type] = binops[i];
2776
2777   parser = GGC_CNEW (cp_parser);
2778   parser->lexer = lexer;
2779   parser->context = cp_parser_context_new (NULL);
2780
2781   /* For now, we always accept GNU extensions.  */
2782   parser->allow_gnu_extensions_p = 1;
2783
2784   /* The `>' token is a greater-than operator, not the end of a
2785      template-id.  */
2786   parser->greater_than_is_operator_p = true;
2787
2788   parser->default_arg_ok_p = true;
2789
2790   /* We are not parsing a constant-expression.  */
2791   parser->integral_constant_expression_p = false;
2792   parser->allow_non_integral_constant_expression_p = false;
2793   parser->non_integral_constant_expression_p = false;
2794
2795   /* Local variable names are not forbidden.  */
2796   parser->local_variables_forbidden_p = false;
2797
2798   /* We are not processing an `extern "C"' declaration.  */
2799   parser->in_unbraced_linkage_specification_p = false;
2800
2801   /* We are not processing a declarator.  */
2802   parser->in_declarator_p = false;
2803
2804   /* We are not processing a template-argument-list.  */
2805   parser->in_template_argument_list_p = false;
2806
2807   /* We are not in an iteration statement.  */
2808   parser->in_statement = 0;
2809
2810   /* We are not in a switch statement.  */
2811   parser->in_switch_statement_p = false;
2812
2813   /* We are not parsing a type-id inside an expression.  */
2814   parser->in_type_id_in_expr_p = false;
2815
2816   /* Declarations aren't implicitly extern "C".  */
2817   parser->implicit_extern_c = false;
2818
2819   /* String literals should be translated to the execution character set.  */
2820   parser->translate_strings_p = true;
2821
2822   /* We are not parsing a function body.  */
2823   parser->in_function_body = false;
2824
2825   /* The unparsed function queue is empty.  */
2826   parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE);
2827
2828   /* There are no classes being defined.  */
2829   parser->num_classes_being_defined = 0;
2830
2831   /* No template parameters apply.  */
2832   parser->num_template_parameter_lists = 0;
2833
2834   return parser;
2835 }
2836
2837 /* Create a cp_lexer structure which will emit the tokens in CACHE
2838    and push it onto the parser's lexer stack.  This is used for delayed
2839    parsing of in-class method bodies and default arguments, and should
2840    not be confused with tentative parsing.  */
2841 static void
2842 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
2843 {
2844   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
2845   lexer->next = parser->lexer;
2846   parser->lexer = lexer;
2847
2848   /* Move the current source position to that of the first token in the
2849      new lexer.  */
2850   cp_lexer_set_source_position_from_token (lexer->next_token);
2851 }
2852
2853 /* Pop the top lexer off the parser stack.  This is never used for the
2854    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
2855 static void
2856 cp_parser_pop_lexer (cp_parser *parser)
2857 {
2858   cp_lexer *lexer = parser->lexer;
2859   parser->lexer = lexer->next;
2860   cp_lexer_destroy (lexer);
2861
2862   /* Put the current source position back where it was before this
2863      lexer was pushed.  */
2864   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
2865 }
2866
2867 /* Lexical conventions [gram.lex]  */
2868
2869 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
2870    identifier.  */
2871
2872 static tree
2873 cp_parser_identifier (cp_parser* parser)
2874 {
2875   cp_token *token;
2876
2877   /* Look for the identifier.  */
2878   token = cp_parser_require (parser, CPP_NAME, "identifier");
2879   /* Return the value.  */
2880   return token ? token->u.value : error_mark_node;
2881 }
2882
2883 /* Parse a sequence of adjacent string constants.  Returns a
2884    TREE_STRING representing the combined, nul-terminated string
2885    constant.  If TRANSLATE is true, translate the string to the
2886    execution character set.  If WIDE_OK is true, a wide string is
2887    invalid here.
2888
2889    C++98 [lex.string] says that if a narrow string literal token is
2890    adjacent to a wide string literal token, the behavior is undefined.
2891    However, C99 6.4.5p4 says that this results in a wide string literal.
2892    We follow C99 here, for consistency with the C front end.
2893
2894    This code is largely lifted from lex_string() in c-lex.c.
2895
2896    FUTURE: ObjC++ will need to handle @-strings here.  */
2897 static tree
2898 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
2899 {
2900   tree value;
2901   size_t count;
2902   struct obstack str_ob;
2903   cpp_string str, istr, *strs;
2904   cp_token *tok;
2905   enum cpp_ttype type;
2906
2907   tok = cp_lexer_peek_token (parser->lexer);
2908   if (!cp_parser_is_string_literal (tok))
2909     {
2910       cp_parser_error (parser, "expected string-literal");
2911       return error_mark_node;
2912     }
2913
2914   type = tok->type;
2915
2916   /* Try to avoid the overhead of creating and destroying an obstack
2917      for the common case of just one string.  */
2918   if (!cp_parser_is_string_literal
2919       (cp_lexer_peek_nth_token (parser->lexer, 2)))
2920     {
2921       cp_lexer_consume_token (parser->lexer);
2922
2923       str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
2924       str.len = TREE_STRING_LENGTH (tok->u.value);
2925       count = 1;
2926
2927       strs = &str;
2928     }
2929   else
2930     {
2931       gcc_obstack_init (&str_ob);
2932       count = 0;
2933
2934       do
2935         {
2936           cp_lexer_consume_token (parser->lexer);
2937           count++;
2938           str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
2939           str.len = TREE_STRING_LENGTH (tok->u.value);
2940
2941           if (type != tok->type)
2942             {
2943               if (type == CPP_STRING)
2944                 type = tok->type;
2945               else if (tok->type != CPP_STRING)
2946                 error ("%Hunsupported non-standard concatenation "
2947                        "of string literals", &tok->location);
2948             }
2949
2950           obstack_grow (&str_ob, &str, sizeof (cpp_string));
2951
2952           tok = cp_lexer_peek_token (parser->lexer);
2953         }
2954       while (cp_parser_is_string_literal (tok));
2955
2956       strs = (cpp_string *) obstack_finish (&str_ob);
2957     }
2958
2959   if (type != CPP_STRING && !wide_ok)
2960     {
2961       cp_parser_error (parser, "a wide string is invalid in this context");
2962       type = CPP_STRING;
2963     }
2964
2965   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
2966       (parse_in, strs, count, &istr, type))
2967     {
2968       value = build_string (istr.len, (const char *)istr.text);
2969       free (CONST_CAST (unsigned char *, istr.text));
2970
2971       switch (type)
2972         {
2973         default:
2974         case CPP_STRING:
2975           TREE_TYPE (value) = char_array_type_node;
2976           break;
2977         case CPP_STRING16:
2978           TREE_TYPE (value) = char16_array_type_node;
2979           break;
2980         case CPP_STRING32:
2981           TREE_TYPE (value) = char32_array_type_node;
2982           break;
2983         case CPP_WSTRING:
2984           TREE_TYPE (value) = wchar_array_type_node;
2985           break;
2986         }
2987
2988       value = fix_string_type (value);
2989     }
2990   else
2991     /* cpp_interpret_string has issued an error.  */
2992     value = error_mark_node;
2993
2994   if (count > 1)
2995     obstack_free (&str_ob, 0);
2996
2997   return value;
2998 }
2999
3000
3001 /* Basic concepts [gram.basic]  */
3002
3003 /* Parse a translation-unit.
3004
3005    translation-unit:
3006      declaration-seq [opt]
3007
3008    Returns TRUE if all went well.  */
3009
3010 static bool
3011 cp_parser_translation_unit (cp_parser* parser)
3012 {
3013   /* The address of the first non-permanent object on the declarator
3014      obstack.  */
3015   static void *declarator_obstack_base;
3016
3017   bool success;
3018
3019   /* Create the declarator obstack, if necessary.  */
3020   if (!cp_error_declarator)
3021     {
3022       gcc_obstack_init (&declarator_obstack);
3023       /* Create the error declarator.  */
3024       cp_error_declarator = make_declarator (cdk_error);
3025       /* Create the empty parameter list.  */
3026       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
3027       /* Remember where the base of the declarator obstack lies.  */
3028       declarator_obstack_base = obstack_next_free (&declarator_obstack);
3029     }
3030
3031   cp_parser_declaration_seq_opt (parser);
3032
3033   /* If there are no tokens left then all went well.  */
3034   if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
3035     {
3036       /* Get rid of the token array; we don't need it any more.  */
3037       cp_lexer_destroy (parser->lexer);
3038       parser->lexer = NULL;
3039
3040       /* This file might have been a context that's implicitly extern
3041          "C".  If so, pop the lang context.  (Only relevant for PCH.) */
3042       if (parser->implicit_extern_c)
3043         {
3044           pop_lang_context ();
3045           parser->implicit_extern_c = false;
3046         }
3047
3048       /* Finish up.  */
3049       finish_translation_unit ();
3050
3051       success = true;
3052     }
3053   else
3054     {
3055       cp_parser_error (parser, "expected declaration");
3056       success = false;
3057     }
3058
3059   /* Make sure the declarator obstack was fully cleaned up.  */
3060   gcc_assert (obstack_next_free (&declarator_obstack)
3061               == declarator_obstack_base);
3062
3063   /* All went well.  */
3064   return success;
3065 }
3066
3067 /* Expressions [gram.expr] */
3068
3069 /* Parse a primary-expression.
3070
3071    primary-expression:
3072      literal
3073      this
3074      ( expression )
3075      id-expression
3076
3077    GNU Extensions:
3078
3079    primary-expression:
3080      ( compound-statement )
3081      __builtin_va_arg ( assignment-expression , type-id )
3082      __builtin_offsetof ( type-id , offsetof-expression )
3083
3084    C++ Extensions:
3085      __has_nothrow_assign ( type-id )   
3086      __has_nothrow_constructor ( type-id )
3087      __has_nothrow_copy ( type-id )
3088      __has_trivial_assign ( type-id )   
3089      __has_trivial_constructor ( type-id )
3090      __has_trivial_copy ( type-id )
3091      __has_trivial_destructor ( type-id )
3092      __has_virtual_destructor ( type-id )     
3093      __is_abstract ( type-id )
3094      __is_base_of ( type-id , type-id )
3095      __is_class ( type-id )
3096      __is_convertible_to ( type-id , type-id )     
3097      __is_empty ( type-id )
3098      __is_enum ( type-id )
3099      __is_pod ( type-id )
3100      __is_polymorphic ( type-id )
3101      __is_union ( type-id )
3102
3103    Objective-C++ Extension:
3104
3105    primary-expression:
3106      objc-expression
3107
3108    literal:
3109      __null
3110
3111    ADDRESS_P is true iff this expression was immediately preceded by
3112    "&" and therefore might denote a pointer-to-member.  CAST_P is true
3113    iff this expression is the target of a cast.  TEMPLATE_ARG_P is
3114    true iff this expression is a template argument.
3115
3116    Returns a representation of the expression.  Upon return, *IDK
3117    indicates what kind of id-expression (if any) was present.  */
3118
3119 static tree
3120 cp_parser_primary_expression (cp_parser *parser,
3121                               bool address_p,
3122                               bool cast_p,
3123                               bool template_arg_p,
3124                               cp_id_kind *idk)
3125 {
3126   cp_token *token = NULL;
3127
3128   /* Assume the primary expression is not an id-expression.  */
3129   *idk = CP_ID_KIND_NONE;
3130
3131   /* Peek at the next token.  */
3132   token = cp_lexer_peek_token (parser->lexer);
3133   switch (token->type)
3134     {
3135       /* literal:
3136            integer-literal
3137            character-literal
3138            floating-literal
3139            string-literal
3140            boolean-literal  */
3141     case CPP_CHAR:
3142     case CPP_CHAR16:
3143     case CPP_CHAR32:
3144     case CPP_WCHAR:
3145     case CPP_NUMBER:
3146       token = cp_lexer_consume_token (parser->lexer);
3147       /* Floating-point literals are only allowed in an integral
3148          constant expression if they are cast to an integral or
3149          enumeration type.  */
3150       if (TREE_CODE (token->u.value) == REAL_CST
3151           && parser->integral_constant_expression_p
3152           && pedantic)
3153         {
3154           /* CAST_P will be set even in invalid code like "int(2.7 +
3155              ...)".   Therefore, we have to check that the next token
3156              is sure to end the cast.  */
3157           if (cast_p)
3158             {
3159               cp_token *next_token;
3160
3161               next_token = cp_lexer_peek_token (parser->lexer);
3162               if (/* The comma at the end of an
3163                      enumerator-definition.  */
3164                   next_token->type != CPP_COMMA
3165                   /* The curly brace at the end of an enum-specifier.  */
3166                   && next_token->type != CPP_CLOSE_BRACE
3167                   /* The end of a statement.  */
3168                   && next_token->type != CPP_SEMICOLON
3169                   /* The end of the cast-expression.  */
3170                   && next_token->type != CPP_CLOSE_PAREN
3171                   /* The end of an array bound.  */
3172                   && next_token->type != CPP_CLOSE_SQUARE
3173                   /* The closing ">" in a template-argument-list.  */
3174                   && (next_token->type != CPP_GREATER
3175                       || parser->greater_than_is_operator_p)
3176                   /* C++0x only: A ">>" treated like two ">" tokens,
3177                      in a template-argument-list.  */
3178                   && (next_token->type != CPP_RSHIFT
3179                       || (cxx_dialect == cxx98)
3180                       || parser->greater_than_is_operator_p))
3181                 cast_p = false;
3182             }
3183
3184           /* If we are within a cast, then the constraint that the
3185              cast is to an integral or enumeration type will be
3186              checked at that point.  If we are not within a cast, then
3187              this code is invalid.  */
3188           if (!cast_p)
3189             cp_parser_non_integral_constant_expression
3190               (parser, "floating-point literal");
3191         }
3192       return token->u.value;
3193
3194     case CPP_STRING:
3195     case CPP_STRING16:
3196     case CPP_STRING32:
3197     case CPP_WSTRING:
3198       /* ??? Should wide strings be allowed when parser->translate_strings_p
3199          is false (i.e. in attributes)?  If not, we can kill the third
3200          argument to cp_parser_string_literal.  */
3201       return cp_parser_string_literal (parser,
3202                                        parser->translate_strings_p,
3203                                        true);
3204
3205     case CPP_OPEN_PAREN:
3206       {
3207         tree expr;
3208         bool saved_greater_than_is_operator_p;
3209
3210         /* Consume the `('.  */
3211         cp_lexer_consume_token (parser->lexer);
3212         /* Within a parenthesized expression, a `>' token is always
3213            the greater-than operator.  */
3214         saved_greater_than_is_operator_p
3215           = parser->greater_than_is_operator_p;
3216         parser->greater_than_is_operator_p = true;
3217         /* If we see `( { ' then we are looking at the beginning of
3218            a GNU statement-expression.  */
3219         if (cp_parser_allow_gnu_extensions_p (parser)
3220             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
3221           {
3222             /* Statement-expressions are not allowed by the standard.  */
3223             pedwarn (token->location, OPT_pedantic, 
3224                      "ISO C++ forbids braced-groups within expressions");
3225
3226             /* And they're not allowed outside of a function-body; you
3227                cannot, for example, write:
3228
3229                  int i = ({ int j = 3; j + 1; });
3230
3231                at class or namespace scope.  */
3232             if (!parser->in_function_body
3233                 || parser->in_template_argument_list_p)
3234               {
3235                 error ("%Hstatement-expressions are not allowed outside "
3236                        "functions nor in template-argument lists",
3237                        &token->location);
3238                 cp_parser_skip_to_end_of_block_or_statement (parser);
3239                 expr = error_mark_node;
3240               }
3241             else
3242               {
3243                 /* Start the statement-expression.  */
3244                 expr = begin_stmt_expr ();
3245                 /* Parse the compound-statement.  */
3246                 cp_parser_compound_statement (parser, expr, false);
3247                 /* Finish up.  */
3248                 expr = finish_stmt_expr (expr, false);
3249               }
3250           }
3251         else
3252           {
3253             /* Parse the parenthesized expression.  */
3254             expr = cp_parser_expression (parser, cast_p);
3255             /* Let the front end know that this expression was
3256                enclosed in parentheses. This matters in case, for
3257                example, the expression is of the form `A::B', since
3258                `&A::B' might be a pointer-to-member, but `&(A::B)' is
3259                not.  */
3260             finish_parenthesized_expr (expr);
3261           }
3262         /* The `>' token might be the end of a template-id or
3263            template-parameter-list now.  */
3264         parser->greater_than_is_operator_p
3265           = saved_greater_than_is_operator_p;
3266         /* Consume the `)'.  */
3267         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
3268           cp_parser_skip_to_end_of_statement (parser);
3269
3270         return expr;
3271       }
3272
3273     case CPP_KEYWORD:
3274       switch (token->keyword)
3275         {
3276           /* These two are the boolean literals.  */
3277         case RID_TRUE:
3278           cp_lexer_consume_token (parser->lexer);
3279           return boolean_true_node;
3280         case RID_FALSE:
3281           cp_lexer_consume_token (parser->lexer);
3282           return boolean_false_node;
3283
3284           /* The `__null' literal.  */
3285         case RID_NULL:
3286           cp_lexer_consume_token (parser->lexer);
3287           return null_node;
3288
3289           /* Recognize the `this' keyword.  */
3290         case RID_THIS:
3291           cp_lexer_consume_token (parser->lexer);
3292           if (parser->local_variables_forbidden_p)
3293             {
3294               error ("%H%<this%> may not be used in this context",
3295                      &token->location);
3296               return error_mark_node;
3297             }
3298           /* Pointers cannot appear in constant-expressions.  */
3299           if (cp_parser_non_integral_constant_expression (parser, "%<this%>"))
3300             return error_mark_node;
3301           return finish_this_expr ();
3302
3303           /* The `operator' keyword can be the beginning of an
3304              id-expression.  */
3305         case RID_OPERATOR:
3306           goto id_expression;
3307
3308         case RID_FUNCTION_NAME:
3309         case RID_PRETTY_FUNCTION_NAME:
3310         case RID_C99_FUNCTION_NAME:
3311           /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
3312              __func__ are the names of variables -- but they are
3313              treated specially.  Therefore, they are handled here,
3314              rather than relying on the generic id-expression logic
3315              below.  Grammatically, these names are id-expressions.
3316
3317              Consume the token.  */
3318           token = cp_lexer_consume_token (parser->lexer);
3319           /* Look up the name.  */
3320           return finish_fname (token->u.value);
3321
3322         case RID_VA_ARG:
3323           {
3324             tree expression;
3325             tree type;
3326
3327             /* The `__builtin_va_arg' construct is used to handle
3328                `va_arg'.  Consume the `__builtin_va_arg' token.  */
3329             cp_lexer_consume_token (parser->lexer);
3330             /* Look for the opening `('.  */
3331             cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
3332             /* Now, parse the assignment-expression.  */
3333             expression = cp_parser_assignment_expression (parser,
3334                                                           /*cast_p=*/false);
3335             /* Look for the `,'.  */
3336             cp_parser_require (parser, CPP_COMMA, "%<,%>");
3337             /* Parse the type-id.  */
3338             type = cp_parser_type_id (parser);
3339             /* Look for the closing `)'.  */
3340             cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
3341             /* Using `va_arg' in a constant-expression is not
3342                allowed.  */
3343             if (cp_parser_non_integral_constant_expression (parser,
3344                                                             "%<va_arg%>"))
3345               return error_mark_node;
3346             return build_x_va_arg (expression, type);
3347           }
3348
3349         case RID_OFFSETOF:
3350           return cp_parser_builtin_offsetof (parser);
3351
3352         case RID_HAS_NOTHROW_ASSIGN:
3353         case RID_HAS_NOTHROW_CONSTRUCTOR:
3354         case RID_HAS_NOTHROW_COPY:        
3355         case RID_HAS_TRIVIAL_ASSIGN:
3356         case RID_HAS_TRIVIAL_CONSTRUCTOR:
3357         case RID_HAS_TRIVIAL_COPY:        
3358         case RID_HAS_TRIVIAL_DESTRUCTOR:
3359         case RID_HAS_VIRTUAL_DESTRUCTOR:
3360         case RID_IS_ABSTRACT:
3361         case RID_IS_BASE_OF:
3362         case RID_IS_CLASS:
3363         case RID_IS_CONVERTIBLE_TO:
3364         case RID_IS_EMPTY:
3365         case RID_IS_ENUM:
3366         case RID_IS_POD:
3367         case RID_IS_POLYMORPHIC:
3368         case RID_IS_UNION:
3369           return cp_parser_trait_expr (parser, token->keyword);
3370
3371         /* Objective-C++ expressions.  */
3372         case RID_AT_ENCODE:
3373         case RID_AT_PROTOCOL:
3374         case RID_AT_SELECTOR:
3375           return cp_parser_objc_expression (parser);
3376
3377         default:
3378           cp_parser_error (parser, "expected primary-expression");
3379           return error_mark_node;
3380         }
3381
3382       /* An id-expression can start with either an identifier, a
3383          `::' as the beginning of a qualified-id, or the "operator"
3384          keyword.  */
3385     case CPP_NAME:
3386     case CPP_SCOPE:
3387     case CPP_TEMPLATE_ID:
3388     case CPP_NESTED_NAME_SPECIFIER:
3389       {
3390         tree id_expression;
3391         tree decl;
3392         const char *error_msg;
3393         bool template_p;
3394         bool done;
3395         cp_token *id_expr_token;
3396
3397       id_expression:
3398         /* Parse the id-expression.  */
3399         id_expression
3400           = cp_parser_id_expression (parser,
3401                                      /*template_keyword_p=*/false,
3402                                      /*check_dependency_p=*/true,
3403                                      &template_p,
3404                                      /*declarator_p=*/false,
3405                                      /*optional_p=*/false);
3406         if (id_expression == error_mark_node)
3407           return error_mark_node;
3408         id_expr_token = token;
3409         token = cp_lexer_peek_token (parser->lexer);
3410         done = (token->type != CPP_OPEN_SQUARE
3411                 && token->type != CPP_OPEN_PAREN
3412                 && token->type != CPP_DOT
3413                 && token->type != CPP_DEREF
3414                 && token->type != CPP_PLUS_PLUS
3415                 && token->type != CPP_MINUS_MINUS);
3416         /* If we have a template-id, then no further lookup is
3417            required.  If the template-id was for a template-class, we
3418            will sometimes have a TYPE_DECL at this point.  */
3419         if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
3420                  || TREE_CODE (id_expression) == TYPE_DECL)
3421           decl = id_expression;
3422         /* Look up the name.  */
3423         else
3424           {
3425             tree ambiguous_decls;
3426
3427             decl = cp_parser_lookup_name (parser, id_expression,
3428                                           none_type,
3429                                           template_p,
3430                                           /*is_namespace=*/false,
3431                                           /*check_dependency=*/true,
3432                                           &ambiguous_decls,
3433                                           id_expr_token->location);
3434             /* If the lookup was ambiguous, an error will already have
3435                been issued.  */
3436             if (ambiguous_decls)
3437               return error_mark_node;
3438
3439             /* In Objective-C++, an instance variable (ivar) may be preferred
3440                to whatever cp_parser_lookup_name() found.  */
3441             decl = objc_lookup_ivar (decl, id_expression);
3442
3443             /* If name lookup gives us a SCOPE_REF, then the
3444                qualifying scope was dependent.  */
3445             if (TREE_CODE (decl) == SCOPE_REF)
3446               {
3447                 /* At this point, we do not know if DECL is a valid
3448                    integral constant expression.  We assume that it is
3449                    in fact such an expression, so that code like:
3450
3451                       template <int N> struct A {
3452                         int a[B<N>::i];
3453                       };
3454                      
3455                    is accepted.  At template-instantiation time, we
3456                    will check that B<N>::i is actually a constant.  */
3457                 return decl;
3458               }
3459             /* Check to see if DECL is a local variable in a context
3460                where that is forbidden.  */
3461             if (parser->local_variables_forbidden_p
3462                 && local_variable_p (decl))
3463               {
3464                 /* It might be that we only found DECL because we are
3465                    trying to be generous with pre-ISO scoping rules.
3466                    For example, consider:
3467
3468                      int i;
3469                      void g() {
3470                        for (int i = 0; i < 10; ++i) {}
3471                        extern void f(int j = i);
3472                      }
3473
3474                    Here, name look up will originally find the out
3475                    of scope `i'.  We need to issue a warning message,
3476                    but then use the global `i'.  */
3477                 decl = check_for_out_of_scope_variable (decl);
3478                 if (local_variable_p (decl))
3479                   {
3480                     error ("%Hlocal variable %qD may not appear in this context",
3481                            &id_expr_token->location, decl);
3482                     return error_mark_node;
3483                   }
3484               }
3485           }
3486
3487         decl = (finish_id_expression
3488                 (id_expression, decl, parser->scope,
3489                  idk,
3490                  parser->integral_constant_expression_p,
3491                  parser->allow_non_integral_constant_expression_p,
3492                  &parser->non_integral_constant_expression_p,
3493                  template_p, done, address_p,
3494                  template_arg_p,
3495                  &error_msg,
3496                  id_expr_token->location));
3497         if (error_msg)
3498           cp_parser_error (parser, error_msg);
3499         return decl;
3500       }
3501
3502       /* Anything else is an error.  */
3503     default:
3504       /* ...unless we have an Objective-C++ message or string literal,
3505          that is.  */
3506       if (c_dialect_objc ()
3507           && (token->type == CPP_OPEN_SQUARE
3508               || token->type == CPP_OBJC_STRING))
3509         return cp_parser_objc_expression (parser);
3510
3511       cp_parser_error (parser, "expected primary-expression");
3512       return error_mark_node;
3513     }
3514 }
3515
3516 /* Parse an id-expression.
3517
3518    id-expression:
3519      unqualified-id
3520      qualified-id
3521
3522    qualified-id:
3523      :: [opt] nested-name-specifier template [opt] unqualified-id
3524      :: identifier
3525      :: operator-function-id
3526      :: template-id
3527
3528    Return a representation of the unqualified portion of the
3529    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
3530    a `::' or nested-name-specifier.
3531
3532    Often, if the id-expression was a qualified-id, the caller will
3533    want to make a SCOPE_REF to represent the qualified-id.  This
3534    function does not do this in order to avoid wastefully creating
3535    SCOPE_REFs when they are not required.
3536
3537    If TEMPLATE_KEYWORD_P is true, then we have just seen the
3538    `template' keyword.
3539
3540    If CHECK_DEPENDENCY_P is false, then names are looked up inside
3541    uninstantiated templates.
3542
3543    If *TEMPLATE_P is non-NULL, it is set to true iff the
3544    `template' keyword is used to explicitly indicate that the entity
3545    named is a template.
3546
3547    If DECLARATOR_P is true, the id-expression is appearing as part of
3548    a declarator, rather than as part of an expression.  */
3549
3550 static tree
3551 cp_parser_id_expression (cp_parser *parser,
3552                          bool template_keyword_p,
3553                          bool check_dependency_p,
3554                          bool *template_p,
3555                          bool declarator_p,
3556                          bool optional_p)
3557 {
3558   bool global_scope_p;
3559   bool nested_name_specifier_p;
3560
3561   /* Assume the `template' keyword was not used.  */
3562   if (template_p)
3563     *template_p = template_keyword_p;
3564
3565   /* Look for the optional `::' operator.  */
3566   global_scope_p
3567     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3568        != NULL_TREE);
3569   /* Look for the optional nested-name-specifier.  */
3570   nested_name_specifier_p
3571     = (cp_parser_nested_name_specifier_opt (parser,
3572                                             /*typename_keyword_p=*/false,
3573                                             check_dependency_p,
3574                                             /*type_p=*/false,
3575                                             declarator_p)
3576        != NULL_TREE);
3577   /* If there is a nested-name-specifier, then we are looking at
3578      the first qualified-id production.  */
3579   if (nested_name_specifier_p)
3580     {
3581       tree saved_scope;
3582       tree saved_object_scope;
3583       tree saved_qualifying_scope;
3584       tree unqualified_id;
3585       bool is_template;
3586
3587       /* See if the next token is the `template' keyword.  */
3588       if (!template_p)
3589         template_p = &is_template;
3590       *template_p = cp_parser_optional_template_keyword (parser);
3591       /* Name lookup we do during the processing of the
3592          unqualified-id might obliterate SCOPE.  */
3593       saved_scope = parser->scope;
3594       saved_object_scope = parser->object_scope;
3595       saved_qualifying_scope = parser->qualifying_scope;
3596       /* Process the final unqualified-id.  */
3597       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3598                                                  check_dependency_p,
3599                                                  declarator_p,
3600                                                  /*optional_p=*/false);
3601       /* Restore the SAVED_SCOPE for our caller.  */
3602       parser->scope = saved_scope;
3603       parser->object_scope = saved_object_scope;
3604       parser->qualifying_scope = saved_qualifying_scope;
3605
3606       return unqualified_id;
3607     }
3608   /* Otherwise, if we are in global scope, then we are looking at one
3609      of the other qualified-id productions.  */
3610   else if (global_scope_p)
3611     {
3612       cp_token *token;
3613       tree id;
3614
3615       /* Peek at the next token.  */
3616       token = cp_lexer_peek_token (parser->lexer);
3617
3618       /* If it's an identifier, and the next token is not a "<", then
3619          we can avoid the template-id case.  This is an optimization
3620          for this common case.  */
3621       if (token->type == CPP_NAME
3622           && !cp_parser_nth_token_starts_template_argument_list_p
3623                (parser, 2))
3624         return cp_parser_identifier (parser);
3625
3626       cp_parser_parse_tentatively (parser);
3627       /* Try a template-id.  */
3628       id = cp_parser_template_id (parser,
3629                                   /*template_keyword_p=*/false,
3630                                   /*check_dependency_p=*/true,
3631                                   declarator_p);
3632       /* If that worked, we're done.  */
3633       if (cp_parser_parse_definitely (parser))
3634         return id;
3635
3636       /* Peek at the next token.  (Changes in the token buffer may
3637          have invalidated the pointer obtained above.)  */
3638       token = cp_lexer_peek_token (parser->lexer);
3639
3640       switch (token->type)
3641         {
3642         case CPP_NAME:
3643           return cp_parser_identifier (parser);
3644
3645         case CPP_KEYWORD:
3646           if (token->keyword == RID_OPERATOR)
3647             return cp_parser_operator_function_id (parser);
3648           /* Fall through.  */
3649
3650         default:
3651           cp_parser_error (parser, "expected id-expression");
3652           return error_mark_node;
3653         }
3654     }
3655   else
3656     return cp_parser_unqualified_id (parser, template_keyword_p,
3657                                      /*check_dependency_p=*/true,
3658                                      declarator_p,
3659                                      optional_p);
3660 }
3661
3662 /* Parse an unqualified-id.
3663
3664    unqualified-id:
3665      identifier
3666      operator-function-id
3667      conversion-function-id
3668      ~ class-name
3669      template-id
3670
3671    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3672    keyword, in a construct like `A::template ...'.
3673
3674    Returns a representation of unqualified-id.  For the `identifier'
3675    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3676    production a BIT_NOT_EXPR is returned; the operand of the
3677    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3678    other productions, see the documentation accompanying the
3679    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3680    names are looked up in uninstantiated templates.  If DECLARATOR_P
3681    is true, the unqualified-id is appearing as part of a declarator,
3682    rather than as part of an expression.  */
3683
3684 static tree
3685 cp_parser_unqualified_id (cp_parser* parser,
3686                           bool template_keyword_p,
3687                           bool check_dependency_p,
3688                           bool declarator_p,
3689                           bool optional_p)
3690 {
3691   cp_token *token;
3692
3693   /* Peek at the next token.  */
3694   token = cp_lexer_peek_token (parser->lexer);
3695
3696   switch (token->type)
3697     {
3698     case CPP_NAME:
3699       {
3700         tree id;
3701
3702         /* We don't know yet whether or not this will be a
3703            template-id.  */
3704         cp_parser_parse_tentatively (parser);
3705         /* Try a template-id.  */
3706         id = cp_parser_template_id (parser, template_keyword_p,
3707                                     check_dependency_p,
3708                                     declarator_p);
3709         /* If it worked, we're done.  */
3710         if (cp_parser_parse_definitely (parser))
3711           return id;
3712         /* Otherwise, it's an ordinary identifier.  */
3713         return cp_parser_identifier (parser);
3714       }
3715
3716     case CPP_TEMPLATE_ID:
3717       return cp_parser_template_id (parser, template_keyword_p,
3718                                     check_dependency_p,
3719                                     declarator_p);
3720
3721     case CPP_COMPL:
3722       {
3723         tree type_decl;
3724         tree qualifying_scope;
3725         tree object_scope;
3726         tree scope;
3727         bool done;
3728
3729         /* Consume the `~' token.  */
3730         cp_lexer_consume_token (parser->lexer);
3731         /* Parse the class-name.  The standard, as written, seems to
3732            say that:
3733
3734              template <typename T> struct S { ~S (); };
3735              template <typename T> S<T>::~S() {}
3736
3737            is invalid, since `~' must be followed by a class-name, but
3738            `S<T>' is dependent, and so not known to be a class.
3739            That's not right; we need to look in uninstantiated
3740            templates.  A further complication arises from:
3741
3742              template <typename T> void f(T t) {
3743                t.T::~T();
3744              }
3745
3746            Here, it is not possible to look up `T' in the scope of `T'
3747            itself.  We must look in both the current scope, and the
3748            scope of the containing complete expression.
3749
3750            Yet another issue is:
3751
3752              struct S {
3753                int S;
3754                ~S();
3755              };
3756
3757              S::~S() {}
3758
3759            The standard does not seem to say that the `S' in `~S'
3760            should refer to the type `S' and not the data member
3761            `S::S'.  */
3762
3763         /* DR 244 says that we look up the name after the "~" in the
3764            same scope as we looked up the qualifying name.  That idea
3765            isn't fully worked out; it's more complicated than that.  */
3766         scope = parser->scope;
3767         object_scope = parser->object_scope;
3768         qualifying_scope = parser->qualifying_scope;
3769
3770         /* Check for invalid scopes.  */
3771         if (scope == error_mark_node)
3772           {
3773             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3774               cp_lexer_consume_token (parser->lexer);
3775             return error_mark_node;
3776           }
3777         if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
3778           {
3779             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3780               error ("%Hscope %qT before %<~%> is not a class-name",
3781                      &token->location, scope);
3782             cp_parser_simulate_error (parser);
3783             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3784               cp_lexer_consume_token (parser->lexer);
3785             return error_mark_node;
3786           }
3787         gcc_assert (!scope || TYPE_P (scope));
3788
3789         /* If the name is of the form "X::~X" it's OK.  */
3790         token = cp_lexer_peek_token (parser->lexer);
3791         if (scope
3792             && token->type == CPP_NAME
3793             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3794                 == CPP_OPEN_PAREN)
3795             && constructor_name_p (token->u.value, scope))
3796           {
3797             cp_lexer_consume_token (parser->lexer);
3798             return build_nt (BIT_NOT_EXPR, scope);
3799           }
3800
3801         /* If there was an explicit qualification (S::~T), first look
3802            in the scope given by the qualification (i.e., S).  */
3803         done = false;
3804         type_decl = NULL_TREE;
3805         if (scope)
3806           {
3807             cp_parser_parse_tentatively (parser);
3808             type_decl = cp_parser_class_name (parser,
3809                                               /*typename_keyword_p=*/false,
3810                                               /*template_keyword_p=*/false,
3811                                               none_type,
3812                                               /*check_dependency=*/false,
3813                                               /*class_head_p=*/false,
3814                                               declarator_p);
3815             if (cp_parser_parse_definitely (parser))
3816               done = true;
3817           }
3818         /* In "N::S::~S", look in "N" as well.  */
3819         if (!done && scope && qualifying_scope)
3820           {
3821             cp_parser_parse_tentatively (parser);
3822             parser->scope = qualifying_scope;
3823             parser->object_scope = NULL_TREE;
3824             parser->qualifying_scope = NULL_TREE;
3825             type_decl
3826               = cp_parser_class_name (parser,
3827                                       /*typename_keyword_p=*/false,
3828                                       /*template_keyword_p=*/false,
3829                                       none_type,
3830                                       /*check_dependency=*/false,
3831                                       /*class_head_p=*/false,
3832                                       declarator_p);
3833             if (cp_parser_parse_definitely (parser))
3834               done = true;
3835           }
3836         /* In "p->S::~T", look in the scope given by "*p" as well.  */
3837         else if (!done && object_scope)
3838           {
3839             cp_parser_parse_tentatively (parser);
3840             parser->scope = object_scope;
3841             parser->object_scope = NULL_TREE;
3842             parser->qualifying_scope = NULL_TREE;
3843             type_decl
3844               = cp_parser_class_name (parser,
3845                                       /*typename_keyword_p=*/false,
3846                                       /*template_keyword_p=*/false,
3847                                       none_type,
3848                                       /*check_dependency=*/false,
3849                                       /*class_head_p=*/false,
3850                                       declarator_p);
3851             if (cp_parser_parse_definitely (parser))
3852               done = true;
3853           }
3854         /* Look in the surrounding context.  */
3855         if (!done)
3856           {
3857             parser->scope = NULL_TREE;
3858             parser->object_scope = NULL_TREE;
3859             parser->qualifying_scope = NULL_TREE;
3860             type_decl
3861               = cp_parser_class_name (parser,
3862                                       /*typename_keyword_p=*/false,
3863                                       /*template_keyword_p=*/false,
3864                                       none_type,
3865                                       /*check_dependency=*/false,
3866                                       /*class_head_p=*/false,
3867                                       declarator_p);
3868           }
3869         /* If an error occurred, assume that the name of the
3870            destructor is the same as the name of the qualifying
3871            class.  That allows us to keep parsing after running
3872            into ill-formed destructor names.  */
3873         if (type_decl == error_mark_node && scope)
3874           return build_nt (BIT_NOT_EXPR, scope);
3875         else if (type_decl == error_mark_node)
3876           return error_mark_node;
3877
3878         /* Check that destructor name and scope match.  */
3879         if (declarator_p && scope && !check_dtor_name (scope, type_decl))
3880           {
3881             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3882               error ("%Hdeclaration of %<~%T%> as member of %qT",
3883                      &token->location, type_decl, scope);
3884             cp_parser_simulate_error (parser);
3885             return error_mark_node;
3886           }
3887
3888         /* [class.dtor]
3889
3890            A typedef-name that names a class shall not be used as the
3891            identifier in the declarator for a destructor declaration.  */
3892         if (declarator_p
3893             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
3894             && !DECL_SELF_REFERENCE_P (type_decl)
3895             && !cp_parser_uncommitted_to_tentative_parse_p (parser))
3896           error ("%Htypedef-name %qD used as destructor declarator",
3897                  &token->location, type_decl);
3898
3899         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3900       }
3901
3902     case CPP_KEYWORD:
3903       if (token->keyword == RID_OPERATOR)
3904         {
3905           tree id;
3906
3907           /* This could be a template-id, so we try that first.  */
3908           cp_parser_parse_tentatively (parser);
3909           /* Try a template-id.  */
3910           id = cp_parser_template_id (parser, template_keyword_p,
3911                                       /*check_dependency_p=*/true,
3912                                       declarator_p);
3913           /* If that worked, we're done.  */
3914           if (cp_parser_parse_definitely (parser))
3915             return id;
3916           /* We still don't know whether we're looking at an
3917              operator-function-id or a conversion-function-id.  */
3918           cp_parser_parse_tentatively (parser);
3919           /* Try an operator-function-id.  */
3920           id = cp_parser_operator_function_id (parser);
3921           /* If that didn't work, try a conversion-function-id.  */
3922           if (!cp_parser_parse_definitely (parser))
3923             id = cp_parser_conversion_function_id (parser);
3924
3925           return id;
3926         }
3927       /* Fall through.  */
3928
3929     default:
3930       if (optional_p)
3931         return NULL_TREE;
3932       cp_parser_error (parser, "expected unqualified-id");
3933       return error_mark_node;
3934     }
3935 }
3936
3937 /* Parse an (optional) nested-name-specifier.
3938
3939    nested-name-specifier: [C++98]
3940      class-or-namespace-name :: nested-name-specifier [opt]
3941      class-or-namespace-name :: template nested-name-specifier [opt]
3942
3943    nested-name-specifier: [C++0x]
3944      type-name ::
3945      namespace-name ::
3946      nested-name-specifier identifier ::
3947      nested-name-specifier template [opt] simple-template-id ::
3948
3949    PARSER->SCOPE should be set appropriately before this function is
3950    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
3951    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
3952    in name lookups.
3953
3954    Sets PARSER->SCOPE to the class (TYPE) or namespace
3955    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
3956    it unchanged if there is no nested-name-specifier.  Returns the new
3957    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
3958
3959    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
3960    part of a declaration and/or decl-specifier.  */
3961
3962 static tree
3963 cp_parser_nested_name_specifier_opt (cp_parser *parser,
3964                                      bool typename_keyword_p,
3965                                      bool check_dependency_p,
3966                                      bool type_p,
3967                                      bool is_declaration)
3968 {
3969   bool success = false;
3970   cp_token_position start = 0;
3971   cp_token *token;
3972
3973   /* Remember where the nested-name-specifier starts.  */
3974   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3975     {
3976       start = cp_lexer_token_position (parser->lexer, false);
3977       push_deferring_access_checks (dk_deferred);
3978     }
3979
3980   while (true)
3981     {
3982       tree new_scope;
3983       tree old_scope;
3984       tree saved_qualifying_scope;
3985       bool template_keyword_p;
3986
3987       /* Spot cases that cannot be the beginning of a
3988          nested-name-specifier.  */
3989       token = cp_lexer_peek_token (parser->lexer);
3990
3991       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
3992          the already parsed nested-name-specifier.  */
3993       if (token->type == CPP_NESTED_NAME_SPECIFIER)
3994         {
3995           /* Grab the nested-name-specifier and continue the loop.  */
3996           cp_parser_pre_parsed_nested_name_specifier (parser);
3997           /* If we originally encountered this nested-name-specifier
3998              with IS_DECLARATION set to false, we will not have
3999              resolved TYPENAME_TYPEs, so we must do so here.  */
4000           if (is_declaration
4001               && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4002             {
4003               new_scope = resolve_typename_type (parser->scope,
4004                                                  /*only_current_p=*/false);
4005               if (TREE_CODE (new_scope) != TYPENAME_TYPE)
4006                 parser->scope = new_scope;
4007             }
4008           success = true;
4009           continue;
4010         }
4011
4012       /* Spot cases that cannot be the beginning of a
4013          nested-name-specifier.  On the second and subsequent times
4014          through the loop, we look for the `template' keyword.  */
4015       if (success && token->keyword == RID_TEMPLATE)
4016         ;
4017       /* A template-id can start a nested-name-specifier.  */
4018       else if (token->type == CPP_TEMPLATE_ID)
4019         ;
4020       else
4021         {
4022           /* If the next token is not an identifier, then it is
4023              definitely not a type-name or namespace-name.  */
4024           if (token->type != CPP_NAME)
4025             break;
4026           /* If the following token is neither a `<' (to begin a
4027              template-id), nor a `::', then we are not looking at a
4028              nested-name-specifier.  */
4029           token = cp_lexer_peek_nth_token (parser->lexer, 2);
4030           if (token->type != CPP_SCOPE
4031               && !cp_parser_nth_token_starts_template_argument_list_p
4032                   (parser, 2))
4033             break;
4034         }
4035
4036       /* The nested-name-specifier is optional, so we parse
4037          tentatively.  */
4038       cp_parser_parse_tentatively (parser);
4039
4040       /* Look for the optional `template' keyword, if this isn't the
4041          first time through the loop.  */
4042       if (success)
4043         template_keyword_p = cp_parser_optional_template_keyword (parser);
4044       else
4045         template_keyword_p = false;
4046
4047       /* Save the old scope since the name lookup we are about to do
4048          might destroy it.  */
4049       old_scope = parser->scope;
4050       saved_qualifying_scope = parser->qualifying_scope;
4051       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
4052          look up names in "X<T>::I" in order to determine that "Y" is
4053          a template.  So, if we have a typename at this point, we make
4054          an effort to look through it.  */
4055       if (is_declaration
4056           && !typename_keyword_p
4057           && parser->scope
4058           && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4059         parser->scope = resolve_typename_type (parser->scope,
4060                                                /*only_current_p=*/false);
4061       /* Parse the qualifying entity.  */
4062       new_scope
4063         = cp_parser_qualifying_entity (parser,
4064                                        typename_keyword_p,
4065                                        template_keyword_p,
4066                                        check_dependency_p,
4067                                        type_p,
4068                                        is_declaration);
4069       /* Look for the `::' token.  */
4070       cp_parser_require (parser, CPP_SCOPE, "%<::%>");
4071
4072       /* If we found what we wanted, we keep going; otherwise, we're
4073          done.  */
4074       if (!cp_parser_parse_definitely (parser))
4075         {
4076           bool error_p = false;
4077
4078           /* Restore the OLD_SCOPE since it was valid before the
4079              failed attempt at finding the last
4080              class-or-namespace-name.  */
4081           parser->scope = old_scope;
4082           parser->qualifying_scope = saved_qualifying_scope;
4083           if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4084             break;
4085           /* If the next token is an identifier, and the one after
4086              that is a `::', then any valid interpretation would have
4087              found a class-or-namespace-name.  */
4088           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
4089                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4090                      == CPP_SCOPE)
4091                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
4092                      != CPP_COMPL))
4093             {
4094               token = cp_lexer_consume_token (parser->lexer);
4095               if (!error_p)
4096                 {
4097                   if (!token->ambiguous_p)
4098                     {
4099                       tree decl;
4100                       tree ambiguous_decls;
4101
4102                       decl = cp_parser_lookup_name (parser, token->u.value,
4103                                                     none_type,
4104                                                     /*is_template=*/false,
4105                                                     /*is_namespace=*/false,
4106                                                     /*check_dependency=*/true,
4107                                                     &ambiguous_decls,
4108                                                     token->location);
4109                       if (TREE_CODE (decl) == TEMPLATE_DECL)
4110                         error ("%H%qD used without template parameters",
4111                                &token->location, decl);
4112                       else if (ambiguous_decls)
4113                         {
4114                           error ("%Hreference to %qD is ambiguous",
4115                                  &token->location, token->u.value);
4116                           print_candidates (ambiguous_decls);
4117                           decl = error_mark_node;
4118                         }
4119                       else
4120                         {
4121                           const char* msg = "is not a class or namespace";
4122                           if (cxx_dialect != cxx98)
4123                             msg = "is not a class, namespace, or enumeration";
4124                           cp_parser_name_lookup_error
4125                             (parser, token->u.value, decl, msg,
4126                              token->location);
4127                         }
4128                     }
4129                   parser->scope = error_mark_node;
4130                   error_p = true;
4131                   /* Treat this as a successful nested-name-specifier
4132                      due to:
4133
4134                      [basic.lookup.qual]
4135
4136                      If the name found is not a class-name (clause
4137                      _class_) or namespace-name (_namespace.def_), the
4138                      program is ill-formed.  */
4139                   success = true;
4140                 }
4141               cp_lexer_consume_token (parser->lexer);
4142             }
4143           break;
4144         }
4145       /* We've found one valid nested-name-specifier.  */
4146       success = true;
4147       /* Name lookup always gives us a DECL.  */
4148       if (TREE_CODE (new_scope) == TYPE_DECL)
4149         new_scope = TREE_TYPE (new_scope);
4150       /* Uses of "template" must be followed by actual templates.  */
4151       if (template_keyword_p
4152           && !(CLASS_TYPE_P (new_scope)
4153                && ((CLASSTYPE_USE_TEMPLATE (new_scope)
4154                     && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
4155                    || CLASSTYPE_IS_TEMPLATE (new_scope)))
4156           && !(TREE_CODE (new_scope) == TYPENAME_TYPE
4157                && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
4158                    == TEMPLATE_ID_EXPR)))
4159         permerror (input_location, TYPE_P (new_scope)
4160                    ? "%qT is not a template"
4161                    : "%qD is not a template",
4162                    new_scope);
4163       /* If it is a class scope, try to complete it; we are about to
4164          be looking up names inside the class.  */
4165       if (TYPE_P (new_scope)
4166           /* Since checking types for dependency can be expensive,
4167              avoid doing it if the type is already complete.  */
4168           && !COMPLETE_TYPE_P (new_scope)
4169           /* Do not try to complete dependent types.  */
4170           && !dependent_type_p (new_scope))
4171         {
4172           new_scope = complete_type (new_scope);
4173           /* If it is a typedef to current class, use the current
4174              class instead, as the typedef won't have any names inside
4175              it yet.  */
4176           if (!COMPLETE_TYPE_P (new_scope)
4177               && currently_open_class (new_scope))
4178             new_scope = TYPE_MAIN_VARIANT (new_scope);
4179         }
4180       /* Make sure we look in the right scope the next time through
4181          the loop.  */
4182       parser->scope = new_scope;
4183     }
4184
4185   /* If parsing tentatively, replace the sequence of tokens that makes
4186      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
4187      token.  That way, should we re-parse the token stream, we will
4188      not have to repeat the effort required to do the parse, nor will
4189      we issue duplicate error messages.  */
4190   if (success && start)
4191     {
4192       cp_token *token;
4193
4194       token = cp_lexer_token_at (parser->lexer, start);
4195       /* Reset the contents of the START token.  */
4196       token->type = CPP_NESTED_NAME_SPECIFIER;
4197       /* Retrieve any deferred checks.  Do not pop this access checks yet
4198          so the memory will not be reclaimed during token replacing below.  */
4199       token->u.tree_check_value = GGC_CNEW (struct tree_check);
4200       token->u.tree_check_value->value = parser->scope;
4201       token->u.tree_check_value->checks = get_deferred_access_checks ();
4202       token->u.tree_check_value->qualifying_scope =
4203         parser->qualifying_scope;
4204       token->keyword = RID_MAX;
4205
4206       /* Purge all subsequent tokens.  */
4207       cp_lexer_purge_tokens_after (parser->lexer, start);
4208     }
4209
4210   if (start)
4211     pop_to_parent_deferring_access_checks ();
4212
4213   return success ? parser->scope : NULL_TREE;
4214 }
4215
4216 /* Parse a nested-name-specifier.  See
4217    cp_parser_nested_name_specifier_opt for details.  This function
4218    behaves identically, except that it will an issue an error if no
4219    nested-name-specifier is present.  */
4220
4221 static tree
4222 cp_parser_nested_name_specifier (cp_parser *parser,
4223                                  bool typename_keyword_p,
4224                                  bool check_dependency_p,
4225                                  bool type_p,
4226                                  bool is_declaration)
4227 {
4228   tree scope;
4229
4230   /* Look for the nested-name-specifier.  */
4231   scope = cp_parser_nested_name_specifier_opt (parser,
4232                                                typename_keyword_p,
4233                                                check_dependency_p,
4234                                                type_p,
4235                                                is_declaration);
4236   /* If it was not present, issue an error message.  */
4237   if (!scope)
4238     {
4239       cp_parser_error (parser, "expected nested-name-specifier");
4240       parser->scope = NULL_TREE;
4241     }
4242
4243   return scope;
4244 }
4245
4246 /* Parse the qualifying entity in a nested-name-specifier. For C++98,
4247    this is either a class-name or a namespace-name (which corresponds
4248    to the class-or-namespace-name production in the grammar). For
4249    C++0x, it can also be a type-name that refers to an enumeration
4250    type.
4251
4252    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
4253    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
4254    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
4255    TYPE_P is TRUE iff the next name should be taken as a class-name,
4256    even the same name is declared to be another entity in the same
4257    scope.
4258
4259    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
4260    specified by the class-or-namespace-name.  If neither is found the
4261    ERROR_MARK_NODE is returned.  */
4262
4263 static tree
4264 cp_parser_qualifying_entity (cp_parser *parser,
4265                              bool typename_keyword_p,
4266                              bool template_keyword_p,
4267                              bool check_dependency_p,
4268                              bool type_p,
4269                              bool is_declaration)
4270 {
4271   tree saved_scope;
4272   tree saved_qualifying_scope;
4273   tree saved_object_scope;
4274   tree scope;
4275   bool only_class_p;
4276   bool successful_parse_p;
4277
4278   /* Before we try to parse the class-name, we must save away the
4279      current PARSER->SCOPE since cp_parser_class_name will destroy
4280      it.  */
4281   saved_scope = parser->scope;
4282   saved_qualifying_scope = parser->qualifying_scope;
4283   saved_object_scope = parser->object_scope;
4284   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
4285      there is no need to look for a namespace-name.  */
4286   only_class_p = template_keyword_p 
4287     || (saved_scope && TYPE_P (saved_scope) && cxx_dialect == cxx98);
4288   if (!only_class_p)
4289     cp_parser_parse_tentatively (parser);
4290   scope = cp_parser_class_name (parser,
4291                                 typename_keyword_p,
4292                                 template_keyword_p,
4293                                 type_p ? class_type : none_type,
4294                                 check_dependency_p,
4295                                 /*class_head_p=*/false,
4296                                 is_declaration);
4297   successful_parse_p = only_class_p || cp_parser_parse_definitely (parser);
4298   /* If that didn't work and we're in C++0x mode, try for a type-name.  */
4299   if (!only_class_p 
4300       && cxx_dialect != cxx98
4301       && !successful_parse_p)
4302     {
4303       /* Restore the saved scope.  */
4304       parser->scope = saved_scope;
4305       parser->qualifying_scope = saved_qualifying_scope;
4306       parser->object_scope = saved_object_scope;
4307
4308       /* Parse tentatively.  */
4309       cp_parser_parse_tentatively (parser);
4310      
4311       /* Parse a typedef-name or enum-name.  */
4312       scope = cp_parser_nonclass_name (parser);
4313       successful_parse_p = cp_parser_parse_definitely (parser);
4314     }
4315   /* If that didn't work, try for a namespace-name.  */
4316   if (!only_class_p && !successful_parse_p)
4317     {
4318       /* Restore the saved scope.  */
4319       parser->scope = saved_scope;
4320       parser->qualifying_scope = saved_qualifying_scope;
4321       parser->object_scope = saved_object_scope;
4322       /* If we are not looking at an identifier followed by the scope
4323          resolution operator, then this is not part of a
4324          nested-name-specifier.  (Note that this function is only used
4325          to parse the components of a nested-name-specifier.)  */
4326       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
4327           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
4328         return error_mark_node;
4329       scope = cp_parser_namespace_name (parser);
4330     }
4331
4332   return scope;
4333 }
4334
4335 /* Parse a postfix-expression.
4336
4337    postfix-expression:
4338      primary-expression
4339      postfix-expression [ expression ]
4340      postfix-expression ( expression-list [opt] )
4341      simple-type-specifier ( expression-list [opt] )
4342      typename :: [opt] nested-name-specifier identifier
4343        ( expression-list [opt] )
4344      typename :: [opt] nested-name-specifier template [opt] template-id
4345        ( expression-list [opt] )
4346      postfix-expression . template [opt] id-expression
4347      postfix-expression -> template [opt] id-expression
4348      postfix-expression . pseudo-destructor-name
4349      postfix-expression -> pseudo-destructor-name
4350      postfix-expression ++
4351      postfix-expression --
4352      dynamic_cast < type-id > ( expression )
4353      static_cast < type-id > ( expression )
4354      reinterpret_cast < type-id > ( expression )
4355      const_cast < type-id > ( expression )
4356      typeid ( expression )
4357      typeid ( type-id )
4358
4359    GNU Extension:
4360
4361    postfix-expression:
4362      ( type-id ) { initializer-list , [opt] }
4363
4364    This extension is a GNU version of the C99 compound-literal
4365    construct.  (The C99 grammar uses `type-name' instead of `type-id',
4366    but they are essentially the same concept.)
4367
4368    If ADDRESS_P is true, the postfix expression is the operand of the
4369    `&' operator.  CAST_P is true if this expression is the target of a
4370    cast.
4371
4372    If MEMBER_ACCESS_ONLY_P, we only allow postfix expressions that are
4373    class member access expressions [expr.ref].
4374
4375    Returns a representation of the expression.  */
4376
4377 static tree
4378 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
4379                               bool member_access_only_p)
4380 {
4381   cp_token *token;
4382   enum rid keyword;
4383   cp_id_kind idk = CP_ID_KIND_NONE;
4384   tree postfix_expression = NULL_TREE;
4385   bool is_member_access = false;
4386
4387   /* Peek at the next token.  */
4388   token = cp_lexer_peek_token (parser->lexer);
4389   /* Some of the productions are determined by keywords.  */
4390   keyword = token->keyword;
4391   switch (keyword)
4392     {
4393     case RID_DYNCAST:
4394     case RID_STATCAST:
4395     case RID_REINTCAST:
4396     case RID_CONSTCAST:
4397       {
4398         tree type;
4399         tree expression;
4400         const char *saved_message;
4401
4402         /* All of these can be handled in the same way from the point
4403            of view of parsing.  Begin by consuming the token
4404            identifying the cast.  */
4405         cp_lexer_consume_token (parser->lexer);
4406
4407         /* New types cannot be defined in the cast.  */
4408         saved_message = parser->type_definition_forbidden_message;
4409         parser->type_definition_forbidden_message
4410           = "types may not be defined in casts";
4411
4412         /* Look for the opening `<'.  */
4413         cp_parser_require (parser, CPP_LESS, "%<<%>");
4414         /* Parse the type to which we are casting.  */
4415         type = cp_parser_type_id (parser);
4416         /* Look for the closing `>'.  */
4417         cp_parser_require (parser, CPP_GREATER, "%<>%>");
4418         /* Restore the old message.  */
4419         parser->type_definition_forbidden_message = saved_message;
4420
4421         /* And the expression which is being cast.  */
4422         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
4423         expression = cp_parser_expression (parser, /*cast_p=*/true);
4424         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4425
4426         /* Only type conversions to integral or enumeration types
4427            can be used in constant-expressions.  */
4428         if (!cast_valid_in_integral_constant_expression_p (type)
4429             && (cp_parser_non_integral_constant_expression
4430                 (parser,
4431                  "a cast to a type other than an integral or "
4432                  "enumeration type")))
4433           return error_mark_node;
4434
4435         switch (keyword)
4436           {
4437           case RID_DYNCAST:
4438             postfix_expression
4439               = build_dynamic_cast (type, expression, tf_warning_or_error);
4440             break;
4441           case RID_STATCAST:
4442             postfix_expression
4443               = build_static_cast (type, expression, tf_warning_or_error);
4444             break;
4445           case RID_REINTCAST:
4446             postfix_expression
4447               = build_reinterpret_cast (type, expression, 
4448                                         tf_warning_or_error);
4449             break;
4450           case RID_CONSTCAST:
4451             postfix_expression
4452               = build_const_cast (type, expression, tf_warning_or_error);
4453             break;
4454           default:
4455             gcc_unreachable ();
4456           }
4457       }
4458       break;
4459
4460     case RID_TYPEID:
4461       {
4462         tree type;
4463         const char *saved_message;
4464         bool saved_in_type_id_in_expr_p;
4465
4466         /* Consume the `typeid' token.  */
4467         cp_lexer_consume_token (parser->lexer);
4468         /* Look for the `(' token.  */
4469         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
4470         /* Types cannot be defined in a `typeid' expression.  */
4471         saved_message = parser->type_definition_forbidden_message;
4472         parser->type_definition_forbidden_message
4473           = "types may not be defined in a %<typeid%> expression";
4474         /* We can't be sure yet whether we're looking at a type-id or an
4475            expression.  */
4476         cp_parser_parse_tentatively (parser);
4477         /* Try a type-id first.  */
4478         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4479         parser->in_type_id_in_expr_p = true;
4480         type = cp_parser_type_id (parser);
4481         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4482         /* Look for the `)' token.  Otherwise, we can't be sure that
4483            we're not looking at an expression: consider `typeid (int
4484            (3))', for example.  */
4485         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4486         /* If all went well, simply lookup the type-id.  */
4487         if (cp_parser_parse_definitely (parser))
4488           postfix_expression = get_typeid (type);
4489         /* Otherwise, fall back to the expression variant.  */
4490         else
4491           {
4492             tree expression;
4493
4494             /* Look for an expression.  */
4495             expression = cp_parser_expression (parser, /*cast_p=*/false);
4496             /* Compute its typeid.  */
4497             postfix_expression = build_typeid (expression);
4498             /* Look for the `)' token.  */
4499             cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4500           }
4501         /* Restore the saved message.  */
4502         parser->type_definition_forbidden_message = saved_message;
4503         /* `typeid' may not appear in an integral constant expression.  */
4504         if (cp_parser_non_integral_constant_expression(parser,
4505                                                        "%<typeid%> operator"))
4506           return error_mark_node;
4507       }
4508       break;
4509
4510     case RID_TYPENAME:
4511       {
4512         tree type;
4513         /* The syntax permitted here is the same permitted for an
4514            elaborated-type-specifier.  */
4515         type = cp_parser_elaborated_type_specifier (parser,
4516                                                     /*is_friend=*/false,
4517                                                     /*is_declaration=*/false);
4518         postfix_expression = cp_parser_functional_cast (parser, type);
4519       }
4520       break;
4521
4522     default:
4523       {
4524         tree type;
4525
4526         /* If the next thing is a simple-type-specifier, we may be
4527            looking at a functional cast.  We could also be looking at
4528            an id-expression.  So, we try the functional cast, and if
4529            that doesn't work we fall back to the primary-expression.  */
4530         cp_parser_parse_tentatively (parser);
4531         /* Look for the simple-type-specifier.  */
4532         type = cp_parser_simple_type_specifier (parser,
4533                                                 /*decl_specs=*/NULL,
4534                                                 CP_PARSER_FLAGS_NONE);
4535         /* Parse the cast itself.  */
4536         if (!cp_parser_error_occurred (parser))
4537           postfix_expression
4538             = cp_parser_functional_cast (parser, type);
4539         /* If that worked, we're done.  */
4540         if (cp_parser_parse_definitely (parser))
4541           break;
4542
4543         /* If the functional-cast didn't work out, try a
4544            compound-literal.  */
4545         if (cp_parser_allow_gnu_extensions_p (parser)
4546             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4547           {
4548             VEC(constructor_elt,gc) *initializer_list = NULL;
4549             bool saved_in_type_id_in_expr_p;
4550
4551             cp_parser_parse_tentatively (parser);
4552             /* Consume the `('.  */
4553             cp_lexer_consume_token (parser->lexer);
4554             /* Parse the type.  */
4555             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4556             parser->in_type_id_in_expr_p = true;
4557             type = cp_parser_type_id (parser);
4558             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4559             /* Look for the `)'.  */
4560             cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4561             /* Look for the `{'.  */
4562             cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>");
4563             /* If things aren't going well, there's no need to
4564                keep going.  */
4565             if (!cp_parser_error_occurred (parser))
4566               {
4567                 bool non_constant_p;
4568                 /* Parse the initializer-list.  */
4569                 initializer_list
4570                   = cp_parser_initializer_list (parser, &non_constant_p);
4571                 /* Allow a trailing `,'.  */
4572                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
4573                   cp_lexer_consume_token (parser->lexer);
4574                 /* Look for the final `}'.  */
4575                 cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
4576               }
4577             /* If that worked, we're definitely looking at a
4578                compound-literal expression.  */
4579             if (cp_parser_parse_definitely (parser))
4580               {
4581                 /* Warn the user that a compound literal is not
4582                    allowed in standard C++.  */
4583                 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids compound-literals");
4584                 /* For simplicity, we disallow compound literals in
4585                    constant-expressions.  We could
4586                    allow compound literals of integer type, whose
4587                    initializer was a constant, in constant
4588                    expressions.  Permitting that usage, as a further
4589                    extension, would not change the meaning of any
4590                    currently accepted programs.  (Of course, as
4591                    compound literals are not part of ISO C++, the
4592                    standard has nothing to say.)  */
4593                 if (cp_parser_non_integral_constant_expression 
4594                     (parser, "non-constant compound literals"))
4595                   {
4596                     postfix_expression = error_mark_node;
4597                     break;
4598                   }
4599                 /* Form the representation of the compound-literal.  */
4600                 postfix_expression
4601                   = (finish_compound_literal
4602                      (type, build_constructor (init_list_type_node,
4603                                                initializer_list)));
4604                 break;
4605               }
4606           }
4607
4608         /* It must be a primary-expression.  */
4609         postfix_expression
4610           = cp_parser_primary_expression (parser, address_p, cast_p,
4611                                           /*template_arg_p=*/false,
4612                                           &idk);
4613       }
4614       break;
4615     }
4616
4617   /* Keep looping until the postfix-expression is complete.  */
4618   while (true)
4619     {
4620       if (idk == CP_ID_KIND_UNQUALIFIED
4621           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
4622           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
4623         /* It is not a Koenig lookup function call.  */
4624         postfix_expression
4625           = unqualified_name_lookup_error (postfix_expression);
4626
4627       /* Peek at the next token.  */
4628       token = cp_lexer_peek_token (parser->lexer);
4629
4630       switch (token->type)
4631         {
4632         case CPP_OPEN_SQUARE:
4633           postfix_expression
4634             = cp_parser_postfix_open_square_expression (parser,
4635                                                         postfix_expression,
4636                                                         false);
4637           idk = CP_ID_KIND_NONE;
4638           is_member_access = false;
4639           break;
4640
4641         case CPP_OPEN_PAREN:
4642           /* postfix-expression ( expression-list [opt] ) */
4643           {
4644             bool koenig_p;
4645             bool is_builtin_constant_p;
4646             bool saved_integral_constant_expression_p = false;
4647             bool saved_non_integral_constant_expression_p = false;
4648             tree args;
4649
4650             is_member_access = false;
4651
4652             is_builtin_constant_p
4653               = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
4654             if (is_builtin_constant_p)
4655               {
4656                 /* The whole point of __builtin_constant_p is to allow
4657                    non-constant expressions to appear as arguments.  */
4658                 saved_integral_constant_expression_p
4659                   = parser->integral_constant_expression_p;
4660                 saved_non_integral_constant_expression_p
4661                   = parser->non_integral_constant_expression_p;
4662                 parser->integral_constant_expression_p = false;
4663               }
4664             args = (cp_parser_parenthesized_expression_list
4665                     (parser, /*is_attribute_list=*/false,
4666                      /*cast_p=*/false, /*allow_expansion_p=*/true,
4667                      /*non_constant_p=*/NULL));
4668             if (is_builtin_constant_p)
4669               {
4670                 parser->integral_constant_expression_p
4671                   = saved_integral_constant_expression_p;
4672                 parser->non_integral_constant_expression_p
4673                   = saved_non_integral_constant_expression_p;
4674               }
4675
4676             if (args == error_mark_node)
4677               {
4678                 postfix_expression = error_mark_node;
4679                 break;
4680               }
4681
4682             /* Function calls are not permitted in
4683                constant-expressions.  */
4684             if (! builtin_valid_in_constant_expr_p (postfix_expression)
4685                 && cp_parser_non_integral_constant_expression (parser,
4686                                                                "a function call"))
4687               {
4688                 postfix_expression = error_mark_node;
4689                 break;
4690               }
4691
4692             koenig_p = false;
4693             if (idk == CP_ID_KIND_UNQUALIFIED)
4694               {
4695                 if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
4696                   {
4697                     if (args)
4698                       {
4699                         koenig_p = true;
4700                         postfix_expression
4701                           = perform_koenig_lookup (postfix_expression, args);
4702                       }
4703                     else
4704                       postfix_expression
4705                         = unqualified_fn_lookup_error (postfix_expression);
4706                   }
4707                 /* We do not perform argument-dependent lookup if
4708                    normal lookup finds a non-function, in accordance
4709                    with the expected resolution of DR 218.  */
4710                 else if (args && is_overloaded_fn (postfix_expression))
4711                   {
4712                     tree fn = get_first_fn (postfix_expression);
4713
4714                     if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4715                       fn = OVL_CURRENT (TREE_OPERAND (fn, 0));
4716
4717                     /* Only do argument dependent lookup if regular
4718                        lookup does not find a set of member functions.
4719                        [basic.lookup.koenig]/2a  */
4720                     if (!DECL_FUNCTION_MEMBER_P (fn))
4721                       {
4722                         koenig_p = true;
4723                         postfix_expression
4724                           = perform_koenig_lookup (postfix_expression, args);
4725                       }
4726                   }
4727               }
4728
4729             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
4730               {
4731                 tree instance = TREE_OPERAND (postfix_expression, 0);
4732                 tree fn = TREE_OPERAND (postfix_expression, 1);
4733
4734                 if (processing_template_decl
4735                     && (type_dependent_expression_p (instance)
4736                         || (!BASELINK_P (fn)
4737                             && TREE_CODE (fn) != FIELD_DECL)
4738                         || type_dependent_expression_p (fn)
4739                         || any_type_dependent_arguments_p (args)))
4740                   {
4741                     postfix_expression
4742                       = build_nt_call_list (postfix_expression, args);
4743                     break;
4744                   }
4745
4746                 if (BASELINK_P (fn))
4747                   postfix_expression
4748                     = (build_new_method_call
4749                        (instance, fn, args, NULL_TREE,
4750                         (idk == CP_ID_KIND_QUALIFIED
4751                          ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL),
4752                         /*fn_p=*/NULL,
4753                         tf_warning_or_error));
4754                 else
4755                   postfix_expression
4756                     = finish_call_expr (postfix_expression, args,
4757                                         /*disallow_virtual=*/false,
4758                                         /*koenig_p=*/false,
4759                                         tf_warning_or_error);
4760               }
4761             else if (TREE_CODE (postfix_expression) == OFFSET_REF
4762                      || TREE_CODE (postfix_expression) == MEMBER_REF
4763                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
4764               postfix_expression = (build_offset_ref_call_from_tree
4765                                     (postfix_expression, args));
4766             else if (idk == CP_ID_KIND_QUALIFIED)
4767               /* A call to a static class member, or a namespace-scope
4768                  function.  */
4769               postfix_expression
4770                 = finish_call_expr (postfix_expression, args,
4771                                     /*disallow_virtual=*/true,
4772                                     koenig_p,
4773                                     tf_warning_or_error);
4774             else
4775               /* All other function calls.  */
4776               postfix_expression
4777                 = finish_call_expr (postfix_expression, args,
4778                                     /*disallow_virtual=*/false,
4779                                     koenig_p,
4780                                     tf_warning_or_error);
4781
4782             if (warn_disallowed_functions)
4783               warn_if_disallowed_function_p (postfix_expression);
4784
4785             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
4786             idk = CP_ID_KIND_NONE;
4787           }
4788           break;
4789
4790         case CPP_DOT:
4791         case CPP_DEREF:
4792           /* postfix-expression . template [opt] id-expression
4793              postfix-expression . pseudo-destructor-name
4794              postfix-expression -> template [opt] id-expression
4795              postfix-expression -> pseudo-destructor-name */
4796
4797           /* Consume the `.' or `->' operator.  */
4798           cp_lexer_consume_token (parser->lexer);
4799
4800           postfix_expression
4801             = cp_parser_postfix_dot_deref_expression (parser, token->type,
4802                                                       postfix_expression,
4803                                                       false, &idk,
4804                                                       token->location);
4805
4806           is_member_access = true;
4807           break;
4808
4809         case CPP_PLUS_PLUS:
4810           /* postfix-expression ++  */
4811           /* Consume the `++' token.  */
4812           cp_lexer_consume_token (parser->lexer);
4813           /* Generate a representation for the complete expression.  */
4814           postfix_expression
4815             = finish_increment_expr (postfix_expression,
4816                                      POSTINCREMENT_EXPR);
4817           /* Increments may not appear in constant-expressions.  */
4818           if (cp_parser_non_integral_constant_expression (parser,
4819                                                           "an increment"))
4820             postfix_expression = error_mark_node;
4821           idk = CP_ID_KIND_NONE;
4822           is_member_access = false;
4823           break;
4824
4825         case CPP_MINUS_MINUS:
4826           /* postfix-expression -- */
4827           /* Consume the `--' token.  */
4828           cp_lexer_consume_token (parser->lexer);
4829           /* Generate a representation for the complete expression.  */
4830           postfix_expression
4831             = finish_increment_expr (postfix_expression,
4832                                      POSTDECREMENT_EXPR);
4833           /* Decrements may not appear in constant-expressions.  */
4834           if (cp_parser_non_integral_constant_expression (parser,
4835                                                           "a decrement"))
4836             postfix_expression = error_mark_node;
4837           idk = CP_ID_KIND_NONE;
4838           is_member_access = false;
4839           break;
4840
4841         default:
4842           if (member_access_only_p)
4843             return is_member_access? postfix_expression : error_mark_node;
4844           else
4845             return postfix_expression;
4846         }
4847     }
4848
4849   /* We should never get here.  */
4850   gcc_unreachable ();
4851   return error_mark_node;
4852 }
4853
4854 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4855    by cp_parser_builtin_offsetof.  We're looking for
4856
4857      postfix-expression [ expression ]
4858
4859    FOR_OFFSETOF is set if we're being called in that context, which
4860    changes how we deal with integer constant expressions.  */
4861
4862 static tree
4863 cp_parser_postfix_open_square_expression (cp_parser *parser,
4864                                           tree postfix_expression,
4865                                           bool for_offsetof)
4866 {
4867   tree index;
4868
4869   /* Consume the `[' token.  */
4870   cp_lexer_consume_token (parser->lexer);
4871
4872   /* Parse the index expression.  */
4873   /* ??? For offsetof, there is a question of what to allow here.  If
4874      offsetof is not being used in an integral constant expression context,
4875      then we *could* get the right answer by computing the value at runtime.
4876      If we are in an integral constant expression context, then we might
4877      could accept any constant expression; hard to say without analysis.
4878      Rather than open the barn door too wide right away, allow only integer
4879      constant expressions here.  */
4880   if (for_offsetof)
4881     index = cp_parser_constant_expression (parser, false, NULL);
4882   else
4883     index = cp_parser_expression (parser, /*cast_p=*/false);
4884
4885   /* Look for the closing `]'.  */
4886   cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
4887
4888   /* Build the ARRAY_REF.  */
4889   postfix_expression = grok_array_decl (postfix_expression, index);
4890
4891   /* When not doing offsetof, array references are not permitted in
4892      constant-expressions.  */
4893   if (!for_offsetof
4894       && (cp_parser_non_integral_constant_expression
4895           (parser, "an array reference")))
4896     postfix_expression = error_mark_node;
4897
4898   return postfix_expression;
4899 }
4900
4901 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4902    by cp_parser_builtin_offsetof.  We're looking for
4903
4904      postfix-expression . template [opt] id-expression
4905      postfix-expression . pseudo-destructor-name
4906      postfix-expression -> template [opt] id-expression
4907      postfix-expression -> pseudo-destructor-name
4908
4909    FOR_OFFSETOF is set if we're being called in that context.  That sorta
4910    limits what of the above we'll actually accept, but nevermind.
4911    TOKEN_TYPE is the "." or "->" token, which will already have been
4912    removed from the stream.  */
4913
4914 static tree
4915 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
4916                                         enum cpp_ttype token_type,
4917                                         tree postfix_expression,
4918                                         bool for_offsetof, cp_id_kind *idk,
4919                                         location_t location)
4920 {
4921   tree name;
4922   bool dependent_p;
4923   bool pseudo_destructor_p;
4924   tree scope = NULL_TREE;
4925
4926   /* If this is a `->' operator, dereference the pointer.  */
4927   if (token_type == CPP_DEREF)
4928     postfix_expression = build_x_arrow (postfix_expression);
4929   /* Check to see whether or not the expression is type-dependent.  */
4930   dependent_p = type_dependent_expression_p (postfix_expression);
4931   /* The identifier following the `->' or `.' is not qualified.  */
4932   parser->scope = NULL_TREE;
4933   parser->qualifying_scope = NULL_TREE;
4934   parser->object_scope = NULL_TREE;
4935   *idk = CP_ID_KIND_NONE;
4936   /* Enter the scope corresponding to the type of the object
4937      given by the POSTFIX_EXPRESSION.  */
4938   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
4939     {
4940       scope = TREE_TYPE (postfix_expression);
4941       /* According to the standard, no expression should ever have
4942          reference type.  Unfortunately, we do not currently match
4943          the standard in this respect in that our internal representation
4944          of an expression may have reference type even when the standard
4945          says it does not.  Therefore, we have to manually obtain the
4946          underlying type here.  */
4947       scope = non_reference (scope);
4948       /* The type of the POSTFIX_EXPRESSION must be complete.  */
4949       if (scope == unknown_type_node)
4950         {
4951           error ("%H%qE does not have class type", &location, postfix_expression);
4952           scope = NULL_TREE;
4953         }
4954       else
4955         scope = complete_type_or_else (scope, NULL_TREE);
4956       /* Let the name lookup machinery know that we are processing a
4957          class member access expression.  */
4958       parser->context->object_type = scope;
4959       /* If something went wrong, we want to be able to discern that case,
4960          as opposed to the case where there was no SCOPE due to the type
4961          of expression being dependent.  */
4962       if (!scope)
4963         scope = error_mark_node;
4964       /* If the SCOPE was erroneous, make the various semantic analysis
4965          functions exit quickly -- and without issuing additional error
4966          messages.  */
4967       if (scope == error_mark_node)
4968         postfix_expression = error_mark_node;
4969     }
4970
4971   /* Assume this expression is not a pseudo-destructor access.  */
4972   pseudo_destructor_p = false;
4973
4974   /* If the SCOPE is a scalar type, then, if this is a valid program,
4975      we must be looking at a pseudo-destructor-name.  If POSTFIX_EXPRESSION
4976      is type dependent, it can be pseudo-destructor-name or something else.
4977      Try to parse it as pseudo-destructor-name first.  */
4978   if ((scope && SCALAR_TYPE_P (scope)) || dependent_p)
4979     {
4980       tree s;
4981       tree type;
4982
4983       cp_parser_parse_tentatively (parser);
4984       /* Parse the pseudo-destructor-name.  */
4985       s = NULL_TREE;
4986       cp_parser_pseudo_destructor_name (parser, &s, &type);
4987       if (dependent_p
4988           && (cp_parser_error_occurred (parser)
4989               || TREE_CODE (type) != TYPE_DECL
4990               || !SCALAR_TYPE_P (TREE_TYPE (type))))
4991         cp_parser_abort_tentative_parse (parser);
4992       else if (cp_parser_parse_definitely (parser))
4993         {
4994           pseudo_destructor_p = true;
4995           postfix_expression
4996             = finish_pseudo_destructor_expr (postfix_expression,
4997                                              s, TREE_TYPE (type));
4998         }
4999     }
5000
5001   if (!pseudo_destructor_p)
5002     {
5003       /* If the SCOPE is not a scalar type, we are looking at an
5004          ordinary class member access expression, rather than a
5005          pseudo-destructor-name.  */
5006       bool template_p;
5007       cp_token *token = cp_lexer_peek_token (parser->lexer);
5008       /* Parse the id-expression.  */
5009       name = (cp_parser_id_expression
5010               (parser,
5011                cp_parser_optional_template_keyword (parser),
5012                /*check_dependency_p=*/true,
5013                &template_p,
5014                /*declarator_p=*/false,
5015                /*optional_p=*/false));
5016       /* In general, build a SCOPE_REF if the member name is qualified.
5017          However, if the name was not dependent and has already been
5018          resolved; there is no need to build the SCOPE_REF.  For example;
5019
5020              struct X { void f(); };
5021              template <typename T> void f(T* t) { t->X::f(); }
5022
5023          Even though "t" is dependent, "X::f" is not and has been resolved
5024          to a BASELINK; there is no need to include scope information.  */
5025
5026       /* But we do need to remember that there was an explicit scope for
5027          virtual function calls.  */
5028       if (parser->scope)
5029         *idk = CP_ID_KIND_QUALIFIED;
5030
5031       /* If the name is a template-id that names a type, we will get a
5032          TYPE_DECL here.  That is invalid code.  */
5033       if (TREE_CODE (name) == TYPE_DECL)
5034         {
5035           error ("%Hinvalid use of %qD", &token->location, name);
5036           postfix_expression = error_mark_node;
5037         }
5038       else
5039         {
5040           if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
5041             {
5042               name = build_qualified_name (/*type=*/NULL_TREE,
5043                                            parser->scope,
5044                                            name,
5045                                            template_p);
5046               parser->scope = NULL_TREE;
5047               parser->qualifying_scope = NULL_TREE;
5048               parser->object_scope = NULL_TREE;
5049             }
5050           if (scope && name && BASELINK_P (name))
5051             adjust_result_of_qualified_name_lookup
5052               (name, BINFO_TYPE (BASELINK_ACCESS_BINFO (name)), scope);
5053           postfix_expression
5054             = finish_class_member_access_expr (postfix_expression, name,
5055                                                template_p, 
5056                                                tf_warning_or_error);
5057         }
5058     }
5059
5060   /* We no longer need to look up names in the scope of the object on
5061      the left-hand side of the `.' or `->' operator.  */
5062   parser->context->object_type = NULL_TREE;
5063
5064   /* Outside of offsetof, these operators may not appear in
5065      constant-expressions.  */
5066   if (!for_offsetof
5067       && (cp_parser_non_integral_constant_expression
5068           (parser, token_type == CPP_DEREF ? "%<->%>" : "%<.%>")))
5069     postfix_expression = error_mark_node;
5070
5071   return postfix_expression;
5072 }
5073
5074 /* Parse a parenthesized expression-list.
5075
5076    expression-list:
5077      assignment-expression
5078      expression-list, assignment-expression
5079
5080    attribute-list:
5081      expression-list
5082      identifier
5083      identifier, expression-list
5084
5085    CAST_P is true if this expression is the target of a cast.
5086
5087    ALLOW_EXPANSION_P is true if this expression allows expansion of an
5088    argument pack.
5089
5090    Returns a TREE_LIST.  The TREE_VALUE of each node is a
5091    representation of an assignment-expression.  Note that a TREE_LIST
5092    is returned even if there is only a single expression in the list.
5093    error_mark_node is returned if the ( and or ) are
5094    missing. NULL_TREE is returned on no expressions. The parentheses
5095    are eaten. IS_ATTRIBUTE_LIST is true if this is really an attribute
5096    list being parsed.  If NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P
5097    indicates whether or not all of the expressions in the list were
5098    constant.  */
5099
5100 static tree
5101 cp_parser_parenthesized_expression_list (cp_parser* parser,
5102                                          bool is_attribute_list,
5103                                          bool cast_p,
5104                                          bool allow_expansion_p,
5105                                          bool *non_constant_p)
5106 {
5107   tree expression_list = NULL_TREE;
5108   bool fold_expr_p = is_attribute_list;
5109   tree identifier = NULL_TREE;
5110   bool saved_greater_than_is_operator_p;
5111
5112   /* Assume all the expressions will be constant.  */
5113   if (non_constant_p)
5114     *non_constant_p = false;
5115
5116   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
5117     return error_mark_node;
5118
5119   /* Within a parenthesized expression, a `>' token is always
5120      the greater-than operator.  */
5121   saved_greater_than_is_operator_p
5122     = parser->greater_than_is_operator_p;
5123   parser->greater_than_is_operator_p = true;
5124
5125   /* Consume expressions until there are no more.  */
5126   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
5127     while (true)
5128       {
5129         tree expr;
5130
5131         /* At the beginning of attribute lists, check to see if the
5132            next token is an identifier.  */
5133         if (is_attribute_list
5134             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
5135           {
5136             cp_token *token;
5137
5138             /* Consume the identifier.  */
5139             token = cp_lexer_consume_token (parser->lexer);
5140             /* Save the identifier.  */
5141             identifier = token->u.value;
5142           }
5143         else
5144           {
5145             bool expr_non_constant_p;
5146
5147             /* Parse the next assignment-expression.  */
5148             if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
5149               {
5150                 /* A braced-init-list.  */
5151                 maybe_warn_cpp0x ("extended initializer lists");
5152                 expr = cp_parser_braced_list (parser, &expr_non_constant_p);
5153                 if (non_constant_p && expr_non_constant_p)
5154                   *non_constant_p = true;
5155               }
5156             else if (non_constant_p)
5157               {
5158                 expr = (cp_parser_constant_expression
5159                         (parser, /*allow_non_constant_p=*/true,
5160                          &expr_non_constant_p));
5161                 if (expr_non_constant_p)
5162                   *non_constant_p = true;
5163               }
5164             else
5165               expr = cp_parser_assignment_expression (parser, cast_p);
5166
5167             if (fold_expr_p)
5168               expr = fold_non_dependent_expr (expr);
5169
5170             /* If we have an ellipsis, then this is an expression
5171                expansion.  */
5172             if (allow_expansion_p
5173                 && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
5174               {
5175                 /* Consume the `...'.  */
5176                 cp_lexer_consume_token (parser->lexer);
5177
5178                 /* Build the argument pack.  */
5179                 expr = make_pack_expansion (expr);
5180               }
5181
5182              /* Add it to the list.  We add error_mark_node
5183                 expressions to the list, so that we can still tell if
5184                 the correct form for a parenthesized expression-list
5185                 is found. That gives better errors.  */
5186             expression_list = tree_cons (NULL_TREE, expr, expression_list);
5187
5188             if (expr == error_mark_node)
5189               goto skip_comma;
5190           }
5191
5192         /* After the first item, attribute lists look the same as
5193            expression lists.  */
5194         is_attribute_list = false;
5195
5196       get_comma:;
5197         /* If the next token isn't a `,', then we are done.  */
5198         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
5199           break;
5200
5201         /* Otherwise, consume the `,' and keep going.  */
5202         cp_lexer_consume_token (parser->lexer);
5203       }
5204
5205   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
5206     {
5207       int ending;
5208
5209     skip_comma:;
5210       /* We try and resync to an unnested comma, as that will give the
5211          user better diagnostics.  */
5212       ending = cp_parser_skip_to_closing_parenthesis (parser,
5213                                                       /*recovering=*/true,
5214                                                       /*or_comma=*/true,
5215                                                       /*consume_paren=*/true);
5216       if (ending < 0)
5217         goto get_comma;
5218       if (!ending)
5219         {
5220           parser->greater_than_is_operator_p
5221             = saved_greater_than_is_operator_p;
5222           return error_mark_node;
5223         }
5224     }
5225
5226   parser->greater_than_is_operator_p
5227     = saved_greater_than_is_operator_p;
5228
5229   /* We built up the list in reverse order so we must reverse it now.  */
5230   expression_list = nreverse (expression_list);
5231   if (identifier)
5232     expression_list = tree_cons (NULL_TREE, identifier, expression_list);
5233
5234   return expression_list;
5235 }
5236
5237 /* Parse a pseudo-destructor-name.
5238
5239    pseudo-destructor-name:
5240      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
5241      :: [opt] nested-name-specifier template template-id :: ~ type-name
5242      :: [opt] nested-name-specifier [opt] ~ type-name
5243
5244    If either of the first two productions is used, sets *SCOPE to the
5245    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
5246    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
5247    or ERROR_MARK_NODE if the parse fails.  */
5248
5249 static void
5250 cp_parser_pseudo_destructor_name (cp_parser* parser,
5251                                   tree* scope,
5252                                   tree* type)
5253 {
5254   bool nested_name_specifier_p;
5255
5256   /* Assume that things will not work out.  */
5257   *type = error_mark_node;
5258
5259   /* Look for the optional `::' operator.  */
5260   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
5261   /* Look for the optional nested-name-specifier.  */
5262   nested_name_specifier_p
5263     = (cp_parser_nested_name_specifier_opt (parser,
5264                                             /*typename_keyword_p=*/false,
5265                                             /*check_dependency_p=*/true,
5266                                             /*type_p=*/false,
5267                                             /*is_declaration=*/true)
5268        != NULL_TREE);
5269   /* Now, if we saw a nested-name-specifier, we might be doing the
5270      second production.  */
5271   if (nested_name_specifier_p
5272       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
5273     {
5274       /* Consume the `template' keyword.  */
5275       cp_lexer_consume_token (parser->lexer);
5276       /* Parse the template-id.  */
5277       cp_parser_template_id (parser,
5278                              /*template_keyword_p=*/true,
5279                              /*check_dependency_p=*/false,
5280                              /*is_declaration=*/true);
5281       /* Look for the `::' token.  */
5282       cp_parser_require (parser, CPP_SCOPE, "%<::%>");
5283     }
5284   /* If the next token is not a `~', then there might be some
5285      additional qualification.  */
5286   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
5287     {
5288       /* At this point, we're looking for "type-name :: ~".  The type-name
5289          must not be a class-name, since this is a pseudo-destructor.  So,
5290          it must be either an enum-name, or a typedef-name -- both of which
5291          are just identifiers.  So, we peek ahead to check that the "::"
5292          and "~" tokens are present; if they are not, then we can avoid
5293          calling type_name.  */
5294       if (cp_lexer_peek_token (parser->lexer)->type != CPP_NAME
5295           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE
5296           || cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_COMPL)
5297         {
5298           cp_parser_error (parser, "non-scalar type");
5299           return;
5300         }
5301
5302       /* Look for the type-name.  */
5303       *scope = TREE_TYPE (cp_parser_nonclass_name (parser));
5304       if (*scope == error_mark_node)
5305         return;
5306
5307       /* Look for the `::' token.  */
5308       cp_parser_require (parser, CPP_SCOPE, "%<::%>");
5309     }
5310   else
5311     *scope = NULL_TREE;
5312
5313   /* Look for the `~'.  */
5314   cp_parser_require (parser, CPP_COMPL, "%<~%>");
5315   /* Look for the type-name again.  We are not responsible for
5316      checking that it matches the first type-name.  */
5317   *type = cp_parser_nonclass_name (parser);
5318 }
5319
5320 /* Parse a unary-expression.
5321
5322    unary-expression:
5323      postfix-expression
5324      ++ cast-expression
5325      -- cast-expression
5326      unary-operator cast-expression
5327      sizeof unary-expression
5328      sizeof ( type-id )
5329      new-expression
5330      delete-expression
5331
5332    GNU Extensions:
5333
5334    unary-expression:
5335      __extension__ cast-expression
5336      __alignof__ unary-expression
5337      __alignof__ ( type-id )
5338      __real__ cast-expression
5339      __imag__ cast-expression
5340      && identifier
5341
5342    ADDRESS_P is true iff the unary-expression is appearing as the
5343    operand of the `&' operator.   CAST_P is true if this expression is
5344    the target of a cast.
5345
5346    Returns a representation of the expression.  */
5347
5348 static tree
5349 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p)
5350 {
5351   cp_token *token;
5352   enum tree_code unary_operator;
5353
5354   /* Peek at the next token.  */
5355   token = cp_lexer_peek_token (parser->lexer);
5356   /* Some keywords give away the kind of expression.  */
5357   if (token->type == CPP_KEYWORD)
5358     {
5359       enum rid keyword = token->keyword;
5360
5361       switch (keyword)
5362         {
5363         case RID_ALIGNOF:
5364         case RID_SIZEOF:
5365           {
5366             tree operand;
5367             enum tree_code op;
5368
5369             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
5370             /* Consume the token.  */
5371             cp_lexer_consume_token (parser->lexer);
5372             /* Parse the operand.  */
5373             operand = cp_parser_sizeof_operand (parser, keyword);
5374
5375             if (TYPE_P (operand))
5376               return cxx_sizeof_or_alignof_type (operand, op, true);
5377             else
5378               return cxx_sizeof_or_alignof_expr (operand, op, true);
5379           }
5380
5381         case RID_NEW:
5382           return cp_parser_new_expression (parser);
5383
5384         case RID_DELETE:
5385           return cp_parser_delete_expression (parser);
5386
5387         case RID_EXTENSION:
5388           {
5389             /* The saved value of the PEDANTIC flag.  */
5390             int saved_pedantic;
5391             tree expr;
5392
5393             /* Save away the PEDANTIC flag.  */
5394             cp_parser_extension_opt (parser, &saved_pedantic);
5395             /* Parse the cast-expression.  */
5396             expr = cp_parser_simple_cast_expression (parser);
5397             /* Restore the PEDANTIC flag.  */
5398             pedantic = saved_pedantic;
5399
5400             return expr;
5401           }
5402
5403         case RID_REALPART:
5404         case RID_IMAGPART:
5405           {
5406             tree expression;
5407
5408             /* Consume the `__real__' or `__imag__' token.  */
5409             cp_lexer_consume_token (parser->lexer);
5410             /* Parse the cast-expression.  */
5411             expression = cp_parser_simple_cast_expression (parser);
5412             /* Create the complete representation.  */
5413             return build_x_unary_op ((keyword == RID_REALPART
5414                                       ? REALPART_EXPR : IMAGPART_EXPR),
5415                                      expression,
5416                                      tf_warning_or_error);
5417           }
5418           break;
5419
5420         default:
5421           break;
5422         }
5423     }
5424
5425   /* Look for the `:: new' and `:: delete', which also signal the
5426      beginning of a new-expression, or delete-expression,
5427      respectively.  If the next token is `::', then it might be one of
5428      these.  */
5429   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
5430     {
5431       enum rid keyword;
5432
5433       /* See if the token after the `::' is one of the keywords in
5434          which we're interested.  */
5435       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
5436       /* If it's `new', we have a new-expression.  */
5437       if (keyword == RID_NEW)
5438         return cp_parser_new_expression (parser);
5439       /* Similarly, for `delete'.  */
5440       else if (keyword == RID_DELETE)
5441         return cp_parser_delete_expression (parser);
5442     }
5443
5444   /* Look for a unary operator.  */
5445   unary_operator = cp_parser_unary_operator (token);
5446   /* The `++' and `--' operators can be handled similarly, even though
5447      they are not technically unary-operators in the grammar.  */
5448   if (unary_operator == ERROR_MARK)
5449     {
5450       if (token->type == CPP_PLUS_PLUS)
5451         unary_operator = PREINCREMENT_EXPR;
5452       else if (token->type == CPP_MINUS_MINUS)
5453         unary_operator = PREDECREMENT_EXPR;
5454       /* Handle the GNU address-of-label extension.  */
5455       else if (cp_parser_allow_gnu_extensions_p (parser)
5456                && token->type == CPP_AND_AND)
5457         {
5458           tree identifier;
5459           tree expression;
5460           location_t loc = cp_lexer_peek_token (parser->lexer)->location;
5461
5462           /* Consume the '&&' token.  */
5463           cp_lexer_consume_token (parser->lexer);
5464           /* Look for the identifier.  */
5465           identifier = cp_parser_identifier (parser);
5466           /* Create an expression representing the address.  */
5467           expression = finish_label_address_expr (identifier, loc);
5468           if (cp_parser_non_integral_constant_expression (parser,
5469                                                 "the address of a label"))
5470             expression = error_mark_node;
5471           return expression;
5472         }
5473     }
5474   if (unary_operator != ERROR_MARK)
5475     {
5476       tree cast_expression;
5477       tree expression = error_mark_node;
5478       const char *non_constant_p = NULL;
5479
5480       /* Consume the operator token.  */
5481       token = cp_lexer_consume_token (parser->lexer);
5482       /* Parse the cast-expression.  */
5483       cast_expression
5484         = cp_parser_cast_expression (parser,
5485                                      unary_operator == ADDR_EXPR,
5486                                      /*cast_p=*/false);
5487       /* Now, build an appropriate representation.  */
5488       switch (unary_operator)
5489         {
5490         case INDIRECT_REF:
5491           non_constant_p = "%<*%>";
5492           expression = build_x_indirect_ref (cast_expression, "unary *",
5493                                              tf_warning_or_error);
5494           break;
5495
5496         case ADDR_EXPR:
5497           non_constant_p = "%<&%>";
5498           /* Fall through.  */
5499         case BIT_NOT_EXPR:
5500           expression = build_x_unary_op (unary_operator, cast_expression,
5501                                          tf_warning_or_error);
5502           break;
5503
5504         case PREINCREMENT_EXPR:
5505         case PREDECREMENT_EXPR:
5506           non_constant_p = (unary_operator == PREINCREMENT_EXPR
5507                             ? "%<++%>" : "%<--%>");
5508           /* Fall through.  */
5509         case UNARY_PLUS_EXPR:
5510         case NEGATE_EXPR:
5511         case TRUTH_NOT_EXPR:
5512           expression = finish_unary_op_expr (unary_operator, cast_expression);
5513           break;
5514
5515         default:
5516           gcc_unreachable ();
5517         }
5518
5519       if (non_constant_p
5520           && cp_parser_non_integral_constant_expression (parser,
5521                                                          non_constant_p))
5522         expression = error_mark_node;
5523
5524       return expression;
5525     }
5526
5527   return cp_parser_postfix_expression (parser, address_p, cast_p,
5528                                        /*member_access_only_p=*/false);
5529 }
5530
5531 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
5532    unary-operator, the corresponding tree code is returned.  */
5533
5534 static enum tree_code
5535 cp_parser_unary_operator (cp_token* token)
5536 {
5537   switch (token->type)
5538     {
5539     case CPP_MULT:
5540       return INDIRECT_REF;
5541
5542     case CPP_AND:
5543       return ADDR_EXPR;
5544
5545     case CPP_PLUS:
5546       return UNARY_PLUS_EXPR;
5547
5548     case CPP_MINUS:
5549       return NEGATE_EXPR;
5550
5551     case CPP_NOT:
5552       return TRUTH_NOT_EXPR;
5553
5554     case CPP_COMPL:
5555       return BIT_NOT_EXPR;
5556
5557     default:
5558       return ERROR_MARK;
5559     }
5560 }
5561
5562 /* Parse a new-expression.
5563
5564    new-expression:
5565      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
5566      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
5567
5568    Returns a representation of the expression.  */
5569
5570 static tree
5571 cp_parser_new_expression (cp_parser* parser)
5572 {
5573   bool global_scope_p;
5574   tree placement;
5575   tree type;
5576   tree initializer;
5577   tree nelts;
5578
5579   /* Look for the optional `::' operator.  */
5580   global_scope_p
5581     = (cp_parser_global_scope_opt (parser,
5582                                    /*current_scope_valid_p=*/false)
5583        != NULL_TREE);
5584   /* Look for the `new' operator.  */
5585   cp_parser_require_keyword (parser, RID_NEW, "%<new%>");
5586   /* There's no easy way to tell a new-placement from the
5587      `( type-id )' construct.  */
5588   cp_parser_parse_tentatively (parser);
5589   /* Look for a new-placement.  */
5590   placement = cp_parser_new_placement (parser);
5591   /* If that didn't work out, there's no new-placement.  */
5592   if (!cp_parser_parse_definitely (parser))
5593     placement = NULL_TREE;
5594
5595   /* If the next token is a `(', then we have a parenthesized
5596      type-id.  */
5597   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5598     {
5599       cp_token *token;
5600       /* Consume the `('.  */
5601       cp_lexer_consume_token (parser->lexer);
5602       /* Parse the type-id.  */
5603       type = cp_parser_type_id (parser);
5604       /* Look for the closing `)'.  */
5605       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
5606       token = cp_lexer_peek_token (parser->lexer);
5607       /* There should not be a direct-new-declarator in this production,
5608          but GCC used to allowed this, so we check and emit a sensible error
5609          message for this case.  */
5610       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5611         {
5612           error ("%Harray bound forbidden after parenthesized type-id",
5613                  &token->location);
5614           inform (token->location, 
5615                   "try removing the parentheses around the type-id");
5616           cp_parser_direct_new_declarator (parser);
5617         }
5618       nelts = NULL_TREE;
5619     }
5620   /* Otherwise, there must be a new-type-id.  */
5621   else
5622     type = cp_parser_new_type_id (parser, &nelts);
5623
5624   /* If the next token is a `(' or '{', then we have a new-initializer.  */
5625   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
5626       || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
5627     initializer = cp_parser_new_initializer (parser);
5628   else
5629     initializer = NULL_TREE;
5630
5631   /* A new-expression may not appear in an integral constant
5632      expression.  */
5633   if (cp_parser_non_integral_constant_expression (parser, "%<new%>"))
5634     return error_mark_node;
5635
5636   /* Create a representation of the new-expression.  */
5637   return build_new (placement, type, nelts, initializer, global_scope_p,
5638                     tf_warning_or_error);
5639 }
5640
5641 /* Parse a new-placement.
5642
5643    new-placement:
5644      ( expression-list )
5645
5646    Returns the same representation as for an expression-list.  */
5647
5648 static tree
5649 cp_parser_new_placement (cp_parser* parser)
5650 {
5651   tree expression_list;
5652
5653   /* Parse the expression-list.  */
5654   expression_list = (cp_parser_parenthesized_expression_list
5655                      (parser, false, /*cast_p=*/false, /*allow_expansion_p=*/true,
5656                       /*non_constant_p=*/NULL));
5657
5658   return expression_list;
5659 }
5660
5661 /* Parse a new-type-id.
5662
5663    new-type-id:
5664      type-specifier-seq new-declarator [opt]
5665
5666    Returns the TYPE allocated.  If the new-type-id indicates an array
5667    type, *NELTS is set to the number of elements in the last array
5668    bound; the TYPE will not include the last array bound.  */
5669
5670 static tree
5671 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
5672 {
5673   cp_decl_specifier_seq type_specifier_seq;
5674   cp_declarator *new_declarator;
5675   cp_declarator *declarator;
5676   cp_declarator *outer_declarator;
5677   const char *saved_message;
5678   tree type;
5679
5680   /* The type-specifier sequence must not contain type definitions.
5681      (It cannot contain declarations of new types either, but if they
5682      are not definitions we will catch that because they are not
5683      complete.)  */
5684   saved_message = parser->type_definition_forbidden_message;
5685   parser->type_definition_forbidden_message
5686     = "types may not be defined in a new-type-id";
5687   /* Parse the type-specifier-seq.  */
5688   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
5689                                 &type_specifier_seq);
5690   /* Restore the old message.  */
5691   parser->type_definition_forbidden_message = saved_message;
5692   /* Parse the new-declarator.  */
5693   new_declarator = cp_parser_new_declarator_opt (parser);
5694
5695   /* Determine the number of elements in the last array dimension, if
5696      any.  */
5697   *nelts = NULL_TREE;
5698   /* Skip down to the last array dimension.  */
5699   declarator = new_declarator;
5700   outer_declarator = NULL;
5701   while (declarator && (declarator->kind == cdk_pointer
5702                         || declarator->kind == cdk_ptrmem))
5703     {
5704       outer_declarator = declarator;
5705       declarator = declarator->declarator;
5706     }
5707   while (declarator
5708          && declarator->kind == cdk_array
5709          && declarator->declarator
5710          && declarator->declarator->kind == cdk_array)
5711     {
5712       outer_declarator = declarator;
5713       declarator = declarator->declarator;
5714     }
5715
5716   if (declarator && declarator->kind == cdk_array)
5717     {
5718       *nelts = declarator->u.array.bounds;
5719       if (*nelts == error_mark_node)
5720         *nelts = integer_one_node;
5721
5722       if (outer_declarator)
5723         outer_declarator->declarator = declarator->declarator;
5724       else
5725         new_declarator = NULL;
5726     }
5727
5728   type = groktypename (&type_specifier_seq, new_declarator);
5729   return type;
5730 }
5731
5732 /* Parse an (optional) new-declarator.
5733
5734    new-declarator:
5735      ptr-operator new-declarator [opt]
5736      direct-new-declarator
5737
5738    Returns the declarator.  */
5739
5740 static cp_declarator *
5741 cp_parser_new_declarator_opt (cp_parser* parser)
5742 {
5743   enum tree_code code;
5744   tree type;
5745   cp_cv_quals cv_quals;
5746
5747   /* We don't know if there's a ptr-operator next, or not.  */
5748   cp_parser_parse_tentatively (parser);
5749   /* Look for a ptr-operator.  */
5750   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
5751   /* If that worked, look for more new-declarators.  */
5752   if (cp_parser_parse_definitely (parser))
5753     {
5754       cp_declarator *declarator;
5755
5756       /* Parse another optional declarator.  */
5757       declarator = cp_parser_new_declarator_opt (parser);
5758
5759       return cp_parser_make_indirect_declarator
5760         (code, type, cv_quals, declarator);
5761     }
5762
5763   /* If the next token is a `[', there is a direct-new-declarator.  */
5764   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5765     return cp_parser_direct_new_declarator (parser);
5766
5767   return NULL;
5768 }
5769
5770 /* Parse a direct-new-declarator.
5771
5772    direct-new-declarator:
5773      [ expression ]
5774      direct-new-declarator [constant-expression]
5775
5776    */
5777
5778 static cp_declarator *
5779 cp_parser_direct_new_declarator (cp_parser* parser)
5780 {
5781   cp_declarator *declarator = NULL;
5782
5783   while (true)
5784     {
5785       tree expression;
5786
5787       /* Look for the opening `['.  */
5788       cp_parser_require (parser, CPP_OPEN_SQUARE, "%<[%>");
5789       /* The first expression is not required to be constant.  */
5790       if (!declarator)
5791         {
5792           cp_token *token = cp_lexer_peek_token (parser->lexer);
5793           expression = cp_parser_expression (parser, /*cast_p=*/false);
5794           /* The standard requires that the expression have integral
5795              type.  DR 74 adds enumeration types.  We believe that the
5796              real intent is that these expressions be handled like the
5797              expression in a `switch' condition, which also allows
5798              classes with a single conversion to integral or
5799              enumeration type.  */
5800           if (!processing_template_decl)
5801             {
5802               expression
5803                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5804                                               expression,
5805                                               /*complain=*/true);
5806               if (!expression)
5807                 {
5808                   error ("%Hexpression in new-declarator must have integral "
5809                          "or enumeration type", &token->location);
5810                   expression = error_mark_node;
5811                 }
5812             }
5813         }
5814       /* But all the other expressions must be.  */
5815       else
5816         expression
5817           = cp_parser_constant_expression (parser,
5818                                            /*allow_non_constant=*/false,
5819                                            NULL);
5820       /* Look for the closing `]'.  */
5821       cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
5822
5823       /* Add this bound to the declarator.  */
5824       declarator = make_array_declarator (declarator, expression);
5825
5826       /* If the next token is not a `[', then there are no more
5827          bounds.  */
5828       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
5829         break;
5830     }
5831
5832   return declarator;
5833 }
5834
5835 /* Parse a new-initializer.
5836
5837    new-initializer:
5838      ( expression-list [opt] )
5839      braced-init-list
5840
5841    Returns a representation of the expression-list.  If there is no
5842    expression-list, VOID_ZERO_NODE is returned.  */
5843
5844 static tree
5845 cp_parser_new_initializer (cp_parser* parser)
5846 {
5847   tree expression_list;
5848
5849   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
5850     {
5851       bool expr_non_constant_p;
5852       maybe_warn_cpp0x ("extended initializer lists");
5853       expression_list = cp_parser_braced_list (parser, &expr_non_constant_p);
5854       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
5855       expression_list = build_tree_list (NULL_TREE, expression_list);
5856     }
5857   else
5858     expression_list = (cp_parser_parenthesized_expression_list
5859                        (parser, false, /*cast_p=*/false, /*allow_expansion_p=*/true,
5860                         /*non_constant_p=*/NULL));
5861   if (!expression_list)
5862     expression_list = void_zero_node;
5863
5864   return expression_list;
5865 }
5866
5867 /* Parse a delete-expression.
5868
5869    delete-expression:
5870      :: [opt] delete cast-expression
5871      :: [opt] delete [ ] cast-expression
5872
5873    Returns a representation of the expression.  */
5874
5875 static tree
5876 cp_parser_delete_expression (cp_parser* parser)
5877 {
5878   bool global_scope_p;
5879   bool array_p;
5880   tree expression;
5881
5882   /* Look for the optional `::' operator.  */
5883   global_scope_p
5884     = (cp_parser_global_scope_opt (parser,
5885                                    /*current_scope_valid_p=*/false)
5886        != NULL_TREE);
5887   /* Look for the `delete' keyword.  */
5888   cp_parser_require_keyword (parser, RID_DELETE, "%<delete%>");
5889   /* See if the array syntax is in use.  */
5890   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5891     {
5892       /* Consume the `[' token.  */
5893       cp_lexer_consume_token (parser->lexer);
5894       /* Look for the `]' token.  */
5895       cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
5896       /* Remember that this is the `[]' construct.  */
5897       array_p = true;
5898     }
5899   else
5900     array_p = false;
5901
5902   /* Parse the cast-expression.  */
5903   expression = cp_parser_simple_cast_expression (parser);
5904
5905   /* A delete-expression may not appear in an integral constant
5906      expression.  */
5907   if (cp_parser_non_integral_constant_expression (parser, "%<delete%>"))
5908     return error_mark_node;
5909
5910   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p);
5911 }
5912
5913 /* Returns true if TOKEN may start a cast-expression and false
5914    otherwise.  */
5915
5916 static bool
5917 cp_parser_token_starts_cast_expression (cp_token *token)
5918 {
5919   switch (token->type)
5920     {
5921     case CPP_COMMA:
5922     case CPP_SEMICOLON:
5923     case CPP_QUERY:
5924     case CPP_COLON:
5925     case CPP_CLOSE_SQUARE:
5926     case CPP_CLOSE_PAREN:
5927     case CPP_CLOSE_BRACE:
5928     case CPP_DOT:
5929     case CPP_DOT_STAR:
5930     case CPP_DEREF:
5931     case CPP_DEREF_STAR:
5932     case CPP_DIV:
5933     case CPP_MOD:
5934     case CPP_LSHIFT:
5935     case CPP_RSHIFT:
5936     case CPP_LESS:
5937     case CPP_GREATER:
5938     case CPP_LESS_EQ:
5939     case CPP_GREATER_EQ:
5940     case CPP_EQ_EQ:
5941     case CPP_NOT_EQ:
5942     case CPP_EQ:
5943     case CPP_MULT_EQ:
5944     case CPP_DIV_EQ:
5945     case CPP_MOD_EQ:
5946     case CPP_PLUS_EQ:
5947     case CPP_MINUS_EQ:
5948     case CPP_RSHIFT_EQ:
5949     case CPP_LSHIFT_EQ:
5950     case CPP_AND_EQ:
5951     case CPP_XOR_EQ:
5952     case CPP_OR_EQ:
5953     case CPP_XOR:
5954     case CPP_OR:
5955     case CPP_OR_OR:
5956       return false;
5957
5958       /* '[' may start a primary-expression in obj-c++.  */
5959     case CPP_OPEN_SQUARE:
5960       return c_dialect_objc ();
5961
5962     default:
5963       return true;
5964     }
5965 }
5966
5967 /* Parse a cast-expression.
5968
5969    cast-expression:
5970      unary-expression
5971      ( type-id ) cast-expression
5972
5973    ADDRESS_P is true iff the unary-expression is appearing as the
5974    operand of the `&' operator.   CAST_P is true if this expression is
5975    the target of a cast.
5976
5977    Returns a representation of the expression.  */
5978
5979 static tree
5980 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p)
5981 {
5982   /* If it's a `(', then we might be looking at a cast.  */
5983   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5984     {
5985       tree type = NULL_TREE;
5986       tree expr = NULL_TREE;
5987       bool compound_literal_p;
5988       const char *saved_message;
5989
5990       /* There's no way to know yet whether or not this is a cast.
5991          For example, `(int (3))' is a unary-expression, while `(int)
5992          3' is a cast.  So, we resort to parsing tentatively.  */
5993       cp_parser_parse_tentatively (parser);
5994       /* Types may not be defined in a cast.  */
5995       saved_message = parser->type_definition_forbidden_message;
5996       parser->type_definition_forbidden_message
5997         = "types may not be defined in casts";
5998       /* Consume the `('.  */
5999       cp_lexer_consume_token (parser->lexer);
6000       /* A very tricky bit is that `(struct S) { 3 }' is a
6001          compound-literal (which we permit in C++ as an extension).
6002          But, that construct is not a cast-expression -- it is a
6003          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
6004          is legal; if the compound-literal were a cast-expression,
6005          you'd need an extra set of parentheses.)  But, if we parse
6006          the type-id, and it happens to be a class-specifier, then we
6007          will commit to the parse at that point, because we cannot
6008          undo the action that is done when creating a new class.  So,
6009          then we cannot back up and do a postfix-expression.
6010
6011          Therefore, we scan ahead to the closing `)', and check to see
6012          if the token after the `)' is a `{'.  If so, we are not
6013          looking at a cast-expression.
6014
6015          Save tokens so that we can put them back.  */
6016       cp_lexer_save_tokens (parser->lexer);
6017       /* Skip tokens until the next token is a closing parenthesis.
6018          If we find the closing `)', and the next token is a `{', then
6019          we are looking at a compound-literal.  */
6020       compound_literal_p
6021         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
6022                                                   /*consume_paren=*/true)
6023            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
6024       /* Roll back the tokens we skipped.  */
6025       cp_lexer_rollback_tokens (parser->lexer);
6026       /* If we were looking at a compound-literal, simulate an error
6027          so that the call to cp_parser_parse_definitely below will
6028          fail.  */
6029       if (compound_literal_p)
6030         cp_parser_simulate_error (parser);
6031       else
6032         {
6033           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
6034           parser->in_type_id_in_expr_p = true;
6035           /* Look for the type-id.  */
6036           type = cp_parser_type_id (parser);
6037           /* Look for the closing `)'.  */
6038           cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
6039           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
6040         }
6041
6042       /* Restore the saved message.  */
6043       parser->type_definition_forbidden_message = saved_message;
6044
6045       /* At this point this can only be either a cast or a
6046          parenthesized ctor such as `(T ())' that looks like a cast to
6047          function returning T.  */
6048       if (!cp_parser_error_occurred (parser)
6049           && cp_parser_token_starts_cast_expression (cp_lexer_peek_token
6050                                                      (parser->lexer)))
6051         {
6052           cp_parser_parse_definitely (parser);
6053           expr = cp_parser_cast_expression (parser,
6054                                             /*address_p=*/false,
6055                                             /*cast_p=*/true);
6056
6057           /* Warn about old-style casts, if so requested.  */
6058           if (warn_old_style_cast
6059               && !in_system_header
6060               && !VOID_TYPE_P (type)
6061               && current_lang_name != lang_name_c)
6062             warning (OPT_Wold_style_cast, "use of old-style cast");
6063
6064           /* Only type conversions to integral or enumeration types
6065              can be used in constant-expressions.  */
6066           if (!cast_valid_in_integral_constant_expression_p (type)
6067               && (cp_parser_non_integral_constant_expression
6068                   (parser,
6069                    "a cast to a type other than an integral or "
6070                    "enumeration type")))
6071             return error_mark_node;
6072
6073           /* Perform the cast.  */
6074           expr = build_c_cast (type, expr);
6075           return expr;
6076         }
6077       else 
6078         cp_parser_abort_tentative_parse (parser);
6079     }
6080
6081   /* If we get here, then it's not a cast, so it must be a
6082      unary-expression.  */
6083   return cp_parser_unary_expression (parser, address_p, cast_p);
6084 }
6085
6086 /* Parse a binary expression of the general form:
6087
6088    pm-expression:
6089      cast-expression
6090      pm-expression .* cast-expression
6091      pm-expression ->* cast-expression
6092
6093    multiplicative-expression:
6094      pm-expression
6095      multiplicative-expression * pm-expression
6096      multiplicative-expression / pm-expression
6097      multiplicative-expression % pm-expression
6098
6099    additive-expression:
6100      multiplicative-expression
6101      additive-expression + multiplicative-expression
6102      additive-expression - multiplicative-expression
6103
6104    shift-expression:
6105      additive-expression
6106      shift-expression << additive-expression
6107      shift-expression >> additive-expression
6108
6109    relational-expression:
6110      shift-expression
6111      relational-expression < shift-expression
6112      relational-expression > shift-expression
6113      relational-expression <= shift-expression
6114      relational-expression >= shift-expression
6115
6116   GNU Extension:
6117
6118    relational-expression:
6119      relational-expression <? shift-expression
6120      relational-expression >? shift-expression
6121
6122    equality-expression:
6123      relational-expression
6124      equality-expression == relational-expression
6125      equality-expression != relational-expression
6126
6127    and-expression:
6128      equality-expression
6129      and-expression & equality-expression
6130
6131    exclusive-or-expression:
6132      and-expression
6133      exclusive-or-expression ^ and-expression
6134
6135    inclusive-or-expression:
6136      exclusive-or-expression
6137      inclusive-or-expression | exclusive-or-expression
6138
6139    logical-and-expression:
6140      inclusive-or-expression
6141      logical-and-expression && inclusive-or-expression
6142
6143    logical-or-expression:
6144      logical-and-expression
6145      logical-or-expression || logical-and-expression
6146
6147    All these are implemented with a single function like:
6148
6149    binary-expression:
6150      simple-cast-expression
6151      binary-expression <token> binary-expression
6152
6153    CAST_P is true if this expression is the target of a cast.
6154
6155    The binops_by_token map is used to get the tree codes for each <token> type.
6156    binary-expressions are associated according to a precedence table.  */
6157
6158 #define TOKEN_PRECEDENCE(token)                              \
6159 (((token->type == CPP_GREATER                                \
6160    || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT)) \
6161   && !parser->greater_than_is_operator_p)                    \
6162  ? PREC_NOT_OPERATOR                                         \
6163  : binops_by_token[token->type].prec)
6164
6165 static tree
6166 cp_parser_binary_expression (cp_parser* parser, bool cast_p,
6167                              enum cp_parser_prec prec)
6168 {
6169   cp_parser_expression_stack stack;
6170   cp_parser_expression_stack_entry *sp = &stack[0];
6171   tree lhs, rhs;
6172   cp_token *token;
6173   enum tree_code tree_type, lhs_type, rhs_type;
6174   enum cp_parser_prec new_prec, lookahead_prec;
6175   bool overloaded_p;
6176
6177   /* Parse the first expression.  */
6178   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p);
6179   lhs_type = ERROR_MARK;
6180
6181   for (;;)
6182     {
6183       /* Get an operator token.  */
6184       token = cp_lexer_peek_token (parser->lexer);
6185
6186       if (warn_cxx0x_compat
6187           && token->type == CPP_RSHIFT
6188           && !parser->greater_than_is_operator_p)
6189         {
6190           warning (OPT_Wc__0x_compat, 
6191                    "%H%<>>%> operator will be treated as two right angle brackets in C++0x", 
6192                    &token->location);
6193           warning (OPT_Wc__0x_compat, 
6194                    "suggest parentheses around %<>>%> expression");
6195         }
6196
6197       new_prec = TOKEN_PRECEDENCE (token);
6198
6199       /* Popping an entry off the stack means we completed a subexpression:
6200          - either we found a token which is not an operator (`>' where it is not
6201            an operator, or prec == PREC_NOT_OPERATOR), in which case popping
6202            will happen repeatedly;
6203          - or, we found an operator which has lower priority.  This is the case
6204            where the recursive descent *ascends*, as in `3 * 4 + 5' after
6205            parsing `3 * 4'.  */
6206       if (new_prec <= prec)
6207         {
6208           if (sp == stack)
6209             break;
6210           else
6211             goto pop;
6212         }
6213
6214      get_rhs:
6215       tree_type = binops_by_token[token->type].tree_type;
6216
6217       /* We used the operator token.  */
6218       cp_lexer_consume_token (parser->lexer);
6219
6220       /* Extract another operand.  It may be the RHS of this expression
6221          or the LHS of a new, higher priority expression.  */
6222       rhs = cp_parser_simple_cast_expression (parser);
6223       rhs_type = ERROR_MARK;
6224
6225       /* Get another operator token.  Look up its precedence to avoid
6226          building a useless (immediately popped) stack entry for common
6227          cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
6228       token = cp_lexer_peek_token (parser->lexer);
6229       lookahead_prec = TOKEN_PRECEDENCE (token);
6230       if (lookahead_prec > new_prec)
6231         {
6232           /* ... and prepare to parse the RHS of the new, higher priority
6233              expression.  Since precedence levels on the stack are
6234              monotonically increasing, we do not have to care about
6235              stack overflows.  */
6236           sp->prec = prec;
6237           sp->tree_type = tree_type;
6238           sp->lhs = lhs;
6239           sp->lhs_type = lhs_type;
6240           sp++;
6241           lhs = rhs;
6242           lhs_type = rhs_type;
6243           prec = new_prec;
6244           new_prec = lookahead_prec;
6245           goto get_rhs;
6246
6247          pop:
6248           /* If the stack is not empty, we have parsed into LHS the right side
6249              (`4' in the example above) of an expression we had suspended.
6250              We can use the information on the stack to recover the LHS (`3')
6251              from the stack together with the tree code (`MULT_EXPR'), and
6252              the precedence of the higher level subexpression
6253              (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
6254              which will be used to actually build the additive expression.  */
6255           --sp;
6256           prec = sp->prec;
6257           tree_type = sp->tree_type;
6258           rhs = lhs;
6259           rhs_type = lhs_type;
6260           lhs = sp->lhs;
6261           lhs_type = sp->lhs_type;
6262         }
6263
6264       overloaded_p = false;
6265       /* ??? Currently we pass lhs_type == ERROR_MARK and rhs_type ==
6266          ERROR_MARK for everything that is not a binary expression.
6267          This makes warn_about_parentheses miss some warnings that
6268          involve unary operators.  For unary expressions we should
6269          pass the correct tree_code unless the unary expression was
6270          surrounded by parentheses.
6271       */
6272       lhs = build_x_binary_op (tree_type, lhs, lhs_type, rhs, rhs_type,
6273                                &overloaded_p, tf_warning_or_error);
6274       lhs_type = tree_type;
6275
6276       /* If the binary operator required the use of an overloaded operator,
6277          then this expression cannot be an integral constant-expression.
6278          An overloaded operator can be used even if both operands are
6279          otherwise permissible in an integral constant-expression if at
6280          least one of the operands is of enumeration type.  */
6281
6282       if (overloaded_p
6283           && (cp_parser_non_integral_constant_expression
6284               (parser, "calls to overloaded operators")))
6285         return error_mark_node;
6286     }
6287
6288   return lhs;
6289 }
6290
6291
6292 /* Parse the `? expression : assignment-expression' part of a
6293    conditional-expression.  The LOGICAL_OR_EXPR is the
6294    logical-or-expression that started the conditional-expression.
6295    Returns a representation of the entire conditional-expression.
6296
6297    This routine is used by cp_parser_assignment_expression.
6298
6299      ? expression : assignment-expression
6300
6301    GNU Extensions:
6302
6303      ? : assignment-expression */
6304
6305 static tree
6306 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
6307 {
6308   tree expr;
6309   tree assignment_expr;
6310
6311   /* Consume the `?' token.  */
6312   cp_lexer_consume_token (parser->lexer);
6313   if (cp_parser_allow_gnu_extensions_p (parser)
6314       && cp_lexer_next_token_is (parser->lexer, CPP_COLON))
6315     /* Implicit true clause.  */
6316     expr = NULL_TREE;
6317   else
6318     /* Parse the expression.  */
6319     expr = cp_parser_expression (parser, /*cast_p=*/false);
6320
6321   /* The next token should be a `:'.  */
6322   cp_parser_require (parser, CPP_COLON, "%<:%>");
6323   /* Parse the assignment-expression.  */
6324   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false);
6325
6326   /* Build the conditional-expression.  */
6327   return build_x_conditional_expr (logical_or_expr,
6328                                    expr,
6329                                    assignment_expr,
6330                                    tf_warning_or_error);
6331 }
6332
6333 /* Parse an assignment-expression.
6334
6335    assignment-expression:
6336      conditional-expression
6337      logical-or-expression assignment-operator assignment_expression
6338      throw-expression
6339
6340    CAST_P is true if this expression is the target of a cast.
6341
6342    Returns a representation for the expression.  */
6343
6344 static tree
6345 cp_parser_assignment_expression (cp_parser* parser, bool cast_p)
6346 {
6347   tree expr;
6348
6349   /* If the next token is the `throw' keyword, then we're looking at
6350      a throw-expression.  */
6351   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
6352     expr = cp_parser_throw_expression (parser);
6353   /* Otherwise, it must be that we are looking at a
6354      logical-or-expression.  */
6355   else
6356     {
6357       /* Parse the binary expressions (logical-or-expression).  */
6358       expr = cp_parser_binary_expression (parser, cast_p, PREC_NOT_OPERATOR);
6359       /* If the next token is a `?' then we're actually looking at a
6360          conditional-expression.  */
6361       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
6362         return cp_parser_question_colon_clause (parser, expr);
6363       else
6364         {
6365           enum tree_code assignment_operator;
6366
6367           /* If it's an assignment-operator, we're using the second
6368              production.  */
6369           assignment_operator
6370             = cp_parser_assignment_operator_opt (parser);
6371           if (assignment_operator != ERROR_MARK)
6372             {
6373               bool non_constant_p;
6374
6375               /* Parse the right-hand side of the assignment.  */
6376               tree rhs = cp_parser_initializer_clause (parser, &non_constant_p);
6377
6378               if (BRACE_ENCLOSED_INITIALIZER_P (rhs))
6379                 maybe_warn_cpp0x ("extended initializer lists");
6380
6381               /* An assignment may not appear in a
6382                  constant-expression.  */
6383               if (cp_parser_non_integral_constant_expression (parser,
6384                                                               "an assignment"))
6385                 return error_mark_node;
6386               /* Build the assignment expression.  */
6387               expr = build_x_modify_expr (expr,
6388                                           assignment_operator,
6389                                           rhs,
6390                                           tf_warning_or_error);
6391             }
6392         }
6393     }
6394
6395   return expr;
6396 }
6397
6398 /* Parse an (optional) assignment-operator.
6399
6400    assignment-operator: one of
6401      = *= /= %= += -= >>= <<= &= ^= |=
6402
6403    GNU Extension:
6404
6405    assignment-operator: one of
6406      <?= >?=
6407
6408    If the next token is an assignment operator, the corresponding tree
6409    code is returned, and the token is consumed.  For example, for
6410    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
6411    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
6412    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
6413    operator, ERROR_MARK is returned.  */
6414
6415 static enum tree_code
6416 cp_parser_assignment_operator_opt (cp_parser* parser)
6417 {
6418   enum tree_code op;
6419   cp_token *token;
6420
6421   /* Peek at the next token.  */
6422   token = cp_lexer_peek_token (parser->lexer);
6423
6424   switch (token->type)
6425     {
6426     case CPP_EQ:
6427       op = NOP_EXPR;
6428       break;
6429
6430     case CPP_MULT_EQ:
6431       op = MULT_EXPR;
6432       break;
6433
6434     case CPP_DIV_EQ:
6435       op = TRUNC_DIV_EXPR;
6436       break;
6437
6438     case CPP_MOD_EQ:
6439       op = TRUNC_MOD_EXPR;
6440       break;
6441
6442     case CPP_PLUS_EQ:
6443       op = PLUS_EXPR;
6444       break;
6445
6446     case CPP_MINUS_EQ:
6447       op = MINUS_EXPR;
6448       break;
6449
6450     case CPP_RSHIFT_EQ:
6451       op = RSHIFT_EXPR;
6452       break;
6453
6454     case CPP_LSHIFT_EQ:
6455       op = LSHIFT_EXPR;
6456       break;
6457
6458     case CPP_AND_EQ:
6459       op = BIT_AND_EXPR;
6460       break;
6461
6462     case CPP_XOR_EQ:
6463       op = BIT_XOR_EXPR;
6464       break;
6465
6466     case CPP_OR_EQ:
6467       op = BIT_IOR_EXPR;
6468       break;
6469
6470     default:
6471       /* Nothing else is an assignment operator.  */
6472       op = ERROR_MARK;
6473     }
6474
6475   /* If it was an assignment operator, consume it.  */
6476   if (op != ERROR_MARK)
6477     cp_lexer_consume_token (parser->lexer);
6478
6479   return op;
6480 }
6481
6482 /* Parse an expression.
6483
6484    expression:
6485      assignment-expression
6486      expression , assignment-expression
6487
6488    CAST_P is true if this expression is the target of a cast.
6489
6490    Returns a representation of the expression.  */
6491
6492 static tree
6493 cp_parser_expression (cp_parser* parser, bool cast_p)
6494 {
6495   tree expression = NULL_TREE;
6496
6497   while (true)
6498     {
6499       tree assignment_expression;
6500
6501       /* Parse the next assignment-expression.  */
6502       assignment_expression
6503         = cp_parser_assignment_expression (parser, cast_p);
6504       /* If this is the first assignment-expression, we can just
6505          save it away.  */
6506       if (!expression)
6507         expression = assignment_expression;
6508       else
6509         expression = build_x_compound_expr (expression,
6510                                             assignment_expression,
6511                                             tf_warning_or_error);
6512       /* If the next token is not a comma, then we are done with the
6513          expression.  */
6514       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
6515         break;
6516       /* Consume the `,'.  */
6517       cp_lexer_consume_token (parser->lexer);
6518       /* A comma operator cannot appear in a constant-expression.  */
6519       if (cp_parser_non_integral_constant_expression (parser,
6520                                                       "a comma operator"))
6521         expression = error_mark_node;
6522     }
6523
6524   return expression;
6525 }
6526
6527 /* Parse a constant-expression.
6528
6529    constant-expression:
6530      conditional-expression
6531
6532   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
6533   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
6534   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
6535   is false, NON_CONSTANT_P should be NULL.  */
6536
6537 static tree
6538 cp_parser_constant_expression (cp_parser* parser,
6539                                bool allow_non_constant_p,
6540                                bool *non_constant_p)
6541 {
6542   bool saved_integral_constant_expression_p;
6543   bool saved_allow_non_integral_constant_expression_p;
6544   bool saved_non_integral_constant_expression_p;
6545   tree expression;
6546
6547   /* It might seem that we could simply parse the
6548      conditional-expression, and then check to see if it were
6549      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
6550      one that the compiler can figure out is constant, possibly after
6551      doing some simplifications or optimizations.  The standard has a
6552      precise definition of constant-expression, and we must honor
6553      that, even though it is somewhat more restrictive.
6554
6555      For example:
6556
6557        int i[(2, 3)];
6558
6559      is not a legal declaration, because `(2, 3)' is not a
6560      constant-expression.  The `,' operator is forbidden in a
6561      constant-expression.  However, GCC's constant-folding machinery
6562      will fold this operation to an INTEGER_CST for `3'.  */
6563
6564   /* Save the old settings.  */
6565   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
6566   saved_allow_non_integral_constant_expression_p
6567     = parser->allow_non_integral_constant_expression_p;
6568   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
6569   /* We are now parsing a constant-expression.  */
6570   parser->integral_constant_expression_p = true;
6571   parser->allow_non_integral_constant_expression_p = allow_non_constant_p;
6572   parser->non_integral_constant_expression_p = false;
6573   /* Although the grammar says "conditional-expression", we parse an
6574      "assignment-expression", which also permits "throw-expression"
6575      and the use of assignment operators.  In the case that
6576      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
6577      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
6578      actually essential that we look for an assignment-expression.
6579      For example, cp_parser_initializer_clauses uses this function to
6580      determine whether a particular assignment-expression is in fact
6581      constant.  */
6582   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false);
6583   /* Restore the old settings.  */
6584   parser->integral_constant_expression_p
6585     = saved_integral_constant_expression_p;
6586   parser->allow_non_integral_constant_expression_p
6587     = saved_allow_non_integral_constant_expression_p;
6588   if (allow_non_constant_p)
6589     *non_constant_p = parser->non_integral_constant_expression_p;
6590   else if (parser->non_integral_constant_expression_p)
6591     expression = error_mark_node;
6592   parser->non_integral_constant_expression_p
6593     = saved_non_integral_constant_expression_p;
6594
6595   return expression;
6596 }
6597
6598 /* Parse __builtin_offsetof.
6599
6600    offsetof-expression:
6601      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
6602
6603    offsetof-member-designator:
6604      id-expression
6605      | offsetof-member-designator "." id-expression
6606      | offsetof-member-designator "[" expression "]"  */
6607
6608 static tree
6609 cp_parser_builtin_offsetof (cp_parser *parser)
6610 {
6611   int save_ice_p, save_non_ice_p;
6612   tree type, expr;
6613   cp_id_kind dummy;
6614   cp_token *token;
6615
6616   /* We're about to accept non-integral-constant things, but will
6617      definitely yield an integral constant expression.  Save and
6618      restore these values around our local parsing.  */
6619   save_ice_p = parser->integral_constant_expression_p;
6620   save_non_ice_p = parser->non_integral_constant_expression_p;
6621
6622   /* Consume the "__builtin_offsetof" token.  */
6623   cp_lexer_consume_token (parser->lexer);
6624   /* Consume the opening `('.  */
6625   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
6626   /* Parse the type-id.  */
6627   type = cp_parser_type_id (parser);
6628   /* Look for the `,'.  */
6629   cp_parser_require (parser, CPP_COMMA, "%<,%>");
6630   token = cp_lexer_peek_token (parser->lexer);
6631
6632   /* Build the (type *)null that begins the traditional offsetof macro.  */
6633   expr = build_static_cast (build_pointer_type (type), null_pointer_node,
6634                             tf_warning_or_error);
6635
6636   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
6637   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
6638                                                  true, &dummy, token->location);
6639   while (true)
6640     {
6641       token = cp_lexer_peek_token (parser->lexer);
6642       switch (token->type)
6643         {
6644         case CPP_OPEN_SQUARE:
6645           /* offsetof-member-designator "[" expression "]" */
6646           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
6647           break;
6648
6649         case CPP_DOT:
6650           /* offsetof-member-designator "." identifier */
6651           cp_lexer_consume_token (parser->lexer);
6652           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT, expr,
6653                                                          true, &dummy,
6654                                                          token->location);
6655           break;
6656
6657         case CPP_CLOSE_PAREN:
6658           /* Consume the ")" token.  */
6659           cp_lexer_consume_token (parser->lexer);
6660           goto success;
6661
6662         default:
6663           /* Error.  We know the following require will fail, but
6664              that gives the proper error message.  */
6665           cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
6666           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
6667           expr = error_mark_node;
6668           goto failure;
6669         }
6670     }
6671
6672  success:
6673   /* If we're processing a template, we can't finish the semantics yet.
6674      Otherwise we can fold the entire expression now.  */
6675   if (processing_template_decl)
6676     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
6677   else
6678     expr = finish_offsetof (expr);
6679
6680  failure:
6681   parser->integral_constant_expression_p = save_ice_p;
6682   parser->non_integral_constant_expression_p = save_non_ice_p;
6683
6684   return expr;
6685 }
6686
6687 /* Parse a trait expression.  */
6688
6689 static tree
6690 cp_parser_trait_expr (cp_parser* parser, enum rid keyword)
6691 {
6692   cp_trait_kind kind;
6693   tree type1, type2 = NULL_TREE;
6694   bool binary = false;
6695   cp_decl_specifier_seq decl_specs;
6696
6697   switch (keyword)
6698     {
6699     case RID_HAS_NOTHROW_ASSIGN:
6700       kind = CPTK_HAS_NOTHROW_ASSIGN;
6701       break;
6702     case RID_HAS_NOTHROW_CONSTRUCTOR:
6703       kind = CPTK_HAS_NOTHROW_CONSTRUCTOR;
6704       break;
6705     case RID_HAS_NOTHROW_COPY:
6706       kind = CPTK_HAS_NOTHROW_COPY;
6707       break;
6708     case RID_HAS_TRIVIAL_ASSIGN:
6709       kind = CPTK_HAS_TRIVIAL_ASSIGN;
6710       break;
6711     case RID_HAS_TRIVIAL_CONSTRUCTOR:
6712       kind = CPTK_HAS_TRIVIAL_CONSTRUCTOR;
6713       break;
6714     case RID_HAS_TRIVIAL_COPY:
6715       kind = CPTK_HAS_TRIVIAL_COPY;
6716       break;
6717     case RID_HAS_TRIVIAL_DESTRUCTOR:
6718       kind = CPTK_HAS_TRIVIAL_DESTRUCTOR;
6719       break;
6720     case RID_HAS_VIRTUAL_DESTRUCTOR:
6721       kind = CPTK_HAS_VIRTUAL_DESTRUCTOR;
6722       break;
6723     case RID_IS_ABSTRACT:
6724       kind = CPTK_IS_ABSTRACT;
6725       break;
6726     case RID_IS_BASE_OF:
6727       kind = CPTK_IS_BASE_OF;
6728       binary = true;
6729       break;
6730     case RID_IS_CLASS:
6731       kind = CPTK_IS_CLASS;
6732       break;
6733     case RID_IS_CONVERTIBLE_TO:
6734       kind = CPTK_IS_CONVERTIBLE_TO;
6735       binary = true;
6736       break;
6737     case RID_IS_EMPTY:
6738       kind = CPTK_IS_EMPTY;
6739       break;
6740     case RID_IS_ENUM:
6741       kind = CPTK_IS_ENUM;
6742       break;
6743     case RID_IS_POD:
6744       kind = CPTK_IS_POD;
6745       break;
6746     case RID_IS_POLYMORPHIC:
6747       kind = CPTK_IS_POLYMORPHIC;
6748       break;
6749     case RID_IS_UNION:
6750       kind = CPTK_IS_UNION;
6751       break;
6752     default:
6753       gcc_unreachable ();
6754     }
6755
6756   /* Consume the token.  */
6757   cp_lexer_consume_token (parser->lexer);
6758
6759   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
6760
6761   type1 = cp_parser_type_id (parser);
6762
6763   if (type1 == error_mark_node)
6764     return error_mark_node;
6765
6766   /* Build a trivial decl-specifier-seq.  */
6767   clear_decl_specs (&decl_specs);
6768   decl_specs.type = type1;
6769
6770   /* Call grokdeclarator to figure out what type this is.  */
6771   type1 = grokdeclarator (NULL, &decl_specs, TYPENAME,
6772                           /*initialized=*/0, /*attrlist=*/NULL);
6773
6774   if (binary)
6775     {
6776       cp_parser_require (parser, CPP_COMMA, "%<,%>");
6777  
6778       type2 = cp_parser_type_id (parser);
6779
6780       if (type2 == error_mark_node)
6781         return error_mark_node;
6782
6783       /* Build a trivial decl-specifier-seq.  */
6784       clear_decl_specs (&decl_specs);
6785       decl_specs.type = type2;
6786
6787       /* Call grokdeclarator to figure out what type this is.  */
6788       type2 = grokdeclarator (NULL, &decl_specs, TYPENAME,
6789                               /*initialized=*/0, /*attrlist=*/NULL);
6790     }
6791
6792   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
6793
6794   /* Complete the trait expression, which may mean either processing
6795      the trait expr now or saving it for template instantiation.  */
6796   return finish_trait_expr (kind, type1, type2);
6797 }
6798
6799 /* Statements [gram.stmt.stmt]  */
6800
6801 /* Parse a statement.
6802
6803    statement:
6804      labeled-statement
6805      expression-statement
6806      compound-statement
6807      selection-statement
6808      iteration-statement
6809      jump-statement
6810      declaration-statement
6811      try-block
6812
6813   IN_COMPOUND is true when the statement is nested inside a
6814   cp_parser_compound_statement; this matters for certain pragmas.
6815
6816   If IF_P is not NULL, *IF_P is set to indicate whether the statement
6817   is a (possibly labeled) if statement which is not enclosed in braces
6818   and has an else clause.  This is used to implement -Wparentheses.  */
6819
6820 static void
6821 cp_parser_statement (cp_parser* parser, tree in_statement_expr,
6822                      bool in_compound, bool *if_p)
6823 {
6824   tree statement;
6825   cp_token *token;
6826   location_t statement_location;
6827
6828  restart:
6829   if (if_p != NULL)
6830     *if_p = false;
6831   /* There is no statement yet.  */
6832   statement = NULL_TREE;
6833   /* Peek at the next token.  */
6834   token = cp_lexer_peek_token (parser->lexer);
6835   /* Remember the location of the first token in the statement.  */
6836   statement_location = token->location;
6837   /* If this is a keyword, then that will often determine what kind of
6838      statement we have.  */
6839   if (token->type == CPP_KEYWORD)
6840     {
6841       enum rid keyword = token->keyword;
6842
6843       switch (keyword)
6844         {
6845         case RID_CASE:
6846         case RID_DEFAULT:
6847           /* Looks like a labeled-statement with a case label.
6848              Parse the label, and then use tail recursion to parse
6849              the statement.  */
6850           cp_parser_label_for_labeled_statement (parser);
6851           goto restart;
6852
6853         case RID_IF:
6854         case RID_SWITCH:
6855           statement = cp_parser_selection_statement (parser, if_p);
6856           break;
6857
6858         case RID_WHILE:
6859         case RID_DO:
6860         case RID_FOR:
6861           statement = cp_parser_iteration_statement (parser);
6862           break;
6863
6864         case RID_BREAK:
6865         case RID_CONTINUE:
6866         case RID_RETURN:
6867         case RID_GOTO:
6868           statement = cp_parser_jump_statement (parser);
6869           break;
6870
6871           /* Objective-C++ exception-handling constructs.  */
6872         case RID_AT_TRY:
6873         case RID_AT_CATCH:
6874         case RID_AT_FINALLY:
6875         case RID_AT_SYNCHRONIZED:
6876         case RID_AT_THROW:
6877           statement = cp_parser_objc_statement (parser);
6878           break;
6879
6880         case RID_TRY:
6881           statement = cp_parser_try_block (parser);
6882           break;
6883
6884         case RID_NAMESPACE:
6885           /* This must be a namespace alias definition.  */
6886           cp_parser_declaration_statement (parser);
6887           return;
6888           
6889         default:
6890           /* It might be a keyword like `int' that can start a
6891              declaration-statement.  */
6892           break;
6893         }
6894     }
6895   else if (token->type == CPP_NAME)
6896     {
6897       /* If the next token is a `:', then we are looking at a
6898          labeled-statement.  */
6899       token = cp_lexer_peek_nth_token (parser->lexer, 2);
6900       if (token->type == CPP_COLON)
6901         {
6902           /* Looks like a labeled-statement with an ordinary label.
6903              Parse the label, and then use tail recursion to parse
6904              the statement.  */
6905           cp_parser_label_for_labeled_statement (parser);
6906           goto restart;
6907         }
6908     }
6909   /* Anything that starts with a `{' must be a compound-statement.  */
6910   else if (token->type == CPP_OPEN_BRACE)
6911     statement = cp_parser_compound_statement (parser, NULL, false);
6912   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
6913      a statement all its own.  */
6914   else if (token->type == CPP_PRAGMA)
6915     {
6916       /* Only certain OpenMP pragmas are attached to statements, and thus
6917          are considered statements themselves.  All others are not.  In
6918          the context of a compound, accept the pragma as a "statement" and
6919          return so that we can check for a close brace.  Otherwise we
6920          require a real statement and must go back and read one.  */
6921       if (in_compound)
6922         cp_parser_pragma (parser, pragma_compound);
6923       else if (!cp_parser_pragma (parser, pragma_stmt))
6924         goto restart;
6925       return;
6926     }
6927   else if (token->type == CPP_EOF)
6928     {
6929       cp_parser_error (parser, "expected statement");
6930       return;
6931     }
6932
6933   /* Everything else must be a declaration-statement or an
6934      expression-statement.  Try for the declaration-statement
6935      first, unless we are looking at a `;', in which case we know that
6936      we have an expression-statement.  */
6937   if (!statement)
6938     {
6939       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6940         {
6941           cp_parser_parse_tentatively (parser);
6942           /* Try to parse the declaration-statement.  */
6943           cp_parser_declaration_statement (parser);
6944           /* If that worked, we're done.  */
6945           if (cp_parser_parse_definitely (parser))
6946             return;
6947         }
6948       /* Look for an expression-statement instead.  */
6949       statement = cp_parser_expression_statement (parser, in_statement_expr);
6950     }
6951
6952   /* Set the line number for the statement.  */
6953   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
6954     SET_EXPR_LOCATION (statement, statement_location);
6955 }
6956
6957 /* Parse the label for a labeled-statement, i.e.
6958
6959    identifier :
6960    case constant-expression :
6961    default :
6962
6963    GNU Extension:
6964    case constant-expression ... constant-expression : statement
6965
6966    When a label is parsed without errors, the label is added to the
6967    parse tree by the finish_* functions, so this function doesn't
6968    have to return the label.  */
6969
6970 static void
6971 cp_parser_label_for_labeled_statement (cp_parser* parser)
6972 {
6973   cp_token *token;
6974
6975   /* The next token should be an identifier.  */
6976   token = cp_lexer_peek_token (parser->lexer);
6977   if (token->type != CPP_NAME
6978       && token->type != CPP_KEYWORD)
6979     {
6980       cp_parser_error (parser, "expected labeled-statement");
6981       return;
6982     }
6983
6984   switch (token->keyword)
6985     {
6986     case RID_CASE:
6987       {
6988         tree expr, expr_hi;
6989         cp_token *ellipsis;
6990
6991         /* Consume the `case' token.  */
6992         cp_lexer_consume_token (parser->lexer);
6993         /* Parse the constant-expression.  */
6994         expr = cp_parser_constant_expression (parser,
6995                                               /*allow_non_constant_p=*/false,
6996                                               NULL);
6997
6998         ellipsis = cp_lexer_peek_token (parser->lexer);
6999         if (ellipsis->type == CPP_ELLIPSIS)
7000           {
7001             /* Consume the `...' token.  */
7002             cp_lexer_consume_token (parser->lexer);
7003             expr_hi =
7004               cp_parser_constant_expression (parser,
7005                                              /*allow_non_constant_p=*/false,
7006                                              NULL);
7007             /* We don't need to emit warnings here, as the common code
7008                will do this for us.  */
7009           }
7010         else
7011           expr_hi = NULL_TREE;
7012
7013         if (parser->in_switch_statement_p)
7014           finish_case_label (expr, expr_hi);
7015         else
7016           error ("%Hcase label %qE not within a switch statement",
7017                  &token->location, expr);
7018       }
7019       break;
7020
7021     case RID_DEFAULT:
7022       /* Consume the `default' token.  */
7023       cp_lexer_consume_token (parser->lexer);
7024
7025       if (parser->in_switch_statement_p)
7026         finish_case_label (NULL_TREE, NULL_TREE);
7027       else
7028         error ("%Hcase label not within a switch statement", &token->location);
7029       break;
7030
7031     default:
7032       /* Anything else must be an ordinary label.  */
7033       finish_label_stmt (cp_parser_identifier (parser));
7034       break;
7035     }
7036
7037   /* Require the `:' token.  */
7038   cp_parser_require (parser, CPP_COLON, "%<:%>");
7039 }
7040
7041 /* Parse an expression-statement.
7042
7043    expression-statement:
7044      expression [opt] ;
7045
7046    Returns the new EXPR_STMT -- or NULL_TREE if the expression
7047    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
7048    indicates whether this expression-statement is part of an
7049    expression statement.  */
7050
7051 static tree
7052 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
7053 {
7054   tree statement = NULL_TREE;
7055
7056   /* If the next token is a ';', then there is no expression
7057      statement.  */
7058   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7059     statement = cp_parser_expression (parser, /*cast_p=*/false);
7060
7061   /* Consume the final `;'.  */
7062   cp_parser_consume_semicolon_at_end_of_statement (parser);
7063
7064   if (in_statement_expr
7065       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
7066     /* This is the final expression statement of a statement
7067        expression.  */
7068     statement = finish_stmt_expr_expr (statement, in_statement_expr);
7069   else if (statement)
7070     statement = finish_expr_stmt (statement);
7071   else
7072     finish_stmt ();
7073
7074   return statement;
7075 }
7076
7077 /* Parse a compound-statement.
7078
7079    compound-statement:
7080      { statement-seq [opt] }
7081
7082    GNU extension:
7083
7084    compound-statement:
7085      { label-declaration-seq [opt] statement-seq [opt] }
7086
7087    label-declaration-seq:
7088      label-declaration
7089      label-declaration-seq label-declaration
7090
7091    Returns a tree representing the statement.  */
7092
7093 static tree
7094 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
7095                               bool in_try)
7096 {
7097   tree compound_stmt;
7098
7099   /* Consume the `{'.  */
7100   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>"))
7101     return error_mark_node;
7102   /* Begin the compound-statement.  */
7103   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
7104   /* If the next keyword is `__label__' we have a label declaration.  */
7105   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
7106     cp_parser_label_declaration (parser);
7107   /* Parse an (optional) statement-seq.  */
7108   cp_parser_statement_seq_opt (parser, in_statement_expr);
7109   /* Finish the compound-statement.  */
7110   finish_compound_stmt (compound_stmt);
7111   /* Consume the `}'.  */
7112   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
7113
7114   return compound_stmt;
7115 }
7116
7117 /* Parse an (optional) statement-seq.
7118
7119    statement-seq:
7120      statement
7121      statement-seq [opt] statement  */
7122
7123 static void
7124 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
7125 {
7126   /* Scan statements until there aren't any more.  */
7127   while (true)
7128     {
7129       cp_token *token = cp_lexer_peek_token (parser->lexer);
7130
7131       /* If we're looking at a `}', then we've run out of statements.  */
7132       if (token->type == CPP_CLOSE_BRACE
7133           || token->type == CPP_EOF
7134           || token->type == CPP_PRAGMA_EOL)
7135         break;
7136       
7137       /* If we are in a compound statement and find 'else' then
7138          something went wrong.  */
7139       else if (token->type == CPP_KEYWORD && token->keyword == RID_ELSE)
7140         {
7141           if (parser->in_statement & IN_IF_STMT) 
7142             break;
7143           else
7144             {
7145               token = cp_lexer_consume_token (parser->lexer);
7146               error ("%H%<else%> without a previous %<if%>", &token->location);
7147             }
7148         }
7149
7150       /* Parse the statement.  */
7151       cp_parser_statement (parser, in_statement_expr, true, NULL);
7152     }
7153 }
7154
7155 /* Parse a selection-statement.
7156
7157    selection-statement:
7158      if ( condition ) statement
7159      if ( condition ) statement else statement
7160      switch ( condition ) statement
7161
7162    Returns the new IF_STMT or SWITCH_STMT.
7163
7164    If IF_P is not NULL, *IF_P is set to indicate whether the statement
7165    is a (possibly labeled) if statement which is not enclosed in
7166    braces and has an else clause.  This is used to implement
7167    -Wparentheses.  */
7168
7169 static tree
7170 cp_parser_selection_statement (cp_parser* parser, bool *if_p)
7171 {
7172   cp_token *token;
7173   enum rid keyword;
7174
7175   if (if_p != NULL)
7176     *if_p = false;
7177
7178   /* Peek at the next token.  */
7179   token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
7180
7181   /* See what kind of keyword it is.  */
7182   keyword = token->keyword;
7183   switch (keyword)
7184     {
7185     case RID_IF:
7186     case RID_SWITCH:
7187       {
7188         tree statement;
7189         tree condition;
7190
7191         /* Look for the `('.  */
7192         if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
7193           {
7194             cp_parser_skip_to_end_of_statement (parser);
7195             return error_mark_node;
7196           }
7197
7198         /* Begin the selection-statement.  */
7199         if (keyword == RID_IF)
7200           statement = begin_if_stmt ();
7201         else
7202           statement = begin_switch_stmt ();
7203
7204         /* Parse the condition.  */
7205         condition = cp_parser_condition (parser);
7206         /* Look for the `)'.  */
7207         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
7208           cp_parser_skip_to_closing_parenthesis (parser, true, false,
7209                                                  /*consume_paren=*/true);
7210
7211         if (keyword == RID_IF)
7212           {
7213             bool nested_if;
7214             unsigned char in_statement;
7215
7216             /* Add the condition.  */
7217             finish_if_stmt_cond (condition, statement);
7218
7219             /* Parse the then-clause.  */
7220             in_statement = parser->in_statement;
7221             parser->in_statement |= IN_IF_STMT;
7222             if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7223               {
7224                 location_t loc = cp_lexer_peek_token (parser->lexer)->location;
7225                 add_stmt (build_empty_stmt ());
7226                 cp_lexer_consume_token (parser->lexer);
7227                 if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_ELSE))
7228                   warning_at (loc, OPT_Wempty_body, "suggest braces around "
7229                               "empty body in an %<if%> statement");
7230                 nested_if = false;
7231               }
7232             else
7233               cp_parser_implicitly_scoped_statement (parser, &nested_if);
7234             parser->in_statement = in_statement;
7235
7236             finish_then_clause (statement);
7237
7238             /* If the next token is `else', parse the else-clause.  */
7239             if (cp_lexer_next_token_is_keyword (parser->lexer,
7240                                                 RID_ELSE))
7241               {
7242                 /* Consume the `else' keyword.  */
7243                 cp_lexer_consume_token (parser->lexer);
7244                 begin_else_clause (statement);
7245                 /* Parse the else-clause.  */
7246                 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7247                   {
7248                     warning_at (cp_lexer_peek_token (parser->lexer)->location,
7249                                 OPT_Wempty_body, "suggest braces around "
7250                                 "empty body in an %<else%> statement");
7251                     add_stmt (build_empty_stmt ());
7252                     cp_lexer_consume_token (parser->lexer);
7253                   }
7254                 else
7255                   cp_parser_implicitly_scoped_statement (parser, NULL);
7256
7257                 finish_else_clause (statement);
7258
7259                 /* If we are currently parsing a then-clause, then
7260                    IF_P will not be NULL.  We set it to true to
7261                    indicate that this if statement has an else clause.
7262                    This may trigger the Wparentheses warning below
7263                    when we get back up to the parent if statement.  */
7264                 if (if_p != NULL)
7265                   *if_p = true;
7266               }
7267             else
7268               {
7269                 /* This if statement does not have an else clause.  If
7270                    NESTED_IF is true, then the then-clause is an if
7271                    statement which does have an else clause.  We warn
7272                    about the potential ambiguity.  */
7273                 if (nested_if)
7274                   warning (OPT_Wparentheses,
7275                            ("%Hsuggest explicit braces "
7276                             "to avoid ambiguous %<else%>"),
7277                            EXPR_LOCUS (statement));
7278               }
7279
7280             /* Now we're all done with the if-statement.  */
7281             finish_if_stmt (statement);
7282           }
7283         else
7284           {
7285             bool in_switch_statement_p;
7286             unsigned char in_statement;
7287
7288             /* Add the condition.  */
7289             finish_switch_cond (condition, statement);
7290
7291             /* Parse the body of the switch-statement.  */
7292             in_switch_statement_p = parser->in_switch_statement_p;
7293             in_statement = parser->in_statement;
7294             parser->in_switch_statement_p = true;
7295             parser->in_statement |= IN_SWITCH_STMT;
7296             cp_parser_implicitly_scoped_statement (parser, NULL);
7297             parser->in_switch_statement_p = in_switch_statement_p;
7298             parser->in_statement = in_statement;
7299
7300             /* Now we're all done with the switch-statement.  */
7301             finish_switch_stmt (statement);
7302           }
7303
7304         return statement;
7305       }
7306       break;
7307
7308     default:
7309       cp_parser_error (parser, "expected selection-statement");
7310       return error_mark_node;
7311     }
7312 }
7313
7314 /* Parse a condition.
7315
7316    condition:
7317      expression
7318      type-specifier-seq declarator = initializer-clause
7319      type-specifier-seq declarator braced-init-list
7320
7321    GNU Extension:
7322
7323    condition:
7324      type-specifier-seq declarator asm-specification [opt]
7325        attributes [opt] = assignment-expression
7326
7327    Returns the expression that should be tested.  */
7328
7329 static tree
7330 cp_parser_condition (cp_parser* parser)
7331 {
7332   cp_decl_specifier_seq type_specifiers;
7333   const char *saved_message;
7334
7335   /* Try the declaration first.  */
7336   cp_parser_parse_tentatively (parser);
7337   /* New types are not allowed in the type-specifier-seq for a
7338      condition.  */
7339   saved_message = parser->type_definition_forbidden_message;
7340   parser->type_definition_forbidden_message
7341     = "types may not be defined in conditions";
7342   /* Parse the type-specifier-seq.  */
7343   cp_parser_type_specifier_seq (parser, /*is_condition==*/true,
7344                                 &type_specifiers);
7345   /* Restore the saved message.  */
7346   parser->type_definition_forbidden_message = saved_message;
7347   /* If all is well, we might be looking at a declaration.  */
7348   if (!cp_parser_error_occurred (parser))
7349     {
7350       tree decl;
7351       tree asm_specification;
7352       tree attributes;
7353       cp_declarator *declarator;
7354       tree initializer = NULL_TREE;
7355
7356       /* Parse the declarator.  */
7357       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
7358                                          /*ctor_dtor_or_conv_p=*/NULL,
7359                                          /*parenthesized_p=*/NULL,
7360                                          /*member_p=*/false);
7361       /* Parse the attributes.  */
7362       attributes = cp_parser_attributes_opt (parser);
7363       /* Parse the asm-specification.  */
7364       asm_specification = cp_parser_asm_specification_opt (parser);
7365       /* If the next token is not an `=' or '{', then we might still be
7366          looking at an expression.  For example:
7367
7368            if (A(a).x)
7369
7370          looks like a decl-specifier-seq and a declarator -- but then
7371          there is no `=', so this is an expression.  */
7372       if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
7373           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
7374         cp_parser_simulate_error (parser);
7375         
7376       /* If we did see an `=' or '{', then we are looking at a declaration
7377          for sure.  */
7378       if (cp_parser_parse_definitely (parser))
7379         {
7380           tree pushed_scope;
7381           bool non_constant_p;
7382           bool flags = LOOKUP_ONLYCONVERTING;
7383
7384           /* Create the declaration.  */
7385           decl = start_decl (declarator, &type_specifiers,
7386                              /*initialized_p=*/true,
7387                              attributes, /*prefix_attributes=*/NULL_TREE,
7388                              &pushed_scope);
7389
7390           /* Parse the initializer.  */
7391           if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7392             {
7393               initializer = cp_parser_braced_list (parser, &non_constant_p);
7394               CONSTRUCTOR_IS_DIRECT_INIT (initializer) = 1;
7395               flags = 0;
7396             }
7397           else
7398             {
7399               /* Consume the `='.  */
7400               cp_lexer_consume_token (parser->lexer);
7401               initializer = cp_parser_initializer_clause (parser, &non_constant_p);
7402             }
7403           if (BRACE_ENCLOSED_INITIALIZER_P (initializer))
7404             maybe_warn_cpp0x ("extended initializer lists");
7405
7406           if (!non_constant_p)
7407             initializer = fold_non_dependent_expr (initializer);
7408
7409           /* Process the initializer.  */
7410           cp_finish_decl (decl,
7411                           initializer, !non_constant_p,
7412                           asm_specification,
7413                           flags);
7414
7415           if (pushed_scope)
7416             pop_scope (pushed_scope);
7417
7418           return convert_from_reference (decl);
7419         }
7420     }
7421   /* If we didn't even get past the declarator successfully, we are
7422      definitely not looking at a declaration.  */
7423   else
7424     cp_parser_abort_tentative_parse (parser);
7425
7426   /* Otherwise, we are looking at an expression.  */
7427   return cp_parser_expression (parser, /*cast_p=*/false);
7428 }
7429
7430 /* Parse an iteration-statement.
7431
7432    iteration-statement:
7433      while ( condition ) statement
7434      do statement while ( expression ) ;
7435      for ( for-init-statement condition [opt] ; expression [opt] )
7436        statement
7437
7438    Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
7439
7440 static tree
7441 cp_parser_iteration_statement (cp_parser* parser)
7442 {
7443   cp_token *token;
7444   enum rid keyword;
7445   tree statement;
7446   unsigned char in_statement;
7447
7448   /* Peek at the next token.  */
7449   token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
7450   if (!token)
7451     return error_mark_node;
7452
7453   /* Remember whether or not we are already within an iteration
7454      statement.  */
7455   in_statement = parser->in_statement;
7456
7457   /* See what kind of keyword it is.  */
7458   keyword = token->keyword;
7459   switch (keyword)
7460     {
7461     case RID_WHILE:
7462       {
7463         tree condition;
7464
7465         /* Begin the while-statement.  */
7466         statement = begin_while_stmt ();
7467         /* Look for the `('.  */
7468         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
7469         /* Parse the condition.  */
7470         condition = cp_parser_condition (parser);
7471         finish_while_stmt_cond (condition, statement);
7472         /* Look for the `)'.  */
7473         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
7474         /* Parse the dependent statement.  */
7475         parser->in_statement = IN_ITERATION_STMT;
7476         cp_parser_already_scoped_statement (parser);
7477         parser->in_statement = in_statement;
7478         /* We're done with the while-statement.  */
7479         finish_while_stmt (statement);
7480       }
7481       break;
7482
7483     case RID_DO:
7484       {
7485         tree expression;
7486
7487         /* Begin the do-statement.  */
7488         statement = begin_do_stmt ();
7489         /* Parse the body of the do-statement.  */
7490         parser->in_statement = IN_ITERATION_STMT;
7491         cp_parser_implicitly_scoped_statement (parser, NULL);
7492         parser->in_statement = in_statement;
7493         finish_do_body (statement);
7494         /* Look for the `while' keyword.  */
7495         cp_parser_require_keyword (parser, RID_WHILE, "%<while%>");
7496         /* Look for the `('.  */
7497         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
7498         /* Parse the expression.  */
7499         expression = cp_parser_expression (parser, /*cast_p=*/false);
7500         /* We're done with the do-statement.  */
7501         finish_do_stmt (expression, statement);
7502         /* Look for the `)'.  */
7503         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
7504         /* Look for the `;'.  */
7505         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7506       }
7507       break;
7508
7509     case RID_FOR:
7510       {
7511         tree condition = NULL_TREE;
7512         tree expression = NULL_TREE;
7513
7514         /* Begin the for-statement.  */
7515         statement = begin_for_stmt ();
7516         /* Look for the `('.  */
7517         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
7518         /* Parse the initialization.  */
7519         cp_parser_for_init_statement (parser);
7520         finish_for_init_stmt (statement);
7521
7522         /* If there's a condition, process it.  */
7523         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7524           condition = cp_parser_condition (parser);
7525         finish_for_cond (condition, statement);
7526         /* Look for the `;'.  */
7527         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7528
7529         /* If there's an expression, process it.  */
7530         if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
7531           expression = cp_parser_expression (parser, /*cast_p=*/false);
7532         finish_for_expr (expression, statement);
7533         /* Look for the `)'.  */
7534         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
7535
7536         /* Parse the body of the for-statement.  */
7537         parser->in_statement = IN_ITERATION_STMT;
7538         cp_parser_already_scoped_statement (parser);
7539         parser->in_statement = in_statement;
7540
7541         /* We're done with the for-statement.  */
7542         finish_for_stmt (statement);
7543       }
7544       break;
7545
7546     default:
7547       cp_parser_error (parser, "expected iteration-statement");
7548       statement = error_mark_node;
7549       break;
7550     }
7551
7552   return statement;
7553 }
7554
7555 /* Parse a for-init-statement.
7556
7557    for-init-statement:
7558      expression-statement
7559      simple-declaration  */
7560
7561 static void
7562 cp_parser_for_init_statement (cp_parser* parser)
7563 {
7564   /* If the next token is a `;', then we have an empty
7565      expression-statement.  Grammatically, this is also a
7566      simple-declaration, but an invalid one, because it does not
7567      declare anything.  Therefore, if we did not handle this case
7568      specially, we would issue an error message about an invalid
7569      declaration.  */
7570   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7571     {
7572       /* We're going to speculatively look for a declaration, falling back
7573          to an expression, if necessary.  */
7574       cp_parser_parse_tentatively (parser);
7575       /* Parse the declaration.  */
7576       cp_parser_simple_declaration (parser,
7577                                     /*function_definition_allowed_p=*/false);
7578       /* If the tentative parse failed, then we shall need to look for an
7579          expression-statement.  */
7580       if (cp_parser_parse_definitely (parser))
7581         return;
7582     }
7583
7584   cp_parser_expression_statement (parser, false);
7585 }
7586
7587 /* Parse a jump-statement.
7588
7589    jump-statement:
7590      break ;
7591      continue ;
7592      return expression [opt] ;
7593      return braced-init-list ;
7594      goto identifier ;
7595
7596    GNU extension:
7597
7598    jump-statement:
7599      goto * expression ;
7600
7601    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
7602
7603 static tree
7604 cp_parser_jump_statement (cp_parser* parser)
7605 {
7606   tree statement = error_mark_node;
7607   cp_token *token;
7608   enum rid keyword;
7609   unsigned char in_statement;
7610
7611   /* Peek at the next token.  */
7612   token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
7613   if (!token)
7614     return error_mark_node;
7615
7616   /* See what kind of keyword it is.  */
7617   keyword = token->keyword;
7618   switch (keyword)
7619     {
7620     case RID_BREAK:
7621       in_statement = parser->in_statement & ~IN_IF_STMT;      
7622       switch (in_statement)
7623         {
7624         case 0:
7625           error ("%Hbreak statement not within loop or switch", &token->location);
7626           break;
7627         default:
7628           gcc_assert ((in_statement & IN_SWITCH_STMT)
7629                       || in_statement == IN_ITERATION_STMT);
7630           statement = finish_break_stmt ();
7631           break;
7632         case IN_OMP_BLOCK:
7633           error ("%Hinvalid exit from OpenMP structured block", &token->location);
7634           break;
7635         case IN_OMP_FOR:
7636           error ("%Hbreak statement used with OpenMP for loop", &token->location);
7637           break;
7638         }
7639       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7640       break;
7641
7642     case RID_CONTINUE:
7643       switch (parser->in_statement & ~(IN_SWITCH_STMT | IN_IF_STMT))
7644         {
7645         case 0:
7646           error ("%Hcontinue statement not within a loop", &token->location);
7647           break;
7648         case IN_ITERATION_STMT:
7649         case IN_OMP_FOR:
7650           statement = finish_continue_stmt ();
7651           break;
7652         case IN_OMP_BLOCK:
7653           error ("%Hinvalid exit from OpenMP structured block", &token->location);
7654           break;
7655         default:
7656           gcc_unreachable ();
7657         }
7658       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7659       break;
7660
7661     case RID_RETURN:
7662       {
7663         tree expr;
7664         bool expr_non_constant_p;
7665
7666         if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7667           {
7668             maybe_warn_cpp0x ("extended initializer lists");
7669             expr = cp_parser_braced_list (parser, &expr_non_constant_p);
7670           }
7671         else if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7672           expr = cp_parser_expression (parser, /*cast_p=*/false);
7673         else
7674           /* If the next token is a `;', then there is no
7675              expression.  */
7676           expr = NULL_TREE;
7677         /* Build the return-statement.  */
7678         statement = finish_return_stmt (expr);
7679         /* Look for the final `;'.  */
7680         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7681       }
7682       break;
7683
7684     case RID_GOTO:
7685       /* Create the goto-statement.  */
7686       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
7687         {
7688           /* Issue a warning about this use of a GNU extension.  */
7689           pedwarn (token->location, OPT_pedantic, "ISO C++ forbids computed gotos");
7690           /* Consume the '*' token.  */
7691           cp_lexer_consume_token (parser->lexer);
7692           /* Parse the dependent expression.  */
7693           finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false));
7694         }
7695       else
7696         finish_goto_stmt (cp_parser_identifier (parser));
7697       /* Look for the final `;'.  */
7698       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7699       break;
7700
7701     default:
7702       cp_parser_error (parser, "expected jump-statement");
7703       break;
7704     }
7705
7706   return statement;
7707 }
7708
7709 /* Parse a declaration-statement.
7710
7711    declaration-statement:
7712      block-declaration  */
7713
7714 static void
7715 cp_parser_declaration_statement (cp_parser* parser)
7716 {
7717   void *p;
7718
7719   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7720   p = obstack_alloc (&declarator_obstack, 0);
7721
7722  /* Parse the block-declaration.  */
7723   cp_parser_block_declaration (parser, /*statement_p=*/true);
7724
7725   /* Free any declarators allocated.  */
7726   obstack_free (&declarator_obstack, p);
7727
7728   /* Finish off the statement.  */
7729   finish_stmt ();
7730 }
7731
7732 /* Some dependent statements (like `if (cond) statement'), are
7733    implicitly in their own scope.  In other words, if the statement is
7734    a single statement (as opposed to a compound-statement), it is
7735    none-the-less treated as if it were enclosed in braces.  Any
7736    declarations appearing in the dependent statement are out of scope
7737    after control passes that point.  This function parses a statement,
7738    but ensures that is in its own scope, even if it is not a
7739    compound-statement.
7740
7741    If IF_P is not NULL, *IF_P is set to indicate whether the statement
7742    is a (possibly labeled) if statement which is not enclosed in
7743    braces and has an else clause.  This is used to implement
7744    -Wparentheses.
7745
7746    Returns the new statement.  */
7747
7748 static tree
7749 cp_parser_implicitly_scoped_statement (cp_parser* parser, bool *if_p)
7750 {
7751   tree statement;
7752
7753   if (if_p != NULL)
7754     *if_p = false;
7755
7756   /* Mark if () ; with a special NOP_EXPR.  */
7757   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7758     {
7759       cp_lexer_consume_token (parser->lexer);
7760       statement = add_stmt (build_empty_stmt ());
7761     }
7762   /* if a compound is opened, we simply parse the statement directly.  */
7763   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7764     statement = cp_parser_compound_statement (parser, NULL, false);
7765   /* If the token is not a `{', then we must take special action.  */
7766   else
7767     {
7768       /* Create a compound-statement.  */
7769       statement = begin_compound_stmt (0);
7770       /* Parse the dependent-statement.  */
7771       cp_parser_statement (parser, NULL_TREE, false, if_p);
7772       /* Finish the dummy compound-statement.  */
7773       finish_compound_stmt (statement);
7774     }
7775
7776   /* Return the statement.  */
7777   return statement;
7778 }
7779
7780 /* For some dependent statements (like `while (cond) statement'), we
7781    have already created a scope.  Therefore, even if the dependent
7782    statement is a compound-statement, we do not want to create another
7783    scope.  */
7784
7785 static void
7786 cp_parser_already_scoped_statement (cp_parser* parser)
7787 {
7788   /* If the token is a `{', then we must take special action.  */
7789   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
7790     cp_parser_statement (parser, NULL_TREE, false, NULL);
7791   else
7792     {
7793       /* Avoid calling cp_parser_compound_statement, so that we
7794          don't create a new scope.  Do everything else by hand.  */
7795       cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>");
7796       cp_parser_statement_seq_opt (parser, NULL_TREE);
7797       cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
7798     }
7799 }
7800
7801 /* Declarations [gram.dcl.dcl] */
7802
7803 /* Parse an optional declaration-sequence.
7804
7805    declaration-seq:
7806      declaration
7807      declaration-seq declaration  */
7808
7809 static void
7810 cp_parser_declaration_seq_opt (cp_parser* parser)
7811 {
7812   while (true)
7813     {
7814       cp_token *token;
7815
7816       token = cp_lexer_peek_token (parser->lexer);
7817
7818       if (token->type == CPP_CLOSE_BRACE
7819           || token->type == CPP_EOF
7820           || token->type == CPP_PRAGMA_EOL)
7821         break;
7822
7823       if (token->type == CPP_SEMICOLON)
7824         {
7825           /* A declaration consisting of a single semicolon is
7826              invalid.  Allow it unless we're being pedantic.  */
7827           cp_lexer_consume_token (parser->lexer);
7828           if (!in_system_header)
7829             pedwarn (input_location, OPT_pedantic, "extra %<;%>");
7830           continue;
7831         }
7832
7833       /* If we're entering or exiting a region that's implicitly
7834          extern "C", modify the lang context appropriately.  */
7835       if (!parser->implicit_extern_c && token->implicit_extern_c)
7836         {
7837           push_lang_context (lang_name_c);
7838           parser->implicit_extern_c = true;
7839         }
7840       else if (parser->implicit_extern_c && !token->implicit_extern_c)
7841         {
7842           pop_lang_context ();
7843           parser->implicit_extern_c = false;
7844         }
7845
7846       if (token->type == CPP_PRAGMA)
7847         {
7848           /* A top-level declaration can consist solely of a #pragma.
7849              A nested declaration cannot, so this is done here and not
7850              in cp_parser_declaration.  (A #pragma at block scope is
7851              handled in cp_parser_statement.)  */
7852           cp_parser_pragma (parser, pragma_external);
7853           continue;
7854         }
7855
7856       /* Parse the declaration itself.  */
7857       cp_parser_declaration (parser);
7858     }
7859 }
7860
7861 /* Parse a declaration.
7862
7863    declaration:
7864      block-declaration
7865      function-definition
7866      template-declaration
7867      explicit-instantiation
7868      explicit-specialization
7869      linkage-specification
7870      namespace-definition
7871
7872    GNU extension:
7873
7874    declaration:
7875       __extension__ declaration */
7876
7877 static void
7878 cp_parser_declaration (cp_parser* parser)
7879 {
7880   cp_token token1;
7881   cp_token token2;
7882   int saved_pedantic;
7883   void *p;
7884
7885   /* Check for the `__extension__' keyword.  */
7886   if (cp_parser_extension_opt (parser, &saved_pedantic))
7887     {
7888       /* Parse the qualified declaration.  */
7889       cp_parser_declaration (parser);
7890       /* Restore the PEDANTIC flag.  */
7891       pedantic = saved_pedantic;
7892
7893       return;
7894     }
7895
7896   /* Try to figure out what kind of declaration is present.  */
7897   token1 = *cp_lexer_peek_token (parser->lexer);
7898
7899   if (token1.type != CPP_EOF)
7900     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
7901   else
7902     {
7903       token2.type = CPP_EOF;
7904       token2.keyword = RID_MAX;
7905     }
7906
7907   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7908   p = obstack_alloc (&declarator_obstack, 0);
7909
7910   /* If the next token is `extern' and the following token is a string
7911      literal, then we have a linkage specification.  */
7912   if (token1.keyword == RID_EXTERN
7913       && cp_parser_is_string_literal (&token2))
7914     cp_parser_linkage_specification (parser);
7915   /* If the next token is `template', then we have either a template
7916      declaration, an explicit instantiation, or an explicit
7917      specialization.  */
7918   else if (token1.keyword == RID_TEMPLATE)
7919     {
7920       /* `template <>' indicates a template specialization.  */
7921       if (token2.type == CPP_LESS
7922           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
7923         cp_parser_explicit_specialization (parser);
7924       /* `template <' indicates a template declaration.  */
7925       else if (token2.type == CPP_LESS)
7926         cp_parser_template_declaration (parser, /*member_p=*/false);
7927       /* Anything else must be an explicit instantiation.  */
7928       else
7929         cp_parser_explicit_instantiation (parser);
7930     }
7931   /* If the next token is `export', then we have a template
7932      declaration.  */
7933   else if (token1.keyword == RID_EXPORT)
7934     cp_parser_template_declaration (parser, /*member_p=*/false);
7935   /* If the next token is `extern', 'static' or 'inline' and the one
7936      after that is `template', we have a GNU extended explicit
7937      instantiation directive.  */
7938   else if (cp_parser_allow_gnu_extensions_p (parser)
7939            && (token1.keyword == RID_EXTERN
7940                || token1.keyword == RID_STATIC
7941                || token1.keyword == RID_INLINE)
7942            && token2.keyword == RID_TEMPLATE)
7943     cp_parser_explicit_instantiation (parser);
7944   /* If the next token is `namespace', check for a named or unnamed
7945      namespace definition.  */
7946   else if (token1.keyword == RID_NAMESPACE
7947            && (/* A named namespace definition.  */
7948                (token2.type == CPP_NAME
7949                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
7950                     != CPP_EQ))
7951                /* An unnamed namespace definition.  */
7952                || token2.type == CPP_OPEN_BRACE
7953                || token2.keyword == RID_ATTRIBUTE))
7954     cp_parser_namespace_definition (parser);
7955   /* An inline (associated) namespace definition.  */
7956   else if (token1.keyword == RID_INLINE
7957            && token2.keyword == RID_NAMESPACE)
7958     cp_parser_namespace_definition (parser);
7959   /* Objective-C++ declaration/definition.  */
7960   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
7961     cp_parser_objc_declaration (parser);
7962   /* We must have either a block declaration or a function
7963      definition.  */
7964   else
7965     /* Try to parse a block-declaration, or a function-definition.  */
7966     cp_parser_block_declaration (parser, /*statement_p=*/false);
7967
7968   /* Free any declarators allocated.  */
7969   obstack_free (&declarator_obstack, p);
7970 }
7971
7972 /* Parse a block-declaration.
7973
7974    block-declaration:
7975      simple-declaration
7976      asm-definition
7977      namespace-alias-definition
7978      using-declaration
7979      using-directive
7980
7981    GNU Extension:
7982
7983    block-declaration:
7984      __extension__ block-declaration
7985
7986    C++0x Extension:
7987
7988    block-declaration:
7989      static_assert-declaration
7990
7991    If STATEMENT_P is TRUE, then this block-declaration is occurring as
7992    part of a declaration-statement.  */
7993
7994 static void
7995 cp_parser_block_declaration (cp_parser *parser,
7996                              bool      statement_p)
7997 {
7998   cp_token *token1;
7999   int saved_pedantic;
8000
8001   /* Check for the `__extension__' keyword.  */
8002   if (cp_parser_extension_opt (parser, &saved_pedantic))
8003     {
8004       /* Parse the qualified declaration.  */
8005       cp_parser_block_declaration (parser, statement_p);
8006       /* Restore the PEDANTIC flag.  */
8007       pedantic = saved_pedantic;
8008
8009       return;
8010     }
8011
8012   /* Peek at the next token to figure out which kind of declaration is
8013      present.  */
8014   token1 = cp_lexer_peek_token (parser->lexer);
8015
8016   /* If the next keyword is `asm', we have an asm-definition.  */
8017   if (token1->keyword == RID_ASM)
8018     {
8019       if (statement_p)
8020         cp_parser_commit_to_tentative_parse (parser);
8021       cp_parser_asm_definition (parser);
8022     }
8023   /* If the next keyword is `namespace', we have a
8024      namespace-alias-definition.  */
8025   else if (token1->keyword == RID_NAMESPACE)
8026     cp_parser_namespace_alias_definition (parser);
8027   /* If the next keyword is `using', we have either a
8028      using-declaration or a using-directive.  */
8029   else if (token1->keyword == RID_USING)
8030     {
8031       cp_token *token2;
8032
8033       if (statement_p)
8034         cp_parser_commit_to_tentative_parse (parser);
8035       /* If the token after `using' is `namespace', then we have a
8036          using-directive.  */
8037       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
8038       if (token2->keyword == RID_NAMESPACE)
8039         cp_parser_using_directive (parser);
8040       /* Otherwise, it's a using-declaration.  */
8041       else
8042         cp_parser_using_declaration (parser,
8043                                      /*access_declaration_p=*/false);
8044     }
8045   /* If the next keyword is `__label__' we have a misplaced label
8046      declaration.  */
8047   else if (token1->keyword == RID_LABEL)
8048     {
8049       cp_lexer_consume_token (parser->lexer);
8050       error ("%H%<__label__%> not at the beginning of a block", &token1->location);
8051       cp_parser_skip_to_end_of_statement (parser);
8052       /* If the next token is now a `;', consume it.  */
8053       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
8054         cp_lexer_consume_token (parser->lexer);
8055     }
8056   /* If the next token is `static_assert' we have a static assertion.  */
8057   else if (token1->keyword == RID_STATIC_ASSERT)
8058     cp_parser_static_assert (parser, /*member_p=*/false);
8059   /* Anything else must be a simple-declaration.  */
8060   else
8061     cp_parser_simple_declaration (parser, !statement_p);
8062 }
8063
8064 /* Parse a simple-declaration.
8065
8066    simple-declaration:
8067      decl-specifier-seq [opt] init-declarator-list [opt] ;
8068
8069    init-declarator-list:
8070      init-declarator
8071      init-declarator-list , init-declarator
8072
8073    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
8074    function-definition as a simple-declaration.  */
8075
8076 static void
8077 cp_parser_simple_declaration (cp_parser* parser,
8078                               bool function_definition_allowed_p)
8079 {
8080   cp_decl_specifier_seq decl_specifiers;
8081   int declares_class_or_enum;
8082   bool saw_declarator;
8083
8084   /* Defer access checks until we know what is being declared; the
8085      checks for names appearing in the decl-specifier-seq should be
8086      done as if we were in the scope of the thing being declared.  */
8087   push_deferring_access_checks (dk_deferred);
8088
8089   /* Parse the decl-specifier-seq.  We have to keep track of whether
8090      or not the decl-specifier-seq declares a named class or
8091      enumeration type, since that is the only case in which the
8092      init-declarator-list is allowed to be empty.
8093
8094      [dcl.dcl]
8095
8096      In a simple-declaration, the optional init-declarator-list can be
8097      omitted only when declaring a class or enumeration, that is when
8098      the decl-specifier-seq contains either a class-specifier, an
8099      elaborated-type-specifier, or an enum-specifier.  */
8100   cp_parser_decl_specifier_seq (parser,
8101                                 CP_PARSER_FLAGS_OPTIONAL,
8102                                 &decl_specifiers,
8103                                 &declares_class_or_enum);
8104   /* We no longer need to defer access checks.  */
8105   stop_deferring_access_checks ();
8106
8107   /* In a block scope, a valid declaration must always have a
8108      decl-specifier-seq.  By not trying to parse declarators, we can
8109      resolve the declaration/expression ambiguity more quickly.  */
8110   if (!function_definition_allowed_p
8111       && !decl_specifiers.any_specifiers_p)
8112     {
8113       cp_parser_error (parser, "expected declaration");
8114       goto done;
8115     }
8116
8117   /* If the next two tokens are both identifiers, the code is
8118      erroneous. The usual cause of this situation is code like:
8119
8120        T t;
8121
8122      where "T" should name a type -- but does not.  */
8123   if (!decl_specifiers.type
8124       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
8125     {
8126       /* If parsing tentatively, we should commit; we really are
8127          looking at a declaration.  */
8128       cp_parser_commit_to_tentative_parse (parser);
8129       /* Give up.  */
8130       goto done;
8131     }
8132
8133   /* If we have seen at least one decl-specifier, and the next token
8134      is not a parenthesis, then we must be looking at a declaration.
8135      (After "int (" we might be looking at a functional cast.)  */
8136   if (decl_specifiers.any_specifiers_p
8137       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN)
8138       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
8139       && !cp_parser_error_occurred (parser))
8140     cp_parser_commit_to_tentative_parse (parser);
8141
8142   /* Keep going until we hit the `;' at the end of the simple
8143      declaration.  */
8144   saw_declarator = false;
8145   while (cp_lexer_next_token_is_not (parser->lexer,
8146                                      CPP_SEMICOLON))
8147     {
8148       cp_token *token;
8149       bool function_definition_p;
8150       tree decl;
8151
8152       if (saw_declarator)
8153         {
8154           /* If we are processing next declarator, coma is expected */
8155           token = cp_lexer_peek_token (parser->lexer);
8156           gcc_assert (token->type == CPP_COMMA);
8157           cp_lexer_consume_token (parser->lexer);
8158         }
8159       else
8160         saw_declarator = true;
8161
8162       /* Parse the init-declarator.  */
8163       decl = cp_parser_init_declarator (parser, &decl_specifiers,
8164                                         /*checks=*/NULL,
8165                                         function_definition_allowed_p,
8166                                         /*member_p=*/false,
8167                                         declares_class_or_enum,
8168                                         &function_definition_p);
8169       /* If an error occurred while parsing tentatively, exit quickly.
8170          (That usually happens when in the body of a function; each
8171          statement is treated as a declaration-statement until proven
8172          otherwise.)  */
8173       if (cp_parser_error_occurred (parser))
8174         goto done;
8175       /* Handle function definitions specially.  */
8176       if (function_definition_p)
8177         {
8178           /* If the next token is a `,', then we are probably
8179              processing something like:
8180
8181                void f() {}, *p;
8182
8183              which is erroneous.  */
8184           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
8185             {
8186               cp_token *token = cp_lexer_peek_token (parser->lexer);
8187               error ("%Hmixing declarations and function-definitions is forbidden",
8188                      &token->location);
8189             }
8190           /* Otherwise, we're done with the list of declarators.  */
8191           else
8192             {
8193               pop_deferring_access_checks ();
8194               return;
8195             }
8196         }
8197       /* The next token should be either a `,' or a `;'.  */
8198       token = cp_lexer_peek_token (parser->lexer);
8199       /* If it's a `,', there are more declarators to come.  */
8200       if (token->type == CPP_COMMA)
8201         /* will be consumed next time around */;
8202       /* If it's a `;', we are done.  */
8203       else if (token->type == CPP_SEMICOLON)
8204         break;
8205       /* Anything else is an error.  */
8206       else
8207         {
8208           /* If we have already issued an error message we don't need
8209              to issue another one.  */
8210           if (decl != error_mark_node
8211               || cp_parser_uncommitted_to_tentative_parse_p (parser))
8212             cp_parser_error (parser, "expected %<,%> or %<;%>");
8213           /* Skip tokens until we reach the end of the statement.  */
8214           cp_parser_skip_to_end_of_statement (parser);
8215           /* If the next token is now a `;', consume it.  */
8216           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
8217             cp_lexer_consume_token (parser->lexer);
8218           goto done;
8219         }
8220       /* After the first time around, a function-definition is not
8221          allowed -- even if it was OK at first.  For example:
8222
8223            int i, f() {}
8224
8225          is not valid.  */
8226       function_definition_allowed_p = false;
8227     }
8228
8229   /* Issue an error message if no declarators are present, and the
8230      decl-specifier-seq does not itself declare a class or
8231      enumeration.  */
8232   if (!saw_declarator)
8233     {
8234       if (cp_parser_declares_only_class_p (parser))
8235         shadow_tag (&decl_specifiers);
8236       /* Perform any deferred access checks.  */
8237       perform_deferred_access_checks ();
8238     }
8239
8240   /* Consume the `;'.  */
8241   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
8242
8243  done:
8244   pop_deferring_access_checks ();
8245 }
8246
8247 /* Parse a decl-specifier-seq.
8248
8249    decl-specifier-seq:
8250      decl-specifier-seq [opt] decl-specifier
8251
8252    decl-specifier:
8253      storage-class-specifier
8254      type-specifier
8255      function-specifier
8256      friend
8257      typedef
8258
8259    GNU Extension:
8260
8261    decl-specifier:
8262      attributes
8263
8264    Set *DECL_SPECS to a representation of the decl-specifier-seq.
8265
8266    The parser flags FLAGS is used to control type-specifier parsing.
8267
8268    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
8269    flags:
8270
8271      1: one of the decl-specifiers is an elaborated-type-specifier
8272         (i.e., a type declaration)
8273      2: one of the decl-specifiers is an enum-specifier or a
8274         class-specifier (i.e., a type definition)
8275
8276    */
8277
8278 static void
8279 cp_parser_decl_specifier_seq (cp_parser* parser,
8280                               cp_parser_flags flags,
8281                               cp_decl_specifier_seq *decl_specs,
8282                               int* declares_class_or_enum)
8283 {
8284   bool constructor_possible_p = !parser->in_declarator_p;
8285   cp_token *start_token = NULL;
8286
8287   /* Clear DECL_SPECS.  */
8288   clear_decl_specs (decl_specs);
8289
8290   /* Assume no class or enumeration type is declared.  */
8291   *declares_class_or_enum = 0;
8292
8293   /* Keep reading specifiers until there are no more to read.  */
8294   while (true)
8295     {
8296       bool constructor_p;
8297       bool found_decl_spec;
8298       cp_token *token;
8299
8300       /* Peek at the next token.  */
8301       token = cp_lexer_peek_token (parser->lexer);
8302
8303       /* Save the first token of the decl spec list for error
8304          reporting.  */
8305       if (!start_token)
8306         start_token = token;
8307       /* Handle attributes.  */
8308       if (token->keyword == RID_ATTRIBUTE)
8309         {
8310           /* Parse the attributes.  */
8311           decl_specs->attributes
8312             = chainon (decl_specs->attributes,
8313                        cp_parser_attributes_opt (parser));
8314           continue;
8315         }
8316       /* Assume we will find a decl-specifier keyword.  */
8317       found_decl_spec = true;
8318       /* If the next token is an appropriate keyword, we can simply
8319          add it to the list.  */
8320       switch (token->keyword)
8321         {
8322           /* decl-specifier:
8323                friend  */
8324         case RID_FRIEND:
8325           if (!at_class_scope_p ())
8326             {
8327               error ("%H%<friend%> used outside of class", &token->location);
8328               cp_lexer_purge_token (parser->lexer);
8329             }
8330           else
8331             {
8332               ++decl_specs->specs[(int) ds_friend];
8333               /* Consume the token.  */
8334               cp_lexer_consume_token (parser->lexer);
8335             }
8336           break;
8337
8338           /* function-specifier:
8339                inline
8340                virtual
8341                explicit  */
8342         case RID_INLINE:
8343         case RID_VIRTUAL:
8344         case RID_EXPLICIT:
8345           cp_parser_function_specifier_opt (parser, decl_specs);
8346           break;
8347
8348           /* decl-specifier:
8349                typedef  */
8350         case RID_TYPEDEF:
8351           ++decl_specs->specs[(int) ds_typedef];
8352           /* Consume the token.  */
8353           cp_lexer_consume_token (parser->lexer);
8354           /* A constructor declarator cannot appear in a typedef.  */
8355           constructor_possible_p = false;
8356           /* The "typedef" keyword can only occur in a declaration; we
8357              may as well commit at this point.  */
8358           cp_parser_commit_to_tentative_parse (parser);
8359
8360           if (decl_specs->storage_class != sc_none)
8361             decl_specs->conflicting_specifiers_p = true;
8362           break;
8363
8364           /* storage-class-specifier:
8365                auto
8366                register
8367                static
8368                extern
8369                mutable
8370
8371              GNU Extension:
8372                thread  */
8373         case RID_AUTO:
8374           if (cxx_dialect == cxx98) 
8375             {
8376               /* Consume the token.  */
8377               cp_lexer_consume_token (parser->lexer);
8378
8379               /* Complain about `auto' as a storage specifier, if
8380                  we're complaining about C++0x compatibility.  */
8381               warning 
8382                 (OPT_Wc__0x_compat, 
8383                  "%H%<auto%> will change meaning in C++0x; please remove it",
8384                  &token->location);
8385
8386               /* Set the storage class anyway.  */
8387               cp_parser_set_storage_class (parser, decl_specs, RID_AUTO,
8388                                            token->location);
8389             }
8390           else
8391             /* C++0x auto type-specifier.  */
8392             found_decl_spec = false;
8393           break;
8394
8395         case RID_REGISTER:
8396         case RID_STATIC:
8397         case RID_EXTERN:
8398         case RID_MUTABLE:
8399           /* Consume the token.  */
8400           cp_lexer_consume_token (parser->lexer);
8401           cp_parser_set_storage_class (parser, decl_specs, token->keyword,
8402                                        token->location);
8403           break;
8404         case RID_THREAD:
8405           /* Consume the token.  */
8406           cp_lexer_consume_token (parser->lexer);
8407           ++decl_specs->specs[(int) ds_thread];
8408           break;
8409
8410         default:
8411           /* We did not yet find a decl-specifier yet.  */
8412           found_decl_spec = false;
8413           break;
8414         }
8415
8416       /* Constructors are a special case.  The `S' in `S()' is not a
8417          decl-specifier; it is the beginning of the declarator.  */
8418       constructor_p
8419         = (!found_decl_spec
8420            && constructor_possible_p
8421            && (cp_parser_constructor_declarator_p
8422                (parser, decl_specs->specs[(int) ds_friend] != 0)));
8423
8424       /* If we don't have a DECL_SPEC yet, then we must be looking at
8425          a type-specifier.  */
8426       if (!found_decl_spec && !constructor_p)
8427         {
8428           int decl_spec_declares_class_or_enum;
8429           bool is_cv_qualifier;
8430           tree type_spec;
8431
8432           type_spec
8433             = cp_parser_type_specifier (parser, flags,
8434                                         decl_specs,
8435                                         /*is_declaration=*/true,
8436                                         &decl_spec_declares_class_or_enum,
8437                                         &is_cv_qualifier);
8438           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
8439
8440           /* If this type-specifier referenced a user-defined type
8441              (a typedef, class-name, etc.), then we can't allow any
8442              more such type-specifiers henceforth.
8443
8444              [dcl.spec]
8445
8446              The longest sequence of decl-specifiers that could
8447              possibly be a type name is taken as the
8448              decl-specifier-seq of a declaration.  The sequence shall
8449              be self-consistent as described below.
8450
8451              [dcl.type]
8452
8453              As a general rule, at most one type-specifier is allowed
8454              in the complete decl-specifier-seq of a declaration.  The
8455              only exceptions are the following:
8456
8457              -- const or volatile can be combined with any other
8458                 type-specifier.
8459
8460              -- signed or unsigned can be combined with char, long,
8461                 short, or int.
8462
8463              -- ..
8464
8465              Example:
8466
8467                typedef char* Pc;
8468                void g (const int Pc);
8469
8470              Here, Pc is *not* part of the decl-specifier seq; it's
8471              the declarator.  Therefore, once we see a type-specifier
8472              (other than a cv-qualifier), we forbid any additional
8473              user-defined types.  We *do* still allow things like `int
8474              int' to be considered a decl-specifier-seq, and issue the
8475              error message later.  */
8476           if (type_spec && !is_cv_qualifier)
8477             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
8478           /* A constructor declarator cannot follow a type-specifier.  */
8479           if (type_spec)
8480             {
8481               constructor_possible_p = false;
8482               found_decl_spec = true;
8483             }
8484         }
8485
8486       /* If we still do not have a DECL_SPEC, then there are no more
8487          decl-specifiers.  */
8488       if (!found_decl_spec)
8489         break;
8490
8491       decl_specs->any_specifiers_p = true;
8492       /* After we see one decl-specifier, further decl-specifiers are
8493          always optional.  */
8494       flags |= CP_PARSER_FLAGS_OPTIONAL;
8495     }
8496
8497   cp_parser_check_decl_spec (decl_specs, start_token->location);
8498
8499   /* Don't allow a friend specifier with a class definition.  */
8500   if (decl_specs->specs[(int) ds_friend] != 0
8501       && (*declares_class_or_enum & 2))
8502     error ("%Hclass definition may not be declared a friend",
8503             &start_token->location);
8504 }
8505
8506 /* Parse an (optional) storage-class-specifier.
8507
8508    storage-class-specifier:
8509      auto
8510      register
8511      static
8512      extern
8513      mutable
8514
8515    GNU Extension:
8516
8517    storage-class-specifier:
8518      thread
8519
8520    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
8521
8522 static tree
8523 cp_parser_storage_class_specifier_opt (cp_parser* parser)
8524 {
8525   switch (cp_lexer_peek_token (parser->lexer)->keyword)
8526     {
8527     case RID_AUTO:
8528       if (cxx_dialect != cxx98)
8529         return NULL_TREE;
8530       /* Fall through for C++98.  */
8531
8532     case RID_REGISTER:
8533     case RID_STATIC:
8534     case RID_EXTERN:
8535     case RID_MUTABLE:
8536     case RID_THREAD:
8537       /* Consume the token.  */
8538       return cp_lexer_consume_token (parser->lexer)->u.value;
8539
8540     default:
8541       return NULL_TREE;
8542     }
8543 }
8544
8545 /* Parse an (optional) function-specifier.
8546
8547    function-specifier:
8548      inline
8549      virtual
8550      explicit
8551
8552    Returns an IDENTIFIER_NODE corresponding to the keyword used.
8553    Updates DECL_SPECS, if it is non-NULL.  */
8554
8555 static tree
8556 cp_parser_function_specifier_opt (cp_parser* parser,
8557                                   cp_decl_specifier_seq *decl_specs)
8558 {
8559   cp_token *token = cp_lexer_peek_token (parser->lexer);
8560   switch (token->keyword)
8561     {
8562     case RID_INLINE:
8563       if (decl_specs)
8564         ++decl_specs->specs[(int) ds_inline];
8565       break;
8566
8567     case RID_VIRTUAL:
8568       /* 14.5.2.3 [temp.mem]
8569
8570          A member function template shall not be virtual.  */
8571       if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8572         error ("%Htemplates may not be %<virtual%>", &token->location);
8573       else if (decl_specs)
8574         ++decl_specs->specs[(int) ds_virtual];
8575       break;
8576
8577     case RID_EXPLICIT:
8578       if (decl_specs)
8579         ++decl_specs->specs[(int) ds_explicit];
8580       break;
8581
8582     default:
8583       return NULL_TREE;
8584     }
8585
8586   /* Consume the token.  */
8587   return cp_lexer_consume_token (parser->lexer)->u.value;
8588 }
8589
8590 /* Parse a linkage-specification.
8591
8592    linkage-specification:
8593      extern string-literal { declaration-seq [opt] }
8594      extern string-literal declaration  */
8595
8596 static void
8597 cp_parser_linkage_specification (cp_parser* parser)
8598 {
8599   tree linkage;
8600
8601   /* Look for the `extern' keyword.  */
8602   cp_parser_require_keyword (parser, RID_EXTERN, "%<extern%>");
8603
8604   /* Look for the string-literal.  */
8605   linkage = cp_parser_string_literal (parser, false, false);
8606
8607   /* Transform the literal into an identifier.  If the literal is a
8608      wide-character string, or contains embedded NULs, then we can't
8609      handle it as the user wants.  */
8610   if (strlen (TREE_STRING_POINTER (linkage))
8611       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
8612     {
8613       cp_parser_error (parser, "invalid linkage-specification");
8614       /* Assume C++ linkage.  */
8615       linkage = lang_name_cplusplus;
8616     }
8617   else
8618     linkage = get_identifier (TREE_STRING_POINTER (linkage));
8619
8620   /* We're now using the new linkage.  */
8621   push_lang_context (linkage);
8622
8623   /* If the next token is a `{', then we're using the first
8624      production.  */
8625   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
8626     {
8627       /* Consume the `{' token.  */
8628       cp_lexer_consume_token (parser->lexer);
8629       /* Parse the declarations.  */
8630       cp_parser_declaration_seq_opt (parser);
8631       /* Look for the closing `}'.  */
8632       cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
8633     }
8634   /* Otherwise, there's just one declaration.  */
8635   else
8636     {
8637       bool saved_in_unbraced_linkage_specification_p;
8638
8639       saved_in_unbraced_linkage_specification_p
8640         = parser->in_unbraced_linkage_specification_p;
8641       parser->in_unbraced_linkage_specification_p = true;
8642       cp_parser_declaration (parser);
8643       parser->in_unbraced_linkage_specification_p
8644         = saved_in_unbraced_linkage_specification_p;
8645     }
8646
8647   /* We're done with the linkage-specification.  */
8648   pop_lang_context ();
8649 }
8650
8651 /* Parse a static_assert-declaration.
8652
8653    static_assert-declaration:
8654      static_assert ( constant-expression , string-literal ) ; 
8655
8656    If MEMBER_P, this static_assert is a class member.  */
8657
8658 static void 
8659 cp_parser_static_assert(cp_parser *parser, bool member_p)
8660 {
8661   tree condition;
8662   tree message;
8663   cp_token *token;
8664   location_t saved_loc;
8665
8666   /* Peek at the `static_assert' token so we can keep track of exactly
8667      where the static assertion started.  */
8668   token = cp_lexer_peek_token (parser->lexer);
8669   saved_loc = token->location;
8670
8671   /* Look for the `static_assert' keyword.  */
8672   if (!cp_parser_require_keyword (parser, RID_STATIC_ASSERT, 
8673                                   "%<static_assert%>"))
8674     return;
8675
8676   /*  We know we are in a static assertion; commit to any tentative
8677       parse.  */
8678   if (cp_parser_parsing_tentatively (parser))
8679     cp_parser_commit_to_tentative_parse (parser);
8680
8681   /* Parse the `(' starting the static assertion condition.  */
8682   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
8683
8684   /* Parse the constant-expression.  */
8685   condition = 
8686     cp_parser_constant_expression (parser,
8687                                    /*allow_non_constant_p=*/false,
8688                                    /*non_constant_p=*/NULL);
8689
8690   /* Parse the separating `,'.  */
8691   cp_parser_require (parser, CPP_COMMA, "%<,%>");
8692
8693   /* Parse the string-literal message.  */
8694   message = cp_parser_string_literal (parser, 
8695                                       /*translate=*/false,
8696                                       /*wide_ok=*/true);
8697
8698   /* A `)' completes the static assertion.  */
8699   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
8700     cp_parser_skip_to_closing_parenthesis (parser, 
8701                                            /*recovering=*/true, 
8702                                            /*or_comma=*/false,
8703                                            /*consume_paren=*/true);
8704
8705   /* A semicolon terminates the declaration.  */
8706   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
8707
8708   /* Complete the static assertion, which may mean either processing 
8709      the static assert now or saving it for template instantiation.  */
8710   finish_static_assert (condition, message, saved_loc, member_p);
8711 }
8712
8713 /* Parse a `decltype' type. Returns the type. 
8714
8715    simple-type-specifier:
8716      decltype ( expression )  */
8717
8718 static tree
8719 cp_parser_decltype (cp_parser *parser)
8720 {
8721   tree expr;
8722   bool id_expression_or_member_access_p = false;
8723   const char *saved_message;
8724   bool saved_integral_constant_expression_p;
8725   bool saved_non_integral_constant_expression_p;
8726   cp_token *id_expr_start_token;
8727
8728   /* Look for the `decltype' token.  */
8729   if (!cp_parser_require_keyword (parser, RID_DECLTYPE, "%<decltype%>"))
8730     return error_mark_node;
8731
8732   /* Types cannot be defined in a `decltype' expression.  Save away the
8733      old message.  */
8734   saved_message = parser->type_definition_forbidden_message;
8735
8736   /* And create the new one.  */
8737   parser->type_definition_forbidden_message
8738     = "types may not be defined in %<decltype%> expressions";
8739
8740   /* The restrictions on constant-expressions do not apply inside
8741      decltype expressions.  */
8742   saved_integral_constant_expression_p
8743     = parser->integral_constant_expression_p;
8744   saved_non_integral_constant_expression_p
8745     = parser->non_integral_constant_expression_p;
8746   parser->integral_constant_expression_p = false;
8747
8748   /* Do not actually evaluate the expression.  */
8749   ++skip_evaluation;
8750
8751   /* Parse the opening `('.  */
8752   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
8753     return error_mark_node;
8754   
8755   /* First, try parsing an id-expression.  */
8756   id_expr_start_token = cp_lexer_peek_token (parser->lexer);
8757   cp_parser_parse_tentatively (parser);
8758   expr = cp_parser_id_expression (parser,
8759                                   /*template_keyword_p=*/false,
8760                                   /*check_dependency_p=*/true,
8761                                   /*template_p=*/NULL,
8762                                   /*declarator_p=*/false,
8763                                   /*optional_p=*/false);
8764
8765   if (!cp_parser_error_occurred (parser) && expr != error_mark_node)
8766     {
8767       bool non_integral_constant_expression_p = false;
8768       tree id_expression = expr;
8769       cp_id_kind idk;
8770       const char *error_msg;
8771
8772       if (TREE_CODE (expr) == IDENTIFIER_NODE)
8773         /* Lookup the name we got back from the id-expression.  */
8774         expr = cp_parser_lookup_name (parser, expr,
8775                                       none_type,
8776                                       /*is_template=*/false,
8777                                       /*is_namespace=*/false,
8778                                       /*check_dependency=*/true,
8779                                       /*ambiguous_decls=*/NULL,
8780                                       id_expr_start_token->location);
8781
8782       if (expr
8783           && expr != error_mark_node
8784           && TREE_CODE (expr) != TEMPLATE_ID_EXPR
8785           && TREE_CODE (expr) != TYPE_DECL
8786           && (TREE_CODE (expr) != BIT_NOT_EXPR
8787               || !TYPE_P (TREE_OPERAND (expr, 0)))
8788           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
8789         {
8790           /* Complete lookup of the id-expression.  */
8791           expr = (finish_id_expression
8792                   (id_expression, expr, parser->scope, &idk,
8793                    /*integral_constant_expression_p=*/false,
8794                    /*allow_non_integral_constant_expression_p=*/true,
8795                    &non_integral_constant_expression_p,
8796                    /*template_p=*/false,
8797                    /*done=*/true,
8798                    /*address_p=*/false,
8799                    /*template_arg_p=*/false,
8800                    &error_msg,
8801                    id_expr_start_token->location));
8802
8803           if (expr == error_mark_node)
8804             /* We found an id-expression, but it was something that we
8805                should not have found. This is an error, not something
8806                we can recover from, so note that we found an
8807                id-expression and we'll recover as gracefully as
8808                possible.  */
8809             id_expression_or_member_access_p = true;
8810         }
8811
8812       if (expr 
8813           && expr != error_mark_node
8814           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
8815         /* We have an id-expression.  */
8816         id_expression_or_member_access_p = true;
8817     }
8818
8819   if (!id_expression_or_member_access_p)
8820     {
8821       /* Abort the id-expression parse.  */
8822       cp_parser_abort_tentative_parse (parser);
8823
8824       /* Parsing tentatively, again.  */
8825       cp_parser_parse_tentatively (parser);
8826
8827       /* Parse a class member access.  */
8828       expr = cp_parser_postfix_expression (parser, /*address_p=*/false,
8829                                            /*cast_p=*/false,
8830                                            /*member_access_only_p=*/true);
8831
8832       if (expr 
8833           && expr != error_mark_node
8834           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
8835         /* We have an id-expression.  */
8836         id_expression_or_member_access_p = true;
8837     }
8838
8839   if (id_expression_or_member_access_p)
8840     /* We have parsed the complete id-expression or member access.  */
8841     cp_parser_parse_definitely (parser);
8842   else
8843     {
8844       /* Abort our attempt to parse an id-expression or member access
8845          expression.  */
8846       cp_parser_abort_tentative_parse (parser);
8847
8848       /* Parse a full expression.  */
8849       expr = cp_parser_expression (parser, /*cast_p=*/false);
8850     }
8851
8852   /* Go back to evaluating expressions.  */
8853   --skip_evaluation;
8854
8855   /* Restore the old message and the integral constant expression
8856      flags.  */
8857   parser->type_definition_forbidden_message = saved_message;
8858   parser->integral_constant_expression_p
8859     = saved_integral_constant_expression_p;
8860   parser->non_integral_constant_expression_p
8861     = saved_non_integral_constant_expression_p;
8862
8863   if (expr == error_mark_node)
8864     {
8865       /* Skip everything up to the closing `)'.  */
8866       cp_parser_skip_to_closing_parenthesis (parser, true, false,
8867                                              /*consume_paren=*/true);
8868       return error_mark_node;
8869     }
8870   
8871   /* Parse to the closing `)'.  */
8872   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
8873     {
8874       cp_parser_skip_to_closing_parenthesis (parser, true, false,
8875                                              /*consume_paren=*/true);
8876       return error_mark_node;
8877     }
8878
8879   return finish_decltype_type (expr, id_expression_or_member_access_p);
8880 }
8881
8882 /* Special member functions [gram.special] */
8883
8884 /* Parse a conversion-function-id.
8885
8886    conversion-function-id:
8887      operator conversion-type-id
8888
8889    Returns an IDENTIFIER_NODE representing the operator.  */
8890
8891 static tree
8892 cp_parser_conversion_function_id (cp_parser* parser)
8893 {
8894   tree type;
8895   tree saved_scope;
8896   tree saved_qualifying_scope;
8897   tree saved_object_scope;
8898   tree pushed_scope = NULL_TREE;
8899
8900   /* Look for the `operator' token.  */
8901   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "%<operator%>"))
8902     return error_mark_node;
8903   /* When we parse the conversion-type-id, the current scope will be
8904      reset.  However, we need that information in able to look up the
8905      conversion function later, so we save it here.  */
8906   saved_scope = parser->scope;
8907   saved_qualifying_scope = parser->qualifying_scope;
8908   saved_object_scope = parser->object_scope;
8909   /* We must enter the scope of the class so that the names of
8910      entities declared within the class are available in the
8911      conversion-type-id.  For example, consider:
8912
8913        struct S {
8914          typedef int I;
8915          operator I();
8916        };
8917
8918        S::operator I() { ... }
8919
8920      In order to see that `I' is a type-name in the definition, we
8921      must be in the scope of `S'.  */
8922   if (saved_scope)
8923     pushed_scope = push_scope (saved_scope);
8924   /* Parse the conversion-type-id.  */
8925   type = cp_parser_conversion_type_id (parser);
8926   /* Leave the scope of the class, if any.  */
8927   if (pushed_scope)
8928     pop_scope (pushed_scope);
8929   /* Restore the saved scope.  */
8930   parser->scope = saved_scope;
8931   parser->qualifying_scope = saved_qualifying_scope;
8932   parser->object_scope = saved_object_scope;
8933   /* If the TYPE is invalid, indicate failure.  */
8934   if (type == error_mark_node)
8935     return error_mark_node;
8936   return mangle_conv_op_name_for_type (type);
8937 }
8938
8939 /* Parse a conversion-type-id:
8940
8941    conversion-type-id:
8942      type-specifier-seq conversion-declarator [opt]
8943
8944    Returns the TYPE specified.  */
8945
8946 static tree
8947 cp_parser_conversion_type_id (cp_parser* parser)
8948 {
8949   tree attributes;
8950   cp_decl_specifier_seq type_specifiers;
8951   cp_declarator *declarator;
8952   tree type_specified;
8953
8954   /* Parse the attributes.  */
8955   attributes = cp_parser_attributes_opt (parser);
8956   /* Parse the type-specifiers.  */
8957   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
8958                                 &type_specifiers);
8959   /* If that didn't work, stop.  */
8960   if (type_specifiers.type == error_mark_node)
8961     return error_mark_node;
8962   /* Parse the conversion-declarator.  */
8963   declarator = cp_parser_conversion_declarator_opt (parser);
8964
8965   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
8966                                     /*initialized=*/0, &attributes);
8967   if (attributes)
8968     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
8969   return type_specified;
8970 }
8971
8972 /* Parse an (optional) conversion-declarator.
8973
8974    conversion-declarator:
8975      ptr-operator conversion-declarator [opt]
8976
8977    */
8978
8979 static cp_declarator *
8980 cp_parser_conversion_declarator_opt (cp_parser* parser)
8981 {
8982   enum tree_code code;
8983   tree class_type;
8984   cp_cv_quals cv_quals;
8985
8986   /* We don't know if there's a ptr-operator next, or not.  */
8987   cp_parser_parse_tentatively (parser);
8988   /* Try the ptr-operator.  */
8989   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
8990   /* If it worked, look for more conversion-declarators.  */
8991   if (cp_parser_parse_definitely (parser))
8992     {
8993       cp_declarator *declarator;
8994
8995       /* Parse another optional declarator.  */
8996       declarator = cp_parser_conversion_declarator_opt (parser);
8997
8998       return cp_parser_make_indirect_declarator
8999         (code, class_type, cv_quals, declarator);
9000    }
9001
9002   return NULL;
9003 }
9004
9005 /* Parse an (optional) ctor-initializer.
9006
9007    ctor-initializer:
9008      : mem-initializer-list
9009
9010    Returns TRUE iff the ctor-initializer was actually present.  */
9011
9012 static bool
9013 cp_parser_ctor_initializer_opt (cp_parser* parser)
9014 {
9015   /* If the next token is not a `:', then there is no
9016      ctor-initializer.  */
9017   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
9018     {
9019       /* Do default initialization of any bases and members.  */
9020       if (DECL_CONSTRUCTOR_P (current_function_decl))
9021         finish_mem_initializers (NULL_TREE);
9022
9023       return false;
9024     }
9025
9026   /* Consume the `:' token.  */
9027   cp_lexer_consume_token (parser->lexer);
9028   /* And the mem-initializer-list.  */
9029   cp_parser_mem_initializer_list (parser);
9030
9031   return true;
9032 }
9033
9034 /* Parse a mem-initializer-list.
9035
9036    mem-initializer-list:
9037      mem-initializer ... [opt]
9038      mem-initializer ... [opt] , mem-initializer-list  */
9039
9040 static void
9041 cp_parser_mem_initializer_list (cp_parser* parser)
9042 {
9043   tree mem_initializer_list = NULL_TREE;
9044   cp_token *token = cp_lexer_peek_token (parser->lexer);
9045
9046   /* Let the semantic analysis code know that we are starting the
9047      mem-initializer-list.  */
9048   if (!DECL_CONSTRUCTOR_P (current_function_decl))
9049     error ("%Honly constructors take base initializers",
9050            &token->location);
9051
9052   /* Loop through the list.  */
9053   while (true)
9054     {
9055       tree mem_initializer;
9056
9057       token = cp_lexer_peek_token (parser->lexer);
9058       /* Parse the mem-initializer.  */
9059       mem_initializer = cp_parser_mem_initializer (parser);
9060       /* If the next token is a `...', we're expanding member initializers. */
9061       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
9062         {
9063           /* Consume the `...'. */
9064           cp_lexer_consume_token (parser->lexer);
9065
9066           /* The TREE_PURPOSE must be a _TYPE, because base-specifiers
9067              can be expanded but members cannot. */
9068           if (mem_initializer != error_mark_node
9069               && !TYPE_P (TREE_PURPOSE (mem_initializer)))
9070             {
9071               error ("%Hcannot expand initializer for member %<%D%>",
9072                      &token->location, TREE_PURPOSE (mem_initializer));
9073               mem_initializer = error_mark_node;
9074             }
9075
9076           /* Construct the pack expansion type. */
9077           if (mem_initializer != error_mark_node)
9078             mem_initializer = make_pack_expansion (mem_initializer);
9079         }
9080       /* Add it to the list, unless it was erroneous.  */
9081       if (mem_initializer != error_mark_node)
9082         {
9083           TREE_CHAIN (mem_initializer) = mem_initializer_list;
9084           mem_initializer_list = mem_initializer;
9085         }
9086       /* If the next token is not a `,', we're done.  */
9087       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
9088         break;
9089       /* Consume the `,' token.  */
9090       cp_lexer_consume_token (parser->lexer);
9091     }
9092
9093   /* Perform semantic analysis.  */
9094   if (DECL_CONSTRUCTOR_P (current_function_decl))
9095     finish_mem_initializers (mem_initializer_list);
9096 }
9097
9098 /* Parse a mem-initializer.
9099
9100    mem-initializer:
9101      mem-initializer-id ( expression-list [opt] )
9102      mem-initializer-id braced-init-list
9103
9104    GNU extension:
9105
9106    mem-initializer:
9107      ( expression-list [opt] )
9108
9109    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
9110    class) or FIELD_DECL (for a non-static data member) to initialize;
9111    the TREE_VALUE is the expression-list.  An empty initialization
9112    list is represented by void_list_node.  */
9113
9114 static tree
9115 cp_parser_mem_initializer (cp_parser* parser)
9116 {
9117   tree mem_initializer_id;
9118   tree expression_list;
9119   tree member;
9120   cp_token *token = cp_lexer_peek_token (parser->lexer);
9121
9122   /* Find out what is being initialized.  */
9123   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
9124     {
9125       permerror (token->location,
9126                  "anachronistic old-style base class initializer");
9127       mem_initializer_id = NULL_TREE;
9128     }
9129   else
9130     mem_initializer_id = cp_parser_mem_initializer_id (parser);
9131   member = expand_member_init (mem_initializer_id);
9132   if (member && !DECL_P (member))
9133     in_base_initializer = 1;
9134
9135   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9136     {
9137       bool expr_non_constant_p;
9138       maybe_warn_cpp0x ("extended initializer lists");
9139       expression_list = cp_parser_braced_list (parser, &expr_non_constant_p);
9140       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
9141       expression_list = build_tree_list (NULL_TREE, expression_list);
9142     }
9143   else
9144     expression_list
9145       = cp_parser_parenthesized_expression_list (parser, false,
9146                                                  /*cast_p=*/false,
9147                                                  /*allow_expansion_p=*/true,
9148                                                  /*non_constant_p=*/NULL);
9149   if (expression_list == error_mark_node)
9150     return error_mark_node;
9151   if (!expression_list)
9152     expression_list = void_type_node;
9153
9154   in_base_initializer = 0;
9155
9156   return member ? build_tree_list (member, expression_list) : error_mark_node;
9157 }
9158
9159 /* Parse a mem-initializer-id.
9160
9161    mem-initializer-id:
9162      :: [opt] nested-name-specifier [opt] class-name
9163      identifier
9164
9165    Returns a TYPE indicating the class to be initializer for the first
9166    production.  Returns an IDENTIFIER_NODE indicating the data member
9167    to be initialized for the second production.  */
9168
9169 static tree
9170 cp_parser_mem_initializer_id (cp_parser* parser)
9171 {
9172   bool global_scope_p;
9173   bool nested_name_specifier_p;
9174   bool template_p = false;
9175   tree id;
9176
9177   cp_token *token = cp_lexer_peek_token (parser->lexer);
9178
9179   /* `typename' is not allowed in this context ([temp.res]).  */
9180   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
9181     {
9182       error ("%Hkeyword %<typename%> not allowed in this context (a qualified "
9183              "member initializer is implicitly a type)",
9184              &token->location);
9185       cp_lexer_consume_token (parser->lexer);
9186     }
9187   /* Look for the optional `::' operator.  */
9188   global_scope_p
9189     = (cp_parser_global_scope_opt (parser,
9190                                    /*current_scope_valid_p=*/false)
9191        != NULL_TREE);
9192   /* Look for the optional nested-name-specifier.  The simplest way to
9193      implement:
9194
9195        [temp.res]
9196
9197        The keyword `typename' is not permitted in a base-specifier or
9198        mem-initializer; in these contexts a qualified name that
9199        depends on a template-parameter is implicitly assumed to be a
9200        type name.
9201
9202      is to assume that we have seen the `typename' keyword at this
9203      point.  */
9204   nested_name_specifier_p
9205     = (cp_parser_nested_name_specifier_opt (parser,
9206                                             /*typename_keyword_p=*/true,
9207                                             /*check_dependency_p=*/true,
9208                                             /*type_p=*/true,
9209                                             /*is_declaration=*/true)
9210        != NULL_TREE);
9211   if (nested_name_specifier_p)
9212     template_p = cp_parser_optional_template_keyword (parser);
9213   /* If there is a `::' operator or a nested-name-specifier, then we
9214      are definitely looking for a class-name.  */
9215   if (global_scope_p || nested_name_specifier_p)
9216     return cp_parser_class_name (parser,
9217                                  /*typename_keyword_p=*/true,
9218                                  /*template_keyword_p=*/template_p,
9219                                  none_type,
9220                                  /*check_dependency_p=*/true,
9221                                  /*class_head_p=*/false,
9222                                  /*is_declaration=*/true);
9223   /* Otherwise, we could also be looking for an ordinary identifier.  */
9224   cp_parser_parse_tentatively (parser);
9225   /* Try a class-name.  */
9226   id = cp_parser_class_name (parser,
9227                              /*typename_keyword_p=*/true,
9228                              /*template_keyword_p=*/false,
9229                              none_type,
9230                              /*check_dependency_p=*/true,
9231                              /*class_head_p=*/false,
9232                              /*is_declaration=*/true);
9233   /* If we found one, we're done.  */
9234   if (cp_parser_parse_definitely (parser))
9235     return id;
9236   /* Otherwise, look for an ordinary identifier.  */
9237   return cp_parser_identifier (parser);
9238 }
9239
9240 /* Overloading [gram.over] */
9241
9242 /* Parse an operator-function-id.
9243
9244    operator-function-id:
9245      operator operator
9246
9247    Returns an IDENTIFIER_NODE for the operator which is a
9248    human-readable spelling of the identifier, e.g., `operator +'.  */
9249
9250 static tree
9251 cp_parser_operator_function_id (cp_parser* parser)
9252 {
9253   /* Look for the `operator' keyword.  */
9254   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "%<operator%>"))
9255     return error_mark_node;
9256   /* And then the name of the operator itself.  */
9257   return cp_parser_operator (parser);
9258 }
9259
9260 /* Parse an operator.
9261
9262    operator:
9263      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
9264      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
9265      || ++ -- , ->* -> () []
9266
9267    GNU Extensions:
9268
9269    operator:
9270      <? >? <?= >?=
9271
9272    Returns an IDENTIFIER_NODE for the operator which is a
9273    human-readable spelling of the identifier, e.g., `operator +'.  */
9274
9275 static tree
9276 cp_parser_operator (cp_parser* parser)
9277 {
9278   tree id = NULL_TREE;
9279   cp_token *token;
9280
9281   /* Peek at the next token.  */
9282   token = cp_lexer_peek_token (parser->lexer);
9283   /* Figure out which operator we have.  */
9284   switch (token->type)
9285     {
9286     case CPP_KEYWORD:
9287       {
9288         enum tree_code op;
9289
9290         /* The keyword should be either `new' or `delete'.  */
9291         if (token->keyword == RID_NEW)
9292           op = NEW_EXPR;
9293         else if (token->keyword == RID_DELETE)
9294           op = DELETE_EXPR;
9295         else
9296           break;
9297
9298         /* Consume the `new' or `delete' token.  */
9299         cp_lexer_consume_token (parser->lexer);
9300
9301         /* Peek at the next token.  */
9302         token = cp_lexer_peek_token (parser->lexer);
9303         /* If it's a `[' token then this is the array variant of the
9304            operator.  */
9305         if (token->type == CPP_OPEN_SQUARE)
9306           {
9307             /* Consume the `[' token.  */
9308             cp_lexer_consume_token (parser->lexer);
9309             /* Look for the `]' token.  */
9310             cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
9311             id = ansi_opname (op == NEW_EXPR
9312                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
9313           }
9314         /* Otherwise, we have the non-array variant.  */
9315         else
9316           id = ansi_opname (op);
9317
9318         return id;
9319       }
9320
9321     case CPP_PLUS:
9322       id = ansi_opname (PLUS_EXPR);
9323       break;
9324
9325     case CPP_MINUS:
9326       id = ansi_opname (MINUS_EXPR);
9327       break;
9328
9329     case CPP_MULT:
9330       id = ansi_opname (MULT_EXPR);
9331       break;
9332
9333     case CPP_DIV:
9334       id = ansi_opname (TRUNC_DIV_EXPR);
9335       break;
9336
9337     case CPP_MOD:
9338       id = ansi_opname (TRUNC_MOD_EXPR);
9339       break;
9340
9341     case CPP_XOR:
9342       id = ansi_opname (BIT_XOR_EXPR);
9343       break;
9344
9345     case CPP_AND:
9346       id = ansi_opname (BIT_AND_EXPR);
9347       break;
9348
9349     case CPP_OR:
9350       id = ansi_opname (BIT_IOR_EXPR);
9351       break;
9352
9353     case CPP_COMPL:
9354       id = ansi_opname (BIT_NOT_EXPR);
9355       break;
9356
9357     case CPP_NOT:
9358       id = ansi_opname (TRUTH_NOT_EXPR);
9359       break;
9360
9361     case CPP_EQ:
9362       id = ansi_assopname (NOP_EXPR);
9363       break;
9364
9365     case CPP_LESS:
9366       id = ansi_opname (LT_EXPR);
9367       break;
9368
9369     case CPP_GREATER:
9370       id = ansi_opname (GT_EXPR);
9371       break;
9372
9373     case CPP_PLUS_EQ:
9374       id = ansi_assopname (PLUS_EXPR);
9375       break;
9376
9377     case CPP_MINUS_EQ:
9378       id = ansi_assopname (MINUS_EXPR);
9379       break;
9380
9381     case CPP_MULT_EQ:
9382       id = ansi_assopname (MULT_EXPR);
9383       break;
9384
9385     case CPP_DIV_EQ:
9386       id = ansi_assopname (TRUNC_DIV_EXPR);
9387       break;
9388
9389     case CPP_MOD_EQ:
9390       id = ansi_assopname (TRUNC_MOD_EXPR);
9391       break;
9392
9393     case CPP_XOR_EQ:
9394       id = ansi_assopname (BIT_XOR_EXPR);
9395       break;
9396
9397     case CPP_AND_EQ:
9398       id = ansi_assopname (BIT_AND_EXPR);
9399       break;
9400
9401     case CPP_OR_EQ:
9402       id = ansi_assopname (BIT_IOR_EXPR);
9403       break;
9404
9405     case CPP_LSHIFT:
9406       id = ansi_opname (LSHIFT_EXPR);
9407       break;
9408
9409     case CPP_RSHIFT:
9410       id = ansi_opname (RSHIFT_EXPR);
9411       break;
9412
9413     case CPP_LSHIFT_EQ:
9414       id = ansi_assopname (LSHIFT_EXPR);
9415       break;
9416
9417     case CPP_RSHIFT_EQ:
9418       id = ansi_assopname (RSHIFT_EXPR);
9419       break;
9420
9421     case CPP_EQ_EQ:
9422       id = ansi_opname (EQ_EXPR);
9423       break;
9424
9425     case CPP_NOT_EQ:
9426       id = ansi_opname (NE_EXPR);
9427       break;
9428
9429     case CPP_LESS_EQ:
9430       id = ansi_opname (LE_EXPR);
9431       break;
9432
9433     case CPP_GREATER_EQ:
9434       id = ansi_opname (GE_EXPR);
9435       break;
9436
9437     case CPP_AND_AND:
9438       id = ansi_opname (TRUTH_ANDIF_EXPR);
9439       break;
9440
9441     case CPP_OR_OR:
9442       id = ansi_opname (TRUTH_ORIF_EXPR);
9443       break;
9444
9445     case CPP_PLUS_PLUS:
9446       id = ansi_opname (POSTINCREMENT_EXPR);
9447       break;
9448
9449     case CPP_MINUS_MINUS:
9450       id = ansi_opname (PREDECREMENT_EXPR);
9451       break;
9452
9453     case CPP_COMMA:
9454       id = ansi_opname (COMPOUND_EXPR);
9455       break;
9456
9457     case CPP_DEREF_STAR:
9458       id = ansi_opname (MEMBER_REF);
9459       break;
9460
9461     case CPP_DEREF:
9462       id = ansi_opname (COMPONENT_REF);
9463       break;
9464
9465     case CPP_OPEN_PAREN:
9466       /* Consume the `('.  */
9467       cp_lexer_consume_token (parser->lexer);
9468       /* Look for the matching `)'.  */
9469       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
9470       return ansi_opname (CALL_EXPR);
9471
9472     case CPP_OPEN_SQUARE:
9473       /* Consume the `['.  */
9474       cp_lexer_consume_token (parser->lexer);
9475       /* Look for the matching `]'.  */
9476       cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
9477       return ansi_opname (ARRAY_REF);
9478
9479     default:
9480       /* Anything else is an error.  */
9481       break;
9482     }
9483
9484   /* If we have selected an identifier, we need to consume the
9485      operator token.  */
9486   if (id)
9487     cp_lexer_consume_token (parser->lexer);
9488   /* Otherwise, no valid operator name was present.  */
9489   else
9490     {
9491       cp_parser_error (parser, "expected operator");
9492       id = error_mark_node;
9493     }
9494
9495   return id;
9496 }
9497
9498 /* Parse a template-declaration.
9499
9500    template-declaration:
9501      export [opt] template < template-parameter-list > declaration
9502
9503    If MEMBER_P is TRUE, this template-declaration occurs within a
9504    class-specifier.
9505
9506    The grammar rule given by the standard isn't correct.  What
9507    is really meant is:
9508
9509    template-declaration:
9510      export [opt] template-parameter-list-seq
9511        decl-specifier-seq [opt] init-declarator [opt] ;
9512      export [opt] template-parameter-list-seq
9513        function-definition
9514
9515    template-parameter-list-seq:
9516      template-parameter-list-seq [opt]
9517      template < template-parameter-list >  */
9518
9519 static void
9520 cp_parser_template_declaration (cp_parser* parser, bool member_p)
9521 {
9522   /* Check for `export'.  */
9523   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
9524     {
9525       /* Consume the `export' token.  */
9526       cp_lexer_consume_token (parser->lexer);
9527       /* Warn that we do not support `export'.  */
9528       warning (0, "keyword %<export%> not implemented, and will be ignored");
9529     }
9530
9531   cp_parser_template_declaration_after_export (parser, member_p);
9532 }
9533
9534 /* Parse a template-parameter-list.
9535
9536    template-parameter-list:
9537      template-parameter
9538      template-parameter-list , template-parameter
9539
9540    Returns a TREE_LIST.  Each node represents a template parameter.
9541    The nodes are connected via their TREE_CHAINs.  */
9542
9543 static tree
9544 cp_parser_template_parameter_list (cp_parser* parser)
9545 {
9546   tree parameter_list = NULL_TREE;
9547
9548   begin_template_parm_list ();
9549   while (true)
9550     {
9551       tree parameter;
9552       bool is_non_type;
9553       bool is_parameter_pack;
9554
9555       /* Parse the template-parameter.  */
9556       parameter = cp_parser_template_parameter (parser, 
9557                                                 &is_non_type,
9558                                                 &is_parameter_pack);
9559       /* Add it to the list.  */
9560       if (parameter != error_mark_node)
9561         parameter_list = process_template_parm (parameter_list,
9562                                                 parameter,
9563                                                 is_non_type,
9564                                                 is_parameter_pack);
9565       else
9566        {
9567          tree err_parm = build_tree_list (parameter, parameter);
9568          TREE_VALUE (err_parm) = error_mark_node;
9569          parameter_list = chainon (parameter_list, err_parm);
9570        }
9571
9572       /* If the next token is not a `,', we're done.  */
9573       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
9574         break;
9575       /* Otherwise, consume the `,' token.  */
9576       cp_lexer_consume_token (parser->lexer);
9577     }
9578
9579   return end_template_parm_list (parameter_list);
9580 }
9581
9582 /* Parse a template-parameter.
9583
9584    template-parameter:
9585      type-parameter
9586      parameter-declaration
9587
9588    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
9589    the parameter.  The TREE_PURPOSE is the default value, if any.
9590    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
9591    iff this parameter is a non-type parameter.  *IS_PARAMETER_PACK is
9592    set to true iff this parameter is a parameter pack. */
9593
9594 static tree
9595 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type,
9596                               bool *is_parameter_pack)
9597 {
9598   cp_token *token;
9599   cp_parameter_declarator *parameter_declarator;
9600   cp_declarator *id_declarator;
9601   tree parm;
9602
9603   /* Assume it is a type parameter or a template parameter.  */
9604   *is_non_type = false;
9605   /* Assume it not a parameter pack. */
9606   *is_parameter_pack = false;
9607   /* Peek at the next token.  */
9608   token = cp_lexer_peek_token (parser->lexer);
9609   /* If it is `class' or `template', we have a type-parameter.  */
9610   if (token->keyword == RID_TEMPLATE)
9611     return cp_parser_type_parameter (parser, is_parameter_pack);
9612   /* If it is `class' or `typename' we do not know yet whether it is a
9613      type parameter or a non-type parameter.  Consider:
9614
9615        template <typename T, typename T::X X> ...
9616
9617      or:
9618
9619        template <class C, class D*> ...
9620
9621      Here, the first parameter is a type parameter, and the second is
9622      a non-type parameter.  We can tell by looking at the token after
9623      the identifier -- if it is a `,', `=', or `>' then we have a type
9624      parameter.  */
9625   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
9626     {
9627       /* Peek at the token after `class' or `typename'.  */
9628       token = cp_lexer_peek_nth_token (parser->lexer, 2);
9629       /* If it's an ellipsis, we have a template type parameter
9630          pack. */
9631       if (token->type == CPP_ELLIPSIS)
9632         return cp_parser_type_parameter (parser, is_parameter_pack);
9633       /* If it's an identifier, skip it.  */
9634       if (token->type == CPP_NAME)
9635         token = cp_lexer_peek_nth_token (parser->lexer, 3);
9636       /* Now, see if the token looks like the end of a template
9637          parameter.  */
9638       if (token->type == CPP_COMMA
9639           || token->type == CPP_EQ
9640           || token->type == CPP_GREATER)
9641         return cp_parser_type_parameter (parser, is_parameter_pack);
9642     }
9643
9644   /* Otherwise, it is a non-type parameter.
9645
9646      [temp.param]
9647
9648      When parsing a default template-argument for a non-type
9649      template-parameter, the first non-nested `>' is taken as the end
9650      of the template parameter-list rather than a greater-than
9651      operator.  */
9652   *is_non_type = true;
9653   parameter_declarator
9654      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
9655                                         /*parenthesized_p=*/NULL);
9656
9657   /* If the parameter declaration is marked as a parameter pack, set
9658      *IS_PARAMETER_PACK to notify the caller. Also, unmark the
9659      declarator's PACK_EXPANSION_P, otherwise we'll get errors from
9660      grokdeclarator. */
9661   if (parameter_declarator
9662       && parameter_declarator->declarator
9663       && parameter_declarator->declarator->parameter_pack_p)
9664     {
9665       *is_parameter_pack = true;
9666       parameter_declarator->declarator->parameter_pack_p = false;
9667     }
9668
9669   /* If the next token is an ellipsis, and we don't already have it
9670      marked as a parameter pack, then we have a parameter pack (that
9671      has no declarator).  */
9672   if (!*is_parameter_pack
9673       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
9674       && declarator_can_be_parameter_pack (parameter_declarator->declarator))
9675     {
9676       /* Consume the `...'.  */
9677       cp_lexer_consume_token (parser->lexer);
9678       maybe_warn_variadic_templates ();
9679       
9680       *is_parameter_pack = true;
9681     }
9682   /* We might end up with a pack expansion as the type of the non-type
9683      template parameter, in which case this is a non-type template
9684      parameter pack.  */
9685   else if (parameter_declarator
9686            && parameter_declarator->decl_specifiers.type
9687            && PACK_EXPANSION_P (parameter_declarator->decl_specifiers.type))
9688     {
9689       *is_parameter_pack = true;
9690       parameter_declarator->decl_specifiers.type = 
9691         PACK_EXPANSION_PATTERN (parameter_declarator->decl_specifiers.type);
9692     }
9693
9694   if (*is_parameter_pack && cp_lexer_next_token_is (parser->lexer, CPP_EQ))
9695     {
9696       /* Parameter packs cannot have default arguments.  However, a
9697          user may try to do so, so we'll parse them and give an
9698          appropriate diagnostic here.  */
9699
9700       /* Consume the `='.  */
9701       cp_token *start_token = cp_lexer_peek_token (parser->lexer);
9702       cp_lexer_consume_token (parser->lexer);
9703       
9704       /* Find the name of the parameter pack.  */     
9705       id_declarator = parameter_declarator->declarator;
9706       while (id_declarator && id_declarator->kind != cdk_id)
9707         id_declarator = id_declarator->declarator;
9708       
9709       if (id_declarator && id_declarator->kind == cdk_id)
9710         error ("%Htemplate parameter pack %qD cannot have a default argument",
9711                &start_token->location, id_declarator->u.id.unqualified_name);
9712       else
9713         error ("%Htemplate parameter pack cannot have a default argument",
9714                &start_token->location);
9715       
9716       /* Parse the default argument, but throw away the result.  */
9717       cp_parser_default_argument (parser, /*template_parm_p=*/true);
9718     }
9719
9720   parm = grokdeclarator (parameter_declarator->declarator,
9721                          &parameter_declarator->decl_specifiers,
9722                          PARM, /*initialized=*/0,
9723                          /*attrlist=*/NULL);
9724   if (parm == error_mark_node)
9725     return error_mark_node;
9726
9727   return build_tree_list (parameter_declarator->default_argument, parm);
9728 }
9729
9730 /* Parse a type-parameter.
9731
9732    type-parameter:
9733      class identifier [opt]
9734      class identifier [opt] = type-id
9735      typename identifier [opt]
9736      typename identifier [opt] = type-id
9737      template < template-parameter-list > class identifier [opt]
9738      template < template-parameter-list > class identifier [opt]
9739        = id-expression
9740
9741    GNU Extension (variadic templates):
9742
9743    type-parameter:
9744      class ... identifier [opt]
9745      typename ... identifier [opt]
9746
9747    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
9748    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
9749    the declaration of the parameter.
9750
9751    Sets *IS_PARAMETER_PACK if this is a template parameter pack. */
9752
9753 static tree
9754 cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
9755 {
9756   cp_token *token;
9757   tree parameter;
9758
9759   /* Look for a keyword to tell us what kind of parameter this is.  */
9760   token = cp_parser_require (parser, CPP_KEYWORD,
9761                              "%<class%>, %<typename%>, or %<template%>");
9762   if (!token)
9763     return error_mark_node;
9764
9765   switch (token->keyword)
9766     {
9767     case RID_CLASS:
9768     case RID_TYPENAME:
9769       {
9770         tree identifier;
9771         tree default_argument;
9772
9773         /* If the next token is an ellipsis, we have a template
9774            argument pack. */
9775         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
9776           {
9777             /* Consume the `...' token. */
9778             cp_lexer_consume_token (parser->lexer);
9779             maybe_warn_variadic_templates ();
9780
9781             *is_parameter_pack = true;
9782           }
9783
9784         /* If the next token is an identifier, then it names the
9785            parameter.  */
9786         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
9787           identifier = cp_parser_identifier (parser);
9788         else
9789           identifier = NULL_TREE;
9790
9791         /* Create the parameter.  */
9792         parameter = finish_template_type_parm (class_type_node, identifier);
9793
9794         /* If the next token is an `=', we have a default argument.  */
9795         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
9796           {
9797             /* Consume the `=' token.  */
9798             cp_lexer_consume_token (parser->lexer);
9799             /* Parse the default-argument.  */
9800             push_deferring_access_checks (dk_no_deferred);
9801             default_argument = cp_parser_type_id (parser);
9802
9803             /* Template parameter packs cannot have default
9804                arguments. */
9805             if (*is_parameter_pack)
9806               {
9807                 if (identifier)
9808                   error ("%Htemplate parameter pack %qD cannot have a "
9809                          "default argument", &token->location, identifier);
9810                 else
9811                   error ("%Htemplate parameter packs cannot have "
9812                          "default arguments", &token->location);
9813                 default_argument = NULL_TREE;
9814               }
9815             pop_deferring_access_checks ();
9816           }
9817         else
9818           default_argument = NULL_TREE;
9819
9820         /* Create the combined representation of the parameter and the
9821            default argument.  */
9822         parameter = build_tree_list (default_argument, parameter);
9823       }
9824       break;
9825
9826     case RID_TEMPLATE:
9827       {
9828         tree parameter_list;
9829         tree identifier;
9830         tree default_argument;
9831
9832         /* Look for the `<'.  */
9833         cp_parser_require (parser, CPP_LESS, "%<<%>");
9834         /* Parse the template-parameter-list.  */
9835         parameter_list = cp_parser_template_parameter_list (parser);
9836         /* Look for the `>'.  */
9837         cp_parser_require (parser, CPP_GREATER, "%<>%>");
9838         /* Look for the `class' keyword.  */
9839         cp_parser_require_keyword (parser, RID_CLASS, "%<class%>");
9840         /* If the next token is an ellipsis, we have a template
9841            argument pack. */
9842         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
9843           {
9844             /* Consume the `...' token. */
9845             cp_lexer_consume_token (parser->lexer);
9846             maybe_warn_variadic_templates ();
9847
9848             *is_parameter_pack = true;
9849           }
9850         /* If the next token is an `=', then there is a
9851            default-argument.  If the next token is a `>', we are at
9852            the end of the parameter-list.  If the next token is a `,',
9853            then we are at the end of this parameter.  */
9854         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
9855             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
9856             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
9857           {
9858             identifier = cp_parser_identifier (parser);
9859             /* Treat invalid names as if the parameter were nameless.  */
9860             if (identifier == error_mark_node)
9861               identifier = NULL_TREE;
9862           }
9863         else
9864           identifier = NULL_TREE;
9865
9866         /* Create the template parameter.  */
9867         parameter = finish_template_template_parm (class_type_node,
9868                                                    identifier);
9869
9870         /* If the next token is an `=', then there is a
9871            default-argument.  */
9872         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
9873           {
9874             bool is_template;
9875
9876             /* Consume the `='.  */
9877             cp_lexer_consume_token (parser->lexer);
9878             /* Parse the id-expression.  */
9879             push_deferring_access_checks (dk_no_deferred);
9880             /* save token before parsing the id-expression, for error
9881                reporting */
9882             token = cp_lexer_peek_token (parser->lexer);
9883             default_argument
9884               = cp_parser_id_expression (parser,
9885                                          /*template_keyword_p=*/false,
9886                                          /*check_dependency_p=*/true,
9887                                          /*template_p=*/&is_template,
9888                                          /*declarator_p=*/false,
9889                                          /*optional_p=*/false);
9890             if (TREE_CODE (default_argument) == TYPE_DECL)
9891               /* If the id-expression was a template-id that refers to
9892                  a template-class, we already have the declaration here,
9893                  so no further lookup is needed.  */
9894                  ;
9895             else
9896               /* Look up the name.  */
9897               default_argument
9898                 = cp_parser_lookup_name (parser, default_argument,
9899                                          none_type,
9900                                          /*is_template=*/is_template,
9901                                          /*is_namespace=*/false,
9902                                          /*check_dependency=*/true,
9903                                          /*ambiguous_decls=*/NULL,
9904                                          token->location);
9905             /* See if the default argument is valid.  */
9906             default_argument
9907               = check_template_template_default_arg (default_argument);
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 "
9915                          "have a default argument",
9916                          &token->location, identifier);
9917                 else
9918                   error ("%Htemplate parameter packs cannot "
9919                          "have default arguments",
9920                          &token->location);
9921                 default_argument = NULL_TREE;
9922               }
9923             pop_deferring_access_checks ();
9924           }
9925         else
9926           default_argument = NULL_TREE;
9927
9928         /* Create the combined representation of the parameter and the
9929            default argument.  */
9930         parameter = build_tree_list (default_argument, parameter);
9931       }
9932       break;
9933
9934     default:
9935       gcc_unreachable ();
9936       break;
9937     }
9938
9939   return parameter;
9940 }
9941
9942 /* Parse a template-id.
9943
9944    template-id:
9945      template-name < template-argument-list [opt] >
9946
9947    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
9948    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
9949    returned.  Otherwise, if the template-name names a function, or set
9950    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
9951    names a class, returns a TYPE_DECL for the specialization.
9952
9953    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
9954    uninstantiated templates.  */
9955
9956 static tree
9957 cp_parser_template_id (cp_parser *parser,
9958                        bool template_keyword_p,
9959                        bool check_dependency_p,
9960                        bool is_declaration)
9961 {
9962   int i;
9963   tree templ;
9964   tree arguments;
9965   tree template_id;
9966   cp_token_position start_of_id = 0;
9967   deferred_access_check *chk;
9968   VEC (deferred_access_check,gc) *access_check;
9969   cp_token *next_token = NULL, *next_token_2 = NULL, *token = NULL;
9970   bool is_identifier;
9971
9972   /* If the next token corresponds to a template-id, there is no need
9973      to reparse it.  */
9974   next_token = cp_lexer_peek_token (parser->lexer);
9975   if (next_token->type == CPP_TEMPLATE_ID)
9976     {
9977       struct tree_check *check_value;
9978
9979       /* Get the stored value.  */
9980       check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
9981       /* Perform any access checks that were deferred.  */
9982       access_check = check_value->checks;
9983       if (access_check)
9984         {
9985           for (i = 0 ;
9986                VEC_iterate (deferred_access_check, access_check, i, chk) ;
9987                ++i)
9988             {
9989               perform_or_defer_access_check (chk->binfo,
9990                                              chk->decl,
9991                                              chk->diag_decl);
9992             }
9993         }
9994       /* Return the stored value.  */
9995       return check_value->value;
9996     }
9997
9998   /* Avoid performing name lookup if there is no possibility of
9999      finding a template-id.  */
10000   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
10001       || (next_token->type == CPP_NAME
10002           && !cp_parser_nth_token_starts_template_argument_list_p
10003                (parser, 2)))
10004     {
10005       cp_parser_error (parser, "expected template-id");
10006       return error_mark_node;
10007     }
10008
10009   /* Remember where the template-id starts.  */
10010   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
10011     start_of_id = cp_lexer_token_position (parser->lexer, false);
10012
10013   push_deferring_access_checks (dk_deferred);
10014
10015   /* Parse the template-name.  */
10016   is_identifier = false;
10017   token = cp_lexer_peek_token (parser->lexer);
10018   templ = cp_parser_template_name (parser, template_keyword_p,
10019                                    check_dependency_p,
10020                                    is_declaration,
10021                                    &is_identifier);
10022   if (templ == error_mark_node || is_identifier)
10023     {
10024       pop_deferring_access_checks ();
10025       return templ;
10026     }
10027
10028   /* If we find the sequence `[:' after a template-name, it's probably
10029      a digraph-typo for `< ::'. Substitute the tokens and check if we can
10030      parse correctly the argument list.  */
10031   next_token = cp_lexer_peek_token (parser->lexer);
10032   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
10033   if (next_token->type == CPP_OPEN_SQUARE
10034       && next_token->flags & DIGRAPH
10035       && next_token_2->type == CPP_COLON
10036       && !(next_token_2->flags & PREV_WHITE))
10037     {
10038       cp_parser_parse_tentatively (parser);
10039       /* Change `:' into `::'.  */
10040       next_token_2->type = CPP_SCOPE;
10041       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
10042          CPP_LESS.  */
10043       cp_lexer_consume_token (parser->lexer);
10044
10045       /* Parse the arguments.  */
10046       arguments = cp_parser_enclosed_template_argument_list (parser);
10047       if (!cp_parser_parse_definitely (parser))
10048         {
10049           /* If we couldn't parse an argument list, then we revert our changes
10050              and return simply an error. Maybe this is not a template-id
10051              after all.  */
10052           next_token_2->type = CPP_COLON;
10053           cp_parser_error (parser, "expected %<<%>");
10054           pop_deferring_access_checks ();
10055           return error_mark_node;
10056         }
10057       /* Otherwise, emit an error about the invalid digraph, but continue
10058          parsing because we got our argument list.  */
10059       if (permerror (next_token->location,
10060                      "%<<::%> cannot begin a template-argument list"))
10061         {
10062           static bool hint = false;
10063           inform (next_token->location,
10064                   "%<<:%> is an alternate spelling for %<[%>."
10065                   " Insert whitespace between %<<%> and %<::%>");
10066           if (!hint && !flag_permissive)
10067             {
10068               inform (next_token->location, "(if you use %<-fpermissive%>"
10069                       " G++ will accept your code)");
10070               hint = true;
10071             }
10072         }
10073     }
10074   else
10075     {
10076       /* Look for the `<' that starts the template-argument-list.  */
10077       if (!cp_parser_require (parser, CPP_LESS, "%<<%>"))
10078         {
10079           pop_deferring_access_checks ();
10080           return error_mark_node;
10081         }
10082       /* Parse the arguments.  */
10083       arguments = cp_parser_enclosed_template_argument_list (parser);
10084     }
10085
10086   /* Build a representation of the specialization.  */
10087   if (TREE_CODE (templ) == IDENTIFIER_NODE)
10088     template_id = build_min_nt (TEMPLATE_ID_EXPR, templ, arguments);
10089   else if (DECL_CLASS_TEMPLATE_P (templ)
10090            || DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
10091     {
10092       bool entering_scope;
10093       /* In "template <typename T> ... A<T>::", A<T> is the abstract A
10094          template (rather than some instantiation thereof) only if
10095          is not nested within some other construct.  For example, in
10096          "template <typename T> void f(T) { A<T>::", A<T> is just an
10097          instantiation of A.  */
10098       entering_scope = (template_parm_scope_p ()
10099                         && cp_lexer_next_token_is (parser->lexer,
10100                                                    CPP_SCOPE));
10101       template_id
10102         = finish_template_type (templ, arguments, entering_scope);
10103     }
10104   else
10105     {
10106       /* If it's not a class-template or a template-template, it should be
10107          a function-template.  */
10108       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (templ)
10109                    || TREE_CODE (templ) == OVERLOAD
10110                    || BASELINK_P (templ)));
10111
10112       template_id = lookup_template_function (templ, arguments);
10113     }
10114
10115   /* If parsing tentatively, replace the sequence of tokens that makes
10116      up the template-id with a CPP_TEMPLATE_ID token.  That way,
10117      should we re-parse the token stream, we will not have to repeat
10118      the effort required to do the parse, nor will we issue duplicate
10119      error messages about problems during instantiation of the
10120      template.  */
10121   if (start_of_id)
10122     {
10123       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
10124
10125       /* Reset the contents of the START_OF_ID token.  */
10126       token->type = CPP_TEMPLATE_ID;
10127       /* Retrieve any deferred checks.  Do not pop this access checks yet
10128          so the memory will not be reclaimed during token replacing below.  */
10129       token->u.tree_check_value = GGC_CNEW (struct tree_check);
10130       token->u.tree_check_value->value = template_id;
10131       token->u.tree_check_value->checks = get_deferred_access_checks ();
10132       token->keyword = RID_MAX;
10133
10134       /* Purge all subsequent tokens.  */
10135       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
10136
10137       /* ??? Can we actually assume that, if template_id ==
10138          error_mark_node, we will have issued a diagnostic to the
10139          user, as opposed to simply marking the tentative parse as
10140          failed?  */
10141       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
10142         error ("%Hparse error in template argument list",
10143                &token->location);
10144     }
10145
10146   pop_deferring_access_checks ();
10147   return template_id;
10148 }
10149
10150 /* Parse a template-name.
10151
10152    template-name:
10153      identifier
10154
10155    The standard should actually say:
10156
10157    template-name:
10158      identifier
10159      operator-function-id
10160
10161    A defect report has been filed about this issue.
10162
10163    A conversion-function-id cannot be a template name because they cannot
10164    be part of a template-id. In fact, looking at this code:
10165
10166    a.operator K<int>()
10167
10168    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
10169    It is impossible to call a templated conversion-function-id with an
10170    explicit argument list, since the only allowed template parameter is
10171    the type to which it is converting.
10172
10173    If TEMPLATE_KEYWORD_P is true, then we have just seen the
10174    `template' keyword, in a construction like:
10175
10176      T::template f<3>()
10177
10178    In that case `f' is taken to be a template-name, even though there
10179    is no way of knowing for sure.
10180
10181    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
10182    name refers to a set of overloaded functions, at least one of which
10183    is a template, or an IDENTIFIER_NODE with the name of the template,
10184    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
10185    names are looked up inside uninstantiated templates.  */
10186
10187 static tree
10188 cp_parser_template_name (cp_parser* parser,
10189                          bool template_keyword_p,
10190                          bool check_dependency_p,
10191                          bool is_declaration,
10192                          bool *is_identifier)
10193 {
10194   tree identifier;
10195   tree decl;
10196   tree fns;
10197   cp_token *token = cp_lexer_peek_token (parser->lexer);
10198
10199   /* If the next token is `operator', then we have either an
10200      operator-function-id or a conversion-function-id.  */
10201   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
10202     {
10203       /* We don't know whether we're looking at an
10204          operator-function-id or a conversion-function-id.  */
10205       cp_parser_parse_tentatively (parser);
10206       /* Try an operator-function-id.  */
10207       identifier = cp_parser_operator_function_id (parser);
10208       /* If that didn't work, try a conversion-function-id.  */
10209       if (!cp_parser_parse_definitely (parser))
10210         {
10211           cp_parser_error (parser, "expected template-name");
10212           return error_mark_node;
10213         }
10214     }
10215   /* Look for the identifier.  */
10216   else
10217     identifier = cp_parser_identifier (parser);
10218
10219   /* If we didn't find an identifier, we don't have a template-id.  */
10220   if (identifier == error_mark_node)
10221     return error_mark_node;
10222
10223   /* If the name immediately followed the `template' keyword, then it
10224      is a template-name.  However, if the next token is not `<', then
10225      we do not treat it as a template-name, since it is not being used
10226      as part of a template-id.  This enables us to handle constructs
10227      like:
10228
10229        template <typename T> struct S { S(); };
10230        template <typename T> S<T>::S();
10231
10232      correctly.  We would treat `S' as a template -- if it were `S<T>'
10233      -- but we do not if there is no `<'.  */
10234
10235   if (processing_template_decl
10236       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
10237     {
10238       /* In a declaration, in a dependent context, we pretend that the
10239          "template" keyword was present in order to improve error
10240          recovery.  For example, given:
10241
10242            template <typename T> void f(T::X<int>);
10243
10244          we want to treat "X<int>" as a template-id.  */
10245       if (is_declaration
10246           && !template_keyword_p
10247           && parser->scope && TYPE_P (parser->scope)
10248           && check_dependency_p
10249           && dependent_type_p (parser->scope)
10250           /* Do not do this for dtors (or ctors), since they never
10251              need the template keyword before their name.  */
10252           && !constructor_name_p (identifier, parser->scope))
10253         {
10254           cp_token_position start = 0;
10255
10256           /* Explain what went wrong.  */
10257           error ("%Hnon-template %qD used as template",
10258                  &token->location, identifier);
10259           inform (input_location, "use %<%T::template %D%> to indicate that it is a template",
10260                   parser->scope, identifier);
10261           /* If parsing tentatively, find the location of the "<" token.  */
10262           if (cp_parser_simulate_error (parser))
10263             start = cp_lexer_token_position (parser->lexer, true);
10264           /* Parse the template arguments so that we can issue error
10265              messages about them.  */
10266           cp_lexer_consume_token (parser->lexer);
10267           cp_parser_enclosed_template_argument_list (parser);
10268           /* Skip tokens until we find a good place from which to
10269              continue parsing.  */
10270           cp_parser_skip_to_closing_parenthesis (parser,
10271                                                  /*recovering=*/true,
10272                                                  /*or_comma=*/true,
10273                                                  /*consume_paren=*/false);
10274           /* If parsing tentatively, permanently remove the
10275              template argument list.  That will prevent duplicate
10276              error messages from being issued about the missing
10277              "template" keyword.  */
10278           if (start)
10279             cp_lexer_purge_tokens_after (parser->lexer, start);
10280           if (is_identifier)
10281             *is_identifier = true;
10282           return identifier;
10283         }
10284
10285       /* If the "template" keyword is present, then there is generally
10286          no point in doing name-lookup, so we just return IDENTIFIER.
10287          But, if the qualifying scope is non-dependent then we can
10288          (and must) do name-lookup normally.  */
10289       if (template_keyword_p
10290           && (!parser->scope
10291               || (TYPE_P (parser->scope)
10292                   && dependent_type_p (parser->scope))))
10293         return identifier;
10294     }
10295
10296   /* Look up the name.  */
10297   decl = cp_parser_lookup_name (parser, identifier,
10298                                 none_type,
10299                                 /*is_template=*/false,
10300                                 /*is_namespace=*/false,
10301                                 check_dependency_p,
10302                                 /*ambiguous_decls=*/NULL,
10303                                 token->location);
10304   decl = maybe_get_template_decl_from_type_decl (decl);
10305
10306   /* If DECL is a template, then the name was a template-name.  */
10307   if (TREE_CODE (decl) == TEMPLATE_DECL)
10308     ;
10309   else
10310     {
10311       tree fn = NULL_TREE;
10312
10313       /* The standard does not explicitly indicate whether a name that
10314          names a set of overloaded declarations, some of which are
10315          templates, is a template-name.  However, such a name should
10316          be a template-name; otherwise, there is no way to form a
10317          template-id for the overloaded templates.  */
10318       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
10319       if (TREE_CODE (fns) == OVERLOAD)
10320         for (fn = fns; fn; fn = OVL_NEXT (fn))
10321           if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
10322             break;
10323
10324       if (!fn)
10325         {
10326           /* The name does not name a template.  */
10327           cp_parser_error (parser, "expected template-name");
10328           return error_mark_node;
10329         }
10330     }
10331
10332   /* If DECL is dependent, and refers to a function, then just return
10333      its name; we will look it up again during template instantiation.  */
10334   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
10335     {
10336       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
10337       if (TYPE_P (scope) && dependent_type_p (scope))
10338         return identifier;
10339     }
10340
10341   return decl;
10342 }
10343
10344 /* Parse a template-argument-list.
10345
10346    template-argument-list:
10347      template-argument ... [opt]
10348      template-argument-list , template-argument ... [opt]
10349
10350    Returns a TREE_VEC containing the arguments.  */
10351
10352 static tree
10353 cp_parser_template_argument_list (cp_parser* parser)
10354 {
10355   tree fixed_args[10];
10356   unsigned n_args = 0;
10357   unsigned alloced = 10;
10358   tree *arg_ary = fixed_args;
10359   tree vec;
10360   bool saved_in_template_argument_list_p;
10361   bool saved_ice_p;
10362   bool saved_non_ice_p;
10363
10364   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
10365   parser->in_template_argument_list_p = true;
10366   /* Even if the template-id appears in an integral
10367      constant-expression, the contents of the argument list do
10368      not.  */
10369   saved_ice_p = parser->integral_constant_expression_p;
10370   parser->integral_constant_expression_p = false;
10371   saved_non_ice_p = parser->non_integral_constant_expression_p;
10372   parser->non_integral_constant_expression_p = false;
10373   /* Parse the arguments.  */
10374   do
10375     {
10376       tree argument;
10377
10378       if (n_args)
10379         /* Consume the comma.  */
10380         cp_lexer_consume_token (parser->lexer);
10381
10382       /* Parse the template-argument.  */
10383       argument = cp_parser_template_argument (parser);
10384
10385       /* If the next token is an ellipsis, we're expanding a template
10386          argument pack. */
10387       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
10388         {
10389           /* Consume the `...' token. */
10390           cp_lexer_consume_token (parser->lexer);
10391
10392           /* Make the argument into a TYPE_PACK_EXPANSION or
10393              EXPR_PACK_EXPANSION. */
10394           argument = make_pack_expansion (argument);
10395         }
10396
10397       if (n_args == alloced)
10398         {
10399           alloced *= 2;
10400
10401           if (arg_ary == fixed_args)
10402             {
10403               arg_ary = XNEWVEC (tree, alloced);
10404               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
10405             }
10406           else
10407             arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
10408         }
10409       arg_ary[n_args++] = argument;
10410     }
10411   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
10412
10413   vec = make_tree_vec (n_args);
10414
10415   while (n_args--)
10416     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
10417
10418   if (arg_ary != fixed_args)
10419     free (arg_ary);
10420   parser->non_integral_constant_expression_p = saved_non_ice_p;
10421   parser->integral_constant_expression_p = saved_ice_p;
10422   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
10423   return vec;
10424 }
10425
10426 /* Parse a template-argument.
10427
10428    template-argument:
10429      assignment-expression
10430      type-id
10431      id-expression
10432
10433    The representation is that of an assignment-expression, type-id, or
10434    id-expression -- except that the qualified id-expression is
10435    evaluated, so that the value returned is either a DECL or an
10436    OVERLOAD.
10437
10438    Although the standard says "assignment-expression", it forbids
10439    throw-expressions or assignments in the template argument.
10440    Therefore, we use "conditional-expression" instead.  */
10441
10442 static tree
10443 cp_parser_template_argument (cp_parser* parser)
10444 {
10445   tree argument;
10446   bool template_p;
10447   bool address_p;
10448   bool maybe_type_id = false;
10449   cp_token *token = NULL, *argument_start_token = NULL;
10450   cp_id_kind idk;
10451
10452   /* There's really no way to know what we're looking at, so we just
10453      try each alternative in order.
10454
10455        [temp.arg]
10456
10457        In a template-argument, an ambiguity between a type-id and an
10458        expression is resolved to a type-id, regardless of the form of
10459        the corresponding template-parameter.
10460
10461      Therefore, we try a type-id first.  */
10462   cp_parser_parse_tentatively (parser);
10463   argument = cp_parser_type_id (parser);
10464   /* If there was no error parsing the type-id but the next token is a
10465      '>>', our behavior depends on which dialect of C++ we're
10466      parsing. In C++98, we probably found a typo for '> >'. But there
10467      are type-id which are also valid expressions. For instance:
10468
10469      struct X { int operator >> (int); };
10470      template <int V> struct Foo {};
10471      Foo<X () >> 5> r;
10472
10473      Here 'X()' is a valid type-id of a function type, but the user just
10474      wanted to write the expression "X() >> 5". Thus, we remember that we
10475      found a valid type-id, but we still try to parse the argument as an
10476      expression to see what happens. 
10477
10478      In C++0x, the '>>' will be considered two separate '>'
10479      tokens.  */
10480   if (!cp_parser_error_occurred (parser)
10481       && cxx_dialect == cxx98
10482       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
10483     {
10484       maybe_type_id = true;
10485       cp_parser_abort_tentative_parse (parser);
10486     }
10487   else
10488     {
10489       /* If the next token isn't a `,' or a `>', then this argument wasn't
10490       really finished. This means that the argument is not a valid
10491       type-id.  */
10492       if (!cp_parser_next_token_ends_template_argument_p (parser))
10493         cp_parser_error (parser, "expected template-argument");
10494       /* If that worked, we're done.  */
10495       if (cp_parser_parse_definitely (parser))
10496         return argument;
10497     }
10498   /* We're still not sure what the argument will be.  */
10499   cp_parser_parse_tentatively (parser);
10500   /* Try a template.  */
10501   argument_start_token = cp_lexer_peek_token (parser->lexer);
10502   argument = cp_parser_id_expression (parser,
10503                                       /*template_keyword_p=*/false,
10504                                       /*check_dependency_p=*/true,
10505                                       &template_p,
10506                                       /*declarator_p=*/false,
10507                                       /*optional_p=*/false);
10508   /* If the next token isn't a `,' or a `>', then this argument wasn't
10509      really finished.  */
10510   if (!cp_parser_next_token_ends_template_argument_p (parser))
10511     cp_parser_error (parser, "expected template-argument");
10512   if (!cp_parser_error_occurred (parser))
10513     {
10514       /* Figure out what is being referred to.  If the id-expression
10515          was for a class template specialization, then we will have a
10516          TYPE_DECL at this point.  There is no need to do name lookup
10517          at this point in that case.  */
10518       if (TREE_CODE (argument) != TYPE_DECL)
10519         argument = cp_parser_lookup_name (parser, argument,
10520                                           none_type,
10521                                           /*is_template=*/template_p,
10522                                           /*is_namespace=*/false,
10523                                           /*check_dependency=*/true,
10524                                           /*ambiguous_decls=*/NULL,
10525                                           argument_start_token->location);
10526       if (TREE_CODE (argument) != TEMPLATE_DECL
10527           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
10528         cp_parser_error (parser, "expected template-name");
10529     }
10530   if (cp_parser_parse_definitely (parser))
10531     return argument;
10532   /* It must be a non-type argument.  There permitted cases are given
10533      in [temp.arg.nontype]:
10534
10535      -- an integral constant-expression of integral or enumeration
10536         type; or
10537
10538      -- the name of a non-type template-parameter; or
10539
10540      -- the name of an object or function with external linkage...
10541
10542      -- the address of an object or function with external linkage...
10543
10544      -- a pointer to member...  */
10545   /* Look for a non-type template parameter.  */
10546   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10547     {
10548       cp_parser_parse_tentatively (parser);
10549       argument = cp_parser_primary_expression (parser,
10550                                                /*address_p=*/false,
10551                                                /*cast_p=*/false,
10552                                                /*template_arg_p=*/true,
10553                                                &idk);
10554       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
10555           || !cp_parser_next_token_ends_template_argument_p (parser))
10556         cp_parser_simulate_error (parser);
10557       if (cp_parser_parse_definitely (parser))
10558         return argument;
10559     }
10560
10561   /* If the next token is "&", the argument must be the address of an
10562      object or function with external linkage.  */
10563   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
10564   if (address_p)
10565     cp_lexer_consume_token (parser->lexer);
10566   /* See if we might have an id-expression.  */
10567   token = cp_lexer_peek_token (parser->lexer);
10568   if (token->type == CPP_NAME
10569       || token->keyword == RID_OPERATOR
10570       || token->type == CPP_SCOPE
10571       || token->type == CPP_TEMPLATE_ID
10572       || token->type == CPP_NESTED_NAME_SPECIFIER)
10573     {
10574       cp_parser_parse_tentatively (parser);
10575       argument = cp_parser_primary_expression (parser,
10576                                                address_p,
10577                                                /*cast_p=*/false,
10578                                                /*template_arg_p=*/true,
10579                                                &idk);
10580       if (cp_parser_error_occurred (parser)
10581           || !cp_parser_next_token_ends_template_argument_p (parser))
10582         cp_parser_abort_tentative_parse (parser);
10583       else
10584         {
10585           if (TREE_CODE (argument) == INDIRECT_REF)
10586             {
10587               gcc_assert (REFERENCE_REF_P (argument));
10588               argument = TREE_OPERAND (argument, 0);
10589             }
10590
10591           if (TREE_CODE (argument) == VAR_DECL)
10592             {
10593               /* A variable without external linkage might still be a
10594                  valid constant-expression, so no error is issued here
10595                  if the external-linkage check fails.  */
10596               if (!address_p && !DECL_EXTERNAL_LINKAGE_P (argument))
10597                 cp_parser_simulate_error (parser);
10598             }
10599           else if (is_overloaded_fn (argument))
10600             /* All overloaded functions are allowed; if the external
10601                linkage test does not pass, an error will be issued
10602                later.  */
10603             ;
10604           else if (address_p
10605                    && (TREE_CODE (argument) == OFFSET_REF
10606                        || TREE_CODE (argument) == SCOPE_REF))
10607             /* A pointer-to-member.  */
10608             ;
10609           else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
10610             ;
10611           else
10612             cp_parser_simulate_error (parser);
10613
10614           if (cp_parser_parse_definitely (parser))
10615             {
10616               if (address_p)
10617                 argument = build_x_unary_op (ADDR_EXPR, argument,
10618                                              tf_warning_or_error);
10619               return argument;
10620             }
10621         }
10622     }
10623   /* If the argument started with "&", there are no other valid
10624      alternatives at this point.  */
10625   if (address_p)
10626     {
10627       cp_parser_error (parser, "invalid non-type template argument");
10628       return error_mark_node;
10629     }
10630
10631   /* If the argument wasn't successfully parsed as a type-id followed
10632      by '>>', the argument can only be a constant expression now.
10633      Otherwise, we try parsing the constant-expression tentatively,
10634      because the argument could really be a type-id.  */
10635   if (maybe_type_id)
10636     cp_parser_parse_tentatively (parser);
10637   argument = cp_parser_constant_expression (parser,
10638                                             /*allow_non_constant_p=*/false,
10639                                             /*non_constant_p=*/NULL);
10640   argument = fold_non_dependent_expr (argument);
10641   if (!maybe_type_id)
10642     return argument;
10643   if (!cp_parser_next_token_ends_template_argument_p (parser))
10644     cp_parser_error (parser, "expected template-argument");
10645   if (cp_parser_parse_definitely (parser))
10646     return argument;
10647   /* We did our best to parse the argument as a non type-id, but that
10648      was the only alternative that matched (albeit with a '>' after
10649      it). We can assume it's just a typo from the user, and a
10650      diagnostic will then be issued.  */
10651   return cp_parser_type_id (parser);
10652 }
10653
10654 /* Parse an explicit-instantiation.
10655
10656    explicit-instantiation:
10657      template declaration
10658
10659    Although the standard says `declaration', what it really means is:
10660
10661    explicit-instantiation:
10662      template decl-specifier-seq [opt] declarator [opt] ;
10663
10664    Things like `template int S<int>::i = 5, int S<double>::j;' are not
10665    supposed to be allowed.  A defect report has been filed about this
10666    issue.
10667
10668    GNU Extension:
10669
10670    explicit-instantiation:
10671      storage-class-specifier template
10672        decl-specifier-seq [opt] declarator [opt] ;
10673      function-specifier template
10674        decl-specifier-seq [opt] declarator [opt] ;  */
10675
10676 static void
10677 cp_parser_explicit_instantiation (cp_parser* parser)
10678 {
10679   int declares_class_or_enum;
10680   cp_decl_specifier_seq decl_specifiers;
10681   tree extension_specifier = NULL_TREE;
10682   cp_token *token;
10683
10684   /* Look for an (optional) storage-class-specifier or
10685      function-specifier.  */
10686   if (cp_parser_allow_gnu_extensions_p (parser))
10687     {
10688       extension_specifier
10689         = cp_parser_storage_class_specifier_opt (parser);
10690       if (!extension_specifier)
10691         extension_specifier
10692           = cp_parser_function_specifier_opt (parser,
10693                                               /*decl_specs=*/NULL);
10694     }
10695
10696   /* Look for the `template' keyword.  */
10697   cp_parser_require_keyword (parser, RID_TEMPLATE, "%<template%>");
10698   /* Let the front end know that we are processing an explicit
10699      instantiation.  */
10700   begin_explicit_instantiation ();
10701   /* [temp.explicit] says that we are supposed to ignore access
10702      control while processing explicit instantiation directives.  */
10703   push_deferring_access_checks (dk_no_check);
10704   /* Parse a decl-specifier-seq.  */
10705   token = cp_lexer_peek_token (parser->lexer);
10706   cp_parser_decl_specifier_seq (parser,
10707                                 CP_PARSER_FLAGS_OPTIONAL,
10708                                 &decl_specifiers,
10709                                 &declares_class_or_enum);
10710   /* If there was exactly one decl-specifier, and it declared a class,
10711      and there's no declarator, then we have an explicit type
10712      instantiation.  */
10713   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
10714     {
10715       tree type;
10716
10717       type = check_tag_decl (&decl_specifiers);
10718       /* Turn access control back on for names used during
10719          template instantiation.  */
10720       pop_deferring_access_checks ();
10721       if (type)
10722         do_type_instantiation (type, extension_specifier,
10723                                /*complain=*/tf_error);
10724     }
10725   else
10726     {
10727       cp_declarator *declarator;
10728       tree decl;
10729
10730       /* Parse the declarator.  */
10731       declarator
10732         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
10733                                 /*ctor_dtor_or_conv_p=*/NULL,
10734                                 /*parenthesized_p=*/NULL,
10735                                 /*member_p=*/false);
10736       if (declares_class_or_enum & 2)
10737         cp_parser_check_for_definition_in_return_type (declarator,
10738                                                        decl_specifiers.type,
10739                                                        decl_specifiers.type_location);
10740       if (declarator != cp_error_declarator)
10741         {
10742           decl = grokdeclarator (declarator, &decl_specifiers,
10743                                  NORMAL, 0, &decl_specifiers.attributes);
10744           /* Turn access control back on for names used during
10745              template instantiation.  */
10746           pop_deferring_access_checks ();
10747           /* Do the explicit instantiation.  */
10748           do_decl_instantiation (decl, extension_specifier);
10749         }
10750       else
10751         {
10752           pop_deferring_access_checks ();
10753           /* Skip the body of the explicit instantiation.  */
10754           cp_parser_skip_to_end_of_statement (parser);
10755         }
10756     }
10757   /* We're done with the instantiation.  */
10758   end_explicit_instantiation ();
10759
10760   cp_parser_consume_semicolon_at_end_of_statement (parser);
10761 }
10762
10763 /* Parse an explicit-specialization.
10764
10765    explicit-specialization:
10766      template < > declaration
10767
10768    Although the standard says `declaration', what it really means is:
10769
10770    explicit-specialization:
10771      template <> decl-specifier [opt] init-declarator [opt] ;
10772      template <> function-definition
10773      template <> explicit-specialization
10774      template <> template-declaration  */
10775
10776 static void
10777 cp_parser_explicit_specialization (cp_parser* parser)
10778 {
10779   bool need_lang_pop;
10780   cp_token *token = cp_lexer_peek_token (parser->lexer);
10781
10782   /* Look for the `template' keyword.  */
10783   cp_parser_require_keyword (parser, RID_TEMPLATE, "%<template%>");
10784   /* Look for the `<'.  */
10785   cp_parser_require (parser, CPP_LESS, "%<<%>");
10786   /* Look for the `>'.  */
10787   cp_parser_require (parser, CPP_GREATER, "%<>%>");
10788   /* We have processed another parameter list.  */
10789   ++parser->num_template_parameter_lists;
10790   /* [temp]
10791
10792      A template ... explicit specialization ... shall not have C
10793      linkage.  */
10794   if (current_lang_name == lang_name_c)
10795     {
10796       error ("%Htemplate specialization with C linkage", &token->location);
10797       /* Give it C++ linkage to avoid confusing other parts of the
10798          front end.  */
10799       push_lang_context (lang_name_cplusplus);
10800       need_lang_pop = true;
10801     }
10802   else
10803     need_lang_pop = false;
10804   /* Let the front end know that we are beginning a specialization.  */
10805   if (!begin_specialization ())
10806     {
10807       end_specialization ();
10808       cp_parser_skip_to_end_of_block_or_statement (parser);
10809       return;
10810     }
10811
10812   /* If the next keyword is `template', we need to figure out whether
10813      or not we're looking a template-declaration.  */
10814   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
10815     {
10816       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
10817           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
10818         cp_parser_template_declaration_after_export (parser,
10819                                                      /*member_p=*/false);
10820       else
10821         cp_parser_explicit_specialization (parser);
10822     }
10823   else
10824     /* Parse the dependent declaration.  */
10825     cp_parser_single_declaration (parser,
10826                                   /*checks=*/NULL,
10827                                   /*member_p=*/false,
10828                                   /*explicit_specialization_p=*/true,
10829                                   /*friend_p=*/NULL);
10830   /* We're done with the specialization.  */
10831   end_specialization ();
10832   /* For the erroneous case of a template with C linkage, we pushed an
10833      implicit C++ linkage scope; exit that scope now.  */
10834   if (need_lang_pop)
10835     pop_lang_context ();
10836   /* We're done with this parameter list.  */
10837   --parser->num_template_parameter_lists;
10838 }
10839
10840 /* Parse a type-specifier.
10841
10842    type-specifier:
10843      simple-type-specifier
10844      class-specifier
10845      enum-specifier
10846      elaborated-type-specifier
10847      cv-qualifier
10848
10849    GNU Extension:
10850
10851    type-specifier:
10852      __complex__
10853
10854    Returns a representation of the type-specifier.  For a
10855    class-specifier, enum-specifier, or elaborated-type-specifier, a
10856    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
10857
10858    The parser flags FLAGS is used to control type-specifier parsing.
10859
10860    If IS_DECLARATION is TRUE, then this type-specifier is appearing
10861    in a decl-specifier-seq.
10862
10863    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
10864    class-specifier, enum-specifier, or elaborated-type-specifier, then
10865    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
10866    if a type is declared; 2 if it is defined.  Otherwise, it is set to
10867    zero.
10868
10869    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
10870    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
10871    is set to FALSE.  */
10872
10873 static tree
10874 cp_parser_type_specifier (cp_parser* parser,
10875                           cp_parser_flags flags,
10876                           cp_decl_specifier_seq *decl_specs,
10877                           bool is_declaration,
10878                           int* declares_class_or_enum,
10879                           bool* is_cv_qualifier)
10880 {
10881   tree type_spec = NULL_TREE;
10882   cp_token *token;
10883   enum rid keyword;
10884   cp_decl_spec ds = ds_last;
10885
10886   /* Assume this type-specifier does not declare a new type.  */
10887   if (declares_class_or_enum)
10888     *declares_class_or_enum = 0;
10889   /* And that it does not specify a cv-qualifier.  */
10890   if (is_cv_qualifier)
10891     *is_cv_qualifier = false;
10892   /* Peek at the next token.  */
10893   token = cp_lexer_peek_token (parser->lexer);
10894
10895   /* If we're looking at a keyword, we can use that to guide the
10896      production we choose.  */
10897   keyword = token->keyword;
10898   switch (keyword)
10899     {
10900     case RID_ENUM:
10901       /* Look for the enum-specifier.  */
10902       type_spec = cp_parser_enum_specifier (parser);
10903       /* If that worked, we're done.  */
10904       if (type_spec)
10905         {
10906           if (declares_class_or_enum)
10907             *declares_class_or_enum = 2;
10908           if (decl_specs)
10909             cp_parser_set_decl_spec_type (decl_specs,
10910                                           type_spec,
10911                                           token->location,
10912                                           /*user_defined_p=*/true);
10913           return type_spec;
10914         }
10915       else
10916         goto elaborated_type_specifier;
10917
10918       /* Any of these indicate either a class-specifier, or an
10919          elaborated-type-specifier.  */
10920     case RID_CLASS:
10921     case RID_STRUCT:
10922     case RID_UNION:
10923       /* Parse tentatively so that we can back up if we don't find a
10924          class-specifier.  */
10925       cp_parser_parse_tentatively (parser);
10926       /* Look for the class-specifier.  */
10927       type_spec = cp_parser_class_specifier (parser);
10928       /* If that worked, we're done.  */
10929       if (cp_parser_parse_definitely (parser))
10930         {
10931           if (declares_class_or_enum)
10932             *declares_class_or_enum = 2;
10933           if (decl_specs)
10934             cp_parser_set_decl_spec_type (decl_specs,
10935                                           type_spec,
10936                                           token->location,
10937                                           /*user_defined_p=*/true);
10938           return type_spec;
10939         }
10940
10941       /* Fall through.  */
10942     elaborated_type_specifier:
10943       /* We're declaring (not defining) a class or enum.  */
10944       if (declares_class_or_enum)
10945         *declares_class_or_enum = 1;
10946
10947       /* Fall through.  */
10948     case RID_TYPENAME:
10949       /* Look for an elaborated-type-specifier.  */
10950       type_spec
10951         = (cp_parser_elaborated_type_specifier
10952            (parser,
10953             decl_specs && decl_specs->specs[(int) ds_friend],
10954             is_declaration));
10955       if (decl_specs)
10956         cp_parser_set_decl_spec_type (decl_specs,
10957                                       type_spec,
10958                                       token->location,
10959                                       /*user_defined_p=*/true);
10960       return type_spec;
10961
10962     case RID_CONST:
10963       ds = ds_const;
10964       if (is_cv_qualifier)
10965         *is_cv_qualifier = true;
10966       break;
10967
10968     case RID_VOLATILE:
10969       ds = ds_volatile;
10970       if (is_cv_qualifier)
10971         *is_cv_qualifier = true;
10972       break;
10973
10974     case RID_RESTRICT:
10975       ds = ds_restrict;
10976       if (is_cv_qualifier)
10977         *is_cv_qualifier = true;
10978       break;
10979
10980     case RID_COMPLEX:
10981       /* The `__complex__' keyword is a GNU extension.  */
10982       ds = ds_complex;
10983       break;
10984
10985     default:
10986       break;
10987     }
10988
10989   /* Handle simple keywords.  */
10990   if (ds != ds_last)
10991     {
10992       if (decl_specs)
10993         {
10994           ++decl_specs->specs[(int)ds];
10995           decl_specs->any_specifiers_p = true;
10996         }
10997       return cp_lexer_consume_token (parser->lexer)->u.value;
10998     }
10999
11000   /* If we do not already have a type-specifier, assume we are looking
11001      at a simple-type-specifier.  */
11002   type_spec = cp_parser_simple_type_specifier (parser,
11003                                                decl_specs,
11004                                                flags);
11005
11006   /* If we didn't find a type-specifier, and a type-specifier was not
11007      optional in this context, issue an error message.  */
11008   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
11009     {
11010       cp_parser_error (parser, "expected type specifier");
11011       return error_mark_node;
11012     }
11013
11014   return type_spec;
11015 }
11016
11017 /* Parse a simple-type-specifier.
11018
11019    simple-type-specifier:
11020      :: [opt] nested-name-specifier [opt] type-name
11021      :: [opt] nested-name-specifier template template-id
11022      char
11023      wchar_t
11024      bool
11025      short
11026      int
11027      long
11028      signed
11029      unsigned
11030      float
11031      double
11032      void
11033
11034    C++0x Extension:
11035
11036    simple-type-specifier:
11037      auto
11038      decltype ( expression )   
11039      char16_t
11040      char32_t
11041
11042    GNU Extension:
11043
11044    simple-type-specifier:
11045      __typeof__ unary-expression
11046      __typeof__ ( type-id )
11047
11048    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
11049    appropriately updated.  */
11050
11051 static tree
11052 cp_parser_simple_type_specifier (cp_parser* parser,
11053                                  cp_decl_specifier_seq *decl_specs,
11054                                  cp_parser_flags flags)
11055 {
11056   tree type = NULL_TREE;
11057   cp_token *token;
11058
11059   /* Peek at the next token.  */
11060   token = cp_lexer_peek_token (parser->lexer);
11061
11062   /* If we're looking at a keyword, things are easy.  */
11063   switch (token->keyword)
11064     {
11065     case RID_CHAR:
11066       if (decl_specs)
11067         decl_specs->explicit_char_p = true;
11068       type = char_type_node;
11069       break;
11070     case RID_CHAR16:
11071       type = char16_type_node;
11072       break;
11073     case RID_CHAR32:
11074       type = char32_type_node;
11075       break;
11076     case RID_WCHAR:
11077       type = wchar_type_node;
11078       break;
11079     case RID_BOOL:
11080       type = boolean_type_node;
11081       break;
11082     case RID_SHORT:
11083       if (decl_specs)
11084         ++decl_specs->specs[(int) ds_short];
11085       type = short_integer_type_node;
11086       break;
11087     case RID_INT:
11088       if (decl_specs)
11089         decl_specs->explicit_int_p = true;
11090       type = integer_type_node;
11091       break;
11092     case RID_LONG:
11093       if (decl_specs)
11094         ++decl_specs->specs[(int) ds_long];
11095       type = long_integer_type_node;
11096       break;
11097     case RID_SIGNED:
11098       if (decl_specs)
11099         ++decl_specs->specs[(int) ds_signed];
11100       type = integer_type_node;
11101       break;
11102     case RID_UNSIGNED:
11103       if (decl_specs)
11104         ++decl_specs->specs[(int) ds_unsigned];
11105       type = unsigned_type_node;
11106       break;
11107     case RID_FLOAT:
11108       type = float_type_node;
11109       break;
11110     case RID_DOUBLE:
11111       type = double_type_node;
11112       break;
11113     case RID_VOID:
11114       type = void_type_node;
11115       break;
11116       
11117     case RID_AUTO:
11118       maybe_warn_cpp0x ("C++0x auto");
11119       type = make_auto ();
11120       break;
11121
11122     case RID_DECLTYPE:
11123       /* Parse the `decltype' type.  */
11124       type = cp_parser_decltype (parser);
11125
11126       if (decl_specs)
11127         cp_parser_set_decl_spec_type (decl_specs, type,
11128                                       token->location,
11129                                       /*user_defined_p=*/true);
11130
11131       return type;
11132
11133     case RID_TYPEOF:
11134       /* Consume the `typeof' token.  */
11135       cp_lexer_consume_token (parser->lexer);
11136       /* Parse the operand to `typeof'.  */
11137       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
11138       /* If it is not already a TYPE, take its type.  */
11139       if (!TYPE_P (type))
11140         type = finish_typeof (type);
11141
11142       if (decl_specs)
11143         cp_parser_set_decl_spec_type (decl_specs, type,
11144                                       token->location,
11145                                       /*user_defined_p=*/true);
11146
11147       return type;
11148
11149     default:
11150       break;
11151     }
11152
11153   /* If the type-specifier was for a built-in type, we're done.  */
11154   if (type)
11155     {
11156       tree id;
11157
11158       /* Record the type.  */
11159       if (decl_specs
11160           && (token->keyword != RID_SIGNED
11161               && token->keyword != RID_UNSIGNED
11162               && token->keyword != RID_SHORT
11163               && token->keyword != RID_LONG))
11164         cp_parser_set_decl_spec_type (decl_specs,
11165                                       type,
11166                                       token->location,
11167                                       /*user_defined=*/false);
11168       if (decl_specs)
11169         decl_specs->any_specifiers_p = true;
11170
11171       /* Consume the token.  */
11172       id = cp_lexer_consume_token (parser->lexer)->u.value;
11173
11174       /* There is no valid C++ program where a non-template type is
11175          followed by a "<".  That usually indicates that the user thought
11176          that the type was a template.  */
11177       cp_parser_check_for_invalid_template_id (parser, type, token->location);
11178
11179       return TYPE_NAME (type);
11180     }
11181
11182   /* The type-specifier must be a user-defined type.  */
11183   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
11184     {
11185       bool qualified_p;
11186       bool global_p;
11187
11188       /* Don't gobble tokens or issue error messages if this is an
11189          optional type-specifier.  */
11190       if (flags & CP_PARSER_FLAGS_OPTIONAL)
11191         cp_parser_parse_tentatively (parser);
11192
11193       /* Look for the optional `::' operator.  */
11194       global_p
11195         = (cp_parser_global_scope_opt (parser,
11196                                        /*current_scope_valid_p=*/false)
11197            != NULL_TREE);
11198       /* Look for the nested-name specifier.  */
11199       qualified_p
11200         = (cp_parser_nested_name_specifier_opt (parser,
11201                                                 /*typename_keyword_p=*/false,
11202                                                 /*check_dependency_p=*/true,
11203                                                 /*type_p=*/false,
11204                                                 /*is_declaration=*/false)
11205            != NULL_TREE);
11206       token = cp_lexer_peek_token (parser->lexer);
11207       /* If we have seen a nested-name-specifier, and the next token
11208          is `template', then we are using the template-id production.  */
11209       if (parser->scope
11210           && cp_parser_optional_template_keyword (parser))
11211         {
11212           /* Look for the template-id.  */
11213           type = cp_parser_template_id (parser,
11214                                         /*template_keyword_p=*/true,
11215                                         /*check_dependency_p=*/true,
11216                                         /*is_declaration=*/false);
11217           /* If the template-id did not name a type, we are out of
11218              luck.  */
11219           if (TREE_CODE (type) != TYPE_DECL)
11220             {
11221               cp_parser_error (parser, "expected template-id for type");
11222               type = NULL_TREE;
11223             }
11224         }
11225       /* Otherwise, look for a type-name.  */
11226       else
11227         type = cp_parser_type_name (parser);
11228       /* Keep track of all name-lookups performed in class scopes.  */
11229       if (type
11230           && !global_p
11231           && !qualified_p
11232           && TREE_CODE (type) == TYPE_DECL
11233           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
11234         maybe_note_name_used_in_class (DECL_NAME (type), type);
11235       /* If it didn't work out, we don't have a TYPE.  */
11236       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
11237           && !cp_parser_parse_definitely (parser))
11238         type = NULL_TREE;
11239       if (type && decl_specs)
11240         cp_parser_set_decl_spec_type (decl_specs, type,
11241                                       token->location,
11242                                       /*user_defined=*/true);
11243     }
11244
11245   /* If we didn't get a type-name, issue an error message.  */
11246   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
11247     {
11248       cp_parser_error (parser, "expected type-name");
11249       return error_mark_node;
11250     }
11251
11252   /* There is no valid C++ program where a non-template type is
11253      followed by a "<".  That usually indicates that the user thought
11254      that the type was a template.  */
11255   if (type && type != error_mark_node)
11256     {
11257       /* As a last-ditch effort, see if TYPE is an Objective-C type.
11258          If it is, then the '<'...'>' enclose protocol names rather than
11259          template arguments, and so everything is fine.  */
11260       if (c_dialect_objc ()
11261           && (objc_is_id (type) || objc_is_class_name (type)))
11262         {
11263           tree protos = cp_parser_objc_protocol_refs_opt (parser);
11264           tree qual_type = objc_get_protocol_qualified_type (type, protos);
11265
11266           /* Clobber the "unqualified" type previously entered into
11267              DECL_SPECS with the new, improved protocol-qualified version.  */
11268           if (decl_specs)
11269             decl_specs->type = qual_type;
11270
11271           return qual_type;
11272         }
11273
11274       cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type),
11275                                                token->location);
11276     }
11277
11278   return type;
11279 }
11280
11281 /* Parse a type-name.
11282
11283    type-name:
11284      class-name
11285      enum-name
11286      typedef-name
11287
11288    enum-name:
11289      identifier
11290
11291    typedef-name:
11292      identifier
11293
11294    Returns a TYPE_DECL for the type.  */
11295
11296 static tree
11297 cp_parser_type_name (cp_parser* parser)
11298 {
11299   tree type_decl;
11300
11301   /* We can't know yet whether it is a class-name or not.  */
11302   cp_parser_parse_tentatively (parser);
11303   /* Try a class-name.  */
11304   type_decl = cp_parser_class_name (parser,
11305                                     /*typename_keyword_p=*/false,
11306                                     /*template_keyword_p=*/false,
11307                                     none_type,
11308                                     /*check_dependency_p=*/true,
11309                                     /*class_head_p=*/false,
11310                                     /*is_declaration=*/false);
11311   /* If it's not a class-name, keep looking.  */
11312   if (!cp_parser_parse_definitely (parser))
11313     {
11314       /* It must be a typedef-name or an enum-name.  */
11315       return cp_parser_nonclass_name (parser);
11316     }
11317
11318   return type_decl;
11319 }
11320
11321 /* Parse a non-class type-name, that is, either an enum-name or a typedef-name.
11322
11323    enum-name:
11324      identifier
11325
11326    typedef-name:
11327      identifier
11328
11329    Returns a TYPE_DECL for the type.  */
11330
11331 static tree
11332 cp_parser_nonclass_name (cp_parser* parser)
11333 {
11334   tree type_decl;
11335   tree identifier;
11336
11337   cp_token *token = cp_lexer_peek_token (parser->lexer);
11338   identifier = cp_parser_identifier (parser);
11339   if (identifier == error_mark_node)
11340     return error_mark_node;
11341
11342   /* Look up the type-name.  */
11343   type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
11344
11345   if (TREE_CODE (type_decl) != TYPE_DECL
11346       && (objc_is_id (identifier) || objc_is_class_name (identifier)))
11347     {
11348       /* See if this is an Objective-C type.  */
11349       tree protos = cp_parser_objc_protocol_refs_opt (parser);
11350       tree type = objc_get_protocol_qualified_type (identifier, protos);
11351       if (type)
11352         type_decl = TYPE_NAME (type);
11353     }
11354   
11355   /* Issue an error if we did not find a type-name.  */
11356   if (TREE_CODE (type_decl) != TYPE_DECL)
11357     {
11358       if (!cp_parser_simulate_error (parser))
11359         cp_parser_name_lookup_error (parser, identifier, type_decl,
11360                                      "is not a type", token->location);
11361       return error_mark_node;
11362     }
11363   /* Remember that the name was used in the definition of the
11364      current class so that we can check later to see if the
11365      meaning would have been different after the class was
11366      entirely defined.  */
11367   else if (type_decl != error_mark_node
11368            && !parser->scope)
11369     maybe_note_name_used_in_class (identifier, type_decl);
11370   
11371   return type_decl;
11372 }
11373
11374 /* Parse an elaborated-type-specifier.  Note that the grammar given
11375    here incorporates the resolution to DR68.
11376
11377    elaborated-type-specifier:
11378      class-key :: [opt] nested-name-specifier [opt] identifier
11379      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
11380      enum-key :: [opt] nested-name-specifier [opt] identifier
11381      typename :: [opt] nested-name-specifier identifier
11382      typename :: [opt] nested-name-specifier template [opt]
11383        template-id
11384
11385    GNU extension:
11386
11387    elaborated-type-specifier:
11388      class-key attributes :: [opt] nested-name-specifier [opt] identifier
11389      class-key attributes :: [opt] nested-name-specifier [opt]
11390                template [opt] template-id
11391      enum attributes :: [opt] nested-name-specifier [opt] identifier
11392
11393    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
11394    declared `friend'.  If IS_DECLARATION is TRUE, then this
11395    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
11396    something is being declared.
11397
11398    Returns the TYPE specified.  */
11399
11400 static tree
11401 cp_parser_elaborated_type_specifier (cp_parser* parser,
11402                                      bool is_friend,
11403                                      bool is_declaration)
11404 {
11405   enum tag_types tag_type;
11406   tree identifier;
11407   tree type = NULL_TREE;
11408   tree attributes = NULL_TREE;
11409   cp_token *token = NULL;
11410
11411   /* See if we're looking at the `enum' keyword.  */
11412   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
11413     {
11414       /* Consume the `enum' token.  */
11415       cp_lexer_consume_token (parser->lexer);
11416       /* Remember that it's an enumeration type.  */
11417       tag_type = enum_type;
11418       /* Parse the optional `struct' or `class' key (for C++0x scoped
11419          enums).  */
11420       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
11421           || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
11422         {
11423           if (cxx_dialect == cxx98)
11424             maybe_warn_cpp0x ("scoped enums");
11425
11426           /* Consume the `struct' or `class'.  */
11427           cp_lexer_consume_token (parser->lexer);
11428         }
11429       /* Parse the attributes.  */
11430       attributes = cp_parser_attributes_opt (parser);
11431     }
11432   /* Or, it might be `typename'.  */
11433   else if (cp_lexer_next_token_is_keyword (parser->lexer,
11434                                            RID_TYPENAME))
11435     {
11436       /* Consume the `typename' token.  */
11437       cp_lexer_consume_token (parser->lexer);
11438       /* Remember that it's a `typename' type.  */
11439       tag_type = typename_type;
11440       /* The `typename' keyword is only allowed in templates.  */
11441       if (!processing_template_decl)
11442         permerror (input_location, "using %<typename%> outside of template");
11443     }
11444   /* Otherwise it must be a class-key.  */
11445   else
11446     {
11447       tag_type = cp_parser_class_key (parser);
11448       if (tag_type == none_type)
11449         return error_mark_node;
11450       /* Parse the attributes.  */
11451       attributes = cp_parser_attributes_opt (parser);
11452     }
11453
11454   /* Look for the `::' operator.  */
11455   cp_parser_global_scope_opt (parser,
11456                               /*current_scope_valid_p=*/false);
11457   /* Look for the nested-name-specifier.  */
11458   if (tag_type == typename_type)
11459     {
11460       if (!cp_parser_nested_name_specifier (parser,
11461                                            /*typename_keyword_p=*/true,
11462                                            /*check_dependency_p=*/true,
11463                                            /*type_p=*/true,
11464                                             is_declaration))
11465         return error_mark_node;
11466     }
11467   else
11468     /* Even though `typename' is not present, the proposed resolution
11469        to Core Issue 180 says that in `class A<T>::B', `B' should be
11470        considered a type-name, even if `A<T>' is dependent.  */
11471     cp_parser_nested_name_specifier_opt (parser,
11472                                          /*typename_keyword_p=*/true,
11473                                          /*check_dependency_p=*/true,
11474                                          /*type_p=*/true,
11475                                          is_declaration);
11476  /* For everything but enumeration types, consider a template-id.
11477     For an enumeration type, consider only a plain identifier.  */
11478   if (tag_type != enum_type)
11479     {
11480       bool template_p = false;
11481       tree decl;
11482
11483       /* Allow the `template' keyword.  */
11484       template_p = cp_parser_optional_template_keyword (parser);
11485       /* If we didn't see `template', we don't know if there's a
11486          template-id or not.  */
11487       if (!template_p)
11488         cp_parser_parse_tentatively (parser);
11489       /* Parse the template-id.  */
11490       token = cp_lexer_peek_token (parser->lexer);
11491       decl = cp_parser_template_id (parser, template_p,
11492                                     /*check_dependency_p=*/true,
11493                                     is_declaration);
11494       /* If we didn't find a template-id, look for an ordinary
11495          identifier.  */
11496       if (!template_p && !cp_parser_parse_definitely (parser))
11497         ;
11498       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
11499          in effect, then we must assume that, upon instantiation, the
11500          template will correspond to a class.  */
11501       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
11502                && tag_type == typename_type)
11503         type = make_typename_type (parser->scope, decl,
11504                                    typename_type,
11505                                    /*complain=*/tf_error);
11506       else
11507         type = TREE_TYPE (decl);
11508     }
11509
11510   if (!type)
11511     {
11512       token = cp_lexer_peek_token (parser->lexer);
11513       identifier = cp_parser_identifier (parser);
11514
11515       if (identifier == error_mark_node)
11516         {
11517           parser->scope = NULL_TREE;
11518           return error_mark_node;
11519         }
11520
11521       /* For a `typename', we needn't call xref_tag.  */
11522       if (tag_type == typename_type
11523           && TREE_CODE (parser->scope) != NAMESPACE_DECL)
11524         return cp_parser_make_typename_type (parser, parser->scope,
11525                                              identifier,
11526                                              token->location);
11527       /* Look up a qualified name in the usual way.  */
11528       if (parser->scope)
11529         {
11530           tree decl;
11531           tree ambiguous_decls;
11532
11533           decl = cp_parser_lookup_name (parser, identifier,
11534                                         tag_type,
11535                                         /*is_template=*/false,
11536                                         /*is_namespace=*/false,
11537                                         /*check_dependency=*/true,
11538                                         &ambiguous_decls,
11539                                         token->location);
11540
11541           /* If the lookup was ambiguous, an error will already have been
11542              issued.  */
11543           if (ambiguous_decls)
11544             return error_mark_node;
11545
11546           /* If we are parsing friend declaration, DECL may be a
11547              TEMPLATE_DECL tree node here.  However, we need to check
11548              whether this TEMPLATE_DECL results in valid code.  Consider
11549              the following example:
11550
11551                namespace N {
11552                  template <class T> class C {};
11553                }
11554                class X {
11555                  template <class T> friend class N::C; // #1, valid code
11556                };
11557                template <class T> class Y {
11558                  friend class N::C;                    // #2, invalid code
11559                };
11560
11561              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
11562              name lookup of `N::C'.  We see that friend declaration must
11563              be template for the code to be valid.  Note that
11564              processing_template_decl does not work here since it is
11565              always 1 for the above two cases.  */
11566
11567           decl = (cp_parser_maybe_treat_template_as_class
11568                   (decl, /*tag_name_p=*/is_friend
11569                          && parser->num_template_parameter_lists));
11570
11571           if (TREE_CODE (decl) != TYPE_DECL)
11572             {
11573               cp_parser_diagnose_invalid_type_name (parser,
11574                                                     parser->scope,
11575                                                     identifier,
11576                                                     token->location);
11577               return error_mark_node;
11578             }
11579
11580           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
11581             {
11582               bool allow_template = (parser->num_template_parameter_lists
11583                                       || DECL_SELF_REFERENCE_P (decl));
11584               type = check_elaborated_type_specifier (tag_type, decl, 
11585                                                       allow_template);
11586
11587               if (type == error_mark_node)
11588                 return error_mark_node;
11589             }
11590
11591           /* Forward declarations of nested types, such as
11592
11593                class C1::C2;
11594                class C1::C2::C3;
11595
11596              are invalid unless all components preceding the final '::'
11597              are complete.  If all enclosing types are complete, these
11598              declarations become merely pointless.
11599
11600              Invalid forward declarations of nested types are errors
11601              caught elsewhere in parsing.  Those that are pointless arrive
11602              here.  */
11603
11604           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
11605               && !is_friend && !processing_explicit_instantiation)
11606             warning (0, "declaration %qD does not declare anything", decl);
11607
11608           type = TREE_TYPE (decl);
11609         }
11610       else
11611         {
11612           /* An elaborated-type-specifier sometimes introduces a new type and
11613              sometimes names an existing type.  Normally, the rule is that it
11614              introduces a new type only if there is not an existing type of
11615              the same name already in scope.  For example, given:
11616
11617                struct S {};
11618                void f() { struct S s; }
11619
11620              the `struct S' in the body of `f' is the same `struct S' as in
11621              the global scope; the existing definition is used.  However, if
11622              there were no global declaration, this would introduce a new
11623              local class named `S'.
11624
11625              An exception to this rule applies to the following code:
11626
11627                namespace N { struct S; }
11628
11629              Here, the elaborated-type-specifier names a new type
11630              unconditionally; even if there is already an `S' in the
11631              containing scope this declaration names a new type.
11632              This exception only applies if the elaborated-type-specifier
11633              forms the complete declaration:
11634
11635                [class.name]
11636
11637                A declaration consisting solely of `class-key identifier ;' is
11638                either a redeclaration of the name in the current scope or a
11639                forward declaration of the identifier as a class name.  It
11640                introduces the name into the current scope.
11641
11642              We are in this situation precisely when the next token is a `;'.
11643
11644              An exception to the exception is that a `friend' declaration does
11645              *not* name a new type; i.e., given:
11646
11647                struct S { friend struct T; };
11648
11649              `T' is not a new type in the scope of `S'.
11650
11651              Also, `new struct S' or `sizeof (struct S)' never results in the
11652              definition of a new type; a new type can only be declared in a
11653              declaration context.  */
11654
11655           tag_scope ts;
11656           bool template_p;
11657
11658           if (is_friend)
11659             /* Friends have special name lookup rules.  */
11660             ts = ts_within_enclosing_non_class;
11661           else if (is_declaration
11662                    && cp_lexer_next_token_is (parser->lexer,
11663                                               CPP_SEMICOLON))
11664             /* This is a `class-key identifier ;' */
11665             ts = ts_current;
11666           else
11667             ts = ts_global;
11668
11669           template_p =
11670             (parser->num_template_parameter_lists
11671              && (cp_parser_next_token_starts_class_definition_p (parser)
11672                  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
11673           /* An unqualified name was used to reference this type, so
11674              there were no qualifying templates.  */
11675           if (!cp_parser_check_template_parameters (parser,
11676                                                     /*num_templates=*/0,
11677                                                     token->location))
11678             return error_mark_node;
11679           type = xref_tag (tag_type, identifier, ts, template_p);
11680         }
11681     }
11682
11683   if (type == error_mark_node)
11684     return error_mark_node;
11685
11686   /* Allow attributes on forward declarations of classes.  */
11687   if (attributes)
11688     {
11689       if (TREE_CODE (type) == TYPENAME_TYPE)
11690         warning (OPT_Wattributes,
11691                  "attributes ignored on uninstantiated type");
11692       else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
11693                && ! processing_explicit_instantiation)
11694         warning (OPT_Wattributes,
11695                  "attributes ignored on template instantiation");
11696       else if (is_declaration && cp_parser_declares_only_class_p (parser))
11697         cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
11698       else
11699         warning (OPT_Wattributes,
11700                  "attributes ignored on elaborated-type-specifier that is not a forward declaration");
11701     }
11702
11703   if (tag_type != enum_type)
11704     cp_parser_check_class_key (tag_type, type);
11705
11706   /* A "<" cannot follow an elaborated type specifier.  If that
11707      happens, the user was probably trying to form a template-id.  */
11708   cp_parser_check_for_invalid_template_id (parser, type, token->location);
11709
11710   return type;
11711 }
11712
11713 /* Parse an enum-specifier.
11714
11715    enum-specifier:
11716      enum-key identifier [opt] enum-base [opt] { enumerator-list [opt] }
11717
11718    enum-key:
11719      enum
11720      enum class   [C++0x]
11721      enum struct  [C++0x]
11722
11723    enum-base:   [C++0x]
11724      : type-specifier-seq
11725
11726    GNU Extensions:
11727      enum-key attributes[opt] identifier [opt] enum-base [opt] 
11728        { enumerator-list [opt] }attributes[opt]
11729
11730    Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
11731    if the token stream isn't an enum-specifier after all.  */
11732
11733 static tree
11734 cp_parser_enum_specifier (cp_parser* parser)
11735 {
11736   tree identifier;
11737   tree type;
11738   tree attributes;
11739   bool scoped_enum_p = false;
11740   bool has_underlying_type = false;
11741   tree underlying_type = NULL_TREE;
11742
11743   /* Parse tentatively so that we can back up if we don't find a
11744      enum-specifier.  */
11745   cp_parser_parse_tentatively (parser);
11746
11747   /* Caller guarantees that the current token is 'enum', an identifier
11748      possibly follows, and the token after that is an opening brace.
11749      If we don't have an identifier, fabricate an anonymous name for
11750      the enumeration being defined.  */
11751   cp_lexer_consume_token (parser->lexer);
11752
11753   /* Parse the "class" or "struct", which indicates a scoped
11754      enumeration type in C++0x.  */
11755   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
11756       || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
11757     {
11758       if (cxx_dialect == cxx98)
11759         maybe_warn_cpp0x ("scoped enums");
11760
11761       /* Consume the `struct' or `class' token.  */
11762       cp_lexer_consume_token (parser->lexer);
11763
11764       scoped_enum_p = true;
11765     }
11766
11767   attributes = cp_parser_attributes_opt (parser);
11768
11769   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
11770     identifier = cp_parser_identifier (parser);
11771   else
11772     identifier = make_anon_name ();
11773
11774   /* Check for the `:' that denotes a specified underlying type in C++0x.  */
11775   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
11776     {
11777       cp_decl_specifier_seq type_specifiers;
11778
11779       /* At this point this is surely not elaborated type specifier.  */
11780       if (!cp_parser_parse_definitely (parser))
11781         return NULL_TREE;
11782
11783       if (cxx_dialect == cxx98)
11784         maybe_warn_cpp0x ("scoped enums");
11785
11786       /* Consume the `:'.  */
11787       cp_lexer_consume_token (parser->lexer);
11788
11789       has_underlying_type = true;
11790
11791       /* Parse the type-specifier-seq.  */
11792       cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
11793                                     &type_specifiers);
11794
11795       /* If that didn't work, stop.  */
11796       if (type_specifiers.type != error_mark_node)
11797         {
11798           underlying_type = grokdeclarator (NULL, &type_specifiers, TYPENAME,
11799                                             /*initialized=*/0, NULL);
11800           if (underlying_type == error_mark_node)
11801             underlying_type = NULL_TREE;
11802         }
11803     }
11804
11805   /* Look for the `{' but don't consume it yet.  */
11806   if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
11807     {
11808       cp_parser_error (parser, "expected %<{%>");
11809       if (has_underlying_type)
11810         return NULL_TREE;
11811     }
11812
11813   if (!has_underlying_type && !cp_parser_parse_definitely (parser))
11814     return NULL_TREE;
11815
11816   /* Issue an error message if type-definitions are forbidden here.  */
11817   if (!cp_parser_check_type_definition (parser))
11818     type = error_mark_node;
11819   else
11820     /* Create the new type.  We do this before consuming the opening
11821        brace so the enum will be recorded as being on the line of its
11822        tag (or the 'enum' keyword, if there is no tag).  */
11823     type = start_enum (identifier, underlying_type, scoped_enum_p);
11824   
11825   /* Consume the opening brace.  */
11826   cp_lexer_consume_token (parser->lexer);
11827
11828   if (type == error_mark_node)
11829     {
11830       cp_parser_skip_to_end_of_block_or_statement (parser);
11831       return error_mark_node;
11832     }
11833
11834   /* If the next token is not '}', then there are some enumerators.  */
11835   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
11836     cp_parser_enumerator_list (parser, type);
11837
11838   /* Consume the final '}'.  */
11839   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
11840
11841   /* Look for trailing attributes to apply to this enumeration, and
11842      apply them if appropriate.  */
11843   if (cp_parser_allow_gnu_extensions_p (parser))
11844     {
11845       tree trailing_attr = cp_parser_attributes_opt (parser);
11846       cplus_decl_attributes (&type,
11847                              trailing_attr,
11848                              (int) ATTR_FLAG_TYPE_IN_PLACE);
11849     }
11850
11851   /* Finish up the enumeration.  */
11852   finish_enum (type);
11853
11854   return type;
11855 }
11856
11857 /* Parse an enumerator-list.  The enumerators all have the indicated
11858    TYPE.
11859
11860    enumerator-list:
11861      enumerator-definition
11862      enumerator-list , enumerator-definition  */
11863
11864 static void
11865 cp_parser_enumerator_list (cp_parser* parser, tree type)
11866 {
11867   while (true)
11868     {
11869       /* Parse an enumerator-definition.  */
11870       cp_parser_enumerator_definition (parser, type);
11871
11872       /* If the next token is not a ',', we've reached the end of
11873          the list.  */
11874       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11875         break;
11876       /* Otherwise, consume the `,' and keep going.  */
11877       cp_lexer_consume_token (parser->lexer);
11878       /* If the next token is a `}', there is a trailing comma.  */
11879       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
11880         {
11881           if (!in_system_header)
11882             pedwarn (input_location, OPT_pedantic, "comma at end of enumerator list");
11883           break;
11884         }
11885     }
11886 }
11887
11888 /* Parse an enumerator-definition.  The enumerator has the indicated
11889    TYPE.
11890
11891    enumerator-definition:
11892      enumerator
11893      enumerator = constant-expression
11894
11895    enumerator:
11896      identifier  */
11897
11898 static void
11899 cp_parser_enumerator_definition (cp_parser* parser, tree type)
11900 {
11901   tree identifier;
11902   tree value;
11903
11904   /* Look for the identifier.  */
11905   identifier = cp_parser_identifier (parser);
11906   if (identifier == error_mark_node)
11907     return;
11908
11909   /* If the next token is an '=', then there is an explicit value.  */
11910   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
11911     {
11912       /* Consume the `=' token.  */
11913       cp_lexer_consume_token (parser->lexer);
11914       /* Parse the value.  */
11915       value = cp_parser_constant_expression (parser,
11916                                              /*allow_non_constant_p=*/false,
11917                                              NULL);
11918     }
11919   else
11920     value = NULL_TREE;
11921
11922   /* Create the enumerator.  */
11923   build_enumerator (identifier, value, type);
11924 }
11925
11926 /* Parse a namespace-name.
11927
11928    namespace-name:
11929      original-namespace-name
11930      namespace-alias
11931
11932    Returns the NAMESPACE_DECL for the namespace.  */
11933
11934 static tree
11935 cp_parser_namespace_name (cp_parser* parser)
11936 {
11937   tree identifier;
11938   tree namespace_decl;
11939
11940   cp_token *token = cp_lexer_peek_token (parser->lexer);
11941
11942   /* Get the name of the namespace.  */
11943   identifier = cp_parser_identifier (parser);
11944   if (identifier == error_mark_node)
11945     return error_mark_node;
11946
11947   /* Look up the identifier in the currently active scope.  Look only
11948      for namespaces, due to:
11949
11950        [basic.lookup.udir]
11951
11952        When looking up a namespace-name in a using-directive or alias
11953        definition, only namespace names are considered.
11954
11955      And:
11956
11957        [basic.lookup.qual]
11958
11959        During the lookup of a name preceding the :: scope resolution
11960        operator, object, function, and enumerator names are ignored.
11961
11962      (Note that cp_parser_qualifying_entity only calls this
11963      function if the token after the name is the scope resolution
11964      operator.)  */
11965   namespace_decl = cp_parser_lookup_name (parser, identifier,
11966                                           none_type,
11967                                           /*is_template=*/false,
11968                                           /*is_namespace=*/true,
11969                                           /*check_dependency=*/true,
11970                                           /*ambiguous_decls=*/NULL,
11971                                           token->location);
11972   /* If it's not a namespace, issue an error.  */
11973   if (namespace_decl == error_mark_node
11974       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
11975     {
11976       if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
11977         error ("%H%qD is not a namespace-name", &token->location, identifier);
11978       cp_parser_error (parser, "expected namespace-name");
11979       namespace_decl = error_mark_node;
11980     }
11981
11982   return namespace_decl;
11983 }
11984
11985 /* Parse a namespace-definition.
11986
11987    namespace-definition:
11988      named-namespace-definition
11989      unnamed-namespace-definition
11990
11991    named-namespace-definition:
11992      original-namespace-definition
11993      extension-namespace-definition
11994
11995    original-namespace-definition:
11996      namespace identifier { namespace-body }
11997
11998    extension-namespace-definition:
11999      namespace original-namespace-name { namespace-body }
12000
12001    unnamed-namespace-definition:
12002      namespace { namespace-body } */
12003
12004 static void
12005 cp_parser_namespace_definition (cp_parser* parser)
12006 {
12007   tree identifier, attribs;
12008   bool has_visibility;
12009   bool is_inline;
12010
12011   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_INLINE))
12012     {
12013       is_inline = true;
12014       cp_lexer_consume_token (parser->lexer);
12015     }
12016   else
12017     is_inline = false;
12018
12019   /* Look for the `namespace' keyword.  */
12020   cp_parser_require_keyword (parser, RID_NAMESPACE, "%<namespace%>");
12021
12022   /* Get the name of the namespace.  We do not attempt to distinguish
12023      between an original-namespace-definition and an
12024      extension-namespace-definition at this point.  The semantic
12025      analysis routines are responsible for that.  */
12026   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12027     identifier = cp_parser_identifier (parser);
12028   else
12029     identifier = NULL_TREE;
12030
12031   /* Parse any specified attributes.  */
12032   attribs = cp_parser_attributes_opt (parser);
12033
12034   /* Look for the `{' to start the namespace.  */
12035   cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>");
12036   /* Start the namespace.  */
12037   push_namespace (identifier);
12038
12039   /* "inline namespace" is equivalent to a stub namespace definition
12040      followed by a strong using directive.  */
12041   if (is_inline)
12042     {
12043       tree name_space = current_namespace;
12044       /* Set up namespace association.  */
12045       DECL_NAMESPACE_ASSOCIATIONS (name_space)
12046         = tree_cons (CP_DECL_CONTEXT (name_space), NULL_TREE,
12047                      DECL_NAMESPACE_ASSOCIATIONS (name_space));
12048       /* Import the contents of the inline namespace.  */
12049       pop_namespace ();
12050       do_using_directive (name_space);
12051       push_namespace (identifier);
12052     }
12053
12054   has_visibility = handle_namespace_attrs (current_namespace, attribs);
12055
12056   /* Parse the body of the namespace.  */
12057   cp_parser_namespace_body (parser);
12058
12059 #ifdef HANDLE_PRAGMA_VISIBILITY
12060   if (has_visibility)
12061     pop_visibility ();
12062 #endif
12063
12064   /* Finish the namespace.  */
12065   pop_namespace ();
12066   /* Look for the final `}'.  */
12067   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
12068 }
12069
12070 /* Parse a namespace-body.
12071
12072    namespace-body:
12073      declaration-seq [opt]  */
12074
12075 static void
12076 cp_parser_namespace_body (cp_parser* parser)
12077 {
12078   cp_parser_declaration_seq_opt (parser);
12079 }
12080
12081 /* Parse a namespace-alias-definition.
12082
12083    namespace-alias-definition:
12084      namespace identifier = qualified-namespace-specifier ;  */
12085
12086 static void
12087 cp_parser_namespace_alias_definition (cp_parser* parser)
12088 {
12089   tree identifier;
12090   tree namespace_specifier;
12091
12092   cp_token *token = cp_lexer_peek_token (parser->lexer);
12093
12094   /* Look for the `namespace' keyword.  */
12095   cp_parser_require_keyword (parser, RID_NAMESPACE, "%<namespace%>");
12096   /* Look for the identifier.  */
12097   identifier = cp_parser_identifier (parser);
12098   if (identifier == error_mark_node)
12099     return;
12100   /* Look for the `=' token.  */
12101   if (!cp_parser_uncommitted_to_tentative_parse_p (parser)
12102       && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) 
12103     {
12104       error ("%H%<namespace%> definition is not allowed here", &token->location);
12105       /* Skip the definition.  */
12106       cp_lexer_consume_token (parser->lexer);
12107       if (cp_parser_skip_to_closing_brace (parser))
12108         cp_lexer_consume_token (parser->lexer);
12109       return;
12110     }
12111   cp_parser_require (parser, CPP_EQ, "%<=%>");
12112   /* Look for the qualified-namespace-specifier.  */
12113   namespace_specifier
12114     = cp_parser_qualified_namespace_specifier (parser);
12115   /* Look for the `;' token.  */
12116   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
12117
12118   /* Register the alias in the symbol table.  */
12119   do_namespace_alias (identifier, namespace_specifier);
12120 }
12121
12122 /* Parse a qualified-namespace-specifier.
12123
12124    qualified-namespace-specifier:
12125      :: [opt] nested-name-specifier [opt] namespace-name
12126
12127    Returns a NAMESPACE_DECL corresponding to the specified
12128    namespace.  */
12129
12130 static tree
12131 cp_parser_qualified_namespace_specifier (cp_parser* parser)
12132 {
12133   /* Look for the optional `::'.  */
12134   cp_parser_global_scope_opt (parser,
12135                               /*current_scope_valid_p=*/false);
12136
12137   /* Look for the optional nested-name-specifier.  */
12138   cp_parser_nested_name_specifier_opt (parser,
12139                                        /*typename_keyword_p=*/false,
12140                                        /*check_dependency_p=*/true,
12141                                        /*type_p=*/false,
12142                                        /*is_declaration=*/true);
12143
12144   return cp_parser_namespace_name (parser);
12145 }
12146
12147 /* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
12148    access declaration.
12149
12150    using-declaration:
12151      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
12152      using :: unqualified-id ;  
12153
12154    access-declaration:
12155      qualified-id ;  
12156
12157    */
12158
12159 static bool
12160 cp_parser_using_declaration (cp_parser* parser, 
12161                              bool access_declaration_p)
12162 {
12163   cp_token *token;
12164   bool typename_p = false;
12165   bool global_scope_p;
12166   tree decl;
12167   tree identifier;
12168   tree qscope;
12169
12170   if (access_declaration_p)
12171     cp_parser_parse_tentatively (parser);
12172   else
12173     {
12174       /* Look for the `using' keyword.  */
12175       cp_parser_require_keyword (parser, RID_USING, "%<using%>");
12176       
12177       /* Peek at the next token.  */
12178       token = cp_lexer_peek_token (parser->lexer);
12179       /* See if it's `typename'.  */
12180       if (token->keyword == RID_TYPENAME)
12181         {
12182           /* Remember that we've seen it.  */
12183           typename_p = true;
12184           /* Consume the `typename' token.  */
12185           cp_lexer_consume_token (parser->lexer);
12186         }
12187     }
12188
12189   /* Look for the optional global scope qualification.  */
12190   global_scope_p
12191     = (cp_parser_global_scope_opt (parser,
12192                                    /*current_scope_valid_p=*/false)
12193        != NULL_TREE);
12194
12195   /* If we saw `typename', or didn't see `::', then there must be a
12196      nested-name-specifier present.  */
12197   if (typename_p || !global_scope_p)
12198     qscope = cp_parser_nested_name_specifier (parser, typename_p,
12199                                               /*check_dependency_p=*/true,
12200                                               /*type_p=*/false,
12201                                               /*is_declaration=*/true);
12202   /* Otherwise, we could be in either of the two productions.  In that
12203      case, treat the nested-name-specifier as optional.  */
12204   else
12205     qscope = cp_parser_nested_name_specifier_opt (parser,
12206                                                   /*typename_keyword_p=*/false,
12207                                                   /*check_dependency_p=*/true,
12208                                                   /*type_p=*/false,
12209                                                   /*is_declaration=*/true);
12210   if (!qscope)
12211     qscope = global_namespace;
12212
12213   if (access_declaration_p && cp_parser_error_occurred (parser))
12214     /* Something has already gone wrong; there's no need to parse
12215        further.  Since an error has occurred, the return value of
12216        cp_parser_parse_definitely will be false, as required.  */
12217     return cp_parser_parse_definitely (parser);
12218
12219   token = cp_lexer_peek_token (parser->lexer);
12220   /* Parse the unqualified-id.  */
12221   identifier = cp_parser_unqualified_id (parser,
12222                                          /*template_keyword_p=*/false,
12223                                          /*check_dependency_p=*/true,
12224                                          /*declarator_p=*/true,
12225                                          /*optional_p=*/false);
12226
12227   if (access_declaration_p)
12228     {
12229       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
12230         cp_parser_simulate_error (parser);
12231       if (!cp_parser_parse_definitely (parser))
12232         return false;
12233     }
12234
12235   /* The function we call to handle a using-declaration is different
12236      depending on what scope we are in.  */
12237   if (qscope == error_mark_node || identifier == error_mark_node)
12238     ;
12239   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
12240            && TREE_CODE (identifier) != BIT_NOT_EXPR)
12241     /* [namespace.udecl]
12242
12243        A using declaration shall not name a template-id.  */
12244     error ("%Ha template-id may not appear in a using-declaration",
12245             &token->location);
12246   else
12247     {
12248       if (at_class_scope_p ())
12249         {
12250           /* Create the USING_DECL.  */
12251           decl = do_class_using_decl (parser->scope, identifier);
12252
12253           if (check_for_bare_parameter_packs (decl))
12254             return false;
12255           else
12256             /* Add it to the list of members in this class.  */
12257             finish_member_declaration (decl);
12258         }
12259       else
12260         {
12261           decl = cp_parser_lookup_name_simple (parser,
12262                                                identifier,
12263                                                token->location);
12264           if (decl == error_mark_node)
12265             cp_parser_name_lookup_error (parser, identifier,
12266                                          decl, NULL,
12267                                          token->location);
12268           else if (check_for_bare_parameter_packs (decl))
12269             return false;
12270           else if (!at_namespace_scope_p ())
12271             do_local_using_decl (decl, qscope, identifier);
12272           else
12273             do_toplevel_using_decl (decl, qscope, identifier);
12274         }
12275     }
12276
12277   /* Look for the final `;'.  */
12278   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
12279   
12280   return true;
12281 }
12282
12283 /* Parse a using-directive.
12284
12285    using-directive:
12286      using namespace :: [opt] nested-name-specifier [opt]
12287        namespace-name ;  */
12288
12289 static void
12290 cp_parser_using_directive (cp_parser* parser)
12291 {
12292   tree namespace_decl;
12293   tree attribs;
12294
12295   /* Look for the `using' keyword.  */
12296   cp_parser_require_keyword (parser, RID_USING, "%<using%>");
12297   /* And the `namespace' keyword.  */
12298   cp_parser_require_keyword (parser, RID_NAMESPACE, "%<namespace%>");
12299   /* Look for the optional `::' operator.  */
12300   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
12301   /* And the optional nested-name-specifier.  */
12302   cp_parser_nested_name_specifier_opt (parser,
12303                                        /*typename_keyword_p=*/false,
12304                                        /*check_dependency_p=*/true,
12305                                        /*type_p=*/false,
12306                                        /*is_declaration=*/true);
12307   /* Get the namespace being used.  */
12308   namespace_decl = cp_parser_namespace_name (parser);
12309   /* And any specified attributes.  */
12310   attribs = cp_parser_attributes_opt (parser);
12311   /* Update the symbol table.  */
12312   parse_using_directive (namespace_decl, attribs);
12313   /* Look for the final `;'.  */
12314   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
12315 }
12316
12317 /* Parse an asm-definition.
12318
12319    asm-definition:
12320      asm ( string-literal ) ;
12321
12322    GNU Extension:
12323
12324    asm-definition:
12325      asm volatile [opt] ( string-literal ) ;
12326      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
12327      asm volatile [opt] ( string-literal : asm-operand-list [opt]
12328                           : asm-operand-list [opt] ) ;
12329      asm volatile [opt] ( string-literal : asm-operand-list [opt]
12330                           : asm-operand-list [opt]
12331                           : asm-operand-list [opt] ) ;  */
12332
12333 static void
12334 cp_parser_asm_definition (cp_parser* parser)
12335 {
12336   tree string;
12337   tree outputs = NULL_TREE;
12338   tree inputs = NULL_TREE;
12339   tree clobbers = NULL_TREE;
12340   tree asm_stmt;
12341   bool volatile_p = false;
12342   bool extended_p = false;
12343   bool invalid_inputs_p = false;
12344   bool invalid_outputs_p = false;
12345
12346   /* Look for the `asm' keyword.  */
12347   cp_parser_require_keyword (parser, RID_ASM, "%<asm%>");
12348   /* See if the next token is `volatile'.  */
12349   if (cp_parser_allow_gnu_extensions_p (parser)
12350       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
12351     {
12352       /* Remember that we saw the `volatile' keyword.  */
12353       volatile_p = true;
12354       /* Consume the token.  */
12355       cp_lexer_consume_token (parser->lexer);
12356     }
12357   /* Look for the opening `('.  */
12358   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
12359     return;
12360   /* Look for the string.  */
12361   string = cp_parser_string_literal (parser, false, false);
12362   if (string == error_mark_node)
12363     {
12364       cp_parser_skip_to_closing_parenthesis (parser, true, false,
12365                                              /*consume_paren=*/true);
12366       return;
12367     }
12368
12369   /* If we're allowing GNU extensions, check for the extended assembly
12370      syntax.  Unfortunately, the `:' tokens need not be separated by
12371      a space in C, and so, for compatibility, we tolerate that here
12372      too.  Doing that means that we have to treat the `::' operator as
12373      two `:' tokens.  */
12374   if (cp_parser_allow_gnu_extensions_p (parser)
12375       && parser->in_function_body
12376       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
12377           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
12378     {
12379       bool inputs_p = false;
12380       bool clobbers_p = false;
12381
12382       /* The extended syntax was used.  */
12383       extended_p = true;
12384
12385       /* Look for outputs.  */
12386       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
12387         {
12388           /* Consume the `:'.  */
12389           cp_lexer_consume_token (parser->lexer);
12390           /* Parse the output-operands.  */
12391           if (cp_lexer_next_token_is_not (parser->lexer,
12392                                           CPP_COLON)
12393               && cp_lexer_next_token_is_not (parser->lexer,
12394                                              CPP_SCOPE)
12395               && cp_lexer_next_token_is_not (parser->lexer,
12396                                              CPP_CLOSE_PAREN))
12397             outputs = cp_parser_asm_operand_list (parser);
12398
12399             if (outputs == error_mark_node)
12400               invalid_outputs_p = true;
12401         }
12402       /* If the next token is `::', there are no outputs, and the
12403          next token is the beginning of the inputs.  */
12404       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12405         /* The inputs are coming next.  */
12406         inputs_p = true;
12407
12408       /* Look for inputs.  */
12409       if (inputs_p
12410           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
12411         {
12412           /* Consume the `:' or `::'.  */
12413           cp_lexer_consume_token (parser->lexer);
12414           /* Parse the output-operands.  */
12415           if (cp_lexer_next_token_is_not (parser->lexer,
12416                                           CPP_COLON)
12417               && cp_lexer_next_token_is_not (parser->lexer,
12418                                              CPP_CLOSE_PAREN))
12419             inputs = cp_parser_asm_operand_list (parser);
12420
12421             if (inputs == error_mark_node)
12422               invalid_inputs_p = true;
12423         }
12424       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12425         /* The clobbers are coming next.  */
12426         clobbers_p = true;
12427
12428       /* Look for clobbers.  */
12429       if (clobbers_p
12430           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
12431         {
12432           /* Consume the `:' or `::'.  */
12433           cp_lexer_consume_token (parser->lexer);
12434           /* Parse the clobbers.  */
12435           if (cp_lexer_next_token_is_not (parser->lexer,
12436                                           CPP_CLOSE_PAREN))
12437             clobbers = cp_parser_asm_clobber_list (parser);
12438         }
12439     }
12440   /* Look for the closing `)'.  */
12441   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
12442     cp_parser_skip_to_closing_parenthesis (parser, true, false,
12443                                            /*consume_paren=*/true);
12444   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
12445
12446   if (!invalid_inputs_p && !invalid_outputs_p)
12447     {
12448       /* Create the ASM_EXPR.  */
12449       if (parser->in_function_body)
12450         {
12451           asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
12452                                       inputs, clobbers);
12453           /* If the extended syntax was not used, mark the ASM_EXPR.  */
12454           if (!extended_p)
12455             {
12456               tree temp = asm_stmt;
12457               if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
12458                 temp = TREE_OPERAND (temp, 0);
12459
12460               ASM_INPUT_P (temp) = 1;
12461             }
12462         }
12463       else
12464         cgraph_add_asm_node (string);
12465     }
12466 }
12467
12468 /* Declarators [gram.dcl.decl] */
12469
12470 /* Parse an init-declarator.
12471
12472    init-declarator:
12473      declarator initializer [opt]
12474
12475    GNU Extension:
12476
12477    init-declarator:
12478      declarator asm-specification [opt] attributes [opt] initializer [opt]
12479
12480    function-definition:
12481      decl-specifier-seq [opt] declarator ctor-initializer [opt]
12482        function-body
12483      decl-specifier-seq [opt] declarator function-try-block
12484
12485    GNU Extension:
12486
12487    function-definition:
12488      __extension__ function-definition
12489
12490    The DECL_SPECIFIERS apply to this declarator.  Returns a
12491    representation of the entity declared.  If MEMBER_P is TRUE, then
12492    this declarator appears in a class scope.  The new DECL created by
12493    this declarator is returned.
12494
12495    The CHECKS are access checks that should be performed once we know
12496    what entity is being declared (and, therefore, what classes have
12497    befriended it).
12498
12499    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
12500    for a function-definition here as well.  If the declarator is a
12501    declarator for a function-definition, *FUNCTION_DEFINITION_P will
12502    be TRUE upon return.  By that point, the function-definition will
12503    have been completely parsed.
12504
12505    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
12506    is FALSE.  */
12507
12508 static tree
12509 cp_parser_init_declarator (cp_parser* parser,
12510                            cp_decl_specifier_seq *decl_specifiers,
12511                            VEC (deferred_access_check,gc)* checks,
12512                            bool function_definition_allowed_p,
12513                            bool member_p,
12514                            int declares_class_or_enum,
12515                            bool* function_definition_p)
12516 {
12517   cp_token *token = NULL, *asm_spec_start_token = NULL,
12518            *attributes_start_token = NULL;
12519   cp_declarator *declarator;
12520   tree prefix_attributes;
12521   tree attributes;
12522   tree asm_specification;
12523   tree initializer;
12524   tree decl = NULL_TREE;
12525   tree scope;
12526   int is_initialized;
12527   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
12528      initialized with "= ..", CPP_OPEN_PAREN if initialized with
12529      "(...)".  */
12530   enum cpp_ttype initialization_kind;
12531   bool is_direct_init = false;
12532   bool is_non_constant_init;
12533   int ctor_dtor_or_conv_p;
12534   bool friend_p;
12535   tree pushed_scope = NULL;
12536
12537   /* Gather the attributes that were provided with the
12538      decl-specifiers.  */
12539   prefix_attributes = decl_specifiers->attributes;
12540
12541   /* Assume that this is not the declarator for a function
12542      definition.  */
12543   if (function_definition_p)
12544     *function_definition_p = false;
12545
12546   /* Defer access checks while parsing the declarator; we cannot know
12547      what names are accessible until we know what is being
12548      declared.  */
12549   resume_deferring_access_checks ();
12550
12551   /* Parse the declarator.  */
12552   token = cp_lexer_peek_token (parser->lexer);
12553   declarator
12554     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
12555                             &ctor_dtor_or_conv_p,
12556                             /*parenthesized_p=*/NULL,
12557                             /*member_p=*/false);
12558   /* Gather up the deferred checks.  */
12559   stop_deferring_access_checks ();
12560
12561   /* If the DECLARATOR was erroneous, there's no need to go
12562      further.  */
12563   if (declarator == cp_error_declarator)
12564     return error_mark_node;
12565
12566   /* Check that the number of template-parameter-lists is OK.  */
12567   if (!cp_parser_check_declarator_template_parameters (parser, declarator,
12568                                                        token->location))
12569     return error_mark_node;
12570
12571   if (declares_class_or_enum & 2)
12572     cp_parser_check_for_definition_in_return_type (declarator,
12573                                                    decl_specifiers->type,
12574                                                    decl_specifiers->type_location);
12575
12576   /* Figure out what scope the entity declared by the DECLARATOR is
12577      located in.  `grokdeclarator' sometimes changes the scope, so
12578      we compute it now.  */
12579   scope = get_scope_of_declarator (declarator);
12580
12581   /* If we're allowing GNU extensions, look for an asm-specification
12582      and attributes.  */
12583   if (cp_parser_allow_gnu_extensions_p (parser))
12584     {
12585       /* Look for an asm-specification.  */
12586       asm_spec_start_token = cp_lexer_peek_token (parser->lexer);
12587       asm_specification = cp_parser_asm_specification_opt (parser);
12588       /* And attributes.  */
12589       attributes_start_token = cp_lexer_peek_token (parser->lexer);
12590       attributes = cp_parser_attributes_opt (parser);
12591     }
12592   else
12593     {
12594       asm_specification = NULL_TREE;
12595       attributes = NULL_TREE;
12596     }
12597
12598   /* Peek at the next token.  */
12599   token = cp_lexer_peek_token (parser->lexer);
12600   /* Check to see if the token indicates the start of a
12601      function-definition.  */
12602   if (function_declarator_p (declarator)
12603       && cp_parser_token_starts_function_definition_p (token))
12604     {
12605       if (!function_definition_allowed_p)
12606         {
12607           /* If a function-definition should not appear here, issue an
12608              error message.  */
12609           cp_parser_error (parser,
12610                            "a function-definition is not allowed here");
12611           return error_mark_node;
12612         }
12613       else
12614         {
12615           location_t func_brace_location
12616             = cp_lexer_peek_token (parser->lexer)->location;
12617
12618           /* Neither attributes nor an asm-specification are allowed
12619              on a function-definition.  */
12620           if (asm_specification)
12621             error ("%Han asm-specification is not allowed "
12622                    "on a function-definition",
12623                    &asm_spec_start_token->location);
12624           if (attributes)
12625             error ("%Hattributes are not allowed on a function-definition",
12626                    &attributes_start_token->location);
12627           /* This is a function-definition.  */
12628           *function_definition_p = true;
12629
12630           /* Parse the function definition.  */
12631           if (member_p)
12632             decl = cp_parser_save_member_function_body (parser,
12633                                                         decl_specifiers,
12634                                                         declarator,
12635                                                         prefix_attributes);
12636           else
12637             decl
12638               = (cp_parser_function_definition_from_specifiers_and_declarator
12639                  (parser, decl_specifiers, prefix_attributes, declarator));
12640
12641           if (decl != error_mark_node && DECL_STRUCT_FUNCTION (decl))
12642             {
12643               /* This is where the prologue starts...  */
12644               DECL_STRUCT_FUNCTION (decl)->function_start_locus
12645                 = func_brace_location;
12646             }
12647
12648           return decl;
12649         }
12650     }
12651
12652   /* [dcl.dcl]
12653
12654      Only in function declarations for constructors, destructors, and
12655      type conversions can the decl-specifier-seq be omitted.
12656
12657      We explicitly postpone this check past the point where we handle
12658      function-definitions because we tolerate function-definitions
12659      that are missing their return types in some modes.  */
12660   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
12661     {
12662       cp_parser_error (parser,
12663                        "expected constructor, destructor, or type conversion");
12664       return error_mark_node;
12665     }
12666
12667   /* An `=' or an `(', or an '{' in C++0x, indicates an initializer.  */
12668   if (token->type == CPP_EQ
12669       || token->type == CPP_OPEN_PAREN
12670       || token->type == CPP_OPEN_BRACE)
12671     {
12672       is_initialized = SD_INITIALIZED;
12673       initialization_kind = token->type;
12674
12675       if (token->type == CPP_EQ
12676           && function_declarator_p (declarator))
12677         {
12678           cp_token *t2 = cp_lexer_peek_nth_token (parser->lexer, 2);
12679           if (t2->keyword == RID_DEFAULT)
12680             is_initialized = SD_DEFAULTED;
12681           else if (t2->keyword == RID_DELETE)
12682             is_initialized = SD_DELETED;
12683         }
12684     }
12685   else
12686     {
12687       /* If the init-declarator isn't initialized and isn't followed by a
12688          `,' or `;', it's not a valid init-declarator.  */
12689       if (token->type != CPP_COMMA
12690           && token->type != CPP_SEMICOLON)
12691         {
12692           cp_parser_error (parser, "expected initializer");
12693           return error_mark_node;
12694         }
12695       is_initialized = SD_UNINITIALIZED;
12696       initialization_kind = CPP_EOF;
12697     }
12698
12699   /* Because start_decl has side-effects, we should only call it if we
12700      know we're going ahead.  By this point, we know that we cannot
12701      possibly be looking at any other construct.  */
12702   cp_parser_commit_to_tentative_parse (parser);
12703
12704   /* If the decl specifiers were bad, issue an error now that we're
12705      sure this was intended to be a declarator.  Then continue
12706      declaring the variable(s), as int, to try to cut down on further
12707      errors.  */
12708   if (decl_specifiers->any_specifiers_p
12709       && decl_specifiers->type == error_mark_node)
12710     {
12711       cp_parser_error (parser, "invalid type in declaration");
12712       decl_specifiers->type = integer_type_node;
12713     }
12714
12715   /* Check to see whether or not this declaration is a friend.  */
12716   friend_p = cp_parser_friend_p (decl_specifiers);
12717
12718   /* Enter the newly declared entry in the symbol table.  If we're
12719      processing a declaration in a class-specifier, we wait until
12720      after processing the initializer.  */
12721   if (!member_p)
12722     {
12723       if (parser->in_unbraced_linkage_specification_p)
12724         decl_specifiers->storage_class = sc_extern;
12725       decl = start_decl (declarator, decl_specifiers,
12726                          is_initialized, attributes, prefix_attributes,
12727                          &pushed_scope);
12728     }
12729   else if (scope)
12730     /* Enter the SCOPE.  That way unqualified names appearing in the
12731        initializer will be looked up in SCOPE.  */
12732     pushed_scope = push_scope (scope);
12733
12734   /* Perform deferred access control checks, now that we know in which
12735      SCOPE the declared entity resides.  */
12736   if (!member_p && decl)
12737     {
12738       tree saved_current_function_decl = NULL_TREE;
12739
12740       /* If the entity being declared is a function, pretend that we
12741          are in its scope.  If it is a `friend', it may have access to
12742          things that would not otherwise be accessible.  */
12743       if (TREE_CODE (decl) == FUNCTION_DECL)
12744         {
12745           saved_current_function_decl = current_function_decl;
12746           current_function_decl = decl;
12747         }
12748
12749       /* Perform access checks for template parameters.  */
12750       cp_parser_perform_template_parameter_access_checks (checks);
12751
12752       /* Perform the access control checks for the declarator and the
12753          decl-specifiers.  */
12754       perform_deferred_access_checks ();
12755
12756       /* Restore the saved value.  */
12757       if (TREE_CODE (decl) == FUNCTION_DECL)
12758         current_function_decl = saved_current_function_decl;
12759     }
12760
12761   /* Parse the initializer.  */
12762   initializer = NULL_TREE;
12763   is_direct_init = false;
12764   is_non_constant_init = true;
12765   if (is_initialized)
12766     {
12767       if (function_declarator_p (declarator))
12768         {
12769           cp_token *initializer_start_token = cp_lexer_peek_token (parser->lexer);
12770            if (initialization_kind == CPP_EQ)
12771              initializer = cp_parser_pure_specifier (parser);
12772            else
12773              {
12774                /* If the declaration was erroneous, we don't really
12775                   know what the user intended, so just silently
12776                   consume the initializer.  */
12777                if (decl != error_mark_node)
12778                  error ("%Hinitializer provided for function",
12779                         &initializer_start_token->location);
12780                cp_parser_skip_to_closing_parenthesis (parser,
12781                                                       /*recovering=*/true,
12782                                                       /*or_comma=*/false,
12783                                                       /*consume_paren=*/true);
12784              }
12785         }
12786       else
12787         initializer = cp_parser_initializer (parser,
12788                                              &is_direct_init,
12789                                              &is_non_constant_init);
12790     }
12791
12792   /* The old parser allows attributes to appear after a parenthesized
12793      initializer.  Mark Mitchell proposed removing this functionality
12794      on the GCC mailing lists on 2002-08-13.  This parser accepts the
12795      attributes -- but ignores them.  */
12796   if (cp_parser_allow_gnu_extensions_p (parser)
12797       && initialization_kind == CPP_OPEN_PAREN)
12798     if (cp_parser_attributes_opt (parser))
12799       warning (OPT_Wattributes,
12800                "attributes after parenthesized initializer ignored");
12801
12802   /* For an in-class declaration, use `grokfield' to create the
12803      declaration.  */
12804   if (member_p)
12805     {
12806       if (pushed_scope)
12807         {
12808           pop_scope (pushed_scope);
12809           pushed_scope = false;
12810         }
12811       decl = grokfield (declarator, decl_specifiers,
12812                         initializer, !is_non_constant_init,
12813                         /*asmspec=*/NULL_TREE,
12814                         prefix_attributes);
12815       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
12816         cp_parser_save_default_args (parser, decl);
12817     }
12818
12819   /* Finish processing the declaration.  But, skip friend
12820      declarations.  */
12821   if (!friend_p && decl && decl != error_mark_node)
12822     {
12823       cp_finish_decl (decl,
12824                       initializer, !is_non_constant_init,
12825                       asm_specification,
12826                       /* If the initializer is in parentheses, then this is
12827                          a direct-initialization, which means that an
12828                          `explicit' constructor is OK.  Otherwise, an
12829                          `explicit' constructor cannot be used.  */
12830                       ((is_direct_init || !is_initialized)
12831                        ? 0 : LOOKUP_ONLYCONVERTING));
12832     }
12833   else if ((cxx_dialect != cxx98) && friend_p
12834            && decl && TREE_CODE (decl) == FUNCTION_DECL)
12835     /* Core issue #226 (C++0x only): A default template-argument
12836        shall not be specified in a friend class template
12837        declaration. */
12838     check_default_tmpl_args (decl, current_template_parms, /*is_primary=*/1, 
12839                              /*is_partial=*/0, /*is_friend_decl=*/1);
12840
12841   if (!friend_p && pushed_scope)
12842     pop_scope (pushed_scope);
12843
12844   return decl;
12845 }
12846
12847 /* Parse a declarator.
12848
12849    declarator:
12850      direct-declarator
12851      ptr-operator declarator
12852
12853    abstract-declarator:
12854      ptr-operator abstract-declarator [opt]
12855      direct-abstract-declarator
12856
12857    GNU Extensions:
12858
12859    declarator:
12860      attributes [opt] direct-declarator
12861      attributes [opt] ptr-operator declarator
12862
12863    abstract-declarator:
12864      attributes [opt] ptr-operator abstract-declarator [opt]
12865      attributes [opt] direct-abstract-declarator
12866
12867    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
12868    detect constructor, destructor or conversion operators. It is set
12869    to -1 if the declarator is a name, and +1 if it is a
12870    function. Otherwise it is set to zero. Usually you just want to
12871    test for >0, but internally the negative value is used.
12872
12873    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
12874    a decl-specifier-seq unless it declares a constructor, destructor,
12875    or conversion.  It might seem that we could check this condition in
12876    semantic analysis, rather than parsing, but that makes it difficult
12877    to handle something like `f()'.  We want to notice that there are
12878    no decl-specifiers, and therefore realize that this is an
12879    expression, not a declaration.)
12880
12881    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
12882    the declarator is a direct-declarator of the form "(...)".
12883
12884    MEMBER_P is true iff this declarator is a member-declarator.  */
12885
12886 static cp_declarator *
12887 cp_parser_declarator (cp_parser* parser,
12888                       cp_parser_declarator_kind dcl_kind,
12889                       int* ctor_dtor_or_conv_p,
12890                       bool* parenthesized_p,
12891                       bool member_p)
12892 {
12893   cp_token *token;
12894   cp_declarator *declarator;
12895   enum tree_code code;
12896   cp_cv_quals cv_quals;
12897   tree class_type;
12898   tree attributes = NULL_TREE;
12899
12900   /* Assume this is not a constructor, destructor, or type-conversion
12901      operator.  */
12902   if (ctor_dtor_or_conv_p)
12903     *ctor_dtor_or_conv_p = 0;
12904
12905   if (cp_parser_allow_gnu_extensions_p (parser))
12906     attributes = cp_parser_attributes_opt (parser);
12907
12908   /* Peek at the next token.  */
12909   token = cp_lexer_peek_token (parser->lexer);
12910
12911   /* Check for the ptr-operator production.  */
12912   cp_parser_parse_tentatively (parser);
12913   /* Parse the ptr-operator.  */
12914   code = cp_parser_ptr_operator (parser,
12915                                  &class_type,
12916                                  &cv_quals);
12917   /* If that worked, then we have a ptr-operator.  */
12918   if (cp_parser_parse_definitely (parser))
12919     {
12920       /* If a ptr-operator was found, then this declarator was not
12921          parenthesized.  */
12922       if (parenthesized_p)
12923         *parenthesized_p = true;
12924       /* The dependent declarator is optional if we are parsing an
12925          abstract-declarator.  */
12926       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
12927         cp_parser_parse_tentatively (parser);
12928
12929       /* Parse the dependent declarator.  */
12930       declarator = cp_parser_declarator (parser, dcl_kind,
12931                                          /*ctor_dtor_or_conv_p=*/NULL,
12932                                          /*parenthesized_p=*/NULL,
12933                                          /*member_p=*/false);
12934
12935       /* If we are parsing an abstract-declarator, we must handle the
12936          case where the dependent declarator is absent.  */
12937       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
12938           && !cp_parser_parse_definitely (parser))
12939         declarator = NULL;
12940
12941       declarator = cp_parser_make_indirect_declarator
12942         (code, class_type, cv_quals, declarator);
12943     }
12944   /* Everything else is a direct-declarator.  */
12945   else
12946     {
12947       if (parenthesized_p)
12948         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
12949                                                    CPP_OPEN_PAREN);
12950       declarator = cp_parser_direct_declarator (parser, dcl_kind,
12951                                                 ctor_dtor_or_conv_p,
12952                                                 member_p);
12953     }
12954
12955   if (attributes && declarator && declarator != cp_error_declarator)
12956     declarator->attributes = attributes;
12957
12958   return declarator;
12959 }
12960
12961 /* Parse a direct-declarator or direct-abstract-declarator.
12962
12963    direct-declarator:
12964      declarator-id
12965      direct-declarator ( parameter-declaration-clause )
12966        cv-qualifier-seq [opt]
12967        exception-specification [opt]
12968      direct-declarator [ constant-expression [opt] ]
12969      ( declarator )
12970
12971    direct-abstract-declarator:
12972      direct-abstract-declarator [opt]
12973        ( parameter-declaration-clause )
12974        cv-qualifier-seq [opt]
12975        exception-specification [opt]
12976      direct-abstract-declarator [opt] [ constant-expression [opt] ]
12977      ( abstract-declarator )
12978
12979    Returns a representation of the declarator.  DCL_KIND is
12980    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
12981    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
12982    we are parsing a direct-declarator.  It is
12983    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
12984    of ambiguity we prefer an abstract declarator, as per
12985    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
12986    cp_parser_declarator.  */
12987
12988 static cp_declarator *
12989 cp_parser_direct_declarator (cp_parser* parser,
12990                              cp_parser_declarator_kind dcl_kind,
12991                              int* ctor_dtor_or_conv_p,
12992                              bool member_p)
12993 {
12994   cp_token *token;
12995   cp_declarator *declarator = NULL;
12996   tree scope = NULL_TREE;
12997   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
12998   bool saved_in_declarator_p = parser->in_declarator_p;
12999   bool first = true;
13000   tree pushed_scope = NULL_TREE;
13001
13002   while (true)
13003     {
13004       /* Peek at the next token.  */
13005       token = cp_lexer_peek_token (parser->lexer);
13006       if (token->type == CPP_OPEN_PAREN)
13007         {
13008           /* This is either a parameter-declaration-clause, or a
13009              parenthesized declarator. When we know we are parsing a
13010              named declarator, it must be a parenthesized declarator
13011              if FIRST is true. For instance, `(int)' is a
13012              parameter-declaration-clause, with an omitted
13013              direct-abstract-declarator. But `((*))', is a
13014              parenthesized abstract declarator. Finally, when T is a
13015              template parameter `(T)' is a
13016              parameter-declaration-clause, and not a parenthesized
13017              named declarator.
13018
13019              We first try and parse a parameter-declaration-clause,
13020              and then try a nested declarator (if FIRST is true).
13021
13022              It is not an error for it not to be a
13023              parameter-declaration-clause, even when FIRST is
13024              false. Consider,
13025
13026                int i (int);
13027                int i (3);
13028
13029              The first is the declaration of a function while the
13030              second is the definition of a variable, including its
13031              initializer.
13032
13033              Having seen only the parenthesis, we cannot know which of
13034              these two alternatives should be selected.  Even more
13035              complex are examples like:
13036
13037                int i (int (a));
13038                int i (int (3));
13039
13040              The former is a function-declaration; the latter is a
13041              variable initialization.
13042
13043              Thus again, we try a parameter-declaration-clause, and if
13044              that fails, we back out and return.  */
13045
13046           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
13047             {
13048               tree params;
13049               unsigned saved_num_template_parameter_lists;
13050               bool is_declarator = false;
13051               tree t;
13052
13053               /* In a member-declarator, the only valid interpretation
13054                  of a parenthesis is the start of a
13055                  parameter-declaration-clause.  (It is invalid to
13056                  initialize a static data member with a parenthesized
13057                  initializer; only the "=" form of initialization is
13058                  permitted.)  */
13059               if (!member_p)
13060                 cp_parser_parse_tentatively (parser);
13061
13062               /* Consume the `('.  */
13063               cp_lexer_consume_token (parser->lexer);
13064               if (first)
13065                 {
13066                   /* If this is going to be an abstract declarator, we're
13067                      in a declarator and we can't have default args.  */
13068                   parser->default_arg_ok_p = false;
13069                   parser->in_declarator_p = true;
13070                 }
13071
13072               /* Inside the function parameter list, surrounding
13073                  template-parameter-lists do not apply.  */
13074               saved_num_template_parameter_lists
13075                 = parser->num_template_parameter_lists;
13076               parser->num_template_parameter_lists = 0;
13077
13078               begin_scope (sk_function_parms, NULL_TREE);
13079
13080               /* Parse the parameter-declaration-clause.  */
13081               params = cp_parser_parameter_declaration_clause (parser);
13082
13083               parser->num_template_parameter_lists
13084                 = saved_num_template_parameter_lists;
13085
13086               /* If all went well, parse the cv-qualifier-seq and the
13087                  exception-specification.  */
13088               if (member_p || cp_parser_parse_definitely (parser))
13089                 {
13090                   cp_cv_quals cv_quals;
13091                   tree exception_specification;
13092                   tree late_return;
13093
13094                   is_declarator = true;
13095
13096                   if (ctor_dtor_or_conv_p)
13097                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
13098                   first = false;
13099                   /* Consume the `)'.  */
13100                   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
13101
13102                   /* Parse the cv-qualifier-seq.  */
13103                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
13104                   /* And the exception-specification.  */
13105                   exception_specification
13106                     = cp_parser_exception_specification_opt (parser);
13107
13108                   late_return
13109                     = cp_parser_late_return_type_opt (parser);
13110
13111                   /* Create the function-declarator.  */
13112                   declarator = make_call_declarator (declarator,
13113                                                      params,
13114                                                      cv_quals,
13115                                                      exception_specification,
13116                                                      late_return);
13117                   /* Any subsequent parameter lists are to do with
13118                      return type, so are not those of the declared
13119                      function.  */
13120                   parser->default_arg_ok_p = false;
13121                 }
13122
13123               /* Remove the function parms from scope.  */
13124               for (t = current_binding_level->names; t; t = TREE_CHAIN (t))
13125                 pop_binding (DECL_NAME (t), t);
13126               leave_scope();
13127
13128               if (is_declarator)
13129                 /* Repeat the main loop.  */
13130                 continue;
13131             }
13132
13133           /* If this is the first, we can try a parenthesized
13134              declarator.  */
13135           if (first)
13136             {
13137               bool saved_in_type_id_in_expr_p;
13138
13139               parser->default_arg_ok_p = saved_default_arg_ok_p;
13140               parser->in_declarator_p = saved_in_declarator_p;
13141
13142               /* Consume the `('.  */
13143               cp_lexer_consume_token (parser->lexer);
13144               /* Parse the nested declarator.  */
13145               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
13146               parser->in_type_id_in_expr_p = true;
13147               declarator
13148                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
13149                                         /*parenthesized_p=*/NULL,
13150                                         member_p);
13151               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
13152               first = false;
13153               /* Expect a `)'.  */
13154               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
13155                 declarator = cp_error_declarator;
13156               if (declarator == cp_error_declarator)
13157                 break;
13158
13159               goto handle_declarator;
13160             }
13161           /* Otherwise, we must be done.  */
13162           else
13163             break;
13164         }
13165       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
13166                && token->type == CPP_OPEN_SQUARE)
13167         {
13168           /* Parse an array-declarator.  */
13169           tree bounds;
13170
13171           if (ctor_dtor_or_conv_p)
13172             *ctor_dtor_or_conv_p = 0;
13173
13174           first = false;
13175           parser->default_arg_ok_p = false;
13176           parser->in_declarator_p = true;
13177           /* Consume the `['.  */
13178           cp_lexer_consume_token (parser->lexer);
13179           /* Peek at the next token.  */
13180           token = cp_lexer_peek_token (parser->lexer);
13181           /* If the next token is `]', then there is no
13182              constant-expression.  */
13183           if (token->type != CPP_CLOSE_SQUARE)
13184             {
13185               bool non_constant_p;
13186
13187               bounds
13188                 = cp_parser_constant_expression (parser,
13189                                                  /*allow_non_constant=*/true,
13190                                                  &non_constant_p);
13191               if (!non_constant_p)
13192                 bounds = fold_non_dependent_expr (bounds);
13193               /* Normally, the array bound must be an integral constant
13194                  expression.  However, as an extension, we allow VLAs
13195                  in function scopes.  */
13196               else if (!parser->in_function_body)
13197                 {
13198                   error ("%Harray bound is not an integer constant",
13199                          &token->location);
13200                   bounds = error_mark_node;
13201                 }
13202             }
13203           else
13204             bounds = NULL_TREE;
13205           /* Look for the closing `]'.  */
13206           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>"))
13207             {
13208               declarator = cp_error_declarator;
13209               break;
13210             }
13211
13212           declarator = make_array_declarator (declarator, bounds);
13213         }
13214       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
13215         {
13216           tree qualifying_scope;
13217           tree unqualified_name;
13218           special_function_kind sfk;
13219           bool abstract_ok;
13220           bool pack_expansion_p = false;
13221           cp_token *declarator_id_start_token;
13222
13223           /* Parse a declarator-id */
13224           abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
13225           if (abstract_ok)
13226             {
13227               cp_parser_parse_tentatively (parser);
13228
13229               /* If we see an ellipsis, we should be looking at a
13230                  parameter pack. */
13231               if (token->type == CPP_ELLIPSIS)
13232                 {
13233                   /* Consume the `...' */
13234                   cp_lexer_consume_token (parser->lexer);
13235
13236                   pack_expansion_p = true;
13237                 }
13238             }
13239
13240           declarator_id_start_token = cp_lexer_peek_token (parser->lexer);
13241           unqualified_name
13242             = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
13243           qualifying_scope = parser->scope;
13244           if (abstract_ok)
13245             {
13246               bool okay = false;
13247
13248               if (!unqualified_name && pack_expansion_p)
13249                 {
13250                   /* Check whether an error occurred. */
13251                   okay = !cp_parser_error_occurred (parser);
13252
13253                   /* We already consumed the ellipsis to mark a
13254                      parameter pack, but we have no way to report it,
13255                      so abort the tentative parse. We will be exiting
13256                      immediately anyway. */
13257                   cp_parser_abort_tentative_parse (parser);
13258                 }
13259               else
13260                 okay = cp_parser_parse_definitely (parser);
13261
13262               if (!okay)
13263                 unqualified_name = error_mark_node;
13264               else if (unqualified_name
13265                        && (qualifying_scope
13266                            || (TREE_CODE (unqualified_name)
13267                                != IDENTIFIER_NODE)))
13268                 {
13269                   cp_parser_error (parser, "expected unqualified-id");
13270                   unqualified_name = error_mark_node;
13271                 }
13272             }
13273
13274           if (!unqualified_name)
13275             return NULL;
13276           if (unqualified_name == error_mark_node)
13277             {
13278               declarator = cp_error_declarator;
13279               pack_expansion_p = false;
13280               declarator->parameter_pack_p = false;
13281               break;
13282             }
13283
13284           if (qualifying_scope && at_namespace_scope_p ()
13285               && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
13286             {
13287               /* In the declaration of a member of a template class
13288                  outside of the class itself, the SCOPE will sometimes
13289                  be a TYPENAME_TYPE.  For example, given:
13290
13291                  template <typename T>
13292                  int S<T>::R::i = 3;
13293
13294                  the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
13295                  this context, we must resolve S<T>::R to an ordinary
13296                  type, rather than a typename type.
13297
13298                  The reason we normally avoid resolving TYPENAME_TYPEs
13299                  is that a specialization of `S' might render
13300                  `S<T>::R' not a type.  However, if `S' is
13301                  specialized, then this `i' will not be used, so there
13302                  is no harm in resolving the types here.  */
13303               tree type;
13304
13305               /* Resolve the TYPENAME_TYPE.  */
13306               type = resolve_typename_type (qualifying_scope,
13307                                             /*only_current_p=*/false);
13308               /* If that failed, the declarator is invalid.  */
13309               if (TREE_CODE (type) == TYPENAME_TYPE)
13310                 error ("%H%<%T::%E%> is not a type",
13311                        &declarator_id_start_token->location,
13312                        TYPE_CONTEXT (qualifying_scope),
13313                        TYPE_IDENTIFIER (qualifying_scope));
13314               qualifying_scope = type;
13315             }
13316
13317           sfk = sfk_none;
13318
13319           if (unqualified_name)
13320             {
13321               tree class_type;
13322
13323               if (qualifying_scope
13324                   && CLASS_TYPE_P (qualifying_scope))
13325                 class_type = qualifying_scope;
13326               else
13327                 class_type = current_class_type;
13328
13329               if (TREE_CODE (unqualified_name) == TYPE_DECL)
13330                 {
13331                   tree name_type = TREE_TYPE (unqualified_name);
13332                   if (class_type && same_type_p (name_type, class_type))
13333                     {
13334                       if (qualifying_scope
13335                           && CLASSTYPE_USE_TEMPLATE (name_type))
13336                         {
13337                           error ("%Hinvalid use of constructor as a template",
13338                                  &declarator_id_start_token->location);
13339                           inform (input_location, "use %<%T::%D%> instead of %<%T::%D%> to "
13340                                   "name the constructor in a qualified name",
13341                                   class_type,
13342                                   DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
13343                                   class_type, name_type);
13344                           declarator = cp_error_declarator;
13345                           break;
13346                         }
13347                       else
13348                         unqualified_name = constructor_name (class_type);
13349                     }
13350                   else
13351                     {
13352                       /* We do not attempt to print the declarator
13353                          here because we do not have enough
13354                          information about its original syntactic
13355                          form.  */
13356                       cp_parser_error (parser, "invalid declarator");
13357                       declarator = cp_error_declarator;
13358                       break;
13359                     }
13360                 }
13361
13362               if (class_type)
13363                 {
13364                   if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
13365                     sfk = sfk_destructor;
13366                   else if (IDENTIFIER_TYPENAME_P (unqualified_name))
13367                     sfk = sfk_conversion;
13368                   else if (/* There's no way to declare a constructor
13369                               for an anonymous type, even if the type
13370                               got a name for linkage purposes.  */
13371                            !TYPE_WAS_ANONYMOUS (class_type)
13372                            && constructor_name_p (unqualified_name,
13373                                                   class_type))
13374                     {
13375                       unqualified_name = constructor_name (class_type);
13376                       sfk = sfk_constructor;
13377                     }
13378
13379                   if (ctor_dtor_or_conv_p && sfk != sfk_none)
13380                     *ctor_dtor_or_conv_p = -1;
13381                 }
13382             }
13383           declarator = make_id_declarator (qualifying_scope,
13384                                            unqualified_name,
13385                                            sfk);
13386           declarator->id_loc = token->location;
13387           declarator->parameter_pack_p = pack_expansion_p;
13388
13389           if (pack_expansion_p)
13390             maybe_warn_variadic_templates ();
13391
13392         handle_declarator:;
13393           scope = get_scope_of_declarator (declarator);
13394           if (scope)
13395             /* Any names that appear after the declarator-id for a
13396                member are looked up in the containing scope.  */
13397             pushed_scope = push_scope (scope);
13398           parser->in_declarator_p = true;
13399           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
13400               || (declarator && declarator->kind == cdk_id))
13401             /* Default args are only allowed on function
13402                declarations.  */
13403             parser->default_arg_ok_p = saved_default_arg_ok_p;
13404           else
13405             parser->default_arg_ok_p = false;
13406
13407           first = false;
13408         }
13409       /* We're done.  */
13410       else
13411         break;
13412     }
13413
13414   /* For an abstract declarator, we might wind up with nothing at this
13415      point.  That's an error; the declarator is not optional.  */
13416   if (!declarator)
13417     cp_parser_error (parser, "expected declarator");
13418
13419   /* If we entered a scope, we must exit it now.  */
13420   if (pushed_scope)
13421     pop_scope (pushed_scope);
13422
13423   parser->default_arg_ok_p = saved_default_arg_ok_p;
13424   parser->in_declarator_p = saved_in_declarator_p;
13425
13426   return declarator;
13427 }
13428
13429 /* Parse a ptr-operator.
13430
13431    ptr-operator:
13432      * cv-qualifier-seq [opt]
13433      &
13434      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
13435
13436    GNU Extension:
13437
13438    ptr-operator:
13439      & cv-qualifier-seq [opt]
13440
13441    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
13442    Returns ADDR_EXPR if a reference was used, or NON_LVALUE_EXPR for
13443    an rvalue reference. In the case of a pointer-to-member, *TYPE is
13444    filled in with the TYPE containing the member.  *CV_QUALS is
13445    filled in with the cv-qualifier-seq, or TYPE_UNQUALIFIED, if there
13446    are no cv-qualifiers.  Returns ERROR_MARK if an error occurred.
13447    Note that the tree codes returned by this function have nothing
13448    to do with the types of trees that will be eventually be created
13449    to represent the pointer or reference type being parsed. They are
13450    just constants with suggestive names. */
13451 static enum tree_code
13452 cp_parser_ptr_operator (cp_parser* parser,
13453                         tree* type,
13454                         cp_cv_quals *cv_quals)
13455 {
13456   enum tree_code code = ERROR_MARK;
13457   cp_token *token;
13458
13459   /* Assume that it's not a pointer-to-member.  */
13460   *type = NULL_TREE;
13461   /* And that there are no cv-qualifiers.  */
13462   *cv_quals = TYPE_UNQUALIFIED;
13463
13464   /* Peek at the next token.  */
13465   token = cp_lexer_peek_token (parser->lexer);
13466
13467   /* If it's a `*', `&' or `&&' we have a pointer or reference.  */
13468   if (token->type == CPP_MULT)
13469     code = INDIRECT_REF;
13470   else if (token->type == CPP_AND)
13471     code = ADDR_EXPR;
13472   else if ((cxx_dialect != cxx98) &&
13473            token->type == CPP_AND_AND) /* C++0x only */
13474     code = NON_LVALUE_EXPR;
13475
13476   if (code != ERROR_MARK)
13477     {
13478       /* Consume the `*', `&' or `&&'.  */
13479       cp_lexer_consume_token (parser->lexer);
13480
13481       /* A `*' can be followed by a cv-qualifier-seq, and so can a
13482          `&', if we are allowing GNU extensions.  (The only qualifier
13483          that can legally appear after `&' is `restrict', but that is
13484          enforced during semantic analysis.  */
13485       if (code == INDIRECT_REF
13486           || cp_parser_allow_gnu_extensions_p (parser))
13487         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
13488     }
13489   else
13490     {
13491       /* Try the pointer-to-member case.  */
13492       cp_parser_parse_tentatively (parser);
13493       /* Look for the optional `::' operator.  */
13494       cp_parser_global_scope_opt (parser,
13495                                   /*current_scope_valid_p=*/false);
13496       /* Look for the nested-name specifier.  */
13497       token = cp_lexer_peek_token (parser->lexer);
13498       cp_parser_nested_name_specifier (parser,
13499                                        /*typename_keyword_p=*/false,
13500                                        /*check_dependency_p=*/true,
13501                                        /*type_p=*/false,
13502                                        /*is_declaration=*/false);
13503       /* If we found it, and the next token is a `*', then we are
13504          indeed looking at a pointer-to-member operator.  */
13505       if (!cp_parser_error_occurred (parser)
13506           && cp_parser_require (parser, CPP_MULT, "%<*%>"))
13507         {
13508           /* Indicate that the `*' operator was used.  */
13509           code = INDIRECT_REF;
13510
13511           if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
13512             error ("%H%qD is a namespace", &token->location, parser->scope);
13513           else
13514             {
13515               /* The type of which the member is a member is given by the
13516                  current SCOPE.  */
13517               *type = parser->scope;
13518               /* The next name will not be qualified.  */
13519               parser->scope = NULL_TREE;
13520               parser->qualifying_scope = NULL_TREE;
13521               parser->object_scope = NULL_TREE;
13522               /* Look for the optional cv-qualifier-seq.  */
13523               *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
13524             }
13525         }
13526       /* If that didn't work we don't have a ptr-operator.  */
13527       if (!cp_parser_parse_definitely (parser))
13528         cp_parser_error (parser, "expected ptr-operator");
13529     }
13530
13531   return code;
13532 }
13533
13534 /* Parse an (optional) cv-qualifier-seq.
13535
13536    cv-qualifier-seq:
13537      cv-qualifier cv-qualifier-seq [opt]
13538
13539    cv-qualifier:
13540      const
13541      volatile
13542
13543    GNU Extension:
13544
13545    cv-qualifier:
13546      __restrict__
13547
13548    Returns a bitmask representing the cv-qualifiers.  */
13549
13550 static cp_cv_quals
13551 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
13552 {
13553   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
13554
13555   while (true)
13556     {
13557       cp_token *token;
13558       cp_cv_quals cv_qualifier;
13559
13560       /* Peek at the next token.  */
13561       token = cp_lexer_peek_token (parser->lexer);
13562       /* See if it's a cv-qualifier.  */
13563       switch (token->keyword)
13564         {
13565         case RID_CONST:
13566           cv_qualifier = TYPE_QUAL_CONST;
13567           break;
13568
13569         case RID_VOLATILE:
13570           cv_qualifier = TYPE_QUAL_VOLATILE;
13571           break;
13572
13573         case RID_RESTRICT:
13574           cv_qualifier = TYPE_QUAL_RESTRICT;
13575           break;
13576
13577         default:
13578           cv_qualifier = TYPE_UNQUALIFIED;
13579           break;
13580         }
13581
13582       if (!cv_qualifier)
13583         break;
13584
13585       if (cv_quals & cv_qualifier)
13586         {
13587           error ("%Hduplicate cv-qualifier", &token->location);
13588           cp_lexer_purge_token (parser->lexer);
13589         }
13590       else
13591         {
13592           cp_lexer_consume_token (parser->lexer);
13593           cv_quals |= cv_qualifier;
13594         }
13595     }
13596
13597   return cv_quals;
13598 }
13599
13600 /* Parse a late-specified return type, if any.  This is not a separate
13601    non-terminal, but part of a function declarator, which looks like
13602
13603    -> type-id
13604
13605    Returns the type indicated by the type-id.  */
13606
13607 static tree
13608 cp_parser_late_return_type_opt (cp_parser* parser)
13609 {
13610   cp_token *token;
13611
13612   /* Peek at the next token.  */
13613   token = cp_lexer_peek_token (parser->lexer);
13614   /* A late-specified return type is indicated by an initial '->'. */
13615   if (token->type != CPP_DEREF)
13616     return NULL_TREE;
13617
13618   /* Consume the ->.  */
13619   cp_lexer_consume_token (parser->lexer);
13620
13621   return cp_parser_type_id (parser);
13622 }
13623
13624 /* Parse a declarator-id.
13625
13626    declarator-id:
13627      id-expression
13628      :: [opt] nested-name-specifier [opt] type-name
13629
13630    In the `id-expression' case, the value returned is as for
13631    cp_parser_id_expression if the id-expression was an unqualified-id.
13632    If the id-expression was a qualified-id, then a SCOPE_REF is
13633    returned.  The first operand is the scope (either a NAMESPACE_DECL
13634    or TREE_TYPE), but the second is still just a representation of an
13635    unqualified-id.  */
13636
13637 static tree
13638 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
13639 {
13640   tree id;
13641   /* The expression must be an id-expression.  Assume that qualified
13642      names are the names of types so that:
13643
13644        template <class T>
13645        int S<T>::R::i = 3;
13646
13647      will work; we must treat `S<T>::R' as the name of a type.
13648      Similarly, assume that qualified names are templates, where
13649      required, so that:
13650
13651        template <class T>
13652        int S<T>::R<T>::i = 3;
13653
13654      will work, too.  */
13655   id = cp_parser_id_expression (parser,
13656                                 /*template_keyword_p=*/false,
13657                                 /*check_dependency_p=*/false,
13658                                 /*template_p=*/NULL,
13659                                 /*declarator_p=*/true,
13660                                 optional_p);
13661   if (id && BASELINK_P (id))
13662     id = BASELINK_FUNCTIONS (id);
13663   return id;
13664 }
13665
13666 /* Parse a type-id.
13667
13668    type-id:
13669      type-specifier-seq abstract-declarator [opt]
13670
13671    Returns the TYPE specified.  */
13672
13673 static tree
13674 cp_parser_type_id (cp_parser* parser)
13675 {
13676   cp_decl_specifier_seq type_specifier_seq;
13677   cp_declarator *abstract_declarator;
13678
13679   /* Parse the type-specifier-seq.  */
13680   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
13681                                 &type_specifier_seq);
13682   if (type_specifier_seq.type == error_mark_node)
13683     return error_mark_node;
13684
13685   /* There might or might not be an abstract declarator.  */
13686   cp_parser_parse_tentatively (parser);
13687   /* Look for the declarator.  */
13688   abstract_declarator
13689     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
13690                             /*parenthesized_p=*/NULL,
13691                             /*member_p=*/false);
13692   /* Check to see if there really was a declarator.  */
13693   if (!cp_parser_parse_definitely (parser))
13694     abstract_declarator = NULL;
13695
13696   if (type_specifier_seq.type
13697       && type_uses_auto (type_specifier_seq.type))
13698     {
13699       error ("invalid use of %<auto%>");
13700       return error_mark_node;
13701     }
13702   
13703   return groktypename (&type_specifier_seq, abstract_declarator);
13704 }
13705
13706 /* Parse a type-specifier-seq.
13707
13708    type-specifier-seq:
13709      type-specifier type-specifier-seq [opt]
13710
13711    GNU extension:
13712
13713    type-specifier-seq:
13714      attributes type-specifier-seq [opt]
13715
13716    If IS_CONDITION is true, we are at the start of a "condition",
13717    e.g., we've just seen "if (".
13718
13719    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
13720
13721 static void
13722 cp_parser_type_specifier_seq (cp_parser* parser,
13723                               bool is_condition,
13724                               cp_decl_specifier_seq *type_specifier_seq)
13725 {
13726   bool seen_type_specifier = false;
13727   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
13728   cp_token *start_token = NULL;
13729
13730   /* Clear the TYPE_SPECIFIER_SEQ.  */
13731   clear_decl_specs (type_specifier_seq);
13732
13733   /* Parse the type-specifiers and attributes.  */
13734   while (true)
13735     {
13736       tree type_specifier;
13737       bool is_cv_qualifier;
13738
13739       /* Check for attributes first.  */
13740       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
13741         {
13742           type_specifier_seq->attributes =
13743             chainon (type_specifier_seq->attributes,
13744                      cp_parser_attributes_opt (parser));
13745           continue;
13746         }
13747
13748       /* record the token of the beginning of the type specifier seq,
13749          for error reporting purposes*/
13750      if (!start_token)
13751        start_token = cp_lexer_peek_token (parser->lexer);
13752
13753       /* Look for the type-specifier.  */
13754       type_specifier = cp_parser_type_specifier (parser,
13755                                                  flags,
13756                                                  type_specifier_seq,
13757                                                  /*is_declaration=*/false,
13758                                                  NULL,
13759                                                  &is_cv_qualifier);
13760       if (!type_specifier)
13761         {
13762           /* If the first type-specifier could not be found, this is not a
13763              type-specifier-seq at all.  */
13764           if (!seen_type_specifier)
13765             {
13766               cp_parser_error (parser, "expected type-specifier");
13767               type_specifier_seq->type = error_mark_node;
13768               return;
13769             }
13770           /* If subsequent type-specifiers could not be found, the
13771              type-specifier-seq is complete.  */
13772           break;
13773         }
13774
13775       seen_type_specifier = true;
13776       /* The standard says that a condition can be:
13777
13778             type-specifier-seq declarator = assignment-expression
13779
13780          However, given:
13781
13782            struct S {};
13783            if (int S = ...)
13784
13785          we should treat the "S" as a declarator, not as a
13786          type-specifier.  The standard doesn't say that explicitly for
13787          type-specifier-seq, but it does say that for
13788          decl-specifier-seq in an ordinary declaration.  Perhaps it
13789          would be clearer just to allow a decl-specifier-seq here, and
13790          then add a semantic restriction that if any decl-specifiers
13791          that are not type-specifiers appear, the program is invalid.  */
13792       if (is_condition && !is_cv_qualifier)
13793         flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
13794     }
13795
13796   cp_parser_check_decl_spec (type_specifier_seq, start_token->location);
13797 }
13798
13799 /* Parse a parameter-declaration-clause.
13800
13801    parameter-declaration-clause:
13802      parameter-declaration-list [opt] ... [opt]
13803      parameter-declaration-list , ...
13804
13805    Returns a representation for the parameter declarations.  A return
13806    value of NULL indicates a parameter-declaration-clause consisting
13807    only of an ellipsis.  */
13808
13809 static tree
13810 cp_parser_parameter_declaration_clause (cp_parser* parser)
13811 {
13812   tree parameters;
13813   cp_token *token;
13814   bool ellipsis_p;
13815   bool is_error;
13816
13817   /* Peek at the next token.  */
13818   token = cp_lexer_peek_token (parser->lexer);
13819   /* Check for trivial parameter-declaration-clauses.  */
13820   if (token->type == CPP_ELLIPSIS)
13821     {
13822       /* Consume the `...' token.  */
13823       cp_lexer_consume_token (parser->lexer);
13824       return NULL_TREE;
13825     }
13826   else if (token->type == CPP_CLOSE_PAREN)
13827     /* There are no parameters.  */
13828     {
13829 #ifndef NO_IMPLICIT_EXTERN_C
13830       if (in_system_header && current_class_type == NULL
13831           && current_lang_name == lang_name_c)
13832         return NULL_TREE;
13833       else
13834 #endif
13835         return void_list_node;
13836     }
13837   /* Check for `(void)', too, which is a special case.  */
13838   else if (token->keyword == RID_VOID
13839            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
13840                == CPP_CLOSE_PAREN))
13841     {
13842       /* Consume the `void' token.  */
13843       cp_lexer_consume_token (parser->lexer);
13844       /* There are no parameters.  */
13845       return void_list_node;
13846     }
13847
13848   /* Parse the parameter-declaration-list.  */
13849   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
13850   /* If a parse error occurred while parsing the
13851      parameter-declaration-list, then the entire
13852      parameter-declaration-clause is erroneous.  */
13853   if (is_error)
13854     return NULL;
13855
13856   /* Peek at the next token.  */
13857   token = cp_lexer_peek_token (parser->lexer);
13858   /* If it's a `,', the clause should terminate with an ellipsis.  */
13859   if (token->type == CPP_COMMA)
13860     {
13861       /* Consume the `,'.  */
13862       cp_lexer_consume_token (parser->lexer);
13863       /* Expect an ellipsis.  */
13864       ellipsis_p
13865         = (cp_parser_require (parser, CPP_ELLIPSIS, "%<...%>") != NULL);
13866     }
13867   /* It might also be `...' if the optional trailing `,' was
13868      omitted.  */
13869   else if (token->type == CPP_ELLIPSIS)
13870     {
13871       /* Consume the `...' token.  */
13872       cp_lexer_consume_token (parser->lexer);
13873       /* And remember that we saw it.  */
13874       ellipsis_p = true;
13875     }
13876   else
13877     ellipsis_p = false;
13878
13879   /* Finish the parameter list.  */
13880   if (!ellipsis_p)
13881     parameters = chainon (parameters, void_list_node);
13882
13883   return parameters;
13884 }
13885
13886 /* Parse a parameter-declaration-list.
13887
13888    parameter-declaration-list:
13889      parameter-declaration
13890      parameter-declaration-list , parameter-declaration
13891
13892    Returns a representation of the parameter-declaration-list, as for
13893    cp_parser_parameter_declaration_clause.  However, the
13894    `void_list_node' is never appended to the list.  Upon return,
13895    *IS_ERROR will be true iff an error occurred.  */
13896
13897 static tree
13898 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
13899 {
13900   tree parameters = NULL_TREE;
13901   tree *tail = &parameters; 
13902   bool saved_in_unbraced_linkage_specification_p;
13903
13904   /* Assume all will go well.  */
13905   *is_error = false;
13906   /* The special considerations that apply to a function within an
13907      unbraced linkage specifications do not apply to the parameters
13908      to the function.  */
13909   saved_in_unbraced_linkage_specification_p 
13910     = parser->in_unbraced_linkage_specification_p;
13911   parser->in_unbraced_linkage_specification_p = false;
13912
13913   /* Look for more parameters.  */
13914   while (true)
13915     {
13916       cp_parameter_declarator *parameter;
13917       tree decl = error_mark_node;
13918       bool parenthesized_p;
13919       /* Parse the parameter.  */
13920       parameter
13921         = cp_parser_parameter_declaration (parser,
13922                                            /*template_parm_p=*/false,
13923                                            &parenthesized_p);
13924
13925       /* We don't know yet if the enclosing context is deprecated, so wait
13926          and warn in grokparms if appropriate.  */
13927       deprecated_state = DEPRECATED_SUPPRESS;
13928
13929       if (parameter)
13930         decl = grokdeclarator (parameter->declarator,
13931                                &parameter->decl_specifiers,
13932                                PARM,
13933                                parameter->default_argument != NULL_TREE,
13934                                &parameter->decl_specifiers.attributes);
13935
13936       deprecated_state = DEPRECATED_NORMAL;
13937
13938       /* If a parse error occurred parsing the parameter declaration,
13939          then the entire parameter-declaration-list is erroneous.  */
13940       if (decl == error_mark_node)
13941         {
13942           *is_error = true;
13943           parameters = error_mark_node;
13944           break;
13945         }
13946
13947       if (parameter->decl_specifiers.attributes)
13948         cplus_decl_attributes (&decl,
13949                                parameter->decl_specifiers.attributes,
13950                                0);
13951       if (DECL_NAME (decl))
13952         decl = pushdecl (decl);
13953
13954       /* Add the new parameter to the list.  */
13955       *tail = build_tree_list (parameter->default_argument, decl);
13956       tail = &TREE_CHAIN (*tail);
13957
13958       /* Peek at the next token.  */
13959       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
13960           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
13961           /* These are for Objective-C++ */
13962           || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
13963           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
13964         /* The parameter-declaration-list is complete.  */
13965         break;
13966       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
13967         {
13968           cp_token *token;
13969
13970           /* Peek at the next token.  */
13971           token = cp_lexer_peek_nth_token (parser->lexer, 2);
13972           /* If it's an ellipsis, then the list is complete.  */
13973           if (token->type == CPP_ELLIPSIS)
13974             break;
13975           /* Otherwise, there must be more parameters.  Consume the
13976              `,'.  */
13977           cp_lexer_consume_token (parser->lexer);
13978           /* When parsing something like:
13979
13980                 int i(float f, double d)
13981
13982              we can tell after seeing the declaration for "f" that we
13983              are not looking at an initialization of a variable "i",
13984              but rather at the declaration of a function "i".
13985
13986              Due to the fact that the parsing of template arguments
13987              (as specified to a template-id) requires backtracking we
13988              cannot use this technique when inside a template argument
13989              list.  */
13990           if (!parser->in_template_argument_list_p
13991               && !parser->in_type_id_in_expr_p
13992               && cp_parser_uncommitted_to_tentative_parse_p (parser)
13993               /* However, a parameter-declaration of the form
13994                  "foat(f)" (which is a valid declaration of a
13995                  parameter "f") can also be interpreted as an
13996                  expression (the conversion of "f" to "float").  */
13997               && !parenthesized_p)
13998             cp_parser_commit_to_tentative_parse (parser);
13999         }
14000       else
14001         {
14002           cp_parser_error (parser, "expected %<,%> or %<...%>");
14003           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
14004             cp_parser_skip_to_closing_parenthesis (parser,
14005                                                    /*recovering=*/true,
14006                                                    /*or_comma=*/false,
14007                                                    /*consume_paren=*/false);
14008           break;
14009         }
14010     }
14011
14012   parser->in_unbraced_linkage_specification_p
14013     = saved_in_unbraced_linkage_specification_p;
14014
14015   return parameters;
14016 }
14017
14018 /* Parse a parameter declaration.
14019
14020    parameter-declaration:
14021      decl-specifier-seq ... [opt] declarator
14022      decl-specifier-seq declarator = assignment-expression
14023      decl-specifier-seq ... [opt] abstract-declarator [opt]
14024      decl-specifier-seq abstract-declarator [opt] = assignment-expression
14025
14026    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
14027    declares a template parameter.  (In that case, a non-nested `>'
14028    token encountered during the parsing of the assignment-expression
14029    is not interpreted as a greater-than operator.)
14030
14031    Returns a representation of the parameter, or NULL if an error
14032    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
14033    true iff the declarator is of the form "(p)".  */
14034
14035 static cp_parameter_declarator *
14036 cp_parser_parameter_declaration (cp_parser *parser,
14037                                  bool template_parm_p,
14038                                  bool *parenthesized_p)
14039 {
14040   int declares_class_or_enum;
14041   bool greater_than_is_operator_p;
14042   cp_decl_specifier_seq decl_specifiers;
14043   cp_declarator *declarator;
14044   tree default_argument;
14045   cp_token *token = NULL, *declarator_token_start = NULL;
14046   const char *saved_message;
14047
14048   /* In a template parameter, `>' is not an operator.
14049
14050      [temp.param]
14051
14052      When parsing a default template-argument for a non-type
14053      template-parameter, the first non-nested `>' is taken as the end
14054      of the template parameter-list rather than a greater-than
14055      operator.  */
14056   greater_than_is_operator_p = !template_parm_p;
14057
14058   /* Type definitions may not appear in parameter types.  */
14059   saved_message = parser->type_definition_forbidden_message;
14060   parser->type_definition_forbidden_message
14061     = "types may not be defined in parameter types";
14062
14063   /* Parse the declaration-specifiers.  */
14064   cp_parser_decl_specifier_seq (parser,
14065                                 CP_PARSER_FLAGS_NONE,
14066                                 &decl_specifiers,
14067                                 &declares_class_or_enum);
14068   /* If an error occurred, there's no reason to attempt to parse the
14069      rest of the declaration.  */
14070   if (cp_parser_error_occurred (parser))
14071     {
14072       parser->type_definition_forbidden_message = saved_message;
14073       return NULL;
14074     }
14075
14076   /* Peek at the next token.  */
14077   token = cp_lexer_peek_token (parser->lexer);
14078
14079   /* If the next token is a `)', `,', `=', `>', or `...', then there
14080      is no declarator. However, when variadic templates are enabled,
14081      there may be a declarator following `...'.  */
14082   if (token->type == CPP_CLOSE_PAREN
14083       || token->type == CPP_COMMA
14084       || token->type == CPP_EQ
14085       || token->type == CPP_GREATER)
14086     {
14087       declarator = NULL;
14088       if (parenthesized_p)
14089         *parenthesized_p = false;
14090     }
14091   /* Otherwise, there should be a declarator.  */
14092   else
14093     {
14094       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
14095       parser->default_arg_ok_p = false;
14096
14097       /* After seeing a decl-specifier-seq, if the next token is not a
14098          "(", there is no possibility that the code is a valid
14099          expression.  Therefore, if parsing tentatively, we commit at
14100          this point.  */
14101       if (!parser->in_template_argument_list_p
14102           /* In an expression context, having seen:
14103
14104                (int((char ...
14105
14106              we cannot be sure whether we are looking at a
14107              function-type (taking a "char" as a parameter) or a cast
14108              of some object of type "char" to "int".  */
14109           && !parser->in_type_id_in_expr_p
14110           && cp_parser_uncommitted_to_tentative_parse_p (parser)
14111           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
14112         cp_parser_commit_to_tentative_parse (parser);
14113       /* Parse the declarator.  */
14114       declarator_token_start = token;
14115       declarator = cp_parser_declarator (parser,
14116                                          CP_PARSER_DECLARATOR_EITHER,
14117                                          /*ctor_dtor_or_conv_p=*/NULL,
14118                                          parenthesized_p,
14119                                          /*member_p=*/false);
14120       parser->default_arg_ok_p = saved_default_arg_ok_p;
14121       /* After the declarator, allow more attributes.  */
14122       decl_specifiers.attributes
14123         = chainon (decl_specifiers.attributes,
14124                    cp_parser_attributes_opt (parser));
14125     }
14126
14127   /* If the next token is an ellipsis, and we have not seen a
14128      declarator name, and the type of the declarator contains parameter
14129      packs but it is not a TYPE_PACK_EXPANSION, then we actually have
14130      a parameter pack expansion expression. Otherwise, leave the
14131      ellipsis for a C-style variadic function. */
14132   token = cp_lexer_peek_token (parser->lexer);
14133   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
14134     {
14135       tree type = decl_specifiers.type;
14136
14137       if (type && DECL_P (type))
14138         type = TREE_TYPE (type);
14139
14140       if (type
14141           && TREE_CODE (type) != TYPE_PACK_EXPANSION
14142           && declarator_can_be_parameter_pack (declarator)
14143           && (!declarator || !declarator->parameter_pack_p)
14144           && uses_parameter_packs (type))
14145         {
14146           /* Consume the `...'. */
14147           cp_lexer_consume_token (parser->lexer);
14148           maybe_warn_variadic_templates ();
14149           
14150           /* Build a pack expansion type */
14151           if (declarator)
14152             declarator->parameter_pack_p = true;
14153           else
14154             decl_specifiers.type = make_pack_expansion (type);
14155         }
14156     }
14157
14158   /* The restriction on defining new types applies only to the type
14159      of the parameter, not to the default argument.  */
14160   parser->type_definition_forbidden_message = saved_message;
14161
14162   /* If the next token is `=', then process a default argument.  */
14163   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
14164     {
14165       /* Consume the `='.  */
14166       cp_lexer_consume_token (parser->lexer);
14167
14168       /* If we are defining a class, then the tokens that make up the
14169          default argument must be saved and processed later.  */
14170       if (!template_parm_p && at_class_scope_p ()
14171           && TYPE_BEING_DEFINED (current_class_type))
14172         {
14173           unsigned depth = 0;
14174           int maybe_template_id = 0;
14175           cp_token *first_token;
14176           cp_token *token;
14177
14178           /* Add tokens until we have processed the entire default
14179              argument.  We add the range [first_token, token).  */
14180           first_token = cp_lexer_peek_token (parser->lexer);
14181           while (true)
14182             {
14183               bool done = false;
14184
14185               /* Peek at the next token.  */
14186               token = cp_lexer_peek_token (parser->lexer);
14187               /* What we do depends on what token we have.  */
14188               switch (token->type)
14189                 {
14190                   /* In valid code, a default argument must be
14191                      immediately followed by a `,' `)', or `...'.  */
14192                 case CPP_COMMA:
14193                   if (depth == 0 && maybe_template_id)
14194                     {
14195                       /* If we've seen a '<', we might be in a
14196                          template-argument-list.  Until Core issue 325 is
14197                          resolved, we don't know how this situation ought
14198                          to be handled, so try to DTRT.  We check whether
14199                          what comes after the comma is a valid parameter
14200                          declaration list.  If it is, then the comma ends
14201                          the default argument; otherwise the default
14202                          argument continues.  */
14203                       bool error = false;
14204
14205                       /* Set ITALP so cp_parser_parameter_declaration_list
14206                          doesn't decide to commit to this parse.  */
14207                       bool saved_italp = parser->in_template_argument_list_p;
14208                       parser->in_template_argument_list_p = true;
14209
14210                       cp_parser_parse_tentatively (parser);
14211                       cp_lexer_consume_token (parser->lexer);
14212                       cp_parser_parameter_declaration_list (parser, &error);
14213                       if (!cp_parser_error_occurred (parser) && !error)
14214                         done = true;
14215                       cp_parser_abort_tentative_parse (parser);
14216
14217                       parser->in_template_argument_list_p = saved_italp;
14218                       break;
14219                     }
14220                 case CPP_CLOSE_PAREN:
14221                 case CPP_ELLIPSIS:
14222                   /* If we run into a non-nested `;', `}', or `]',
14223                      then the code is invalid -- but the default
14224                      argument is certainly over.  */
14225                 case CPP_SEMICOLON:
14226                 case CPP_CLOSE_BRACE:
14227                 case CPP_CLOSE_SQUARE:
14228                   if (depth == 0)
14229                     done = true;
14230                   /* Update DEPTH, if necessary.  */
14231                   else if (token->type == CPP_CLOSE_PAREN
14232                            || token->type == CPP_CLOSE_BRACE
14233                            || token->type == CPP_CLOSE_SQUARE)
14234                     --depth;
14235                   break;
14236
14237                 case CPP_OPEN_PAREN:
14238                 case CPP_OPEN_SQUARE:
14239                 case CPP_OPEN_BRACE:
14240                   ++depth;
14241                   break;
14242
14243                 case CPP_LESS:
14244                   if (depth == 0)
14245                     /* This might be the comparison operator, or it might
14246                        start a template argument list.  */
14247                     ++maybe_template_id;
14248                   break;
14249
14250                 case CPP_RSHIFT:
14251                   if (cxx_dialect == cxx98)
14252                     break;
14253                   /* Fall through for C++0x, which treats the `>>'
14254                      operator like two `>' tokens in certain
14255                      cases.  */
14256
14257                 case CPP_GREATER:
14258                   if (depth == 0)
14259                     {
14260                       /* This might be an operator, or it might close a
14261                          template argument list.  But if a previous '<'
14262                          started a template argument list, this will have
14263                          closed it, so we can't be in one anymore.  */
14264                       maybe_template_id -= 1 + (token->type == CPP_RSHIFT);
14265                       if (maybe_template_id < 0)
14266                         maybe_template_id = 0;
14267                     }
14268                   break;
14269
14270                   /* If we run out of tokens, issue an error message.  */
14271                 case CPP_EOF:
14272                 case CPP_PRAGMA_EOL:
14273                   error ("%Hfile ends in default argument", &token->location);
14274                   done = true;
14275                   break;
14276
14277                 case CPP_NAME:
14278                 case CPP_SCOPE:
14279                   /* In these cases, we should look for template-ids.
14280                      For example, if the default argument is
14281                      `X<int, double>()', we need to do name lookup to
14282                      figure out whether or not `X' is a template; if
14283                      so, the `,' does not end the default argument.
14284
14285                      That is not yet done.  */
14286                   break;
14287
14288                 default:
14289                   break;
14290                 }
14291
14292               /* If we've reached the end, stop.  */
14293               if (done)
14294                 break;
14295
14296               /* Add the token to the token block.  */
14297               token = cp_lexer_consume_token (parser->lexer);
14298             }
14299
14300           /* Create a DEFAULT_ARG to represent the unparsed default
14301              argument.  */
14302           default_argument = make_node (DEFAULT_ARG);
14303           DEFARG_TOKENS (default_argument)
14304             = cp_token_cache_new (first_token, token);
14305           DEFARG_INSTANTIATIONS (default_argument) = NULL;
14306         }
14307       /* Outside of a class definition, we can just parse the
14308          assignment-expression.  */
14309       else
14310         {
14311           token = cp_lexer_peek_token (parser->lexer);
14312           default_argument 
14313             = cp_parser_default_argument (parser, template_parm_p);
14314         }
14315
14316       if (!parser->default_arg_ok_p)
14317         {
14318           if (flag_permissive)
14319             warning (0, "deprecated use of default argument for parameter of non-function");
14320           else
14321             {
14322               error ("%Hdefault arguments are only "
14323                      "permitted for function parameters",
14324                      &token->location);
14325               default_argument = NULL_TREE;
14326             }
14327         }
14328       else if ((declarator && declarator->parameter_pack_p)
14329                || (decl_specifiers.type
14330                    && PACK_EXPANSION_P (decl_specifiers.type)))
14331         {
14332           const char* kind = template_parm_p? "template " : "";
14333           
14334           /* Find the name of the parameter pack.  */     
14335           cp_declarator *id_declarator = declarator;
14336           while (id_declarator && id_declarator->kind != cdk_id)
14337             id_declarator = id_declarator->declarator;
14338           
14339           if (id_declarator && id_declarator->kind == cdk_id)
14340             error ("%H%sparameter pack %qD cannot have a default argument",
14341                    &declarator_token_start->location,
14342                    kind, id_declarator->u.id.unqualified_name);
14343           else
14344             error ("%H%sparameter pack cannot have a default argument",
14345                    &declarator_token_start->location, kind);
14346           
14347           default_argument = NULL_TREE;
14348         }
14349     }
14350   else
14351     default_argument = NULL_TREE;
14352
14353   return make_parameter_declarator (&decl_specifiers,
14354                                     declarator,
14355                                     default_argument);
14356 }
14357
14358 /* Parse a default argument and return it.
14359
14360    TEMPLATE_PARM_P is true if this is a default argument for a
14361    non-type template parameter.  */
14362 static tree
14363 cp_parser_default_argument (cp_parser *parser, bool template_parm_p)
14364 {
14365   tree default_argument = NULL_TREE;
14366   bool saved_greater_than_is_operator_p;
14367   bool saved_local_variables_forbidden_p;
14368
14369   /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
14370      set correctly.  */
14371   saved_greater_than_is_operator_p = parser->greater_than_is_operator_p;
14372   parser->greater_than_is_operator_p = !template_parm_p;
14373   /* Local variable names (and the `this' keyword) may not
14374      appear in a default argument.  */
14375   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
14376   parser->local_variables_forbidden_p = true;
14377   /* The default argument expression may cause implicitly
14378      defined member functions to be synthesized, which will
14379      result in garbage collection.  We must treat this
14380      situation as if we were within the body of function so as
14381      to avoid collecting live data on the stack.  */
14382   ++function_depth;
14383   /* Parse the assignment-expression.  */
14384   if (template_parm_p)
14385     push_deferring_access_checks (dk_no_deferred);
14386   default_argument
14387     = cp_parser_assignment_expression (parser, /*cast_p=*/false);
14388   if (template_parm_p)
14389     pop_deferring_access_checks ();
14390   /* Restore saved state.  */
14391   --function_depth;
14392   parser->greater_than_is_operator_p = saved_greater_than_is_operator_p;
14393   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
14394
14395   return default_argument;
14396 }
14397
14398 /* Parse a function-body.
14399
14400    function-body:
14401      compound_statement  */
14402
14403 static void
14404 cp_parser_function_body (cp_parser *parser)
14405 {
14406   cp_parser_compound_statement (parser, NULL, false);
14407 }
14408
14409 /* Parse a ctor-initializer-opt followed by a function-body.  Return
14410    true if a ctor-initializer was present.  */
14411
14412 static bool
14413 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
14414 {
14415   tree body;
14416   bool ctor_initializer_p;
14417
14418   /* Begin the function body.  */
14419   body = begin_function_body ();
14420   /* Parse the optional ctor-initializer.  */
14421   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
14422   /* Parse the function-body.  */
14423   cp_parser_function_body (parser);
14424   /* Finish the function body.  */
14425   finish_function_body (body);
14426
14427   return ctor_initializer_p;
14428 }
14429
14430 /* Parse an initializer.
14431
14432    initializer:
14433      = initializer-clause
14434      ( expression-list )
14435
14436    Returns an expression representing the initializer.  If no
14437    initializer is present, NULL_TREE is returned.
14438
14439    *IS_DIRECT_INIT is set to FALSE if the `= initializer-clause'
14440    production is used, and TRUE otherwise.  *IS_DIRECT_INIT is
14441    set to TRUE if there is no initializer present.  If there is an
14442    initializer, and it is not a constant-expression, *NON_CONSTANT_P
14443    is set to true; otherwise it is set to false.  */
14444
14445 static tree
14446 cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
14447                        bool* non_constant_p)
14448 {
14449   cp_token *token;
14450   tree init;
14451
14452   /* Peek at the next token.  */
14453   token = cp_lexer_peek_token (parser->lexer);
14454
14455   /* Let our caller know whether or not this initializer was
14456      parenthesized.  */
14457   *is_direct_init = (token->type != CPP_EQ);
14458   /* Assume that the initializer is constant.  */
14459   *non_constant_p = false;
14460
14461   if (token->type == CPP_EQ)
14462     {
14463       /* Consume the `='.  */
14464       cp_lexer_consume_token (parser->lexer);
14465       /* Parse the initializer-clause.  */
14466       init = cp_parser_initializer_clause (parser, non_constant_p);
14467     }
14468   else if (token->type == CPP_OPEN_PAREN)
14469     init = cp_parser_parenthesized_expression_list (parser, false,
14470                                                     /*cast_p=*/false,
14471                                                     /*allow_expansion_p=*/true,
14472                                                     non_constant_p);
14473   else if (token->type == CPP_OPEN_BRACE)
14474     {
14475       maybe_warn_cpp0x ("extended initializer lists");
14476       init = cp_parser_braced_list (parser, non_constant_p);
14477       CONSTRUCTOR_IS_DIRECT_INIT (init) = 1;
14478     }
14479   else
14480     {
14481       /* Anything else is an error.  */
14482       cp_parser_error (parser, "expected initializer");
14483       init = error_mark_node;
14484     }
14485
14486   return init;
14487 }
14488
14489 /* Parse an initializer-clause.
14490
14491    initializer-clause:
14492      assignment-expression
14493      braced-init-list
14494
14495    Returns an expression representing the initializer.
14496
14497    If the `assignment-expression' production is used the value
14498    returned is simply a representation for the expression.
14499
14500    Otherwise, calls cp_parser_braced_list.  */
14501
14502 static tree
14503 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
14504 {
14505   tree initializer;
14506
14507   /* Assume the expression is constant.  */
14508   *non_constant_p = false;
14509
14510   /* If it is not a `{', then we are looking at an
14511      assignment-expression.  */
14512   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
14513     {
14514       initializer
14515         = cp_parser_constant_expression (parser,
14516                                         /*allow_non_constant_p=*/true,
14517                                         non_constant_p);
14518       if (!*non_constant_p)
14519         initializer = fold_non_dependent_expr (initializer);
14520     }
14521   else
14522     initializer = cp_parser_braced_list (parser, non_constant_p);
14523
14524   return initializer;
14525 }
14526
14527 /* Parse a brace-enclosed initializer list.
14528
14529    braced-init-list:
14530      { initializer-list , [opt] }
14531      { }
14532
14533    Returns a CONSTRUCTOR.  The CONSTRUCTOR_ELTS will be
14534    the elements of the initializer-list (or NULL, if the last
14535    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
14536    NULL_TREE.  There is no way to detect whether or not the optional
14537    trailing `,' was provided.  NON_CONSTANT_P is as for
14538    cp_parser_initializer.  */     
14539
14540 static tree
14541 cp_parser_braced_list (cp_parser* parser, bool* non_constant_p)
14542 {
14543   tree initializer;
14544
14545   /* Consume the `{' token.  */
14546   cp_lexer_consume_token (parser->lexer);
14547   /* Create a CONSTRUCTOR to represent the braced-initializer.  */
14548   initializer = make_node (CONSTRUCTOR);
14549   /* If it's not a `}', then there is a non-trivial initializer.  */
14550   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
14551     {
14552       /* Parse the initializer list.  */
14553       CONSTRUCTOR_ELTS (initializer)
14554         = cp_parser_initializer_list (parser, non_constant_p);
14555       /* A trailing `,' token is allowed.  */
14556       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
14557         cp_lexer_consume_token (parser->lexer);
14558     }
14559   /* Now, there should be a trailing `}'.  */
14560   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
14561   TREE_TYPE (initializer) = init_list_type_node;
14562   return initializer;
14563 }
14564
14565 /* Parse an initializer-list.
14566
14567    initializer-list:
14568      initializer-clause ... [opt]
14569      initializer-list , initializer-clause ... [opt]
14570
14571    GNU Extension:
14572
14573    initializer-list:
14574      identifier : initializer-clause
14575      initializer-list, identifier : initializer-clause
14576
14577    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
14578    for the initializer.  If the INDEX of the elt is non-NULL, it is the
14579    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
14580    as for cp_parser_initializer.  */
14581
14582 static VEC(constructor_elt,gc) *
14583 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
14584 {
14585   VEC(constructor_elt,gc) *v = NULL;
14586
14587   /* Assume all of the expressions are constant.  */
14588   *non_constant_p = false;
14589
14590   /* Parse the rest of the list.  */
14591   while (true)
14592     {
14593       cp_token *token;
14594       tree identifier;
14595       tree initializer;
14596       bool clause_non_constant_p;
14597
14598       /* If the next token is an identifier and the following one is a
14599          colon, we are looking at the GNU designated-initializer
14600          syntax.  */
14601       if (cp_parser_allow_gnu_extensions_p (parser)
14602           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
14603           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
14604         {
14605           /* Warn the user that they are using an extension.  */
14606           pedwarn (input_location, OPT_pedantic, 
14607                    "ISO C++ does not allow designated initializers");
14608           /* Consume the identifier.  */
14609           identifier = cp_lexer_consume_token (parser->lexer)->u.value;
14610           /* Consume the `:'.  */
14611           cp_lexer_consume_token (parser->lexer);
14612         }
14613       else
14614         identifier = NULL_TREE;
14615
14616       /* Parse the initializer.  */
14617       initializer = cp_parser_initializer_clause (parser,
14618                                                   &clause_non_constant_p);
14619       /* If any clause is non-constant, so is the entire initializer.  */
14620       if (clause_non_constant_p)
14621         *non_constant_p = true;
14622
14623       /* If we have an ellipsis, this is an initializer pack
14624          expansion.  */
14625       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
14626         {
14627           /* Consume the `...'.  */
14628           cp_lexer_consume_token (parser->lexer);
14629
14630           /* Turn the initializer into an initializer expansion.  */
14631           initializer = make_pack_expansion (initializer);
14632         }
14633
14634       /* Add it to the vector.  */
14635       CONSTRUCTOR_APPEND_ELT(v, identifier, initializer);
14636
14637       /* If the next token is not a comma, we have reached the end of
14638          the list.  */
14639       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14640         break;
14641
14642       /* Peek at the next token.  */
14643       token = cp_lexer_peek_nth_token (parser->lexer, 2);
14644       /* If the next token is a `}', then we're still done.  An
14645          initializer-clause can have a trailing `,' after the
14646          initializer-list and before the closing `}'.  */
14647       if (token->type == CPP_CLOSE_BRACE)
14648         break;
14649
14650       /* Consume the `,' token.  */
14651       cp_lexer_consume_token (parser->lexer);
14652     }
14653
14654   return v;
14655 }
14656
14657 /* Classes [gram.class] */
14658
14659 /* Parse a class-name.
14660
14661    class-name:
14662      identifier
14663      template-id
14664
14665    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
14666    to indicate that names looked up in dependent types should be
14667    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
14668    keyword has been used to indicate that the name that appears next
14669    is a template.  TAG_TYPE indicates the explicit tag given before
14670    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
14671    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
14672    is the class being defined in a class-head.
14673
14674    Returns the TYPE_DECL representing the class.  */
14675
14676 static tree
14677 cp_parser_class_name (cp_parser *parser,
14678                       bool typename_keyword_p,
14679                       bool template_keyword_p,
14680                       enum tag_types tag_type,
14681                       bool check_dependency_p,
14682                       bool class_head_p,
14683                       bool is_declaration)
14684 {
14685   tree decl;
14686   tree scope;
14687   bool typename_p;
14688   cp_token *token;
14689
14690   /* All class-names start with an identifier.  */
14691   token = cp_lexer_peek_token (parser->lexer);
14692   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
14693     {
14694       cp_parser_error (parser, "expected class-name");
14695       return error_mark_node;
14696     }
14697
14698   /* PARSER->SCOPE can be cleared when parsing the template-arguments
14699      to a template-id, so we save it here.  */
14700   scope = parser->scope;
14701   if (scope == error_mark_node)
14702     return error_mark_node;
14703
14704   /* Any name names a type if we're following the `typename' keyword
14705      in a qualified name where the enclosing scope is type-dependent.  */
14706   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
14707                 && dependent_type_p (scope));
14708   /* Handle the common case (an identifier, but not a template-id)
14709      efficiently.  */
14710   if (token->type == CPP_NAME
14711       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
14712     {
14713       cp_token *identifier_token;
14714       tree identifier;
14715       bool ambiguous_p;
14716
14717       /* Look for the identifier.  */
14718       identifier_token = cp_lexer_peek_token (parser->lexer);
14719       ambiguous_p = identifier_token->ambiguous_p;
14720       identifier = cp_parser_identifier (parser);
14721       /* If the next token isn't an identifier, we are certainly not
14722          looking at a class-name.  */
14723       if (identifier == error_mark_node)
14724         decl = error_mark_node;
14725       /* If we know this is a type-name, there's no need to look it
14726          up.  */
14727       else if (typename_p)
14728         decl = identifier;
14729       else
14730         {
14731           tree ambiguous_decls;
14732           /* If we already know that this lookup is ambiguous, then
14733              we've already issued an error message; there's no reason
14734              to check again.  */
14735           if (ambiguous_p)
14736             {
14737               cp_parser_simulate_error (parser);
14738               return error_mark_node;
14739             }
14740           /* If the next token is a `::', then the name must be a type
14741              name.
14742
14743              [basic.lookup.qual]
14744
14745              During the lookup for a name preceding the :: scope
14746              resolution operator, object, function, and enumerator
14747              names are ignored.  */
14748           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
14749             tag_type = typename_type;
14750           /* Look up the name.  */
14751           decl = cp_parser_lookup_name (parser, identifier,
14752                                         tag_type,
14753                                         /*is_template=*/false,
14754                                         /*is_namespace=*/false,
14755                                         check_dependency_p,
14756                                         &ambiguous_decls,
14757                                         identifier_token->location);
14758           if (ambiguous_decls)
14759             {
14760               error ("%Hreference to %qD is ambiguous",
14761                      &identifier_token->location, identifier);
14762               print_candidates (ambiguous_decls);
14763               if (cp_parser_parsing_tentatively (parser))
14764                 {
14765                   identifier_token->ambiguous_p = true;
14766                   cp_parser_simulate_error (parser);
14767                 }
14768               return error_mark_node;
14769             }
14770         }
14771     }
14772   else
14773     {
14774       /* Try a template-id.  */
14775       decl = cp_parser_template_id (parser, template_keyword_p,
14776                                     check_dependency_p,
14777                                     is_declaration);
14778       if (decl == error_mark_node)
14779         return error_mark_node;
14780     }
14781
14782   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
14783
14784   /* If this is a typename, create a TYPENAME_TYPE.  */
14785   if (typename_p && decl != error_mark_node)
14786     {
14787       decl = make_typename_type (scope, decl, typename_type,
14788                                  /*complain=*/tf_error);
14789       if (decl != error_mark_node)
14790         decl = TYPE_NAME (decl);
14791     }
14792
14793   /* Check to see that it is really the name of a class.  */
14794   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
14795       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
14796       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
14797     /* Situations like this:
14798
14799          template <typename T> struct A {
14800            typename T::template X<int>::I i;
14801          };
14802
14803        are problematic.  Is `T::template X<int>' a class-name?  The
14804        standard does not seem to be definitive, but there is no other
14805        valid interpretation of the following `::'.  Therefore, those
14806        names are considered class-names.  */
14807     {
14808       decl = make_typename_type (scope, decl, tag_type, tf_error);
14809       if (decl != error_mark_node)
14810         decl = TYPE_NAME (decl);
14811     }
14812   else if (TREE_CODE (decl) != TYPE_DECL
14813            || TREE_TYPE (decl) == error_mark_node
14814            || !MAYBE_CLASS_TYPE_P (TREE_TYPE (decl)))
14815     decl = error_mark_node;
14816
14817   if (decl == error_mark_node)
14818     cp_parser_error (parser, "expected class-name");
14819
14820   return decl;
14821 }
14822
14823 /* Parse a class-specifier.
14824
14825    class-specifier:
14826      class-head { member-specification [opt] }
14827
14828    Returns the TREE_TYPE representing the class.  */
14829
14830 static tree
14831 cp_parser_class_specifier (cp_parser* parser)
14832 {
14833   cp_token *token;
14834   tree type;
14835   tree attributes = NULL_TREE;
14836   int has_trailing_semicolon;
14837   bool nested_name_specifier_p;
14838   unsigned saved_num_template_parameter_lists;
14839   bool saved_in_function_body;
14840   tree old_scope = NULL_TREE;
14841   tree scope = NULL_TREE;
14842   tree bases;
14843
14844   push_deferring_access_checks (dk_no_deferred);
14845
14846   /* Parse the class-head.  */
14847   type = cp_parser_class_head (parser,
14848                                &nested_name_specifier_p,
14849                                &attributes,
14850                                &bases);
14851   /* If the class-head was a semantic disaster, skip the entire body
14852      of the class.  */
14853   if (!type)
14854     {
14855       cp_parser_skip_to_end_of_block_or_statement (parser);
14856       pop_deferring_access_checks ();
14857       return error_mark_node;
14858     }
14859
14860   /* Look for the `{'.  */
14861   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>"))
14862     {
14863       pop_deferring_access_checks ();
14864       return error_mark_node;
14865     }
14866
14867   /* Process the base classes. If they're invalid, skip the 
14868      entire class body.  */
14869   if (!xref_basetypes (type, bases))
14870     {
14871       /* Consuming the closing brace yields better error messages
14872          later on.  */
14873       if (cp_parser_skip_to_closing_brace (parser))
14874         cp_lexer_consume_token (parser->lexer);
14875       pop_deferring_access_checks ();
14876       return error_mark_node;
14877     }
14878
14879   /* Issue an error message if type-definitions are forbidden here.  */
14880   cp_parser_check_type_definition (parser);
14881   /* Remember that we are defining one more class.  */
14882   ++parser->num_classes_being_defined;
14883   /* Inside the class, surrounding template-parameter-lists do not
14884      apply.  */
14885   saved_num_template_parameter_lists
14886     = parser->num_template_parameter_lists;
14887   parser->num_template_parameter_lists = 0;
14888   /* We are not in a function body.  */
14889   saved_in_function_body = parser->in_function_body;
14890   parser->in_function_body = false;
14891
14892   /* Start the class.  */
14893   if (nested_name_specifier_p)
14894     {
14895       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
14896       old_scope = push_inner_scope (scope);
14897     }
14898   type = begin_class_definition (type, attributes);
14899
14900   if (type == error_mark_node)
14901     /* If the type is erroneous, skip the entire body of the class.  */
14902     cp_parser_skip_to_closing_brace (parser);
14903   else
14904     /* Parse the member-specification.  */
14905     cp_parser_member_specification_opt (parser);
14906
14907   /* Look for the trailing `}'.  */
14908   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
14909   /* We get better error messages by noticing a common problem: a
14910      missing trailing `;'.  */
14911   token = cp_lexer_peek_token (parser->lexer);
14912   has_trailing_semicolon = (token->type == CPP_SEMICOLON);
14913   /* Look for trailing attributes to apply to this class.  */
14914   if (cp_parser_allow_gnu_extensions_p (parser))
14915     attributes = cp_parser_attributes_opt (parser);
14916   if (type != error_mark_node)
14917     type = finish_struct (type, attributes);
14918   if (nested_name_specifier_p)
14919     pop_inner_scope (old_scope, scope);
14920   /* If this class is not itself within the scope of another class,
14921      then we need to parse the bodies of all of the queued function
14922      definitions.  Note that the queued functions defined in a class
14923      are not always processed immediately following the
14924      class-specifier for that class.  Consider:
14925
14926        struct A {
14927          struct B { void f() { sizeof (A); } };
14928        };
14929
14930      If `f' were processed before the processing of `A' were
14931      completed, there would be no way to compute the size of `A'.
14932      Note that the nesting we are interested in here is lexical --
14933      not the semantic nesting given by TYPE_CONTEXT.  In particular,
14934      for:
14935
14936        struct A { struct B; };
14937        struct A::B { void f() { } };
14938
14939      there is no need to delay the parsing of `A::B::f'.  */
14940   if (--parser->num_classes_being_defined == 0)
14941     {
14942       tree queue_entry;
14943       tree fn;
14944       tree class_type = NULL_TREE;
14945       tree pushed_scope = NULL_TREE;
14946
14947       /* In a first pass, parse default arguments to the functions.
14948          Then, in a second pass, parse the bodies of the functions.
14949          This two-phased approach handles cases like:
14950
14951             struct S {
14952               void f() { g(); }
14953               void g(int i = 3);
14954             };
14955
14956          */
14957       for (TREE_PURPOSE (parser->unparsed_functions_queues)
14958              = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
14959            (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
14960            TREE_PURPOSE (parser->unparsed_functions_queues)
14961              = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
14962         {
14963           fn = TREE_VALUE (queue_entry);
14964           /* If there are default arguments that have not yet been processed,
14965              take care of them now.  */
14966           if (class_type != TREE_PURPOSE (queue_entry))
14967             {
14968               if (pushed_scope)
14969                 pop_scope (pushed_scope);
14970               class_type = TREE_PURPOSE (queue_entry);
14971               pushed_scope = push_scope (class_type);
14972             }
14973           /* Make sure that any template parameters are in scope.  */
14974           maybe_begin_member_template_processing (fn);
14975           /* Parse the default argument expressions.  */
14976           cp_parser_late_parsing_default_args (parser, fn);
14977           /* Remove any template parameters from the symbol table.  */
14978           maybe_end_member_template_processing ();
14979         }
14980       if (pushed_scope)
14981         pop_scope (pushed_scope);
14982       /* Now parse the body of the functions.  */
14983       for (TREE_VALUE (parser->unparsed_functions_queues)
14984              = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
14985            (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
14986            TREE_VALUE (parser->unparsed_functions_queues)
14987              = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
14988         {
14989           /* Figure out which function we need to process.  */
14990           fn = TREE_VALUE (queue_entry);
14991           /* Parse the function.  */
14992           cp_parser_late_parsing_for_member (parser, fn);
14993         }
14994     }
14995
14996   /* Put back any saved access checks.  */
14997   pop_deferring_access_checks ();
14998
14999   /* Restore saved state.  */
15000   parser->in_function_body = saved_in_function_body;
15001   parser->num_template_parameter_lists
15002     = saved_num_template_parameter_lists;
15003
15004   return type;
15005 }
15006
15007 /* Parse a class-head.
15008
15009    class-head:
15010      class-key identifier [opt] base-clause [opt]
15011      class-key nested-name-specifier identifier base-clause [opt]
15012      class-key nested-name-specifier [opt] template-id
15013        base-clause [opt]
15014
15015    GNU Extensions:
15016      class-key attributes identifier [opt] base-clause [opt]
15017      class-key attributes nested-name-specifier identifier base-clause [opt]
15018      class-key attributes nested-name-specifier [opt] template-id
15019        base-clause [opt]
15020
15021    Upon return BASES is initialized to the list of base classes (or
15022    NULL, if there are none) in the same form returned by
15023    cp_parser_base_clause.
15024
15025    Returns the TYPE of the indicated class.  Sets
15026    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
15027    involving a nested-name-specifier was used, and FALSE otherwise.
15028
15029    Returns error_mark_node if this is not a class-head.
15030
15031    Returns NULL_TREE if the class-head is syntactically valid, but
15032    semantically invalid in a way that means we should skip the entire
15033    body of the class.  */
15034
15035 static tree
15036 cp_parser_class_head (cp_parser* parser,
15037                       bool* nested_name_specifier_p,
15038                       tree *attributes_p,
15039                       tree *bases)
15040 {
15041   tree nested_name_specifier;
15042   enum tag_types class_key;
15043   tree id = NULL_TREE;
15044   tree type = NULL_TREE;
15045   tree attributes;
15046   bool template_id_p = false;
15047   bool qualified_p = false;
15048   bool invalid_nested_name_p = false;
15049   bool invalid_explicit_specialization_p = false;
15050   tree pushed_scope = NULL_TREE;
15051   unsigned num_templates;
15052   cp_token *type_start_token = NULL, *nested_name_specifier_token_start = NULL;
15053   /* Assume no nested-name-specifier will be present.  */
15054   *nested_name_specifier_p = false;
15055   /* Assume no template parameter lists will be used in defining the
15056      type.  */
15057   num_templates = 0;
15058
15059   *bases = NULL_TREE;
15060
15061   /* Look for the class-key.  */
15062   class_key = cp_parser_class_key (parser);
15063   if (class_key == none_type)
15064     return error_mark_node;
15065
15066   /* Parse the attributes.  */
15067   attributes = cp_parser_attributes_opt (parser);
15068
15069   /* If the next token is `::', that is invalid -- but sometimes
15070      people do try to write:
15071
15072        struct ::S {};
15073
15074      Handle this gracefully by accepting the extra qualifier, and then
15075      issuing an error about it later if this really is a
15076      class-head.  If it turns out just to be an elaborated type
15077      specifier, remain silent.  */
15078   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
15079     qualified_p = true;
15080
15081   push_deferring_access_checks (dk_no_check);
15082
15083   /* Determine the name of the class.  Begin by looking for an
15084      optional nested-name-specifier.  */
15085   nested_name_specifier_token_start = cp_lexer_peek_token (parser->lexer);
15086   nested_name_specifier
15087     = cp_parser_nested_name_specifier_opt (parser,
15088                                            /*typename_keyword_p=*/false,
15089                                            /*check_dependency_p=*/false,
15090                                            /*type_p=*/false,
15091                                            /*is_declaration=*/false);
15092   /* If there was a nested-name-specifier, then there *must* be an
15093      identifier.  */
15094   if (nested_name_specifier)
15095     {
15096       type_start_token = cp_lexer_peek_token (parser->lexer);
15097       /* Although the grammar says `identifier', it really means
15098          `class-name' or `template-name'.  You are only allowed to
15099          define a class that has already been declared with this
15100          syntax.
15101
15102          The proposed resolution for Core Issue 180 says that wherever
15103          you see `class T::X' you should treat `X' as a type-name.
15104
15105          It is OK to define an inaccessible class; for example:
15106
15107            class A { class B; };
15108            class A::B {};
15109
15110          We do not know if we will see a class-name, or a
15111          template-name.  We look for a class-name first, in case the
15112          class-name is a template-id; if we looked for the
15113          template-name first we would stop after the template-name.  */
15114       cp_parser_parse_tentatively (parser);
15115       type = cp_parser_class_name (parser,
15116                                    /*typename_keyword_p=*/false,
15117                                    /*template_keyword_p=*/false,
15118                                    class_type,
15119                                    /*check_dependency_p=*/false,
15120                                    /*class_head_p=*/true,
15121                                    /*is_declaration=*/false);
15122       /* If that didn't work, ignore the nested-name-specifier.  */
15123       if (!cp_parser_parse_definitely (parser))
15124         {
15125           invalid_nested_name_p = true;
15126           type_start_token = cp_lexer_peek_token (parser->lexer);
15127           id = cp_parser_identifier (parser);
15128           if (id == error_mark_node)
15129             id = NULL_TREE;
15130         }
15131       /* If we could not find a corresponding TYPE, treat this
15132          declaration like an unqualified declaration.  */
15133       if (type == error_mark_node)
15134         nested_name_specifier = NULL_TREE;
15135       /* Otherwise, count the number of templates used in TYPE and its
15136          containing scopes.  */
15137       else
15138         {
15139           tree scope;
15140
15141           for (scope = TREE_TYPE (type);
15142                scope && TREE_CODE (scope) != NAMESPACE_DECL;
15143                scope = (TYPE_P (scope)
15144                         ? TYPE_CONTEXT (scope)
15145                         : DECL_CONTEXT (scope)))
15146             if (TYPE_P (scope)
15147                 && CLASS_TYPE_P (scope)
15148                 && CLASSTYPE_TEMPLATE_INFO (scope)
15149                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
15150                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
15151               ++num_templates;
15152         }
15153     }
15154   /* Otherwise, the identifier is optional.  */
15155   else
15156     {
15157       /* We don't know whether what comes next is a template-id,
15158          an identifier, or nothing at all.  */
15159       cp_parser_parse_tentatively (parser);
15160       /* Check for a template-id.  */
15161       type_start_token = cp_lexer_peek_token (parser->lexer);
15162       id = cp_parser_template_id (parser,
15163                                   /*template_keyword_p=*/false,
15164                                   /*check_dependency_p=*/true,
15165                                   /*is_declaration=*/true);
15166       /* If that didn't work, it could still be an identifier.  */
15167       if (!cp_parser_parse_definitely (parser))
15168         {
15169           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
15170             {
15171               type_start_token = cp_lexer_peek_token (parser->lexer);
15172               id = cp_parser_identifier (parser);
15173             }
15174           else
15175             id = NULL_TREE;
15176         }
15177       else
15178         {
15179           template_id_p = true;
15180           ++num_templates;
15181         }
15182     }
15183
15184   pop_deferring_access_checks ();
15185
15186   if (id)
15187     cp_parser_check_for_invalid_template_id (parser, id,
15188                                              type_start_token->location);
15189
15190   /* If it's not a `:' or a `{' then we can't really be looking at a
15191      class-head, since a class-head only appears as part of a
15192      class-specifier.  We have to detect this situation before calling
15193      xref_tag, since that has irreversible side-effects.  */
15194   if (!cp_parser_next_token_starts_class_definition_p (parser))
15195     {
15196       cp_parser_error (parser, "expected %<{%> or %<:%>");
15197       return error_mark_node;
15198     }
15199
15200   /* At this point, we're going ahead with the class-specifier, even
15201      if some other problem occurs.  */
15202   cp_parser_commit_to_tentative_parse (parser);
15203   /* Issue the error about the overly-qualified name now.  */
15204   if (qualified_p)
15205     {
15206       cp_parser_error (parser,
15207                        "global qualification of class name is invalid");
15208       return error_mark_node;
15209     }
15210   else if (invalid_nested_name_p)
15211     {
15212       cp_parser_error (parser,
15213                        "qualified name does not name a class");
15214       return error_mark_node;
15215     }
15216   else if (nested_name_specifier)
15217     {
15218       tree scope;
15219
15220       /* Reject typedef-names in class heads.  */
15221       if (!DECL_IMPLICIT_TYPEDEF_P (type))
15222         {
15223           error ("%Hinvalid class name in declaration of %qD",
15224                  &type_start_token->location, type);
15225           type = NULL_TREE;
15226           goto done;
15227         }
15228
15229       /* Figure out in what scope the declaration is being placed.  */
15230       scope = current_scope ();
15231       /* If that scope does not contain the scope in which the
15232          class was originally declared, the program is invalid.  */
15233       if (scope && !is_ancestor (scope, nested_name_specifier))
15234         {
15235           if (at_namespace_scope_p ())
15236             error ("%Hdeclaration of %qD in namespace %qD which does not "
15237                    "enclose %qD",
15238                    &type_start_token->location,
15239                    type, scope, nested_name_specifier);
15240           else
15241             error ("%Hdeclaration of %qD in %qD which does not enclose %qD",
15242                    &type_start_token->location,
15243                    type, scope, nested_name_specifier);
15244           type = NULL_TREE;
15245           goto done;
15246         }
15247       /* [dcl.meaning]
15248
15249          A declarator-id shall not be qualified except for the
15250          definition of a ... nested class outside of its class
15251          ... [or] the definition or explicit instantiation of a
15252          class member of a namespace outside of its namespace.  */
15253       if (scope == nested_name_specifier)
15254         {
15255           permerror (input_location, "%Hextra qualification not allowed",
15256                      &nested_name_specifier_token_start->location);
15257           nested_name_specifier = NULL_TREE;
15258           num_templates = 0;
15259         }
15260     }
15261   /* An explicit-specialization must be preceded by "template <>".  If
15262      it is not, try to recover gracefully.  */
15263   if (at_namespace_scope_p ()
15264       && parser->num_template_parameter_lists == 0
15265       && template_id_p)
15266     {
15267       error ("%Han explicit specialization must be preceded by %<template <>%>",
15268              &type_start_token->location);
15269       invalid_explicit_specialization_p = true;
15270       /* Take the same action that would have been taken by
15271          cp_parser_explicit_specialization.  */
15272       ++parser->num_template_parameter_lists;
15273       begin_specialization ();
15274     }
15275   /* There must be no "return" statements between this point and the
15276      end of this function; set "type "to the correct return value and
15277      use "goto done;" to return.  */
15278   /* Make sure that the right number of template parameters were
15279      present.  */
15280   if (!cp_parser_check_template_parameters (parser, num_templates,
15281                                             type_start_token->location))
15282     {
15283       /* If something went wrong, there is no point in even trying to
15284          process the class-definition.  */
15285       type = NULL_TREE;
15286       goto done;
15287     }
15288
15289   /* Look up the type.  */
15290   if (template_id_p)
15291     {
15292       if (TREE_CODE (id) == TEMPLATE_ID_EXPR
15293           && (DECL_FUNCTION_TEMPLATE_P (TREE_OPERAND (id, 0))
15294               || TREE_CODE (TREE_OPERAND (id, 0)) == OVERLOAD))
15295         {
15296           error ("%Hfunction template %qD redeclared as a class template",
15297                  &type_start_token->location, id);
15298           type = error_mark_node;
15299         }
15300       else
15301         {
15302           type = TREE_TYPE (id);
15303           type = maybe_process_partial_specialization (type);
15304         }
15305       if (nested_name_specifier)
15306         pushed_scope = push_scope (nested_name_specifier);
15307     }
15308   else if (nested_name_specifier)
15309     {
15310       tree class_type;
15311
15312       /* Given:
15313
15314             template <typename T> struct S { struct T };
15315             template <typename T> struct S<T>::T { };
15316
15317          we will get a TYPENAME_TYPE when processing the definition of
15318          `S::T'.  We need to resolve it to the actual type before we
15319          try to define it.  */
15320       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
15321         {
15322           class_type = resolve_typename_type (TREE_TYPE (type),
15323                                               /*only_current_p=*/false);
15324           if (TREE_CODE (class_type) != TYPENAME_TYPE)
15325             type = TYPE_NAME (class_type);
15326           else
15327             {
15328               cp_parser_error (parser, "could not resolve typename type");
15329               type = error_mark_node;
15330             }
15331         }
15332
15333       if (maybe_process_partial_specialization (TREE_TYPE (type))
15334           == error_mark_node)
15335         {
15336           type = NULL_TREE;
15337           goto done;
15338         }
15339
15340       class_type = current_class_type;
15341       /* Enter the scope indicated by the nested-name-specifier.  */
15342       pushed_scope = push_scope (nested_name_specifier);
15343       /* Get the canonical version of this type.  */
15344       type = TYPE_MAIN_DECL (TREE_TYPE (type));
15345       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
15346           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
15347         {
15348           type = push_template_decl (type);
15349           if (type == error_mark_node)
15350             {
15351               type = NULL_TREE;
15352               goto done;
15353             }
15354         }
15355
15356       type = TREE_TYPE (type);
15357       *nested_name_specifier_p = true;
15358     }
15359   else      /* The name is not a nested name.  */
15360     {
15361       /* If the class was unnamed, create a dummy name.  */
15362       if (!id)
15363         id = make_anon_name ();
15364       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
15365                        parser->num_template_parameter_lists);
15366     }
15367
15368   /* Indicate whether this class was declared as a `class' or as a
15369      `struct'.  */
15370   if (TREE_CODE (type) == RECORD_TYPE)
15371     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
15372   cp_parser_check_class_key (class_key, type);
15373
15374   /* If this type was already complete, and we see another definition,
15375      that's an error.  */
15376   if (type != error_mark_node && COMPLETE_TYPE_P (type))
15377     {
15378       error ("%Hredefinition of %q#T",
15379              &type_start_token->location, type);
15380       error ("%Hprevious definition of %q+#T",
15381              &type_start_token->location, type);
15382       type = NULL_TREE;
15383       goto done;
15384     }
15385   else if (type == error_mark_node)
15386     type = NULL_TREE;
15387
15388   /* We will have entered the scope containing the class; the names of
15389      base classes should be looked up in that context.  For example:
15390
15391        struct A { struct B {}; struct C; };
15392        struct A::C : B {};
15393
15394      is valid.  */
15395
15396   /* Get the list of base-classes, if there is one.  */
15397   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
15398     *bases = cp_parser_base_clause (parser);
15399
15400  done:
15401   /* Leave the scope given by the nested-name-specifier.  We will
15402      enter the class scope itself while processing the members.  */
15403   if (pushed_scope)
15404     pop_scope (pushed_scope);
15405
15406   if (invalid_explicit_specialization_p)
15407     {
15408       end_specialization ();
15409       --parser->num_template_parameter_lists;
15410     }
15411   *attributes_p = attributes;
15412   return type;
15413 }
15414
15415 /* Parse a class-key.
15416
15417    class-key:
15418      class
15419      struct
15420      union
15421
15422    Returns the kind of class-key specified, or none_type to indicate
15423    error.  */
15424
15425 static enum tag_types
15426 cp_parser_class_key (cp_parser* parser)
15427 {
15428   cp_token *token;
15429   enum tag_types tag_type;
15430
15431   /* Look for the class-key.  */
15432   token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
15433   if (!token)
15434     return none_type;
15435
15436   /* Check to see if the TOKEN is a class-key.  */
15437   tag_type = cp_parser_token_is_class_key (token);
15438   if (!tag_type)
15439     cp_parser_error (parser, "expected class-key");
15440   return tag_type;
15441 }
15442
15443 /* Parse an (optional) member-specification.
15444
15445    member-specification:
15446      member-declaration member-specification [opt]
15447      access-specifier : member-specification [opt]  */
15448
15449 static void
15450 cp_parser_member_specification_opt (cp_parser* parser)
15451 {
15452   while (true)
15453     {
15454       cp_token *token;
15455       enum rid keyword;
15456
15457       /* Peek at the next token.  */
15458       token = cp_lexer_peek_token (parser->lexer);
15459       /* If it's a `}', or EOF then we've seen all the members.  */
15460       if (token->type == CPP_CLOSE_BRACE
15461           || token->type == CPP_EOF
15462           || token->type == CPP_PRAGMA_EOL)
15463         break;
15464
15465       /* See if this token is a keyword.  */
15466       keyword = token->keyword;
15467       switch (keyword)
15468         {
15469         case RID_PUBLIC:
15470         case RID_PROTECTED:
15471         case RID_PRIVATE:
15472           /* Consume the access-specifier.  */
15473           cp_lexer_consume_token (parser->lexer);
15474           /* Remember which access-specifier is active.  */
15475           current_access_specifier = token->u.value;
15476           /* Look for the `:'.  */
15477           cp_parser_require (parser, CPP_COLON, "%<:%>");
15478           break;
15479
15480         default:
15481           /* Accept #pragmas at class scope.  */
15482           if (token->type == CPP_PRAGMA)
15483             {
15484               cp_parser_pragma (parser, pragma_external);
15485               break;
15486             }
15487
15488           /* Otherwise, the next construction must be a
15489              member-declaration.  */
15490           cp_parser_member_declaration (parser);
15491         }
15492     }
15493 }
15494
15495 /* Parse a member-declaration.
15496
15497    member-declaration:
15498      decl-specifier-seq [opt] member-declarator-list [opt] ;
15499      function-definition ; [opt]
15500      :: [opt] nested-name-specifier template [opt] unqualified-id ;
15501      using-declaration
15502      template-declaration
15503
15504    member-declarator-list:
15505      member-declarator
15506      member-declarator-list , member-declarator
15507
15508    member-declarator:
15509      declarator pure-specifier [opt]
15510      declarator constant-initializer [opt]
15511      identifier [opt] : constant-expression
15512
15513    GNU Extensions:
15514
15515    member-declaration:
15516      __extension__ member-declaration
15517
15518    member-declarator:
15519      declarator attributes [opt] pure-specifier [opt]
15520      declarator attributes [opt] constant-initializer [opt]
15521      identifier [opt] attributes [opt] : constant-expression  
15522
15523    C++0x Extensions:
15524
15525    member-declaration:
15526      static_assert-declaration  */
15527
15528 static void
15529 cp_parser_member_declaration (cp_parser* parser)
15530 {
15531   cp_decl_specifier_seq decl_specifiers;
15532   tree prefix_attributes;
15533   tree decl;
15534   int declares_class_or_enum;
15535   bool friend_p;
15536   cp_token *token = NULL;
15537   cp_token *decl_spec_token_start = NULL;
15538   cp_token *initializer_token_start = NULL;
15539   int saved_pedantic;
15540
15541   /* Check for the `__extension__' keyword.  */
15542   if (cp_parser_extension_opt (parser, &saved_pedantic))
15543     {
15544       /* Recurse.  */
15545       cp_parser_member_declaration (parser);
15546       /* Restore the old value of the PEDANTIC flag.  */
15547       pedantic = saved_pedantic;
15548
15549       return;
15550     }
15551
15552   /* Check for a template-declaration.  */
15553   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
15554     {
15555       /* An explicit specialization here is an error condition, and we
15556          expect the specialization handler to detect and report this.  */
15557       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
15558           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
15559         cp_parser_explicit_specialization (parser);
15560       else
15561         cp_parser_template_declaration (parser, /*member_p=*/true);
15562
15563       return;
15564     }
15565
15566   /* Check for a using-declaration.  */
15567   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
15568     {
15569       /* Parse the using-declaration.  */
15570       cp_parser_using_declaration (parser,
15571                                    /*access_declaration_p=*/false);
15572       return;
15573     }
15574
15575   /* Check for @defs.  */
15576   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
15577     {
15578       tree ivar, member;
15579       tree ivar_chains = cp_parser_objc_defs_expression (parser);
15580       ivar = ivar_chains;
15581       while (ivar)
15582         {
15583           member = ivar;
15584           ivar = TREE_CHAIN (member);
15585           TREE_CHAIN (member) = NULL_TREE;
15586           finish_member_declaration (member);
15587         }
15588       return;
15589     }
15590
15591   /* If the next token is `static_assert' we have a static assertion.  */
15592   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC_ASSERT))
15593     {
15594       cp_parser_static_assert (parser, /*member_p=*/true);
15595       return;
15596     }
15597
15598   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
15599     return;
15600
15601   /* Parse the decl-specifier-seq.  */
15602   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
15603   cp_parser_decl_specifier_seq (parser,
15604                                 CP_PARSER_FLAGS_OPTIONAL,
15605                                 &decl_specifiers,
15606                                 &declares_class_or_enum);
15607   prefix_attributes = decl_specifiers.attributes;
15608   decl_specifiers.attributes = NULL_TREE;
15609   /* Check for an invalid type-name.  */
15610   if (!decl_specifiers.type
15611       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
15612     return;
15613   /* If there is no declarator, then the decl-specifier-seq should
15614      specify a type.  */
15615   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
15616     {
15617       /* If there was no decl-specifier-seq, and the next token is a
15618          `;', then we have something like:
15619
15620            struct S { ; };
15621
15622          [class.mem]
15623
15624          Each member-declaration shall declare at least one member
15625          name of the class.  */
15626       if (!decl_specifiers.any_specifiers_p)
15627         {
15628           cp_token *token = cp_lexer_peek_token (parser->lexer);
15629           if (!in_system_header_at (token->location))
15630             pedwarn (token->location, OPT_pedantic, "extra %<;%>");
15631         }
15632       else
15633         {
15634           tree type;
15635
15636           /* See if this declaration is a friend.  */
15637           friend_p = cp_parser_friend_p (&decl_specifiers);
15638           /* If there were decl-specifiers, check to see if there was
15639              a class-declaration.  */
15640           type = check_tag_decl (&decl_specifiers);
15641           /* Nested classes have already been added to the class, but
15642              a `friend' needs to be explicitly registered.  */
15643           if (friend_p)
15644             {
15645               /* If the `friend' keyword was present, the friend must
15646                  be introduced with a class-key.  */
15647                if (!declares_class_or_enum)
15648                  error ("%Ha class-key must be used when declaring a friend",
15649                         &decl_spec_token_start->location);
15650                /* In this case:
15651
15652                     template <typename T> struct A {
15653                       friend struct A<T>::B;
15654                     };
15655
15656                   A<T>::B will be represented by a TYPENAME_TYPE, and
15657                   therefore not recognized by check_tag_decl.  */
15658                if (!type
15659                    && decl_specifiers.type
15660                    && TYPE_P (decl_specifiers.type))
15661                  type = decl_specifiers.type;
15662                if (!type || !TYPE_P (type))
15663                  error ("%Hfriend declaration does not name a class or "
15664                         "function", &decl_spec_token_start->location);
15665                else
15666                  make_friend_class (current_class_type, type,
15667                                     /*complain=*/true);
15668             }
15669           /* If there is no TYPE, an error message will already have
15670              been issued.  */
15671           else if (!type || type == error_mark_node)
15672             ;
15673           /* An anonymous aggregate has to be handled specially; such
15674              a declaration really declares a data member (with a
15675              particular type), as opposed to a nested class.  */
15676           else if (ANON_AGGR_TYPE_P (type))
15677             {
15678               /* Remove constructors and such from TYPE, now that we
15679                  know it is an anonymous aggregate.  */
15680               fixup_anonymous_aggr (type);
15681               /* And make the corresponding data member.  */
15682               decl = build_decl (FIELD_DECL, NULL_TREE, type);
15683               /* Add it to the class.  */
15684               finish_member_declaration (decl);
15685             }
15686           else
15687             cp_parser_check_access_in_redeclaration
15688                                               (TYPE_NAME (type),
15689                                                decl_spec_token_start->location);
15690         }
15691     }
15692   else
15693     {
15694       /* See if these declarations will be friends.  */
15695       friend_p = cp_parser_friend_p (&decl_specifiers);
15696
15697       /* Keep going until we hit the `;' at the end of the
15698          declaration.  */
15699       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
15700         {
15701           tree attributes = NULL_TREE;
15702           tree first_attribute;
15703
15704           /* Peek at the next token.  */
15705           token = cp_lexer_peek_token (parser->lexer);
15706
15707           /* Check for a bitfield declaration.  */
15708           if (token->type == CPP_COLON
15709               || (token->type == CPP_NAME
15710                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
15711                   == CPP_COLON))
15712             {
15713               tree identifier;
15714               tree width;
15715
15716               /* Get the name of the bitfield.  Note that we cannot just
15717                  check TOKEN here because it may have been invalidated by
15718                  the call to cp_lexer_peek_nth_token above.  */
15719               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
15720                 identifier = cp_parser_identifier (parser);
15721               else
15722                 identifier = NULL_TREE;
15723
15724               /* Consume the `:' token.  */
15725               cp_lexer_consume_token (parser->lexer);
15726               /* Get the width of the bitfield.  */
15727               width
15728                 = cp_parser_constant_expression (parser,
15729                                                  /*allow_non_constant=*/false,
15730                                                  NULL);
15731
15732               /* Look for attributes that apply to the bitfield.  */
15733               attributes = cp_parser_attributes_opt (parser);
15734               /* Remember which attributes are prefix attributes and
15735                  which are not.  */
15736               first_attribute = attributes;
15737               /* Combine the attributes.  */
15738               attributes = chainon (prefix_attributes, attributes);
15739
15740               /* Create the bitfield declaration.  */
15741               decl = grokbitfield (identifier
15742                                    ? make_id_declarator (NULL_TREE,
15743                                                          identifier,
15744                                                          sfk_none)
15745                                    : NULL,
15746                                    &decl_specifiers,
15747                                    width,
15748                                    attributes);
15749             }
15750           else
15751             {
15752               cp_declarator *declarator;
15753               tree initializer;
15754               tree asm_specification;
15755               int ctor_dtor_or_conv_p;
15756
15757               /* Parse the declarator.  */
15758               declarator
15759                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
15760                                         &ctor_dtor_or_conv_p,
15761                                         /*parenthesized_p=*/NULL,
15762                                         /*member_p=*/true);
15763
15764               /* If something went wrong parsing the declarator, make sure
15765                  that we at least consume some tokens.  */
15766               if (declarator == cp_error_declarator)
15767                 {
15768                   /* Skip to the end of the statement.  */
15769                   cp_parser_skip_to_end_of_statement (parser);
15770                   /* If the next token is not a semicolon, that is
15771                      probably because we just skipped over the body of
15772                      a function.  So, we consume a semicolon if
15773                      present, but do not issue an error message if it
15774                      is not present.  */
15775                   if (cp_lexer_next_token_is (parser->lexer,
15776                                               CPP_SEMICOLON))
15777                     cp_lexer_consume_token (parser->lexer);
15778                   return;
15779                 }
15780
15781               if (declares_class_or_enum & 2)
15782                 cp_parser_check_for_definition_in_return_type
15783                                             (declarator, decl_specifiers.type,
15784                                              decl_specifiers.type_location);
15785
15786               /* Look for an asm-specification.  */
15787               asm_specification = cp_parser_asm_specification_opt (parser);
15788               /* Look for attributes that apply to the declaration.  */
15789               attributes = cp_parser_attributes_opt (parser);
15790               /* Remember which attributes are prefix attributes and
15791                  which are not.  */
15792               first_attribute = attributes;
15793               /* Combine the attributes.  */
15794               attributes = chainon (prefix_attributes, attributes);
15795
15796               /* If it's an `=', then we have a constant-initializer or a
15797                  pure-specifier.  It is not correct to parse the
15798                  initializer before registering the member declaration
15799                  since the member declaration should be in scope while
15800                  its initializer is processed.  However, the rest of the
15801                  front end does not yet provide an interface that allows
15802                  us to handle this correctly.  */
15803               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
15804                 {
15805                   /* In [class.mem]:
15806
15807                      A pure-specifier shall be used only in the declaration of
15808                      a virtual function.
15809
15810                      A member-declarator can contain a constant-initializer
15811                      only if it declares a static member of integral or
15812                      enumeration type.
15813
15814                      Therefore, if the DECLARATOR is for a function, we look
15815                      for a pure-specifier; otherwise, we look for a
15816                      constant-initializer.  When we call `grokfield', it will
15817                      perform more stringent semantics checks.  */
15818                   initializer_token_start = cp_lexer_peek_token (parser->lexer);
15819                   if (function_declarator_p (declarator))
15820                     initializer = cp_parser_pure_specifier (parser);
15821                   else
15822                     /* Parse the initializer.  */
15823                     initializer = cp_parser_constant_initializer (parser);
15824                 }
15825               /* Otherwise, there is no initializer.  */
15826               else
15827                 initializer = NULL_TREE;
15828
15829               /* See if we are probably looking at a function
15830                  definition.  We are certainly not looking at a
15831                  member-declarator.  Calling `grokfield' has
15832                  side-effects, so we must not do it unless we are sure
15833                  that we are looking at a member-declarator.  */
15834               if (cp_parser_token_starts_function_definition_p
15835                   (cp_lexer_peek_token (parser->lexer)))
15836                 {
15837                   /* The grammar does not allow a pure-specifier to be
15838                      used when a member function is defined.  (It is
15839                      possible that this fact is an oversight in the
15840                      standard, since a pure function may be defined
15841                      outside of the class-specifier.  */
15842                   if (initializer)
15843                     error ("%Hpure-specifier on function-definition",
15844                            &initializer_token_start->location);
15845                   decl = cp_parser_save_member_function_body (parser,
15846                                                               &decl_specifiers,
15847                                                               declarator,
15848                                                               attributes);
15849                   /* If the member was not a friend, declare it here.  */
15850                   if (!friend_p)
15851                     finish_member_declaration (decl);
15852                   /* Peek at the next token.  */
15853                   token = cp_lexer_peek_token (parser->lexer);
15854                   /* If the next token is a semicolon, consume it.  */
15855                   if (token->type == CPP_SEMICOLON)
15856                     cp_lexer_consume_token (parser->lexer);
15857                   return;
15858                 }
15859               else
15860                 if (declarator->kind == cdk_function)
15861                   declarator->id_loc = token->location;
15862                 /* Create the declaration.  */
15863                 decl = grokfield (declarator, &decl_specifiers,
15864                                   initializer, /*init_const_expr_p=*/true,
15865                                   asm_specification,
15866                                   attributes);
15867             }
15868
15869           /* Reset PREFIX_ATTRIBUTES.  */
15870           while (attributes && TREE_CHAIN (attributes) != first_attribute)
15871             attributes = TREE_CHAIN (attributes);
15872           if (attributes)
15873             TREE_CHAIN (attributes) = NULL_TREE;
15874
15875           /* If there is any qualification still in effect, clear it
15876              now; we will be starting fresh with the next declarator.  */
15877           parser->scope = NULL_TREE;
15878           parser->qualifying_scope = NULL_TREE;
15879           parser->object_scope = NULL_TREE;
15880           /* If it's a `,', then there are more declarators.  */
15881           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
15882             cp_lexer_consume_token (parser->lexer);
15883           /* If the next token isn't a `;', then we have a parse error.  */
15884           else if (cp_lexer_next_token_is_not (parser->lexer,
15885                                                CPP_SEMICOLON))
15886             {
15887               cp_parser_error (parser, "expected %<;%>");
15888               /* Skip tokens until we find a `;'.  */
15889               cp_parser_skip_to_end_of_statement (parser);
15890
15891               break;
15892             }
15893
15894           if (decl)
15895             {
15896               /* Add DECL to the list of members.  */
15897               if (!friend_p)
15898                 finish_member_declaration (decl);
15899
15900               if (TREE_CODE (decl) == FUNCTION_DECL)
15901                 cp_parser_save_default_args (parser, decl);
15902             }
15903         }
15904     }
15905
15906   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
15907 }
15908
15909 /* Parse a pure-specifier.
15910
15911    pure-specifier:
15912      = 0
15913
15914    Returns INTEGER_ZERO_NODE if a pure specifier is found.
15915    Otherwise, ERROR_MARK_NODE is returned.  */
15916
15917 static tree
15918 cp_parser_pure_specifier (cp_parser* parser)
15919 {
15920   cp_token *token;
15921
15922   /* Look for the `=' token.  */
15923   if (!cp_parser_require (parser, CPP_EQ, "%<=%>"))
15924     return error_mark_node;
15925   /* Look for the `0' token.  */
15926   token = cp_lexer_consume_token (parser->lexer);
15927
15928   /* Accept = default or = delete in c++0x mode.  */
15929   if (token->keyword == RID_DEFAULT
15930       || token->keyword == RID_DELETE)
15931     {
15932       maybe_warn_cpp0x ("defaulted and deleted functions");
15933       return token->u.value;
15934     }
15935
15936   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
15937   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
15938     {
15939       cp_parser_error (parser,
15940                        "invalid pure specifier (only %<= 0%> is allowed)");
15941       cp_parser_skip_to_end_of_statement (parser);
15942       return error_mark_node;
15943     }
15944   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
15945     {
15946       error ("%Htemplates may not be %<virtual%>", &token->location);
15947       return error_mark_node;
15948     }
15949
15950   return integer_zero_node;
15951 }
15952
15953 /* Parse a constant-initializer.
15954
15955    constant-initializer:
15956      = constant-expression
15957
15958    Returns a representation of the constant-expression.  */
15959
15960 static tree
15961 cp_parser_constant_initializer (cp_parser* parser)
15962 {
15963   /* Look for the `=' token.  */
15964   if (!cp_parser_require (parser, CPP_EQ, "%<=%>"))
15965     return error_mark_node;
15966
15967   /* It is invalid to write:
15968
15969        struct S { static const int i = { 7 }; };
15970
15971      */
15972   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
15973     {
15974       cp_parser_error (parser,
15975                        "a brace-enclosed initializer is not allowed here");
15976       /* Consume the opening brace.  */
15977       cp_lexer_consume_token (parser->lexer);
15978       /* Skip the initializer.  */
15979       cp_parser_skip_to_closing_brace (parser);
15980       /* Look for the trailing `}'.  */
15981       cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
15982
15983       return error_mark_node;
15984     }
15985
15986   return cp_parser_constant_expression (parser,
15987                                         /*allow_non_constant=*/false,
15988                                         NULL);
15989 }
15990
15991 /* Derived classes [gram.class.derived] */
15992
15993 /* Parse a base-clause.
15994
15995    base-clause:
15996      : base-specifier-list
15997
15998    base-specifier-list:
15999      base-specifier ... [opt]
16000      base-specifier-list , base-specifier ... [opt]
16001
16002    Returns a TREE_LIST representing the base-classes, in the order in
16003    which they were declared.  The representation of each node is as
16004    described by cp_parser_base_specifier.
16005
16006    In the case that no bases are specified, this function will return
16007    NULL_TREE, not ERROR_MARK_NODE.  */
16008
16009 static tree
16010 cp_parser_base_clause (cp_parser* parser)
16011 {
16012   tree bases = NULL_TREE;
16013
16014   /* Look for the `:' that begins the list.  */
16015   cp_parser_require (parser, CPP_COLON, "%<:%>");
16016
16017   /* Scan the base-specifier-list.  */
16018   while (true)
16019     {
16020       cp_token *token;
16021       tree base;
16022       bool pack_expansion_p = false;
16023
16024       /* Look for the base-specifier.  */
16025       base = cp_parser_base_specifier (parser);
16026       /* Look for the (optional) ellipsis. */
16027       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
16028         {
16029           /* Consume the `...'. */
16030           cp_lexer_consume_token (parser->lexer);
16031
16032           pack_expansion_p = true;
16033         }
16034
16035       /* Add BASE to the front of the list.  */
16036       if (base != error_mark_node)
16037         {
16038           if (pack_expansion_p)
16039             /* Make this a pack expansion type. */
16040             TREE_VALUE (base) = make_pack_expansion (TREE_VALUE (base));
16041           
16042
16043           if (!check_for_bare_parameter_packs (TREE_VALUE (base)))
16044             {
16045               TREE_CHAIN (base) = bases;
16046               bases = base;
16047             }
16048         }
16049       /* Peek at the next token.  */
16050       token = cp_lexer_peek_token (parser->lexer);
16051       /* If it's not a comma, then the list is complete.  */
16052       if (token->type != CPP_COMMA)
16053         break;
16054       /* Consume the `,'.  */
16055       cp_lexer_consume_token (parser->lexer);
16056     }
16057
16058   /* PARSER->SCOPE may still be non-NULL at this point, if the last
16059      base class had a qualified name.  However, the next name that
16060      appears is certainly not qualified.  */
16061   parser->scope = NULL_TREE;
16062   parser->qualifying_scope = NULL_TREE;
16063   parser->object_scope = NULL_TREE;
16064
16065   return nreverse (bases);
16066 }
16067
16068 /* Parse a base-specifier.
16069
16070    base-specifier:
16071      :: [opt] nested-name-specifier [opt] class-name
16072      virtual access-specifier [opt] :: [opt] nested-name-specifier
16073        [opt] class-name
16074      access-specifier virtual [opt] :: [opt] nested-name-specifier
16075        [opt] class-name
16076
16077    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
16078    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
16079    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
16080    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
16081
16082 static tree
16083 cp_parser_base_specifier (cp_parser* parser)
16084 {
16085   cp_token *token;
16086   bool done = false;
16087   bool virtual_p = false;
16088   bool duplicate_virtual_error_issued_p = false;
16089   bool duplicate_access_error_issued_p = false;
16090   bool class_scope_p, template_p;
16091   tree access = access_default_node;
16092   tree type;
16093
16094   /* Process the optional `virtual' and `access-specifier'.  */
16095   while (!done)
16096     {
16097       /* Peek at the next token.  */
16098       token = cp_lexer_peek_token (parser->lexer);
16099       /* Process `virtual'.  */
16100       switch (token->keyword)
16101         {
16102         case RID_VIRTUAL:
16103           /* If `virtual' appears more than once, issue an error.  */
16104           if (virtual_p && !duplicate_virtual_error_issued_p)
16105             {
16106               cp_parser_error (parser,
16107                                "%<virtual%> specified more than once in base-specified");
16108               duplicate_virtual_error_issued_p = true;
16109             }
16110
16111           virtual_p = true;
16112
16113           /* Consume the `virtual' token.  */
16114           cp_lexer_consume_token (parser->lexer);
16115
16116           break;
16117
16118         case RID_PUBLIC:
16119         case RID_PROTECTED:
16120         case RID_PRIVATE:
16121           /* If more than one access specifier appears, issue an
16122              error.  */
16123           if (access != access_default_node
16124               && !duplicate_access_error_issued_p)
16125             {
16126               cp_parser_error (parser,
16127                                "more than one access specifier in base-specified");
16128               duplicate_access_error_issued_p = true;
16129             }
16130
16131           access = ridpointers[(int) token->keyword];
16132
16133           /* Consume the access-specifier.  */
16134           cp_lexer_consume_token (parser->lexer);
16135
16136           break;
16137
16138         default:
16139           done = true;
16140           break;
16141         }
16142     }
16143   /* It is not uncommon to see programs mechanically, erroneously, use
16144      the 'typename' keyword to denote (dependent) qualified types
16145      as base classes.  */
16146   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
16147     {
16148       token = cp_lexer_peek_token (parser->lexer);
16149       if (!processing_template_decl)
16150         error ("%Hkeyword %<typename%> not allowed outside of templates",
16151                &token->location);
16152       else
16153         error ("%Hkeyword %<typename%> not allowed in this context "
16154                "(the base class is implicitly a type)",
16155                &token->location);
16156       cp_lexer_consume_token (parser->lexer);
16157     }
16158
16159   /* Look for the optional `::' operator.  */
16160   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
16161   /* Look for the nested-name-specifier.  The simplest way to
16162      implement:
16163
16164        [temp.res]
16165
16166        The keyword `typename' is not permitted in a base-specifier or
16167        mem-initializer; in these contexts a qualified name that
16168        depends on a template-parameter is implicitly assumed to be a
16169        type name.
16170
16171      is to pretend that we have seen the `typename' keyword at this
16172      point.  */
16173   cp_parser_nested_name_specifier_opt (parser,
16174                                        /*typename_keyword_p=*/true,
16175                                        /*check_dependency_p=*/true,
16176                                        typename_type,
16177                                        /*is_declaration=*/true);
16178   /* If the base class is given by a qualified name, assume that names
16179      we see are type names or templates, as appropriate.  */
16180   class_scope_p = (parser->scope && TYPE_P (parser->scope));
16181   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
16182
16183   /* Finally, look for the class-name.  */
16184   type = cp_parser_class_name (parser,
16185                                class_scope_p,
16186                                template_p,
16187                                typename_type,
16188                                /*check_dependency_p=*/true,
16189                                /*class_head_p=*/false,
16190                                /*is_declaration=*/true);
16191
16192   if (type == error_mark_node)
16193     return error_mark_node;
16194
16195   return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
16196 }
16197
16198 /* Exception handling [gram.exception] */
16199
16200 /* Parse an (optional) exception-specification.
16201
16202    exception-specification:
16203      throw ( type-id-list [opt] )
16204
16205    Returns a TREE_LIST representing the exception-specification.  The
16206    TREE_VALUE of each node is a type.  */
16207
16208 static tree
16209 cp_parser_exception_specification_opt (cp_parser* parser)
16210 {
16211   cp_token *token;
16212   tree type_id_list;
16213
16214   /* Peek at the next token.  */
16215   token = cp_lexer_peek_token (parser->lexer);
16216   /* If it's not `throw', then there's no exception-specification.  */
16217   if (!cp_parser_is_keyword (token, RID_THROW))
16218     return NULL_TREE;
16219
16220   /* Consume the `throw'.  */
16221   cp_lexer_consume_token (parser->lexer);
16222
16223   /* Look for the `('.  */
16224   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16225
16226   /* Peek at the next token.  */
16227   token = cp_lexer_peek_token (parser->lexer);
16228   /* If it's not a `)', then there is a type-id-list.  */
16229   if (token->type != CPP_CLOSE_PAREN)
16230     {
16231       const char *saved_message;
16232
16233       /* Types may not be defined in an exception-specification.  */
16234       saved_message = parser->type_definition_forbidden_message;
16235       parser->type_definition_forbidden_message
16236         = "types may not be defined in an exception-specification";
16237       /* Parse the type-id-list.  */
16238       type_id_list = cp_parser_type_id_list (parser);
16239       /* Restore the saved message.  */
16240       parser->type_definition_forbidden_message = saved_message;
16241     }
16242   else
16243     type_id_list = empty_except_spec;
16244
16245   /* Look for the `)'.  */
16246   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16247
16248   return type_id_list;
16249 }
16250
16251 /* Parse an (optional) type-id-list.
16252
16253    type-id-list:
16254      type-id ... [opt]
16255      type-id-list , type-id ... [opt]
16256
16257    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
16258    in the order that the types were presented.  */
16259
16260 static tree
16261 cp_parser_type_id_list (cp_parser* parser)
16262 {
16263   tree types = NULL_TREE;
16264
16265   while (true)
16266     {
16267       cp_token *token;
16268       tree type;
16269
16270       /* Get the next type-id.  */
16271       type = cp_parser_type_id (parser);
16272       /* Parse the optional ellipsis. */
16273       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
16274         {
16275           /* Consume the `...'. */
16276           cp_lexer_consume_token (parser->lexer);
16277
16278           /* Turn the type into a pack expansion expression. */
16279           type = make_pack_expansion (type);
16280         }
16281       /* Add it to the list.  */
16282       types = add_exception_specifier (types, type, /*complain=*/1);
16283       /* Peek at the next token.  */
16284       token = cp_lexer_peek_token (parser->lexer);
16285       /* If it is not a `,', we are done.  */
16286       if (token->type != CPP_COMMA)
16287         break;
16288       /* Consume the `,'.  */
16289       cp_lexer_consume_token (parser->lexer);
16290     }
16291
16292   return nreverse (types);
16293 }
16294
16295 /* Parse a try-block.
16296
16297    try-block:
16298      try compound-statement handler-seq  */
16299
16300 static tree
16301 cp_parser_try_block (cp_parser* parser)
16302 {
16303   tree try_block;
16304
16305   cp_parser_require_keyword (parser, RID_TRY, "%<try%>");
16306   try_block = begin_try_block ();
16307   cp_parser_compound_statement (parser, NULL, true);
16308   finish_try_block (try_block);
16309   cp_parser_handler_seq (parser);
16310   finish_handler_sequence (try_block);
16311
16312   return try_block;
16313 }
16314
16315 /* Parse a function-try-block.
16316
16317    function-try-block:
16318      try ctor-initializer [opt] function-body handler-seq  */
16319
16320 static bool
16321 cp_parser_function_try_block (cp_parser* parser)
16322 {
16323   tree compound_stmt;
16324   tree try_block;
16325   bool ctor_initializer_p;
16326
16327   /* Look for the `try' keyword.  */
16328   if (!cp_parser_require_keyword (parser, RID_TRY, "%<try%>"))
16329     return false;
16330   /* Let the rest of the front end know where we are.  */
16331   try_block = begin_function_try_block (&compound_stmt);
16332   /* Parse the function-body.  */
16333   ctor_initializer_p
16334     = cp_parser_ctor_initializer_opt_and_function_body (parser);
16335   /* We're done with the `try' part.  */
16336   finish_function_try_block (try_block);
16337   /* Parse the handlers.  */
16338   cp_parser_handler_seq (parser);
16339   /* We're done with the handlers.  */
16340   finish_function_handler_sequence (try_block, compound_stmt);
16341
16342   return ctor_initializer_p;
16343 }
16344
16345 /* Parse a handler-seq.
16346
16347    handler-seq:
16348      handler handler-seq [opt]  */
16349
16350 static void
16351 cp_parser_handler_seq (cp_parser* parser)
16352 {
16353   while (true)
16354     {
16355       cp_token *token;
16356
16357       /* Parse the handler.  */
16358       cp_parser_handler (parser);
16359       /* Peek at the next token.  */
16360       token = cp_lexer_peek_token (parser->lexer);
16361       /* If it's not `catch' then there are no more handlers.  */
16362       if (!cp_parser_is_keyword (token, RID_CATCH))
16363         break;
16364     }
16365 }
16366
16367 /* Parse a handler.
16368
16369    handler:
16370      catch ( exception-declaration ) compound-statement  */
16371
16372 static void
16373 cp_parser_handler (cp_parser* parser)
16374 {
16375   tree handler;
16376   tree declaration;
16377
16378   cp_parser_require_keyword (parser, RID_CATCH, "%<catch%>");
16379   handler = begin_handler ();
16380   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16381   declaration = cp_parser_exception_declaration (parser);
16382   finish_handler_parms (declaration, handler);
16383   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16384   cp_parser_compound_statement (parser, NULL, false);
16385   finish_handler (handler);
16386 }
16387
16388 /* Parse an exception-declaration.
16389
16390    exception-declaration:
16391      type-specifier-seq declarator
16392      type-specifier-seq abstract-declarator
16393      type-specifier-seq
16394      ...
16395
16396    Returns a VAR_DECL for the declaration, or NULL_TREE if the
16397    ellipsis variant is used.  */
16398
16399 static tree
16400 cp_parser_exception_declaration (cp_parser* parser)
16401 {
16402   cp_decl_specifier_seq type_specifiers;
16403   cp_declarator *declarator;
16404   const char *saved_message;
16405
16406   /* If it's an ellipsis, it's easy to handle.  */
16407   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
16408     {
16409       /* Consume the `...' token.  */
16410       cp_lexer_consume_token (parser->lexer);
16411       return NULL_TREE;
16412     }
16413
16414   /* Types may not be defined in exception-declarations.  */
16415   saved_message = parser->type_definition_forbidden_message;
16416   parser->type_definition_forbidden_message
16417     = "types may not be defined in exception-declarations";
16418
16419   /* Parse the type-specifier-seq.  */
16420   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
16421                                 &type_specifiers);
16422   /* If it's a `)', then there is no declarator.  */
16423   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
16424     declarator = NULL;
16425   else
16426     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
16427                                        /*ctor_dtor_or_conv_p=*/NULL,
16428                                        /*parenthesized_p=*/NULL,
16429                                        /*member_p=*/false);
16430
16431   /* Restore the saved message.  */
16432   parser->type_definition_forbidden_message = saved_message;
16433
16434   if (!type_specifiers.any_specifiers_p)
16435     return error_mark_node;
16436
16437   return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
16438 }
16439
16440 /* Parse a throw-expression.
16441
16442    throw-expression:
16443      throw assignment-expression [opt]
16444
16445    Returns a THROW_EXPR representing the throw-expression.  */
16446
16447 static tree
16448 cp_parser_throw_expression (cp_parser* parser)
16449 {
16450   tree expression;
16451   cp_token* token;
16452
16453   cp_parser_require_keyword (parser, RID_THROW, "%<throw%>");
16454   token = cp_lexer_peek_token (parser->lexer);
16455   /* Figure out whether or not there is an assignment-expression
16456      following the "throw" keyword.  */
16457   if (token->type == CPP_COMMA
16458       || token->type == CPP_SEMICOLON
16459       || token->type == CPP_CLOSE_PAREN
16460       || token->type == CPP_CLOSE_SQUARE
16461       || token->type == CPP_CLOSE_BRACE
16462       || token->type == CPP_COLON)
16463     expression = NULL_TREE;
16464   else
16465     expression = cp_parser_assignment_expression (parser,
16466                                                   /*cast_p=*/false);
16467
16468   return build_throw (expression);
16469 }
16470
16471 /* GNU Extensions */
16472
16473 /* Parse an (optional) asm-specification.
16474
16475    asm-specification:
16476      asm ( string-literal )
16477
16478    If the asm-specification is present, returns a STRING_CST
16479    corresponding to the string-literal.  Otherwise, returns
16480    NULL_TREE.  */
16481
16482 static tree
16483 cp_parser_asm_specification_opt (cp_parser* parser)
16484 {
16485   cp_token *token;
16486   tree asm_specification;
16487
16488   /* Peek at the next token.  */
16489   token = cp_lexer_peek_token (parser->lexer);
16490   /* If the next token isn't the `asm' keyword, then there's no
16491      asm-specification.  */
16492   if (!cp_parser_is_keyword (token, RID_ASM))
16493     return NULL_TREE;
16494
16495   /* Consume the `asm' token.  */
16496   cp_lexer_consume_token (parser->lexer);
16497   /* Look for the `('.  */
16498   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16499
16500   /* Look for the string-literal.  */
16501   asm_specification = cp_parser_string_literal (parser, false, false);
16502
16503   /* Look for the `)'.  */
16504   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16505
16506   return asm_specification;
16507 }
16508
16509 /* Parse an asm-operand-list.
16510
16511    asm-operand-list:
16512      asm-operand
16513      asm-operand-list , asm-operand
16514
16515    asm-operand:
16516      string-literal ( expression )
16517      [ string-literal ] string-literal ( expression )
16518
16519    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
16520    each node is the expression.  The TREE_PURPOSE is itself a
16521    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
16522    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
16523    is a STRING_CST for the string literal before the parenthesis. Returns
16524    ERROR_MARK_NODE if any of the operands are invalid.  */
16525
16526 static tree
16527 cp_parser_asm_operand_list (cp_parser* parser)
16528 {
16529   tree asm_operands = NULL_TREE;
16530   bool invalid_operands = false;
16531
16532   while (true)
16533     {
16534       tree string_literal;
16535       tree expression;
16536       tree name;
16537
16538       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
16539         {
16540           /* Consume the `[' token.  */
16541           cp_lexer_consume_token (parser->lexer);
16542           /* Read the operand name.  */
16543           name = cp_parser_identifier (parser);
16544           if (name != error_mark_node)
16545             name = build_string (IDENTIFIER_LENGTH (name),
16546                                  IDENTIFIER_POINTER (name));
16547           /* Look for the closing `]'.  */
16548           cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
16549         }
16550       else
16551         name = NULL_TREE;
16552       /* Look for the string-literal.  */
16553       string_literal = cp_parser_string_literal (parser, false, false);
16554
16555       /* Look for the `('.  */
16556       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16557       /* Parse the expression.  */
16558       expression = cp_parser_expression (parser, /*cast_p=*/false);
16559       /* Look for the `)'.  */
16560       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16561
16562       if (name == error_mark_node 
16563           || string_literal == error_mark_node 
16564           || expression == error_mark_node)
16565         invalid_operands = true;
16566
16567       /* Add this operand to the list.  */
16568       asm_operands = tree_cons (build_tree_list (name, string_literal),
16569                                 expression,
16570                                 asm_operands);
16571       /* If the next token is not a `,', there are no more
16572          operands.  */
16573       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
16574         break;
16575       /* Consume the `,'.  */
16576       cp_lexer_consume_token (parser->lexer);
16577     }
16578
16579   return invalid_operands ? error_mark_node : nreverse (asm_operands);
16580 }
16581
16582 /* Parse an asm-clobber-list.
16583
16584    asm-clobber-list:
16585      string-literal
16586      asm-clobber-list , string-literal
16587
16588    Returns a TREE_LIST, indicating the clobbers in the order that they
16589    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
16590
16591 static tree
16592 cp_parser_asm_clobber_list (cp_parser* parser)
16593 {
16594   tree clobbers = NULL_TREE;
16595
16596   while (true)
16597     {
16598       tree string_literal;
16599
16600       /* Look for the string literal.  */
16601       string_literal = cp_parser_string_literal (parser, false, false);
16602       /* Add it to the list.  */
16603       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
16604       /* If the next token is not a `,', then the list is
16605          complete.  */
16606       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
16607         break;
16608       /* Consume the `,' token.  */
16609       cp_lexer_consume_token (parser->lexer);
16610     }
16611
16612   return clobbers;
16613 }
16614
16615 /* Parse an (optional) series of attributes.
16616
16617    attributes:
16618      attributes attribute
16619
16620    attribute:
16621      __attribute__ (( attribute-list [opt] ))
16622
16623    The return value is as for cp_parser_attribute_list.  */
16624
16625 static tree
16626 cp_parser_attributes_opt (cp_parser* parser)
16627 {
16628   tree attributes = NULL_TREE;
16629
16630   while (true)
16631     {
16632       cp_token *token;
16633       tree attribute_list;
16634
16635       /* Peek at the next token.  */
16636       token = cp_lexer_peek_token (parser->lexer);
16637       /* If it's not `__attribute__', then we're done.  */
16638       if (token->keyword != RID_ATTRIBUTE)
16639         break;
16640
16641       /* Consume the `__attribute__' keyword.  */
16642       cp_lexer_consume_token (parser->lexer);
16643       /* Look for the two `(' tokens.  */
16644       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16645       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16646
16647       /* Peek at the next token.  */
16648       token = cp_lexer_peek_token (parser->lexer);
16649       if (token->type != CPP_CLOSE_PAREN)
16650         /* Parse the attribute-list.  */
16651         attribute_list = cp_parser_attribute_list (parser);
16652       else
16653         /* If the next token is a `)', then there is no attribute
16654            list.  */
16655         attribute_list = NULL;
16656
16657       /* Look for the two `)' tokens.  */
16658       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16659       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16660
16661       /* Add these new attributes to the list.  */
16662       attributes = chainon (attributes, attribute_list);
16663     }
16664
16665   return attributes;
16666 }
16667
16668 /* Parse an attribute-list.
16669
16670    attribute-list:
16671      attribute
16672      attribute-list , attribute
16673
16674    attribute:
16675      identifier
16676      identifier ( identifier )
16677      identifier ( identifier , expression-list )
16678      identifier ( expression-list )
16679
16680    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
16681    to an attribute.  The TREE_PURPOSE of each node is the identifier
16682    indicating which attribute is in use.  The TREE_VALUE represents
16683    the arguments, if any.  */
16684
16685 static tree
16686 cp_parser_attribute_list (cp_parser* parser)
16687 {
16688   tree attribute_list = NULL_TREE;
16689   bool save_translate_strings_p = parser->translate_strings_p;
16690
16691   parser->translate_strings_p = false;
16692   while (true)
16693     {
16694       cp_token *token;
16695       tree identifier;
16696       tree attribute;
16697
16698       /* Look for the identifier.  We also allow keywords here; for
16699          example `__attribute__ ((const))' is legal.  */
16700       token = cp_lexer_peek_token (parser->lexer);
16701       if (token->type == CPP_NAME
16702           || token->type == CPP_KEYWORD)
16703         {
16704           tree arguments = NULL_TREE;
16705
16706           /* Consume the token.  */
16707           token = cp_lexer_consume_token (parser->lexer);
16708
16709           /* Save away the identifier that indicates which attribute
16710              this is.  */
16711           identifier = token->u.value;
16712           attribute = build_tree_list (identifier, NULL_TREE);
16713
16714           /* Peek at the next token.  */
16715           token = cp_lexer_peek_token (parser->lexer);
16716           /* If it's an `(', then parse the attribute arguments.  */
16717           if (token->type == CPP_OPEN_PAREN)
16718             {
16719               arguments = cp_parser_parenthesized_expression_list
16720                           (parser, true, /*cast_p=*/false,
16721                            /*allow_expansion_p=*/false,
16722                            /*non_constant_p=*/NULL);
16723               /* Save the arguments away.  */
16724               TREE_VALUE (attribute) = arguments;
16725             }
16726
16727           if (arguments != error_mark_node)
16728             {
16729               /* Add this attribute to the list.  */
16730               TREE_CHAIN (attribute) = attribute_list;
16731               attribute_list = attribute;
16732             }
16733
16734           token = cp_lexer_peek_token (parser->lexer);
16735         }
16736       /* Now, look for more attributes.  If the next token isn't a
16737          `,', we're done.  */
16738       if (token->type != CPP_COMMA)
16739         break;
16740
16741       /* Consume the comma and keep going.  */
16742       cp_lexer_consume_token (parser->lexer);
16743     }
16744   parser->translate_strings_p = save_translate_strings_p;
16745
16746   /* We built up the list in reverse order.  */
16747   return nreverse (attribute_list);
16748 }
16749
16750 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
16751    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
16752    current value of the PEDANTIC flag, regardless of whether or not
16753    the `__extension__' keyword is present.  The caller is responsible
16754    for restoring the value of the PEDANTIC flag.  */
16755
16756 static bool
16757 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
16758 {
16759   /* Save the old value of the PEDANTIC flag.  */
16760   *saved_pedantic = pedantic;
16761
16762   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
16763     {
16764       /* Consume the `__extension__' token.  */
16765       cp_lexer_consume_token (parser->lexer);
16766       /* We're not being pedantic while the `__extension__' keyword is
16767          in effect.  */
16768       pedantic = 0;
16769
16770       return true;
16771     }
16772
16773   return false;
16774 }
16775
16776 /* Parse a label declaration.
16777
16778    label-declaration:
16779      __label__ label-declarator-seq ;
16780
16781    label-declarator-seq:
16782      identifier , label-declarator-seq
16783      identifier  */
16784
16785 static void
16786 cp_parser_label_declaration (cp_parser* parser)
16787 {
16788   /* Look for the `__label__' keyword.  */
16789   cp_parser_require_keyword (parser, RID_LABEL, "%<__label__%>");
16790
16791   while (true)
16792     {
16793       tree identifier;
16794
16795       /* Look for an identifier.  */
16796       identifier = cp_parser_identifier (parser);
16797       /* If we failed, stop.  */
16798       if (identifier == error_mark_node)
16799         break;
16800       /* Declare it as a label.  */
16801       finish_label_decl (identifier);
16802       /* If the next token is a `;', stop.  */
16803       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
16804         break;
16805       /* Look for the `,' separating the label declarations.  */
16806       cp_parser_require (parser, CPP_COMMA, "%<,%>");
16807     }
16808
16809   /* Look for the final `;'.  */
16810   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
16811 }
16812
16813 /* Support Functions */
16814
16815 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
16816    NAME should have one of the representations used for an
16817    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
16818    is returned.  If PARSER->SCOPE is a dependent type, then a
16819    SCOPE_REF is returned.
16820
16821    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
16822    returned; the name was already resolved when the TEMPLATE_ID_EXPR
16823    was formed.  Abstractly, such entities should not be passed to this
16824    function, because they do not need to be looked up, but it is
16825    simpler to check for this special case here, rather than at the
16826    call-sites.
16827
16828    In cases not explicitly covered above, this function returns a
16829    DECL, OVERLOAD, or baselink representing the result of the lookup.
16830    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
16831    is returned.
16832
16833    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
16834    (e.g., "struct") that was used.  In that case bindings that do not
16835    refer to types are ignored.
16836
16837    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
16838    ignored.
16839
16840    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
16841    are ignored.
16842
16843    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
16844    types.
16845
16846    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
16847    TREE_LIST of candidates if name-lookup results in an ambiguity, and
16848    NULL_TREE otherwise.  */
16849
16850 static tree
16851 cp_parser_lookup_name (cp_parser *parser, tree name,
16852                        enum tag_types tag_type,
16853                        bool is_template,
16854                        bool is_namespace,
16855                        bool check_dependency,
16856                        tree *ambiguous_decls,
16857                        location_t name_location)
16858 {
16859   int flags = 0;
16860   tree decl;
16861   tree object_type = parser->context->object_type;
16862
16863   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
16864     flags |= LOOKUP_COMPLAIN;
16865
16866   /* Assume that the lookup will be unambiguous.  */
16867   if (ambiguous_decls)
16868     *ambiguous_decls = NULL_TREE;
16869
16870   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
16871      no longer valid.  Note that if we are parsing tentatively, and
16872      the parse fails, OBJECT_TYPE will be automatically restored.  */
16873   parser->context->object_type = NULL_TREE;
16874
16875   if (name == error_mark_node)
16876     return error_mark_node;
16877
16878   /* A template-id has already been resolved; there is no lookup to
16879      do.  */
16880   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
16881     return name;
16882   if (BASELINK_P (name))
16883     {
16884       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
16885                   == TEMPLATE_ID_EXPR);
16886       return name;
16887     }
16888
16889   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
16890      it should already have been checked to make sure that the name
16891      used matches the type being destroyed.  */
16892   if (TREE_CODE (name) == BIT_NOT_EXPR)
16893     {
16894       tree type;
16895
16896       /* Figure out to which type this destructor applies.  */
16897       if (parser->scope)
16898         type = parser->scope;
16899       else if (object_type)
16900         type = object_type;
16901       else
16902         type = current_class_type;
16903       /* If that's not a class type, there is no destructor.  */
16904       if (!type || !CLASS_TYPE_P (type))
16905         return error_mark_node;
16906       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
16907         lazily_declare_fn (sfk_destructor, type);
16908       if (!CLASSTYPE_DESTRUCTORS (type))
16909           return error_mark_node;
16910       /* If it was a class type, return the destructor.  */
16911       return CLASSTYPE_DESTRUCTORS (type);
16912     }
16913
16914   /* By this point, the NAME should be an ordinary identifier.  If
16915      the id-expression was a qualified name, the qualifying scope is
16916      stored in PARSER->SCOPE at this point.  */
16917   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
16918
16919   /* Perform the lookup.  */
16920   if (parser->scope)
16921     {
16922       bool dependent_p;
16923
16924       if (parser->scope == error_mark_node)
16925         return error_mark_node;
16926
16927       /* If the SCOPE is dependent, the lookup must be deferred until
16928          the template is instantiated -- unless we are explicitly
16929          looking up names in uninstantiated templates.  Even then, we
16930          cannot look up the name if the scope is not a class type; it
16931          might, for example, be a template type parameter.  */
16932       dependent_p = (TYPE_P (parser->scope)
16933                      && !(parser->in_declarator_p
16934                           && currently_open_class (parser->scope))
16935                      && dependent_type_p (parser->scope));
16936       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
16937            && dependent_p)
16938         {
16939           if (tag_type)
16940             {
16941               tree type;
16942
16943               /* The resolution to Core Issue 180 says that `struct
16944                  A::B' should be considered a type-name, even if `A'
16945                  is dependent.  */
16946               type = make_typename_type (parser->scope, name, tag_type,
16947                                          /*complain=*/tf_error);
16948               decl = TYPE_NAME (type);
16949             }
16950           else if (is_template
16951                    && (cp_parser_next_token_ends_template_argument_p (parser)
16952                        || cp_lexer_next_token_is (parser->lexer,
16953                                                   CPP_CLOSE_PAREN)))
16954             decl = make_unbound_class_template (parser->scope,
16955                                                 name, NULL_TREE,
16956                                                 /*complain=*/tf_error);
16957           else
16958             decl = build_qualified_name (/*type=*/NULL_TREE,
16959                                          parser->scope, name,
16960                                          is_template);
16961         }
16962       else
16963         {
16964           tree pushed_scope = NULL_TREE;
16965
16966           /* If PARSER->SCOPE is a dependent type, then it must be a
16967              class type, and we must not be checking dependencies;
16968              otherwise, we would have processed this lookup above.  So
16969              that PARSER->SCOPE is not considered a dependent base by
16970              lookup_member, we must enter the scope here.  */
16971           if (dependent_p)
16972             pushed_scope = push_scope (parser->scope);
16973           /* If the PARSER->SCOPE is a template specialization, it
16974              may be instantiated during name lookup.  In that case,
16975              errors may be issued.  Even if we rollback the current
16976              tentative parse, those errors are valid.  */
16977           decl = lookup_qualified_name (parser->scope, name,
16978                                         tag_type != none_type,
16979                                         /*complain=*/true);
16980
16981           /* If we have a single function from a using decl, pull it out.  */
16982           if (decl
16983               && TREE_CODE (decl) == OVERLOAD
16984               && !really_overloaded_fn (decl))
16985             decl = OVL_FUNCTION (decl);
16986
16987           if (pushed_scope)
16988             pop_scope (pushed_scope);
16989         }
16990       parser->qualifying_scope = parser->scope;
16991       parser->object_scope = NULL_TREE;
16992     }
16993   else if (object_type)
16994     {
16995       tree object_decl = NULL_TREE;
16996       /* Look up the name in the scope of the OBJECT_TYPE, unless the
16997          OBJECT_TYPE is not a class.  */
16998       if (CLASS_TYPE_P (object_type))
16999         /* If the OBJECT_TYPE is a template specialization, it may
17000            be instantiated during name lookup.  In that case, errors
17001            may be issued.  Even if we rollback the current tentative
17002            parse, those errors are valid.  */
17003         object_decl = lookup_member (object_type,
17004                                      name,
17005                                      /*protect=*/0,
17006                                      tag_type != none_type);
17007       /* Look it up in the enclosing context, too.  */
17008       decl = lookup_name_real (name, tag_type != none_type,
17009                                /*nonclass=*/0,
17010                                /*block_p=*/true, is_namespace, flags);
17011       parser->object_scope = object_type;
17012       parser->qualifying_scope = NULL_TREE;
17013       if (object_decl)
17014         decl = object_decl;
17015     }
17016   else
17017     {
17018       decl = lookup_name_real (name, tag_type != none_type,
17019                                /*nonclass=*/0,
17020                                /*block_p=*/true, is_namespace, flags);
17021       parser->qualifying_scope = NULL_TREE;
17022       parser->object_scope = NULL_TREE;
17023     }
17024
17025   /* If the lookup failed, let our caller know.  */
17026   if (!decl || decl == error_mark_node)
17027     return error_mark_node;
17028
17029   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
17030   if (TREE_CODE (decl) == TREE_LIST)
17031     {
17032       if (ambiguous_decls)
17033         *ambiguous_decls = decl;
17034       /* The error message we have to print is too complicated for
17035          cp_parser_error, so we incorporate its actions directly.  */
17036       if (!cp_parser_simulate_error (parser))
17037         {
17038           error ("%Hreference to %qD is ambiguous",
17039                  &name_location, name);
17040           print_candidates (decl);
17041         }
17042       return error_mark_node;
17043     }
17044
17045   gcc_assert (DECL_P (decl)
17046               || TREE_CODE (decl) == OVERLOAD
17047               || TREE_CODE (decl) == SCOPE_REF
17048               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
17049               || BASELINK_P (decl));
17050
17051   /* If we have resolved the name of a member declaration, check to
17052      see if the declaration is accessible.  When the name resolves to
17053      set of overloaded functions, accessibility is checked when
17054      overload resolution is done.
17055
17056      During an explicit instantiation, access is not checked at all,
17057      as per [temp.explicit].  */
17058   if (DECL_P (decl))
17059     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
17060
17061   return decl;
17062 }
17063
17064 /* Like cp_parser_lookup_name, but for use in the typical case where
17065    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
17066    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
17067
17068 static tree
17069 cp_parser_lookup_name_simple (cp_parser* parser, tree name, location_t location)
17070 {
17071   return cp_parser_lookup_name (parser, name,
17072                                 none_type,
17073                                 /*is_template=*/false,
17074                                 /*is_namespace=*/false,
17075                                 /*check_dependency=*/true,
17076                                 /*ambiguous_decls=*/NULL,
17077                                 location);
17078 }
17079
17080 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
17081    the current context, return the TYPE_DECL.  If TAG_NAME_P is
17082    true, the DECL indicates the class being defined in a class-head,
17083    or declared in an elaborated-type-specifier.
17084
17085    Otherwise, return DECL.  */
17086
17087 static tree
17088 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
17089 {
17090   /* If the TEMPLATE_DECL is being declared as part of a class-head,
17091      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
17092
17093        struct A {
17094          template <typename T> struct B;
17095        };
17096
17097        template <typename T> struct A::B {};
17098
17099      Similarly, in an elaborated-type-specifier:
17100
17101        namespace N { struct X{}; }
17102
17103        struct A {
17104          template <typename T> friend struct N::X;
17105        };
17106
17107      However, if the DECL refers to a class type, and we are in
17108      the scope of the class, then the name lookup automatically
17109      finds the TYPE_DECL created by build_self_reference rather
17110      than a TEMPLATE_DECL.  For example, in:
17111
17112        template <class T> struct S {
17113          S s;
17114        };
17115
17116      there is no need to handle such case.  */
17117
17118   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
17119     return DECL_TEMPLATE_RESULT (decl);
17120
17121   return decl;
17122 }
17123
17124 /* If too many, or too few, template-parameter lists apply to the
17125    declarator, issue an error message.  Returns TRUE if all went well,
17126    and FALSE otherwise.  */
17127
17128 static bool
17129 cp_parser_check_declarator_template_parameters (cp_parser* parser,
17130                                                 cp_declarator *declarator,
17131                                                 location_t declarator_location)
17132 {
17133   unsigned num_templates;
17134
17135   /* We haven't seen any classes that involve template parameters yet.  */
17136   num_templates = 0;
17137
17138   switch (declarator->kind)
17139     {
17140     case cdk_id:
17141       if (declarator->u.id.qualifying_scope)
17142         {
17143           tree scope;
17144           tree member;
17145
17146           scope = declarator->u.id.qualifying_scope;
17147           member = declarator->u.id.unqualified_name;
17148
17149           while (scope && CLASS_TYPE_P (scope))
17150             {
17151               /* You're supposed to have one `template <...>'
17152                  for every template class, but you don't need one
17153                  for a full specialization.  For example:
17154
17155                  template <class T> struct S{};
17156                  template <> struct S<int> { void f(); };
17157                  void S<int>::f () {}
17158
17159                  is correct; there shouldn't be a `template <>' for
17160                  the definition of `S<int>::f'.  */
17161               if (!CLASSTYPE_TEMPLATE_INFO (scope))
17162                 /* If SCOPE does not have template information of any
17163                    kind, then it is not a template, nor is it nested
17164                    within a template.  */
17165                 break;
17166               if (explicit_class_specialization_p (scope))
17167                 break;
17168               if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
17169                 ++num_templates;
17170
17171               scope = TYPE_CONTEXT (scope);
17172             }
17173         }
17174       else if (TREE_CODE (declarator->u.id.unqualified_name)
17175                == TEMPLATE_ID_EXPR)
17176         /* If the DECLARATOR has the form `X<y>' then it uses one
17177            additional level of template parameters.  */
17178         ++num_templates;
17179
17180       return cp_parser_check_template_parameters (parser,
17181                                                   num_templates,
17182                                                   declarator_location);
17183
17184     case cdk_function:
17185     case cdk_array:
17186     case cdk_pointer:
17187     case cdk_reference:
17188     case cdk_ptrmem:
17189       return (cp_parser_check_declarator_template_parameters
17190               (parser, declarator->declarator, declarator_location));
17191
17192     case cdk_error:
17193       return true;
17194
17195     default:
17196       gcc_unreachable ();
17197     }
17198   return false;
17199 }
17200
17201 /* NUM_TEMPLATES were used in the current declaration.  If that is
17202    invalid, return FALSE and issue an error messages.  Otherwise,
17203    return TRUE.  */
17204
17205 static bool
17206 cp_parser_check_template_parameters (cp_parser* parser,
17207                                      unsigned num_templates,
17208                                      location_t location)
17209 {
17210   /* If there are more template classes than parameter lists, we have
17211      something like:
17212
17213        template <class T> void S<T>::R<T>::f ();  */
17214   if (parser->num_template_parameter_lists < num_templates)
17215     {
17216       error ("%Htoo few template-parameter-lists", &location);
17217       return false;
17218     }
17219   /* If there are the same number of template classes and parameter
17220      lists, that's OK.  */
17221   if (parser->num_template_parameter_lists == num_templates)
17222     return true;
17223   /* If there are more, but only one more, then we are referring to a
17224      member template.  That's OK too.  */
17225   if (parser->num_template_parameter_lists == num_templates + 1)
17226       return true;
17227   /* Otherwise, there are too many template parameter lists.  We have
17228      something like:
17229
17230      template <class T> template <class U> void S::f();  */
17231   error ("%Htoo many template-parameter-lists", &location);
17232   return false;
17233 }
17234
17235 /* Parse an optional `::' token indicating that the following name is
17236    from the global namespace.  If so, PARSER->SCOPE is set to the
17237    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
17238    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
17239    Returns the new value of PARSER->SCOPE, if the `::' token is
17240    present, and NULL_TREE otherwise.  */
17241
17242 static tree
17243 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
17244 {
17245   cp_token *token;
17246
17247   /* Peek at the next token.  */
17248   token = cp_lexer_peek_token (parser->lexer);
17249   /* If we're looking at a `::' token then we're starting from the
17250      global namespace, not our current location.  */
17251   if (token->type == CPP_SCOPE)
17252     {
17253       /* Consume the `::' token.  */
17254       cp_lexer_consume_token (parser->lexer);
17255       /* Set the SCOPE so that we know where to start the lookup.  */
17256       parser->scope = global_namespace;
17257       parser->qualifying_scope = global_namespace;
17258       parser->object_scope = NULL_TREE;
17259
17260       return parser->scope;
17261     }
17262   else if (!current_scope_valid_p)
17263     {
17264       parser->scope = NULL_TREE;
17265       parser->qualifying_scope = NULL_TREE;
17266       parser->object_scope = NULL_TREE;
17267     }
17268
17269   return NULL_TREE;
17270 }
17271
17272 /* Returns TRUE if the upcoming token sequence is the start of a
17273    constructor declarator.  If FRIEND_P is true, the declarator is
17274    preceded by the `friend' specifier.  */
17275
17276 static bool
17277 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
17278 {
17279   bool constructor_p;
17280   tree type_decl = NULL_TREE;
17281   bool nested_name_p;
17282   cp_token *next_token;
17283
17284   /* The common case is that this is not a constructor declarator, so
17285      try to avoid doing lots of work if at all possible.  It's not
17286      valid declare a constructor at function scope.  */
17287   if (parser->in_function_body)
17288     return false;
17289   /* And only certain tokens can begin a constructor declarator.  */
17290   next_token = cp_lexer_peek_token (parser->lexer);
17291   if (next_token->type != CPP_NAME
17292       && next_token->type != CPP_SCOPE
17293       && next_token->type != CPP_NESTED_NAME_SPECIFIER
17294       && next_token->type != CPP_TEMPLATE_ID)
17295     return false;
17296
17297   /* Parse tentatively; we are going to roll back all of the tokens
17298      consumed here.  */
17299   cp_parser_parse_tentatively (parser);
17300   /* Assume that we are looking at a constructor declarator.  */
17301   constructor_p = true;
17302
17303   /* Look for the optional `::' operator.  */
17304   cp_parser_global_scope_opt (parser,
17305                               /*current_scope_valid_p=*/false);
17306   /* Look for the nested-name-specifier.  */
17307   nested_name_p
17308     = (cp_parser_nested_name_specifier_opt (parser,
17309                                             /*typename_keyword_p=*/false,
17310                                             /*check_dependency_p=*/false,
17311                                             /*type_p=*/false,
17312                                             /*is_declaration=*/false)
17313        != NULL_TREE);
17314   /* Outside of a class-specifier, there must be a
17315      nested-name-specifier.  */
17316   if (!nested_name_p &&
17317       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
17318        || friend_p))
17319     constructor_p = false;
17320   /* If we still think that this might be a constructor-declarator,
17321      look for a class-name.  */
17322   if (constructor_p)
17323     {
17324       /* If we have:
17325
17326            template <typename T> struct S { S(); };
17327            template <typename T> S<T>::S ();
17328
17329          we must recognize that the nested `S' names a class.
17330          Similarly, for:
17331
17332            template <typename T> S<T>::S<T> ();
17333
17334          we must recognize that the nested `S' names a template.  */
17335       type_decl = cp_parser_class_name (parser,
17336                                         /*typename_keyword_p=*/false,
17337                                         /*template_keyword_p=*/false,
17338                                         none_type,
17339                                         /*check_dependency_p=*/false,
17340                                         /*class_head_p=*/false,
17341                                         /*is_declaration=*/false);
17342       /* If there was no class-name, then this is not a constructor.  */
17343       constructor_p = !cp_parser_error_occurred (parser);
17344     }
17345
17346   /* If we're still considering a constructor, we have to see a `(',
17347      to begin the parameter-declaration-clause, followed by either a
17348      `)', an `...', or a decl-specifier.  We need to check for a
17349      type-specifier to avoid being fooled into thinking that:
17350
17351        S::S (f) (int);
17352
17353      is a constructor.  (It is actually a function named `f' that
17354      takes one parameter (of type `int') and returns a value of type
17355      `S::S'.  */
17356   if (constructor_p
17357       && cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
17358     {
17359       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
17360           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
17361           /* A parameter declaration begins with a decl-specifier,
17362              which is either the "attribute" keyword, a storage class
17363              specifier, or (usually) a type-specifier.  */
17364           && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
17365         {
17366           tree type;
17367           tree pushed_scope = NULL_TREE;
17368           unsigned saved_num_template_parameter_lists;
17369
17370           /* Names appearing in the type-specifier should be looked up
17371              in the scope of the class.  */
17372           if (current_class_type)
17373             type = NULL_TREE;
17374           else
17375             {
17376               type = TREE_TYPE (type_decl);
17377               if (TREE_CODE (type) == TYPENAME_TYPE)
17378                 {
17379                   type = resolve_typename_type (type,
17380                                                 /*only_current_p=*/false);
17381                   if (TREE_CODE (type) == TYPENAME_TYPE)
17382                     {
17383                       cp_parser_abort_tentative_parse (parser);
17384                       return false;
17385                     }
17386                 }
17387               pushed_scope = push_scope (type);
17388             }
17389
17390           /* Inside the constructor parameter list, surrounding
17391              template-parameter-lists do not apply.  */
17392           saved_num_template_parameter_lists
17393             = parser->num_template_parameter_lists;
17394           parser->num_template_parameter_lists = 0;
17395
17396           /* Look for the type-specifier.  */
17397           cp_parser_type_specifier (parser,
17398                                     CP_PARSER_FLAGS_NONE,
17399                                     /*decl_specs=*/NULL,
17400                                     /*is_declarator=*/true,
17401                                     /*declares_class_or_enum=*/NULL,
17402                                     /*is_cv_qualifier=*/NULL);
17403
17404           parser->num_template_parameter_lists
17405             = saved_num_template_parameter_lists;
17406
17407           /* Leave the scope of the class.  */
17408           if (pushed_scope)
17409             pop_scope (pushed_scope);
17410
17411           constructor_p = !cp_parser_error_occurred (parser);
17412         }
17413     }
17414   else
17415     constructor_p = false;
17416   /* We did not really want to consume any tokens.  */
17417   cp_parser_abort_tentative_parse (parser);
17418
17419   return constructor_p;
17420 }
17421
17422 /* Parse the definition of the function given by the DECL_SPECIFIERS,
17423    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
17424    they must be performed once we are in the scope of the function.
17425
17426    Returns the function defined.  */
17427
17428 static tree
17429 cp_parser_function_definition_from_specifiers_and_declarator
17430   (cp_parser* parser,
17431    cp_decl_specifier_seq *decl_specifiers,
17432    tree attributes,
17433    const cp_declarator *declarator)
17434 {
17435   tree fn;
17436   bool success_p;
17437
17438   /* Begin the function-definition.  */
17439   success_p = start_function (decl_specifiers, declarator, attributes);
17440
17441   /* The things we're about to see are not directly qualified by any
17442      template headers we've seen thus far.  */
17443   reset_specialization ();
17444
17445   /* If there were names looked up in the decl-specifier-seq that we
17446      did not check, check them now.  We must wait until we are in the
17447      scope of the function to perform the checks, since the function
17448      might be a friend.  */
17449   perform_deferred_access_checks ();
17450
17451   if (!success_p)
17452     {
17453       /* Skip the entire function.  */
17454       cp_parser_skip_to_end_of_block_or_statement (parser);
17455       fn = error_mark_node;
17456     }
17457   else if (DECL_INITIAL (current_function_decl) != error_mark_node)
17458     {
17459       /* Seen already, skip it.  An error message has already been output.  */
17460       cp_parser_skip_to_end_of_block_or_statement (parser);
17461       fn = current_function_decl;
17462       current_function_decl = NULL_TREE;
17463       /* If this is a function from a class, pop the nested class.  */
17464       if (current_class_name)
17465         pop_nested_class ();
17466     }
17467   else
17468     fn = cp_parser_function_definition_after_declarator (parser,
17469                                                          /*inline_p=*/false);
17470
17471   return fn;
17472 }
17473
17474 /* Parse the part of a function-definition that follows the
17475    declarator.  INLINE_P is TRUE iff this function is an inline
17476    function defined with a class-specifier.
17477
17478    Returns the function defined.  */
17479
17480 static tree
17481 cp_parser_function_definition_after_declarator (cp_parser* parser,
17482                                                 bool inline_p)
17483 {
17484   tree fn;
17485   bool ctor_initializer_p = false;
17486   bool saved_in_unbraced_linkage_specification_p;
17487   bool saved_in_function_body;
17488   unsigned saved_num_template_parameter_lists;
17489   cp_token *token;
17490
17491   saved_in_function_body = parser->in_function_body;
17492   parser->in_function_body = true;
17493   /* If the next token is `return', then the code may be trying to
17494      make use of the "named return value" extension that G++ used to
17495      support.  */
17496   token = cp_lexer_peek_token (parser->lexer);
17497   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
17498     {
17499       /* Consume the `return' keyword.  */
17500       cp_lexer_consume_token (parser->lexer);
17501       /* Look for the identifier that indicates what value is to be
17502          returned.  */
17503       cp_parser_identifier (parser);
17504       /* Issue an error message.  */
17505       error ("%Hnamed return values are no longer supported",
17506              &token->location);
17507       /* Skip tokens until we reach the start of the function body.  */
17508       while (true)
17509         {
17510           cp_token *token = cp_lexer_peek_token (parser->lexer);
17511           if (token->type == CPP_OPEN_BRACE
17512               || token->type == CPP_EOF
17513               || token->type == CPP_PRAGMA_EOL)
17514             break;
17515           cp_lexer_consume_token (parser->lexer);
17516         }
17517     }
17518   /* The `extern' in `extern "C" void f () { ... }' does not apply to
17519      anything declared inside `f'.  */
17520   saved_in_unbraced_linkage_specification_p
17521     = parser->in_unbraced_linkage_specification_p;
17522   parser->in_unbraced_linkage_specification_p = false;
17523   /* Inside the function, surrounding template-parameter-lists do not
17524      apply.  */
17525   saved_num_template_parameter_lists
17526     = parser->num_template_parameter_lists;
17527   parser->num_template_parameter_lists = 0;
17528   /* If the next token is `try', then we are looking at a
17529      function-try-block.  */
17530   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
17531     ctor_initializer_p = cp_parser_function_try_block (parser);
17532   /* A function-try-block includes the function-body, so we only do
17533      this next part if we're not processing a function-try-block.  */
17534   else
17535     ctor_initializer_p
17536       = cp_parser_ctor_initializer_opt_and_function_body (parser);
17537
17538   /* Finish the function.  */
17539   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
17540                         (inline_p ? 2 : 0));
17541   /* Generate code for it, if necessary.  */
17542   expand_or_defer_fn (fn);
17543   /* Restore the saved values.  */
17544   parser->in_unbraced_linkage_specification_p
17545     = saved_in_unbraced_linkage_specification_p;
17546   parser->num_template_parameter_lists
17547     = saved_num_template_parameter_lists;
17548   parser->in_function_body = saved_in_function_body;
17549
17550   return fn;
17551 }
17552
17553 /* Parse a template-declaration, assuming that the `export' (and
17554    `extern') keywords, if present, has already been scanned.  MEMBER_P
17555    is as for cp_parser_template_declaration.  */
17556
17557 static void
17558 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
17559 {
17560   tree decl = NULL_TREE;
17561   VEC (deferred_access_check,gc) *checks;
17562   tree parameter_list;
17563   bool friend_p = false;
17564   bool need_lang_pop;
17565   cp_token *token;
17566
17567   /* Look for the `template' keyword.  */
17568   token = cp_lexer_peek_token (parser->lexer);
17569   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "%<template%>"))
17570     return;
17571
17572   /* And the `<'.  */
17573   if (!cp_parser_require (parser, CPP_LESS, "%<<%>"))
17574     return;
17575   if (at_class_scope_p () && current_function_decl)
17576     {
17577       /* 14.5.2.2 [temp.mem]
17578
17579          A local class shall not have member templates.  */
17580       error ("%Hinvalid declaration of member template in local class",
17581              &token->location);
17582       cp_parser_skip_to_end_of_block_or_statement (parser);
17583       return;
17584     }
17585   /* [temp]
17586
17587      A template ... shall not have C linkage.  */
17588   if (current_lang_name == lang_name_c)
17589     {
17590       error ("%Htemplate with C linkage", &token->location);
17591       /* Give it C++ linkage to avoid confusing other parts of the
17592          front end.  */
17593       push_lang_context (lang_name_cplusplus);
17594       need_lang_pop = true;
17595     }
17596   else
17597     need_lang_pop = false;
17598
17599   /* We cannot perform access checks on the template parameter
17600      declarations until we know what is being declared, just as we
17601      cannot check the decl-specifier list.  */
17602   push_deferring_access_checks (dk_deferred);
17603
17604   /* If the next token is `>', then we have an invalid
17605      specialization.  Rather than complain about an invalid template
17606      parameter, issue an error message here.  */
17607   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
17608     {
17609       cp_parser_error (parser, "invalid explicit specialization");
17610       begin_specialization ();
17611       parameter_list = NULL_TREE;
17612     }
17613   else
17614     /* Parse the template parameters.  */
17615     parameter_list = cp_parser_template_parameter_list (parser);
17616
17617   /* Get the deferred access checks from the parameter list.  These
17618      will be checked once we know what is being declared, as for a
17619      member template the checks must be performed in the scope of the
17620      class containing the member.  */
17621   checks = get_deferred_access_checks ();
17622
17623   /* Look for the `>'.  */
17624   cp_parser_skip_to_end_of_template_parameter_list (parser);
17625   /* We just processed one more parameter list.  */
17626   ++parser->num_template_parameter_lists;
17627   /* If the next token is `template', there are more template
17628      parameters.  */
17629   if (cp_lexer_next_token_is_keyword (parser->lexer,
17630                                       RID_TEMPLATE))
17631     cp_parser_template_declaration_after_export (parser, member_p);
17632   else
17633     {
17634       /* There are no access checks when parsing a template, as we do not
17635          know if a specialization will be a friend.  */
17636       push_deferring_access_checks (dk_no_check);
17637       token = cp_lexer_peek_token (parser->lexer);
17638       decl = cp_parser_single_declaration (parser,
17639                                            checks,
17640                                            member_p,
17641                                            /*explicit_specialization_p=*/false,
17642                                            &friend_p);
17643       pop_deferring_access_checks ();
17644
17645       /* If this is a member template declaration, let the front
17646          end know.  */
17647       if (member_p && !friend_p && decl)
17648         {
17649           if (TREE_CODE (decl) == TYPE_DECL)
17650             cp_parser_check_access_in_redeclaration (decl, token->location);
17651
17652           decl = finish_member_template_decl (decl);
17653         }
17654       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
17655         make_friend_class (current_class_type, TREE_TYPE (decl),
17656                            /*complain=*/true);
17657     }
17658   /* We are done with the current parameter list.  */
17659   --parser->num_template_parameter_lists;
17660
17661   pop_deferring_access_checks ();
17662
17663   /* Finish up.  */
17664   finish_template_decl (parameter_list);
17665
17666   /* Register member declarations.  */
17667   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
17668     finish_member_declaration (decl);
17669   /* For the erroneous case of a template with C linkage, we pushed an
17670      implicit C++ linkage scope; exit that scope now.  */
17671   if (need_lang_pop)
17672     pop_lang_context ();
17673   /* If DECL is a function template, we must return to parse it later.
17674      (Even though there is no definition, there might be default
17675      arguments that need handling.)  */
17676   if (member_p && decl
17677       && (TREE_CODE (decl) == FUNCTION_DECL
17678           || DECL_FUNCTION_TEMPLATE_P (decl)))
17679     TREE_VALUE (parser->unparsed_functions_queues)
17680       = tree_cons (NULL_TREE, decl,
17681                    TREE_VALUE (parser->unparsed_functions_queues));
17682 }
17683
17684 /* Perform the deferred access checks from a template-parameter-list.
17685    CHECKS is a TREE_LIST of access checks, as returned by
17686    get_deferred_access_checks.  */
17687
17688 static void
17689 cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
17690 {
17691   ++processing_template_parmlist;
17692   perform_access_checks (checks);
17693   --processing_template_parmlist;
17694 }
17695
17696 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
17697    `function-definition' sequence.  MEMBER_P is true, this declaration
17698    appears in a class scope.
17699
17700    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
17701    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
17702
17703 static tree
17704 cp_parser_single_declaration (cp_parser* parser,
17705                               VEC (deferred_access_check,gc)* checks,
17706                               bool member_p,
17707                               bool explicit_specialization_p,
17708                               bool* friend_p)
17709 {
17710   int declares_class_or_enum;
17711   tree decl = NULL_TREE;
17712   cp_decl_specifier_seq decl_specifiers;
17713   bool function_definition_p = false;
17714   cp_token *decl_spec_token_start;
17715
17716   /* This function is only used when processing a template
17717      declaration.  */
17718   gcc_assert (innermost_scope_kind () == sk_template_parms
17719               || innermost_scope_kind () == sk_template_spec);
17720
17721   /* Defer access checks until we know what is being declared.  */
17722   push_deferring_access_checks (dk_deferred);
17723
17724   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
17725      alternative.  */
17726   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
17727   cp_parser_decl_specifier_seq (parser,
17728                                 CP_PARSER_FLAGS_OPTIONAL,
17729                                 &decl_specifiers,
17730                                 &declares_class_or_enum);
17731   if (friend_p)
17732     *friend_p = cp_parser_friend_p (&decl_specifiers);
17733
17734   /* There are no template typedefs.  */
17735   if (decl_specifiers.specs[(int) ds_typedef])
17736     {
17737       error ("%Htemplate declaration of %qs",
17738              &decl_spec_token_start->location, "typedef");
17739       decl = error_mark_node;
17740     }
17741
17742   /* Gather up the access checks that occurred the
17743      decl-specifier-seq.  */
17744   stop_deferring_access_checks ();
17745
17746   /* Check for the declaration of a template class.  */
17747   if (declares_class_or_enum)
17748     {
17749       if (cp_parser_declares_only_class_p (parser))
17750         {
17751           decl = shadow_tag (&decl_specifiers);
17752
17753           /* In this case:
17754
17755                struct C {
17756                  friend template <typename T> struct A<T>::B;
17757                };
17758
17759              A<T>::B will be represented by a TYPENAME_TYPE, and
17760              therefore not recognized by shadow_tag.  */
17761           if (friend_p && *friend_p
17762               && !decl
17763               && decl_specifiers.type
17764               && TYPE_P (decl_specifiers.type))
17765             decl = decl_specifiers.type;
17766
17767           if (decl && decl != error_mark_node)
17768             decl = TYPE_NAME (decl);
17769           else
17770             decl = error_mark_node;
17771
17772           /* Perform access checks for template parameters.  */
17773           cp_parser_perform_template_parameter_access_checks (checks);
17774         }
17775     }
17776   /* If it's not a template class, try for a template function.  If
17777      the next token is a `;', then this declaration does not declare
17778      anything.  But, if there were errors in the decl-specifiers, then
17779      the error might well have come from an attempted class-specifier.
17780      In that case, there's no need to warn about a missing declarator.  */
17781   if (!decl
17782       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
17783           || decl_specifiers.type != error_mark_node))
17784     {
17785       decl = cp_parser_init_declarator (parser,
17786                                         &decl_specifiers,
17787                                         checks,
17788                                         /*function_definition_allowed_p=*/true,
17789                                         member_p,
17790                                         declares_class_or_enum,
17791                                         &function_definition_p);
17792
17793     /* 7.1.1-1 [dcl.stc]
17794
17795        A storage-class-specifier shall not be specified in an explicit
17796        specialization...  */
17797     if (decl
17798         && explicit_specialization_p
17799         && decl_specifiers.storage_class != sc_none)
17800       {
17801         error ("%Hexplicit template specialization cannot have a storage class",
17802                &decl_spec_token_start->location);
17803         decl = error_mark_node;
17804       }
17805     }
17806
17807   pop_deferring_access_checks ();
17808
17809   /* Clear any current qualification; whatever comes next is the start
17810      of something new.  */
17811   parser->scope = NULL_TREE;
17812   parser->qualifying_scope = NULL_TREE;
17813   parser->object_scope = NULL_TREE;
17814   /* Look for a trailing `;' after the declaration.  */
17815   if (!function_definition_p
17816       && (decl == error_mark_node
17817           || !cp_parser_require (parser, CPP_SEMICOLON, "%<;%>")))
17818     cp_parser_skip_to_end_of_block_or_statement (parser);
17819
17820   return decl;
17821 }
17822
17823 /* Parse a cast-expression that is not the operand of a unary "&".  */
17824
17825 static tree
17826 cp_parser_simple_cast_expression (cp_parser *parser)
17827 {
17828   return cp_parser_cast_expression (parser, /*address_p=*/false,
17829                                     /*cast_p=*/false);
17830 }
17831
17832 /* Parse a functional cast to TYPE.  Returns an expression
17833    representing the cast.  */
17834
17835 static tree
17836 cp_parser_functional_cast (cp_parser* parser, tree type)
17837 {
17838   tree expression_list;
17839   tree cast;
17840   bool nonconst_p;
17841
17842   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
17843     {
17844       maybe_warn_cpp0x ("extended initializer lists");
17845       expression_list = cp_parser_braced_list (parser, &nonconst_p);
17846       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
17847       if (TREE_CODE (type) == TYPE_DECL)
17848         type = TREE_TYPE (type);
17849       return finish_compound_literal (type, expression_list);
17850     }
17851
17852   expression_list
17853     = cp_parser_parenthesized_expression_list (parser, false,
17854                                                /*cast_p=*/true,
17855                                                /*allow_expansion_p=*/true,
17856                                                /*non_constant_p=*/NULL);
17857
17858   cast = build_functional_cast (type, expression_list,
17859                                 tf_warning_or_error);
17860   /* [expr.const]/1: In an integral constant expression "only type
17861      conversions to integral or enumeration type can be used".  */
17862   if (TREE_CODE (type) == TYPE_DECL)
17863     type = TREE_TYPE (type);
17864   if (cast != error_mark_node
17865       && !cast_valid_in_integral_constant_expression_p (type)
17866       && (cp_parser_non_integral_constant_expression
17867           (parser, "a call to a constructor")))
17868     return error_mark_node;
17869   return cast;
17870 }
17871
17872 /* Save the tokens that make up the body of a member function defined
17873    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
17874    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
17875    specifiers applied to the declaration.  Returns the FUNCTION_DECL
17876    for the member function.  */
17877
17878 static tree
17879 cp_parser_save_member_function_body (cp_parser* parser,
17880                                      cp_decl_specifier_seq *decl_specifiers,
17881                                      cp_declarator *declarator,
17882                                      tree attributes)
17883 {
17884   cp_token *first;
17885   cp_token *last;
17886   tree fn;
17887
17888   /* Create the function-declaration.  */
17889   fn = start_method (decl_specifiers, declarator, attributes);
17890   /* If something went badly wrong, bail out now.  */
17891   if (fn == error_mark_node)
17892     {
17893       /* If there's a function-body, skip it.  */
17894       if (cp_parser_token_starts_function_definition_p
17895           (cp_lexer_peek_token (parser->lexer)))
17896         cp_parser_skip_to_end_of_block_or_statement (parser);
17897       return error_mark_node;
17898     }
17899
17900   /* Remember it, if there default args to post process.  */
17901   cp_parser_save_default_args (parser, fn);
17902
17903   /* Save away the tokens that make up the body of the
17904      function.  */
17905   first = parser->lexer->next_token;
17906   /* We can have braced-init-list mem-initializers before the fn body.  */
17907   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
17908     {
17909       cp_lexer_consume_token (parser->lexer);
17910       while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
17911              && cp_lexer_next_token_is_not_keyword (parser->lexer, RID_TRY))
17912         {
17913           /* cache_group will stop after an un-nested { } pair, too.  */
17914           if (cp_parser_cache_group (parser, CPP_CLOSE_PAREN, /*depth=*/0))
17915             break;
17916
17917           /* variadic mem-inits have ... after the ')'.  */
17918           if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
17919             cp_lexer_consume_token (parser->lexer);
17920         }
17921     }
17922   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
17923   /* Handle function try blocks.  */
17924   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
17925     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
17926   last = parser->lexer->next_token;
17927
17928   /* Save away the inline definition; we will process it when the
17929      class is complete.  */
17930   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
17931   DECL_PENDING_INLINE_P (fn) = 1;
17932
17933   /* We need to know that this was defined in the class, so that
17934      friend templates are handled correctly.  */
17935   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
17936
17937   /* We're done with the inline definition.  */
17938   finish_method (fn);
17939
17940   /* Add FN to the queue of functions to be parsed later.  */
17941   TREE_VALUE (parser->unparsed_functions_queues)
17942     = tree_cons (NULL_TREE, fn,
17943                  TREE_VALUE (parser->unparsed_functions_queues));
17944
17945   return fn;
17946 }
17947
17948 /* Parse a template-argument-list, as well as the trailing ">" (but
17949    not the opening ">").  See cp_parser_template_argument_list for the
17950    return value.  */
17951
17952 static tree
17953 cp_parser_enclosed_template_argument_list (cp_parser* parser)
17954 {
17955   tree arguments;
17956   tree saved_scope;
17957   tree saved_qualifying_scope;
17958   tree saved_object_scope;
17959   bool saved_greater_than_is_operator_p;
17960   bool saved_skip_evaluation;
17961
17962   /* [temp.names]
17963
17964      When parsing a template-id, the first non-nested `>' is taken as
17965      the end of the template-argument-list rather than a greater-than
17966      operator.  */
17967   saved_greater_than_is_operator_p
17968     = parser->greater_than_is_operator_p;
17969   parser->greater_than_is_operator_p = false;
17970   /* Parsing the argument list may modify SCOPE, so we save it
17971      here.  */
17972   saved_scope = parser->scope;
17973   saved_qualifying_scope = parser->qualifying_scope;
17974   saved_object_scope = parser->object_scope;
17975   /* We need to evaluate the template arguments, even though this
17976      template-id may be nested within a "sizeof".  */
17977   saved_skip_evaluation = skip_evaluation;
17978   skip_evaluation = false;
17979   /* Parse the template-argument-list itself.  */
17980   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER)
17981       || cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
17982     arguments = NULL_TREE;
17983   else
17984     arguments = cp_parser_template_argument_list (parser);
17985   /* Look for the `>' that ends the template-argument-list. If we find
17986      a '>>' instead, it's probably just a typo.  */
17987   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
17988     {
17989       if (cxx_dialect != cxx98)
17990         {
17991           /* In C++0x, a `>>' in a template argument list or cast
17992              expression is considered to be two separate `>'
17993              tokens. So, change the current token to a `>', but don't
17994              consume it: it will be consumed later when the outer
17995              template argument list (or cast expression) is parsed.
17996              Note that this replacement of `>' for `>>' is necessary
17997              even if we are parsing tentatively: in the tentative
17998              case, after calling
17999              cp_parser_enclosed_template_argument_list we will always
18000              throw away all of the template arguments and the first
18001              closing `>', either because the template argument list
18002              was erroneous or because we are replacing those tokens
18003              with a CPP_TEMPLATE_ID token.  The second `>' (which will
18004              not have been thrown away) is needed either to close an
18005              outer template argument list or to complete a new-style
18006              cast.  */
18007           cp_token *token = cp_lexer_peek_token (parser->lexer);
18008           token->type = CPP_GREATER;
18009         }
18010       else if (!saved_greater_than_is_operator_p)
18011         {
18012           /* If we're in a nested template argument list, the '>>' has
18013             to be a typo for '> >'. We emit the error message, but we
18014             continue parsing and we push a '>' as next token, so that
18015             the argument list will be parsed correctly.  Note that the
18016             global source location is still on the token before the
18017             '>>', so we need to say explicitly where we want it.  */
18018           cp_token *token = cp_lexer_peek_token (parser->lexer);
18019           error ("%H%<>>%> should be %<> >%> "
18020                  "within a nested template argument list",
18021                  &token->location);
18022
18023           token->type = CPP_GREATER;
18024         }
18025       else
18026         {
18027           /* If this is not a nested template argument list, the '>>'
18028             is a typo for '>'. Emit an error message and continue.
18029             Same deal about the token location, but here we can get it
18030             right by consuming the '>>' before issuing the diagnostic.  */
18031           cp_token *token = cp_lexer_consume_token (parser->lexer);
18032           error ("%Hspurious %<>>%>, use %<>%> to terminate "
18033                  "a template argument list", &token->location);
18034         }
18035     }
18036   else
18037     cp_parser_skip_to_end_of_template_parameter_list (parser);
18038   /* The `>' token might be a greater-than operator again now.  */
18039   parser->greater_than_is_operator_p
18040     = saved_greater_than_is_operator_p;
18041   /* Restore the SAVED_SCOPE.  */
18042   parser->scope = saved_scope;
18043   parser->qualifying_scope = saved_qualifying_scope;
18044   parser->object_scope = saved_object_scope;
18045   skip_evaluation = saved_skip_evaluation;
18046
18047   return arguments;
18048 }
18049
18050 /* MEMBER_FUNCTION is a member function, or a friend.  If default
18051    arguments, or the body of the function have not yet been parsed,
18052    parse them now.  */
18053
18054 static void
18055 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
18056 {
18057   /* If this member is a template, get the underlying
18058      FUNCTION_DECL.  */
18059   if (DECL_FUNCTION_TEMPLATE_P (member_function))
18060     member_function = DECL_TEMPLATE_RESULT (member_function);
18061
18062   /* There should not be any class definitions in progress at this
18063      point; the bodies of members are only parsed outside of all class
18064      definitions.  */
18065   gcc_assert (parser->num_classes_being_defined == 0);
18066   /* While we're parsing the member functions we might encounter more
18067      classes.  We want to handle them right away, but we don't want
18068      them getting mixed up with functions that are currently in the
18069      queue.  */
18070   parser->unparsed_functions_queues
18071     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
18072
18073   /* Make sure that any template parameters are in scope.  */
18074   maybe_begin_member_template_processing (member_function);
18075
18076   /* If the body of the function has not yet been parsed, parse it
18077      now.  */
18078   if (DECL_PENDING_INLINE_P (member_function))
18079     {
18080       tree function_scope;
18081       cp_token_cache *tokens;
18082
18083       /* The function is no longer pending; we are processing it.  */
18084       tokens = DECL_PENDING_INLINE_INFO (member_function);
18085       DECL_PENDING_INLINE_INFO (member_function) = NULL;
18086       DECL_PENDING_INLINE_P (member_function) = 0;
18087
18088       /* If this is a local class, enter the scope of the containing
18089          function.  */
18090       function_scope = current_function_decl;
18091       if (function_scope)
18092         push_function_context ();
18093
18094       /* Push the body of the function onto the lexer stack.  */
18095       cp_parser_push_lexer_for_tokens (parser, tokens);
18096
18097       /* Let the front end know that we going to be defining this
18098          function.  */
18099       start_preparsed_function (member_function, NULL_TREE,
18100                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
18101
18102       /* Don't do access checking if it is a templated function.  */
18103       if (processing_template_decl)
18104         push_deferring_access_checks (dk_no_check);
18105
18106       /* Now, parse the body of the function.  */
18107       cp_parser_function_definition_after_declarator (parser,
18108                                                       /*inline_p=*/true);
18109
18110       if (processing_template_decl)
18111         pop_deferring_access_checks ();
18112
18113       /* Leave the scope of the containing function.  */
18114       if (function_scope)
18115         pop_function_context ();
18116       cp_parser_pop_lexer (parser);
18117     }
18118
18119   /* Remove any template parameters from the symbol table.  */
18120   maybe_end_member_template_processing ();
18121
18122   /* Restore the queue.  */
18123   parser->unparsed_functions_queues
18124     = TREE_CHAIN (parser->unparsed_functions_queues);
18125 }
18126
18127 /* If DECL contains any default args, remember it on the unparsed
18128    functions queue.  */
18129
18130 static void
18131 cp_parser_save_default_args (cp_parser* parser, tree decl)
18132 {
18133   tree probe;
18134
18135   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
18136        probe;
18137        probe = TREE_CHAIN (probe))
18138     if (TREE_PURPOSE (probe))
18139       {
18140         TREE_PURPOSE (parser->unparsed_functions_queues)
18141           = tree_cons (current_class_type, decl,
18142                        TREE_PURPOSE (parser->unparsed_functions_queues));
18143         break;
18144       }
18145 }
18146
18147 /* FN is a FUNCTION_DECL which may contains a parameter with an
18148    unparsed DEFAULT_ARG.  Parse the default args now.  This function
18149    assumes that the current scope is the scope in which the default
18150    argument should be processed.  */
18151
18152 static void
18153 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
18154 {
18155   bool saved_local_variables_forbidden_p;
18156   tree parm;
18157
18158   /* While we're parsing the default args, we might (due to the
18159      statement expression extension) encounter more classes.  We want
18160      to handle them right away, but we don't want them getting mixed
18161      up with default args that are currently in the queue.  */
18162   parser->unparsed_functions_queues
18163     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
18164
18165   /* Local variable names (and the `this' keyword) may not appear
18166      in a default argument.  */
18167   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
18168   parser->local_variables_forbidden_p = true;
18169
18170   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
18171        parm;
18172        parm = TREE_CHAIN (parm))
18173     {
18174       cp_token_cache *tokens;
18175       tree default_arg = TREE_PURPOSE (parm);
18176       tree parsed_arg;
18177       VEC(tree,gc) *insts;
18178       tree copy;
18179       unsigned ix;
18180
18181       if (!default_arg)
18182         continue;
18183
18184       if (TREE_CODE (default_arg) != DEFAULT_ARG)
18185         /* This can happen for a friend declaration for a function
18186            already declared with default arguments.  */
18187         continue;
18188
18189        /* Push the saved tokens for the default argument onto the parser's
18190           lexer stack.  */
18191       tokens = DEFARG_TOKENS (default_arg);
18192       cp_parser_push_lexer_for_tokens (parser, tokens);
18193
18194       /* Parse the assignment-expression.  */
18195       parsed_arg = cp_parser_assignment_expression (parser, /*cast_p=*/false);
18196
18197       if (!processing_template_decl)
18198         parsed_arg = check_default_argument (TREE_VALUE (parm), parsed_arg);
18199
18200       TREE_PURPOSE (parm) = parsed_arg;
18201
18202       /* Update any instantiations we've already created.  */
18203       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
18204            VEC_iterate (tree, insts, ix, copy); ix++)
18205         TREE_PURPOSE (copy) = parsed_arg;
18206
18207       /* If the token stream has not been completely used up, then
18208          there was extra junk after the end of the default
18209          argument.  */
18210       if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
18211         cp_parser_error (parser, "expected %<,%>");
18212
18213       /* Revert to the main lexer.  */
18214       cp_parser_pop_lexer (parser);
18215     }
18216
18217   /* Make sure no default arg is missing.  */
18218   check_default_args (fn);
18219
18220   /* Restore the state of local_variables_forbidden_p.  */
18221   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
18222
18223   /* Restore the queue.  */
18224   parser->unparsed_functions_queues
18225     = TREE_CHAIN (parser->unparsed_functions_queues);
18226 }
18227
18228 /* Parse the operand of `sizeof' (or a similar operator).  Returns
18229    either a TYPE or an expression, depending on the form of the
18230    input.  The KEYWORD indicates which kind of expression we have
18231    encountered.  */
18232
18233 static tree
18234 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
18235 {
18236   tree expr = NULL_TREE;
18237   const char *saved_message;
18238   char *tmp;
18239   bool saved_integral_constant_expression_p;
18240   bool saved_non_integral_constant_expression_p;
18241   bool pack_expansion_p = false;
18242
18243   /* Types cannot be defined in a `sizeof' expression.  Save away the
18244      old message.  */
18245   saved_message = parser->type_definition_forbidden_message;
18246   /* And create the new one.  */
18247   tmp = concat ("types may not be defined in %<",
18248                 IDENTIFIER_POINTER (ridpointers[keyword]),
18249                 "%> expressions", NULL);
18250   parser->type_definition_forbidden_message = tmp;
18251
18252   /* The restrictions on constant-expressions do not apply inside
18253      sizeof expressions.  */
18254   saved_integral_constant_expression_p
18255     = parser->integral_constant_expression_p;
18256   saved_non_integral_constant_expression_p
18257     = parser->non_integral_constant_expression_p;
18258   parser->integral_constant_expression_p = false;
18259
18260   /* If it's a `...', then we are computing the length of a parameter
18261      pack.  */
18262   if (keyword == RID_SIZEOF
18263       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
18264     {
18265       /* Consume the `...'.  */
18266       cp_lexer_consume_token (parser->lexer);
18267       maybe_warn_variadic_templates ();
18268
18269       /* Note that this is an expansion.  */
18270       pack_expansion_p = true;
18271     }
18272
18273   /* Do not actually evaluate the expression.  */
18274   ++skip_evaluation;
18275   /* If it's a `(', then we might be looking at the type-id
18276      construction.  */
18277   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18278     {
18279       tree type;
18280       bool saved_in_type_id_in_expr_p;
18281
18282       /* We can't be sure yet whether we're looking at a type-id or an
18283          expression.  */
18284       cp_parser_parse_tentatively (parser);
18285       /* Consume the `('.  */
18286       cp_lexer_consume_token (parser->lexer);
18287       /* Parse the type-id.  */
18288       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
18289       parser->in_type_id_in_expr_p = true;
18290       type = cp_parser_type_id (parser);
18291       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
18292       /* Now, look for the trailing `)'.  */
18293       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
18294       /* If all went well, then we're done.  */
18295       if (cp_parser_parse_definitely (parser))
18296         {
18297           cp_decl_specifier_seq decl_specs;
18298
18299           /* Build a trivial decl-specifier-seq.  */
18300           clear_decl_specs (&decl_specs);
18301           decl_specs.type = type;
18302
18303           /* Call grokdeclarator to figure out what type this is.  */
18304           expr = grokdeclarator (NULL,
18305                                  &decl_specs,
18306                                  TYPENAME,
18307                                  /*initialized=*/0,
18308                                  /*attrlist=*/NULL);
18309         }
18310     }
18311
18312   /* If the type-id production did not work out, then we must be
18313      looking at the unary-expression production.  */
18314   if (!expr)
18315     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
18316                                        /*cast_p=*/false);
18317
18318   if (pack_expansion_p)
18319     /* Build a pack expansion. */
18320     expr = make_pack_expansion (expr);
18321
18322   /* Go back to evaluating expressions.  */
18323   --skip_evaluation;
18324
18325   /* Free the message we created.  */
18326   free (tmp);
18327   /* And restore the old one.  */
18328   parser->type_definition_forbidden_message = saved_message;
18329   parser->integral_constant_expression_p
18330     = saved_integral_constant_expression_p;
18331   parser->non_integral_constant_expression_p
18332     = saved_non_integral_constant_expression_p;
18333
18334   return expr;
18335 }
18336
18337 /* If the current declaration has no declarator, return true.  */
18338
18339 static bool
18340 cp_parser_declares_only_class_p (cp_parser *parser)
18341 {
18342   /* If the next token is a `;' or a `,' then there is no
18343      declarator.  */
18344   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
18345           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
18346 }
18347
18348 /* Update the DECL_SPECS to reflect the storage class indicated by
18349    KEYWORD.  */
18350
18351 static void
18352 cp_parser_set_storage_class (cp_parser *parser,
18353                              cp_decl_specifier_seq *decl_specs,
18354                              enum rid keyword,
18355                              location_t location)
18356 {
18357   cp_storage_class storage_class;
18358
18359   if (parser->in_unbraced_linkage_specification_p)
18360     {
18361       error ("%Hinvalid use of %qD in linkage specification",
18362              &location, ridpointers[keyword]);
18363       return;
18364     }
18365   else if (decl_specs->storage_class != sc_none)
18366     {
18367       decl_specs->conflicting_specifiers_p = true;
18368       return;
18369     }
18370
18371   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
18372       && decl_specs->specs[(int) ds_thread])
18373     {
18374       error ("%H%<__thread%> before %qD", &location, ridpointers[keyword]);
18375       decl_specs->specs[(int) ds_thread] = 0;
18376     }
18377
18378   switch (keyword)
18379     {
18380     case RID_AUTO:
18381       storage_class = sc_auto;
18382       break;
18383     case RID_REGISTER:
18384       storage_class = sc_register;
18385       break;
18386     case RID_STATIC:
18387       storage_class = sc_static;
18388       break;
18389     case RID_EXTERN:
18390       storage_class = sc_extern;
18391       break;
18392     case RID_MUTABLE:
18393       storage_class = sc_mutable;
18394       break;
18395     default:
18396       gcc_unreachable ();
18397     }
18398   decl_specs->storage_class = storage_class;
18399
18400   /* A storage class specifier cannot be applied alongside a typedef 
18401      specifier. If there is a typedef specifier present then set 
18402      conflicting_specifiers_p which will trigger an error later
18403      on in grokdeclarator. */
18404   if (decl_specs->specs[(int)ds_typedef])
18405     decl_specs->conflicting_specifiers_p = true;
18406 }
18407
18408 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
18409    is true, the type is a user-defined type; otherwise it is a
18410    built-in type specified by a keyword.  */
18411
18412 static void
18413 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
18414                               tree type_spec,
18415                               location_t location,
18416                               bool user_defined_p)
18417 {
18418   decl_specs->any_specifiers_p = true;
18419
18420   /* If the user tries to redeclare bool, char16_t, char32_t, or wchar_t
18421      (with, for example, in "typedef int wchar_t;") we remember that
18422      this is what happened.  In system headers, we ignore these
18423      declarations so that G++ can work with system headers that are not
18424      C++-safe.  */
18425   if (decl_specs->specs[(int) ds_typedef]
18426       && !user_defined_p
18427       && (type_spec == boolean_type_node
18428           || type_spec == char16_type_node
18429           || type_spec == char32_type_node
18430           || type_spec == wchar_type_node)
18431       && (decl_specs->type
18432           || decl_specs->specs[(int) ds_long]
18433           || decl_specs->specs[(int) ds_short]
18434           || decl_specs->specs[(int) ds_unsigned]
18435           || decl_specs->specs[(int) ds_signed]))
18436     {
18437       decl_specs->redefined_builtin_type = type_spec;
18438       if (!decl_specs->type)
18439         {
18440           decl_specs->type = type_spec;
18441           decl_specs->user_defined_type_p = false;
18442           decl_specs->type_location = location;
18443         }
18444     }
18445   else if (decl_specs->type)
18446     decl_specs->multiple_types_p = true;
18447   else
18448     {
18449       decl_specs->type = type_spec;
18450       decl_specs->user_defined_type_p = user_defined_p;
18451       decl_specs->redefined_builtin_type = NULL_TREE;
18452       decl_specs->type_location = location;
18453     }
18454 }
18455
18456 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
18457    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
18458
18459 static bool
18460 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
18461 {
18462   return decl_specifiers->specs[(int) ds_friend] != 0;
18463 }
18464
18465 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
18466    issue an error message indicating that TOKEN_DESC was expected.
18467
18468    Returns the token consumed, if the token had the appropriate type.
18469    Otherwise, returns NULL.  */
18470
18471 static cp_token *
18472 cp_parser_require (cp_parser* parser,
18473                    enum cpp_ttype type,
18474                    const char* token_desc)
18475 {
18476   if (cp_lexer_next_token_is (parser->lexer, type))
18477     return cp_lexer_consume_token (parser->lexer);
18478   else
18479     {
18480       /* Output the MESSAGE -- unless we're parsing tentatively.  */
18481       if (!cp_parser_simulate_error (parser))
18482         {
18483           char *message = concat ("expected ", token_desc, NULL);
18484           cp_parser_error (parser, message);
18485           free (message);
18486         }
18487       return NULL;
18488     }
18489 }
18490
18491 /* An error message is produced if the next token is not '>'.
18492    All further tokens are skipped until the desired token is
18493    found or '{', '}', ';' or an unbalanced ')' or ']'.  */
18494
18495 static void
18496 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
18497 {
18498   /* Current level of '< ... >'.  */
18499   unsigned level = 0;
18500   /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
18501   unsigned nesting_depth = 0;
18502
18503   /* Are we ready, yet?  If not, issue error message.  */
18504   if (cp_parser_require (parser, CPP_GREATER, "%<>%>"))
18505     return;
18506
18507   /* Skip tokens until the desired token is found.  */
18508   while (true)
18509     {
18510       /* Peek at the next token.  */
18511       switch (cp_lexer_peek_token (parser->lexer)->type)
18512         {
18513         case CPP_LESS:
18514           if (!nesting_depth)
18515             ++level;
18516           break;
18517
18518         case CPP_RSHIFT:
18519           if (cxx_dialect == cxx98)
18520             /* C++0x views the `>>' operator as two `>' tokens, but
18521                C++98 does not. */
18522             break;
18523           else if (!nesting_depth && level-- == 0)
18524             {
18525               /* We've hit a `>>' where the first `>' closes the
18526                  template argument list, and the second `>' is
18527                  spurious.  Just consume the `>>' and stop; we've
18528                  already produced at least one error.  */
18529               cp_lexer_consume_token (parser->lexer);
18530               return;
18531             }
18532           /* Fall through for C++0x, so we handle the second `>' in
18533              the `>>'.  */
18534
18535         case CPP_GREATER:
18536           if (!nesting_depth && level-- == 0)
18537             {
18538               /* We've reached the token we want, consume it and stop.  */
18539               cp_lexer_consume_token (parser->lexer);
18540               return;
18541             }
18542           break;
18543
18544         case CPP_OPEN_PAREN:
18545         case CPP_OPEN_SQUARE:
18546           ++nesting_depth;
18547           break;
18548
18549         case CPP_CLOSE_PAREN:
18550         case CPP_CLOSE_SQUARE:
18551           if (nesting_depth-- == 0)
18552             return;
18553           break;
18554
18555         case CPP_EOF:
18556         case CPP_PRAGMA_EOL:
18557         case CPP_SEMICOLON:
18558         case CPP_OPEN_BRACE:
18559         case CPP_CLOSE_BRACE:
18560           /* The '>' was probably forgotten, don't look further.  */
18561           return;
18562
18563         default:
18564           break;
18565         }
18566
18567       /* Consume this token.  */
18568       cp_lexer_consume_token (parser->lexer);
18569     }
18570 }
18571
18572 /* If the next token is the indicated keyword, consume it.  Otherwise,
18573    issue an error message indicating that TOKEN_DESC was expected.
18574
18575    Returns the token consumed, if the token had the appropriate type.
18576    Otherwise, returns NULL.  */
18577
18578 static cp_token *
18579 cp_parser_require_keyword (cp_parser* parser,
18580                            enum rid keyword,
18581                            const char* token_desc)
18582 {
18583   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
18584
18585   if (token && token->keyword != keyword)
18586     {
18587       dyn_string_t error_msg;
18588
18589       /* Format the error message.  */
18590       error_msg = dyn_string_new (0);
18591       dyn_string_append_cstr (error_msg, "expected ");
18592       dyn_string_append_cstr (error_msg, token_desc);
18593       cp_parser_error (parser, error_msg->s);
18594       dyn_string_delete (error_msg);
18595       return NULL;
18596     }
18597
18598   return token;
18599 }
18600
18601 /* Returns TRUE iff TOKEN is a token that can begin the body of a
18602    function-definition.  */
18603
18604 static bool
18605 cp_parser_token_starts_function_definition_p (cp_token* token)
18606 {
18607   return (/* An ordinary function-body begins with an `{'.  */
18608           token->type == CPP_OPEN_BRACE
18609           /* A ctor-initializer begins with a `:'.  */
18610           || token->type == CPP_COLON
18611           /* A function-try-block begins with `try'.  */
18612           || token->keyword == RID_TRY
18613           /* The named return value extension begins with `return'.  */
18614           || token->keyword == RID_RETURN);
18615 }
18616
18617 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
18618    definition.  */
18619
18620 static bool
18621 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
18622 {
18623   cp_token *token;
18624
18625   token = cp_lexer_peek_token (parser->lexer);
18626   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
18627 }
18628
18629 /* Returns TRUE iff the next token is the "," or ">" (or `>>', in
18630    C++0x) ending a template-argument.  */
18631
18632 static bool
18633 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
18634 {
18635   cp_token *token;
18636
18637   token = cp_lexer_peek_token (parser->lexer);
18638   return (token->type == CPP_COMMA 
18639           || token->type == CPP_GREATER
18640           || token->type == CPP_ELLIPSIS
18641           || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT));
18642 }
18643
18644 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
18645    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
18646
18647 static bool
18648 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
18649                                                      size_t n)
18650 {
18651   cp_token *token;
18652
18653   token = cp_lexer_peek_nth_token (parser->lexer, n);
18654   if (token->type == CPP_LESS)
18655     return true;
18656   /* Check for the sequence `<::' in the original code. It would be lexed as
18657      `[:', where `[' is a digraph, and there is no whitespace before
18658      `:'.  */
18659   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
18660     {
18661       cp_token *token2;
18662       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
18663       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
18664         return true;
18665     }
18666   return false;
18667 }
18668
18669 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
18670    or none_type otherwise.  */
18671
18672 static enum tag_types
18673 cp_parser_token_is_class_key (cp_token* token)
18674 {
18675   switch (token->keyword)
18676     {
18677     case RID_CLASS:
18678       return class_type;
18679     case RID_STRUCT:
18680       return record_type;
18681     case RID_UNION:
18682       return union_type;
18683
18684     default:
18685       return none_type;
18686     }
18687 }
18688
18689 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
18690
18691 static void
18692 cp_parser_check_class_key (enum tag_types class_key, tree type)
18693 {
18694   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
18695     permerror (input_location, "%qs tag used in naming %q#T",
18696             class_key == union_type ? "union"
18697              : class_key == record_type ? "struct" : "class",
18698              type);
18699 }
18700
18701 /* Issue an error message if DECL is redeclared with different
18702    access than its original declaration [class.access.spec/3].
18703    This applies to nested classes and nested class templates.
18704    [class.mem/1].  */
18705
18706 static void
18707 cp_parser_check_access_in_redeclaration (tree decl, location_t location)
18708 {
18709   if (!decl || !CLASS_TYPE_P (TREE_TYPE (decl)))
18710     return;
18711
18712   if ((TREE_PRIVATE (decl)
18713        != (current_access_specifier == access_private_node))
18714       || (TREE_PROTECTED (decl)
18715           != (current_access_specifier == access_protected_node)))
18716     error ("%H%qD redeclared with different access", &location, decl);
18717 }
18718
18719 /* Look for the `template' keyword, as a syntactic disambiguator.
18720    Return TRUE iff it is present, in which case it will be
18721    consumed.  */
18722
18723 static bool
18724 cp_parser_optional_template_keyword (cp_parser *parser)
18725 {
18726   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
18727     {
18728       /* The `template' keyword can only be used within templates;
18729          outside templates the parser can always figure out what is a
18730          template and what is not.  */
18731       if (!processing_template_decl)
18732         {
18733           cp_token *token = cp_lexer_peek_token (parser->lexer);
18734           error ("%H%<template%> (as a disambiguator) is only allowed "
18735                  "within templates", &token->location);
18736           /* If this part of the token stream is rescanned, the same
18737              error message would be generated.  So, we purge the token
18738              from the stream.  */
18739           cp_lexer_purge_token (parser->lexer);
18740           return false;
18741         }
18742       else
18743         {
18744           /* Consume the `template' keyword.  */
18745           cp_lexer_consume_token (parser->lexer);
18746           return true;
18747         }
18748     }
18749
18750   return false;
18751 }
18752
18753 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
18754    set PARSER->SCOPE, and perform other related actions.  */
18755
18756 static void
18757 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
18758 {
18759   int i;
18760   struct tree_check *check_value;
18761   deferred_access_check *chk;
18762   VEC (deferred_access_check,gc) *checks;
18763
18764   /* Get the stored value.  */
18765   check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
18766   /* Perform any access checks that were deferred.  */
18767   checks = check_value->checks;
18768   if (checks)
18769     {
18770       for (i = 0 ;
18771            VEC_iterate (deferred_access_check, checks, i, chk) ;
18772            ++i)
18773         {
18774           perform_or_defer_access_check (chk->binfo,
18775                                          chk->decl,
18776                                          chk->diag_decl);
18777         }
18778     }
18779   /* Set the scope from the stored value.  */
18780   parser->scope = check_value->value;
18781   parser->qualifying_scope = check_value->qualifying_scope;
18782   parser->object_scope = NULL_TREE;
18783 }
18784
18785 /* Consume tokens up through a non-nested END token.  Returns TRUE if we
18786    encounter the end of a block before what we were looking for.  */
18787
18788 static bool
18789 cp_parser_cache_group (cp_parser *parser,
18790                        enum cpp_ttype end,
18791                        unsigned depth)
18792 {
18793   while (true)
18794     {
18795       cp_token *token = cp_lexer_peek_token (parser->lexer);
18796
18797       /* Abort a parenthesized expression if we encounter a semicolon.  */
18798       if ((end == CPP_CLOSE_PAREN || depth == 0)
18799           && token->type == CPP_SEMICOLON)
18800         return true;
18801       /* If we've reached the end of the file, stop.  */
18802       if (token->type == CPP_EOF
18803           || (end != CPP_PRAGMA_EOL
18804               && token->type == CPP_PRAGMA_EOL))
18805         return true;
18806       if (token->type == CPP_CLOSE_BRACE && depth == 0)
18807         /* We've hit the end of an enclosing block, so there's been some
18808            kind of syntax error.  */
18809         return true;
18810
18811       /* Consume the token.  */
18812       cp_lexer_consume_token (parser->lexer);
18813       /* See if it starts a new group.  */
18814       if (token->type == CPP_OPEN_BRACE)
18815         {
18816           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
18817           /* In theory this should probably check end == '}', but
18818              cp_parser_save_member_function_body needs it to exit
18819              after either '}' or ')' when called with ')'.  */
18820           if (depth == 0)
18821             return false;
18822         }
18823       else if (token->type == CPP_OPEN_PAREN)
18824         {
18825           cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
18826           if (depth == 0 && end == CPP_CLOSE_PAREN)
18827             return false;
18828         }
18829       else if (token->type == CPP_PRAGMA)
18830         cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
18831       else if (token->type == end)
18832         return false;
18833     }
18834 }
18835
18836 /* Begin parsing tentatively.  We always save tokens while parsing
18837    tentatively so that if the tentative parsing fails we can restore the
18838    tokens.  */
18839
18840 static void
18841 cp_parser_parse_tentatively (cp_parser* parser)
18842 {
18843   /* Enter a new parsing context.  */
18844   parser->context = cp_parser_context_new (parser->context);
18845   /* Begin saving tokens.  */
18846   cp_lexer_save_tokens (parser->lexer);
18847   /* In order to avoid repetitive access control error messages,
18848      access checks are queued up until we are no longer parsing
18849      tentatively.  */
18850   push_deferring_access_checks (dk_deferred);
18851 }
18852
18853 /* Commit to the currently active tentative parse.  */
18854
18855 static void
18856 cp_parser_commit_to_tentative_parse (cp_parser* parser)
18857 {
18858   cp_parser_context *context;
18859   cp_lexer *lexer;
18860
18861   /* Mark all of the levels as committed.  */
18862   lexer = parser->lexer;
18863   for (context = parser->context; context->next; context = context->next)
18864     {
18865       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
18866         break;
18867       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
18868       while (!cp_lexer_saving_tokens (lexer))
18869         lexer = lexer->next;
18870       cp_lexer_commit_tokens (lexer);
18871     }
18872 }
18873
18874 /* Abort the currently active tentative parse.  All consumed tokens
18875    will be rolled back, and no diagnostics will be issued.  */
18876
18877 static void
18878 cp_parser_abort_tentative_parse (cp_parser* parser)
18879 {
18880   cp_parser_simulate_error (parser);
18881   /* Now, pretend that we want to see if the construct was
18882      successfully parsed.  */
18883   cp_parser_parse_definitely (parser);
18884 }
18885
18886 /* Stop parsing tentatively.  If a parse error has occurred, restore the
18887    token stream.  Otherwise, commit to the tokens we have consumed.
18888    Returns true if no error occurred; false otherwise.  */
18889
18890 static bool
18891 cp_parser_parse_definitely (cp_parser* parser)
18892 {
18893   bool error_occurred;
18894   cp_parser_context *context;
18895
18896   /* Remember whether or not an error occurred, since we are about to
18897      destroy that information.  */
18898   error_occurred = cp_parser_error_occurred (parser);
18899   /* Remove the topmost context from the stack.  */
18900   context = parser->context;
18901   parser->context = context->next;
18902   /* If no parse errors occurred, commit to the tentative parse.  */
18903   if (!error_occurred)
18904     {
18905       /* Commit to the tokens read tentatively, unless that was
18906          already done.  */
18907       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
18908         cp_lexer_commit_tokens (parser->lexer);
18909
18910       pop_to_parent_deferring_access_checks ();
18911     }
18912   /* Otherwise, if errors occurred, roll back our state so that things
18913      are just as they were before we began the tentative parse.  */
18914   else
18915     {
18916       cp_lexer_rollback_tokens (parser->lexer);
18917       pop_deferring_access_checks ();
18918     }
18919   /* Add the context to the front of the free list.  */
18920   context->next = cp_parser_context_free_list;
18921   cp_parser_context_free_list = context;
18922
18923   return !error_occurred;
18924 }
18925
18926 /* Returns true if we are parsing tentatively and are not committed to
18927    this tentative parse.  */
18928
18929 static bool
18930 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
18931 {
18932   return (cp_parser_parsing_tentatively (parser)
18933           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
18934 }
18935
18936 /* Returns nonzero iff an error has occurred during the most recent
18937    tentative parse.  */
18938
18939 static bool
18940 cp_parser_error_occurred (cp_parser* parser)
18941 {
18942   return (cp_parser_parsing_tentatively (parser)
18943           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
18944 }
18945
18946 /* Returns nonzero if GNU extensions are allowed.  */
18947
18948 static bool
18949 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
18950 {
18951   return parser->allow_gnu_extensions_p;
18952 }
18953 \f
18954 /* Objective-C++ Productions */
18955
18956
18957 /* Parse an Objective-C expression, which feeds into a primary-expression
18958    above.
18959
18960    objc-expression:
18961      objc-message-expression
18962      objc-string-literal
18963      objc-encode-expression
18964      objc-protocol-expression
18965      objc-selector-expression
18966
18967   Returns a tree representation of the expression.  */
18968
18969 static tree
18970 cp_parser_objc_expression (cp_parser* parser)
18971 {
18972   /* Try to figure out what kind of declaration is present.  */
18973   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
18974
18975   switch (kwd->type)
18976     {
18977     case CPP_OPEN_SQUARE:
18978       return cp_parser_objc_message_expression (parser);
18979
18980     case CPP_OBJC_STRING:
18981       kwd = cp_lexer_consume_token (parser->lexer);
18982       return objc_build_string_object (kwd->u.value);
18983
18984     case CPP_KEYWORD:
18985       switch (kwd->keyword)
18986         {
18987         case RID_AT_ENCODE:
18988           return cp_parser_objc_encode_expression (parser);
18989
18990         case RID_AT_PROTOCOL:
18991           return cp_parser_objc_protocol_expression (parser);
18992
18993         case RID_AT_SELECTOR:
18994           return cp_parser_objc_selector_expression (parser);
18995
18996         default:
18997           break;
18998         }
18999     default:
19000       error ("%Hmisplaced %<@%D%> Objective-C++ construct",
19001              &kwd->location, kwd->u.value);
19002       cp_parser_skip_to_end_of_block_or_statement (parser);
19003     }
19004
19005   return error_mark_node;
19006 }
19007
19008 /* Parse an Objective-C message expression.
19009
19010    objc-message-expression:
19011      [ objc-message-receiver objc-message-args ]
19012
19013    Returns a representation of an Objective-C message.  */
19014
19015 static tree
19016 cp_parser_objc_message_expression (cp_parser* parser)
19017 {
19018   tree receiver, messageargs;
19019
19020   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
19021   receiver = cp_parser_objc_message_receiver (parser);
19022   messageargs = cp_parser_objc_message_args (parser);
19023   cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
19024
19025   return objc_build_message_expr (build_tree_list (receiver, messageargs));
19026 }
19027
19028 /* Parse an objc-message-receiver.
19029
19030    objc-message-receiver:
19031      expression
19032      simple-type-specifier
19033
19034   Returns a representation of the type or expression.  */
19035
19036 static tree
19037 cp_parser_objc_message_receiver (cp_parser* parser)
19038 {
19039   tree rcv;
19040
19041   /* An Objective-C message receiver may be either (1) a type
19042      or (2) an expression.  */
19043   cp_parser_parse_tentatively (parser);
19044   rcv = cp_parser_expression (parser, false);
19045
19046   if (cp_parser_parse_definitely (parser))
19047     return rcv;
19048
19049   rcv = cp_parser_simple_type_specifier (parser,
19050                                          /*decl_specs=*/NULL,
19051                                          CP_PARSER_FLAGS_NONE);
19052
19053   return objc_get_class_reference (rcv);
19054 }
19055
19056 /* Parse the arguments and selectors comprising an Objective-C message.
19057
19058    objc-message-args:
19059      objc-selector
19060      objc-selector-args
19061      objc-selector-args , objc-comma-args
19062
19063    objc-selector-args:
19064      objc-selector [opt] : assignment-expression
19065      objc-selector-args objc-selector [opt] : assignment-expression
19066
19067    objc-comma-args:
19068      assignment-expression
19069      objc-comma-args , assignment-expression
19070
19071    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
19072    selector arguments and TREE_VALUE containing a list of comma
19073    arguments.  */
19074
19075 static tree
19076 cp_parser_objc_message_args (cp_parser* parser)
19077 {
19078   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
19079   bool maybe_unary_selector_p = true;
19080   cp_token *token = cp_lexer_peek_token (parser->lexer);
19081
19082   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
19083     {
19084       tree selector = NULL_TREE, arg;
19085
19086       if (token->type != CPP_COLON)
19087         selector = cp_parser_objc_selector (parser);
19088
19089       /* Detect if we have a unary selector.  */
19090       if (maybe_unary_selector_p
19091           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
19092         return build_tree_list (selector, NULL_TREE);
19093
19094       maybe_unary_selector_p = false;
19095       cp_parser_require (parser, CPP_COLON, "%<:%>");
19096       arg = cp_parser_assignment_expression (parser, false);
19097
19098       sel_args
19099         = chainon (sel_args,
19100                    build_tree_list (selector, arg));
19101
19102       token = cp_lexer_peek_token (parser->lexer);
19103     }
19104
19105   /* Handle non-selector arguments, if any. */
19106   while (token->type == CPP_COMMA)
19107     {
19108       tree arg;
19109
19110       cp_lexer_consume_token (parser->lexer);
19111       arg = cp_parser_assignment_expression (parser, false);
19112
19113       addl_args
19114         = chainon (addl_args,
19115                    build_tree_list (NULL_TREE, arg));
19116
19117       token = cp_lexer_peek_token (parser->lexer);
19118     }
19119
19120   return build_tree_list (sel_args, addl_args);
19121 }
19122
19123 /* Parse an Objective-C encode expression.
19124
19125    objc-encode-expression:
19126      @encode objc-typename
19127
19128    Returns an encoded representation of the type argument.  */
19129
19130 static tree
19131 cp_parser_objc_encode_expression (cp_parser* parser)
19132 {
19133   tree type;
19134   cp_token *token;
19135
19136   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
19137   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
19138   token = cp_lexer_peek_token (parser->lexer);
19139   type = complete_type (cp_parser_type_id (parser));
19140   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19141
19142   if (!type)
19143     {
19144       error ("%H%<@encode%> must specify a type as an argument",
19145              &token->location);
19146       return error_mark_node;
19147     }
19148
19149   return objc_build_encode_expr (type);
19150 }
19151
19152 /* Parse an Objective-C @defs expression.  */
19153
19154 static tree
19155 cp_parser_objc_defs_expression (cp_parser *parser)
19156 {
19157   tree name;
19158
19159   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
19160   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
19161   name = cp_parser_identifier (parser);
19162   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19163
19164   return objc_get_class_ivars (name);
19165 }
19166
19167 /* Parse an Objective-C protocol expression.
19168
19169   objc-protocol-expression:
19170     @protocol ( identifier )
19171
19172   Returns a representation of the protocol expression.  */
19173
19174 static tree
19175 cp_parser_objc_protocol_expression (cp_parser* parser)
19176 {
19177   tree proto;
19178
19179   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
19180   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
19181   proto = cp_parser_identifier (parser);
19182   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19183
19184   return objc_build_protocol_expr (proto);
19185 }
19186
19187 /* Parse an Objective-C selector expression.
19188
19189    objc-selector-expression:
19190      @selector ( objc-method-signature )
19191
19192    objc-method-signature:
19193      objc-selector
19194      objc-selector-seq
19195
19196    objc-selector-seq:
19197      objc-selector :
19198      objc-selector-seq objc-selector :
19199
19200   Returns a representation of the method selector.  */
19201
19202 static tree
19203 cp_parser_objc_selector_expression (cp_parser* parser)
19204 {
19205   tree sel_seq = NULL_TREE;
19206   bool maybe_unary_selector_p = true;
19207   cp_token *token;
19208
19209   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
19210   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
19211   token = cp_lexer_peek_token (parser->lexer);
19212
19213   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
19214          || token->type == CPP_SCOPE)
19215     {
19216       tree selector = NULL_TREE;
19217
19218       if (token->type != CPP_COLON
19219           || token->type == CPP_SCOPE)
19220         selector = cp_parser_objc_selector (parser);
19221
19222       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
19223           && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
19224         {
19225           /* Detect if we have a unary selector.  */
19226           if (maybe_unary_selector_p)
19227             {
19228               sel_seq = selector;
19229               goto finish_selector;
19230             }
19231           else
19232             {
19233               cp_parser_error (parser, "expected %<:%>");
19234             }
19235         }
19236       maybe_unary_selector_p = false;
19237       token = cp_lexer_consume_token (parser->lexer);
19238
19239       if (token->type == CPP_SCOPE)
19240         {
19241           sel_seq
19242             = chainon (sel_seq,
19243                        build_tree_list (selector, NULL_TREE));
19244           sel_seq
19245             = chainon (sel_seq,
19246                        build_tree_list (NULL_TREE, NULL_TREE));
19247         }
19248       else
19249         sel_seq
19250           = chainon (sel_seq,
19251                      build_tree_list (selector, NULL_TREE));
19252
19253       token = cp_lexer_peek_token (parser->lexer);
19254     }
19255
19256  finish_selector:
19257   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19258
19259   return objc_build_selector_expr (sel_seq);
19260 }
19261
19262 /* Parse a list of identifiers.
19263
19264    objc-identifier-list:
19265      identifier
19266      objc-identifier-list , identifier
19267
19268    Returns a TREE_LIST of identifier nodes.  */
19269
19270 static tree
19271 cp_parser_objc_identifier_list (cp_parser* parser)
19272 {
19273   tree list = build_tree_list (NULL_TREE, cp_parser_identifier (parser));
19274   cp_token *sep = cp_lexer_peek_token (parser->lexer);
19275
19276   while (sep->type == CPP_COMMA)
19277     {
19278       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
19279       list = chainon (list,
19280                       build_tree_list (NULL_TREE,
19281                                        cp_parser_identifier (parser)));
19282       sep = cp_lexer_peek_token (parser->lexer);
19283     }
19284
19285   return list;
19286 }
19287
19288 /* Parse an Objective-C alias declaration.
19289
19290    objc-alias-declaration:
19291      @compatibility_alias identifier identifier ;
19292
19293    This function registers the alias mapping with the Objective-C front end.
19294    It returns nothing.  */
19295
19296 static void
19297 cp_parser_objc_alias_declaration (cp_parser* parser)
19298 {
19299   tree alias, orig;
19300
19301   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
19302   alias = cp_parser_identifier (parser);
19303   orig = cp_parser_identifier (parser);
19304   objc_declare_alias (alias, orig);
19305   cp_parser_consume_semicolon_at_end_of_statement (parser);
19306 }
19307
19308 /* Parse an Objective-C class forward-declaration.
19309
19310    objc-class-declaration:
19311      @class objc-identifier-list ;
19312
19313    The function registers the forward declarations with the Objective-C
19314    front end.  It returns nothing.  */
19315
19316 static void
19317 cp_parser_objc_class_declaration (cp_parser* parser)
19318 {
19319   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
19320   objc_declare_class (cp_parser_objc_identifier_list (parser));
19321   cp_parser_consume_semicolon_at_end_of_statement (parser);
19322 }
19323
19324 /* Parse a list of Objective-C protocol references.
19325
19326    objc-protocol-refs-opt:
19327      objc-protocol-refs [opt]
19328
19329    objc-protocol-refs:
19330      < objc-identifier-list >
19331
19332    Returns a TREE_LIST of identifiers, if any.  */
19333
19334 static tree
19335 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
19336 {
19337   tree protorefs = NULL_TREE;
19338
19339   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
19340     {
19341       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
19342       protorefs = cp_parser_objc_identifier_list (parser);
19343       cp_parser_require (parser, CPP_GREATER, "%<>%>");
19344     }
19345
19346   return protorefs;
19347 }
19348
19349 /* Parse a Objective-C visibility specification.  */
19350
19351 static void
19352 cp_parser_objc_visibility_spec (cp_parser* parser)
19353 {
19354   cp_token *vis = cp_lexer_peek_token (parser->lexer);
19355
19356   switch (vis->keyword)
19357     {
19358     case RID_AT_PRIVATE:
19359       objc_set_visibility (2);
19360       break;
19361     case RID_AT_PROTECTED:
19362       objc_set_visibility (0);
19363       break;
19364     case RID_AT_PUBLIC:
19365       objc_set_visibility (1);
19366       break;
19367     default:
19368       return;
19369     }
19370
19371   /* Eat '@private'/'@protected'/'@public'.  */
19372   cp_lexer_consume_token (parser->lexer);
19373 }
19374
19375 /* Parse an Objective-C method type.  */
19376
19377 static void
19378 cp_parser_objc_method_type (cp_parser* parser)
19379 {
19380   objc_set_method_type
19381    (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS
19382     ? PLUS_EXPR
19383     : MINUS_EXPR);
19384 }
19385
19386 /* Parse an Objective-C protocol qualifier.  */
19387
19388 static tree
19389 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
19390 {
19391   tree quals = NULL_TREE, node;
19392   cp_token *token = cp_lexer_peek_token (parser->lexer);
19393
19394   node = token->u.value;
19395
19396   while (node && TREE_CODE (node) == IDENTIFIER_NODE
19397          && (node == ridpointers [(int) RID_IN]
19398              || node == ridpointers [(int) RID_OUT]
19399              || node == ridpointers [(int) RID_INOUT]
19400              || node == ridpointers [(int) RID_BYCOPY]
19401              || node == ridpointers [(int) RID_BYREF]
19402              || node == ridpointers [(int) RID_ONEWAY]))
19403     {
19404       quals = tree_cons (NULL_TREE, node, quals);
19405       cp_lexer_consume_token (parser->lexer);
19406       token = cp_lexer_peek_token (parser->lexer);
19407       node = token->u.value;
19408     }
19409
19410   return quals;
19411 }
19412
19413 /* Parse an Objective-C typename.  */
19414
19415 static tree
19416 cp_parser_objc_typename (cp_parser* parser)
19417 {
19418   tree type_name = NULL_TREE;
19419
19420   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
19421     {
19422       tree proto_quals, cp_type = NULL_TREE;
19423
19424       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
19425       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
19426
19427       /* An ObjC type name may consist of just protocol qualifiers, in which
19428          case the type shall default to 'id'.  */
19429       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
19430         cp_type = cp_parser_type_id (parser);
19431
19432       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19433       type_name = build_tree_list (proto_quals, cp_type);
19434     }
19435
19436   return type_name;
19437 }
19438
19439 /* Check to see if TYPE refers to an Objective-C selector name.  */
19440
19441 static bool
19442 cp_parser_objc_selector_p (enum cpp_ttype type)
19443 {
19444   return (type == CPP_NAME || type == CPP_KEYWORD
19445           || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
19446           || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
19447           || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
19448           || type == CPP_XOR || type == CPP_XOR_EQ);
19449 }
19450
19451 /* Parse an Objective-C selector.  */
19452
19453 static tree
19454 cp_parser_objc_selector (cp_parser* parser)
19455 {
19456   cp_token *token = cp_lexer_consume_token (parser->lexer);
19457
19458   if (!cp_parser_objc_selector_p (token->type))
19459     {
19460       error ("%Hinvalid Objective-C++ selector name", &token->location);
19461       return error_mark_node;
19462     }
19463
19464   /* C++ operator names are allowed to appear in ObjC selectors.  */
19465   switch (token->type)
19466     {
19467     case CPP_AND_AND: return get_identifier ("and");
19468     case CPP_AND_EQ: return get_identifier ("and_eq");
19469     case CPP_AND: return get_identifier ("bitand");
19470     case CPP_OR: return get_identifier ("bitor");
19471     case CPP_COMPL: return get_identifier ("compl");
19472     case CPP_NOT: return get_identifier ("not");
19473     case CPP_NOT_EQ: return get_identifier ("not_eq");
19474     case CPP_OR_OR: return get_identifier ("or");
19475     case CPP_OR_EQ: return get_identifier ("or_eq");
19476     case CPP_XOR: return get_identifier ("xor");
19477     case CPP_XOR_EQ: return get_identifier ("xor_eq");
19478     default: return token->u.value;
19479     }
19480 }
19481
19482 /* Parse an Objective-C params list.  */
19483
19484 static tree
19485 cp_parser_objc_method_keyword_params (cp_parser* parser)
19486 {
19487   tree params = NULL_TREE;
19488   bool maybe_unary_selector_p = true;
19489   cp_token *token = cp_lexer_peek_token (parser->lexer);
19490
19491   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
19492     {
19493       tree selector = NULL_TREE, type_name, identifier;
19494
19495       if (token->type != CPP_COLON)
19496         selector = cp_parser_objc_selector (parser);
19497
19498       /* Detect if we have a unary selector.  */
19499       if (maybe_unary_selector_p
19500           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
19501         return selector;
19502
19503       maybe_unary_selector_p = false;
19504       cp_parser_require (parser, CPP_COLON, "%<:%>");
19505       type_name = cp_parser_objc_typename (parser);
19506       identifier = cp_parser_identifier (parser);
19507
19508       params
19509         = chainon (params,
19510                    objc_build_keyword_decl (selector,
19511                                             type_name,
19512                                             identifier));
19513
19514       token = cp_lexer_peek_token (parser->lexer);
19515     }
19516
19517   return params;
19518 }
19519
19520 /* Parse the non-keyword Objective-C params.  */
19521
19522 static tree
19523 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp)
19524 {
19525   tree params = make_node (TREE_LIST);
19526   cp_token *token = cp_lexer_peek_token (parser->lexer);
19527   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
19528
19529   while (token->type == CPP_COMMA)
19530     {
19531       cp_parameter_declarator *parmdecl;
19532       tree parm;
19533
19534       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
19535       token = cp_lexer_peek_token (parser->lexer);
19536
19537       if (token->type == CPP_ELLIPSIS)
19538         {
19539           cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
19540           *ellipsisp = true;
19541           break;
19542         }
19543
19544       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
19545       parm = grokdeclarator (parmdecl->declarator,
19546                              &parmdecl->decl_specifiers,
19547                              PARM, /*initialized=*/0,
19548                              /*attrlist=*/NULL);
19549
19550       chainon (params, build_tree_list (NULL_TREE, parm));
19551       token = cp_lexer_peek_token (parser->lexer);
19552     }
19553
19554   return params;
19555 }
19556
19557 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
19558
19559 static void
19560 cp_parser_objc_interstitial_code (cp_parser* parser)
19561 {
19562   cp_token *token = cp_lexer_peek_token (parser->lexer);
19563
19564   /* If the next token is `extern' and the following token is a string
19565      literal, then we have a linkage specification.  */
19566   if (token->keyword == RID_EXTERN
19567       && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser->lexer, 2)))
19568     cp_parser_linkage_specification (parser);
19569   /* Handle #pragma, if any.  */
19570   else if (token->type == CPP_PRAGMA)
19571     cp_parser_pragma (parser, pragma_external);
19572   /* Allow stray semicolons.  */
19573   else if (token->type == CPP_SEMICOLON)
19574     cp_lexer_consume_token (parser->lexer);
19575   /* Finally, try to parse a block-declaration, or a function-definition.  */
19576   else
19577     cp_parser_block_declaration (parser, /*statement_p=*/false);
19578 }
19579
19580 /* Parse a method signature.  */
19581
19582 static tree
19583 cp_parser_objc_method_signature (cp_parser* parser)
19584 {
19585   tree rettype, kwdparms, optparms;
19586   bool ellipsis = false;
19587
19588   cp_parser_objc_method_type (parser);
19589   rettype = cp_parser_objc_typename (parser);
19590   kwdparms = cp_parser_objc_method_keyword_params (parser);
19591   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis);
19592
19593   return objc_build_method_signature (rettype, kwdparms, optparms, ellipsis);
19594 }
19595
19596 /* Pars an Objective-C method prototype list.  */
19597
19598 static void
19599 cp_parser_objc_method_prototype_list (cp_parser* parser)
19600 {
19601   cp_token *token = cp_lexer_peek_token (parser->lexer);
19602
19603   while (token->keyword != RID_AT_END)
19604     {
19605       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
19606         {
19607           objc_add_method_declaration
19608            (cp_parser_objc_method_signature (parser));
19609           cp_parser_consume_semicolon_at_end_of_statement (parser);
19610         }
19611       else
19612         /* Allow for interspersed non-ObjC++ code.  */
19613         cp_parser_objc_interstitial_code (parser);
19614
19615       token = cp_lexer_peek_token (parser->lexer);
19616     }
19617
19618   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
19619   objc_finish_interface ();
19620 }
19621
19622 /* Parse an Objective-C method definition list.  */
19623
19624 static void
19625 cp_parser_objc_method_definition_list (cp_parser* parser)
19626 {
19627   cp_token *token = cp_lexer_peek_token (parser->lexer);
19628
19629   while (token->keyword != RID_AT_END)
19630     {
19631       tree meth;
19632
19633       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
19634         {
19635           push_deferring_access_checks (dk_deferred);
19636           objc_start_method_definition
19637            (cp_parser_objc_method_signature (parser));
19638
19639           /* For historical reasons, we accept an optional semicolon.  */
19640           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
19641             cp_lexer_consume_token (parser->lexer);
19642
19643           perform_deferred_access_checks ();
19644           stop_deferring_access_checks ();
19645           meth = cp_parser_function_definition_after_declarator (parser,
19646                                                                  false);
19647           pop_deferring_access_checks ();
19648           objc_finish_method_definition (meth);
19649         }
19650       else
19651         /* Allow for interspersed non-ObjC++ code.  */
19652         cp_parser_objc_interstitial_code (parser);
19653
19654       token = cp_lexer_peek_token (parser->lexer);
19655     }
19656
19657   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
19658   objc_finish_implementation ();
19659 }
19660
19661 /* Parse Objective-C ivars.  */
19662
19663 static void
19664 cp_parser_objc_class_ivars (cp_parser* parser)
19665 {
19666   cp_token *token = cp_lexer_peek_token (parser->lexer);
19667
19668   if (token->type != CPP_OPEN_BRACE)
19669     return;     /* No ivars specified.  */
19670
19671   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
19672   token = cp_lexer_peek_token (parser->lexer);
19673
19674   while (token->type != CPP_CLOSE_BRACE)
19675     {
19676       cp_decl_specifier_seq declspecs;
19677       int decl_class_or_enum_p;
19678       tree prefix_attributes;
19679
19680       cp_parser_objc_visibility_spec (parser);
19681
19682       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
19683         break;
19684
19685       cp_parser_decl_specifier_seq (parser,
19686                                     CP_PARSER_FLAGS_OPTIONAL,
19687                                     &declspecs,
19688                                     &decl_class_or_enum_p);
19689       prefix_attributes = declspecs.attributes;
19690       declspecs.attributes = NULL_TREE;
19691
19692       /* Keep going until we hit the `;' at the end of the
19693          declaration.  */
19694       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
19695         {
19696           tree width = NULL_TREE, attributes, first_attribute, decl;
19697           cp_declarator *declarator = NULL;
19698           int ctor_dtor_or_conv_p;
19699
19700           /* Check for a (possibly unnamed) bitfield declaration.  */
19701           token = cp_lexer_peek_token (parser->lexer);
19702           if (token->type == CPP_COLON)
19703             goto eat_colon;
19704
19705           if (token->type == CPP_NAME
19706               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
19707                   == CPP_COLON))
19708             {
19709               /* Get the name of the bitfield.  */
19710               declarator = make_id_declarator (NULL_TREE,
19711                                                cp_parser_identifier (parser),
19712                                                sfk_none);
19713
19714              eat_colon:
19715               cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
19716               /* Get the width of the bitfield.  */
19717               width
19718                 = cp_parser_constant_expression (parser,
19719                                                  /*allow_non_constant=*/false,
19720                                                  NULL);
19721             }
19722           else
19723             {
19724               /* Parse the declarator.  */
19725               declarator
19726                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
19727                                         &ctor_dtor_or_conv_p,
19728                                         /*parenthesized_p=*/NULL,
19729                                         /*member_p=*/false);
19730             }
19731
19732           /* Look for attributes that apply to the ivar.  */
19733           attributes = cp_parser_attributes_opt (parser);
19734           /* Remember which attributes are prefix attributes and
19735              which are not.  */
19736           first_attribute = attributes;
19737           /* Combine the attributes.  */
19738           attributes = chainon (prefix_attributes, attributes);
19739
19740           if (width)
19741               /* Create the bitfield declaration.  */
19742               decl = grokbitfield (declarator, &declspecs,
19743                                    width,
19744                                    attributes);
19745           else
19746             decl = grokfield (declarator, &declspecs,
19747                               NULL_TREE, /*init_const_expr_p=*/false,
19748                               NULL_TREE, attributes);
19749
19750           /* Add the instance variable.  */
19751           objc_add_instance_variable (decl);
19752
19753           /* Reset PREFIX_ATTRIBUTES.  */
19754           while (attributes && TREE_CHAIN (attributes) != first_attribute)
19755             attributes = TREE_CHAIN (attributes);
19756           if (attributes)
19757             TREE_CHAIN (attributes) = NULL_TREE;
19758
19759           token = cp_lexer_peek_token (parser->lexer);
19760
19761           if (token->type == CPP_COMMA)
19762             {
19763               cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
19764               continue;
19765             }
19766           break;
19767         }
19768
19769       cp_parser_consume_semicolon_at_end_of_statement (parser);
19770       token = cp_lexer_peek_token (parser->lexer);
19771     }
19772
19773   cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
19774   /* For historical reasons, we accept an optional semicolon.  */
19775   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
19776     cp_lexer_consume_token (parser->lexer);
19777 }
19778
19779 /* Parse an Objective-C protocol declaration.  */
19780
19781 static void
19782 cp_parser_objc_protocol_declaration (cp_parser* parser)
19783 {
19784   tree proto, protorefs;
19785   cp_token *tok;
19786
19787   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
19788   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
19789     {
19790       tok = cp_lexer_peek_token (parser->lexer);
19791       error ("%Hidentifier expected after %<@protocol%>", &tok->location);
19792       goto finish;
19793     }
19794
19795   /* See if we have a forward declaration or a definition.  */
19796   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
19797
19798   /* Try a forward declaration first.  */
19799   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
19800     {
19801       objc_declare_protocols (cp_parser_objc_identifier_list (parser));
19802      finish:
19803       cp_parser_consume_semicolon_at_end_of_statement (parser);
19804     }
19805
19806   /* Ok, we got a full-fledged definition (or at least should).  */
19807   else
19808     {
19809       proto = cp_parser_identifier (parser);
19810       protorefs = cp_parser_objc_protocol_refs_opt (parser);
19811       objc_start_protocol (proto, protorefs);
19812       cp_parser_objc_method_prototype_list (parser);
19813     }
19814 }
19815
19816 /* Parse an Objective-C superclass or category.  */
19817
19818 static void
19819 cp_parser_objc_superclass_or_category (cp_parser *parser, tree *super,
19820                                                           tree *categ)
19821 {
19822   cp_token *next = cp_lexer_peek_token (parser->lexer);
19823
19824   *super = *categ = NULL_TREE;
19825   if (next->type == CPP_COLON)
19826     {
19827       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
19828       *super = cp_parser_identifier (parser);
19829     }
19830   else if (next->type == CPP_OPEN_PAREN)
19831     {
19832       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
19833       *categ = cp_parser_identifier (parser);
19834       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19835     }
19836 }
19837
19838 /* Parse an Objective-C class interface.  */
19839
19840 static void
19841 cp_parser_objc_class_interface (cp_parser* parser)
19842 {
19843   tree name, super, categ, protos;
19844
19845   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
19846   name = cp_parser_identifier (parser);
19847   cp_parser_objc_superclass_or_category (parser, &super, &categ);
19848   protos = cp_parser_objc_protocol_refs_opt (parser);
19849
19850   /* We have either a class or a category on our hands.  */
19851   if (categ)
19852     objc_start_category_interface (name, categ, protos);
19853   else
19854     {
19855       objc_start_class_interface (name, super, protos);
19856       /* Handle instance variable declarations, if any.  */
19857       cp_parser_objc_class_ivars (parser);
19858       objc_continue_interface ();
19859     }
19860
19861   cp_parser_objc_method_prototype_list (parser);
19862 }
19863
19864 /* Parse an Objective-C class implementation.  */
19865
19866 static void
19867 cp_parser_objc_class_implementation (cp_parser* parser)
19868 {
19869   tree name, super, categ;
19870
19871   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
19872   name = cp_parser_identifier (parser);
19873   cp_parser_objc_superclass_or_category (parser, &super, &categ);
19874
19875   /* We have either a class or a category on our hands.  */
19876   if (categ)
19877     objc_start_category_implementation (name, categ);
19878   else
19879     {
19880       objc_start_class_implementation (name, super);
19881       /* Handle instance variable declarations, if any.  */
19882       cp_parser_objc_class_ivars (parser);
19883       objc_continue_implementation ();
19884     }
19885
19886   cp_parser_objc_method_definition_list (parser);
19887 }
19888
19889 /* Consume the @end token and finish off the implementation.  */
19890
19891 static void
19892 cp_parser_objc_end_implementation (cp_parser* parser)
19893 {
19894   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
19895   objc_finish_implementation ();
19896 }
19897
19898 /* Parse an Objective-C declaration.  */
19899
19900 static void
19901 cp_parser_objc_declaration (cp_parser* parser)
19902 {
19903   /* Try to figure out what kind of declaration is present.  */
19904   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
19905
19906   switch (kwd->keyword)
19907     {
19908     case RID_AT_ALIAS:
19909       cp_parser_objc_alias_declaration (parser);
19910       break;
19911     case RID_AT_CLASS:
19912       cp_parser_objc_class_declaration (parser);
19913       break;
19914     case RID_AT_PROTOCOL:
19915       cp_parser_objc_protocol_declaration (parser);
19916       break;
19917     case RID_AT_INTERFACE:
19918       cp_parser_objc_class_interface (parser);
19919       break;
19920     case RID_AT_IMPLEMENTATION:
19921       cp_parser_objc_class_implementation (parser);
19922       break;
19923     case RID_AT_END:
19924       cp_parser_objc_end_implementation (parser);
19925       break;
19926     default:
19927       error ("%Hmisplaced %<@%D%> Objective-C++ construct",
19928              &kwd->location, kwd->u.value);
19929       cp_parser_skip_to_end_of_block_or_statement (parser);
19930     }
19931 }
19932
19933 /* Parse an Objective-C try-catch-finally statement.
19934
19935    objc-try-catch-finally-stmt:
19936      @try compound-statement objc-catch-clause-seq [opt]
19937        objc-finally-clause [opt]
19938
19939    objc-catch-clause-seq:
19940      objc-catch-clause objc-catch-clause-seq [opt]
19941
19942    objc-catch-clause:
19943      @catch ( exception-declaration ) compound-statement
19944
19945    objc-finally-clause
19946      @finally compound-statement
19947
19948    Returns NULL_TREE.  */
19949
19950 static tree
19951 cp_parser_objc_try_catch_finally_statement (cp_parser *parser) {
19952   location_t location;
19953   tree stmt;
19954
19955   cp_parser_require_keyword (parser, RID_AT_TRY, "%<@try%>");
19956   location = cp_lexer_peek_token (parser->lexer)->location;
19957   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
19958      node, lest it get absorbed into the surrounding block.  */
19959   stmt = push_stmt_list ();
19960   cp_parser_compound_statement (parser, NULL, false);
19961   objc_begin_try_stmt (location, pop_stmt_list (stmt));
19962
19963   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
19964     {
19965       cp_parameter_declarator *parmdecl;
19966       tree parm;
19967
19968       cp_lexer_consume_token (parser->lexer);
19969       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
19970       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
19971       parm = grokdeclarator (parmdecl->declarator,
19972                              &parmdecl->decl_specifiers,
19973                              PARM, /*initialized=*/0,
19974                              /*attrlist=*/NULL);
19975       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19976       objc_begin_catch_clause (parm);
19977       cp_parser_compound_statement (parser, NULL, false);
19978       objc_finish_catch_clause ();
19979     }
19980
19981   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
19982     {
19983       cp_lexer_consume_token (parser->lexer);
19984       location = cp_lexer_peek_token (parser->lexer)->location;
19985       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
19986          node, lest it get absorbed into the surrounding block.  */
19987       stmt = push_stmt_list ();
19988       cp_parser_compound_statement (parser, NULL, false);
19989       objc_build_finally_clause (location, pop_stmt_list (stmt));
19990     }
19991
19992   return objc_finish_try_stmt ();
19993 }
19994
19995 /* Parse an Objective-C synchronized statement.
19996
19997    objc-synchronized-stmt:
19998      @synchronized ( expression ) compound-statement
19999
20000    Returns NULL_TREE.  */
20001
20002 static tree
20003 cp_parser_objc_synchronized_statement (cp_parser *parser) {
20004   location_t location;
20005   tree lock, stmt;
20006
20007   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, "%<@synchronized%>");
20008
20009   location = cp_lexer_peek_token (parser->lexer)->location;
20010   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
20011   lock = cp_parser_expression (parser, false);
20012   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
20013
20014   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
20015      node, lest it get absorbed into the surrounding block.  */
20016   stmt = push_stmt_list ();
20017   cp_parser_compound_statement (parser, NULL, false);
20018
20019   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
20020 }
20021
20022 /* Parse an Objective-C throw statement.
20023
20024    objc-throw-stmt:
20025      @throw assignment-expression [opt] ;
20026
20027    Returns a constructed '@throw' statement.  */
20028
20029 static tree
20030 cp_parser_objc_throw_statement (cp_parser *parser) {
20031   tree expr = NULL_TREE;
20032
20033   cp_parser_require_keyword (parser, RID_AT_THROW, "%<@throw%>");
20034
20035   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
20036     expr = cp_parser_assignment_expression (parser, false);
20037
20038   cp_parser_consume_semicolon_at_end_of_statement (parser);
20039
20040   return objc_build_throw_stmt (expr);
20041 }
20042
20043 /* Parse an Objective-C statement.  */
20044
20045 static tree
20046 cp_parser_objc_statement (cp_parser * parser) {
20047   /* Try to figure out what kind of declaration is present.  */
20048   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
20049
20050   switch (kwd->keyword)
20051     {
20052     case RID_AT_TRY:
20053       return cp_parser_objc_try_catch_finally_statement (parser);
20054     case RID_AT_SYNCHRONIZED:
20055       return cp_parser_objc_synchronized_statement (parser);
20056     case RID_AT_THROW:
20057       return cp_parser_objc_throw_statement (parser);
20058     default:
20059       error ("%Hmisplaced %<@%D%> Objective-C++ construct",
20060              &kwd->location, kwd->u.value);
20061       cp_parser_skip_to_end_of_block_or_statement (parser);
20062     }
20063
20064   return error_mark_node;
20065 }
20066 \f
20067 /* OpenMP 2.5 parsing routines.  */
20068
20069 /* Returns name of the next clause.
20070    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
20071    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
20072    returned and the token is consumed.  */
20073
20074 static pragma_omp_clause
20075 cp_parser_omp_clause_name (cp_parser *parser)
20076 {
20077   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
20078
20079   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
20080     result = PRAGMA_OMP_CLAUSE_IF;
20081   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
20082     result = PRAGMA_OMP_CLAUSE_DEFAULT;
20083   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
20084     result = PRAGMA_OMP_CLAUSE_PRIVATE;
20085   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
20086     {
20087       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
20088       const char *p = IDENTIFIER_POINTER (id);
20089
20090       switch (p[0])
20091         {
20092         case 'c':
20093           if (!strcmp ("collapse", p))
20094             result = PRAGMA_OMP_CLAUSE_COLLAPSE;
20095           else if (!strcmp ("copyin", p))
20096             result = PRAGMA_OMP_CLAUSE_COPYIN;
20097           else if (!strcmp ("copyprivate", p))
20098             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
20099           break;
20100         case 'f':
20101           if (!strcmp ("firstprivate", p))
20102             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
20103           break;
20104         case 'l':
20105           if (!strcmp ("lastprivate", p))
20106             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
20107           break;
20108         case 'n':
20109           if (!strcmp ("nowait", p))
20110             result = PRAGMA_OMP_CLAUSE_NOWAIT;
20111           else if (!strcmp ("num_threads", p))
20112             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
20113           break;
20114         case 'o':
20115           if (!strcmp ("ordered", p))
20116             result = PRAGMA_OMP_CLAUSE_ORDERED;
20117           break;
20118         case 'r':
20119           if (!strcmp ("reduction", p))
20120             result = PRAGMA_OMP_CLAUSE_REDUCTION;
20121           break;
20122         case 's':
20123           if (!strcmp ("schedule", p))
20124             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
20125           else if (!strcmp ("shared", p))
20126             result = PRAGMA_OMP_CLAUSE_SHARED;
20127           break;
20128         case 'u':
20129           if (!strcmp ("untied", p))
20130             result = PRAGMA_OMP_CLAUSE_UNTIED;
20131           break;
20132         }
20133     }
20134
20135   if (result != PRAGMA_OMP_CLAUSE_NONE)
20136     cp_lexer_consume_token (parser->lexer);
20137
20138   return result;
20139 }
20140
20141 /* Validate that a clause of the given type does not already exist.  */
20142
20143 static void
20144 check_no_duplicate_clause (tree clauses, enum omp_clause_code code,
20145                            const char *name, location_t location)
20146 {
20147   tree c;
20148
20149   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
20150     if (OMP_CLAUSE_CODE (c) == code)
20151       {
20152         error ("%Htoo many %qs clauses", &location, name);
20153         break;
20154       }
20155 }
20156
20157 /* OpenMP 2.5:
20158    variable-list:
20159      identifier
20160      variable-list , identifier
20161
20162    In addition, we match a closing parenthesis.  An opening parenthesis
20163    will have been consumed by the caller.
20164
20165    If KIND is nonzero, create the appropriate node and install the decl
20166    in OMP_CLAUSE_DECL and add the node to the head of the list.
20167
20168    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
20169    return the list created.  */
20170
20171 static tree
20172 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
20173                                 tree list)
20174 {
20175   cp_token *token;
20176   while (1)
20177     {
20178       tree name, decl;
20179
20180       token = cp_lexer_peek_token (parser->lexer);
20181       name = cp_parser_id_expression (parser, /*template_p=*/false,
20182                                       /*check_dependency_p=*/true,
20183                                       /*template_p=*/NULL,
20184                                       /*declarator_p=*/false,
20185                                       /*optional_p=*/false);
20186       if (name == error_mark_node)
20187         goto skip_comma;
20188
20189       decl = cp_parser_lookup_name_simple (parser, name, token->location);
20190       if (decl == error_mark_node)
20191         cp_parser_name_lookup_error (parser, name, decl, NULL, token->location);
20192       else if (kind != 0)
20193         {
20194           tree u = build_omp_clause (kind);
20195           OMP_CLAUSE_DECL (u) = decl;
20196           OMP_CLAUSE_CHAIN (u) = list;
20197           list = u;
20198         }
20199       else
20200         list = tree_cons (decl, NULL_TREE, list);
20201
20202     get_comma:
20203       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
20204         break;
20205       cp_lexer_consume_token (parser->lexer);
20206     }
20207
20208   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20209     {
20210       int ending;
20211
20212       /* Try to resync to an unnested comma.  Copied from
20213          cp_parser_parenthesized_expression_list.  */
20214     skip_comma:
20215       ending = cp_parser_skip_to_closing_parenthesis (parser,
20216                                                       /*recovering=*/true,
20217                                                       /*or_comma=*/true,
20218                                                       /*consume_paren=*/true);
20219       if (ending < 0)
20220         goto get_comma;
20221     }
20222
20223   return list;
20224 }
20225
20226 /* Similarly, but expect leading and trailing parenthesis.  This is a very
20227    common case for omp clauses.  */
20228
20229 static tree
20230 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
20231 {
20232   if (cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20233     return cp_parser_omp_var_list_no_open (parser, kind, list);
20234   return list;
20235 }
20236
20237 /* OpenMP 3.0:
20238    collapse ( constant-expression ) */
20239
20240 static tree
20241 cp_parser_omp_clause_collapse (cp_parser *parser, tree list, location_t location)
20242 {
20243   tree c, num;
20244   location_t loc;
20245   HOST_WIDE_INT n;
20246
20247   loc = cp_lexer_peek_token (parser->lexer)->location;
20248   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20249     return list;
20250
20251   num = cp_parser_constant_expression (parser, false, NULL);
20252
20253   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20254     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20255                                            /*or_comma=*/false,
20256                                            /*consume_paren=*/true);
20257
20258   if (num == error_mark_node)
20259     return list;
20260   num = fold_non_dependent_expr (num);
20261   if (!INTEGRAL_TYPE_P (TREE_TYPE (num))
20262       || !host_integerp (num, 0)
20263       || (n = tree_low_cst (num, 0)) <= 0
20264       || (int) n != n)
20265     {
20266       error ("%Hcollapse argument needs positive constant integer expression",
20267              &loc);
20268       return list;
20269     }
20270
20271   check_no_duplicate_clause (list, OMP_CLAUSE_COLLAPSE, "collapse", location);
20272   c = build_omp_clause (OMP_CLAUSE_COLLAPSE);
20273   OMP_CLAUSE_CHAIN (c) = list;
20274   OMP_CLAUSE_COLLAPSE_EXPR (c) = num;
20275
20276   return c;
20277 }
20278
20279 /* OpenMP 2.5:
20280    default ( shared | none ) */
20281
20282 static tree
20283 cp_parser_omp_clause_default (cp_parser *parser, tree list, location_t location)
20284 {
20285   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
20286   tree c;
20287
20288   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20289     return list;
20290   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
20291     {
20292       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
20293       const char *p = IDENTIFIER_POINTER (id);
20294
20295       switch (p[0])
20296         {
20297         case 'n':
20298           if (strcmp ("none", p) != 0)
20299             goto invalid_kind;
20300           kind = OMP_CLAUSE_DEFAULT_NONE;
20301           break;
20302
20303         case 's':
20304           if (strcmp ("shared", p) != 0)
20305             goto invalid_kind;
20306           kind = OMP_CLAUSE_DEFAULT_SHARED;
20307           break;
20308
20309         default:
20310           goto invalid_kind;
20311         }
20312
20313       cp_lexer_consume_token (parser->lexer);
20314     }
20315   else
20316     {
20317     invalid_kind:
20318       cp_parser_error (parser, "expected %<none%> or %<shared%>");
20319     }
20320
20321   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20322     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20323                                            /*or_comma=*/false,
20324                                            /*consume_paren=*/true);
20325
20326   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
20327     return list;
20328
20329   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default", location);
20330   c = build_omp_clause (OMP_CLAUSE_DEFAULT);
20331   OMP_CLAUSE_CHAIN (c) = list;
20332   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
20333
20334   return c;
20335 }
20336
20337 /* OpenMP 2.5:
20338    if ( expression ) */
20339
20340 static tree
20341 cp_parser_omp_clause_if (cp_parser *parser, tree list, location_t location)
20342 {
20343   tree t, c;
20344
20345   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20346     return list;
20347
20348   t = cp_parser_condition (parser);
20349
20350   if (t == error_mark_node
20351       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20352     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20353                                            /*or_comma=*/false,
20354                                            /*consume_paren=*/true);
20355
20356   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if", location);
20357
20358   c = build_omp_clause (OMP_CLAUSE_IF);
20359   OMP_CLAUSE_IF_EXPR (c) = t;
20360   OMP_CLAUSE_CHAIN (c) = list;
20361
20362   return c;
20363 }
20364
20365 /* OpenMP 2.5:
20366    nowait */
20367
20368 static tree
20369 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED,
20370                              tree list, location_t location)
20371 {
20372   tree c;
20373
20374   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait", location);
20375
20376   c = build_omp_clause (OMP_CLAUSE_NOWAIT);
20377   OMP_CLAUSE_CHAIN (c) = list;
20378   return c;
20379 }
20380
20381 /* OpenMP 2.5:
20382    num_threads ( expression ) */
20383
20384 static tree
20385 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list,
20386                                   location_t location)
20387 {
20388   tree t, c;
20389
20390   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20391     return list;
20392
20393   t = cp_parser_expression (parser, false);
20394
20395   if (t == error_mark_node
20396       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20397     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20398                                            /*or_comma=*/false,
20399                                            /*consume_paren=*/true);
20400
20401   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS,
20402                              "num_threads", location);
20403
20404   c = build_omp_clause (OMP_CLAUSE_NUM_THREADS);
20405   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
20406   OMP_CLAUSE_CHAIN (c) = list;
20407
20408   return c;
20409 }
20410
20411 /* OpenMP 2.5:
20412    ordered */
20413
20414 static tree
20415 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED,
20416                               tree list, location_t location)
20417 {
20418   tree c;
20419
20420   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED,
20421                              "ordered", location);
20422
20423   c = build_omp_clause (OMP_CLAUSE_ORDERED);
20424   OMP_CLAUSE_CHAIN (c) = list;
20425   return c;
20426 }
20427
20428 /* OpenMP 2.5:
20429    reduction ( reduction-operator : variable-list )
20430
20431    reduction-operator:
20432      One of: + * - & ^ | && || */
20433
20434 static tree
20435 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
20436 {
20437   enum tree_code code;
20438   tree nlist, c;
20439
20440   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20441     return list;
20442
20443   switch (cp_lexer_peek_token (parser->lexer)->type)
20444     {
20445     case CPP_PLUS:
20446       code = PLUS_EXPR;
20447       break;
20448     case CPP_MULT:
20449       code = MULT_EXPR;
20450       break;
20451     case CPP_MINUS:
20452       code = MINUS_EXPR;
20453       break;
20454     case CPP_AND:
20455       code = BIT_AND_EXPR;
20456       break;
20457     case CPP_XOR:
20458       code = BIT_XOR_EXPR;
20459       break;
20460     case CPP_OR:
20461       code = BIT_IOR_EXPR;
20462       break;
20463     case CPP_AND_AND:
20464       code = TRUTH_ANDIF_EXPR;
20465       break;
20466     case CPP_OR_OR:
20467       code = TRUTH_ORIF_EXPR;
20468       break;
20469     default:
20470       cp_parser_error (parser, "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, "
20471                                "%<|%>, %<&&%>, or %<||%>");
20472     resync_fail:
20473       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20474                                              /*or_comma=*/false,
20475                                              /*consume_paren=*/true);
20476       return list;
20477     }
20478   cp_lexer_consume_token (parser->lexer);
20479
20480   if (!cp_parser_require (parser, CPP_COLON, "%<:%>"))
20481     goto resync_fail;
20482
20483   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
20484   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
20485     OMP_CLAUSE_REDUCTION_CODE (c) = code;
20486
20487   return nlist;
20488 }
20489
20490 /* OpenMP 2.5:
20491    schedule ( schedule-kind )
20492    schedule ( schedule-kind , expression )
20493
20494    schedule-kind:
20495      static | dynamic | guided | runtime | auto  */
20496
20497 static tree
20498 cp_parser_omp_clause_schedule (cp_parser *parser, tree list, location_t location)
20499 {
20500   tree c, t;
20501
20502   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20503     return list;
20504
20505   c = build_omp_clause (OMP_CLAUSE_SCHEDULE);
20506
20507   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
20508     {
20509       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
20510       const char *p = IDENTIFIER_POINTER (id);
20511
20512       switch (p[0])
20513         {
20514         case 'd':
20515           if (strcmp ("dynamic", p) != 0)
20516             goto invalid_kind;
20517           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
20518           break;
20519
20520         case 'g':
20521           if (strcmp ("guided", p) != 0)
20522             goto invalid_kind;
20523           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
20524           break;
20525
20526         case 'r':
20527           if (strcmp ("runtime", p) != 0)
20528             goto invalid_kind;
20529           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
20530           break;
20531
20532         default:
20533           goto invalid_kind;
20534         }
20535     }
20536   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
20537     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
20538   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AUTO))
20539     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_AUTO;
20540   else
20541     goto invalid_kind;
20542   cp_lexer_consume_token (parser->lexer);
20543
20544   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
20545     {
20546       cp_token *token;
20547       cp_lexer_consume_token (parser->lexer);
20548
20549       token = cp_lexer_peek_token (parser->lexer);
20550       t = cp_parser_assignment_expression (parser, false);
20551
20552       if (t == error_mark_node)
20553         goto resync_fail;
20554       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
20555         error ("%Hschedule %<runtime%> does not take "
20556                "a %<chunk_size%> parameter", &token->location);
20557       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_AUTO)
20558         error ("%Hschedule %<auto%> does not take "
20559                "a %<chunk_size%> parameter", &token->location);
20560       else
20561         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
20562
20563       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20564         goto resync_fail;
20565     }
20566   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<,%> or %<)%>"))
20567     goto resync_fail;
20568
20569   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule", location);
20570   OMP_CLAUSE_CHAIN (c) = list;
20571   return c;
20572
20573  invalid_kind:
20574   cp_parser_error (parser, "invalid schedule kind");
20575  resync_fail:
20576   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20577                                          /*or_comma=*/false,
20578                                          /*consume_paren=*/true);
20579   return list;
20580 }
20581
20582 /* OpenMP 3.0:
20583    untied */
20584
20585 static tree
20586 cp_parser_omp_clause_untied (cp_parser *parser ATTRIBUTE_UNUSED,
20587                              tree list, location_t location)
20588 {
20589   tree c;
20590
20591   check_no_duplicate_clause (list, OMP_CLAUSE_UNTIED, "untied", location);
20592
20593   c = build_omp_clause (OMP_CLAUSE_UNTIED);
20594   OMP_CLAUSE_CHAIN (c) = list;
20595   return c;
20596 }
20597
20598 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
20599    is a bitmask in MASK.  Return the list of clauses found; the result
20600    of clause default goes in *pdefault.  */
20601
20602 static tree
20603 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
20604                            const char *where, cp_token *pragma_tok)
20605 {
20606   tree clauses = NULL;
20607   bool first = true;
20608   cp_token *token = NULL;
20609
20610   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
20611     {
20612       pragma_omp_clause c_kind;
20613       const char *c_name;
20614       tree prev = clauses;
20615
20616       if (!first && cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
20617         cp_lexer_consume_token (parser->lexer);
20618
20619       token = cp_lexer_peek_token (parser->lexer);
20620       c_kind = cp_parser_omp_clause_name (parser);
20621       first = false;
20622
20623       switch (c_kind)
20624         {
20625         case PRAGMA_OMP_CLAUSE_COLLAPSE:
20626           clauses = cp_parser_omp_clause_collapse (parser, clauses,
20627                                                    token->location);
20628           c_name = "collapse";
20629           break;
20630         case PRAGMA_OMP_CLAUSE_COPYIN:
20631           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
20632           c_name = "copyin";
20633           break;
20634         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
20635           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
20636                                             clauses);
20637           c_name = "copyprivate";
20638           break;
20639         case PRAGMA_OMP_CLAUSE_DEFAULT:
20640           clauses = cp_parser_omp_clause_default (parser, clauses,
20641                                                   token->location);
20642           c_name = "default";
20643           break;
20644         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
20645           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
20646                                             clauses);
20647           c_name = "firstprivate";
20648           break;
20649         case PRAGMA_OMP_CLAUSE_IF:
20650           clauses = cp_parser_omp_clause_if (parser, clauses, token->location);
20651           c_name = "if";
20652           break;
20653         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
20654           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
20655                                             clauses);
20656           c_name = "lastprivate";
20657           break;
20658         case PRAGMA_OMP_CLAUSE_NOWAIT:
20659           clauses = cp_parser_omp_clause_nowait (parser, clauses, token->location);
20660           c_name = "nowait";
20661           break;
20662         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
20663           clauses = cp_parser_omp_clause_num_threads (parser, clauses,
20664                                                       token->location);
20665           c_name = "num_threads";
20666           break;
20667         case PRAGMA_OMP_CLAUSE_ORDERED:
20668           clauses = cp_parser_omp_clause_ordered (parser, clauses,
20669                                                   token->location);
20670           c_name = "ordered";
20671           break;
20672         case PRAGMA_OMP_CLAUSE_PRIVATE:
20673           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
20674                                             clauses);
20675           c_name = "private";
20676           break;
20677         case PRAGMA_OMP_CLAUSE_REDUCTION:
20678           clauses = cp_parser_omp_clause_reduction (parser, clauses);
20679           c_name = "reduction";
20680           break;
20681         case PRAGMA_OMP_CLAUSE_SCHEDULE:
20682           clauses = cp_parser_omp_clause_schedule (parser, clauses,
20683                                                    token->location);
20684           c_name = "schedule";
20685           break;
20686         case PRAGMA_OMP_CLAUSE_SHARED:
20687           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
20688                                             clauses);
20689           c_name = "shared";
20690           break;
20691         case PRAGMA_OMP_CLAUSE_UNTIED:
20692           clauses = cp_parser_omp_clause_untied (parser, clauses,
20693                                                  token->location);
20694           c_name = "nowait";
20695           break;
20696         default:
20697           cp_parser_error (parser, "expected %<#pragma omp%> clause");
20698           goto saw_error;
20699         }
20700
20701       if (((mask >> c_kind) & 1) == 0)
20702         {
20703           /* Remove the invalid clause(s) from the list to avoid
20704              confusing the rest of the compiler.  */
20705           clauses = prev;
20706           error ("%H%qs is not valid for %qs", &token->location, c_name, where);
20707         }
20708     }
20709  saw_error:
20710   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
20711   return finish_omp_clauses (clauses);
20712 }
20713
20714 /* OpenMP 2.5:
20715    structured-block:
20716      statement
20717
20718    In practice, we're also interested in adding the statement to an
20719    outer node.  So it is convenient if we work around the fact that
20720    cp_parser_statement calls add_stmt.  */
20721
20722 static unsigned
20723 cp_parser_begin_omp_structured_block (cp_parser *parser)
20724 {
20725   unsigned save = parser->in_statement;
20726
20727   /* Only move the values to IN_OMP_BLOCK if they weren't false.
20728      This preserves the "not within loop or switch" style error messages
20729      for nonsense cases like
20730         void foo() {
20731         #pragma omp single
20732           break;
20733         }
20734   */
20735   if (parser->in_statement)
20736     parser->in_statement = IN_OMP_BLOCK;
20737
20738   return save;
20739 }
20740
20741 static void
20742 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
20743 {
20744   parser->in_statement = save;
20745 }
20746
20747 static tree
20748 cp_parser_omp_structured_block (cp_parser *parser)
20749 {
20750   tree stmt = begin_omp_structured_block ();
20751   unsigned int save = cp_parser_begin_omp_structured_block (parser);
20752
20753   cp_parser_statement (parser, NULL_TREE, false, NULL);
20754
20755   cp_parser_end_omp_structured_block (parser, save);
20756   return finish_omp_structured_block (stmt);
20757 }
20758
20759 /* OpenMP 2.5:
20760    # pragma omp atomic new-line
20761      expression-stmt
20762
20763    expression-stmt:
20764      x binop= expr | x++ | ++x | x-- | --x
20765    binop:
20766      +, *, -, /, &, ^, |, <<, >>
20767
20768   where x is an lvalue expression with scalar type.  */
20769
20770 static void
20771 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
20772 {
20773   tree lhs, rhs;
20774   enum tree_code code;
20775
20776   cp_parser_require_pragma_eol (parser, pragma_tok);
20777
20778   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
20779                                     /*cast_p=*/false);
20780   switch (TREE_CODE (lhs))
20781     {
20782     case ERROR_MARK:
20783       goto saw_error;
20784
20785     case PREINCREMENT_EXPR:
20786     case POSTINCREMENT_EXPR:
20787       lhs = TREE_OPERAND (lhs, 0);
20788       code = PLUS_EXPR;
20789       rhs = integer_one_node;
20790       break;
20791
20792     case PREDECREMENT_EXPR:
20793     case POSTDECREMENT_EXPR:
20794       lhs = TREE_OPERAND (lhs, 0);
20795       code = MINUS_EXPR;
20796       rhs = integer_one_node;
20797       break;
20798
20799     default:
20800       switch (cp_lexer_peek_token (parser->lexer)->type)
20801         {
20802         case CPP_MULT_EQ:
20803           code = MULT_EXPR;
20804           break;
20805         case CPP_DIV_EQ:
20806           code = TRUNC_DIV_EXPR;
20807           break;
20808         case CPP_PLUS_EQ:
20809           code = PLUS_EXPR;
20810           break;
20811         case CPP_MINUS_EQ:
20812           code = MINUS_EXPR;
20813           break;
20814         case CPP_LSHIFT_EQ:
20815           code = LSHIFT_EXPR;
20816           break;
20817         case CPP_RSHIFT_EQ:
20818           code = RSHIFT_EXPR;
20819           break;
20820         case CPP_AND_EQ:
20821           code = BIT_AND_EXPR;
20822           break;
20823         case CPP_OR_EQ:
20824           code = BIT_IOR_EXPR;
20825           break;
20826         case CPP_XOR_EQ:
20827           code = BIT_XOR_EXPR;
20828           break;
20829         default:
20830           cp_parser_error (parser,
20831                            "invalid operator for %<#pragma omp atomic%>");
20832           goto saw_error;
20833         }
20834       cp_lexer_consume_token (parser->lexer);
20835
20836       rhs = cp_parser_expression (parser, false);
20837       if (rhs == error_mark_node)
20838         goto saw_error;
20839       break;
20840     }
20841   finish_omp_atomic (code, lhs, rhs);
20842   cp_parser_consume_semicolon_at_end_of_statement (parser);
20843   return;
20844
20845  saw_error:
20846   cp_parser_skip_to_end_of_block_or_statement (parser);
20847 }
20848
20849
20850 /* OpenMP 2.5:
20851    # pragma omp barrier new-line  */
20852
20853 static void
20854 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
20855 {
20856   cp_parser_require_pragma_eol (parser, pragma_tok);
20857   finish_omp_barrier ();
20858 }
20859
20860 /* OpenMP 2.5:
20861    # pragma omp critical [(name)] new-line
20862      structured-block  */
20863
20864 static tree
20865 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
20866 {
20867   tree stmt, name = NULL;
20868
20869   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
20870     {
20871       cp_lexer_consume_token (parser->lexer);
20872
20873       name = cp_parser_identifier (parser);
20874
20875       if (name == error_mark_node
20876           || !cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20877         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20878                                                /*or_comma=*/false,
20879                                                /*consume_paren=*/true);
20880       if (name == error_mark_node)
20881         name = NULL;
20882     }
20883   cp_parser_require_pragma_eol (parser, pragma_tok);
20884
20885   stmt = cp_parser_omp_structured_block (parser);
20886   return c_finish_omp_critical (stmt, name);
20887 }
20888
20889 /* OpenMP 2.5:
20890    # pragma omp flush flush-vars[opt] new-line
20891
20892    flush-vars:
20893      ( variable-list ) */
20894
20895 static void
20896 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
20897 {
20898   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
20899     (void) cp_parser_omp_var_list (parser, 0, NULL);
20900   cp_parser_require_pragma_eol (parser, pragma_tok);
20901
20902   finish_omp_flush ();
20903 }
20904
20905 /* Helper function, to parse omp for increment expression.  */
20906
20907 static tree
20908 cp_parser_omp_for_cond (cp_parser *parser, tree decl)
20909 {
20910   tree lhs = cp_parser_cast_expression (parser, false, false), rhs;
20911   enum tree_code op;
20912   cp_token *token;
20913
20914   if (lhs != decl)
20915     {
20916       cp_parser_skip_to_end_of_statement (parser);
20917       return error_mark_node;
20918     }
20919
20920   token = cp_lexer_peek_token (parser->lexer);
20921   op = binops_by_token [token->type].tree_type;
20922   switch (op)
20923     {
20924     case LT_EXPR:
20925     case LE_EXPR:
20926     case GT_EXPR:
20927     case GE_EXPR:
20928       break;
20929     default:
20930       cp_parser_skip_to_end_of_statement (parser);
20931       return error_mark_node;
20932     }
20933
20934   cp_lexer_consume_token (parser->lexer);
20935   rhs = cp_parser_binary_expression (parser, false,
20936                                      PREC_RELATIONAL_EXPRESSION);
20937   if (rhs == error_mark_node
20938       || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
20939     {
20940       cp_parser_skip_to_end_of_statement (parser);
20941       return error_mark_node;
20942     }
20943
20944   return build2 (op, boolean_type_node, lhs, rhs);
20945 }
20946
20947 /* Helper function, to parse omp for increment expression.  */
20948
20949 static tree
20950 cp_parser_omp_for_incr (cp_parser *parser, tree decl)
20951 {
20952   cp_token *token = cp_lexer_peek_token (parser->lexer);
20953   enum tree_code op;
20954   tree lhs, rhs;
20955   cp_id_kind idk;
20956   bool decl_first;
20957
20958   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
20959     {
20960       op = (token->type == CPP_PLUS_PLUS
20961             ? PREINCREMENT_EXPR : PREDECREMENT_EXPR);
20962       cp_lexer_consume_token (parser->lexer);
20963       lhs = cp_parser_cast_expression (parser, false, false);
20964       if (lhs != decl)
20965         return error_mark_node;
20966       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
20967     }
20968
20969   lhs = cp_parser_primary_expression (parser, false, false, false, &idk);
20970   if (lhs != decl)
20971     return error_mark_node;
20972
20973   token = cp_lexer_peek_token (parser->lexer);
20974   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
20975     {
20976       op = (token->type == CPP_PLUS_PLUS
20977             ? POSTINCREMENT_EXPR : POSTDECREMENT_EXPR);
20978       cp_lexer_consume_token (parser->lexer);
20979       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
20980     }
20981
20982   op = cp_parser_assignment_operator_opt (parser);
20983   if (op == ERROR_MARK)
20984     return error_mark_node;
20985
20986   if (op != NOP_EXPR)
20987     {
20988       rhs = cp_parser_assignment_expression (parser, false);
20989       rhs = build2 (op, TREE_TYPE (decl), decl, rhs);
20990       return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
20991     }
20992
20993   lhs = cp_parser_binary_expression (parser, false,
20994                                      PREC_ADDITIVE_EXPRESSION);
20995   token = cp_lexer_peek_token (parser->lexer);
20996   decl_first = lhs == decl;
20997   if (decl_first)
20998     lhs = NULL_TREE;
20999   if (token->type != CPP_PLUS
21000       && token->type != CPP_MINUS)
21001     return error_mark_node;
21002
21003   do
21004     {
21005       op = token->type == CPP_PLUS ? PLUS_EXPR : MINUS_EXPR;
21006       cp_lexer_consume_token (parser->lexer);
21007       rhs = cp_parser_binary_expression (parser, false,
21008                                          PREC_ADDITIVE_EXPRESSION);
21009       token = cp_lexer_peek_token (parser->lexer);
21010       if (token->type == CPP_PLUS || token->type == CPP_MINUS || decl_first)
21011         {
21012           if (lhs == NULL_TREE)
21013             {
21014               if (op == PLUS_EXPR)
21015                 lhs = rhs;
21016               else
21017                 lhs = build_x_unary_op (NEGATE_EXPR, rhs, tf_warning_or_error);
21018             }
21019           else
21020             lhs = build_x_binary_op (op, lhs, ERROR_MARK, rhs, ERROR_MARK,
21021                                      NULL, tf_warning_or_error);
21022         }
21023     }
21024   while (token->type == CPP_PLUS || token->type == CPP_MINUS);
21025
21026   if (!decl_first)
21027     {
21028       if (rhs != decl || op == MINUS_EXPR)
21029         return error_mark_node;
21030       rhs = build2 (op, TREE_TYPE (decl), lhs, decl);
21031     }
21032   else
21033     rhs = build2 (PLUS_EXPR, TREE_TYPE (decl), decl, lhs);
21034
21035   return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
21036 }
21037
21038 /* Parse the restricted form of the for statement allowed by OpenMP.  */
21039
21040 static tree
21041 cp_parser_omp_for_loop (cp_parser *parser, tree clauses, tree *par_clauses)
21042 {
21043   tree init, cond, incr, body, decl, pre_body = NULL_TREE, ret;
21044   tree for_block = NULL_TREE, real_decl, initv, condv, incrv, declv;
21045   tree this_pre_body, cl;
21046   location_t loc_first;
21047   bool collapse_err = false;
21048   int i, collapse = 1, nbraces = 0;
21049
21050   for (cl = clauses; cl; cl = OMP_CLAUSE_CHAIN (cl))
21051     if (OMP_CLAUSE_CODE (cl) == OMP_CLAUSE_COLLAPSE)
21052       collapse = tree_low_cst (OMP_CLAUSE_COLLAPSE_EXPR (cl), 0);
21053
21054   gcc_assert (collapse >= 1);
21055
21056   declv = make_tree_vec (collapse);
21057   initv = make_tree_vec (collapse);
21058   condv = make_tree_vec (collapse);
21059   incrv = make_tree_vec (collapse);
21060
21061   loc_first = cp_lexer_peek_token (parser->lexer)->location;
21062
21063   for (i = 0; i < collapse; i++)
21064     {
21065       int bracecount = 0;
21066       bool add_private_clause = false;
21067       location_t loc;
21068
21069       if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
21070         {
21071           cp_parser_error (parser, "for statement expected");
21072           return NULL;
21073         }
21074       loc = cp_lexer_consume_token (parser->lexer)->location;
21075
21076       if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
21077         return NULL;
21078
21079       init = decl = real_decl = NULL;
21080       this_pre_body = push_stmt_list ();
21081       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
21082         {
21083           /* See 2.5.1 (in OpenMP 3.0, similar wording is in 2.5 standard too):
21084
21085              init-expr:
21086                        var = lb
21087                        integer-type var = lb
21088                        random-access-iterator-type var = lb
21089                        pointer-type var = lb
21090           */
21091           cp_decl_specifier_seq type_specifiers;
21092
21093           /* First, try to parse as an initialized declaration.  See
21094              cp_parser_condition, from whence the bulk of this is copied.  */
21095
21096           cp_parser_parse_tentatively (parser);
21097           cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
21098                                         &type_specifiers);
21099           if (cp_parser_parse_definitely (parser))
21100             {
21101               /* If parsing a type specifier seq succeeded, then this
21102                  MUST be a initialized declaration.  */
21103               tree asm_specification, attributes;
21104               cp_declarator *declarator;
21105
21106               declarator = cp_parser_declarator (parser,
21107                                                  CP_PARSER_DECLARATOR_NAMED,
21108                                                  /*ctor_dtor_or_conv_p=*/NULL,
21109                                                  /*parenthesized_p=*/NULL,
21110                                                  /*member_p=*/false);
21111               attributes = cp_parser_attributes_opt (parser);
21112               asm_specification = cp_parser_asm_specification_opt (parser);
21113
21114               if (declarator == cp_error_declarator) 
21115                 cp_parser_skip_to_end_of_statement (parser);
21116
21117               else 
21118                 {
21119                   tree pushed_scope;
21120
21121                   decl = start_decl (declarator, &type_specifiers,
21122                                      /*initialized_p=*/false, attributes,
21123                                      /*prefix_attributes=*/NULL_TREE,
21124                                      &pushed_scope);
21125
21126                   if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
21127                     {
21128                       if (cp_lexer_next_token_is (parser->lexer, 
21129                                                   CPP_OPEN_PAREN))
21130                         error ("parenthesized initialization is not allowed in "
21131                                "OpenMP %<for%> loop");
21132                       else
21133                         /* Trigger an error.  */
21134                         cp_parser_require (parser, CPP_EQ, "%<=%>");
21135
21136                       init = error_mark_node;
21137                       cp_parser_skip_to_end_of_statement (parser);
21138                     }
21139                   else if (CLASS_TYPE_P (TREE_TYPE (decl))
21140                            || type_dependent_expression_p (decl))
21141                     {
21142                       bool is_direct_init, is_non_constant_init;
21143
21144                       init = cp_parser_initializer (parser,
21145                                                     &is_direct_init,
21146                                                     &is_non_constant_init);
21147
21148                       cp_finish_decl (decl, init, !is_non_constant_init,
21149                                       asm_specification,
21150                                       LOOKUP_ONLYCONVERTING);
21151                       if (CLASS_TYPE_P (TREE_TYPE (decl)))
21152                         {
21153                           for_block
21154                             = tree_cons (NULL, this_pre_body, for_block);
21155                           init = NULL_TREE;
21156                         }
21157                       else
21158                         init = pop_stmt_list (this_pre_body);
21159                       this_pre_body = NULL_TREE;
21160                     }
21161                   else
21162                     {
21163                       /* Consume '='.  */
21164                       cp_lexer_consume_token (parser->lexer);
21165                       init = cp_parser_assignment_expression (parser, false);
21166
21167                       if (TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
21168                         init = error_mark_node;
21169                       else
21170                         cp_finish_decl (decl, NULL_TREE,
21171                                         /*init_const_expr_p=*/false,
21172                                         asm_specification,
21173                                         LOOKUP_ONLYCONVERTING);
21174                     }
21175
21176                   if (pushed_scope)
21177                     pop_scope (pushed_scope);
21178                 }
21179             }
21180           else 
21181             {
21182               cp_id_kind idk;
21183               /* If parsing a type specifier sequence failed, then
21184                  this MUST be a simple expression.  */
21185               cp_parser_parse_tentatively (parser);
21186               decl = cp_parser_primary_expression (parser, false, false,
21187                                                    false, &idk);
21188               if (!cp_parser_error_occurred (parser)
21189                   && decl
21190                   && DECL_P (decl)
21191                   && CLASS_TYPE_P (TREE_TYPE (decl)))
21192                 {
21193                   tree rhs;
21194
21195                   cp_parser_parse_definitely (parser);
21196                   cp_parser_require (parser, CPP_EQ, "%<=%>");
21197                   rhs = cp_parser_assignment_expression (parser, false);
21198                   finish_expr_stmt (build_x_modify_expr (decl, NOP_EXPR,
21199                                                          rhs,
21200                                                          tf_warning_or_error));
21201                   add_private_clause = true;
21202                 }
21203               else
21204                 {
21205                   decl = NULL;
21206                   cp_parser_abort_tentative_parse (parser);
21207                   init = cp_parser_expression (parser, false);
21208                   if (init)
21209                     {
21210                       if (TREE_CODE (init) == MODIFY_EXPR
21211                           || TREE_CODE (init) == MODOP_EXPR)
21212                         real_decl = TREE_OPERAND (init, 0);
21213                     }
21214                 }
21215             }
21216         }
21217       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
21218       if (this_pre_body)
21219         {
21220           this_pre_body = pop_stmt_list (this_pre_body);
21221           if (pre_body)
21222             {
21223               tree t = pre_body;
21224               pre_body = push_stmt_list ();
21225               add_stmt (t);
21226               add_stmt (this_pre_body);
21227               pre_body = pop_stmt_list (pre_body);
21228             }
21229           else
21230             pre_body = this_pre_body;
21231         }
21232
21233       if (decl)
21234         real_decl = decl;
21235       if (par_clauses != NULL && real_decl != NULL_TREE)
21236         {
21237           tree *c;
21238           for (c = par_clauses; *c ; )
21239             if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_FIRSTPRIVATE
21240                 && OMP_CLAUSE_DECL (*c) == real_decl)
21241               {
21242                 error ("%Hiteration variable %qD should not be firstprivate",
21243                        &loc, real_decl);
21244                 *c = OMP_CLAUSE_CHAIN (*c);
21245               }
21246             else if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_LASTPRIVATE
21247                      && OMP_CLAUSE_DECL (*c) == real_decl)
21248               {
21249                 /* Add lastprivate (decl) clause to OMP_FOR_CLAUSES,
21250                    change it to shared (decl) in OMP_PARALLEL_CLAUSES.  */
21251                 tree l = build_omp_clause (OMP_CLAUSE_LASTPRIVATE);
21252                 OMP_CLAUSE_DECL (l) = real_decl;
21253                 OMP_CLAUSE_CHAIN (l) = clauses;
21254                 CP_OMP_CLAUSE_INFO (l) = CP_OMP_CLAUSE_INFO (*c);
21255                 clauses = l;
21256                 OMP_CLAUSE_SET_CODE (*c, OMP_CLAUSE_SHARED);
21257                 CP_OMP_CLAUSE_INFO (*c) = NULL;
21258                 add_private_clause = false;
21259               }
21260             else
21261               {
21262                 if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_PRIVATE
21263                     && OMP_CLAUSE_DECL (*c) == real_decl)
21264                   add_private_clause = false;
21265                 c = &OMP_CLAUSE_CHAIN (*c);
21266               }
21267         }
21268
21269       if (add_private_clause)
21270         {
21271           tree c;
21272           for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
21273             {
21274               if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
21275                    || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
21276                   && OMP_CLAUSE_DECL (c) == decl)
21277                 break;
21278               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
21279                        && OMP_CLAUSE_DECL (c) == decl)
21280                 error ("%Hiteration variable %qD should not be firstprivate",
21281                        &loc, decl);
21282               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
21283                        && OMP_CLAUSE_DECL (c) == decl)
21284                 error ("%Hiteration variable %qD should not be reduction",
21285                        &loc, decl);
21286             }
21287           if (c == NULL)
21288             {
21289               c = build_omp_clause (OMP_CLAUSE_PRIVATE);
21290               OMP_CLAUSE_DECL (c) = decl;
21291               c = finish_omp_clauses (c);
21292               if (c)
21293                 {
21294                   OMP_CLAUSE_CHAIN (c) = clauses;
21295                   clauses = c;
21296                 }
21297             }
21298         }
21299
21300       cond = NULL;
21301       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
21302         {
21303           /* If decl is an iterator, preserve LHS and RHS of the relational
21304              expr until finish_omp_for.  */
21305           if (decl
21306               && (type_dependent_expression_p (decl)
21307                   || CLASS_TYPE_P (TREE_TYPE (decl))))
21308             cond = cp_parser_omp_for_cond (parser, decl);
21309           else
21310             cond = cp_parser_condition (parser);
21311         }
21312       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
21313
21314       incr = NULL;
21315       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
21316         {
21317           /* If decl is an iterator, preserve the operator on decl
21318              until finish_omp_for.  */
21319           if (decl
21320               && (type_dependent_expression_p (decl)
21321                   || CLASS_TYPE_P (TREE_TYPE (decl))))
21322             incr = cp_parser_omp_for_incr (parser, decl);
21323           else
21324             incr = cp_parser_expression (parser, false);
21325         }
21326
21327       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
21328         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
21329                                                /*or_comma=*/false,
21330                                                /*consume_paren=*/true);
21331
21332       TREE_VEC_ELT (declv, i) = decl;
21333       TREE_VEC_ELT (initv, i) = init;
21334       TREE_VEC_ELT (condv, i) = cond;
21335       TREE_VEC_ELT (incrv, i) = incr;
21336
21337       if (i == collapse - 1)
21338         break;
21339
21340       /* FIXME: OpenMP 3.0 draft isn't very clear on what exactly is allowed
21341          in between the collapsed for loops to be still considered perfectly
21342          nested.  Hopefully the final version clarifies this.
21343          For now handle (multiple) {'s and empty statements.  */
21344       cp_parser_parse_tentatively (parser);
21345       do
21346         {
21347           if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
21348             break;
21349           else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
21350             {
21351               cp_lexer_consume_token (parser->lexer);
21352               bracecount++;
21353             }
21354           else if (bracecount
21355                    && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
21356             cp_lexer_consume_token (parser->lexer);
21357           else
21358             {
21359               loc = cp_lexer_peek_token (parser->lexer)->location;
21360               error ("%Hnot enough collapsed for loops", &loc);
21361               collapse_err = true;
21362               cp_parser_abort_tentative_parse (parser);
21363               declv = NULL_TREE;
21364               break;
21365             }
21366         }
21367       while (1);
21368
21369       if (declv)
21370         {
21371           cp_parser_parse_definitely (parser);
21372           nbraces += bracecount;
21373         }
21374     }
21375
21376   /* Note that we saved the original contents of this flag when we entered
21377      the structured block, and so we don't need to re-save it here.  */
21378   parser->in_statement = IN_OMP_FOR;
21379
21380   /* Note that the grammar doesn't call for a structured block here,
21381      though the loop as a whole is a structured block.  */
21382   body = push_stmt_list ();
21383   cp_parser_statement (parser, NULL_TREE, false, NULL);
21384   body = pop_stmt_list (body);
21385
21386   if (declv == NULL_TREE)
21387     ret = NULL_TREE;
21388   else
21389     ret = finish_omp_for (loc_first, declv, initv, condv, incrv, body,
21390                           pre_body, clauses);
21391
21392   while (nbraces)
21393     {
21394       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
21395         {
21396           cp_lexer_consume_token (parser->lexer);
21397           nbraces--;
21398         }
21399       else if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
21400         cp_lexer_consume_token (parser->lexer);
21401       else
21402         {
21403           if (!collapse_err)
21404             {
21405               location_t loc = cp_lexer_peek_token (parser->lexer)->location;
21406               error ("%Hcollapsed loops not perfectly nested", &loc);
21407             }
21408           collapse_err = true;
21409           cp_parser_statement_seq_opt (parser, NULL);
21410           cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
21411         }
21412     }
21413
21414   while (for_block)
21415     {
21416       add_stmt (pop_stmt_list (TREE_VALUE (for_block)));
21417       for_block = TREE_CHAIN (for_block);
21418     }
21419
21420   return ret;
21421 }
21422
21423 /* OpenMP 2.5:
21424    #pragma omp for for-clause[optseq] new-line
21425      for-loop  */
21426
21427 #define OMP_FOR_CLAUSE_MASK                             \
21428         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
21429         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
21430         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
21431         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
21432         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
21433         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
21434         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT)              \
21435         | (1u << PRAGMA_OMP_CLAUSE_COLLAPSE))
21436
21437 static tree
21438 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
21439 {
21440   tree clauses, sb, ret;
21441   unsigned int save;
21442
21443   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
21444                                        "#pragma omp for", pragma_tok);
21445
21446   sb = begin_omp_structured_block ();
21447   save = cp_parser_begin_omp_structured_block (parser);
21448
21449   ret = cp_parser_omp_for_loop (parser, clauses, NULL);
21450
21451   cp_parser_end_omp_structured_block (parser, save);
21452   add_stmt (finish_omp_structured_block (sb));
21453
21454   return ret;
21455 }
21456
21457 /* OpenMP 2.5:
21458    # pragma omp master new-line
21459      structured-block  */
21460
21461 static tree
21462 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
21463 {
21464   cp_parser_require_pragma_eol (parser, pragma_tok);
21465   return c_finish_omp_master (cp_parser_omp_structured_block (parser));
21466 }
21467
21468 /* OpenMP 2.5:
21469    # pragma omp ordered new-line
21470      structured-block  */
21471
21472 static tree
21473 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
21474 {
21475   cp_parser_require_pragma_eol (parser, pragma_tok);
21476   return c_finish_omp_ordered (cp_parser_omp_structured_block (parser));
21477 }
21478
21479 /* OpenMP 2.5:
21480
21481    section-scope:
21482      { section-sequence }
21483
21484    section-sequence:
21485      section-directive[opt] structured-block
21486      section-sequence section-directive structured-block  */
21487
21488 static tree
21489 cp_parser_omp_sections_scope (cp_parser *parser)
21490 {
21491   tree stmt, substmt;
21492   bool error_suppress = false;
21493   cp_token *tok;
21494
21495   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>"))
21496     return NULL_TREE;
21497
21498   stmt = push_stmt_list ();
21499
21500   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
21501     {
21502       unsigned save;
21503
21504       substmt = begin_omp_structured_block ();
21505       save = cp_parser_begin_omp_structured_block (parser);
21506
21507       while (1)
21508         {
21509           cp_parser_statement (parser, NULL_TREE, false, NULL);
21510
21511           tok = cp_lexer_peek_token (parser->lexer);
21512           if (tok->pragma_kind == PRAGMA_OMP_SECTION)
21513             break;
21514           if (tok->type == CPP_CLOSE_BRACE)
21515             break;
21516           if (tok->type == CPP_EOF)
21517             break;
21518         }
21519
21520       cp_parser_end_omp_structured_block (parser, save);
21521       substmt = finish_omp_structured_block (substmt);
21522       substmt = build1 (OMP_SECTION, void_type_node, substmt);
21523       add_stmt (substmt);
21524     }
21525
21526   while (1)
21527     {
21528       tok = cp_lexer_peek_token (parser->lexer);
21529       if (tok->type == CPP_CLOSE_BRACE)
21530         break;
21531       if (tok->type == CPP_EOF)
21532         break;
21533
21534       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
21535         {
21536           cp_lexer_consume_token (parser->lexer);
21537           cp_parser_require_pragma_eol (parser, tok);
21538           error_suppress = false;
21539         }
21540       else if (!error_suppress)
21541         {
21542           cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
21543           error_suppress = true;
21544         }
21545
21546       substmt = cp_parser_omp_structured_block (parser);
21547       substmt = build1 (OMP_SECTION, void_type_node, substmt);
21548       add_stmt (substmt);
21549     }
21550   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
21551
21552   substmt = pop_stmt_list (stmt);
21553
21554   stmt = make_node (OMP_SECTIONS);
21555   TREE_TYPE (stmt) = void_type_node;
21556   OMP_SECTIONS_BODY (stmt) = substmt;
21557
21558   add_stmt (stmt);
21559   return stmt;
21560 }
21561
21562 /* OpenMP 2.5:
21563    # pragma omp sections sections-clause[optseq] newline
21564      sections-scope  */
21565
21566 #define OMP_SECTIONS_CLAUSE_MASK                        \
21567         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
21568         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
21569         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
21570         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
21571         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
21572
21573 static tree
21574 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
21575 {
21576   tree clauses, ret;
21577
21578   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
21579                                        "#pragma omp sections", pragma_tok);
21580
21581   ret = cp_parser_omp_sections_scope (parser);
21582   if (ret)
21583     OMP_SECTIONS_CLAUSES (ret) = clauses;
21584
21585   return ret;
21586 }
21587
21588 /* OpenMP 2.5:
21589    # pragma parallel parallel-clause new-line
21590    # pragma parallel for parallel-for-clause new-line
21591    # pragma parallel sections parallel-sections-clause new-line  */
21592
21593 #define OMP_PARALLEL_CLAUSE_MASK                        \
21594         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
21595         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
21596         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
21597         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
21598         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
21599         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
21600         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
21601         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
21602
21603 static tree
21604 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
21605 {
21606   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
21607   const char *p_name = "#pragma omp parallel";
21608   tree stmt, clauses, par_clause, ws_clause, block;
21609   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
21610   unsigned int save;
21611
21612   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
21613     {
21614       cp_lexer_consume_token (parser->lexer);
21615       p_kind = PRAGMA_OMP_PARALLEL_FOR;
21616       p_name = "#pragma omp parallel for";
21617       mask |= OMP_FOR_CLAUSE_MASK;
21618       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
21619     }
21620   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
21621     {
21622       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
21623       const char *p = IDENTIFIER_POINTER (id);
21624       if (strcmp (p, "sections") == 0)
21625         {
21626           cp_lexer_consume_token (parser->lexer);
21627           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
21628           p_name = "#pragma omp parallel sections";
21629           mask |= OMP_SECTIONS_CLAUSE_MASK;
21630           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
21631         }
21632     }
21633
21634   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
21635   block = begin_omp_parallel ();
21636   save = cp_parser_begin_omp_structured_block (parser);
21637
21638   switch (p_kind)
21639     {
21640     case PRAGMA_OMP_PARALLEL:
21641       cp_parser_statement (parser, NULL_TREE, false, NULL);
21642       par_clause = clauses;
21643       break;
21644
21645     case PRAGMA_OMP_PARALLEL_FOR:
21646       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
21647       cp_parser_omp_for_loop (parser, ws_clause, &par_clause);
21648       break;
21649
21650     case PRAGMA_OMP_PARALLEL_SECTIONS:
21651       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
21652       stmt = cp_parser_omp_sections_scope (parser);
21653       if (stmt)
21654         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
21655       break;
21656
21657     default:
21658       gcc_unreachable ();
21659     }
21660
21661   cp_parser_end_omp_structured_block (parser, save);
21662   stmt = finish_omp_parallel (par_clause, block);
21663   if (p_kind != PRAGMA_OMP_PARALLEL)
21664     OMP_PARALLEL_COMBINED (stmt) = 1;
21665   return stmt;
21666 }
21667
21668 /* OpenMP 2.5:
21669    # pragma omp single single-clause[optseq] new-line
21670      structured-block  */
21671
21672 #define OMP_SINGLE_CLAUSE_MASK                          \
21673         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
21674         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
21675         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
21676         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
21677
21678 static tree
21679 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
21680 {
21681   tree stmt = make_node (OMP_SINGLE);
21682   TREE_TYPE (stmt) = void_type_node;
21683
21684   OMP_SINGLE_CLAUSES (stmt)
21685     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
21686                                  "#pragma omp single", pragma_tok);
21687   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
21688
21689   return add_stmt (stmt);
21690 }
21691
21692 /* OpenMP 3.0:
21693    # pragma omp task task-clause[optseq] new-line
21694      structured-block  */
21695
21696 #define OMP_TASK_CLAUSE_MASK                            \
21697         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
21698         | (1u << PRAGMA_OMP_CLAUSE_UNTIED)              \
21699         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
21700         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
21701         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
21702         | (1u << PRAGMA_OMP_CLAUSE_SHARED))
21703
21704 static tree
21705 cp_parser_omp_task (cp_parser *parser, cp_token *pragma_tok)
21706 {
21707   tree clauses, block;
21708   unsigned int save;
21709
21710   clauses = cp_parser_omp_all_clauses (parser, OMP_TASK_CLAUSE_MASK,
21711                                        "#pragma omp task", pragma_tok);
21712   block = begin_omp_task ();
21713   save = cp_parser_begin_omp_structured_block (parser);
21714   cp_parser_statement (parser, NULL_TREE, false, NULL);
21715   cp_parser_end_omp_structured_block (parser, save);
21716   return finish_omp_task (clauses, block);
21717 }
21718
21719 /* OpenMP 3.0:
21720    # pragma omp taskwait new-line  */
21721
21722 static void
21723 cp_parser_omp_taskwait (cp_parser *parser, cp_token *pragma_tok)
21724 {
21725   cp_parser_require_pragma_eol (parser, pragma_tok);
21726   finish_omp_taskwait ();
21727 }
21728
21729 /* OpenMP 2.5:
21730    # pragma omp threadprivate (variable-list) */
21731
21732 static void
21733 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
21734 {
21735   tree vars;
21736
21737   vars = cp_parser_omp_var_list (parser, 0, NULL);
21738   cp_parser_require_pragma_eol (parser, pragma_tok);
21739
21740   finish_omp_threadprivate (vars);
21741 }
21742
21743 /* Main entry point to OpenMP statement pragmas.  */
21744
21745 static void
21746 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
21747 {
21748   tree stmt;
21749
21750   switch (pragma_tok->pragma_kind)
21751     {
21752     case PRAGMA_OMP_ATOMIC:
21753       cp_parser_omp_atomic (parser, pragma_tok);
21754       return;
21755     case PRAGMA_OMP_CRITICAL:
21756       stmt = cp_parser_omp_critical (parser, pragma_tok);
21757       break;
21758     case PRAGMA_OMP_FOR:
21759       stmt = cp_parser_omp_for (parser, pragma_tok);
21760       break;
21761     case PRAGMA_OMP_MASTER:
21762       stmt = cp_parser_omp_master (parser, pragma_tok);
21763       break;
21764     case PRAGMA_OMP_ORDERED:
21765       stmt = cp_parser_omp_ordered (parser, pragma_tok);
21766       break;
21767     case PRAGMA_OMP_PARALLEL:
21768       stmt = cp_parser_omp_parallel (parser, pragma_tok);
21769       break;
21770     case PRAGMA_OMP_SECTIONS:
21771       stmt = cp_parser_omp_sections (parser, pragma_tok);
21772       break;
21773     case PRAGMA_OMP_SINGLE:
21774       stmt = cp_parser_omp_single (parser, pragma_tok);
21775       break;
21776     case PRAGMA_OMP_TASK:
21777       stmt = cp_parser_omp_task (parser, pragma_tok);
21778       break;
21779     default:
21780       gcc_unreachable ();
21781     }
21782
21783   if (stmt)
21784     SET_EXPR_LOCATION (stmt, pragma_tok->location);
21785 }
21786 \f
21787 /* The parser.  */
21788
21789 static GTY (()) cp_parser *the_parser;
21790
21791 \f
21792 /* Special handling for the first token or line in the file.  The first
21793    thing in the file might be #pragma GCC pch_preprocess, which loads a
21794    PCH file, which is a GC collection point.  So we need to handle this
21795    first pragma without benefit of an existing lexer structure.
21796
21797    Always returns one token to the caller in *FIRST_TOKEN.  This is
21798    either the true first token of the file, or the first token after
21799    the initial pragma.  */
21800
21801 static void
21802 cp_parser_initial_pragma (cp_token *first_token)
21803 {
21804   tree name = NULL;
21805
21806   cp_lexer_get_preprocessor_token (NULL, first_token);
21807   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
21808     return;
21809
21810   cp_lexer_get_preprocessor_token (NULL, first_token);
21811   if (first_token->type == CPP_STRING)
21812     {
21813       name = first_token->u.value;
21814
21815       cp_lexer_get_preprocessor_token (NULL, first_token);
21816       if (first_token->type != CPP_PRAGMA_EOL)
21817         error ("%Hjunk at end of %<#pragma GCC pch_preprocess%>",
21818                &first_token->location);
21819     }
21820   else
21821     error ("%Hexpected string literal", &first_token->location);
21822
21823   /* Skip to the end of the pragma.  */
21824   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
21825     cp_lexer_get_preprocessor_token (NULL, first_token);
21826
21827   /* Now actually load the PCH file.  */
21828   if (name)
21829     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
21830
21831   /* Read one more token to return to our caller.  We have to do this
21832      after reading the PCH file in, since its pointers have to be
21833      live.  */
21834   cp_lexer_get_preprocessor_token (NULL, first_token);
21835 }
21836
21837 /* Normal parsing of a pragma token.  Here we can (and must) use the
21838    regular lexer.  */
21839
21840 static bool
21841 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
21842 {
21843   cp_token *pragma_tok;
21844   unsigned int id;
21845
21846   pragma_tok = cp_lexer_consume_token (parser->lexer);
21847   gcc_assert (pragma_tok->type == CPP_PRAGMA);
21848   parser->lexer->in_pragma = true;
21849
21850   id = pragma_tok->pragma_kind;
21851   switch (id)
21852     {
21853     case PRAGMA_GCC_PCH_PREPROCESS:
21854       error ("%H%<#pragma GCC pch_preprocess%> must be first",
21855              &pragma_tok->location);
21856       break;
21857
21858     case PRAGMA_OMP_BARRIER:
21859       switch (context)
21860         {
21861         case pragma_compound:
21862           cp_parser_omp_barrier (parser, pragma_tok);
21863           return false;
21864         case pragma_stmt:
21865           error ("%H%<#pragma omp barrier%> may only be "
21866                  "used in compound statements", &pragma_tok->location);
21867           break;
21868         default:
21869           goto bad_stmt;
21870         }
21871       break;
21872
21873     case PRAGMA_OMP_FLUSH:
21874       switch (context)
21875         {
21876         case pragma_compound:
21877           cp_parser_omp_flush (parser, pragma_tok);
21878           return false;
21879         case pragma_stmt:
21880           error ("%H%<#pragma omp flush%> may only be "
21881                  "used in compound statements", &pragma_tok->location);
21882           break;
21883         default:
21884           goto bad_stmt;
21885         }
21886       break;
21887
21888     case PRAGMA_OMP_TASKWAIT:
21889       switch (context)
21890         {
21891         case pragma_compound:
21892           cp_parser_omp_taskwait (parser, pragma_tok);
21893           return false;
21894         case pragma_stmt:
21895           error ("%H%<#pragma omp taskwait%> may only be "
21896                  "used in compound statements",
21897                  &pragma_tok->location);
21898           break;
21899         default:
21900           goto bad_stmt;
21901         }
21902       break;
21903
21904     case PRAGMA_OMP_THREADPRIVATE:
21905       cp_parser_omp_threadprivate (parser, pragma_tok);
21906       return false;
21907
21908     case PRAGMA_OMP_ATOMIC:
21909     case PRAGMA_OMP_CRITICAL:
21910     case PRAGMA_OMP_FOR:
21911     case PRAGMA_OMP_MASTER:
21912     case PRAGMA_OMP_ORDERED:
21913     case PRAGMA_OMP_PARALLEL:
21914     case PRAGMA_OMP_SECTIONS:
21915     case PRAGMA_OMP_SINGLE:
21916     case PRAGMA_OMP_TASK:
21917       if (context == pragma_external)
21918         goto bad_stmt;
21919       cp_parser_omp_construct (parser, pragma_tok);
21920       return true;
21921
21922     case PRAGMA_OMP_SECTION:
21923       error ("%H%<#pragma omp section%> may only be used in "
21924              "%<#pragma omp sections%> construct", &pragma_tok->location);
21925       break;
21926
21927     default:
21928       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
21929       c_invoke_pragma_handler (id);
21930       break;
21931
21932     bad_stmt:
21933       cp_parser_error (parser, "expected declaration specifiers");
21934       break;
21935     }
21936
21937   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
21938   return false;
21939 }
21940
21941 /* The interface the pragma parsers have to the lexer.  */
21942
21943 enum cpp_ttype
21944 pragma_lex (tree *value)
21945 {
21946   cp_token *tok;
21947   enum cpp_ttype ret;
21948
21949   tok = cp_lexer_peek_token (the_parser->lexer);
21950
21951   ret = tok->type;
21952   *value = tok->u.value;
21953
21954   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
21955     ret = CPP_EOF;
21956   else if (ret == CPP_STRING)
21957     *value = cp_parser_string_literal (the_parser, false, false);
21958   else
21959     {
21960       cp_lexer_consume_token (the_parser->lexer);
21961       if (ret == CPP_KEYWORD)
21962         ret = CPP_NAME;
21963     }
21964
21965   return ret;
21966 }
21967
21968 \f
21969 /* External interface.  */
21970
21971 /* Parse one entire translation unit.  */
21972
21973 void
21974 c_parse_file (void)
21975 {
21976   bool error_occurred;
21977   static bool already_called = false;
21978
21979   if (already_called)
21980     {
21981       sorry ("inter-module optimizations not implemented for C++");
21982       return;
21983     }
21984   already_called = true;
21985
21986   the_parser = cp_parser_new ();
21987   push_deferring_access_checks (flag_access_control
21988                                 ? dk_no_deferred : dk_no_check);
21989   error_occurred = cp_parser_translation_unit (the_parser);
21990   the_parser = NULL;
21991 }
21992
21993 #include "gt-cp-parser.h"