OSDN Git Service

* parser.c (inject_this_parameter): Split out from
[pf3gnuchains/gcc-fork.git] / gcc / cp / parser.c
1 /* C++ Parser.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004,
3    2005, 2007, 2008, 2009, 2010, 2011  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 "timevar.h"
27 #include "cpplib.h"
28 #include "tree.h"
29 #include "cp-tree.h"
30 #include "intl.h"
31 #include "c-family/c-pragma.h"
32 #include "decl.h"
33 #include "flags.h"
34 #include "diagnostic-core.h"
35 #include "output.h"
36 #include "target.h"
37 #include "cgraph.h"
38 #include "c-family/c-common.h"
39 #include "c-family/c-objc.h"
40 #include "plugin.h"
41 #include "tree-pretty-print.h"
42 #include "parser.h"
43
44 \f
45 /* The lexer.  */
46
47 /* The cp_lexer_* routines mediate between the lexer proper (in libcpp
48    and c-lex.c) and the C++ parser.  */
49
50 static cp_token eof_token =
51 {
52   CPP_EOF, RID_MAX, 0, PRAGMA_NONE, false, false, false, 0, { NULL }
53 };
54
55 /* The various kinds of non integral constant we encounter. */
56 typedef enum non_integral_constant {
57   NIC_NONE,
58   /* floating-point literal */
59   NIC_FLOAT,
60   /* %<this%> */
61   NIC_THIS,
62   /* %<__FUNCTION__%> */
63   NIC_FUNC_NAME,
64   /* %<__PRETTY_FUNCTION__%> */
65   NIC_PRETTY_FUNC,
66   /* %<__func__%> */
67   NIC_C99_FUNC,
68   /* "%<va_arg%> */
69   NIC_VA_ARG,
70   /* a cast */
71   NIC_CAST,
72   /* %<typeid%> operator */
73   NIC_TYPEID,
74   /* non-constant compound literals */
75   NIC_NCC,
76   /* a function call */
77   NIC_FUNC_CALL,
78   /* an increment */
79   NIC_INC,
80   /* an decrement */
81   NIC_DEC,
82   /* an array reference */
83   NIC_ARRAY_REF,
84   /* %<->%> */
85   NIC_ARROW,
86   /* %<.%> */
87   NIC_POINT,
88   /* the address of a label */
89   NIC_ADDR_LABEL,
90   /* %<*%> */
91   NIC_STAR,
92   /* %<&%> */
93   NIC_ADDR,
94   /* %<++%> */
95   NIC_PREINCREMENT,
96   /* %<--%> */
97   NIC_PREDECREMENT,
98   /* %<new%> */
99   NIC_NEW,
100   /* %<delete%> */
101   NIC_DEL,
102   /* calls to overloaded operators */
103   NIC_OVERLOADED,
104   /* an assignment */
105   NIC_ASSIGNMENT,
106   /* a comma operator */
107   NIC_COMMA,
108   /* a call to a constructor */
109   NIC_CONSTRUCTOR
110 } non_integral_constant;
111
112 /* The various kinds of errors about name-lookup failing. */
113 typedef enum name_lookup_error {
114   /* NULL */
115   NLE_NULL,
116   /* is not a type */
117   NLE_TYPE,
118   /* is not a class or namespace */
119   NLE_CXX98,
120   /* is not a class, namespace, or enumeration */
121   NLE_NOT_CXX98
122 } name_lookup_error;
123
124 /* The various kinds of required token */
125 typedef enum required_token {
126   RT_NONE,
127   RT_SEMICOLON,  /* ';' */
128   RT_OPEN_PAREN, /* '(' */
129   RT_CLOSE_BRACE, /* '}' */
130   RT_OPEN_BRACE,  /* '{' */
131   RT_CLOSE_SQUARE, /* ']' */
132   RT_OPEN_SQUARE,  /* '[' */
133   RT_COMMA, /* ',' */
134   RT_SCOPE, /* '::' */
135   RT_LESS, /* '<' */
136   RT_GREATER, /* '>' */
137   RT_EQ, /* '=' */
138   RT_ELLIPSIS, /* '...' */
139   RT_MULT, /* '*' */
140   RT_COMPL, /* '~' */
141   RT_COLON, /* ':' */
142   RT_COLON_SCOPE, /* ':' or '::' */
143   RT_CLOSE_PAREN, /* ')' */
144   RT_COMMA_CLOSE_PAREN, /* ',' or ')' */
145   RT_PRAGMA_EOL, /* end of line */
146   RT_NAME, /* identifier */
147
148   /* The type is CPP_KEYWORD */
149   RT_NEW, /* new */
150   RT_DELETE, /* delete */
151   RT_RETURN, /* return */
152   RT_WHILE, /* while */
153   RT_EXTERN, /* extern */
154   RT_STATIC_ASSERT, /* static_assert */
155   RT_DECLTYPE, /* decltype */
156   RT_OPERATOR, /* operator */
157   RT_CLASS, /* class */
158   RT_TEMPLATE, /* template */
159   RT_NAMESPACE, /* namespace */
160   RT_USING, /* using */
161   RT_ASM, /* asm */
162   RT_TRY, /* try */
163   RT_CATCH, /* catch */
164   RT_THROW, /* throw */
165   RT_LABEL, /* __label__ */
166   RT_AT_TRY, /* @try */
167   RT_AT_SYNCHRONIZED, /* @synchronized */
168   RT_AT_THROW, /* @throw */
169
170   RT_SELECT,  /* selection-statement */
171   RT_INTERATION, /* iteration-statement */
172   RT_JUMP, /* jump-statement */
173   RT_CLASS_KEY, /* class-key */
174   RT_CLASS_TYPENAME_TEMPLATE /* class, typename, or template */
175 } required_token;
176
177 /* Prototypes.  */
178
179 static cp_lexer *cp_lexer_new_main
180   (void);
181 static cp_lexer *cp_lexer_new_from_tokens
182   (cp_token_cache *tokens);
183 static void cp_lexer_destroy
184   (cp_lexer *);
185 static int cp_lexer_saving_tokens
186   (const cp_lexer *);
187 static cp_token *cp_lexer_token_at
188   (cp_lexer *, cp_token_position);
189 static void cp_lexer_get_preprocessor_token
190   (cp_lexer *, cp_token *);
191 static inline cp_token *cp_lexer_peek_token
192   (cp_lexer *);
193 static cp_token *cp_lexer_peek_nth_token
194   (cp_lexer *, size_t);
195 static inline bool cp_lexer_next_token_is
196   (cp_lexer *, enum cpp_ttype);
197 static bool cp_lexer_next_token_is_not
198   (cp_lexer *, enum cpp_ttype);
199 static bool cp_lexer_next_token_is_keyword
200   (cp_lexer *, enum rid);
201 static cp_token *cp_lexer_consume_token
202   (cp_lexer *);
203 static void cp_lexer_purge_token
204   (cp_lexer *);
205 static void cp_lexer_purge_tokens_after
206   (cp_lexer *, cp_token_position);
207 static void cp_lexer_save_tokens
208   (cp_lexer *);
209 static void cp_lexer_commit_tokens
210   (cp_lexer *);
211 static void cp_lexer_rollback_tokens
212   (cp_lexer *);
213 #ifdef ENABLE_CHECKING
214 static void cp_lexer_print_token
215   (FILE *, cp_token *);
216 static inline bool cp_lexer_debugging_p
217   (cp_lexer *);
218 static void cp_lexer_start_debugging
219   (cp_lexer *) ATTRIBUTE_UNUSED;
220 static void cp_lexer_stop_debugging
221   (cp_lexer *) ATTRIBUTE_UNUSED;
222 #else
223 /* If we define cp_lexer_debug_stream to NULL it will provoke warnings
224    about passing NULL to functions that require non-NULL arguments
225    (fputs, fprintf).  It will never be used, so all we need is a value
226    of the right type that's guaranteed not to be NULL.  */
227 #define cp_lexer_debug_stream stdout
228 #define cp_lexer_print_token(str, tok) (void) 0
229 #define cp_lexer_debugging_p(lexer) 0
230 #endif /* ENABLE_CHECKING */
231
232 static cp_token_cache *cp_token_cache_new
233   (cp_token *, cp_token *);
234
235 static void cp_parser_initial_pragma
236   (cp_token *);
237
238 /* Manifest constants.  */
239 #define CP_LEXER_BUFFER_SIZE ((256 * 1024) / sizeof (cp_token))
240 #define CP_SAVED_TOKEN_STACK 5
241
242 /* Variables.  */
243
244 #ifdef ENABLE_CHECKING
245 /* The stream to which debugging output should be written.  */
246 static FILE *cp_lexer_debug_stream;
247 #endif /* ENABLE_CHECKING */
248
249 /* Nonzero if we are parsing an unevaluated operand: an operand to
250    sizeof, typeof, or alignof.  */
251 int cp_unevaluated_operand;
252
253 #ifdef ENABLE_CHECKING
254 /* Dump up to NUM tokens in BUFFER to FILE.  If NUM is 0, dump all the
255    tokens.  */
256
257 void
258 cp_lexer_dump_tokens (FILE *file, VEC(cp_token,gc) *buffer, unsigned num)
259 {
260   unsigned i;
261   cp_token *token;
262
263   fprintf (file, "%u tokens\n", VEC_length (cp_token, buffer));
264
265   if (num == 0)
266     num = VEC_length (cp_token, buffer);
267
268   for (i = 0; VEC_iterate (cp_token, buffer, i, token) && i < num; i++)
269     {
270       cp_lexer_print_token (file, token);
271       switch (token->type)
272         {
273           case CPP_SEMICOLON:
274           case CPP_OPEN_BRACE:
275           case CPP_CLOSE_BRACE:
276           case CPP_EOF:
277             fputc ('\n', file);
278             break;
279
280           default:
281             fputc (' ', file);
282         }
283     }
284
285   if (i == num && i < VEC_length (cp_token, buffer))
286     {
287       fprintf (file, " ... ");
288       cp_lexer_print_token (file, VEC_index (cp_token, buffer,
289                             VEC_length (cp_token, buffer) - 1));
290     }
291
292   fprintf (file, "\n");
293 }
294
295
296 /* Dump all tokens in BUFFER to stderr.  */
297
298 void
299 cp_lexer_debug_tokens (VEC(cp_token,gc) *buffer)
300 {
301   cp_lexer_dump_tokens (stderr, buffer, 0);
302 }
303 #endif
304
305
306 /* Allocate memory for a new lexer object and return it.  */
307
308 static cp_lexer *
309 cp_lexer_alloc (void)
310 {
311   cp_lexer *lexer;
312
313   c_common_no_more_pch ();
314
315   /* Allocate the memory.  */
316   lexer = ggc_alloc_cleared_cp_lexer ();
317
318 #ifdef ENABLE_CHECKING
319   /* Initially we are not debugging.  */
320   lexer->debugging_p = false;
321 #endif /* ENABLE_CHECKING */
322   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
323                                    CP_SAVED_TOKEN_STACK);
324
325   /* Create the buffer.  */
326   lexer->buffer = VEC_alloc (cp_token, gc, CP_LEXER_BUFFER_SIZE);
327
328   return lexer;
329 }
330
331
332 /* Create a new main C++ lexer, the lexer that gets tokens from the
333    preprocessor.  */
334
335 static cp_lexer *
336 cp_lexer_new_main (void)
337 {
338   cp_lexer *lexer;
339   cp_token token;
340
341   /* It's possible that parsing the first pragma will load a PCH file,
342      which is a GC collection point.  So we have to do that before
343      allocating any memory.  */
344   cp_parser_initial_pragma (&token);
345
346   lexer = cp_lexer_alloc ();
347
348   /* Put the first token in the buffer.  */
349   VEC_quick_push (cp_token, lexer->buffer, &token);
350
351   /* Get the remaining tokens from the preprocessor.  */
352   while (token.type != CPP_EOF)
353     {
354       cp_lexer_get_preprocessor_token (lexer, &token);
355       VEC_safe_push (cp_token, gc, lexer->buffer, &token);
356     }
357
358   lexer->last_token = VEC_address (cp_token, lexer->buffer)
359                       + VEC_length (cp_token, lexer->buffer)
360                       - 1;
361   lexer->next_token = VEC_length (cp_token, lexer->buffer)
362                       ? VEC_address (cp_token, lexer->buffer)
363                       : &eof_token;
364
365   /* Subsequent preprocessor diagnostics should use compiler
366      diagnostic functions to get the compiler source location.  */
367   done_lexing = true;
368
369   gcc_assert (!lexer->next_token->purged_p);
370   return lexer;
371 }
372
373 /* Create a new lexer whose token stream is primed with the tokens in
374    CACHE.  When these tokens are exhausted, no new tokens will be read.  */
375
376 static cp_lexer *
377 cp_lexer_new_from_tokens (cp_token_cache *cache)
378 {
379   cp_token *first = cache->first;
380   cp_token *last = cache->last;
381   cp_lexer *lexer = ggc_alloc_cleared_cp_lexer ();
382
383   /* We do not own the buffer.  */
384   lexer->buffer = NULL;
385   lexer->next_token = first == last ? &eof_token : first;
386   lexer->last_token = last;
387
388   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
389                                    CP_SAVED_TOKEN_STACK);
390
391 #ifdef ENABLE_CHECKING
392   /* Initially we are not debugging.  */
393   lexer->debugging_p = false;
394 #endif
395
396   gcc_assert (!lexer->next_token->purged_p);
397   return lexer;
398 }
399
400 /* Frees all resources associated with LEXER.  */
401
402 static void
403 cp_lexer_destroy (cp_lexer *lexer)
404 {
405   VEC_free (cp_token, gc, lexer->buffer);
406   VEC_free (cp_token_position, heap, lexer->saved_tokens);
407   ggc_free (lexer);
408 }
409
410 /* Returns nonzero if debugging information should be output.  */
411
412 #ifdef ENABLE_CHECKING
413
414 static inline bool
415 cp_lexer_debugging_p (cp_lexer *lexer)
416 {
417   return lexer->debugging_p;
418 }
419
420 #endif /* ENABLE_CHECKING */
421
422 static inline cp_token_position
423 cp_lexer_token_position (cp_lexer *lexer, bool previous_p)
424 {
425   gcc_assert (!previous_p || lexer->next_token != &eof_token);
426
427   return lexer->next_token - previous_p;
428 }
429
430 static inline cp_token *
431 cp_lexer_token_at (cp_lexer *lexer ATTRIBUTE_UNUSED, cp_token_position pos)
432 {
433   return pos;
434 }
435
436 static inline void
437 cp_lexer_set_token_position (cp_lexer *lexer, cp_token_position pos)
438 {
439   lexer->next_token = cp_lexer_token_at (lexer, pos);
440 }
441
442 static inline cp_token_position
443 cp_lexer_previous_token_position (cp_lexer *lexer)
444 {
445   if (lexer->next_token == &eof_token)
446     return lexer->last_token - 1;
447   else
448     return cp_lexer_token_position (lexer, true);
449 }
450
451 static inline cp_token *
452 cp_lexer_previous_token (cp_lexer *lexer)
453 {
454   cp_token_position tp = cp_lexer_previous_token_position (lexer);
455
456   return cp_lexer_token_at (lexer, tp);
457 }
458
459 /* nonzero if we are presently saving tokens.  */
460
461 static inline int
462 cp_lexer_saving_tokens (const cp_lexer* lexer)
463 {
464   return VEC_length (cp_token_position, lexer->saved_tokens) != 0;
465 }
466
467 /* Store the next token from the preprocessor in *TOKEN.  Return true
468    if we reach EOF.  If LEXER is NULL, assume we are handling an
469    initial #pragma pch_preprocess, and thus want the lexer to return
470    processed strings.  */
471
472 static void
473 cp_lexer_get_preprocessor_token (cp_lexer *lexer, cp_token *token)
474 {
475   static int is_extern_c = 0;
476
477    /* Get a new token from the preprocessor.  */
478   token->type
479     = c_lex_with_flags (&token->u.value, &token->location, &token->flags,
480                         lexer == NULL ? 0 : C_LEX_STRING_NO_JOIN);
481   token->keyword = RID_MAX;
482   token->pragma_kind = PRAGMA_NONE;
483   token->purged_p = false;
484
485   /* On some systems, some header files are surrounded by an
486      implicit extern "C" block.  Set a flag in the token if it
487      comes from such a header.  */
488   is_extern_c += pending_lang_change;
489   pending_lang_change = 0;
490   token->implicit_extern_c = is_extern_c > 0;
491
492   /* Check to see if this token is a keyword.  */
493   if (token->type == CPP_NAME)
494     {
495       if (C_IS_RESERVED_WORD (token->u.value))
496         {
497           /* Mark this token as a keyword.  */
498           token->type = CPP_KEYWORD;
499           /* Record which keyword.  */
500           token->keyword = C_RID_CODE (token->u.value);
501         }
502       else
503         {
504           if (warn_cxx0x_compat
505               && C_RID_CODE (token->u.value) >= RID_FIRST_CXX0X
506               && C_RID_CODE (token->u.value) <= RID_LAST_CXX0X)
507             {
508               /* Warn about the C++0x keyword (but still treat it as
509                  an identifier).  */
510               warning (OPT_Wc__0x_compat, 
511                        "identifier %qE will become a keyword in C++0x",
512                        token->u.value);
513
514               /* Clear out the C_RID_CODE so we don't warn about this
515                  particular identifier-turned-keyword again.  */
516               C_SET_RID_CODE (token->u.value, RID_MAX);
517             }
518
519           token->ambiguous_p = false;
520           token->keyword = RID_MAX;
521         }
522     }
523   else if (token->type == CPP_AT_NAME)
524     {
525       /* This only happens in Objective-C++; it must be a keyword.  */
526       token->type = CPP_KEYWORD;
527       switch (C_RID_CODE (token->u.value))
528         {
529           /* Replace 'class' with '@class', 'private' with '@private',
530              etc.  This prevents confusion with the C++ keyword
531              'class', and makes the tokens consistent with other
532              Objective-C 'AT' keywords.  For example '@class' is
533              reported as RID_AT_CLASS which is consistent with
534              '@synchronized', which is reported as
535              RID_AT_SYNCHRONIZED.
536           */
537         case RID_CLASS:     token->keyword = RID_AT_CLASS; break;
538         case RID_PRIVATE:   token->keyword = RID_AT_PRIVATE; break;
539         case RID_PROTECTED: token->keyword = RID_AT_PROTECTED; break;
540         case RID_PUBLIC:    token->keyword = RID_AT_PUBLIC; break;
541         case RID_THROW:     token->keyword = RID_AT_THROW; break;
542         case RID_TRY:       token->keyword = RID_AT_TRY; break;
543         case RID_CATCH:     token->keyword = RID_AT_CATCH; break;
544         default:            token->keyword = C_RID_CODE (token->u.value);
545         }
546     }
547   else if (token->type == CPP_PRAGMA)
548     {
549       /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST.  */
550       token->pragma_kind = ((enum pragma_kind)
551                             TREE_INT_CST_LOW (token->u.value));
552       token->u.value = NULL_TREE;
553     }
554 }
555
556 /* Update the globals input_location and the input file stack from TOKEN.  */
557 static inline void
558 cp_lexer_set_source_position_from_token (cp_token *token)
559 {
560   if (token->type != CPP_EOF)
561     {
562       input_location = token->location;
563     }
564 }
565
566 /* Return a pointer to the next token in the token stream, but do not
567    consume it.  */
568
569 static inline cp_token *
570 cp_lexer_peek_token (cp_lexer *lexer)
571 {
572   if (cp_lexer_debugging_p (lexer))
573     {
574       fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
575       cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
576       putc ('\n', cp_lexer_debug_stream);
577     }
578   return lexer->next_token;
579 }
580
581 /* Return true if the next token has the indicated TYPE.  */
582
583 static inline bool
584 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
585 {
586   return cp_lexer_peek_token (lexer)->type == type;
587 }
588
589 /* Return true if the next token does not have the indicated TYPE.  */
590
591 static inline bool
592 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
593 {
594   return !cp_lexer_next_token_is (lexer, type);
595 }
596
597 /* Return true if the next token is the indicated KEYWORD.  */
598
599 static inline bool
600 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
601 {
602   return cp_lexer_peek_token (lexer)->keyword == keyword;
603 }
604
605 /* Return true if the next token is not the indicated KEYWORD.  */
606
607 static inline bool
608 cp_lexer_next_token_is_not_keyword (cp_lexer* lexer, enum rid keyword)
609 {
610   return cp_lexer_peek_token (lexer)->keyword != keyword;
611 }
612
613 /* Return true if the next token is a keyword for a decl-specifier.  */
614
615 static bool
616 cp_lexer_next_token_is_decl_specifier_keyword (cp_lexer *lexer)
617 {
618   cp_token *token;
619
620   token = cp_lexer_peek_token (lexer);
621   switch (token->keyword) 
622     {
623       /* auto specifier: storage-class-specifier in C++,
624          simple-type-specifier in C++0x.  */
625     case RID_AUTO:
626       /* Storage classes.  */
627     case RID_REGISTER:
628     case RID_STATIC:
629     case RID_EXTERN:
630     case RID_MUTABLE:
631     case RID_THREAD:
632       /* Elaborated type specifiers.  */
633     case RID_ENUM:
634     case RID_CLASS:
635     case RID_STRUCT:
636     case RID_UNION:
637     case RID_TYPENAME:
638       /* Simple type specifiers.  */
639     case RID_CHAR:
640     case RID_CHAR16:
641     case RID_CHAR32:
642     case RID_WCHAR:
643     case RID_BOOL:
644     case RID_SHORT:
645     case RID_INT:
646     case RID_LONG:
647     case RID_INT128:
648     case RID_SIGNED:
649     case RID_UNSIGNED:
650     case RID_FLOAT:
651     case RID_DOUBLE:
652     case RID_VOID:
653       /* GNU extensions.  */ 
654     case RID_ATTRIBUTE:
655     case RID_TYPEOF:
656       /* C++0x extensions.  */
657     case RID_DECLTYPE:
658     case RID_UNDERLYING_TYPE:
659       return true;
660
661     default:
662       return false;
663     }
664 }
665
666 /* Returns TRUE iff the token T begins a decltype type.  */
667
668 static bool
669 token_is_decltype (cp_token *t)
670 {
671   return (t->keyword == RID_DECLTYPE
672           || t->type == CPP_DECLTYPE);
673 }
674
675 /* Returns TRUE iff the next token begins a decltype type.  */
676
677 static bool
678 cp_lexer_next_token_is_decltype (cp_lexer *lexer)
679 {
680   cp_token *t = cp_lexer_peek_token (lexer);
681   return token_is_decltype (t);
682 }
683
684 /* Return a pointer to the Nth token in the token stream.  If N is 1,
685    then this is precisely equivalent to cp_lexer_peek_token (except
686    that it is not inline).  One would like to disallow that case, but
687    there is one case (cp_parser_nth_token_starts_template_id) where
688    the caller passes a variable for N and it might be 1.  */
689
690 static cp_token *
691 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
692 {
693   cp_token *token;
694
695   /* N is 1-based, not zero-based.  */
696   gcc_assert (n > 0);
697
698   if (cp_lexer_debugging_p (lexer))
699     fprintf (cp_lexer_debug_stream,
700              "cp_lexer: peeking ahead %ld at token: ", (long)n);
701
702   --n;
703   token = lexer->next_token;
704   gcc_assert (!n || token != &eof_token);
705   while (n != 0)
706     {
707       ++token;
708       if (token == lexer->last_token)
709         {
710           token = &eof_token;
711           break;
712         }
713
714       if (!token->purged_p)
715         --n;
716     }
717
718   if (cp_lexer_debugging_p (lexer))
719     {
720       cp_lexer_print_token (cp_lexer_debug_stream, token);
721       putc ('\n', cp_lexer_debug_stream);
722     }
723
724   return token;
725 }
726
727 /* Return the next token, and advance the lexer's next_token pointer
728    to point to the next non-purged token.  */
729
730 static cp_token *
731 cp_lexer_consume_token (cp_lexer* lexer)
732 {
733   cp_token *token = lexer->next_token;
734
735   gcc_assert (token != &eof_token);
736   gcc_assert (!lexer->in_pragma || token->type != CPP_PRAGMA_EOL);
737
738   do
739     {
740       lexer->next_token++;
741       if (lexer->next_token == lexer->last_token)
742         {
743           lexer->next_token = &eof_token;
744           break;
745         }
746
747     }
748   while (lexer->next_token->purged_p);
749
750   cp_lexer_set_source_position_from_token (token);
751
752   /* Provide debugging output.  */
753   if (cp_lexer_debugging_p (lexer))
754     {
755       fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
756       cp_lexer_print_token (cp_lexer_debug_stream, token);
757       putc ('\n', cp_lexer_debug_stream);
758     }
759
760   return token;
761 }
762
763 /* Permanently remove the next token from the token stream, and
764    advance the next_token pointer to refer to the next non-purged
765    token.  */
766
767 static void
768 cp_lexer_purge_token (cp_lexer *lexer)
769 {
770   cp_token *tok = lexer->next_token;
771
772   gcc_assert (tok != &eof_token);
773   tok->purged_p = true;
774   tok->location = UNKNOWN_LOCATION;
775   tok->u.value = NULL_TREE;
776   tok->keyword = RID_MAX;
777
778   do
779     {
780       tok++;
781       if (tok == lexer->last_token)
782         {
783           tok = &eof_token;
784           break;
785         }
786     }
787   while (tok->purged_p);
788   lexer->next_token = tok;
789 }
790
791 /* Permanently remove all tokens after TOK, up to, but not
792    including, the token that will be returned next by
793    cp_lexer_peek_token.  */
794
795 static void
796 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
797 {
798   cp_token *peek = lexer->next_token;
799
800   if (peek == &eof_token)
801     peek = lexer->last_token;
802
803   gcc_assert (tok < peek);
804
805   for ( tok += 1; tok != peek; tok += 1)
806     {
807       tok->purged_p = true;
808       tok->location = UNKNOWN_LOCATION;
809       tok->u.value = NULL_TREE;
810       tok->keyword = RID_MAX;
811     }
812 }
813
814 /* Begin saving tokens.  All tokens consumed after this point will be
815    preserved.  */
816
817 static void
818 cp_lexer_save_tokens (cp_lexer* lexer)
819 {
820   /* Provide debugging output.  */
821   if (cp_lexer_debugging_p (lexer))
822     fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
823
824   VEC_safe_push (cp_token_position, heap,
825                  lexer->saved_tokens, lexer->next_token);
826 }
827
828 /* Commit to the portion of the token stream most recently saved.  */
829
830 static void
831 cp_lexer_commit_tokens (cp_lexer* lexer)
832 {
833   /* Provide debugging output.  */
834   if (cp_lexer_debugging_p (lexer))
835     fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
836
837   VEC_pop (cp_token_position, lexer->saved_tokens);
838 }
839
840 /* Return all tokens saved since the last call to cp_lexer_save_tokens
841    to the token stream.  Stop saving tokens.  */
842
843 static void
844 cp_lexer_rollback_tokens (cp_lexer* lexer)
845 {
846   /* Provide debugging output.  */
847   if (cp_lexer_debugging_p (lexer))
848     fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
849
850   lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
851 }
852
853 /* Print a representation of the TOKEN on the STREAM.  */
854
855 #ifdef ENABLE_CHECKING
856
857 static void
858 cp_lexer_print_token (FILE * stream, cp_token *token)
859 {
860   /* We don't use cpp_type2name here because the parser defines
861      a few tokens of its own.  */
862   static const char *const token_names[] = {
863     /* cpplib-defined token types */
864 #define OP(e, s) #e,
865 #define TK(e, s) #e,
866     TTYPE_TABLE
867 #undef OP
868 #undef TK
869     /* C++ parser token types - see "Manifest constants", above.  */
870     "KEYWORD",
871     "TEMPLATE_ID",
872     "NESTED_NAME_SPECIFIER",
873   };
874
875   /* For some tokens, print the associated data.  */
876   switch (token->type)
877     {
878     case CPP_KEYWORD:
879       /* Some keywords have a value that is not an IDENTIFIER_NODE.
880          For example, `struct' is mapped to an INTEGER_CST.  */
881       if (TREE_CODE (token->u.value) != IDENTIFIER_NODE)
882         break;
883       /* else fall through */
884     case CPP_NAME:
885       fputs (IDENTIFIER_POINTER (token->u.value), stream);
886       break;
887
888     case CPP_STRING:
889     case CPP_STRING16:
890     case CPP_STRING32:
891     case CPP_WSTRING:
892     case CPP_UTF8STRING:
893       fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->u.value));
894       break;
895
896     case CPP_NUMBER:
897       print_generic_expr (stream, token->u.value, 0);
898       break;
899
900     default:
901       /* If we have a name for the token, print it out.  Otherwise, we
902          simply give the numeric code.  */
903       if (token->type < ARRAY_SIZE(token_names))
904         fputs (token_names[token->type], stream);
905       else
906         fprintf (stream, "[%d]", token->type);
907       break;
908     }
909 }
910
911 /* Start emitting debugging information.  */
912
913 static void
914 cp_lexer_start_debugging (cp_lexer* lexer)
915 {
916   lexer->debugging_p = true;
917 }
918
919 /* Stop emitting debugging information.  */
920
921 static void
922 cp_lexer_stop_debugging (cp_lexer* lexer)
923 {
924   lexer->debugging_p = false;
925 }
926
927 #endif /* ENABLE_CHECKING */
928
929 /* Create a new cp_token_cache, representing a range of tokens.  */
930
931 static cp_token_cache *
932 cp_token_cache_new (cp_token *first, cp_token *last)
933 {
934   cp_token_cache *cache = ggc_alloc_cp_token_cache ();
935   cache->first = first;
936   cache->last = last;
937   return cache;
938 }
939
940 \f
941 /* Decl-specifiers.  */
942
943 /* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
944
945 static void
946 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
947 {
948   memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
949 }
950
951 /* Declarators.  */
952
953 /* Nothing other than the parser should be creating declarators;
954    declarators are a semi-syntactic representation of C++ entities.
955    Other parts of the front end that need to create entities (like
956    VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
957
958 static cp_declarator *make_call_declarator
959   (cp_declarator *, tree, cp_cv_quals, cp_virt_specifiers, tree, tree);
960 static cp_declarator *make_array_declarator
961   (cp_declarator *, tree);
962 static cp_declarator *make_pointer_declarator
963   (cp_cv_quals, cp_declarator *);
964 static cp_declarator *make_reference_declarator
965   (cp_cv_quals, cp_declarator *, bool);
966 static cp_parameter_declarator *make_parameter_declarator
967   (cp_decl_specifier_seq *, cp_declarator *, tree);
968 static cp_declarator *make_ptrmem_declarator
969   (cp_cv_quals, tree, cp_declarator *);
970
971 /* An erroneous declarator.  */
972 static cp_declarator *cp_error_declarator;
973
974 /* The obstack on which declarators and related data structures are
975    allocated.  */
976 static struct obstack declarator_obstack;
977
978 /* Alloc BYTES from the declarator memory pool.  */
979
980 static inline void *
981 alloc_declarator (size_t bytes)
982 {
983   return obstack_alloc (&declarator_obstack, bytes);
984 }
985
986 /* Allocate a declarator of the indicated KIND.  Clear fields that are
987    common to all declarators.  */
988
989 static cp_declarator *
990 make_declarator (cp_declarator_kind kind)
991 {
992   cp_declarator *declarator;
993
994   declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
995   declarator->kind = kind;
996   declarator->attributes = NULL_TREE;
997   declarator->declarator = NULL;
998   declarator->parameter_pack_p = false;
999   declarator->id_loc = UNKNOWN_LOCATION;
1000
1001   return declarator;
1002 }
1003
1004 /* Make a declarator for a generalized identifier.  If
1005    QUALIFYING_SCOPE is non-NULL, the identifier is
1006    QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
1007    UNQUALIFIED_NAME.  SFK indicates the kind of special function this
1008    is, if any.   */
1009
1010 static cp_declarator *
1011 make_id_declarator (tree qualifying_scope, tree unqualified_name,
1012                     special_function_kind sfk)
1013 {
1014   cp_declarator *declarator;
1015
1016   /* It is valid to write:
1017
1018        class C { void f(); };
1019        typedef C D;
1020        void D::f();
1021
1022      The standard is not clear about whether `typedef const C D' is
1023      legal; as of 2002-09-15 the committee is considering that
1024      question.  EDG 3.0 allows that syntax.  Therefore, we do as
1025      well.  */
1026   if (qualifying_scope && TYPE_P (qualifying_scope))
1027     qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
1028
1029   gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
1030               || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
1031               || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
1032
1033   declarator = make_declarator (cdk_id);
1034   declarator->u.id.qualifying_scope = qualifying_scope;
1035   declarator->u.id.unqualified_name = unqualified_name;
1036   declarator->u.id.sfk = sfk;
1037   
1038   return declarator;
1039 }
1040
1041 /* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
1042    of modifiers such as const or volatile to apply to the pointer
1043    type, represented as identifiers.  */
1044
1045 cp_declarator *
1046 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
1047 {
1048   cp_declarator *declarator;
1049
1050   declarator = make_declarator (cdk_pointer);
1051   declarator->declarator = target;
1052   declarator->u.pointer.qualifiers = cv_qualifiers;
1053   declarator->u.pointer.class_type = NULL_TREE;
1054   if (target)
1055     {
1056       declarator->id_loc = target->id_loc;
1057       declarator->parameter_pack_p = target->parameter_pack_p;
1058       target->parameter_pack_p = false;
1059     }
1060   else
1061     declarator->parameter_pack_p = false;
1062
1063   return declarator;
1064 }
1065
1066 /* Like make_pointer_declarator -- but for references.  */
1067
1068 cp_declarator *
1069 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target,
1070                            bool rvalue_ref)
1071 {
1072   cp_declarator *declarator;
1073
1074   declarator = make_declarator (cdk_reference);
1075   declarator->declarator = target;
1076   declarator->u.reference.qualifiers = cv_qualifiers;
1077   declarator->u.reference.rvalue_ref = rvalue_ref;
1078   if (target)
1079     {
1080       declarator->id_loc = target->id_loc;
1081       declarator->parameter_pack_p = target->parameter_pack_p;
1082       target->parameter_pack_p = false;
1083     }
1084   else
1085     declarator->parameter_pack_p = false;
1086
1087   return declarator;
1088 }
1089
1090 /* Like make_pointer_declarator -- but for a pointer to a non-static
1091    member of CLASS_TYPE.  */
1092
1093 cp_declarator *
1094 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
1095                         cp_declarator *pointee)
1096 {
1097   cp_declarator *declarator;
1098
1099   declarator = make_declarator (cdk_ptrmem);
1100   declarator->declarator = pointee;
1101   declarator->u.pointer.qualifiers = cv_qualifiers;
1102   declarator->u.pointer.class_type = class_type;
1103
1104   if (pointee)
1105     {
1106       declarator->parameter_pack_p = pointee->parameter_pack_p;
1107       pointee->parameter_pack_p = false;
1108     }
1109   else
1110     declarator->parameter_pack_p = false;
1111
1112   return declarator;
1113 }
1114
1115 /* Make a declarator for the function given by TARGET, with the
1116    indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
1117    "const"-qualified member function.  The EXCEPTION_SPECIFICATION
1118    indicates what exceptions can be thrown.  */
1119
1120 cp_declarator *
1121 make_call_declarator (cp_declarator *target,
1122                       tree parms,
1123                       cp_cv_quals cv_qualifiers,
1124                       cp_virt_specifiers virt_specifiers,
1125                       tree exception_specification,
1126                       tree late_return_type)
1127 {
1128   cp_declarator *declarator;
1129
1130   declarator = make_declarator (cdk_function);
1131   declarator->declarator = target;
1132   declarator->u.function.parameters = parms;
1133   declarator->u.function.qualifiers = cv_qualifiers;
1134   declarator->u.function.virt_specifiers = virt_specifiers;
1135   declarator->u.function.exception_specification = exception_specification;
1136   declarator->u.function.late_return_type = late_return_type;
1137   if (target)
1138     {
1139       declarator->id_loc = target->id_loc;
1140       declarator->parameter_pack_p = target->parameter_pack_p;
1141       target->parameter_pack_p = false;
1142     }
1143   else
1144     declarator->parameter_pack_p = false;
1145
1146   return declarator;
1147 }
1148
1149 /* Make a declarator for an array of BOUNDS elements, each of which is
1150    defined by ELEMENT.  */
1151
1152 cp_declarator *
1153 make_array_declarator (cp_declarator *element, tree bounds)
1154 {
1155   cp_declarator *declarator;
1156
1157   declarator = make_declarator (cdk_array);
1158   declarator->declarator = element;
1159   declarator->u.array.bounds = bounds;
1160   if (element)
1161     {
1162       declarator->id_loc = element->id_loc;
1163       declarator->parameter_pack_p = element->parameter_pack_p;
1164       element->parameter_pack_p = false;
1165     }
1166   else
1167     declarator->parameter_pack_p = false;
1168
1169   return declarator;
1170 }
1171
1172 /* Determine whether the declarator we've seen so far can be a
1173    parameter pack, when followed by an ellipsis.  */
1174 static bool 
1175 declarator_can_be_parameter_pack (cp_declarator *declarator)
1176 {
1177   /* Search for a declarator name, or any other declarator that goes
1178      after the point where the ellipsis could appear in a parameter
1179      pack. If we find any of these, then this declarator can not be
1180      made into a parameter pack.  */
1181   bool found = false;
1182   while (declarator && !found)
1183     {
1184       switch ((int)declarator->kind)
1185         {
1186         case cdk_id:
1187         case cdk_array:
1188           found = true;
1189           break;
1190
1191         case cdk_error:
1192           return true;
1193
1194         default:
1195           declarator = declarator->declarator;
1196           break;
1197         }
1198     }
1199
1200   return !found;
1201 }
1202
1203 cp_parameter_declarator *no_parameters;
1204
1205 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
1206    DECLARATOR and DEFAULT_ARGUMENT.  */
1207
1208 cp_parameter_declarator *
1209 make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
1210                            cp_declarator *declarator,
1211                            tree default_argument)
1212 {
1213   cp_parameter_declarator *parameter;
1214
1215   parameter = ((cp_parameter_declarator *)
1216                alloc_declarator (sizeof (cp_parameter_declarator)));
1217   parameter->next = NULL;
1218   if (decl_specifiers)
1219     parameter->decl_specifiers = *decl_specifiers;
1220   else
1221     clear_decl_specs (&parameter->decl_specifiers);
1222   parameter->declarator = declarator;
1223   parameter->default_argument = default_argument;
1224   parameter->ellipsis_p = false;
1225
1226   return parameter;
1227 }
1228
1229 /* Returns true iff DECLARATOR  is a declaration for a function.  */
1230
1231 static bool
1232 function_declarator_p (const cp_declarator *declarator)
1233 {
1234   while (declarator)
1235     {
1236       if (declarator->kind == cdk_function
1237           && declarator->declarator->kind == cdk_id)
1238         return true;
1239       if (declarator->kind == cdk_id
1240           || declarator->kind == cdk_error)
1241         return false;
1242       declarator = declarator->declarator;
1243     }
1244   return false;
1245 }
1246  
1247 /* The parser.  */
1248
1249 /* Overview
1250    --------
1251
1252    A cp_parser parses the token stream as specified by the C++
1253    grammar.  Its job is purely parsing, not semantic analysis.  For
1254    example, the parser breaks the token stream into declarators,
1255    expressions, statements, and other similar syntactic constructs.
1256    It does not check that the types of the expressions on either side
1257    of an assignment-statement are compatible, or that a function is
1258    not declared with a parameter of type `void'.
1259
1260    The parser invokes routines elsewhere in the compiler to perform
1261    semantic analysis and to build up the abstract syntax tree for the
1262    code processed.
1263
1264    The parser (and the template instantiation code, which is, in a
1265    way, a close relative of parsing) are the only parts of the
1266    compiler that should be calling push_scope and pop_scope, or
1267    related functions.  The parser (and template instantiation code)
1268    keeps track of what scope is presently active; everything else
1269    should simply honor that.  (The code that generates static
1270    initializers may also need to set the scope, in order to check
1271    access control correctly when emitting the initializers.)
1272
1273    Methodology
1274    -----------
1275
1276    The parser is of the standard recursive-descent variety.  Upcoming
1277    tokens in the token stream are examined in order to determine which
1278    production to use when parsing a non-terminal.  Some C++ constructs
1279    require arbitrary look ahead to disambiguate.  For example, it is
1280    impossible, in the general case, to tell whether a statement is an
1281    expression or declaration without scanning the entire statement.
1282    Therefore, the parser is capable of "parsing tentatively."  When the
1283    parser is not sure what construct comes next, it enters this mode.
1284    Then, while we attempt to parse the construct, the parser queues up
1285    error messages, rather than issuing them immediately, and saves the
1286    tokens it consumes.  If the construct is parsed successfully, the
1287    parser "commits", i.e., it issues any queued error messages and
1288    the tokens that were being preserved are permanently discarded.
1289    If, however, the construct is not parsed successfully, the parser
1290    rolls back its state completely so that it can resume parsing using
1291    a different alternative.
1292
1293    Future Improvements
1294    -------------------
1295
1296    The performance of the parser could probably be improved substantially.
1297    We could often eliminate the need to parse tentatively by looking ahead
1298    a little bit.  In some places, this approach might not entirely eliminate
1299    the need to parse tentatively, but it might still speed up the average
1300    case.  */
1301
1302 /* Flags that are passed to some parsing functions.  These values can
1303    be bitwise-ored together.  */
1304
1305 enum
1306 {
1307   /* No flags.  */
1308   CP_PARSER_FLAGS_NONE = 0x0,
1309   /* The construct is optional.  If it is not present, then no error
1310      should be issued.  */
1311   CP_PARSER_FLAGS_OPTIONAL = 0x1,
1312   /* When parsing a type-specifier, treat user-defined type-names
1313      as non-type identifiers.  */
1314   CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2,
1315   /* When parsing a type-specifier, do not try to parse a class-specifier
1316      or enum-specifier.  */
1317   CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS = 0x4,
1318   /* When parsing a decl-specifier-seq, only allow type-specifier or
1319      constexpr.  */
1320   CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR = 0x8
1321 };
1322
1323 /* This type is used for parameters and variables which hold
1324    combinations of the above flags.  */
1325 typedef int cp_parser_flags;
1326
1327 /* The different kinds of declarators we want to parse.  */
1328
1329 typedef enum cp_parser_declarator_kind
1330 {
1331   /* We want an abstract declarator.  */
1332   CP_PARSER_DECLARATOR_ABSTRACT,
1333   /* We want a named declarator.  */
1334   CP_PARSER_DECLARATOR_NAMED,
1335   /* We don't mind, but the name must be an unqualified-id.  */
1336   CP_PARSER_DECLARATOR_EITHER
1337 } cp_parser_declarator_kind;
1338
1339 /* The precedence values used to parse binary expressions.  The minimum value
1340    of PREC must be 1, because zero is reserved to quickly discriminate
1341    binary operators from other tokens.  */
1342
1343 enum cp_parser_prec
1344 {
1345   PREC_NOT_OPERATOR,
1346   PREC_LOGICAL_OR_EXPRESSION,
1347   PREC_LOGICAL_AND_EXPRESSION,
1348   PREC_INCLUSIVE_OR_EXPRESSION,
1349   PREC_EXCLUSIVE_OR_EXPRESSION,
1350   PREC_AND_EXPRESSION,
1351   PREC_EQUALITY_EXPRESSION,
1352   PREC_RELATIONAL_EXPRESSION,
1353   PREC_SHIFT_EXPRESSION,
1354   PREC_ADDITIVE_EXPRESSION,
1355   PREC_MULTIPLICATIVE_EXPRESSION,
1356   PREC_PM_EXPRESSION,
1357   NUM_PREC_VALUES = PREC_PM_EXPRESSION
1358 };
1359
1360 /* A mapping from a token type to a corresponding tree node type, with a
1361    precedence value.  */
1362
1363 typedef struct cp_parser_binary_operations_map_node
1364 {
1365   /* The token type.  */
1366   enum cpp_ttype token_type;
1367   /* The corresponding tree code.  */
1368   enum tree_code tree_type;
1369   /* The precedence of this operator.  */
1370   enum cp_parser_prec prec;
1371 } cp_parser_binary_operations_map_node;
1372
1373 typedef struct cp_parser_expression_stack_entry
1374 {
1375   /* Left hand side of the binary operation we are currently
1376      parsing.  */
1377   tree lhs;
1378   /* Original tree code for left hand side, if it was a binary
1379      expression itself (used for -Wparentheses).  */
1380   enum tree_code lhs_type;
1381   /* Tree code for the binary operation we are parsing.  */
1382   enum tree_code tree_type;
1383   /* Precedence of the binary operation we are parsing.  */
1384   enum cp_parser_prec prec;
1385 } cp_parser_expression_stack_entry;
1386
1387 /* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1388    entries because precedence levels on the stack are monotonically
1389    increasing.  */
1390 typedef struct cp_parser_expression_stack_entry
1391   cp_parser_expression_stack[NUM_PREC_VALUES];
1392
1393 /* Prototypes.  */
1394
1395 /* Constructors and destructors.  */
1396
1397 static cp_parser_context *cp_parser_context_new
1398   (cp_parser_context *);
1399
1400 /* Class variables.  */
1401
1402 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1403
1404 /* The operator-precedence table used by cp_parser_binary_expression.
1405    Transformed into an associative array (binops_by_token) by
1406    cp_parser_new.  */
1407
1408 static const cp_parser_binary_operations_map_node binops[] = {
1409   { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1410   { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1411
1412   { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1413   { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1414   { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1415
1416   { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1417   { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1418
1419   { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1420   { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1421
1422   { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1423   { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1424   { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1425   { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1426
1427   { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1428   { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1429
1430   { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1431
1432   { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1433
1434   { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1435
1436   { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1437
1438   { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1439 };
1440
1441 /* The same as binops, but initialized by cp_parser_new so that
1442    binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1443    for speed.  */
1444 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1445
1446 /* Constructors and destructors.  */
1447
1448 /* Construct a new context.  The context below this one on the stack
1449    is given by NEXT.  */
1450
1451 static cp_parser_context *
1452 cp_parser_context_new (cp_parser_context* next)
1453 {
1454   cp_parser_context *context;
1455
1456   /* Allocate the storage.  */
1457   if (cp_parser_context_free_list != NULL)
1458     {
1459       /* Pull the first entry from the free list.  */
1460       context = cp_parser_context_free_list;
1461       cp_parser_context_free_list = context->next;
1462       memset (context, 0, sizeof (*context));
1463     }
1464   else
1465     context = ggc_alloc_cleared_cp_parser_context ();
1466
1467   /* No errors have occurred yet in this context.  */
1468   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1469   /* If this is not the bottommost context, copy information that we
1470      need from the previous context.  */
1471   if (next)
1472     {
1473       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1474          expression, then we are parsing one in this context, too.  */
1475       context->object_type = next->object_type;
1476       /* Thread the stack.  */
1477       context->next = next;
1478     }
1479
1480   return context;
1481 }
1482
1483 /* Managing the unparsed function queues.  */
1484
1485 #define unparsed_funs_with_default_args \
1486   VEC_last (cp_unparsed_functions_entry, parser->unparsed_queues)->funs_with_default_args
1487 #define unparsed_funs_with_definitions \
1488   VEC_last (cp_unparsed_functions_entry, parser->unparsed_queues)->funs_with_definitions
1489 #define unparsed_nsdmis \
1490   VEC_last (cp_unparsed_functions_entry, parser->unparsed_queues)->nsdmis
1491
1492 static void
1493 push_unparsed_function_queues (cp_parser *parser)
1494 {
1495   VEC_safe_push (cp_unparsed_functions_entry, gc,
1496                  parser->unparsed_queues, NULL);
1497   unparsed_funs_with_default_args = NULL;
1498   unparsed_funs_with_definitions = make_tree_vector ();
1499   unparsed_nsdmis = NULL;
1500 }
1501
1502 static void
1503 pop_unparsed_function_queues (cp_parser *parser)
1504 {
1505   release_tree_vector (unparsed_funs_with_definitions);
1506   VEC_pop (cp_unparsed_functions_entry, parser->unparsed_queues);
1507 }
1508
1509 /* Prototypes.  */
1510
1511 /* Constructors and destructors.  */
1512
1513 static cp_parser *cp_parser_new
1514   (void);
1515
1516 /* Routines to parse various constructs.
1517
1518    Those that return `tree' will return the error_mark_node (rather
1519    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1520    Sometimes, they will return an ordinary node if error-recovery was
1521    attempted, even though a parse error occurred.  So, to check
1522    whether or not a parse error occurred, you should always use
1523    cp_parser_error_occurred.  If the construct is optional (indicated
1524    either by an `_opt' in the name of the function that does the
1525    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1526    the construct is not present.  */
1527
1528 /* Lexical conventions [gram.lex]  */
1529
1530 static tree cp_parser_identifier
1531   (cp_parser *);
1532 static tree cp_parser_string_literal
1533   (cp_parser *, bool, bool);
1534
1535 /* Basic concepts [gram.basic]  */
1536
1537 static bool cp_parser_translation_unit
1538   (cp_parser *);
1539
1540 /* Expressions [gram.expr]  */
1541
1542 static tree cp_parser_primary_expression
1543   (cp_parser *, bool, bool, bool, cp_id_kind *);
1544 static tree cp_parser_id_expression
1545   (cp_parser *, bool, bool, bool *, bool, bool);
1546 static tree cp_parser_unqualified_id
1547   (cp_parser *, bool, bool, bool, bool);
1548 static tree cp_parser_nested_name_specifier_opt
1549   (cp_parser *, bool, bool, bool, bool);
1550 static tree cp_parser_nested_name_specifier
1551   (cp_parser *, bool, bool, bool, bool);
1552 static tree cp_parser_qualifying_entity
1553   (cp_parser *, bool, bool, bool, bool, bool);
1554 static tree cp_parser_postfix_expression
1555   (cp_parser *, bool, bool, bool, cp_id_kind *);
1556 static tree cp_parser_postfix_open_square_expression
1557   (cp_parser *, tree, bool);
1558 static tree cp_parser_postfix_dot_deref_expression
1559   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *, location_t);
1560 static VEC(tree,gc) *cp_parser_parenthesized_expression_list
1561   (cp_parser *, int, bool, bool, bool *);
1562 /* Values for the second parameter of cp_parser_parenthesized_expression_list.  */
1563 enum { non_attr = 0, normal_attr = 1, id_attr = 2 };
1564 static void cp_parser_pseudo_destructor_name
1565   (cp_parser *, tree *, tree *);
1566 static tree cp_parser_unary_expression
1567   (cp_parser *, bool, bool, cp_id_kind *);
1568 static enum tree_code cp_parser_unary_operator
1569   (cp_token *);
1570 static tree cp_parser_new_expression
1571   (cp_parser *);
1572 static VEC(tree,gc) *cp_parser_new_placement
1573   (cp_parser *);
1574 static tree cp_parser_new_type_id
1575   (cp_parser *, tree *);
1576 static cp_declarator *cp_parser_new_declarator_opt
1577   (cp_parser *);
1578 static cp_declarator *cp_parser_direct_new_declarator
1579   (cp_parser *);
1580 static VEC(tree,gc) *cp_parser_new_initializer
1581   (cp_parser *);
1582 static tree cp_parser_delete_expression
1583   (cp_parser *);
1584 static tree cp_parser_cast_expression
1585   (cp_parser *, bool, bool, cp_id_kind *);
1586 static tree cp_parser_binary_expression
1587   (cp_parser *, bool, bool, enum cp_parser_prec, cp_id_kind *);
1588 static tree cp_parser_question_colon_clause
1589   (cp_parser *, tree);
1590 static tree cp_parser_assignment_expression
1591   (cp_parser *, bool, cp_id_kind *);
1592 static enum tree_code cp_parser_assignment_operator_opt
1593   (cp_parser *);
1594 static tree cp_parser_expression
1595   (cp_parser *, bool, cp_id_kind *);
1596 static tree cp_parser_constant_expression
1597   (cp_parser *, bool, bool *);
1598 static tree cp_parser_builtin_offsetof
1599   (cp_parser *);
1600 static tree cp_parser_lambda_expression
1601   (cp_parser *);
1602 static void cp_parser_lambda_introducer
1603   (cp_parser *, tree);
1604 static bool cp_parser_lambda_declarator_opt
1605   (cp_parser *, tree);
1606 static void cp_parser_lambda_body
1607   (cp_parser *, tree);
1608
1609 /* Statements [gram.stmt.stmt]  */
1610
1611 static void cp_parser_statement
1612   (cp_parser *, tree, bool, bool *);
1613 static void cp_parser_label_for_labeled_statement
1614   (cp_parser *);
1615 static tree cp_parser_expression_statement
1616   (cp_parser *, tree);
1617 static tree cp_parser_compound_statement
1618   (cp_parser *, tree, bool, bool);
1619 static void cp_parser_statement_seq_opt
1620   (cp_parser *, tree);
1621 static tree cp_parser_selection_statement
1622   (cp_parser *, bool *);
1623 static tree cp_parser_condition
1624   (cp_parser *);
1625 static tree cp_parser_iteration_statement
1626   (cp_parser *);
1627 static bool cp_parser_for_init_statement
1628   (cp_parser *, tree *decl);
1629 static tree cp_parser_for
1630   (cp_parser *);
1631 static tree cp_parser_c_for
1632   (cp_parser *, tree, tree);
1633 static tree cp_parser_range_for
1634   (cp_parser *, tree, tree, tree);
1635 static void do_range_for_auto_deduction
1636   (tree, tree);
1637 static tree cp_parser_perform_range_for_lookup
1638   (tree, tree *, tree *);
1639 static tree cp_parser_range_for_member_function
1640   (tree, tree);
1641 static tree cp_parser_jump_statement
1642   (cp_parser *);
1643 static void cp_parser_declaration_statement
1644   (cp_parser *);
1645
1646 static tree cp_parser_implicitly_scoped_statement
1647   (cp_parser *, bool *);
1648 static void cp_parser_already_scoped_statement
1649   (cp_parser *);
1650
1651 /* Declarations [gram.dcl.dcl] */
1652
1653 static void cp_parser_declaration_seq_opt
1654   (cp_parser *);
1655 static void cp_parser_declaration
1656   (cp_parser *);
1657 static void cp_parser_block_declaration
1658   (cp_parser *, bool);
1659 static void cp_parser_simple_declaration
1660   (cp_parser *, bool, tree *);
1661 static void cp_parser_decl_specifier_seq
1662   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1663 static tree cp_parser_storage_class_specifier_opt
1664   (cp_parser *);
1665 static tree cp_parser_function_specifier_opt
1666   (cp_parser *, cp_decl_specifier_seq *);
1667 static tree cp_parser_type_specifier
1668   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1669    int *, bool *);
1670 static tree cp_parser_simple_type_specifier
1671   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1672 static tree cp_parser_type_name
1673   (cp_parser *);
1674 static tree cp_parser_nonclass_name 
1675   (cp_parser* parser);
1676 static tree cp_parser_elaborated_type_specifier
1677   (cp_parser *, bool, bool);
1678 static tree cp_parser_enum_specifier
1679   (cp_parser *);
1680 static void cp_parser_enumerator_list
1681   (cp_parser *, tree);
1682 static void cp_parser_enumerator_definition
1683   (cp_parser *, tree);
1684 static tree cp_parser_namespace_name
1685   (cp_parser *);
1686 static void cp_parser_namespace_definition
1687   (cp_parser *);
1688 static void cp_parser_namespace_body
1689   (cp_parser *);
1690 static tree cp_parser_qualified_namespace_specifier
1691   (cp_parser *);
1692 static void cp_parser_namespace_alias_definition
1693   (cp_parser *);
1694 static bool cp_parser_using_declaration
1695   (cp_parser *, bool);
1696 static void cp_parser_using_directive
1697   (cp_parser *);
1698 static void cp_parser_asm_definition
1699   (cp_parser *);
1700 static void cp_parser_linkage_specification
1701   (cp_parser *);
1702 static void cp_parser_static_assert
1703   (cp_parser *, bool);
1704 static tree cp_parser_decltype
1705   (cp_parser *);
1706
1707 /* Declarators [gram.dcl.decl] */
1708
1709 static tree cp_parser_init_declarator
1710   (cp_parser *, cp_decl_specifier_seq *, VEC (deferred_access_check,gc)*, bool, bool, int, bool *, tree *);
1711 static cp_declarator *cp_parser_declarator
1712   (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1713 static cp_declarator *cp_parser_direct_declarator
1714   (cp_parser *, cp_parser_declarator_kind, int *, bool);
1715 static enum tree_code cp_parser_ptr_operator
1716   (cp_parser *, tree *, cp_cv_quals *);
1717 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1718   (cp_parser *);
1719 static cp_virt_specifiers cp_parser_virt_specifier_seq_opt
1720   (cp_parser *);
1721 static tree cp_parser_late_return_type_opt
1722   (cp_parser *, cp_cv_quals);
1723 static tree cp_parser_declarator_id
1724   (cp_parser *, bool);
1725 static tree cp_parser_type_id
1726   (cp_parser *);
1727 static tree cp_parser_template_type_arg
1728   (cp_parser *);
1729 static tree cp_parser_trailing_type_id (cp_parser *);
1730 static tree cp_parser_type_id_1
1731   (cp_parser *, bool, bool);
1732 static void cp_parser_type_specifier_seq
1733   (cp_parser *, bool, bool, cp_decl_specifier_seq *);
1734 static tree cp_parser_parameter_declaration_clause
1735   (cp_parser *);
1736 static tree cp_parser_parameter_declaration_list
1737   (cp_parser *, bool *);
1738 static cp_parameter_declarator *cp_parser_parameter_declaration
1739   (cp_parser *, bool, bool *);
1740 static tree cp_parser_default_argument 
1741   (cp_parser *, bool);
1742 static void cp_parser_function_body
1743   (cp_parser *);
1744 static tree cp_parser_initializer
1745   (cp_parser *, bool *, bool *);
1746 static tree cp_parser_initializer_clause
1747   (cp_parser *, bool *);
1748 static tree cp_parser_braced_list
1749   (cp_parser*, bool*);
1750 static VEC(constructor_elt,gc) *cp_parser_initializer_list
1751   (cp_parser *, bool *);
1752
1753 static bool cp_parser_ctor_initializer_opt_and_function_body
1754   (cp_parser *);
1755
1756 /* Classes [gram.class] */
1757
1758 static tree cp_parser_class_name
1759   (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
1760 static tree cp_parser_class_specifier
1761   (cp_parser *);
1762 static tree cp_parser_class_head
1763   (cp_parser *, bool *, tree *, tree *);
1764 static enum tag_types cp_parser_class_key
1765   (cp_parser *);
1766 static void cp_parser_member_specification_opt
1767   (cp_parser *);
1768 static void cp_parser_member_declaration
1769   (cp_parser *);
1770 static tree cp_parser_pure_specifier
1771   (cp_parser *);
1772 static tree cp_parser_constant_initializer
1773   (cp_parser *);
1774
1775 /* Derived classes [gram.class.derived] */
1776
1777 static tree cp_parser_base_clause
1778   (cp_parser *);
1779 static tree cp_parser_base_specifier
1780   (cp_parser *);
1781
1782 /* Special member functions [gram.special] */
1783
1784 static tree cp_parser_conversion_function_id
1785   (cp_parser *);
1786 static tree cp_parser_conversion_type_id
1787   (cp_parser *);
1788 static cp_declarator *cp_parser_conversion_declarator_opt
1789   (cp_parser *);
1790 static bool cp_parser_ctor_initializer_opt
1791   (cp_parser *);
1792 static void cp_parser_mem_initializer_list
1793   (cp_parser *);
1794 static tree cp_parser_mem_initializer
1795   (cp_parser *);
1796 static tree cp_parser_mem_initializer_id
1797   (cp_parser *);
1798
1799 /* Overloading [gram.over] */
1800
1801 static tree cp_parser_operator_function_id
1802   (cp_parser *);
1803 static tree cp_parser_operator
1804   (cp_parser *);
1805
1806 /* Templates [gram.temp] */
1807
1808 static void cp_parser_template_declaration
1809   (cp_parser *, bool);
1810 static tree cp_parser_template_parameter_list
1811   (cp_parser *);
1812 static tree cp_parser_template_parameter
1813   (cp_parser *, bool *, bool *);
1814 static tree cp_parser_type_parameter
1815   (cp_parser *, bool *);
1816 static tree cp_parser_template_id
1817   (cp_parser *, bool, bool, bool);
1818 static tree cp_parser_template_name
1819   (cp_parser *, bool, bool, bool, bool *);
1820 static tree cp_parser_template_argument_list
1821   (cp_parser *);
1822 static tree cp_parser_template_argument
1823   (cp_parser *);
1824 static void cp_parser_explicit_instantiation
1825   (cp_parser *);
1826 static void cp_parser_explicit_specialization
1827   (cp_parser *);
1828
1829 /* Exception handling [gram.exception] */
1830
1831 static tree cp_parser_try_block
1832   (cp_parser *);
1833 static bool cp_parser_function_try_block
1834   (cp_parser *);
1835 static void cp_parser_handler_seq
1836   (cp_parser *);
1837 static void cp_parser_handler
1838   (cp_parser *);
1839 static tree cp_parser_exception_declaration
1840   (cp_parser *);
1841 static tree cp_parser_throw_expression
1842   (cp_parser *);
1843 static tree cp_parser_exception_specification_opt
1844   (cp_parser *);
1845 static tree cp_parser_type_id_list
1846   (cp_parser *);
1847
1848 /* GNU Extensions */
1849
1850 static tree cp_parser_asm_specification_opt
1851   (cp_parser *);
1852 static tree cp_parser_asm_operand_list
1853   (cp_parser *);
1854 static tree cp_parser_asm_clobber_list
1855   (cp_parser *);
1856 static tree cp_parser_asm_label_list
1857   (cp_parser *);
1858 static tree cp_parser_attributes_opt
1859   (cp_parser *);
1860 static tree cp_parser_attribute_list
1861   (cp_parser *);
1862 static bool cp_parser_extension_opt
1863   (cp_parser *, int *);
1864 static void cp_parser_label_declaration
1865   (cp_parser *);
1866
1867 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1868 static bool cp_parser_pragma
1869   (cp_parser *, enum pragma_context);
1870
1871 /* Objective-C++ Productions */
1872
1873 static tree cp_parser_objc_message_receiver
1874   (cp_parser *);
1875 static tree cp_parser_objc_message_args
1876   (cp_parser *);
1877 static tree cp_parser_objc_message_expression
1878   (cp_parser *);
1879 static tree cp_parser_objc_encode_expression
1880   (cp_parser *);
1881 static tree cp_parser_objc_defs_expression
1882   (cp_parser *);
1883 static tree cp_parser_objc_protocol_expression
1884   (cp_parser *);
1885 static tree cp_parser_objc_selector_expression
1886   (cp_parser *);
1887 static tree cp_parser_objc_expression
1888   (cp_parser *);
1889 static bool cp_parser_objc_selector_p
1890   (enum cpp_ttype);
1891 static tree cp_parser_objc_selector
1892   (cp_parser *);
1893 static tree cp_parser_objc_protocol_refs_opt
1894   (cp_parser *);
1895 static void cp_parser_objc_declaration
1896   (cp_parser *, tree);
1897 static tree cp_parser_objc_statement
1898   (cp_parser *);
1899 static bool cp_parser_objc_valid_prefix_attributes
1900   (cp_parser *, tree *);
1901 static void cp_parser_objc_at_property_declaration 
1902   (cp_parser *) ;
1903 static void cp_parser_objc_at_synthesize_declaration 
1904   (cp_parser *) ;
1905 static void cp_parser_objc_at_dynamic_declaration
1906   (cp_parser *) ;
1907 static tree cp_parser_objc_struct_declaration
1908   (cp_parser *) ;
1909
1910 /* Utility Routines */
1911
1912 static tree cp_parser_lookup_name
1913   (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *, location_t);
1914 static tree cp_parser_lookup_name_simple
1915   (cp_parser *, tree, location_t);
1916 static tree cp_parser_maybe_treat_template_as_class
1917   (tree, bool);
1918 static bool cp_parser_check_declarator_template_parameters
1919   (cp_parser *, cp_declarator *, location_t);
1920 static bool cp_parser_check_template_parameters
1921   (cp_parser *, unsigned, location_t, cp_declarator *);
1922 static tree cp_parser_simple_cast_expression
1923   (cp_parser *);
1924 static tree cp_parser_global_scope_opt
1925   (cp_parser *, bool);
1926 static bool cp_parser_constructor_declarator_p
1927   (cp_parser *, bool);
1928 static tree cp_parser_function_definition_from_specifiers_and_declarator
1929   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1930 static tree cp_parser_function_definition_after_declarator
1931   (cp_parser *, bool);
1932 static void cp_parser_template_declaration_after_export
1933   (cp_parser *, bool);
1934 static void cp_parser_perform_template_parameter_access_checks
1935   (VEC (deferred_access_check,gc)*);
1936 static tree cp_parser_single_declaration
1937   (cp_parser *, VEC (deferred_access_check,gc)*, bool, bool, bool *);
1938 static tree cp_parser_functional_cast
1939   (cp_parser *, tree);
1940 static tree cp_parser_save_member_function_body
1941   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1942 static tree cp_parser_save_nsdmi
1943   (cp_parser *);
1944 static tree cp_parser_enclosed_template_argument_list
1945   (cp_parser *);
1946 static void cp_parser_save_default_args
1947   (cp_parser *, tree);
1948 static void cp_parser_late_parsing_for_member
1949   (cp_parser *, tree);
1950 static tree cp_parser_late_parse_one_default_arg
1951   (cp_parser *, tree, tree, tree);
1952 static void cp_parser_late_parsing_nsdmi
1953   (cp_parser *, tree);
1954 static void cp_parser_late_parsing_default_args
1955   (cp_parser *, tree);
1956 static tree cp_parser_sizeof_operand
1957   (cp_parser *, enum rid);
1958 static tree cp_parser_trait_expr
1959   (cp_parser *, enum rid);
1960 static bool cp_parser_declares_only_class_p
1961   (cp_parser *);
1962 static void cp_parser_set_storage_class
1963   (cp_parser *, cp_decl_specifier_seq *, enum rid, location_t);
1964 static void cp_parser_set_decl_spec_type
1965   (cp_decl_specifier_seq *, tree, location_t, bool);
1966 static bool cp_parser_friend_p
1967   (const cp_decl_specifier_seq *);
1968 static void cp_parser_required_error
1969   (cp_parser *, required_token, bool);
1970 static cp_token *cp_parser_require
1971   (cp_parser *, enum cpp_ttype, required_token);
1972 static cp_token *cp_parser_require_keyword
1973   (cp_parser *, enum rid, required_token);
1974 static bool cp_parser_token_starts_function_definition_p
1975   (cp_token *);
1976 static bool cp_parser_next_token_starts_class_definition_p
1977   (cp_parser *);
1978 static bool cp_parser_next_token_ends_template_argument_p
1979   (cp_parser *);
1980 static bool cp_parser_nth_token_starts_template_argument_list_p
1981   (cp_parser *, size_t);
1982 static enum tag_types cp_parser_token_is_class_key
1983   (cp_token *);
1984 static void cp_parser_check_class_key
1985   (enum tag_types, tree type);
1986 static void cp_parser_check_access_in_redeclaration
1987   (tree type, location_t location);
1988 static bool cp_parser_optional_template_keyword
1989   (cp_parser *);
1990 static void cp_parser_pre_parsed_nested_name_specifier
1991   (cp_parser *);
1992 static bool cp_parser_cache_group
1993   (cp_parser *, enum cpp_ttype, unsigned);
1994 static void cp_parser_parse_tentatively
1995   (cp_parser *);
1996 static void cp_parser_commit_to_tentative_parse
1997   (cp_parser *);
1998 static void cp_parser_abort_tentative_parse
1999   (cp_parser *);
2000 static bool cp_parser_parse_definitely
2001   (cp_parser *);
2002 static inline bool cp_parser_parsing_tentatively
2003   (cp_parser *);
2004 static bool cp_parser_uncommitted_to_tentative_parse_p
2005   (cp_parser *);
2006 static void cp_parser_error
2007   (cp_parser *, const char *);
2008 static void cp_parser_name_lookup_error
2009   (cp_parser *, tree, tree, name_lookup_error, location_t);
2010 static bool cp_parser_simulate_error
2011   (cp_parser *);
2012 static bool cp_parser_check_type_definition
2013   (cp_parser *);
2014 static void cp_parser_check_for_definition_in_return_type
2015   (cp_declarator *, tree, location_t type_location);
2016 static void cp_parser_check_for_invalid_template_id
2017   (cp_parser *, tree, location_t location);
2018 static bool cp_parser_non_integral_constant_expression
2019   (cp_parser *, non_integral_constant);
2020 static void cp_parser_diagnose_invalid_type_name
2021   (cp_parser *, tree, tree, location_t);
2022 static bool cp_parser_parse_and_diagnose_invalid_type_name
2023   (cp_parser *);
2024 static int cp_parser_skip_to_closing_parenthesis
2025   (cp_parser *, bool, bool, bool);
2026 static void cp_parser_skip_to_end_of_statement
2027   (cp_parser *);
2028 static void cp_parser_consume_semicolon_at_end_of_statement
2029   (cp_parser *);
2030 static void cp_parser_skip_to_end_of_block_or_statement
2031   (cp_parser *);
2032 static bool cp_parser_skip_to_closing_brace
2033   (cp_parser *);
2034 static void cp_parser_skip_to_end_of_template_parameter_list
2035   (cp_parser *);
2036 static void cp_parser_skip_to_pragma_eol
2037   (cp_parser*, cp_token *);
2038 static bool cp_parser_error_occurred
2039   (cp_parser *);
2040 static bool cp_parser_allow_gnu_extensions_p
2041   (cp_parser *);
2042 static bool cp_parser_is_string_literal
2043   (cp_token *);
2044 static bool cp_parser_is_keyword
2045   (cp_token *, enum rid);
2046 static tree cp_parser_make_typename_type
2047   (cp_parser *, tree, tree, location_t location);
2048 static cp_declarator * cp_parser_make_indirect_declarator
2049   (enum tree_code, tree, cp_cv_quals, cp_declarator *);
2050
2051 /* Returns nonzero if we are parsing tentatively.  */
2052
2053 static inline bool
2054 cp_parser_parsing_tentatively (cp_parser* parser)
2055 {
2056   return parser->context->next != NULL;
2057 }
2058
2059 /* Returns nonzero if TOKEN is a string literal.  */
2060
2061 static bool
2062 cp_parser_is_string_literal (cp_token* token)
2063 {
2064   return (token->type == CPP_STRING ||
2065           token->type == CPP_STRING16 ||
2066           token->type == CPP_STRING32 ||
2067           token->type == CPP_WSTRING ||
2068           token->type == CPP_UTF8STRING);
2069 }
2070
2071 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
2072
2073 static bool
2074 cp_parser_is_keyword (cp_token* token, enum rid keyword)
2075 {
2076   return token->keyword == keyword;
2077 }
2078
2079 /* If not parsing tentatively, issue a diagnostic of the form
2080       FILE:LINE: MESSAGE before TOKEN
2081    where TOKEN is the next token in the input stream.  MESSAGE
2082    (specified by the caller) is usually of the form "expected
2083    OTHER-TOKEN".  */
2084
2085 static void
2086 cp_parser_error (cp_parser* parser, const char* gmsgid)
2087 {
2088   if (!cp_parser_simulate_error (parser))
2089     {
2090       cp_token *token = cp_lexer_peek_token (parser->lexer);
2091       /* This diagnostic makes more sense if it is tagged to the line
2092          of the token we just peeked at.  */
2093       cp_lexer_set_source_position_from_token (token);
2094
2095       if (token->type == CPP_PRAGMA)
2096         {
2097           error_at (token->location,
2098                     "%<#pragma%> is not allowed here");
2099           cp_parser_skip_to_pragma_eol (parser, token);
2100           return;
2101         }
2102
2103       c_parse_error (gmsgid,
2104                      /* Because c_parser_error does not understand
2105                         CPP_KEYWORD, keywords are treated like
2106                         identifiers.  */
2107                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
2108                      token->u.value, token->flags);
2109     }
2110 }
2111
2112 /* Issue an error about name-lookup failing.  NAME is the
2113    IDENTIFIER_NODE DECL is the result of
2114    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
2115    the thing that we hoped to find.  */
2116
2117 static void
2118 cp_parser_name_lookup_error (cp_parser* parser,
2119                              tree name,
2120                              tree decl,
2121                              name_lookup_error desired,
2122                              location_t location)
2123 {
2124   /* If name lookup completely failed, tell the user that NAME was not
2125      declared.  */
2126   if (decl == error_mark_node)
2127     {
2128       if (parser->scope && parser->scope != global_namespace)
2129         error_at (location, "%<%E::%E%> has not been declared",
2130                   parser->scope, name);
2131       else if (parser->scope == global_namespace)
2132         error_at (location, "%<::%E%> has not been declared", name);
2133       else if (parser->object_scope
2134                && !CLASS_TYPE_P (parser->object_scope))
2135         error_at (location, "request for member %qE in non-class type %qT",
2136                   name, parser->object_scope);
2137       else if (parser->object_scope)
2138         error_at (location, "%<%T::%E%> has not been declared",
2139                   parser->object_scope, name);
2140       else
2141         error_at (location, "%qE has not been declared", name);
2142     }
2143   else if (parser->scope && parser->scope != global_namespace)
2144     {
2145       switch (desired)
2146         {
2147           case NLE_TYPE:
2148             error_at (location, "%<%E::%E%> is not a type",
2149                                 parser->scope, name);
2150             break;
2151           case NLE_CXX98:
2152             error_at (location, "%<%E::%E%> is not a class or namespace",
2153                                 parser->scope, name);
2154             break;
2155           case NLE_NOT_CXX98:
2156             error_at (location,
2157                       "%<%E::%E%> is not a class, namespace, or enumeration",
2158                       parser->scope, name);
2159             break;
2160           default:
2161             gcc_unreachable ();
2162             
2163         }
2164     }
2165   else if (parser->scope == global_namespace)
2166     {
2167       switch (desired)
2168         {
2169           case NLE_TYPE:
2170             error_at (location, "%<::%E%> is not a type", name);
2171             break;
2172           case NLE_CXX98:
2173             error_at (location, "%<::%E%> is not a class or namespace", name);
2174             break;
2175           case NLE_NOT_CXX98:
2176             error_at (location,
2177                       "%<::%E%> is not a class, namespace, or enumeration",
2178                       name);
2179             break;
2180           default:
2181             gcc_unreachable ();
2182         }
2183     }
2184   else
2185     {
2186       switch (desired)
2187         {
2188           case NLE_TYPE:
2189             error_at (location, "%qE is not a type", name);
2190             break;
2191           case NLE_CXX98:
2192             error_at (location, "%qE is not a class or namespace", name);
2193             break;
2194           case NLE_NOT_CXX98:
2195             error_at (location,
2196                       "%qE is not a class, namespace, or enumeration", name);
2197             break;
2198           default:
2199             gcc_unreachable ();
2200         }
2201     }
2202 }
2203
2204 /* If we are parsing tentatively, remember that an error has occurred
2205    during this tentative parse.  Returns true if the error was
2206    simulated; false if a message should be issued by the caller.  */
2207
2208 static bool
2209 cp_parser_simulate_error (cp_parser* parser)
2210 {
2211   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2212     {
2213       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2214       return true;
2215     }
2216   return false;
2217 }
2218
2219 /* Check for repeated decl-specifiers.  */
2220
2221 static void
2222 cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs,
2223                            location_t location)
2224 {
2225   int ds;
2226
2227   for (ds = ds_first; ds != ds_last; ++ds)
2228     {
2229       unsigned count = decl_specs->specs[ds];
2230       if (count < 2)
2231         continue;
2232       /* The "long" specifier is a special case because of "long long".  */
2233       if (ds == ds_long)
2234         {
2235           if (count > 2)
2236             error_at (location, "%<long long long%> is too long for GCC");
2237           else 
2238             pedwarn_cxx98 (location, OPT_Wlong_long, 
2239                            "ISO C++ 1998 does not support %<long long%>");
2240         }
2241       else if (count > 1)
2242         {
2243           static const char *const decl_spec_names[] = {
2244             "signed",
2245             "unsigned",
2246             "short",
2247             "long",
2248             "const",
2249             "volatile",
2250             "restrict",
2251             "inline",
2252             "virtual",
2253             "explicit",
2254             "friend",
2255             "typedef",
2256             "constexpr",
2257             "__complex",
2258             "__thread"
2259           };
2260           error_at (location, "duplicate %qs", decl_spec_names[ds]);
2261         }
2262     }
2263 }
2264
2265 /* This function is called when a type is defined.  If type
2266    definitions are forbidden at this point, an error message is
2267    issued.  */
2268
2269 static bool
2270 cp_parser_check_type_definition (cp_parser* parser)
2271 {
2272   /* If types are forbidden here, issue a message.  */
2273   if (parser->type_definition_forbidden_message)
2274     {
2275       /* Don't use `%s' to print the string, because quotations (`%<', `%>')
2276          in the message need to be interpreted.  */
2277       error (parser->type_definition_forbidden_message);
2278       return false;
2279     }
2280   return true;
2281 }
2282
2283 /* This function is called when the DECLARATOR is processed.  The TYPE
2284    was a type defined in the decl-specifiers.  If it is invalid to
2285    define a type in the decl-specifiers for DECLARATOR, an error is
2286    issued. TYPE_LOCATION is the location of TYPE and is used
2287    for error reporting.  */
2288
2289 static void
2290 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2291                                                tree type, location_t type_location)
2292 {
2293   /* [dcl.fct] forbids type definitions in return types.
2294      Unfortunately, it's not easy to know whether or not we are
2295      processing a return type until after the fact.  */
2296   while (declarator
2297          && (declarator->kind == cdk_pointer
2298              || declarator->kind == cdk_reference
2299              || declarator->kind == cdk_ptrmem))
2300     declarator = declarator->declarator;
2301   if (declarator
2302       && declarator->kind == cdk_function)
2303     {
2304       error_at (type_location,
2305                 "new types may not be defined in a return type");
2306       inform (type_location, 
2307               "(perhaps a semicolon is missing after the definition of %qT)",
2308               type);
2309     }
2310 }
2311
2312 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2313    "<" in any valid C++ program.  If the next token is indeed "<",
2314    issue a message warning the user about what appears to be an
2315    invalid attempt to form a template-id. LOCATION is the location
2316    of the type-specifier (TYPE) */
2317
2318 static void
2319 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2320                                          tree type, location_t location)
2321 {
2322   cp_token_position start = 0;
2323
2324   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2325     {
2326       if (TYPE_P (type))
2327         error_at (location, "%qT is not a template", type);
2328       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2329         error_at (location, "%qE is not a template", type);
2330       else
2331         error_at (location, "invalid template-id");
2332       /* Remember the location of the invalid "<".  */
2333       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2334         start = cp_lexer_token_position (parser->lexer, true);
2335       /* Consume the "<".  */
2336       cp_lexer_consume_token (parser->lexer);
2337       /* Parse the template arguments.  */
2338       cp_parser_enclosed_template_argument_list (parser);
2339       /* Permanently remove the invalid template arguments so that
2340          this error message is not issued again.  */
2341       if (start)
2342         cp_lexer_purge_tokens_after (parser->lexer, start);
2343     }
2344 }
2345
2346 /* If parsing an integral constant-expression, issue an error message
2347    about the fact that THING appeared and return true.  Otherwise,
2348    return false.  In either case, set
2349    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2350
2351 static bool
2352 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2353                                             non_integral_constant thing)
2354 {
2355   parser->non_integral_constant_expression_p = true;
2356   if (parser->integral_constant_expression_p)
2357     {
2358       if (!parser->allow_non_integral_constant_expression_p)
2359         {
2360           const char *msg = NULL;
2361           switch (thing)
2362             {
2363               case NIC_FLOAT:
2364                 error ("floating-point literal "
2365                        "cannot appear in a constant-expression");
2366                 return true;
2367               case NIC_CAST:
2368                 error ("a cast to a type other than an integral or "
2369                        "enumeration type cannot appear in a "
2370                        "constant-expression");
2371                 return true;
2372               case NIC_TYPEID:
2373                 error ("%<typeid%> operator "
2374                        "cannot appear in a constant-expression");
2375                 return true;
2376               case NIC_NCC:
2377                 error ("non-constant compound literals "
2378                        "cannot appear in a constant-expression");
2379                 return true;
2380               case NIC_FUNC_CALL:
2381                 error ("a function call "
2382                        "cannot appear in a constant-expression");
2383                 return true;
2384               case NIC_INC:
2385                 error ("an increment "
2386                        "cannot appear in a constant-expression");
2387                 return true;
2388               case NIC_DEC:
2389                 error ("an decrement "
2390                        "cannot appear in a constant-expression");
2391                 return true;
2392               case NIC_ARRAY_REF:
2393                 error ("an array reference "
2394                        "cannot appear in a constant-expression");
2395                 return true;
2396               case NIC_ADDR_LABEL:
2397                 error ("the address of a label "
2398                        "cannot appear in a constant-expression");
2399                 return true;
2400               case NIC_OVERLOADED:
2401                 error ("calls to overloaded operators "
2402                        "cannot appear in a constant-expression");
2403                 return true;
2404               case NIC_ASSIGNMENT:
2405                 error ("an assignment cannot appear in a constant-expression");
2406                 return true;
2407               case NIC_COMMA:
2408                 error ("a comma operator "
2409                        "cannot appear in a constant-expression");
2410                 return true;
2411               case NIC_CONSTRUCTOR:
2412                 error ("a call to a constructor "
2413                        "cannot appear in a constant-expression");
2414                 return true;
2415               case NIC_THIS:
2416                 msg = "this";
2417                 break;
2418               case NIC_FUNC_NAME:
2419                 msg = "__FUNCTION__";
2420                 break;
2421               case NIC_PRETTY_FUNC:
2422                 msg = "__PRETTY_FUNCTION__";
2423                 break;
2424               case NIC_C99_FUNC:
2425                 msg = "__func__";
2426                 break;
2427               case NIC_VA_ARG:
2428                 msg = "va_arg";
2429                 break;
2430               case NIC_ARROW:
2431                 msg = "->";
2432                 break;
2433               case NIC_POINT:
2434                 msg = ".";
2435                 break;
2436               case NIC_STAR:
2437                 msg = "*";
2438                 break;
2439               case NIC_ADDR:
2440                 msg = "&";
2441                 break;
2442               case NIC_PREINCREMENT:
2443                 msg = "++";
2444                 break;
2445               case NIC_PREDECREMENT:
2446                 msg = "--";
2447                 break;
2448               case NIC_NEW:
2449                 msg = "new";
2450                 break;
2451               case NIC_DEL:
2452                 msg = "delete";
2453                 break;
2454               default:
2455                 gcc_unreachable ();
2456             }
2457           if (msg)
2458             error ("%qs cannot appear in a constant-expression", msg);
2459           return true;
2460         }
2461     }
2462   return false;
2463 }
2464
2465 /* Emit a diagnostic for an invalid type name.  SCOPE is the
2466    qualifying scope (or NULL, if none) for ID.  This function commits
2467    to the current active tentative parse, if any.  (Otherwise, the
2468    problematic construct might be encountered again later, resulting
2469    in duplicate error messages.) LOCATION is the location of ID.  */
2470
2471 static void
2472 cp_parser_diagnose_invalid_type_name (cp_parser *parser,
2473                                       tree scope, tree id,
2474                                       location_t location)
2475 {
2476   tree decl, old_scope;
2477   cp_parser_commit_to_tentative_parse (parser);
2478   /* Try to lookup the identifier.  */
2479   old_scope = parser->scope;
2480   parser->scope = scope;
2481   decl = cp_parser_lookup_name_simple (parser, id, location);
2482   parser->scope = old_scope;
2483   /* If the lookup found a template-name, it means that the user forgot
2484   to specify an argument list. Emit a useful error message.  */
2485   if (TREE_CODE (decl) == TEMPLATE_DECL)
2486     error_at (location,
2487               "invalid use of template-name %qE without an argument list",
2488               decl);
2489   else if (TREE_CODE (id) == BIT_NOT_EXPR)
2490     error_at (location, "invalid use of destructor %qD as a type", id);
2491   else if (TREE_CODE (decl) == TYPE_DECL)
2492     /* Something like 'unsigned A a;'  */
2493     error_at (location, "invalid combination of multiple type-specifiers");
2494   else if (!parser->scope)
2495     {
2496       /* Issue an error message.  */
2497       error_at (location, "%qE does not name a type", id);
2498       /* If we're in a template class, it's possible that the user was
2499          referring to a type from a base class.  For example:
2500
2501            template <typename T> struct A { typedef T X; };
2502            template <typename T> struct B : public A<T> { X x; };
2503
2504          The user should have said "typename A<T>::X".  */
2505       if (cxx_dialect < cxx0x && id == ridpointers[(int)RID_CONSTEXPR])
2506         inform (location, "C++0x %<constexpr%> only available with "
2507                 "-std=c++0x or -std=gnu++0x");
2508       else if (processing_template_decl && current_class_type
2509                && TYPE_BINFO (current_class_type))
2510         {
2511           tree b;
2512
2513           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2514                b;
2515                b = TREE_CHAIN (b))
2516             {
2517               tree base_type = BINFO_TYPE (b);
2518               if (CLASS_TYPE_P (base_type)
2519                   && dependent_type_p (base_type))
2520                 {
2521                   tree field;
2522                   /* Go from a particular instantiation of the
2523                      template (which will have an empty TYPE_FIELDs),
2524                      to the main version.  */
2525                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2526                   for (field = TYPE_FIELDS (base_type);
2527                        field;
2528                        field = DECL_CHAIN (field))
2529                     if (TREE_CODE (field) == TYPE_DECL
2530                         && DECL_NAME (field) == id)
2531                       {
2532                         inform (location, 
2533                                 "(perhaps %<typename %T::%E%> was intended)",
2534                                 BINFO_TYPE (b), id);
2535                         break;
2536                       }
2537                   if (field)
2538                     break;
2539                 }
2540             }
2541         }
2542     }
2543   /* Here we diagnose qualified-ids where the scope is actually correct,
2544      but the identifier does not resolve to a valid type name.  */
2545   else if (parser->scope != error_mark_node)
2546     {
2547       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2548         error_at (location, "%qE in namespace %qE does not name a type",
2549                   id, parser->scope);
2550       else if (CLASS_TYPE_P (parser->scope)
2551                && constructor_name_p (id, parser->scope))
2552         {
2553           /* A<T>::A<T>() */
2554           error_at (location, "%<%T::%E%> names the constructor, not"
2555                     " the type", parser->scope, id);
2556           if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2557             error_at (location, "and %qT has no template constructors",
2558                       parser->scope);
2559         }
2560       else if (TYPE_P (parser->scope)
2561                && dependent_scope_p (parser->scope))
2562         error_at (location, "need %<typename%> before %<%T::%E%> because "
2563                   "%qT is a dependent scope",
2564                   parser->scope, id, parser->scope);
2565       else if (TYPE_P (parser->scope))
2566         error_at (location, "%qE in %q#T does not name a type",
2567                   id, parser->scope);
2568       else
2569         gcc_unreachable ();
2570     }
2571 }
2572
2573 /* Check for a common situation where a type-name should be present,
2574    but is not, and issue a sensible error message.  Returns true if an
2575    invalid type-name was detected.
2576
2577    The situation handled by this function are variable declarations of the
2578    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2579    Usually, `ID' should name a type, but if we got here it means that it
2580    does not. We try to emit the best possible error message depending on
2581    how exactly the id-expression looks like.  */
2582
2583 static bool
2584 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2585 {
2586   tree id;
2587   cp_token *token = cp_lexer_peek_token (parser->lexer);
2588
2589   /* Avoid duplicate error about ambiguous lookup.  */
2590   if (token->type == CPP_NESTED_NAME_SPECIFIER)
2591     {
2592       cp_token *next = cp_lexer_peek_nth_token (parser->lexer, 2);
2593       if (next->type == CPP_NAME && next->ambiguous_p)
2594         goto out;
2595     }
2596
2597   cp_parser_parse_tentatively (parser);
2598   id = cp_parser_id_expression (parser,
2599                                 /*template_keyword_p=*/false,
2600                                 /*check_dependency_p=*/true,
2601                                 /*template_p=*/NULL,
2602                                 /*declarator_p=*/true,
2603                                 /*optional_p=*/false);
2604   /* If the next token is a (, this is a function with no explicit return
2605      type, i.e. constructor, destructor or conversion op.  */
2606   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
2607       || TREE_CODE (id) == TYPE_DECL)
2608     {
2609       cp_parser_abort_tentative_parse (parser);
2610       return false;
2611     }
2612   if (!cp_parser_parse_definitely (parser))
2613     return false;
2614
2615   /* Emit a diagnostic for the invalid type.  */
2616   cp_parser_diagnose_invalid_type_name (parser, parser->scope,
2617                                         id, token->location);
2618  out:
2619   /* If we aren't in the middle of a declarator (i.e. in a
2620      parameter-declaration-clause), skip to the end of the declaration;
2621      there's no point in trying to process it.  */
2622   if (!parser->in_declarator_p)
2623     cp_parser_skip_to_end_of_block_or_statement (parser);
2624   return true;
2625 }
2626
2627 /* Consume tokens up to, and including, the next non-nested closing `)'.
2628    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2629    are doing error recovery. Returns -1 if OR_COMMA is true and we
2630    found an unnested comma.  */
2631
2632 static int
2633 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2634                                        bool recovering,
2635                                        bool or_comma,
2636                                        bool consume_paren)
2637 {
2638   unsigned paren_depth = 0;
2639   unsigned brace_depth = 0;
2640   unsigned square_depth = 0;
2641
2642   if (recovering && !or_comma
2643       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2644     return 0;
2645
2646   while (true)
2647     {
2648       cp_token * token = cp_lexer_peek_token (parser->lexer);
2649
2650       switch (token->type)
2651         {
2652         case CPP_EOF:
2653         case CPP_PRAGMA_EOL:
2654           /* If we've run out of tokens, then there is no closing `)'.  */
2655           return 0;
2656
2657         /* This is good for lambda expression capture-lists.  */
2658         case CPP_OPEN_SQUARE:
2659           ++square_depth;
2660           break;
2661         case CPP_CLOSE_SQUARE:
2662           if (!square_depth--)
2663             return 0;
2664           break;
2665
2666         case CPP_SEMICOLON:
2667           /* This matches the processing in skip_to_end_of_statement.  */
2668           if (!brace_depth)
2669             return 0;
2670           break;
2671
2672         case CPP_OPEN_BRACE:
2673           ++brace_depth;
2674           break;
2675         case CPP_CLOSE_BRACE:
2676           if (!brace_depth--)
2677             return 0;
2678           break;
2679
2680         case CPP_COMMA:
2681           if (recovering && or_comma && !brace_depth && !paren_depth
2682               && !square_depth)
2683             return -1;
2684           break;
2685
2686         case CPP_OPEN_PAREN:
2687           if (!brace_depth)
2688             ++paren_depth;
2689           break;
2690
2691         case CPP_CLOSE_PAREN:
2692           if (!brace_depth && !paren_depth--)
2693             {
2694               if (consume_paren)
2695                 cp_lexer_consume_token (parser->lexer);
2696               return 1;
2697             }
2698           break;
2699
2700         default:
2701           break;
2702         }
2703
2704       /* Consume the token.  */
2705       cp_lexer_consume_token (parser->lexer);
2706     }
2707 }
2708
2709 /* Consume tokens until we reach the end of the current statement.
2710    Normally, that will be just before consuming a `;'.  However, if a
2711    non-nested `}' comes first, then we stop before consuming that.  */
2712
2713 static void
2714 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2715 {
2716   unsigned nesting_depth = 0;
2717
2718   while (true)
2719     {
2720       cp_token *token = cp_lexer_peek_token (parser->lexer);
2721
2722       switch (token->type)
2723         {
2724         case CPP_EOF:
2725         case CPP_PRAGMA_EOL:
2726           /* If we've run out of tokens, stop.  */
2727           return;
2728
2729         case CPP_SEMICOLON:
2730           /* If the next token is a `;', we have reached the end of the
2731              statement.  */
2732           if (!nesting_depth)
2733             return;
2734           break;
2735
2736         case CPP_CLOSE_BRACE:
2737           /* If this is a non-nested '}', stop before consuming it.
2738              That way, when confronted with something like:
2739
2740                { 3 + }
2741
2742              we stop before consuming the closing '}', even though we
2743              have not yet reached a `;'.  */
2744           if (nesting_depth == 0)
2745             return;
2746
2747           /* If it is the closing '}' for a block that we have
2748              scanned, stop -- but only after consuming the token.
2749              That way given:
2750
2751                 void f g () { ... }
2752                 typedef int I;
2753
2754              we will stop after the body of the erroneously declared
2755              function, but before consuming the following `typedef'
2756              declaration.  */
2757           if (--nesting_depth == 0)
2758             {
2759               cp_lexer_consume_token (parser->lexer);
2760               return;
2761             }
2762
2763         case CPP_OPEN_BRACE:
2764           ++nesting_depth;
2765           break;
2766
2767         default:
2768           break;
2769         }
2770
2771       /* Consume the token.  */
2772       cp_lexer_consume_token (parser->lexer);
2773     }
2774 }
2775
2776 /* This function is called at the end of a statement or declaration.
2777    If the next token is a semicolon, it is consumed; otherwise, error
2778    recovery is attempted.  */
2779
2780 static void
2781 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2782 {
2783   /* Look for the trailing `;'.  */
2784   if (!cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON))
2785     {
2786       /* If there is additional (erroneous) input, skip to the end of
2787          the statement.  */
2788       cp_parser_skip_to_end_of_statement (parser);
2789       /* If the next token is now a `;', consume it.  */
2790       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2791         cp_lexer_consume_token (parser->lexer);
2792     }
2793 }
2794
2795 /* Skip tokens until we have consumed an entire block, or until we
2796    have consumed a non-nested `;'.  */
2797
2798 static void
2799 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2800 {
2801   int nesting_depth = 0;
2802
2803   while (nesting_depth >= 0)
2804     {
2805       cp_token *token = cp_lexer_peek_token (parser->lexer);
2806
2807       switch (token->type)
2808         {
2809         case CPP_EOF:
2810         case CPP_PRAGMA_EOL:
2811           /* If we've run out of tokens, stop.  */
2812           return;
2813
2814         case CPP_SEMICOLON:
2815           /* Stop if this is an unnested ';'. */
2816           if (!nesting_depth)
2817             nesting_depth = -1;
2818           break;
2819
2820         case CPP_CLOSE_BRACE:
2821           /* Stop if this is an unnested '}', or closes the outermost
2822              nesting level.  */
2823           nesting_depth--;
2824           if (nesting_depth < 0)
2825             return;
2826           if (!nesting_depth)
2827             nesting_depth = -1;
2828           break;
2829
2830         case CPP_OPEN_BRACE:
2831           /* Nest. */
2832           nesting_depth++;
2833           break;
2834
2835         default:
2836           break;
2837         }
2838
2839       /* Consume the token.  */
2840       cp_lexer_consume_token (parser->lexer);
2841     }
2842 }
2843
2844 /* Skip tokens until a non-nested closing curly brace is the next
2845    token, or there are no more tokens. Return true in the first case,
2846    false otherwise.  */
2847
2848 static bool
2849 cp_parser_skip_to_closing_brace (cp_parser *parser)
2850 {
2851   unsigned nesting_depth = 0;
2852
2853   while (true)
2854     {
2855       cp_token *token = cp_lexer_peek_token (parser->lexer);
2856
2857       switch (token->type)
2858         {
2859         case CPP_EOF:
2860         case CPP_PRAGMA_EOL:
2861           /* If we've run out of tokens, stop.  */
2862           return false;
2863
2864         case CPP_CLOSE_BRACE:
2865           /* If the next token is a non-nested `}', then we have reached
2866              the end of the current block.  */
2867           if (nesting_depth-- == 0)
2868             return true;
2869           break;
2870
2871         case CPP_OPEN_BRACE:
2872           /* If it the next token is a `{', then we are entering a new
2873              block.  Consume the entire block.  */
2874           ++nesting_depth;
2875           break;
2876
2877         default:
2878           break;
2879         }
2880
2881       /* Consume the token.  */
2882       cp_lexer_consume_token (parser->lexer);
2883     }
2884 }
2885
2886 /* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
2887    parameter is the PRAGMA token, allowing us to purge the entire pragma
2888    sequence.  */
2889
2890 static void
2891 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
2892 {
2893   cp_token *token;
2894
2895   parser->lexer->in_pragma = false;
2896
2897   do
2898     token = cp_lexer_consume_token (parser->lexer);
2899   while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
2900
2901   /* Ensure that the pragma is not parsed again.  */
2902   cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
2903 }
2904
2905 /* Require pragma end of line, resyncing with it as necessary.  The
2906    arguments are as for cp_parser_skip_to_pragma_eol.  */
2907
2908 static void
2909 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
2910 {
2911   parser->lexer->in_pragma = false;
2912   if (!cp_parser_require (parser, CPP_PRAGMA_EOL, RT_PRAGMA_EOL))
2913     cp_parser_skip_to_pragma_eol (parser, pragma_tok);
2914 }
2915
2916 /* This is a simple wrapper around make_typename_type. When the id is
2917    an unresolved identifier node, we can provide a superior diagnostic
2918    using cp_parser_diagnose_invalid_type_name.  */
2919
2920 static tree
2921 cp_parser_make_typename_type (cp_parser *parser, tree scope,
2922                               tree id, location_t id_location)
2923 {
2924   tree result;
2925   if (TREE_CODE (id) == IDENTIFIER_NODE)
2926     {
2927       result = make_typename_type (scope, id, typename_type,
2928                                    /*complain=*/tf_none);
2929       if (result == error_mark_node)
2930         cp_parser_diagnose_invalid_type_name (parser, scope, id, id_location);
2931       return result;
2932     }
2933   return make_typename_type (scope, id, typename_type, tf_error);
2934 }
2935
2936 /* This is a wrapper around the
2937    make_{pointer,ptrmem,reference}_declarator functions that decides
2938    which one to call based on the CODE and CLASS_TYPE arguments. The
2939    CODE argument should be one of the values returned by
2940    cp_parser_ptr_operator. */
2941 static cp_declarator *
2942 cp_parser_make_indirect_declarator (enum tree_code code, tree class_type,
2943                                     cp_cv_quals cv_qualifiers,
2944                                     cp_declarator *target)
2945 {
2946   if (code == ERROR_MARK)
2947     return cp_error_declarator;
2948
2949   if (code == INDIRECT_REF)
2950     if (class_type == NULL_TREE)
2951       return make_pointer_declarator (cv_qualifiers, target);
2952     else
2953       return make_ptrmem_declarator (cv_qualifiers, class_type, target);
2954   else if (code == ADDR_EXPR && class_type == NULL_TREE)
2955     return make_reference_declarator (cv_qualifiers, target, false);
2956   else if (code == NON_LVALUE_EXPR && class_type == NULL_TREE)
2957     return make_reference_declarator (cv_qualifiers, target, true);
2958   gcc_unreachable ();
2959 }
2960
2961 /* Create a new C++ parser.  */
2962
2963 static cp_parser *
2964 cp_parser_new (void)
2965 {
2966   cp_parser *parser;
2967   cp_lexer *lexer;
2968   unsigned i;
2969
2970   /* cp_lexer_new_main is called before doing GC allocation because
2971      cp_lexer_new_main might load a PCH file.  */
2972   lexer = cp_lexer_new_main ();
2973
2974   /* Initialize the binops_by_token so that we can get the tree
2975      directly from the token.  */
2976   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2977     binops_by_token[binops[i].token_type] = binops[i];
2978
2979   parser = ggc_alloc_cleared_cp_parser ();
2980   parser->lexer = lexer;
2981   parser->context = cp_parser_context_new (NULL);
2982
2983   /* For now, we always accept GNU extensions.  */
2984   parser->allow_gnu_extensions_p = 1;
2985
2986   /* The `>' token is a greater-than operator, not the end of a
2987      template-id.  */
2988   parser->greater_than_is_operator_p = true;
2989
2990   parser->default_arg_ok_p = true;
2991
2992   /* We are not parsing a constant-expression.  */
2993   parser->integral_constant_expression_p = false;
2994   parser->allow_non_integral_constant_expression_p = false;
2995   parser->non_integral_constant_expression_p = false;
2996
2997   /* Local variable names are not forbidden.  */
2998   parser->local_variables_forbidden_p = false;
2999
3000   /* We are not processing an `extern "C"' declaration.  */
3001   parser->in_unbraced_linkage_specification_p = false;
3002
3003   /* We are not processing a declarator.  */
3004   parser->in_declarator_p = false;
3005
3006   /* We are not processing a template-argument-list.  */
3007   parser->in_template_argument_list_p = false;
3008
3009   /* We are not in an iteration statement.  */
3010   parser->in_statement = 0;
3011
3012   /* We are not in a switch statement.  */
3013   parser->in_switch_statement_p = false;
3014
3015   /* We are not parsing a type-id inside an expression.  */
3016   parser->in_type_id_in_expr_p = false;
3017
3018   /* Declarations aren't implicitly extern "C".  */
3019   parser->implicit_extern_c = false;
3020
3021   /* String literals should be translated to the execution character set.  */
3022   parser->translate_strings_p = true;
3023
3024   /* We are not parsing a function body.  */
3025   parser->in_function_body = false;
3026
3027   /* We can correct until told otherwise.  */
3028   parser->colon_corrects_to_scope_p = true;
3029
3030   /* The unparsed function queue is empty.  */
3031   push_unparsed_function_queues (parser);
3032
3033   /* There are no classes being defined.  */
3034   parser->num_classes_being_defined = 0;
3035
3036   /* No template parameters apply.  */
3037   parser->num_template_parameter_lists = 0;
3038
3039   return parser;
3040 }
3041
3042 /* Create a cp_lexer structure which will emit the tokens in CACHE
3043    and push it onto the parser's lexer stack.  This is used for delayed
3044    parsing of in-class method bodies and default arguments, and should
3045    not be confused with tentative parsing.  */
3046 static void
3047 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
3048 {
3049   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
3050   lexer->next = parser->lexer;
3051   parser->lexer = lexer;
3052
3053   /* Move the current source position to that of the first token in the
3054      new lexer.  */
3055   cp_lexer_set_source_position_from_token (lexer->next_token);
3056 }
3057
3058 /* Pop the top lexer off the parser stack.  This is never used for the
3059    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
3060 static void
3061 cp_parser_pop_lexer (cp_parser *parser)
3062 {
3063   cp_lexer *lexer = parser->lexer;
3064   parser->lexer = lexer->next;
3065   cp_lexer_destroy (lexer);
3066
3067   /* Put the current source position back where it was before this
3068      lexer was pushed.  */
3069   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
3070 }
3071
3072 /* Lexical conventions [gram.lex]  */
3073
3074 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
3075    identifier.  */
3076
3077 static tree
3078 cp_parser_identifier (cp_parser* parser)
3079 {
3080   cp_token *token;
3081
3082   /* Look for the identifier.  */
3083   token = cp_parser_require (parser, CPP_NAME, RT_NAME);
3084   /* Return the value.  */
3085   return token ? token->u.value : error_mark_node;
3086 }
3087
3088 /* Parse a sequence of adjacent string constants.  Returns a
3089    TREE_STRING representing the combined, nul-terminated string
3090    constant.  If TRANSLATE is true, translate the string to the
3091    execution character set.  If WIDE_OK is true, a wide string is
3092    invalid here.
3093
3094    C++98 [lex.string] says that if a narrow string literal token is
3095    adjacent to a wide string literal token, the behavior is undefined.
3096    However, C99 6.4.5p4 says that this results in a wide string literal.
3097    We follow C99 here, for consistency with the C front end.
3098
3099    This code is largely lifted from lex_string() in c-lex.c.
3100
3101    FUTURE: ObjC++ will need to handle @-strings here.  */
3102 static tree
3103 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
3104 {
3105   tree value;
3106   size_t count;
3107   struct obstack str_ob;
3108   cpp_string str, istr, *strs;
3109   cp_token *tok;
3110   enum cpp_ttype type;
3111
3112   tok = cp_lexer_peek_token (parser->lexer);
3113   if (!cp_parser_is_string_literal (tok))
3114     {
3115       cp_parser_error (parser, "expected string-literal");
3116       return error_mark_node;
3117     }
3118
3119   type = tok->type;
3120
3121   /* Try to avoid the overhead of creating and destroying an obstack
3122      for the common case of just one string.  */
3123   if (!cp_parser_is_string_literal
3124       (cp_lexer_peek_nth_token (parser->lexer, 2)))
3125     {
3126       cp_lexer_consume_token (parser->lexer);
3127
3128       str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
3129       str.len = TREE_STRING_LENGTH (tok->u.value);
3130       count = 1;
3131
3132       strs = &str;
3133     }
3134   else
3135     {
3136       gcc_obstack_init (&str_ob);
3137       count = 0;
3138
3139       do
3140         {
3141           cp_lexer_consume_token (parser->lexer);
3142           count++;
3143           str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
3144           str.len = TREE_STRING_LENGTH (tok->u.value);
3145
3146           if (type != tok->type)
3147             {
3148               if (type == CPP_STRING)
3149                 type = tok->type;
3150               else if (tok->type != CPP_STRING)
3151                 error_at (tok->location,
3152                           "unsupported non-standard concatenation "
3153                           "of string literals");
3154             }
3155
3156           obstack_grow (&str_ob, &str, sizeof (cpp_string));
3157
3158           tok = cp_lexer_peek_token (parser->lexer);
3159         }
3160       while (cp_parser_is_string_literal (tok));
3161
3162       strs = (cpp_string *) obstack_finish (&str_ob);
3163     }
3164
3165   if (type != CPP_STRING && !wide_ok)
3166     {
3167       cp_parser_error (parser, "a wide string is invalid in this context");
3168       type = CPP_STRING;
3169     }
3170
3171   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
3172       (parse_in, strs, count, &istr, type))
3173     {
3174       value = build_string (istr.len, (const char *)istr.text);
3175       free (CONST_CAST (unsigned char *, istr.text));
3176
3177       switch (type)
3178         {
3179         default:
3180         case CPP_STRING:
3181         case CPP_UTF8STRING:
3182           TREE_TYPE (value) = char_array_type_node;
3183           break;
3184         case CPP_STRING16:
3185           TREE_TYPE (value) = char16_array_type_node;
3186           break;
3187         case CPP_STRING32:
3188           TREE_TYPE (value) = char32_array_type_node;
3189           break;
3190         case CPP_WSTRING:
3191           TREE_TYPE (value) = wchar_array_type_node;
3192           break;
3193         }
3194
3195       value = fix_string_type (value);
3196     }
3197   else
3198     /* cpp_interpret_string has issued an error.  */
3199     value = error_mark_node;
3200
3201   if (count > 1)
3202     obstack_free (&str_ob, 0);
3203
3204   return value;
3205 }
3206
3207
3208 /* Basic concepts [gram.basic]  */
3209
3210 /* Parse a translation-unit.
3211
3212    translation-unit:
3213      declaration-seq [opt]
3214
3215    Returns TRUE if all went well.  */
3216
3217 static bool
3218 cp_parser_translation_unit (cp_parser* parser)
3219 {
3220   /* The address of the first non-permanent object on the declarator
3221      obstack.  */
3222   static void *declarator_obstack_base;
3223
3224   bool success;
3225
3226   /* Create the declarator obstack, if necessary.  */
3227   if (!cp_error_declarator)
3228     {
3229       gcc_obstack_init (&declarator_obstack);
3230       /* Create the error declarator.  */
3231       cp_error_declarator = make_declarator (cdk_error);
3232       /* Create the empty parameter list.  */
3233       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
3234       /* Remember where the base of the declarator obstack lies.  */
3235       declarator_obstack_base = obstack_next_free (&declarator_obstack);
3236     }
3237
3238   cp_parser_declaration_seq_opt (parser);
3239
3240   /* If there are no tokens left then all went well.  */
3241   if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
3242     {
3243       /* Get rid of the token array; we don't need it any more.  */
3244       cp_lexer_destroy (parser->lexer);
3245       parser->lexer = NULL;
3246
3247       /* This file might have been a context that's implicitly extern
3248          "C".  If so, pop the lang context.  (Only relevant for PCH.) */
3249       if (parser->implicit_extern_c)
3250         {
3251           pop_lang_context ();
3252           parser->implicit_extern_c = false;
3253         }
3254
3255       /* Finish up.  */
3256       finish_translation_unit ();
3257
3258       success = true;
3259     }
3260   else
3261     {
3262       cp_parser_error (parser, "expected declaration");
3263       success = false;
3264     }
3265
3266   /* Make sure the declarator obstack was fully cleaned up.  */
3267   gcc_assert (obstack_next_free (&declarator_obstack)
3268               == declarator_obstack_base);
3269
3270   /* All went well.  */
3271   return success;
3272 }
3273
3274 /* Expressions [gram.expr] */
3275
3276 /* Parse a primary-expression.
3277
3278    primary-expression:
3279      literal
3280      this
3281      ( expression )
3282      id-expression
3283
3284    GNU Extensions:
3285
3286    primary-expression:
3287      ( compound-statement )
3288      __builtin_va_arg ( assignment-expression , type-id )
3289      __builtin_offsetof ( type-id , offsetof-expression )
3290
3291    C++ Extensions:
3292      __has_nothrow_assign ( type-id )   
3293      __has_nothrow_constructor ( type-id )
3294      __has_nothrow_copy ( type-id )
3295      __has_trivial_assign ( type-id )   
3296      __has_trivial_constructor ( type-id )
3297      __has_trivial_copy ( type-id )
3298      __has_trivial_destructor ( type-id )
3299      __has_virtual_destructor ( type-id )     
3300      __is_abstract ( type-id )
3301      __is_base_of ( type-id , type-id )
3302      __is_class ( type-id )
3303      __is_convertible_to ( type-id , type-id )     
3304      __is_empty ( type-id )
3305      __is_enum ( type-id )
3306      __is_literal_type ( type-id )
3307      __is_pod ( type-id )
3308      __is_polymorphic ( type-id )
3309      __is_std_layout ( type-id )
3310      __is_trivial ( type-id )
3311      __is_union ( type-id )
3312
3313    Objective-C++ Extension:
3314
3315    primary-expression:
3316      objc-expression
3317
3318    literal:
3319      __null
3320
3321    ADDRESS_P is true iff this expression was immediately preceded by
3322    "&" and therefore might denote a pointer-to-member.  CAST_P is true
3323    iff this expression is the target of a cast.  TEMPLATE_ARG_P is
3324    true iff this expression is a template argument.
3325
3326    Returns a representation of the expression.  Upon return, *IDK
3327    indicates what kind of id-expression (if any) was present.  */
3328
3329 static tree
3330 cp_parser_primary_expression (cp_parser *parser,
3331                               bool address_p,
3332                               bool cast_p,
3333                               bool template_arg_p,
3334                               cp_id_kind *idk)
3335 {
3336   cp_token *token = NULL;
3337
3338   /* Assume the primary expression is not an id-expression.  */
3339   *idk = CP_ID_KIND_NONE;
3340
3341   /* Peek at the next token.  */
3342   token = cp_lexer_peek_token (parser->lexer);
3343   switch (token->type)
3344     {
3345       /* literal:
3346            integer-literal
3347            character-literal
3348            floating-literal
3349            string-literal
3350            boolean-literal  */
3351     case CPP_CHAR:
3352     case CPP_CHAR16:
3353     case CPP_CHAR32:
3354     case CPP_WCHAR:
3355     case CPP_NUMBER:
3356       token = cp_lexer_consume_token (parser->lexer);
3357       if (TREE_CODE (token->u.value) == FIXED_CST)
3358         {
3359           error_at (token->location,
3360                     "fixed-point types not supported in C++");
3361           return error_mark_node;
3362         }
3363       /* Floating-point literals are only allowed in an integral
3364          constant expression if they are cast to an integral or
3365          enumeration type.  */
3366       if (TREE_CODE (token->u.value) == REAL_CST
3367           && parser->integral_constant_expression_p
3368           && pedantic)
3369         {
3370           /* CAST_P will be set even in invalid code like "int(2.7 +
3371              ...)".   Therefore, we have to check that the next token
3372              is sure to end the cast.  */
3373           if (cast_p)
3374             {
3375               cp_token *next_token;
3376
3377               next_token = cp_lexer_peek_token (parser->lexer);
3378               if (/* The comma at the end of an
3379                      enumerator-definition.  */
3380                   next_token->type != CPP_COMMA
3381                   /* The curly brace at the end of an enum-specifier.  */
3382                   && next_token->type != CPP_CLOSE_BRACE
3383                   /* The end of a statement.  */
3384                   && next_token->type != CPP_SEMICOLON
3385                   /* The end of the cast-expression.  */
3386                   && next_token->type != CPP_CLOSE_PAREN
3387                   /* The end of an array bound.  */
3388                   && next_token->type != CPP_CLOSE_SQUARE
3389                   /* The closing ">" in a template-argument-list.  */
3390                   && (next_token->type != CPP_GREATER
3391                       || parser->greater_than_is_operator_p)
3392                   /* C++0x only: A ">>" treated like two ">" tokens,
3393                      in a template-argument-list.  */
3394                   && (next_token->type != CPP_RSHIFT
3395                       || (cxx_dialect == cxx98)
3396                       || parser->greater_than_is_operator_p))
3397                 cast_p = false;
3398             }
3399
3400           /* If we are within a cast, then the constraint that the
3401              cast is to an integral or enumeration type will be
3402              checked at that point.  If we are not within a cast, then
3403              this code is invalid.  */
3404           if (!cast_p)
3405             cp_parser_non_integral_constant_expression (parser, NIC_FLOAT);
3406         }
3407       return token->u.value;
3408
3409     case CPP_STRING:
3410     case CPP_STRING16:
3411     case CPP_STRING32:
3412     case CPP_WSTRING:
3413     case CPP_UTF8STRING:
3414       /* ??? Should wide strings be allowed when parser->translate_strings_p
3415          is false (i.e. in attributes)?  If not, we can kill the third
3416          argument to cp_parser_string_literal.  */
3417       return cp_parser_string_literal (parser,
3418                                        parser->translate_strings_p,
3419                                        true);
3420
3421     case CPP_OPEN_PAREN:
3422       {
3423         tree expr;
3424         bool saved_greater_than_is_operator_p;
3425
3426         /* Consume the `('.  */
3427         cp_lexer_consume_token (parser->lexer);
3428         /* Within a parenthesized expression, a `>' token is always
3429            the greater-than operator.  */
3430         saved_greater_than_is_operator_p
3431           = parser->greater_than_is_operator_p;
3432         parser->greater_than_is_operator_p = true;
3433         /* If we see `( { ' then we are looking at the beginning of
3434            a GNU statement-expression.  */
3435         if (cp_parser_allow_gnu_extensions_p (parser)
3436             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
3437           {
3438             /* Statement-expressions are not allowed by the standard.  */
3439             pedwarn (token->location, OPT_pedantic, 
3440                      "ISO C++ forbids braced-groups within expressions");
3441
3442             /* And they're not allowed outside of a function-body; you
3443                cannot, for example, write:
3444
3445                  int i = ({ int j = 3; j + 1; });
3446
3447                at class or namespace scope.  */
3448             if (!parser->in_function_body
3449                 || parser->in_template_argument_list_p)
3450               {
3451                 error_at (token->location,
3452                           "statement-expressions are not allowed outside "
3453                           "functions nor in template-argument lists");
3454                 cp_parser_skip_to_end_of_block_or_statement (parser);
3455                 expr = error_mark_node;
3456               }
3457             else
3458               {
3459                 /* Start the statement-expression.  */
3460                 expr = begin_stmt_expr ();
3461                 /* Parse the compound-statement.  */
3462                 cp_parser_compound_statement (parser, expr, false, false);
3463                 /* Finish up.  */
3464                 expr = finish_stmt_expr (expr, false);
3465               }
3466           }
3467         else
3468           {
3469             /* Parse the parenthesized expression.  */
3470             expr = cp_parser_expression (parser, cast_p, idk);
3471             /* Let the front end know that this expression was
3472                enclosed in parentheses. This matters in case, for
3473                example, the expression is of the form `A::B', since
3474                `&A::B' might be a pointer-to-member, but `&(A::B)' is
3475                not.  */
3476             finish_parenthesized_expr (expr);
3477             /* DR 705: Wrapping an unqualified name in parentheses
3478                suppresses arg-dependent lookup.  We want to pass back
3479                CP_ID_KIND_QUALIFIED for suppressing vtable lookup
3480                (c++/37862), but none of the others.  */
3481             if (*idk != CP_ID_KIND_QUALIFIED)
3482               *idk = CP_ID_KIND_NONE;
3483           }
3484         /* The `>' token might be the end of a template-id or
3485            template-parameter-list now.  */
3486         parser->greater_than_is_operator_p
3487           = saved_greater_than_is_operator_p;
3488         /* Consume the `)'.  */
3489         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
3490           cp_parser_skip_to_end_of_statement (parser);
3491
3492         return expr;
3493       }
3494
3495     case CPP_OPEN_SQUARE:
3496       if (c_dialect_objc ())
3497         /* We have an Objective-C++ message. */
3498         return cp_parser_objc_expression (parser);
3499       {
3500         tree lam = cp_parser_lambda_expression (parser);
3501         /* Don't warn about a failed tentative parse.  */
3502         if (cp_parser_error_occurred (parser))
3503           return error_mark_node;
3504         maybe_warn_cpp0x (CPP0X_LAMBDA_EXPR);
3505         return lam;
3506       }
3507
3508     case CPP_OBJC_STRING:
3509       if (c_dialect_objc ())
3510         /* We have an Objective-C++ string literal. */
3511         return cp_parser_objc_expression (parser);
3512       cp_parser_error (parser, "expected primary-expression");
3513       return error_mark_node;
3514
3515     case CPP_KEYWORD:
3516       switch (token->keyword)
3517         {
3518           /* These two are the boolean literals.  */
3519         case RID_TRUE:
3520           cp_lexer_consume_token (parser->lexer);
3521           return boolean_true_node;
3522         case RID_FALSE:
3523           cp_lexer_consume_token (parser->lexer);
3524           return boolean_false_node;
3525
3526           /* The `__null' literal.  */
3527         case RID_NULL:
3528           cp_lexer_consume_token (parser->lexer);
3529           return null_node;
3530
3531           /* The `nullptr' literal.  */
3532         case RID_NULLPTR:
3533           cp_lexer_consume_token (parser->lexer);
3534           return nullptr_node;
3535
3536           /* Recognize the `this' keyword.  */
3537         case RID_THIS:
3538           cp_lexer_consume_token (parser->lexer);
3539           if (parser->local_variables_forbidden_p)
3540             {
3541               error_at (token->location,
3542                         "%<this%> may not be used in this context");
3543               return error_mark_node;
3544             }
3545           /* Pointers cannot appear in constant-expressions.  */
3546           if (cp_parser_non_integral_constant_expression (parser, NIC_THIS))
3547             return error_mark_node;
3548           return finish_this_expr ();
3549
3550           /* The `operator' keyword can be the beginning of an
3551              id-expression.  */
3552         case RID_OPERATOR:
3553           goto id_expression;
3554
3555         case RID_FUNCTION_NAME:
3556         case RID_PRETTY_FUNCTION_NAME:
3557         case RID_C99_FUNCTION_NAME:
3558           {
3559             non_integral_constant name;
3560
3561             /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
3562                __func__ are the names of variables -- but they are
3563                treated specially.  Therefore, they are handled here,
3564                rather than relying on the generic id-expression logic
3565                below.  Grammatically, these names are id-expressions.
3566
3567                Consume the token.  */
3568             token = cp_lexer_consume_token (parser->lexer);
3569
3570             switch (token->keyword)
3571               {
3572               case RID_FUNCTION_NAME:
3573                 name = NIC_FUNC_NAME;
3574                 break;
3575               case RID_PRETTY_FUNCTION_NAME:
3576                 name = NIC_PRETTY_FUNC;
3577                 break;
3578               case RID_C99_FUNCTION_NAME:
3579                 name = NIC_C99_FUNC;
3580                 break;
3581               default:
3582                 gcc_unreachable ();
3583               }
3584
3585             if (cp_parser_non_integral_constant_expression (parser, name))
3586               return error_mark_node;
3587
3588             /* Look up the name.  */
3589             return finish_fname (token->u.value);
3590           }
3591
3592         case RID_VA_ARG:
3593           {
3594             tree expression;
3595             tree type;
3596
3597             /* The `__builtin_va_arg' construct is used to handle
3598                `va_arg'.  Consume the `__builtin_va_arg' token.  */
3599             cp_lexer_consume_token (parser->lexer);
3600             /* Look for the opening `('.  */
3601             cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
3602             /* Now, parse the assignment-expression.  */
3603             expression = cp_parser_assignment_expression (parser,
3604                                                           /*cast_p=*/false, NULL);
3605             /* Look for the `,'.  */
3606             cp_parser_require (parser, CPP_COMMA, RT_COMMA);
3607             /* Parse the type-id.  */
3608             type = cp_parser_type_id (parser);
3609             /* Look for the closing `)'.  */
3610             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
3611             /* Using `va_arg' in a constant-expression is not
3612                allowed.  */
3613             if (cp_parser_non_integral_constant_expression (parser,
3614                                                             NIC_VA_ARG))
3615               return error_mark_node;
3616             return build_x_va_arg (expression, type);
3617           }
3618
3619         case RID_OFFSETOF:
3620           return cp_parser_builtin_offsetof (parser);
3621
3622         case RID_HAS_NOTHROW_ASSIGN:
3623         case RID_HAS_NOTHROW_CONSTRUCTOR:
3624         case RID_HAS_NOTHROW_COPY:        
3625         case RID_HAS_TRIVIAL_ASSIGN:
3626         case RID_HAS_TRIVIAL_CONSTRUCTOR:
3627         case RID_HAS_TRIVIAL_COPY:        
3628         case RID_HAS_TRIVIAL_DESTRUCTOR:
3629         case RID_HAS_VIRTUAL_DESTRUCTOR:
3630         case RID_IS_ABSTRACT:
3631         case RID_IS_BASE_OF:
3632         case RID_IS_CLASS:
3633         case RID_IS_CONVERTIBLE_TO:
3634         case RID_IS_EMPTY:
3635         case RID_IS_ENUM:
3636         case RID_IS_LITERAL_TYPE:
3637         case RID_IS_POD:
3638         case RID_IS_POLYMORPHIC:
3639         case RID_IS_STD_LAYOUT:
3640         case RID_IS_TRIVIAL:
3641         case RID_IS_UNION:
3642           return cp_parser_trait_expr (parser, token->keyword);
3643
3644         /* Objective-C++ expressions.  */
3645         case RID_AT_ENCODE:
3646         case RID_AT_PROTOCOL:
3647         case RID_AT_SELECTOR:
3648           return cp_parser_objc_expression (parser);
3649
3650         case RID_TEMPLATE:
3651           if (parser->in_function_body
3652               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3653                   == CPP_LESS))
3654             {
3655               error_at (token->location,
3656                         "a template declaration cannot appear at block scope");
3657               cp_parser_skip_to_end_of_block_or_statement (parser);
3658               return error_mark_node;
3659             }
3660         default:
3661           cp_parser_error (parser, "expected primary-expression");
3662           return error_mark_node;
3663         }
3664
3665       /* An id-expression can start with either an identifier, a
3666          `::' as the beginning of a qualified-id, or the "operator"
3667          keyword.  */
3668     case CPP_NAME:
3669     case CPP_SCOPE:
3670     case CPP_TEMPLATE_ID:
3671     case CPP_NESTED_NAME_SPECIFIER:
3672       {
3673         tree id_expression;
3674         tree decl;
3675         const char *error_msg;
3676         bool template_p;
3677         bool done;
3678         cp_token *id_expr_token;
3679
3680       id_expression:
3681         /* Parse the id-expression.  */
3682         id_expression
3683           = cp_parser_id_expression (parser,
3684                                      /*template_keyword_p=*/false,
3685                                      /*check_dependency_p=*/true,
3686                                      &template_p,
3687                                      /*declarator_p=*/false,
3688                                      /*optional_p=*/false);
3689         if (id_expression == error_mark_node)
3690           return error_mark_node;
3691         id_expr_token = token;
3692         token = cp_lexer_peek_token (parser->lexer);
3693         done = (token->type != CPP_OPEN_SQUARE
3694                 && token->type != CPP_OPEN_PAREN
3695                 && token->type != CPP_DOT
3696                 && token->type != CPP_DEREF
3697                 && token->type != CPP_PLUS_PLUS
3698                 && token->type != CPP_MINUS_MINUS);
3699         /* If we have a template-id, then no further lookup is
3700            required.  If the template-id was for a template-class, we
3701            will sometimes have a TYPE_DECL at this point.  */
3702         if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
3703                  || TREE_CODE (id_expression) == TYPE_DECL)
3704           decl = id_expression;
3705         /* Look up the name.  */
3706         else
3707           {
3708             tree ambiguous_decls;
3709
3710             /* If we already know that this lookup is ambiguous, then
3711                we've already issued an error message; there's no reason
3712                to check again.  */
3713             if (id_expr_token->type == CPP_NAME
3714                 && id_expr_token->ambiguous_p)
3715               {
3716                 cp_parser_simulate_error (parser);
3717                 return error_mark_node;
3718               }
3719
3720             decl = cp_parser_lookup_name (parser, id_expression,
3721                                           none_type,
3722                                           template_p,
3723                                           /*is_namespace=*/false,
3724                                           /*check_dependency=*/true,
3725                                           &ambiguous_decls,
3726                                           id_expr_token->location);
3727             /* If the lookup was ambiguous, an error will already have
3728                been issued.  */
3729             if (ambiguous_decls)
3730               return error_mark_node;
3731
3732             /* In Objective-C++, we may have an Objective-C 2.0
3733                dot-syntax for classes here.  */
3734             if (c_dialect_objc ()
3735                 && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT
3736                 && TREE_CODE (decl) == TYPE_DECL
3737                 && objc_is_class_name (decl))
3738               {
3739                 tree component;
3740                 cp_lexer_consume_token (parser->lexer);
3741                 component = cp_parser_identifier (parser);
3742                 if (component == error_mark_node)
3743                   return error_mark_node;
3744
3745                 return objc_build_class_component_ref (id_expression, component);
3746               }
3747
3748             /* In Objective-C++, an instance variable (ivar) may be preferred
3749                to whatever cp_parser_lookup_name() found.  */
3750             decl = objc_lookup_ivar (decl, id_expression);
3751
3752             /* If name lookup gives us a SCOPE_REF, then the
3753                qualifying scope was dependent.  */
3754             if (TREE_CODE (decl) == SCOPE_REF)
3755               {
3756                 /* At this point, we do not know if DECL is a valid
3757                    integral constant expression.  We assume that it is
3758                    in fact such an expression, so that code like:
3759
3760                       template <int N> struct A {
3761                         int a[B<N>::i];
3762                       };
3763                      
3764                    is accepted.  At template-instantiation time, we
3765                    will check that B<N>::i is actually a constant.  */
3766                 return decl;
3767               }
3768             /* Check to see if DECL is a local variable in a context
3769                where that is forbidden.  */
3770             if (parser->local_variables_forbidden_p
3771                 && local_variable_p (decl))
3772               {
3773                 /* It might be that we only found DECL because we are
3774                    trying to be generous with pre-ISO scoping rules.
3775                    For example, consider:
3776
3777                      int i;
3778                      void g() {
3779                        for (int i = 0; i < 10; ++i) {}
3780                        extern void f(int j = i);
3781                      }
3782
3783                    Here, name look up will originally find the out
3784                    of scope `i'.  We need to issue a warning message,
3785                    but then use the global `i'.  */
3786                 decl = check_for_out_of_scope_variable (decl);
3787                 if (local_variable_p (decl))
3788                   {
3789                     error_at (id_expr_token->location,
3790                               "local variable %qD may not appear in this context",
3791                               decl);
3792                     return error_mark_node;
3793                   }
3794               }
3795           }
3796
3797         decl = (finish_id_expression
3798                 (id_expression, decl, parser->scope,
3799                  idk,
3800                  parser->integral_constant_expression_p,
3801                  parser->allow_non_integral_constant_expression_p,
3802                  &parser->non_integral_constant_expression_p,
3803                  template_p, done, address_p,
3804                  template_arg_p,
3805                  &error_msg,
3806                  id_expr_token->location));
3807         if (error_msg)
3808           cp_parser_error (parser, error_msg);
3809         return decl;
3810       }
3811
3812       /* Anything else is an error.  */
3813     default:
3814       cp_parser_error (parser, "expected primary-expression");
3815       return error_mark_node;
3816     }
3817 }
3818
3819 /* Parse an id-expression.
3820
3821    id-expression:
3822      unqualified-id
3823      qualified-id
3824
3825    qualified-id:
3826      :: [opt] nested-name-specifier template [opt] unqualified-id
3827      :: identifier
3828      :: operator-function-id
3829      :: template-id
3830
3831    Return a representation of the unqualified portion of the
3832    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
3833    a `::' or nested-name-specifier.
3834
3835    Often, if the id-expression was a qualified-id, the caller will
3836    want to make a SCOPE_REF to represent the qualified-id.  This
3837    function does not do this in order to avoid wastefully creating
3838    SCOPE_REFs when they are not required.
3839
3840    If TEMPLATE_KEYWORD_P is true, then we have just seen the
3841    `template' keyword.
3842
3843    If CHECK_DEPENDENCY_P is false, then names are looked up inside
3844    uninstantiated templates.
3845
3846    If *TEMPLATE_P is non-NULL, it is set to true iff the
3847    `template' keyword is used to explicitly indicate that the entity
3848    named is a template.
3849
3850    If DECLARATOR_P is true, the id-expression is appearing as part of
3851    a declarator, rather than as part of an expression.  */
3852
3853 static tree
3854 cp_parser_id_expression (cp_parser *parser,
3855                          bool template_keyword_p,
3856                          bool check_dependency_p,
3857                          bool *template_p,
3858                          bool declarator_p,
3859                          bool optional_p)
3860 {
3861   bool global_scope_p;
3862   bool nested_name_specifier_p;
3863
3864   /* Assume the `template' keyword was not used.  */
3865   if (template_p)
3866     *template_p = template_keyword_p;
3867
3868   /* Look for the optional `::' operator.  */
3869   global_scope_p
3870     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3871        != NULL_TREE);
3872   /* Look for the optional nested-name-specifier.  */
3873   nested_name_specifier_p
3874     = (cp_parser_nested_name_specifier_opt (parser,
3875                                             /*typename_keyword_p=*/false,
3876                                             check_dependency_p,
3877                                             /*type_p=*/false,
3878                                             declarator_p)
3879        != NULL_TREE);
3880   /* If there is a nested-name-specifier, then we are looking at
3881      the first qualified-id production.  */
3882   if (nested_name_specifier_p)
3883     {
3884       tree saved_scope;
3885       tree saved_object_scope;
3886       tree saved_qualifying_scope;
3887       tree unqualified_id;
3888       bool is_template;
3889
3890       /* See if the next token is the `template' keyword.  */
3891       if (!template_p)
3892         template_p = &is_template;
3893       *template_p = cp_parser_optional_template_keyword (parser);
3894       /* Name lookup we do during the processing of the
3895          unqualified-id might obliterate SCOPE.  */
3896       saved_scope = parser->scope;
3897       saved_object_scope = parser->object_scope;
3898       saved_qualifying_scope = parser->qualifying_scope;
3899       /* Process the final unqualified-id.  */
3900       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3901                                                  check_dependency_p,
3902                                                  declarator_p,
3903                                                  /*optional_p=*/false);
3904       /* Restore the SAVED_SCOPE for our caller.  */
3905       parser->scope = saved_scope;
3906       parser->object_scope = saved_object_scope;
3907       parser->qualifying_scope = saved_qualifying_scope;
3908
3909       return unqualified_id;
3910     }
3911   /* Otherwise, if we are in global scope, then we are looking at one
3912      of the other qualified-id productions.  */
3913   else if (global_scope_p)
3914     {
3915       cp_token *token;
3916       tree id;
3917
3918       /* Peek at the next token.  */
3919       token = cp_lexer_peek_token (parser->lexer);
3920
3921       /* If it's an identifier, and the next token is not a "<", then
3922          we can avoid the template-id case.  This is an optimization
3923          for this common case.  */
3924       if (token->type == CPP_NAME
3925           && !cp_parser_nth_token_starts_template_argument_list_p
3926                (parser, 2))
3927         return cp_parser_identifier (parser);
3928
3929       cp_parser_parse_tentatively (parser);
3930       /* Try a template-id.  */
3931       id = cp_parser_template_id (parser,
3932                                   /*template_keyword_p=*/false,
3933                                   /*check_dependency_p=*/true,
3934                                   declarator_p);
3935       /* If that worked, we're done.  */
3936       if (cp_parser_parse_definitely (parser))
3937         return id;
3938
3939       /* Peek at the next token.  (Changes in the token buffer may
3940          have invalidated the pointer obtained above.)  */
3941       token = cp_lexer_peek_token (parser->lexer);
3942
3943       switch (token->type)
3944         {
3945         case CPP_NAME:
3946           return cp_parser_identifier (parser);
3947
3948         case CPP_KEYWORD:
3949           if (token->keyword == RID_OPERATOR)
3950             return cp_parser_operator_function_id (parser);
3951           /* Fall through.  */
3952
3953         default:
3954           cp_parser_error (parser, "expected id-expression");
3955           return error_mark_node;
3956         }
3957     }
3958   else
3959     return cp_parser_unqualified_id (parser, template_keyword_p,
3960                                      /*check_dependency_p=*/true,
3961                                      declarator_p,
3962                                      optional_p);
3963 }
3964
3965 /* Parse an unqualified-id.
3966
3967    unqualified-id:
3968      identifier
3969      operator-function-id
3970      conversion-function-id
3971      ~ class-name
3972      template-id
3973
3974    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3975    keyword, in a construct like `A::template ...'.
3976
3977    Returns a representation of unqualified-id.  For the `identifier'
3978    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3979    production a BIT_NOT_EXPR is returned; the operand of the
3980    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3981    other productions, see the documentation accompanying the
3982    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3983    names are looked up in uninstantiated templates.  If DECLARATOR_P
3984    is true, the unqualified-id is appearing as part of a declarator,
3985    rather than as part of an expression.  */
3986
3987 static tree
3988 cp_parser_unqualified_id (cp_parser* parser,
3989                           bool template_keyword_p,
3990                           bool check_dependency_p,
3991                           bool declarator_p,
3992                           bool optional_p)
3993 {
3994   cp_token *token;
3995
3996   /* Peek at the next token.  */
3997   token = cp_lexer_peek_token (parser->lexer);
3998
3999   switch (token->type)
4000     {
4001     case CPP_NAME:
4002       {
4003         tree id;
4004
4005         /* We don't know yet whether or not this will be a
4006            template-id.  */
4007         cp_parser_parse_tentatively (parser);
4008         /* Try a template-id.  */
4009         id = cp_parser_template_id (parser, template_keyword_p,
4010                                     check_dependency_p,
4011                                     declarator_p);
4012         /* If it worked, we're done.  */
4013         if (cp_parser_parse_definitely (parser))
4014           return id;
4015         /* Otherwise, it's an ordinary identifier.  */
4016         return cp_parser_identifier (parser);
4017       }
4018
4019     case CPP_TEMPLATE_ID:
4020       return cp_parser_template_id (parser, template_keyword_p,
4021                                     check_dependency_p,
4022                                     declarator_p);
4023
4024     case CPP_COMPL:
4025       {
4026         tree type_decl;
4027         tree qualifying_scope;
4028         tree object_scope;
4029         tree scope;
4030         bool done;
4031
4032         /* Consume the `~' token.  */
4033         cp_lexer_consume_token (parser->lexer);
4034         /* Parse the class-name.  The standard, as written, seems to
4035            say that:
4036
4037              template <typename T> struct S { ~S (); };
4038              template <typename T> S<T>::~S() {}
4039
4040            is invalid, since `~' must be followed by a class-name, but
4041            `S<T>' is dependent, and so not known to be a class.
4042            That's not right; we need to look in uninstantiated
4043            templates.  A further complication arises from:
4044
4045              template <typename T> void f(T t) {
4046                t.T::~T();
4047              }
4048
4049            Here, it is not possible to look up `T' in the scope of `T'
4050            itself.  We must look in both the current scope, and the
4051            scope of the containing complete expression.
4052
4053            Yet another issue is:
4054
4055              struct S {
4056                int S;
4057                ~S();
4058              };
4059
4060              S::~S() {}
4061
4062            The standard does not seem to say that the `S' in `~S'
4063            should refer to the type `S' and not the data member
4064            `S::S'.  */
4065
4066         /* DR 244 says that we look up the name after the "~" in the
4067            same scope as we looked up the qualifying name.  That idea
4068            isn't fully worked out; it's more complicated than that.  */
4069         scope = parser->scope;
4070         object_scope = parser->object_scope;
4071         qualifying_scope = parser->qualifying_scope;
4072
4073         /* Check for invalid scopes.  */
4074         if (scope == error_mark_node)
4075           {
4076             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
4077               cp_lexer_consume_token (parser->lexer);
4078             return error_mark_node;
4079           }
4080         if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
4081           {
4082             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
4083               error_at (token->location,
4084                         "scope %qT before %<~%> is not a class-name",
4085                         scope);
4086             cp_parser_simulate_error (parser);
4087             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
4088               cp_lexer_consume_token (parser->lexer);
4089             return error_mark_node;
4090           }
4091         gcc_assert (!scope || TYPE_P (scope));
4092
4093         /* If the name is of the form "X::~X" it's OK even if X is a
4094            typedef.  */
4095         token = cp_lexer_peek_token (parser->lexer);
4096         if (scope
4097             && token->type == CPP_NAME
4098             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4099                 != CPP_LESS)
4100             && (token->u.value == TYPE_IDENTIFIER (scope)
4101                 || (CLASS_TYPE_P (scope)
4102                     && constructor_name_p (token->u.value, scope))))
4103           {
4104             cp_lexer_consume_token (parser->lexer);
4105             return build_nt (BIT_NOT_EXPR, scope);
4106           }
4107
4108         /* If there was an explicit qualification (S::~T), first look
4109            in the scope given by the qualification (i.e., S).
4110
4111            Note: in the calls to cp_parser_class_name below we pass
4112            typename_type so that lookup finds the injected-class-name
4113            rather than the constructor.  */
4114         done = false;
4115         type_decl = NULL_TREE;
4116         if (scope)
4117           {
4118             cp_parser_parse_tentatively (parser);
4119             type_decl = cp_parser_class_name (parser,
4120                                               /*typename_keyword_p=*/false,
4121                                               /*template_keyword_p=*/false,
4122                                               typename_type,
4123                                               /*check_dependency=*/false,
4124                                               /*class_head_p=*/false,
4125                                               declarator_p);
4126             if (cp_parser_parse_definitely (parser))
4127               done = true;
4128           }
4129         /* In "N::S::~S", look in "N" as well.  */
4130         if (!done && scope && qualifying_scope)
4131           {
4132             cp_parser_parse_tentatively (parser);
4133             parser->scope = qualifying_scope;
4134             parser->object_scope = NULL_TREE;
4135             parser->qualifying_scope = NULL_TREE;
4136             type_decl
4137               = cp_parser_class_name (parser,
4138                                       /*typename_keyword_p=*/false,
4139                                       /*template_keyword_p=*/false,
4140                                       typename_type,
4141                                       /*check_dependency=*/false,
4142                                       /*class_head_p=*/false,
4143                                       declarator_p);
4144             if (cp_parser_parse_definitely (parser))
4145               done = true;
4146           }
4147         /* In "p->S::~T", look in the scope given by "*p" as well.  */
4148         else if (!done && object_scope)
4149           {
4150             cp_parser_parse_tentatively (parser);
4151             parser->scope = object_scope;
4152             parser->object_scope = NULL_TREE;
4153             parser->qualifying_scope = NULL_TREE;
4154             type_decl
4155               = cp_parser_class_name (parser,
4156                                       /*typename_keyword_p=*/false,
4157                                       /*template_keyword_p=*/false,
4158                                       typename_type,
4159                                       /*check_dependency=*/false,
4160                                       /*class_head_p=*/false,
4161                                       declarator_p);
4162             if (cp_parser_parse_definitely (parser))
4163               done = true;
4164           }
4165         /* Look in the surrounding context.  */
4166         if (!done)
4167           {
4168             parser->scope = NULL_TREE;
4169             parser->object_scope = NULL_TREE;
4170             parser->qualifying_scope = NULL_TREE;
4171             if (processing_template_decl)
4172               cp_parser_parse_tentatively (parser);
4173             type_decl
4174               = cp_parser_class_name (parser,
4175                                       /*typename_keyword_p=*/false,
4176                                       /*template_keyword_p=*/false,
4177                                       typename_type,
4178                                       /*check_dependency=*/false,
4179                                       /*class_head_p=*/false,
4180                                       declarator_p);
4181             if (processing_template_decl
4182                 && ! cp_parser_parse_definitely (parser))
4183               {
4184                 /* We couldn't find a type with this name, so just accept
4185                    it and check for a match at instantiation time.  */
4186                 type_decl = cp_parser_identifier (parser);
4187                 if (type_decl != error_mark_node)
4188                   type_decl = build_nt (BIT_NOT_EXPR, type_decl);
4189                 return type_decl;
4190               }
4191           }
4192         /* If an error occurred, assume that the name of the
4193            destructor is the same as the name of the qualifying
4194            class.  That allows us to keep parsing after running
4195            into ill-formed destructor names.  */
4196         if (type_decl == error_mark_node && scope)
4197           return build_nt (BIT_NOT_EXPR, scope);
4198         else if (type_decl == error_mark_node)
4199           return error_mark_node;
4200
4201         /* Check that destructor name and scope match.  */
4202         if (declarator_p && scope && !check_dtor_name (scope, type_decl))
4203           {
4204             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
4205               error_at (token->location,
4206                         "declaration of %<~%T%> as member of %qT",
4207                         type_decl, scope);
4208             cp_parser_simulate_error (parser);
4209             return error_mark_node;
4210           }
4211
4212         /* [class.dtor]
4213
4214            A typedef-name that names a class shall not be used as the
4215            identifier in the declarator for a destructor declaration.  */
4216         if (declarator_p
4217             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
4218             && !DECL_SELF_REFERENCE_P (type_decl)
4219             && !cp_parser_uncommitted_to_tentative_parse_p (parser))
4220           error_at (token->location,
4221                     "typedef-name %qD used as destructor declarator",
4222                     type_decl);
4223
4224         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
4225       }
4226
4227     case CPP_KEYWORD:
4228       if (token->keyword == RID_OPERATOR)
4229         {
4230           tree id;
4231
4232           /* This could be a template-id, so we try that first.  */
4233           cp_parser_parse_tentatively (parser);
4234           /* Try a template-id.  */
4235           id = cp_parser_template_id (parser, template_keyword_p,
4236                                       /*check_dependency_p=*/true,
4237                                       declarator_p);
4238           /* If that worked, we're done.  */
4239           if (cp_parser_parse_definitely (parser))
4240             return id;
4241           /* We still don't know whether we're looking at an
4242              operator-function-id or a conversion-function-id.  */
4243           cp_parser_parse_tentatively (parser);
4244           /* Try an operator-function-id.  */
4245           id = cp_parser_operator_function_id (parser);
4246           /* If that didn't work, try a conversion-function-id.  */
4247           if (!cp_parser_parse_definitely (parser))
4248             id = cp_parser_conversion_function_id (parser);
4249
4250           return id;
4251         }
4252       /* Fall through.  */
4253
4254     default:
4255       if (optional_p)
4256         return NULL_TREE;
4257       cp_parser_error (parser, "expected unqualified-id");
4258       return error_mark_node;
4259     }
4260 }
4261
4262 /* Parse an (optional) nested-name-specifier.
4263
4264    nested-name-specifier: [C++98]
4265      class-or-namespace-name :: nested-name-specifier [opt]
4266      class-or-namespace-name :: template nested-name-specifier [opt]
4267
4268    nested-name-specifier: [C++0x]
4269      type-name ::
4270      namespace-name ::
4271      nested-name-specifier identifier ::
4272      nested-name-specifier template [opt] simple-template-id ::
4273
4274    PARSER->SCOPE should be set appropriately before this function is
4275    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
4276    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
4277    in name lookups.
4278
4279    Sets PARSER->SCOPE to the class (TYPE) or namespace
4280    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
4281    it unchanged if there is no nested-name-specifier.  Returns the new
4282    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
4283
4284    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
4285    part of a declaration and/or decl-specifier.  */
4286
4287 static tree
4288 cp_parser_nested_name_specifier_opt (cp_parser *parser,
4289                                      bool typename_keyword_p,
4290                                      bool check_dependency_p,
4291                                      bool type_p,
4292                                      bool is_declaration)
4293 {
4294   bool success = false;
4295   cp_token_position start = 0;
4296   cp_token *token;
4297
4298   /* Remember where the nested-name-specifier starts.  */
4299   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4300     {
4301       start = cp_lexer_token_position (parser->lexer, false);
4302       push_deferring_access_checks (dk_deferred);
4303     }
4304
4305   while (true)
4306     {
4307       tree new_scope;
4308       tree old_scope;
4309       tree saved_qualifying_scope;
4310       bool template_keyword_p;
4311
4312       /* Spot cases that cannot be the beginning of a
4313          nested-name-specifier.  */
4314       token = cp_lexer_peek_token (parser->lexer);
4315
4316       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
4317          the already parsed nested-name-specifier.  */
4318       if (token->type == CPP_NESTED_NAME_SPECIFIER)
4319         {
4320           /* Grab the nested-name-specifier and continue the loop.  */
4321           cp_parser_pre_parsed_nested_name_specifier (parser);
4322           /* If we originally encountered this nested-name-specifier
4323              with IS_DECLARATION set to false, we will not have
4324              resolved TYPENAME_TYPEs, so we must do so here.  */
4325           if (is_declaration
4326               && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4327             {
4328               new_scope = resolve_typename_type (parser->scope,
4329                                                  /*only_current_p=*/false);
4330               if (TREE_CODE (new_scope) != TYPENAME_TYPE)
4331                 parser->scope = new_scope;
4332             }
4333           success = true;
4334           continue;
4335         }
4336
4337       /* Spot cases that cannot be the beginning of a
4338          nested-name-specifier.  On the second and subsequent times
4339          through the loop, we look for the `template' keyword.  */
4340       if (success && token->keyword == RID_TEMPLATE)
4341         ;
4342       /* A template-id can start a nested-name-specifier.  */
4343       else if (token->type == CPP_TEMPLATE_ID)
4344         ;
4345       /* DR 743: decltype can be used in a nested-name-specifier.  */
4346       else if (token_is_decltype (token))
4347         ;
4348       else
4349         {
4350           /* If the next token is not an identifier, then it is
4351              definitely not a type-name or namespace-name.  */
4352           if (token->type != CPP_NAME)
4353             break;
4354           /* If the following token is neither a `<' (to begin a
4355              template-id), nor a `::', then we are not looking at a
4356              nested-name-specifier.  */
4357           token = cp_lexer_peek_nth_token (parser->lexer, 2);
4358
4359           if (token->type == CPP_COLON
4360               && parser->colon_corrects_to_scope_p
4361               && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_NAME)
4362             {
4363               error_at (token->location,
4364                         "found %<:%> in nested-name-specifier, expected %<::%>");
4365               token->type = CPP_SCOPE;
4366             }
4367
4368           if (token->type != CPP_SCOPE
4369               && !cp_parser_nth_token_starts_template_argument_list_p
4370                   (parser, 2))
4371             break;
4372         }
4373
4374       /* The nested-name-specifier is optional, so we parse
4375          tentatively.  */
4376       cp_parser_parse_tentatively (parser);
4377
4378       /* Look for the optional `template' keyword, if this isn't the
4379          first time through the loop.  */
4380       if (success)
4381         template_keyword_p = cp_parser_optional_template_keyword (parser);
4382       else
4383         template_keyword_p = false;
4384
4385       /* Save the old scope since the name lookup we are about to do
4386          might destroy it.  */
4387       old_scope = parser->scope;
4388       saved_qualifying_scope = parser->qualifying_scope;
4389       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
4390          look up names in "X<T>::I" in order to determine that "Y" is
4391          a template.  So, if we have a typename at this point, we make
4392          an effort to look through it.  */
4393       if (is_declaration
4394           && !typename_keyword_p
4395           && parser->scope
4396           && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4397         parser->scope = resolve_typename_type (parser->scope,
4398                                                /*only_current_p=*/false);
4399       /* Parse the qualifying entity.  */
4400       new_scope
4401         = cp_parser_qualifying_entity (parser,
4402                                        typename_keyword_p,
4403                                        template_keyword_p,
4404                                        check_dependency_p,
4405                                        type_p,
4406                                        is_declaration);
4407       /* Look for the `::' token.  */
4408       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
4409
4410       /* If we found what we wanted, we keep going; otherwise, we're
4411          done.  */
4412       if (!cp_parser_parse_definitely (parser))
4413         {
4414           bool error_p = false;
4415
4416           /* Restore the OLD_SCOPE since it was valid before the
4417              failed attempt at finding the last
4418              class-or-namespace-name.  */
4419           parser->scope = old_scope;
4420           parser->qualifying_scope = saved_qualifying_scope;
4421
4422           /* If the next token is a decltype, and the one after that is a
4423              `::', then the decltype has failed to resolve to a class or
4424              enumeration type.  Give this error even when parsing
4425              tentatively since it can't possibly be valid--and we're going
4426              to replace it with a CPP_NESTED_NAME_SPECIFIER below, so we
4427              won't get another chance.*/
4428           if (cp_lexer_next_token_is (parser->lexer, CPP_DECLTYPE)
4429               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4430                   == CPP_SCOPE))
4431             {
4432               token = cp_lexer_consume_token (parser->lexer);
4433               error_at (token->location, "decltype evaluates to %qT, "
4434                         "which is not a class or enumeration type",
4435                         token->u.value);
4436               parser->scope = error_mark_node;
4437               error_p = true;
4438               /* As below.  */
4439               success = true;
4440               cp_lexer_consume_token (parser->lexer);
4441             }
4442
4443           if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4444             break;
4445           /* If the next token is an identifier, and the one after
4446              that is a `::', then any valid interpretation would have
4447              found a class-or-namespace-name.  */
4448           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
4449                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4450                      == CPP_SCOPE)
4451                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
4452                      != CPP_COMPL))
4453             {
4454               token = cp_lexer_consume_token (parser->lexer);
4455               if (!error_p)
4456                 {
4457                   if (!token->ambiguous_p)
4458                     {
4459                       tree decl;
4460                       tree ambiguous_decls;
4461
4462                       decl = cp_parser_lookup_name (parser, token->u.value,
4463                                                     none_type,
4464                                                     /*is_template=*/false,
4465                                                     /*is_namespace=*/false,
4466                                                     /*check_dependency=*/true,
4467                                                     &ambiguous_decls,
4468                                                     token->location);
4469                       if (TREE_CODE (decl) == TEMPLATE_DECL)
4470                         error_at (token->location,
4471                                   "%qD used without template parameters",
4472                                   decl);
4473                       else if (ambiguous_decls)
4474                         {
4475                           error_at (token->location,
4476                                     "reference to %qD is ambiguous",
4477                                     token->u.value);
4478                           print_candidates (ambiguous_decls);
4479                           decl = error_mark_node;
4480                         }
4481                       else
4482                         {
4483                           if (cxx_dialect != cxx98)
4484                             cp_parser_name_lookup_error
4485                             (parser, token->u.value, decl, NLE_NOT_CXX98,
4486                              token->location);
4487                           else
4488                             cp_parser_name_lookup_error
4489                             (parser, token->u.value, decl, NLE_CXX98,
4490                              token->location);
4491                         }
4492                     }
4493                   parser->scope = error_mark_node;
4494                   error_p = true;
4495                   /* Treat this as a successful nested-name-specifier
4496                      due to:
4497
4498                      [basic.lookup.qual]
4499
4500                      If the name found is not a class-name (clause
4501                      _class_) or namespace-name (_namespace.def_), the
4502                      program is ill-formed.  */
4503                   success = true;
4504                 }
4505               cp_lexer_consume_token (parser->lexer);
4506             }
4507           break;
4508         }
4509       /* We've found one valid nested-name-specifier.  */
4510       success = true;
4511       /* Name lookup always gives us a DECL.  */
4512       if (TREE_CODE (new_scope) == TYPE_DECL)
4513         new_scope = TREE_TYPE (new_scope);
4514       /* Uses of "template" must be followed by actual templates.  */
4515       if (template_keyword_p
4516           && !(CLASS_TYPE_P (new_scope)
4517                && ((CLASSTYPE_USE_TEMPLATE (new_scope)
4518                     && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
4519                    || CLASSTYPE_IS_TEMPLATE (new_scope)))
4520           && !(TREE_CODE (new_scope) == TYPENAME_TYPE
4521                && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
4522                    == TEMPLATE_ID_EXPR)))
4523         permerror (input_location, TYPE_P (new_scope)
4524                    ? "%qT is not a template"
4525                    : "%qD is not a template",
4526                    new_scope);
4527       /* If it is a class scope, try to complete it; we are about to
4528          be looking up names inside the class.  */
4529       if (TYPE_P (new_scope)
4530           /* Since checking types for dependency can be expensive,
4531              avoid doing it if the type is already complete.  */
4532           && !COMPLETE_TYPE_P (new_scope)
4533           /* Do not try to complete dependent types.  */
4534           && !dependent_type_p (new_scope))
4535         {
4536           new_scope = complete_type (new_scope);
4537           /* If it is a typedef to current class, use the current
4538              class instead, as the typedef won't have any names inside
4539              it yet.  */
4540           if (!COMPLETE_TYPE_P (new_scope)
4541               && currently_open_class (new_scope))
4542             new_scope = TYPE_MAIN_VARIANT (new_scope);
4543         }
4544       /* Make sure we look in the right scope the next time through
4545          the loop.  */
4546       parser->scope = new_scope;
4547     }
4548
4549   /* If parsing tentatively, replace the sequence of tokens that makes
4550      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
4551      token.  That way, should we re-parse the token stream, we will
4552      not have to repeat the effort required to do the parse, nor will
4553      we issue duplicate error messages.  */
4554   if (success && start)
4555     {
4556       cp_token *token;
4557
4558       token = cp_lexer_token_at (parser->lexer, start);
4559       /* Reset the contents of the START token.  */
4560       token->type = CPP_NESTED_NAME_SPECIFIER;
4561       /* Retrieve any deferred checks.  Do not pop this access checks yet
4562          so the memory will not be reclaimed during token replacing below.  */
4563       token->u.tree_check_value = ggc_alloc_cleared_tree_check ();
4564       token->u.tree_check_value->value = parser->scope;
4565       token->u.tree_check_value->checks = get_deferred_access_checks ();
4566       token->u.tree_check_value->qualifying_scope =
4567         parser->qualifying_scope;
4568       token->keyword = RID_MAX;
4569
4570       /* Purge all subsequent tokens.  */
4571       cp_lexer_purge_tokens_after (parser->lexer, start);
4572     }
4573
4574   if (start)
4575     pop_to_parent_deferring_access_checks ();
4576
4577   return success ? parser->scope : NULL_TREE;
4578 }
4579
4580 /* Parse a nested-name-specifier.  See
4581    cp_parser_nested_name_specifier_opt for details.  This function
4582    behaves identically, except that it will an issue an error if no
4583    nested-name-specifier is present.  */
4584
4585 static tree
4586 cp_parser_nested_name_specifier (cp_parser *parser,
4587                                  bool typename_keyword_p,
4588                                  bool check_dependency_p,
4589                                  bool type_p,
4590                                  bool is_declaration)
4591 {
4592   tree scope;
4593
4594   /* Look for the nested-name-specifier.  */
4595   scope = cp_parser_nested_name_specifier_opt (parser,
4596                                                typename_keyword_p,
4597                                                check_dependency_p,
4598                                                type_p,
4599                                                is_declaration);
4600   /* If it was not present, issue an error message.  */
4601   if (!scope)
4602     {
4603       cp_parser_error (parser, "expected nested-name-specifier");
4604       parser->scope = NULL_TREE;
4605     }
4606
4607   return scope;
4608 }
4609
4610 /* Parse the qualifying entity in a nested-name-specifier. For C++98,
4611    this is either a class-name or a namespace-name (which corresponds
4612    to the class-or-namespace-name production in the grammar). For
4613    C++0x, it can also be a type-name that refers to an enumeration
4614    type.
4615
4616    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
4617    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
4618    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
4619    TYPE_P is TRUE iff the next name should be taken as a class-name,
4620    even the same name is declared to be another entity in the same
4621    scope.
4622
4623    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
4624    specified by the class-or-namespace-name.  If neither is found the
4625    ERROR_MARK_NODE is returned.  */
4626
4627 static tree
4628 cp_parser_qualifying_entity (cp_parser *parser,
4629                              bool typename_keyword_p,
4630                              bool template_keyword_p,
4631                              bool check_dependency_p,
4632                              bool type_p,
4633                              bool is_declaration)
4634 {
4635   tree saved_scope;
4636   tree saved_qualifying_scope;
4637   tree saved_object_scope;
4638   tree scope;
4639   bool only_class_p;
4640   bool successful_parse_p;
4641
4642   /* DR 743: decltype can appear in a nested-name-specifier.  */
4643   if (cp_lexer_next_token_is_decltype (parser->lexer))
4644     {
4645       scope = cp_parser_decltype (parser);
4646       if (TREE_CODE (scope) != ENUMERAL_TYPE
4647           && !MAYBE_CLASS_TYPE_P (scope))
4648         {
4649           cp_parser_simulate_error (parser);
4650           return error_mark_node;
4651         }
4652       if (TYPE_NAME (scope))
4653         scope = TYPE_NAME (scope);
4654       return scope;
4655     }
4656
4657   /* Before we try to parse the class-name, we must save away the
4658      current PARSER->SCOPE since cp_parser_class_name will destroy
4659      it.  */
4660   saved_scope = parser->scope;
4661   saved_qualifying_scope = parser->qualifying_scope;
4662   saved_object_scope = parser->object_scope;
4663   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
4664      there is no need to look for a namespace-name.  */
4665   only_class_p = template_keyword_p 
4666     || (saved_scope && TYPE_P (saved_scope) && cxx_dialect == cxx98);
4667   if (!only_class_p)
4668     cp_parser_parse_tentatively (parser);
4669   scope = cp_parser_class_name (parser,
4670                                 typename_keyword_p,
4671                                 template_keyword_p,
4672                                 type_p ? class_type : none_type,
4673                                 check_dependency_p,
4674                                 /*class_head_p=*/false,
4675                                 is_declaration);
4676   successful_parse_p = only_class_p || cp_parser_parse_definitely (parser);
4677   /* If that didn't work and we're in C++0x mode, try for a type-name.  */
4678   if (!only_class_p 
4679       && cxx_dialect != cxx98
4680       && !successful_parse_p)
4681     {
4682       /* Restore the saved scope.  */
4683       parser->scope = saved_scope;
4684       parser->qualifying_scope = saved_qualifying_scope;
4685       parser->object_scope = saved_object_scope;
4686
4687       /* Parse tentatively.  */
4688       cp_parser_parse_tentatively (parser);
4689      
4690       /* Parse a typedef-name or enum-name.  */
4691       scope = cp_parser_nonclass_name (parser);
4692
4693       /* "If the name found does not designate a namespace or a class,
4694          enumeration, or dependent type, the program is ill-formed."
4695
4696          We cover classes and dependent types above and namespaces below,
4697          so this code is only looking for enums.  */
4698       if (!scope || TREE_CODE (scope) != TYPE_DECL
4699           || TREE_CODE (TREE_TYPE (scope)) != ENUMERAL_TYPE)
4700         cp_parser_simulate_error (parser);
4701
4702       successful_parse_p = cp_parser_parse_definitely (parser);
4703     }
4704   /* If that didn't work, try for a namespace-name.  */
4705   if (!only_class_p && !successful_parse_p)
4706     {
4707       /* Restore the saved scope.  */
4708       parser->scope = saved_scope;
4709       parser->qualifying_scope = saved_qualifying_scope;
4710       parser->object_scope = saved_object_scope;
4711       /* If we are not looking at an identifier followed by the scope
4712          resolution operator, then this is not part of a
4713          nested-name-specifier.  (Note that this function is only used
4714          to parse the components of a nested-name-specifier.)  */
4715       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
4716           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
4717         return error_mark_node;
4718       scope = cp_parser_namespace_name (parser);
4719     }
4720
4721   return scope;
4722 }
4723
4724 /* Parse a postfix-expression.
4725
4726    postfix-expression:
4727      primary-expression
4728      postfix-expression [ expression ]
4729      postfix-expression ( expression-list [opt] )
4730      simple-type-specifier ( expression-list [opt] )
4731      typename :: [opt] nested-name-specifier identifier
4732        ( expression-list [opt] )
4733      typename :: [opt] nested-name-specifier template [opt] template-id
4734        ( expression-list [opt] )
4735      postfix-expression . template [opt] id-expression
4736      postfix-expression -> template [opt] id-expression
4737      postfix-expression . pseudo-destructor-name
4738      postfix-expression -> pseudo-destructor-name
4739      postfix-expression ++
4740      postfix-expression --
4741      dynamic_cast < type-id > ( expression )
4742      static_cast < type-id > ( expression )
4743      reinterpret_cast < type-id > ( expression )
4744      const_cast < type-id > ( expression )
4745      typeid ( expression )
4746      typeid ( type-id )
4747
4748    GNU Extension:
4749
4750    postfix-expression:
4751      ( type-id ) { initializer-list , [opt] }
4752
4753    This extension is a GNU version of the C99 compound-literal
4754    construct.  (The C99 grammar uses `type-name' instead of `type-id',
4755    but they are essentially the same concept.)
4756
4757    If ADDRESS_P is true, the postfix expression is the operand of the
4758    `&' operator.  CAST_P is true if this expression is the target of a
4759    cast.
4760
4761    If MEMBER_ACCESS_ONLY_P, we only allow postfix expressions that are
4762    class member access expressions [expr.ref].
4763
4764    Returns a representation of the expression.  */
4765
4766 static tree
4767 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
4768                               bool member_access_only_p,
4769                               cp_id_kind * pidk_return)
4770 {
4771   cp_token *token;
4772   enum rid keyword;
4773   cp_id_kind idk = CP_ID_KIND_NONE;
4774   tree postfix_expression = NULL_TREE;
4775   bool is_member_access = false;
4776
4777   /* Peek at the next token.  */
4778   token = cp_lexer_peek_token (parser->lexer);
4779   /* Some of the productions are determined by keywords.  */
4780   keyword = token->keyword;
4781   switch (keyword)
4782     {
4783     case RID_DYNCAST:
4784     case RID_STATCAST:
4785     case RID_REINTCAST:
4786     case RID_CONSTCAST:
4787       {
4788         tree type;
4789         tree expression;
4790         const char *saved_message;
4791
4792         /* All of these can be handled in the same way from the point
4793            of view of parsing.  Begin by consuming the token
4794            identifying the cast.  */
4795         cp_lexer_consume_token (parser->lexer);
4796
4797         /* New types cannot be defined in the cast.  */
4798         saved_message = parser->type_definition_forbidden_message;
4799         parser->type_definition_forbidden_message
4800           = G_("types may not be defined in casts");
4801
4802         /* Look for the opening `<'.  */
4803         cp_parser_require (parser, CPP_LESS, RT_LESS);
4804         /* Parse the type to which we are casting.  */
4805         type = cp_parser_type_id (parser);
4806         /* Look for the closing `>'.  */
4807         cp_parser_require (parser, CPP_GREATER, RT_GREATER);
4808         /* Restore the old message.  */
4809         parser->type_definition_forbidden_message = saved_message;
4810
4811         /* And the expression which is being cast.  */
4812         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
4813         expression = cp_parser_expression (parser, /*cast_p=*/true, & idk);
4814         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
4815
4816         /* Only type conversions to integral or enumeration types
4817            can be used in constant-expressions.  */
4818         if (!cast_valid_in_integral_constant_expression_p (type)
4819             && cp_parser_non_integral_constant_expression (parser, NIC_CAST))
4820           return error_mark_node;
4821
4822         switch (keyword)
4823           {
4824           case RID_DYNCAST:
4825             postfix_expression
4826               = build_dynamic_cast (type, expression, tf_warning_or_error);
4827             break;
4828           case RID_STATCAST:
4829             postfix_expression
4830               = build_static_cast (type, expression, tf_warning_or_error);
4831             break;
4832           case RID_REINTCAST:
4833             postfix_expression
4834               = build_reinterpret_cast (type, expression, 
4835                                         tf_warning_or_error);
4836             break;
4837           case RID_CONSTCAST:
4838             postfix_expression
4839               = build_const_cast (type, expression, tf_warning_or_error);
4840             break;
4841           default:
4842             gcc_unreachable ();
4843           }
4844       }
4845       break;
4846
4847     case RID_TYPEID:
4848       {
4849         tree type;
4850         const char *saved_message;
4851         bool saved_in_type_id_in_expr_p;
4852
4853         /* Consume the `typeid' token.  */
4854         cp_lexer_consume_token (parser->lexer);
4855         /* Look for the `(' token.  */
4856         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
4857         /* Types cannot be defined in a `typeid' expression.  */
4858         saved_message = parser->type_definition_forbidden_message;
4859         parser->type_definition_forbidden_message
4860           = G_("types may not be defined in a %<typeid%> expression");
4861         /* We can't be sure yet whether we're looking at a type-id or an
4862            expression.  */
4863         cp_parser_parse_tentatively (parser);
4864         /* Try a type-id first.  */
4865         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4866         parser->in_type_id_in_expr_p = true;
4867         type = cp_parser_type_id (parser);
4868         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4869         /* Look for the `)' token.  Otherwise, we can't be sure that
4870            we're not looking at an expression: consider `typeid (int
4871            (3))', for example.  */
4872         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
4873         /* If all went well, simply lookup the type-id.  */
4874         if (cp_parser_parse_definitely (parser))
4875           postfix_expression = get_typeid (type);
4876         /* Otherwise, fall back to the expression variant.  */
4877         else
4878           {
4879             tree expression;
4880
4881             /* Look for an expression.  */
4882             expression = cp_parser_expression (parser, /*cast_p=*/false, & idk);
4883             /* Compute its typeid.  */
4884             postfix_expression = build_typeid (expression);
4885             /* Look for the `)' token.  */
4886             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
4887           }
4888         /* Restore the saved message.  */
4889         parser->type_definition_forbidden_message = saved_message;
4890         /* `typeid' may not appear in an integral constant expression.  */
4891         if (cp_parser_non_integral_constant_expression(parser, NIC_TYPEID))
4892           return error_mark_node;
4893       }
4894       break;
4895
4896     case RID_TYPENAME:
4897       {
4898         tree type;
4899         /* The syntax permitted here is the same permitted for an
4900            elaborated-type-specifier.  */
4901         type = cp_parser_elaborated_type_specifier (parser,
4902                                                     /*is_friend=*/false,
4903                                                     /*is_declaration=*/false);
4904         postfix_expression = cp_parser_functional_cast (parser, type);
4905       }
4906       break;
4907
4908     default:
4909       {
4910         tree type;
4911
4912         /* If the next thing is a simple-type-specifier, we may be
4913            looking at a functional cast.  We could also be looking at
4914            an id-expression.  So, we try the functional cast, and if
4915            that doesn't work we fall back to the primary-expression.  */
4916         cp_parser_parse_tentatively (parser);
4917         /* Look for the simple-type-specifier.  */
4918         type = cp_parser_simple_type_specifier (parser,
4919                                                 /*decl_specs=*/NULL,
4920                                                 CP_PARSER_FLAGS_NONE);
4921         /* Parse the cast itself.  */
4922         if (!cp_parser_error_occurred (parser))
4923           postfix_expression
4924             = cp_parser_functional_cast (parser, type);
4925         /* If that worked, we're done.  */
4926         if (cp_parser_parse_definitely (parser))
4927           break;
4928
4929         /* If the functional-cast didn't work out, try a
4930            compound-literal.  */
4931         if (cp_parser_allow_gnu_extensions_p (parser)
4932             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4933           {
4934             VEC(constructor_elt,gc) *initializer_list = NULL;
4935             bool saved_in_type_id_in_expr_p;
4936
4937             cp_parser_parse_tentatively (parser);
4938             /* Consume the `('.  */
4939             cp_lexer_consume_token (parser->lexer);
4940             /* Parse the type.  */
4941             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4942             parser->in_type_id_in_expr_p = true;
4943             type = cp_parser_type_id (parser);
4944             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4945             /* Look for the `)'.  */
4946             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
4947             /* Look for the `{'.  */
4948             cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
4949             /* If things aren't going well, there's no need to
4950                keep going.  */
4951             if (!cp_parser_error_occurred (parser))
4952               {
4953                 bool non_constant_p;
4954                 /* Parse the initializer-list.  */
4955                 initializer_list
4956                   = cp_parser_initializer_list (parser, &non_constant_p);
4957                 /* Allow a trailing `,'.  */
4958                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
4959                   cp_lexer_consume_token (parser->lexer);
4960                 /* Look for the final `}'.  */
4961                 cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
4962               }
4963             /* If that worked, we're definitely looking at a
4964                compound-literal expression.  */
4965             if (cp_parser_parse_definitely (parser))
4966               {
4967                 /* Warn the user that a compound literal is not
4968                    allowed in standard C++.  */
4969                 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids compound-literals");
4970                 /* For simplicity, we disallow compound literals in
4971                    constant-expressions.  We could
4972                    allow compound literals of integer type, whose
4973                    initializer was a constant, in constant
4974                    expressions.  Permitting that usage, as a further
4975                    extension, would not change the meaning of any
4976                    currently accepted programs.  (Of course, as
4977                    compound literals are not part of ISO C++, the
4978                    standard has nothing to say.)  */
4979                 if (cp_parser_non_integral_constant_expression (parser,
4980                                                                 NIC_NCC))
4981                   {
4982                     postfix_expression = error_mark_node;
4983                     break;
4984                   }
4985                 /* Form the representation of the compound-literal.  */
4986                 postfix_expression
4987                   = (finish_compound_literal
4988                      (type, build_constructor (init_list_type_node,
4989                                                initializer_list),
4990                       tf_warning_or_error));
4991                 break;
4992               }
4993           }
4994
4995         /* It must be a primary-expression.  */
4996         postfix_expression
4997           = cp_parser_primary_expression (parser, address_p, cast_p,
4998                                           /*template_arg_p=*/false,
4999                                           &idk);
5000       }
5001       break;
5002     }
5003
5004   /* Keep looping until the postfix-expression is complete.  */
5005   while (true)
5006     {
5007       if (idk == CP_ID_KIND_UNQUALIFIED
5008           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
5009           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
5010         /* It is not a Koenig lookup function call.  */
5011         postfix_expression
5012           = unqualified_name_lookup_error (postfix_expression);
5013
5014       /* Peek at the next token.  */
5015       token = cp_lexer_peek_token (parser->lexer);
5016
5017       switch (token->type)
5018         {
5019         case CPP_OPEN_SQUARE:
5020           postfix_expression
5021             = cp_parser_postfix_open_square_expression (parser,
5022                                                         postfix_expression,
5023                                                         false);
5024           idk = CP_ID_KIND_NONE;
5025           is_member_access = false;
5026           break;
5027
5028         case CPP_OPEN_PAREN:
5029           /* postfix-expression ( expression-list [opt] ) */
5030           {
5031             bool koenig_p;
5032             bool is_builtin_constant_p;
5033             bool saved_integral_constant_expression_p = false;
5034             bool saved_non_integral_constant_expression_p = false;
5035             VEC(tree,gc) *args;
5036
5037             is_member_access = false;
5038
5039             is_builtin_constant_p
5040               = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
5041             if (is_builtin_constant_p)
5042               {
5043                 /* The whole point of __builtin_constant_p is to allow
5044                    non-constant expressions to appear as arguments.  */
5045                 saved_integral_constant_expression_p
5046                   = parser->integral_constant_expression_p;
5047                 saved_non_integral_constant_expression_p
5048                   = parser->non_integral_constant_expression_p;
5049                 parser->integral_constant_expression_p = false;
5050               }
5051             args = (cp_parser_parenthesized_expression_list
5052                     (parser, non_attr,
5053                      /*cast_p=*/false, /*allow_expansion_p=*/true,
5054                      /*non_constant_p=*/NULL));
5055             if (is_builtin_constant_p)
5056               {
5057                 parser->integral_constant_expression_p
5058                   = saved_integral_constant_expression_p;
5059                 parser->non_integral_constant_expression_p
5060                   = saved_non_integral_constant_expression_p;
5061               }
5062
5063             if (args == NULL)
5064               {
5065                 postfix_expression = error_mark_node;
5066                 break;
5067               }
5068
5069             /* Function calls are not permitted in
5070                constant-expressions.  */
5071             if (! builtin_valid_in_constant_expr_p (postfix_expression)
5072                 && cp_parser_non_integral_constant_expression (parser,
5073                                                                NIC_FUNC_CALL))
5074               {
5075                 postfix_expression = error_mark_node;
5076                 release_tree_vector (args);
5077                 break;
5078               }
5079
5080             koenig_p = false;
5081             if (idk == CP_ID_KIND_UNQUALIFIED
5082                 || idk == CP_ID_KIND_TEMPLATE_ID)
5083               {
5084                 if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
5085                   {
5086                     if (!VEC_empty (tree, args))
5087                       {
5088                         koenig_p = true;
5089                         if (!any_type_dependent_arguments_p (args))
5090                           postfix_expression
5091                             = perform_koenig_lookup (postfix_expression, args,
5092                                                      /*include_std=*/false,
5093                                                      tf_warning_or_error);
5094                       }
5095                     else
5096                       postfix_expression
5097                         = unqualified_fn_lookup_error (postfix_expression);
5098                   }
5099                 /* We do not perform argument-dependent lookup if
5100                    normal lookup finds a non-function, in accordance
5101                    with the expected resolution of DR 218.  */
5102                 else if (!VEC_empty (tree, args)
5103                          && is_overloaded_fn (postfix_expression))
5104                   {
5105                     tree fn = get_first_fn (postfix_expression);
5106                     fn = STRIP_TEMPLATE (fn);
5107
5108                     /* Do not do argument dependent lookup if regular
5109                        lookup finds a member function or a block-scope
5110                        function declaration.  [basic.lookup.argdep]/3  */
5111                     if (!DECL_FUNCTION_MEMBER_P (fn)
5112                         && !DECL_LOCAL_FUNCTION_P (fn))
5113                       {
5114                         koenig_p = true;
5115                         if (!any_type_dependent_arguments_p (args))
5116                           postfix_expression
5117                             = perform_koenig_lookup (postfix_expression, args,
5118                                                      /*include_std=*/false,
5119                                                      tf_warning_or_error);
5120                       }
5121                   }
5122               }
5123
5124             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
5125               {
5126                 tree instance = TREE_OPERAND (postfix_expression, 0);
5127                 tree fn = TREE_OPERAND (postfix_expression, 1);
5128
5129                 if (processing_template_decl
5130                     && (type_dependent_expression_p (instance)
5131                         || (!BASELINK_P (fn)
5132                             && TREE_CODE (fn) != FIELD_DECL)
5133                         || type_dependent_expression_p (fn)
5134                         || any_type_dependent_arguments_p (args)))
5135                   {
5136                     postfix_expression
5137                       = build_nt_call_vec (postfix_expression, args);
5138                     release_tree_vector (args);
5139                     break;
5140                   }
5141
5142                 if (BASELINK_P (fn))
5143                   {
5144                   postfix_expression
5145                     = (build_new_method_call
5146                        (instance, fn, &args, NULL_TREE,
5147                         (idk == CP_ID_KIND_QUALIFIED
5148                          ? LOOKUP_NORMAL|LOOKUP_NONVIRTUAL
5149                          : LOOKUP_NORMAL),
5150                         /*fn_p=*/NULL,
5151                         tf_warning_or_error));
5152                   }
5153                 else
5154                   postfix_expression
5155                     = finish_call_expr (postfix_expression, &args,
5156                                         /*disallow_virtual=*/false,
5157                                         /*koenig_p=*/false,
5158                                         tf_warning_or_error);
5159               }
5160             else if (TREE_CODE (postfix_expression) == OFFSET_REF
5161                      || TREE_CODE (postfix_expression) == MEMBER_REF
5162                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
5163               postfix_expression = (build_offset_ref_call_from_tree
5164                                     (postfix_expression, &args));
5165             else if (idk == CP_ID_KIND_QUALIFIED)
5166               /* A call to a static class member, or a namespace-scope
5167                  function.  */
5168               postfix_expression
5169                 = finish_call_expr (postfix_expression, &args,
5170                                     /*disallow_virtual=*/true,
5171                                     koenig_p,
5172                                     tf_warning_or_error);
5173             else
5174               /* All other function calls.  */
5175               postfix_expression
5176                 = finish_call_expr (postfix_expression, &args,
5177                                     /*disallow_virtual=*/false,
5178                                     koenig_p,
5179                                     tf_warning_or_error);
5180
5181             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
5182             idk = CP_ID_KIND_NONE;
5183
5184             release_tree_vector (args);
5185           }
5186           break;
5187
5188         case CPP_DOT:
5189         case CPP_DEREF:
5190           /* postfix-expression . template [opt] id-expression
5191              postfix-expression . pseudo-destructor-name
5192              postfix-expression -> template [opt] id-expression
5193              postfix-expression -> pseudo-destructor-name */
5194
5195           /* Consume the `.' or `->' operator.  */
5196           cp_lexer_consume_token (parser->lexer);
5197
5198           postfix_expression
5199             = cp_parser_postfix_dot_deref_expression (parser, token->type,
5200                                                       postfix_expression,
5201                                                       false, &idk,
5202                                                       token->location);
5203
5204           is_member_access = true;
5205           break;
5206
5207         case CPP_PLUS_PLUS:
5208           /* postfix-expression ++  */
5209           /* Consume the `++' token.  */
5210           cp_lexer_consume_token (parser->lexer);
5211           /* Generate a representation for the complete expression.  */
5212           postfix_expression
5213             = finish_increment_expr (postfix_expression,
5214                                      POSTINCREMENT_EXPR);
5215           /* Increments may not appear in constant-expressions.  */
5216           if (cp_parser_non_integral_constant_expression (parser, NIC_INC))
5217             postfix_expression = error_mark_node;
5218           idk = CP_ID_KIND_NONE;
5219           is_member_access = false;
5220           break;
5221
5222         case CPP_MINUS_MINUS:
5223           /* postfix-expression -- */
5224           /* Consume the `--' token.  */
5225           cp_lexer_consume_token (parser->lexer);
5226           /* Generate a representation for the complete expression.  */
5227           postfix_expression
5228             = finish_increment_expr (postfix_expression,
5229                                      POSTDECREMENT_EXPR);
5230           /* Decrements may not appear in constant-expressions.  */
5231           if (cp_parser_non_integral_constant_expression (parser, NIC_DEC))
5232             postfix_expression = error_mark_node;
5233           idk = CP_ID_KIND_NONE;
5234           is_member_access = false;
5235           break;
5236
5237         default:
5238           if (pidk_return != NULL)
5239             * pidk_return = idk;
5240           if (member_access_only_p)
5241             return is_member_access? postfix_expression : error_mark_node;
5242           else
5243             return postfix_expression;
5244         }
5245     }
5246
5247   /* We should never get here.  */
5248   gcc_unreachable ();
5249   return error_mark_node;
5250 }
5251
5252 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
5253    by cp_parser_builtin_offsetof.  We're looking for
5254
5255      postfix-expression [ expression ]
5256
5257    FOR_OFFSETOF is set if we're being called in that context, which
5258    changes how we deal with integer constant expressions.  */
5259
5260 static tree
5261 cp_parser_postfix_open_square_expression (cp_parser *parser,
5262                                           tree postfix_expression,
5263                                           bool for_offsetof)
5264 {
5265   tree index;
5266
5267   /* Consume the `[' token.  */
5268   cp_lexer_consume_token (parser->lexer);
5269
5270   /* Parse the index expression.  */
5271   /* ??? For offsetof, there is a question of what to allow here.  If
5272      offsetof is not being used in an integral constant expression context,
5273      then we *could* get the right answer by computing the value at runtime.
5274      If we are in an integral constant expression context, then we might
5275      could accept any constant expression; hard to say without analysis.
5276      Rather than open the barn door too wide right away, allow only integer
5277      constant expressions here.  */
5278   if (for_offsetof)
5279     index = cp_parser_constant_expression (parser, false, NULL);
5280   else
5281     index = cp_parser_expression (parser, /*cast_p=*/false, NULL);
5282
5283   /* Look for the closing `]'.  */
5284   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
5285
5286   /* Build the ARRAY_REF.  */
5287   postfix_expression = grok_array_decl (postfix_expression, index);
5288
5289   /* When not doing offsetof, array references are not permitted in
5290      constant-expressions.  */
5291   if (!for_offsetof
5292       && (cp_parser_non_integral_constant_expression (parser, NIC_ARRAY_REF)))
5293     postfix_expression = error_mark_node;
5294
5295   return postfix_expression;
5296 }
5297
5298 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
5299    by cp_parser_builtin_offsetof.  We're looking for
5300
5301      postfix-expression . template [opt] id-expression
5302      postfix-expression . pseudo-destructor-name
5303      postfix-expression -> template [opt] id-expression
5304      postfix-expression -> pseudo-destructor-name
5305
5306    FOR_OFFSETOF is set if we're being called in that context.  That sorta
5307    limits what of the above we'll actually accept, but nevermind.
5308    TOKEN_TYPE is the "." or "->" token, which will already have been
5309    removed from the stream.  */
5310
5311 static tree
5312 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
5313                                         enum cpp_ttype token_type,
5314                                         tree postfix_expression,
5315                                         bool for_offsetof, cp_id_kind *idk,
5316                                         location_t location)
5317 {
5318   tree name;
5319   bool dependent_p;
5320   bool pseudo_destructor_p;
5321   tree scope = NULL_TREE;
5322
5323   /* If this is a `->' operator, dereference the pointer.  */
5324   if (token_type == CPP_DEREF)
5325     postfix_expression = build_x_arrow (postfix_expression);
5326   /* Check to see whether or not the expression is type-dependent.  */
5327   dependent_p = type_dependent_expression_p (postfix_expression);
5328   /* The identifier following the `->' or `.' is not qualified.  */
5329   parser->scope = NULL_TREE;
5330   parser->qualifying_scope = NULL_TREE;
5331   parser->object_scope = NULL_TREE;
5332   *idk = CP_ID_KIND_NONE;
5333
5334   /* Enter the scope corresponding to the type of the object
5335      given by the POSTFIX_EXPRESSION.  */
5336   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
5337     {
5338       scope = TREE_TYPE (postfix_expression);
5339       /* According to the standard, no expression should ever have
5340          reference type.  Unfortunately, we do not currently match
5341          the standard in this respect in that our internal representation
5342          of an expression may have reference type even when the standard
5343          says it does not.  Therefore, we have to manually obtain the
5344          underlying type here.  */
5345       scope = non_reference (scope);
5346       /* The type of the POSTFIX_EXPRESSION must be complete.  */
5347       if (scope == unknown_type_node)
5348         {
5349           error_at (location, "%qE does not have class type",
5350                     postfix_expression);
5351           scope = NULL_TREE;
5352         }
5353       /* Unlike the object expression in other contexts, *this is not
5354          required to be of complete type for purposes of class member
5355          access (5.2.5) outside the member function body.  */
5356       else if (scope != current_class_ref
5357                && !(processing_template_decl && scope == current_class_type))
5358         scope = complete_type_or_else (scope, NULL_TREE);
5359       /* Let the name lookup machinery know that we are processing a
5360          class member access expression.  */
5361       parser->context->object_type = scope;
5362       /* If something went wrong, we want to be able to discern that case,
5363          as opposed to the case where there was no SCOPE due to the type
5364          of expression being dependent.  */
5365       if (!scope)
5366         scope = error_mark_node;
5367       /* If the SCOPE was erroneous, make the various semantic analysis
5368          functions exit quickly -- and without issuing additional error
5369          messages.  */
5370       if (scope == error_mark_node)
5371         postfix_expression = error_mark_node;
5372     }
5373
5374   /* Assume this expression is not a pseudo-destructor access.  */
5375   pseudo_destructor_p = false;
5376
5377   /* If the SCOPE is a scalar type, then, if this is a valid program,
5378      we must be looking at a pseudo-destructor-name.  If POSTFIX_EXPRESSION
5379      is type dependent, it can be pseudo-destructor-name or something else.
5380      Try to parse it as pseudo-destructor-name first.  */
5381   if ((scope && SCALAR_TYPE_P (scope)) || dependent_p)
5382     {
5383       tree s;
5384       tree type;
5385
5386       cp_parser_parse_tentatively (parser);
5387       /* Parse the pseudo-destructor-name.  */
5388       s = NULL_TREE;
5389       cp_parser_pseudo_destructor_name (parser, &s, &type);
5390       if (dependent_p
5391           && (cp_parser_error_occurred (parser)
5392               || TREE_CODE (type) != TYPE_DECL
5393               || !SCALAR_TYPE_P (TREE_TYPE (type))))
5394         cp_parser_abort_tentative_parse (parser);
5395       else if (cp_parser_parse_definitely (parser))
5396         {
5397           pseudo_destructor_p = true;
5398           postfix_expression
5399             = finish_pseudo_destructor_expr (postfix_expression,
5400                                              s, TREE_TYPE (type));
5401         }
5402     }
5403
5404   if (!pseudo_destructor_p)
5405     {
5406       /* If the SCOPE is not a scalar type, we are looking at an
5407          ordinary class member access expression, rather than a
5408          pseudo-destructor-name.  */
5409       bool template_p;
5410       cp_token *token = cp_lexer_peek_token (parser->lexer);
5411       /* Parse the id-expression.  */
5412       name = (cp_parser_id_expression
5413               (parser,
5414                cp_parser_optional_template_keyword (parser),
5415                /*check_dependency_p=*/true,
5416                &template_p,
5417                /*declarator_p=*/false,
5418                /*optional_p=*/false));
5419       /* In general, build a SCOPE_REF if the member name is qualified.
5420          However, if the name was not dependent and has already been
5421          resolved; there is no need to build the SCOPE_REF.  For example;
5422
5423              struct X { void f(); };
5424              template <typename T> void f(T* t) { t->X::f(); }
5425
5426          Even though "t" is dependent, "X::f" is not and has been resolved
5427          to a BASELINK; there is no need to include scope information.  */
5428
5429       /* But we do need to remember that there was an explicit scope for
5430          virtual function calls.  */
5431       if (parser->scope)
5432         *idk = CP_ID_KIND_QUALIFIED;
5433
5434       /* If the name is a template-id that names a type, we will get a
5435          TYPE_DECL here.  That is invalid code.  */
5436       if (TREE_CODE (name) == TYPE_DECL)
5437         {
5438           error_at (token->location, "invalid use of %qD", name);
5439           postfix_expression = error_mark_node;
5440         }
5441       else
5442         {
5443           if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
5444             {
5445               name = build_qualified_name (/*type=*/NULL_TREE,
5446                                            parser->scope,
5447                                            name,
5448                                            template_p);
5449               parser->scope = NULL_TREE;
5450               parser->qualifying_scope = NULL_TREE;
5451               parser->object_scope = NULL_TREE;
5452             }
5453           if (scope && name && BASELINK_P (name))
5454             adjust_result_of_qualified_name_lookup
5455               (name, BINFO_TYPE (BASELINK_ACCESS_BINFO (name)), scope);
5456           postfix_expression
5457             = finish_class_member_access_expr (postfix_expression, name,
5458                                                template_p, 
5459                                                tf_warning_or_error);
5460         }
5461     }
5462
5463   /* We no longer need to look up names in the scope of the object on
5464      the left-hand side of the `.' or `->' operator.  */
5465   parser->context->object_type = NULL_TREE;
5466
5467   /* Outside of offsetof, these operators may not appear in
5468      constant-expressions.  */
5469   if (!for_offsetof
5470       && (cp_parser_non_integral_constant_expression
5471           (parser, token_type == CPP_DEREF ? NIC_ARROW : NIC_POINT)))
5472     postfix_expression = error_mark_node;
5473
5474   return postfix_expression;
5475 }
5476
5477 /* Parse a parenthesized expression-list.
5478
5479    expression-list:
5480      assignment-expression
5481      expression-list, assignment-expression
5482
5483    attribute-list:
5484      expression-list
5485      identifier
5486      identifier, expression-list
5487
5488    CAST_P is true if this expression is the target of a cast.
5489
5490    ALLOW_EXPANSION_P is true if this expression allows expansion of an
5491    argument pack.
5492
5493    Returns a vector of trees.  Each element is a representation of an
5494    assignment-expression.  NULL is returned if the ( and or ) are
5495    missing.  An empty, but allocated, vector is returned on no
5496    expressions.  The parentheses are eaten.  IS_ATTRIBUTE_LIST is id_attr
5497    if we are parsing an attribute list for an attribute that wants a
5498    plain identifier argument, normal_attr for an attribute that wants
5499    an expression, or non_attr if we aren't parsing an attribute list.  If
5500    NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P indicates whether or
5501    not all of the expressions in the list were constant.  */
5502
5503 static VEC(tree,gc) *
5504 cp_parser_parenthesized_expression_list (cp_parser* parser,
5505                                          int is_attribute_list,
5506                                          bool cast_p,
5507                                          bool allow_expansion_p,
5508                                          bool *non_constant_p)
5509 {
5510   VEC(tree,gc) *expression_list;
5511   bool fold_expr_p = is_attribute_list != non_attr;
5512   tree identifier = NULL_TREE;
5513   bool saved_greater_than_is_operator_p;
5514
5515   /* Assume all the expressions will be constant.  */
5516   if (non_constant_p)
5517     *non_constant_p = false;
5518
5519   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
5520     return NULL;
5521
5522   expression_list = make_tree_vector ();
5523
5524   /* Within a parenthesized expression, a `>' token is always
5525      the greater-than operator.  */
5526   saved_greater_than_is_operator_p
5527     = parser->greater_than_is_operator_p;
5528   parser->greater_than_is_operator_p = true;
5529
5530   /* Consume expressions until there are no more.  */
5531   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
5532     while (true)
5533       {
5534         tree expr;
5535
5536         /* At the beginning of attribute lists, check to see if the
5537            next token is an identifier.  */
5538         if (is_attribute_list == id_attr
5539             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
5540           {
5541             cp_token *token;
5542
5543             /* Consume the identifier.  */
5544             token = cp_lexer_consume_token (parser->lexer);
5545             /* Save the identifier.  */
5546             identifier = token->u.value;
5547           }
5548         else
5549           {
5550             bool expr_non_constant_p;
5551
5552             /* Parse the next assignment-expression.  */
5553             if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
5554               {
5555                 /* A braced-init-list.  */
5556                 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5557                 expr = cp_parser_braced_list (parser, &expr_non_constant_p);
5558                 if (non_constant_p && expr_non_constant_p)
5559                   *non_constant_p = true;
5560               }
5561             else if (non_constant_p)
5562               {
5563                 expr = (cp_parser_constant_expression
5564                         (parser, /*allow_non_constant_p=*/true,
5565                          &expr_non_constant_p));
5566                 if (expr_non_constant_p)
5567                   *non_constant_p = true;
5568               }
5569             else
5570               expr = cp_parser_assignment_expression (parser, cast_p, NULL);
5571
5572             if (fold_expr_p)
5573               expr = fold_non_dependent_expr (expr);
5574
5575             /* If we have an ellipsis, then this is an expression
5576                expansion.  */
5577             if (allow_expansion_p
5578                 && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
5579               {
5580                 /* Consume the `...'.  */
5581                 cp_lexer_consume_token (parser->lexer);
5582
5583                 /* Build the argument pack.  */
5584                 expr = make_pack_expansion (expr);
5585               }
5586
5587              /* Add it to the list.  We add error_mark_node
5588                 expressions to the list, so that we can still tell if
5589                 the correct form for a parenthesized expression-list
5590                 is found. That gives better errors.  */
5591             VEC_safe_push (tree, gc, expression_list, expr);
5592
5593             if (expr == error_mark_node)
5594               goto skip_comma;
5595           }
5596
5597         /* After the first item, attribute lists look the same as
5598            expression lists.  */
5599         is_attribute_list = non_attr;
5600
5601       get_comma:;
5602         /* If the next token isn't a `,', then we are done.  */
5603         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
5604           break;
5605
5606         /* Otherwise, consume the `,' and keep going.  */
5607         cp_lexer_consume_token (parser->lexer);
5608       }
5609
5610   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
5611     {
5612       int ending;
5613
5614     skip_comma:;
5615       /* We try and resync to an unnested comma, as that will give the
5616          user better diagnostics.  */
5617       ending = cp_parser_skip_to_closing_parenthesis (parser,
5618                                                       /*recovering=*/true,
5619                                                       /*or_comma=*/true,
5620                                                       /*consume_paren=*/true);
5621       if (ending < 0)
5622         goto get_comma;
5623       if (!ending)
5624         {
5625           parser->greater_than_is_operator_p
5626             = saved_greater_than_is_operator_p;
5627           return NULL;
5628         }
5629     }
5630
5631   parser->greater_than_is_operator_p
5632     = saved_greater_than_is_operator_p;
5633
5634   if (identifier)
5635     VEC_safe_insert (tree, gc, expression_list, 0, identifier);
5636
5637   return expression_list;
5638 }
5639
5640 /* Parse a pseudo-destructor-name.
5641
5642    pseudo-destructor-name:
5643      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
5644      :: [opt] nested-name-specifier template template-id :: ~ type-name
5645      :: [opt] nested-name-specifier [opt] ~ type-name
5646
5647    If either of the first two productions is used, sets *SCOPE to the
5648    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
5649    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
5650    or ERROR_MARK_NODE if the parse fails.  */
5651
5652 static void
5653 cp_parser_pseudo_destructor_name (cp_parser* parser,
5654                                   tree* scope,
5655                                   tree* type)
5656 {
5657   bool nested_name_specifier_p;
5658
5659   /* Assume that things will not work out.  */
5660   *type = error_mark_node;
5661
5662   /* Look for the optional `::' operator.  */
5663   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
5664   /* Look for the optional nested-name-specifier.  */
5665   nested_name_specifier_p
5666     = (cp_parser_nested_name_specifier_opt (parser,
5667                                             /*typename_keyword_p=*/false,
5668                                             /*check_dependency_p=*/true,
5669                                             /*type_p=*/false,
5670                                             /*is_declaration=*/false)
5671        != NULL_TREE);
5672   /* Now, if we saw a nested-name-specifier, we might be doing the
5673      second production.  */
5674   if (nested_name_specifier_p
5675       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
5676     {
5677       /* Consume the `template' keyword.  */
5678       cp_lexer_consume_token (parser->lexer);
5679       /* Parse the template-id.  */
5680       cp_parser_template_id (parser,
5681                              /*template_keyword_p=*/true,
5682                              /*check_dependency_p=*/false,
5683                              /*is_declaration=*/true);
5684       /* Look for the `::' token.  */
5685       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
5686     }
5687   /* If the next token is not a `~', then there might be some
5688      additional qualification.  */
5689   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
5690     {
5691       /* At this point, we're looking for "type-name :: ~".  The type-name
5692          must not be a class-name, since this is a pseudo-destructor.  So,
5693          it must be either an enum-name, or a typedef-name -- both of which
5694          are just identifiers.  So, we peek ahead to check that the "::"
5695          and "~" tokens are present; if they are not, then we can avoid
5696          calling type_name.  */
5697       if (cp_lexer_peek_token (parser->lexer)->type != CPP_NAME
5698           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE
5699           || cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_COMPL)
5700         {
5701           cp_parser_error (parser, "non-scalar type");
5702           return;
5703         }
5704
5705       /* Look for the type-name.  */
5706       *scope = TREE_TYPE (cp_parser_nonclass_name (parser));
5707       if (*scope == error_mark_node)
5708         return;
5709
5710       /* Look for the `::' token.  */
5711       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
5712     }
5713   else
5714     *scope = NULL_TREE;
5715
5716   /* Look for the `~'.  */
5717   cp_parser_require (parser, CPP_COMPL, RT_COMPL);
5718
5719   /* Once we see the ~, this has to be a pseudo-destructor.  */
5720   if (!processing_template_decl && !cp_parser_error_occurred (parser))
5721     cp_parser_commit_to_tentative_parse (parser);
5722
5723   /* Look for the type-name again.  We are not responsible for
5724      checking that it matches the first type-name.  */
5725   *type = cp_parser_nonclass_name (parser);
5726 }
5727
5728 /* Parse a unary-expression.
5729
5730    unary-expression:
5731      postfix-expression
5732      ++ cast-expression
5733      -- cast-expression
5734      unary-operator cast-expression
5735      sizeof unary-expression
5736      sizeof ( type-id )
5737      alignof ( type-id )  [C++0x]
5738      new-expression
5739      delete-expression
5740
5741    GNU Extensions:
5742
5743    unary-expression:
5744      __extension__ cast-expression
5745      __alignof__ unary-expression
5746      __alignof__ ( type-id )
5747      alignof unary-expression  [C++0x]
5748      __real__ cast-expression
5749      __imag__ cast-expression
5750      && identifier
5751
5752    ADDRESS_P is true iff the unary-expression is appearing as the
5753    operand of the `&' operator.   CAST_P is true if this expression is
5754    the target of a cast.
5755
5756    Returns a representation of the expression.  */
5757
5758 static tree
5759 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p,
5760                             cp_id_kind * pidk)
5761 {
5762   cp_token *token;
5763   enum tree_code unary_operator;
5764
5765   /* Peek at the next token.  */
5766   token = cp_lexer_peek_token (parser->lexer);
5767   /* Some keywords give away the kind of expression.  */
5768   if (token->type == CPP_KEYWORD)
5769     {
5770       enum rid keyword = token->keyword;
5771
5772       switch (keyword)
5773         {
5774         case RID_ALIGNOF:
5775         case RID_SIZEOF:
5776           {
5777             tree operand;
5778             enum tree_code op;
5779
5780             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
5781             /* Consume the token.  */
5782             cp_lexer_consume_token (parser->lexer);
5783             /* Parse the operand.  */
5784             operand = cp_parser_sizeof_operand (parser, keyword);
5785
5786             if (TYPE_P (operand))
5787               return cxx_sizeof_or_alignof_type (operand, op, true);
5788             else
5789               {
5790                 /* ISO C++ defines alignof only with types, not with
5791                    expressions. So pedwarn if alignof is used with a non-
5792                    type expression. However, __alignof__ is ok.  */
5793                 if (!strcmp (IDENTIFIER_POINTER (token->u.value), "alignof"))
5794                   pedwarn (token->location, OPT_pedantic,
5795                            "ISO C++ does not allow %<alignof%> "
5796                            "with a non-type");
5797
5798                 return cxx_sizeof_or_alignof_expr (operand, op, true);
5799               }
5800           }
5801
5802         case RID_NEW:
5803           return cp_parser_new_expression (parser);
5804
5805         case RID_DELETE:
5806           return cp_parser_delete_expression (parser);
5807
5808         case RID_EXTENSION:
5809           {
5810             /* The saved value of the PEDANTIC flag.  */
5811             int saved_pedantic;
5812             tree expr;
5813
5814             /* Save away the PEDANTIC flag.  */
5815             cp_parser_extension_opt (parser, &saved_pedantic);
5816             /* Parse the cast-expression.  */
5817             expr = cp_parser_simple_cast_expression (parser);
5818             /* Restore the PEDANTIC flag.  */
5819             pedantic = saved_pedantic;
5820
5821             return expr;
5822           }
5823
5824         case RID_REALPART:
5825         case RID_IMAGPART:
5826           {
5827             tree expression;
5828
5829             /* Consume the `__real__' or `__imag__' token.  */
5830             cp_lexer_consume_token (parser->lexer);
5831             /* Parse the cast-expression.  */
5832             expression = cp_parser_simple_cast_expression (parser);
5833             /* Create the complete representation.  */
5834             return build_x_unary_op ((keyword == RID_REALPART
5835                                       ? REALPART_EXPR : IMAGPART_EXPR),
5836                                      expression,
5837                                      tf_warning_or_error);
5838           }
5839           break;
5840
5841         case RID_NOEXCEPT:
5842           {
5843             tree expr;
5844             const char *saved_message;
5845             bool saved_integral_constant_expression_p;
5846             bool saved_non_integral_constant_expression_p;
5847             bool saved_greater_than_is_operator_p;
5848
5849             cp_lexer_consume_token (parser->lexer);
5850             cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
5851
5852             saved_message = parser->type_definition_forbidden_message;
5853             parser->type_definition_forbidden_message
5854               = G_("types may not be defined in %<noexcept%> expressions");
5855
5856             saved_integral_constant_expression_p
5857               = parser->integral_constant_expression_p;
5858             saved_non_integral_constant_expression_p
5859               = parser->non_integral_constant_expression_p;
5860             parser->integral_constant_expression_p = false;
5861
5862             saved_greater_than_is_operator_p
5863               = parser->greater_than_is_operator_p;
5864             parser->greater_than_is_operator_p = true;
5865
5866             ++cp_unevaluated_operand;
5867             ++c_inhibit_evaluation_warnings;
5868             expr = cp_parser_expression (parser, false, NULL);
5869             --c_inhibit_evaluation_warnings;
5870             --cp_unevaluated_operand;
5871
5872             parser->greater_than_is_operator_p
5873               = saved_greater_than_is_operator_p;
5874
5875             parser->integral_constant_expression_p
5876               = saved_integral_constant_expression_p;
5877             parser->non_integral_constant_expression_p
5878               = saved_non_integral_constant_expression_p;
5879
5880             parser->type_definition_forbidden_message = saved_message;
5881
5882             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
5883             return finish_noexcept_expr (expr, tf_warning_or_error);
5884           }
5885
5886         default:
5887           break;
5888         }
5889     }
5890
5891   /* Look for the `:: new' and `:: delete', which also signal the
5892      beginning of a new-expression, or delete-expression,
5893      respectively.  If the next token is `::', then it might be one of
5894      these.  */
5895   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
5896     {
5897       enum rid keyword;
5898
5899       /* See if the token after the `::' is one of the keywords in
5900          which we're interested.  */
5901       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
5902       /* If it's `new', we have a new-expression.  */
5903       if (keyword == RID_NEW)
5904         return cp_parser_new_expression (parser);
5905       /* Similarly, for `delete'.  */
5906       else if (keyword == RID_DELETE)
5907         return cp_parser_delete_expression (parser);
5908     }
5909
5910   /* Look for a unary operator.  */
5911   unary_operator = cp_parser_unary_operator (token);
5912   /* The `++' and `--' operators can be handled similarly, even though
5913      they are not technically unary-operators in the grammar.  */
5914   if (unary_operator == ERROR_MARK)
5915     {
5916       if (token->type == CPP_PLUS_PLUS)
5917         unary_operator = PREINCREMENT_EXPR;
5918       else if (token->type == CPP_MINUS_MINUS)
5919         unary_operator = PREDECREMENT_EXPR;
5920       /* Handle the GNU address-of-label extension.  */
5921       else if (cp_parser_allow_gnu_extensions_p (parser)
5922                && token->type == CPP_AND_AND)
5923         {
5924           tree identifier;
5925           tree expression;
5926           location_t loc = cp_lexer_peek_token (parser->lexer)->location;
5927
5928           /* Consume the '&&' token.  */
5929           cp_lexer_consume_token (parser->lexer);
5930           /* Look for the identifier.  */
5931           identifier = cp_parser_identifier (parser);
5932           /* Create an expression representing the address.  */
5933           expression = finish_label_address_expr (identifier, loc);
5934           if (cp_parser_non_integral_constant_expression (parser,
5935                                                           NIC_ADDR_LABEL))
5936             expression = error_mark_node;
5937           return expression;
5938         }
5939     }
5940   if (unary_operator != ERROR_MARK)
5941     {
5942       tree cast_expression;
5943       tree expression = error_mark_node;
5944       non_integral_constant non_constant_p = NIC_NONE;
5945
5946       /* Consume the operator token.  */
5947       token = cp_lexer_consume_token (parser->lexer);
5948       /* Parse the cast-expression.  */
5949       cast_expression
5950         = cp_parser_cast_expression (parser,
5951                                      unary_operator == ADDR_EXPR,
5952                                      /*cast_p=*/false, pidk);
5953       /* Now, build an appropriate representation.  */
5954       switch (unary_operator)
5955         {
5956         case INDIRECT_REF:
5957           non_constant_p = NIC_STAR;
5958           expression = build_x_indirect_ref (cast_expression, RO_UNARY_STAR,
5959                                              tf_warning_or_error);
5960           break;
5961
5962         case ADDR_EXPR:
5963            non_constant_p = NIC_ADDR;
5964           /* Fall through.  */
5965         case BIT_NOT_EXPR:
5966           expression = build_x_unary_op (unary_operator, cast_expression,
5967                                          tf_warning_or_error);
5968           break;
5969
5970         case PREINCREMENT_EXPR:
5971         case PREDECREMENT_EXPR:
5972           non_constant_p = unary_operator == PREINCREMENT_EXPR
5973                            ? NIC_PREINCREMENT : NIC_PREDECREMENT;
5974           /* Fall through.  */
5975         case UNARY_PLUS_EXPR:
5976         case NEGATE_EXPR:
5977         case TRUTH_NOT_EXPR:
5978           expression = finish_unary_op_expr (unary_operator, cast_expression);
5979           break;
5980
5981         default:
5982           gcc_unreachable ();
5983         }
5984
5985       if (non_constant_p != NIC_NONE
5986           && cp_parser_non_integral_constant_expression (parser,
5987                                                          non_constant_p))
5988         expression = error_mark_node;
5989
5990       return expression;
5991     }
5992
5993   return cp_parser_postfix_expression (parser, address_p, cast_p,
5994                                        /*member_access_only_p=*/false,
5995                                        pidk);
5996 }
5997
5998 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
5999    unary-operator, the corresponding tree code is returned.  */
6000
6001 static enum tree_code
6002 cp_parser_unary_operator (cp_token* token)
6003 {
6004   switch (token->type)
6005     {
6006     case CPP_MULT:
6007       return INDIRECT_REF;
6008
6009     case CPP_AND:
6010       return ADDR_EXPR;
6011
6012     case CPP_PLUS:
6013       return UNARY_PLUS_EXPR;
6014
6015     case CPP_MINUS:
6016       return NEGATE_EXPR;
6017
6018     case CPP_NOT:
6019       return TRUTH_NOT_EXPR;
6020
6021     case CPP_COMPL:
6022       return BIT_NOT_EXPR;
6023
6024     default:
6025       return ERROR_MARK;
6026     }
6027 }
6028
6029 /* Parse a new-expression.
6030
6031    new-expression:
6032      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
6033      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
6034
6035    Returns a representation of the expression.  */
6036
6037 static tree
6038 cp_parser_new_expression (cp_parser* parser)
6039 {
6040   bool global_scope_p;
6041   VEC(tree,gc) *placement;
6042   tree type;
6043   VEC(tree,gc) *initializer;
6044   tree nelts;
6045   tree ret;
6046
6047   /* Look for the optional `::' operator.  */
6048   global_scope_p
6049     = (cp_parser_global_scope_opt (parser,
6050                                    /*current_scope_valid_p=*/false)
6051        != NULL_TREE);
6052   /* Look for the `new' operator.  */
6053   cp_parser_require_keyword (parser, RID_NEW, RT_NEW);
6054   /* There's no easy way to tell a new-placement from the
6055      `( type-id )' construct.  */
6056   cp_parser_parse_tentatively (parser);
6057   /* Look for a new-placement.  */
6058   placement = cp_parser_new_placement (parser);
6059   /* If that didn't work out, there's no new-placement.  */
6060   if (!cp_parser_parse_definitely (parser))
6061     {
6062       if (placement != NULL)
6063         release_tree_vector (placement);
6064       placement = NULL;
6065     }
6066
6067   /* If the next token is a `(', then we have a parenthesized
6068      type-id.  */
6069   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
6070     {
6071       cp_token *token;
6072       /* Consume the `('.  */
6073       cp_lexer_consume_token (parser->lexer);
6074       /* Parse the type-id.  */
6075       type = cp_parser_type_id (parser);
6076       /* Look for the closing `)'.  */
6077       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
6078       token = cp_lexer_peek_token (parser->lexer);
6079       /* There should not be a direct-new-declarator in this production,
6080          but GCC used to allowed this, so we check and emit a sensible error
6081          message for this case.  */
6082       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6083         {
6084           error_at (token->location,
6085                     "array bound forbidden after parenthesized type-id");
6086           inform (token->location, 
6087                   "try removing the parentheses around the type-id");
6088           cp_parser_direct_new_declarator (parser);
6089         }
6090       nelts = NULL_TREE;
6091     }
6092   /* Otherwise, there must be a new-type-id.  */
6093   else
6094     type = cp_parser_new_type_id (parser, &nelts);
6095
6096   /* If the next token is a `(' or '{', then we have a new-initializer.  */
6097   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
6098       || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6099     initializer = cp_parser_new_initializer (parser);
6100   else
6101     initializer = NULL;
6102
6103   /* A new-expression may not appear in an integral constant
6104      expression.  */
6105   if (cp_parser_non_integral_constant_expression (parser, NIC_NEW))
6106     ret = error_mark_node;
6107   else
6108     {
6109       /* Create a representation of the new-expression.  */
6110       ret = build_new (&placement, type, nelts, &initializer, global_scope_p,
6111                        tf_warning_or_error);
6112     }
6113
6114   if (placement != NULL)
6115     release_tree_vector (placement);
6116   if (initializer != NULL)
6117     release_tree_vector (initializer);
6118
6119   return ret;
6120 }
6121
6122 /* Parse a new-placement.
6123
6124    new-placement:
6125      ( expression-list )
6126
6127    Returns the same representation as for an expression-list.  */
6128
6129 static VEC(tree,gc) *
6130 cp_parser_new_placement (cp_parser* parser)
6131 {
6132   VEC(tree,gc) *expression_list;
6133
6134   /* Parse the expression-list.  */
6135   expression_list = (cp_parser_parenthesized_expression_list
6136                      (parser, non_attr, /*cast_p=*/false,
6137                       /*allow_expansion_p=*/true,
6138                       /*non_constant_p=*/NULL));
6139
6140   return expression_list;
6141 }
6142
6143 /* Parse a new-type-id.
6144
6145    new-type-id:
6146      type-specifier-seq new-declarator [opt]
6147
6148    Returns the TYPE allocated.  If the new-type-id indicates an array
6149    type, *NELTS is set to the number of elements in the last array
6150    bound; the TYPE will not include the last array bound.  */
6151
6152 static tree
6153 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
6154 {
6155   cp_decl_specifier_seq type_specifier_seq;
6156   cp_declarator *new_declarator;
6157   cp_declarator *declarator;
6158   cp_declarator *outer_declarator;
6159   const char *saved_message;
6160   tree type;
6161
6162   /* The type-specifier sequence must not contain type definitions.
6163      (It cannot contain declarations of new types either, but if they
6164      are not definitions we will catch that because they are not
6165      complete.)  */
6166   saved_message = parser->type_definition_forbidden_message;
6167   parser->type_definition_forbidden_message
6168     = G_("types may not be defined in a new-type-id");
6169   /* Parse the type-specifier-seq.  */
6170   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
6171                                 /*is_trailing_return=*/false,
6172                                 &type_specifier_seq);
6173   /* Restore the old message.  */
6174   parser->type_definition_forbidden_message = saved_message;
6175   /* Parse the new-declarator.  */
6176   new_declarator = cp_parser_new_declarator_opt (parser);
6177
6178   /* Determine the number of elements in the last array dimension, if
6179      any.  */
6180   *nelts = NULL_TREE;
6181   /* Skip down to the last array dimension.  */
6182   declarator = new_declarator;
6183   outer_declarator = NULL;
6184   while (declarator && (declarator->kind == cdk_pointer
6185                         || declarator->kind == cdk_ptrmem))
6186     {
6187       outer_declarator = declarator;
6188       declarator = declarator->declarator;
6189     }
6190   while (declarator
6191          && declarator->kind == cdk_array
6192          && declarator->declarator
6193          && declarator->declarator->kind == cdk_array)
6194     {
6195       outer_declarator = declarator;
6196       declarator = declarator->declarator;
6197     }
6198
6199   if (declarator && declarator->kind == cdk_array)
6200     {
6201       *nelts = declarator->u.array.bounds;
6202       if (*nelts == error_mark_node)
6203         *nelts = integer_one_node;
6204
6205       if (outer_declarator)
6206         outer_declarator->declarator = declarator->declarator;
6207       else
6208         new_declarator = NULL;
6209     }
6210
6211   type = groktypename (&type_specifier_seq, new_declarator, false);
6212   return type;
6213 }
6214
6215 /* Parse an (optional) new-declarator.
6216
6217    new-declarator:
6218      ptr-operator new-declarator [opt]
6219      direct-new-declarator
6220
6221    Returns the declarator.  */
6222
6223 static cp_declarator *
6224 cp_parser_new_declarator_opt (cp_parser* parser)
6225 {
6226   enum tree_code code;
6227   tree type;
6228   cp_cv_quals cv_quals;
6229
6230   /* We don't know if there's a ptr-operator next, or not.  */
6231   cp_parser_parse_tentatively (parser);
6232   /* Look for a ptr-operator.  */
6233   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
6234   /* If that worked, look for more new-declarators.  */
6235   if (cp_parser_parse_definitely (parser))
6236     {
6237       cp_declarator *declarator;
6238
6239       /* Parse another optional declarator.  */
6240       declarator = cp_parser_new_declarator_opt (parser);
6241
6242       return cp_parser_make_indirect_declarator
6243         (code, type, cv_quals, declarator);
6244     }
6245
6246   /* If the next token is a `[', there is a direct-new-declarator.  */
6247   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6248     return cp_parser_direct_new_declarator (parser);
6249
6250   return NULL;
6251 }
6252
6253 /* Parse a direct-new-declarator.
6254
6255    direct-new-declarator:
6256      [ expression ]
6257      direct-new-declarator [constant-expression]
6258
6259    */
6260
6261 static cp_declarator *
6262 cp_parser_direct_new_declarator (cp_parser* parser)
6263 {
6264   cp_declarator *declarator = NULL;
6265
6266   while (true)
6267     {
6268       tree expression;
6269
6270       /* Look for the opening `['.  */
6271       cp_parser_require (parser, CPP_OPEN_SQUARE, RT_OPEN_SQUARE);
6272       /* The first expression is not required to be constant.  */
6273       if (!declarator)
6274         {
6275           cp_token *token = cp_lexer_peek_token (parser->lexer);
6276           expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
6277           /* The standard requires that the expression have integral
6278              type.  DR 74 adds enumeration types.  We believe that the
6279              real intent is that these expressions be handled like the
6280              expression in a `switch' condition, which also allows
6281              classes with a single conversion to integral or
6282              enumeration type.  */
6283           if (!processing_template_decl)
6284             {
6285               expression
6286                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
6287                                               expression,
6288                                               /*complain=*/true);
6289               if (!expression)
6290                 {
6291                   error_at (token->location,
6292                             "expression in new-declarator must have integral "
6293                             "or enumeration type");
6294                   expression = error_mark_node;
6295                 }
6296             }
6297         }
6298       /* But all the other expressions must be.  */
6299       else
6300         expression
6301           = cp_parser_constant_expression (parser,
6302                                            /*allow_non_constant=*/false,
6303                                            NULL);
6304       /* Look for the closing `]'.  */
6305       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
6306
6307       /* Add this bound to the declarator.  */
6308       declarator = make_array_declarator (declarator, expression);
6309
6310       /* If the next token is not a `[', then there are no more
6311          bounds.  */
6312       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
6313         break;
6314     }
6315
6316   return declarator;
6317 }
6318
6319 /* Parse a new-initializer.
6320
6321    new-initializer:
6322      ( expression-list [opt] )
6323      braced-init-list
6324
6325    Returns a representation of the expression-list.  */
6326
6327 static VEC(tree,gc) *
6328 cp_parser_new_initializer (cp_parser* parser)
6329 {
6330   VEC(tree,gc) *expression_list;
6331
6332   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6333     {
6334       tree t;
6335       bool expr_non_constant_p;
6336       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6337       t = cp_parser_braced_list (parser, &expr_non_constant_p);
6338       CONSTRUCTOR_IS_DIRECT_INIT (t) = 1;
6339       expression_list = make_tree_vector_single (t);
6340     }
6341   else
6342     expression_list = (cp_parser_parenthesized_expression_list
6343                        (parser, non_attr, /*cast_p=*/false,
6344                         /*allow_expansion_p=*/true,
6345                         /*non_constant_p=*/NULL));
6346
6347   return expression_list;
6348 }
6349
6350 /* Parse a delete-expression.
6351
6352    delete-expression:
6353      :: [opt] delete cast-expression
6354      :: [opt] delete [ ] cast-expression
6355
6356    Returns a representation of the expression.  */
6357
6358 static tree
6359 cp_parser_delete_expression (cp_parser* parser)
6360 {
6361   bool global_scope_p;
6362   bool array_p;
6363   tree expression;
6364
6365   /* Look for the optional `::' operator.  */
6366   global_scope_p
6367     = (cp_parser_global_scope_opt (parser,
6368                                    /*current_scope_valid_p=*/false)
6369        != NULL_TREE);
6370   /* Look for the `delete' keyword.  */
6371   cp_parser_require_keyword (parser, RID_DELETE, RT_DELETE);
6372   /* See if the array syntax is in use.  */
6373   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6374     {
6375       /* Consume the `[' token.  */
6376       cp_lexer_consume_token (parser->lexer);
6377       /* Look for the `]' token.  */
6378       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
6379       /* Remember that this is the `[]' construct.  */
6380       array_p = true;
6381     }
6382   else
6383     array_p = false;
6384
6385   /* Parse the cast-expression.  */
6386   expression = cp_parser_simple_cast_expression (parser);
6387
6388   /* A delete-expression may not appear in an integral constant
6389      expression.  */
6390   if (cp_parser_non_integral_constant_expression (parser, NIC_DEL))
6391     return error_mark_node;
6392
6393   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p,
6394                         tf_warning_or_error);
6395 }
6396
6397 /* Returns true if TOKEN may start a cast-expression and false
6398    otherwise.  */
6399
6400 static bool
6401 cp_parser_token_starts_cast_expression (cp_token *token)
6402 {
6403   switch (token->type)
6404     {
6405     case CPP_COMMA:
6406     case CPP_SEMICOLON:
6407     case CPP_QUERY:
6408     case CPP_COLON:
6409     case CPP_CLOSE_SQUARE:
6410     case CPP_CLOSE_PAREN:
6411     case CPP_CLOSE_BRACE:
6412     case CPP_DOT:
6413     case CPP_DOT_STAR:
6414     case CPP_DEREF:
6415     case CPP_DEREF_STAR:
6416     case CPP_DIV:
6417     case CPP_MOD:
6418     case CPP_LSHIFT:
6419     case CPP_RSHIFT:
6420     case CPP_LESS:
6421     case CPP_GREATER:
6422     case CPP_LESS_EQ:
6423     case CPP_GREATER_EQ:
6424     case CPP_EQ_EQ:
6425     case CPP_NOT_EQ:
6426     case CPP_EQ:
6427     case CPP_MULT_EQ:
6428     case CPP_DIV_EQ:
6429     case CPP_MOD_EQ:
6430     case CPP_PLUS_EQ:
6431     case CPP_MINUS_EQ:
6432     case CPP_RSHIFT_EQ:
6433     case CPP_LSHIFT_EQ:
6434     case CPP_AND_EQ:
6435     case CPP_XOR_EQ:
6436     case CPP_OR_EQ:
6437     case CPP_XOR:
6438     case CPP_OR:
6439     case CPP_OR_OR:
6440     case CPP_EOF:
6441       return false;
6442
6443       /* '[' may start a primary-expression in obj-c++.  */
6444     case CPP_OPEN_SQUARE:
6445       return c_dialect_objc ();
6446
6447     default:
6448       return true;
6449     }
6450 }
6451
6452 /* Parse a cast-expression.
6453
6454    cast-expression:
6455      unary-expression
6456      ( type-id ) cast-expression
6457
6458    ADDRESS_P is true iff the unary-expression is appearing as the
6459    operand of the `&' operator.   CAST_P is true if this expression is
6460    the target of a cast.
6461
6462    Returns a representation of the expression.  */
6463
6464 static tree
6465 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p,
6466                            cp_id_kind * pidk)
6467 {
6468   /* If it's a `(', then we might be looking at a cast.  */
6469   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
6470     {
6471       tree type = NULL_TREE;
6472       tree expr = NULL_TREE;
6473       bool compound_literal_p;
6474       const char *saved_message;
6475
6476       /* There's no way to know yet whether or not this is a cast.
6477          For example, `(int (3))' is a unary-expression, while `(int)
6478          3' is a cast.  So, we resort to parsing tentatively.  */
6479       cp_parser_parse_tentatively (parser);
6480       /* Types may not be defined in a cast.  */
6481       saved_message = parser->type_definition_forbidden_message;
6482       parser->type_definition_forbidden_message
6483         = G_("types may not be defined in casts");
6484       /* Consume the `('.  */
6485       cp_lexer_consume_token (parser->lexer);
6486       /* A very tricky bit is that `(struct S) { 3 }' is a
6487          compound-literal (which we permit in C++ as an extension).
6488          But, that construct is not a cast-expression -- it is a
6489          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
6490          is legal; if the compound-literal were a cast-expression,
6491          you'd need an extra set of parentheses.)  But, if we parse
6492          the type-id, and it happens to be a class-specifier, then we
6493          will commit to the parse at that point, because we cannot
6494          undo the action that is done when creating a new class.  So,
6495          then we cannot back up and do a postfix-expression.
6496
6497          Therefore, we scan ahead to the closing `)', and check to see
6498          if the token after the `)' is a `{'.  If so, we are not
6499          looking at a cast-expression.
6500
6501          Save tokens so that we can put them back.  */
6502       cp_lexer_save_tokens (parser->lexer);
6503       /* Skip tokens until the next token is a closing parenthesis.
6504          If we find the closing `)', and the next token is a `{', then
6505          we are looking at a compound-literal.  */
6506       compound_literal_p
6507         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
6508                                                   /*consume_paren=*/true)
6509            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
6510       /* Roll back the tokens we skipped.  */
6511       cp_lexer_rollback_tokens (parser->lexer);
6512       /* If we were looking at a compound-literal, simulate an error
6513          so that the call to cp_parser_parse_definitely below will
6514          fail.  */
6515       if (compound_literal_p)
6516         cp_parser_simulate_error (parser);
6517       else
6518         {
6519           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
6520           parser->in_type_id_in_expr_p = true;
6521           /* Look for the type-id.  */
6522           type = cp_parser_type_id (parser);
6523           /* Look for the closing `)'.  */
6524           cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
6525           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
6526         }
6527
6528       /* Restore the saved message.  */
6529       parser->type_definition_forbidden_message = saved_message;
6530
6531       /* At this point this can only be either a cast or a
6532          parenthesized ctor such as `(T ())' that looks like a cast to
6533          function returning T.  */
6534       if (!cp_parser_error_occurred (parser)
6535           && cp_parser_token_starts_cast_expression (cp_lexer_peek_token
6536                                                      (parser->lexer)))
6537         {
6538           cp_parser_parse_definitely (parser);
6539           expr = cp_parser_cast_expression (parser,
6540                                             /*address_p=*/false,
6541                                             /*cast_p=*/true, pidk);
6542
6543           /* Warn about old-style casts, if so requested.  */
6544           if (warn_old_style_cast
6545               && !in_system_header
6546               && !VOID_TYPE_P (type)
6547               && current_lang_name != lang_name_c)
6548             warning (OPT_Wold_style_cast, "use of old-style cast");
6549
6550           /* Only type conversions to integral or enumeration types
6551              can be used in constant-expressions.  */
6552           if (!cast_valid_in_integral_constant_expression_p (type)
6553               && cp_parser_non_integral_constant_expression (parser,
6554                                                              NIC_CAST))
6555             return error_mark_node;
6556
6557           /* Perform the cast.  */
6558           expr = build_c_cast (input_location, type, expr);
6559           return expr;
6560         }
6561       else 
6562         cp_parser_abort_tentative_parse (parser);
6563     }
6564
6565   /* If we get here, then it's not a cast, so it must be a
6566      unary-expression.  */
6567   return cp_parser_unary_expression (parser, address_p, cast_p, pidk);
6568 }
6569
6570 /* Parse a binary expression of the general form:
6571
6572    pm-expression:
6573      cast-expression
6574      pm-expression .* cast-expression
6575      pm-expression ->* cast-expression
6576
6577    multiplicative-expression:
6578      pm-expression
6579      multiplicative-expression * pm-expression
6580      multiplicative-expression / pm-expression
6581      multiplicative-expression % pm-expression
6582
6583    additive-expression:
6584      multiplicative-expression
6585      additive-expression + multiplicative-expression
6586      additive-expression - multiplicative-expression
6587
6588    shift-expression:
6589      additive-expression
6590      shift-expression << additive-expression
6591      shift-expression >> additive-expression
6592
6593    relational-expression:
6594      shift-expression
6595      relational-expression < shift-expression
6596      relational-expression > shift-expression
6597      relational-expression <= shift-expression
6598      relational-expression >= shift-expression
6599
6600   GNU Extension:
6601
6602    relational-expression:
6603      relational-expression <? shift-expression
6604      relational-expression >? shift-expression
6605
6606    equality-expression:
6607      relational-expression
6608      equality-expression == relational-expression
6609      equality-expression != relational-expression
6610
6611    and-expression:
6612      equality-expression
6613      and-expression & equality-expression
6614
6615    exclusive-or-expression:
6616      and-expression
6617      exclusive-or-expression ^ and-expression
6618
6619    inclusive-or-expression:
6620      exclusive-or-expression
6621      inclusive-or-expression | exclusive-or-expression
6622
6623    logical-and-expression:
6624      inclusive-or-expression
6625      logical-and-expression && inclusive-or-expression
6626
6627    logical-or-expression:
6628      logical-and-expression
6629      logical-or-expression || logical-and-expression
6630
6631    All these are implemented with a single function like:
6632
6633    binary-expression:
6634      simple-cast-expression
6635      binary-expression <token> binary-expression
6636
6637    CAST_P is true if this expression is the target of a cast.
6638
6639    The binops_by_token map is used to get the tree codes for each <token> type.
6640    binary-expressions are associated according to a precedence table.  */
6641
6642 #define TOKEN_PRECEDENCE(token)                              \
6643 (((token->type == CPP_GREATER                                \
6644    || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT)) \
6645   && !parser->greater_than_is_operator_p)                    \
6646  ? PREC_NOT_OPERATOR                                         \
6647  : binops_by_token[token->type].prec)
6648
6649 static tree
6650 cp_parser_binary_expression (cp_parser* parser, bool cast_p,
6651                              bool no_toplevel_fold_p,
6652                              enum cp_parser_prec prec,
6653                              cp_id_kind * pidk)
6654 {
6655   cp_parser_expression_stack stack;
6656   cp_parser_expression_stack_entry *sp = &stack[0];
6657   tree lhs, rhs;
6658   cp_token *token;
6659   enum tree_code tree_type, lhs_type, rhs_type;
6660   enum cp_parser_prec new_prec, lookahead_prec;
6661   tree overload;
6662
6663   /* Parse the first expression.  */
6664   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p, pidk);
6665   lhs_type = ERROR_MARK;
6666
6667   for (;;)
6668     {
6669       /* Get an operator token.  */
6670       token = cp_lexer_peek_token (parser->lexer);
6671
6672       if (warn_cxx0x_compat
6673           && token->type == CPP_RSHIFT
6674           && !parser->greater_than_is_operator_p)
6675         {
6676           if (warning_at (token->location, OPT_Wc__0x_compat, 
6677                           "%<>>%> operator will be treated as"
6678                           " two right angle brackets in C++0x"))
6679             inform (token->location,
6680                     "suggest parentheses around %<>>%> expression");
6681         }
6682
6683       new_prec = TOKEN_PRECEDENCE (token);
6684
6685       /* Popping an entry off the stack means we completed a subexpression:
6686          - either we found a token which is not an operator (`>' where it is not
6687            an operator, or prec == PREC_NOT_OPERATOR), in which case popping
6688            will happen repeatedly;
6689          - or, we found an operator which has lower priority.  This is the case
6690            where the recursive descent *ascends*, as in `3 * 4 + 5' after
6691            parsing `3 * 4'.  */
6692       if (new_prec <= prec)
6693         {
6694           if (sp == stack)
6695             break;
6696           else
6697             goto pop;
6698         }
6699
6700      get_rhs:
6701       tree_type = binops_by_token[token->type].tree_type;
6702
6703       /* We used the operator token.  */
6704       cp_lexer_consume_token (parser->lexer);
6705
6706       /* For "false && x" or "true || x", x will never be executed;
6707          disable warnings while evaluating it.  */
6708       if (tree_type == TRUTH_ANDIF_EXPR)
6709         c_inhibit_evaluation_warnings += lhs == truthvalue_false_node;
6710       else if (tree_type == TRUTH_ORIF_EXPR)
6711         c_inhibit_evaluation_warnings += lhs == truthvalue_true_node;
6712
6713       /* Extract another operand.  It may be the RHS of this expression
6714          or the LHS of a new, higher priority expression.  */
6715       rhs = cp_parser_simple_cast_expression (parser);
6716       rhs_type = ERROR_MARK;
6717
6718       /* Get another operator token.  Look up its precedence to avoid
6719          building a useless (immediately popped) stack entry for common
6720          cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
6721       token = cp_lexer_peek_token (parser->lexer);
6722       lookahead_prec = TOKEN_PRECEDENCE (token);
6723       if (lookahead_prec > new_prec)
6724         {
6725           /* ... and prepare to parse the RHS of the new, higher priority
6726              expression.  Since precedence levels on the stack are
6727              monotonically increasing, we do not have to care about
6728              stack overflows.  */
6729           sp->prec = prec;
6730           sp->tree_type = tree_type;
6731           sp->lhs = lhs;
6732           sp->lhs_type = lhs_type;
6733           sp++;
6734           lhs = rhs;
6735           lhs_type = rhs_type;
6736           prec = new_prec;
6737           new_prec = lookahead_prec;
6738           goto get_rhs;
6739
6740          pop:
6741           lookahead_prec = new_prec;
6742           /* If the stack is not empty, we have parsed into LHS the right side
6743              (`4' in the example above) of an expression we had suspended.
6744              We can use the information on the stack to recover the LHS (`3')
6745              from the stack together with the tree code (`MULT_EXPR'), and
6746              the precedence of the higher level subexpression
6747              (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
6748              which will be used to actually build the additive expression.  */
6749           --sp;
6750           prec = sp->prec;
6751           tree_type = sp->tree_type;
6752           rhs = lhs;
6753           rhs_type = lhs_type;
6754           lhs = sp->lhs;
6755           lhs_type = sp->lhs_type;
6756         }
6757
6758       /* Undo the disabling of warnings done above.  */
6759       if (tree_type == TRUTH_ANDIF_EXPR)
6760         c_inhibit_evaluation_warnings -= lhs == truthvalue_false_node;
6761       else if (tree_type == TRUTH_ORIF_EXPR)
6762         c_inhibit_evaluation_warnings -= lhs == truthvalue_true_node;
6763
6764       overload = NULL;
6765       /* ??? Currently we pass lhs_type == ERROR_MARK and rhs_type ==
6766          ERROR_MARK for everything that is not a binary expression.
6767          This makes warn_about_parentheses miss some warnings that
6768          involve unary operators.  For unary expressions we should
6769          pass the correct tree_code unless the unary expression was
6770          surrounded by parentheses.
6771       */
6772       if (no_toplevel_fold_p
6773           && lookahead_prec <= prec
6774           && sp == stack
6775           && TREE_CODE_CLASS (tree_type) == tcc_comparison)
6776         lhs = build2 (tree_type, boolean_type_node, lhs, rhs);
6777       else
6778         lhs = build_x_binary_op (tree_type, lhs, lhs_type, rhs, rhs_type,
6779                                  &overload, tf_warning_or_error);
6780       lhs_type = tree_type;
6781
6782       /* If the binary operator required the use of an overloaded operator,
6783          then this expression cannot be an integral constant-expression.
6784          An overloaded operator can be used even if both operands are
6785          otherwise permissible in an integral constant-expression if at
6786          least one of the operands is of enumeration type.  */
6787
6788       if (overload
6789           && cp_parser_non_integral_constant_expression (parser,
6790                                                          NIC_OVERLOADED))
6791         return error_mark_node;
6792     }
6793
6794   return lhs;
6795 }
6796
6797
6798 /* Parse the `? expression : assignment-expression' part of a
6799    conditional-expression.  The LOGICAL_OR_EXPR is the
6800    logical-or-expression that started the conditional-expression.
6801    Returns a representation of the entire conditional-expression.
6802
6803    This routine is used by cp_parser_assignment_expression.
6804
6805      ? expression : assignment-expression
6806
6807    GNU Extensions:
6808
6809      ? : assignment-expression */
6810
6811 static tree
6812 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
6813 {
6814   tree expr;
6815   tree assignment_expr;
6816   struct cp_token *token;
6817
6818   /* Consume the `?' token.  */
6819   cp_lexer_consume_token (parser->lexer);
6820   token = cp_lexer_peek_token (parser->lexer);
6821   if (cp_parser_allow_gnu_extensions_p (parser)
6822       && token->type == CPP_COLON)
6823     {
6824       pedwarn (token->location, OPT_pedantic, 
6825                "ISO C++ does not allow ?: with omitted middle operand");
6826       /* Implicit true clause.  */
6827       expr = NULL_TREE;
6828       c_inhibit_evaluation_warnings += logical_or_expr == truthvalue_true_node;
6829       warn_for_omitted_condop (token->location, logical_or_expr);
6830     }
6831   else
6832     {
6833       bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
6834       parser->colon_corrects_to_scope_p = false;
6835       /* Parse the expression.  */
6836       c_inhibit_evaluation_warnings += logical_or_expr == truthvalue_false_node;
6837       expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
6838       c_inhibit_evaluation_warnings +=
6839         ((logical_or_expr == truthvalue_true_node)
6840          - (logical_or_expr == truthvalue_false_node));
6841       parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
6842     }
6843
6844   /* The next token should be a `:'.  */
6845   cp_parser_require (parser, CPP_COLON, RT_COLON);
6846   /* Parse the assignment-expression.  */
6847   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
6848   c_inhibit_evaluation_warnings -= logical_or_expr == truthvalue_true_node;
6849
6850   /* Build the conditional-expression.  */
6851   return build_x_conditional_expr (logical_or_expr,
6852                                    expr,
6853                                    assignment_expr,
6854                                    tf_warning_or_error);
6855 }
6856
6857 /* Parse an assignment-expression.
6858
6859    assignment-expression:
6860      conditional-expression
6861      logical-or-expression assignment-operator assignment_expression
6862      throw-expression
6863
6864    CAST_P is true if this expression is the target of a cast.
6865
6866    Returns a representation for the expression.  */
6867
6868 static tree
6869 cp_parser_assignment_expression (cp_parser* parser, bool cast_p,
6870                                  cp_id_kind * pidk)
6871 {
6872   tree expr;
6873
6874   /* If the next token is the `throw' keyword, then we're looking at
6875      a throw-expression.  */
6876   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
6877     expr = cp_parser_throw_expression (parser);
6878   /* Otherwise, it must be that we are looking at a
6879      logical-or-expression.  */
6880   else
6881     {
6882       /* Parse the binary expressions (logical-or-expression).  */
6883       expr = cp_parser_binary_expression (parser, cast_p, false,
6884                                           PREC_NOT_OPERATOR, pidk);
6885       /* If the next token is a `?' then we're actually looking at a
6886          conditional-expression.  */
6887       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
6888         return cp_parser_question_colon_clause (parser, expr);
6889       else
6890         {
6891           enum tree_code assignment_operator;
6892
6893           /* If it's an assignment-operator, we're using the second
6894              production.  */
6895           assignment_operator
6896             = cp_parser_assignment_operator_opt (parser);
6897           if (assignment_operator != ERROR_MARK)
6898             {
6899               bool non_constant_p;
6900
6901               /* Parse the right-hand side of the assignment.  */
6902               tree rhs = cp_parser_initializer_clause (parser, &non_constant_p);
6903
6904               if (BRACE_ENCLOSED_INITIALIZER_P (rhs))
6905                 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6906
6907               /* An assignment may not appear in a
6908                  constant-expression.  */
6909               if (cp_parser_non_integral_constant_expression (parser,
6910                                                               NIC_ASSIGNMENT))
6911                 return error_mark_node;
6912               /* Build the assignment expression.  */
6913               expr = build_x_modify_expr (expr,
6914                                           assignment_operator,
6915                                           rhs,
6916                                           tf_warning_or_error);
6917             }
6918         }
6919     }
6920
6921   return expr;
6922 }
6923
6924 /* Parse an (optional) assignment-operator.
6925
6926    assignment-operator: one of
6927      = *= /= %= += -= >>= <<= &= ^= |=
6928
6929    GNU Extension:
6930
6931    assignment-operator: one of
6932      <?= >?=
6933
6934    If the next token is an assignment operator, the corresponding tree
6935    code is returned, and the token is consumed.  For example, for
6936    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
6937    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
6938    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
6939    operator, ERROR_MARK is returned.  */
6940
6941 static enum tree_code
6942 cp_parser_assignment_operator_opt (cp_parser* parser)
6943 {
6944   enum tree_code op;
6945   cp_token *token;
6946
6947   /* Peek at the next token.  */
6948   token = cp_lexer_peek_token (parser->lexer);
6949
6950   switch (token->type)
6951     {
6952     case CPP_EQ:
6953       op = NOP_EXPR;
6954       break;
6955
6956     case CPP_MULT_EQ:
6957       op = MULT_EXPR;
6958       break;
6959
6960     case CPP_DIV_EQ:
6961       op = TRUNC_DIV_EXPR;
6962       break;
6963
6964     case CPP_MOD_EQ:
6965       op = TRUNC_MOD_EXPR;
6966       break;
6967
6968     case CPP_PLUS_EQ:
6969       op = PLUS_EXPR;
6970       break;
6971
6972     case CPP_MINUS_EQ:
6973       op = MINUS_EXPR;
6974       break;
6975
6976     case CPP_RSHIFT_EQ:
6977       op = RSHIFT_EXPR;
6978       break;
6979
6980     case CPP_LSHIFT_EQ:
6981       op = LSHIFT_EXPR;
6982       break;
6983
6984     case CPP_AND_EQ:
6985       op = BIT_AND_EXPR;
6986       break;
6987
6988     case CPP_XOR_EQ:
6989       op = BIT_XOR_EXPR;
6990       break;
6991
6992     case CPP_OR_EQ:
6993       op = BIT_IOR_EXPR;
6994       break;
6995
6996     default:
6997       /* Nothing else is an assignment operator.  */
6998       op = ERROR_MARK;
6999     }
7000
7001   /* If it was an assignment operator, consume it.  */
7002   if (op != ERROR_MARK)
7003     cp_lexer_consume_token (parser->lexer);
7004
7005   return op;
7006 }
7007
7008 /* Parse an expression.
7009
7010    expression:
7011      assignment-expression
7012      expression , assignment-expression
7013
7014    CAST_P is true if this expression is the target of a cast.
7015
7016    Returns a representation of the expression.  */
7017
7018 static tree
7019 cp_parser_expression (cp_parser* parser, bool cast_p, cp_id_kind * pidk)
7020 {
7021   tree expression = NULL_TREE;
7022
7023   while (true)
7024     {
7025       tree assignment_expression;
7026
7027       /* Parse the next assignment-expression.  */
7028       assignment_expression
7029         = cp_parser_assignment_expression (parser, cast_p, pidk);
7030       /* If this is the first assignment-expression, we can just
7031          save it away.  */
7032       if (!expression)
7033         expression = assignment_expression;
7034       else
7035         expression = build_x_compound_expr (expression,
7036                                             assignment_expression,
7037                                             tf_warning_or_error);
7038       /* If the next token is not a comma, then we are done with the
7039          expression.  */
7040       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
7041         break;
7042       /* Consume the `,'.  */
7043       cp_lexer_consume_token (parser->lexer);
7044       /* A comma operator cannot appear in a constant-expression.  */
7045       if (cp_parser_non_integral_constant_expression (parser, NIC_COMMA))
7046         expression = error_mark_node;
7047     }
7048
7049   return expression;
7050 }
7051
7052 /* Parse a constant-expression.
7053
7054    constant-expression:
7055      conditional-expression
7056
7057   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
7058   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
7059   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
7060   is false, NON_CONSTANT_P should be NULL.  */
7061
7062 static tree
7063 cp_parser_constant_expression (cp_parser* parser,
7064                                bool allow_non_constant_p,
7065                                bool *non_constant_p)
7066 {
7067   bool saved_integral_constant_expression_p;
7068   bool saved_allow_non_integral_constant_expression_p;
7069   bool saved_non_integral_constant_expression_p;
7070   tree expression;
7071
7072   /* It might seem that we could simply parse the
7073      conditional-expression, and then check to see if it were
7074      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
7075      one that the compiler can figure out is constant, possibly after
7076      doing some simplifications or optimizations.  The standard has a
7077      precise definition of constant-expression, and we must honor
7078      that, even though it is somewhat more restrictive.
7079
7080      For example:
7081
7082        int i[(2, 3)];
7083
7084      is not a legal declaration, because `(2, 3)' is not a
7085      constant-expression.  The `,' operator is forbidden in a
7086      constant-expression.  However, GCC's constant-folding machinery
7087      will fold this operation to an INTEGER_CST for `3'.  */
7088
7089   /* Save the old settings.  */
7090   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
7091   saved_allow_non_integral_constant_expression_p
7092     = parser->allow_non_integral_constant_expression_p;
7093   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
7094   /* We are now parsing a constant-expression.  */
7095   parser->integral_constant_expression_p = true;
7096   parser->allow_non_integral_constant_expression_p
7097     = (allow_non_constant_p || cxx_dialect >= cxx0x);
7098   parser->non_integral_constant_expression_p = false;
7099   /* Although the grammar says "conditional-expression", we parse an
7100      "assignment-expression", which also permits "throw-expression"
7101      and the use of assignment operators.  In the case that
7102      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
7103      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
7104      actually essential that we look for an assignment-expression.
7105      For example, cp_parser_initializer_clauses uses this function to
7106      determine whether a particular assignment-expression is in fact
7107      constant.  */
7108   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
7109   /* Restore the old settings.  */
7110   parser->integral_constant_expression_p
7111     = saved_integral_constant_expression_p;
7112   parser->allow_non_integral_constant_expression_p
7113     = saved_allow_non_integral_constant_expression_p;
7114   if (cxx_dialect >= cxx0x)
7115     {
7116       /* Require an rvalue constant expression here; that's what our
7117          callers expect.  Reference constant expressions are handled
7118          separately in e.g. cp_parser_template_argument.  */
7119       bool is_const = potential_rvalue_constant_expression (expression);
7120       parser->non_integral_constant_expression_p = !is_const;
7121       if (!is_const && !allow_non_constant_p)
7122         require_potential_rvalue_constant_expression (expression);
7123     }
7124   if (allow_non_constant_p)
7125     *non_constant_p = parser->non_integral_constant_expression_p;
7126   parser->non_integral_constant_expression_p
7127     = saved_non_integral_constant_expression_p;
7128
7129   return expression;
7130 }
7131
7132 /* Parse __builtin_offsetof.
7133
7134    offsetof-expression:
7135      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
7136
7137    offsetof-member-designator:
7138      id-expression
7139      | offsetof-member-designator "." id-expression
7140      | offsetof-member-designator "[" expression "]"
7141      | offsetof-member-designator "->" id-expression  */
7142
7143 static tree
7144 cp_parser_builtin_offsetof (cp_parser *parser)
7145 {
7146   int save_ice_p, save_non_ice_p;
7147   tree type, expr;
7148   cp_id_kind dummy;
7149   cp_token *token;
7150
7151   /* We're about to accept non-integral-constant things, but will
7152      definitely yield an integral constant expression.  Save and
7153      restore these values around our local parsing.  */
7154   save_ice_p = parser->integral_constant_expression_p;
7155   save_non_ice_p = parser->non_integral_constant_expression_p;
7156
7157   /* Consume the "__builtin_offsetof" token.  */
7158   cp_lexer_consume_token (parser->lexer);
7159   /* Consume the opening `('.  */
7160   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
7161   /* Parse the type-id.  */
7162   type = cp_parser_type_id (parser);
7163   /* Look for the `,'.  */
7164   cp_parser_require (parser, CPP_COMMA, RT_COMMA);
7165   token = cp_lexer_peek_token (parser->lexer);
7166
7167   /* Build the (type *)null that begins the traditional offsetof macro.  */
7168   expr = build_static_cast (build_pointer_type (type), null_pointer_node,
7169                             tf_warning_or_error);
7170
7171   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
7172   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
7173                                                  true, &dummy, token->location);
7174   while (true)
7175     {
7176       token = cp_lexer_peek_token (parser->lexer);
7177       switch (token->type)
7178         {
7179         case CPP_OPEN_SQUARE:
7180           /* offsetof-member-designator "[" expression "]" */
7181           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
7182           break;
7183
7184         case CPP_DEREF:
7185           /* offsetof-member-designator "->" identifier */
7186           expr = grok_array_decl (expr, integer_zero_node);
7187           /* FALLTHRU */
7188
7189         case CPP_DOT:
7190           /* offsetof-member-designator "." identifier */
7191           cp_lexer_consume_token (parser->lexer);
7192           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT,
7193                                                          expr, true, &dummy,
7194                                                          token->location);
7195           break;
7196
7197         case CPP_CLOSE_PAREN:
7198           /* Consume the ")" token.  */
7199           cp_lexer_consume_token (parser->lexer);
7200           goto success;
7201
7202         default:
7203           /* Error.  We know the following require will fail, but
7204              that gives the proper error message.  */
7205           cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7206           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
7207           expr = error_mark_node;
7208           goto failure;
7209         }
7210     }
7211
7212  success:
7213   /* If we're processing a template, we can't finish the semantics yet.
7214      Otherwise we can fold the entire expression now.  */
7215   if (processing_template_decl)
7216     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
7217   else
7218     expr = finish_offsetof (expr);
7219
7220  failure:
7221   parser->integral_constant_expression_p = save_ice_p;
7222   parser->non_integral_constant_expression_p = save_non_ice_p;
7223
7224   return expr;
7225 }
7226
7227 /* Parse a trait expression.
7228
7229    Returns a representation of the expression, the underlying type
7230    of the type at issue when KEYWORD is RID_UNDERLYING_TYPE.  */
7231
7232 static tree
7233 cp_parser_trait_expr (cp_parser* parser, enum rid keyword)
7234 {
7235   cp_trait_kind kind;
7236   tree type1, type2 = NULL_TREE;
7237   bool binary = false;
7238   cp_decl_specifier_seq decl_specs;
7239
7240   switch (keyword)
7241     {
7242     case RID_HAS_NOTHROW_ASSIGN:
7243       kind = CPTK_HAS_NOTHROW_ASSIGN;
7244       break;
7245     case RID_HAS_NOTHROW_CONSTRUCTOR:
7246       kind = CPTK_HAS_NOTHROW_CONSTRUCTOR;
7247       break;
7248     case RID_HAS_NOTHROW_COPY:
7249       kind = CPTK_HAS_NOTHROW_COPY;
7250       break;
7251     case RID_HAS_TRIVIAL_ASSIGN:
7252       kind = CPTK_HAS_TRIVIAL_ASSIGN;
7253       break;
7254     case RID_HAS_TRIVIAL_CONSTRUCTOR:
7255       kind = CPTK_HAS_TRIVIAL_CONSTRUCTOR;
7256       break;
7257     case RID_HAS_TRIVIAL_COPY:
7258       kind = CPTK_HAS_TRIVIAL_COPY;
7259       break;
7260     case RID_HAS_TRIVIAL_DESTRUCTOR:
7261       kind = CPTK_HAS_TRIVIAL_DESTRUCTOR;
7262       break;
7263     case RID_HAS_VIRTUAL_DESTRUCTOR:
7264       kind = CPTK_HAS_VIRTUAL_DESTRUCTOR;
7265       break;
7266     case RID_IS_ABSTRACT:
7267       kind = CPTK_IS_ABSTRACT;
7268       break;
7269     case RID_IS_BASE_OF:
7270       kind = CPTK_IS_BASE_OF;
7271       binary = true;
7272       break;
7273     case RID_IS_CLASS:
7274       kind = CPTK_IS_CLASS;
7275       break;
7276     case RID_IS_CONVERTIBLE_TO:
7277       kind = CPTK_IS_CONVERTIBLE_TO;
7278       binary = true;
7279       break;
7280     case RID_IS_EMPTY:
7281       kind = CPTK_IS_EMPTY;
7282       break;
7283     case RID_IS_ENUM:
7284       kind = CPTK_IS_ENUM;
7285       break;
7286     case RID_IS_LITERAL_TYPE:
7287       kind = CPTK_IS_LITERAL_TYPE;
7288       break;
7289     case RID_IS_POD:
7290       kind = CPTK_IS_POD;
7291       break;
7292     case RID_IS_POLYMORPHIC:
7293       kind = CPTK_IS_POLYMORPHIC;
7294       break;
7295     case RID_IS_STD_LAYOUT:
7296       kind = CPTK_IS_STD_LAYOUT;
7297       break;
7298     case RID_IS_TRIVIAL:
7299       kind = CPTK_IS_TRIVIAL;
7300       break;
7301     case RID_IS_UNION:
7302       kind = CPTK_IS_UNION;
7303       break;
7304     case RID_UNDERLYING_TYPE:
7305       kind = CPTK_UNDERLYING_TYPE;
7306       break;
7307     default:
7308       gcc_unreachable ();
7309     }
7310
7311   /* Consume the token.  */
7312   cp_lexer_consume_token (parser->lexer);
7313
7314   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
7315
7316   type1 = cp_parser_type_id (parser);
7317
7318   if (type1 == error_mark_node)
7319     return error_mark_node;
7320
7321   /* Build a trivial decl-specifier-seq.  */
7322   clear_decl_specs (&decl_specs);
7323   decl_specs.type = type1;
7324
7325   /* Call grokdeclarator to figure out what type this is.  */
7326   type1 = grokdeclarator (NULL, &decl_specs, TYPENAME,
7327                           /*initialized=*/0, /*attrlist=*/NULL);
7328
7329   if (binary)
7330     {
7331       cp_parser_require (parser, CPP_COMMA, RT_COMMA);
7332  
7333       type2 = cp_parser_type_id (parser);
7334
7335       if (type2 == error_mark_node)
7336         return error_mark_node;
7337
7338       /* Build a trivial decl-specifier-seq.  */
7339       clear_decl_specs (&decl_specs);
7340       decl_specs.type = type2;
7341
7342       /* Call grokdeclarator to figure out what type this is.  */
7343       type2 = grokdeclarator (NULL, &decl_specs, TYPENAME,
7344                               /*initialized=*/0, /*attrlist=*/NULL);
7345     }
7346
7347   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7348
7349   /* Complete the trait expression, which may mean either processing
7350      the trait expr now or saving it for template instantiation.  */
7351   return kind != CPTK_UNDERLYING_TYPE
7352     ? finish_trait_expr (kind, type1, type2)
7353     : finish_underlying_type (type1);
7354 }
7355
7356 /* Lambdas that appear in variable initializer or default argument scope
7357    get that in their mangling, so we need to record it.  We might as well
7358    use the count for function and namespace scopes as well.  */
7359 static GTY(()) tree lambda_scope;
7360 static GTY(()) int lambda_count;
7361 typedef struct GTY(()) tree_int
7362 {
7363   tree t;
7364   int i;
7365 } tree_int;
7366 DEF_VEC_O(tree_int);
7367 DEF_VEC_ALLOC_O(tree_int,gc);
7368 static GTY(()) VEC(tree_int,gc) *lambda_scope_stack;
7369
7370 static void
7371 start_lambda_scope (tree decl)
7372 {
7373   tree_int ti;
7374   gcc_assert (decl);
7375   /* Once we're inside a function, we ignore other scopes and just push
7376      the function again so that popping works properly.  */
7377   if (current_function_decl && TREE_CODE (decl) != FUNCTION_DECL)
7378     decl = current_function_decl;
7379   ti.t = lambda_scope;
7380   ti.i = lambda_count;
7381   VEC_safe_push (tree_int, gc, lambda_scope_stack, &ti);
7382   if (lambda_scope != decl)
7383     {
7384       /* Don't reset the count if we're still in the same function.  */
7385       lambda_scope = decl;
7386       lambda_count = 0;
7387     }
7388 }
7389
7390 static void
7391 record_lambda_scope (tree lambda)
7392 {
7393   LAMBDA_EXPR_EXTRA_SCOPE (lambda) = lambda_scope;
7394   LAMBDA_EXPR_DISCRIMINATOR (lambda) = lambda_count++;
7395 }
7396
7397 static void
7398 finish_lambda_scope (void)
7399 {
7400   tree_int *p = VEC_last (tree_int, lambda_scope_stack);
7401   if (lambda_scope != p->t)
7402     {
7403       lambda_scope = p->t;
7404       lambda_count = p->i;
7405     }
7406   VEC_pop (tree_int, lambda_scope_stack);
7407 }
7408
7409 /* Parse a lambda expression.
7410
7411    lambda-expression:
7412      lambda-introducer lambda-declarator [opt] compound-statement
7413
7414    Returns a representation of the expression.  */
7415
7416 static tree
7417 cp_parser_lambda_expression (cp_parser* parser)
7418 {
7419   tree lambda_expr = build_lambda_expr ();
7420   tree type;
7421   bool ok;
7422
7423   LAMBDA_EXPR_LOCATION (lambda_expr)
7424     = cp_lexer_peek_token (parser->lexer)->location;
7425
7426   if (cp_unevaluated_operand)
7427     error_at (LAMBDA_EXPR_LOCATION (lambda_expr),
7428               "lambda-expression in unevaluated context");
7429
7430   /* We may be in the middle of deferred access check.  Disable
7431      it now.  */
7432   push_deferring_access_checks (dk_no_deferred);
7433
7434   cp_parser_lambda_introducer (parser, lambda_expr);
7435
7436   type = begin_lambda_type (lambda_expr);
7437
7438   record_lambda_scope (lambda_expr);
7439
7440   /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
7441   determine_visibility (TYPE_NAME (type));
7442
7443   /* Now that we've started the type, add the capture fields for any
7444      explicit captures.  */
7445   register_capture_members (LAMBDA_EXPR_CAPTURE_LIST (lambda_expr));
7446
7447   {
7448     /* Inside the class, surrounding template-parameter-lists do not apply.  */
7449     unsigned int saved_num_template_parameter_lists
7450         = parser->num_template_parameter_lists;
7451     unsigned char in_statement = parser->in_statement;
7452     bool in_switch_statement_p = parser->in_switch_statement_p;
7453
7454     parser->num_template_parameter_lists = 0;
7455     parser->in_statement = 0;
7456     parser->in_switch_statement_p = false;
7457
7458     /* By virtue of defining a local class, a lambda expression has access to
7459        the private variables of enclosing classes.  */
7460
7461     ok = cp_parser_lambda_declarator_opt (parser, lambda_expr);
7462
7463     if (ok)
7464       cp_parser_lambda_body (parser, lambda_expr);
7465     else if (cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
7466       cp_parser_skip_to_end_of_block_or_statement (parser);
7467
7468     /* The capture list was built up in reverse order; fix that now.  */
7469     {
7470       tree newlist = NULL_TREE;
7471       tree elt, next;
7472
7473       for (elt = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
7474            elt; elt = next)
7475         {
7476           next = TREE_CHAIN (elt);
7477           TREE_CHAIN (elt) = newlist;
7478           newlist = elt;
7479         }
7480       LAMBDA_EXPR_CAPTURE_LIST (lambda_expr) = newlist;
7481     }
7482
7483     if (ok)
7484       maybe_add_lambda_conv_op (type);
7485
7486     type = finish_struct (type, /*attributes=*/NULL_TREE);
7487
7488     parser->num_template_parameter_lists = saved_num_template_parameter_lists;
7489     parser->in_statement = in_statement;
7490     parser->in_switch_statement_p = in_switch_statement_p;
7491   }
7492
7493   pop_deferring_access_checks ();
7494
7495   /* This field is only used during parsing of the lambda.  */
7496   LAMBDA_EXPR_THIS_CAPTURE (lambda_expr) = NULL_TREE;
7497
7498   /* This lambda shouldn't have any proxies left at this point.  */
7499   gcc_assert (LAMBDA_EXPR_PENDING_PROXIES (lambda_expr) == NULL);
7500   /* And now that we're done, push proxies for an enclosing lambda.  */
7501   insert_pending_capture_proxies ();
7502
7503   if (ok)
7504     return build_lambda_object (lambda_expr);
7505   else
7506     return error_mark_node;
7507 }
7508
7509 /* Parse the beginning of a lambda expression.
7510
7511    lambda-introducer:
7512      [ lambda-capture [opt] ]
7513
7514    LAMBDA_EXPR is the current representation of the lambda expression.  */
7515
7516 static void
7517 cp_parser_lambda_introducer (cp_parser* parser, tree lambda_expr)
7518 {
7519   /* Need commas after the first capture.  */
7520   bool first = true;
7521
7522   /* Eat the leading `['.  */
7523   cp_parser_require (parser, CPP_OPEN_SQUARE, RT_OPEN_SQUARE);
7524
7525   /* Record default capture mode.  "[&" "[=" "[&," "[=,"  */
7526   if (cp_lexer_next_token_is (parser->lexer, CPP_AND)
7527       && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_NAME)
7528     LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) = CPLD_REFERENCE;
7529   else if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
7530     LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) = CPLD_COPY;
7531
7532   if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) != CPLD_NONE)
7533     {
7534       cp_lexer_consume_token (parser->lexer);
7535       first = false;
7536     }
7537
7538   while (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_SQUARE))
7539     {
7540       cp_token* capture_token;
7541       tree capture_id;
7542       tree capture_init_expr;
7543       cp_id_kind idk = CP_ID_KIND_NONE;
7544       bool explicit_init_p = false;
7545
7546       enum capture_kind_type
7547       {
7548         BY_COPY,
7549         BY_REFERENCE
7550       };
7551       enum capture_kind_type capture_kind = BY_COPY;
7552
7553       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
7554         {
7555           error ("expected end of capture-list");
7556           return;
7557         }
7558
7559       if (first)
7560         first = false;
7561       else
7562         cp_parser_require (parser, CPP_COMMA, RT_COMMA);
7563
7564       /* Possibly capture `this'.  */
7565       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THIS))
7566         {
7567           location_t loc = cp_lexer_peek_token (parser->lexer)->location;
7568           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) == CPLD_COPY)
7569             pedwarn (loc, 0, "explicit by-copy capture of %<this%> redundant "
7570                      "with by-copy capture default");
7571           cp_lexer_consume_token (parser->lexer);
7572           add_capture (lambda_expr,
7573                        /*id=*/this_identifier,
7574                        /*initializer=*/finish_this_expr(),
7575                        /*by_reference_p=*/false,
7576                        explicit_init_p);
7577           continue;
7578         }
7579
7580       /* Remember whether we want to capture as a reference or not.  */
7581       if (cp_lexer_next_token_is (parser->lexer, CPP_AND))
7582         {
7583           capture_kind = BY_REFERENCE;
7584           cp_lexer_consume_token (parser->lexer);
7585         }
7586
7587       /* Get the identifier.  */
7588       capture_token = cp_lexer_peek_token (parser->lexer);
7589       capture_id = cp_parser_identifier (parser);
7590
7591       if (capture_id == error_mark_node)
7592         /* Would be nice to have a cp_parser_skip_to_closing_x for general
7593            delimiters, but I modified this to stop on unnested ']' as well.  It
7594            was already changed to stop on unnested '}', so the
7595            "closing_parenthesis" name is no more misleading with my change.  */
7596         {
7597           cp_parser_skip_to_closing_parenthesis (parser,
7598                                                  /*recovering=*/true,
7599                                                  /*or_comma=*/true,
7600                                                  /*consume_paren=*/true);
7601           break;
7602         }
7603
7604       /* Find the initializer for this capture.  */
7605       if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
7606         {
7607           /* An explicit expression exists.  */
7608           cp_lexer_consume_token (parser->lexer);
7609           pedwarn (input_location, OPT_pedantic,
7610                    "ISO C++ does not allow initializers "
7611                    "in lambda expression capture lists");
7612           capture_init_expr = cp_parser_assignment_expression (parser,
7613                                                                /*cast_p=*/true,
7614                                                                &idk);
7615           explicit_init_p = true;
7616         }
7617       else
7618         {
7619           const char* error_msg;
7620
7621           /* Turn the identifier into an id-expression.  */
7622           capture_init_expr
7623             = cp_parser_lookup_name
7624                 (parser,
7625                  capture_id,
7626                  none_type,
7627                  /*is_template=*/false,
7628                  /*is_namespace=*/false,
7629                  /*check_dependency=*/true,
7630                  /*ambiguous_decls=*/NULL,
7631                  capture_token->location);
7632
7633           capture_init_expr
7634             = finish_id_expression
7635                 (capture_id,
7636                  capture_init_expr,
7637                  parser->scope,
7638                  &idk,
7639                  /*integral_constant_expression_p=*/false,
7640                  /*allow_non_integral_constant_expression_p=*/false,
7641                  /*non_integral_constant_expression_p=*/NULL,
7642                  /*template_p=*/false,
7643                  /*done=*/true,
7644                  /*address_p=*/false,
7645                  /*template_arg_p=*/false,
7646                  &error_msg,
7647                  capture_token->location);
7648         }
7649
7650       if (TREE_CODE (capture_init_expr) == IDENTIFIER_NODE)
7651         capture_init_expr
7652           = unqualified_name_lookup_error (capture_init_expr);
7653
7654       if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) != CPLD_NONE
7655           && !explicit_init_p)
7656         {
7657           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) == CPLD_COPY
7658               && capture_kind == BY_COPY)
7659             pedwarn (capture_token->location, 0, "explicit by-copy capture "
7660                      "of %qD redundant with by-copy capture default",
7661                      capture_id);
7662           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) == CPLD_REFERENCE
7663               && capture_kind == BY_REFERENCE)
7664             pedwarn (capture_token->location, 0, "explicit by-reference "
7665                      "capture of %qD redundant with by-reference capture "
7666                      "default", capture_id);
7667         }
7668
7669       add_capture (lambda_expr,
7670                    capture_id,
7671                    capture_init_expr,
7672                    /*by_reference_p=*/capture_kind == BY_REFERENCE,
7673                    explicit_init_p);
7674     }
7675
7676   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
7677 }
7678
7679 /* Parse the (optional) middle of a lambda expression.
7680
7681    lambda-declarator:
7682      ( parameter-declaration-clause [opt] )
7683        attribute-specifier [opt]
7684        mutable [opt]
7685        exception-specification [opt]
7686        lambda-return-type-clause [opt]
7687
7688    LAMBDA_EXPR is the current representation of the lambda expression.  */
7689
7690 static bool
7691 cp_parser_lambda_declarator_opt (cp_parser* parser, tree lambda_expr)
7692 {
7693   /* 5.1.1.4 of the standard says:
7694        If a lambda-expression does not include a lambda-declarator, it is as if
7695        the lambda-declarator were ().
7696      This means an empty parameter list, no attributes, and no exception
7697      specification.  */
7698   tree param_list = void_list_node;
7699   tree attributes = NULL_TREE;
7700   tree exception_spec = NULL_TREE;
7701   tree t;
7702
7703   /* The lambda-declarator is optional, but must begin with an opening
7704      parenthesis if present.  */
7705   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
7706     {
7707       cp_lexer_consume_token (parser->lexer);
7708
7709       begin_scope (sk_function_parms, /*entity=*/NULL_TREE);
7710
7711       /* Parse parameters.  */
7712       param_list = cp_parser_parameter_declaration_clause (parser);
7713
7714       /* Default arguments shall not be specified in the
7715          parameter-declaration-clause of a lambda-declarator.  */
7716       for (t = param_list; t; t = TREE_CHAIN (t))
7717         if (TREE_PURPOSE (t))
7718           pedwarn (DECL_SOURCE_LOCATION (TREE_VALUE (t)), OPT_pedantic,
7719                    "default argument specified for lambda parameter");
7720
7721       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7722
7723       attributes = cp_parser_attributes_opt (parser);
7724
7725       /* Parse optional `mutable' keyword.  */
7726       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_MUTABLE))
7727         {
7728           cp_lexer_consume_token (parser->lexer);
7729           LAMBDA_EXPR_MUTABLE_P (lambda_expr) = 1;
7730         }
7731
7732       /* Parse optional exception specification.  */
7733       exception_spec = cp_parser_exception_specification_opt (parser);
7734
7735       /* Parse optional trailing return type.  */
7736       if (cp_lexer_next_token_is (parser->lexer, CPP_DEREF))
7737         {
7738           cp_lexer_consume_token (parser->lexer);
7739           LAMBDA_EXPR_RETURN_TYPE (lambda_expr) = cp_parser_type_id (parser);
7740         }
7741
7742       /* The function parameters must be in scope all the way until after the
7743          trailing-return-type in case of decltype.  */
7744       for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
7745         pop_binding (DECL_NAME (t), t);
7746
7747       leave_scope ();
7748     }
7749
7750   /* Create the function call operator.
7751
7752      Messing with declarators like this is no uglier than building up the
7753      FUNCTION_DECL by hand, and this is less likely to get out of sync with
7754      other code.  */
7755   {
7756     cp_decl_specifier_seq return_type_specs;
7757     cp_declarator* declarator;
7758     tree fco;
7759     int quals;
7760     void *p;
7761
7762     clear_decl_specs (&return_type_specs);
7763     if (LAMBDA_EXPR_RETURN_TYPE (lambda_expr))
7764       return_type_specs.type = LAMBDA_EXPR_RETURN_TYPE (lambda_expr);
7765     else
7766       /* Maybe we will deduce the return type later, but we can use void
7767          as a placeholder return type anyways.  */
7768       return_type_specs.type = void_type_node;
7769
7770     p = obstack_alloc (&declarator_obstack, 0);
7771
7772     declarator = make_id_declarator (NULL_TREE, ansi_opname (CALL_EXPR),
7773                                      sfk_none);
7774
7775     quals = (LAMBDA_EXPR_MUTABLE_P (lambda_expr)
7776              ? TYPE_UNQUALIFIED : TYPE_QUAL_CONST);
7777     declarator = make_call_declarator (declarator, param_list, quals,
7778                                        VIRT_SPEC_UNSPECIFIED,
7779                                        exception_spec,
7780                                        /*late_return_type=*/NULL_TREE);
7781     declarator->id_loc = LAMBDA_EXPR_LOCATION (lambda_expr);
7782
7783     fco = grokmethod (&return_type_specs,
7784                       declarator,
7785                       attributes);
7786     if (fco != error_mark_node)
7787       {
7788         DECL_INITIALIZED_IN_CLASS_P (fco) = 1;
7789         DECL_ARTIFICIAL (fco) = 1;
7790         /* Give the object parameter a different name.  */
7791         DECL_NAME (DECL_ARGUMENTS (fco)) = get_identifier ("__closure");
7792       }
7793
7794     finish_member_declaration (fco);
7795
7796     obstack_free (&declarator_obstack, p);
7797
7798     return (fco != error_mark_node);
7799   }
7800 }
7801
7802 /* Parse the body of a lambda expression, which is simply
7803
7804    compound-statement
7805
7806    but which requires special handling.
7807    LAMBDA_EXPR is the current representation of the lambda expression.  */
7808
7809 static void
7810 cp_parser_lambda_body (cp_parser* parser, tree lambda_expr)
7811 {
7812   bool nested = (current_function_decl != NULL_TREE);
7813   bool local_variables_forbidden_p = parser->local_variables_forbidden_p;
7814   if (nested)
7815     push_function_context ();
7816   else
7817     /* Still increment function_depth so that we don't GC in the
7818        middle of an expression.  */
7819     ++function_depth;
7820   /* Clear this in case we're in the middle of a default argument.  */
7821   parser->local_variables_forbidden_p = false;
7822
7823   /* Finish the function call operator
7824      - class_specifier
7825      + late_parsing_for_member
7826      + function_definition_after_declarator
7827      + ctor_initializer_opt_and_function_body  */
7828   {
7829     tree fco = lambda_function (lambda_expr);
7830     tree body;
7831     bool done = false;
7832     tree compound_stmt;
7833     tree cap;
7834
7835     /* Let the front end know that we are going to be defining this
7836        function.  */
7837     start_preparsed_function (fco,
7838                               NULL_TREE,
7839                               SF_PRE_PARSED | SF_INCLASS_INLINE);
7840
7841     start_lambda_scope (fco);
7842     body = begin_function_body ();
7843
7844     if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
7845       goto out;
7846
7847     /* Push the proxies for any explicit captures.  */
7848     for (cap = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr); cap;
7849          cap = TREE_CHAIN (cap))
7850       build_capture_proxy (TREE_PURPOSE (cap));
7851
7852     compound_stmt = begin_compound_stmt (0);
7853
7854     /* 5.1.1.4 of the standard says:
7855          If a lambda-expression does not include a trailing-return-type, it
7856          is as if the trailing-return-type denotes the following type:
7857           * if the compound-statement is of the form
7858                { return attribute-specifier [opt] expression ; }
7859              the type of the returned expression after lvalue-to-rvalue
7860              conversion (_conv.lval_ 4.1), array-to-pointer conversion
7861              (_conv.array_ 4.2), and function-to-pointer conversion
7862              (_conv.func_ 4.3);
7863           * otherwise, void.  */
7864
7865     /* In a lambda that has neither a lambda-return-type-clause
7866        nor a deducible form, errors should be reported for return statements
7867        in the body.  Since we used void as the placeholder return type, parsing
7868        the body as usual will give such desired behavior.  */
7869     if (!LAMBDA_EXPR_RETURN_TYPE (lambda_expr)
7870         && cp_lexer_peek_nth_token (parser->lexer, 1)->keyword == RID_RETURN
7871         && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SEMICOLON)
7872       {
7873         tree expr = NULL_TREE;
7874         cp_id_kind idk = CP_ID_KIND_NONE;
7875
7876         /* Parse tentatively in case there's more after the initial return
7877            statement.  */
7878         cp_parser_parse_tentatively (parser);
7879
7880         cp_parser_require_keyword (parser, RID_RETURN, RT_RETURN);
7881
7882         expr = cp_parser_expression (parser, /*cast_p=*/false, &idk);
7883
7884         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
7885         cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
7886
7887         if (cp_parser_parse_definitely (parser))
7888           {
7889             apply_lambda_return_type (lambda_expr, lambda_return_type (expr));
7890
7891             /* Will get error here if type not deduced yet.  */
7892             finish_return_stmt (expr);
7893
7894             done = true;
7895           }
7896       }
7897
7898     if (!done)
7899       {
7900         if (!LAMBDA_EXPR_RETURN_TYPE (lambda_expr))
7901           LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda_expr) = true;
7902         while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
7903           cp_parser_label_declaration (parser);
7904         cp_parser_statement_seq_opt (parser, NULL_TREE);
7905         cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
7906         LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda_expr) = false;
7907       }
7908
7909     finish_compound_stmt (compound_stmt);
7910
7911   out:
7912     finish_function_body (body);
7913     finish_lambda_scope ();
7914
7915     /* Finish the function and generate code for it if necessary.  */
7916     expand_or_defer_fn (finish_function (/*inline*/2));
7917   }
7918
7919   parser->local_variables_forbidden_p = local_variables_forbidden_p;
7920   if (nested)
7921     pop_function_context();
7922   else
7923     --function_depth;
7924 }
7925
7926 /* Statements [gram.stmt.stmt]  */
7927
7928 /* Parse a statement.
7929
7930    statement:
7931      labeled-statement
7932      expression-statement
7933      compound-statement
7934      selection-statement
7935      iteration-statement
7936      jump-statement
7937      declaration-statement
7938      try-block
7939
7940   IN_COMPOUND is true when the statement is nested inside a
7941   cp_parser_compound_statement; this matters for certain pragmas.
7942
7943   If IF_P is not NULL, *IF_P is set to indicate whether the statement
7944   is a (possibly labeled) if statement which is not enclosed in braces
7945   and has an else clause.  This is used to implement -Wparentheses.  */
7946
7947 static void
7948 cp_parser_statement (cp_parser* parser, tree in_statement_expr,
7949                      bool in_compound, bool *if_p)
7950 {
7951   tree statement;
7952   cp_token *token;
7953   location_t statement_location;
7954
7955  restart:
7956   if (if_p != NULL)
7957     *if_p = false;
7958   /* There is no statement yet.  */
7959   statement = NULL_TREE;
7960   /* Peek at the next token.  */
7961   token = cp_lexer_peek_token (parser->lexer);
7962   /* Remember the location of the first token in the statement.  */
7963   statement_location = token->location;
7964   /* If this is a keyword, then that will often determine what kind of
7965      statement we have.  */
7966   if (token->type == CPP_KEYWORD)
7967     {
7968       enum rid keyword = token->keyword;
7969
7970       switch (keyword)
7971         {
7972         case RID_CASE:
7973         case RID_DEFAULT:
7974           /* Looks like a labeled-statement with a case label.
7975              Parse the label, and then use tail recursion to parse
7976              the statement.  */
7977           cp_parser_label_for_labeled_statement (parser);
7978           goto restart;
7979
7980         case RID_IF:
7981         case RID_SWITCH:
7982           statement = cp_parser_selection_statement (parser, if_p);
7983           break;
7984
7985         case RID_WHILE:
7986         case RID_DO:
7987         case RID_FOR:
7988           statement = cp_parser_iteration_statement (parser);
7989           break;
7990
7991         case RID_BREAK:
7992         case RID_CONTINUE:
7993         case RID_RETURN:
7994         case RID_GOTO:
7995           statement = cp_parser_jump_statement (parser);
7996           break;
7997
7998           /* Objective-C++ exception-handling constructs.  */
7999         case RID_AT_TRY:
8000         case RID_AT_CATCH:
8001         case RID_AT_FINALLY:
8002         case RID_AT_SYNCHRONIZED:
8003         case RID_AT_THROW:
8004           statement = cp_parser_objc_statement (parser);
8005           break;
8006
8007         case RID_TRY:
8008           statement = cp_parser_try_block (parser);
8009           break;
8010
8011         case RID_NAMESPACE:
8012           /* This must be a namespace alias definition.  */
8013           cp_parser_declaration_statement (parser);
8014           return;
8015           
8016         default:
8017           /* It might be a keyword like `int' that can start a
8018              declaration-statement.  */
8019           break;
8020         }
8021     }
8022   else if (token->type == CPP_NAME)
8023     {
8024       /* If the next token is a `:', then we are looking at a
8025          labeled-statement.  */
8026       token = cp_lexer_peek_nth_token (parser->lexer, 2);
8027       if (token->type == CPP_COLON)
8028         {
8029           /* Looks like a labeled-statement with an ordinary label.
8030              Parse the label, and then use tail recursion to parse
8031              the statement.  */
8032           cp_parser_label_for_labeled_statement (parser);
8033           goto restart;
8034         }
8035     }
8036   /* Anything that starts with a `{' must be a compound-statement.  */
8037   else if (token->type == CPP_OPEN_BRACE)
8038     statement = cp_parser_compound_statement (parser, NULL, false, false);
8039   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
8040      a statement all its own.  */
8041   else if (token->type == CPP_PRAGMA)
8042     {
8043       /* Only certain OpenMP pragmas are attached to statements, and thus
8044          are considered statements themselves.  All others are not.  In
8045          the context of a compound, accept the pragma as a "statement" and
8046          return so that we can check for a close brace.  Otherwise we
8047          require a real statement and must go back and read one.  */
8048       if (in_compound)
8049         cp_parser_pragma (parser, pragma_compound);
8050       else if (!cp_parser_pragma (parser, pragma_stmt))
8051         goto restart;
8052       return;
8053     }
8054   else if (token->type == CPP_EOF)
8055     {
8056       cp_parser_error (parser, "expected statement");
8057       return;
8058     }
8059
8060   /* Everything else must be a declaration-statement or an
8061      expression-statement.  Try for the declaration-statement
8062      first, unless we are looking at a `;', in which case we know that
8063      we have an expression-statement.  */
8064   if (!statement)
8065     {
8066       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8067         {
8068           cp_parser_parse_tentatively (parser);
8069           /* Try to parse the declaration-statement.  */
8070           cp_parser_declaration_statement (parser);
8071           /* If that worked, we're done.  */
8072           if (cp_parser_parse_definitely (parser))
8073             return;
8074         }
8075       /* Look for an expression-statement instead.  */
8076       statement = cp_parser_expression_statement (parser, in_statement_expr);
8077     }
8078
8079   /* Set the line number for the statement.  */
8080   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
8081     SET_EXPR_LOCATION (statement, statement_location);
8082 }
8083
8084 /* Parse the label for a labeled-statement, i.e.
8085
8086    identifier :
8087    case constant-expression :
8088    default :
8089
8090    GNU Extension:
8091    case constant-expression ... constant-expression : statement
8092
8093    When a label is parsed without errors, the label is added to the
8094    parse tree by the finish_* functions, so this function doesn't
8095    have to return the label.  */
8096
8097 static void
8098 cp_parser_label_for_labeled_statement (cp_parser* parser)
8099 {
8100   cp_token *token;
8101   tree label = NULL_TREE;
8102   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
8103
8104   /* The next token should be an identifier.  */
8105   token = cp_lexer_peek_token (parser->lexer);
8106   if (token->type != CPP_NAME
8107       && token->type != CPP_KEYWORD)
8108     {
8109       cp_parser_error (parser, "expected labeled-statement");
8110       return;
8111     }
8112
8113   parser->colon_corrects_to_scope_p = false;
8114   switch (token->keyword)
8115     {
8116     case RID_CASE:
8117       {
8118         tree expr, expr_hi;
8119         cp_token *ellipsis;
8120
8121         /* Consume the `case' token.  */
8122         cp_lexer_consume_token (parser->lexer);
8123         /* Parse the constant-expression.  */
8124         expr = cp_parser_constant_expression (parser,
8125                                               /*allow_non_constant_p=*/false,
8126                                               NULL);
8127
8128         ellipsis = cp_lexer_peek_token (parser->lexer);
8129         if (ellipsis->type == CPP_ELLIPSIS)
8130           {
8131             /* Consume the `...' token.  */
8132             cp_lexer_consume_token (parser->lexer);
8133             expr_hi =
8134               cp_parser_constant_expression (parser,
8135                                              /*allow_non_constant_p=*/false,
8136                                              NULL);
8137             /* We don't need to emit warnings here, as the common code
8138                will do this for us.  */
8139           }
8140         else
8141           expr_hi = NULL_TREE;
8142
8143         if (parser->in_switch_statement_p)
8144           finish_case_label (token->location, expr, expr_hi);
8145         else
8146           error_at (token->location,
8147                     "case label %qE not within a switch statement",
8148                     expr);
8149       }
8150       break;
8151
8152     case RID_DEFAULT:
8153       /* Consume the `default' token.  */
8154       cp_lexer_consume_token (parser->lexer);
8155
8156       if (parser->in_switch_statement_p)
8157         finish_case_label (token->location, NULL_TREE, NULL_TREE);
8158       else
8159         error_at (token->location, "case label not within a switch statement");
8160       break;
8161
8162     default:
8163       /* Anything else must be an ordinary label.  */
8164       label = finish_label_stmt (cp_parser_identifier (parser));
8165       break;
8166     }
8167
8168   /* Require the `:' token.  */
8169   cp_parser_require (parser, CPP_COLON, RT_COLON);
8170
8171   /* An ordinary label may optionally be followed by attributes.
8172      However, this is only permitted if the attributes are then
8173      followed by a semicolon.  This is because, for backward
8174      compatibility, when parsing
8175        lab: __attribute__ ((unused)) int i;
8176      we want the attribute to attach to "i", not "lab".  */
8177   if (label != NULL_TREE
8178       && cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
8179     {
8180       tree attrs;
8181
8182       cp_parser_parse_tentatively (parser);
8183       attrs = cp_parser_attributes_opt (parser);
8184       if (attrs == NULL_TREE
8185           || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8186         cp_parser_abort_tentative_parse (parser);
8187       else if (!cp_parser_parse_definitely (parser))
8188         ;
8189       else
8190         cplus_decl_attributes (&label, attrs, 0);
8191     }
8192
8193   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
8194 }
8195
8196 /* Parse an expression-statement.
8197
8198    expression-statement:
8199      expression [opt] ;
8200
8201    Returns the new EXPR_STMT -- or NULL_TREE if the expression
8202    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
8203    indicates whether this expression-statement is part of an
8204    expression statement.  */
8205
8206 static tree
8207 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
8208 {
8209   tree statement = NULL_TREE;
8210   cp_token *token = cp_lexer_peek_token (parser->lexer);
8211
8212   /* If the next token is a ';', then there is no expression
8213      statement.  */
8214   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8215     statement = cp_parser_expression (parser, /*cast_p=*/false, NULL);
8216
8217   /* Give a helpful message for "A<T>::type t;" and the like.  */
8218   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
8219       && !cp_parser_uncommitted_to_tentative_parse_p (parser))
8220     {
8221       if (TREE_CODE (statement) == SCOPE_REF)
8222         error_at (token->location, "need %<typename%> before %qE because "
8223                   "%qT is a dependent scope",
8224                   statement, TREE_OPERAND (statement, 0));
8225       else if (is_overloaded_fn (statement)
8226                && DECL_CONSTRUCTOR_P (get_first_fn (statement)))
8227         {
8228           /* A::A a; */
8229           tree fn = get_first_fn (statement);
8230           error_at (token->location,
8231                     "%<%T::%D%> names the constructor, not the type",
8232                     DECL_CONTEXT (fn), DECL_NAME (fn));
8233         }
8234     }
8235
8236   /* Consume the final `;'.  */
8237   cp_parser_consume_semicolon_at_end_of_statement (parser);
8238
8239   if (in_statement_expr
8240       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
8241     /* This is the final expression statement of a statement
8242        expression.  */
8243     statement = finish_stmt_expr_expr (statement, in_statement_expr);
8244   else if (statement)
8245     statement = finish_expr_stmt (statement);
8246   else
8247     finish_stmt ();
8248
8249   return statement;
8250 }
8251
8252 /* Parse a compound-statement.
8253
8254    compound-statement:
8255      { statement-seq [opt] }
8256
8257    GNU extension:
8258
8259    compound-statement:
8260      { label-declaration-seq [opt] statement-seq [opt] }
8261
8262    label-declaration-seq:
8263      label-declaration
8264      label-declaration-seq label-declaration
8265
8266    Returns a tree representing the statement.  */
8267
8268 static tree
8269 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
8270                               bool in_try, bool function_body)
8271 {
8272   tree compound_stmt;
8273
8274   /* Consume the `{'.  */
8275   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
8276     return error_mark_node;
8277   if (DECL_DECLARED_CONSTEXPR_P (current_function_decl)
8278       && !function_body)
8279     pedwarn (input_location, OPT_pedantic,
8280              "compound-statement in constexpr function");
8281   /* Begin the compound-statement.  */
8282   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
8283   /* If the next keyword is `__label__' we have a label declaration.  */
8284   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
8285     cp_parser_label_declaration (parser);
8286   /* Parse an (optional) statement-seq.  */
8287   cp_parser_statement_seq_opt (parser, in_statement_expr);
8288   /* Finish the compound-statement.  */
8289   finish_compound_stmt (compound_stmt);
8290   /* Consume the `}'.  */
8291   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
8292
8293   return compound_stmt;
8294 }
8295
8296 /* Parse an (optional) statement-seq.
8297
8298    statement-seq:
8299      statement
8300      statement-seq [opt] statement  */
8301
8302 static void
8303 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
8304 {
8305   /* Scan statements until there aren't any more.  */
8306   while (true)
8307     {
8308       cp_token *token = cp_lexer_peek_token (parser->lexer);
8309
8310       /* If we are looking at a `}', then we have run out of
8311          statements; the same is true if we have reached the end
8312          of file, or have stumbled upon a stray '@end'.  */
8313       if (token->type == CPP_CLOSE_BRACE
8314           || token->type == CPP_EOF
8315           || token->type == CPP_PRAGMA_EOL
8316           || (token->type == CPP_KEYWORD && token->keyword == RID_AT_END))
8317         break;
8318       
8319       /* If we are in a compound statement and find 'else' then
8320          something went wrong.  */
8321       else if (token->type == CPP_KEYWORD && token->keyword == RID_ELSE)
8322         {
8323           if (parser->in_statement & IN_IF_STMT) 
8324             break;
8325           else
8326             {
8327               token = cp_lexer_consume_token (parser->lexer);
8328               error_at (token->location, "%<else%> without a previous %<if%>");
8329             }
8330         }
8331
8332       /* Parse the statement.  */
8333       cp_parser_statement (parser, in_statement_expr, true, NULL);
8334     }
8335 }
8336
8337 /* Parse a selection-statement.
8338
8339    selection-statement:
8340      if ( condition ) statement
8341      if ( condition ) statement else statement
8342      switch ( condition ) statement
8343
8344    Returns the new IF_STMT or SWITCH_STMT.
8345
8346    If IF_P is not NULL, *IF_P is set to indicate whether the statement
8347    is a (possibly labeled) if statement which is not enclosed in
8348    braces and has an else clause.  This is used to implement
8349    -Wparentheses.  */
8350
8351 static tree
8352 cp_parser_selection_statement (cp_parser* parser, bool *if_p)
8353 {
8354   cp_token *token;
8355   enum rid keyword;
8356
8357   if (if_p != NULL)
8358     *if_p = false;
8359
8360   /* Peek at the next token.  */
8361   token = cp_parser_require (parser, CPP_KEYWORD, RT_SELECT);
8362
8363   /* See what kind of keyword it is.  */
8364   keyword = token->keyword;
8365   switch (keyword)
8366     {
8367     case RID_IF:
8368     case RID_SWITCH:
8369       {
8370         tree statement;
8371         tree condition;
8372
8373         /* Look for the `('.  */
8374         if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
8375           {
8376             cp_parser_skip_to_end_of_statement (parser);
8377             return error_mark_node;
8378           }
8379
8380         /* Begin the selection-statement.  */
8381         if (keyword == RID_IF)
8382           statement = begin_if_stmt ();
8383         else
8384           statement = begin_switch_stmt ();
8385
8386         /* Parse the condition.  */
8387         condition = cp_parser_condition (parser);
8388         /* Look for the `)'.  */
8389         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
8390           cp_parser_skip_to_closing_parenthesis (parser, true, false,
8391                                                  /*consume_paren=*/true);
8392
8393         if (keyword == RID_IF)
8394           {
8395             bool nested_if;
8396             unsigned char in_statement;
8397
8398             /* Add the condition.  */
8399             finish_if_stmt_cond (condition, statement);
8400
8401             /* Parse the then-clause.  */
8402             in_statement = parser->in_statement;
8403             parser->in_statement |= IN_IF_STMT;
8404             if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
8405               {
8406                 location_t loc = cp_lexer_peek_token (parser->lexer)->location;
8407                 add_stmt (build_empty_stmt (loc));
8408                 cp_lexer_consume_token (parser->lexer);
8409                 if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_ELSE))
8410                   warning_at (loc, OPT_Wempty_body, "suggest braces around "
8411                               "empty body in an %<if%> statement");
8412                 nested_if = false;
8413               }
8414             else
8415               cp_parser_implicitly_scoped_statement (parser, &nested_if);
8416             parser->in_statement = in_statement;
8417
8418             finish_then_clause (statement);
8419
8420             /* If the next token is `else', parse the else-clause.  */
8421             if (cp_lexer_next_token_is_keyword (parser->lexer,
8422                                                 RID_ELSE))
8423               {
8424                 /* Consume the `else' keyword.  */
8425                 cp_lexer_consume_token (parser->lexer);
8426                 begin_else_clause (statement);
8427                 /* Parse the else-clause.  */
8428                 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
8429                   {
8430                     location_t loc;
8431                     loc = cp_lexer_peek_token (parser->lexer)->location;
8432                     warning_at (loc,
8433                                 OPT_Wempty_body, "suggest braces around "
8434                                 "empty body in an %<else%> statement");
8435                     add_stmt (build_empty_stmt (loc));
8436                     cp_lexer_consume_token (parser->lexer);
8437                   }
8438                 else
8439                   cp_parser_implicitly_scoped_statement (parser, NULL);
8440
8441                 finish_else_clause (statement);
8442
8443                 /* If we are currently parsing a then-clause, then
8444                    IF_P will not be NULL.  We set it to true to
8445                    indicate that this if statement has an else clause.
8446                    This may trigger the Wparentheses warning below
8447                    when we get back up to the parent if statement.  */
8448                 if (if_p != NULL)
8449                   *if_p = true;
8450               }
8451             else
8452               {
8453                 /* This if statement does not have an else clause.  If
8454                    NESTED_IF is true, then the then-clause is an if
8455                    statement which does have an else clause.  We warn
8456                    about the potential ambiguity.  */
8457                 if (nested_if)
8458                   warning_at (EXPR_LOCATION (statement), OPT_Wparentheses,
8459                               "suggest explicit braces to avoid ambiguous"
8460                               " %<else%>");
8461               }
8462
8463             /* Now we're all done with the if-statement.  */
8464             finish_if_stmt (statement);
8465           }
8466         else
8467           {
8468             bool in_switch_statement_p;
8469             unsigned char in_statement;
8470
8471             /* Add the condition.  */
8472             finish_switch_cond (condition, statement);
8473
8474             /* Parse the body of the switch-statement.  */
8475             in_switch_statement_p = parser->in_switch_statement_p;
8476             in_statement = parser->in_statement;
8477             parser->in_switch_statement_p = true;
8478             parser->in_statement |= IN_SWITCH_STMT;
8479             cp_parser_implicitly_scoped_statement (parser, NULL);
8480             parser->in_switch_statement_p = in_switch_statement_p;
8481             parser->in_statement = in_statement;
8482
8483             /* Now we're all done with the switch-statement.  */
8484             finish_switch_stmt (statement);
8485           }
8486
8487         return statement;
8488       }
8489       break;
8490
8491     default:
8492       cp_parser_error (parser, "expected selection-statement");
8493       return error_mark_node;
8494     }
8495 }
8496
8497 /* Parse a condition.
8498
8499    condition:
8500      expression
8501      type-specifier-seq declarator = initializer-clause
8502      type-specifier-seq declarator braced-init-list
8503
8504    GNU Extension:
8505
8506    condition:
8507      type-specifier-seq declarator asm-specification [opt]
8508        attributes [opt] = assignment-expression
8509
8510    Returns the expression that should be tested.  */
8511
8512 static tree
8513 cp_parser_condition (cp_parser* parser)
8514 {
8515   cp_decl_specifier_seq type_specifiers;
8516   const char *saved_message;
8517   int declares_class_or_enum;
8518
8519   /* Try the declaration first.  */
8520   cp_parser_parse_tentatively (parser);
8521   /* New types are not allowed in the type-specifier-seq for a
8522      condition.  */
8523   saved_message = parser->type_definition_forbidden_message;
8524   parser->type_definition_forbidden_message
8525     = G_("types may not be defined in conditions");
8526   /* Parse the type-specifier-seq.  */
8527   cp_parser_decl_specifier_seq (parser,
8528                                 CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR,
8529                                 &type_specifiers,
8530                                 &declares_class_or_enum);
8531   /* Restore the saved message.  */
8532   parser->type_definition_forbidden_message = saved_message;
8533   /* If all is well, we might be looking at a declaration.  */
8534   if (!cp_parser_error_occurred (parser))
8535     {
8536       tree decl;
8537       tree asm_specification;
8538       tree attributes;
8539       cp_declarator *declarator;
8540       tree initializer = NULL_TREE;
8541
8542       /* Parse the declarator.  */
8543       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
8544                                          /*ctor_dtor_or_conv_p=*/NULL,
8545                                          /*parenthesized_p=*/NULL,
8546                                          /*member_p=*/false);
8547       /* Parse the attributes.  */
8548       attributes = cp_parser_attributes_opt (parser);
8549       /* Parse the asm-specification.  */
8550       asm_specification = cp_parser_asm_specification_opt (parser);
8551       /* If the next token is not an `=' or '{', then we might still be
8552          looking at an expression.  For example:
8553
8554            if (A(a).x)
8555
8556          looks like a decl-specifier-seq and a declarator -- but then
8557          there is no `=', so this is an expression.  */
8558       if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
8559           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
8560         cp_parser_simulate_error (parser);
8561         
8562       /* If we did see an `=' or '{', then we are looking at a declaration
8563          for sure.  */
8564       if (cp_parser_parse_definitely (parser))
8565         {
8566           tree pushed_scope;
8567           bool non_constant_p;
8568           bool flags = LOOKUP_ONLYCONVERTING;
8569
8570           /* Create the declaration.  */
8571           decl = start_decl (declarator, &type_specifiers,
8572                              /*initialized_p=*/true,
8573                              attributes, /*prefix_attributes=*/NULL_TREE,
8574                              &pushed_scope);
8575
8576           /* Parse the initializer.  */
8577           if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
8578             {
8579               initializer = cp_parser_braced_list (parser, &non_constant_p);
8580               CONSTRUCTOR_IS_DIRECT_INIT (initializer) = 1;
8581               flags = 0;
8582             }
8583           else
8584             {
8585               /* Consume the `='.  */
8586               cp_parser_require (parser, CPP_EQ, RT_EQ);
8587               initializer = cp_parser_initializer_clause (parser, &non_constant_p);
8588             }
8589           if (BRACE_ENCLOSED_INITIALIZER_P (initializer))
8590             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
8591
8592           /* Process the initializer.  */
8593           cp_finish_decl (decl,
8594                           initializer, !non_constant_p,
8595                           asm_specification,
8596                           flags);
8597
8598           if (pushed_scope)
8599             pop_scope (pushed_scope);
8600
8601           return convert_from_reference (decl);
8602         }
8603     }
8604   /* If we didn't even get past the declarator successfully, we are
8605      definitely not looking at a declaration.  */
8606   else
8607     cp_parser_abort_tentative_parse (parser);
8608
8609   /* Otherwise, we are looking at an expression.  */
8610   return cp_parser_expression (parser, /*cast_p=*/false, NULL);
8611 }
8612
8613 /* Parses a for-statement or range-for-statement until the closing ')',
8614    not included. */
8615
8616 static tree
8617 cp_parser_for (cp_parser *parser)
8618 {
8619   tree init, scope, decl;
8620   bool is_range_for;
8621
8622   /* Begin the for-statement.  */
8623   scope = begin_for_scope (&init);
8624
8625   /* Parse the initialization.  */
8626   is_range_for = cp_parser_for_init_statement (parser, &decl);
8627
8628   if (is_range_for)
8629     return cp_parser_range_for (parser, scope, init, decl);
8630   else
8631     return cp_parser_c_for (parser, scope, init);
8632 }
8633
8634 static tree
8635 cp_parser_c_for (cp_parser *parser, tree scope, tree init)
8636 {
8637   /* Normal for loop */
8638   tree condition = NULL_TREE;
8639   tree expression = NULL_TREE;
8640   tree stmt;
8641
8642   stmt = begin_for_stmt (scope, init);
8643   /* The for-init-statement has already been parsed in
8644      cp_parser_for_init_statement, so no work is needed here.  */
8645   finish_for_init_stmt (stmt);
8646
8647   /* If there's a condition, process it.  */
8648   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8649     condition = cp_parser_condition (parser);
8650   finish_for_cond (condition, stmt);
8651   /* Look for the `;'.  */
8652   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
8653
8654   /* If there's an expression, process it.  */
8655   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
8656     expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
8657   finish_for_expr (expression, stmt);
8658
8659   return stmt;
8660 }
8661
8662 /* Tries to parse a range-based for-statement:
8663
8664   range-based-for:
8665     decl-specifier-seq declarator : expression
8666
8667   The decl-specifier-seq declarator and the `:' are already parsed by
8668   cp_parser_for_init_statement. If processing_template_decl it returns a
8669   newly created RANGE_FOR_STMT; if not, it is converted to a
8670   regular FOR_STMT.  */
8671
8672 static tree
8673 cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl)
8674 {
8675   tree stmt, range_expr;
8676
8677   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
8678     {
8679       bool expr_non_constant_p;
8680       range_expr = cp_parser_braced_list (parser, &expr_non_constant_p);
8681     }
8682   else
8683     range_expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
8684
8685   /* If in template, STMT is converted to a normal for-statement
8686      at instantiation. If not, it is done just ahead. */
8687   if (processing_template_decl)
8688     {
8689       stmt = begin_range_for_stmt (scope, init);
8690       finish_range_for_decl (stmt, range_decl, range_expr);
8691       if (!type_dependent_expression_p (range_expr))
8692         do_range_for_auto_deduction (range_decl, range_expr);
8693     }
8694   else
8695     {
8696       stmt = begin_for_stmt (scope, init);
8697       stmt = cp_convert_range_for (stmt, range_decl, range_expr);
8698     }
8699   return stmt;
8700 }
8701
8702 /* Subroutine of cp_convert_range_for: given the initializer expression,
8703    builds up the range temporary.  */
8704
8705 static tree
8706 build_range_temp (tree range_expr)
8707 {
8708   tree range_type, range_temp;
8709
8710   /* Find out the type deduced by the declaration
8711      `auto &&__range = range_expr'.  */
8712   range_type = cp_build_reference_type (make_auto (), true);
8713   range_type = do_auto_deduction (range_type, range_expr,
8714                                   type_uses_auto (range_type));
8715
8716   /* Create the __range variable.  */
8717   range_temp = build_decl (input_location, VAR_DECL,
8718                            get_identifier ("__for_range"), range_type);
8719   TREE_USED (range_temp) = 1;
8720   DECL_ARTIFICIAL (range_temp) = 1;
8721
8722   return range_temp;
8723 }
8724
8725 /* Used by cp_parser_range_for in template context: we aren't going to
8726    do a full conversion yet, but we still need to resolve auto in the
8727    type of the for-range-declaration if present.  This is basically
8728    a shortcut version of cp_convert_range_for.  */
8729
8730 static void
8731 do_range_for_auto_deduction (tree decl, tree range_expr)
8732 {
8733   tree auto_node = type_uses_auto (TREE_TYPE (decl));
8734   if (auto_node)
8735     {
8736       tree begin_dummy, end_dummy, range_temp, iter_type, iter_decl;
8737       range_temp = convert_from_reference (build_range_temp (range_expr));
8738       iter_type = (cp_parser_perform_range_for_lookup
8739                    (range_temp, &begin_dummy, &end_dummy));
8740       iter_decl = build_decl (input_location, VAR_DECL, NULL_TREE, iter_type);
8741       iter_decl = build_x_indirect_ref (iter_decl, RO_NULL,
8742                                         tf_warning_or_error);
8743       TREE_TYPE (decl) = do_auto_deduction (TREE_TYPE (decl),
8744                                             iter_decl, auto_node);
8745     }
8746 }
8747
8748 /* Converts a range-based for-statement into a normal
8749    for-statement, as per the definition.
8750
8751       for (RANGE_DECL : RANGE_EXPR)
8752         BLOCK
8753
8754    should be equivalent to:
8755
8756       {
8757         auto &&__range = RANGE_EXPR;
8758         for (auto __begin = BEGIN_EXPR, end = END_EXPR;
8759               __begin != __end;
8760               ++__begin)
8761           {
8762               RANGE_DECL = *__begin;
8763               BLOCK
8764           }
8765       }
8766
8767    If RANGE_EXPR is an array:
8768         BEGIN_EXPR = __range
8769         END_EXPR = __range + ARRAY_SIZE(__range)
8770    Else if RANGE_EXPR has a member 'begin' or 'end':
8771         BEGIN_EXPR = __range.begin()
8772         END_EXPR = __range.end()
8773    Else:
8774         BEGIN_EXPR = begin(__range)
8775         END_EXPR = end(__range);
8776
8777    If __range has a member 'begin' but not 'end', or vice versa, we must
8778    still use the second alternative (it will surely fail, however).
8779    When calling begin()/end() in the third alternative we must use
8780    argument dependent lookup, but always considering 'std' as an associated
8781    namespace.  */
8782
8783 tree
8784 cp_convert_range_for (tree statement, tree range_decl, tree range_expr)
8785 {
8786   tree begin, end;
8787   tree iter_type, begin_expr, end_expr;
8788   tree condition, expression;
8789
8790   if (range_decl == error_mark_node || range_expr == error_mark_node)
8791     /* If an error happened previously do nothing or else a lot of
8792        unhelpful errors would be issued.  */
8793     begin_expr = end_expr = iter_type = error_mark_node;
8794   else
8795     {
8796       tree range_temp = build_range_temp (range_expr);
8797       pushdecl (range_temp);
8798       cp_finish_decl (range_temp, range_expr,
8799                       /*is_constant_init*/false, NULL_TREE,
8800                       LOOKUP_ONLYCONVERTING);
8801
8802       range_temp = convert_from_reference (range_temp);
8803       iter_type = cp_parser_perform_range_for_lookup (range_temp,
8804                                                       &begin_expr, &end_expr);
8805     }
8806
8807   /* The new for initialization statement.  */
8808   begin = build_decl (input_location, VAR_DECL,
8809                       get_identifier ("__for_begin"), iter_type);
8810   TREE_USED (begin) = 1;
8811   DECL_ARTIFICIAL (begin) = 1;
8812   pushdecl (begin);
8813   cp_finish_decl (begin, begin_expr,
8814                   /*is_constant_init*/false, NULL_TREE,
8815                   LOOKUP_ONLYCONVERTING);
8816
8817   end = build_decl (input_location, VAR_DECL,
8818                     get_identifier ("__for_end"), iter_type);
8819   TREE_USED (end) = 1;
8820   DECL_ARTIFICIAL (end) = 1;
8821   pushdecl (end);
8822   cp_finish_decl (end, end_expr,
8823                   /*is_constant_init*/false, NULL_TREE,
8824                   LOOKUP_ONLYCONVERTING);
8825
8826   finish_for_init_stmt (statement);
8827
8828   /* The new for condition.  */
8829   condition = build_x_binary_op (NE_EXPR,
8830                                  begin, ERROR_MARK,
8831                                  end, ERROR_MARK,
8832                                  NULL, tf_warning_or_error);
8833   finish_for_cond (condition, statement);
8834
8835   /* The new increment expression.  */
8836   expression = finish_unary_op_expr (PREINCREMENT_EXPR, begin);
8837   finish_for_expr (expression, statement);
8838
8839   /* The declaration is initialized with *__begin inside the loop body.  */
8840   cp_finish_decl (range_decl,
8841                   build_x_indirect_ref (begin, RO_NULL, tf_warning_or_error),
8842                   /*is_constant_init*/false, NULL_TREE,
8843                   LOOKUP_ONLYCONVERTING);
8844
8845   return statement;
8846 }
8847
8848 /* Solves BEGIN_EXPR and END_EXPR as described in cp_convert_range_for.
8849    We need to solve both at the same time because the method used
8850    depends on the existence of members begin or end.
8851    Returns the type deduced for the iterator expression.  */
8852
8853 static tree
8854 cp_parser_perform_range_for_lookup (tree range, tree *begin, tree *end)
8855 {
8856   if (error_operand_p (range))
8857     {
8858       *begin = *end = error_mark_node;
8859       return error_mark_node;
8860     }
8861
8862   if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (range))))
8863     {
8864       error ("range-based %<for%> expression of type %qT "
8865              "has incomplete type", TREE_TYPE (range));
8866       *begin = *end = error_mark_node;
8867       return error_mark_node;
8868     }
8869   if (TREE_CODE (TREE_TYPE (range)) == ARRAY_TYPE)
8870     {
8871       /* If RANGE is an array, we will use pointer arithmetic.  */
8872       *begin = range;
8873       *end = build_binary_op (input_location, PLUS_EXPR,
8874                               range,
8875                               array_type_nelts_top (TREE_TYPE (range)),
8876                               0);
8877       return build_pointer_type (TREE_TYPE (TREE_TYPE (range)));
8878     }
8879   else
8880     {
8881       /* If it is not an array, we must do a bit of magic.  */
8882       tree id_begin, id_end;
8883       tree member_begin, member_end;
8884
8885       *begin = *end = error_mark_node;
8886
8887       id_begin = get_identifier ("begin");
8888       id_end = get_identifier ("end");
8889       member_begin = lookup_member (TREE_TYPE (range), id_begin,
8890                                     /*protect=*/2, /*want_type=*/false);
8891       member_end = lookup_member (TREE_TYPE (range), id_end,
8892                                   /*protect=*/2, /*want_type=*/false);
8893
8894       if (member_begin != NULL_TREE || member_end != NULL_TREE)
8895         {
8896           /* Use the member functions.  */
8897           if (member_begin != NULL_TREE)
8898             *begin = cp_parser_range_for_member_function (range, id_begin);
8899           else
8900             error ("range-based %<for%> expression of type %qT has an "
8901                    "%<end%> member but not a %<begin%>", TREE_TYPE (range));
8902
8903           if (member_end != NULL_TREE)
8904             *end = cp_parser_range_for_member_function (range, id_end);
8905           else
8906             error ("range-based %<for%> expression of type %qT has a "
8907                    "%<begin%> member but not an %<end%>", TREE_TYPE (range));
8908         }
8909       else
8910         {
8911           /* Use global functions with ADL.  */
8912           VEC(tree,gc) *vec;
8913           vec = make_tree_vector ();
8914
8915           VEC_safe_push (tree, gc, vec, range);
8916
8917           member_begin = perform_koenig_lookup (id_begin, vec,
8918                                                 /*include_std=*/true,
8919                                                 tf_warning_or_error);
8920           *begin = finish_call_expr (member_begin, &vec, false, true,
8921                                      tf_warning_or_error);
8922           member_end = perform_koenig_lookup (id_end, vec,
8923                                               /*include_std=*/true,
8924                                               tf_warning_or_error);
8925           *end = finish_call_expr (member_end, &vec, false, true,
8926                                    tf_warning_or_error);
8927
8928           release_tree_vector (vec);
8929         }
8930
8931       /* Last common checks.  */
8932       if (*begin == error_mark_node || *end == error_mark_node)
8933         {
8934           /* If one of the expressions is an error do no more checks.  */
8935           *begin = *end = error_mark_node;
8936           return error_mark_node;
8937         }
8938       else
8939         {
8940           tree iter_type = cv_unqualified (TREE_TYPE (*begin));
8941           /* The unqualified type of the __begin and __end temporaries should
8942              be the same, as required by the multiple auto declaration.  */
8943           if (!same_type_p (iter_type, cv_unqualified (TREE_TYPE (*end))))
8944             error ("inconsistent begin/end types in range-based %<for%> "
8945                    "statement: %qT and %qT",
8946                    TREE_TYPE (*begin), TREE_TYPE (*end));
8947           return iter_type;
8948         }
8949     }
8950 }
8951
8952 /* Helper function for cp_parser_perform_range_for_lookup.
8953    Builds a tree for RANGE.IDENTIFIER().  */
8954
8955 static tree
8956 cp_parser_range_for_member_function (tree range, tree identifier)
8957 {
8958   tree member, res;
8959   VEC(tree,gc) *vec;
8960
8961   member = finish_class_member_access_expr (range, identifier,
8962                                             false, tf_warning_or_error);
8963   if (member == error_mark_node)
8964     return error_mark_node;
8965
8966   vec = make_tree_vector ();
8967   res = finish_call_expr (member, &vec,
8968                           /*disallow_virtual=*/false,
8969                           /*koenig_p=*/false,
8970                           tf_warning_or_error);
8971   release_tree_vector (vec);
8972   return res;
8973 }
8974
8975 /* Parse an iteration-statement.
8976
8977    iteration-statement:
8978      while ( condition ) statement
8979      do statement while ( expression ) ;
8980      for ( for-init-statement condition [opt] ; expression [opt] )
8981        statement
8982
8983    Returns the new WHILE_STMT, DO_STMT, FOR_STMT or RANGE_FOR_STMT.  */
8984
8985 static tree
8986 cp_parser_iteration_statement (cp_parser* parser)
8987 {
8988   cp_token *token;
8989   enum rid keyword;
8990   tree statement;
8991   unsigned char in_statement;
8992
8993   /* Peek at the next token.  */
8994   token = cp_parser_require (parser, CPP_KEYWORD, RT_INTERATION);
8995   if (!token)
8996     return error_mark_node;
8997
8998   /* Remember whether or not we are already within an iteration
8999      statement.  */
9000   in_statement = parser->in_statement;
9001
9002   /* See what kind of keyword it is.  */
9003   keyword = token->keyword;
9004   switch (keyword)
9005     {
9006     case RID_WHILE:
9007       {
9008         tree condition;
9009
9010         /* Begin the while-statement.  */
9011         statement = begin_while_stmt ();
9012         /* Look for the `('.  */
9013         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
9014         /* Parse the condition.  */
9015         condition = cp_parser_condition (parser);
9016         finish_while_stmt_cond (condition, statement);
9017         /* Look for the `)'.  */
9018         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
9019         /* Parse the dependent statement.  */
9020         parser->in_statement = IN_ITERATION_STMT;
9021         cp_parser_already_scoped_statement (parser);
9022         parser->in_statement = in_statement;
9023         /* We're done with the while-statement.  */
9024         finish_while_stmt (statement);
9025       }
9026       break;
9027
9028     case RID_DO:
9029       {
9030         tree expression;
9031
9032         /* Begin the do-statement.  */
9033         statement = begin_do_stmt ();
9034         /* Parse the body of the do-statement.  */
9035         parser->in_statement = IN_ITERATION_STMT;
9036         cp_parser_implicitly_scoped_statement (parser, NULL);
9037         parser->in_statement = in_statement;
9038         finish_do_body (statement);
9039         /* Look for the `while' keyword.  */
9040         cp_parser_require_keyword (parser, RID_WHILE, RT_WHILE);
9041         /* Look for the `('.  */
9042         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
9043         /* Parse the expression.  */
9044         expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9045         /* We're done with the do-statement.  */
9046         finish_do_stmt (expression, statement);
9047         /* Look for the `)'.  */
9048         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
9049         /* Look for the `;'.  */
9050         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9051       }
9052       break;
9053
9054     case RID_FOR:
9055       {
9056         /* Look for the `('.  */
9057         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
9058
9059         statement = cp_parser_for (parser);
9060
9061         /* Look for the `)'.  */
9062         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
9063
9064         /* Parse the body of the for-statement.  */
9065         parser->in_statement = IN_ITERATION_STMT;
9066         cp_parser_already_scoped_statement (parser);
9067         parser->in_statement = in_statement;
9068
9069         /* We're done with the for-statement.  */
9070         finish_for_stmt (statement);
9071       }
9072       break;
9073
9074     default:
9075       cp_parser_error (parser, "expected iteration-statement");
9076       statement = error_mark_node;
9077       break;
9078     }
9079
9080   return statement;
9081 }
9082
9083 /* Parse a for-init-statement or the declarator of a range-based-for.
9084    Returns true if a range-based-for declaration is seen.
9085
9086    for-init-statement:
9087      expression-statement
9088      simple-declaration  */
9089
9090 static bool
9091 cp_parser_for_init_statement (cp_parser* parser, tree *decl)
9092 {
9093   /* If the next token is a `;', then we have an empty
9094      expression-statement.  Grammatically, this is also a
9095      simple-declaration, but an invalid one, because it does not
9096      declare anything.  Therefore, if we did not handle this case
9097      specially, we would issue an error message about an invalid
9098      declaration.  */
9099   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
9100     {
9101       bool is_range_for = false;
9102       bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
9103
9104       parser->colon_corrects_to_scope_p = false;
9105
9106       /* We're going to speculatively look for a declaration, falling back
9107          to an expression, if necessary.  */
9108       cp_parser_parse_tentatively (parser);
9109       /* Parse the declaration.  */
9110       cp_parser_simple_declaration (parser,
9111                                     /*function_definition_allowed_p=*/false,
9112                                     decl);
9113       parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
9114       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
9115         {
9116           /* It is a range-for, consume the ':' */
9117           cp_lexer_consume_token (parser->lexer);
9118           is_range_for = true;
9119           if (cxx_dialect < cxx0x)
9120             {
9121               error_at (cp_lexer_peek_token (parser->lexer)->location,
9122                         "range-based %<for%> loops are not allowed "
9123                         "in C++98 mode");
9124               *decl = error_mark_node;
9125             }
9126         }
9127       else
9128           /* The ';' is not consumed yet because we told
9129              cp_parser_simple_declaration not to.  */
9130           cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9131
9132       if (cp_parser_parse_definitely (parser))
9133         return is_range_for;
9134       /* If the tentative parse failed, then we shall need to look for an
9135          expression-statement.  */
9136     }
9137   /* If we are here, it is an expression-statement.  */
9138   cp_parser_expression_statement (parser, NULL_TREE);
9139   return false;
9140 }
9141
9142 /* Parse a jump-statement.
9143
9144    jump-statement:
9145      break ;
9146      continue ;
9147      return expression [opt] ;
9148      return braced-init-list ;
9149      goto identifier ;
9150
9151    GNU extension:
9152
9153    jump-statement:
9154      goto * expression ;
9155
9156    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
9157
9158 static tree
9159 cp_parser_jump_statement (cp_parser* parser)
9160 {
9161   tree statement = error_mark_node;
9162   cp_token *token;
9163   enum rid keyword;
9164   unsigned char in_statement;
9165
9166   /* Peek at the next token.  */
9167   token = cp_parser_require (parser, CPP_KEYWORD, RT_JUMP);
9168   if (!token)
9169     return error_mark_node;
9170
9171   /* See what kind of keyword it is.  */
9172   keyword = token->keyword;
9173   switch (keyword)
9174     {
9175     case RID_BREAK:
9176       in_statement = parser->in_statement & ~IN_IF_STMT;      
9177       switch (in_statement)
9178         {
9179         case 0:
9180           error_at (token->location, "break statement not within loop or switch");
9181           break;
9182         default:
9183           gcc_assert ((in_statement & IN_SWITCH_STMT)
9184                       || in_statement == IN_ITERATION_STMT);
9185           statement = finish_break_stmt ();
9186           break;
9187         case IN_OMP_BLOCK:
9188           error_at (token->location, "invalid exit from OpenMP structured block");
9189           break;
9190         case IN_OMP_FOR:
9191           error_at (token->location, "break statement used with OpenMP for loop");
9192           break;
9193         }
9194       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9195       break;
9196
9197     case RID_CONTINUE:
9198       switch (parser->in_statement & ~(IN_SWITCH_STMT | IN_IF_STMT))
9199         {
9200         case 0:
9201           error_at (token->location, "continue statement not within a loop");
9202           break;
9203         case IN_ITERATION_STMT:
9204         case IN_OMP_FOR:
9205           statement = finish_continue_stmt ();
9206           break;
9207         case IN_OMP_BLOCK:
9208           error_at (token->location, "invalid exit from OpenMP structured block");
9209           break;
9210         default:
9211           gcc_unreachable ();
9212         }
9213       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9214       break;
9215
9216     case RID_RETURN:
9217       {
9218         tree expr;
9219         bool expr_non_constant_p;
9220
9221         if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9222           {
9223             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
9224             expr = cp_parser_braced_list (parser, &expr_non_constant_p);
9225           }
9226         else if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
9227           expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9228         else
9229           /* If the next token is a `;', then there is no
9230              expression.  */
9231           expr = NULL_TREE;
9232         /* Build the return-statement.  */
9233         statement = finish_return_stmt (expr);
9234         /* Look for the final `;'.  */
9235         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9236       }
9237       break;
9238
9239     case RID_GOTO:
9240       /* Create the goto-statement.  */
9241       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
9242         {
9243           /* Issue a warning about this use of a GNU extension.  */
9244           pedwarn (token->location, OPT_pedantic, "ISO C++ forbids computed gotos");
9245           /* Consume the '*' token.  */
9246           cp_lexer_consume_token (parser->lexer);
9247           /* Parse the dependent expression.  */
9248           finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false, NULL));
9249         }
9250       else
9251         finish_goto_stmt (cp_parser_identifier (parser));
9252       /* Look for the final `;'.  */
9253       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9254       break;
9255
9256     default:
9257       cp_parser_error (parser, "expected jump-statement");
9258       break;
9259     }
9260
9261   return statement;
9262 }
9263
9264 /* Parse a declaration-statement.
9265
9266    declaration-statement:
9267      block-declaration  */
9268
9269 static void
9270 cp_parser_declaration_statement (cp_parser* parser)
9271 {
9272   void *p;
9273
9274   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
9275   p = obstack_alloc (&declarator_obstack, 0);
9276
9277  /* Parse the block-declaration.  */
9278   cp_parser_block_declaration (parser, /*statement_p=*/true);
9279
9280   /* Free any declarators allocated.  */
9281   obstack_free (&declarator_obstack, p);
9282
9283   /* Finish off the statement.  */
9284   finish_stmt ();
9285 }
9286
9287 /* Some dependent statements (like `if (cond) statement'), are
9288    implicitly in their own scope.  In other words, if the statement is
9289    a single statement (as opposed to a compound-statement), it is
9290    none-the-less treated as if it were enclosed in braces.  Any
9291    declarations appearing in the dependent statement are out of scope
9292    after control passes that point.  This function parses a statement,
9293    but ensures that is in its own scope, even if it is not a
9294    compound-statement.
9295
9296    If IF_P is not NULL, *IF_P is set to indicate whether the statement
9297    is a (possibly labeled) if statement which is not enclosed in
9298    braces and has an else clause.  This is used to implement
9299    -Wparentheses.
9300
9301    Returns the new statement.  */
9302
9303 static tree
9304 cp_parser_implicitly_scoped_statement (cp_parser* parser, bool *if_p)
9305 {
9306   tree statement;
9307
9308   if (if_p != NULL)
9309     *if_p = false;
9310
9311   /* Mark if () ; with a special NOP_EXPR.  */
9312   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9313     {
9314       location_t loc = cp_lexer_peek_token (parser->lexer)->location;
9315       cp_lexer_consume_token (parser->lexer);
9316       statement = add_stmt (build_empty_stmt (loc));
9317     }
9318   /* if a compound is opened, we simply parse the statement directly.  */
9319   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9320     statement = cp_parser_compound_statement (parser, NULL, false, false);
9321   /* If the token is not a `{', then we must take special action.  */
9322   else
9323     {
9324       /* Create a compound-statement.  */
9325       statement = begin_compound_stmt (0);
9326       /* Parse the dependent-statement.  */
9327       cp_parser_statement (parser, NULL_TREE, false, if_p);
9328       /* Finish the dummy compound-statement.  */
9329       finish_compound_stmt (statement);
9330     }
9331
9332   /* Return the statement.  */
9333   return statement;
9334 }
9335
9336 /* For some dependent statements (like `while (cond) statement'), we
9337    have already created a scope.  Therefore, even if the dependent
9338    statement is a compound-statement, we do not want to create another
9339    scope.  */
9340
9341 static void
9342 cp_parser_already_scoped_statement (cp_parser* parser)
9343 {
9344   /* If the token is a `{', then we must take special action.  */
9345   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
9346     cp_parser_statement (parser, NULL_TREE, false, NULL);
9347   else
9348     {
9349       /* Avoid calling cp_parser_compound_statement, so that we
9350          don't create a new scope.  Do everything else by hand.  */
9351       cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
9352       /* If the next keyword is `__label__' we have a label declaration.  */
9353       while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
9354         cp_parser_label_declaration (parser);
9355       /* Parse an (optional) statement-seq.  */
9356       cp_parser_statement_seq_opt (parser, NULL_TREE);
9357       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
9358     }
9359 }
9360
9361 /* Declarations [gram.dcl.dcl] */
9362
9363 /* Parse an optional declaration-sequence.
9364
9365    declaration-seq:
9366      declaration
9367      declaration-seq declaration  */
9368
9369 static void
9370 cp_parser_declaration_seq_opt (cp_parser* parser)
9371 {
9372   while (true)
9373     {
9374       cp_token *token;
9375
9376       token = cp_lexer_peek_token (parser->lexer);
9377
9378       if (token->type == CPP_CLOSE_BRACE
9379           || token->type == CPP_EOF
9380           || token->type == CPP_PRAGMA_EOL)
9381         break;
9382
9383       if (token->type == CPP_SEMICOLON)
9384         {
9385           /* A declaration consisting of a single semicolon is
9386              invalid.  Allow it unless we're being pedantic.  */
9387           cp_lexer_consume_token (parser->lexer);
9388           if (!in_system_header)
9389             pedwarn (input_location, OPT_pedantic, "extra %<;%>");
9390           continue;
9391         }
9392
9393       /* If we're entering or exiting a region that's implicitly
9394          extern "C", modify the lang context appropriately.  */
9395       if (!parser->implicit_extern_c && token->implicit_extern_c)
9396         {
9397           push_lang_context (lang_name_c);
9398           parser->implicit_extern_c = true;
9399         }
9400       else if (parser->implicit_extern_c && !token->implicit_extern_c)
9401         {
9402           pop_lang_context ();
9403           parser->implicit_extern_c = false;
9404         }
9405
9406       if (token->type == CPP_PRAGMA)
9407         {
9408           /* A top-level declaration can consist solely of a #pragma.
9409              A nested declaration cannot, so this is done here and not
9410              in cp_parser_declaration.  (A #pragma at block scope is
9411              handled in cp_parser_statement.)  */
9412           cp_parser_pragma (parser, pragma_external);
9413           continue;
9414         }
9415
9416       /* Parse the declaration itself.  */
9417       cp_parser_declaration (parser);
9418     }
9419 }
9420
9421 /* Parse a declaration.
9422
9423    declaration:
9424      block-declaration
9425      function-definition
9426      template-declaration
9427      explicit-instantiation
9428      explicit-specialization
9429      linkage-specification
9430      namespace-definition
9431
9432    GNU extension:
9433
9434    declaration:
9435       __extension__ declaration */
9436
9437 static void
9438 cp_parser_declaration (cp_parser* parser)
9439 {
9440   cp_token token1;
9441   cp_token token2;
9442   int saved_pedantic;
9443   void *p;
9444   tree attributes = NULL_TREE;
9445
9446   /* Check for the `__extension__' keyword.  */
9447   if (cp_parser_extension_opt (parser, &saved_pedantic))
9448     {
9449       /* Parse the qualified declaration.  */
9450       cp_parser_declaration (parser);
9451       /* Restore the PEDANTIC flag.  */
9452       pedantic = saved_pedantic;
9453
9454       return;
9455     }
9456
9457   /* Try to figure out what kind of declaration is present.  */
9458   token1 = *cp_lexer_peek_token (parser->lexer);
9459
9460   if (token1.type != CPP_EOF)
9461     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
9462   else
9463     {
9464       token2.type = CPP_EOF;
9465       token2.keyword = RID_MAX;
9466     }
9467
9468   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
9469   p = obstack_alloc (&declarator_obstack, 0);
9470
9471   /* If the next token is `extern' and the following token is a string
9472      literal, then we have a linkage specification.  */
9473   if (token1.keyword == RID_EXTERN
9474       && cp_parser_is_string_literal (&token2))
9475     cp_parser_linkage_specification (parser);
9476   /* If the next token is `template', then we have either a template
9477      declaration, an explicit instantiation, or an explicit
9478      specialization.  */
9479   else if (token1.keyword == RID_TEMPLATE)
9480     {
9481       /* `template <>' indicates a template specialization.  */
9482       if (token2.type == CPP_LESS
9483           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
9484         cp_parser_explicit_specialization (parser);
9485       /* `template <' indicates a template declaration.  */
9486       else if (token2.type == CPP_LESS)
9487         cp_parser_template_declaration (parser, /*member_p=*/false);
9488       /* Anything else must be an explicit instantiation.  */
9489       else
9490         cp_parser_explicit_instantiation (parser);
9491     }
9492   /* If the next token is `export', then we have a template
9493      declaration.  */
9494   else if (token1.keyword == RID_EXPORT)
9495     cp_parser_template_declaration (parser, /*member_p=*/false);
9496   /* If the next token is `extern', 'static' or 'inline' and the one
9497      after that is `template', we have a GNU extended explicit
9498      instantiation directive.  */
9499   else if (cp_parser_allow_gnu_extensions_p (parser)
9500            && (token1.keyword == RID_EXTERN
9501                || token1.keyword == RID_STATIC
9502                || token1.keyword == RID_INLINE)
9503            && token2.keyword == RID_TEMPLATE)
9504     cp_parser_explicit_instantiation (parser);
9505   /* If the next token is `namespace', check for a named or unnamed
9506      namespace definition.  */
9507   else if (token1.keyword == RID_NAMESPACE
9508            && (/* A named namespace definition.  */
9509                (token2.type == CPP_NAME
9510                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
9511                     != CPP_EQ))
9512                /* An unnamed namespace definition.  */
9513                || token2.type == CPP_OPEN_BRACE
9514                || token2.keyword == RID_ATTRIBUTE))
9515     cp_parser_namespace_definition (parser);
9516   /* An inline (associated) namespace definition.  */
9517   else if (token1.keyword == RID_INLINE
9518            && token2.keyword == RID_NAMESPACE)
9519     cp_parser_namespace_definition (parser);
9520   /* Objective-C++ declaration/definition.  */
9521   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
9522     cp_parser_objc_declaration (parser, NULL_TREE);
9523   else if (c_dialect_objc ()
9524            && token1.keyword == RID_ATTRIBUTE
9525            && cp_parser_objc_valid_prefix_attributes (parser, &attributes))
9526     cp_parser_objc_declaration (parser, attributes);
9527   /* We must have either a block declaration or a function
9528      definition.  */
9529   else
9530     /* Try to parse a block-declaration, or a function-definition.  */
9531     cp_parser_block_declaration (parser, /*statement_p=*/false);
9532
9533   /* Free any declarators allocated.  */
9534   obstack_free (&declarator_obstack, p);
9535 }
9536
9537 /* Parse a block-declaration.
9538
9539    block-declaration:
9540      simple-declaration
9541      asm-definition
9542      namespace-alias-definition
9543      using-declaration
9544      using-directive
9545
9546    GNU Extension:
9547
9548    block-declaration:
9549      __extension__ block-declaration
9550
9551    C++0x Extension:
9552
9553    block-declaration:
9554      static_assert-declaration
9555
9556    If STATEMENT_P is TRUE, then this block-declaration is occurring as
9557    part of a declaration-statement.  */
9558
9559 static void
9560 cp_parser_block_declaration (cp_parser *parser,
9561                              bool      statement_p)
9562 {
9563   cp_token *token1;
9564   int saved_pedantic;
9565
9566   /* Check for the `__extension__' keyword.  */
9567   if (cp_parser_extension_opt (parser, &saved_pedantic))
9568     {
9569       /* Parse the qualified declaration.  */
9570       cp_parser_block_declaration (parser, statement_p);
9571       /* Restore the PEDANTIC flag.  */
9572       pedantic = saved_pedantic;
9573
9574       return;
9575     }
9576
9577   /* Peek at the next token to figure out which kind of declaration is
9578      present.  */
9579   token1 = cp_lexer_peek_token (parser->lexer);
9580
9581   /* If the next keyword is `asm', we have an asm-definition.  */
9582   if (token1->keyword == RID_ASM)
9583     {
9584       if (statement_p)
9585         cp_parser_commit_to_tentative_parse (parser);
9586       cp_parser_asm_definition (parser);
9587     }
9588   /* If the next keyword is `namespace', we have a
9589      namespace-alias-definition.  */
9590   else if (token1->keyword == RID_NAMESPACE)
9591     cp_parser_namespace_alias_definition (parser);
9592   /* If the next keyword is `using', we have either a
9593      using-declaration or a using-directive.  */
9594   else if (token1->keyword == RID_USING)
9595     {
9596       cp_token *token2;
9597
9598       if (statement_p)
9599         cp_parser_commit_to_tentative_parse (parser);
9600       /* If the token after `using' is `namespace', then we have a
9601          using-directive.  */
9602       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
9603       if (token2->keyword == RID_NAMESPACE)
9604         cp_parser_using_directive (parser);
9605       /* Otherwise, it's a using-declaration.  */
9606       else
9607         cp_parser_using_declaration (parser,
9608                                      /*access_declaration_p=*/false);
9609     }
9610   /* If the next keyword is `__label__' we have a misplaced label
9611      declaration.  */
9612   else if (token1->keyword == RID_LABEL)
9613     {
9614       cp_lexer_consume_token (parser->lexer);
9615       error_at (token1->location, "%<__label__%> not at the beginning of a block");
9616       cp_parser_skip_to_end_of_statement (parser);
9617       /* If the next token is now a `;', consume it.  */
9618       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9619         cp_lexer_consume_token (parser->lexer);
9620     }
9621   /* If the next token is `static_assert' we have a static assertion.  */
9622   else if (token1->keyword == RID_STATIC_ASSERT)
9623     cp_parser_static_assert (parser, /*member_p=*/false);
9624   /* Anything else must be a simple-declaration.  */
9625   else
9626     cp_parser_simple_declaration (parser, !statement_p,
9627                                   /*maybe_range_for_decl*/NULL);
9628 }
9629
9630 /* Parse a simple-declaration.
9631
9632    simple-declaration:
9633      decl-specifier-seq [opt] init-declarator-list [opt] ;
9634
9635    init-declarator-list:
9636      init-declarator
9637      init-declarator-list , init-declarator
9638
9639    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
9640    function-definition as a simple-declaration.
9641
9642    If MAYBE_RANGE_FOR_DECL is not NULL, the pointed tree will be set to the
9643    parsed declaration if it is an uninitialized single declarator not followed
9644    by a `;', or to error_mark_node otherwise. Either way, the trailing `;',
9645    if present, will not be consumed.  */
9646
9647 static void
9648 cp_parser_simple_declaration (cp_parser* parser,
9649                               bool function_definition_allowed_p,
9650                               tree *maybe_range_for_decl)
9651 {
9652   cp_decl_specifier_seq decl_specifiers;
9653   int declares_class_or_enum;
9654   bool saw_declarator;
9655
9656   if (maybe_range_for_decl)
9657     *maybe_range_for_decl = NULL_TREE;
9658
9659   /* Defer access checks until we know what is being declared; the
9660      checks for names appearing in the decl-specifier-seq should be
9661      done as if we were in the scope of the thing being declared.  */
9662   push_deferring_access_checks (dk_deferred);
9663
9664   /* Parse the decl-specifier-seq.  We have to keep track of whether
9665      or not the decl-specifier-seq declares a named class or
9666      enumeration type, since that is the only case in which the
9667      init-declarator-list is allowed to be empty.
9668
9669      [dcl.dcl]
9670
9671      In a simple-declaration, the optional init-declarator-list can be
9672      omitted only when declaring a class or enumeration, that is when
9673      the decl-specifier-seq contains either a class-specifier, an
9674      elaborated-type-specifier, or an enum-specifier.  */
9675   cp_parser_decl_specifier_seq (parser,
9676                                 CP_PARSER_FLAGS_OPTIONAL,
9677                                 &decl_specifiers,
9678                                 &declares_class_or_enum);
9679   /* We no longer need to defer access checks.  */
9680   stop_deferring_access_checks ();
9681
9682   /* In a block scope, a valid declaration must always have a
9683      decl-specifier-seq.  By not trying to parse declarators, we can
9684      resolve the declaration/expression ambiguity more quickly.  */
9685   if (!function_definition_allowed_p
9686       && !decl_specifiers.any_specifiers_p)
9687     {
9688       cp_parser_error (parser, "expected declaration");
9689       goto done;
9690     }
9691
9692   /* If the next two tokens are both identifiers, the code is
9693      erroneous. The usual cause of this situation is code like:
9694
9695        T t;
9696
9697      where "T" should name a type -- but does not.  */
9698   if (!decl_specifiers.any_type_specifiers_p
9699       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
9700     {
9701       /* If parsing tentatively, we should commit; we really are
9702          looking at a declaration.  */
9703       cp_parser_commit_to_tentative_parse (parser);
9704       /* Give up.  */
9705       goto done;
9706     }
9707
9708   /* If we have seen at least one decl-specifier, and the next token
9709      is not a parenthesis, then we must be looking at a declaration.
9710      (After "int (" we might be looking at a functional cast.)  */
9711   if (decl_specifiers.any_specifiers_p
9712       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN)
9713       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
9714       && !cp_parser_error_occurred (parser))
9715     cp_parser_commit_to_tentative_parse (parser);
9716
9717   /* Keep going until we hit the `;' at the end of the simple
9718      declaration.  */
9719   saw_declarator = false;
9720   while (cp_lexer_next_token_is_not (parser->lexer,
9721                                      CPP_SEMICOLON))
9722     {
9723       cp_token *token;
9724       bool function_definition_p;
9725       tree decl;
9726
9727       if (saw_declarator)
9728         {
9729           /* If we are processing next declarator, coma is expected */
9730           token = cp_lexer_peek_token (parser->lexer);
9731           gcc_assert (token->type == CPP_COMMA);
9732           cp_lexer_consume_token (parser->lexer);
9733           if (maybe_range_for_decl)
9734             *maybe_range_for_decl = error_mark_node;
9735         }
9736       else
9737         saw_declarator = true;
9738
9739       /* Parse the init-declarator.  */
9740       decl = cp_parser_init_declarator (parser, &decl_specifiers,
9741                                         /*checks=*/NULL,
9742                                         function_definition_allowed_p,
9743                                         /*member_p=*/false,
9744                                         declares_class_or_enum,
9745                                         &function_definition_p,
9746                                         maybe_range_for_decl);
9747       /* If an error occurred while parsing tentatively, exit quickly.
9748          (That usually happens when in the body of a function; each
9749          statement is treated as a declaration-statement until proven
9750          otherwise.)  */
9751       if (cp_parser_error_occurred (parser))
9752         goto done;
9753       /* Handle function definitions specially.  */
9754       if (function_definition_p)
9755         {
9756           /* If the next token is a `,', then we are probably
9757              processing something like:
9758
9759                void f() {}, *p;
9760
9761              which is erroneous.  */
9762           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
9763             {
9764               cp_token *token = cp_lexer_peek_token (parser->lexer);
9765               error_at (token->location,
9766                         "mixing"
9767                         " declarations and function-definitions is forbidden");
9768             }
9769           /* Otherwise, we're done with the list of declarators.  */
9770           else
9771             {
9772               pop_deferring_access_checks ();
9773               return;
9774             }
9775         }
9776       if (maybe_range_for_decl && *maybe_range_for_decl == NULL_TREE)
9777         *maybe_range_for_decl = decl;
9778       /* The next token should be either a `,' or a `;'.  */
9779       token = cp_lexer_peek_token (parser->lexer);
9780       /* If it's a `,', there are more declarators to come.  */
9781       if (token->type == CPP_COMMA)
9782         /* will be consumed next time around */;
9783       /* If it's a `;', we are done.  */
9784       else if (token->type == CPP_SEMICOLON || maybe_range_for_decl)
9785         break;
9786       /* Anything else is an error.  */
9787       else
9788         {
9789           /* If we have already issued an error message we don't need
9790              to issue another one.  */
9791           if (decl != error_mark_node
9792               || cp_parser_uncommitted_to_tentative_parse_p (parser))
9793             cp_parser_error (parser, "expected %<,%> or %<;%>");
9794           /* Skip tokens until we reach the end of the statement.  */
9795           cp_parser_skip_to_end_of_statement (parser);
9796           /* If the next token is now a `;', consume it.  */
9797           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9798             cp_lexer_consume_token (parser->lexer);
9799           goto done;
9800         }
9801       /* After the first time around, a function-definition is not
9802          allowed -- even if it was OK at first.  For example:
9803
9804            int i, f() {}
9805
9806          is not valid.  */
9807       function_definition_allowed_p = false;
9808     }
9809
9810   /* Issue an error message if no declarators are present, and the
9811      decl-specifier-seq does not itself declare a class or
9812      enumeration.  */
9813   if (!saw_declarator)
9814     {
9815       if (cp_parser_declares_only_class_p (parser))
9816         shadow_tag (&decl_specifiers);
9817       /* Perform any deferred access checks.  */
9818       perform_deferred_access_checks ();
9819     }
9820
9821   /* Consume the `;'.  */
9822   if (!maybe_range_for_decl)
9823       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9824
9825  done:
9826   pop_deferring_access_checks ();
9827 }
9828
9829 /* Parse a decl-specifier-seq.
9830
9831    decl-specifier-seq:
9832      decl-specifier-seq [opt] decl-specifier
9833
9834    decl-specifier:
9835      storage-class-specifier
9836      type-specifier
9837      function-specifier
9838      friend
9839      typedef
9840
9841    GNU Extension:
9842
9843    decl-specifier:
9844      attributes
9845
9846    Set *DECL_SPECS to a representation of the decl-specifier-seq.
9847
9848    The parser flags FLAGS is used to control type-specifier parsing.
9849
9850    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
9851    flags:
9852
9853      1: one of the decl-specifiers is an elaborated-type-specifier
9854         (i.e., a type declaration)
9855      2: one of the decl-specifiers is an enum-specifier or a
9856         class-specifier (i.e., a type definition)
9857
9858    */
9859
9860 static void
9861 cp_parser_decl_specifier_seq (cp_parser* parser,
9862                               cp_parser_flags flags,
9863                               cp_decl_specifier_seq *decl_specs,
9864                               int* declares_class_or_enum)
9865 {
9866   bool constructor_possible_p = !parser->in_declarator_p;
9867   cp_token *start_token = NULL;
9868
9869   /* Clear DECL_SPECS.  */
9870   clear_decl_specs (decl_specs);
9871
9872   /* Assume no class or enumeration type is declared.  */
9873   *declares_class_or_enum = 0;
9874
9875   /* Keep reading specifiers until there are no more to read.  */
9876   while (true)
9877     {
9878       bool constructor_p;
9879       bool found_decl_spec;
9880       cp_token *token;
9881
9882       /* Peek at the next token.  */
9883       token = cp_lexer_peek_token (parser->lexer);
9884
9885       /* Save the first token of the decl spec list for error
9886          reporting.  */
9887       if (!start_token)
9888         start_token = token;
9889       /* Handle attributes.  */
9890       if (token->keyword == RID_ATTRIBUTE)
9891         {
9892           /* Parse the attributes.  */
9893           decl_specs->attributes
9894             = chainon (decl_specs->attributes,
9895                        cp_parser_attributes_opt (parser));
9896           continue;
9897         }
9898       /* Assume we will find a decl-specifier keyword.  */
9899       found_decl_spec = true;
9900       /* If the next token is an appropriate keyword, we can simply
9901          add it to the list.  */
9902       switch (token->keyword)
9903         {
9904           /* decl-specifier:
9905                friend
9906                constexpr */
9907         case RID_FRIEND:
9908           if (!at_class_scope_p ())
9909             {
9910               error_at (token->location, "%<friend%> used outside of class");
9911               cp_lexer_purge_token (parser->lexer);
9912             }
9913           else
9914             {
9915               ++decl_specs->specs[(int) ds_friend];
9916               /* Consume the token.  */
9917               cp_lexer_consume_token (parser->lexer);
9918             }
9919           break;
9920
9921         case RID_CONSTEXPR:
9922           ++decl_specs->specs[(int) ds_constexpr];
9923           cp_lexer_consume_token (parser->lexer);
9924           break;
9925
9926           /* function-specifier:
9927                inline
9928                virtual
9929                explicit  */
9930         case RID_INLINE:
9931         case RID_VIRTUAL:
9932         case RID_EXPLICIT:
9933           cp_parser_function_specifier_opt (parser, decl_specs);
9934           break;
9935
9936           /* decl-specifier:
9937                typedef  */
9938         case RID_TYPEDEF:
9939           ++decl_specs->specs[(int) ds_typedef];
9940           /* Consume the token.  */
9941           cp_lexer_consume_token (parser->lexer);
9942           /* A constructor declarator cannot appear in a typedef.  */
9943           constructor_possible_p = false;
9944           /* The "typedef" keyword can only occur in a declaration; we
9945              may as well commit at this point.  */
9946           cp_parser_commit_to_tentative_parse (parser);
9947
9948           if (decl_specs->storage_class != sc_none)
9949             decl_specs->conflicting_specifiers_p = true;
9950           break;
9951
9952           /* storage-class-specifier:
9953                auto
9954                register
9955                static
9956                extern
9957                mutable
9958
9959              GNU Extension:
9960                thread  */
9961         case RID_AUTO:
9962           if (cxx_dialect == cxx98) 
9963             {
9964               /* Consume the token.  */
9965               cp_lexer_consume_token (parser->lexer);
9966
9967               /* Complain about `auto' as a storage specifier, if
9968                  we're complaining about C++0x compatibility.  */
9969               warning_at (token->location, OPT_Wc__0x_compat, "%<auto%>"
9970                           " will change meaning in C++0x; please remove it");
9971
9972               /* Set the storage class anyway.  */
9973               cp_parser_set_storage_class (parser, decl_specs, RID_AUTO,
9974                                            token->location);
9975             }
9976           else
9977             /* C++0x auto type-specifier.  */
9978             found_decl_spec = false;
9979           break;
9980
9981         case RID_REGISTER:
9982         case RID_STATIC:
9983         case RID_EXTERN:
9984         case RID_MUTABLE:
9985           /* Consume the token.  */
9986           cp_lexer_consume_token (parser->lexer);
9987           cp_parser_set_storage_class (parser, decl_specs, token->keyword,
9988                                        token->location);
9989           break;
9990         case RID_THREAD:
9991           /* Consume the token.  */
9992           cp_lexer_consume_token (parser->lexer);
9993           ++decl_specs->specs[(int) ds_thread];
9994           break;
9995
9996         default:
9997           /* We did not yet find a decl-specifier yet.  */
9998           found_decl_spec = false;
9999           break;
10000         }
10001
10002       if (found_decl_spec
10003           && (flags & CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR)
10004           && token->keyword != RID_CONSTEXPR)
10005         error ("decl-specifier invalid in condition");
10006
10007       /* Constructors are a special case.  The `S' in `S()' is not a
10008          decl-specifier; it is the beginning of the declarator.  */
10009       constructor_p
10010         = (!found_decl_spec
10011            && constructor_possible_p
10012            && (cp_parser_constructor_declarator_p
10013                (parser, decl_specs->specs[(int) ds_friend] != 0)));
10014
10015       /* If we don't have a DECL_SPEC yet, then we must be looking at
10016          a type-specifier.  */
10017       if (!found_decl_spec && !constructor_p)
10018         {
10019           int decl_spec_declares_class_or_enum;
10020           bool is_cv_qualifier;
10021           tree type_spec;
10022
10023           type_spec
10024             = cp_parser_type_specifier (parser, flags,
10025                                         decl_specs,
10026                                         /*is_declaration=*/true,
10027                                         &decl_spec_declares_class_or_enum,
10028                                         &is_cv_qualifier);
10029           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
10030
10031           /* If this type-specifier referenced a user-defined type
10032              (a typedef, class-name, etc.), then we can't allow any
10033              more such type-specifiers henceforth.
10034
10035              [dcl.spec]
10036
10037              The longest sequence of decl-specifiers that could
10038              possibly be a type name is taken as the
10039              decl-specifier-seq of a declaration.  The sequence shall
10040              be self-consistent as described below.
10041
10042              [dcl.type]
10043
10044              As a general rule, at most one type-specifier is allowed
10045              in the complete decl-specifier-seq of a declaration.  The
10046              only exceptions are the following:
10047
10048              -- const or volatile can be combined with any other
10049                 type-specifier.
10050
10051              -- signed or unsigned can be combined with char, long,
10052                 short, or int.
10053
10054              -- ..
10055
10056              Example:
10057
10058                typedef char* Pc;
10059                void g (const int Pc);
10060
10061              Here, Pc is *not* part of the decl-specifier seq; it's
10062              the declarator.  Therefore, once we see a type-specifier
10063              (other than a cv-qualifier), we forbid any additional
10064              user-defined types.  We *do* still allow things like `int
10065              int' to be considered a decl-specifier-seq, and issue the
10066              error message later.  */
10067           if (type_spec && !is_cv_qualifier)
10068             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
10069           /* A constructor declarator cannot follow a type-specifier.  */
10070           if (type_spec)
10071             {
10072               constructor_possible_p = false;
10073               found_decl_spec = true;
10074               if (!is_cv_qualifier)
10075                 decl_specs->any_type_specifiers_p = true;
10076             }
10077         }
10078
10079       /* If we still do not have a DECL_SPEC, then there are no more
10080          decl-specifiers.  */
10081       if (!found_decl_spec)
10082         break;
10083
10084       decl_specs->any_specifiers_p = true;
10085       /* After we see one decl-specifier, further decl-specifiers are
10086          always optional.  */
10087       flags |= CP_PARSER_FLAGS_OPTIONAL;
10088     }
10089
10090   cp_parser_check_decl_spec (decl_specs, start_token->location);
10091
10092   /* Don't allow a friend specifier with a class definition.  */
10093   if (decl_specs->specs[(int) ds_friend] != 0
10094       && (*declares_class_or_enum & 2))
10095     error_at (start_token->location,
10096               "class definition may not be declared a friend");
10097 }
10098
10099 /* Parse an (optional) storage-class-specifier.
10100
10101    storage-class-specifier:
10102      auto
10103      register
10104      static
10105      extern
10106      mutable
10107
10108    GNU Extension:
10109
10110    storage-class-specifier:
10111      thread
10112
10113    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
10114
10115 static tree
10116 cp_parser_storage_class_specifier_opt (cp_parser* parser)
10117 {
10118   switch (cp_lexer_peek_token (parser->lexer)->keyword)
10119     {
10120     case RID_AUTO:
10121       if (cxx_dialect != cxx98)
10122         return NULL_TREE;
10123       /* Fall through for C++98.  */
10124
10125     case RID_REGISTER:
10126     case RID_STATIC:
10127     case RID_EXTERN:
10128     case RID_MUTABLE:
10129     case RID_THREAD:
10130       /* Consume the token.  */
10131       return cp_lexer_consume_token (parser->lexer)->u.value;
10132
10133     default:
10134       return NULL_TREE;
10135     }
10136 }
10137
10138 /* Parse an (optional) function-specifier.
10139
10140    function-specifier:
10141      inline
10142      virtual
10143      explicit
10144
10145    Returns an IDENTIFIER_NODE corresponding to the keyword used.
10146    Updates DECL_SPECS, if it is non-NULL.  */
10147
10148 static tree
10149 cp_parser_function_specifier_opt (cp_parser* parser,
10150                                   cp_decl_specifier_seq *decl_specs)
10151 {
10152   cp_token *token = cp_lexer_peek_token (parser->lexer);
10153   switch (token->keyword)
10154     {
10155     case RID_INLINE:
10156       if (decl_specs)
10157         ++decl_specs->specs[(int) ds_inline];
10158       break;
10159
10160     case RID_VIRTUAL:
10161       /* 14.5.2.3 [temp.mem]
10162
10163          A member function template shall not be virtual.  */
10164       if (PROCESSING_REAL_TEMPLATE_DECL_P ())
10165         error_at (token->location, "templates may not be %<virtual%>");
10166       else if (decl_specs)
10167         ++decl_specs->specs[(int) ds_virtual];
10168       break;
10169
10170     case RID_EXPLICIT:
10171       if (decl_specs)
10172         ++decl_specs->specs[(int) ds_explicit];
10173       break;
10174
10175     default:
10176       return NULL_TREE;
10177     }
10178
10179   /* Consume the token.  */
10180   return cp_lexer_consume_token (parser->lexer)->u.value;
10181 }
10182
10183 /* Parse a linkage-specification.
10184
10185    linkage-specification:
10186      extern string-literal { declaration-seq [opt] }
10187      extern string-literal declaration  */
10188
10189 static void
10190 cp_parser_linkage_specification (cp_parser* parser)
10191 {
10192   tree linkage;
10193
10194   /* Look for the `extern' keyword.  */
10195   cp_parser_require_keyword (parser, RID_EXTERN, RT_EXTERN);
10196
10197   /* Look for the string-literal.  */
10198   linkage = cp_parser_string_literal (parser, false, false);
10199
10200   /* Transform the literal into an identifier.  If the literal is a
10201      wide-character string, or contains embedded NULs, then we can't
10202      handle it as the user wants.  */
10203   if (strlen (TREE_STRING_POINTER (linkage))
10204       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
10205     {
10206       cp_parser_error (parser, "invalid linkage-specification");
10207       /* Assume C++ linkage.  */
10208       linkage = lang_name_cplusplus;
10209     }
10210   else
10211     linkage = get_identifier (TREE_STRING_POINTER (linkage));
10212
10213   /* We're now using the new linkage.  */
10214   push_lang_context (linkage);
10215
10216   /* If the next token is a `{', then we're using the first
10217      production.  */
10218   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
10219     {
10220       /* Consume the `{' token.  */
10221       cp_lexer_consume_token (parser->lexer);
10222       /* Parse the declarations.  */
10223       cp_parser_declaration_seq_opt (parser);
10224       /* Look for the closing `}'.  */
10225       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
10226     }
10227   /* Otherwise, there's just one declaration.  */
10228   else
10229     {
10230       bool saved_in_unbraced_linkage_specification_p;
10231
10232       saved_in_unbraced_linkage_specification_p
10233         = parser->in_unbraced_linkage_specification_p;
10234       parser->in_unbraced_linkage_specification_p = true;
10235       cp_parser_declaration (parser);
10236       parser->in_unbraced_linkage_specification_p
10237         = saved_in_unbraced_linkage_specification_p;
10238     }
10239
10240   /* We're done with the linkage-specification.  */
10241   pop_lang_context ();
10242 }
10243
10244 /* Parse a static_assert-declaration.
10245
10246    static_assert-declaration:
10247      static_assert ( constant-expression , string-literal ) ; 
10248
10249    If MEMBER_P, this static_assert is a class member.  */
10250
10251 static void 
10252 cp_parser_static_assert(cp_parser *parser, bool member_p)
10253 {
10254   tree condition;
10255   tree message;
10256   cp_token *token;
10257   location_t saved_loc;
10258   bool dummy;
10259
10260   /* Peek at the `static_assert' token so we can keep track of exactly
10261      where the static assertion started.  */
10262   token = cp_lexer_peek_token (parser->lexer);
10263   saved_loc = token->location;
10264
10265   /* Look for the `static_assert' keyword.  */
10266   if (!cp_parser_require_keyword (parser, RID_STATIC_ASSERT, 
10267                                   RT_STATIC_ASSERT))
10268     return;
10269
10270   /*  We know we are in a static assertion; commit to any tentative
10271       parse.  */
10272   if (cp_parser_parsing_tentatively (parser))
10273     cp_parser_commit_to_tentative_parse (parser);
10274
10275   /* Parse the `(' starting the static assertion condition.  */
10276   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
10277
10278   /* Parse the constant-expression.  Allow a non-constant expression
10279      here in order to give better diagnostics in finish_static_assert.  */
10280   condition = 
10281     cp_parser_constant_expression (parser,
10282                                    /*allow_non_constant_p=*/true,
10283                                    /*non_constant_p=*/&dummy);
10284
10285   /* Parse the separating `,'.  */
10286   cp_parser_require (parser, CPP_COMMA, RT_COMMA);
10287
10288   /* Parse the string-literal message.  */
10289   message = cp_parser_string_literal (parser, 
10290                                       /*translate=*/false,
10291                                       /*wide_ok=*/true);
10292
10293   /* A `)' completes the static assertion.  */
10294   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
10295     cp_parser_skip_to_closing_parenthesis (parser, 
10296                                            /*recovering=*/true, 
10297                                            /*or_comma=*/false,
10298                                            /*consume_paren=*/true);
10299
10300   /* A semicolon terminates the declaration.  */
10301   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
10302
10303   /* Complete the static assertion, which may mean either processing 
10304      the static assert now or saving it for template instantiation.  */
10305   finish_static_assert (condition, message, saved_loc, member_p);
10306 }
10307
10308 /* Parse a `decltype' type. Returns the type. 
10309
10310    simple-type-specifier:
10311      decltype ( expression )  */
10312
10313 static tree
10314 cp_parser_decltype (cp_parser *parser)
10315 {
10316   tree expr;
10317   bool id_expression_or_member_access_p = false;
10318   const char *saved_message;
10319   bool saved_integral_constant_expression_p;
10320   bool saved_non_integral_constant_expression_p;
10321   cp_token *id_expr_start_token;
10322   cp_token *start_token = cp_lexer_peek_token (parser->lexer);
10323
10324   if (start_token->type == CPP_DECLTYPE)
10325     {
10326       /* Already parsed.  */
10327       cp_lexer_consume_token (parser->lexer);
10328       return start_token->u.value;
10329     }
10330
10331   /* Look for the `decltype' token.  */
10332   if (!cp_parser_require_keyword (parser, RID_DECLTYPE, RT_DECLTYPE))
10333     return error_mark_node;
10334
10335   /* Types cannot be defined in a `decltype' expression.  Save away the
10336      old message.  */
10337   saved_message = parser->type_definition_forbidden_message;
10338
10339   /* And create the new one.  */
10340   parser->type_definition_forbidden_message
10341     = G_("types may not be defined in %<decltype%> expressions");
10342
10343   /* The restrictions on constant-expressions do not apply inside
10344      decltype expressions.  */
10345   saved_integral_constant_expression_p
10346     = parser->integral_constant_expression_p;
10347   saved_non_integral_constant_expression_p
10348     = parser->non_integral_constant_expression_p;
10349   parser->integral_constant_expression_p = false;
10350
10351   /* Do not actually evaluate the expression.  */
10352   ++cp_unevaluated_operand;
10353
10354   /* Do not warn about problems with the expression.  */
10355   ++c_inhibit_evaluation_warnings;
10356
10357   /* Parse the opening `('.  */
10358   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
10359     return error_mark_node;
10360   
10361   /* First, try parsing an id-expression.  */
10362   id_expr_start_token = cp_lexer_peek_token (parser->lexer);
10363   cp_parser_parse_tentatively (parser);
10364   expr = cp_parser_id_expression (parser,
10365                                   /*template_keyword_p=*/false,
10366                                   /*check_dependency_p=*/true,
10367                                   /*template_p=*/NULL,
10368                                   /*declarator_p=*/false,
10369                                   /*optional_p=*/false);
10370
10371   if (!cp_parser_error_occurred (parser) && expr != error_mark_node)
10372     {
10373       bool non_integral_constant_expression_p = false;
10374       tree id_expression = expr;
10375       cp_id_kind idk;
10376       const char *error_msg;
10377
10378       if (TREE_CODE (expr) == IDENTIFIER_NODE)
10379         /* Lookup the name we got back from the id-expression.  */
10380         expr = cp_parser_lookup_name (parser, expr,
10381                                       none_type,
10382                                       /*is_template=*/false,
10383                                       /*is_namespace=*/false,
10384                                       /*check_dependency=*/true,
10385                                       /*ambiguous_decls=*/NULL,
10386                                       id_expr_start_token->location);
10387
10388       if (expr
10389           && expr != error_mark_node
10390           && TREE_CODE (expr) != TEMPLATE_ID_EXPR
10391           && TREE_CODE (expr) != TYPE_DECL
10392           && (TREE_CODE (expr) != BIT_NOT_EXPR
10393               || !TYPE_P (TREE_OPERAND (expr, 0)))
10394           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
10395         {
10396           /* Complete lookup of the id-expression.  */
10397           expr = (finish_id_expression
10398                   (id_expression, expr, parser->scope, &idk,
10399                    /*integral_constant_expression_p=*/false,
10400                    /*allow_non_integral_constant_expression_p=*/true,
10401                    &non_integral_constant_expression_p,
10402                    /*template_p=*/false,
10403                    /*done=*/true,
10404                    /*address_p=*/false,
10405                    /*template_arg_p=*/false,
10406                    &error_msg,
10407                    id_expr_start_token->location));
10408
10409           if (expr == error_mark_node)
10410             /* We found an id-expression, but it was something that we
10411                should not have found. This is an error, not something
10412                we can recover from, so note that we found an
10413                id-expression and we'll recover as gracefully as
10414                possible.  */
10415             id_expression_or_member_access_p = true;
10416         }
10417
10418       if (expr 
10419           && expr != error_mark_node
10420           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
10421         /* We have an id-expression.  */
10422         id_expression_or_member_access_p = true;
10423     }
10424
10425   if (!id_expression_or_member_access_p)
10426     {
10427       /* Abort the id-expression parse.  */
10428       cp_parser_abort_tentative_parse (parser);
10429
10430       /* Parsing tentatively, again.  */
10431       cp_parser_parse_tentatively (parser);
10432
10433       /* Parse a class member access.  */
10434       expr = cp_parser_postfix_expression (parser, /*address_p=*/false,
10435                                            /*cast_p=*/false,
10436                                            /*member_access_only_p=*/true, NULL);
10437
10438       if (expr 
10439           && expr != error_mark_node
10440           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
10441         /* We have an id-expression.  */
10442         id_expression_or_member_access_p = true;
10443     }
10444
10445   if (id_expression_or_member_access_p)
10446     /* We have parsed the complete id-expression or member access.  */
10447     cp_parser_parse_definitely (parser);
10448   else
10449     {
10450       bool saved_greater_than_is_operator_p;
10451
10452       /* Abort our attempt to parse an id-expression or member access
10453          expression.  */
10454       cp_parser_abort_tentative_parse (parser);
10455
10456       /* Within a parenthesized expression, a `>' token is always
10457          the greater-than operator.  */
10458       saved_greater_than_is_operator_p
10459         = parser->greater_than_is_operator_p;
10460       parser->greater_than_is_operator_p = true;
10461
10462       /* Parse a full expression.  */
10463       expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
10464
10465       /* The `>' token might be the end of a template-id or
10466          template-parameter-list now.  */
10467       parser->greater_than_is_operator_p
10468         = saved_greater_than_is_operator_p;
10469     }
10470
10471   /* Go back to evaluating expressions.  */
10472   --cp_unevaluated_operand;
10473   --c_inhibit_evaluation_warnings;
10474
10475   /* Restore the old message and the integral constant expression
10476      flags.  */
10477   parser->type_definition_forbidden_message = saved_message;
10478   parser->integral_constant_expression_p
10479     = saved_integral_constant_expression_p;
10480   parser->non_integral_constant_expression_p
10481     = saved_non_integral_constant_expression_p;
10482
10483   /* Parse to the closing `)'.  */
10484   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
10485     {
10486       cp_parser_skip_to_closing_parenthesis (parser, true, false,
10487                                              /*consume_paren=*/true);
10488       return error_mark_node;
10489     }
10490
10491   expr = finish_decltype_type (expr, id_expression_or_member_access_p,
10492                                tf_warning_or_error);
10493
10494   /* Replace the decltype with a CPP_DECLTYPE so we don't need to parse
10495      it again.  */
10496   start_token->type = CPP_DECLTYPE;
10497   start_token->u.value = expr;
10498   start_token->keyword = RID_MAX;
10499   cp_lexer_purge_tokens_after (parser->lexer, start_token);
10500
10501   return expr;
10502 }
10503
10504 /* Special member functions [gram.special] */
10505
10506 /* Parse a conversion-function-id.
10507
10508    conversion-function-id:
10509      operator conversion-type-id
10510
10511    Returns an IDENTIFIER_NODE representing the operator.  */
10512
10513 static tree
10514 cp_parser_conversion_function_id (cp_parser* parser)
10515 {
10516   tree type;
10517   tree saved_scope;
10518   tree saved_qualifying_scope;
10519   tree saved_object_scope;
10520   tree pushed_scope = NULL_TREE;
10521
10522   /* Look for the `operator' token.  */
10523   if (!cp_parser_require_keyword (parser, RID_OPERATOR, RT_OPERATOR))
10524     return error_mark_node;
10525   /* When we parse the conversion-type-id, the current scope will be
10526      reset.  However, we need that information in able to look up the
10527      conversion function later, so we save it here.  */
10528   saved_scope = parser->scope;
10529   saved_qualifying_scope = parser->qualifying_scope;
10530   saved_object_scope = parser->object_scope;
10531   /* We must enter the scope of the class so that the names of
10532      entities declared within the class are available in the
10533      conversion-type-id.  For example, consider:
10534
10535        struct S {
10536          typedef int I;
10537          operator I();
10538        };
10539
10540        S::operator I() { ... }
10541
10542      In order to see that `I' is a type-name in the definition, we
10543      must be in the scope of `S'.  */
10544   if (saved_scope)
10545     pushed_scope = push_scope (saved_scope);
10546   /* Parse the conversion-type-id.  */
10547   type = cp_parser_conversion_type_id (parser);
10548   /* Leave the scope of the class, if any.  */
10549   if (pushed_scope)
10550     pop_scope (pushed_scope);
10551   /* Restore the saved scope.  */
10552   parser->scope = saved_scope;
10553   parser->qualifying_scope = saved_qualifying_scope;
10554   parser->object_scope = saved_object_scope;
10555   /* If the TYPE is invalid, indicate failure.  */
10556   if (type == error_mark_node)
10557     return error_mark_node;
10558   return mangle_conv_op_name_for_type (type);
10559 }
10560
10561 /* Parse a conversion-type-id:
10562
10563    conversion-type-id:
10564      type-specifier-seq conversion-declarator [opt]
10565
10566    Returns the TYPE specified.  */
10567
10568 static tree
10569 cp_parser_conversion_type_id (cp_parser* parser)
10570 {
10571   tree attributes;
10572   cp_decl_specifier_seq type_specifiers;
10573   cp_declarator *declarator;
10574   tree type_specified;
10575
10576   /* Parse the attributes.  */
10577   attributes = cp_parser_attributes_opt (parser);
10578   /* Parse the type-specifiers.  */
10579   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
10580                                 /*is_trailing_return=*/false,
10581                                 &type_specifiers);
10582   /* If that didn't work, stop.  */
10583   if (type_specifiers.type == error_mark_node)
10584     return error_mark_node;
10585   /* Parse the conversion-declarator.  */
10586   declarator = cp_parser_conversion_declarator_opt (parser);
10587
10588   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
10589                                     /*initialized=*/0, &attributes);
10590   if (attributes)
10591     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
10592
10593   /* Don't give this error when parsing tentatively.  This happens to
10594      work because we always parse this definitively once.  */
10595   if (! cp_parser_uncommitted_to_tentative_parse_p (parser)
10596       && type_uses_auto (type_specified))
10597     {
10598       error ("invalid use of %<auto%> in conversion operator");
10599       return error_mark_node;
10600     }
10601
10602   return type_specified;
10603 }
10604
10605 /* Parse an (optional) conversion-declarator.
10606
10607    conversion-declarator:
10608      ptr-operator conversion-declarator [opt]
10609
10610    */
10611
10612 static cp_declarator *
10613 cp_parser_conversion_declarator_opt (cp_parser* parser)
10614 {
10615   enum tree_code code;
10616   tree class_type;
10617   cp_cv_quals cv_quals;
10618
10619   /* We don't know if there's a ptr-operator next, or not.  */
10620   cp_parser_parse_tentatively (parser);
10621   /* Try the ptr-operator.  */
10622   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
10623   /* If it worked, look for more conversion-declarators.  */
10624   if (cp_parser_parse_definitely (parser))
10625     {
10626       cp_declarator *declarator;
10627
10628       /* Parse another optional declarator.  */
10629       declarator = cp_parser_conversion_declarator_opt (parser);
10630
10631       return cp_parser_make_indirect_declarator
10632         (code, class_type, cv_quals, declarator);
10633    }
10634
10635   return NULL;
10636 }
10637
10638 /* Parse an (optional) ctor-initializer.
10639
10640    ctor-initializer:
10641      : mem-initializer-list
10642
10643    Returns TRUE iff the ctor-initializer was actually present.  */
10644
10645 static bool
10646 cp_parser_ctor_initializer_opt (cp_parser* parser)
10647 {
10648   /* If the next token is not a `:', then there is no
10649      ctor-initializer.  */
10650   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
10651     {
10652       /* Do default initialization of any bases and members.  */
10653       if (DECL_CONSTRUCTOR_P (current_function_decl))
10654         finish_mem_initializers (NULL_TREE);
10655
10656       return false;
10657     }
10658
10659   /* Consume the `:' token.  */
10660   cp_lexer_consume_token (parser->lexer);
10661   /* And the mem-initializer-list.  */
10662   cp_parser_mem_initializer_list (parser);
10663
10664   return true;
10665 }
10666
10667 /* Parse a mem-initializer-list.
10668
10669    mem-initializer-list:
10670      mem-initializer ... [opt]
10671      mem-initializer ... [opt] , mem-initializer-list  */
10672
10673 static void
10674 cp_parser_mem_initializer_list (cp_parser* parser)
10675 {
10676   tree mem_initializer_list = NULL_TREE;
10677   cp_token *token = cp_lexer_peek_token (parser->lexer);
10678
10679   /* Let the semantic analysis code know that we are starting the
10680      mem-initializer-list.  */
10681   if (!DECL_CONSTRUCTOR_P (current_function_decl))
10682     error_at (token->location,
10683               "only constructors take member initializers");
10684
10685   /* Loop through the list.  */
10686   while (true)
10687     {
10688       tree mem_initializer;
10689
10690       token = cp_lexer_peek_token (parser->lexer);
10691       /* Parse the mem-initializer.  */
10692       mem_initializer = cp_parser_mem_initializer (parser);
10693       /* If the next token is a `...', we're expanding member initializers. */
10694       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
10695         {
10696           /* Consume the `...'. */
10697           cp_lexer_consume_token (parser->lexer);
10698
10699           /* The TREE_PURPOSE must be a _TYPE, because base-specifiers
10700              can be expanded but members cannot. */
10701           if (mem_initializer != error_mark_node
10702               && !TYPE_P (TREE_PURPOSE (mem_initializer)))
10703             {
10704               error_at (token->location,
10705                         "cannot expand initializer for member %<%D%>",
10706                         TREE_PURPOSE (mem_initializer));
10707               mem_initializer = error_mark_node;
10708             }
10709
10710           /* Construct the pack expansion type. */
10711           if (mem_initializer != error_mark_node)
10712             mem_initializer = make_pack_expansion (mem_initializer);
10713         }
10714       /* Add it to the list, unless it was erroneous.  */
10715       if (mem_initializer != error_mark_node)
10716         {
10717           TREE_CHAIN (mem_initializer) = mem_initializer_list;
10718           mem_initializer_list = mem_initializer;
10719         }
10720       /* If the next token is not a `,', we're done.  */
10721       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
10722         break;
10723       /* Consume the `,' token.  */
10724       cp_lexer_consume_token (parser->lexer);
10725     }
10726
10727   /* Perform semantic analysis.  */
10728   if (DECL_CONSTRUCTOR_P (current_function_decl))
10729     finish_mem_initializers (mem_initializer_list);
10730 }
10731
10732 /* Parse a mem-initializer.
10733
10734    mem-initializer:
10735      mem-initializer-id ( expression-list [opt] )
10736      mem-initializer-id braced-init-list
10737
10738    GNU extension:
10739
10740    mem-initializer:
10741      ( expression-list [opt] )
10742
10743    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
10744    class) or FIELD_DECL (for a non-static data member) to initialize;
10745    the TREE_VALUE is the expression-list.  An empty initialization
10746    list is represented by void_list_node.  */
10747
10748 static tree
10749 cp_parser_mem_initializer (cp_parser* parser)
10750 {
10751   tree mem_initializer_id;
10752   tree expression_list;
10753   tree member;
10754   cp_token *token = cp_lexer_peek_token (parser->lexer);
10755
10756   /* Find out what is being initialized.  */
10757   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
10758     {
10759       permerror (token->location,
10760                  "anachronistic old-style base class initializer");
10761       mem_initializer_id = NULL_TREE;
10762     }
10763   else
10764     {
10765       mem_initializer_id = cp_parser_mem_initializer_id (parser);
10766       if (mem_initializer_id == error_mark_node)
10767         return mem_initializer_id;
10768     }
10769   member = expand_member_init (mem_initializer_id);
10770   if (member && !DECL_P (member))
10771     in_base_initializer = 1;
10772
10773   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
10774     {
10775       bool expr_non_constant_p;
10776       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
10777       expression_list = cp_parser_braced_list (parser, &expr_non_constant_p);
10778       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
10779       expression_list = build_tree_list (NULL_TREE, expression_list);
10780     }
10781   else
10782     {
10783       VEC(tree,gc)* vec;
10784       vec = cp_parser_parenthesized_expression_list (parser, non_attr,
10785                                                      /*cast_p=*/false,
10786                                                      /*allow_expansion_p=*/true,
10787                                                      /*non_constant_p=*/NULL);
10788       if (vec == NULL)
10789         return error_mark_node;
10790       expression_list = build_tree_list_vec (vec);
10791       release_tree_vector (vec);
10792     }
10793
10794   if (expression_list == error_mark_node)
10795     return error_mark_node;
10796   if (!expression_list)
10797     expression_list = void_type_node;
10798
10799   in_base_initializer = 0;
10800
10801   return member ? build_tree_list (member, expression_list) : error_mark_node;
10802 }
10803
10804 /* Parse a mem-initializer-id.
10805
10806    mem-initializer-id:
10807      :: [opt] nested-name-specifier [opt] class-name
10808      identifier
10809
10810    Returns a TYPE indicating the class to be initializer for the first
10811    production.  Returns an IDENTIFIER_NODE indicating the data member
10812    to be initialized for the second production.  */
10813
10814 static tree
10815 cp_parser_mem_initializer_id (cp_parser* parser)
10816 {
10817   bool global_scope_p;
10818   bool nested_name_specifier_p;
10819   bool template_p = false;
10820   tree id;
10821
10822   cp_token *token = cp_lexer_peek_token (parser->lexer);
10823
10824   /* `typename' is not allowed in this context ([temp.res]).  */
10825   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
10826     {
10827       error_at (token->location, 
10828                 "keyword %<typename%> not allowed in this context (a qualified "
10829                 "member initializer is implicitly a type)");
10830       cp_lexer_consume_token (parser->lexer);
10831     }
10832   /* Look for the optional `::' operator.  */
10833   global_scope_p
10834     = (cp_parser_global_scope_opt (parser,
10835                                    /*current_scope_valid_p=*/false)
10836        != NULL_TREE);
10837   /* Look for the optional nested-name-specifier.  The simplest way to
10838      implement:
10839
10840        [temp.res]
10841
10842        The keyword `typename' is not permitted in a base-specifier or
10843        mem-initializer; in these contexts a qualified name that
10844        depends on a template-parameter is implicitly assumed to be a
10845        type name.
10846
10847      is to assume that we have seen the `typename' keyword at this
10848      point.  */
10849   nested_name_specifier_p
10850     = (cp_parser_nested_name_specifier_opt (parser,
10851                                             /*typename_keyword_p=*/true,
10852                                             /*check_dependency_p=*/true,
10853                                             /*type_p=*/true,
10854                                             /*is_declaration=*/true)
10855        != NULL_TREE);
10856   if (nested_name_specifier_p)
10857     template_p = cp_parser_optional_template_keyword (parser);
10858   /* If there is a `::' operator or a nested-name-specifier, then we
10859      are definitely looking for a class-name.  */
10860   if (global_scope_p || nested_name_specifier_p)
10861     return cp_parser_class_name (parser,
10862                                  /*typename_keyword_p=*/true,
10863                                  /*template_keyword_p=*/template_p,
10864                                  typename_type,
10865                                  /*check_dependency_p=*/true,
10866                                  /*class_head_p=*/false,
10867                                  /*is_declaration=*/true);
10868   /* Otherwise, we could also be looking for an ordinary identifier.  */
10869   cp_parser_parse_tentatively (parser);
10870   /* Try a class-name.  */
10871   id = cp_parser_class_name (parser,
10872                              /*typename_keyword_p=*/true,
10873                              /*template_keyword_p=*/false,
10874                              none_type,
10875                              /*check_dependency_p=*/true,
10876                              /*class_head_p=*/false,
10877                              /*is_declaration=*/true);
10878   /* If we found one, we're done.  */
10879   if (cp_parser_parse_definitely (parser))
10880     return id;
10881   /* Otherwise, look for an ordinary identifier.  */
10882   return cp_parser_identifier (parser);
10883 }
10884
10885 /* Overloading [gram.over] */
10886
10887 /* Parse an operator-function-id.
10888
10889    operator-function-id:
10890      operator operator
10891
10892    Returns an IDENTIFIER_NODE for the operator which is a
10893    human-readable spelling of the identifier, e.g., `operator +'.  */
10894
10895 static tree
10896 cp_parser_operator_function_id (cp_parser* parser)
10897 {
10898   /* Look for the `operator' keyword.  */
10899   if (!cp_parser_require_keyword (parser, RID_OPERATOR, RT_OPERATOR))
10900     return error_mark_node;
10901   /* And then the name of the operator itself.  */
10902   return cp_parser_operator (parser);
10903 }
10904
10905 /* Parse an operator.
10906
10907    operator:
10908      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
10909      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
10910      || ++ -- , ->* -> () []
10911
10912    GNU Extensions:
10913
10914    operator:
10915      <? >? <?= >?=
10916
10917    Returns an IDENTIFIER_NODE for the operator which is a
10918    human-readable spelling of the identifier, e.g., `operator +'.  */
10919
10920 static tree
10921 cp_parser_operator (cp_parser* parser)
10922 {
10923   tree id = NULL_TREE;
10924   cp_token *token;
10925
10926   /* Peek at the next token.  */
10927   token = cp_lexer_peek_token (parser->lexer);
10928   /* Figure out which operator we have.  */
10929   switch (token->type)
10930     {
10931     case CPP_KEYWORD:
10932       {
10933         enum tree_code op;
10934
10935         /* The keyword should be either `new' or `delete'.  */
10936         if (token->keyword == RID_NEW)
10937           op = NEW_EXPR;
10938         else if (token->keyword == RID_DELETE)
10939           op = DELETE_EXPR;
10940         else
10941           break;
10942
10943         /* Consume the `new' or `delete' token.  */
10944         cp_lexer_consume_token (parser->lexer);
10945
10946         /* Peek at the next token.  */
10947         token = cp_lexer_peek_token (parser->lexer);
10948         /* If it's a `[' token then this is the array variant of the
10949            operator.  */
10950         if (token->type == CPP_OPEN_SQUARE)
10951           {
10952             /* Consume the `[' token.  */
10953             cp_lexer_consume_token (parser->lexer);
10954             /* Look for the `]' token.  */
10955             cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
10956             id = ansi_opname (op == NEW_EXPR
10957                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
10958           }
10959         /* Otherwise, we have the non-array variant.  */
10960         else
10961           id = ansi_opname (op);
10962
10963         return id;
10964       }
10965
10966     case CPP_PLUS:
10967       id = ansi_opname (PLUS_EXPR);
10968       break;
10969
10970     case CPP_MINUS:
10971       id = ansi_opname (MINUS_EXPR);
10972       break;
10973
10974     case CPP_MULT:
10975       id = ansi_opname (MULT_EXPR);
10976       break;
10977
10978     case CPP_DIV:
10979       id = ansi_opname (TRUNC_DIV_EXPR);
10980       break;
10981
10982     case CPP_MOD:
10983       id = ansi_opname (TRUNC_MOD_EXPR);
10984       break;
10985
10986     case CPP_XOR:
10987       id = ansi_opname (BIT_XOR_EXPR);
10988       break;
10989
10990     case CPP_AND:
10991       id = ansi_opname (BIT_AND_EXPR);
10992       break;
10993
10994     case CPP_OR:
10995       id = ansi_opname (BIT_IOR_EXPR);
10996       break;
10997
10998     case CPP_COMPL:
10999       id = ansi_opname (BIT_NOT_EXPR);
11000       break;
11001
11002     case CPP_NOT:
11003       id = ansi_opname (TRUTH_NOT_EXPR);
11004       break;
11005
11006     case CPP_EQ:
11007       id = ansi_assopname (NOP_EXPR);
11008       break;
11009
11010     case CPP_LESS:
11011       id = ansi_opname (LT_EXPR);
11012       break;
11013
11014     case CPP_GREATER:
11015       id = ansi_opname (GT_EXPR);
11016       break;
11017
11018     case CPP_PLUS_EQ:
11019       id = ansi_assopname (PLUS_EXPR);
11020       break;
11021
11022     case CPP_MINUS_EQ:
11023       id = ansi_assopname (MINUS_EXPR);
11024       break;
11025
11026     case CPP_MULT_EQ:
11027       id = ansi_assopname (MULT_EXPR);
11028       break;
11029
11030     case CPP_DIV_EQ:
11031       id = ansi_assopname (TRUNC_DIV_EXPR);
11032       break;
11033
11034     case CPP_MOD_EQ:
11035       id = ansi_assopname (TRUNC_MOD_EXPR);
11036       break;
11037
11038     case CPP_XOR_EQ:
11039       id = ansi_assopname (BIT_XOR_EXPR);
11040       break;
11041
11042     case CPP_AND_EQ:
11043       id = ansi_assopname (BIT_AND_EXPR);
11044       break;
11045
11046     case CPP_OR_EQ:
11047       id = ansi_assopname (BIT_IOR_EXPR);
11048       break;
11049
11050     case CPP_LSHIFT:
11051       id = ansi_opname (LSHIFT_EXPR);
11052       break;
11053
11054     case CPP_RSHIFT:
11055       id = ansi_opname (RSHIFT_EXPR);
11056       break;
11057
11058     case CPP_LSHIFT_EQ:
11059       id = ansi_assopname (LSHIFT_EXPR);
11060       break;
11061
11062     case CPP_RSHIFT_EQ:
11063       id = ansi_assopname (RSHIFT_EXPR);
11064       break;
11065
11066     case CPP_EQ_EQ:
11067       id = ansi_opname (EQ_EXPR);
11068       break;
11069
11070     case CPP_NOT_EQ:
11071       id = ansi_opname (NE_EXPR);
11072       break;
11073
11074     case CPP_LESS_EQ:
11075       id = ansi_opname (LE_EXPR);
11076       break;
11077
11078     case CPP_GREATER_EQ:
11079       id = ansi_opname (GE_EXPR);
11080       break;
11081
11082     case CPP_AND_AND:
11083       id = ansi_opname (TRUTH_ANDIF_EXPR);
11084       break;
11085
11086     case CPP_OR_OR:
11087       id = ansi_opname (TRUTH_ORIF_EXPR);
11088       break;
11089
11090     case CPP_PLUS_PLUS:
11091       id = ansi_opname (POSTINCREMENT_EXPR);
11092       break;
11093
11094     case CPP_MINUS_MINUS:
11095       id = ansi_opname (PREDECREMENT_EXPR);
11096       break;
11097
11098     case CPP_COMMA:
11099       id = ansi_opname (COMPOUND_EXPR);
11100       break;
11101
11102     case CPP_DEREF_STAR:
11103       id = ansi_opname (MEMBER_REF);
11104       break;
11105
11106     case CPP_DEREF:
11107       id = ansi_opname (COMPONENT_REF);
11108       break;
11109
11110     case CPP_OPEN_PAREN:
11111       /* Consume the `('.  */
11112       cp_lexer_consume_token (parser->lexer);
11113       /* Look for the matching `)'.  */
11114       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
11115       return ansi_opname (CALL_EXPR);
11116
11117     case CPP_OPEN_SQUARE:
11118       /* Consume the `['.  */
11119       cp_lexer_consume_token (parser->lexer);
11120       /* Look for the matching `]'.  */
11121       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
11122       return ansi_opname (ARRAY_REF);
11123
11124     default:
11125       /* Anything else is an error.  */
11126       break;
11127     }
11128
11129   /* If we have selected an identifier, we need to consume the
11130      operator token.  */
11131   if (id)
11132     cp_lexer_consume_token (parser->lexer);
11133   /* Otherwise, no valid operator name was present.  */
11134   else
11135     {
11136       cp_parser_error (parser, "expected operator");
11137       id = error_mark_node;
11138     }
11139
11140   return id;
11141 }
11142
11143 /* Parse a template-declaration.
11144
11145    template-declaration:
11146      export [opt] template < template-parameter-list > declaration
11147
11148    If MEMBER_P is TRUE, this template-declaration occurs within a
11149    class-specifier.
11150
11151    The grammar rule given by the standard isn't correct.  What
11152    is really meant is:
11153
11154    template-declaration:
11155      export [opt] template-parameter-list-seq
11156        decl-specifier-seq [opt] init-declarator [opt] ;
11157      export [opt] template-parameter-list-seq
11158        function-definition
11159
11160    template-parameter-list-seq:
11161      template-parameter-list-seq [opt]
11162      template < template-parameter-list >  */
11163
11164 static void
11165 cp_parser_template_declaration (cp_parser* parser, bool member_p)
11166 {
11167   /* Check for `export'.  */
11168   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
11169     {
11170       /* Consume the `export' token.  */
11171       cp_lexer_consume_token (parser->lexer);
11172       /* Warn that we do not support `export'.  */
11173       warning (0, "keyword %<export%> not implemented, and will be ignored");
11174     }
11175
11176   cp_parser_template_declaration_after_export (parser, member_p);
11177 }
11178
11179 /* Parse a template-parameter-list.
11180
11181    template-parameter-list:
11182      template-parameter
11183      template-parameter-list , template-parameter
11184
11185    Returns a TREE_LIST.  Each node represents a template parameter.
11186    The nodes are connected via their TREE_CHAINs.  */
11187
11188 static tree
11189 cp_parser_template_parameter_list (cp_parser* parser)
11190 {
11191   tree parameter_list = NULL_TREE;
11192
11193   begin_template_parm_list ();
11194
11195   /* The loop below parses the template parms.  We first need to know
11196      the total number of template parms to be able to compute proper
11197      canonical types of each dependent type. So after the loop, when
11198      we know the total number of template parms,
11199      end_template_parm_list computes the proper canonical types and
11200      fixes up the dependent types accordingly.  */
11201   while (true)
11202     {
11203       tree parameter;
11204       bool is_non_type;
11205       bool is_parameter_pack;
11206       location_t parm_loc;
11207
11208       /* Parse the template-parameter.  */
11209       parm_loc = cp_lexer_peek_token (parser->lexer)->location;
11210       parameter = cp_parser_template_parameter (parser, 
11211                                                 &is_non_type,
11212                                                 &is_parameter_pack);
11213       /* Add it to the list.  */
11214       if (parameter != error_mark_node)
11215         parameter_list = process_template_parm (parameter_list,
11216                                                 parm_loc,
11217                                                 parameter,
11218                                                 is_non_type,
11219                                                 is_parameter_pack,
11220                                                 0);
11221       else
11222        {
11223          tree err_parm = build_tree_list (parameter, parameter);
11224          parameter_list = chainon (parameter_list, err_parm);
11225        }
11226
11227       /* If the next token is not a `,', we're done.  */
11228       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11229         break;
11230       /* Otherwise, consume the `,' token.  */
11231       cp_lexer_consume_token (parser->lexer);
11232     }
11233
11234   return end_template_parm_list (parameter_list);
11235 }
11236
11237 /* Parse a template-parameter.
11238
11239    template-parameter:
11240      type-parameter
11241      parameter-declaration
11242
11243    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
11244    the parameter.  The TREE_PURPOSE is the default value, if any.
11245    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
11246    iff this parameter is a non-type parameter.  *IS_PARAMETER_PACK is
11247    set to true iff this parameter is a parameter pack. */
11248
11249 static tree
11250 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type,
11251                               bool *is_parameter_pack)
11252 {
11253   cp_token *token;
11254   cp_parameter_declarator *parameter_declarator;
11255   cp_declarator *id_declarator;
11256   tree parm;
11257
11258   /* Assume it is a type parameter or a template parameter.  */
11259   *is_non_type = false;
11260   /* Assume it not a parameter pack. */
11261   *is_parameter_pack = false;
11262   /* Peek at the next token.  */
11263   token = cp_lexer_peek_token (parser->lexer);
11264   /* If it is `class' or `template', we have a type-parameter.  */
11265   if (token->keyword == RID_TEMPLATE)
11266     return cp_parser_type_parameter (parser, is_parameter_pack);
11267   /* If it is `class' or `typename' we do not know yet whether it is a
11268      type parameter or a non-type parameter.  Consider:
11269
11270        template <typename T, typename T::X X> ...
11271
11272      or:
11273
11274        template <class C, class D*> ...
11275
11276      Here, the first parameter is a type parameter, and the second is
11277      a non-type parameter.  We can tell by looking at the token after
11278      the identifier -- if it is a `,', `=', or `>' then we have a type
11279      parameter.  */
11280   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
11281     {
11282       /* Peek at the token after `class' or `typename'.  */
11283       token = cp_lexer_peek_nth_token (parser->lexer, 2);
11284       /* If it's an ellipsis, we have a template type parameter
11285          pack. */
11286       if (token->type == CPP_ELLIPSIS)
11287         return cp_parser_type_parameter (parser, is_parameter_pack);
11288       /* If it's an identifier, skip it.  */
11289       if (token->type == CPP_NAME)
11290         token = cp_lexer_peek_nth_token (parser->lexer, 3);
11291       /* Now, see if the token looks like the end of a template
11292          parameter.  */
11293       if (token->type == CPP_COMMA
11294           || token->type == CPP_EQ
11295           || token->type == CPP_GREATER)
11296         return cp_parser_type_parameter (parser, is_parameter_pack);
11297     }
11298
11299   /* Otherwise, it is a non-type parameter.
11300
11301      [temp.param]
11302
11303      When parsing a default template-argument for a non-type
11304      template-parameter, the first non-nested `>' is taken as the end
11305      of the template parameter-list rather than a greater-than
11306      operator.  */
11307   *is_non_type = true;
11308   parameter_declarator
11309      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
11310                                         /*parenthesized_p=*/NULL);
11311
11312   /* If the parameter declaration is marked as a parameter pack, set
11313      *IS_PARAMETER_PACK to notify the caller. Also, unmark the
11314      declarator's PACK_EXPANSION_P, otherwise we'll get errors from
11315      grokdeclarator. */
11316   if (parameter_declarator
11317       && parameter_declarator->declarator
11318       && parameter_declarator->declarator->parameter_pack_p)
11319     {
11320       *is_parameter_pack = true;
11321       parameter_declarator->declarator->parameter_pack_p = false;
11322     }
11323
11324   /* If the next token is an ellipsis, and we don't already have it
11325      marked as a parameter pack, then we have a parameter pack (that
11326      has no declarator).  */
11327   if (!*is_parameter_pack
11328       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
11329       && declarator_can_be_parameter_pack (parameter_declarator->declarator))
11330     {
11331       /* Consume the `...'.  */
11332       cp_lexer_consume_token (parser->lexer);
11333       maybe_warn_variadic_templates ();
11334       
11335       *is_parameter_pack = true;
11336     }
11337   /* We might end up with a pack expansion as the type of the non-type
11338      template parameter, in which case this is a non-type template
11339      parameter pack.  */
11340   else if (parameter_declarator
11341            && parameter_declarator->decl_specifiers.type
11342            && PACK_EXPANSION_P (parameter_declarator->decl_specifiers.type))
11343     {
11344       *is_parameter_pack = true;
11345       parameter_declarator->decl_specifiers.type = 
11346         PACK_EXPANSION_PATTERN (parameter_declarator->decl_specifiers.type);
11347     }
11348
11349   if (*is_parameter_pack && cp_lexer_next_token_is (parser->lexer, CPP_EQ))
11350     {
11351       /* Parameter packs cannot have default arguments.  However, a
11352          user may try to do so, so we'll parse them and give an
11353          appropriate diagnostic here.  */
11354
11355       cp_token *start_token = cp_lexer_peek_token (parser->lexer);
11356       
11357       /* Find the name of the parameter pack.  */     
11358       id_declarator = parameter_declarator->declarator;
11359       while (id_declarator && id_declarator->kind != cdk_id)
11360         id_declarator = id_declarator->declarator;
11361       
11362       if (id_declarator && id_declarator->kind == cdk_id)
11363         error_at (start_token->location,
11364                   "template parameter pack %qD cannot have a default argument",
11365                   id_declarator->u.id.unqualified_name);
11366       else
11367         error_at (start_token->location,
11368                   "template parameter pack cannot have a default argument");
11369       
11370       /* Parse the default argument, but throw away the result.  */
11371       cp_parser_default_argument (parser, /*template_parm_p=*/true);
11372     }
11373
11374   parm = grokdeclarator (parameter_declarator->declarator,
11375                          &parameter_declarator->decl_specifiers,
11376                          TPARM, /*initialized=*/0,
11377                          /*attrlist=*/NULL);
11378   if (parm == error_mark_node)
11379     return error_mark_node;
11380
11381   return build_tree_list (parameter_declarator->default_argument, parm);
11382 }
11383
11384 /* Parse a type-parameter.
11385
11386    type-parameter:
11387      class identifier [opt]
11388      class identifier [opt] = type-id
11389      typename identifier [opt]
11390      typename identifier [opt] = type-id
11391      template < template-parameter-list > class identifier [opt]
11392      template < template-parameter-list > class identifier [opt]
11393        = id-expression
11394
11395    GNU Extension (variadic templates):
11396
11397    type-parameter:
11398      class ... identifier [opt]
11399      typename ... identifier [opt]
11400
11401    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
11402    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
11403    the declaration of the parameter.
11404
11405    Sets *IS_PARAMETER_PACK if this is a template parameter pack. */
11406
11407 static tree
11408 cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
11409 {
11410   cp_token *token;
11411   tree parameter;
11412
11413   /* Look for a keyword to tell us what kind of parameter this is.  */
11414   token = cp_parser_require (parser, CPP_KEYWORD, RT_CLASS_TYPENAME_TEMPLATE);
11415   if (!token)
11416     return error_mark_node;
11417
11418   switch (token->keyword)
11419     {
11420     case RID_CLASS:
11421     case RID_TYPENAME:
11422       {
11423         tree identifier;
11424         tree default_argument;
11425
11426         /* If the next token is an ellipsis, we have a template
11427            argument pack. */
11428         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
11429           {
11430             /* Consume the `...' token. */
11431             cp_lexer_consume_token (parser->lexer);
11432             maybe_warn_variadic_templates ();
11433
11434             *is_parameter_pack = true;
11435           }
11436
11437         /* If the next token is an identifier, then it names the
11438            parameter.  */
11439         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
11440           identifier = cp_parser_identifier (parser);
11441         else
11442           identifier = NULL_TREE;
11443
11444         /* Create the parameter.  */
11445         parameter = finish_template_type_parm (class_type_node, identifier);
11446
11447         /* If the next token is an `=', we have a default argument.  */
11448         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
11449           {
11450             /* Consume the `=' token.  */
11451             cp_lexer_consume_token (parser->lexer);
11452             /* Parse the default-argument.  */
11453             push_deferring_access_checks (dk_no_deferred);
11454             default_argument = cp_parser_type_id (parser);
11455
11456             /* Template parameter packs cannot have default
11457                arguments. */
11458             if (*is_parameter_pack)
11459               {
11460                 if (identifier)
11461                   error_at (token->location,
11462                             "template parameter pack %qD cannot have a "
11463                             "default argument", identifier);
11464                 else
11465                   error_at (token->location,
11466                             "template parameter packs cannot have "
11467                             "default arguments");
11468                 default_argument = NULL_TREE;
11469               }
11470             pop_deferring_access_checks ();
11471           }
11472         else
11473           default_argument = NULL_TREE;
11474
11475         /* Create the combined representation of the parameter and the
11476            default argument.  */
11477         parameter = build_tree_list (default_argument, parameter);
11478       }
11479       break;
11480
11481     case RID_TEMPLATE:
11482       {
11483         tree identifier;
11484         tree default_argument;
11485
11486         /* Look for the `<'.  */
11487         cp_parser_require (parser, CPP_LESS, RT_LESS);
11488         /* Parse the template-parameter-list.  */
11489         cp_parser_template_parameter_list (parser);
11490         /* Look for the `>'.  */
11491         cp_parser_require (parser, CPP_GREATER, RT_GREATER);
11492         /* Look for the `class' keyword.  */
11493         cp_parser_require_keyword (parser, RID_CLASS, RT_CLASS);
11494         /* If the next token is an ellipsis, we have a template
11495            argument pack. */
11496         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
11497           {
11498             /* Consume the `...' token. */
11499             cp_lexer_consume_token (parser->lexer);
11500             maybe_warn_variadic_templates ();
11501
11502             *is_parameter_pack = true;
11503           }
11504         /* If the next token is an `=', then there is a
11505            default-argument.  If the next token is a `>', we are at
11506            the end of the parameter-list.  If the next token is a `,',
11507            then we are at the end of this parameter.  */
11508         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
11509             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
11510             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11511           {
11512             identifier = cp_parser_identifier (parser);
11513             /* Treat invalid names as if the parameter were nameless.  */
11514             if (identifier == error_mark_node)
11515               identifier = NULL_TREE;
11516           }
11517         else
11518           identifier = NULL_TREE;
11519
11520         /* Create the template parameter.  */
11521         parameter = finish_template_template_parm (class_type_node,
11522                                                    identifier);
11523
11524         /* If the next token is an `=', then there is a
11525            default-argument.  */
11526         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
11527           {
11528             bool is_template;
11529
11530             /* Consume the `='.  */
11531             cp_lexer_consume_token (parser->lexer);
11532             /* Parse the id-expression.  */
11533             push_deferring_access_checks (dk_no_deferred);
11534             /* save token before parsing the id-expression, for error
11535                reporting */
11536             token = cp_lexer_peek_token (parser->lexer);
11537             default_argument
11538               = cp_parser_id_expression (parser,
11539                                          /*template_keyword_p=*/false,
11540                                          /*check_dependency_p=*/true,
11541                                          /*template_p=*/&is_template,
11542                                          /*declarator_p=*/false,
11543                                          /*optional_p=*/false);
11544             if (TREE_CODE (default_argument) == TYPE_DECL)
11545               /* If the id-expression was a template-id that refers to
11546                  a template-class, we already have the declaration here,
11547                  so no further lookup is needed.  */
11548                  ;
11549             else
11550               /* Look up the name.  */
11551               default_argument
11552                 = cp_parser_lookup_name (parser, default_argument,
11553                                          none_type,
11554                                          /*is_template=*/is_template,
11555                                          /*is_namespace=*/false,
11556                                          /*check_dependency=*/true,
11557                                          /*ambiguous_decls=*/NULL,
11558                                          token->location);
11559             /* See if the default argument is valid.  */
11560             default_argument
11561               = check_template_template_default_arg (default_argument);
11562
11563             /* Template parameter packs cannot have default
11564                arguments. */
11565             if (*is_parameter_pack)
11566               {
11567                 if (identifier)
11568                   error_at (token->location,
11569                             "template parameter pack %qD cannot "
11570                             "have a default argument",
11571                             identifier);
11572                 else
11573                   error_at (token->location, "template parameter packs cannot "
11574                             "have default arguments");
11575                 default_argument = NULL_TREE;
11576               }
11577             pop_deferring_access_checks ();
11578           }
11579         else
11580           default_argument = NULL_TREE;
11581
11582         /* Create the combined representation of the parameter and the
11583            default argument.  */
11584         parameter = build_tree_list (default_argument, parameter);
11585       }
11586       break;
11587
11588     default:
11589       gcc_unreachable ();
11590       break;
11591     }
11592
11593   return parameter;
11594 }
11595
11596 /* Parse a template-id.
11597
11598    template-id:
11599      template-name < template-argument-list [opt] >
11600
11601    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
11602    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
11603    returned.  Otherwise, if the template-name names a function, or set
11604    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
11605    names a class, returns a TYPE_DECL for the specialization.
11606
11607    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
11608    uninstantiated templates.  */
11609
11610 static tree
11611 cp_parser_template_id (cp_parser *parser,
11612                        bool template_keyword_p,
11613                        bool check_dependency_p,
11614                        bool is_declaration)
11615 {
11616   int i;
11617   tree templ;
11618   tree arguments;
11619   tree template_id;
11620   cp_token_position start_of_id = 0;
11621   deferred_access_check *chk;
11622   VEC (deferred_access_check,gc) *access_check;
11623   cp_token *next_token = NULL, *next_token_2 = NULL;
11624   bool is_identifier;
11625
11626   /* If the next token corresponds to a template-id, there is no need
11627      to reparse it.  */
11628   next_token = cp_lexer_peek_token (parser->lexer);
11629   if (next_token->type == CPP_TEMPLATE_ID)
11630     {
11631       struct tree_check *check_value;
11632
11633       /* Get the stored value.  */
11634       check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
11635       /* Perform any access checks that were deferred.  */
11636       access_check = check_value->checks;
11637       if (access_check)
11638         {
11639           FOR_EACH_VEC_ELT (deferred_access_check, access_check, i, chk)
11640             perform_or_defer_access_check (chk->binfo,
11641                                            chk->decl,
11642                                            chk->diag_decl);
11643         }
11644       /* Return the stored value.  */
11645       return check_value->value;
11646     }
11647
11648   /* Avoid performing name lookup if there is no possibility of
11649      finding a template-id.  */
11650   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
11651       || (next_token->type == CPP_NAME
11652           && !cp_parser_nth_token_starts_template_argument_list_p
11653                (parser, 2)))
11654     {
11655       cp_parser_error (parser, "expected template-id");
11656       return error_mark_node;
11657     }
11658
11659   /* Remember where the template-id starts.  */
11660   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
11661     start_of_id = cp_lexer_token_position (parser->lexer, false);
11662
11663   push_deferring_access_checks (dk_deferred);
11664
11665   /* Parse the template-name.  */
11666   is_identifier = false;
11667   templ = cp_parser_template_name (parser, template_keyword_p,
11668                                    check_dependency_p,
11669                                    is_declaration,
11670                                    &is_identifier);
11671   if (templ == error_mark_node || is_identifier)
11672     {
11673       pop_deferring_access_checks ();
11674       return templ;
11675     }
11676
11677   /* If we find the sequence `[:' after a template-name, it's probably
11678      a digraph-typo for `< ::'. Substitute the tokens and check if we can
11679      parse correctly the argument list.  */
11680   next_token = cp_lexer_peek_token (parser->lexer);
11681   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
11682   if (next_token->type == CPP_OPEN_SQUARE
11683       && next_token->flags & DIGRAPH
11684       && next_token_2->type == CPP_COLON
11685       && !(next_token_2->flags & PREV_WHITE))
11686     {
11687       cp_parser_parse_tentatively (parser);
11688       /* Change `:' into `::'.  */
11689       next_token_2->type = CPP_SCOPE;
11690       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
11691          CPP_LESS.  */
11692       cp_lexer_consume_token (parser->lexer);
11693
11694       /* Parse the arguments.  */
11695       arguments = cp_parser_enclosed_template_argument_list (parser);
11696       if (!cp_parser_parse_definitely (parser))
11697         {
11698           /* If we couldn't parse an argument list, then we revert our changes
11699              and return simply an error. Maybe this is not a template-id
11700              after all.  */
11701           next_token_2->type = CPP_COLON;
11702           cp_parser_error (parser, "expected %<<%>");
11703           pop_deferring_access_checks ();
11704           return error_mark_node;
11705         }
11706       /* Otherwise, emit an error about the invalid digraph, but continue
11707          parsing because we got our argument list.  */
11708       if (permerror (next_token->location,
11709                      "%<<::%> cannot begin a template-argument list"))
11710         {
11711           static bool hint = false;
11712           inform (next_token->location,
11713                   "%<<:%> is an alternate spelling for %<[%>."
11714                   " Insert whitespace between %<<%> and %<::%>");
11715           if (!hint && !flag_permissive)
11716             {
11717               inform (next_token->location, "(if you use %<-fpermissive%>"
11718                       " G++ will accept your code)");
11719               hint = true;
11720             }
11721         }
11722     }
11723   else
11724     {
11725       /* Look for the `<' that starts the template-argument-list.  */
11726       if (!cp_parser_require (parser, CPP_LESS, RT_LESS))
11727         {
11728           pop_deferring_access_checks ();
11729           return error_mark_node;
11730         }
11731       /* Parse the arguments.  */
11732       arguments = cp_parser_enclosed_template_argument_list (parser);
11733     }
11734
11735   /* Build a representation of the specialization.  */
11736   if (TREE_CODE (templ) == IDENTIFIER_NODE)
11737     template_id = build_min_nt (TEMPLATE_ID_EXPR, templ, arguments);
11738   else if (DECL_CLASS_TEMPLATE_P (templ)
11739            || DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
11740     {
11741       bool entering_scope;
11742       /* In "template <typename T> ... A<T>::", A<T> is the abstract A
11743          template (rather than some instantiation thereof) only if
11744          is not nested within some other construct.  For example, in
11745          "template <typename T> void f(T) { A<T>::", A<T> is just an
11746          instantiation of A.  */
11747       entering_scope = (template_parm_scope_p ()
11748                         && cp_lexer_next_token_is (parser->lexer,
11749                                                    CPP_SCOPE));
11750       template_id
11751         = finish_template_type (templ, arguments, entering_scope);
11752     }
11753   else
11754     {
11755       /* If it's not a class-template or a template-template, it should be
11756          a function-template.  */
11757       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (templ)
11758                    || TREE_CODE (templ) == OVERLOAD
11759                    || BASELINK_P (templ)));
11760
11761       template_id = lookup_template_function (templ, arguments);
11762     }
11763
11764   /* If parsing tentatively, replace the sequence of tokens that makes
11765      up the template-id with a CPP_TEMPLATE_ID token.  That way,
11766      should we re-parse the token stream, we will not have to repeat
11767      the effort required to do the parse, nor will we issue duplicate
11768      error messages about problems during instantiation of the
11769      template.  */
11770   if (start_of_id)
11771     {
11772       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
11773
11774       /* Reset the contents of the START_OF_ID token.  */
11775       token->type = CPP_TEMPLATE_ID;
11776       /* Retrieve any deferred checks.  Do not pop this access checks yet
11777          so the memory will not be reclaimed during token replacing below.  */
11778       token->u.tree_check_value = ggc_alloc_cleared_tree_check ();
11779       token->u.tree_check_value->value = template_id;
11780       token->u.tree_check_value->checks = get_deferred_access_checks ();
11781       token->keyword = RID_MAX;
11782
11783       /* Purge all subsequent tokens.  */
11784       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
11785
11786       /* ??? Can we actually assume that, if template_id ==
11787          error_mark_node, we will have issued a diagnostic to the
11788          user, as opposed to simply marking the tentative parse as
11789          failed?  */
11790       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
11791         error_at (token->location, "parse error in template argument list");
11792     }
11793
11794   pop_deferring_access_checks ();
11795   return template_id;
11796 }
11797
11798 /* Parse a template-name.
11799
11800    template-name:
11801      identifier
11802
11803    The standard should actually say:
11804
11805    template-name:
11806      identifier
11807      operator-function-id
11808
11809    A defect report has been filed about this issue.
11810
11811    A conversion-function-id cannot be a template name because they cannot
11812    be part of a template-id. In fact, looking at this code:
11813
11814    a.operator K<int>()
11815
11816    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
11817    It is impossible to call a templated conversion-function-id with an
11818    explicit argument list, since the only allowed template parameter is
11819    the type to which it is converting.
11820
11821    If TEMPLATE_KEYWORD_P is true, then we have just seen the
11822    `template' keyword, in a construction like:
11823
11824      T::template f<3>()
11825
11826    In that case `f' is taken to be a template-name, even though there
11827    is no way of knowing for sure.
11828
11829    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
11830    name refers to a set of overloaded functions, at least one of which
11831    is a template, or an IDENTIFIER_NODE with the name of the template,
11832    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
11833    names are looked up inside uninstantiated templates.  */
11834
11835 static tree
11836 cp_parser_template_name (cp_parser* parser,
11837                          bool template_keyword_p,
11838                          bool check_dependency_p,
11839                          bool is_declaration,
11840                          bool *is_identifier)
11841 {
11842   tree identifier;
11843   tree decl;
11844   tree fns;
11845   cp_token *token = cp_lexer_peek_token (parser->lexer);
11846
11847   /* If the next token is `operator', then we have either an
11848      operator-function-id or a conversion-function-id.  */
11849   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
11850     {
11851       /* We don't know whether we're looking at an
11852          operator-function-id or a conversion-function-id.  */
11853       cp_parser_parse_tentatively (parser);
11854       /* Try an operator-function-id.  */
11855       identifier = cp_parser_operator_function_id (parser);
11856       /* If that didn't work, try a conversion-function-id.  */
11857       if (!cp_parser_parse_definitely (parser))
11858         {
11859           cp_parser_error (parser, "expected template-name");
11860           return error_mark_node;
11861         }
11862     }
11863   /* Look for the identifier.  */
11864   else
11865     identifier = cp_parser_identifier (parser);
11866
11867   /* If we didn't find an identifier, we don't have a template-id.  */
11868   if (identifier == error_mark_node)
11869     return error_mark_node;
11870
11871   /* If the name immediately followed the `template' keyword, then it
11872      is a template-name.  However, if the next token is not `<', then
11873      we do not treat it as a template-name, since it is not being used
11874      as part of a template-id.  This enables us to handle constructs
11875      like:
11876
11877        template <typename T> struct S { S(); };
11878        template <typename T> S<T>::S();
11879
11880      correctly.  We would treat `S' as a template -- if it were `S<T>'
11881      -- but we do not if there is no `<'.  */
11882
11883   if (processing_template_decl
11884       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
11885     {
11886       /* In a declaration, in a dependent context, we pretend that the
11887          "template" keyword was present in order to improve error
11888          recovery.  For example, given:
11889
11890            template <typename T> void f(T::X<int>);
11891
11892          we want to treat "X<int>" as a template-id.  */
11893       if (is_declaration
11894           && !template_keyword_p
11895           && parser->scope && TYPE_P (parser->scope)
11896           && check_dependency_p
11897           && dependent_scope_p (parser->scope)
11898           /* Do not do this for dtors (or ctors), since they never
11899              need the template keyword before their name.  */
11900           && !constructor_name_p (identifier, parser->scope))
11901         {
11902           cp_token_position start = 0;
11903
11904           /* Explain what went wrong.  */
11905           error_at (token->location, "non-template %qD used as template",
11906                     identifier);
11907           inform (token->location, "use %<%T::template %D%> to indicate that it is a template",
11908                   parser->scope, identifier);
11909           /* If parsing tentatively, find the location of the "<" token.  */
11910           if (cp_parser_simulate_error (parser))
11911             start = cp_lexer_token_position (parser->lexer, true);
11912           /* Parse the template arguments so that we can issue error
11913              messages about them.  */
11914           cp_lexer_consume_token (parser->lexer);
11915           cp_parser_enclosed_template_argument_list (parser);
11916           /* Skip tokens until we find a good place from which to
11917              continue parsing.  */
11918           cp_parser_skip_to_closing_parenthesis (parser,
11919                                                  /*recovering=*/true,
11920                                                  /*or_comma=*/true,
11921                                                  /*consume_paren=*/false);
11922           /* If parsing tentatively, permanently remove the
11923              template argument list.  That will prevent duplicate
11924              error messages from being issued about the missing
11925              "template" keyword.  */
11926           if (start)
11927             cp_lexer_purge_tokens_after (parser->lexer, start);
11928           if (is_identifier)
11929             *is_identifier = true;
11930           return identifier;
11931         }
11932
11933       /* If the "template" keyword is present, then there is generally
11934          no point in doing name-lookup, so we just return IDENTIFIER.
11935          But, if the qualifying scope is non-dependent then we can
11936          (and must) do name-lookup normally.  */
11937       if (template_keyword_p
11938           && (!parser->scope
11939               || (TYPE_P (parser->scope)
11940                   && dependent_type_p (parser->scope))))
11941         return identifier;
11942     }
11943
11944   /* Look up the name.  */
11945   decl = cp_parser_lookup_name (parser, identifier,
11946                                 none_type,
11947                                 /*is_template=*/true,
11948                                 /*is_namespace=*/false,
11949                                 check_dependency_p,
11950                                 /*ambiguous_decls=*/NULL,
11951                                 token->location);
11952
11953   /* If DECL is a template, then the name was a template-name.  */
11954   if (TREE_CODE (decl) == TEMPLATE_DECL)
11955     ;
11956   else
11957     {
11958       tree fn = NULL_TREE;
11959
11960       /* The standard does not explicitly indicate whether a name that
11961          names a set of overloaded declarations, some of which are
11962          templates, is a template-name.  However, such a name should
11963          be a template-name; otherwise, there is no way to form a
11964          template-id for the overloaded templates.  */
11965       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
11966       if (TREE_CODE (fns) == OVERLOAD)
11967         for (fn = fns; fn; fn = OVL_NEXT (fn))
11968           if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
11969             break;
11970
11971       if (!fn)
11972         {
11973           /* The name does not name a template.  */
11974           cp_parser_error (parser, "expected template-name");
11975           return error_mark_node;
11976         }
11977     }
11978
11979   /* If DECL is dependent, and refers to a function, then just return
11980      its name; we will look it up again during template instantiation.  */
11981   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
11982     {
11983       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
11984       if (TYPE_P (scope) && dependent_type_p (scope))
11985         return identifier;
11986     }
11987
11988   return decl;
11989 }
11990
11991 /* Parse a template-argument-list.
11992
11993    template-argument-list:
11994      template-argument ... [opt]
11995      template-argument-list , template-argument ... [opt]
11996
11997    Returns a TREE_VEC containing the arguments.  */
11998
11999 static tree
12000 cp_parser_template_argument_list (cp_parser* parser)
12001 {
12002   tree fixed_args[10];
12003   unsigned n_args = 0;
12004   unsigned alloced = 10;
12005   tree *arg_ary = fixed_args;
12006   tree vec;
12007   bool saved_in_template_argument_list_p;
12008   bool saved_ice_p;
12009   bool saved_non_ice_p;
12010
12011   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
12012   parser->in_template_argument_list_p = true;
12013   /* Even if the template-id appears in an integral
12014      constant-expression, the contents of the argument list do
12015      not.  */
12016   saved_ice_p = parser->integral_constant_expression_p;
12017   parser->integral_constant_expression_p = false;
12018   saved_non_ice_p = parser->non_integral_constant_expression_p;
12019   parser->non_integral_constant_expression_p = false;
12020   /* Parse the arguments.  */
12021   do
12022     {
12023       tree argument;
12024
12025       if (n_args)
12026         /* Consume the comma.  */
12027         cp_lexer_consume_token (parser->lexer);
12028
12029       /* Parse the template-argument.  */
12030       argument = cp_parser_template_argument (parser);
12031
12032       /* If the next token is an ellipsis, we're expanding a template
12033          argument pack. */
12034       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
12035         {
12036           if (argument == error_mark_node)
12037             {
12038               cp_token *token = cp_lexer_peek_token (parser->lexer);
12039               error_at (token->location,
12040                         "expected parameter pack before %<...%>");
12041             }
12042           /* Consume the `...' token. */
12043           cp_lexer_consume_token (parser->lexer);
12044
12045           /* Make the argument into a TYPE_PACK_EXPANSION or
12046              EXPR_PACK_EXPANSION. */
12047           argument = make_pack_expansion (argument);
12048         }
12049
12050       if (n_args == alloced)
12051         {
12052           alloced *= 2;
12053
12054           if (arg_ary == fixed_args)
12055             {
12056               arg_ary = XNEWVEC (tree, alloced);
12057               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
12058             }
12059           else
12060             arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
12061         }
12062       arg_ary[n_args++] = argument;
12063     }
12064   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
12065
12066   vec = make_tree_vec (n_args);
12067
12068   while (n_args--)
12069     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
12070
12071   if (arg_ary != fixed_args)
12072     free (arg_ary);
12073   parser->non_integral_constant_expression_p = saved_non_ice_p;
12074   parser->integral_constant_expression_p = saved_ice_p;
12075   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
12076 #ifdef ENABLE_CHECKING
12077   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
12078 #endif
12079   return vec;
12080 }
12081
12082 /* Parse a template-argument.
12083
12084    template-argument:
12085      assignment-expression
12086      type-id
12087      id-expression
12088
12089    The representation is that of an assignment-expression, type-id, or
12090    id-expression -- except that the qualified id-expression is
12091    evaluated, so that the value returned is either a DECL or an
12092    OVERLOAD.
12093
12094    Although the standard says "assignment-expression", it forbids
12095    throw-expressions or assignments in the template argument.
12096    Therefore, we use "conditional-expression" instead.  */
12097
12098 static tree
12099 cp_parser_template_argument (cp_parser* parser)
12100 {
12101   tree argument;
12102   bool template_p;
12103   bool address_p;
12104   bool maybe_type_id = false;
12105   cp_token *token = NULL, *argument_start_token = NULL;
12106   cp_id_kind idk;
12107
12108   /* There's really no way to know what we're looking at, so we just
12109      try each alternative in order.
12110
12111        [temp.arg]
12112
12113        In a template-argument, an ambiguity between a type-id and an
12114        expression is resolved to a type-id, regardless of the form of
12115        the corresponding template-parameter.
12116
12117      Therefore, we try a type-id first.  */
12118   cp_parser_parse_tentatively (parser);
12119   argument = cp_parser_template_type_arg (parser);
12120   /* If there was no error parsing the type-id but the next token is a
12121      '>>', our behavior depends on which dialect of C++ we're
12122      parsing. In C++98, we probably found a typo for '> >'. But there
12123      are type-id which are also valid expressions. For instance:
12124
12125      struct X { int operator >> (int); };
12126      template <int V> struct Foo {};
12127      Foo<X () >> 5> r;
12128
12129      Here 'X()' is a valid type-id of a function type, but the user just
12130      wanted to write the expression "X() >> 5". Thus, we remember that we
12131      found a valid type-id, but we still try to parse the argument as an
12132      expression to see what happens. 
12133
12134      In C++0x, the '>>' will be considered two separate '>'
12135      tokens.  */
12136   if (!cp_parser_error_occurred (parser)
12137       && cxx_dialect == cxx98
12138       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
12139     {
12140       maybe_type_id = true;
12141       cp_parser_abort_tentative_parse (parser);
12142     }
12143   else
12144     {
12145       /* If the next token isn't a `,' or a `>', then this argument wasn't
12146       really finished. This means that the argument is not a valid
12147       type-id.  */
12148       if (!cp_parser_next_token_ends_template_argument_p (parser))
12149         cp_parser_error (parser, "expected template-argument");
12150       /* If that worked, we're done.  */
12151       if (cp_parser_parse_definitely (parser))
12152         return argument;
12153     }
12154   /* We're still not sure what the argument will be.  */
12155   cp_parser_parse_tentatively (parser);
12156   /* Try a template.  */
12157   argument_start_token = cp_lexer_peek_token (parser->lexer);
12158   argument = cp_parser_id_expression (parser,
12159                                       /*template_keyword_p=*/false,
12160                                       /*check_dependency_p=*/true,
12161                                       &template_p,
12162                                       /*declarator_p=*/false,
12163                                       /*optional_p=*/false);
12164   /* If the next token isn't a `,' or a `>', then this argument wasn't
12165      really finished.  */
12166   if (!cp_parser_next_token_ends_template_argument_p (parser))
12167     cp_parser_error (parser, "expected template-argument");
12168   if (!cp_parser_error_occurred (parser))
12169     {
12170       /* Figure out what is being referred to.  If the id-expression
12171          was for a class template specialization, then we will have a
12172          TYPE_DECL at this point.  There is no need to do name lookup
12173          at this point in that case.  */
12174       if (TREE_CODE (argument) != TYPE_DECL)
12175         argument = cp_parser_lookup_name (parser, argument,
12176                                           none_type,
12177                                           /*is_template=*/template_p,
12178                                           /*is_namespace=*/false,
12179                                           /*check_dependency=*/true,
12180                                           /*ambiguous_decls=*/NULL,
12181                                           argument_start_token->location);
12182       if (TREE_CODE (argument) != TEMPLATE_DECL
12183           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
12184         cp_parser_error (parser, "expected template-name");
12185     }
12186   if (cp_parser_parse_definitely (parser))
12187     return argument;
12188   /* It must be a non-type argument.  There permitted cases are given
12189      in [temp.arg.nontype]:
12190
12191      -- an integral constant-expression of integral or enumeration
12192         type; or
12193
12194      -- the name of a non-type template-parameter; or
12195
12196      -- the name of an object or function with external linkage...
12197
12198      -- the address of an object or function with external linkage...
12199
12200      -- a pointer to member...  */
12201   /* Look for a non-type template parameter.  */
12202   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12203     {
12204       cp_parser_parse_tentatively (parser);
12205       argument = cp_parser_primary_expression (parser,
12206                                                /*address_p=*/false,
12207                                                /*cast_p=*/false,
12208                                                /*template_arg_p=*/true,
12209                                                &idk);
12210       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
12211           || !cp_parser_next_token_ends_template_argument_p (parser))
12212         cp_parser_simulate_error (parser);
12213       if (cp_parser_parse_definitely (parser))
12214         return argument;
12215     }
12216
12217   /* If the next token is "&", the argument must be the address of an
12218      object or function with external linkage.  */
12219   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
12220   if (address_p)
12221     cp_lexer_consume_token (parser->lexer);
12222   /* See if we might have an id-expression.  */
12223   token = cp_lexer_peek_token (parser->lexer);
12224   if (token->type == CPP_NAME
12225       || token->keyword == RID_OPERATOR
12226       || token->type == CPP_SCOPE
12227       || token->type == CPP_TEMPLATE_ID
12228       || token->type == CPP_NESTED_NAME_SPECIFIER)
12229     {
12230       cp_parser_parse_tentatively (parser);
12231       argument = cp_parser_primary_expression (parser,
12232                                                address_p,
12233                                                /*cast_p=*/false,
12234                                                /*template_arg_p=*/true,
12235                                                &idk);
12236       if (cp_parser_error_occurred (parser)
12237           || !cp_parser_next_token_ends_template_argument_p (parser))
12238         cp_parser_abort_tentative_parse (parser);
12239       else
12240         {
12241           tree probe;
12242
12243           if (TREE_CODE (argument) == INDIRECT_REF)
12244             {
12245               gcc_assert (REFERENCE_REF_P (argument));
12246               argument = TREE_OPERAND (argument, 0);
12247             }
12248
12249           /* If we're in a template, we represent a qualified-id referring
12250              to a static data member as a SCOPE_REF even if the scope isn't
12251              dependent so that we can check access control later.  */
12252           probe = argument;
12253           if (TREE_CODE (probe) == SCOPE_REF)
12254             probe = TREE_OPERAND (probe, 1);
12255           if (TREE_CODE (probe) == VAR_DECL)
12256             {
12257               /* A variable without external linkage might still be a
12258                  valid constant-expression, so no error is issued here
12259                  if the external-linkage check fails.  */
12260               if (!address_p && !DECL_EXTERNAL_LINKAGE_P (probe))
12261                 cp_parser_simulate_error (parser);
12262             }
12263           else if (is_overloaded_fn (argument))
12264             /* All overloaded functions are allowed; if the external
12265                linkage test does not pass, an error will be issued
12266                later.  */
12267             ;
12268           else if (address_p
12269                    && (TREE_CODE (argument) == OFFSET_REF
12270                        || TREE_CODE (argument) == SCOPE_REF))
12271             /* A pointer-to-member.  */
12272             ;
12273           else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
12274             ;
12275           else
12276             cp_parser_simulate_error (parser);
12277
12278           if (cp_parser_parse_definitely (parser))
12279             {
12280               if (address_p)
12281                 argument = build_x_unary_op (ADDR_EXPR, argument,
12282                                              tf_warning_or_error);
12283               return argument;
12284             }
12285         }
12286     }
12287   /* If the argument started with "&", there are no other valid
12288      alternatives at this point.  */
12289   if (address_p)
12290     {
12291       cp_parser_error (parser, "invalid non-type template argument");
12292       return error_mark_node;
12293     }
12294
12295   /* If the argument wasn't successfully parsed as a type-id followed
12296      by '>>', the argument can only be a constant expression now.
12297      Otherwise, we try parsing the constant-expression tentatively,
12298      because the argument could really be a type-id.  */
12299   if (maybe_type_id)
12300     cp_parser_parse_tentatively (parser);
12301   argument = cp_parser_constant_expression (parser,
12302                                             /*allow_non_constant_p=*/false,
12303                                             /*non_constant_p=*/NULL);
12304   argument = fold_non_dependent_expr (argument);
12305   if (!maybe_type_id)
12306     return argument;
12307   if (!cp_parser_next_token_ends_template_argument_p (parser))
12308     cp_parser_error (parser, "expected template-argument");
12309   if (cp_parser_parse_definitely (parser))
12310     return argument;
12311   /* We did our best to parse the argument as a non type-id, but that
12312      was the only alternative that matched (albeit with a '>' after
12313      it). We can assume it's just a typo from the user, and a
12314      diagnostic will then be issued.  */
12315   return cp_parser_template_type_arg (parser);
12316 }
12317
12318 /* Parse an explicit-instantiation.
12319
12320    explicit-instantiation:
12321      template declaration
12322
12323    Although the standard says `declaration', what it really means is:
12324
12325    explicit-instantiation:
12326      template decl-specifier-seq [opt] declarator [opt] ;
12327
12328    Things like `template int S<int>::i = 5, int S<double>::j;' are not
12329    supposed to be allowed.  A defect report has been filed about this
12330    issue.
12331
12332    GNU Extension:
12333
12334    explicit-instantiation:
12335      storage-class-specifier template
12336        decl-specifier-seq [opt] declarator [opt] ;
12337      function-specifier template
12338        decl-specifier-seq [opt] declarator [opt] ;  */
12339
12340 static void
12341 cp_parser_explicit_instantiation (cp_parser* parser)
12342 {
12343   int declares_class_or_enum;
12344   cp_decl_specifier_seq decl_specifiers;
12345   tree extension_specifier = NULL_TREE;
12346
12347   timevar_push (TV_TEMPLATE_INST);
12348
12349   /* Look for an (optional) storage-class-specifier or
12350      function-specifier.  */
12351   if (cp_parser_allow_gnu_extensions_p (parser))
12352     {
12353       extension_specifier
12354         = cp_parser_storage_class_specifier_opt (parser);
12355       if (!extension_specifier)
12356         extension_specifier
12357           = cp_parser_function_specifier_opt (parser,
12358                                               /*decl_specs=*/NULL);
12359     }
12360
12361   /* Look for the `template' keyword.  */
12362   cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE);
12363   /* Let the front end know that we are processing an explicit
12364      instantiation.  */
12365   begin_explicit_instantiation ();
12366   /* [temp.explicit] says that we are supposed to ignore access
12367      control while processing explicit instantiation directives.  */
12368   push_deferring_access_checks (dk_no_check);
12369   /* Parse a decl-specifier-seq.  */
12370   cp_parser_decl_specifier_seq (parser,
12371                                 CP_PARSER_FLAGS_OPTIONAL,
12372                                 &decl_specifiers,
12373                                 &declares_class_or_enum);
12374   /* If there was exactly one decl-specifier, and it declared a class,
12375      and there's no declarator, then we have an explicit type
12376      instantiation.  */
12377   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
12378     {
12379       tree type;
12380
12381       type = check_tag_decl (&decl_specifiers);
12382       /* Turn access control back on for names used during
12383          template instantiation.  */
12384       pop_deferring_access_checks ();
12385       if (type)
12386         do_type_instantiation (type, extension_specifier,
12387                                /*complain=*/tf_error);
12388     }
12389   else
12390     {
12391       cp_declarator *declarator;
12392       tree decl;
12393
12394       /* Parse the declarator.  */
12395       declarator
12396         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
12397                                 /*ctor_dtor_or_conv_p=*/NULL,
12398                                 /*parenthesized_p=*/NULL,
12399                                 /*member_p=*/false);
12400       if (declares_class_or_enum & 2)
12401         cp_parser_check_for_definition_in_return_type (declarator,
12402                                                        decl_specifiers.type,
12403                                                        decl_specifiers.type_location);
12404       if (declarator != cp_error_declarator)
12405         {
12406           if (decl_specifiers.specs[(int)ds_inline])
12407             permerror (input_location, "explicit instantiation shall not use"
12408                        " %<inline%> specifier");
12409           if (decl_specifiers.specs[(int)ds_constexpr])
12410             permerror (input_location, "explicit instantiation shall not use"
12411                        " %<constexpr%> specifier");
12412
12413           decl = grokdeclarator (declarator, &decl_specifiers,
12414                                  NORMAL, 0, &decl_specifiers.attributes);
12415           /* Turn access control back on for names used during
12416              template instantiation.  */
12417           pop_deferring_access_checks ();
12418           /* Do the explicit instantiation.  */
12419           do_decl_instantiation (decl, extension_specifier);
12420         }
12421       else
12422         {
12423           pop_deferring_access_checks ();
12424           /* Skip the body of the explicit instantiation.  */
12425           cp_parser_skip_to_end_of_statement (parser);
12426         }
12427     }
12428   /* We're done with the instantiation.  */
12429   end_explicit_instantiation ();
12430
12431   cp_parser_consume_semicolon_at_end_of_statement (parser);
12432
12433   timevar_pop (TV_TEMPLATE_INST);
12434 }
12435
12436 /* Parse an explicit-specialization.
12437
12438    explicit-specialization:
12439      template < > declaration
12440
12441    Although the standard says `declaration', what it really means is:
12442
12443    explicit-specialization:
12444      template <> decl-specifier [opt] init-declarator [opt] ;
12445      template <> function-definition
12446      template <> explicit-specialization
12447      template <> template-declaration  */
12448
12449 static void
12450 cp_parser_explicit_specialization (cp_parser* parser)
12451 {
12452   bool need_lang_pop;
12453   cp_token *token = cp_lexer_peek_token (parser->lexer);
12454
12455   /* Look for the `template' keyword.  */
12456   cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE);
12457   /* Look for the `<'.  */
12458   cp_parser_require (parser, CPP_LESS, RT_LESS);
12459   /* Look for the `>'.  */
12460   cp_parser_require (parser, CPP_GREATER, RT_GREATER);
12461   /* We have processed another parameter list.  */
12462   ++parser->num_template_parameter_lists;
12463   /* [temp]
12464
12465      A template ... explicit specialization ... shall not have C
12466      linkage.  */
12467   if (current_lang_name == lang_name_c)
12468     {
12469       error_at (token->location, "template specialization with C linkage");
12470       /* Give it C++ linkage to avoid confusing other parts of the
12471          front end.  */
12472       push_lang_context (lang_name_cplusplus);
12473       need_lang_pop = true;
12474     }
12475   else
12476     need_lang_pop = false;
12477   /* Let the front end know that we are beginning a specialization.  */
12478   if (!begin_specialization ())
12479     {
12480       end_specialization ();
12481       return;
12482     }
12483
12484   /* If the next keyword is `template', we need to figure out whether
12485      or not we're looking a template-declaration.  */
12486   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
12487     {
12488       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
12489           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
12490         cp_parser_template_declaration_after_export (parser,
12491                                                      /*member_p=*/false);
12492       else
12493         cp_parser_explicit_specialization (parser);
12494     }
12495   else
12496     /* Parse the dependent declaration.  */
12497     cp_parser_single_declaration (parser,
12498                                   /*checks=*/NULL,
12499                                   /*member_p=*/false,
12500                                   /*explicit_specialization_p=*/true,
12501                                   /*friend_p=*/NULL);
12502   /* We're done with the specialization.  */
12503   end_specialization ();
12504   /* For the erroneous case of a template with C linkage, we pushed an
12505      implicit C++ linkage scope; exit that scope now.  */
12506   if (need_lang_pop)
12507     pop_lang_context ();
12508   /* We're done with this parameter list.  */
12509   --parser->num_template_parameter_lists;
12510 }
12511
12512 /* Parse a type-specifier.
12513
12514    type-specifier:
12515      simple-type-specifier
12516      class-specifier
12517      enum-specifier
12518      elaborated-type-specifier
12519      cv-qualifier
12520
12521    GNU Extension:
12522
12523    type-specifier:
12524      __complex__
12525
12526    Returns a representation of the type-specifier.  For a
12527    class-specifier, enum-specifier, or elaborated-type-specifier, a
12528    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
12529
12530    The parser flags FLAGS is used to control type-specifier parsing.
12531
12532    If IS_DECLARATION is TRUE, then this type-specifier is appearing
12533    in a decl-specifier-seq.
12534
12535    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
12536    class-specifier, enum-specifier, or elaborated-type-specifier, then
12537    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
12538    if a type is declared; 2 if it is defined.  Otherwise, it is set to
12539    zero.
12540
12541    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
12542    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
12543    is set to FALSE.  */
12544
12545 static tree
12546 cp_parser_type_specifier (cp_parser* parser,
12547                           cp_parser_flags flags,
12548                           cp_decl_specifier_seq *decl_specs,
12549                           bool is_declaration,
12550                           int* declares_class_or_enum,
12551                           bool* is_cv_qualifier)
12552 {
12553   tree type_spec = NULL_TREE;
12554   cp_token *token;
12555   enum rid keyword;
12556   cp_decl_spec ds = ds_last;
12557
12558   /* Assume this type-specifier does not declare a new type.  */
12559   if (declares_class_or_enum)
12560     *declares_class_or_enum = 0;
12561   /* And that it does not specify a cv-qualifier.  */
12562   if (is_cv_qualifier)
12563     *is_cv_qualifier = false;
12564   /* Peek at the next token.  */
12565   token = cp_lexer_peek_token (parser->lexer);
12566
12567   /* If we're looking at a keyword, we can use that to guide the
12568      production we choose.  */
12569   keyword = token->keyword;
12570   switch (keyword)
12571     {
12572     case RID_ENUM:
12573       if ((flags & CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS))
12574         goto elaborated_type_specifier;
12575
12576       /* Look for the enum-specifier.  */
12577       type_spec = cp_parser_enum_specifier (parser);
12578       /* If that worked, we're done.  */
12579       if (type_spec)
12580         {
12581           if (declares_class_or_enum)
12582             *declares_class_or_enum = 2;
12583           if (decl_specs)
12584             cp_parser_set_decl_spec_type (decl_specs,
12585                                           type_spec,
12586                                           token->location,
12587                                           /*type_definition_p=*/true);
12588           return type_spec;
12589         }
12590       else
12591         goto elaborated_type_specifier;
12592
12593       /* Any of these indicate either a class-specifier, or an
12594          elaborated-type-specifier.  */
12595     case RID_CLASS:
12596     case RID_STRUCT:
12597     case RID_UNION:
12598       if ((flags & CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS))
12599         goto elaborated_type_specifier;
12600
12601       /* Parse tentatively so that we can back up if we don't find a
12602          class-specifier.  */
12603       cp_parser_parse_tentatively (parser);
12604       /* Look for the class-specifier.  */
12605       type_spec = cp_parser_class_specifier (parser);
12606       invoke_plugin_callbacks (PLUGIN_FINISH_TYPE, type_spec);
12607       /* If that worked, we're done.  */
12608       if (cp_parser_parse_definitely (parser))
12609         {
12610           if (declares_class_or_enum)
12611             *declares_class_or_enum = 2;
12612           if (decl_specs)
12613             cp_parser_set_decl_spec_type (decl_specs,
12614                                           type_spec,
12615                                           token->location,
12616                                           /*type_definition_p=*/true);
12617           return type_spec;
12618         }
12619
12620       /* Fall through.  */
12621     elaborated_type_specifier:
12622       /* We're declaring (not defining) a class or enum.  */
12623       if (declares_class_or_enum)
12624         *declares_class_or_enum = 1;
12625
12626       /* Fall through.  */
12627     case RID_TYPENAME:
12628       /* Look for an elaborated-type-specifier.  */
12629       type_spec
12630         = (cp_parser_elaborated_type_specifier
12631            (parser,
12632             decl_specs && decl_specs->specs[(int) ds_friend],
12633             is_declaration));
12634       if (decl_specs)
12635         cp_parser_set_decl_spec_type (decl_specs,
12636                                       type_spec,
12637                                       token->location,
12638                                       /*type_definition_p=*/false);
12639       return type_spec;
12640
12641     case RID_CONST:
12642       ds = ds_const;
12643       if (is_cv_qualifier)
12644         *is_cv_qualifier = true;
12645       break;
12646
12647     case RID_VOLATILE:
12648       ds = ds_volatile;
12649       if (is_cv_qualifier)
12650         *is_cv_qualifier = true;
12651       break;
12652
12653     case RID_RESTRICT:
12654       ds = ds_restrict;
12655       if (is_cv_qualifier)
12656         *is_cv_qualifier = true;
12657       break;
12658
12659     case RID_COMPLEX:
12660       /* The `__complex__' keyword is a GNU extension.  */
12661       ds = ds_complex;
12662       break;
12663
12664     default:
12665       break;
12666     }
12667
12668   /* Handle simple keywords.  */
12669   if (ds != ds_last)
12670     {
12671       if (decl_specs)
12672         {
12673           ++decl_specs->specs[(int)ds];
12674           decl_specs->any_specifiers_p = true;
12675         }
12676       return cp_lexer_consume_token (parser->lexer)->u.value;
12677     }
12678
12679   /* If we do not already have a type-specifier, assume we are looking
12680      at a simple-type-specifier.  */
12681   type_spec = cp_parser_simple_type_specifier (parser,
12682                                                decl_specs,
12683                                                flags);
12684
12685   /* If we didn't find a type-specifier, and a type-specifier was not
12686      optional in this context, issue an error message.  */
12687   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
12688     {
12689       cp_parser_error (parser, "expected type specifier");
12690       return error_mark_node;
12691     }
12692
12693   return type_spec;
12694 }
12695
12696 /* Parse a simple-type-specifier.
12697
12698    simple-type-specifier:
12699      :: [opt] nested-name-specifier [opt] type-name
12700      :: [opt] nested-name-specifier template template-id
12701      char
12702      wchar_t
12703      bool
12704      short
12705      int
12706      long
12707      signed
12708      unsigned
12709      float
12710      double
12711      void
12712
12713    C++0x Extension:
12714
12715    simple-type-specifier:
12716      auto
12717      decltype ( expression )   
12718      char16_t
12719      char32_t
12720      __underlying_type ( type-id )
12721
12722    GNU Extension:
12723
12724    simple-type-specifier:
12725      __int128
12726      __typeof__ unary-expression
12727      __typeof__ ( type-id )
12728
12729    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
12730    appropriately updated.  */
12731
12732 static tree
12733 cp_parser_simple_type_specifier (cp_parser* parser,
12734                                  cp_decl_specifier_seq *decl_specs,
12735                                  cp_parser_flags flags)
12736 {
12737   tree type = NULL_TREE;
12738   cp_token *token;
12739
12740   /* Peek at the next token.  */
12741   token = cp_lexer_peek_token (parser->lexer);
12742
12743   /* If we're looking at a keyword, things are easy.  */
12744   switch (token->keyword)
12745     {
12746     case RID_CHAR:
12747       if (decl_specs)
12748         decl_specs->explicit_char_p = true;
12749       type = char_type_node;
12750       break;
12751     case RID_CHAR16:
12752       type = char16_type_node;
12753       break;
12754     case RID_CHAR32:
12755       type = char32_type_node;
12756       break;
12757     case RID_WCHAR:
12758       type = wchar_type_node;
12759       break;
12760     case RID_BOOL:
12761       type = boolean_type_node;
12762       break;
12763     case RID_SHORT:
12764       if (decl_specs)
12765         ++decl_specs->specs[(int) ds_short];
12766       type = short_integer_type_node;
12767       break;
12768     case RID_INT:
12769       if (decl_specs)
12770         decl_specs->explicit_int_p = true;
12771       type = integer_type_node;
12772       break;
12773     case RID_INT128:
12774       if (!int128_integer_type_node)
12775         break;
12776       if (decl_specs)
12777         decl_specs->explicit_int128_p = true;
12778       type = int128_integer_type_node;
12779       break;
12780     case RID_LONG:
12781       if (decl_specs)
12782         ++decl_specs->specs[(int) ds_long];
12783       type = long_integer_type_node;
12784       break;
12785     case RID_SIGNED:
12786       if (decl_specs)
12787         ++decl_specs->specs[(int) ds_signed];
12788       type = integer_type_node;
12789       break;
12790     case RID_UNSIGNED:
12791       if (decl_specs)
12792         ++decl_specs->specs[(int) ds_unsigned];
12793       type = unsigned_type_node;
12794       break;
12795     case RID_FLOAT:
12796       type = float_type_node;
12797       break;
12798     case RID_DOUBLE:
12799       type = double_type_node;
12800       break;
12801     case RID_VOID:
12802       type = void_type_node;
12803       break;
12804       
12805     case RID_AUTO:
12806       maybe_warn_cpp0x (CPP0X_AUTO);
12807       type = make_auto ();
12808       break;
12809
12810     case RID_DECLTYPE:
12811       /* Since DR 743, decltype can either be a simple-type-specifier by
12812          itself or begin a nested-name-specifier.  Parsing it will replace
12813          it with a CPP_DECLTYPE, so just rewind and let the CPP_DECLTYPE
12814          handling below decide what to do.  */
12815       cp_parser_decltype (parser);
12816       cp_lexer_set_token_position (parser->lexer, token);
12817       break;
12818
12819     case RID_TYPEOF:
12820       /* Consume the `typeof' token.  */
12821       cp_lexer_consume_token (parser->lexer);
12822       /* Parse the operand to `typeof'.  */
12823       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
12824       /* If it is not already a TYPE, take its type.  */
12825       if (!TYPE_P (type))
12826         type = finish_typeof (type);
12827
12828       if (decl_specs)
12829         cp_parser_set_decl_spec_type (decl_specs, type,
12830                                       token->location,
12831                                       /*type_definition_p=*/false);
12832
12833       return type;
12834
12835     case RID_UNDERLYING_TYPE:
12836       type = cp_parser_trait_expr (parser, RID_UNDERLYING_TYPE);
12837
12838       if (decl_specs)
12839         cp_parser_set_decl_spec_type (decl_specs, type,
12840                                       token->location,
12841                                       /*type_definition_p=*/false);
12842
12843       return type;
12844
12845     default:
12846       break;
12847     }
12848
12849   /* If token is an already-parsed decltype not followed by ::,
12850      it's a simple-type-specifier.  */
12851   if (token->type == CPP_DECLTYPE
12852       && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
12853     {
12854       type = token->u.value;
12855       if (decl_specs)
12856         cp_parser_set_decl_spec_type (decl_specs, type,
12857                                       token->location,
12858                                       /*type_definition_p=*/false);
12859       cp_lexer_consume_token (parser->lexer);
12860       return type;
12861     }
12862
12863   /* If the type-specifier was for a built-in type, we're done.  */
12864   if (type)
12865     {
12866       /* Record the type.  */
12867       if (decl_specs
12868           && (token->keyword != RID_SIGNED
12869               && token->keyword != RID_UNSIGNED
12870               && token->keyword != RID_SHORT
12871               && token->keyword != RID_LONG))
12872         cp_parser_set_decl_spec_type (decl_specs,
12873                                       type,
12874                                       token->location,
12875                                       /*type_definition_p=*/false);
12876       if (decl_specs)
12877         decl_specs->any_specifiers_p = true;
12878
12879       /* Consume the token.  */
12880       cp_lexer_consume_token (parser->lexer);
12881
12882       /* There is no valid C++ program where a non-template type is
12883          followed by a "<".  That usually indicates that the user thought
12884          that the type was a template.  */
12885       cp_parser_check_for_invalid_template_id (parser, type, token->location);
12886
12887       return TYPE_NAME (type);
12888     }
12889
12890   /* The type-specifier must be a user-defined type.  */
12891   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
12892     {
12893       bool qualified_p;
12894       bool global_p;
12895
12896       /* Don't gobble tokens or issue error messages if this is an
12897          optional type-specifier.  */
12898       if (flags & CP_PARSER_FLAGS_OPTIONAL)
12899         cp_parser_parse_tentatively (parser);
12900
12901       /* Look for the optional `::' operator.  */
12902       global_p
12903         = (cp_parser_global_scope_opt (parser,
12904                                        /*current_scope_valid_p=*/false)
12905            != NULL_TREE);
12906       /* Look for the nested-name specifier.  */
12907       qualified_p
12908         = (cp_parser_nested_name_specifier_opt (parser,
12909                                                 /*typename_keyword_p=*/false,
12910                                                 /*check_dependency_p=*/true,
12911                                                 /*type_p=*/false,
12912                                                 /*is_declaration=*/false)
12913            != NULL_TREE);
12914       token = cp_lexer_peek_token (parser->lexer);
12915       /* If we have seen a nested-name-specifier, and the next token
12916          is `template', then we are using the template-id production.  */
12917       if (parser->scope
12918           && cp_parser_optional_template_keyword (parser))
12919         {
12920           /* Look for the template-id.  */
12921           type = cp_parser_template_id (parser,
12922                                         /*template_keyword_p=*/true,
12923                                         /*check_dependency_p=*/true,
12924                                         /*is_declaration=*/false);
12925           /* If the template-id did not name a type, we are out of
12926              luck.  */
12927           if (TREE_CODE (type) != TYPE_DECL)
12928             {
12929               cp_parser_error (parser, "expected template-id for type");
12930               type = NULL_TREE;
12931             }
12932         }
12933       /* Otherwise, look for a type-name.  */
12934       else
12935         type = cp_parser_type_name (parser);
12936       /* Keep track of all name-lookups performed in class scopes.  */
12937       if (type
12938           && !global_p
12939           && !qualified_p
12940           && TREE_CODE (type) == TYPE_DECL
12941           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
12942         maybe_note_name_used_in_class (DECL_NAME (type), type);
12943       /* If it didn't work out, we don't have a TYPE.  */
12944       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
12945           && !cp_parser_parse_definitely (parser))
12946         type = NULL_TREE;
12947       if (type && decl_specs)
12948         cp_parser_set_decl_spec_type (decl_specs, type,
12949                                       token->location,
12950                                       /*type_definition_p=*/false);
12951     }
12952
12953   /* If we didn't get a type-name, issue an error message.  */
12954   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
12955     {
12956       cp_parser_error (parser, "expected type-name");
12957       return error_mark_node;
12958     }
12959
12960   if (type && type != error_mark_node)
12961     {
12962       /* See if TYPE is an Objective-C type, and if so, parse and
12963          accept any protocol references following it.  Do this before
12964          the cp_parser_check_for_invalid_template_id() call, because
12965          Objective-C types can be followed by '<...>' which would
12966          enclose protocol names rather than template arguments, and so
12967          everything is fine.  */
12968       if (c_dialect_objc () && !parser->scope
12969           && (objc_is_id (type) || objc_is_class_name (type)))
12970         {
12971           tree protos = cp_parser_objc_protocol_refs_opt (parser);
12972           tree qual_type = objc_get_protocol_qualified_type (type, protos);
12973
12974           /* Clobber the "unqualified" type previously entered into
12975              DECL_SPECS with the new, improved protocol-qualified version.  */
12976           if (decl_specs)
12977             decl_specs->type = qual_type;
12978
12979           return qual_type;
12980         }
12981
12982       /* There is no valid C++ program where a non-template type is
12983          followed by a "<".  That usually indicates that the user
12984          thought that the type was a template.  */
12985       cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type),
12986                                                token->location);
12987     }
12988
12989   return type;
12990 }
12991
12992 /* Parse a type-name.
12993
12994    type-name:
12995      class-name
12996      enum-name
12997      typedef-name
12998
12999    enum-name:
13000      identifier
13001
13002    typedef-name:
13003      identifier
13004
13005    Returns a TYPE_DECL for the type.  */
13006
13007 static tree
13008 cp_parser_type_name (cp_parser* parser)
13009 {
13010   tree type_decl;
13011
13012   /* We can't know yet whether it is a class-name or not.  */
13013   cp_parser_parse_tentatively (parser);
13014   /* Try a class-name.  */
13015   type_decl = cp_parser_class_name (parser,
13016                                     /*typename_keyword_p=*/false,
13017                                     /*template_keyword_p=*/false,
13018                                     none_type,
13019                                     /*check_dependency_p=*/true,
13020                                     /*class_head_p=*/false,
13021                                     /*is_declaration=*/false);
13022   /* If it's not a class-name, keep looking.  */
13023   if (!cp_parser_parse_definitely (parser))
13024     {
13025       /* It must be a typedef-name or an enum-name.  */
13026       return cp_parser_nonclass_name (parser);
13027     }
13028
13029   return type_decl;
13030 }
13031
13032 /* Parse a non-class type-name, that is, either an enum-name or a typedef-name.
13033
13034    enum-name:
13035      identifier
13036
13037    typedef-name:
13038      identifier
13039
13040    Returns a TYPE_DECL for the type.  */
13041
13042 static tree
13043 cp_parser_nonclass_name (cp_parser* parser)
13044 {
13045   tree type_decl;
13046   tree identifier;
13047
13048   cp_token *token = cp_lexer_peek_token (parser->lexer);
13049   identifier = cp_parser_identifier (parser);
13050   if (identifier == error_mark_node)
13051     return error_mark_node;
13052
13053   /* Look up the type-name.  */
13054   type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
13055
13056   if (TREE_CODE (type_decl) != TYPE_DECL
13057       && (objc_is_id (identifier) || objc_is_class_name (identifier)))
13058     {
13059       /* See if this is an Objective-C type.  */
13060       tree protos = cp_parser_objc_protocol_refs_opt (parser);
13061       tree type = objc_get_protocol_qualified_type (identifier, protos);
13062       if (type)
13063         type_decl = TYPE_NAME (type);
13064     }
13065
13066   /* Issue an error if we did not find a type-name.  */
13067   if (TREE_CODE (type_decl) != TYPE_DECL
13068       /* In Objective-C, we have the complication that class names are
13069          normally type names and start declarations (eg, the
13070          "NSObject" in "NSObject *object;"), but can be used in an
13071          Objective-C 2.0 dot-syntax (as in "NSObject.version") which
13072          is an expression.  So, a classname followed by a dot is not a
13073          valid type-name.  */
13074       || (objc_is_class_name (TREE_TYPE (type_decl))
13075           && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT))
13076     {
13077       if (!cp_parser_simulate_error (parser))
13078         cp_parser_name_lookup_error (parser, identifier, type_decl,
13079                                      NLE_TYPE, token->location);
13080       return error_mark_node;
13081     }
13082   /* Remember that the name was used in the definition of the
13083      current class so that we can check later to see if the
13084      meaning would have been different after the class was
13085      entirely defined.  */
13086   else if (type_decl != error_mark_node
13087            && !parser->scope)
13088     maybe_note_name_used_in_class (identifier, type_decl);
13089   
13090   return type_decl;
13091 }
13092
13093 /* Parse an elaborated-type-specifier.  Note that the grammar given
13094    here incorporates the resolution to DR68.
13095
13096    elaborated-type-specifier:
13097      class-key :: [opt] nested-name-specifier [opt] identifier
13098      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
13099      enum-key :: [opt] nested-name-specifier [opt] identifier
13100      typename :: [opt] nested-name-specifier identifier
13101      typename :: [opt] nested-name-specifier template [opt]
13102        template-id
13103
13104    GNU extension:
13105
13106    elaborated-type-specifier:
13107      class-key attributes :: [opt] nested-name-specifier [opt] identifier
13108      class-key attributes :: [opt] nested-name-specifier [opt]
13109                template [opt] template-id
13110      enum attributes :: [opt] nested-name-specifier [opt] identifier
13111
13112    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
13113    declared `friend'.  If IS_DECLARATION is TRUE, then this
13114    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
13115    something is being declared.
13116
13117    Returns the TYPE specified.  */
13118
13119 static tree
13120 cp_parser_elaborated_type_specifier (cp_parser* parser,
13121                                      bool is_friend,
13122                                      bool is_declaration)
13123 {
13124   enum tag_types tag_type;
13125   tree identifier;
13126   tree type = NULL_TREE;
13127   tree attributes = NULL_TREE;
13128   tree globalscope;
13129   cp_token *token = NULL;
13130
13131   /* See if we're looking at the `enum' keyword.  */
13132   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
13133     {
13134       /* Consume the `enum' token.  */
13135       cp_lexer_consume_token (parser->lexer);
13136       /* Remember that it's an enumeration type.  */
13137       tag_type = enum_type;
13138       /* Issue a warning if the `struct' or `class' key (for C++0x scoped
13139          enums) is used here.  */
13140       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
13141           || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
13142         {
13143             pedwarn (input_location, 0, "elaborated-type-specifier "
13144                       "for a scoped enum must not use the %<%D%> keyword",
13145                       cp_lexer_peek_token (parser->lexer)->u.value);
13146           /* Consume the `struct' or `class' and parse it anyway.  */
13147           cp_lexer_consume_token (parser->lexer);
13148         }
13149       /* Parse the attributes.  */
13150       attributes = cp_parser_attributes_opt (parser);
13151     }
13152   /* Or, it might be `typename'.  */
13153   else if (cp_lexer_next_token_is_keyword (parser->lexer,
13154                                            RID_TYPENAME))
13155     {
13156       /* Consume the `typename' token.  */
13157       cp_lexer_consume_token (parser->lexer);
13158       /* Remember that it's a `typename' type.  */
13159       tag_type = typename_type;
13160     }
13161   /* Otherwise it must be a class-key.  */
13162   else
13163     {
13164       tag_type = cp_parser_class_key (parser);
13165       if (tag_type == none_type)
13166         return error_mark_node;
13167       /* Parse the attributes.  */
13168       attributes = cp_parser_attributes_opt (parser);
13169     }
13170
13171   /* Look for the `::' operator.  */
13172   globalscope =  cp_parser_global_scope_opt (parser,
13173                                              /*current_scope_valid_p=*/false);
13174   /* Look for the nested-name-specifier.  */
13175   if (tag_type == typename_type && !globalscope)
13176     {
13177       if (!cp_parser_nested_name_specifier (parser,
13178                                            /*typename_keyword_p=*/true,
13179                                            /*check_dependency_p=*/true,
13180                                            /*type_p=*/true,
13181                                             is_declaration))
13182         return error_mark_node;
13183     }
13184   else
13185     /* Even though `typename' is not present, the proposed resolution
13186        to Core Issue 180 says that in `class A<T>::B', `B' should be
13187        considered a type-name, even if `A<T>' is dependent.  */
13188     cp_parser_nested_name_specifier_opt (parser,
13189                                          /*typename_keyword_p=*/true,
13190                                          /*check_dependency_p=*/true,
13191                                          /*type_p=*/true,
13192                                          is_declaration);
13193  /* For everything but enumeration types, consider a template-id.
13194     For an enumeration type, consider only a plain identifier.  */
13195   if (tag_type != enum_type)
13196     {
13197       bool template_p = false;
13198       tree decl;
13199
13200       /* Allow the `template' keyword.  */
13201       template_p = cp_parser_optional_template_keyword (parser);
13202       /* If we didn't see `template', we don't know if there's a
13203          template-id or not.  */
13204       if (!template_p)
13205         cp_parser_parse_tentatively (parser);
13206       /* Parse the template-id.  */
13207       token = cp_lexer_peek_token (parser->lexer);
13208       decl = cp_parser_template_id (parser, template_p,
13209                                     /*check_dependency_p=*/true,
13210                                     is_declaration);
13211       /* If we didn't find a template-id, look for an ordinary
13212          identifier.  */
13213       if (!template_p && !cp_parser_parse_definitely (parser))
13214         ;
13215       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
13216          in effect, then we must assume that, upon instantiation, the
13217          template will correspond to a class.  */
13218       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
13219                && tag_type == typename_type)
13220         type = make_typename_type (parser->scope, decl,
13221                                    typename_type,
13222                                    /*complain=*/tf_error);
13223       /* If the `typename' keyword is in effect and DECL is not a type
13224          decl. Then type is non existant.   */
13225       else if (tag_type == typename_type && TREE_CODE (decl) != TYPE_DECL)
13226         type = NULL_TREE; 
13227       else 
13228         type = TREE_TYPE (decl);
13229     }
13230
13231   if (!type)
13232     {
13233       token = cp_lexer_peek_token (parser->lexer);
13234       identifier = cp_parser_identifier (parser);
13235
13236       if (identifier == error_mark_node)
13237         {
13238           parser->scope = NULL_TREE;
13239           return error_mark_node;
13240         }
13241
13242       /* For a `typename', we needn't call xref_tag.  */
13243       if (tag_type == typename_type
13244           && TREE_CODE (parser->scope) != NAMESPACE_DECL)
13245         return cp_parser_make_typename_type (parser, parser->scope,
13246                                              identifier,
13247                                              token->location);
13248       /* Look up a qualified name in the usual way.  */
13249       if (parser->scope)
13250         {
13251           tree decl;
13252           tree ambiguous_decls;
13253
13254           decl = cp_parser_lookup_name (parser, identifier,
13255                                         tag_type,
13256                                         /*is_template=*/false,
13257                                         /*is_namespace=*/false,
13258                                         /*check_dependency=*/true,
13259                                         &ambiguous_decls,
13260                                         token->location);
13261
13262           /* If the lookup was ambiguous, an error will already have been
13263              issued.  */
13264           if (ambiguous_decls)
13265             return error_mark_node;
13266
13267           /* If we are parsing friend declaration, DECL may be a
13268              TEMPLATE_DECL tree node here.  However, we need to check
13269              whether this TEMPLATE_DECL results in valid code.  Consider
13270              the following example:
13271
13272                namespace N {
13273                  template <class T> class C {};
13274                }
13275                class X {
13276                  template <class T> friend class N::C; // #1, valid code
13277                };
13278                template <class T> class Y {
13279                  friend class N::C;                    // #2, invalid code
13280                };
13281
13282              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
13283              name lookup of `N::C'.  We see that friend declaration must
13284              be template for the code to be valid.  Note that
13285              processing_template_decl does not work here since it is
13286              always 1 for the above two cases.  */
13287
13288           decl = (cp_parser_maybe_treat_template_as_class
13289                   (decl, /*tag_name_p=*/is_friend
13290                          && parser->num_template_parameter_lists));
13291
13292           if (TREE_CODE (decl) != TYPE_DECL)
13293             {
13294               cp_parser_diagnose_invalid_type_name (parser,
13295                                                     parser->scope,
13296                                                     identifier,
13297                                                     token->location);
13298               return error_mark_node;
13299             }
13300
13301           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
13302             {
13303               bool allow_template = (parser->num_template_parameter_lists
13304                                       || DECL_SELF_REFERENCE_P (decl));
13305               type = check_elaborated_type_specifier (tag_type, decl, 
13306                                                       allow_template);
13307
13308               if (type == error_mark_node)
13309                 return error_mark_node;
13310             }
13311
13312           /* Forward declarations of nested types, such as
13313
13314                class C1::C2;
13315                class C1::C2::C3;
13316
13317              are invalid unless all components preceding the final '::'
13318              are complete.  If all enclosing types are complete, these
13319              declarations become merely pointless.
13320
13321              Invalid forward declarations of nested types are errors
13322              caught elsewhere in parsing.  Those that are pointless arrive
13323              here.  */
13324
13325           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
13326               && !is_friend && !processing_explicit_instantiation)
13327             warning (0, "declaration %qD does not declare anything", decl);
13328
13329           type = TREE_TYPE (decl);
13330         }
13331       else
13332         {
13333           /* An elaborated-type-specifier sometimes introduces a new type and
13334              sometimes names an existing type.  Normally, the rule is that it
13335              introduces a new type only if there is not an existing type of
13336              the same name already in scope.  For example, given:
13337
13338                struct S {};
13339                void f() { struct S s; }
13340
13341              the `struct S' in the body of `f' is the same `struct S' as in
13342              the global scope; the existing definition is used.  However, if
13343              there were no global declaration, this would introduce a new
13344              local class named `S'.
13345
13346              An exception to this rule applies to the following code:
13347
13348                namespace N { struct S; }
13349
13350              Here, the elaborated-type-specifier names a new type
13351              unconditionally; even if there is already an `S' in the
13352              containing scope this declaration names a new type.
13353              This exception only applies if the elaborated-type-specifier
13354              forms the complete declaration:
13355
13356                [class.name]
13357
13358                A declaration consisting solely of `class-key identifier ;' is
13359                either a redeclaration of the name in the current scope or a
13360                forward declaration of the identifier as a class name.  It
13361                introduces the name into the current scope.
13362
13363              We are in this situation precisely when the next token is a `;'.
13364
13365              An exception to the exception is that a `friend' declaration does
13366              *not* name a new type; i.e., given:
13367
13368                struct S { friend struct T; };
13369
13370              `T' is not a new type in the scope of `S'.
13371
13372              Also, `new struct S' or `sizeof (struct S)' never results in the
13373              definition of a new type; a new type can only be declared in a
13374              declaration context.  */
13375
13376           tag_scope ts;
13377           bool template_p;
13378
13379           if (is_friend)
13380             /* Friends have special name lookup rules.  */
13381             ts = ts_within_enclosing_non_class;
13382           else if (is_declaration
13383                    && cp_lexer_next_token_is (parser->lexer,
13384                                               CPP_SEMICOLON))
13385             /* This is a `class-key identifier ;' */
13386             ts = ts_current;
13387           else
13388             ts = ts_global;
13389
13390           template_p =
13391             (parser->num_template_parameter_lists
13392              && (cp_parser_next_token_starts_class_definition_p (parser)
13393                  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
13394           /* An unqualified name was used to reference this type, so
13395              there were no qualifying templates.  */
13396           if (!cp_parser_check_template_parameters (parser,
13397                                                     /*num_templates=*/0,
13398                                                     token->location,
13399                                                     /*declarator=*/NULL))
13400             return error_mark_node;
13401           type = xref_tag (tag_type, identifier, ts, template_p);
13402         }
13403     }
13404
13405   if (type == error_mark_node)
13406     return error_mark_node;
13407
13408   /* Allow attributes on forward declarations of classes.  */
13409   if (attributes)
13410     {
13411       if (TREE_CODE (type) == TYPENAME_TYPE)
13412         warning (OPT_Wattributes,
13413                  "attributes ignored on uninstantiated type");
13414       else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
13415                && ! processing_explicit_instantiation)
13416         warning (OPT_Wattributes,
13417                  "attributes ignored on template instantiation");
13418       else if (is_declaration && cp_parser_declares_only_class_p (parser))
13419         cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
13420       else
13421         warning (OPT_Wattributes,
13422                  "attributes ignored on elaborated-type-specifier that is not a forward declaration");
13423     }
13424
13425   if (tag_type != enum_type)
13426     cp_parser_check_class_key (tag_type, type);
13427
13428   /* A "<" cannot follow an elaborated type specifier.  If that
13429      happens, the user was probably trying to form a template-id.  */
13430   cp_parser_check_for_invalid_template_id (parser, type, token->location);
13431
13432   return type;
13433 }
13434
13435 /* Parse an enum-specifier.
13436
13437    enum-specifier:
13438      enum-head { enumerator-list [opt] }
13439
13440    enum-head:
13441      enum-key identifier [opt] enum-base [opt]
13442      enum-key nested-name-specifier identifier enum-base [opt]
13443
13444    enum-key:
13445      enum
13446      enum class   [C++0x]
13447      enum struct  [C++0x]
13448
13449    enum-base:   [C++0x]
13450      : type-specifier-seq
13451
13452    opaque-enum-specifier:
13453      enum-key identifier enum-base [opt] ;
13454
13455    GNU Extensions:
13456      enum-key attributes[opt] identifier [opt] enum-base [opt] 
13457        { enumerator-list [opt] }attributes[opt]
13458
13459    Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
13460    if the token stream isn't an enum-specifier after all.  */
13461
13462 static tree
13463 cp_parser_enum_specifier (cp_parser* parser)
13464 {
13465   tree identifier;
13466   tree type = NULL_TREE;
13467   tree prev_scope;
13468   tree nested_name_specifier = NULL_TREE;
13469   tree attributes;
13470   bool scoped_enum_p = false;
13471   bool has_underlying_type = false;
13472   bool nested_being_defined = false;
13473   bool new_value_list = false;
13474   bool is_new_type = false;
13475   bool is_anonymous = false;
13476   tree underlying_type = NULL_TREE;
13477   cp_token *type_start_token = NULL;
13478   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
13479
13480   parser->colon_corrects_to_scope_p = false;
13481
13482   /* Parse tentatively so that we can back up if we don't find a
13483      enum-specifier.  */
13484   cp_parser_parse_tentatively (parser);
13485
13486   /* Caller guarantees that the current token is 'enum', an identifier
13487      possibly follows, and the token after that is an opening brace.
13488      If we don't have an identifier, fabricate an anonymous name for
13489      the enumeration being defined.  */
13490   cp_lexer_consume_token (parser->lexer);
13491
13492   /* Parse the "class" or "struct", which indicates a scoped
13493      enumeration type in C++0x.  */
13494   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
13495       || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
13496     {
13497       if (cxx_dialect < cxx0x)
13498         maybe_warn_cpp0x (CPP0X_SCOPED_ENUMS);
13499
13500       /* Consume the `struct' or `class' token.  */
13501       cp_lexer_consume_token (parser->lexer);
13502
13503       scoped_enum_p = true;
13504     }
13505
13506   attributes = cp_parser_attributes_opt (parser);
13507
13508   /* Clear the qualification.  */
13509   parser->scope = NULL_TREE;
13510   parser->qualifying_scope = NULL_TREE;
13511   parser->object_scope = NULL_TREE;
13512
13513   /* Figure out in what scope the declaration is being placed.  */
13514   prev_scope = current_scope ();
13515
13516   type_start_token = cp_lexer_peek_token (parser->lexer);
13517
13518   push_deferring_access_checks (dk_no_check);
13519   nested_name_specifier
13520       = cp_parser_nested_name_specifier_opt (parser,
13521                                              /*typename_keyword_p=*/true,
13522                                              /*check_dependency_p=*/false,
13523                                              /*type_p=*/false,
13524                                              /*is_declaration=*/false);
13525
13526   if (nested_name_specifier)
13527     {
13528       tree name;
13529
13530       identifier = cp_parser_identifier (parser);
13531       name =  cp_parser_lookup_name (parser, identifier,
13532                                      enum_type,
13533                                      /*is_template=*/false,
13534                                      /*is_namespace=*/false,
13535                                      /*check_dependency=*/true,
13536                                      /*ambiguous_decls=*/NULL,
13537                                      input_location);
13538       if (name)
13539         {
13540           type = TREE_TYPE (name);
13541           if (TREE_CODE (type) == TYPENAME_TYPE)
13542             {
13543               /* Are template enums allowed in ISO? */
13544               if (template_parm_scope_p ())
13545                 pedwarn (type_start_token->location, OPT_pedantic,
13546                          "%qD is an enumeration template", name);
13547               /* ignore a typename reference, for it will be solved by name
13548                  in start_enum.  */
13549               type = NULL_TREE;
13550             }
13551         }
13552       else
13553         error_at (type_start_token->location,
13554                   "%qD is not an enumerator-name", identifier);
13555     }
13556   else
13557     {
13558       if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
13559         identifier = cp_parser_identifier (parser);
13560       else
13561         {
13562           identifier = make_anon_name ();
13563           is_anonymous = true;
13564         }
13565     }
13566   pop_deferring_access_checks ();
13567
13568   /* Check for the `:' that denotes a specified underlying type in C++0x.
13569      Note that a ':' could also indicate a bitfield width, however.  */
13570   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
13571     {
13572       cp_decl_specifier_seq type_specifiers;
13573
13574       /* Consume the `:'.  */
13575       cp_lexer_consume_token (parser->lexer);
13576
13577       /* Parse the type-specifier-seq.  */
13578       cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
13579                                     /*is_trailing_return=*/false,
13580                                     &type_specifiers);
13581
13582       /* At this point this is surely not elaborated type specifier.  */
13583       if (!cp_parser_parse_definitely (parser))
13584         return NULL_TREE;
13585
13586       if (cxx_dialect < cxx0x)
13587         maybe_warn_cpp0x (CPP0X_SCOPED_ENUMS);
13588
13589       has_underlying_type = true;
13590
13591       /* If that didn't work, stop.  */
13592       if (type_specifiers.type != error_mark_node)
13593         {
13594           underlying_type = grokdeclarator (NULL, &type_specifiers, TYPENAME,
13595                                             /*initialized=*/0, NULL);
13596           if (underlying_type == error_mark_node)
13597             underlying_type = NULL_TREE;
13598         }
13599     }
13600
13601   /* Look for the `{' but don't consume it yet.  */
13602   if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
13603     {
13604       if (cxx_dialect < cxx0x || (!scoped_enum_p && !underlying_type))
13605         {
13606           cp_parser_error (parser, "expected %<{%>");
13607           if (has_underlying_type)
13608             {
13609               type = NULL_TREE;
13610               goto out;
13611             }
13612         }
13613       /* An opaque-enum-specifier must have a ';' here.  */
13614       if ((scoped_enum_p || underlying_type)
13615           && cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
13616         {
13617           cp_parser_error (parser, "expected %<;%> or %<{%>");
13618           if (has_underlying_type)
13619             {
13620               type = NULL_TREE;
13621               goto out;
13622             }
13623         }
13624     }
13625
13626   if (!has_underlying_type && !cp_parser_parse_definitely (parser))
13627     return NULL_TREE;
13628
13629   if (nested_name_specifier)
13630     {
13631       if (CLASS_TYPE_P (nested_name_specifier))
13632         {
13633           nested_being_defined = TYPE_BEING_DEFINED (nested_name_specifier);
13634           TYPE_BEING_DEFINED (nested_name_specifier) = 1;
13635           push_scope (nested_name_specifier);
13636         }
13637       else if (TREE_CODE (nested_name_specifier) == NAMESPACE_DECL)
13638         {
13639           push_nested_namespace (nested_name_specifier);
13640         }
13641     }
13642
13643   /* Issue an error message if type-definitions are forbidden here.  */
13644   if (!cp_parser_check_type_definition (parser))
13645     type = error_mark_node;
13646   else
13647     /* Create the new type.  We do this before consuming the opening
13648        brace so the enum will be recorded as being on the line of its
13649        tag (or the 'enum' keyword, if there is no tag).  */
13650     type = start_enum (identifier, type, underlying_type,
13651                        scoped_enum_p, &is_new_type);
13652
13653   /* If the next token is not '{' it is an opaque-enum-specifier or an
13654      elaborated-type-specifier.  */
13655   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
13656     {
13657       timevar_push (TV_PARSE_ENUM);
13658       if (nested_name_specifier)
13659         {
13660           /* The following catches invalid code such as:
13661              enum class S<int>::E { A, B, C }; */
13662           if (!processing_specialization
13663               && CLASS_TYPE_P (nested_name_specifier)
13664               && CLASSTYPE_USE_TEMPLATE (nested_name_specifier))
13665             error_at (type_start_token->location, "cannot add an enumerator "
13666                       "list to a template instantiation");
13667
13668           /* If that scope does not contain the scope in which the
13669              class was originally declared, the program is invalid.  */
13670           if (prev_scope && !is_ancestor (prev_scope, nested_name_specifier))
13671             {
13672               if (at_namespace_scope_p ())
13673                 error_at (type_start_token->location,
13674                           "declaration of %qD in namespace %qD which does not "
13675                           "enclose %qD",
13676                           type, prev_scope, nested_name_specifier);
13677               else
13678                 error_at (type_start_token->location,
13679                           "declaration of %qD in %qD which does not enclose %qD",
13680                           type, prev_scope, nested_name_specifier);
13681               type = error_mark_node;
13682             }
13683         }
13684
13685       if (scoped_enum_p)
13686         begin_scope (sk_scoped_enum, type);
13687
13688       /* Consume the opening brace.  */
13689       cp_lexer_consume_token (parser->lexer);
13690
13691       if (type == error_mark_node)
13692         ; /* Nothing to add */
13693       else if (OPAQUE_ENUM_P (type)
13694                || (cxx_dialect > cxx98 && processing_specialization))
13695         {
13696           new_value_list = true;
13697           SET_OPAQUE_ENUM_P (type, false);
13698           DECL_SOURCE_LOCATION (TYPE_NAME (type)) = type_start_token->location;
13699         }
13700       else
13701         {
13702           error_at (type_start_token->location, "multiple definition of %q#T", type);
13703           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
13704                     "previous definition here");
13705           type = error_mark_node;
13706         }
13707
13708       if (type == error_mark_node)
13709         cp_parser_skip_to_end_of_block_or_statement (parser);
13710       /* If the next token is not '}', then there are some enumerators.  */
13711       else if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
13712         cp_parser_enumerator_list (parser, type);
13713
13714       /* Consume the final '}'.  */
13715       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
13716
13717       if (scoped_enum_p)
13718         finish_scope ();
13719       timevar_pop (TV_PARSE_ENUM);
13720     }
13721   else
13722     {
13723       /* If a ';' follows, then it is an opaque-enum-specifier
13724         and additional restrictions apply.  */
13725       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
13726         {
13727           if (is_anonymous)
13728             error_at (type_start_token->location,
13729                       "opaque-enum-specifier without name");
13730           else if (nested_name_specifier)
13731             error_at (type_start_token->location,
13732                       "opaque-enum-specifier must use a simple identifier");
13733         }
13734     }
13735
13736   /* Look for trailing attributes to apply to this enumeration, and
13737      apply them if appropriate.  */
13738   if (cp_parser_allow_gnu_extensions_p (parser))
13739     {
13740       tree trailing_attr = cp_parser_attributes_opt (parser);
13741       trailing_attr = chainon (trailing_attr, attributes);
13742       cplus_decl_attributes (&type,
13743                              trailing_attr,
13744                              (int) ATTR_FLAG_TYPE_IN_PLACE);
13745     }
13746
13747   /* Finish up the enumeration.  */
13748   if (type != error_mark_node)
13749     {
13750       if (new_value_list)
13751         finish_enum_value_list (type);
13752       if (is_new_type)
13753         finish_enum (type);
13754     }
13755
13756   if (nested_name_specifier)
13757     {
13758       if (CLASS_TYPE_P (nested_name_specifier))
13759         {
13760           TYPE_BEING_DEFINED (nested_name_specifier) = nested_being_defined;
13761           pop_scope (nested_name_specifier);
13762         }
13763       else if (TREE_CODE (nested_name_specifier) == NAMESPACE_DECL)
13764         {
13765           pop_nested_namespace (nested_name_specifier);
13766         }
13767     }
13768  out:
13769   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
13770   return type;
13771 }
13772
13773 /* Parse an enumerator-list.  The enumerators all have the indicated
13774    TYPE.
13775
13776    enumerator-list:
13777      enumerator-definition
13778      enumerator-list , enumerator-definition  */
13779
13780 static void
13781 cp_parser_enumerator_list (cp_parser* parser, tree type)
13782 {
13783   while (true)
13784     {
13785       /* Parse an enumerator-definition.  */
13786       cp_parser_enumerator_definition (parser, type);
13787
13788       /* If the next token is not a ',', we've reached the end of
13789          the list.  */
13790       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
13791         break;
13792       /* Otherwise, consume the `,' and keep going.  */
13793       cp_lexer_consume_token (parser->lexer);
13794       /* If the next token is a `}', there is a trailing comma.  */
13795       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
13796         {
13797           if (!in_system_header)
13798             pedwarn (input_location, OPT_pedantic, "comma at end of enumerator list");
13799           break;
13800         }
13801     }
13802 }
13803
13804 /* Parse an enumerator-definition.  The enumerator has the indicated
13805    TYPE.
13806
13807    enumerator-definition:
13808      enumerator
13809      enumerator = constant-expression
13810
13811    enumerator:
13812      identifier  */
13813
13814 static void
13815 cp_parser_enumerator_definition (cp_parser* parser, tree type)
13816 {
13817   tree identifier;
13818   tree value;
13819   location_t loc;
13820
13821   /* Save the input location because we are interested in the location
13822      of the identifier and not the location of the explicit value.  */
13823   loc = cp_lexer_peek_token (parser->lexer)->location;
13824
13825   /* Look for the identifier.  */
13826   identifier = cp_parser_identifier (parser);
13827   if (identifier == error_mark_node)
13828     return;
13829
13830   /* If the next token is an '=', then there is an explicit value.  */
13831   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
13832     {
13833       /* Consume the `=' token.  */
13834       cp_lexer_consume_token (parser->lexer);
13835       /* Parse the value.  */
13836       value = cp_parser_constant_expression (parser,
13837                                              /*allow_non_constant_p=*/false,
13838                                              NULL);
13839     }
13840   else
13841     value = NULL_TREE;
13842
13843   /* If we are processing a template, make sure the initializer of the
13844      enumerator doesn't contain any bare template parameter pack.  */
13845   if (check_for_bare_parameter_packs (value))
13846     value = error_mark_node;
13847
13848   /* integral_constant_value will pull out this expression, so make sure
13849      it's folded as appropriate.  */
13850   value = fold_non_dependent_expr (value);
13851
13852   /* Create the enumerator.  */
13853   build_enumerator (identifier, value, type, loc);
13854 }
13855
13856 /* Parse a namespace-name.
13857
13858    namespace-name:
13859      original-namespace-name
13860      namespace-alias
13861
13862    Returns the NAMESPACE_DECL for the namespace.  */
13863
13864 static tree
13865 cp_parser_namespace_name (cp_parser* parser)
13866 {
13867   tree identifier;
13868   tree namespace_decl;
13869
13870   cp_token *token = cp_lexer_peek_token (parser->lexer);
13871
13872   /* Get the name of the namespace.  */
13873   identifier = cp_parser_identifier (parser);
13874   if (identifier == error_mark_node)
13875     return error_mark_node;
13876
13877   /* Look up the identifier in the currently active scope.  Look only
13878      for namespaces, due to:
13879
13880        [basic.lookup.udir]
13881
13882        When looking up a namespace-name in a using-directive or alias
13883        definition, only namespace names are considered.
13884
13885      And:
13886
13887        [basic.lookup.qual]
13888
13889        During the lookup of a name preceding the :: scope resolution
13890        operator, object, function, and enumerator names are ignored.
13891
13892      (Note that cp_parser_qualifying_entity only calls this
13893      function if the token after the name is the scope resolution
13894      operator.)  */
13895   namespace_decl = cp_parser_lookup_name (parser, identifier,
13896                                           none_type,
13897                                           /*is_template=*/false,
13898                                           /*is_namespace=*/true,
13899                                           /*check_dependency=*/true,
13900                                           /*ambiguous_decls=*/NULL,
13901                                           token->location);
13902   /* If it's not a namespace, issue an error.  */
13903   if (namespace_decl == error_mark_node
13904       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
13905     {
13906       if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
13907         error_at (token->location, "%qD is not a namespace-name", identifier);
13908       cp_parser_error (parser, "expected namespace-name");
13909       namespace_decl = error_mark_node;
13910     }
13911
13912   return namespace_decl;
13913 }
13914
13915 /* Parse a namespace-definition.
13916
13917    namespace-definition:
13918      named-namespace-definition
13919      unnamed-namespace-definition
13920
13921    named-namespace-definition:
13922      original-namespace-definition
13923      extension-namespace-definition
13924
13925    original-namespace-definition:
13926      namespace identifier { namespace-body }
13927
13928    extension-namespace-definition:
13929      namespace original-namespace-name { namespace-body }
13930
13931    unnamed-namespace-definition:
13932      namespace { namespace-body } */
13933
13934 static void
13935 cp_parser_namespace_definition (cp_parser* parser)
13936 {
13937   tree identifier, attribs;
13938   bool has_visibility;
13939   bool is_inline;
13940
13941   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_INLINE))
13942     {
13943       maybe_warn_cpp0x (CPP0X_INLINE_NAMESPACES);
13944       is_inline = true;
13945       cp_lexer_consume_token (parser->lexer);
13946     }
13947   else
13948     is_inline = false;
13949
13950   /* Look for the `namespace' keyword.  */
13951   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
13952
13953   /* Get the name of the namespace.  We do not attempt to distinguish
13954      between an original-namespace-definition and an
13955      extension-namespace-definition at this point.  The semantic
13956      analysis routines are responsible for that.  */
13957   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
13958     identifier = cp_parser_identifier (parser);
13959   else
13960     identifier = NULL_TREE;
13961
13962   /* Parse any specified attributes.  */
13963   attribs = cp_parser_attributes_opt (parser);
13964
13965   /* Look for the `{' to start the namespace.  */
13966   cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
13967   /* Start the namespace.  */
13968   push_namespace (identifier);
13969
13970   /* "inline namespace" is equivalent to a stub namespace definition
13971      followed by a strong using directive.  */
13972   if (is_inline)
13973     {
13974       tree name_space = current_namespace;
13975       /* Set up namespace association.  */
13976       DECL_NAMESPACE_ASSOCIATIONS (name_space)
13977         = tree_cons (CP_DECL_CONTEXT (name_space), NULL_TREE,
13978                      DECL_NAMESPACE_ASSOCIATIONS (name_space));
13979       /* Import the contents of the inline namespace.  */
13980       pop_namespace ();
13981       do_using_directive (name_space);
13982       push_namespace (identifier);
13983     }
13984
13985   has_visibility = handle_namespace_attrs (current_namespace, attribs);
13986
13987   /* Parse the body of the namespace.  */
13988   cp_parser_namespace_body (parser);
13989
13990   if (has_visibility)
13991     pop_visibility (1);
13992
13993   /* Finish the namespace.  */
13994   pop_namespace ();
13995   /* Look for the final `}'.  */
13996   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
13997 }
13998
13999 /* Parse a namespace-body.
14000
14001    namespace-body:
14002      declaration-seq [opt]  */
14003
14004 static void
14005 cp_parser_namespace_body (cp_parser* parser)
14006 {
14007   cp_parser_declaration_seq_opt (parser);
14008 }
14009
14010 /* Parse a namespace-alias-definition.
14011
14012    namespace-alias-definition:
14013      namespace identifier = qualified-namespace-specifier ;  */
14014
14015 static void
14016 cp_parser_namespace_alias_definition (cp_parser* parser)
14017 {
14018   tree identifier;
14019   tree namespace_specifier;
14020
14021   cp_token *token = cp_lexer_peek_token (parser->lexer);
14022
14023   /* Look for the `namespace' keyword.  */
14024   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
14025   /* Look for the identifier.  */
14026   identifier = cp_parser_identifier (parser);
14027   if (identifier == error_mark_node)
14028     return;
14029   /* Look for the `=' token.  */
14030   if (!cp_parser_uncommitted_to_tentative_parse_p (parser)
14031       && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) 
14032     {
14033       error_at (token->location, "%<namespace%> definition is not allowed here");
14034       /* Skip the definition.  */
14035       cp_lexer_consume_token (parser->lexer);
14036       if (cp_parser_skip_to_closing_brace (parser))
14037         cp_lexer_consume_token (parser->lexer);
14038       return;
14039     }
14040   cp_parser_require (parser, CPP_EQ, RT_EQ);
14041   /* Look for the qualified-namespace-specifier.  */
14042   namespace_specifier
14043     = cp_parser_qualified_namespace_specifier (parser);
14044   /* Look for the `;' token.  */
14045   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
14046
14047   /* Register the alias in the symbol table.  */
14048   do_namespace_alias (identifier, namespace_specifier);
14049 }
14050
14051 /* Parse a qualified-namespace-specifier.
14052
14053    qualified-namespace-specifier:
14054      :: [opt] nested-name-specifier [opt] namespace-name
14055
14056    Returns a NAMESPACE_DECL corresponding to the specified
14057    namespace.  */
14058
14059 static tree
14060 cp_parser_qualified_namespace_specifier (cp_parser* parser)
14061 {
14062   /* Look for the optional `::'.  */
14063   cp_parser_global_scope_opt (parser,
14064                               /*current_scope_valid_p=*/false);
14065
14066   /* Look for the optional nested-name-specifier.  */
14067   cp_parser_nested_name_specifier_opt (parser,
14068                                        /*typename_keyword_p=*/false,
14069                                        /*check_dependency_p=*/true,
14070                                        /*type_p=*/false,
14071                                        /*is_declaration=*/true);
14072
14073   return cp_parser_namespace_name (parser);
14074 }
14075
14076 /* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
14077    access declaration.
14078
14079    using-declaration:
14080      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
14081      using :: unqualified-id ;  
14082
14083    access-declaration:
14084      qualified-id ;  
14085
14086    */
14087
14088 static bool
14089 cp_parser_using_declaration (cp_parser* parser, 
14090                              bool access_declaration_p)
14091 {
14092   cp_token *token;
14093   bool typename_p = false;
14094   bool global_scope_p;
14095   tree decl;
14096   tree identifier;
14097   tree qscope;
14098
14099   if (access_declaration_p)
14100     cp_parser_parse_tentatively (parser);
14101   else
14102     {
14103       /* Look for the `using' keyword.  */
14104       cp_parser_require_keyword (parser, RID_USING, RT_USING);
14105       
14106       /* Peek at the next token.  */
14107       token = cp_lexer_peek_token (parser->lexer);
14108       /* See if it's `typename'.  */
14109       if (token->keyword == RID_TYPENAME)
14110         {
14111           /* Remember that we've seen it.  */
14112           typename_p = true;
14113           /* Consume the `typename' token.  */
14114           cp_lexer_consume_token (parser->lexer);
14115         }
14116     }
14117
14118   /* Look for the optional global scope qualification.  */
14119   global_scope_p
14120     = (cp_parser_global_scope_opt (parser,
14121                                    /*current_scope_valid_p=*/false)
14122        != NULL_TREE);
14123
14124   /* If we saw `typename', or didn't see `::', then there must be a
14125      nested-name-specifier present.  */
14126   if (typename_p || !global_scope_p)
14127     qscope = cp_parser_nested_name_specifier (parser, typename_p,
14128                                               /*check_dependency_p=*/true,
14129                                               /*type_p=*/false,
14130                                               /*is_declaration=*/true);
14131   /* Otherwise, we could be in either of the two productions.  In that
14132      case, treat the nested-name-specifier as optional.  */
14133   else
14134     qscope = cp_parser_nested_name_specifier_opt (parser,
14135                                                   /*typename_keyword_p=*/false,
14136                                                   /*check_dependency_p=*/true,
14137                                                   /*type_p=*/false,
14138                                                   /*is_declaration=*/true);
14139   if (!qscope)
14140     qscope = global_namespace;
14141
14142   if (access_declaration_p && cp_parser_error_occurred (parser))
14143     /* Something has already gone wrong; there's no need to parse
14144        further.  Since an error has occurred, the return value of
14145        cp_parser_parse_definitely will be false, as required.  */
14146     return cp_parser_parse_definitely (parser);
14147
14148   token = cp_lexer_peek_token (parser->lexer);
14149   /* Parse the unqualified-id.  */
14150   identifier = cp_parser_unqualified_id (parser,
14151                                          /*template_keyword_p=*/false,
14152                                          /*check_dependency_p=*/true,
14153                                          /*declarator_p=*/true,
14154                                          /*optional_p=*/false);
14155
14156   if (access_declaration_p)
14157     {
14158       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
14159         cp_parser_simulate_error (parser);
14160       if (!cp_parser_parse_definitely (parser))
14161         return false;
14162     }
14163
14164   /* The function we call to handle a using-declaration is different
14165      depending on what scope we are in.  */
14166   if (qscope == error_mark_node || identifier == error_mark_node)
14167     ;
14168   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
14169            && TREE_CODE (identifier) != BIT_NOT_EXPR)
14170     /* [namespace.udecl]
14171
14172        A using declaration shall not name a template-id.  */
14173     error_at (token->location,
14174               "a template-id may not appear in a using-declaration");
14175   else
14176     {
14177       if (at_class_scope_p ())
14178         {
14179           /* Create the USING_DECL.  */
14180           decl = do_class_using_decl (parser->scope, identifier);
14181
14182           if (check_for_bare_parameter_packs (decl))
14183             return false;
14184           else
14185             /* Add it to the list of members in this class.  */
14186             finish_member_declaration (decl);
14187         }
14188       else
14189         {
14190           decl = cp_parser_lookup_name_simple (parser,
14191                                                identifier,
14192                                                token->location);
14193           if (decl == error_mark_node)
14194             cp_parser_name_lookup_error (parser, identifier,
14195                                          decl, NLE_NULL,
14196                                          token->location);
14197           else if (check_for_bare_parameter_packs (decl))
14198             return false;
14199           else if (!at_namespace_scope_p ())
14200             do_local_using_decl (decl, qscope, identifier);
14201           else
14202             do_toplevel_using_decl (decl, qscope, identifier);
14203         }
14204     }
14205
14206   /* Look for the final `;'.  */
14207   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
14208   
14209   return true;
14210 }
14211
14212 /* Parse a using-directive.
14213
14214    using-directive:
14215      using namespace :: [opt] nested-name-specifier [opt]
14216        namespace-name ;  */
14217
14218 static void
14219 cp_parser_using_directive (cp_parser* parser)
14220 {
14221   tree namespace_decl;
14222   tree attribs;
14223
14224   /* Look for the `using' keyword.  */
14225   cp_parser_require_keyword (parser, RID_USING, RT_USING);
14226   /* And the `namespace' keyword.  */
14227   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
14228   /* Look for the optional `::' operator.  */
14229   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
14230   /* And the optional nested-name-specifier.  */
14231   cp_parser_nested_name_specifier_opt (parser,
14232                                        /*typename_keyword_p=*/false,
14233                                        /*check_dependency_p=*/true,
14234                                        /*type_p=*/false,
14235                                        /*is_declaration=*/true);
14236   /* Get the namespace being used.  */
14237   namespace_decl = cp_parser_namespace_name (parser);
14238   /* And any specified attributes.  */
14239   attribs = cp_parser_attributes_opt (parser);
14240   /* Update the symbol table.  */
14241   parse_using_directive (namespace_decl, attribs);
14242   /* Look for the final `;'.  */
14243   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
14244 }
14245
14246 /* Parse an asm-definition.
14247
14248    asm-definition:
14249      asm ( string-literal ) ;
14250
14251    GNU Extension:
14252
14253    asm-definition:
14254      asm volatile [opt] ( string-literal ) ;
14255      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
14256      asm volatile [opt] ( string-literal : asm-operand-list [opt]
14257                           : asm-operand-list [opt] ) ;
14258      asm volatile [opt] ( string-literal : asm-operand-list [opt]
14259                           : asm-operand-list [opt]
14260                           : asm-clobber-list [opt] ) ;
14261      asm volatile [opt] goto ( string-literal : : asm-operand-list [opt]
14262                                : asm-clobber-list [opt]
14263                                : asm-goto-list ) ;  */
14264
14265 static void
14266 cp_parser_asm_definition (cp_parser* parser)
14267 {
14268   tree string;
14269   tree outputs = NULL_TREE;
14270   tree inputs = NULL_TREE;
14271   tree clobbers = NULL_TREE;
14272   tree labels = NULL_TREE;
14273   tree asm_stmt;
14274   bool volatile_p = false;
14275   bool extended_p = false;
14276   bool invalid_inputs_p = false;
14277   bool invalid_outputs_p = false;
14278   bool goto_p = false;
14279   required_token missing = RT_NONE;
14280
14281   /* Look for the `asm' keyword.  */
14282   cp_parser_require_keyword (parser, RID_ASM, RT_ASM);
14283   /* See if the next token is `volatile'.  */
14284   if (cp_parser_allow_gnu_extensions_p (parser)
14285       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
14286     {
14287       /* Remember that we saw the `volatile' keyword.  */
14288       volatile_p = true;
14289       /* Consume the token.  */
14290       cp_lexer_consume_token (parser->lexer);
14291     }
14292   if (cp_parser_allow_gnu_extensions_p (parser)
14293       && parser->in_function_body
14294       && cp_lexer_next_token_is_keyword (parser->lexer, RID_GOTO))
14295     {
14296       /* Remember that we saw the `goto' keyword.  */
14297       goto_p = true;
14298       /* Consume the token.  */
14299       cp_lexer_consume_token (parser->lexer);
14300     }
14301   /* Look for the opening `('.  */
14302   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
14303     return;
14304   /* Look for the string.  */
14305   string = cp_parser_string_literal (parser, false, false);
14306   if (string == error_mark_node)
14307     {
14308       cp_parser_skip_to_closing_parenthesis (parser, true, false,
14309                                              /*consume_paren=*/true);
14310       return;
14311     }
14312
14313   /* If we're allowing GNU extensions, check for the extended assembly
14314      syntax.  Unfortunately, the `:' tokens need not be separated by
14315      a space in C, and so, for compatibility, we tolerate that here
14316      too.  Doing that means that we have to treat the `::' operator as
14317      two `:' tokens.  */
14318   if (cp_parser_allow_gnu_extensions_p (parser)
14319       && parser->in_function_body
14320       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
14321           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
14322     {
14323       bool inputs_p = false;
14324       bool clobbers_p = false;
14325       bool labels_p = false;
14326
14327       /* The extended syntax was used.  */
14328       extended_p = true;
14329
14330       /* Look for outputs.  */
14331       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
14332         {
14333           /* Consume the `:'.  */
14334           cp_lexer_consume_token (parser->lexer);
14335           /* Parse the output-operands.  */
14336           if (cp_lexer_next_token_is_not (parser->lexer,
14337                                           CPP_COLON)
14338               && cp_lexer_next_token_is_not (parser->lexer,
14339                                              CPP_SCOPE)
14340               && cp_lexer_next_token_is_not (parser->lexer,
14341                                              CPP_CLOSE_PAREN)
14342               && !goto_p)
14343             outputs = cp_parser_asm_operand_list (parser);
14344
14345             if (outputs == error_mark_node)
14346               invalid_outputs_p = true;
14347         }
14348       /* If the next token is `::', there are no outputs, and the
14349          next token is the beginning of the inputs.  */
14350       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
14351         /* The inputs are coming next.  */
14352         inputs_p = true;
14353
14354       /* Look for inputs.  */
14355       if (inputs_p
14356           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
14357         {
14358           /* Consume the `:' or `::'.  */
14359           cp_lexer_consume_token (parser->lexer);
14360           /* Parse the output-operands.  */
14361           if (cp_lexer_next_token_is_not (parser->lexer,
14362                                           CPP_COLON)
14363               && cp_lexer_next_token_is_not (parser->lexer,
14364                                              CPP_SCOPE)
14365               && cp_lexer_next_token_is_not (parser->lexer,
14366                                              CPP_CLOSE_PAREN))
14367             inputs = cp_parser_asm_operand_list (parser);
14368
14369             if (inputs == error_mark_node)
14370               invalid_inputs_p = true;
14371         }
14372       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
14373         /* The clobbers are coming next.  */
14374         clobbers_p = true;
14375
14376       /* Look for clobbers.  */
14377       if (clobbers_p
14378           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
14379         {
14380           clobbers_p = true;
14381           /* Consume the `:' or `::'.  */
14382           cp_lexer_consume_token (parser->lexer);
14383           /* Parse the clobbers.  */
14384           if (cp_lexer_next_token_is_not (parser->lexer,
14385                                           CPP_COLON)
14386               && cp_lexer_next_token_is_not (parser->lexer,
14387                                              CPP_CLOSE_PAREN))
14388             clobbers = cp_parser_asm_clobber_list (parser);
14389         }
14390       else if (goto_p
14391                && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
14392         /* The labels are coming next.  */
14393         labels_p = true;
14394
14395       /* Look for labels.  */
14396       if (labels_p
14397           || (goto_p && cp_lexer_next_token_is (parser->lexer, CPP_COLON)))
14398         {
14399           labels_p = true;
14400           /* Consume the `:' or `::'.  */
14401           cp_lexer_consume_token (parser->lexer);
14402           /* Parse the labels.  */
14403           labels = cp_parser_asm_label_list (parser);
14404         }
14405
14406       if (goto_p && !labels_p)
14407         missing = clobbers_p ? RT_COLON : RT_COLON_SCOPE;
14408     }
14409   else if (goto_p)
14410     missing = RT_COLON_SCOPE;
14411
14412   /* Look for the closing `)'.  */
14413   if (!cp_parser_require (parser, missing ? CPP_COLON : CPP_CLOSE_PAREN,
14414                           missing ? missing : RT_CLOSE_PAREN))
14415     cp_parser_skip_to_closing_parenthesis (parser, true, false,
14416                                            /*consume_paren=*/true);
14417   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
14418
14419   if (!invalid_inputs_p && !invalid_outputs_p)
14420     {
14421       /* Create the ASM_EXPR.  */
14422       if (parser->in_function_body)
14423         {
14424           asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
14425                                       inputs, clobbers, labels);
14426           /* If the extended syntax was not used, mark the ASM_EXPR.  */
14427           if (!extended_p)
14428             {
14429               tree temp = asm_stmt;
14430               if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
14431                 temp = TREE_OPERAND (temp, 0);
14432
14433               ASM_INPUT_P (temp) = 1;
14434             }
14435         }
14436       else
14437         cgraph_add_asm_node (string);
14438     }
14439 }
14440
14441 /* Declarators [gram.dcl.decl] */
14442
14443 /* Parse an init-declarator.
14444
14445    init-declarator:
14446      declarator initializer [opt]
14447
14448    GNU Extension:
14449
14450    init-declarator:
14451      declarator asm-specification [opt] attributes [opt] initializer [opt]
14452
14453    function-definition:
14454      decl-specifier-seq [opt] declarator ctor-initializer [opt]
14455        function-body
14456      decl-specifier-seq [opt] declarator function-try-block
14457
14458    GNU Extension:
14459
14460    function-definition:
14461      __extension__ function-definition
14462
14463    The DECL_SPECIFIERS apply to this declarator.  Returns a
14464    representation of the entity declared.  If MEMBER_P is TRUE, then
14465    this declarator appears in a class scope.  The new DECL created by
14466    this declarator is returned.
14467
14468    The CHECKS are access checks that should be performed once we know
14469    what entity is being declared (and, therefore, what classes have
14470    befriended it).
14471
14472    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
14473    for a function-definition here as well.  If the declarator is a
14474    declarator for a function-definition, *FUNCTION_DEFINITION_P will
14475    be TRUE upon return.  By that point, the function-definition will
14476    have been completely parsed.
14477
14478    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
14479    is FALSE.
14480
14481    If MAYBE_RANGE_FOR_DECL is not NULL, the pointed tree will be set to the
14482    parsed declaration if it is an uninitialized single declarator not followed
14483    by a `;', or to error_mark_node otherwise. Either way, the trailing `;',
14484    if present, will not be consumed.  If returned, this declarator will be
14485    created with SD_INITIALIZED but will not call cp_finish_decl.  */
14486
14487 static tree
14488 cp_parser_init_declarator (cp_parser* parser,
14489                            cp_decl_specifier_seq *decl_specifiers,
14490                            VEC (deferred_access_check,gc)* checks,
14491                            bool function_definition_allowed_p,
14492                            bool member_p,
14493                            int declares_class_or_enum,
14494                            bool* function_definition_p,
14495                            tree* maybe_range_for_decl)
14496 {
14497   cp_token *token = NULL, *asm_spec_start_token = NULL,
14498            *attributes_start_token = NULL;
14499   cp_declarator *declarator;
14500   tree prefix_attributes;
14501   tree attributes;
14502   tree asm_specification;
14503   tree initializer;
14504   tree decl = NULL_TREE;
14505   tree scope;
14506   int is_initialized;
14507   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
14508      initialized with "= ..", CPP_OPEN_PAREN if initialized with
14509      "(...)".  */
14510   enum cpp_ttype initialization_kind;
14511   bool is_direct_init = false;
14512   bool is_non_constant_init;
14513   int ctor_dtor_or_conv_p;
14514   bool friend_p;
14515   tree pushed_scope = NULL_TREE;
14516   bool range_for_decl_p = false;
14517
14518   /* Gather the attributes that were provided with the
14519      decl-specifiers.  */
14520   prefix_attributes = decl_specifiers->attributes;
14521
14522   /* Assume that this is not the declarator for a function
14523      definition.  */
14524   if (function_definition_p)
14525     *function_definition_p = false;
14526
14527   /* Defer access checks while parsing the declarator; we cannot know
14528      what names are accessible until we know what is being
14529      declared.  */
14530   resume_deferring_access_checks ();
14531
14532   /* Parse the declarator.  */
14533   token = cp_lexer_peek_token (parser->lexer);
14534   declarator
14535     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
14536                             &ctor_dtor_or_conv_p,
14537                             /*parenthesized_p=*/NULL,
14538                             member_p);
14539   /* Gather up the deferred checks.  */
14540   stop_deferring_access_checks ();
14541
14542   /* If the DECLARATOR was erroneous, there's no need to go
14543      further.  */
14544   if (declarator == cp_error_declarator)
14545     return error_mark_node;
14546
14547   /* Check that the number of template-parameter-lists is OK.  */
14548   if (!cp_parser_check_declarator_template_parameters (parser, declarator,
14549                                                        token->location))
14550     return error_mark_node;
14551
14552   if (declares_class_or_enum & 2)
14553     cp_parser_check_for_definition_in_return_type (declarator,
14554                                                    decl_specifiers->type,
14555                                                    decl_specifiers->type_location);
14556
14557   /* Figure out what scope the entity declared by the DECLARATOR is
14558      located in.  `grokdeclarator' sometimes changes the scope, so
14559      we compute it now.  */
14560   scope = get_scope_of_declarator (declarator);
14561
14562   /* Perform any lookups in the declared type which were thought to be
14563      dependent, but are not in the scope of the declarator.  */
14564   decl_specifiers->type
14565     = maybe_update_decl_type (decl_specifiers->type, scope);
14566
14567   /* If we're allowing GNU extensions, look for an asm-specification
14568      and attributes.  */
14569   if (cp_parser_allow_gnu_extensions_p (parser))
14570     {
14571       /* Look for an asm-specification.  */
14572       asm_spec_start_token = cp_lexer_peek_token (parser->lexer);
14573       asm_specification = cp_parser_asm_specification_opt (parser);
14574       /* And attributes.  */
14575       attributes_start_token = cp_lexer_peek_token (parser->lexer);
14576       attributes = cp_parser_attributes_opt (parser);
14577     }
14578   else
14579     {
14580       asm_specification = NULL_TREE;
14581       attributes = NULL_TREE;
14582     }
14583
14584   /* Peek at the next token.  */
14585   token = cp_lexer_peek_token (parser->lexer);
14586   /* Check to see if the token indicates the start of a
14587      function-definition.  */
14588   if (function_declarator_p (declarator)
14589       && cp_parser_token_starts_function_definition_p (token))
14590     {
14591       if (!function_definition_allowed_p)
14592         {
14593           /* If a function-definition should not appear here, issue an
14594              error message.  */
14595           cp_parser_error (parser,
14596                            "a function-definition is not allowed here");
14597           return error_mark_node;
14598         }
14599       else
14600         {
14601           location_t func_brace_location
14602             = cp_lexer_peek_token (parser->lexer)->location;
14603
14604           /* Neither attributes nor an asm-specification are allowed
14605              on a function-definition.  */
14606           if (asm_specification)
14607             error_at (asm_spec_start_token->location,
14608                       "an asm-specification is not allowed "
14609                       "on a function-definition");
14610           if (attributes)
14611             error_at (attributes_start_token->location,
14612                       "attributes are not allowed on a function-definition");
14613           /* This is a function-definition.  */
14614           *function_definition_p = true;
14615
14616           /* Parse the function definition.  */
14617           if (member_p)
14618             decl = cp_parser_save_member_function_body (parser,
14619                                                         decl_specifiers,
14620                                                         declarator,
14621                                                         prefix_attributes);
14622           else
14623             decl
14624               = (cp_parser_function_definition_from_specifiers_and_declarator
14625                  (parser, decl_specifiers, prefix_attributes, declarator));
14626
14627           if (decl != error_mark_node && DECL_STRUCT_FUNCTION (decl))
14628             {
14629               /* This is where the prologue starts...  */
14630               DECL_STRUCT_FUNCTION (decl)->function_start_locus
14631                 = func_brace_location;
14632             }
14633
14634           return decl;
14635         }
14636     }
14637
14638   /* [dcl.dcl]
14639
14640      Only in function declarations for constructors, destructors, and
14641      type conversions can the decl-specifier-seq be omitted.
14642
14643      We explicitly postpone this check past the point where we handle
14644      function-definitions because we tolerate function-definitions
14645      that are missing their return types in some modes.  */
14646   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
14647     {
14648       cp_parser_error (parser,
14649                        "expected constructor, destructor, or type conversion");
14650       return error_mark_node;
14651     }
14652
14653   /* An `=' or an `(', or an '{' in C++0x, indicates an initializer.  */
14654   if (token->type == CPP_EQ
14655       || token->type == CPP_OPEN_PAREN
14656       || token->type == CPP_OPEN_BRACE)
14657     {
14658       is_initialized = SD_INITIALIZED;
14659       initialization_kind = token->type;
14660       if (maybe_range_for_decl)
14661         *maybe_range_for_decl = error_mark_node;
14662
14663       if (token->type == CPP_EQ
14664           && function_declarator_p (declarator))
14665         {
14666           cp_token *t2 = cp_lexer_peek_nth_token (parser->lexer, 2);
14667           if (t2->keyword == RID_DEFAULT)
14668             is_initialized = SD_DEFAULTED;
14669           else if (t2->keyword == RID_DELETE)
14670             is_initialized = SD_DELETED;
14671         }
14672     }
14673   else
14674     {
14675       /* If the init-declarator isn't initialized and isn't followed by a
14676          `,' or `;', it's not a valid init-declarator.  */
14677       if (token->type != CPP_COMMA
14678           && token->type != CPP_SEMICOLON)
14679         {
14680           if (maybe_range_for_decl && *maybe_range_for_decl != error_mark_node)
14681             range_for_decl_p = true;
14682           else
14683             {
14684               cp_parser_error (parser, "expected initializer");
14685               return error_mark_node;
14686             }
14687         }
14688       is_initialized = SD_UNINITIALIZED;
14689       initialization_kind = CPP_EOF;
14690     }
14691
14692   /* Because start_decl has side-effects, we should only call it if we
14693      know we're going ahead.  By this point, we know that we cannot
14694      possibly be looking at any other construct.  */
14695   cp_parser_commit_to_tentative_parse (parser);
14696
14697   /* If the decl specifiers were bad, issue an error now that we're
14698      sure this was intended to be a declarator.  Then continue
14699      declaring the variable(s), as int, to try to cut down on further
14700      errors.  */
14701   if (decl_specifiers->any_specifiers_p
14702       && decl_specifiers->type == error_mark_node)
14703     {
14704       cp_parser_error (parser, "invalid type in declaration");
14705       decl_specifiers->type = integer_type_node;
14706     }
14707
14708   /* Check to see whether or not this declaration is a friend.  */
14709   friend_p = cp_parser_friend_p (decl_specifiers);
14710
14711   /* Enter the newly declared entry in the symbol table.  If we're
14712      processing a declaration in a class-specifier, we wait until
14713      after processing the initializer.  */
14714   if (!member_p)
14715     {
14716       if (parser->in_unbraced_linkage_specification_p)
14717         decl_specifiers->storage_class = sc_extern;
14718       decl = start_decl (declarator, decl_specifiers,
14719                          range_for_decl_p? SD_INITIALIZED : is_initialized,
14720                          attributes, prefix_attributes,
14721                          &pushed_scope);
14722       /* Adjust location of decl if declarator->id_loc is more appropriate:
14723          set, and decl wasn't merged with another decl, in which case its
14724          location would be different from input_location, and more accurate.  */
14725       if (DECL_P (decl)
14726           && declarator->id_loc != UNKNOWN_LOCATION
14727           && DECL_SOURCE_LOCATION (decl) == input_location)
14728         DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
14729     }
14730   else if (scope)
14731     /* Enter the SCOPE.  That way unqualified names appearing in the
14732        initializer will be looked up in SCOPE.  */
14733     pushed_scope = push_scope (scope);
14734
14735   /* Perform deferred access control checks, now that we know in which
14736      SCOPE the declared entity resides.  */
14737   if (!member_p && decl)
14738     {
14739       tree saved_current_function_decl = NULL_TREE;
14740
14741       /* If the entity being declared is a function, pretend that we
14742          are in its scope.  If it is a `friend', it may have access to
14743          things that would not otherwise be accessible.  */
14744       if (TREE_CODE (decl) == FUNCTION_DECL)
14745         {
14746           saved_current_function_decl = current_function_decl;
14747           current_function_decl = decl;
14748         }
14749
14750       /* Perform access checks for template parameters.  */
14751       cp_parser_perform_template_parameter_access_checks (checks);
14752
14753       /* Perform the access control checks for the declarator and the
14754          decl-specifiers.  */
14755       perform_deferred_access_checks ();
14756
14757       /* Restore the saved value.  */
14758       if (TREE_CODE (decl) == FUNCTION_DECL)
14759         current_function_decl = saved_current_function_decl;
14760     }
14761
14762   /* Parse the initializer.  */
14763   initializer = NULL_TREE;
14764   is_direct_init = false;
14765   is_non_constant_init = true;
14766   if (is_initialized)
14767     {
14768       if (function_declarator_p (declarator))
14769         {
14770           cp_token *initializer_start_token = cp_lexer_peek_token (parser->lexer);
14771            if (initialization_kind == CPP_EQ)
14772              initializer = cp_parser_pure_specifier (parser);
14773            else
14774              {
14775                /* If the declaration was erroneous, we don't really
14776                   know what the user intended, so just silently
14777                   consume the initializer.  */
14778                if (decl != error_mark_node)
14779                  error_at (initializer_start_token->location,
14780                            "initializer provided for function");
14781                cp_parser_skip_to_closing_parenthesis (parser,
14782                                                       /*recovering=*/true,
14783                                                       /*or_comma=*/false,
14784                                                       /*consume_paren=*/true);
14785              }
14786         }
14787       else
14788         {
14789           /* We want to record the extra mangling scope for in-class
14790              initializers of class members and initializers of static data
14791              member templates.  The former is a C++0x feature which isn't
14792              implemented yet, and I expect it will involve deferring
14793              parsing of the initializer until end of class as with default
14794              arguments.  So right here we only handle the latter.  */
14795           if (!member_p && processing_template_decl)
14796             start_lambda_scope (decl);
14797           initializer = cp_parser_initializer (parser,
14798                                                &is_direct_init,
14799                                                &is_non_constant_init);
14800           if (!member_p && processing_template_decl)
14801             finish_lambda_scope ();
14802         }
14803     }
14804
14805   /* The old parser allows attributes to appear after a parenthesized
14806      initializer.  Mark Mitchell proposed removing this functionality
14807      on the GCC mailing lists on 2002-08-13.  This parser accepts the
14808      attributes -- but ignores them.  */
14809   if (cp_parser_allow_gnu_extensions_p (parser)
14810       && initialization_kind == CPP_OPEN_PAREN)
14811     if (cp_parser_attributes_opt (parser))
14812       warning (OPT_Wattributes,
14813                "attributes after parenthesized initializer ignored");
14814
14815   /* For an in-class declaration, use `grokfield' to create the
14816      declaration.  */
14817   if (member_p)
14818     {
14819       if (pushed_scope)
14820         {
14821           pop_scope (pushed_scope);
14822           pushed_scope = NULL_TREE;
14823         }
14824       decl = grokfield (declarator, decl_specifiers,
14825                         initializer, !is_non_constant_init,
14826                         /*asmspec=*/NULL_TREE,
14827                         prefix_attributes);
14828       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
14829         cp_parser_save_default_args (parser, decl);
14830     }
14831
14832   /* Finish processing the declaration.  But, skip member
14833      declarations.  */
14834   if (!member_p && decl && decl != error_mark_node && !range_for_decl_p)
14835     {
14836       cp_finish_decl (decl,
14837                       initializer, !is_non_constant_init,
14838                       asm_specification,
14839                       /* If the initializer is in parentheses, then this is
14840                          a direct-initialization, which means that an
14841                          `explicit' constructor is OK.  Otherwise, an
14842                          `explicit' constructor cannot be used.  */
14843                       ((is_direct_init || !is_initialized)
14844                        ? LOOKUP_NORMAL : LOOKUP_IMPLICIT));
14845     }
14846   else if ((cxx_dialect != cxx98) && friend_p
14847            && decl && TREE_CODE (decl) == FUNCTION_DECL)
14848     /* Core issue #226 (C++0x only): A default template-argument
14849        shall not be specified in a friend class template
14850        declaration. */
14851     check_default_tmpl_args (decl, current_template_parms, /*is_primary=*/1, 
14852                              /*is_partial=*/0, /*is_friend_decl=*/1);
14853
14854   if (!friend_p && pushed_scope)
14855     pop_scope (pushed_scope);
14856
14857   return decl;
14858 }
14859
14860 /* Parse a declarator.
14861
14862    declarator:
14863      direct-declarator
14864      ptr-operator declarator
14865
14866    abstract-declarator:
14867      ptr-operator abstract-declarator [opt]
14868      direct-abstract-declarator
14869
14870    GNU Extensions:
14871
14872    declarator:
14873      attributes [opt] direct-declarator
14874      attributes [opt] ptr-operator declarator
14875
14876    abstract-declarator:
14877      attributes [opt] ptr-operator abstract-declarator [opt]
14878      attributes [opt] direct-abstract-declarator
14879
14880    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
14881    detect constructor, destructor or conversion operators. It is set
14882    to -1 if the declarator is a name, and +1 if it is a
14883    function. Otherwise it is set to zero. Usually you just want to
14884    test for >0, but internally the negative value is used.
14885
14886    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
14887    a decl-specifier-seq unless it declares a constructor, destructor,
14888    or conversion.  It might seem that we could check this condition in
14889    semantic analysis, rather than parsing, but that makes it difficult
14890    to handle something like `f()'.  We want to notice that there are
14891    no decl-specifiers, and therefore realize that this is an
14892    expression, not a declaration.)
14893
14894    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
14895    the declarator is a direct-declarator of the form "(...)".
14896
14897    MEMBER_P is true iff this declarator is a member-declarator.  */
14898
14899 static cp_declarator *
14900 cp_parser_declarator (cp_parser* parser,
14901                       cp_parser_declarator_kind dcl_kind,
14902                       int* ctor_dtor_or_conv_p,
14903                       bool* parenthesized_p,
14904                       bool member_p)
14905 {
14906   cp_declarator *declarator;
14907   enum tree_code code;
14908   cp_cv_quals cv_quals;
14909   tree class_type;
14910   tree attributes = NULL_TREE;
14911
14912   /* Assume this is not a constructor, destructor, or type-conversion
14913      operator.  */
14914   if (ctor_dtor_or_conv_p)
14915     *ctor_dtor_or_conv_p = 0;
14916
14917   if (cp_parser_allow_gnu_extensions_p (parser))
14918     attributes = cp_parser_attributes_opt (parser);
14919
14920   /* Check for the ptr-operator production.  */
14921   cp_parser_parse_tentatively (parser);
14922   /* Parse the ptr-operator.  */
14923   code = cp_parser_ptr_operator (parser,
14924                                  &class_type,
14925                                  &cv_quals);
14926   /* If that worked, then we have a ptr-operator.  */
14927   if (cp_parser_parse_definitely (parser))
14928     {
14929       /* If a ptr-operator was found, then this declarator was not
14930          parenthesized.  */
14931       if (parenthesized_p)
14932         *parenthesized_p = true;
14933       /* The dependent declarator is optional if we are parsing an
14934          abstract-declarator.  */
14935       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
14936         cp_parser_parse_tentatively (parser);
14937
14938       /* Parse the dependent declarator.  */
14939       declarator = cp_parser_declarator (parser, dcl_kind,
14940                                          /*ctor_dtor_or_conv_p=*/NULL,
14941                                          /*parenthesized_p=*/NULL,
14942                                          /*member_p=*/false);
14943
14944       /* If we are parsing an abstract-declarator, we must handle the
14945          case where the dependent declarator is absent.  */
14946       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
14947           && !cp_parser_parse_definitely (parser))
14948         declarator = NULL;
14949
14950       declarator = cp_parser_make_indirect_declarator
14951         (code, class_type, cv_quals, declarator);
14952     }
14953   /* Everything else is a direct-declarator.  */
14954   else
14955     {
14956       if (parenthesized_p)
14957         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
14958                                                    CPP_OPEN_PAREN);
14959       declarator = cp_parser_direct_declarator (parser, dcl_kind,
14960                                                 ctor_dtor_or_conv_p,
14961                                                 member_p);
14962     }
14963
14964   if (attributes && declarator && declarator != cp_error_declarator)
14965     declarator->attributes = attributes;
14966
14967   return declarator;
14968 }
14969
14970 /* Parse a direct-declarator or direct-abstract-declarator.
14971
14972    direct-declarator:
14973      declarator-id
14974      direct-declarator ( parameter-declaration-clause )
14975        cv-qualifier-seq [opt]
14976        exception-specification [opt]
14977      direct-declarator [ constant-expression [opt] ]
14978      ( declarator )
14979
14980    direct-abstract-declarator:
14981      direct-abstract-declarator [opt]
14982        ( parameter-declaration-clause )
14983        cv-qualifier-seq [opt]
14984        exception-specification [opt]
14985      direct-abstract-declarator [opt] [ constant-expression [opt] ]
14986      ( abstract-declarator )
14987
14988    Returns a representation of the declarator.  DCL_KIND is
14989    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
14990    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
14991    we are parsing a direct-declarator.  It is
14992    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
14993    of ambiguity we prefer an abstract declarator, as per
14994    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
14995    cp_parser_declarator.  */
14996
14997 static cp_declarator *
14998 cp_parser_direct_declarator (cp_parser* parser,
14999                              cp_parser_declarator_kind dcl_kind,
15000                              int* ctor_dtor_or_conv_p,
15001                              bool member_p)
15002 {
15003   cp_token *token;
15004   cp_declarator *declarator = NULL;
15005   tree scope = NULL_TREE;
15006   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
15007   bool saved_in_declarator_p = parser->in_declarator_p;
15008   bool first = true;
15009   tree pushed_scope = NULL_TREE;
15010
15011   while (true)
15012     {
15013       /* Peek at the next token.  */
15014       token = cp_lexer_peek_token (parser->lexer);
15015       if (token->type == CPP_OPEN_PAREN)
15016         {
15017           /* This is either a parameter-declaration-clause, or a
15018              parenthesized declarator. When we know we are parsing a
15019              named declarator, it must be a parenthesized declarator
15020              if FIRST is true. For instance, `(int)' is a
15021              parameter-declaration-clause, with an omitted
15022              direct-abstract-declarator. But `((*))', is a
15023              parenthesized abstract declarator. Finally, when T is a
15024              template parameter `(T)' is a
15025              parameter-declaration-clause, and not a parenthesized
15026              named declarator.
15027
15028              We first try and parse a parameter-declaration-clause,
15029              and then try a nested declarator (if FIRST is true).
15030
15031              It is not an error for it not to be a
15032              parameter-declaration-clause, even when FIRST is
15033              false. Consider,
15034
15035                int i (int);
15036                int i (3);
15037
15038              The first is the declaration of a function while the
15039              second is the definition of a variable, including its
15040              initializer.
15041
15042              Having seen only the parenthesis, we cannot know which of
15043              these two alternatives should be selected.  Even more
15044              complex are examples like:
15045
15046                int i (int (a));
15047                int i (int (3));
15048
15049              The former is a function-declaration; the latter is a
15050              variable initialization.
15051
15052              Thus again, we try a parameter-declaration-clause, and if
15053              that fails, we back out and return.  */
15054
15055           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
15056             {
15057               tree params;
15058               unsigned saved_num_template_parameter_lists;
15059               bool is_declarator = false;
15060               tree t;
15061
15062               /* In a member-declarator, the only valid interpretation
15063                  of a parenthesis is the start of a
15064                  parameter-declaration-clause.  (It is invalid to
15065                  initialize a static data member with a parenthesized
15066                  initializer; only the "=" form of initialization is
15067                  permitted.)  */
15068               if (!member_p)
15069                 cp_parser_parse_tentatively (parser);
15070
15071               /* Consume the `('.  */
15072               cp_lexer_consume_token (parser->lexer);
15073               if (first)
15074                 {
15075                   /* If this is going to be an abstract declarator, we're
15076                      in a declarator and we can't have default args.  */
15077                   parser->default_arg_ok_p = false;
15078                   parser->in_declarator_p = true;
15079                 }
15080
15081               /* Inside the function parameter list, surrounding
15082                  template-parameter-lists do not apply.  */
15083               saved_num_template_parameter_lists
15084                 = parser->num_template_parameter_lists;
15085               parser->num_template_parameter_lists = 0;
15086
15087               begin_scope (sk_function_parms, NULL_TREE);
15088
15089               /* Parse the parameter-declaration-clause.  */
15090               params = cp_parser_parameter_declaration_clause (parser);
15091
15092               parser->num_template_parameter_lists
15093                 = saved_num_template_parameter_lists;
15094
15095               /* Consume the `)'.  */
15096               cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
15097
15098               /* If all went well, parse the cv-qualifier-seq and the
15099                  exception-specification.  */
15100               if (member_p || cp_parser_parse_definitely (parser))
15101                 {
15102                   cp_cv_quals cv_quals;
15103                   cp_virt_specifiers virt_specifiers;
15104                   tree exception_specification;
15105                   tree late_return;
15106
15107                   is_declarator = true;
15108
15109                   if (ctor_dtor_or_conv_p)
15110                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
15111                   first = false;
15112
15113                   /* Parse the cv-qualifier-seq.  */
15114                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
15115                   /* And the exception-specification.  */
15116                   exception_specification
15117                     = cp_parser_exception_specification_opt (parser);
15118                   /* Parse the virt-specifier-seq.  */
15119                   virt_specifiers = cp_parser_virt_specifier_seq_opt (parser);
15120
15121                   late_return = (cp_parser_late_return_type_opt
15122                                  (parser, member_p ? cv_quals : -1));
15123
15124                   /* Create the function-declarator.  */
15125                   declarator = make_call_declarator (declarator,
15126                                                      params,
15127                                                      cv_quals,
15128                                                      virt_specifiers,
15129                                                      exception_specification,
15130                                                      late_return);
15131                   /* Any subsequent parameter lists are to do with
15132                      return type, so are not those of the declared
15133                      function.  */
15134                   parser->default_arg_ok_p = false;
15135                 }
15136
15137               /* Remove the function parms from scope.  */
15138               for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
15139                 pop_binding (DECL_NAME (t), t);
15140               leave_scope();
15141
15142               if (is_declarator)
15143                 /* Repeat the main loop.  */
15144                 continue;
15145             }
15146
15147           /* If this is the first, we can try a parenthesized
15148              declarator.  */
15149           if (first)
15150             {
15151               bool saved_in_type_id_in_expr_p;
15152
15153               parser->default_arg_ok_p = saved_default_arg_ok_p;
15154               parser->in_declarator_p = saved_in_declarator_p;
15155
15156               /* Consume the `('.  */
15157               cp_lexer_consume_token (parser->lexer);
15158               /* Parse the nested declarator.  */
15159               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
15160               parser->in_type_id_in_expr_p = true;
15161               declarator
15162                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
15163                                         /*parenthesized_p=*/NULL,
15164                                         member_p);
15165               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
15166               first = false;
15167               /* Expect a `)'.  */
15168               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
15169                 declarator = cp_error_declarator;
15170               if (declarator == cp_error_declarator)
15171                 break;
15172
15173               goto handle_declarator;
15174             }
15175           /* Otherwise, we must be done.  */
15176           else
15177             break;
15178         }
15179       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
15180                && token->type == CPP_OPEN_SQUARE)
15181         {
15182           /* Parse an array-declarator.  */
15183           tree bounds;
15184
15185           if (ctor_dtor_or_conv_p)
15186             *ctor_dtor_or_conv_p = 0;
15187
15188           first = false;
15189           parser->default_arg_ok_p = false;
15190           parser->in_declarator_p = true;
15191           /* Consume the `['.  */
15192           cp_lexer_consume_token (parser->lexer);
15193           /* Peek at the next token.  */
15194           token = cp_lexer_peek_token (parser->lexer);
15195           /* If the next token is `]', then there is no
15196              constant-expression.  */
15197           if (token->type != CPP_CLOSE_SQUARE)
15198             {
15199               bool non_constant_p;
15200
15201               bounds
15202                 = cp_parser_constant_expression (parser,
15203                                                  /*allow_non_constant=*/true,
15204                                                  &non_constant_p);
15205               if (!non_constant_p)
15206                 /* OK */;
15207               /* Normally, the array bound must be an integral constant
15208                  expression.  However, as an extension, we allow VLAs
15209                  in function scopes as long as they aren't part of a
15210                  parameter declaration.  */
15211               else if (!parser->in_function_body
15212                        || current_binding_level->kind == sk_function_parms)
15213                 {
15214                   cp_parser_error (parser,
15215                                    "array bound is not an integer constant");
15216                   bounds = error_mark_node;
15217                 }
15218               else if (processing_template_decl && !error_operand_p (bounds))
15219                 {
15220                   /* Remember this wasn't a constant-expression.  */
15221                   bounds = build_nop (TREE_TYPE (bounds), bounds);
15222                   TREE_SIDE_EFFECTS (bounds) = 1;
15223                 }
15224             }
15225           else
15226             bounds = NULL_TREE;
15227           /* Look for the closing `]'.  */
15228           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE))
15229             {
15230               declarator = cp_error_declarator;
15231               break;
15232             }
15233
15234           declarator = make_array_declarator (declarator, bounds);
15235         }
15236       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
15237         {
15238           {
15239             tree qualifying_scope;
15240             tree unqualified_name;
15241             special_function_kind sfk;
15242             bool abstract_ok;
15243             bool pack_expansion_p = false;
15244             cp_token *declarator_id_start_token;
15245
15246             /* Parse a declarator-id */
15247             abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
15248             if (abstract_ok)
15249               {
15250                 cp_parser_parse_tentatively (parser);
15251
15252                 /* If we see an ellipsis, we should be looking at a
15253                    parameter pack. */
15254                 if (token->type == CPP_ELLIPSIS)
15255                   {
15256                     /* Consume the `...' */
15257                     cp_lexer_consume_token (parser->lexer);
15258
15259                     pack_expansion_p = true;
15260                   }
15261               }
15262
15263             declarator_id_start_token = cp_lexer_peek_token (parser->lexer);
15264             unqualified_name
15265               = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
15266             qualifying_scope = parser->scope;
15267             if (abstract_ok)
15268               {
15269                 bool okay = false;
15270
15271                 if (!unqualified_name && pack_expansion_p)
15272                   {
15273                     /* Check whether an error occurred. */
15274                     okay = !cp_parser_error_occurred (parser);
15275
15276                     /* We already consumed the ellipsis to mark a
15277                        parameter pack, but we have no way to report it,
15278                        so abort the tentative parse. We will be exiting
15279                        immediately anyway. */
15280                     cp_parser_abort_tentative_parse (parser);
15281                   }
15282                 else
15283                   okay = cp_parser_parse_definitely (parser);
15284
15285                 if (!okay)
15286                   unqualified_name = error_mark_node;
15287                 else if (unqualified_name
15288                          && (qualifying_scope
15289                              || (TREE_CODE (unqualified_name)
15290                                  != IDENTIFIER_NODE)))
15291                   {
15292                     cp_parser_error (parser, "expected unqualified-id");
15293                     unqualified_name = error_mark_node;
15294                   }
15295               }
15296
15297             if (!unqualified_name)
15298               return NULL;
15299             if (unqualified_name == error_mark_node)
15300               {
15301                 declarator = cp_error_declarator;
15302                 pack_expansion_p = false;
15303                 declarator->parameter_pack_p = false;
15304                 break;
15305               }
15306
15307             if (qualifying_scope && at_namespace_scope_p ()
15308                 && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
15309               {
15310                 /* In the declaration of a member of a template class
15311                    outside of the class itself, the SCOPE will sometimes
15312                    be a TYPENAME_TYPE.  For example, given:
15313
15314                    template <typename T>
15315                    int S<T>::R::i = 3;
15316
15317                    the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
15318                    this context, we must resolve S<T>::R to an ordinary
15319                    type, rather than a typename type.
15320
15321                    The reason we normally avoid resolving TYPENAME_TYPEs
15322                    is that a specialization of `S' might render
15323                    `S<T>::R' not a type.  However, if `S' is
15324                    specialized, then this `i' will not be used, so there
15325                    is no harm in resolving the types here.  */
15326                 tree type;
15327
15328                 /* Resolve the TYPENAME_TYPE.  */
15329                 type = resolve_typename_type (qualifying_scope,
15330                                               /*only_current_p=*/false);
15331                 /* If that failed, the declarator is invalid.  */
15332                 if (TREE_CODE (type) == TYPENAME_TYPE)
15333                   {
15334                     if (typedef_variant_p (type))
15335                       error_at (declarator_id_start_token->location,
15336                                 "cannot define member of dependent typedef "
15337                                 "%qT", type);
15338                     else
15339                       error_at (declarator_id_start_token->location,
15340                                 "%<%T::%E%> is not a type",
15341                                 TYPE_CONTEXT (qualifying_scope),
15342                                 TYPE_IDENTIFIER (qualifying_scope));
15343                   }
15344                 qualifying_scope = type;
15345               }
15346
15347             sfk = sfk_none;
15348
15349             if (unqualified_name)
15350               {
15351                 tree class_type;
15352
15353                 if (qualifying_scope
15354                     && CLASS_TYPE_P (qualifying_scope))
15355                   class_type = qualifying_scope;
15356                 else
15357                   class_type = current_class_type;
15358
15359                 if (TREE_CODE (unqualified_name) == TYPE_DECL)
15360                   {
15361                     tree name_type = TREE_TYPE (unqualified_name);
15362                     if (class_type && same_type_p (name_type, class_type))
15363                       {
15364                         if (qualifying_scope
15365                             && CLASSTYPE_USE_TEMPLATE (name_type))
15366                           {
15367                             error_at (declarator_id_start_token->location,
15368                                       "invalid use of constructor as a template");
15369                             inform (declarator_id_start_token->location,
15370                                     "use %<%T::%D%> instead of %<%T::%D%> to "
15371                                     "name the constructor in a qualified name",
15372                                     class_type,
15373                                     DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
15374                                     class_type, name_type);
15375                             declarator = cp_error_declarator;
15376                             break;
15377                           }
15378                         else
15379                           unqualified_name = constructor_name (class_type);
15380                       }
15381                     else
15382                       {
15383                         /* We do not attempt to print the declarator
15384                            here because we do not have enough
15385                            information about its original syntactic
15386                            form.  */
15387                         cp_parser_error (parser, "invalid declarator");
15388                         declarator = cp_error_declarator;
15389                         break;
15390                       }
15391                   }
15392
15393                 if (class_type)
15394                   {
15395                     if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
15396                       sfk = sfk_destructor;
15397                     else if (IDENTIFIER_TYPENAME_P (unqualified_name))
15398                       sfk = sfk_conversion;
15399                     else if (/* There's no way to declare a constructor
15400                                 for an anonymous type, even if the type
15401                                 got a name for linkage purposes.  */
15402                              !TYPE_WAS_ANONYMOUS (class_type)
15403                              && constructor_name_p (unqualified_name,
15404                                                     class_type))
15405                       {
15406                         unqualified_name = constructor_name (class_type);
15407                         sfk = sfk_constructor;
15408                       }
15409                     else if (is_overloaded_fn (unqualified_name)
15410                              && DECL_CONSTRUCTOR_P (get_first_fn
15411                                                     (unqualified_name)))
15412                       sfk = sfk_constructor;
15413
15414                     if (ctor_dtor_or_conv_p && sfk != sfk_none)
15415                       *ctor_dtor_or_conv_p = -1;
15416                   }
15417               }
15418             declarator = make_id_declarator (qualifying_scope,
15419                                              unqualified_name,
15420                                              sfk);
15421             declarator->id_loc = token->location;
15422             declarator->parameter_pack_p = pack_expansion_p;
15423
15424             if (pack_expansion_p)
15425               maybe_warn_variadic_templates ();
15426           }
15427
15428         handle_declarator:;
15429           scope = get_scope_of_declarator (declarator);
15430           if (scope)
15431             /* Any names that appear after the declarator-id for a
15432                member are looked up in the containing scope.  */
15433             pushed_scope = push_scope (scope);
15434           parser->in_declarator_p = true;
15435           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
15436               || (declarator && declarator->kind == cdk_id))
15437             /* Default args are only allowed on function
15438                declarations.  */
15439             parser->default_arg_ok_p = saved_default_arg_ok_p;
15440           else
15441             parser->default_arg_ok_p = false;
15442
15443           first = false;
15444         }
15445       /* We're done.  */
15446       else
15447         break;
15448     }
15449
15450   /* For an abstract declarator, we might wind up with nothing at this
15451      point.  That's an error; the declarator is not optional.  */
15452   if (!declarator)
15453     cp_parser_error (parser, "expected declarator");
15454
15455   /* If we entered a scope, we must exit it now.  */
15456   if (pushed_scope)
15457     pop_scope (pushed_scope);
15458
15459   parser->default_arg_ok_p = saved_default_arg_ok_p;
15460   parser->in_declarator_p = saved_in_declarator_p;
15461
15462   return declarator;
15463 }
15464
15465 /* Parse a ptr-operator.
15466
15467    ptr-operator:
15468      * cv-qualifier-seq [opt]
15469      &
15470      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
15471
15472    GNU Extension:
15473
15474    ptr-operator:
15475      & cv-qualifier-seq [opt]
15476
15477    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
15478    Returns ADDR_EXPR if a reference was used, or NON_LVALUE_EXPR for
15479    an rvalue reference. In the case of a pointer-to-member, *TYPE is
15480    filled in with the TYPE containing the member.  *CV_QUALS is
15481    filled in with the cv-qualifier-seq, or TYPE_UNQUALIFIED, if there
15482    are no cv-qualifiers.  Returns ERROR_MARK if an error occurred.
15483    Note that the tree codes returned by this function have nothing
15484    to do with the types of trees that will be eventually be created
15485    to represent the pointer or reference type being parsed. They are
15486    just constants with suggestive names. */
15487 static enum tree_code
15488 cp_parser_ptr_operator (cp_parser* parser,
15489                         tree* type,
15490                         cp_cv_quals *cv_quals)
15491 {
15492   enum tree_code code = ERROR_MARK;
15493   cp_token *token;
15494
15495   /* Assume that it's not a pointer-to-member.  */
15496   *type = NULL_TREE;
15497   /* And that there are no cv-qualifiers.  */
15498   *cv_quals = TYPE_UNQUALIFIED;
15499
15500   /* Peek at the next token.  */
15501   token = cp_lexer_peek_token (parser->lexer);
15502
15503   /* If it's a `*', `&' or `&&' we have a pointer or reference.  */
15504   if (token->type == CPP_MULT)
15505     code = INDIRECT_REF;
15506   else if (token->type == CPP_AND)
15507     code = ADDR_EXPR;
15508   else if ((cxx_dialect != cxx98) &&
15509            token->type == CPP_AND_AND) /* C++0x only */
15510     code = NON_LVALUE_EXPR;
15511
15512   if (code != ERROR_MARK)
15513     {
15514       /* Consume the `*', `&' or `&&'.  */
15515       cp_lexer_consume_token (parser->lexer);
15516
15517       /* A `*' can be followed by a cv-qualifier-seq, and so can a
15518          `&', if we are allowing GNU extensions.  (The only qualifier
15519          that can legally appear after `&' is `restrict', but that is
15520          enforced during semantic analysis.  */
15521       if (code == INDIRECT_REF
15522           || cp_parser_allow_gnu_extensions_p (parser))
15523         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
15524     }
15525   else
15526     {
15527       /* Try the pointer-to-member case.  */
15528       cp_parser_parse_tentatively (parser);
15529       /* Look for the optional `::' operator.  */
15530       cp_parser_global_scope_opt (parser,
15531                                   /*current_scope_valid_p=*/false);
15532       /* Look for the nested-name specifier.  */
15533       token = cp_lexer_peek_token (parser->lexer);
15534       cp_parser_nested_name_specifier (parser,
15535                                        /*typename_keyword_p=*/false,
15536                                        /*check_dependency_p=*/true,
15537                                        /*type_p=*/false,
15538                                        /*is_declaration=*/false);
15539       /* If we found it, and the next token is a `*', then we are
15540          indeed looking at a pointer-to-member operator.  */
15541       if (!cp_parser_error_occurred (parser)
15542           && cp_parser_require (parser, CPP_MULT, RT_MULT))
15543         {
15544           /* Indicate that the `*' operator was used.  */
15545           code = INDIRECT_REF;
15546
15547           if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
15548             error_at (token->location, "%qD is a namespace", parser->scope);
15549           else
15550             {
15551               /* The type of which the member is a member is given by the
15552                  current SCOPE.  */
15553               *type = parser->scope;
15554               /* The next name will not be qualified.  */
15555               parser->scope = NULL_TREE;
15556               parser->qualifying_scope = NULL_TREE;
15557               parser->object_scope = NULL_TREE;
15558               /* Look for the optional cv-qualifier-seq.  */
15559               *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
15560             }
15561         }
15562       /* If that didn't work we don't have a ptr-operator.  */
15563       if (!cp_parser_parse_definitely (parser))
15564         cp_parser_error (parser, "expected ptr-operator");
15565     }
15566
15567   return code;
15568 }
15569
15570 /* Parse an (optional) cv-qualifier-seq.
15571
15572    cv-qualifier-seq:
15573      cv-qualifier cv-qualifier-seq [opt]
15574
15575    cv-qualifier:
15576      const
15577      volatile
15578
15579    GNU Extension:
15580
15581    cv-qualifier:
15582      __restrict__
15583
15584    Returns a bitmask representing the cv-qualifiers.  */
15585
15586 static cp_cv_quals
15587 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
15588 {
15589   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
15590
15591   while (true)
15592     {
15593       cp_token *token;
15594       cp_cv_quals cv_qualifier;
15595
15596       /* Peek at the next token.  */
15597       token = cp_lexer_peek_token (parser->lexer);
15598       /* See if it's a cv-qualifier.  */
15599       switch (token->keyword)
15600         {
15601         case RID_CONST:
15602           cv_qualifier = TYPE_QUAL_CONST;
15603           break;
15604
15605         case RID_VOLATILE:
15606           cv_qualifier = TYPE_QUAL_VOLATILE;
15607           break;
15608
15609         case RID_RESTRICT:
15610           cv_qualifier = TYPE_QUAL_RESTRICT;
15611           break;
15612
15613         default:
15614           cv_qualifier = TYPE_UNQUALIFIED;
15615           break;
15616         }
15617
15618       if (!cv_qualifier)
15619         break;
15620
15621       if (cv_quals & cv_qualifier)
15622         {
15623           error_at (token->location, "duplicate cv-qualifier");
15624           cp_lexer_purge_token (parser->lexer);
15625         }
15626       else
15627         {
15628           cp_lexer_consume_token (parser->lexer);
15629           cv_quals |= cv_qualifier;
15630         }
15631     }
15632
15633   return cv_quals;
15634 }
15635
15636 /* Parse an (optional) virt-specifier-seq.
15637
15638    virt-specifier-seq:
15639      virt-specifier virt-specifier-seq [opt]
15640
15641    virt-specifier:
15642      override
15643      final
15644
15645    Returns a bitmask representing the virt-specifiers.  */
15646
15647 static cp_virt_specifiers
15648 cp_parser_virt_specifier_seq_opt (cp_parser* parser)
15649 {
15650   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
15651
15652   while (true)
15653     {
15654       cp_token *token;
15655       cp_virt_specifiers virt_specifier;
15656
15657       /* Peek at the next token.  */
15658       token = cp_lexer_peek_token (parser->lexer);
15659       /* See if it's a virt-specifier-qualifier.  */
15660       if (token->type != CPP_NAME)
15661         break;
15662       if (!strcmp (IDENTIFIER_POINTER(token->u.value), "override"))
15663         {
15664           maybe_warn_cpp0x (CPP0X_OVERRIDE_CONTROLS);
15665           virt_specifier = VIRT_SPEC_OVERRIDE;
15666         }
15667       else if (!strcmp (IDENTIFIER_POINTER(token->u.value), "final"))
15668         {
15669           maybe_warn_cpp0x (CPP0X_OVERRIDE_CONTROLS);
15670           virt_specifier = VIRT_SPEC_FINAL;
15671         }
15672       else if (!strcmp (IDENTIFIER_POINTER(token->u.value), "__final"))
15673         {
15674           virt_specifier = VIRT_SPEC_FINAL;
15675         }
15676       else
15677         break;
15678
15679       if (virt_specifiers & virt_specifier)
15680         {
15681           error_at (token->location, "duplicate virt-specifier");
15682           cp_lexer_purge_token (parser->lexer);
15683         }
15684       else
15685         {
15686           cp_lexer_consume_token (parser->lexer);
15687           virt_specifiers |= virt_specifier;
15688         }
15689     }
15690   return virt_specifiers;
15691 }
15692
15693 /* Used by handling of trailing-return-types and NSDMI, in which 'this'
15694    is in scope even though it isn't real.  */
15695
15696 static void
15697 inject_this_parameter (tree ctype, cp_cv_quals quals)
15698 {
15699   tree this_parm;
15700
15701   if (current_class_ptr)
15702     {
15703       /* We don't clear this between NSDMIs.  Is it already what we want?  */
15704       tree type = TREE_TYPE (TREE_TYPE (current_class_ptr));
15705       if (same_type_ignoring_top_level_qualifiers_p (ctype, type)
15706           && cp_type_quals (type) == quals)
15707         return;
15708     }
15709
15710   this_parm = build_this_parm (ctype, quals);
15711   /* Clear this first to avoid shortcut in cp_build_indirect_ref.  */
15712   current_class_ptr = NULL_TREE;
15713   current_class_ref
15714     = cp_build_indirect_ref (this_parm, RO_NULL, tf_warning_or_error);
15715   current_class_ptr = this_parm;
15716 }
15717
15718 /* Parse a late-specified return type, if any.  This is not a separate
15719    non-terminal, but part of a function declarator, which looks like
15720
15721    -> trailing-type-specifier-seq abstract-declarator(opt)
15722
15723    Returns the type indicated by the type-id.
15724
15725    QUALS is either a bitmask of cv_qualifiers or -1 for a non-member
15726    function.  */
15727
15728 static tree
15729 cp_parser_late_return_type_opt (cp_parser* parser, cp_cv_quals quals)
15730 {
15731   cp_token *token;
15732   tree type;
15733
15734   /* Peek at the next token.  */
15735   token = cp_lexer_peek_token (parser->lexer);
15736   /* A late-specified return type is indicated by an initial '->'. */
15737   if (token->type != CPP_DEREF)
15738     return NULL_TREE;
15739
15740   /* Consume the ->.  */
15741   cp_lexer_consume_token (parser->lexer);
15742
15743   if (quals >= 0)
15744     {
15745       /* DR 1207: 'this' is in scope in the trailing return type.  */
15746       gcc_assert (current_class_ptr == NULL_TREE);
15747       inject_this_parameter (current_class_type, quals);
15748     }
15749
15750   type = cp_parser_trailing_type_id (parser);
15751
15752   if (quals >= 0)
15753     current_class_ptr = current_class_ref = NULL_TREE;
15754
15755   return type;
15756 }
15757
15758 /* Parse a declarator-id.
15759
15760    declarator-id:
15761      id-expression
15762      :: [opt] nested-name-specifier [opt] type-name
15763
15764    In the `id-expression' case, the value returned is as for
15765    cp_parser_id_expression if the id-expression was an unqualified-id.
15766    If the id-expression was a qualified-id, then a SCOPE_REF is
15767    returned.  The first operand is the scope (either a NAMESPACE_DECL
15768    or TREE_TYPE), but the second is still just a representation of an
15769    unqualified-id.  */
15770
15771 static tree
15772 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
15773 {
15774   tree id;
15775   /* The expression must be an id-expression.  Assume that qualified
15776      names are the names of types so that:
15777
15778        template <class T>
15779        int S<T>::R::i = 3;
15780
15781      will work; we must treat `S<T>::R' as the name of a type.
15782      Similarly, assume that qualified names are templates, where
15783      required, so that:
15784
15785        template <class T>
15786        int S<T>::R<T>::i = 3;
15787
15788      will work, too.  */
15789   id = cp_parser_id_expression (parser,
15790                                 /*template_keyword_p=*/false,
15791                                 /*check_dependency_p=*/false,
15792                                 /*template_p=*/NULL,
15793                                 /*declarator_p=*/true,
15794                                 optional_p);
15795   if (id && BASELINK_P (id))
15796     id = BASELINK_FUNCTIONS (id);
15797   return id;
15798 }
15799
15800 /* Parse a type-id.
15801
15802    type-id:
15803      type-specifier-seq abstract-declarator [opt]
15804
15805    Returns the TYPE specified.  */
15806
15807 static tree
15808 cp_parser_type_id_1 (cp_parser* parser, bool is_template_arg,
15809                      bool is_trailing_return)
15810 {
15811   cp_decl_specifier_seq type_specifier_seq;
15812   cp_declarator *abstract_declarator;
15813
15814   /* Parse the type-specifier-seq.  */
15815   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
15816                                 is_trailing_return,
15817                                 &type_specifier_seq);
15818   if (type_specifier_seq.type == error_mark_node)
15819     return error_mark_node;
15820
15821   /* There might or might not be an abstract declarator.  */
15822   cp_parser_parse_tentatively (parser);
15823   /* Look for the declarator.  */
15824   abstract_declarator
15825     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
15826                             /*parenthesized_p=*/NULL,
15827                             /*member_p=*/false);
15828   /* Check to see if there really was a declarator.  */
15829   if (!cp_parser_parse_definitely (parser))
15830     abstract_declarator = NULL;
15831
15832   if (type_specifier_seq.type
15833       && type_uses_auto (type_specifier_seq.type))
15834     {
15835       /* A type-id with type 'auto' is only ok if the abstract declarator
15836          is a function declarator with a late-specified return type.  */
15837       if (abstract_declarator
15838           && abstract_declarator->kind == cdk_function
15839           && abstract_declarator->u.function.late_return_type)
15840         /* OK */;
15841       else
15842         {
15843           error ("invalid use of %<auto%>");
15844           return error_mark_node;
15845         }
15846     }
15847   
15848   return groktypename (&type_specifier_seq, abstract_declarator,
15849                        is_template_arg);
15850 }
15851
15852 static tree cp_parser_type_id (cp_parser *parser)
15853 {
15854   return cp_parser_type_id_1 (parser, false, false);
15855 }
15856
15857 static tree cp_parser_template_type_arg (cp_parser *parser)
15858 {
15859   tree r;
15860   const char *saved_message = parser->type_definition_forbidden_message;
15861   parser->type_definition_forbidden_message
15862     = G_("types may not be defined in template arguments");
15863   r = cp_parser_type_id_1 (parser, true, false);
15864   parser->type_definition_forbidden_message = saved_message;
15865   return r;
15866 }
15867
15868 static tree cp_parser_trailing_type_id (cp_parser *parser)
15869 {
15870   return cp_parser_type_id_1 (parser, false, true);
15871 }
15872
15873 /* Parse a type-specifier-seq.
15874
15875    type-specifier-seq:
15876      type-specifier type-specifier-seq [opt]
15877
15878    GNU extension:
15879
15880    type-specifier-seq:
15881      attributes type-specifier-seq [opt]
15882
15883    If IS_DECLARATION is true, we are at the start of a "condition" or
15884    exception-declaration, so we might be followed by a declarator-id.
15885
15886    If IS_TRAILING_RETURN is true, we are in a trailing-return-type,
15887    i.e. we've just seen "->".
15888
15889    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
15890
15891 static void
15892 cp_parser_type_specifier_seq (cp_parser* parser,
15893                               bool is_declaration,
15894                               bool is_trailing_return,
15895                               cp_decl_specifier_seq *type_specifier_seq)
15896 {
15897   bool seen_type_specifier = false;
15898   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
15899   cp_token *start_token = NULL;
15900
15901   /* Clear the TYPE_SPECIFIER_SEQ.  */
15902   clear_decl_specs (type_specifier_seq);
15903
15904   /* In the context of a trailing return type, enum E { } is an
15905      elaborated-type-specifier followed by a function-body, not an
15906      enum-specifier.  */
15907   if (is_trailing_return)
15908     flags |= CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS;
15909
15910   /* Parse the type-specifiers and attributes.  */
15911   while (true)
15912     {
15913       tree type_specifier;
15914       bool is_cv_qualifier;
15915
15916       /* Check for attributes first.  */
15917       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
15918         {
15919           type_specifier_seq->attributes =
15920             chainon (type_specifier_seq->attributes,
15921                      cp_parser_attributes_opt (parser));
15922           continue;
15923         }
15924
15925       /* record the token of the beginning of the type specifier seq,
15926          for error reporting purposes*/
15927      if (!start_token)
15928        start_token = cp_lexer_peek_token (parser->lexer);
15929
15930       /* Look for the type-specifier.  */
15931       type_specifier = cp_parser_type_specifier (parser,
15932                                                  flags,
15933                                                  type_specifier_seq,
15934                                                  /*is_declaration=*/false,
15935                                                  NULL,
15936                                                  &is_cv_qualifier);
15937       if (!type_specifier)
15938         {
15939           /* If the first type-specifier could not be found, this is not a
15940              type-specifier-seq at all.  */
15941           if (!seen_type_specifier)
15942             {
15943               cp_parser_error (parser, "expected type-specifier");
15944               type_specifier_seq->type = error_mark_node;
15945               return;
15946             }
15947           /* If subsequent type-specifiers could not be found, the
15948              type-specifier-seq is complete.  */
15949           break;
15950         }
15951
15952       seen_type_specifier = true;
15953       /* The standard says that a condition can be:
15954
15955             type-specifier-seq declarator = assignment-expression
15956
15957          However, given:
15958
15959            struct S {};
15960            if (int S = ...)
15961
15962          we should treat the "S" as a declarator, not as a
15963          type-specifier.  The standard doesn't say that explicitly for
15964          type-specifier-seq, but it does say that for
15965          decl-specifier-seq in an ordinary declaration.  Perhaps it
15966          would be clearer just to allow a decl-specifier-seq here, and
15967          then add a semantic restriction that if any decl-specifiers
15968          that are not type-specifiers appear, the program is invalid.  */
15969       if (is_declaration && !is_cv_qualifier)
15970         flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
15971     }
15972
15973   cp_parser_check_decl_spec (type_specifier_seq, start_token->location);
15974 }
15975
15976 /* Parse a parameter-declaration-clause.
15977
15978    parameter-declaration-clause:
15979      parameter-declaration-list [opt] ... [opt]
15980      parameter-declaration-list , ...
15981
15982    Returns a representation for the parameter declarations.  A return
15983    value of NULL indicates a parameter-declaration-clause consisting
15984    only of an ellipsis.  */
15985
15986 static tree
15987 cp_parser_parameter_declaration_clause (cp_parser* parser)
15988 {
15989   tree parameters;
15990   cp_token *token;
15991   bool ellipsis_p;
15992   bool is_error;
15993
15994   /* Peek at the next token.  */
15995   token = cp_lexer_peek_token (parser->lexer);
15996   /* Check for trivial parameter-declaration-clauses.  */
15997   if (token->type == CPP_ELLIPSIS)
15998     {
15999       /* Consume the `...' token.  */
16000       cp_lexer_consume_token (parser->lexer);
16001       return NULL_TREE;
16002     }
16003   else if (token->type == CPP_CLOSE_PAREN)
16004     /* There are no parameters.  */
16005     {
16006 #ifndef NO_IMPLICIT_EXTERN_C
16007       if (in_system_header && current_class_type == NULL
16008           && current_lang_name == lang_name_c)
16009         return NULL_TREE;
16010       else
16011 #endif
16012         return void_list_node;
16013     }
16014   /* Check for `(void)', too, which is a special case.  */
16015   else if (token->keyword == RID_VOID
16016            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
16017                == CPP_CLOSE_PAREN))
16018     {
16019       /* Consume the `void' token.  */
16020       cp_lexer_consume_token (parser->lexer);
16021       /* There are no parameters.  */
16022       return void_list_node;
16023     }
16024
16025   /* Parse the parameter-declaration-list.  */
16026   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
16027   /* If a parse error occurred while parsing the
16028      parameter-declaration-list, then the entire
16029      parameter-declaration-clause is erroneous.  */
16030   if (is_error)
16031     return NULL;
16032
16033   /* Peek at the next token.  */
16034   token = cp_lexer_peek_token (parser->lexer);
16035   /* If it's a `,', the clause should terminate with an ellipsis.  */
16036   if (token->type == CPP_COMMA)
16037     {
16038       /* Consume the `,'.  */
16039       cp_lexer_consume_token (parser->lexer);
16040       /* Expect an ellipsis.  */
16041       ellipsis_p
16042         = (cp_parser_require (parser, CPP_ELLIPSIS, RT_ELLIPSIS) != NULL);
16043     }
16044   /* It might also be `...' if the optional trailing `,' was
16045      omitted.  */
16046   else if (token->type == CPP_ELLIPSIS)
16047     {
16048       /* Consume the `...' token.  */
16049       cp_lexer_consume_token (parser->lexer);
16050       /* And remember that we saw it.  */
16051       ellipsis_p = true;
16052     }
16053   else
16054     ellipsis_p = false;
16055
16056   /* Finish the parameter list.  */
16057   if (!ellipsis_p)
16058     parameters = chainon (parameters, void_list_node);
16059
16060   return parameters;
16061 }
16062
16063 /* Parse a parameter-declaration-list.
16064
16065    parameter-declaration-list:
16066      parameter-declaration
16067      parameter-declaration-list , parameter-declaration
16068
16069    Returns a representation of the parameter-declaration-list, as for
16070    cp_parser_parameter_declaration_clause.  However, the
16071    `void_list_node' is never appended to the list.  Upon return,
16072    *IS_ERROR will be true iff an error occurred.  */
16073
16074 static tree
16075 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
16076 {
16077   tree parameters = NULL_TREE;
16078   tree *tail = &parameters; 
16079   bool saved_in_unbraced_linkage_specification_p;
16080   int index = 0;
16081
16082   /* Assume all will go well.  */
16083   *is_error = false;
16084   /* The special considerations that apply to a function within an
16085      unbraced linkage specifications do not apply to the parameters
16086      to the function.  */
16087   saved_in_unbraced_linkage_specification_p 
16088     = parser->in_unbraced_linkage_specification_p;
16089   parser->in_unbraced_linkage_specification_p = false;
16090
16091   /* Look for more parameters.  */
16092   while (true)
16093     {
16094       cp_parameter_declarator *parameter;
16095       tree decl = error_mark_node;
16096       bool parenthesized_p = false;
16097       /* Parse the parameter.  */
16098       parameter
16099         = cp_parser_parameter_declaration (parser,
16100                                            /*template_parm_p=*/false,
16101                                            &parenthesized_p);
16102
16103       /* We don't know yet if the enclosing context is deprecated, so wait
16104          and warn in grokparms if appropriate.  */
16105       deprecated_state = DEPRECATED_SUPPRESS;
16106
16107       if (parameter)
16108         decl = grokdeclarator (parameter->declarator,
16109                                &parameter->decl_specifiers,
16110                                PARM,
16111                                parameter->default_argument != NULL_TREE,
16112                                &parameter->decl_specifiers.attributes);
16113
16114       deprecated_state = DEPRECATED_NORMAL;
16115
16116       /* If a parse error occurred parsing the parameter declaration,
16117          then the entire parameter-declaration-list is erroneous.  */
16118       if (decl == error_mark_node)
16119         {
16120           *is_error = true;
16121           parameters = error_mark_node;
16122           break;
16123         }
16124
16125       if (parameter->decl_specifiers.attributes)
16126         cplus_decl_attributes (&decl,
16127                                parameter->decl_specifiers.attributes,
16128                                0);
16129       if (DECL_NAME (decl))
16130         decl = pushdecl (decl);
16131
16132       if (decl != error_mark_node)
16133         {
16134           retrofit_lang_decl (decl);
16135           DECL_PARM_INDEX (decl) = ++index;
16136           DECL_PARM_LEVEL (decl) = function_parm_depth ();
16137         }
16138
16139       /* Add the new parameter to the list.  */
16140       *tail = build_tree_list (parameter->default_argument, decl);
16141       tail = &TREE_CHAIN (*tail);
16142
16143       /* Peek at the next token.  */
16144       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
16145           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
16146           /* These are for Objective-C++ */
16147           || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
16148           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
16149         /* The parameter-declaration-list is complete.  */
16150         break;
16151       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
16152         {
16153           cp_token *token;
16154
16155           /* Peek at the next token.  */
16156           token = cp_lexer_peek_nth_token (parser->lexer, 2);
16157           /* If it's an ellipsis, then the list is complete.  */
16158           if (token->type == CPP_ELLIPSIS)
16159             break;
16160           /* Otherwise, there must be more parameters.  Consume the
16161              `,'.  */
16162           cp_lexer_consume_token (parser->lexer);
16163           /* When parsing something like:
16164
16165                 int i(float f, double d)
16166
16167              we can tell after seeing the declaration for "f" that we
16168              are not looking at an initialization of a variable "i",
16169              but rather at the declaration of a function "i".
16170
16171              Due to the fact that the parsing of template arguments
16172              (as specified to a template-id) requires backtracking we
16173              cannot use this technique when inside a template argument
16174              list.  */
16175           if (!parser->in_template_argument_list_p
16176               && !parser->in_type_id_in_expr_p
16177               && cp_parser_uncommitted_to_tentative_parse_p (parser)
16178               /* However, a parameter-declaration of the form
16179                  "foat(f)" (which is a valid declaration of a
16180                  parameter "f") can also be interpreted as an
16181                  expression (the conversion of "f" to "float").  */
16182               && !parenthesized_p)
16183             cp_parser_commit_to_tentative_parse (parser);
16184         }
16185       else
16186         {
16187           cp_parser_error (parser, "expected %<,%> or %<...%>");
16188           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
16189             cp_parser_skip_to_closing_parenthesis (parser,
16190                                                    /*recovering=*/true,
16191                                                    /*or_comma=*/false,
16192                                                    /*consume_paren=*/false);
16193           break;
16194         }
16195     }
16196
16197   parser->in_unbraced_linkage_specification_p
16198     = saved_in_unbraced_linkage_specification_p;
16199
16200   return parameters;
16201 }
16202
16203 /* Parse a parameter declaration.
16204
16205    parameter-declaration:
16206      decl-specifier-seq ... [opt] declarator
16207      decl-specifier-seq declarator = assignment-expression
16208      decl-specifier-seq ... [opt] abstract-declarator [opt]
16209      decl-specifier-seq abstract-declarator [opt] = assignment-expression
16210
16211    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
16212    declares a template parameter.  (In that case, a non-nested `>'
16213    token encountered during the parsing of the assignment-expression
16214    is not interpreted as a greater-than operator.)
16215
16216    Returns a representation of the parameter, or NULL if an error
16217    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
16218    true iff the declarator is of the form "(p)".  */
16219
16220 static cp_parameter_declarator *
16221 cp_parser_parameter_declaration (cp_parser *parser,
16222                                  bool template_parm_p,
16223                                  bool *parenthesized_p)
16224 {
16225   int declares_class_or_enum;
16226   cp_decl_specifier_seq decl_specifiers;
16227   cp_declarator *declarator;
16228   tree default_argument;
16229   cp_token *token = NULL, *declarator_token_start = NULL;
16230   const char *saved_message;
16231
16232   /* In a template parameter, `>' is not an operator.
16233
16234      [temp.param]
16235
16236      When parsing a default template-argument for a non-type
16237      template-parameter, the first non-nested `>' is taken as the end
16238      of the template parameter-list rather than a greater-than
16239      operator.  */
16240
16241   /* Type definitions may not appear in parameter types.  */
16242   saved_message = parser->type_definition_forbidden_message;
16243   parser->type_definition_forbidden_message
16244     = G_("types may not be defined in parameter types");
16245
16246   /* Parse the declaration-specifiers.  */
16247   cp_parser_decl_specifier_seq (parser,
16248                                 CP_PARSER_FLAGS_NONE,
16249                                 &decl_specifiers,
16250                                 &declares_class_or_enum);
16251
16252   /* Complain about missing 'typename' or other invalid type names.  */
16253   if (!decl_specifiers.any_type_specifiers_p)
16254     cp_parser_parse_and_diagnose_invalid_type_name (parser);
16255
16256   /* If an error occurred, there's no reason to attempt to parse the
16257      rest of the declaration.  */
16258   if (cp_parser_error_occurred (parser))
16259     {
16260       parser->type_definition_forbidden_message = saved_message;
16261       return NULL;
16262     }
16263
16264   /* Peek at the next token.  */
16265   token = cp_lexer_peek_token (parser->lexer);
16266
16267   /* If the next token is a `)', `,', `=', `>', or `...', then there
16268      is no declarator. However, when variadic templates are enabled,
16269      there may be a declarator following `...'.  */
16270   if (token->type == CPP_CLOSE_PAREN
16271       || token->type == CPP_COMMA
16272       || token->type == CPP_EQ
16273       || token->type == CPP_GREATER)
16274     {
16275       declarator = NULL;
16276       if (parenthesized_p)
16277         *parenthesized_p = false;
16278     }
16279   /* Otherwise, there should be a declarator.  */
16280   else
16281     {
16282       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
16283       parser->default_arg_ok_p = false;
16284
16285       /* After seeing a decl-specifier-seq, if the next token is not a
16286          "(", there is no possibility that the code is a valid
16287          expression.  Therefore, if parsing tentatively, we commit at
16288          this point.  */
16289       if (!parser->in_template_argument_list_p
16290           /* In an expression context, having seen:
16291
16292                (int((char ...
16293
16294              we cannot be sure whether we are looking at a
16295              function-type (taking a "char" as a parameter) or a cast
16296              of some object of type "char" to "int".  */
16297           && !parser->in_type_id_in_expr_p
16298           && cp_parser_uncommitted_to_tentative_parse_p (parser)
16299           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
16300           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
16301         cp_parser_commit_to_tentative_parse (parser);
16302       /* Parse the declarator.  */
16303       declarator_token_start = token;
16304       declarator = cp_parser_declarator (parser,
16305                                          CP_PARSER_DECLARATOR_EITHER,
16306                                          /*ctor_dtor_or_conv_p=*/NULL,
16307                                          parenthesized_p,
16308                                          /*member_p=*/false);
16309       parser->default_arg_ok_p = saved_default_arg_ok_p;
16310       /* After the declarator, allow more attributes.  */
16311       decl_specifiers.attributes
16312         = chainon (decl_specifiers.attributes,
16313                    cp_parser_attributes_opt (parser));
16314     }
16315
16316   /* If the next token is an ellipsis, and we have not seen a
16317      declarator name, and the type of the declarator contains parameter
16318      packs but it is not a TYPE_PACK_EXPANSION, then we actually have
16319      a parameter pack expansion expression. Otherwise, leave the
16320      ellipsis for a C-style variadic function. */
16321   token = cp_lexer_peek_token (parser->lexer);
16322   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
16323     {
16324       tree type = decl_specifiers.type;
16325
16326       if (type && DECL_P (type))
16327         type = TREE_TYPE (type);
16328
16329       if (type
16330           && TREE_CODE (type) != TYPE_PACK_EXPANSION
16331           && declarator_can_be_parameter_pack (declarator)
16332           && (!declarator || !declarator->parameter_pack_p)
16333           && uses_parameter_packs (type))
16334         {
16335           /* Consume the `...'. */
16336           cp_lexer_consume_token (parser->lexer);
16337           maybe_warn_variadic_templates ();
16338           
16339           /* Build a pack expansion type */
16340           if (declarator)
16341             declarator->parameter_pack_p = true;
16342           else
16343             decl_specifiers.type = make_pack_expansion (type);
16344         }
16345     }
16346
16347   /* The restriction on defining new types applies only to the type
16348      of the parameter, not to the default argument.  */
16349   parser->type_definition_forbidden_message = saved_message;
16350
16351   /* If the next token is `=', then process a default argument.  */
16352   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
16353     {
16354       /* If we are defining a class, then the tokens that make up the
16355          default argument must be saved and processed later.  */
16356       if (!template_parm_p && at_class_scope_p ()
16357           && TYPE_BEING_DEFINED (current_class_type)
16358           && !LAMBDA_TYPE_P (current_class_type))
16359         {
16360           unsigned depth = 0;
16361           int maybe_template_id = 0;
16362           cp_token *first_token;
16363           cp_token *token;
16364
16365           /* Add tokens until we have processed the entire default
16366              argument.  We add the range [first_token, token).  */
16367           first_token = cp_lexer_peek_token (parser->lexer);
16368           while (true)
16369             {
16370               bool done = false;
16371
16372               /* Peek at the next token.  */
16373               token = cp_lexer_peek_token (parser->lexer);
16374               /* What we do depends on what token we have.  */
16375               switch (token->type)
16376                 {
16377                   /* In valid code, a default argument must be
16378                      immediately followed by a `,' `)', or `...'.  */
16379                 case CPP_COMMA:
16380                   if (depth == 0 && maybe_template_id)
16381                     {
16382                       /* If we've seen a '<', we might be in a
16383                          template-argument-list.  Until Core issue 325 is
16384                          resolved, we don't know how this situation ought
16385                          to be handled, so try to DTRT.  We check whether
16386                          what comes after the comma is a valid parameter
16387                          declaration list.  If it is, then the comma ends
16388                          the default argument; otherwise the default
16389                          argument continues.  */
16390                       bool error = false;
16391                       tree t;
16392
16393                       /* Set ITALP so cp_parser_parameter_declaration_list
16394                          doesn't decide to commit to this parse.  */
16395                       bool saved_italp = parser->in_template_argument_list_p;
16396                       parser->in_template_argument_list_p = true;
16397
16398                       cp_parser_parse_tentatively (parser);
16399                       cp_lexer_consume_token (parser->lexer);
16400                       begin_scope (sk_function_parms, NULL_TREE);
16401                       cp_parser_parameter_declaration_list (parser, &error);
16402                       for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
16403                         pop_binding (DECL_NAME (t), t);
16404                       leave_scope ();
16405                       if (!cp_parser_error_occurred (parser) && !error)
16406                         done = true;
16407                       cp_parser_abort_tentative_parse (parser);
16408
16409                       parser->in_template_argument_list_p = saved_italp;
16410                       break;
16411                     }
16412                 case CPP_CLOSE_PAREN:
16413                 case CPP_ELLIPSIS:
16414                   /* If we run into a non-nested `;', `}', or `]',
16415                      then the code is invalid -- but the default
16416                      argument is certainly over.  */
16417                 case CPP_SEMICOLON:
16418                 case CPP_CLOSE_BRACE:
16419                 case CPP_CLOSE_SQUARE:
16420                   if (depth == 0)
16421                     done = true;
16422                   /* Update DEPTH, if necessary.  */
16423                   else if (token->type == CPP_CLOSE_PAREN
16424                            || token->type == CPP_CLOSE_BRACE
16425                            || token->type == CPP_CLOSE_SQUARE)
16426                     --depth;
16427                   break;
16428
16429                 case CPP_OPEN_PAREN:
16430                 case CPP_OPEN_SQUARE:
16431                 case CPP_OPEN_BRACE:
16432                   ++depth;
16433                   break;
16434
16435                 case CPP_LESS:
16436                   if (depth == 0)
16437                     /* This might be the comparison operator, or it might
16438                        start a template argument list.  */
16439                     ++maybe_template_id;
16440                   break;
16441
16442                 case CPP_RSHIFT:
16443                   if (cxx_dialect == cxx98)
16444                     break;
16445                   /* Fall through for C++0x, which treats the `>>'
16446                      operator like two `>' tokens in certain
16447                      cases.  */
16448
16449                 case CPP_GREATER:
16450                   if (depth == 0)
16451                     {
16452                       /* This might be an operator, or it might close a
16453                          template argument list.  But if a previous '<'
16454                          started a template argument list, this will have
16455                          closed it, so we can't be in one anymore.  */
16456                       maybe_template_id -= 1 + (token->type == CPP_RSHIFT);
16457                       if (maybe_template_id < 0)
16458                         maybe_template_id = 0;
16459                     }
16460                   break;
16461
16462                   /* If we run out of tokens, issue an error message.  */
16463                 case CPP_EOF:
16464                 case CPP_PRAGMA_EOL:
16465                   error_at (token->location, "file ends in default argument");
16466                   done = true;
16467                   break;
16468
16469                 case CPP_NAME:
16470                 case CPP_SCOPE:
16471                   /* In these cases, we should look for template-ids.
16472                      For example, if the default argument is
16473                      `X<int, double>()', we need to do name lookup to
16474                      figure out whether or not `X' is a template; if
16475                      so, the `,' does not end the default argument.
16476
16477                      That is not yet done.  */
16478                   break;
16479
16480                 default:
16481                   break;
16482                 }
16483
16484               /* If we've reached the end, stop.  */
16485               if (done)
16486                 break;
16487
16488               /* Add the token to the token block.  */
16489               token = cp_lexer_consume_token (parser->lexer);
16490             }
16491
16492           /* Create a DEFAULT_ARG to represent the unparsed default
16493              argument.  */
16494           default_argument = make_node (DEFAULT_ARG);
16495           DEFARG_TOKENS (default_argument)
16496             = cp_token_cache_new (first_token, token);
16497           DEFARG_INSTANTIATIONS (default_argument) = NULL;
16498         }
16499       /* Outside of a class definition, we can just parse the
16500          assignment-expression.  */
16501       else
16502         {
16503           token = cp_lexer_peek_token (parser->lexer);
16504           default_argument 
16505             = cp_parser_default_argument (parser, template_parm_p);
16506         }
16507
16508       if (!parser->default_arg_ok_p)
16509         {
16510           if (flag_permissive)
16511             warning (0, "deprecated use of default argument for parameter of non-function");
16512           else
16513             {
16514               error_at (token->location,
16515                         "default arguments are only "
16516                         "permitted for function parameters");
16517               default_argument = NULL_TREE;
16518             }
16519         }
16520       else if ((declarator && declarator->parameter_pack_p)
16521                || (decl_specifiers.type
16522                    && PACK_EXPANSION_P (decl_specifiers.type)))
16523         {
16524           /* Find the name of the parameter pack.  */     
16525           cp_declarator *id_declarator = declarator;
16526           while (id_declarator && id_declarator->kind != cdk_id)
16527             id_declarator = id_declarator->declarator;
16528           
16529           if (id_declarator && id_declarator->kind == cdk_id)
16530             error_at (declarator_token_start->location,
16531                       template_parm_p 
16532                       ? "template parameter pack %qD"
16533                       " cannot have a default argument"
16534                       : "parameter pack %qD cannot have a default argument",
16535                       id_declarator->u.id.unqualified_name);
16536           else
16537             error_at (declarator_token_start->location,
16538                       template_parm_p 
16539                       ? "template parameter pack cannot have a default argument"
16540                       : "parameter pack cannot have a default argument");
16541           
16542           default_argument = NULL_TREE;
16543         }
16544     }
16545   else
16546     default_argument = NULL_TREE;
16547
16548   return make_parameter_declarator (&decl_specifiers,
16549                                     declarator,
16550                                     default_argument);
16551 }
16552
16553 /* Parse a default argument and return it.
16554
16555    TEMPLATE_PARM_P is true if this is a default argument for a
16556    non-type template parameter.  */
16557 static tree
16558 cp_parser_default_argument (cp_parser *parser, bool template_parm_p)
16559 {
16560   tree default_argument = NULL_TREE;
16561   bool saved_greater_than_is_operator_p;
16562   bool saved_local_variables_forbidden_p;
16563   bool non_constant_p, is_direct_init;
16564
16565   /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
16566      set correctly.  */
16567   saved_greater_than_is_operator_p = parser->greater_than_is_operator_p;
16568   parser->greater_than_is_operator_p = !template_parm_p;
16569   /* Local variable names (and the `this' keyword) may not
16570      appear in a default argument.  */
16571   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
16572   parser->local_variables_forbidden_p = true;
16573   /* Parse the assignment-expression.  */
16574   if (template_parm_p)
16575     push_deferring_access_checks (dk_no_deferred);
16576   default_argument
16577     = cp_parser_initializer (parser, &is_direct_init, &non_constant_p);
16578   if (BRACE_ENCLOSED_INITIALIZER_P (default_argument))
16579     maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
16580   if (template_parm_p)
16581     pop_deferring_access_checks ();
16582   parser->greater_than_is_operator_p = saved_greater_than_is_operator_p;
16583   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
16584
16585   return default_argument;
16586 }
16587
16588 /* Parse a function-body.
16589
16590    function-body:
16591      compound_statement  */
16592
16593 static void
16594 cp_parser_function_body (cp_parser *parser)
16595 {
16596   cp_parser_compound_statement (parser, NULL, false, true);
16597 }
16598
16599 /* Parse a ctor-initializer-opt followed by a function-body.  Return
16600    true if a ctor-initializer was present.  */
16601
16602 static bool
16603 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
16604 {
16605   tree body, list;
16606   bool ctor_initializer_p;
16607   const bool check_body_p =
16608      DECL_CONSTRUCTOR_P (current_function_decl)
16609      && DECL_DECLARED_CONSTEXPR_P (current_function_decl);
16610   tree last = NULL;
16611
16612   /* Begin the function body.  */
16613   body = begin_function_body ();
16614   /* Parse the optional ctor-initializer.  */
16615   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
16616
16617   /* If we're parsing a constexpr constructor definition, we need
16618      to check that the constructor body is indeed empty.  However,
16619      before we get to cp_parser_function_body lot of junk has been
16620      generated, so we can't just check that we have an empty block.
16621      Rather we take a snapshot of the outermost block, and check whether
16622      cp_parser_function_body changed its state.  */
16623   if (check_body_p)
16624     {
16625       list = body;
16626       if (TREE_CODE (list) == BIND_EXPR)
16627         list = BIND_EXPR_BODY (list);
16628       if (TREE_CODE (list) == STATEMENT_LIST
16629           && STATEMENT_LIST_TAIL (list) != NULL)
16630         last = STATEMENT_LIST_TAIL (list)->stmt;
16631     }
16632   /* Parse the function-body.  */
16633   cp_parser_function_body (parser);
16634   if (check_body_p)
16635     check_constexpr_ctor_body (last, list);
16636   /* Finish the function body.  */
16637   finish_function_body (body);
16638
16639   return ctor_initializer_p;
16640 }
16641
16642 /* Parse an initializer.
16643
16644    initializer:
16645      = initializer-clause
16646      ( expression-list )
16647
16648    Returns an expression representing the initializer.  If no
16649    initializer is present, NULL_TREE is returned.
16650
16651    *IS_DIRECT_INIT is set to FALSE if the `= initializer-clause'
16652    production is used, and TRUE otherwise.  *IS_DIRECT_INIT is
16653    set to TRUE if there is no initializer present.  If there is an
16654    initializer, and it is not a constant-expression, *NON_CONSTANT_P
16655    is set to true; otherwise it is set to false.  */
16656
16657 static tree
16658 cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
16659                        bool* non_constant_p)
16660 {
16661   cp_token *token;
16662   tree init;
16663
16664   /* Peek at the next token.  */
16665   token = cp_lexer_peek_token (parser->lexer);
16666
16667   /* Let our caller know whether or not this initializer was
16668      parenthesized.  */
16669   *is_direct_init = (token->type != CPP_EQ);
16670   /* Assume that the initializer is constant.  */
16671   *non_constant_p = false;
16672
16673   if (token->type == CPP_EQ)
16674     {
16675       /* Consume the `='.  */
16676       cp_lexer_consume_token (parser->lexer);
16677       /* Parse the initializer-clause.  */
16678       init = cp_parser_initializer_clause (parser, non_constant_p);
16679     }
16680   else if (token->type == CPP_OPEN_PAREN)
16681     {
16682       VEC(tree,gc) *vec;
16683       vec = cp_parser_parenthesized_expression_list (parser, non_attr,
16684                                                      /*cast_p=*/false,
16685                                                      /*allow_expansion_p=*/true,
16686                                                      non_constant_p);
16687       if (vec == NULL)
16688         return error_mark_node;
16689       init = build_tree_list_vec (vec);
16690       release_tree_vector (vec);
16691     }
16692   else if (token->type == CPP_OPEN_BRACE)
16693     {
16694       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
16695       init = cp_parser_braced_list (parser, non_constant_p);
16696       CONSTRUCTOR_IS_DIRECT_INIT (init) = 1;
16697     }
16698   else
16699     {
16700       /* Anything else is an error.  */
16701       cp_parser_error (parser, "expected initializer");
16702       init = error_mark_node;
16703     }
16704
16705   return init;
16706 }
16707
16708 /* Parse an initializer-clause.
16709
16710    initializer-clause:
16711      assignment-expression
16712      braced-init-list
16713
16714    Returns an expression representing the initializer.
16715
16716    If the `assignment-expression' production is used the value
16717    returned is simply a representation for the expression.
16718
16719    Otherwise, calls cp_parser_braced_list.  */
16720
16721 static tree
16722 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
16723 {
16724   tree initializer;
16725
16726   /* Assume the expression is constant.  */
16727   *non_constant_p = false;
16728
16729   /* If it is not a `{', then we are looking at an
16730      assignment-expression.  */
16731   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
16732     {
16733       initializer
16734         = cp_parser_constant_expression (parser,
16735                                         /*allow_non_constant_p=*/true,
16736                                         non_constant_p);
16737     }
16738   else
16739     initializer = cp_parser_braced_list (parser, non_constant_p);
16740
16741   return initializer;
16742 }
16743
16744 /* Parse a brace-enclosed initializer list.
16745
16746    braced-init-list:
16747      { initializer-list , [opt] }
16748      { }
16749
16750    Returns a CONSTRUCTOR.  The CONSTRUCTOR_ELTS will be
16751    the elements of the initializer-list (or NULL, if the last
16752    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
16753    NULL_TREE.  There is no way to detect whether or not the optional
16754    trailing `,' was provided.  NON_CONSTANT_P is as for
16755    cp_parser_initializer.  */     
16756
16757 static tree
16758 cp_parser_braced_list (cp_parser* parser, bool* non_constant_p)
16759 {
16760   tree initializer;
16761
16762   /* Consume the `{' token.  */
16763   cp_lexer_consume_token (parser->lexer);
16764   /* Create a CONSTRUCTOR to represent the braced-initializer.  */
16765   initializer = make_node (CONSTRUCTOR);
16766   /* If it's not a `}', then there is a non-trivial initializer.  */
16767   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
16768     {
16769       /* Parse the initializer list.  */
16770       CONSTRUCTOR_ELTS (initializer)
16771         = cp_parser_initializer_list (parser, non_constant_p);
16772       /* A trailing `,' token is allowed.  */
16773       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
16774         cp_lexer_consume_token (parser->lexer);
16775     }
16776   /* Now, there should be a trailing `}'.  */
16777   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
16778   TREE_TYPE (initializer) = init_list_type_node;
16779   return initializer;
16780 }
16781
16782 /* Parse an initializer-list.
16783
16784    initializer-list:
16785      initializer-clause ... [opt]
16786      initializer-list , initializer-clause ... [opt]
16787
16788    GNU Extension:
16789
16790    initializer-list:
16791      designation initializer-clause ...[opt]
16792      initializer-list , designation initializer-clause ...[opt]
16793
16794    designation:
16795      . identifier =
16796      identifier :
16797      [ constant-expression ] =
16798
16799    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
16800    for the initializer.  If the INDEX of the elt is non-NULL, it is the
16801    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
16802    as for cp_parser_initializer.  */
16803
16804 static VEC(constructor_elt,gc) *
16805 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
16806 {
16807   VEC(constructor_elt,gc) *v = NULL;
16808
16809   /* Assume all of the expressions are constant.  */
16810   *non_constant_p = false;
16811
16812   /* Parse the rest of the list.  */
16813   while (true)
16814     {
16815       cp_token *token;
16816       tree designator;
16817       tree initializer;
16818       bool clause_non_constant_p;
16819
16820       /* If the next token is an identifier and the following one is a
16821          colon, we are looking at the GNU designated-initializer
16822          syntax.  */
16823       if (cp_parser_allow_gnu_extensions_p (parser)
16824           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
16825           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
16826         {
16827           /* Warn the user that they are using an extension.  */
16828           pedwarn (input_location, OPT_pedantic, 
16829                    "ISO C++ does not allow designated initializers");
16830           /* Consume the identifier.  */
16831           designator = cp_lexer_consume_token (parser->lexer)->u.value;
16832           /* Consume the `:'.  */
16833           cp_lexer_consume_token (parser->lexer);
16834         }
16835       /* Also handle the C99 syntax, '. id ='.  */
16836       else if (cp_parser_allow_gnu_extensions_p (parser)
16837                && cp_lexer_next_token_is (parser->lexer, CPP_DOT)
16838                && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME
16839                && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_EQ)
16840         {
16841           /* Warn the user that they are using an extension.  */
16842           pedwarn (input_location, OPT_pedantic,
16843                    "ISO C++ does not allow C99 designated initializers");
16844           /* Consume the `.'.  */
16845           cp_lexer_consume_token (parser->lexer);
16846           /* Consume the identifier.  */
16847           designator = cp_lexer_consume_token (parser->lexer)->u.value;
16848           /* Consume the `='.  */
16849           cp_lexer_consume_token (parser->lexer);
16850         }
16851       /* Also handle C99 array designators, '[ const ] ='.  */
16852       else if (cp_parser_allow_gnu_extensions_p (parser)
16853                && !c_dialect_objc ()
16854                && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
16855         {
16856           cp_lexer_consume_token (parser->lexer);
16857           designator = cp_parser_constant_expression (parser, false, NULL);
16858           cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
16859           cp_parser_require (parser, CPP_EQ, RT_EQ);
16860         }
16861       else
16862         designator = NULL_TREE;
16863
16864       /* Parse the initializer.  */
16865       initializer = cp_parser_initializer_clause (parser,
16866                                                   &clause_non_constant_p);
16867       /* If any clause is non-constant, so is the entire initializer.  */
16868       if (clause_non_constant_p)
16869         *non_constant_p = true;
16870
16871       /* If we have an ellipsis, this is an initializer pack
16872          expansion.  */
16873       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
16874         {
16875           /* Consume the `...'.  */
16876           cp_lexer_consume_token (parser->lexer);
16877
16878           /* Turn the initializer into an initializer expansion.  */
16879           initializer = make_pack_expansion (initializer);
16880         }
16881
16882       /* Add it to the vector.  */
16883       CONSTRUCTOR_APPEND_ELT (v, designator, initializer);
16884
16885       /* If the next token is not a comma, we have reached the end of
16886          the list.  */
16887       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
16888         break;
16889
16890       /* Peek at the next token.  */
16891       token = cp_lexer_peek_nth_token (parser->lexer, 2);
16892       /* If the next token is a `}', then we're still done.  An
16893          initializer-clause can have a trailing `,' after the
16894          initializer-list and before the closing `}'.  */
16895       if (token->type == CPP_CLOSE_BRACE)
16896         break;
16897
16898       /* Consume the `,' token.  */
16899       cp_lexer_consume_token (parser->lexer);
16900     }
16901
16902   return v;
16903 }
16904
16905 /* Classes [gram.class] */
16906
16907 /* Parse a class-name.
16908
16909    class-name:
16910      identifier
16911      template-id
16912
16913    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
16914    to indicate that names looked up in dependent types should be
16915    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
16916    keyword has been used to indicate that the name that appears next
16917    is a template.  TAG_TYPE indicates the explicit tag given before
16918    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
16919    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
16920    is the class being defined in a class-head.
16921
16922    Returns the TYPE_DECL representing the class.  */
16923
16924 static tree
16925 cp_parser_class_name (cp_parser *parser,
16926                       bool typename_keyword_p,
16927                       bool template_keyword_p,
16928                       enum tag_types tag_type,
16929                       bool check_dependency_p,
16930                       bool class_head_p,
16931                       bool is_declaration)
16932 {
16933   tree decl;
16934   tree scope;
16935   bool typename_p;
16936   cp_token *token;
16937   tree identifier = NULL_TREE;
16938
16939   /* All class-names start with an identifier.  */
16940   token = cp_lexer_peek_token (parser->lexer);
16941   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
16942     {
16943       cp_parser_error (parser, "expected class-name");
16944       return error_mark_node;
16945     }
16946
16947   /* PARSER->SCOPE can be cleared when parsing the template-arguments
16948      to a template-id, so we save it here.  */
16949   scope = parser->scope;
16950   if (scope == error_mark_node)
16951     return error_mark_node;
16952
16953   /* Any name names a type if we're following the `typename' keyword
16954      in a qualified name where the enclosing scope is type-dependent.  */
16955   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
16956                 && dependent_type_p (scope));
16957   /* Handle the common case (an identifier, but not a template-id)
16958      efficiently.  */
16959   if (token->type == CPP_NAME
16960       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
16961     {
16962       cp_token *identifier_token;
16963       bool ambiguous_p;
16964
16965       /* Look for the identifier.  */
16966       identifier_token = cp_lexer_peek_token (parser->lexer);
16967       ambiguous_p = identifier_token->ambiguous_p;
16968       identifier = cp_parser_identifier (parser);
16969       /* If the next token isn't an identifier, we are certainly not
16970          looking at a class-name.  */
16971       if (identifier == error_mark_node)
16972         decl = error_mark_node;
16973       /* If we know this is a type-name, there's no need to look it
16974          up.  */
16975       else if (typename_p)
16976         decl = identifier;
16977       else
16978         {
16979           tree ambiguous_decls;
16980           /* If we already know that this lookup is ambiguous, then
16981              we've already issued an error message; there's no reason
16982              to check again.  */
16983           if (ambiguous_p)
16984             {
16985               cp_parser_simulate_error (parser);
16986               return error_mark_node;
16987             }
16988           /* If the next token is a `::', then the name must be a type
16989              name.
16990
16991              [basic.lookup.qual]
16992
16993              During the lookup for a name preceding the :: scope
16994              resolution operator, object, function, and enumerator
16995              names are ignored.  */
16996           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
16997             tag_type = typename_type;
16998           /* Look up the name.  */
16999           decl = cp_parser_lookup_name (parser, identifier,
17000                                         tag_type,
17001                                         /*is_template=*/false,
17002                                         /*is_namespace=*/false,
17003                                         check_dependency_p,
17004                                         &ambiguous_decls,
17005                                         identifier_token->location);
17006           if (ambiguous_decls)
17007             {
17008               if (cp_parser_parsing_tentatively (parser))
17009                 cp_parser_simulate_error (parser);
17010               return error_mark_node;
17011             }
17012         }
17013     }
17014   else
17015     {
17016       /* Try a template-id.  */
17017       decl = cp_parser_template_id (parser, template_keyword_p,
17018                                     check_dependency_p,
17019                                     is_declaration);
17020       if (decl == error_mark_node)
17021         return error_mark_node;
17022     }
17023
17024   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
17025
17026   /* If this is a typename, create a TYPENAME_TYPE.  */
17027   if (typename_p && decl != error_mark_node)
17028     {
17029       decl = make_typename_type (scope, decl, typename_type,
17030                                  /*complain=*/tf_error);
17031       if (decl != error_mark_node)
17032         decl = TYPE_NAME (decl);
17033     }
17034
17035   /* Check to see that it is really the name of a class.  */
17036   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
17037       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
17038       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
17039     /* Situations like this:
17040
17041          template <typename T> struct A {
17042            typename T::template X<int>::I i;
17043          };
17044
17045        are problematic.  Is `T::template X<int>' a class-name?  The
17046        standard does not seem to be definitive, but there is no other
17047        valid interpretation of the following `::'.  Therefore, those
17048        names are considered class-names.  */
17049     {
17050       decl = make_typename_type (scope, decl, tag_type, tf_error);
17051       if (decl != error_mark_node)
17052         decl = TYPE_NAME (decl);
17053     }
17054   else if (TREE_CODE (decl) != TYPE_DECL
17055            || TREE_TYPE (decl) == error_mark_node
17056            || !MAYBE_CLASS_TYPE_P (TREE_TYPE (decl))
17057            /* In Objective-C 2.0, a classname followed by '.' starts a
17058               dot-syntax expression, and it's not a type-name.  */
17059            || (c_dialect_objc ()
17060                && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT 
17061                && objc_is_class_name (decl)))
17062     decl = error_mark_node;
17063
17064   if (decl == error_mark_node)
17065     cp_parser_error (parser, "expected class-name");
17066   else if (identifier && !parser->scope)
17067     maybe_note_name_used_in_class (identifier, decl);
17068
17069   return decl;
17070 }
17071
17072 /* Parse a class-specifier.
17073
17074    class-specifier:
17075      class-head { member-specification [opt] }
17076
17077    Returns the TREE_TYPE representing the class.  */
17078
17079 static tree
17080 cp_parser_class_specifier_1 (cp_parser* parser)
17081 {
17082   tree type;
17083   tree attributes = NULL_TREE;
17084   bool nested_name_specifier_p;
17085   unsigned saved_num_template_parameter_lists;
17086   bool saved_in_function_body;
17087   unsigned char in_statement;
17088   bool in_switch_statement_p;
17089   bool saved_in_unbraced_linkage_specification_p;
17090   tree old_scope = NULL_TREE;
17091   tree scope = NULL_TREE;
17092   tree bases;
17093   cp_token *closing_brace;
17094
17095   push_deferring_access_checks (dk_no_deferred);
17096
17097   /* Parse the class-head.  */
17098   type = cp_parser_class_head (parser,
17099                                &nested_name_specifier_p,
17100                                &attributes,
17101                                &bases);
17102   /* If the class-head was a semantic disaster, skip the entire body
17103      of the class.  */
17104   if (!type)
17105     {
17106       cp_parser_skip_to_end_of_block_or_statement (parser);
17107       pop_deferring_access_checks ();
17108       return error_mark_node;
17109     }
17110
17111   /* Look for the `{'.  */
17112   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
17113     {
17114       pop_deferring_access_checks ();
17115       return error_mark_node;
17116     }
17117
17118   /* Process the base classes. If they're invalid, skip the 
17119      entire class body.  */
17120   if (!xref_basetypes (type, bases))
17121     {
17122       /* Consuming the closing brace yields better error messages
17123          later on.  */
17124       if (cp_parser_skip_to_closing_brace (parser))
17125         cp_lexer_consume_token (parser->lexer);
17126       pop_deferring_access_checks ();
17127       return error_mark_node;
17128     }
17129
17130   /* Issue an error message if type-definitions are forbidden here.  */
17131   cp_parser_check_type_definition (parser);
17132   /* Remember that we are defining one more class.  */
17133   ++parser->num_classes_being_defined;
17134   /* Inside the class, surrounding template-parameter-lists do not
17135      apply.  */
17136   saved_num_template_parameter_lists
17137     = parser->num_template_parameter_lists;
17138   parser->num_template_parameter_lists = 0;
17139   /* We are not in a function body.  */
17140   saved_in_function_body = parser->in_function_body;
17141   parser->in_function_body = false;
17142   /* Or in a loop.  */
17143   in_statement = parser->in_statement;
17144   parser->in_statement = 0;
17145   /* Or in a switch.  */
17146   in_switch_statement_p = parser->in_switch_statement_p;
17147   parser->in_switch_statement_p = false;
17148   /* We are not immediately inside an extern "lang" block.  */
17149   saved_in_unbraced_linkage_specification_p
17150     = parser->in_unbraced_linkage_specification_p;
17151   parser->in_unbraced_linkage_specification_p = false;
17152
17153   /* Start the class.  */
17154   if (nested_name_specifier_p)
17155     {
17156       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
17157       old_scope = push_inner_scope (scope);
17158     }
17159   type = begin_class_definition (type, attributes);
17160
17161   if (type == error_mark_node)
17162     /* If the type is erroneous, skip the entire body of the class.  */
17163     cp_parser_skip_to_closing_brace (parser);
17164   else
17165     /* Parse the member-specification.  */
17166     cp_parser_member_specification_opt (parser);
17167
17168   /* Look for the trailing `}'.  */
17169   closing_brace = cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
17170   /* Look for trailing attributes to apply to this class.  */
17171   if (cp_parser_allow_gnu_extensions_p (parser))
17172     attributes = cp_parser_attributes_opt (parser);
17173   if (type != error_mark_node)
17174     type = finish_struct (type, attributes);
17175   if (nested_name_specifier_p)
17176     pop_inner_scope (old_scope, scope);
17177
17178   /* We've finished a type definition.  Check for the common syntax
17179      error of forgetting a semicolon after the definition.  We need to
17180      be careful, as we can't just check for not-a-semicolon and be done
17181      with it; the user might have typed:
17182
17183      class X { } c = ...;
17184      class X { } *p = ...;
17185
17186      and so forth.  Instead, enumerate all the possible tokens that
17187      might follow this production; if we don't see one of them, then
17188      complain and silently insert the semicolon.  */
17189   {
17190     cp_token *token = cp_lexer_peek_token (parser->lexer);
17191     bool want_semicolon = true;
17192
17193     switch (token->type)
17194       {
17195       case CPP_NAME:
17196       case CPP_SEMICOLON:
17197       case CPP_MULT:
17198       case CPP_AND:
17199       case CPP_OPEN_PAREN:
17200       case CPP_CLOSE_PAREN:
17201       case CPP_COMMA:
17202         want_semicolon = false;
17203         break;
17204
17205         /* While it's legal for type qualifiers and storage class
17206            specifiers to follow type definitions in the grammar, only
17207            compiler testsuites contain code like that.  Assume that if
17208            we see such code, then what we're really seeing is a case
17209            like:
17210
17211            class X { }
17212            const <type> var = ...;
17213
17214            or
17215
17216            class Y { }
17217            static <type> func (...) ...
17218
17219            i.e. the qualifier or specifier applies to the next
17220            declaration.  To do so, however, we need to look ahead one
17221            more token to see if *that* token is a type specifier.
17222
17223            This code could be improved to handle:
17224
17225            class Z { }
17226            static const <type> var = ...;  */
17227       case CPP_KEYWORD:
17228         if (keyword_is_decl_specifier (token->keyword))
17229           {
17230             cp_token *lookahead = cp_lexer_peek_nth_token (parser->lexer, 2);
17231
17232             /* Handling user-defined types here would be nice, but very
17233                tricky.  */
17234             want_semicolon
17235               = (lookahead->type == CPP_KEYWORD
17236                  && keyword_begins_type_specifier (lookahead->keyword));
17237           }
17238         break;
17239       default:
17240         break;
17241       }
17242
17243     /* If we don't have a type, then something is very wrong and we
17244        shouldn't try to do anything clever.  Likewise for not seeing the
17245        closing brace.  */
17246     if (closing_brace && TYPE_P (type) && want_semicolon)
17247       {
17248         cp_token_position prev
17249           = cp_lexer_previous_token_position (parser->lexer);
17250         cp_token *prev_token = cp_lexer_token_at (parser->lexer, prev);
17251         location_t loc = prev_token->location;
17252
17253         if (CLASSTYPE_DECLARED_CLASS (type))
17254           error_at (loc, "expected %<;%> after class definition");
17255         else if (TREE_CODE (type) == RECORD_TYPE)
17256           error_at (loc, "expected %<;%> after struct definition");
17257         else if (TREE_CODE (type) == UNION_TYPE)
17258           error_at (loc, "expected %<;%> after union definition");
17259         else
17260           gcc_unreachable ();
17261
17262         /* Unget one token and smash it to look as though we encountered
17263            a semicolon in the input stream.  */
17264         cp_lexer_set_token_position (parser->lexer, prev);
17265         token = cp_lexer_peek_token (parser->lexer);
17266         token->type = CPP_SEMICOLON;
17267         token->keyword = RID_MAX;
17268       }
17269   }
17270
17271   /* If this class is not itself within the scope of another class,
17272      then we need to parse the bodies of all of the queued function
17273      definitions.  Note that the queued functions defined in a class
17274      are not always processed immediately following the
17275      class-specifier for that class.  Consider:
17276
17277        struct A {
17278          struct B { void f() { sizeof (A); } };
17279        };
17280
17281      If `f' were processed before the processing of `A' were
17282      completed, there would be no way to compute the size of `A'.
17283      Note that the nesting we are interested in here is lexical --
17284      not the semantic nesting given by TYPE_CONTEXT.  In particular,
17285      for:
17286
17287        struct A { struct B; };
17288        struct A::B { void f() { } };
17289
17290      there is no need to delay the parsing of `A::B::f'.  */
17291   if (--parser->num_classes_being_defined == 0)
17292     {
17293       tree decl;
17294       tree class_type = NULL_TREE;
17295       tree pushed_scope = NULL_TREE;
17296       unsigned ix;
17297       cp_default_arg_entry *e;
17298       tree save_ccp, save_ccr;
17299
17300       /* In a first pass, parse default arguments to the functions.
17301          Then, in a second pass, parse the bodies of the functions.
17302          This two-phased approach handles cases like:
17303
17304             struct S {
17305               void f() { g(); }
17306               void g(int i = 3);
17307             };
17308
17309          */
17310       FOR_EACH_VEC_ELT (cp_default_arg_entry, unparsed_funs_with_default_args,
17311                         ix, e)
17312         {
17313           decl = e->decl;
17314           /* If there are default arguments that have not yet been processed,
17315              take care of them now.  */
17316           if (class_type != e->class_type)
17317             {
17318               if (pushed_scope)
17319                 pop_scope (pushed_scope);
17320               class_type = e->class_type;
17321               pushed_scope = push_scope (class_type);
17322             }
17323           /* Make sure that any template parameters are in scope.  */
17324           maybe_begin_member_template_processing (decl);
17325           /* Parse the default argument expressions.  */
17326           cp_parser_late_parsing_default_args (parser, decl);
17327           /* Remove any template parameters from the symbol table.  */
17328           maybe_end_member_template_processing ();
17329         }
17330       VEC_truncate (cp_default_arg_entry, unparsed_funs_with_default_args, 0);
17331       /* Now parse any NSDMIs.  */
17332       save_ccp = current_class_ptr;
17333       save_ccr = current_class_ref;
17334       FOR_EACH_VEC_ELT (tree, unparsed_nsdmis, ix, decl)
17335         {
17336           if (class_type != DECL_CONTEXT (decl))
17337             {
17338               if (pushed_scope)
17339                 pop_scope (pushed_scope);
17340               class_type = DECL_CONTEXT (decl);
17341               pushed_scope = push_scope (class_type);
17342             }
17343           inject_this_parameter (class_type, TYPE_UNQUALIFIED);
17344           cp_parser_late_parsing_nsdmi (parser, decl);
17345         }
17346       VEC_truncate (tree, unparsed_nsdmis, 0);
17347       current_class_ptr = save_ccp;
17348       current_class_ref = save_ccr;
17349       if (pushed_scope)
17350         pop_scope (pushed_scope);
17351       /* Now parse the body of the functions.  */
17352       FOR_EACH_VEC_ELT (tree, unparsed_funs_with_definitions, ix, decl)
17353         cp_parser_late_parsing_for_member (parser, decl);
17354       VEC_truncate (tree, unparsed_funs_with_definitions, 0);
17355     }
17356
17357   /* Put back any saved access checks.  */
17358   pop_deferring_access_checks ();
17359
17360   /* Restore saved state.  */
17361   parser->in_switch_statement_p = in_switch_statement_p;
17362   parser->in_statement = in_statement;
17363   parser->in_function_body = saved_in_function_body;
17364   parser->num_template_parameter_lists
17365     = saved_num_template_parameter_lists;
17366   parser->in_unbraced_linkage_specification_p
17367     = saved_in_unbraced_linkage_specification_p;
17368
17369   return type;
17370 }
17371
17372 static tree
17373 cp_parser_class_specifier (cp_parser* parser)
17374 {
17375   tree ret;
17376   timevar_push (TV_PARSE_STRUCT);
17377   ret = cp_parser_class_specifier_1 (parser);
17378   timevar_pop (TV_PARSE_STRUCT);
17379   return ret;
17380 }
17381
17382 /* Parse a class-head.
17383
17384    class-head:
17385      class-key identifier [opt] base-clause [opt]
17386      class-key nested-name-specifier identifier class-virt-specifier [opt] base-clause [opt]
17387      class-key nested-name-specifier [opt] template-id
17388        base-clause [opt]
17389
17390    class-virt-specifier:
17391      final
17392
17393    GNU Extensions:
17394      class-key attributes identifier [opt] base-clause [opt]
17395      class-key attributes nested-name-specifier identifier base-clause [opt]
17396      class-key attributes nested-name-specifier [opt] template-id
17397        base-clause [opt]
17398
17399    Upon return BASES is initialized to the list of base classes (or
17400    NULL, if there are none) in the same form returned by
17401    cp_parser_base_clause.
17402
17403    Returns the TYPE of the indicated class.  Sets
17404    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
17405    involving a nested-name-specifier was used, and FALSE otherwise.
17406
17407    Returns error_mark_node if this is not a class-head.
17408
17409    Returns NULL_TREE if the class-head is syntactically valid, but
17410    semantically invalid in a way that means we should skip the entire
17411    body of the class.  */
17412
17413 static tree
17414 cp_parser_class_head (cp_parser* parser,
17415                       bool* nested_name_specifier_p,
17416                       tree *attributes_p,
17417                       tree *bases)
17418 {
17419   tree nested_name_specifier;
17420   enum tag_types class_key;
17421   tree id = NULL_TREE;
17422   tree type = NULL_TREE;
17423   tree attributes;
17424   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
17425   bool template_id_p = false;
17426   bool qualified_p = false;
17427   bool invalid_nested_name_p = false;
17428   bool invalid_explicit_specialization_p = false;
17429   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
17430   tree pushed_scope = NULL_TREE;
17431   unsigned num_templates;
17432   cp_token *type_start_token = NULL, *nested_name_specifier_token_start = NULL;
17433   /* Assume no nested-name-specifier will be present.  */
17434   *nested_name_specifier_p = false;
17435   /* Assume no template parameter lists will be used in defining the
17436      type.  */
17437   num_templates = 0;
17438   parser->colon_corrects_to_scope_p = false;
17439
17440   *bases = NULL_TREE;
17441
17442   /* Look for the class-key.  */
17443   class_key = cp_parser_class_key (parser);
17444   if (class_key == none_type)
17445     return error_mark_node;
17446
17447   /* Parse the attributes.  */
17448   attributes = cp_parser_attributes_opt (parser);
17449
17450   /* If the next token is `::', that is invalid -- but sometimes
17451      people do try to write:
17452
17453        struct ::S {};
17454
17455      Handle this gracefully by accepting the extra qualifier, and then
17456      issuing an error about it later if this really is a
17457      class-head.  If it turns out just to be an elaborated type
17458      specifier, remain silent.  */
17459   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
17460     qualified_p = true;
17461
17462   push_deferring_access_checks (dk_no_check);
17463
17464   /* Determine the name of the class.  Begin by looking for an
17465      optional nested-name-specifier.  */
17466   nested_name_specifier_token_start = cp_lexer_peek_token (parser->lexer);
17467   nested_name_specifier
17468     = cp_parser_nested_name_specifier_opt (parser,
17469                                            /*typename_keyword_p=*/false,
17470                                            /*check_dependency_p=*/false,
17471                                            /*type_p=*/false,
17472                                            /*is_declaration=*/false);
17473   /* If there was a nested-name-specifier, then there *must* be an
17474      identifier.  */
17475   if (nested_name_specifier)
17476     {
17477       type_start_token = cp_lexer_peek_token (parser->lexer);
17478       /* Although the grammar says `identifier', it really means
17479          `class-name' or `template-name'.  You are only allowed to
17480          define a class that has already been declared with this
17481          syntax.
17482
17483          The proposed resolution for Core Issue 180 says that wherever
17484          you see `class T::X' you should treat `X' as a type-name.
17485
17486          It is OK to define an inaccessible class; for example:
17487
17488            class A { class B; };
17489            class A::B {};
17490
17491          We do not know if we will see a class-name, or a
17492          template-name.  We look for a class-name first, in case the
17493          class-name is a template-id; if we looked for the
17494          template-name first we would stop after the template-name.  */
17495       cp_parser_parse_tentatively (parser);
17496       type = cp_parser_class_name (parser,
17497                                    /*typename_keyword_p=*/false,
17498                                    /*template_keyword_p=*/false,
17499                                    class_type,
17500                                    /*check_dependency_p=*/false,
17501                                    /*class_head_p=*/true,
17502                                    /*is_declaration=*/false);
17503       /* If that didn't work, ignore the nested-name-specifier.  */
17504       if (!cp_parser_parse_definitely (parser))
17505         {
17506           invalid_nested_name_p = true;
17507           type_start_token = cp_lexer_peek_token (parser->lexer);
17508           id = cp_parser_identifier (parser);
17509           if (id == error_mark_node)
17510             id = NULL_TREE;
17511         }
17512       /* If we could not find a corresponding TYPE, treat this
17513          declaration like an unqualified declaration.  */
17514       if (type == error_mark_node)
17515         nested_name_specifier = NULL_TREE;
17516       /* Otherwise, count the number of templates used in TYPE and its
17517          containing scopes.  */
17518       else
17519         {
17520           tree scope;
17521
17522           for (scope = TREE_TYPE (type);
17523                scope && TREE_CODE (scope) != NAMESPACE_DECL;
17524                scope = (TYPE_P (scope)
17525                         ? TYPE_CONTEXT (scope)
17526                         : DECL_CONTEXT (scope)))
17527             if (TYPE_P (scope)
17528                 && CLASS_TYPE_P (scope)
17529                 && CLASSTYPE_TEMPLATE_INFO (scope)
17530                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
17531                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
17532               ++num_templates;
17533         }
17534     }
17535   /* Otherwise, the identifier is optional.  */
17536   else
17537     {
17538       /* We don't know whether what comes next is a template-id,
17539          an identifier, or nothing at all.  */
17540       cp_parser_parse_tentatively (parser);
17541       /* Check for a template-id.  */
17542       type_start_token = cp_lexer_peek_token (parser->lexer);
17543       id = cp_parser_template_id (parser,
17544                                   /*template_keyword_p=*/false,
17545                                   /*check_dependency_p=*/true,
17546                                   /*is_declaration=*/true);
17547       /* If that didn't work, it could still be an identifier.  */
17548       if (!cp_parser_parse_definitely (parser))
17549         {
17550           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
17551             {
17552               type_start_token = cp_lexer_peek_token (parser->lexer);
17553               id = cp_parser_identifier (parser);
17554             }
17555           else
17556             id = NULL_TREE;
17557         }
17558       else
17559         {
17560           template_id_p = true;
17561           ++num_templates;
17562         }
17563     }
17564
17565   pop_deferring_access_checks ();
17566
17567   if (id)
17568     {
17569       cp_parser_check_for_invalid_template_id (parser, id,
17570                                                type_start_token->location);
17571       virt_specifiers = cp_parser_virt_specifier_seq_opt (parser);
17572     }
17573
17574   /* If it's not a `:' or a `{' then we can't really be looking at a
17575      class-head, since a class-head only appears as part of a
17576      class-specifier.  We have to detect this situation before calling
17577      xref_tag, since that has irreversible side-effects.  */
17578   if (!cp_parser_next_token_starts_class_definition_p (parser))
17579     {
17580       cp_parser_error (parser, "expected %<{%> or %<:%>");
17581       type = error_mark_node;
17582       goto out;
17583     }
17584
17585   /* At this point, we're going ahead with the class-specifier, even
17586      if some other problem occurs.  */
17587   cp_parser_commit_to_tentative_parse (parser);
17588   if (virt_specifiers & VIRT_SPEC_OVERRIDE)
17589     {
17590       cp_parser_error (parser,
17591                        "cannot specify %<override%> for a class");
17592       type = error_mark_node;
17593       goto out;
17594     }
17595   /* Issue the error about the overly-qualified name now.  */
17596   if (qualified_p)
17597     {
17598       cp_parser_error (parser,
17599                        "global qualification of class name is invalid");
17600       type = error_mark_node;
17601       goto out;
17602     }
17603   else if (invalid_nested_name_p)
17604     {
17605       cp_parser_error (parser,
17606                        "qualified name does not name a class");
17607       type = error_mark_node;
17608       goto out;
17609     }
17610   else if (nested_name_specifier)
17611     {
17612       tree scope;
17613
17614       /* Reject typedef-names in class heads.  */
17615       if (!DECL_IMPLICIT_TYPEDEF_P (type))
17616         {
17617           error_at (type_start_token->location,
17618                     "invalid class name in declaration of %qD",
17619                     type);
17620           type = NULL_TREE;
17621           goto done;
17622         }
17623
17624       /* Figure out in what scope the declaration is being placed.  */
17625       scope = current_scope ();
17626       /* If that scope does not contain the scope in which the
17627          class was originally declared, the program is invalid.  */
17628       if (scope && !is_ancestor (scope, nested_name_specifier))
17629         {
17630           if (at_namespace_scope_p ())
17631             error_at (type_start_token->location,
17632                       "declaration of %qD in namespace %qD which does not "
17633                       "enclose %qD",
17634                       type, scope, nested_name_specifier);
17635           else
17636             error_at (type_start_token->location,
17637                       "declaration of %qD in %qD which does not enclose %qD",
17638                       type, scope, nested_name_specifier);
17639           type = NULL_TREE;
17640           goto done;
17641         }
17642       /* [dcl.meaning]
17643
17644          A declarator-id shall not be qualified except for the
17645          definition of a ... nested class outside of its class
17646          ... [or] the definition or explicit instantiation of a
17647          class member of a namespace outside of its namespace.  */
17648       if (scope == nested_name_specifier)
17649         {
17650           permerror (nested_name_specifier_token_start->location,
17651                      "extra qualification not allowed");
17652           nested_name_specifier = NULL_TREE;
17653           num_templates = 0;
17654         }
17655     }
17656   /* An explicit-specialization must be preceded by "template <>".  If
17657      it is not, try to recover gracefully.  */
17658   if (at_namespace_scope_p ()
17659       && parser->num_template_parameter_lists == 0
17660       && template_id_p)
17661     {
17662       error_at (type_start_token->location,
17663                 "an explicit specialization must be preceded by %<template <>%>");
17664       invalid_explicit_specialization_p = true;
17665       /* Take the same action that would have been taken by
17666          cp_parser_explicit_specialization.  */
17667       ++parser->num_template_parameter_lists;
17668       begin_specialization ();
17669     }
17670   /* There must be no "return" statements between this point and the
17671      end of this function; set "type "to the correct return value and
17672      use "goto done;" to return.  */
17673   /* Make sure that the right number of template parameters were
17674      present.  */
17675   if (!cp_parser_check_template_parameters (parser, num_templates,
17676                                             type_start_token->location,
17677                                             /*declarator=*/NULL))
17678     {
17679       /* If something went wrong, there is no point in even trying to
17680          process the class-definition.  */
17681       type = NULL_TREE;
17682       goto done;
17683     }
17684
17685   /* Look up the type.  */
17686   if (template_id_p)
17687     {
17688       if (TREE_CODE (id) == TEMPLATE_ID_EXPR
17689           && (DECL_FUNCTION_TEMPLATE_P (TREE_OPERAND (id, 0))
17690               || TREE_CODE (TREE_OPERAND (id, 0)) == OVERLOAD))
17691         {
17692           error_at (type_start_token->location,
17693                     "function template %qD redeclared as a class template", id);
17694           type = error_mark_node;
17695         }
17696       else
17697         {
17698           type = TREE_TYPE (id);
17699           type = maybe_process_partial_specialization (type);
17700         }
17701       if (nested_name_specifier)
17702         pushed_scope = push_scope (nested_name_specifier);
17703     }
17704   else if (nested_name_specifier)
17705     {
17706       tree class_type;
17707
17708       /* Given:
17709
17710             template <typename T> struct S { struct T };
17711             template <typename T> struct S<T>::T { };
17712
17713          we will get a TYPENAME_TYPE when processing the definition of
17714          `S::T'.  We need to resolve it to the actual type before we
17715          try to define it.  */
17716       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
17717         {
17718           class_type = resolve_typename_type (TREE_TYPE (type),
17719                                               /*only_current_p=*/false);
17720           if (TREE_CODE (class_type) != TYPENAME_TYPE)
17721             type = TYPE_NAME (class_type);
17722           else
17723             {
17724               cp_parser_error (parser, "could not resolve typename type");
17725               type = error_mark_node;
17726             }
17727         }
17728
17729       if (maybe_process_partial_specialization (TREE_TYPE (type))
17730           == error_mark_node)
17731         {
17732           type = NULL_TREE;
17733           goto done;
17734         }
17735
17736       class_type = current_class_type;
17737       /* Enter the scope indicated by the nested-name-specifier.  */
17738       pushed_scope = push_scope (nested_name_specifier);
17739       /* Get the canonical version of this type.  */
17740       type = TYPE_MAIN_DECL (TREE_TYPE (type));
17741       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
17742           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
17743         {
17744           type = push_template_decl (type);
17745           if (type == error_mark_node)
17746             {
17747               type = NULL_TREE;
17748               goto done;
17749             }
17750         }
17751
17752       type = TREE_TYPE (type);
17753       *nested_name_specifier_p = true;
17754     }
17755   else      /* The name is not a nested name.  */
17756     {
17757       /* If the class was unnamed, create a dummy name.  */
17758       if (!id)
17759         id = make_anon_name ();
17760       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
17761                        parser->num_template_parameter_lists);
17762     }
17763
17764   /* Indicate whether this class was declared as a `class' or as a
17765      `struct'.  */
17766   if (TREE_CODE (type) == RECORD_TYPE)
17767     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
17768   cp_parser_check_class_key (class_key, type);
17769
17770   /* If this type was already complete, and we see another definition,
17771      that's an error.  */
17772   if (type != error_mark_node && COMPLETE_TYPE_P (type))
17773     {
17774       error_at (type_start_token->location, "redefinition of %q#T",
17775                 type);
17776       error_at (type_start_token->location, "previous definition of %q+#T",
17777                 type);
17778       type = NULL_TREE;
17779       goto done;
17780     }
17781   else if (type == error_mark_node)
17782     type = NULL_TREE;
17783
17784   /* We will have entered the scope containing the class; the names of
17785      base classes should be looked up in that context.  For example:
17786
17787        struct A { struct B {}; struct C; };
17788        struct A::C : B {};
17789
17790      is valid.  */
17791
17792   /* Get the list of base-classes, if there is one.  */
17793   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
17794     *bases = cp_parser_base_clause (parser);
17795
17796  done:
17797   /* Leave the scope given by the nested-name-specifier.  We will
17798      enter the class scope itself while processing the members.  */
17799   if (pushed_scope)
17800     pop_scope (pushed_scope);
17801
17802   if (invalid_explicit_specialization_p)
17803     {
17804       end_specialization ();
17805       --parser->num_template_parameter_lists;
17806     }
17807
17808   if (type)
17809     DECL_SOURCE_LOCATION (TYPE_NAME (type)) = type_start_token->location;
17810   *attributes_p = attributes;
17811   if (type && (virt_specifiers & VIRT_SPEC_FINAL))
17812     CLASSTYPE_FINAL (type) = 1;
17813  out:
17814   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
17815   return type;
17816 }
17817
17818 /* Parse a class-key.
17819
17820    class-key:
17821      class
17822      struct
17823      union
17824
17825    Returns the kind of class-key specified, or none_type to indicate
17826    error.  */
17827
17828 static enum tag_types
17829 cp_parser_class_key (cp_parser* parser)
17830 {
17831   cp_token *token;
17832   enum tag_types tag_type;
17833
17834   /* Look for the class-key.  */
17835   token = cp_parser_require (parser, CPP_KEYWORD, RT_CLASS_KEY);
17836   if (!token)
17837     return none_type;
17838
17839   /* Check to see if the TOKEN is a class-key.  */
17840   tag_type = cp_parser_token_is_class_key (token);
17841   if (!tag_type)
17842     cp_parser_error (parser, "expected class-key");
17843   return tag_type;
17844 }
17845
17846 /* Parse an (optional) member-specification.
17847
17848    member-specification:
17849      member-declaration member-specification [opt]
17850      access-specifier : member-specification [opt]  */
17851
17852 static void
17853 cp_parser_member_specification_opt (cp_parser* parser)
17854 {
17855   while (true)
17856     {
17857       cp_token *token;
17858       enum rid keyword;
17859
17860       /* Peek at the next token.  */
17861       token = cp_lexer_peek_token (parser->lexer);
17862       /* If it's a `}', or EOF then we've seen all the members.  */
17863       if (token->type == CPP_CLOSE_BRACE
17864           || token->type == CPP_EOF
17865           || token->type == CPP_PRAGMA_EOL)
17866         break;
17867
17868       /* See if this token is a keyword.  */
17869       keyword = token->keyword;
17870       switch (keyword)
17871         {
17872         case RID_PUBLIC:
17873         case RID_PROTECTED:
17874         case RID_PRIVATE:
17875           /* Consume the access-specifier.  */
17876           cp_lexer_consume_token (parser->lexer);
17877           /* Remember which access-specifier is active.  */
17878           current_access_specifier = token->u.value;
17879           /* Look for the `:'.  */
17880           cp_parser_require (parser, CPP_COLON, RT_COLON);
17881           break;
17882
17883         default:
17884           /* Accept #pragmas at class scope.  */
17885           if (token->type == CPP_PRAGMA)
17886             {
17887               cp_parser_pragma (parser, pragma_external);
17888               break;
17889             }
17890
17891           /* Otherwise, the next construction must be a
17892              member-declaration.  */
17893           cp_parser_member_declaration (parser);
17894         }
17895     }
17896 }
17897
17898 /* Parse a member-declaration.
17899
17900    member-declaration:
17901      decl-specifier-seq [opt] member-declarator-list [opt] ;
17902      function-definition ; [opt]
17903      :: [opt] nested-name-specifier template [opt] unqualified-id ;
17904      using-declaration
17905      template-declaration
17906
17907    member-declarator-list:
17908      member-declarator
17909      member-declarator-list , member-declarator
17910
17911    member-declarator:
17912      declarator pure-specifier [opt]
17913      declarator constant-initializer [opt]
17914      identifier [opt] : constant-expression
17915
17916    GNU Extensions:
17917
17918    member-declaration:
17919      __extension__ member-declaration
17920
17921    member-declarator:
17922      declarator attributes [opt] pure-specifier [opt]
17923      declarator attributes [opt] constant-initializer [opt]
17924      identifier [opt] attributes [opt] : constant-expression  
17925
17926    C++0x Extensions:
17927
17928    member-declaration:
17929      static_assert-declaration  */
17930
17931 static void
17932 cp_parser_member_declaration (cp_parser* parser)
17933 {
17934   cp_decl_specifier_seq decl_specifiers;
17935   tree prefix_attributes;
17936   tree decl;
17937   int declares_class_or_enum;
17938   bool friend_p;
17939   cp_token *token = NULL;
17940   cp_token *decl_spec_token_start = NULL;
17941   cp_token *initializer_token_start = NULL;
17942   int saved_pedantic;
17943   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
17944
17945   /* Check for the `__extension__' keyword.  */
17946   if (cp_parser_extension_opt (parser, &saved_pedantic))
17947     {
17948       /* Recurse.  */
17949       cp_parser_member_declaration (parser);
17950       /* Restore the old value of the PEDANTIC flag.  */
17951       pedantic = saved_pedantic;
17952
17953       return;
17954     }
17955
17956   /* Check for a template-declaration.  */
17957   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
17958     {
17959       /* An explicit specialization here is an error condition, and we
17960          expect the specialization handler to detect and report this.  */
17961       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
17962           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
17963         cp_parser_explicit_specialization (parser);
17964       else
17965         cp_parser_template_declaration (parser, /*member_p=*/true);
17966
17967       return;
17968     }
17969
17970   /* Check for a using-declaration.  */
17971   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
17972     {
17973       /* Parse the using-declaration.  */
17974       cp_parser_using_declaration (parser,
17975                                    /*access_declaration_p=*/false);
17976       return;
17977     }
17978
17979   /* Check for @defs.  */
17980   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
17981     {
17982       tree ivar, member;
17983       tree ivar_chains = cp_parser_objc_defs_expression (parser);
17984       ivar = ivar_chains;
17985       while (ivar)
17986         {
17987           member = ivar;
17988           ivar = TREE_CHAIN (member);
17989           TREE_CHAIN (member) = NULL_TREE;
17990           finish_member_declaration (member);
17991         }
17992       return;
17993     }
17994
17995   /* If the next token is `static_assert' we have a static assertion.  */
17996   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC_ASSERT))
17997     {
17998       cp_parser_static_assert (parser, /*member_p=*/true);
17999       return;
18000     }
18001
18002   parser->colon_corrects_to_scope_p = false;
18003
18004   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
18005     goto out;
18006
18007   /* Parse the decl-specifier-seq.  */
18008   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
18009   cp_parser_decl_specifier_seq (parser,
18010                                 CP_PARSER_FLAGS_OPTIONAL,
18011                                 &decl_specifiers,
18012                                 &declares_class_or_enum);
18013   prefix_attributes = decl_specifiers.attributes;
18014   decl_specifiers.attributes = NULL_TREE;
18015   /* Check for an invalid type-name.  */
18016   if (!decl_specifiers.any_type_specifiers_p
18017       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
18018     goto out;
18019   /* If there is no declarator, then the decl-specifier-seq should
18020      specify a type.  */
18021   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
18022     {
18023       /* If there was no decl-specifier-seq, and the next token is a
18024          `;', then we have something like:
18025
18026            struct S { ; };
18027
18028          [class.mem]
18029
18030          Each member-declaration shall declare at least one member
18031          name of the class.  */
18032       if (!decl_specifiers.any_specifiers_p)
18033         {
18034           cp_token *token = cp_lexer_peek_token (parser->lexer);
18035           if (!in_system_header_at (token->location))
18036             pedwarn (token->location, OPT_pedantic, "extra %<;%>");
18037         }
18038       else
18039         {
18040           tree type;
18041
18042           /* See if this declaration is a friend.  */
18043           friend_p = cp_parser_friend_p (&decl_specifiers);
18044           /* If there were decl-specifiers, check to see if there was
18045              a class-declaration.  */
18046           type = check_tag_decl (&decl_specifiers);
18047           /* Nested classes have already been added to the class, but
18048              a `friend' needs to be explicitly registered.  */
18049           if (friend_p)
18050             {
18051               /* If the `friend' keyword was present, the friend must
18052                  be introduced with a class-key.  */
18053                if (!declares_class_or_enum && cxx_dialect < cxx0x)
18054                  pedwarn (decl_spec_token_start->location, OPT_pedantic,
18055                           "in C++03 a class-key must be used "
18056                           "when declaring a friend");
18057                /* In this case:
18058
18059                     template <typename T> struct A {
18060                       friend struct A<T>::B;
18061                     };
18062
18063                   A<T>::B will be represented by a TYPENAME_TYPE, and
18064                   therefore not recognized by check_tag_decl.  */
18065                if (!type)
18066                  {
18067                    type = decl_specifiers.type;
18068                    if (type && TREE_CODE (type) == TYPE_DECL)
18069                      type = TREE_TYPE (type);
18070                  }
18071                if (!type || !TYPE_P (type))
18072                  error_at (decl_spec_token_start->location,
18073                            "friend declaration does not name a class or "
18074                            "function");
18075                else
18076                  make_friend_class (current_class_type, type,
18077                                     /*complain=*/true);
18078             }
18079           /* If there is no TYPE, an error message will already have
18080              been issued.  */
18081           else if (!type || type == error_mark_node)
18082             ;
18083           /* An anonymous aggregate has to be handled specially; such
18084              a declaration really declares a data member (with a
18085              particular type), as opposed to a nested class.  */
18086           else if (ANON_AGGR_TYPE_P (type))
18087             {
18088               /* Remove constructors and such from TYPE, now that we
18089                  know it is an anonymous aggregate.  */
18090               fixup_anonymous_aggr (type);
18091               /* And make the corresponding data member.  */
18092               decl = build_decl (decl_spec_token_start->location,
18093                                  FIELD_DECL, NULL_TREE, type);
18094               /* Add it to the class.  */
18095               finish_member_declaration (decl);
18096             }
18097           else
18098             cp_parser_check_access_in_redeclaration
18099                                               (TYPE_NAME (type),
18100                                                decl_spec_token_start->location);
18101         }
18102     }
18103   else
18104     {
18105       bool assume_semicolon = false;
18106
18107       /* See if these declarations will be friends.  */
18108       friend_p = cp_parser_friend_p (&decl_specifiers);
18109
18110       /* Keep going until we hit the `;' at the end of the
18111          declaration.  */
18112       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18113         {
18114           tree attributes = NULL_TREE;
18115           tree first_attribute;
18116
18117           /* Peek at the next token.  */
18118           token = cp_lexer_peek_token (parser->lexer);
18119
18120           /* Check for a bitfield declaration.  */
18121           if (token->type == CPP_COLON
18122               || (token->type == CPP_NAME
18123                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
18124                   == CPP_COLON))
18125             {
18126               tree identifier;
18127               tree width;
18128
18129               /* Get the name of the bitfield.  Note that we cannot just
18130                  check TOKEN here because it may have been invalidated by
18131                  the call to cp_lexer_peek_nth_token above.  */
18132               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
18133                 identifier = cp_parser_identifier (parser);
18134               else
18135                 identifier = NULL_TREE;
18136
18137               /* Consume the `:' token.  */
18138               cp_lexer_consume_token (parser->lexer);
18139               /* Get the width of the bitfield.  */
18140               width
18141                 = cp_parser_constant_expression (parser,
18142                                                  /*allow_non_constant=*/false,
18143                                                  NULL);
18144
18145               /* Look for attributes that apply to the bitfield.  */
18146               attributes = cp_parser_attributes_opt (parser);
18147               /* Remember which attributes are prefix attributes and
18148                  which are not.  */
18149               first_attribute = attributes;
18150               /* Combine the attributes.  */
18151               attributes = chainon (prefix_attributes, attributes);
18152
18153               /* Create the bitfield declaration.  */
18154               decl = grokbitfield (identifier
18155                                    ? make_id_declarator (NULL_TREE,
18156                                                          identifier,
18157                                                          sfk_none)
18158                                    : NULL,
18159                                    &decl_specifiers,
18160                                    width,
18161                                    attributes);
18162             }
18163           else
18164             {
18165               cp_declarator *declarator;
18166               tree initializer;
18167               tree asm_specification;
18168               int ctor_dtor_or_conv_p;
18169
18170               /* Parse the declarator.  */
18171               declarator
18172                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
18173                                         &ctor_dtor_or_conv_p,
18174                                         /*parenthesized_p=*/NULL,
18175                                         /*member_p=*/true);
18176
18177               /* If something went wrong parsing the declarator, make sure
18178                  that we at least consume some tokens.  */
18179               if (declarator == cp_error_declarator)
18180                 {
18181                   /* Skip to the end of the statement.  */
18182                   cp_parser_skip_to_end_of_statement (parser);
18183                   /* If the next token is not a semicolon, that is
18184                      probably because we just skipped over the body of
18185                      a function.  So, we consume a semicolon if
18186                      present, but do not issue an error message if it
18187                      is not present.  */
18188                   if (cp_lexer_next_token_is (parser->lexer,
18189                                               CPP_SEMICOLON))
18190                     cp_lexer_consume_token (parser->lexer);
18191                   goto out;
18192                 }
18193
18194               if (declares_class_or_enum & 2)
18195                 cp_parser_check_for_definition_in_return_type
18196                                             (declarator, decl_specifiers.type,
18197                                              decl_specifiers.type_location);
18198
18199               /* Look for an asm-specification.  */
18200               asm_specification = cp_parser_asm_specification_opt (parser);
18201               /* Look for attributes that apply to the declaration.  */
18202               attributes = cp_parser_attributes_opt (parser);
18203               /* Remember which attributes are prefix attributes and
18204                  which are not.  */
18205               first_attribute = attributes;
18206               /* Combine the attributes.  */
18207               attributes = chainon (prefix_attributes, attributes);
18208
18209               /* If it's an `=', then we have a constant-initializer or a
18210                  pure-specifier.  It is not correct to parse the
18211                  initializer before registering the member declaration
18212                  since the member declaration should be in scope while
18213                  its initializer is processed.  However, the rest of the
18214                  front end does not yet provide an interface that allows
18215                  us to handle this correctly.  */
18216               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
18217                 {
18218                   /* In [class.mem]:
18219
18220                      A pure-specifier shall be used only in the declaration of
18221                      a virtual function.
18222
18223                      A member-declarator can contain a constant-initializer
18224                      only if it declares a static member of integral or
18225                      enumeration type.
18226
18227                      Therefore, if the DECLARATOR is for a function, we look
18228                      for a pure-specifier; otherwise, we look for a
18229                      constant-initializer.  When we call `grokfield', it will
18230                      perform more stringent semantics checks.  */
18231                   initializer_token_start = cp_lexer_peek_token (parser->lexer);
18232                   if (function_declarator_p (declarator)
18233                       || (decl_specifiers.type
18234                           && TREE_CODE (decl_specifiers.type) == TYPE_DECL
18235                           && (TREE_CODE (TREE_TYPE (decl_specifiers.type))
18236                               == FUNCTION_TYPE)))
18237                     initializer = cp_parser_pure_specifier (parser);
18238                   else if (decl_specifiers.storage_class != sc_static)
18239                     initializer = cp_parser_save_nsdmi (parser);
18240                   else if (cxx_dialect >= cxx0x)
18241                     {
18242                       bool nonconst;
18243                       /* Don't require a constant rvalue in C++11, since we
18244                          might want a reference constant.  We'll enforce
18245                          constancy later.  */
18246                       cp_lexer_consume_token (parser->lexer);
18247                       /* Parse the initializer.  */
18248                       initializer = cp_parser_initializer_clause (parser,
18249                                                                   &nonconst);
18250                     }
18251                   else
18252                     /* Parse the initializer.  */
18253                     initializer = cp_parser_constant_initializer (parser);
18254                 }
18255               else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)
18256                        && !function_declarator_p (declarator))
18257                 {
18258                   bool x;
18259                   if (decl_specifiers.storage_class != sc_static)
18260                     initializer = cp_parser_save_nsdmi (parser);
18261                   else
18262                     initializer = cp_parser_initializer (parser, &x, &x);
18263                 }
18264               /* Otherwise, there is no initializer.  */
18265               else
18266                 initializer = NULL_TREE;
18267
18268               /* See if we are probably looking at a function
18269                  definition.  We are certainly not looking at a
18270                  member-declarator.  Calling `grokfield' has
18271                  side-effects, so we must not do it unless we are sure
18272                  that we are looking at a member-declarator.  */
18273               if (cp_parser_token_starts_function_definition_p
18274                   (cp_lexer_peek_token (parser->lexer)))
18275                 {
18276                   /* The grammar does not allow a pure-specifier to be
18277                      used when a member function is defined.  (It is
18278                      possible that this fact is an oversight in the
18279                      standard, since a pure function may be defined
18280                      outside of the class-specifier.  */
18281                   if (initializer)
18282                     error_at (initializer_token_start->location,
18283                               "pure-specifier on function-definition");
18284                   decl = cp_parser_save_member_function_body (parser,
18285                                                               &decl_specifiers,
18286                                                               declarator,
18287                                                               attributes);
18288                   /* If the member was not a friend, declare it here.  */
18289                   if (!friend_p)
18290                     finish_member_declaration (decl);
18291                   /* Peek at the next token.  */
18292                   token = cp_lexer_peek_token (parser->lexer);
18293                   /* If the next token is a semicolon, consume it.  */
18294                   if (token->type == CPP_SEMICOLON)
18295                     cp_lexer_consume_token (parser->lexer);
18296                   goto out;
18297                 }
18298               else
18299                 if (declarator->kind == cdk_function)
18300                   declarator->id_loc = token->location;
18301                 /* Create the declaration.  */
18302                 decl = grokfield (declarator, &decl_specifiers,
18303                                   initializer, /*init_const_expr_p=*/true,
18304                                   asm_specification,
18305                                   attributes);
18306             }
18307
18308           /* Reset PREFIX_ATTRIBUTES.  */
18309           while (attributes && TREE_CHAIN (attributes) != first_attribute)
18310             attributes = TREE_CHAIN (attributes);
18311           if (attributes)
18312             TREE_CHAIN (attributes) = NULL_TREE;
18313
18314           /* If there is any qualification still in effect, clear it
18315              now; we will be starting fresh with the next declarator.  */
18316           parser->scope = NULL_TREE;
18317           parser->qualifying_scope = NULL_TREE;
18318           parser->object_scope = NULL_TREE;
18319           /* If it's a `,', then there are more declarators.  */
18320           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
18321             cp_lexer_consume_token (parser->lexer);
18322           /* If the next token isn't a `;', then we have a parse error.  */
18323           else if (cp_lexer_next_token_is_not (parser->lexer,
18324                                                CPP_SEMICOLON))
18325             {
18326               /* The next token might be a ways away from where the
18327                  actual semicolon is missing.  Find the previous token
18328                  and use that for our error position.  */
18329               cp_token *token = cp_lexer_previous_token (parser->lexer);
18330               error_at (token->location,
18331                         "expected %<;%> at end of member declaration");
18332
18333               /* Assume that the user meant to provide a semicolon.  If
18334                  we were to cp_parser_skip_to_end_of_statement, we might
18335                  skip to a semicolon inside a member function definition
18336                  and issue nonsensical error messages.  */
18337               assume_semicolon = true;
18338             }
18339
18340           if (decl)
18341             {
18342               /* Add DECL to the list of members.  */
18343               if (!friend_p)
18344                 finish_member_declaration (decl);
18345
18346               if (TREE_CODE (decl) == FUNCTION_DECL)
18347                 cp_parser_save_default_args (parser, decl);
18348               else if (TREE_CODE (decl) == FIELD_DECL
18349                        && !DECL_C_BIT_FIELD (decl)
18350                        && DECL_INITIAL (decl))
18351                 /* Add DECL to the queue of NSDMI to be parsed later.  */
18352                 VEC_safe_push (tree, gc, unparsed_nsdmis, decl);
18353             }
18354
18355           if (assume_semicolon)
18356             goto out;
18357         }
18358     }
18359
18360   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
18361  out:
18362   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
18363 }
18364
18365 /* Parse a pure-specifier.
18366
18367    pure-specifier:
18368      = 0
18369
18370    Returns INTEGER_ZERO_NODE if a pure specifier is found.
18371    Otherwise, ERROR_MARK_NODE is returned.  */
18372
18373 static tree
18374 cp_parser_pure_specifier (cp_parser* parser)
18375 {
18376   cp_token *token;
18377
18378   /* Look for the `=' token.  */
18379   if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
18380     return error_mark_node;
18381   /* Look for the `0' token.  */
18382   token = cp_lexer_peek_token (parser->lexer);
18383
18384   if (token->type == CPP_EOF
18385       || token->type == CPP_PRAGMA_EOL)
18386     return error_mark_node;
18387
18388   cp_lexer_consume_token (parser->lexer);
18389
18390   /* Accept = default or = delete in c++0x mode.  */
18391   if (token->keyword == RID_DEFAULT
18392       || token->keyword == RID_DELETE)
18393     {
18394       maybe_warn_cpp0x (CPP0X_DEFAULTED_DELETED);
18395       return token->u.value;
18396     }
18397
18398   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
18399   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
18400     {
18401       cp_parser_error (parser,
18402                        "invalid pure specifier (only %<= 0%> is allowed)");
18403       cp_parser_skip_to_end_of_statement (parser);
18404       return error_mark_node;
18405     }
18406   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
18407     {
18408       error_at (token->location, "templates may not be %<virtual%>");
18409       return error_mark_node;
18410     }
18411
18412   return integer_zero_node;
18413 }
18414
18415 /* Parse a constant-initializer.
18416
18417    constant-initializer:
18418      = constant-expression
18419
18420    Returns a representation of the constant-expression.  */
18421
18422 static tree
18423 cp_parser_constant_initializer (cp_parser* parser)
18424 {
18425   /* Look for the `=' token.  */
18426   if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
18427     return error_mark_node;
18428
18429   /* It is invalid to write:
18430
18431        struct S { static const int i = { 7 }; };
18432
18433      */
18434   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
18435     {
18436       cp_parser_error (parser,
18437                        "a brace-enclosed initializer is not allowed here");
18438       /* Consume the opening brace.  */
18439       cp_lexer_consume_token (parser->lexer);
18440       /* Skip the initializer.  */
18441       cp_parser_skip_to_closing_brace (parser);
18442       /* Look for the trailing `}'.  */
18443       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
18444
18445       return error_mark_node;
18446     }
18447
18448   return cp_parser_constant_expression (parser,
18449                                         /*allow_non_constant=*/false,
18450                                         NULL);
18451 }
18452
18453 /* Derived classes [gram.class.derived] */
18454
18455 /* Parse a base-clause.
18456
18457    base-clause:
18458      : base-specifier-list
18459
18460    base-specifier-list:
18461      base-specifier ... [opt]
18462      base-specifier-list , base-specifier ... [opt]
18463
18464    Returns a TREE_LIST representing the base-classes, in the order in
18465    which they were declared.  The representation of each node is as
18466    described by cp_parser_base_specifier.
18467
18468    In the case that no bases are specified, this function will return
18469    NULL_TREE, not ERROR_MARK_NODE.  */
18470
18471 static tree
18472 cp_parser_base_clause (cp_parser* parser)
18473 {
18474   tree bases = NULL_TREE;
18475
18476   /* Look for the `:' that begins the list.  */
18477   cp_parser_require (parser, CPP_COLON, RT_COLON);
18478
18479   /* Scan the base-specifier-list.  */
18480   while (true)
18481     {
18482       cp_token *token;
18483       tree base;
18484       bool pack_expansion_p = false;
18485
18486       /* Look for the base-specifier.  */
18487       base = cp_parser_base_specifier (parser);
18488       /* Look for the (optional) ellipsis. */
18489       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
18490         {
18491           /* Consume the `...'. */
18492           cp_lexer_consume_token (parser->lexer);
18493
18494           pack_expansion_p = true;
18495         }
18496
18497       /* Add BASE to the front of the list.  */
18498       if (base && base != error_mark_node)
18499         {
18500           if (pack_expansion_p)
18501             /* Make this a pack expansion type. */
18502             TREE_VALUE (base) = make_pack_expansion (TREE_VALUE (base));
18503
18504           if (!check_for_bare_parameter_packs (TREE_VALUE (base)))
18505             {
18506               TREE_CHAIN (base) = bases;
18507               bases = base;
18508             }
18509         }
18510       /* Peek at the next token.  */
18511       token = cp_lexer_peek_token (parser->lexer);
18512       /* If it's not a comma, then the list is complete.  */
18513       if (token->type != CPP_COMMA)
18514         break;
18515       /* Consume the `,'.  */
18516       cp_lexer_consume_token (parser->lexer);
18517     }
18518
18519   /* PARSER->SCOPE may still be non-NULL at this point, if the last
18520      base class had a qualified name.  However, the next name that
18521      appears is certainly not qualified.  */
18522   parser->scope = NULL_TREE;
18523   parser->qualifying_scope = NULL_TREE;
18524   parser->object_scope = NULL_TREE;
18525
18526   return nreverse (bases);
18527 }
18528
18529 /* Parse a base-specifier.
18530
18531    base-specifier:
18532      :: [opt] nested-name-specifier [opt] class-name
18533      virtual access-specifier [opt] :: [opt] nested-name-specifier
18534        [opt] class-name
18535      access-specifier virtual [opt] :: [opt] nested-name-specifier
18536        [opt] class-name
18537
18538    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
18539    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
18540    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
18541    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
18542
18543 static tree
18544 cp_parser_base_specifier (cp_parser* parser)
18545 {
18546   cp_token *token;
18547   bool done = false;
18548   bool virtual_p = false;
18549   bool duplicate_virtual_error_issued_p = false;
18550   bool duplicate_access_error_issued_p = false;
18551   bool class_scope_p, template_p;
18552   tree access = access_default_node;
18553   tree type;
18554
18555   /* Process the optional `virtual' and `access-specifier'.  */
18556   while (!done)
18557     {
18558       /* Peek at the next token.  */
18559       token = cp_lexer_peek_token (parser->lexer);
18560       /* Process `virtual'.  */
18561       switch (token->keyword)
18562         {
18563         case RID_VIRTUAL:
18564           /* If `virtual' appears more than once, issue an error.  */
18565           if (virtual_p && !duplicate_virtual_error_issued_p)
18566             {
18567               cp_parser_error (parser,
18568                                "%<virtual%> specified more than once in base-specified");
18569               duplicate_virtual_error_issued_p = true;
18570             }
18571
18572           virtual_p = true;
18573
18574           /* Consume the `virtual' token.  */
18575           cp_lexer_consume_token (parser->lexer);
18576
18577           break;
18578
18579         case RID_PUBLIC:
18580         case RID_PROTECTED:
18581         case RID_PRIVATE:
18582           /* If more than one access specifier appears, issue an
18583              error.  */
18584           if (access != access_default_node
18585               && !duplicate_access_error_issued_p)
18586             {
18587               cp_parser_error (parser,
18588                                "more than one access specifier in base-specified");
18589               duplicate_access_error_issued_p = true;
18590             }
18591
18592           access = ridpointers[(int) token->keyword];
18593
18594           /* Consume the access-specifier.  */
18595           cp_lexer_consume_token (parser->lexer);
18596
18597           break;
18598
18599         default:
18600           done = true;
18601           break;
18602         }
18603     }
18604   /* It is not uncommon to see programs mechanically, erroneously, use
18605      the 'typename' keyword to denote (dependent) qualified types
18606      as base classes.  */
18607   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
18608     {
18609       token = cp_lexer_peek_token (parser->lexer);
18610       if (!processing_template_decl)
18611         error_at (token->location,
18612                   "keyword %<typename%> not allowed outside of templates");
18613       else
18614         error_at (token->location,
18615                   "keyword %<typename%> not allowed in this context "
18616                   "(the base class is implicitly a type)");
18617       cp_lexer_consume_token (parser->lexer);
18618     }
18619
18620   /* Look for the optional `::' operator.  */
18621   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
18622   /* Look for the nested-name-specifier.  The simplest way to
18623      implement:
18624
18625        [temp.res]
18626
18627        The keyword `typename' is not permitted in a base-specifier or
18628        mem-initializer; in these contexts a qualified name that
18629        depends on a template-parameter is implicitly assumed to be a
18630        type name.
18631
18632      is to pretend that we have seen the `typename' keyword at this
18633      point.  */
18634   cp_parser_nested_name_specifier_opt (parser,
18635                                        /*typename_keyword_p=*/true,
18636                                        /*check_dependency_p=*/true,
18637                                        typename_type,
18638                                        /*is_declaration=*/true);
18639   /* If the base class is given by a qualified name, assume that names
18640      we see are type names or templates, as appropriate.  */
18641   class_scope_p = (parser->scope && TYPE_P (parser->scope));
18642   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
18643
18644   if (!parser->scope
18645       && cp_lexer_next_token_is_decltype (parser->lexer))
18646     /* DR 950 allows decltype as a base-specifier.  */
18647     type = cp_parser_decltype (parser);
18648   else
18649     {
18650       /* Otherwise, look for the class-name.  */
18651       type = cp_parser_class_name (parser,
18652                                    class_scope_p,
18653                                    template_p,
18654                                    typename_type,
18655                                    /*check_dependency_p=*/true,
18656                                    /*class_head_p=*/false,
18657                                    /*is_declaration=*/true);
18658       type = TREE_TYPE (type);
18659     }
18660
18661   if (type == error_mark_node)
18662     return error_mark_node;
18663
18664   return finish_base_specifier (type, access, virtual_p);
18665 }
18666
18667 /* Exception handling [gram.exception] */
18668
18669 /* Parse an (optional) exception-specification.
18670
18671    exception-specification:
18672      throw ( type-id-list [opt] )
18673
18674    Returns a TREE_LIST representing the exception-specification.  The
18675    TREE_VALUE of each node is a type.  */
18676
18677 static tree
18678 cp_parser_exception_specification_opt (cp_parser* parser)
18679 {
18680   cp_token *token;
18681   tree type_id_list;
18682   const char *saved_message;
18683
18684   /* Peek at the next token.  */
18685   token = cp_lexer_peek_token (parser->lexer);
18686
18687   /* Is it a noexcept-specification?  */
18688   if (cp_parser_is_keyword (token, RID_NOEXCEPT))
18689     {
18690       tree expr;
18691       cp_lexer_consume_token (parser->lexer);
18692
18693       if (cp_lexer_peek_token (parser->lexer)->type == CPP_OPEN_PAREN)
18694         {
18695           cp_lexer_consume_token (parser->lexer);
18696
18697           /* Types may not be defined in an exception-specification.  */
18698           saved_message = parser->type_definition_forbidden_message;
18699           parser->type_definition_forbidden_message
18700             = G_("types may not be defined in an exception-specification");
18701
18702           expr = cp_parser_constant_expression (parser, false, NULL);
18703
18704           /* Restore the saved message.  */
18705           parser->type_definition_forbidden_message = saved_message;
18706
18707           cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
18708         }
18709       else
18710         expr = boolean_true_node;
18711
18712       return build_noexcept_spec (expr, tf_warning_or_error);
18713     }
18714
18715   /* If it's not `throw', then there's no exception-specification.  */
18716   if (!cp_parser_is_keyword (token, RID_THROW))
18717     return NULL_TREE;
18718
18719 #if 0
18720   /* Enable this once a lot of code has transitioned to noexcept?  */
18721   if (cxx_dialect == cxx0x && !in_system_header)
18722     warning (OPT_Wdeprecated, "dynamic exception specifications are "
18723              "deprecated in C++0x; use %<noexcept%> instead");
18724 #endif
18725
18726   /* Consume the `throw'.  */
18727   cp_lexer_consume_token (parser->lexer);
18728
18729   /* Look for the `('.  */
18730   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
18731
18732   /* Peek at the next token.  */
18733   token = cp_lexer_peek_token (parser->lexer);
18734   /* If it's not a `)', then there is a type-id-list.  */
18735   if (token->type != CPP_CLOSE_PAREN)
18736     {
18737       /* Types may not be defined in an exception-specification.  */
18738       saved_message = parser->type_definition_forbidden_message;
18739       parser->type_definition_forbidden_message
18740         = G_("types may not be defined in an exception-specification");
18741       /* Parse the type-id-list.  */
18742       type_id_list = cp_parser_type_id_list (parser);
18743       /* Restore the saved message.  */
18744       parser->type_definition_forbidden_message = saved_message;
18745     }
18746   else
18747     type_id_list = empty_except_spec;
18748
18749   /* Look for the `)'.  */
18750   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
18751
18752   return type_id_list;
18753 }
18754
18755 /* Parse an (optional) type-id-list.
18756
18757    type-id-list:
18758      type-id ... [opt]
18759      type-id-list , type-id ... [opt]
18760
18761    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
18762    in the order that the types were presented.  */
18763
18764 static tree
18765 cp_parser_type_id_list (cp_parser* parser)
18766 {
18767   tree types = NULL_TREE;
18768
18769   while (true)
18770     {
18771       cp_token *token;
18772       tree type;
18773
18774       /* Get the next type-id.  */
18775       type = cp_parser_type_id (parser);
18776       /* Parse the optional ellipsis. */
18777       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
18778         {
18779           /* Consume the `...'. */
18780           cp_lexer_consume_token (parser->lexer);
18781
18782           /* Turn the type into a pack expansion expression. */
18783           type = make_pack_expansion (type);
18784         }
18785       /* Add it to the list.  */
18786       types = add_exception_specifier (types, type, /*complain=*/1);
18787       /* Peek at the next token.  */
18788       token = cp_lexer_peek_token (parser->lexer);
18789       /* If it is not a `,', we are done.  */
18790       if (token->type != CPP_COMMA)
18791         break;
18792       /* Consume the `,'.  */
18793       cp_lexer_consume_token (parser->lexer);
18794     }
18795
18796   return nreverse (types);
18797 }
18798
18799 /* Parse a try-block.
18800
18801    try-block:
18802      try compound-statement handler-seq  */
18803
18804 static tree
18805 cp_parser_try_block (cp_parser* parser)
18806 {
18807   tree try_block;
18808
18809   cp_parser_require_keyword (parser, RID_TRY, RT_TRY);
18810   try_block = begin_try_block ();
18811   cp_parser_compound_statement (parser, NULL, true, false);
18812   finish_try_block (try_block);
18813   cp_parser_handler_seq (parser);
18814   finish_handler_sequence (try_block);
18815
18816   return try_block;
18817 }
18818
18819 /* Parse a function-try-block.
18820
18821    function-try-block:
18822      try ctor-initializer [opt] function-body handler-seq  */
18823
18824 static bool
18825 cp_parser_function_try_block (cp_parser* parser)
18826 {
18827   tree compound_stmt;
18828   tree try_block;
18829   bool ctor_initializer_p;
18830
18831   /* Look for the `try' keyword.  */
18832   if (!cp_parser_require_keyword (parser, RID_TRY, RT_TRY))
18833     return false;
18834   /* Let the rest of the front end know where we are.  */
18835   try_block = begin_function_try_block (&compound_stmt);
18836   /* Parse the function-body.  */
18837   ctor_initializer_p
18838     = cp_parser_ctor_initializer_opt_and_function_body (parser);
18839   /* We're done with the `try' part.  */
18840   finish_function_try_block (try_block);
18841   /* Parse the handlers.  */
18842   cp_parser_handler_seq (parser);
18843   /* We're done with the handlers.  */
18844   finish_function_handler_sequence (try_block, compound_stmt);
18845
18846   return ctor_initializer_p;
18847 }
18848
18849 /* Parse a handler-seq.
18850
18851    handler-seq:
18852      handler handler-seq [opt]  */
18853
18854 static void
18855 cp_parser_handler_seq (cp_parser* parser)
18856 {
18857   while (true)
18858     {
18859       cp_token *token;
18860
18861       /* Parse the handler.  */
18862       cp_parser_handler (parser);
18863       /* Peek at the next token.  */
18864       token = cp_lexer_peek_token (parser->lexer);
18865       /* If it's not `catch' then there are no more handlers.  */
18866       if (!cp_parser_is_keyword (token, RID_CATCH))
18867         break;
18868     }
18869 }
18870
18871 /* Parse a handler.
18872
18873    handler:
18874      catch ( exception-declaration ) compound-statement  */
18875
18876 static void
18877 cp_parser_handler (cp_parser* parser)
18878 {
18879   tree handler;
18880   tree declaration;
18881
18882   cp_parser_require_keyword (parser, RID_CATCH, RT_CATCH);
18883   handler = begin_handler ();
18884   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
18885   declaration = cp_parser_exception_declaration (parser);
18886   finish_handler_parms (declaration, handler);
18887   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
18888   cp_parser_compound_statement (parser, NULL, false, false);
18889   finish_handler (handler);
18890 }
18891
18892 /* Parse an exception-declaration.
18893
18894    exception-declaration:
18895      type-specifier-seq declarator
18896      type-specifier-seq abstract-declarator
18897      type-specifier-seq
18898      ...
18899
18900    Returns a VAR_DECL for the declaration, or NULL_TREE if the
18901    ellipsis variant is used.  */
18902
18903 static tree
18904 cp_parser_exception_declaration (cp_parser* parser)
18905 {
18906   cp_decl_specifier_seq type_specifiers;
18907   cp_declarator *declarator;
18908   const char *saved_message;
18909
18910   /* If it's an ellipsis, it's easy to handle.  */
18911   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
18912     {
18913       /* Consume the `...' token.  */
18914       cp_lexer_consume_token (parser->lexer);
18915       return NULL_TREE;
18916     }
18917
18918   /* Types may not be defined in exception-declarations.  */
18919   saved_message = parser->type_definition_forbidden_message;
18920   parser->type_definition_forbidden_message
18921     = G_("types may not be defined in exception-declarations");
18922
18923   /* Parse the type-specifier-seq.  */
18924   cp_parser_type_specifier_seq (parser, /*is_declaration=*/true,
18925                                 /*is_trailing_return=*/false,
18926                                 &type_specifiers);
18927   /* If it's a `)', then there is no declarator.  */
18928   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
18929     declarator = NULL;
18930   else
18931     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
18932                                        /*ctor_dtor_or_conv_p=*/NULL,
18933                                        /*parenthesized_p=*/NULL,
18934                                        /*member_p=*/false);
18935
18936   /* Restore the saved message.  */
18937   parser->type_definition_forbidden_message = saved_message;
18938
18939   if (!type_specifiers.any_specifiers_p)
18940     return error_mark_node;
18941
18942   return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
18943 }
18944
18945 /* Parse a throw-expression.
18946
18947    throw-expression:
18948      throw assignment-expression [opt]
18949
18950    Returns a THROW_EXPR representing the throw-expression.  */
18951
18952 static tree
18953 cp_parser_throw_expression (cp_parser* parser)
18954 {
18955   tree expression;
18956   cp_token* token;
18957
18958   cp_parser_require_keyword (parser, RID_THROW, RT_THROW);
18959   token = cp_lexer_peek_token (parser->lexer);
18960   /* Figure out whether or not there is an assignment-expression
18961      following the "throw" keyword.  */
18962   if (token->type == CPP_COMMA
18963       || token->type == CPP_SEMICOLON
18964       || token->type == CPP_CLOSE_PAREN
18965       || token->type == CPP_CLOSE_SQUARE
18966       || token->type == CPP_CLOSE_BRACE
18967       || token->type == CPP_COLON)
18968     expression = NULL_TREE;
18969   else
18970     expression = cp_parser_assignment_expression (parser,
18971                                                   /*cast_p=*/false, NULL);
18972
18973   return build_throw (expression);
18974 }
18975
18976 /* GNU Extensions */
18977
18978 /* Parse an (optional) asm-specification.
18979
18980    asm-specification:
18981      asm ( string-literal )
18982
18983    If the asm-specification is present, returns a STRING_CST
18984    corresponding to the string-literal.  Otherwise, returns
18985    NULL_TREE.  */
18986
18987 static tree
18988 cp_parser_asm_specification_opt (cp_parser* parser)
18989 {
18990   cp_token *token;
18991   tree asm_specification;
18992
18993   /* Peek at the next token.  */
18994   token = cp_lexer_peek_token (parser->lexer);
18995   /* If the next token isn't the `asm' keyword, then there's no
18996      asm-specification.  */
18997   if (!cp_parser_is_keyword (token, RID_ASM))
18998     return NULL_TREE;
18999
19000   /* Consume the `asm' token.  */
19001   cp_lexer_consume_token (parser->lexer);
19002   /* Look for the `('.  */
19003   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19004
19005   /* Look for the string-literal.  */
19006   asm_specification = cp_parser_string_literal (parser, false, false);
19007
19008   /* Look for the `)'.  */
19009   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19010
19011   return asm_specification;
19012 }
19013
19014 /* Parse an asm-operand-list.
19015
19016    asm-operand-list:
19017      asm-operand
19018      asm-operand-list , asm-operand
19019
19020    asm-operand:
19021      string-literal ( expression )
19022      [ string-literal ] string-literal ( expression )
19023
19024    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
19025    each node is the expression.  The TREE_PURPOSE is itself a
19026    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
19027    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
19028    is a STRING_CST for the string literal before the parenthesis. Returns
19029    ERROR_MARK_NODE if any of the operands are invalid.  */
19030
19031 static tree
19032 cp_parser_asm_operand_list (cp_parser* parser)
19033 {
19034   tree asm_operands = NULL_TREE;
19035   bool invalid_operands = false;
19036
19037   while (true)
19038     {
19039       tree string_literal;
19040       tree expression;
19041       tree name;
19042
19043       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
19044         {
19045           /* Consume the `[' token.  */
19046           cp_lexer_consume_token (parser->lexer);
19047           /* Read the operand name.  */
19048           name = cp_parser_identifier (parser);
19049           if (name != error_mark_node)
19050             name = build_string (IDENTIFIER_LENGTH (name),
19051                                  IDENTIFIER_POINTER (name));
19052           /* Look for the closing `]'.  */
19053           cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
19054         }
19055       else
19056         name = NULL_TREE;
19057       /* Look for the string-literal.  */
19058       string_literal = cp_parser_string_literal (parser, false, false);
19059
19060       /* Look for the `('.  */
19061       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19062       /* Parse the expression.  */
19063       expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
19064       /* Look for the `)'.  */
19065       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19066
19067       if (name == error_mark_node 
19068           || string_literal == error_mark_node 
19069           || expression == error_mark_node)
19070         invalid_operands = true;
19071
19072       /* Add this operand to the list.  */
19073       asm_operands = tree_cons (build_tree_list (name, string_literal),
19074                                 expression,
19075                                 asm_operands);
19076       /* If the next token is not a `,', there are no more
19077          operands.  */
19078       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
19079         break;
19080       /* Consume the `,'.  */
19081       cp_lexer_consume_token (parser->lexer);
19082     }
19083
19084   return invalid_operands ? error_mark_node : nreverse (asm_operands);
19085 }
19086
19087 /* Parse an asm-clobber-list.
19088
19089    asm-clobber-list:
19090      string-literal
19091      asm-clobber-list , string-literal
19092
19093    Returns a TREE_LIST, indicating the clobbers in the order that they
19094    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
19095
19096 static tree
19097 cp_parser_asm_clobber_list (cp_parser* parser)
19098 {
19099   tree clobbers = NULL_TREE;
19100
19101   while (true)
19102     {
19103       tree string_literal;
19104
19105       /* Look for the string literal.  */
19106       string_literal = cp_parser_string_literal (parser, false, false);
19107       /* Add it to the list.  */
19108       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
19109       /* If the next token is not a `,', then the list is
19110          complete.  */
19111       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
19112         break;
19113       /* Consume the `,' token.  */
19114       cp_lexer_consume_token (parser->lexer);
19115     }
19116
19117   return clobbers;
19118 }
19119
19120 /* Parse an asm-label-list.
19121
19122    asm-label-list:
19123      identifier
19124      asm-label-list , identifier
19125
19126    Returns a TREE_LIST, indicating the labels in the order that they
19127    appeared.  The TREE_VALUE of each node is a label.  */
19128
19129 static tree
19130 cp_parser_asm_label_list (cp_parser* parser)
19131 {
19132   tree labels = NULL_TREE;
19133
19134   while (true)
19135     {
19136       tree identifier, label, name;
19137
19138       /* Look for the identifier.  */
19139       identifier = cp_parser_identifier (parser);
19140       if (!error_operand_p (identifier))
19141         {
19142           label = lookup_label (identifier);
19143           if (TREE_CODE (label) == LABEL_DECL)
19144             {
19145               TREE_USED (label) = 1;
19146               check_goto (label);
19147               name = build_string (IDENTIFIER_LENGTH (identifier),
19148                                    IDENTIFIER_POINTER (identifier));
19149               labels = tree_cons (name, label, labels);
19150             }
19151         }
19152       /* If the next token is not a `,', then the list is
19153          complete.  */
19154       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
19155         break;
19156       /* Consume the `,' token.  */
19157       cp_lexer_consume_token (parser->lexer);
19158     }
19159
19160   return nreverse (labels);
19161 }
19162
19163 /* Parse an (optional) series of attributes.
19164
19165    attributes:
19166      attributes attribute
19167
19168    attribute:
19169      __attribute__ (( attribute-list [opt] ))
19170
19171    The return value is as for cp_parser_attribute_list.  */
19172
19173 static tree
19174 cp_parser_attributes_opt (cp_parser* parser)
19175 {
19176   tree attributes = NULL_TREE;
19177
19178   while (true)
19179     {
19180       cp_token *token;
19181       tree attribute_list;
19182
19183       /* Peek at the next token.  */
19184       token = cp_lexer_peek_token (parser->lexer);
19185       /* If it's not `__attribute__', then we're done.  */
19186       if (token->keyword != RID_ATTRIBUTE)
19187         break;
19188
19189       /* Consume the `__attribute__' keyword.  */
19190       cp_lexer_consume_token (parser->lexer);
19191       /* Look for the two `(' tokens.  */
19192       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19193       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19194
19195       /* Peek at the next token.  */
19196       token = cp_lexer_peek_token (parser->lexer);
19197       if (token->type != CPP_CLOSE_PAREN)
19198         /* Parse the attribute-list.  */
19199         attribute_list = cp_parser_attribute_list (parser);
19200       else
19201         /* If the next token is a `)', then there is no attribute
19202            list.  */
19203         attribute_list = NULL;
19204
19205       /* Look for the two `)' tokens.  */
19206       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19207       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19208
19209       /* Add these new attributes to the list.  */
19210       attributes = chainon (attributes, attribute_list);
19211     }
19212
19213   return attributes;
19214 }
19215
19216 /* Parse an attribute-list.
19217
19218    attribute-list:
19219      attribute
19220      attribute-list , attribute
19221
19222    attribute:
19223      identifier
19224      identifier ( identifier )
19225      identifier ( identifier , expression-list )
19226      identifier ( expression-list )
19227
19228    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
19229    to an attribute.  The TREE_PURPOSE of each node is the identifier
19230    indicating which attribute is in use.  The TREE_VALUE represents
19231    the arguments, if any.  */
19232
19233 static tree
19234 cp_parser_attribute_list (cp_parser* parser)
19235 {
19236   tree attribute_list = NULL_TREE;
19237   bool save_translate_strings_p = parser->translate_strings_p;
19238
19239   parser->translate_strings_p = false;
19240   while (true)
19241     {
19242       cp_token *token;
19243       tree identifier;
19244       tree attribute;
19245
19246       /* Look for the identifier.  We also allow keywords here; for
19247          example `__attribute__ ((const))' is legal.  */
19248       token = cp_lexer_peek_token (parser->lexer);
19249       if (token->type == CPP_NAME
19250           || token->type == CPP_KEYWORD)
19251         {
19252           tree arguments = NULL_TREE;
19253
19254           /* Consume the token.  */
19255           token = cp_lexer_consume_token (parser->lexer);
19256
19257           /* Save away the identifier that indicates which attribute
19258              this is.  */
19259           identifier = (token->type == CPP_KEYWORD) 
19260             /* For keywords, use the canonical spelling, not the
19261                parsed identifier.  */
19262             ? ridpointers[(int) token->keyword]
19263             : token->u.value;
19264           
19265           attribute = build_tree_list (identifier, NULL_TREE);
19266
19267           /* Peek at the next token.  */
19268           token = cp_lexer_peek_token (parser->lexer);
19269           /* If it's an `(', then parse the attribute arguments.  */
19270           if (token->type == CPP_OPEN_PAREN)
19271             {
19272               VEC(tree,gc) *vec;
19273               int attr_flag = (attribute_takes_identifier_p (identifier)
19274                                ? id_attr : normal_attr);
19275               vec = cp_parser_parenthesized_expression_list
19276                     (parser, attr_flag, /*cast_p=*/false,
19277                      /*allow_expansion_p=*/false,
19278                      /*non_constant_p=*/NULL);
19279               if (vec == NULL)
19280                 arguments = error_mark_node;
19281               else
19282                 {
19283                   arguments = build_tree_list_vec (vec);
19284                   release_tree_vector (vec);
19285                 }
19286               /* Save the arguments away.  */
19287               TREE_VALUE (attribute) = arguments;
19288             }
19289
19290           if (arguments != error_mark_node)
19291             {
19292               /* Add this attribute to the list.  */
19293               TREE_CHAIN (attribute) = attribute_list;
19294               attribute_list = attribute;
19295             }
19296
19297           token = cp_lexer_peek_token (parser->lexer);
19298         }
19299       /* Now, look for more attributes.  If the next token isn't a
19300          `,', we're done.  */
19301       if (token->type != CPP_COMMA)
19302         break;
19303
19304       /* Consume the comma and keep going.  */
19305       cp_lexer_consume_token (parser->lexer);
19306     }
19307   parser->translate_strings_p = save_translate_strings_p;
19308
19309   /* We built up the list in reverse order.  */
19310   return nreverse (attribute_list);
19311 }
19312
19313 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
19314    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
19315    current value of the PEDANTIC flag, regardless of whether or not
19316    the `__extension__' keyword is present.  The caller is responsible
19317    for restoring the value of the PEDANTIC flag.  */
19318
19319 static bool
19320 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
19321 {
19322   /* Save the old value of the PEDANTIC flag.  */
19323   *saved_pedantic = pedantic;
19324
19325   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
19326     {
19327       /* Consume the `__extension__' token.  */
19328       cp_lexer_consume_token (parser->lexer);
19329       /* We're not being pedantic while the `__extension__' keyword is
19330          in effect.  */
19331       pedantic = 0;
19332
19333       return true;
19334     }
19335
19336   return false;
19337 }
19338
19339 /* Parse a label declaration.
19340
19341    label-declaration:
19342      __label__ label-declarator-seq ;
19343
19344    label-declarator-seq:
19345      identifier , label-declarator-seq
19346      identifier  */
19347
19348 static void
19349 cp_parser_label_declaration (cp_parser* parser)
19350 {
19351   /* Look for the `__label__' keyword.  */
19352   cp_parser_require_keyword (parser, RID_LABEL, RT_LABEL);
19353
19354   while (true)
19355     {
19356       tree identifier;
19357
19358       /* Look for an identifier.  */
19359       identifier = cp_parser_identifier (parser);
19360       /* If we failed, stop.  */
19361       if (identifier == error_mark_node)
19362         break;
19363       /* Declare it as a label.  */
19364       finish_label_decl (identifier);
19365       /* If the next token is a `;', stop.  */
19366       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
19367         break;
19368       /* Look for the `,' separating the label declarations.  */
19369       cp_parser_require (parser, CPP_COMMA, RT_COMMA);
19370     }
19371
19372   /* Look for the final `;'.  */
19373   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
19374 }
19375
19376 /* Support Functions */
19377
19378 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
19379    NAME should have one of the representations used for an
19380    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
19381    is returned.  If PARSER->SCOPE is a dependent type, then a
19382    SCOPE_REF is returned.
19383
19384    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
19385    returned; the name was already resolved when the TEMPLATE_ID_EXPR
19386    was formed.  Abstractly, such entities should not be passed to this
19387    function, because they do not need to be looked up, but it is
19388    simpler to check for this special case here, rather than at the
19389    call-sites.
19390
19391    In cases not explicitly covered above, this function returns a
19392    DECL, OVERLOAD, or baselink representing the result of the lookup.
19393    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
19394    is returned.
19395
19396    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
19397    (e.g., "struct") that was used.  In that case bindings that do not
19398    refer to types are ignored.
19399
19400    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
19401    ignored.
19402
19403    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
19404    are ignored.
19405
19406    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
19407    types.
19408
19409    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
19410    TREE_LIST of candidates if name-lookup results in an ambiguity, and
19411    NULL_TREE otherwise.  */
19412
19413 static tree
19414 cp_parser_lookup_name (cp_parser *parser, tree name,
19415                        enum tag_types tag_type,
19416                        bool is_template,
19417                        bool is_namespace,
19418                        bool check_dependency,
19419                        tree *ambiguous_decls,
19420                        location_t name_location)
19421 {
19422   int flags = 0;
19423   tree decl;
19424   tree object_type = parser->context->object_type;
19425
19426   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
19427     flags |= LOOKUP_COMPLAIN;
19428
19429   /* Assume that the lookup will be unambiguous.  */
19430   if (ambiguous_decls)
19431     *ambiguous_decls = NULL_TREE;
19432
19433   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
19434      no longer valid.  Note that if we are parsing tentatively, and
19435      the parse fails, OBJECT_TYPE will be automatically restored.  */
19436   parser->context->object_type = NULL_TREE;
19437
19438   if (name == error_mark_node)
19439     return error_mark_node;
19440
19441   /* A template-id has already been resolved; there is no lookup to
19442      do.  */
19443   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
19444     return name;
19445   if (BASELINK_P (name))
19446     {
19447       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
19448                   == TEMPLATE_ID_EXPR);
19449       return name;
19450     }
19451
19452   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
19453      it should already have been checked to make sure that the name
19454      used matches the type being destroyed.  */
19455   if (TREE_CODE (name) == BIT_NOT_EXPR)
19456     {
19457       tree type;
19458
19459       /* Figure out to which type this destructor applies.  */
19460       if (parser->scope)
19461         type = parser->scope;
19462       else if (object_type)
19463         type = object_type;
19464       else
19465         type = current_class_type;
19466       /* If that's not a class type, there is no destructor.  */
19467       if (!type || !CLASS_TYPE_P (type))
19468         return error_mark_node;
19469       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
19470         lazily_declare_fn (sfk_destructor, type);
19471       if (!CLASSTYPE_DESTRUCTORS (type))
19472           return error_mark_node;
19473       /* If it was a class type, return the destructor.  */
19474       return CLASSTYPE_DESTRUCTORS (type);
19475     }
19476
19477   /* By this point, the NAME should be an ordinary identifier.  If
19478      the id-expression was a qualified name, the qualifying scope is
19479      stored in PARSER->SCOPE at this point.  */
19480   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
19481
19482   /* Perform the lookup.  */
19483   if (parser->scope)
19484     {
19485       bool dependent_p;
19486
19487       if (parser->scope == error_mark_node)
19488         return error_mark_node;
19489
19490       /* If the SCOPE is dependent, the lookup must be deferred until
19491          the template is instantiated -- unless we are explicitly
19492          looking up names in uninstantiated templates.  Even then, we
19493          cannot look up the name if the scope is not a class type; it
19494          might, for example, be a template type parameter.  */
19495       dependent_p = (TYPE_P (parser->scope)
19496                      && dependent_scope_p (parser->scope));
19497       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
19498           && dependent_p)
19499         /* Defer lookup.  */
19500         decl = error_mark_node;
19501       else
19502         {
19503           tree pushed_scope = NULL_TREE;
19504
19505           /* If PARSER->SCOPE is a dependent type, then it must be a
19506              class type, and we must not be checking dependencies;
19507              otherwise, we would have processed this lookup above.  So
19508              that PARSER->SCOPE is not considered a dependent base by
19509              lookup_member, we must enter the scope here.  */
19510           if (dependent_p)
19511             pushed_scope = push_scope (parser->scope);
19512
19513           /* If the PARSER->SCOPE is a template specialization, it
19514              may be instantiated during name lookup.  In that case,
19515              errors may be issued.  Even if we rollback the current
19516              tentative parse, those errors are valid.  */
19517           decl = lookup_qualified_name (parser->scope, name,
19518                                         tag_type != none_type,
19519                                         /*complain=*/true);
19520
19521           /* 3.4.3.1: In a lookup in which the constructor is an acceptable
19522              lookup result and the nested-name-specifier nominates a class C:
19523                * if the name specified after the nested-name-specifier, when
19524                looked up in C, is the injected-class-name of C (Clause 9), or
19525                * if the name specified after the nested-name-specifier is the
19526                same as the identifier or the simple-template-id's template-
19527                name in the last component of the nested-name-specifier,
19528              the name is instead considered to name the constructor of
19529              class C. [ Note: for example, the constructor is not an
19530              acceptable lookup result in an elaborated-type-specifier so
19531              the constructor would not be used in place of the
19532              injected-class-name. --end note ] Such a constructor name
19533              shall be used only in the declarator-id of a declaration that
19534              names a constructor or in a using-declaration.  */
19535           if (tag_type == none_type
19536               && DECL_SELF_REFERENCE_P (decl)
19537               && same_type_p (DECL_CONTEXT (decl), parser->scope))
19538             decl = lookup_qualified_name (parser->scope, ctor_identifier,
19539                                           tag_type != none_type,
19540                                           /*complain=*/true);
19541
19542           /* If we have a single function from a using decl, pull it out.  */
19543           if (TREE_CODE (decl) == OVERLOAD
19544               && !really_overloaded_fn (decl))
19545             decl = OVL_FUNCTION (decl);
19546
19547           if (pushed_scope)
19548             pop_scope (pushed_scope);
19549         }
19550
19551       /* If the scope is a dependent type and either we deferred lookup or
19552          we did lookup but didn't find the name, rememeber the name.  */
19553       if (decl == error_mark_node && TYPE_P (parser->scope)
19554           && dependent_type_p (parser->scope))
19555         {
19556           if (tag_type)
19557             {
19558               tree type;
19559
19560               /* The resolution to Core Issue 180 says that `struct
19561                  A::B' should be considered a type-name, even if `A'
19562                  is dependent.  */
19563               type = make_typename_type (parser->scope, name, tag_type,
19564                                          /*complain=*/tf_error);
19565               decl = TYPE_NAME (type);
19566             }
19567           else if (is_template
19568                    && (cp_parser_next_token_ends_template_argument_p (parser)
19569                        || cp_lexer_next_token_is (parser->lexer,
19570                                                   CPP_CLOSE_PAREN)))
19571             decl = make_unbound_class_template (parser->scope,
19572                                                 name, NULL_TREE,
19573                                                 /*complain=*/tf_error);
19574           else
19575             decl = build_qualified_name (/*type=*/NULL_TREE,
19576                                          parser->scope, name,
19577                                          is_template);
19578         }
19579       parser->qualifying_scope = parser->scope;
19580       parser->object_scope = NULL_TREE;
19581     }
19582   else if (object_type)
19583     {
19584       tree object_decl = NULL_TREE;
19585       /* Look up the name in the scope of the OBJECT_TYPE, unless the
19586          OBJECT_TYPE is not a class.  */
19587       if (CLASS_TYPE_P (object_type))
19588         /* If the OBJECT_TYPE is a template specialization, it may
19589            be instantiated during name lookup.  In that case, errors
19590            may be issued.  Even if we rollback the current tentative
19591            parse, those errors are valid.  */
19592         object_decl = lookup_member (object_type,
19593                                      name,
19594                                      /*protect=*/0,
19595                                      tag_type != none_type);
19596       /* Look it up in the enclosing context, too.  */
19597       decl = lookup_name_real (name, tag_type != none_type,
19598                                /*nonclass=*/0,
19599                                /*block_p=*/true, is_namespace, flags);
19600       parser->object_scope = object_type;
19601       parser->qualifying_scope = NULL_TREE;
19602       if (object_decl)
19603         decl = object_decl;
19604     }
19605   else
19606     {
19607       decl = lookup_name_real (name, tag_type != none_type,
19608                                /*nonclass=*/0,
19609                                /*block_p=*/true, is_namespace, flags);
19610       parser->qualifying_scope = NULL_TREE;
19611       parser->object_scope = NULL_TREE;
19612     }
19613
19614   /* If the lookup failed, let our caller know.  */
19615   if (!decl || decl == error_mark_node)
19616     return error_mark_node;
19617
19618   /* Pull out the template from an injected-class-name (or multiple).  */
19619   if (is_template)
19620     decl = maybe_get_template_decl_from_type_decl (decl);
19621
19622   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
19623   if (TREE_CODE (decl) == TREE_LIST)
19624     {
19625       if (ambiguous_decls)
19626         *ambiguous_decls = decl;
19627       /* The error message we have to print is too complicated for
19628          cp_parser_error, so we incorporate its actions directly.  */
19629       if (!cp_parser_simulate_error (parser))
19630         {
19631           error_at (name_location, "reference to %qD is ambiguous",
19632                     name);
19633           print_candidates (decl);
19634         }
19635       return error_mark_node;
19636     }
19637
19638   gcc_assert (DECL_P (decl)
19639               || TREE_CODE (decl) == OVERLOAD
19640               || TREE_CODE (decl) == SCOPE_REF
19641               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
19642               || BASELINK_P (decl));
19643
19644   /* If we have resolved the name of a member declaration, check to
19645      see if the declaration is accessible.  When the name resolves to
19646      set of overloaded functions, accessibility is checked when
19647      overload resolution is done.
19648
19649      During an explicit instantiation, access is not checked at all,
19650      as per [temp.explicit].  */
19651   if (DECL_P (decl))
19652     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
19653
19654   maybe_record_typedef_use (decl);
19655
19656   return decl;
19657 }
19658
19659 /* Like cp_parser_lookup_name, but for use in the typical case where
19660    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
19661    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
19662
19663 static tree
19664 cp_parser_lookup_name_simple (cp_parser* parser, tree name, location_t location)
19665 {
19666   return cp_parser_lookup_name (parser, name,
19667                                 none_type,
19668                                 /*is_template=*/false,
19669                                 /*is_namespace=*/false,
19670                                 /*check_dependency=*/true,
19671                                 /*ambiguous_decls=*/NULL,
19672                                 location);
19673 }
19674
19675 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
19676    the current context, return the TYPE_DECL.  If TAG_NAME_P is
19677    true, the DECL indicates the class being defined in a class-head,
19678    or declared in an elaborated-type-specifier.
19679
19680    Otherwise, return DECL.  */
19681
19682 static tree
19683 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
19684 {
19685   /* If the TEMPLATE_DECL is being declared as part of a class-head,
19686      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
19687
19688        struct A {
19689          template <typename T> struct B;
19690        };
19691
19692        template <typename T> struct A::B {};
19693
19694      Similarly, in an elaborated-type-specifier:
19695
19696        namespace N { struct X{}; }
19697
19698        struct A {
19699          template <typename T> friend struct N::X;
19700        };
19701
19702      However, if the DECL refers to a class type, and we are in
19703      the scope of the class, then the name lookup automatically
19704      finds the TYPE_DECL created by build_self_reference rather
19705      than a TEMPLATE_DECL.  For example, in:
19706
19707        template <class T> struct S {
19708          S s;
19709        };
19710
19711      there is no need to handle such case.  */
19712
19713   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
19714     return DECL_TEMPLATE_RESULT (decl);
19715
19716   return decl;
19717 }
19718
19719 /* If too many, or too few, template-parameter lists apply to the
19720    declarator, issue an error message.  Returns TRUE if all went well,
19721    and FALSE otherwise.  */
19722
19723 static bool
19724 cp_parser_check_declarator_template_parameters (cp_parser* parser,
19725                                                 cp_declarator *declarator,
19726                                                 location_t declarator_location)
19727 {
19728   unsigned num_templates;
19729
19730   /* We haven't seen any classes that involve template parameters yet.  */
19731   num_templates = 0;
19732
19733   switch (declarator->kind)
19734     {
19735     case cdk_id:
19736       if (declarator->u.id.qualifying_scope)
19737         {
19738           tree scope;
19739
19740           scope = declarator->u.id.qualifying_scope;
19741
19742           while (scope && CLASS_TYPE_P (scope))
19743             {
19744               /* You're supposed to have one `template <...>'
19745                  for every template class, but you don't need one
19746                  for a full specialization.  For example:
19747
19748                  template <class T> struct S{};
19749                  template <> struct S<int> { void f(); };
19750                  void S<int>::f () {}
19751
19752                  is correct; there shouldn't be a `template <>' for
19753                  the definition of `S<int>::f'.  */
19754               if (!CLASSTYPE_TEMPLATE_INFO (scope))
19755                 /* If SCOPE does not have template information of any
19756                    kind, then it is not a template, nor is it nested
19757                    within a template.  */
19758                 break;
19759               if (explicit_class_specialization_p (scope))
19760                 break;
19761               if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
19762                 ++num_templates;
19763
19764               scope = TYPE_CONTEXT (scope);
19765             }
19766         }
19767       else if (TREE_CODE (declarator->u.id.unqualified_name)
19768                == TEMPLATE_ID_EXPR)
19769         /* If the DECLARATOR has the form `X<y>' then it uses one
19770            additional level of template parameters.  */
19771         ++num_templates;
19772
19773       return cp_parser_check_template_parameters 
19774         (parser, num_templates, declarator_location, declarator);
19775
19776
19777     case cdk_function:
19778     case cdk_array:
19779     case cdk_pointer:
19780     case cdk_reference:
19781     case cdk_ptrmem:
19782       return (cp_parser_check_declarator_template_parameters
19783               (parser, declarator->declarator, declarator_location));
19784
19785     case cdk_error:
19786       return true;
19787
19788     default:
19789       gcc_unreachable ();
19790     }
19791   return false;
19792 }
19793
19794 /* NUM_TEMPLATES were used in the current declaration.  If that is
19795    invalid, return FALSE and issue an error messages.  Otherwise,
19796    return TRUE.  If DECLARATOR is non-NULL, then we are checking a
19797    declarator and we can print more accurate diagnostics.  */
19798
19799 static bool
19800 cp_parser_check_template_parameters (cp_parser* parser,
19801                                      unsigned num_templates,
19802                                      location_t location,
19803                                      cp_declarator *declarator)
19804 {
19805   /* If there are the same number of template classes and parameter
19806      lists, that's OK.  */
19807   if (parser->num_template_parameter_lists == num_templates)
19808     return true;
19809   /* If there are more, but only one more, then we are referring to a
19810      member template.  That's OK too.  */
19811   if (parser->num_template_parameter_lists == num_templates + 1)
19812     return true;
19813   /* If there are more template classes than parameter lists, we have
19814      something like:
19815
19816        template <class T> void S<T>::R<T>::f ();  */
19817   if (parser->num_template_parameter_lists < num_templates)
19818     {
19819       if (declarator && !current_function_decl)
19820         error_at (location, "specializing member %<%T::%E%> "
19821                   "requires %<template<>%> syntax", 
19822                   declarator->u.id.qualifying_scope,
19823                   declarator->u.id.unqualified_name);
19824       else if (declarator)
19825         error_at (location, "invalid declaration of %<%T::%E%>",
19826                   declarator->u.id.qualifying_scope,
19827                   declarator->u.id.unqualified_name);
19828       else 
19829         error_at (location, "too few template-parameter-lists");
19830       return false;
19831     }
19832   /* Otherwise, there are too many template parameter lists.  We have
19833      something like:
19834
19835      template <class T> template <class U> void S::f();  */
19836   error_at (location, "too many template-parameter-lists");
19837   return false;
19838 }
19839
19840 /* Parse an optional `::' token indicating that the following name is
19841    from the global namespace.  If so, PARSER->SCOPE is set to the
19842    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
19843    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
19844    Returns the new value of PARSER->SCOPE, if the `::' token is
19845    present, and NULL_TREE otherwise.  */
19846
19847 static tree
19848 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
19849 {
19850   cp_token *token;
19851
19852   /* Peek at the next token.  */
19853   token = cp_lexer_peek_token (parser->lexer);
19854   /* If we're looking at a `::' token then we're starting from the
19855      global namespace, not our current location.  */
19856   if (token->type == CPP_SCOPE)
19857     {
19858       /* Consume the `::' token.  */
19859       cp_lexer_consume_token (parser->lexer);
19860       /* Set the SCOPE so that we know where to start the lookup.  */
19861       parser->scope = global_namespace;
19862       parser->qualifying_scope = global_namespace;
19863       parser->object_scope = NULL_TREE;
19864
19865       return parser->scope;
19866     }
19867   else if (!current_scope_valid_p)
19868     {
19869       parser->scope = NULL_TREE;
19870       parser->qualifying_scope = NULL_TREE;
19871       parser->object_scope = NULL_TREE;
19872     }
19873
19874   return NULL_TREE;
19875 }
19876
19877 /* Returns TRUE if the upcoming token sequence is the start of a
19878    constructor declarator.  If FRIEND_P is true, the declarator is
19879    preceded by the `friend' specifier.  */
19880
19881 static bool
19882 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
19883 {
19884   bool constructor_p;
19885   tree nested_name_specifier;
19886   cp_token *next_token;
19887
19888   /* The common case is that this is not a constructor declarator, so
19889      try to avoid doing lots of work if at all possible.  It's not
19890      valid declare a constructor at function scope.  */
19891   if (parser->in_function_body)
19892     return false;
19893   /* And only certain tokens can begin a constructor declarator.  */
19894   next_token = cp_lexer_peek_token (parser->lexer);
19895   if (next_token->type != CPP_NAME
19896       && next_token->type != CPP_SCOPE
19897       && next_token->type != CPP_NESTED_NAME_SPECIFIER
19898       && next_token->type != CPP_TEMPLATE_ID)
19899     return false;
19900
19901   /* Parse tentatively; we are going to roll back all of the tokens
19902      consumed here.  */
19903   cp_parser_parse_tentatively (parser);
19904   /* Assume that we are looking at a constructor declarator.  */
19905   constructor_p = true;
19906
19907   /* Look for the optional `::' operator.  */
19908   cp_parser_global_scope_opt (parser,
19909                               /*current_scope_valid_p=*/false);
19910   /* Look for the nested-name-specifier.  */
19911   nested_name_specifier
19912     = (cp_parser_nested_name_specifier_opt (parser,
19913                                             /*typename_keyword_p=*/false,
19914                                             /*check_dependency_p=*/false,
19915                                             /*type_p=*/false,
19916                                             /*is_declaration=*/false));
19917   /* Outside of a class-specifier, there must be a
19918      nested-name-specifier.  */
19919   if (!nested_name_specifier &&
19920       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
19921        || friend_p))
19922     constructor_p = false;
19923   else if (nested_name_specifier == error_mark_node)
19924     constructor_p = false;
19925
19926   /* If we have a class scope, this is easy; DR 147 says that S::S always
19927      names the constructor, and no other qualified name could.  */
19928   if (constructor_p && nested_name_specifier
19929       && CLASS_TYPE_P (nested_name_specifier))
19930     {
19931       tree id = cp_parser_unqualified_id (parser,
19932                                           /*template_keyword_p=*/false,
19933                                           /*check_dependency_p=*/false,
19934                                           /*declarator_p=*/true,
19935                                           /*optional_p=*/false);
19936       if (is_overloaded_fn (id))
19937         id = DECL_NAME (get_first_fn (id));
19938       if (!constructor_name_p (id, nested_name_specifier))
19939         constructor_p = false;
19940     }
19941   /* If we still think that this might be a constructor-declarator,
19942      look for a class-name.  */
19943   else if (constructor_p)
19944     {
19945       /* If we have:
19946
19947            template <typename T> struct S {
19948              S();
19949            };
19950
19951          we must recognize that the nested `S' names a class.  */
19952       tree type_decl;
19953       type_decl = cp_parser_class_name (parser,
19954                                         /*typename_keyword_p=*/false,
19955                                         /*template_keyword_p=*/false,
19956                                         none_type,
19957                                         /*check_dependency_p=*/false,
19958                                         /*class_head_p=*/false,
19959                                         /*is_declaration=*/false);
19960       /* If there was no class-name, then this is not a constructor.  */
19961       constructor_p = !cp_parser_error_occurred (parser);
19962
19963       /* If we're still considering a constructor, we have to see a `(',
19964          to begin the parameter-declaration-clause, followed by either a
19965          `)', an `...', or a decl-specifier.  We need to check for a
19966          type-specifier to avoid being fooled into thinking that:
19967
19968            S (f) (int);
19969
19970          is a constructor.  (It is actually a function named `f' that
19971          takes one parameter (of type `int') and returns a value of type
19972          `S'.  */
19973       if (constructor_p
19974           && !cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
19975         constructor_p = false;
19976
19977       if (constructor_p
19978           && cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
19979           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
19980           /* A parameter declaration begins with a decl-specifier,
19981              which is either the "attribute" keyword, a storage class
19982              specifier, or (usually) a type-specifier.  */
19983           && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
19984         {
19985           tree type;
19986           tree pushed_scope = NULL_TREE;
19987           unsigned saved_num_template_parameter_lists;
19988
19989           /* Names appearing in the type-specifier should be looked up
19990              in the scope of the class.  */
19991           if (current_class_type)
19992             type = NULL_TREE;
19993           else
19994             {
19995               type = TREE_TYPE (type_decl);
19996               if (TREE_CODE (type) == TYPENAME_TYPE)
19997                 {
19998                   type = resolve_typename_type (type,
19999                                                 /*only_current_p=*/false);
20000                   if (TREE_CODE (type) == TYPENAME_TYPE)
20001                     {
20002                       cp_parser_abort_tentative_parse (parser);
20003                       return false;
20004                     }
20005                 }
20006               pushed_scope = push_scope (type);
20007             }
20008
20009           /* Inside the constructor parameter list, surrounding
20010              template-parameter-lists do not apply.  */
20011           saved_num_template_parameter_lists
20012             = parser->num_template_parameter_lists;
20013           parser->num_template_parameter_lists = 0;
20014
20015           /* Look for the type-specifier.  */
20016           cp_parser_type_specifier (parser,
20017                                     CP_PARSER_FLAGS_NONE,
20018                                     /*decl_specs=*/NULL,
20019                                     /*is_declarator=*/true,
20020                                     /*declares_class_or_enum=*/NULL,
20021                                     /*is_cv_qualifier=*/NULL);
20022
20023           parser->num_template_parameter_lists
20024             = saved_num_template_parameter_lists;
20025
20026           /* Leave the scope of the class.  */
20027           if (pushed_scope)
20028             pop_scope (pushed_scope);
20029
20030           constructor_p = !cp_parser_error_occurred (parser);
20031         }
20032     }
20033
20034   /* We did not really want to consume any tokens.  */
20035   cp_parser_abort_tentative_parse (parser);
20036
20037   return constructor_p;
20038 }
20039
20040 /* Parse the definition of the function given by the DECL_SPECIFIERS,
20041    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
20042    they must be performed once we are in the scope of the function.
20043
20044    Returns the function defined.  */
20045
20046 static tree
20047 cp_parser_function_definition_from_specifiers_and_declarator
20048   (cp_parser* parser,
20049    cp_decl_specifier_seq *decl_specifiers,
20050    tree attributes,
20051    const cp_declarator *declarator)
20052 {
20053   tree fn;
20054   bool success_p;
20055
20056   /* Begin the function-definition.  */
20057   success_p = start_function (decl_specifiers, declarator, attributes);
20058
20059   /* The things we're about to see are not directly qualified by any
20060      template headers we've seen thus far.  */
20061   reset_specialization ();
20062
20063   /* If there were names looked up in the decl-specifier-seq that we
20064      did not check, check them now.  We must wait until we are in the
20065      scope of the function to perform the checks, since the function
20066      might be a friend.  */
20067   perform_deferred_access_checks ();
20068
20069   if (!success_p)
20070     {
20071       /* Skip the entire function.  */
20072       cp_parser_skip_to_end_of_block_or_statement (parser);
20073       fn = error_mark_node;
20074     }
20075   else if (DECL_INITIAL (current_function_decl) != error_mark_node)
20076     {
20077       /* Seen already, skip it.  An error message has already been output.  */
20078       cp_parser_skip_to_end_of_block_or_statement (parser);
20079       fn = current_function_decl;
20080       current_function_decl = NULL_TREE;
20081       /* If this is a function from a class, pop the nested class.  */
20082       if (current_class_name)
20083         pop_nested_class ();
20084     }
20085   else
20086     {
20087       timevar_id_t tv;
20088       if (DECL_DECLARED_INLINE_P (current_function_decl))
20089         tv = TV_PARSE_INLINE;
20090       else
20091         tv = TV_PARSE_FUNC;
20092       timevar_push (tv);
20093       fn = cp_parser_function_definition_after_declarator (parser,
20094                                                          /*inline_p=*/false);
20095       timevar_pop (tv);
20096     }
20097
20098   return fn;
20099 }
20100
20101 /* Parse the part of a function-definition that follows the
20102    declarator.  INLINE_P is TRUE iff this function is an inline
20103    function defined within a class-specifier.
20104
20105    Returns the function defined.  */
20106
20107 static tree
20108 cp_parser_function_definition_after_declarator (cp_parser* parser,
20109                                                 bool inline_p)
20110 {
20111   tree fn;
20112   bool ctor_initializer_p = false;
20113   bool saved_in_unbraced_linkage_specification_p;
20114   bool saved_in_function_body;
20115   unsigned saved_num_template_parameter_lists;
20116   cp_token *token;
20117
20118   saved_in_function_body = parser->in_function_body;
20119   parser->in_function_body = true;
20120   /* If the next token is `return', then the code may be trying to
20121      make use of the "named return value" extension that G++ used to
20122      support.  */
20123   token = cp_lexer_peek_token (parser->lexer);
20124   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
20125     {
20126       /* Consume the `return' keyword.  */
20127       cp_lexer_consume_token (parser->lexer);
20128       /* Look for the identifier that indicates what value is to be
20129          returned.  */
20130       cp_parser_identifier (parser);
20131       /* Issue an error message.  */
20132       error_at (token->location,
20133                 "named return values are no longer supported");
20134       /* Skip tokens until we reach the start of the function body.  */
20135       while (true)
20136         {
20137           cp_token *token = cp_lexer_peek_token (parser->lexer);
20138           if (token->type == CPP_OPEN_BRACE
20139               || token->type == CPP_EOF
20140               || token->type == CPP_PRAGMA_EOL)
20141             break;
20142           cp_lexer_consume_token (parser->lexer);
20143         }
20144     }
20145   /* The `extern' in `extern "C" void f () { ... }' does not apply to
20146      anything declared inside `f'.  */
20147   saved_in_unbraced_linkage_specification_p
20148     = parser->in_unbraced_linkage_specification_p;
20149   parser->in_unbraced_linkage_specification_p = false;
20150   /* Inside the function, surrounding template-parameter-lists do not
20151      apply.  */
20152   saved_num_template_parameter_lists
20153     = parser->num_template_parameter_lists;
20154   parser->num_template_parameter_lists = 0;
20155
20156   start_lambda_scope (current_function_decl);
20157
20158   /* If the next token is `try', then we are looking at a
20159      function-try-block.  */
20160   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
20161     ctor_initializer_p = cp_parser_function_try_block (parser);
20162   /* A function-try-block includes the function-body, so we only do
20163      this next part if we're not processing a function-try-block.  */
20164   else
20165     ctor_initializer_p
20166       = cp_parser_ctor_initializer_opt_and_function_body (parser);
20167
20168   finish_lambda_scope ();
20169
20170   /* Finish the function.  */
20171   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
20172                         (inline_p ? 2 : 0));
20173   /* Generate code for it, if necessary.  */
20174   expand_or_defer_fn (fn);
20175   /* Restore the saved values.  */
20176   parser->in_unbraced_linkage_specification_p
20177     = saved_in_unbraced_linkage_specification_p;
20178   parser->num_template_parameter_lists
20179     = saved_num_template_parameter_lists;
20180   parser->in_function_body = saved_in_function_body;
20181
20182   return fn;
20183 }
20184
20185 /* Parse a template-declaration, assuming that the `export' (and
20186    `extern') keywords, if present, has already been scanned.  MEMBER_P
20187    is as for cp_parser_template_declaration.  */
20188
20189 static void
20190 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
20191 {
20192   tree decl = NULL_TREE;
20193   VEC (deferred_access_check,gc) *checks;
20194   tree parameter_list;
20195   bool friend_p = false;
20196   bool need_lang_pop;
20197   cp_token *token;
20198
20199   /* Look for the `template' keyword.  */
20200   token = cp_lexer_peek_token (parser->lexer);
20201   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE))
20202     return;
20203
20204   /* And the `<'.  */
20205   if (!cp_parser_require (parser, CPP_LESS, RT_LESS))
20206     return;
20207   if (at_class_scope_p () && current_function_decl)
20208     {
20209       /* 14.5.2.2 [temp.mem]
20210
20211          A local class shall not have member templates.  */
20212       error_at (token->location,
20213                 "invalid declaration of member template in local class");
20214       cp_parser_skip_to_end_of_block_or_statement (parser);
20215       return;
20216     }
20217   /* [temp]
20218
20219      A template ... shall not have C linkage.  */
20220   if (current_lang_name == lang_name_c)
20221     {
20222       error_at (token->location, "template with C linkage");
20223       /* Give it C++ linkage to avoid confusing other parts of the
20224          front end.  */
20225       push_lang_context (lang_name_cplusplus);
20226       need_lang_pop = true;
20227     }
20228   else
20229     need_lang_pop = false;
20230
20231   /* We cannot perform access checks on the template parameter
20232      declarations until we know what is being declared, just as we
20233      cannot check the decl-specifier list.  */
20234   push_deferring_access_checks (dk_deferred);
20235
20236   /* If the next token is `>', then we have an invalid
20237      specialization.  Rather than complain about an invalid template
20238      parameter, issue an error message here.  */
20239   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
20240     {
20241       cp_parser_error (parser, "invalid explicit specialization");
20242       begin_specialization ();
20243       parameter_list = NULL_TREE;
20244     }
20245   else
20246     {
20247       /* Parse the template parameters.  */
20248       parameter_list = cp_parser_template_parameter_list (parser);
20249       fixup_template_parms ();
20250     }
20251
20252   /* Get the deferred access checks from the parameter list.  These
20253      will be checked once we know what is being declared, as for a
20254      member template the checks must be performed in the scope of the
20255      class containing the member.  */
20256   checks = get_deferred_access_checks ();
20257
20258   /* Look for the `>'.  */
20259   cp_parser_skip_to_end_of_template_parameter_list (parser);
20260   /* We just processed one more parameter list.  */
20261   ++parser->num_template_parameter_lists;
20262   /* If the next token is `template', there are more template
20263      parameters.  */
20264   if (cp_lexer_next_token_is_keyword (parser->lexer,
20265                                       RID_TEMPLATE))
20266     cp_parser_template_declaration_after_export (parser, member_p);
20267   else
20268     {
20269       /* There are no access checks when parsing a template, as we do not
20270          know if a specialization will be a friend.  */
20271       push_deferring_access_checks (dk_no_check);
20272       token = cp_lexer_peek_token (parser->lexer);
20273       decl = cp_parser_single_declaration (parser,
20274                                            checks,
20275                                            member_p,
20276                                            /*explicit_specialization_p=*/false,
20277                                            &friend_p);
20278       pop_deferring_access_checks ();
20279
20280       /* If this is a member template declaration, let the front
20281          end know.  */
20282       if (member_p && !friend_p && decl)
20283         {
20284           if (TREE_CODE (decl) == TYPE_DECL)
20285             cp_parser_check_access_in_redeclaration (decl, token->location);
20286
20287           decl = finish_member_template_decl (decl);
20288         }
20289       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
20290         make_friend_class (current_class_type, TREE_TYPE (decl),
20291                            /*complain=*/true);
20292     }
20293   /* We are done with the current parameter list.  */
20294   --parser->num_template_parameter_lists;
20295
20296   pop_deferring_access_checks ();
20297
20298   /* Finish up.  */
20299   finish_template_decl (parameter_list);
20300
20301   /* Register member declarations.  */
20302   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
20303     finish_member_declaration (decl);
20304   /* For the erroneous case of a template with C linkage, we pushed an
20305      implicit C++ linkage scope; exit that scope now.  */
20306   if (need_lang_pop)
20307     pop_lang_context ();
20308   /* If DECL is a function template, we must return to parse it later.
20309      (Even though there is no definition, there might be default
20310      arguments that need handling.)  */
20311   if (member_p && decl
20312       && (TREE_CODE (decl) == FUNCTION_DECL
20313           || DECL_FUNCTION_TEMPLATE_P (decl)))
20314     VEC_safe_push (tree, gc, unparsed_funs_with_definitions, decl);
20315 }
20316
20317 /* Perform the deferred access checks from a template-parameter-list.
20318    CHECKS is a TREE_LIST of access checks, as returned by
20319    get_deferred_access_checks.  */
20320
20321 static void
20322 cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
20323 {
20324   ++processing_template_parmlist;
20325   perform_access_checks (checks);
20326   --processing_template_parmlist;
20327 }
20328
20329 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
20330    `function-definition' sequence.  MEMBER_P is true, this declaration
20331    appears in a class scope.
20332
20333    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
20334    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
20335
20336 static tree
20337 cp_parser_single_declaration (cp_parser* parser,
20338                               VEC (deferred_access_check,gc)* checks,
20339                               bool member_p,
20340                               bool explicit_specialization_p,
20341                               bool* friend_p)
20342 {
20343   int declares_class_or_enum;
20344   tree decl = NULL_TREE;
20345   cp_decl_specifier_seq decl_specifiers;
20346   bool function_definition_p = false;
20347   cp_token *decl_spec_token_start;
20348
20349   /* This function is only used when processing a template
20350      declaration.  */
20351   gcc_assert (innermost_scope_kind () == sk_template_parms
20352               || innermost_scope_kind () == sk_template_spec);
20353
20354   /* Defer access checks until we know what is being declared.  */
20355   push_deferring_access_checks (dk_deferred);
20356
20357   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
20358      alternative.  */
20359   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
20360   cp_parser_decl_specifier_seq (parser,
20361                                 CP_PARSER_FLAGS_OPTIONAL,
20362                                 &decl_specifiers,
20363                                 &declares_class_or_enum);
20364   if (friend_p)
20365     *friend_p = cp_parser_friend_p (&decl_specifiers);
20366
20367   /* There are no template typedefs.  */
20368   if (decl_specifiers.specs[(int) ds_typedef])
20369     {
20370       error_at (decl_spec_token_start->location,
20371                 "template declaration of %<typedef%>");
20372       decl = error_mark_node;
20373     }
20374
20375   /* Gather up the access checks that occurred the
20376      decl-specifier-seq.  */
20377   stop_deferring_access_checks ();
20378
20379   /* Check for the declaration of a template class.  */
20380   if (declares_class_or_enum)
20381     {
20382       if (cp_parser_declares_only_class_p (parser))
20383         {
20384           decl = shadow_tag (&decl_specifiers);
20385
20386           /* In this case:
20387
20388                struct C {
20389                  friend template <typename T> struct A<T>::B;
20390                };
20391
20392              A<T>::B will be represented by a TYPENAME_TYPE, and
20393              therefore not recognized by shadow_tag.  */
20394           if (friend_p && *friend_p
20395               && !decl
20396               && decl_specifiers.type
20397               && TYPE_P (decl_specifiers.type))
20398             decl = decl_specifiers.type;
20399
20400           if (decl && decl != error_mark_node)
20401             decl = TYPE_NAME (decl);
20402           else
20403             decl = error_mark_node;
20404
20405           /* Perform access checks for template parameters.  */
20406           cp_parser_perform_template_parameter_access_checks (checks);
20407         }
20408     }
20409
20410   /* Complain about missing 'typename' or other invalid type names.  */
20411   if (!decl_specifiers.any_type_specifiers_p
20412       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
20413     {
20414       /* cp_parser_parse_and_diagnose_invalid_type_name calls
20415          cp_parser_skip_to_end_of_block_or_statement, so don't try to parse
20416          the rest of this declaration.  */
20417       decl = error_mark_node;
20418       goto out;
20419     }
20420
20421   /* If it's not a template class, try for a template function.  If
20422      the next token is a `;', then this declaration does not declare
20423      anything.  But, if there were errors in the decl-specifiers, then
20424      the error might well have come from an attempted class-specifier.
20425      In that case, there's no need to warn about a missing declarator.  */
20426   if (!decl
20427       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
20428           || decl_specifiers.type != error_mark_node))
20429     {
20430       decl = cp_parser_init_declarator (parser,
20431                                         &decl_specifiers,
20432                                         checks,
20433                                         /*function_definition_allowed_p=*/true,
20434                                         member_p,
20435                                         declares_class_or_enum,
20436                                         &function_definition_p,
20437                                         NULL);
20438
20439     /* 7.1.1-1 [dcl.stc]
20440
20441        A storage-class-specifier shall not be specified in an explicit
20442        specialization...  */
20443     if (decl
20444         && explicit_specialization_p
20445         && decl_specifiers.storage_class != sc_none)
20446       {
20447         error_at (decl_spec_token_start->location,
20448                   "explicit template specialization cannot have a storage class");
20449         decl = error_mark_node;
20450       }
20451     }
20452
20453   /* Look for a trailing `;' after the declaration.  */
20454   if (!function_definition_p
20455       && (decl == error_mark_node
20456           || !cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON)))
20457     cp_parser_skip_to_end_of_block_or_statement (parser);
20458
20459  out:
20460   pop_deferring_access_checks ();
20461
20462   /* Clear any current qualification; whatever comes next is the start
20463      of something new.  */
20464   parser->scope = NULL_TREE;
20465   parser->qualifying_scope = NULL_TREE;
20466   parser->object_scope = NULL_TREE;
20467
20468   return decl;
20469 }
20470
20471 /* Parse a cast-expression that is not the operand of a unary "&".  */
20472
20473 static tree
20474 cp_parser_simple_cast_expression (cp_parser *parser)
20475 {
20476   return cp_parser_cast_expression (parser, /*address_p=*/false,
20477                                     /*cast_p=*/false, NULL);
20478 }
20479
20480 /* Parse a functional cast to TYPE.  Returns an expression
20481    representing the cast.  */
20482
20483 static tree
20484 cp_parser_functional_cast (cp_parser* parser, tree type)
20485 {
20486   VEC(tree,gc) *vec;
20487   tree expression_list;
20488   tree cast;
20489   bool nonconst_p;
20490
20491   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
20492     {
20493       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
20494       expression_list = cp_parser_braced_list (parser, &nonconst_p);
20495       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
20496       if (TREE_CODE (type) == TYPE_DECL)
20497         type = TREE_TYPE (type);
20498       return finish_compound_literal (type, expression_list,
20499                                       tf_warning_or_error);
20500     }
20501
20502
20503   vec = cp_parser_parenthesized_expression_list (parser, non_attr,
20504                                                  /*cast_p=*/true,
20505                                                  /*allow_expansion_p=*/true,
20506                                                  /*non_constant_p=*/NULL);
20507   if (vec == NULL)
20508     expression_list = error_mark_node;
20509   else
20510     {
20511       expression_list = build_tree_list_vec (vec);
20512       release_tree_vector (vec);
20513     }
20514
20515   cast = build_functional_cast (type, expression_list,
20516                                 tf_warning_or_error);
20517   /* [expr.const]/1: In an integral constant expression "only type
20518      conversions to integral or enumeration type can be used".  */
20519   if (TREE_CODE (type) == TYPE_DECL)
20520     type = TREE_TYPE (type);
20521   if (cast != error_mark_node
20522       && !cast_valid_in_integral_constant_expression_p (type)
20523       && cp_parser_non_integral_constant_expression (parser,
20524                                                      NIC_CONSTRUCTOR))
20525     return error_mark_node;
20526   return cast;
20527 }
20528
20529 /* Save the tokens that make up the body of a member function defined
20530    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
20531    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
20532    specifiers applied to the declaration.  Returns the FUNCTION_DECL
20533    for the member function.  */
20534
20535 static tree
20536 cp_parser_save_member_function_body (cp_parser* parser,
20537                                      cp_decl_specifier_seq *decl_specifiers,
20538                                      cp_declarator *declarator,
20539                                      tree attributes)
20540 {
20541   cp_token *first;
20542   cp_token *last;
20543   tree fn;
20544
20545   /* Create the FUNCTION_DECL.  */
20546   fn = grokmethod (decl_specifiers, declarator, attributes);
20547   /* If something went badly wrong, bail out now.  */
20548   if (fn == error_mark_node)
20549     {
20550       /* If there's a function-body, skip it.  */
20551       if (cp_parser_token_starts_function_definition_p
20552           (cp_lexer_peek_token (parser->lexer)))
20553         cp_parser_skip_to_end_of_block_or_statement (parser);
20554       return error_mark_node;
20555     }
20556
20557   /* Remember it, if there default args to post process.  */
20558   cp_parser_save_default_args (parser, fn);
20559
20560   /* Save away the tokens that make up the body of the
20561      function.  */
20562   first = parser->lexer->next_token;
20563   /* We can have braced-init-list mem-initializers before the fn body.  */
20564   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
20565     {
20566       cp_lexer_consume_token (parser->lexer);
20567       while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
20568              && cp_lexer_next_token_is_not_keyword (parser->lexer, RID_TRY))
20569         {
20570           /* cache_group will stop after an un-nested { } pair, too.  */
20571           if (cp_parser_cache_group (parser, CPP_CLOSE_PAREN, /*depth=*/0))
20572             break;
20573
20574           /* variadic mem-inits have ... after the ')'.  */
20575           if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
20576             cp_lexer_consume_token (parser->lexer);
20577         }
20578     }
20579   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
20580   /* Handle function try blocks.  */
20581   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
20582     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
20583   last = parser->lexer->next_token;
20584
20585   /* Save away the inline definition; we will process it when the
20586      class is complete.  */
20587   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
20588   DECL_PENDING_INLINE_P (fn) = 1;
20589
20590   /* We need to know that this was defined in the class, so that
20591      friend templates are handled correctly.  */
20592   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
20593
20594   /* Add FN to the queue of functions to be parsed later.  */
20595   VEC_safe_push (tree, gc, unparsed_funs_with_definitions, fn);
20596
20597   return fn;
20598 }
20599
20600 /* Save the tokens that make up the in-class initializer for a non-static
20601    data member.  Returns a DEFAULT_ARG.  */
20602
20603 static tree
20604 cp_parser_save_nsdmi (cp_parser* parser)
20605 {
20606   /* Save away the tokens that make up the body of the
20607      function.  */
20608   cp_token *first = parser->lexer->next_token;
20609   cp_token *last;
20610   tree node;
20611
20612   cp_parser_cache_group (parser, CPP_CLOSE_PAREN, /*depth=*/0);
20613
20614   last = parser->lexer->next_token;
20615
20616   node = make_node (DEFAULT_ARG);
20617   DEFARG_TOKENS (node) = cp_token_cache_new (first, last);
20618   DEFARG_INSTANTIATIONS (node) = NULL;
20619
20620   return node;
20621 }
20622
20623
20624 /* Parse a template-argument-list, as well as the trailing ">" (but
20625    not the opening ">").  See cp_parser_template_argument_list for the
20626    return value.  */
20627
20628 static tree
20629 cp_parser_enclosed_template_argument_list (cp_parser* parser)
20630 {
20631   tree arguments;
20632   tree saved_scope;
20633   tree saved_qualifying_scope;
20634   tree saved_object_scope;
20635   bool saved_greater_than_is_operator_p;
20636   int saved_unevaluated_operand;
20637   int saved_inhibit_evaluation_warnings;
20638
20639   /* [temp.names]
20640
20641      When parsing a template-id, the first non-nested `>' is taken as
20642      the end of the template-argument-list rather than a greater-than
20643      operator.  */
20644   saved_greater_than_is_operator_p
20645     = parser->greater_than_is_operator_p;
20646   parser->greater_than_is_operator_p = false;
20647   /* Parsing the argument list may modify SCOPE, so we save it
20648      here.  */
20649   saved_scope = parser->scope;
20650   saved_qualifying_scope = parser->qualifying_scope;
20651   saved_object_scope = parser->object_scope;
20652   /* We need to evaluate the template arguments, even though this
20653      template-id may be nested within a "sizeof".  */
20654   saved_unevaluated_operand = cp_unevaluated_operand;
20655   cp_unevaluated_operand = 0;
20656   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
20657   c_inhibit_evaluation_warnings = 0;
20658   /* Parse the template-argument-list itself.  */
20659   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER)
20660       || cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
20661     arguments = NULL_TREE;
20662   else
20663     arguments = cp_parser_template_argument_list (parser);
20664   /* Look for the `>' that ends the template-argument-list. If we find
20665      a '>>' instead, it's probably just a typo.  */
20666   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
20667     {
20668       if (cxx_dialect != cxx98)
20669         {
20670           /* In C++0x, a `>>' in a template argument list or cast
20671              expression is considered to be two separate `>'
20672              tokens. So, change the current token to a `>', but don't
20673              consume it: it will be consumed later when the outer
20674              template argument list (or cast expression) is parsed.
20675              Note that this replacement of `>' for `>>' is necessary
20676              even if we are parsing tentatively: in the tentative
20677              case, after calling
20678              cp_parser_enclosed_template_argument_list we will always
20679              throw away all of the template arguments and the first
20680              closing `>', either because the template argument list
20681              was erroneous or because we are replacing those tokens
20682              with a CPP_TEMPLATE_ID token.  The second `>' (which will
20683              not have been thrown away) is needed either to close an
20684              outer template argument list or to complete a new-style
20685              cast.  */
20686           cp_token *token = cp_lexer_peek_token (parser->lexer);
20687           token->type = CPP_GREATER;
20688         }
20689       else if (!saved_greater_than_is_operator_p)
20690         {
20691           /* If we're in a nested template argument list, the '>>' has
20692             to be a typo for '> >'. We emit the error message, but we
20693             continue parsing and we push a '>' as next token, so that
20694             the argument list will be parsed correctly.  Note that the
20695             global source location is still on the token before the
20696             '>>', so we need to say explicitly where we want it.  */
20697           cp_token *token = cp_lexer_peek_token (parser->lexer);
20698           error_at (token->location, "%<>>%> should be %<> >%> "
20699                     "within a nested template argument list");
20700
20701           token->type = CPP_GREATER;
20702         }
20703       else
20704         {
20705           /* If this is not a nested template argument list, the '>>'
20706             is a typo for '>'. Emit an error message and continue.
20707             Same deal about the token location, but here we can get it
20708             right by consuming the '>>' before issuing the diagnostic.  */
20709           cp_token *token = cp_lexer_consume_token (parser->lexer);
20710           error_at (token->location,
20711                     "spurious %<>>%>, use %<>%> to terminate "
20712                     "a template argument list");
20713         }
20714     }
20715   else
20716     cp_parser_skip_to_end_of_template_parameter_list (parser);
20717   /* The `>' token might be a greater-than operator again now.  */
20718   parser->greater_than_is_operator_p
20719     = saved_greater_than_is_operator_p;
20720   /* Restore the SAVED_SCOPE.  */
20721   parser->scope = saved_scope;
20722   parser->qualifying_scope = saved_qualifying_scope;
20723   parser->object_scope = saved_object_scope;
20724   cp_unevaluated_operand = saved_unevaluated_operand;
20725   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
20726
20727   return arguments;
20728 }
20729
20730 /* MEMBER_FUNCTION is a member function, or a friend.  If default
20731    arguments, or the body of the function have not yet been parsed,
20732    parse them now.  */
20733
20734 static void
20735 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
20736 {
20737   timevar_push (TV_PARSE_INMETH);
20738   /* If this member is a template, get the underlying
20739      FUNCTION_DECL.  */
20740   if (DECL_FUNCTION_TEMPLATE_P (member_function))
20741     member_function = DECL_TEMPLATE_RESULT (member_function);
20742
20743   /* There should not be any class definitions in progress at this
20744      point; the bodies of members are only parsed outside of all class
20745      definitions.  */
20746   gcc_assert (parser->num_classes_being_defined == 0);
20747   /* While we're parsing the member functions we might encounter more
20748      classes.  We want to handle them right away, but we don't want
20749      them getting mixed up with functions that are currently in the
20750      queue.  */
20751   push_unparsed_function_queues (parser);
20752
20753   /* Make sure that any template parameters are in scope.  */
20754   maybe_begin_member_template_processing (member_function);
20755
20756   /* If the body of the function has not yet been parsed, parse it
20757      now.  */
20758   if (DECL_PENDING_INLINE_P (member_function))
20759     {
20760       tree function_scope;
20761       cp_token_cache *tokens;
20762
20763       /* The function is no longer pending; we are processing it.  */
20764       tokens = DECL_PENDING_INLINE_INFO (member_function);
20765       DECL_PENDING_INLINE_INFO (member_function) = NULL;
20766       DECL_PENDING_INLINE_P (member_function) = 0;
20767
20768       /* If this is a local class, enter the scope of the containing
20769          function.  */
20770       function_scope = current_function_decl;
20771       if (function_scope)
20772         push_function_context ();
20773
20774       /* Push the body of the function onto the lexer stack.  */
20775       cp_parser_push_lexer_for_tokens (parser, tokens);
20776
20777       /* Let the front end know that we going to be defining this
20778          function.  */
20779       start_preparsed_function (member_function, NULL_TREE,
20780                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
20781
20782       /* Don't do access checking if it is a templated function.  */
20783       if (processing_template_decl)
20784         push_deferring_access_checks (dk_no_check);
20785
20786       /* Now, parse the body of the function.  */
20787       cp_parser_function_definition_after_declarator (parser,
20788                                                       /*inline_p=*/true);
20789
20790       if (processing_template_decl)
20791         pop_deferring_access_checks ();
20792
20793       /* Leave the scope of the containing function.  */
20794       if (function_scope)
20795         pop_function_context ();
20796       cp_parser_pop_lexer (parser);
20797     }
20798
20799   /* Remove any template parameters from the symbol table.  */
20800   maybe_end_member_template_processing ();
20801
20802   /* Restore the queue.  */
20803   pop_unparsed_function_queues (parser);
20804   timevar_pop (TV_PARSE_INMETH);
20805 }
20806
20807 /* If DECL contains any default args, remember it on the unparsed
20808    functions queue.  */
20809
20810 static void
20811 cp_parser_save_default_args (cp_parser* parser, tree decl)
20812 {
20813   tree probe;
20814
20815   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
20816        probe;
20817        probe = TREE_CHAIN (probe))
20818     if (TREE_PURPOSE (probe))
20819       {
20820         cp_default_arg_entry *entry
20821           = VEC_safe_push (cp_default_arg_entry, gc,
20822                            unparsed_funs_with_default_args, NULL);
20823         entry->class_type = current_class_type;
20824         entry->decl = decl;
20825         break;
20826       }
20827 }
20828
20829 /* DEFAULT_ARG contains the saved tokens for the initializer of DECL,
20830    which is either a FIELD_DECL or PARM_DECL.  Parse it and return
20831    the result.  For a PARM_DECL, PARMTYPE is the corresponding type
20832    from the parameter-type-list.  */
20833
20834 static tree
20835 cp_parser_late_parse_one_default_arg (cp_parser *parser, tree decl,
20836                                       tree default_arg, tree parmtype)
20837 {
20838   cp_token_cache *tokens;
20839   tree parsed_arg;
20840   bool dummy;
20841
20842   /* Push the saved tokens for the default argument onto the parser's
20843      lexer stack.  */
20844   tokens = DEFARG_TOKENS (default_arg);
20845   cp_parser_push_lexer_for_tokens (parser, tokens);
20846
20847   start_lambda_scope (decl);
20848
20849   /* Parse the default argument.  */
20850   parsed_arg = cp_parser_initializer (parser, &dummy, &dummy);
20851   if (BRACE_ENCLOSED_INITIALIZER_P (parsed_arg))
20852     maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
20853
20854   finish_lambda_scope ();
20855
20856   if (!processing_template_decl)
20857     {
20858       /* In a non-template class, check conversions now.  In a template,
20859          we'll wait and instantiate these as needed.  */
20860       if (TREE_CODE (decl) == PARM_DECL)
20861         parsed_arg = check_default_argument (parmtype, parsed_arg);
20862       else
20863         {
20864           int flags = LOOKUP_IMPLICIT;
20865           if (BRACE_ENCLOSED_INITIALIZER_P (parsed_arg)
20866               && CONSTRUCTOR_IS_DIRECT_INIT (parsed_arg))
20867             flags = LOOKUP_NORMAL;
20868           parsed_arg = digest_init_flags (TREE_TYPE (decl), parsed_arg, flags);
20869         }
20870     }
20871
20872   /* If the token stream has not been completely used up, then
20873      there was extra junk after the end of the default
20874      argument.  */
20875   if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
20876     {
20877       if (TREE_CODE (decl) == PARM_DECL)
20878         cp_parser_error (parser, "expected %<,%>");
20879       else
20880         cp_parser_error (parser, "expected %<;%>");
20881     }
20882
20883   /* Revert to the main lexer.  */
20884   cp_parser_pop_lexer (parser);
20885
20886   return parsed_arg;
20887 }
20888
20889 /* FIELD is a non-static data member with an initializer which we saved for
20890    later; parse it now.  */
20891
20892 static void
20893 cp_parser_late_parsing_nsdmi (cp_parser *parser, tree field)
20894 {
20895   tree def;
20896
20897   push_unparsed_function_queues (parser);
20898   def = cp_parser_late_parse_one_default_arg (parser, field,
20899                                               DECL_INITIAL (field),
20900                                               NULL_TREE);
20901   pop_unparsed_function_queues (parser);
20902
20903   DECL_INITIAL (field) = def;
20904 }
20905
20906 /* FN is a FUNCTION_DECL which may contains a parameter with an
20907    unparsed DEFAULT_ARG.  Parse the default args now.  This function
20908    assumes that the current scope is the scope in which the default
20909    argument should be processed.  */
20910
20911 static void
20912 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
20913 {
20914   bool saved_local_variables_forbidden_p;
20915   tree parm, parmdecl;
20916
20917   /* While we're parsing the default args, we might (due to the
20918      statement expression extension) encounter more classes.  We want
20919      to handle them right away, but we don't want them getting mixed
20920      up with default args that are currently in the queue.  */
20921   push_unparsed_function_queues (parser);
20922
20923   /* Local variable names (and the `this' keyword) may not appear
20924      in a default argument.  */
20925   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
20926   parser->local_variables_forbidden_p = true;
20927
20928   push_defarg_context (fn);
20929
20930   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn)),
20931          parmdecl = DECL_ARGUMENTS (fn);
20932        parm && parm != void_list_node;
20933        parm = TREE_CHAIN (parm),
20934          parmdecl = DECL_CHAIN (parmdecl))
20935     {
20936       tree default_arg = TREE_PURPOSE (parm);
20937       tree parsed_arg;
20938       VEC(tree,gc) *insts;
20939       tree copy;
20940       unsigned ix;
20941
20942       if (!default_arg)
20943         continue;
20944
20945       if (TREE_CODE (default_arg) != DEFAULT_ARG)
20946         /* This can happen for a friend declaration for a function
20947            already declared with default arguments.  */
20948         continue;
20949
20950       parsed_arg
20951         = cp_parser_late_parse_one_default_arg (parser, parmdecl,
20952                                                 default_arg,
20953                                                 TREE_VALUE (parm));
20954       if (parsed_arg == error_mark_node)
20955         {
20956           continue;
20957         }
20958
20959       TREE_PURPOSE (parm) = parsed_arg;
20960
20961       /* Update any instantiations we've already created.  */
20962       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
20963            VEC_iterate (tree, insts, ix, copy); ix++)
20964         TREE_PURPOSE (copy) = parsed_arg;
20965     }
20966
20967   pop_defarg_context ();
20968
20969   /* Make sure no default arg is missing.  */
20970   check_default_args (fn);
20971
20972   /* Restore the state of local_variables_forbidden_p.  */
20973   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
20974
20975   /* Restore the queue.  */
20976   pop_unparsed_function_queues (parser);
20977 }
20978
20979 /* Parse the operand of `sizeof' (or a similar operator).  Returns
20980    either a TYPE or an expression, depending on the form of the
20981    input.  The KEYWORD indicates which kind of expression we have
20982    encountered.  */
20983
20984 static tree
20985 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
20986 {
20987   tree expr = NULL_TREE;
20988   const char *saved_message;
20989   char *tmp;
20990   bool saved_integral_constant_expression_p;
20991   bool saved_non_integral_constant_expression_p;
20992   bool pack_expansion_p = false;
20993
20994   /* Types cannot be defined in a `sizeof' expression.  Save away the
20995      old message.  */
20996   saved_message = parser->type_definition_forbidden_message;
20997   /* And create the new one.  */
20998   tmp = concat ("types may not be defined in %<",
20999                 IDENTIFIER_POINTER (ridpointers[keyword]),
21000                 "%> expressions", NULL);
21001   parser->type_definition_forbidden_message = tmp;
21002
21003   /* The restrictions on constant-expressions do not apply inside
21004      sizeof expressions.  */
21005   saved_integral_constant_expression_p
21006     = parser->integral_constant_expression_p;
21007   saved_non_integral_constant_expression_p
21008     = parser->non_integral_constant_expression_p;
21009   parser->integral_constant_expression_p = false;
21010
21011   /* If it's a `...', then we are computing the length of a parameter
21012      pack.  */
21013   if (keyword == RID_SIZEOF
21014       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
21015     {
21016       /* Consume the `...'.  */
21017       cp_lexer_consume_token (parser->lexer);
21018       maybe_warn_variadic_templates ();
21019
21020       /* Note that this is an expansion.  */
21021       pack_expansion_p = true;
21022     }
21023
21024   /* Do not actually evaluate the expression.  */
21025   ++cp_unevaluated_operand;
21026   ++c_inhibit_evaluation_warnings;
21027   /* If it's a `(', then we might be looking at the type-id
21028      construction.  */
21029   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
21030     {
21031       tree type;
21032       bool saved_in_type_id_in_expr_p;
21033
21034       /* We can't be sure yet whether we're looking at a type-id or an
21035          expression.  */
21036       cp_parser_parse_tentatively (parser);
21037       /* Consume the `('.  */
21038       cp_lexer_consume_token (parser->lexer);
21039       /* Parse the type-id.  */
21040       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
21041       parser->in_type_id_in_expr_p = true;
21042       type = cp_parser_type_id (parser);
21043       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
21044       /* Now, look for the trailing `)'.  */
21045       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
21046       /* If all went well, then we're done.  */
21047       if (cp_parser_parse_definitely (parser))
21048         {
21049           cp_decl_specifier_seq decl_specs;
21050
21051           /* Build a trivial decl-specifier-seq.  */
21052           clear_decl_specs (&decl_specs);
21053           decl_specs.type = type;
21054
21055           /* Call grokdeclarator to figure out what type this is.  */
21056           expr = grokdeclarator (NULL,
21057                                  &decl_specs,
21058                                  TYPENAME,
21059                                  /*initialized=*/0,
21060                                  /*attrlist=*/NULL);
21061         }
21062     }
21063
21064   /* If the type-id production did not work out, then we must be
21065      looking at the unary-expression production.  */
21066   if (!expr)
21067     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
21068                                        /*cast_p=*/false, NULL);
21069
21070   if (pack_expansion_p)
21071     /* Build a pack expansion. */
21072     expr = make_pack_expansion (expr);
21073
21074   /* Go back to evaluating expressions.  */
21075   --cp_unevaluated_operand;
21076   --c_inhibit_evaluation_warnings;
21077
21078   /* Free the message we created.  */
21079   free (tmp);
21080   /* And restore the old one.  */
21081   parser->type_definition_forbidden_message = saved_message;
21082   parser->integral_constant_expression_p
21083     = saved_integral_constant_expression_p;
21084   parser->non_integral_constant_expression_p
21085     = saved_non_integral_constant_expression_p;
21086
21087   return expr;
21088 }
21089
21090 /* If the current declaration has no declarator, return true.  */
21091
21092 static bool
21093 cp_parser_declares_only_class_p (cp_parser *parser)
21094 {
21095   /* If the next token is a `;' or a `,' then there is no
21096      declarator.  */
21097   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
21098           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
21099 }
21100
21101 /* Update the DECL_SPECS to reflect the storage class indicated by
21102    KEYWORD.  */
21103
21104 static void
21105 cp_parser_set_storage_class (cp_parser *parser,
21106                              cp_decl_specifier_seq *decl_specs,
21107                              enum rid keyword,
21108                              location_t location)
21109 {
21110   cp_storage_class storage_class;
21111
21112   if (parser->in_unbraced_linkage_specification_p)
21113     {
21114       error_at (location, "invalid use of %qD in linkage specification",
21115                 ridpointers[keyword]);
21116       return;
21117     }
21118   else if (decl_specs->storage_class != sc_none)
21119     {
21120       decl_specs->conflicting_specifiers_p = true;
21121       return;
21122     }
21123
21124   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
21125       && decl_specs->specs[(int) ds_thread])
21126     {
21127       error_at (location, "%<__thread%> before %qD", ridpointers[keyword]);
21128       decl_specs->specs[(int) ds_thread] = 0;
21129     }
21130
21131   switch (keyword)
21132     {
21133     case RID_AUTO:
21134       storage_class = sc_auto;
21135       break;
21136     case RID_REGISTER:
21137       storage_class = sc_register;
21138       break;
21139     case RID_STATIC:
21140       storage_class = sc_static;
21141       break;
21142     case RID_EXTERN:
21143       storage_class = sc_extern;
21144       break;
21145     case RID_MUTABLE:
21146       storage_class = sc_mutable;
21147       break;
21148     default:
21149       gcc_unreachable ();
21150     }
21151   decl_specs->storage_class = storage_class;
21152
21153   /* A storage class specifier cannot be applied alongside a typedef 
21154      specifier. If there is a typedef specifier present then set 
21155      conflicting_specifiers_p which will trigger an error later
21156      on in grokdeclarator. */
21157   if (decl_specs->specs[(int)ds_typedef])
21158     decl_specs->conflicting_specifiers_p = true;
21159 }
21160
21161 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If TYPE_DEFINITION_P
21162    is true, the type is a class or enum definition.  */
21163
21164 static void
21165 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
21166                               tree type_spec,
21167                               location_t location,
21168                               bool type_definition_p)
21169 {
21170   decl_specs->any_specifiers_p = true;
21171
21172   /* If the user tries to redeclare bool, char16_t, char32_t, or wchar_t
21173      (with, for example, in "typedef int wchar_t;") we remember that
21174      this is what happened.  In system headers, we ignore these
21175      declarations so that G++ can work with system headers that are not
21176      C++-safe.  */
21177   if (decl_specs->specs[(int) ds_typedef]
21178       && !type_definition_p
21179       && (type_spec == boolean_type_node
21180           || type_spec == char16_type_node
21181           || type_spec == char32_type_node
21182           || type_spec == wchar_type_node)
21183       && (decl_specs->type
21184           || decl_specs->specs[(int) ds_long]
21185           || decl_specs->specs[(int) ds_short]
21186           || decl_specs->specs[(int) ds_unsigned]
21187           || decl_specs->specs[(int) ds_signed]))
21188     {
21189       decl_specs->redefined_builtin_type = type_spec;
21190       if (!decl_specs->type)
21191         {
21192           decl_specs->type = type_spec;
21193           decl_specs->type_definition_p = false;
21194           decl_specs->type_location = location;
21195         }
21196     }
21197   else if (decl_specs->type)
21198     decl_specs->multiple_types_p = true;
21199   else
21200     {
21201       decl_specs->type = type_spec;
21202       decl_specs->type_definition_p = type_definition_p;
21203       decl_specs->redefined_builtin_type = NULL_TREE;
21204       decl_specs->type_location = location;
21205     }
21206 }
21207
21208 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
21209    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
21210
21211 static bool
21212 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
21213 {
21214   return decl_specifiers->specs[(int) ds_friend] != 0;
21215 }
21216
21217 /* Issue an error message indicating that TOKEN_DESC was expected.
21218    If KEYWORD is true, it indicated this function is called by
21219    cp_parser_require_keword and the required token can only be
21220    a indicated keyword. */
21221
21222 static void
21223 cp_parser_required_error (cp_parser *parser,
21224                           required_token token_desc,
21225                           bool keyword)
21226 {
21227   switch (token_desc)
21228     {
21229       case RT_NEW:
21230         cp_parser_error (parser, "expected %<new%>");
21231         return;
21232       case RT_DELETE:
21233         cp_parser_error (parser, "expected %<delete%>");
21234         return;
21235       case RT_RETURN:
21236         cp_parser_error (parser, "expected %<return%>");
21237         return;
21238       case RT_WHILE:
21239         cp_parser_error (parser, "expected %<while%>");
21240         return;
21241       case RT_EXTERN:
21242         cp_parser_error (parser, "expected %<extern%>");
21243         return;
21244       case RT_STATIC_ASSERT:
21245         cp_parser_error (parser, "expected %<static_assert%>");
21246         return;
21247       case RT_DECLTYPE:
21248         cp_parser_error (parser, "expected %<decltype%>");
21249         return;
21250       case RT_OPERATOR:
21251         cp_parser_error (parser, "expected %<operator%>");
21252         return;
21253       case RT_CLASS:
21254         cp_parser_error (parser, "expected %<class%>");
21255         return;
21256       case RT_TEMPLATE:
21257         cp_parser_error (parser, "expected %<template%>");
21258         return;
21259       case RT_NAMESPACE:
21260         cp_parser_error (parser, "expected %<namespace%>");
21261         return;
21262       case RT_USING:
21263         cp_parser_error (parser, "expected %<using%>");
21264         return;
21265       case RT_ASM:
21266         cp_parser_error (parser, "expected %<asm%>");
21267         return;
21268       case RT_TRY:
21269         cp_parser_error (parser, "expected %<try%>");
21270         return;
21271       case RT_CATCH:
21272         cp_parser_error (parser, "expected %<catch%>");
21273         return;
21274       case RT_THROW:
21275         cp_parser_error (parser, "expected %<throw%>");
21276         return;
21277       case RT_LABEL:
21278         cp_parser_error (parser, "expected %<__label__%>");
21279         return;
21280       case RT_AT_TRY:
21281         cp_parser_error (parser, "expected %<@try%>");
21282         return;
21283       case RT_AT_SYNCHRONIZED:
21284         cp_parser_error (parser, "expected %<@synchronized%>");
21285         return;
21286       case RT_AT_THROW:
21287         cp_parser_error (parser, "expected %<@throw%>");
21288         return;
21289       default:
21290         break;
21291     }
21292   if (!keyword)
21293     {
21294       switch (token_desc)
21295         {
21296           case RT_SEMICOLON:
21297             cp_parser_error (parser, "expected %<;%>");
21298             return;
21299           case RT_OPEN_PAREN:
21300             cp_parser_error (parser, "expected %<(%>");
21301             return;
21302           case RT_CLOSE_BRACE:
21303             cp_parser_error (parser, "expected %<}%>");
21304             return;
21305           case RT_OPEN_BRACE:
21306             cp_parser_error (parser, "expected %<{%>");
21307             return;
21308           case RT_CLOSE_SQUARE:
21309             cp_parser_error (parser, "expected %<]%>");
21310             return;
21311           case RT_OPEN_SQUARE:
21312             cp_parser_error (parser, "expected %<[%>");
21313             return;
21314           case RT_COMMA:
21315             cp_parser_error (parser, "expected %<,%>");
21316             return;
21317           case RT_SCOPE:
21318             cp_parser_error (parser, "expected %<::%>");
21319             return;
21320           case RT_LESS:
21321             cp_parser_error (parser, "expected %<<%>");
21322             return;
21323           case RT_GREATER:
21324             cp_parser_error (parser, "expected %<>%>");
21325             return;
21326           case RT_EQ:
21327             cp_parser_error (parser, "expected %<=%>");
21328             return;
21329           case RT_ELLIPSIS:
21330             cp_parser_error (parser, "expected %<...%>");
21331             return;
21332           case RT_MULT:
21333             cp_parser_error (parser, "expected %<*%>");
21334             return;
21335           case RT_COMPL:
21336             cp_parser_error (parser, "expected %<~%>");
21337             return;
21338           case RT_COLON:
21339             cp_parser_error (parser, "expected %<:%>");
21340             return;
21341           case RT_COLON_SCOPE:
21342             cp_parser_error (parser, "expected %<:%> or %<::%>");
21343             return;
21344           case RT_CLOSE_PAREN:
21345             cp_parser_error (parser, "expected %<)%>");
21346             return;
21347           case RT_COMMA_CLOSE_PAREN:
21348             cp_parser_error (parser, "expected %<,%> or %<)%>");
21349             return;
21350           case RT_PRAGMA_EOL:
21351             cp_parser_error (parser, "expected end of line");
21352             return;
21353           case RT_NAME:
21354             cp_parser_error (parser, "expected identifier");
21355             return;
21356           case RT_SELECT:
21357             cp_parser_error (parser, "expected selection-statement");
21358             return;
21359           case RT_INTERATION:
21360             cp_parser_error (parser, "expected iteration-statement");
21361             return;
21362           case RT_JUMP:
21363             cp_parser_error (parser, "expected jump-statement");
21364             return;
21365           case RT_CLASS_KEY:
21366             cp_parser_error (parser, "expected class-key");
21367             return;
21368           case RT_CLASS_TYPENAME_TEMPLATE:
21369             cp_parser_error (parser,
21370                  "expected %<class%>, %<typename%>, or %<template%>");
21371             return;
21372           default:
21373             gcc_unreachable ();
21374         }
21375     }
21376   else
21377     gcc_unreachable ();
21378 }
21379
21380
21381
21382 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
21383    issue an error message indicating that TOKEN_DESC was expected.
21384
21385    Returns the token consumed, if the token had the appropriate type.
21386    Otherwise, returns NULL.  */
21387
21388 static cp_token *
21389 cp_parser_require (cp_parser* parser,
21390                    enum cpp_ttype type,
21391                    required_token token_desc)
21392 {
21393   if (cp_lexer_next_token_is (parser->lexer, type))
21394     return cp_lexer_consume_token (parser->lexer);
21395   else
21396     {
21397       /* Output the MESSAGE -- unless we're parsing tentatively.  */
21398       if (!cp_parser_simulate_error (parser))
21399         cp_parser_required_error (parser, token_desc, /*keyword=*/false);
21400       return NULL;
21401     }
21402 }
21403
21404 /* An error message is produced if the next token is not '>'.
21405    All further tokens are skipped until the desired token is
21406    found or '{', '}', ';' or an unbalanced ')' or ']'.  */
21407
21408 static void
21409 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
21410 {
21411   /* Current level of '< ... >'.  */
21412   unsigned level = 0;
21413   /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
21414   unsigned nesting_depth = 0;
21415
21416   /* Are we ready, yet?  If not, issue error message.  */
21417   if (cp_parser_require (parser, CPP_GREATER, RT_GREATER))
21418     return;
21419
21420   /* Skip tokens until the desired token is found.  */
21421   while (true)
21422     {
21423       /* Peek at the next token.  */
21424       switch (cp_lexer_peek_token (parser->lexer)->type)
21425         {
21426         case CPP_LESS:
21427           if (!nesting_depth)
21428             ++level;
21429           break;
21430
21431         case CPP_RSHIFT:
21432           if (cxx_dialect == cxx98)
21433             /* C++0x views the `>>' operator as two `>' tokens, but
21434                C++98 does not. */
21435             break;
21436           else if (!nesting_depth && level-- == 0)
21437             {
21438               /* We've hit a `>>' where the first `>' closes the
21439                  template argument list, and the second `>' is
21440                  spurious.  Just consume the `>>' and stop; we've
21441                  already produced at least one error.  */
21442               cp_lexer_consume_token (parser->lexer);
21443               return;
21444             }
21445           /* Fall through for C++0x, so we handle the second `>' in
21446              the `>>'.  */
21447
21448         case CPP_GREATER:
21449           if (!nesting_depth && level-- == 0)
21450             {
21451               /* We've reached the token we want, consume it and stop.  */
21452               cp_lexer_consume_token (parser->lexer);
21453               return;
21454             }
21455           break;
21456
21457         case CPP_OPEN_PAREN:
21458         case CPP_OPEN_SQUARE:
21459           ++nesting_depth;
21460           break;
21461
21462         case CPP_CLOSE_PAREN:
21463         case CPP_CLOSE_SQUARE:
21464           if (nesting_depth-- == 0)
21465             return;
21466           break;
21467
21468         case CPP_EOF:
21469         case CPP_PRAGMA_EOL:
21470         case CPP_SEMICOLON:
21471         case CPP_OPEN_BRACE:
21472         case CPP_CLOSE_BRACE:
21473           /* The '>' was probably forgotten, don't look further.  */
21474           return;
21475
21476         default:
21477           break;
21478         }
21479
21480       /* Consume this token.  */
21481       cp_lexer_consume_token (parser->lexer);
21482     }
21483 }
21484
21485 /* If the next token is the indicated keyword, consume it.  Otherwise,
21486    issue an error message indicating that TOKEN_DESC was expected.
21487
21488    Returns the token consumed, if the token had the appropriate type.
21489    Otherwise, returns NULL.  */
21490
21491 static cp_token *
21492 cp_parser_require_keyword (cp_parser* parser,
21493                            enum rid keyword,
21494                            required_token token_desc)
21495 {
21496   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
21497
21498   if (token && token->keyword != keyword)
21499     {
21500       cp_parser_required_error (parser, token_desc, /*keyword=*/true); 
21501       return NULL;
21502     }
21503
21504   return token;
21505 }
21506
21507 /* Returns TRUE iff TOKEN is a token that can begin the body of a
21508    function-definition.  */
21509
21510 static bool
21511 cp_parser_token_starts_function_definition_p (cp_token* token)
21512 {
21513   return (/* An ordinary function-body begins with an `{'.  */
21514           token->type == CPP_OPEN_BRACE
21515           /* A ctor-initializer begins with a `:'.  */
21516           || token->type == CPP_COLON
21517           /* A function-try-block begins with `try'.  */
21518           || token->keyword == RID_TRY
21519           /* The named return value extension begins with `return'.  */
21520           || token->keyword == RID_RETURN);
21521 }
21522
21523 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
21524    definition.  */
21525
21526 static bool
21527 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
21528 {
21529   cp_token *token;
21530
21531   token = cp_lexer_peek_token (parser->lexer);
21532   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
21533 }
21534
21535 /* Returns TRUE iff the next token is the "," or ">" (or `>>', in
21536    C++0x) ending a template-argument.  */
21537
21538 static bool
21539 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
21540 {
21541   cp_token *token;
21542
21543   token = cp_lexer_peek_token (parser->lexer);
21544   return (token->type == CPP_COMMA 
21545           || token->type == CPP_GREATER
21546           || token->type == CPP_ELLIPSIS
21547           || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT));
21548 }
21549
21550 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
21551    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
21552
21553 static bool
21554 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
21555                                                      size_t n)
21556 {
21557   cp_token *token;
21558
21559   token = cp_lexer_peek_nth_token (parser->lexer, n);
21560   if (token->type == CPP_LESS)
21561     return true;
21562   /* Check for the sequence `<::' in the original code. It would be lexed as
21563      `[:', where `[' is a digraph, and there is no whitespace before
21564      `:'.  */
21565   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
21566     {
21567       cp_token *token2;
21568       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
21569       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
21570         return true;
21571     }
21572   return false;
21573 }
21574
21575 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
21576    or none_type otherwise.  */
21577
21578 static enum tag_types
21579 cp_parser_token_is_class_key (cp_token* token)
21580 {
21581   switch (token->keyword)
21582     {
21583     case RID_CLASS:
21584       return class_type;
21585     case RID_STRUCT:
21586       return record_type;
21587     case RID_UNION:
21588       return union_type;
21589
21590     default:
21591       return none_type;
21592     }
21593 }
21594
21595 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
21596
21597 static void
21598 cp_parser_check_class_key (enum tag_types class_key, tree type)
21599 {
21600   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
21601     permerror (input_location, "%qs tag used in naming %q#T",
21602             class_key == union_type ? "union"
21603              : class_key == record_type ? "struct" : "class",
21604              type);
21605 }
21606
21607 /* Issue an error message if DECL is redeclared with different
21608    access than its original declaration [class.access.spec/3].
21609    This applies to nested classes and nested class templates.
21610    [class.mem/1].  */
21611
21612 static void
21613 cp_parser_check_access_in_redeclaration (tree decl, location_t location)
21614 {
21615   if (!decl || !CLASS_TYPE_P (TREE_TYPE (decl)))
21616     return;
21617
21618   if ((TREE_PRIVATE (decl)
21619        != (current_access_specifier == access_private_node))
21620       || (TREE_PROTECTED (decl)
21621           != (current_access_specifier == access_protected_node)))
21622     error_at (location, "%qD redeclared with different access", decl);
21623 }
21624
21625 /* Look for the `template' keyword, as a syntactic disambiguator.
21626    Return TRUE iff it is present, in which case it will be
21627    consumed.  */
21628
21629 static bool
21630 cp_parser_optional_template_keyword (cp_parser *parser)
21631 {
21632   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
21633     {
21634       /* The `template' keyword can only be used within templates;
21635          outside templates the parser can always figure out what is a
21636          template and what is not.  */
21637       if (!processing_template_decl)
21638         {
21639           cp_token *token = cp_lexer_peek_token (parser->lexer);
21640           error_at (token->location,
21641                     "%<template%> (as a disambiguator) is only allowed "
21642                     "within templates");
21643           /* If this part of the token stream is rescanned, the same
21644              error message would be generated.  So, we purge the token
21645              from the stream.  */
21646           cp_lexer_purge_token (parser->lexer);
21647           return false;
21648         }
21649       else
21650         {
21651           /* Consume the `template' keyword.  */
21652           cp_lexer_consume_token (parser->lexer);
21653           return true;
21654         }
21655     }
21656
21657   return false;
21658 }
21659
21660 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
21661    set PARSER->SCOPE, and perform other related actions.  */
21662
21663 static void
21664 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
21665 {
21666   int i;
21667   struct tree_check *check_value;
21668   deferred_access_check *chk;
21669   VEC (deferred_access_check,gc) *checks;
21670
21671   /* Get the stored value.  */
21672   check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
21673   /* Perform any access checks that were deferred.  */
21674   checks = check_value->checks;
21675   if (checks)
21676     {
21677       FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
21678         perform_or_defer_access_check (chk->binfo,
21679                                        chk->decl,
21680                                        chk->diag_decl);
21681     }
21682   /* Set the scope from the stored value.  */
21683   parser->scope = check_value->value;
21684   parser->qualifying_scope = check_value->qualifying_scope;
21685   parser->object_scope = NULL_TREE;
21686 }
21687
21688 /* Consume tokens up through a non-nested END token.  Returns TRUE if we
21689    encounter the end of a block before what we were looking for.  */
21690
21691 static bool
21692 cp_parser_cache_group (cp_parser *parser,
21693                        enum cpp_ttype end,
21694                        unsigned depth)
21695 {
21696   while (true)
21697     {
21698       cp_token *token = cp_lexer_peek_token (parser->lexer);
21699
21700       /* Abort a parenthesized expression if we encounter a semicolon.  */
21701       if ((end == CPP_CLOSE_PAREN || depth == 0)
21702           && token->type == CPP_SEMICOLON)
21703         return true;
21704       /* If we've reached the end of the file, stop.  */
21705       if (token->type == CPP_EOF
21706           || (end != CPP_PRAGMA_EOL
21707               && token->type == CPP_PRAGMA_EOL))
21708         return true;
21709       if (token->type == CPP_CLOSE_BRACE && depth == 0)
21710         /* We've hit the end of an enclosing block, so there's been some
21711            kind of syntax error.  */
21712         return true;
21713
21714       /* Consume the token.  */
21715       cp_lexer_consume_token (parser->lexer);
21716       /* See if it starts a new group.  */
21717       if (token->type == CPP_OPEN_BRACE)
21718         {
21719           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
21720           /* In theory this should probably check end == '}', but
21721              cp_parser_save_member_function_body needs it to exit
21722              after either '}' or ')' when called with ')'.  */
21723           if (depth == 0)
21724             return false;
21725         }
21726       else if (token->type == CPP_OPEN_PAREN)
21727         {
21728           cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
21729           if (depth == 0 && end == CPP_CLOSE_PAREN)
21730             return false;
21731         }
21732       else if (token->type == CPP_PRAGMA)
21733         cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
21734       else if (token->type == end)
21735         return false;
21736     }
21737 }
21738
21739 /* Begin parsing tentatively.  We always save tokens while parsing
21740    tentatively so that if the tentative parsing fails we can restore the
21741    tokens.  */
21742
21743 static void
21744 cp_parser_parse_tentatively (cp_parser* parser)
21745 {
21746   /* Enter a new parsing context.  */
21747   parser->context = cp_parser_context_new (parser->context);
21748   /* Begin saving tokens.  */
21749   cp_lexer_save_tokens (parser->lexer);
21750   /* In order to avoid repetitive access control error messages,
21751      access checks are queued up until we are no longer parsing
21752      tentatively.  */
21753   push_deferring_access_checks (dk_deferred);
21754 }
21755
21756 /* Commit to the currently active tentative parse.  */
21757
21758 static void
21759 cp_parser_commit_to_tentative_parse (cp_parser* parser)
21760 {
21761   cp_parser_context *context;
21762   cp_lexer *lexer;
21763
21764   /* Mark all of the levels as committed.  */
21765   lexer = parser->lexer;
21766   for (context = parser->context; context->next; context = context->next)
21767     {
21768       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
21769         break;
21770       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
21771       while (!cp_lexer_saving_tokens (lexer))
21772         lexer = lexer->next;
21773       cp_lexer_commit_tokens (lexer);
21774     }
21775 }
21776
21777 /* Abort the currently active tentative parse.  All consumed tokens
21778    will be rolled back, and no diagnostics will be issued.  */
21779
21780 static void
21781 cp_parser_abort_tentative_parse (cp_parser* parser)
21782 {
21783   gcc_assert (parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED
21784               || errorcount > 0);
21785   cp_parser_simulate_error (parser);
21786   /* Now, pretend that we want to see if the construct was
21787      successfully parsed.  */
21788   cp_parser_parse_definitely (parser);
21789 }
21790
21791 /* Stop parsing tentatively.  If a parse error has occurred, restore the
21792    token stream.  Otherwise, commit to the tokens we have consumed.
21793    Returns true if no error occurred; false otherwise.  */
21794
21795 static bool
21796 cp_parser_parse_definitely (cp_parser* parser)
21797 {
21798   bool error_occurred;
21799   cp_parser_context *context;
21800
21801   /* Remember whether or not an error occurred, since we are about to
21802      destroy that information.  */
21803   error_occurred = cp_parser_error_occurred (parser);
21804   /* Remove the topmost context from the stack.  */
21805   context = parser->context;
21806   parser->context = context->next;
21807   /* If no parse errors occurred, commit to the tentative parse.  */
21808   if (!error_occurred)
21809     {
21810       /* Commit to the tokens read tentatively, unless that was
21811          already done.  */
21812       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
21813         cp_lexer_commit_tokens (parser->lexer);
21814
21815       pop_to_parent_deferring_access_checks ();
21816     }
21817   /* Otherwise, if errors occurred, roll back our state so that things
21818      are just as they were before we began the tentative parse.  */
21819   else
21820     {
21821       cp_lexer_rollback_tokens (parser->lexer);
21822       pop_deferring_access_checks ();
21823     }
21824   /* Add the context to the front of the free list.  */
21825   context->next = cp_parser_context_free_list;
21826   cp_parser_context_free_list = context;
21827
21828   return !error_occurred;
21829 }
21830
21831 /* Returns true if we are parsing tentatively and are not committed to
21832    this tentative parse.  */
21833
21834 static bool
21835 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
21836 {
21837   return (cp_parser_parsing_tentatively (parser)
21838           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
21839 }
21840
21841 /* Returns nonzero iff an error has occurred during the most recent
21842    tentative parse.  */
21843
21844 static bool
21845 cp_parser_error_occurred (cp_parser* parser)
21846 {
21847   return (cp_parser_parsing_tentatively (parser)
21848           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
21849 }
21850
21851 /* Returns nonzero if GNU extensions are allowed.  */
21852
21853 static bool
21854 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
21855 {
21856   return parser->allow_gnu_extensions_p;
21857 }
21858 \f
21859 /* Objective-C++ Productions */
21860
21861
21862 /* Parse an Objective-C expression, which feeds into a primary-expression
21863    above.
21864
21865    objc-expression:
21866      objc-message-expression
21867      objc-string-literal
21868      objc-encode-expression
21869      objc-protocol-expression
21870      objc-selector-expression
21871
21872   Returns a tree representation of the expression.  */
21873
21874 static tree
21875 cp_parser_objc_expression (cp_parser* parser)
21876 {
21877   /* Try to figure out what kind of declaration is present.  */
21878   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
21879
21880   switch (kwd->type)
21881     {
21882     case CPP_OPEN_SQUARE:
21883       return cp_parser_objc_message_expression (parser);
21884
21885     case CPP_OBJC_STRING:
21886       kwd = cp_lexer_consume_token (parser->lexer);
21887       return objc_build_string_object (kwd->u.value);
21888
21889     case CPP_KEYWORD:
21890       switch (kwd->keyword)
21891         {
21892         case RID_AT_ENCODE:
21893           return cp_parser_objc_encode_expression (parser);
21894
21895         case RID_AT_PROTOCOL:
21896           return cp_parser_objc_protocol_expression (parser);
21897
21898         case RID_AT_SELECTOR:
21899           return cp_parser_objc_selector_expression (parser);
21900
21901         default:
21902           break;
21903         }
21904     default:
21905       error_at (kwd->location,
21906                 "misplaced %<@%D%> Objective-C++ construct",
21907                 kwd->u.value);
21908       cp_parser_skip_to_end_of_block_or_statement (parser);
21909     }
21910
21911   return error_mark_node;
21912 }
21913
21914 /* Parse an Objective-C message expression.
21915
21916    objc-message-expression:
21917      [ objc-message-receiver objc-message-args ]
21918
21919    Returns a representation of an Objective-C message.  */
21920
21921 static tree
21922 cp_parser_objc_message_expression (cp_parser* parser)
21923 {
21924   tree receiver, messageargs;
21925
21926   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
21927   receiver = cp_parser_objc_message_receiver (parser);
21928   messageargs = cp_parser_objc_message_args (parser);
21929   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
21930
21931   return objc_build_message_expr (receiver, messageargs);
21932 }
21933
21934 /* Parse an objc-message-receiver.
21935
21936    objc-message-receiver:
21937      expression
21938      simple-type-specifier
21939
21940   Returns a representation of the type or expression.  */
21941
21942 static tree
21943 cp_parser_objc_message_receiver (cp_parser* parser)
21944 {
21945   tree rcv;
21946
21947   /* An Objective-C message receiver may be either (1) a type
21948      or (2) an expression.  */
21949   cp_parser_parse_tentatively (parser);
21950   rcv = cp_parser_expression (parser, false, NULL);
21951
21952   if (cp_parser_parse_definitely (parser))
21953     return rcv;
21954
21955   rcv = cp_parser_simple_type_specifier (parser,
21956                                          /*decl_specs=*/NULL,
21957                                          CP_PARSER_FLAGS_NONE);
21958
21959   return objc_get_class_reference (rcv);
21960 }
21961
21962 /* Parse the arguments and selectors comprising an Objective-C message.
21963
21964    objc-message-args:
21965      objc-selector
21966      objc-selector-args
21967      objc-selector-args , objc-comma-args
21968
21969    objc-selector-args:
21970      objc-selector [opt] : assignment-expression
21971      objc-selector-args objc-selector [opt] : assignment-expression
21972
21973    objc-comma-args:
21974      assignment-expression
21975      objc-comma-args , assignment-expression
21976
21977    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
21978    selector arguments and TREE_VALUE containing a list of comma
21979    arguments.  */
21980
21981 static tree
21982 cp_parser_objc_message_args (cp_parser* parser)
21983 {
21984   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
21985   bool maybe_unary_selector_p = true;
21986   cp_token *token = cp_lexer_peek_token (parser->lexer);
21987
21988   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
21989     {
21990       tree selector = NULL_TREE, arg;
21991
21992       if (token->type != CPP_COLON)
21993         selector = cp_parser_objc_selector (parser);
21994
21995       /* Detect if we have a unary selector.  */
21996       if (maybe_unary_selector_p
21997           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
21998         return build_tree_list (selector, NULL_TREE);
21999
22000       maybe_unary_selector_p = false;
22001       cp_parser_require (parser, CPP_COLON, RT_COLON);
22002       arg = cp_parser_assignment_expression (parser, false, NULL);
22003
22004       sel_args
22005         = chainon (sel_args,
22006                    build_tree_list (selector, arg));
22007
22008       token = cp_lexer_peek_token (parser->lexer);
22009     }
22010
22011   /* Handle non-selector arguments, if any. */
22012   while (token->type == CPP_COMMA)
22013     {
22014       tree arg;
22015
22016       cp_lexer_consume_token (parser->lexer);
22017       arg = cp_parser_assignment_expression (parser, false, NULL);
22018
22019       addl_args
22020         = chainon (addl_args,
22021                    build_tree_list (NULL_TREE, arg));
22022
22023       token = cp_lexer_peek_token (parser->lexer);
22024     }
22025
22026   if (sel_args == NULL_TREE && addl_args == NULL_TREE)
22027     {
22028       cp_parser_error (parser, "objective-c++ message argument(s) are expected");
22029       return build_tree_list (error_mark_node, error_mark_node);
22030     }
22031
22032   return build_tree_list (sel_args, addl_args);
22033 }
22034
22035 /* Parse an Objective-C encode expression.
22036
22037    objc-encode-expression:
22038      @encode objc-typename
22039
22040    Returns an encoded representation of the type argument.  */
22041
22042 static tree
22043 cp_parser_objc_encode_expression (cp_parser* parser)
22044 {
22045   tree type;
22046   cp_token *token;
22047
22048   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
22049   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22050   token = cp_lexer_peek_token (parser->lexer);
22051   type = complete_type (cp_parser_type_id (parser));
22052   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22053
22054   if (!type)
22055     {
22056       error_at (token->location, 
22057                 "%<@encode%> must specify a type as an argument");
22058       return error_mark_node;
22059     }
22060
22061   /* This happens if we find @encode(T) (where T is a template
22062      typename or something dependent on a template typename) when
22063      parsing a template.  In that case, we can't compile it
22064      immediately, but we rather create an AT_ENCODE_EXPR which will
22065      need to be instantiated when the template is used.
22066   */
22067   if (dependent_type_p (type))
22068     {
22069       tree value = build_min (AT_ENCODE_EXPR, size_type_node, type);
22070       TREE_READONLY (value) = 1;
22071       return value;
22072     }
22073
22074   return objc_build_encode_expr (type);
22075 }
22076
22077 /* Parse an Objective-C @defs expression.  */
22078
22079 static tree
22080 cp_parser_objc_defs_expression (cp_parser *parser)
22081 {
22082   tree name;
22083
22084   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
22085   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22086   name = cp_parser_identifier (parser);
22087   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22088
22089   return objc_get_class_ivars (name);
22090 }
22091
22092 /* Parse an Objective-C protocol expression.
22093
22094   objc-protocol-expression:
22095     @protocol ( identifier )
22096
22097   Returns a representation of the protocol expression.  */
22098
22099 static tree
22100 cp_parser_objc_protocol_expression (cp_parser* parser)
22101 {
22102   tree proto;
22103
22104   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
22105   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22106   proto = cp_parser_identifier (parser);
22107   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22108
22109   return objc_build_protocol_expr (proto);
22110 }
22111
22112 /* Parse an Objective-C selector expression.
22113
22114    objc-selector-expression:
22115      @selector ( objc-method-signature )
22116
22117    objc-method-signature:
22118      objc-selector
22119      objc-selector-seq
22120
22121    objc-selector-seq:
22122      objc-selector :
22123      objc-selector-seq objc-selector :
22124
22125   Returns a representation of the method selector.  */
22126
22127 static tree
22128 cp_parser_objc_selector_expression (cp_parser* parser)
22129 {
22130   tree sel_seq = NULL_TREE;
22131   bool maybe_unary_selector_p = true;
22132   cp_token *token;
22133   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
22134
22135   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
22136   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22137   token = cp_lexer_peek_token (parser->lexer);
22138
22139   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
22140          || token->type == CPP_SCOPE)
22141     {
22142       tree selector = NULL_TREE;
22143
22144       if (token->type != CPP_COLON
22145           || token->type == CPP_SCOPE)
22146         selector = cp_parser_objc_selector (parser);
22147
22148       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
22149           && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
22150         {
22151           /* Detect if we have a unary selector.  */
22152           if (maybe_unary_selector_p)
22153             {
22154               sel_seq = selector;
22155               goto finish_selector;
22156             }
22157           else
22158             {
22159               cp_parser_error (parser, "expected %<:%>");
22160             }
22161         }
22162       maybe_unary_selector_p = false;
22163       token = cp_lexer_consume_token (parser->lexer);
22164
22165       if (token->type == CPP_SCOPE)
22166         {
22167           sel_seq
22168             = chainon (sel_seq,
22169                        build_tree_list (selector, NULL_TREE));
22170           sel_seq
22171             = chainon (sel_seq,
22172                        build_tree_list (NULL_TREE, NULL_TREE));
22173         }
22174       else
22175         sel_seq
22176           = chainon (sel_seq,
22177                      build_tree_list (selector, NULL_TREE));
22178
22179       token = cp_lexer_peek_token (parser->lexer);
22180     }
22181
22182  finish_selector:
22183   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22184
22185   return objc_build_selector_expr (loc, sel_seq);
22186 }
22187
22188 /* Parse a list of identifiers.
22189
22190    objc-identifier-list:
22191      identifier
22192      objc-identifier-list , identifier
22193
22194    Returns a TREE_LIST of identifier nodes.  */
22195
22196 static tree
22197 cp_parser_objc_identifier_list (cp_parser* parser)
22198 {
22199   tree identifier;
22200   tree list;
22201   cp_token *sep;
22202
22203   identifier = cp_parser_identifier (parser);
22204   if (identifier == error_mark_node)
22205     return error_mark_node;      
22206
22207   list = build_tree_list (NULL_TREE, identifier);
22208   sep = cp_lexer_peek_token (parser->lexer);
22209
22210   while (sep->type == CPP_COMMA)
22211     {
22212       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
22213       identifier = cp_parser_identifier (parser);
22214       if (identifier == error_mark_node)
22215         return list;
22216
22217       list = chainon (list, build_tree_list (NULL_TREE,
22218                                              identifier));
22219       sep = cp_lexer_peek_token (parser->lexer);
22220     }
22221   
22222   return list;
22223 }
22224
22225 /* Parse an Objective-C alias declaration.
22226
22227    objc-alias-declaration:
22228      @compatibility_alias identifier identifier ;
22229
22230    This function registers the alias mapping with the Objective-C front end.
22231    It returns nothing.  */
22232
22233 static void
22234 cp_parser_objc_alias_declaration (cp_parser* parser)
22235 {
22236   tree alias, orig;
22237
22238   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
22239   alias = cp_parser_identifier (parser);
22240   orig = cp_parser_identifier (parser);
22241   objc_declare_alias (alias, orig);
22242   cp_parser_consume_semicolon_at_end_of_statement (parser);
22243 }
22244
22245 /* Parse an Objective-C class forward-declaration.
22246
22247    objc-class-declaration:
22248      @class objc-identifier-list ;
22249
22250    The function registers the forward declarations with the Objective-C
22251    front end.  It returns nothing.  */
22252
22253 static void
22254 cp_parser_objc_class_declaration (cp_parser* parser)
22255 {
22256   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
22257   while (true)
22258     {
22259       tree id;
22260       
22261       id = cp_parser_identifier (parser);
22262       if (id == error_mark_node)
22263         break;
22264       
22265       objc_declare_class (id);
22266
22267       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
22268         cp_lexer_consume_token (parser->lexer);
22269       else
22270         break;
22271     }
22272   cp_parser_consume_semicolon_at_end_of_statement (parser);
22273 }
22274
22275 /* Parse a list of Objective-C protocol references.
22276
22277    objc-protocol-refs-opt:
22278      objc-protocol-refs [opt]
22279
22280    objc-protocol-refs:
22281      < objc-identifier-list >
22282
22283    Returns a TREE_LIST of identifiers, if any.  */
22284
22285 static tree
22286 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
22287 {
22288   tree protorefs = NULL_TREE;
22289
22290   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
22291     {
22292       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
22293       protorefs = cp_parser_objc_identifier_list (parser);
22294       cp_parser_require (parser, CPP_GREATER, RT_GREATER);
22295     }
22296
22297   return protorefs;
22298 }
22299
22300 /* Parse a Objective-C visibility specification.  */
22301
22302 static void
22303 cp_parser_objc_visibility_spec (cp_parser* parser)
22304 {
22305   cp_token *vis = cp_lexer_peek_token (parser->lexer);
22306
22307   switch (vis->keyword)
22308     {
22309     case RID_AT_PRIVATE:
22310       objc_set_visibility (OBJC_IVAR_VIS_PRIVATE);
22311       break;
22312     case RID_AT_PROTECTED:
22313       objc_set_visibility (OBJC_IVAR_VIS_PROTECTED);
22314       break;
22315     case RID_AT_PUBLIC:
22316       objc_set_visibility (OBJC_IVAR_VIS_PUBLIC);
22317       break;
22318     case RID_AT_PACKAGE:
22319       objc_set_visibility (OBJC_IVAR_VIS_PACKAGE);
22320       break;
22321     default:
22322       return;
22323     }
22324
22325   /* Eat '@private'/'@protected'/'@public'.  */
22326   cp_lexer_consume_token (parser->lexer);
22327 }
22328
22329 /* Parse an Objective-C method type.  Return 'true' if it is a class
22330    (+) method, and 'false' if it is an instance (-) method.  */
22331
22332 static inline bool
22333 cp_parser_objc_method_type (cp_parser* parser)
22334 {
22335   if (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS)
22336     return true;
22337   else
22338     return false;
22339 }
22340
22341 /* Parse an Objective-C protocol qualifier.  */
22342
22343 static tree
22344 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
22345 {
22346   tree quals = NULL_TREE, node;
22347   cp_token *token = cp_lexer_peek_token (parser->lexer);
22348
22349   node = token->u.value;
22350
22351   while (node && TREE_CODE (node) == IDENTIFIER_NODE
22352          && (node == ridpointers [(int) RID_IN]
22353              || node == ridpointers [(int) RID_OUT]
22354              || node == ridpointers [(int) RID_INOUT]
22355              || node == ridpointers [(int) RID_BYCOPY]
22356              || node == ridpointers [(int) RID_BYREF]
22357              || node == ridpointers [(int) RID_ONEWAY]))
22358     {
22359       quals = tree_cons (NULL_TREE, node, quals);
22360       cp_lexer_consume_token (parser->lexer);
22361       token = cp_lexer_peek_token (parser->lexer);
22362       node = token->u.value;
22363     }
22364
22365   return quals;
22366 }
22367
22368 /* Parse an Objective-C typename.  */
22369
22370 static tree
22371 cp_parser_objc_typename (cp_parser* parser)
22372 {
22373   tree type_name = NULL_TREE;
22374
22375   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
22376     {
22377       tree proto_quals, cp_type = NULL_TREE;
22378
22379       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
22380       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
22381
22382       /* An ObjC type name may consist of just protocol qualifiers, in which
22383          case the type shall default to 'id'.  */
22384       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
22385         {
22386           cp_type = cp_parser_type_id (parser);
22387           
22388           /* If the type could not be parsed, an error has already
22389              been produced.  For error recovery, behave as if it had
22390              not been specified, which will use the default type
22391              'id'.  */
22392           if (cp_type == error_mark_node)
22393             {
22394               cp_type = NULL_TREE;
22395               /* We need to skip to the closing parenthesis as
22396                  cp_parser_type_id() does not seem to do it for
22397                  us.  */
22398               cp_parser_skip_to_closing_parenthesis (parser,
22399                                                      /*recovering=*/true,
22400                                                      /*or_comma=*/false,
22401                                                      /*consume_paren=*/false);
22402             }
22403         }
22404
22405       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22406       type_name = build_tree_list (proto_quals, cp_type);
22407     }
22408
22409   return type_name;
22410 }
22411
22412 /* Check to see if TYPE refers to an Objective-C selector name.  */
22413
22414 static bool
22415 cp_parser_objc_selector_p (enum cpp_ttype type)
22416 {
22417   return (type == CPP_NAME || type == CPP_KEYWORD
22418           || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
22419           || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
22420           || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
22421           || type == CPP_XOR || type == CPP_XOR_EQ);
22422 }
22423
22424 /* Parse an Objective-C selector.  */
22425
22426 static tree
22427 cp_parser_objc_selector (cp_parser* parser)
22428 {
22429   cp_token *token = cp_lexer_consume_token (parser->lexer);
22430
22431   if (!cp_parser_objc_selector_p (token->type))
22432     {
22433       error_at (token->location, "invalid Objective-C++ selector name");
22434       return error_mark_node;
22435     }
22436
22437   /* C++ operator names are allowed to appear in ObjC selectors.  */
22438   switch (token->type)
22439     {
22440     case CPP_AND_AND: return get_identifier ("and");
22441     case CPP_AND_EQ: return get_identifier ("and_eq");
22442     case CPP_AND: return get_identifier ("bitand");
22443     case CPP_OR: return get_identifier ("bitor");
22444     case CPP_COMPL: return get_identifier ("compl");
22445     case CPP_NOT: return get_identifier ("not");
22446     case CPP_NOT_EQ: return get_identifier ("not_eq");
22447     case CPP_OR_OR: return get_identifier ("or");
22448     case CPP_OR_EQ: return get_identifier ("or_eq");
22449     case CPP_XOR: return get_identifier ("xor");
22450     case CPP_XOR_EQ: return get_identifier ("xor_eq");
22451     default: return token->u.value;
22452     }
22453 }
22454
22455 /* Parse an Objective-C params list.  */
22456
22457 static tree
22458 cp_parser_objc_method_keyword_params (cp_parser* parser, tree* attributes)
22459 {
22460   tree params = NULL_TREE;
22461   bool maybe_unary_selector_p = true;
22462   cp_token *token = cp_lexer_peek_token (parser->lexer);
22463
22464   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
22465     {
22466       tree selector = NULL_TREE, type_name, identifier;
22467       tree parm_attr = NULL_TREE;
22468
22469       if (token->keyword == RID_ATTRIBUTE)
22470         break;
22471
22472       if (token->type != CPP_COLON)
22473         selector = cp_parser_objc_selector (parser);
22474
22475       /* Detect if we have a unary selector.  */
22476       if (maybe_unary_selector_p
22477           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
22478         {
22479           params = selector; /* Might be followed by attributes.  */
22480           break;
22481         }
22482
22483       maybe_unary_selector_p = false;
22484       if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
22485         {
22486           /* Something went quite wrong.  There should be a colon
22487              here, but there is not.  Stop parsing parameters.  */
22488           break;
22489         }
22490       type_name = cp_parser_objc_typename (parser);
22491       /* New ObjC allows attributes on parameters too.  */
22492       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
22493         parm_attr = cp_parser_attributes_opt (parser);
22494       identifier = cp_parser_identifier (parser);
22495
22496       params
22497         = chainon (params,
22498                    objc_build_keyword_decl (selector,
22499                                             type_name,
22500                                             identifier,
22501                                             parm_attr));
22502
22503       token = cp_lexer_peek_token (parser->lexer);
22504     }
22505
22506   if (params == NULL_TREE)
22507     {
22508       cp_parser_error (parser, "objective-c++ method declaration is expected");
22509       return error_mark_node;
22510     }
22511
22512   /* We allow tail attributes for the method.  */
22513   if (token->keyword == RID_ATTRIBUTE)
22514     {
22515       *attributes = cp_parser_attributes_opt (parser);
22516       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
22517           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
22518         return params;
22519       cp_parser_error (parser, 
22520                        "method attributes must be specified at the end");
22521       return error_mark_node;
22522     }
22523
22524   if (params == NULL_TREE)
22525     {
22526       cp_parser_error (parser, "objective-c++ method declaration is expected");
22527       return error_mark_node;
22528     }
22529   return params;
22530 }
22531
22532 /* Parse the non-keyword Objective-C params.  */
22533
22534 static tree
22535 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp, 
22536                                        tree* attributes)
22537 {
22538   tree params = make_node (TREE_LIST);
22539   cp_token *token = cp_lexer_peek_token (parser->lexer);
22540   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
22541
22542   while (token->type == CPP_COMMA)
22543     {
22544       cp_parameter_declarator *parmdecl;
22545       tree parm;
22546
22547       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
22548       token = cp_lexer_peek_token (parser->lexer);
22549
22550       if (token->type == CPP_ELLIPSIS)
22551         {
22552           cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
22553           *ellipsisp = true;
22554           token = cp_lexer_peek_token (parser->lexer);
22555           break;
22556         }
22557
22558       /* TODO: parse attributes for tail parameters.  */
22559       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
22560       parm = grokdeclarator (parmdecl->declarator,
22561                              &parmdecl->decl_specifiers,
22562                              PARM, /*initialized=*/0,
22563                              /*attrlist=*/NULL);
22564
22565       chainon (params, build_tree_list (NULL_TREE, parm));
22566       token = cp_lexer_peek_token (parser->lexer);
22567     }
22568
22569   /* We allow tail attributes for the method.  */
22570   if (token->keyword == RID_ATTRIBUTE)
22571     {
22572       if (*attributes == NULL_TREE)
22573         {
22574           *attributes = cp_parser_attributes_opt (parser);
22575           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
22576               || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
22577             return params;
22578         }
22579       else        
22580         /* We have an error, but parse the attributes, so that we can 
22581            carry on.  */
22582         *attributes = cp_parser_attributes_opt (parser);
22583
22584       cp_parser_error (parser, 
22585                        "method attributes must be specified at the end");
22586       return error_mark_node;
22587     }
22588
22589   return params;
22590 }
22591
22592 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
22593
22594 static void
22595 cp_parser_objc_interstitial_code (cp_parser* parser)
22596 {
22597   cp_token *token = cp_lexer_peek_token (parser->lexer);
22598
22599   /* If the next token is `extern' and the following token is a string
22600      literal, then we have a linkage specification.  */
22601   if (token->keyword == RID_EXTERN
22602       && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser->lexer, 2)))
22603     cp_parser_linkage_specification (parser);
22604   /* Handle #pragma, if any.  */
22605   else if (token->type == CPP_PRAGMA)
22606     cp_parser_pragma (parser, pragma_external);
22607   /* Allow stray semicolons.  */
22608   else if (token->type == CPP_SEMICOLON)
22609     cp_lexer_consume_token (parser->lexer);
22610   /* Mark methods as optional or required, when building protocols.  */
22611   else if (token->keyword == RID_AT_OPTIONAL)
22612     {
22613       cp_lexer_consume_token (parser->lexer);
22614       objc_set_method_opt (true);
22615     }
22616   else if (token->keyword == RID_AT_REQUIRED)
22617     {
22618       cp_lexer_consume_token (parser->lexer);
22619       objc_set_method_opt (false);
22620     }
22621   else if (token->keyword == RID_NAMESPACE)
22622     cp_parser_namespace_definition (parser);
22623   /* Other stray characters must generate errors.  */
22624   else if (token->type == CPP_OPEN_BRACE || token->type == CPP_CLOSE_BRACE)
22625     {
22626       cp_lexer_consume_token (parser->lexer);
22627       error ("stray %qs between Objective-C++ methods",
22628              token->type == CPP_OPEN_BRACE ? "{" : "}");
22629     }
22630   /* Finally, try to parse a block-declaration, or a function-definition.  */
22631   else
22632     cp_parser_block_declaration (parser, /*statement_p=*/false);
22633 }
22634
22635 /* Parse a method signature.  */
22636
22637 static tree
22638 cp_parser_objc_method_signature (cp_parser* parser, tree* attributes)
22639 {
22640   tree rettype, kwdparms, optparms;
22641   bool ellipsis = false;
22642   bool is_class_method;
22643
22644   is_class_method = cp_parser_objc_method_type (parser);
22645   rettype = cp_parser_objc_typename (parser);
22646   *attributes = NULL_TREE;
22647   kwdparms = cp_parser_objc_method_keyword_params (parser, attributes);
22648   if (kwdparms == error_mark_node)
22649     return error_mark_node;
22650   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis, attributes);
22651   if (optparms == error_mark_node)
22652     return error_mark_node;
22653
22654   return objc_build_method_signature (is_class_method, rettype, kwdparms, optparms, ellipsis);
22655 }
22656
22657 static bool
22658 cp_parser_objc_method_maybe_bad_prefix_attributes (cp_parser* parser)
22659 {
22660   tree tattr;  
22661   cp_lexer_save_tokens (parser->lexer);
22662   tattr = cp_parser_attributes_opt (parser);
22663   gcc_assert (tattr) ;
22664   
22665   /* If the attributes are followed by a method introducer, this is not allowed.
22666      Dump the attributes and flag the situation.  */
22667   if (cp_lexer_next_token_is (parser->lexer, CPP_PLUS)
22668       || cp_lexer_next_token_is (parser->lexer, CPP_MINUS))
22669     return true;
22670
22671   /* Otherwise, the attributes introduce some interstitial code, possibly so
22672      rewind to allow that check.  */
22673   cp_lexer_rollback_tokens (parser->lexer);
22674   return false;  
22675 }
22676
22677 /* Parse an Objective-C method prototype list.  */
22678
22679 static void
22680 cp_parser_objc_method_prototype_list (cp_parser* parser)
22681 {
22682   cp_token *token = cp_lexer_peek_token (parser->lexer);
22683
22684   while (token->keyword != RID_AT_END && token->type != CPP_EOF)
22685     {
22686       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
22687         {
22688           tree attributes, sig;
22689           bool is_class_method;
22690           if (token->type == CPP_PLUS)
22691             is_class_method = true;
22692           else
22693             is_class_method = false;
22694           sig = cp_parser_objc_method_signature (parser, &attributes);
22695           if (sig == error_mark_node)
22696             {
22697               cp_parser_skip_to_end_of_block_or_statement (parser);
22698               token = cp_lexer_peek_token (parser->lexer);
22699               continue;
22700             }
22701           objc_add_method_declaration (is_class_method, sig, attributes);
22702           cp_parser_consume_semicolon_at_end_of_statement (parser);
22703         }
22704       else if (token->keyword == RID_AT_PROPERTY)
22705         cp_parser_objc_at_property_declaration (parser);
22706       else if (token->keyword == RID_ATTRIBUTE 
22707                && cp_parser_objc_method_maybe_bad_prefix_attributes(parser))
22708         warning_at (cp_lexer_peek_token (parser->lexer)->location, 
22709                     OPT_Wattributes, 
22710                     "prefix attributes are ignored for methods");
22711       else
22712         /* Allow for interspersed non-ObjC++ code.  */
22713         cp_parser_objc_interstitial_code (parser);
22714
22715       token = cp_lexer_peek_token (parser->lexer);
22716     }
22717
22718   if (token->type != CPP_EOF)
22719     cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
22720   else
22721     cp_parser_error (parser, "expected %<@end%>");
22722
22723   objc_finish_interface ();
22724 }
22725
22726 /* Parse an Objective-C method definition list.  */
22727
22728 static void
22729 cp_parser_objc_method_definition_list (cp_parser* parser)
22730 {
22731   cp_token *token = cp_lexer_peek_token (parser->lexer);
22732
22733   while (token->keyword != RID_AT_END && token->type != CPP_EOF)
22734     {
22735       tree meth;
22736
22737       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
22738         {
22739           cp_token *ptk;
22740           tree sig, attribute;
22741           bool is_class_method;
22742           if (token->type == CPP_PLUS)
22743             is_class_method = true;
22744           else
22745             is_class_method = false;
22746           push_deferring_access_checks (dk_deferred);
22747           sig = cp_parser_objc_method_signature (parser, &attribute);
22748           if (sig == error_mark_node)
22749             {
22750               cp_parser_skip_to_end_of_block_or_statement (parser);
22751               token = cp_lexer_peek_token (parser->lexer);
22752               continue;
22753             }
22754           objc_start_method_definition (is_class_method, sig, attribute,
22755                                         NULL_TREE);
22756
22757           /* For historical reasons, we accept an optional semicolon.  */
22758           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
22759             cp_lexer_consume_token (parser->lexer);
22760
22761           ptk = cp_lexer_peek_token (parser->lexer);
22762           if (!(ptk->type == CPP_PLUS || ptk->type == CPP_MINUS 
22763                 || ptk->type == CPP_EOF || ptk->keyword == RID_AT_END))
22764             {
22765               perform_deferred_access_checks ();
22766               stop_deferring_access_checks ();
22767               meth = cp_parser_function_definition_after_declarator (parser,
22768                                                                      false);
22769               pop_deferring_access_checks ();
22770               objc_finish_method_definition (meth);
22771             }
22772         }
22773       /* The following case will be removed once @synthesize is
22774          completely implemented.  */
22775       else if (token->keyword == RID_AT_PROPERTY)
22776         cp_parser_objc_at_property_declaration (parser);
22777       else if (token->keyword == RID_AT_SYNTHESIZE)
22778         cp_parser_objc_at_synthesize_declaration (parser);
22779       else if (token->keyword == RID_AT_DYNAMIC)
22780         cp_parser_objc_at_dynamic_declaration (parser);
22781       else if (token->keyword == RID_ATTRIBUTE 
22782                && cp_parser_objc_method_maybe_bad_prefix_attributes(parser))
22783         warning_at (token->location, OPT_Wattributes,
22784                     "prefix attributes are ignored for methods");
22785       else
22786         /* Allow for interspersed non-ObjC++ code.  */
22787         cp_parser_objc_interstitial_code (parser);
22788
22789       token = cp_lexer_peek_token (parser->lexer);
22790     }
22791
22792   if (token->type != CPP_EOF)
22793     cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
22794   else
22795     cp_parser_error (parser, "expected %<@end%>");
22796
22797   objc_finish_implementation ();
22798 }
22799
22800 /* Parse Objective-C ivars.  */
22801
22802 static void
22803 cp_parser_objc_class_ivars (cp_parser* parser)
22804 {
22805   cp_token *token = cp_lexer_peek_token (parser->lexer);
22806
22807   if (token->type != CPP_OPEN_BRACE)
22808     return;     /* No ivars specified.  */
22809
22810   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
22811   token = cp_lexer_peek_token (parser->lexer);
22812
22813   while (token->type != CPP_CLOSE_BRACE 
22814         && token->keyword != RID_AT_END && token->type != CPP_EOF)
22815     {
22816       cp_decl_specifier_seq declspecs;
22817       int decl_class_or_enum_p;
22818       tree prefix_attributes;
22819
22820       cp_parser_objc_visibility_spec (parser);
22821
22822       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
22823         break;
22824
22825       cp_parser_decl_specifier_seq (parser,
22826                                     CP_PARSER_FLAGS_OPTIONAL,
22827                                     &declspecs,
22828                                     &decl_class_or_enum_p);
22829
22830       /* auto, register, static, extern, mutable.  */
22831       if (declspecs.storage_class != sc_none)
22832         {
22833           cp_parser_error (parser, "invalid type for instance variable");         
22834           declspecs.storage_class = sc_none;
22835         }
22836
22837       /* __thread.  */
22838       if (declspecs.specs[(int) ds_thread])
22839         {
22840           cp_parser_error (parser, "invalid type for instance variable");
22841           declspecs.specs[(int) ds_thread] = 0;
22842         }
22843       
22844       /* typedef.  */
22845       if (declspecs.specs[(int) ds_typedef])
22846         {
22847           cp_parser_error (parser, "invalid type for instance variable");
22848           declspecs.specs[(int) ds_typedef] = 0;
22849         }
22850
22851       prefix_attributes = declspecs.attributes;
22852       declspecs.attributes = NULL_TREE;
22853
22854       /* Keep going until we hit the `;' at the end of the
22855          declaration.  */
22856       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
22857         {
22858           tree width = NULL_TREE, attributes, first_attribute, decl;
22859           cp_declarator *declarator = NULL;
22860           int ctor_dtor_or_conv_p;
22861
22862           /* Check for a (possibly unnamed) bitfield declaration.  */
22863           token = cp_lexer_peek_token (parser->lexer);
22864           if (token->type == CPP_COLON)
22865             goto eat_colon;
22866
22867           if (token->type == CPP_NAME
22868               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
22869                   == CPP_COLON))
22870             {
22871               /* Get the name of the bitfield.  */
22872               declarator = make_id_declarator (NULL_TREE,
22873                                                cp_parser_identifier (parser),
22874                                                sfk_none);
22875
22876              eat_colon:
22877               cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
22878               /* Get the width of the bitfield.  */
22879               width
22880                 = cp_parser_constant_expression (parser,
22881                                                  /*allow_non_constant=*/false,
22882                                                  NULL);
22883             }
22884           else
22885             {
22886               /* Parse the declarator.  */
22887               declarator
22888                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
22889                                         &ctor_dtor_or_conv_p,
22890                                         /*parenthesized_p=*/NULL,
22891                                         /*member_p=*/false);
22892             }
22893
22894           /* Look for attributes that apply to the ivar.  */
22895           attributes = cp_parser_attributes_opt (parser);
22896           /* Remember which attributes are prefix attributes and
22897              which are not.  */
22898           first_attribute = attributes;
22899           /* Combine the attributes.  */
22900           attributes = chainon (prefix_attributes, attributes);
22901
22902           if (width)
22903               /* Create the bitfield declaration.  */
22904               decl = grokbitfield (declarator, &declspecs,
22905                                    width,
22906                                    attributes);
22907           else
22908             decl = grokfield (declarator, &declspecs,
22909                               NULL_TREE, /*init_const_expr_p=*/false,
22910                               NULL_TREE, attributes);
22911
22912           /* Add the instance variable.  */
22913           if (decl != error_mark_node && decl != NULL_TREE)
22914             objc_add_instance_variable (decl);
22915
22916           /* Reset PREFIX_ATTRIBUTES.  */
22917           while (attributes && TREE_CHAIN (attributes) != first_attribute)
22918             attributes = TREE_CHAIN (attributes);
22919           if (attributes)
22920             TREE_CHAIN (attributes) = NULL_TREE;
22921
22922           token = cp_lexer_peek_token (parser->lexer);
22923
22924           if (token->type == CPP_COMMA)
22925             {
22926               cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
22927               continue;
22928             }
22929           break;
22930         }
22931
22932       cp_parser_consume_semicolon_at_end_of_statement (parser);
22933       token = cp_lexer_peek_token (parser->lexer);
22934     }
22935
22936   if (token->keyword == RID_AT_END)
22937     cp_parser_error (parser, "expected %<}%>");
22938
22939   /* Do not consume the RID_AT_END, so it will be read again as terminating
22940      the @interface of @implementation.  */ 
22941   if (token->keyword != RID_AT_END && token->type != CPP_EOF)
22942     cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
22943     
22944   /* For historical reasons, we accept an optional semicolon.  */
22945   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
22946     cp_lexer_consume_token (parser->lexer);
22947 }
22948
22949 /* Parse an Objective-C protocol declaration.  */
22950
22951 static void
22952 cp_parser_objc_protocol_declaration (cp_parser* parser, tree attributes)
22953 {
22954   tree proto, protorefs;
22955   cp_token *tok;
22956
22957   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
22958   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
22959     {
22960       tok = cp_lexer_peek_token (parser->lexer);
22961       error_at (tok->location, "identifier expected after %<@protocol%>");
22962       cp_parser_consume_semicolon_at_end_of_statement (parser);
22963       return;
22964     }
22965
22966   /* See if we have a forward declaration or a definition.  */
22967   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
22968
22969   /* Try a forward declaration first.  */
22970   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
22971     {
22972       while (true)
22973         {
22974           tree id;
22975           
22976           id = cp_parser_identifier (parser);
22977           if (id == error_mark_node)
22978             break;
22979           
22980           objc_declare_protocol (id, attributes);
22981           
22982           if(cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
22983             cp_lexer_consume_token (parser->lexer);
22984           else
22985             break;
22986         }
22987       cp_parser_consume_semicolon_at_end_of_statement (parser);
22988     }
22989
22990   /* Ok, we got a full-fledged definition (or at least should).  */
22991   else
22992     {
22993       proto = cp_parser_identifier (parser);
22994       protorefs = cp_parser_objc_protocol_refs_opt (parser);
22995       objc_start_protocol (proto, protorefs, attributes);
22996       cp_parser_objc_method_prototype_list (parser);
22997     }
22998 }
22999
23000 /* Parse an Objective-C superclass or category.  */
23001
23002 static void
23003 cp_parser_objc_superclass_or_category (cp_parser *parser, 
23004                                        bool iface_p,
23005                                        tree *super,
23006                                        tree *categ, bool *is_class_extension)
23007 {
23008   cp_token *next = cp_lexer_peek_token (parser->lexer);
23009
23010   *super = *categ = NULL_TREE;
23011   *is_class_extension = false;
23012   if (next->type == CPP_COLON)
23013     {
23014       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
23015       *super = cp_parser_identifier (parser);
23016     }
23017   else if (next->type == CPP_OPEN_PAREN)
23018     {
23019       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
23020
23021       /* If there is no category name, and this is an @interface, we
23022          have a class extension.  */
23023       if (iface_p && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
23024         {
23025           *categ = NULL_TREE;
23026           *is_class_extension = true;
23027         }
23028       else
23029         *categ = cp_parser_identifier (parser);
23030
23031       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23032     }
23033 }
23034
23035 /* Parse an Objective-C class interface.  */
23036
23037 static void
23038 cp_parser_objc_class_interface (cp_parser* parser, tree attributes)
23039 {
23040   tree name, super, categ, protos;
23041   bool is_class_extension;
23042
23043   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
23044   name = cp_parser_identifier (parser);
23045   if (name == error_mark_node)
23046     {
23047       /* It's hard to recover because even if valid @interface stuff
23048          is to follow, we can't compile it (or validate it) if we
23049          don't even know which class it refers to.  Let's assume this
23050          was a stray '@interface' token in the stream and skip it.
23051       */
23052       return;
23053     }
23054   cp_parser_objc_superclass_or_category (parser, true, &super, &categ,
23055                                          &is_class_extension);
23056   protos = cp_parser_objc_protocol_refs_opt (parser);
23057
23058   /* We have either a class or a category on our hands.  */
23059   if (categ || is_class_extension)
23060     objc_start_category_interface (name, categ, protos, attributes);
23061   else
23062     {
23063       objc_start_class_interface (name, super, protos, attributes);
23064       /* Handle instance variable declarations, if any.  */
23065       cp_parser_objc_class_ivars (parser);
23066       objc_continue_interface ();
23067     }
23068
23069   cp_parser_objc_method_prototype_list (parser);
23070 }
23071
23072 /* Parse an Objective-C class implementation.  */
23073
23074 static void
23075 cp_parser_objc_class_implementation (cp_parser* parser)
23076 {
23077   tree name, super, categ;
23078   bool is_class_extension;
23079
23080   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
23081   name = cp_parser_identifier (parser);
23082   if (name == error_mark_node)
23083     {
23084       /* It's hard to recover because even if valid @implementation
23085          stuff is to follow, we can't compile it (or validate it) if
23086          we don't even know which class it refers to.  Let's assume
23087          this was a stray '@implementation' token in the stream and
23088          skip it.
23089       */
23090       return;
23091     }
23092   cp_parser_objc_superclass_or_category (parser, false, &super, &categ,
23093                                          &is_class_extension);
23094
23095   /* We have either a class or a category on our hands.  */
23096   if (categ)
23097     objc_start_category_implementation (name, categ);
23098   else
23099     {
23100       objc_start_class_implementation (name, super);
23101       /* Handle instance variable declarations, if any.  */
23102       cp_parser_objc_class_ivars (parser);
23103       objc_continue_implementation ();
23104     }
23105
23106   cp_parser_objc_method_definition_list (parser);
23107 }
23108
23109 /* Consume the @end token and finish off the implementation.  */
23110
23111 static void
23112 cp_parser_objc_end_implementation (cp_parser* parser)
23113 {
23114   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
23115   objc_finish_implementation ();
23116 }
23117
23118 /* Parse an Objective-C declaration.  */
23119
23120 static void
23121 cp_parser_objc_declaration (cp_parser* parser, tree attributes)
23122 {
23123   /* Try to figure out what kind of declaration is present.  */
23124   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
23125
23126   if (attributes)
23127     switch (kwd->keyword)
23128       {
23129         case RID_AT_ALIAS:
23130         case RID_AT_CLASS:
23131         case RID_AT_END:
23132           error_at (kwd->location, "attributes may not be specified before"
23133                     " the %<@%D%> Objective-C++ keyword",
23134                     kwd->u.value);
23135           attributes = NULL;
23136           break;
23137         case RID_AT_IMPLEMENTATION:
23138           warning_at (kwd->location, OPT_Wattributes,
23139                       "prefix attributes are ignored before %<@%D%>",
23140                       kwd->u.value);
23141           attributes = NULL;
23142         default:
23143           break;
23144       }
23145
23146   switch (kwd->keyword)
23147     {
23148     case RID_AT_ALIAS:
23149       cp_parser_objc_alias_declaration (parser);
23150       break;
23151     case RID_AT_CLASS:
23152       cp_parser_objc_class_declaration (parser);
23153       break;
23154     case RID_AT_PROTOCOL:
23155       cp_parser_objc_protocol_declaration (parser, attributes);
23156       break;
23157     case RID_AT_INTERFACE:
23158       cp_parser_objc_class_interface (parser, attributes);
23159       break;
23160     case RID_AT_IMPLEMENTATION:
23161       cp_parser_objc_class_implementation (parser);
23162       break;
23163     case RID_AT_END:
23164       cp_parser_objc_end_implementation (parser);
23165       break;
23166     default:
23167       error_at (kwd->location, "misplaced %<@%D%> Objective-C++ construct",
23168                 kwd->u.value);
23169       cp_parser_skip_to_end_of_block_or_statement (parser);
23170     }
23171 }
23172
23173 /* Parse an Objective-C try-catch-finally statement.
23174
23175    objc-try-catch-finally-stmt:
23176      @try compound-statement objc-catch-clause-seq [opt]
23177        objc-finally-clause [opt]
23178
23179    objc-catch-clause-seq:
23180      objc-catch-clause objc-catch-clause-seq [opt]
23181
23182    objc-catch-clause:
23183      @catch ( objc-exception-declaration ) compound-statement
23184
23185    objc-finally-clause:
23186      @finally compound-statement
23187
23188    objc-exception-declaration:
23189      parameter-declaration
23190      '...'
23191
23192    where '...' is to be interpreted literally, that is, it means CPP_ELLIPSIS.
23193
23194    Returns NULL_TREE.
23195
23196    PS: This function is identical to c_parser_objc_try_catch_finally_statement
23197    for C.  Keep them in sync.  */   
23198
23199 static tree
23200 cp_parser_objc_try_catch_finally_statement (cp_parser *parser)
23201 {
23202   location_t location;
23203   tree stmt;
23204
23205   cp_parser_require_keyword (parser, RID_AT_TRY, RT_AT_TRY);
23206   location = cp_lexer_peek_token (parser->lexer)->location;
23207   objc_maybe_warn_exceptions (location);
23208   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
23209      node, lest it get absorbed into the surrounding block.  */
23210   stmt = push_stmt_list ();
23211   cp_parser_compound_statement (parser, NULL, false, false);
23212   objc_begin_try_stmt (location, pop_stmt_list (stmt));
23213
23214   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
23215     {
23216       cp_parameter_declarator *parm;
23217       tree parameter_declaration = error_mark_node;
23218       bool seen_open_paren = false;
23219
23220       cp_lexer_consume_token (parser->lexer);
23221       if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
23222         seen_open_paren = true;
23223       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
23224         {
23225           /* We have "@catch (...)" (where the '...' are literally
23226              what is in the code).  Skip the '...'.
23227              parameter_declaration is set to NULL_TREE, and
23228              objc_being_catch_clauses() knows that that means
23229              '...'.  */
23230           cp_lexer_consume_token (parser->lexer);
23231           parameter_declaration = NULL_TREE;
23232         }
23233       else
23234         {
23235           /* We have "@catch (NSException *exception)" or something
23236              like that.  Parse the parameter declaration.  */
23237           parm = cp_parser_parameter_declaration (parser, false, NULL);
23238           if (parm == NULL)
23239             parameter_declaration = error_mark_node;
23240           else
23241             parameter_declaration = grokdeclarator (parm->declarator,
23242                                                     &parm->decl_specifiers,
23243                                                     PARM, /*initialized=*/0,
23244                                                     /*attrlist=*/NULL);
23245         }
23246       if (seen_open_paren)
23247         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23248       else
23249         {
23250           /* If there was no open parenthesis, we are recovering from
23251              an error, and we are trying to figure out what mistake
23252              the user has made.  */
23253
23254           /* If there is an immediate closing parenthesis, the user
23255              probably forgot the opening one (ie, they typed "@catch
23256              NSException *e)".  Parse the closing parenthesis and keep
23257              going.  */
23258           if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
23259             cp_lexer_consume_token (parser->lexer);
23260           
23261           /* If these is no immediate closing parenthesis, the user
23262              probably doesn't know that parenthesis are required at
23263              all (ie, they typed "@catch NSException *e").  So, just
23264              forget about the closing parenthesis and keep going.  */
23265         }
23266       objc_begin_catch_clause (parameter_declaration);
23267       cp_parser_compound_statement (parser, NULL, false, false);
23268       objc_finish_catch_clause ();
23269     }
23270   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
23271     {
23272       cp_lexer_consume_token (parser->lexer);
23273       location = cp_lexer_peek_token (parser->lexer)->location;
23274       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
23275          node, lest it get absorbed into the surrounding block.  */
23276       stmt = push_stmt_list ();
23277       cp_parser_compound_statement (parser, NULL, false, false);
23278       objc_build_finally_clause (location, pop_stmt_list (stmt));
23279     }
23280
23281   return objc_finish_try_stmt ();
23282 }
23283
23284 /* Parse an Objective-C synchronized statement.
23285
23286    objc-synchronized-stmt:
23287      @synchronized ( expression ) compound-statement
23288
23289    Returns NULL_TREE.  */
23290
23291 static tree
23292 cp_parser_objc_synchronized_statement (cp_parser *parser)
23293 {
23294   location_t location;
23295   tree lock, stmt;
23296
23297   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, RT_AT_SYNCHRONIZED);
23298
23299   location = cp_lexer_peek_token (parser->lexer)->location;
23300   objc_maybe_warn_exceptions (location);
23301   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
23302   lock = cp_parser_expression (parser, false, NULL);
23303   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23304
23305   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
23306      node, lest it get absorbed into the surrounding block.  */
23307   stmt = push_stmt_list ();
23308   cp_parser_compound_statement (parser, NULL, false, false);
23309
23310   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
23311 }
23312
23313 /* Parse an Objective-C throw statement.
23314
23315    objc-throw-stmt:
23316      @throw assignment-expression [opt] ;
23317
23318    Returns a constructed '@throw' statement.  */
23319
23320 static tree
23321 cp_parser_objc_throw_statement (cp_parser *parser)
23322 {
23323   tree expr = NULL_TREE;
23324   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
23325
23326   cp_parser_require_keyword (parser, RID_AT_THROW, RT_AT_THROW);
23327
23328   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
23329     expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
23330
23331   cp_parser_consume_semicolon_at_end_of_statement (parser);
23332
23333   return objc_build_throw_stmt (loc, expr);
23334 }
23335
23336 /* Parse an Objective-C statement.  */
23337
23338 static tree
23339 cp_parser_objc_statement (cp_parser * parser)
23340 {
23341   /* Try to figure out what kind of declaration is present.  */
23342   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
23343
23344   switch (kwd->keyword)
23345     {
23346     case RID_AT_TRY:
23347       return cp_parser_objc_try_catch_finally_statement (parser);
23348     case RID_AT_SYNCHRONIZED:
23349       return cp_parser_objc_synchronized_statement (parser);
23350     case RID_AT_THROW:
23351       return cp_parser_objc_throw_statement (parser);
23352     default:
23353       error_at (kwd->location, "misplaced %<@%D%> Objective-C++ construct",
23354                kwd->u.value);
23355       cp_parser_skip_to_end_of_block_or_statement (parser);
23356     }
23357
23358   return error_mark_node;
23359 }
23360
23361 /* If we are compiling ObjC++ and we see an __attribute__ we neeed to 
23362    look ahead to see if an objc keyword follows the attributes.  This
23363    is to detect the use of prefix attributes on ObjC @interface and 
23364    @protocol.  */
23365
23366 static bool
23367 cp_parser_objc_valid_prefix_attributes (cp_parser* parser, tree *attrib)
23368 {
23369   cp_lexer_save_tokens (parser->lexer);
23370   *attrib = cp_parser_attributes_opt (parser);
23371   gcc_assert (*attrib);
23372   if (OBJC_IS_AT_KEYWORD (cp_lexer_peek_token (parser->lexer)->keyword))
23373     {
23374       cp_lexer_commit_tokens (parser->lexer);
23375       return true;
23376     }
23377   cp_lexer_rollback_tokens (parser->lexer);
23378   return false;  
23379 }
23380
23381 /* This routine is a minimal replacement for
23382    c_parser_struct_declaration () used when parsing the list of
23383    types/names or ObjC++ properties.  For example, when parsing the
23384    code
23385
23386    @property (readonly) int a, b, c;
23387
23388    this function is responsible for parsing "int a, int b, int c" and
23389    returning the declarations as CHAIN of DECLs.
23390
23391    TODO: Share this code with cp_parser_objc_class_ivars.  It's very
23392    similar parsing.  */
23393 static tree
23394 cp_parser_objc_struct_declaration (cp_parser *parser)
23395 {
23396   tree decls = NULL_TREE;
23397   cp_decl_specifier_seq declspecs;
23398   int decl_class_or_enum_p;
23399   tree prefix_attributes;
23400
23401   cp_parser_decl_specifier_seq (parser,
23402                                 CP_PARSER_FLAGS_NONE,
23403                                 &declspecs,
23404                                 &decl_class_or_enum_p);
23405
23406   if (declspecs.type == error_mark_node)
23407     return error_mark_node;
23408
23409   /* auto, register, static, extern, mutable.  */
23410   if (declspecs.storage_class != sc_none)
23411     {
23412       cp_parser_error (parser, "invalid type for property");
23413       declspecs.storage_class = sc_none;
23414     }
23415   
23416   /* __thread.  */
23417   if (declspecs.specs[(int) ds_thread])
23418     {
23419       cp_parser_error (parser, "invalid type for property");
23420       declspecs.specs[(int) ds_thread] = 0;
23421     }
23422   
23423   /* typedef.  */
23424   if (declspecs.specs[(int) ds_typedef])
23425     {
23426       cp_parser_error (parser, "invalid type for property");
23427       declspecs.specs[(int) ds_typedef] = 0;
23428     }
23429
23430   prefix_attributes = declspecs.attributes;
23431   declspecs.attributes = NULL_TREE;
23432
23433   /* Keep going until we hit the `;' at the end of the declaration. */
23434   while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
23435     {
23436       tree attributes, first_attribute, decl;
23437       cp_declarator *declarator;
23438       cp_token *token;
23439
23440       /* Parse the declarator.  */
23441       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
23442                                          NULL, NULL, false);
23443
23444       /* Look for attributes that apply to the ivar.  */
23445       attributes = cp_parser_attributes_opt (parser);
23446       /* Remember which attributes are prefix attributes and
23447          which are not.  */
23448       first_attribute = attributes;
23449       /* Combine the attributes.  */
23450       attributes = chainon (prefix_attributes, attributes);
23451       
23452       decl = grokfield (declarator, &declspecs,
23453                         NULL_TREE, /*init_const_expr_p=*/false,
23454                         NULL_TREE, attributes);
23455
23456       if (decl == error_mark_node || decl == NULL_TREE)
23457         return error_mark_node;
23458       
23459       /* Reset PREFIX_ATTRIBUTES.  */
23460       while (attributes && TREE_CHAIN (attributes) != first_attribute)
23461         attributes = TREE_CHAIN (attributes);
23462       if (attributes)
23463         TREE_CHAIN (attributes) = NULL_TREE;
23464
23465       DECL_CHAIN (decl) = decls;
23466       decls = decl;
23467
23468       token = cp_lexer_peek_token (parser->lexer);
23469       if (token->type == CPP_COMMA)
23470         {
23471           cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
23472           continue;
23473         }
23474       else
23475         break;
23476     }
23477   return decls;
23478 }
23479
23480 /* Parse an Objective-C @property declaration.  The syntax is:
23481
23482    objc-property-declaration:
23483      '@property' objc-property-attributes[opt] struct-declaration ;
23484
23485    objc-property-attributes:
23486     '(' objc-property-attribute-list ')'
23487
23488    objc-property-attribute-list:
23489      objc-property-attribute
23490      objc-property-attribute-list, objc-property-attribute
23491
23492    objc-property-attribute
23493      'getter' = identifier
23494      'setter' = identifier
23495      'readonly'
23496      'readwrite'
23497      'assign'
23498      'retain'
23499      'copy'
23500      'nonatomic'
23501
23502   For example:
23503     @property NSString *name;
23504     @property (readonly) id object;
23505     @property (retain, nonatomic, getter=getTheName) id name;
23506     @property int a, b, c;
23507
23508    PS: This function is identical to
23509    c_parser_objc_at_property_declaration for C.  Keep them in sync.  */
23510 static void 
23511 cp_parser_objc_at_property_declaration (cp_parser *parser)
23512 {
23513   /* The following variables hold the attributes of the properties as
23514      parsed.  They are 'false' or 'NULL_TREE' if the attribute was not
23515      seen.  When we see an attribute, we set them to 'true' (if they
23516      are boolean properties) or to the identifier (if they have an
23517      argument, ie, for getter and setter).  Note that here we only
23518      parse the list of attributes, check the syntax and accumulate the
23519      attributes that we find.  objc_add_property_declaration() will
23520      then process the information.  */
23521   bool property_assign = false;
23522   bool property_copy = false;
23523   tree property_getter_ident = NULL_TREE;
23524   bool property_nonatomic = false;
23525   bool property_readonly = false;
23526   bool property_readwrite = false;
23527   bool property_retain = false;
23528   tree property_setter_ident = NULL_TREE;
23529
23530   /* 'properties' is the list of properties that we read.  Usually a
23531      single one, but maybe more (eg, in "@property int a, b, c;" there
23532      are three).  */
23533   tree properties;
23534   location_t loc;
23535
23536   loc = cp_lexer_peek_token (parser->lexer)->location;
23537
23538   cp_lexer_consume_token (parser->lexer);  /* Eat '@property'.  */
23539
23540   /* Parse the optional attribute list...  */
23541   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
23542     {
23543       /* Eat the '('.  */
23544       cp_lexer_consume_token (parser->lexer);
23545
23546       while (true)
23547         {
23548           bool syntax_error = false;
23549           cp_token *token = cp_lexer_peek_token (parser->lexer);
23550           enum rid keyword;
23551
23552           if (token->type != CPP_NAME)
23553             {
23554               cp_parser_error (parser, "expected identifier");
23555               break;
23556             }
23557           keyword = C_RID_CODE (token->u.value);
23558           cp_lexer_consume_token (parser->lexer);
23559           switch (keyword)
23560             {
23561             case RID_ASSIGN:    property_assign = true;    break;
23562             case RID_COPY:      property_copy = true;      break;
23563             case RID_NONATOMIC: property_nonatomic = true; break;
23564             case RID_READONLY:  property_readonly = true;  break;
23565             case RID_READWRITE: property_readwrite = true; break;
23566             case RID_RETAIN:    property_retain = true;    break;
23567
23568             case RID_GETTER:
23569             case RID_SETTER:
23570               if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
23571                 {
23572                   if (keyword == RID_GETTER)
23573                     cp_parser_error (parser,
23574                                      "missing %<=%> (after %<getter%> attribute)");
23575                   else
23576                     cp_parser_error (parser,
23577                                      "missing %<=%> (after %<setter%> attribute)");
23578                   syntax_error = true;
23579                   break;
23580                 }
23581               cp_lexer_consume_token (parser->lexer); /* eat the = */
23582               if (!cp_parser_objc_selector_p (cp_lexer_peek_token (parser->lexer)->type))
23583                 {
23584                   cp_parser_error (parser, "expected identifier");
23585                   syntax_error = true;
23586                   break;
23587                 }
23588               if (keyword == RID_SETTER)
23589                 {
23590                   if (property_setter_ident != NULL_TREE)
23591                     {
23592                       cp_parser_error (parser, "the %<setter%> attribute may only be specified once");
23593                       cp_lexer_consume_token (parser->lexer);
23594                     }
23595                   else
23596                     property_setter_ident = cp_parser_objc_selector (parser);
23597                   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
23598                     cp_parser_error (parser, "setter name must terminate with %<:%>");
23599                   else
23600                     cp_lexer_consume_token (parser->lexer);
23601                 }
23602               else
23603                 {
23604                   if (property_getter_ident != NULL_TREE)
23605                     {
23606                       cp_parser_error (parser, "the %<getter%> attribute may only be specified once");
23607                       cp_lexer_consume_token (parser->lexer);
23608                     }
23609                   else
23610                     property_getter_ident = cp_parser_objc_selector (parser);
23611                 }
23612               break;
23613             default:
23614               cp_parser_error (parser, "unknown property attribute");
23615               syntax_error = true;
23616               break;
23617             }
23618
23619           if (syntax_error)
23620             break;
23621
23622           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23623             cp_lexer_consume_token (parser->lexer);
23624           else
23625             break;
23626         }
23627
23628       /* FIXME: "@property (setter, assign);" will generate a spurious
23629          "error: expected â€˜)’ before â€˜,’ token".  This is because
23630          cp_parser_require, unlike the C counterpart, will produce an
23631          error even if we are in error recovery.  */
23632       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
23633         {
23634           cp_parser_skip_to_closing_parenthesis (parser,
23635                                                  /*recovering=*/true,
23636                                                  /*or_comma=*/false,
23637                                                  /*consume_paren=*/true);
23638         }
23639     }
23640
23641   /* ... and the property declaration(s).  */
23642   properties = cp_parser_objc_struct_declaration (parser);
23643
23644   if (properties == error_mark_node)
23645     {
23646       cp_parser_skip_to_end_of_statement (parser);
23647       /* If the next token is now a `;', consume it.  */
23648       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
23649         cp_lexer_consume_token (parser->lexer);
23650       return;
23651     }
23652
23653   if (properties == NULL_TREE)
23654     cp_parser_error (parser, "expected identifier");
23655   else
23656     {
23657       /* Comma-separated properties are chained together in
23658          reverse order; add them one by one.  */
23659       properties = nreverse (properties);
23660       
23661       for (; properties; properties = TREE_CHAIN (properties))
23662         objc_add_property_declaration (loc, copy_node (properties),
23663                                        property_readonly, property_readwrite,
23664                                        property_assign, property_retain,
23665                                        property_copy, property_nonatomic,
23666                                        property_getter_ident, property_setter_ident);
23667     }
23668   
23669   cp_parser_consume_semicolon_at_end_of_statement (parser);
23670 }
23671
23672 /* Parse an Objective-C++ @synthesize declaration.  The syntax is:
23673
23674    objc-synthesize-declaration:
23675      @synthesize objc-synthesize-identifier-list ;
23676
23677    objc-synthesize-identifier-list:
23678      objc-synthesize-identifier
23679      objc-synthesize-identifier-list, objc-synthesize-identifier
23680
23681    objc-synthesize-identifier
23682      identifier
23683      identifier = identifier
23684
23685   For example:
23686     @synthesize MyProperty;
23687     @synthesize OneProperty, AnotherProperty=MyIvar, YetAnotherProperty;
23688
23689   PS: This function is identical to c_parser_objc_at_synthesize_declaration
23690   for C.  Keep them in sync.
23691 */
23692 static void 
23693 cp_parser_objc_at_synthesize_declaration (cp_parser *parser)
23694 {
23695   tree list = NULL_TREE;
23696   location_t loc;
23697   loc = cp_lexer_peek_token (parser->lexer)->location;
23698
23699   cp_lexer_consume_token (parser->lexer);  /* Eat '@synthesize'.  */
23700   while (true)
23701     {
23702       tree property, ivar;
23703       property = cp_parser_identifier (parser);
23704       if (property == error_mark_node)
23705         {
23706           cp_parser_consume_semicolon_at_end_of_statement (parser);
23707           return;
23708         }
23709       if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
23710         {
23711           cp_lexer_consume_token (parser->lexer);
23712           ivar = cp_parser_identifier (parser);
23713           if (ivar == error_mark_node)
23714             {
23715               cp_parser_consume_semicolon_at_end_of_statement (parser);
23716               return;
23717             }
23718         }
23719       else
23720         ivar = NULL_TREE;
23721       list = chainon (list, build_tree_list (ivar, property));
23722       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23723         cp_lexer_consume_token (parser->lexer);
23724       else
23725         break;
23726     }
23727   cp_parser_consume_semicolon_at_end_of_statement (parser);
23728   objc_add_synthesize_declaration (loc, list);
23729 }
23730
23731 /* Parse an Objective-C++ @dynamic declaration.  The syntax is:
23732
23733    objc-dynamic-declaration:
23734      @dynamic identifier-list ;
23735
23736    For example:
23737      @dynamic MyProperty;
23738      @dynamic MyProperty, AnotherProperty;
23739
23740   PS: This function is identical to c_parser_objc_at_dynamic_declaration
23741   for C.  Keep them in sync.
23742 */
23743 static void 
23744 cp_parser_objc_at_dynamic_declaration (cp_parser *parser)
23745 {
23746   tree list = NULL_TREE;
23747   location_t loc;
23748   loc = cp_lexer_peek_token (parser->lexer)->location;
23749
23750   cp_lexer_consume_token (parser->lexer);  /* Eat '@dynamic'.  */
23751   while (true)
23752     {
23753       tree property;
23754       property = cp_parser_identifier (parser);
23755       if (property == error_mark_node)
23756         {
23757           cp_parser_consume_semicolon_at_end_of_statement (parser);
23758           return;
23759         }
23760       list = chainon (list, build_tree_list (NULL, property));
23761       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23762         cp_lexer_consume_token (parser->lexer);
23763       else
23764         break;
23765     }
23766   cp_parser_consume_semicolon_at_end_of_statement (parser);
23767   objc_add_dynamic_declaration (loc, list);
23768 }
23769
23770 \f
23771 /* OpenMP 2.5 parsing routines.  */
23772
23773 /* Returns name of the next clause.
23774    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
23775    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
23776    returned and the token is consumed.  */
23777
23778 static pragma_omp_clause
23779 cp_parser_omp_clause_name (cp_parser *parser)
23780 {
23781   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
23782
23783   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
23784     result = PRAGMA_OMP_CLAUSE_IF;
23785   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
23786     result = PRAGMA_OMP_CLAUSE_DEFAULT;
23787   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
23788     result = PRAGMA_OMP_CLAUSE_PRIVATE;
23789   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
23790     {
23791       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
23792       const char *p = IDENTIFIER_POINTER (id);
23793
23794       switch (p[0])
23795         {
23796         case 'c':
23797           if (!strcmp ("collapse", p))
23798             result = PRAGMA_OMP_CLAUSE_COLLAPSE;
23799           else if (!strcmp ("copyin", p))
23800             result = PRAGMA_OMP_CLAUSE_COPYIN;
23801           else if (!strcmp ("copyprivate", p))
23802             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
23803           break;
23804         case 'f':
23805           if (!strcmp ("final", p))
23806             result = PRAGMA_OMP_CLAUSE_FINAL;
23807           else if (!strcmp ("firstprivate", p))
23808             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
23809           break;
23810         case 'l':
23811           if (!strcmp ("lastprivate", p))
23812             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
23813           break;
23814         case 'm':
23815           if (!strcmp ("mergeable", p))
23816             result = PRAGMA_OMP_CLAUSE_MERGEABLE;
23817           break;
23818         case 'n':
23819           if (!strcmp ("nowait", p))
23820             result = PRAGMA_OMP_CLAUSE_NOWAIT;
23821           else if (!strcmp ("num_threads", p))
23822             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
23823           break;
23824         case 'o':
23825           if (!strcmp ("ordered", p))
23826             result = PRAGMA_OMP_CLAUSE_ORDERED;
23827           break;
23828         case 'r':
23829           if (!strcmp ("reduction", p))
23830             result = PRAGMA_OMP_CLAUSE_REDUCTION;
23831           break;
23832         case 's':
23833           if (!strcmp ("schedule", p))
23834             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
23835           else if (!strcmp ("shared", p))
23836             result = PRAGMA_OMP_CLAUSE_SHARED;
23837           break;
23838         case 'u':
23839           if (!strcmp ("untied", p))
23840             result = PRAGMA_OMP_CLAUSE_UNTIED;
23841           break;
23842         }
23843     }
23844
23845   if (result != PRAGMA_OMP_CLAUSE_NONE)
23846     cp_lexer_consume_token (parser->lexer);
23847
23848   return result;
23849 }
23850
23851 /* Validate that a clause of the given type does not already exist.  */
23852
23853 static void
23854 check_no_duplicate_clause (tree clauses, enum omp_clause_code code,
23855                            const char *name, location_t location)
23856 {
23857   tree c;
23858
23859   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
23860     if (OMP_CLAUSE_CODE (c) == code)
23861       {
23862         error_at (location, "too many %qs clauses", name);
23863         break;
23864       }
23865 }
23866
23867 /* OpenMP 2.5:
23868    variable-list:
23869      identifier
23870      variable-list , identifier
23871
23872    In addition, we match a closing parenthesis.  An opening parenthesis
23873    will have been consumed by the caller.
23874
23875    If KIND is nonzero, create the appropriate node and install the decl
23876    in OMP_CLAUSE_DECL and add the node to the head of the list.
23877
23878    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
23879    return the list created.  */
23880
23881 static tree
23882 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
23883                                 tree list)
23884 {
23885   cp_token *token;
23886   while (1)
23887     {
23888       tree name, decl;
23889
23890       token = cp_lexer_peek_token (parser->lexer);
23891       name = cp_parser_id_expression (parser, /*template_p=*/false,
23892                                       /*check_dependency_p=*/true,
23893                                       /*template_p=*/NULL,
23894                                       /*declarator_p=*/false,
23895                                       /*optional_p=*/false);
23896       if (name == error_mark_node)
23897         goto skip_comma;
23898
23899       decl = cp_parser_lookup_name_simple (parser, name, token->location);
23900       if (decl == error_mark_node)
23901         cp_parser_name_lookup_error (parser, name, decl, NLE_NULL,
23902                                      token->location);
23903       else if (kind != 0)
23904         {
23905           tree u = build_omp_clause (token->location, kind);
23906           OMP_CLAUSE_DECL (u) = decl;
23907           OMP_CLAUSE_CHAIN (u) = list;
23908           list = u;
23909         }
23910       else
23911         list = tree_cons (decl, NULL_TREE, list);
23912
23913     get_comma:
23914       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
23915         break;
23916       cp_lexer_consume_token (parser->lexer);
23917     }
23918
23919   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
23920     {
23921       int ending;
23922
23923       /* Try to resync to an unnested comma.  Copied from
23924          cp_parser_parenthesized_expression_list.  */
23925     skip_comma:
23926       ending = cp_parser_skip_to_closing_parenthesis (parser,
23927                                                       /*recovering=*/true,
23928                                                       /*or_comma=*/true,
23929                                                       /*consume_paren=*/true);
23930       if (ending < 0)
23931         goto get_comma;
23932     }
23933
23934   return list;
23935 }
23936
23937 /* Similarly, but expect leading and trailing parenthesis.  This is a very
23938    common case for omp clauses.  */
23939
23940 static tree
23941 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
23942 {
23943   if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
23944     return cp_parser_omp_var_list_no_open (parser, kind, list);
23945   return list;
23946 }
23947
23948 /* OpenMP 3.0:
23949    collapse ( constant-expression ) */
23950
23951 static tree
23952 cp_parser_omp_clause_collapse (cp_parser *parser, tree list, location_t location)
23953 {
23954   tree c, num;
23955   location_t loc;
23956   HOST_WIDE_INT n;
23957
23958   loc = cp_lexer_peek_token (parser->lexer)->location;
23959   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
23960     return list;
23961
23962   num = cp_parser_constant_expression (parser, false, NULL);
23963
23964   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
23965     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
23966                                            /*or_comma=*/false,
23967                                            /*consume_paren=*/true);
23968
23969   if (num == error_mark_node)
23970     return list;
23971   num = fold_non_dependent_expr (num);
23972   if (!INTEGRAL_TYPE_P (TREE_TYPE (num))
23973       || !host_integerp (num, 0)
23974       || (n = tree_low_cst (num, 0)) <= 0
23975       || (int) n != n)
23976     {
23977       error_at (loc, "collapse argument needs positive constant integer expression");
23978       return list;
23979     }
23980
23981   check_no_duplicate_clause (list, OMP_CLAUSE_COLLAPSE, "collapse", location);
23982   c = build_omp_clause (loc, OMP_CLAUSE_COLLAPSE);
23983   OMP_CLAUSE_CHAIN (c) = list;
23984   OMP_CLAUSE_COLLAPSE_EXPR (c) = num;
23985
23986   return c;
23987 }
23988
23989 /* OpenMP 2.5:
23990    default ( shared | none ) */
23991
23992 static tree
23993 cp_parser_omp_clause_default (cp_parser *parser, tree list, location_t location)
23994 {
23995   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
23996   tree c;
23997
23998   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
23999     return list;
24000   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
24001     {
24002       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
24003       const char *p = IDENTIFIER_POINTER (id);
24004
24005       switch (p[0])
24006         {
24007         case 'n':
24008           if (strcmp ("none", p) != 0)
24009             goto invalid_kind;
24010           kind = OMP_CLAUSE_DEFAULT_NONE;
24011           break;
24012
24013         case 's':
24014           if (strcmp ("shared", p) != 0)
24015             goto invalid_kind;
24016           kind = OMP_CLAUSE_DEFAULT_SHARED;
24017           break;
24018
24019         default:
24020           goto invalid_kind;
24021         }
24022
24023       cp_lexer_consume_token (parser->lexer);
24024     }
24025   else
24026     {
24027     invalid_kind:
24028       cp_parser_error (parser, "expected %<none%> or %<shared%>");
24029     }
24030
24031   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24032     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24033                                            /*or_comma=*/false,
24034                                            /*consume_paren=*/true);
24035
24036   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
24037     return list;
24038
24039   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default", location);
24040   c = build_omp_clause (location, OMP_CLAUSE_DEFAULT);
24041   OMP_CLAUSE_CHAIN (c) = list;
24042   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
24043
24044   return c;
24045 }
24046
24047 /* OpenMP 3.1:
24048    final ( expression ) */
24049
24050 static tree
24051 cp_parser_omp_clause_final (cp_parser *parser, tree list, location_t location)
24052 {
24053   tree t, c;
24054
24055   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24056     return list;
24057
24058   t = cp_parser_condition (parser);
24059
24060   if (t == error_mark_node
24061       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24062     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24063                                            /*or_comma=*/false,
24064                                            /*consume_paren=*/true);
24065
24066   check_no_duplicate_clause (list, OMP_CLAUSE_FINAL, "final", location);
24067
24068   c = build_omp_clause (location, OMP_CLAUSE_FINAL);
24069   OMP_CLAUSE_FINAL_EXPR (c) = t;
24070   OMP_CLAUSE_CHAIN (c) = list;
24071
24072   return c;
24073 }
24074
24075 /* OpenMP 2.5:
24076    if ( expression ) */
24077
24078 static tree
24079 cp_parser_omp_clause_if (cp_parser *parser, tree list, location_t location)
24080 {
24081   tree t, c;
24082
24083   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24084     return list;
24085
24086   t = cp_parser_condition (parser);
24087
24088   if (t == error_mark_node
24089       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24090     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24091                                            /*or_comma=*/false,
24092                                            /*consume_paren=*/true);
24093
24094   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if", location);
24095
24096   c = build_omp_clause (location, OMP_CLAUSE_IF);
24097   OMP_CLAUSE_IF_EXPR (c) = t;
24098   OMP_CLAUSE_CHAIN (c) = list;
24099
24100   return c;
24101 }
24102
24103 /* OpenMP 3.1:
24104    mergeable */
24105
24106 static tree
24107 cp_parser_omp_clause_mergeable (cp_parser *parser ATTRIBUTE_UNUSED,
24108                                 tree list, location_t location)
24109 {
24110   tree c;
24111
24112   check_no_duplicate_clause (list, OMP_CLAUSE_MERGEABLE, "mergeable",
24113                              location);
24114
24115   c = build_omp_clause (location, OMP_CLAUSE_MERGEABLE);
24116   OMP_CLAUSE_CHAIN (c) = list;
24117   return c;
24118 }
24119
24120 /* OpenMP 2.5:
24121    nowait */
24122
24123 static tree
24124 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED,
24125                              tree list, location_t location)
24126 {
24127   tree c;
24128
24129   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait", location);
24130
24131   c = build_omp_clause (location, OMP_CLAUSE_NOWAIT);
24132   OMP_CLAUSE_CHAIN (c) = list;
24133   return c;
24134 }
24135
24136 /* OpenMP 2.5:
24137    num_threads ( expression ) */
24138
24139 static tree
24140 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list,
24141                                   location_t location)
24142 {
24143   tree t, c;
24144
24145   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24146     return list;
24147
24148   t = cp_parser_expression (parser, false, NULL);
24149
24150   if (t == error_mark_node
24151       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24152     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24153                                            /*or_comma=*/false,
24154                                            /*consume_paren=*/true);
24155
24156   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS,
24157                              "num_threads", location);
24158
24159   c = build_omp_clause (location, OMP_CLAUSE_NUM_THREADS);
24160   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
24161   OMP_CLAUSE_CHAIN (c) = list;
24162
24163   return c;
24164 }
24165
24166 /* OpenMP 2.5:
24167    ordered */
24168
24169 static tree
24170 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED,
24171                               tree list, location_t location)
24172 {
24173   tree c;
24174
24175   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED,
24176                              "ordered", location);
24177
24178   c = build_omp_clause (location, OMP_CLAUSE_ORDERED);
24179   OMP_CLAUSE_CHAIN (c) = list;
24180   return c;
24181 }
24182
24183 /* OpenMP 2.5:
24184    reduction ( reduction-operator : variable-list )
24185
24186    reduction-operator:
24187      One of: + * - & ^ | && ||
24188
24189    OpenMP 3.1:
24190
24191    reduction-operator:
24192      One of: + * - & ^ | && || min max  */
24193
24194 static tree
24195 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
24196 {
24197   enum tree_code code;
24198   tree nlist, c;
24199
24200   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24201     return list;
24202
24203   switch (cp_lexer_peek_token (parser->lexer)->type)
24204     {
24205     case CPP_PLUS:
24206       code = PLUS_EXPR;
24207       break;
24208     case CPP_MULT:
24209       code = MULT_EXPR;
24210       break;
24211     case CPP_MINUS:
24212       code = MINUS_EXPR;
24213       break;
24214     case CPP_AND:
24215       code = BIT_AND_EXPR;
24216       break;
24217     case CPP_XOR:
24218       code = BIT_XOR_EXPR;
24219       break;
24220     case CPP_OR:
24221       code = BIT_IOR_EXPR;
24222       break;
24223     case CPP_AND_AND:
24224       code = TRUTH_ANDIF_EXPR;
24225       break;
24226     case CPP_OR_OR:
24227       code = TRUTH_ORIF_EXPR;
24228       break;
24229     case CPP_NAME:
24230       {
24231         tree id = cp_lexer_peek_token (parser->lexer)->u.value;
24232         const char *p = IDENTIFIER_POINTER (id);
24233
24234         if (strcmp (p, "min") == 0)
24235           {
24236             code = MIN_EXPR;
24237             break;
24238           }
24239         if (strcmp (p, "max") == 0)
24240           {
24241             code = MAX_EXPR;
24242             break;
24243           }
24244       }
24245       /* FALLTHROUGH */
24246     default:
24247       cp_parser_error (parser, "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, "
24248                                "%<|%>, %<&&%>, %<||%>, %<min%> or %<max%>");
24249     resync_fail:
24250       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24251                                              /*or_comma=*/false,
24252                                              /*consume_paren=*/true);
24253       return list;
24254     }
24255   cp_lexer_consume_token (parser->lexer);
24256
24257   if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
24258     goto resync_fail;
24259
24260   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
24261   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
24262     OMP_CLAUSE_REDUCTION_CODE (c) = code;
24263
24264   return nlist;
24265 }
24266
24267 /* OpenMP 2.5:
24268    schedule ( schedule-kind )
24269    schedule ( schedule-kind , expression )
24270
24271    schedule-kind:
24272      static | dynamic | guided | runtime | auto  */
24273
24274 static tree
24275 cp_parser_omp_clause_schedule (cp_parser *parser, tree list, location_t location)
24276 {
24277   tree c, t;
24278
24279   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24280     return list;
24281
24282   c = build_omp_clause (location, OMP_CLAUSE_SCHEDULE);
24283
24284   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
24285     {
24286       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
24287       const char *p = IDENTIFIER_POINTER (id);
24288
24289       switch (p[0])
24290         {
24291         case 'd':
24292           if (strcmp ("dynamic", p) != 0)
24293             goto invalid_kind;
24294           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
24295           break;
24296
24297         case 'g':
24298           if (strcmp ("guided", p) != 0)
24299             goto invalid_kind;
24300           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
24301           break;
24302
24303         case 'r':
24304           if (strcmp ("runtime", p) != 0)
24305             goto invalid_kind;
24306           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
24307           break;
24308
24309         default:
24310           goto invalid_kind;
24311         }
24312     }
24313   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
24314     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
24315   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AUTO))
24316     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_AUTO;
24317   else
24318     goto invalid_kind;
24319   cp_lexer_consume_token (parser->lexer);
24320
24321   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24322     {
24323       cp_token *token;
24324       cp_lexer_consume_token (parser->lexer);
24325
24326       token = cp_lexer_peek_token (parser->lexer);
24327       t = cp_parser_assignment_expression (parser, false, NULL);
24328
24329       if (t == error_mark_node)
24330         goto resync_fail;
24331       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
24332         error_at (token->location, "schedule %<runtime%> does not take "
24333                   "a %<chunk_size%> parameter");
24334       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_AUTO)
24335         error_at (token->location, "schedule %<auto%> does not take "
24336                   "a %<chunk_size%> parameter");
24337       else
24338         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
24339
24340       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24341         goto resync_fail;
24342     }
24343   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_COMMA_CLOSE_PAREN))
24344     goto resync_fail;
24345
24346   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule", location);
24347   OMP_CLAUSE_CHAIN (c) = list;
24348   return c;
24349
24350  invalid_kind:
24351   cp_parser_error (parser, "invalid schedule kind");
24352  resync_fail:
24353   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24354                                          /*or_comma=*/false,
24355                                          /*consume_paren=*/true);
24356   return list;
24357 }
24358
24359 /* OpenMP 3.0:
24360    untied */
24361
24362 static tree
24363 cp_parser_omp_clause_untied (cp_parser *parser ATTRIBUTE_UNUSED,
24364                              tree list, location_t location)
24365 {
24366   tree c;
24367
24368   check_no_duplicate_clause (list, OMP_CLAUSE_UNTIED, "untied", location);
24369
24370   c = build_omp_clause (location, OMP_CLAUSE_UNTIED);
24371   OMP_CLAUSE_CHAIN (c) = list;
24372   return c;
24373 }
24374
24375 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
24376    is a bitmask in MASK.  Return the list of clauses found; the result
24377    of clause default goes in *pdefault.  */
24378
24379 static tree
24380 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
24381                            const char *where, cp_token *pragma_tok)
24382 {
24383   tree clauses = NULL;
24384   bool first = true;
24385   cp_token *token = NULL;
24386
24387   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
24388     {
24389       pragma_omp_clause c_kind;
24390       const char *c_name;
24391       tree prev = clauses;
24392
24393       if (!first && cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24394         cp_lexer_consume_token (parser->lexer);
24395
24396       token = cp_lexer_peek_token (parser->lexer);
24397       c_kind = cp_parser_omp_clause_name (parser);
24398       first = false;
24399
24400       switch (c_kind)
24401         {
24402         case PRAGMA_OMP_CLAUSE_COLLAPSE:
24403           clauses = cp_parser_omp_clause_collapse (parser, clauses,
24404                                                    token->location);
24405           c_name = "collapse";
24406           break;
24407         case PRAGMA_OMP_CLAUSE_COPYIN:
24408           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
24409           c_name = "copyin";
24410           break;
24411         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
24412           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
24413                                             clauses);
24414           c_name = "copyprivate";
24415           break;
24416         case PRAGMA_OMP_CLAUSE_DEFAULT:
24417           clauses = cp_parser_omp_clause_default (parser, clauses,
24418                                                   token->location);
24419           c_name = "default";
24420           break;
24421         case PRAGMA_OMP_CLAUSE_FINAL:
24422           clauses = cp_parser_omp_clause_final (parser, clauses, token->location);
24423           c_name = "final";
24424           break;
24425         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
24426           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
24427                                             clauses);
24428           c_name = "firstprivate";
24429           break;
24430         case PRAGMA_OMP_CLAUSE_IF:
24431           clauses = cp_parser_omp_clause_if (parser, clauses, token->location);
24432           c_name = "if";
24433           break;
24434         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
24435           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
24436                                             clauses);
24437           c_name = "lastprivate";
24438           break;
24439         case PRAGMA_OMP_CLAUSE_MERGEABLE:
24440           clauses = cp_parser_omp_clause_mergeable (parser, clauses,
24441                                                     token->location);
24442           c_name = "mergeable";
24443           break;
24444         case PRAGMA_OMP_CLAUSE_NOWAIT:
24445           clauses = cp_parser_omp_clause_nowait (parser, clauses, token->location);
24446           c_name = "nowait";
24447           break;
24448         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
24449           clauses = cp_parser_omp_clause_num_threads (parser, clauses,
24450                                                       token->location);
24451           c_name = "num_threads";
24452           break;
24453         case PRAGMA_OMP_CLAUSE_ORDERED:
24454           clauses = cp_parser_omp_clause_ordered (parser, clauses,
24455                                                   token->location);
24456           c_name = "ordered";
24457           break;
24458         case PRAGMA_OMP_CLAUSE_PRIVATE:
24459           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
24460                                             clauses);
24461           c_name = "private";
24462           break;
24463         case PRAGMA_OMP_CLAUSE_REDUCTION:
24464           clauses = cp_parser_omp_clause_reduction (parser, clauses);
24465           c_name = "reduction";
24466           break;
24467         case PRAGMA_OMP_CLAUSE_SCHEDULE:
24468           clauses = cp_parser_omp_clause_schedule (parser, clauses,
24469                                                    token->location);
24470           c_name = "schedule";
24471           break;
24472         case PRAGMA_OMP_CLAUSE_SHARED:
24473           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
24474                                             clauses);
24475           c_name = "shared";
24476           break;
24477         case PRAGMA_OMP_CLAUSE_UNTIED:
24478           clauses = cp_parser_omp_clause_untied (parser, clauses,
24479                                                  token->location);
24480           c_name = "nowait";
24481           break;
24482         default:
24483           cp_parser_error (parser, "expected %<#pragma omp%> clause");
24484           goto saw_error;
24485         }
24486
24487       if (((mask >> c_kind) & 1) == 0)
24488         {
24489           /* Remove the invalid clause(s) from the list to avoid
24490              confusing the rest of the compiler.  */
24491           clauses = prev;
24492           error_at (token->location, "%qs is not valid for %qs", c_name, where);
24493         }
24494     }
24495  saw_error:
24496   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
24497   return finish_omp_clauses (clauses);
24498 }
24499
24500 /* OpenMP 2.5:
24501    structured-block:
24502      statement
24503
24504    In practice, we're also interested in adding the statement to an
24505    outer node.  So it is convenient if we work around the fact that
24506    cp_parser_statement calls add_stmt.  */
24507
24508 static unsigned
24509 cp_parser_begin_omp_structured_block (cp_parser *parser)
24510 {
24511   unsigned save = parser->in_statement;
24512
24513   /* Only move the values to IN_OMP_BLOCK if they weren't false.
24514      This preserves the "not within loop or switch" style error messages
24515      for nonsense cases like
24516         void foo() {
24517         #pragma omp single
24518           break;
24519         }
24520   */
24521   if (parser->in_statement)
24522     parser->in_statement = IN_OMP_BLOCK;
24523
24524   return save;
24525 }
24526
24527 static void
24528 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
24529 {
24530   parser->in_statement = save;
24531 }
24532
24533 static tree
24534 cp_parser_omp_structured_block (cp_parser *parser)
24535 {
24536   tree stmt = begin_omp_structured_block ();
24537   unsigned int save = cp_parser_begin_omp_structured_block (parser);
24538
24539   cp_parser_statement (parser, NULL_TREE, false, NULL);
24540
24541   cp_parser_end_omp_structured_block (parser, save);
24542   return finish_omp_structured_block (stmt);
24543 }
24544
24545 /* OpenMP 2.5:
24546    # pragma omp atomic new-line
24547      expression-stmt
24548
24549    expression-stmt:
24550      x binop= expr | x++ | ++x | x-- | --x
24551    binop:
24552      +, *, -, /, &, ^, |, <<, >>
24553
24554   where x is an lvalue expression with scalar type.
24555
24556    OpenMP 3.1:
24557    # pragma omp atomic new-line
24558      update-stmt
24559
24560    # pragma omp atomic read new-line
24561      read-stmt
24562
24563    # pragma omp atomic write new-line
24564      write-stmt
24565
24566    # pragma omp atomic update new-line
24567      update-stmt
24568
24569    # pragma omp atomic capture new-line
24570      capture-stmt
24571
24572    # pragma omp atomic capture new-line
24573      capture-block
24574
24575    read-stmt:
24576      v = x
24577    write-stmt:
24578      x = expr
24579    update-stmt:
24580      expression-stmt | x = x binop expr
24581    capture-stmt:
24582      v = x binop= expr | v = x++ | v = ++x | v = x-- | v = --x
24583    capture-block:
24584      { v = x; update-stmt; } | { update-stmt; v = x; }
24585
24586   where x and v are lvalue expressions with scalar type.  */
24587
24588 static void
24589 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
24590 {
24591   tree lhs = NULL_TREE, rhs = NULL_TREE, v = NULL_TREE, lhs1 = NULL_TREE;
24592   tree rhs1 = NULL_TREE, orig_lhs;
24593   enum tree_code code = OMP_ATOMIC, opcode = NOP_EXPR;
24594   bool structured_block = false;
24595
24596   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
24597     {
24598       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
24599       const char *p = IDENTIFIER_POINTER (id);
24600
24601       if (!strcmp (p, "read"))
24602         code = OMP_ATOMIC_READ;
24603       else if (!strcmp (p, "write"))
24604         code = NOP_EXPR;
24605       else if (!strcmp (p, "update"))
24606         code = OMP_ATOMIC;
24607       else if (!strcmp (p, "capture"))
24608         code = OMP_ATOMIC_CAPTURE_NEW;
24609       else
24610         p = NULL;
24611       if (p)
24612         cp_lexer_consume_token (parser->lexer);
24613     }
24614   cp_parser_require_pragma_eol (parser, pragma_tok);
24615
24616   switch (code)
24617     {
24618     case OMP_ATOMIC_READ:
24619     case NOP_EXPR: /* atomic write */
24620       v = cp_parser_unary_expression (parser, /*address_p=*/false,
24621                                       /*cast_p=*/false, NULL);
24622       if (v == error_mark_node)
24623         goto saw_error;
24624       if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
24625         goto saw_error;
24626       if (code == NOP_EXPR)
24627         lhs = cp_parser_expression (parser, /*cast_p=*/false, NULL);
24628       else
24629         lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
24630                                           /*cast_p=*/false, NULL);
24631       if (lhs == error_mark_node)
24632         goto saw_error;
24633       if (code == NOP_EXPR)
24634         {
24635           /* atomic write is represented by OMP_ATOMIC with NOP_EXPR
24636              opcode.  */
24637           code = OMP_ATOMIC;
24638           rhs = lhs;
24639           lhs = v;
24640           v = NULL_TREE;
24641         }
24642       goto done;
24643     case OMP_ATOMIC_CAPTURE_NEW:
24644       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
24645         {
24646           cp_lexer_consume_token (parser->lexer);
24647           structured_block = true;
24648         }
24649       else
24650         {
24651           v = cp_parser_unary_expression (parser, /*address_p=*/false,
24652                                           /*cast_p=*/false, NULL);
24653           if (v == error_mark_node)
24654             goto saw_error;
24655           if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
24656             goto saw_error;
24657         }
24658     default:
24659       break;
24660     }
24661
24662 restart:
24663   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
24664                                     /*cast_p=*/false, NULL);
24665   orig_lhs = lhs;
24666   switch (TREE_CODE (lhs))
24667     {
24668     case ERROR_MARK:
24669       goto saw_error;
24670
24671     case POSTINCREMENT_EXPR:
24672       if (code == OMP_ATOMIC_CAPTURE_NEW && !structured_block)
24673         code = OMP_ATOMIC_CAPTURE_OLD;
24674       /* FALLTHROUGH */
24675     case PREINCREMENT_EXPR:
24676       lhs = TREE_OPERAND (lhs, 0);
24677       opcode = PLUS_EXPR;
24678       rhs = integer_one_node;
24679       break;
24680
24681     case POSTDECREMENT_EXPR:
24682       if (code == OMP_ATOMIC_CAPTURE_NEW && !structured_block)
24683         code = OMP_ATOMIC_CAPTURE_OLD;
24684       /* FALLTHROUGH */
24685     case PREDECREMENT_EXPR:
24686       lhs = TREE_OPERAND (lhs, 0);
24687       opcode = MINUS_EXPR;
24688       rhs = integer_one_node;
24689       break;
24690
24691     case COMPOUND_EXPR:
24692       if (TREE_CODE (TREE_OPERAND (lhs, 0)) == SAVE_EXPR
24693          && TREE_CODE (TREE_OPERAND (lhs, 1)) == COMPOUND_EXPR
24694          && TREE_CODE (TREE_OPERAND (TREE_OPERAND (lhs, 1), 0)) == MODIFY_EXPR
24695          && TREE_OPERAND (TREE_OPERAND (lhs, 1), 1) == TREE_OPERAND (lhs, 0)
24696          && TREE_CODE (TREE_TYPE (TREE_OPERAND (TREE_OPERAND
24697                                              (TREE_OPERAND (lhs, 1), 0), 0)))
24698             == BOOLEAN_TYPE)
24699        /* Undo effects of boolean_increment for post {in,de}crement.  */
24700        lhs = TREE_OPERAND (TREE_OPERAND (lhs, 1), 0);
24701       /* FALLTHRU */
24702     case MODIFY_EXPR:
24703       if (TREE_CODE (lhs) == MODIFY_EXPR
24704          && TREE_CODE (TREE_TYPE (TREE_OPERAND (lhs, 0))) == BOOLEAN_TYPE)
24705         {
24706           /* Undo effects of boolean_increment.  */
24707           if (integer_onep (TREE_OPERAND (lhs, 1)))
24708             {
24709               /* This is pre or post increment.  */
24710               rhs = TREE_OPERAND (lhs, 1);
24711               lhs = TREE_OPERAND (lhs, 0);
24712               opcode = NOP_EXPR;
24713               if (code == OMP_ATOMIC_CAPTURE_NEW
24714                   && !structured_block
24715                   && TREE_CODE (orig_lhs) == COMPOUND_EXPR)
24716                 code = OMP_ATOMIC_CAPTURE_OLD;
24717               break;
24718             }
24719         }
24720       /* FALLTHRU */
24721     default:
24722       switch (cp_lexer_peek_token (parser->lexer)->type)
24723         {
24724         case CPP_MULT_EQ:
24725           opcode = MULT_EXPR;
24726           break;
24727         case CPP_DIV_EQ:
24728           opcode = TRUNC_DIV_EXPR;
24729           break;
24730         case CPP_PLUS_EQ:
24731           opcode = PLUS_EXPR;
24732           break;
24733         case CPP_MINUS_EQ:
24734           opcode = MINUS_EXPR;
24735           break;
24736         case CPP_LSHIFT_EQ:
24737           opcode = LSHIFT_EXPR;
24738           break;
24739         case CPP_RSHIFT_EQ:
24740           opcode = RSHIFT_EXPR;
24741           break;
24742         case CPP_AND_EQ:
24743           opcode = BIT_AND_EXPR;
24744           break;
24745         case CPP_OR_EQ:
24746           opcode = BIT_IOR_EXPR;
24747           break;
24748         case CPP_XOR_EQ:
24749           opcode = BIT_XOR_EXPR;
24750           break;
24751         case CPP_EQ:
24752           if (structured_block || code == OMP_ATOMIC)
24753             {
24754               enum cp_parser_prec oprec;
24755               cp_token *token;
24756               cp_lexer_consume_token (parser->lexer);
24757               rhs1 = cp_parser_unary_expression (parser, /*address_p=*/false,
24758                                                  /*cast_p=*/false, NULL);
24759               if (rhs1 == error_mark_node)
24760                 goto saw_error;
24761               token = cp_lexer_peek_token (parser->lexer);
24762               switch (token->type)
24763                 {
24764                 case CPP_SEMICOLON:
24765                   if (code == OMP_ATOMIC_CAPTURE_NEW)
24766                     {
24767                       code = OMP_ATOMIC_CAPTURE_OLD;
24768                       v = lhs;
24769                       lhs = NULL_TREE;
24770                       lhs1 = rhs1;
24771                       rhs1 = NULL_TREE;
24772                       cp_lexer_consume_token (parser->lexer);
24773                       goto restart;
24774                     }
24775                   cp_parser_error (parser,
24776                                    "invalid form of %<#pragma omp atomic%>");
24777                   goto saw_error;
24778                 case CPP_MULT:
24779                   opcode = MULT_EXPR;
24780                   break;
24781                 case CPP_DIV:
24782                   opcode = TRUNC_DIV_EXPR;
24783                   break;
24784                 case CPP_PLUS:
24785                   opcode = PLUS_EXPR;
24786                   break;
24787                 case CPP_MINUS:
24788                   opcode = MINUS_EXPR;
24789                   break;
24790                 case CPP_LSHIFT:
24791                   opcode = LSHIFT_EXPR;
24792                   break;
24793                 case CPP_RSHIFT:
24794                   opcode = RSHIFT_EXPR;
24795                   break;
24796                 case CPP_AND:
24797                   opcode = BIT_AND_EXPR;
24798                   break;
24799                 case CPP_OR:
24800                   opcode = BIT_IOR_EXPR;
24801                   break;
24802                 case CPP_XOR:
24803                   opcode = BIT_XOR_EXPR;
24804                   break;
24805                 default:
24806                   cp_parser_error (parser,
24807                                    "invalid operator for %<#pragma omp atomic%>");
24808                   goto saw_error;
24809                 }
24810               oprec = TOKEN_PRECEDENCE (token);
24811               gcc_assert (oprec != PREC_NOT_OPERATOR);
24812               if (commutative_tree_code (opcode))
24813                 oprec = (enum cp_parser_prec) (oprec - 1);
24814               cp_lexer_consume_token (parser->lexer);
24815               rhs = cp_parser_binary_expression (parser, false, false,
24816                                                  oprec, NULL);
24817               if (rhs == error_mark_node)
24818                 goto saw_error;
24819               goto stmt_done;
24820             }
24821           /* FALLTHROUGH */
24822         default:
24823           cp_parser_error (parser,
24824                            "invalid operator for %<#pragma omp atomic%>");
24825           goto saw_error;
24826         }
24827       cp_lexer_consume_token (parser->lexer);
24828
24829       rhs = cp_parser_expression (parser, false, NULL);
24830       if (rhs == error_mark_node)
24831         goto saw_error;
24832       break;
24833     }
24834 stmt_done:
24835   if (structured_block && code == OMP_ATOMIC_CAPTURE_NEW)
24836     {
24837       if (!cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON))
24838         goto saw_error;
24839       v = cp_parser_unary_expression (parser, /*address_p=*/false,
24840                                       /*cast_p=*/false, NULL);
24841       if (v == error_mark_node)
24842         goto saw_error;
24843       if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
24844         goto saw_error;
24845       lhs1 = cp_parser_unary_expression (parser, /*address_p=*/false,
24846                                          /*cast_p=*/false, NULL);
24847       if (lhs1 == error_mark_node)
24848         goto saw_error;
24849     }
24850   if (structured_block)
24851     {
24852       cp_parser_consume_semicolon_at_end_of_statement (parser);
24853       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
24854     }
24855 done:
24856   finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
24857   if (!structured_block)
24858     cp_parser_consume_semicolon_at_end_of_statement (parser);
24859   return;
24860
24861  saw_error:
24862   cp_parser_skip_to_end_of_block_or_statement (parser);
24863   if (structured_block)
24864     {
24865       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
24866         cp_lexer_consume_token (parser->lexer);
24867       else if (code == OMP_ATOMIC_CAPTURE_NEW)
24868         {
24869           cp_parser_skip_to_end_of_block_or_statement (parser);
24870           if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
24871             cp_lexer_consume_token (parser->lexer);
24872         }
24873     }
24874 }
24875
24876
24877 /* OpenMP 2.5:
24878    # pragma omp barrier new-line  */
24879
24880 static void
24881 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
24882 {
24883   cp_parser_require_pragma_eol (parser, pragma_tok);
24884   finish_omp_barrier ();
24885 }
24886
24887 /* OpenMP 2.5:
24888    # pragma omp critical [(name)] new-line
24889      structured-block  */
24890
24891 static tree
24892 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
24893 {
24894   tree stmt, name = NULL;
24895
24896   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
24897     {
24898       cp_lexer_consume_token (parser->lexer);
24899
24900       name = cp_parser_identifier (parser);
24901
24902       if (name == error_mark_node
24903           || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24904         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24905                                                /*or_comma=*/false,
24906                                                /*consume_paren=*/true);
24907       if (name == error_mark_node)
24908         name = NULL;
24909     }
24910   cp_parser_require_pragma_eol (parser, pragma_tok);
24911
24912   stmt = cp_parser_omp_structured_block (parser);
24913   return c_finish_omp_critical (input_location, stmt, name);
24914 }
24915
24916 /* OpenMP 2.5:
24917    # pragma omp flush flush-vars[opt] new-line
24918
24919    flush-vars:
24920      ( variable-list ) */
24921
24922 static void
24923 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
24924 {
24925   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
24926     (void) cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
24927   cp_parser_require_pragma_eol (parser, pragma_tok);
24928
24929   finish_omp_flush ();
24930 }
24931
24932 /* Helper function, to parse omp for increment expression.  */
24933
24934 static tree
24935 cp_parser_omp_for_cond (cp_parser *parser, tree decl)
24936 {
24937   tree cond = cp_parser_binary_expression (parser, false, true,
24938                                            PREC_NOT_OPERATOR, NULL);
24939   if (cond == error_mark_node
24940       || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
24941     {
24942       cp_parser_skip_to_end_of_statement (parser);
24943       return error_mark_node;
24944     }
24945
24946   switch (TREE_CODE (cond))
24947     {
24948     case GT_EXPR:
24949     case GE_EXPR:
24950     case LT_EXPR:
24951     case LE_EXPR:
24952       break;
24953     default:
24954       return error_mark_node;
24955     }
24956
24957   /* If decl is an iterator, preserve LHS and RHS of the relational
24958      expr until finish_omp_for.  */
24959   if (decl
24960       && (type_dependent_expression_p (decl)
24961           || CLASS_TYPE_P (TREE_TYPE (decl))))
24962     return cond;
24963
24964   return build_x_binary_op (TREE_CODE (cond),
24965                             TREE_OPERAND (cond, 0), ERROR_MARK,
24966                             TREE_OPERAND (cond, 1), ERROR_MARK,
24967                             /*overload=*/NULL, tf_warning_or_error);
24968 }
24969
24970 /* Helper function, to parse omp for increment expression.  */
24971
24972 static tree
24973 cp_parser_omp_for_incr (cp_parser *parser, tree decl)
24974 {
24975   cp_token *token = cp_lexer_peek_token (parser->lexer);
24976   enum tree_code op;
24977   tree lhs, rhs;
24978   cp_id_kind idk;
24979   bool decl_first;
24980
24981   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
24982     {
24983       op = (token->type == CPP_PLUS_PLUS
24984             ? PREINCREMENT_EXPR : PREDECREMENT_EXPR);
24985       cp_lexer_consume_token (parser->lexer);
24986       lhs = cp_parser_cast_expression (parser, false, false, NULL);
24987       if (lhs != decl)
24988         return error_mark_node;
24989       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
24990     }
24991
24992   lhs = cp_parser_primary_expression (parser, false, false, false, &idk);
24993   if (lhs != decl)
24994     return error_mark_node;
24995
24996   token = cp_lexer_peek_token (parser->lexer);
24997   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
24998     {
24999       op = (token->type == CPP_PLUS_PLUS
25000             ? POSTINCREMENT_EXPR : POSTDECREMENT_EXPR);
25001       cp_lexer_consume_token (parser->lexer);
25002       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
25003     }
25004
25005   op = cp_parser_assignment_operator_opt (parser);
25006   if (op == ERROR_MARK)
25007     return error_mark_node;
25008
25009   if (op != NOP_EXPR)
25010     {
25011       rhs = cp_parser_assignment_expression (parser, false, NULL);
25012       rhs = build2 (op, TREE_TYPE (decl), decl, rhs);
25013       return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
25014     }
25015
25016   lhs = cp_parser_binary_expression (parser, false, false,
25017                                      PREC_ADDITIVE_EXPRESSION, NULL);
25018   token = cp_lexer_peek_token (parser->lexer);
25019   decl_first = lhs == decl;
25020   if (decl_first)
25021     lhs = NULL_TREE;
25022   if (token->type != CPP_PLUS
25023       && token->type != CPP_MINUS)
25024     return error_mark_node;
25025
25026   do
25027     {
25028       op = token->type == CPP_PLUS ? PLUS_EXPR : MINUS_EXPR;
25029       cp_lexer_consume_token (parser->lexer);
25030       rhs = cp_parser_binary_expression (parser, false, false,
25031                                          PREC_ADDITIVE_EXPRESSION, NULL);
25032       token = cp_lexer_peek_token (parser->lexer);
25033       if (token->type == CPP_PLUS || token->type == CPP_MINUS || decl_first)
25034         {
25035           if (lhs == NULL_TREE)
25036             {
25037               if (op == PLUS_EXPR)
25038                 lhs = rhs;
25039               else
25040                 lhs = build_x_unary_op (NEGATE_EXPR, rhs, tf_warning_or_error);
25041             }
25042           else
25043             lhs = build_x_binary_op (op, lhs, ERROR_MARK, rhs, ERROR_MARK,
25044                                      NULL, tf_warning_or_error);
25045         }
25046     }
25047   while (token->type == CPP_PLUS || token->type == CPP_MINUS);
25048
25049   if (!decl_first)
25050     {
25051       if (rhs != decl || op == MINUS_EXPR)
25052         return error_mark_node;
25053       rhs = build2 (op, TREE_TYPE (decl), lhs, decl);
25054     }
25055   else
25056     rhs = build2 (PLUS_EXPR, TREE_TYPE (decl), decl, lhs);
25057
25058   return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
25059 }
25060
25061 /* Parse the restricted form of the for statement allowed by OpenMP.  */
25062
25063 static tree
25064 cp_parser_omp_for_loop (cp_parser *parser, tree clauses, tree *par_clauses)
25065 {
25066   tree init, cond, incr, body, decl, pre_body = NULL_TREE, ret;
25067   tree real_decl, initv, condv, incrv, declv;
25068   tree this_pre_body, cl;
25069   location_t loc_first;
25070   bool collapse_err = false;
25071   int i, collapse = 1, nbraces = 0;
25072   VEC(tree,gc) *for_block = make_tree_vector ();
25073
25074   for (cl = clauses; cl; cl = OMP_CLAUSE_CHAIN (cl))
25075     if (OMP_CLAUSE_CODE (cl) == OMP_CLAUSE_COLLAPSE)
25076       collapse = tree_low_cst (OMP_CLAUSE_COLLAPSE_EXPR (cl), 0);
25077
25078   gcc_assert (collapse >= 1);
25079
25080   declv = make_tree_vec (collapse);
25081   initv = make_tree_vec (collapse);
25082   condv = make_tree_vec (collapse);
25083   incrv = make_tree_vec (collapse);
25084
25085   loc_first = cp_lexer_peek_token (parser->lexer)->location;
25086
25087   for (i = 0; i < collapse; i++)
25088     {
25089       int bracecount = 0;
25090       bool add_private_clause = false;
25091       location_t loc;
25092
25093       if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
25094         {
25095           cp_parser_error (parser, "for statement expected");
25096           return NULL;
25097         }
25098       loc = cp_lexer_consume_token (parser->lexer)->location;
25099
25100       if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25101         return NULL;
25102
25103       init = decl = real_decl = NULL;
25104       this_pre_body = push_stmt_list ();
25105       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
25106         {
25107           /* See 2.5.1 (in OpenMP 3.0, similar wording is in 2.5 standard too):
25108
25109              init-expr:
25110                        var = lb
25111                        integer-type var = lb
25112                        random-access-iterator-type var = lb
25113                        pointer-type var = lb
25114           */
25115           cp_decl_specifier_seq type_specifiers;
25116
25117           /* First, try to parse as an initialized declaration.  See
25118              cp_parser_condition, from whence the bulk of this is copied.  */
25119
25120           cp_parser_parse_tentatively (parser);
25121           cp_parser_type_specifier_seq (parser, /*is_declaration=*/true,
25122                                         /*is_trailing_return=*/false,
25123                                         &type_specifiers);
25124           if (cp_parser_parse_definitely (parser))
25125             {
25126               /* If parsing a type specifier seq succeeded, then this
25127                  MUST be a initialized declaration.  */
25128               tree asm_specification, attributes;
25129               cp_declarator *declarator;
25130
25131               declarator = cp_parser_declarator (parser,
25132                                                  CP_PARSER_DECLARATOR_NAMED,
25133                                                  /*ctor_dtor_or_conv_p=*/NULL,
25134                                                  /*parenthesized_p=*/NULL,
25135                                                  /*member_p=*/false);
25136               attributes = cp_parser_attributes_opt (parser);
25137               asm_specification = cp_parser_asm_specification_opt (parser);
25138
25139               if (declarator == cp_error_declarator) 
25140                 cp_parser_skip_to_end_of_statement (parser);
25141
25142               else 
25143                 {
25144                   tree pushed_scope, auto_node;
25145
25146                   decl = start_decl (declarator, &type_specifiers,
25147                                      SD_INITIALIZED, attributes,
25148                                      /*prefix_attributes=*/NULL_TREE,
25149                                      &pushed_scope);
25150
25151                   auto_node = type_uses_auto (TREE_TYPE (decl));
25152                   if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
25153                     {
25154                       if (cp_lexer_next_token_is (parser->lexer, 
25155                                                   CPP_OPEN_PAREN))
25156                         error ("parenthesized initialization is not allowed in "
25157                                "OpenMP %<for%> loop");
25158                       else
25159                         /* Trigger an error.  */
25160                         cp_parser_require (parser, CPP_EQ, RT_EQ);
25161
25162                       init = error_mark_node;
25163                       cp_parser_skip_to_end_of_statement (parser);
25164                     }
25165                   else if (CLASS_TYPE_P (TREE_TYPE (decl))
25166                            || type_dependent_expression_p (decl)
25167                            || auto_node)
25168                     {
25169                       bool is_direct_init, is_non_constant_init;
25170
25171                       init = cp_parser_initializer (parser,
25172                                                     &is_direct_init,
25173                                                     &is_non_constant_init);
25174
25175                       if (auto_node)
25176                         {
25177                           TREE_TYPE (decl)
25178                             = do_auto_deduction (TREE_TYPE (decl), init,
25179                                                  auto_node);
25180
25181                           if (!CLASS_TYPE_P (TREE_TYPE (decl))
25182                               && !type_dependent_expression_p (decl))
25183                             goto non_class;
25184                         }
25185                       
25186                       cp_finish_decl (decl, init, !is_non_constant_init,
25187                                       asm_specification,
25188                                       LOOKUP_ONLYCONVERTING);
25189                       if (CLASS_TYPE_P (TREE_TYPE (decl)))
25190                         {
25191                           VEC_safe_push (tree, gc, for_block, this_pre_body);
25192                           init = NULL_TREE;
25193                         }
25194                       else
25195                         init = pop_stmt_list (this_pre_body);
25196                       this_pre_body = NULL_TREE;
25197                     }
25198                   else
25199                     {
25200                       /* Consume '='.  */
25201                       cp_lexer_consume_token (parser->lexer);
25202                       init = cp_parser_assignment_expression (parser, false, NULL);
25203
25204                     non_class:
25205                       if (TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
25206                         init = error_mark_node;
25207                       else
25208                         cp_finish_decl (decl, NULL_TREE,
25209                                         /*init_const_expr_p=*/false,
25210                                         asm_specification,
25211                                         LOOKUP_ONLYCONVERTING);
25212                     }
25213
25214                   if (pushed_scope)
25215                     pop_scope (pushed_scope);
25216                 }
25217             }
25218           else 
25219             {
25220               cp_id_kind idk;
25221               /* If parsing a type specifier sequence failed, then
25222                  this MUST be a simple expression.  */
25223               cp_parser_parse_tentatively (parser);
25224               decl = cp_parser_primary_expression (parser, false, false,
25225                                                    false, &idk);
25226               if (!cp_parser_error_occurred (parser)
25227                   && decl
25228                   && DECL_P (decl)
25229                   && CLASS_TYPE_P (TREE_TYPE (decl)))
25230                 {
25231                   tree rhs;
25232
25233                   cp_parser_parse_definitely (parser);
25234                   cp_parser_require (parser, CPP_EQ, RT_EQ);
25235                   rhs = cp_parser_assignment_expression (parser, false, NULL);
25236                   finish_expr_stmt (build_x_modify_expr (decl, NOP_EXPR,
25237                                                          rhs,
25238                                                          tf_warning_or_error));
25239                   add_private_clause = true;
25240                 }
25241               else
25242                 {
25243                   decl = NULL;
25244                   cp_parser_abort_tentative_parse (parser);
25245                   init = cp_parser_expression (parser, false, NULL);
25246                   if (init)
25247                     {
25248                       if (TREE_CODE (init) == MODIFY_EXPR
25249                           || TREE_CODE (init) == MODOP_EXPR)
25250                         real_decl = TREE_OPERAND (init, 0);
25251                     }
25252                 }
25253             }
25254         }
25255       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
25256       if (this_pre_body)
25257         {
25258           this_pre_body = pop_stmt_list (this_pre_body);
25259           if (pre_body)
25260             {
25261               tree t = pre_body;
25262               pre_body = push_stmt_list ();
25263               add_stmt (t);
25264               add_stmt (this_pre_body);
25265               pre_body = pop_stmt_list (pre_body);
25266             }
25267           else
25268             pre_body = this_pre_body;
25269         }
25270
25271       if (decl)
25272         real_decl = decl;
25273       if (par_clauses != NULL && real_decl != NULL_TREE)
25274         {
25275           tree *c;
25276           for (c = par_clauses; *c ; )
25277             if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_FIRSTPRIVATE
25278                 && OMP_CLAUSE_DECL (*c) == real_decl)
25279               {
25280                 error_at (loc, "iteration variable %qD"
25281                           " should not be firstprivate", real_decl);
25282                 *c = OMP_CLAUSE_CHAIN (*c);
25283               }
25284             else if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_LASTPRIVATE
25285                      && OMP_CLAUSE_DECL (*c) == real_decl)
25286               {
25287                 /* Add lastprivate (decl) clause to OMP_FOR_CLAUSES,
25288                    change it to shared (decl) in OMP_PARALLEL_CLAUSES.  */
25289                 tree l = build_omp_clause (loc, OMP_CLAUSE_LASTPRIVATE);
25290                 OMP_CLAUSE_DECL (l) = real_decl;
25291                 OMP_CLAUSE_CHAIN (l) = clauses;
25292                 CP_OMP_CLAUSE_INFO (l) = CP_OMP_CLAUSE_INFO (*c);
25293                 clauses = l;
25294                 OMP_CLAUSE_SET_CODE (*c, OMP_CLAUSE_SHARED);
25295                 CP_OMP_CLAUSE_INFO (*c) = NULL;
25296                 add_private_clause = false;
25297               }
25298             else
25299               {
25300                 if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_PRIVATE
25301                     && OMP_CLAUSE_DECL (*c) == real_decl)
25302                   add_private_clause = false;
25303                 c = &OMP_CLAUSE_CHAIN (*c);
25304               }
25305         }
25306
25307       if (add_private_clause)
25308         {
25309           tree c;
25310           for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
25311             {
25312               if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
25313                    || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
25314                   && OMP_CLAUSE_DECL (c) == decl)
25315                 break;
25316               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
25317                        && OMP_CLAUSE_DECL (c) == decl)
25318                 error_at (loc, "iteration variable %qD "
25319                           "should not be firstprivate",
25320                           decl);
25321               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
25322                        && OMP_CLAUSE_DECL (c) == decl)
25323                 error_at (loc, "iteration variable %qD should not be reduction",
25324                           decl);
25325             }
25326           if (c == NULL)
25327             {
25328               c = build_omp_clause (loc, OMP_CLAUSE_PRIVATE);
25329               OMP_CLAUSE_DECL (c) = decl;
25330               c = finish_omp_clauses (c);
25331               if (c)
25332                 {
25333                   OMP_CLAUSE_CHAIN (c) = clauses;
25334                   clauses = c;
25335                 }
25336             }
25337         }
25338
25339       cond = NULL;
25340       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
25341         cond = cp_parser_omp_for_cond (parser, decl);
25342       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
25343
25344       incr = NULL;
25345       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
25346         {
25347           /* If decl is an iterator, preserve the operator on decl
25348              until finish_omp_for.  */
25349           if (decl
25350               && ((type_dependent_expression_p (decl)
25351                    && !POINTER_TYPE_P (TREE_TYPE (decl)))
25352                   || CLASS_TYPE_P (TREE_TYPE (decl))))
25353             incr = cp_parser_omp_for_incr (parser, decl);
25354           else
25355             incr = cp_parser_expression (parser, false, NULL);
25356         }
25357
25358       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25359         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25360                                                /*or_comma=*/false,
25361                                                /*consume_paren=*/true);
25362
25363       TREE_VEC_ELT (declv, i) = decl;
25364       TREE_VEC_ELT (initv, i) = init;
25365       TREE_VEC_ELT (condv, i) = cond;
25366       TREE_VEC_ELT (incrv, i) = incr;
25367
25368       if (i == collapse - 1)
25369         break;
25370
25371       /* FIXME: OpenMP 3.0 draft isn't very clear on what exactly is allowed
25372          in between the collapsed for loops to be still considered perfectly
25373          nested.  Hopefully the final version clarifies this.
25374          For now handle (multiple) {'s and empty statements.  */
25375       cp_parser_parse_tentatively (parser);
25376       do
25377         {
25378           if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
25379             break;
25380           else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
25381             {
25382               cp_lexer_consume_token (parser->lexer);
25383               bracecount++;
25384             }
25385           else if (bracecount
25386                    && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
25387             cp_lexer_consume_token (parser->lexer);
25388           else
25389             {
25390               loc = cp_lexer_peek_token (parser->lexer)->location;
25391               error_at (loc, "not enough collapsed for loops");
25392               collapse_err = true;
25393               cp_parser_abort_tentative_parse (parser);
25394               declv = NULL_TREE;
25395               break;
25396             }
25397         }
25398       while (1);
25399
25400       if (declv)
25401         {
25402           cp_parser_parse_definitely (parser);
25403           nbraces += bracecount;
25404         }
25405     }
25406
25407   /* Note that we saved the original contents of this flag when we entered
25408      the structured block, and so we don't need to re-save it here.  */
25409   parser->in_statement = IN_OMP_FOR;
25410
25411   /* Note that the grammar doesn't call for a structured block here,
25412      though the loop as a whole is a structured block.  */
25413   body = push_stmt_list ();
25414   cp_parser_statement (parser, NULL_TREE, false, NULL);
25415   body = pop_stmt_list (body);
25416
25417   if (declv == NULL_TREE)
25418     ret = NULL_TREE;
25419   else
25420     ret = finish_omp_for (loc_first, declv, initv, condv, incrv, body,
25421                           pre_body, clauses);
25422
25423   while (nbraces)
25424     {
25425       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
25426         {
25427           cp_lexer_consume_token (parser->lexer);
25428           nbraces--;
25429         }
25430       else if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
25431         cp_lexer_consume_token (parser->lexer);
25432       else
25433         {
25434           if (!collapse_err)
25435             {
25436               error_at (cp_lexer_peek_token (parser->lexer)->location,
25437                         "collapsed loops not perfectly nested");
25438             }
25439           collapse_err = true;
25440           cp_parser_statement_seq_opt (parser, NULL);
25441           if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
25442             break;
25443         }
25444     }
25445
25446   while (!VEC_empty (tree, for_block))
25447     add_stmt (pop_stmt_list (VEC_pop (tree, for_block)));
25448   release_tree_vector (for_block);
25449
25450   return ret;
25451 }
25452
25453 /* OpenMP 2.5:
25454    #pragma omp for for-clause[optseq] new-line
25455      for-loop  */
25456
25457 #define OMP_FOR_CLAUSE_MASK                             \
25458         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
25459         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
25460         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
25461         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
25462         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
25463         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
25464         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT)              \
25465         | (1u << PRAGMA_OMP_CLAUSE_COLLAPSE))
25466
25467 static tree
25468 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
25469 {
25470   tree clauses, sb, ret;
25471   unsigned int save;
25472
25473   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
25474                                        "#pragma omp for", pragma_tok);
25475
25476   sb = begin_omp_structured_block ();
25477   save = cp_parser_begin_omp_structured_block (parser);
25478
25479   ret = cp_parser_omp_for_loop (parser, clauses, NULL);
25480
25481   cp_parser_end_omp_structured_block (parser, save);
25482   add_stmt (finish_omp_structured_block (sb));
25483
25484   return ret;
25485 }
25486
25487 /* OpenMP 2.5:
25488    # pragma omp master new-line
25489      structured-block  */
25490
25491 static tree
25492 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
25493 {
25494   cp_parser_require_pragma_eol (parser, pragma_tok);
25495   return c_finish_omp_master (input_location,
25496                               cp_parser_omp_structured_block (parser));
25497 }
25498
25499 /* OpenMP 2.5:
25500    # pragma omp ordered new-line
25501      structured-block  */
25502
25503 static tree
25504 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
25505 {
25506   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
25507   cp_parser_require_pragma_eol (parser, pragma_tok);
25508   return c_finish_omp_ordered (loc, cp_parser_omp_structured_block (parser));
25509 }
25510
25511 /* OpenMP 2.5:
25512
25513    section-scope:
25514      { section-sequence }
25515
25516    section-sequence:
25517      section-directive[opt] structured-block
25518      section-sequence section-directive structured-block  */
25519
25520 static tree
25521 cp_parser_omp_sections_scope (cp_parser *parser)
25522 {
25523   tree stmt, substmt;
25524   bool error_suppress = false;
25525   cp_token *tok;
25526
25527   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
25528     return NULL_TREE;
25529
25530   stmt = push_stmt_list ();
25531
25532   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
25533     {
25534       unsigned save;
25535
25536       substmt = begin_omp_structured_block ();
25537       save = cp_parser_begin_omp_structured_block (parser);
25538
25539       while (1)
25540         {
25541           cp_parser_statement (parser, NULL_TREE, false, NULL);
25542
25543           tok = cp_lexer_peek_token (parser->lexer);
25544           if (tok->pragma_kind == PRAGMA_OMP_SECTION)
25545             break;
25546           if (tok->type == CPP_CLOSE_BRACE)
25547             break;
25548           if (tok->type == CPP_EOF)
25549             break;
25550         }
25551
25552       cp_parser_end_omp_structured_block (parser, save);
25553       substmt = finish_omp_structured_block (substmt);
25554       substmt = build1 (OMP_SECTION, void_type_node, substmt);
25555       add_stmt (substmt);
25556     }
25557
25558   while (1)
25559     {
25560       tok = cp_lexer_peek_token (parser->lexer);
25561       if (tok->type == CPP_CLOSE_BRACE)
25562         break;
25563       if (tok->type == CPP_EOF)
25564         break;
25565
25566       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
25567         {
25568           cp_lexer_consume_token (parser->lexer);
25569           cp_parser_require_pragma_eol (parser, tok);
25570           error_suppress = false;
25571         }
25572       else if (!error_suppress)
25573         {
25574           cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
25575           error_suppress = true;
25576         }
25577
25578       substmt = cp_parser_omp_structured_block (parser);
25579       substmt = build1 (OMP_SECTION, void_type_node, substmt);
25580       add_stmt (substmt);
25581     }
25582   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
25583
25584   substmt = pop_stmt_list (stmt);
25585
25586   stmt = make_node (OMP_SECTIONS);
25587   TREE_TYPE (stmt) = void_type_node;
25588   OMP_SECTIONS_BODY (stmt) = substmt;
25589
25590   add_stmt (stmt);
25591   return stmt;
25592 }
25593
25594 /* OpenMP 2.5:
25595    # pragma omp sections sections-clause[optseq] newline
25596      sections-scope  */
25597
25598 #define OMP_SECTIONS_CLAUSE_MASK                        \
25599         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
25600         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
25601         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
25602         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
25603         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
25604
25605 static tree
25606 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
25607 {
25608   tree clauses, ret;
25609
25610   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
25611                                        "#pragma omp sections", pragma_tok);
25612
25613   ret = cp_parser_omp_sections_scope (parser);
25614   if (ret)
25615     OMP_SECTIONS_CLAUSES (ret) = clauses;
25616
25617   return ret;
25618 }
25619
25620 /* OpenMP 2.5:
25621    # pragma parallel parallel-clause new-line
25622    # pragma parallel for parallel-for-clause new-line
25623    # pragma parallel sections parallel-sections-clause new-line  */
25624
25625 #define OMP_PARALLEL_CLAUSE_MASK                        \
25626         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
25627         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
25628         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
25629         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
25630         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
25631         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
25632         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
25633         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
25634
25635 static tree
25636 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
25637 {
25638   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
25639   const char *p_name = "#pragma omp parallel";
25640   tree stmt, clauses, par_clause, ws_clause, block;
25641   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
25642   unsigned int save;
25643   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
25644
25645   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
25646     {
25647       cp_lexer_consume_token (parser->lexer);
25648       p_kind = PRAGMA_OMP_PARALLEL_FOR;
25649       p_name = "#pragma omp parallel for";
25650       mask |= OMP_FOR_CLAUSE_MASK;
25651       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
25652     }
25653   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
25654     {
25655       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
25656       const char *p = IDENTIFIER_POINTER (id);
25657       if (strcmp (p, "sections") == 0)
25658         {
25659           cp_lexer_consume_token (parser->lexer);
25660           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
25661           p_name = "#pragma omp parallel sections";
25662           mask |= OMP_SECTIONS_CLAUSE_MASK;
25663           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
25664         }
25665     }
25666
25667   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
25668   block = begin_omp_parallel ();
25669   save = cp_parser_begin_omp_structured_block (parser);
25670
25671   switch (p_kind)
25672     {
25673     case PRAGMA_OMP_PARALLEL:
25674       cp_parser_statement (parser, NULL_TREE, false, NULL);
25675       par_clause = clauses;
25676       break;
25677
25678     case PRAGMA_OMP_PARALLEL_FOR:
25679       c_split_parallel_clauses (loc, clauses, &par_clause, &ws_clause);
25680       cp_parser_omp_for_loop (parser, ws_clause, &par_clause);
25681       break;
25682
25683     case PRAGMA_OMP_PARALLEL_SECTIONS:
25684       c_split_parallel_clauses (loc, clauses, &par_clause, &ws_clause);
25685       stmt = cp_parser_omp_sections_scope (parser);
25686       if (stmt)
25687         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
25688       break;
25689
25690     default:
25691       gcc_unreachable ();
25692     }
25693
25694   cp_parser_end_omp_structured_block (parser, save);
25695   stmt = finish_omp_parallel (par_clause, block);
25696   if (p_kind != PRAGMA_OMP_PARALLEL)
25697     OMP_PARALLEL_COMBINED (stmt) = 1;
25698   return stmt;
25699 }
25700
25701 /* OpenMP 2.5:
25702    # pragma omp single single-clause[optseq] new-line
25703      structured-block  */
25704
25705 #define OMP_SINGLE_CLAUSE_MASK                          \
25706         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
25707         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
25708         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
25709         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
25710
25711 static tree
25712 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
25713 {
25714   tree stmt = make_node (OMP_SINGLE);
25715   TREE_TYPE (stmt) = void_type_node;
25716
25717   OMP_SINGLE_CLAUSES (stmt)
25718     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
25719                                  "#pragma omp single", pragma_tok);
25720   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
25721
25722   return add_stmt (stmt);
25723 }
25724
25725 /* OpenMP 3.0:
25726    # pragma omp task task-clause[optseq] new-line
25727      structured-block  */
25728
25729 #define OMP_TASK_CLAUSE_MASK                            \
25730         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
25731         | (1u << PRAGMA_OMP_CLAUSE_UNTIED)              \
25732         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
25733         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
25734         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
25735         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
25736         | (1u << PRAGMA_OMP_CLAUSE_FINAL)               \
25737         | (1u << PRAGMA_OMP_CLAUSE_MERGEABLE))
25738
25739 static tree
25740 cp_parser_omp_task (cp_parser *parser, cp_token *pragma_tok)
25741 {
25742   tree clauses, block;
25743   unsigned int save;
25744
25745   clauses = cp_parser_omp_all_clauses (parser, OMP_TASK_CLAUSE_MASK,
25746                                        "#pragma omp task", pragma_tok);
25747   block = begin_omp_task ();
25748   save = cp_parser_begin_omp_structured_block (parser);
25749   cp_parser_statement (parser, NULL_TREE, false, NULL);
25750   cp_parser_end_omp_structured_block (parser, save);
25751   return finish_omp_task (clauses, block);
25752 }
25753
25754 /* OpenMP 3.0:
25755    # pragma omp taskwait new-line  */
25756
25757 static void
25758 cp_parser_omp_taskwait (cp_parser *parser, cp_token *pragma_tok)
25759 {
25760   cp_parser_require_pragma_eol (parser, pragma_tok);
25761   finish_omp_taskwait ();
25762 }
25763
25764 /* OpenMP 3.1:
25765    # pragma omp taskyield new-line  */
25766
25767 static void
25768 cp_parser_omp_taskyield (cp_parser *parser, cp_token *pragma_tok)
25769 {
25770   cp_parser_require_pragma_eol (parser, pragma_tok);
25771   finish_omp_taskyield ();
25772 }
25773
25774 /* OpenMP 2.5:
25775    # pragma omp threadprivate (variable-list) */
25776
25777 static void
25778 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
25779 {
25780   tree vars;
25781
25782   vars = cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
25783   cp_parser_require_pragma_eol (parser, pragma_tok);
25784
25785   finish_omp_threadprivate (vars);
25786 }
25787
25788 /* Main entry point to OpenMP statement pragmas.  */
25789
25790 static void
25791 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
25792 {
25793   tree stmt;
25794
25795   switch (pragma_tok->pragma_kind)
25796     {
25797     case PRAGMA_OMP_ATOMIC:
25798       cp_parser_omp_atomic (parser, pragma_tok);
25799       return;
25800     case PRAGMA_OMP_CRITICAL:
25801       stmt = cp_parser_omp_critical (parser, pragma_tok);
25802       break;
25803     case PRAGMA_OMP_FOR:
25804       stmt = cp_parser_omp_for (parser, pragma_tok);
25805       break;
25806     case PRAGMA_OMP_MASTER:
25807       stmt = cp_parser_omp_master (parser, pragma_tok);
25808       break;
25809     case PRAGMA_OMP_ORDERED:
25810       stmt = cp_parser_omp_ordered (parser, pragma_tok);
25811       break;
25812     case PRAGMA_OMP_PARALLEL:
25813       stmt = cp_parser_omp_parallel (parser, pragma_tok);
25814       break;
25815     case PRAGMA_OMP_SECTIONS:
25816       stmt = cp_parser_omp_sections (parser, pragma_tok);
25817       break;
25818     case PRAGMA_OMP_SINGLE:
25819       stmt = cp_parser_omp_single (parser, pragma_tok);
25820       break;
25821     case PRAGMA_OMP_TASK:
25822       stmt = cp_parser_omp_task (parser, pragma_tok);
25823       break;
25824     default:
25825       gcc_unreachable ();
25826     }
25827
25828   if (stmt)
25829     SET_EXPR_LOCATION (stmt, pragma_tok->location);
25830 }
25831 \f
25832 /* The parser.  */
25833
25834 static GTY (()) cp_parser *the_parser;
25835
25836 \f
25837 /* Special handling for the first token or line in the file.  The first
25838    thing in the file might be #pragma GCC pch_preprocess, which loads a
25839    PCH file, which is a GC collection point.  So we need to handle this
25840    first pragma without benefit of an existing lexer structure.
25841
25842    Always returns one token to the caller in *FIRST_TOKEN.  This is
25843    either the true first token of the file, or the first token after
25844    the initial pragma.  */
25845
25846 static void
25847 cp_parser_initial_pragma (cp_token *first_token)
25848 {
25849   tree name = NULL;
25850
25851   cp_lexer_get_preprocessor_token (NULL, first_token);
25852   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
25853     return;
25854
25855   cp_lexer_get_preprocessor_token (NULL, first_token);
25856   if (first_token->type == CPP_STRING)
25857     {
25858       name = first_token->u.value;
25859
25860       cp_lexer_get_preprocessor_token (NULL, first_token);
25861       if (first_token->type != CPP_PRAGMA_EOL)
25862         error_at (first_token->location,
25863                   "junk at end of %<#pragma GCC pch_preprocess%>");
25864     }
25865   else
25866     error_at (first_token->location, "expected string literal");
25867
25868   /* Skip to the end of the pragma.  */
25869   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
25870     cp_lexer_get_preprocessor_token (NULL, first_token);
25871
25872   /* Now actually load the PCH file.  */
25873   if (name)
25874     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
25875
25876   /* Read one more token to return to our caller.  We have to do this
25877      after reading the PCH file in, since its pointers have to be
25878      live.  */
25879   cp_lexer_get_preprocessor_token (NULL, first_token);
25880 }
25881
25882 /* Normal parsing of a pragma token.  Here we can (and must) use the
25883    regular lexer.  */
25884
25885 static bool
25886 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
25887 {
25888   cp_token *pragma_tok;
25889   unsigned int id;
25890
25891   pragma_tok = cp_lexer_consume_token (parser->lexer);
25892   gcc_assert (pragma_tok->type == CPP_PRAGMA);
25893   parser->lexer->in_pragma = true;
25894
25895   id = pragma_tok->pragma_kind;
25896   switch (id)
25897     {
25898     case PRAGMA_GCC_PCH_PREPROCESS:
25899       error_at (pragma_tok->location,
25900                 "%<#pragma GCC pch_preprocess%> must be first");
25901       break;
25902
25903     case PRAGMA_OMP_BARRIER:
25904       switch (context)
25905         {
25906         case pragma_compound:
25907           cp_parser_omp_barrier (parser, pragma_tok);
25908           return false;
25909         case pragma_stmt:
25910           error_at (pragma_tok->location, "%<#pragma omp barrier%> may only be "
25911                     "used in compound statements");
25912           break;
25913         default:
25914           goto bad_stmt;
25915         }
25916       break;
25917
25918     case PRAGMA_OMP_FLUSH:
25919       switch (context)
25920         {
25921         case pragma_compound:
25922           cp_parser_omp_flush (parser, pragma_tok);
25923           return false;
25924         case pragma_stmt:
25925           error_at (pragma_tok->location, "%<#pragma omp flush%> may only be "
25926                     "used in compound statements");
25927           break;
25928         default:
25929           goto bad_stmt;
25930         }
25931       break;
25932
25933     case PRAGMA_OMP_TASKWAIT:
25934       switch (context)
25935         {
25936         case pragma_compound:
25937           cp_parser_omp_taskwait (parser, pragma_tok);
25938           return false;
25939         case pragma_stmt:
25940           error_at (pragma_tok->location,
25941                     "%<#pragma omp taskwait%> may only be "
25942                     "used in compound statements");
25943           break;
25944         default:
25945           goto bad_stmt;
25946         }
25947       break;
25948
25949     case PRAGMA_OMP_TASKYIELD:
25950       switch (context)
25951         {
25952         case pragma_compound:
25953           cp_parser_omp_taskyield (parser, pragma_tok);
25954           return false;
25955         case pragma_stmt:
25956           error_at (pragma_tok->location,
25957                     "%<#pragma omp taskyield%> may only be "
25958                     "used in compound statements");
25959           break;
25960         default:
25961           goto bad_stmt;
25962         }
25963       break;
25964
25965     case PRAGMA_OMP_THREADPRIVATE:
25966       cp_parser_omp_threadprivate (parser, pragma_tok);
25967       return false;
25968
25969     case PRAGMA_OMP_ATOMIC:
25970     case PRAGMA_OMP_CRITICAL:
25971     case PRAGMA_OMP_FOR:
25972     case PRAGMA_OMP_MASTER:
25973     case PRAGMA_OMP_ORDERED:
25974     case PRAGMA_OMP_PARALLEL:
25975     case PRAGMA_OMP_SECTIONS:
25976     case PRAGMA_OMP_SINGLE:
25977     case PRAGMA_OMP_TASK:
25978       if (context == pragma_external)
25979         goto bad_stmt;
25980       cp_parser_omp_construct (parser, pragma_tok);
25981       return true;
25982
25983     case PRAGMA_OMP_SECTION:
25984       error_at (pragma_tok->location, 
25985                 "%<#pragma omp section%> may only be used in "
25986                 "%<#pragma omp sections%> construct");
25987       break;
25988
25989     default:
25990       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
25991       c_invoke_pragma_handler (id);
25992       break;
25993
25994     bad_stmt:
25995       cp_parser_error (parser, "expected declaration specifiers");
25996       break;
25997     }
25998
25999   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
26000   return false;
26001 }
26002
26003 /* The interface the pragma parsers have to the lexer.  */
26004
26005 enum cpp_ttype
26006 pragma_lex (tree *value)
26007 {
26008   cp_token *tok;
26009   enum cpp_ttype ret;
26010
26011   tok = cp_lexer_peek_token (the_parser->lexer);
26012
26013   ret = tok->type;
26014   *value = tok->u.value;
26015
26016   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
26017     ret = CPP_EOF;
26018   else if (ret == CPP_STRING)
26019     *value = cp_parser_string_literal (the_parser, false, false);
26020   else
26021     {
26022       cp_lexer_consume_token (the_parser->lexer);
26023       if (ret == CPP_KEYWORD)
26024         ret = CPP_NAME;
26025     }
26026
26027   return ret;
26028 }
26029
26030 \f
26031 /* External interface.  */
26032
26033 /* Parse one entire translation unit.  */
26034
26035 void
26036 c_parse_file (void)
26037 {
26038   static bool already_called = false;
26039
26040   if (already_called)
26041     {
26042       sorry ("inter-module optimizations not implemented for C++");
26043       return;
26044     }
26045   already_called = true;
26046
26047   the_parser = cp_parser_new ();
26048   push_deferring_access_checks (flag_access_control
26049                                 ? dk_no_deferred : dk_no_check);
26050   cp_parser_translation_unit (the_parser);
26051   the_parser = NULL;
26052 }
26053
26054 #include "gt-cp-parser.h"