xref: /dragonfly/contrib/gcc-4.7/gcc/cp/parser.c (revision b4f25088)
1 /* C++ Parser.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004,
3    2005, 2007, 2008, 2009, 2010, 2011, 2012  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 
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   /* a transaction expression */
111   NIC_TRANSACTION
112 } non_integral_constant;
113 
114 /* The various kinds of errors about name-lookup failing. */
115 typedef enum name_lookup_error {
116   /* NULL */
117   NLE_NULL,
118   /* is not a type */
119   NLE_TYPE,
120   /* is not a class or namespace */
121   NLE_CXX98,
122   /* is not a class, namespace, or enumeration */
123   NLE_NOT_CXX98
124 } name_lookup_error;
125 
126 /* The various kinds of required token */
127 typedef enum required_token {
128   RT_NONE,
129   RT_SEMICOLON,  /* ';' */
130   RT_OPEN_PAREN, /* '(' */
131   RT_CLOSE_BRACE, /* '}' */
132   RT_OPEN_BRACE,  /* '{' */
133   RT_CLOSE_SQUARE, /* ']' */
134   RT_OPEN_SQUARE,  /* '[' */
135   RT_COMMA, /* ',' */
136   RT_SCOPE, /* '::' */
137   RT_LESS, /* '<' */
138   RT_GREATER, /* '>' */
139   RT_EQ, /* '=' */
140   RT_ELLIPSIS, /* '...' */
141   RT_MULT, /* '*' */
142   RT_COMPL, /* '~' */
143   RT_COLON, /* ':' */
144   RT_COLON_SCOPE, /* ':' or '::' */
145   RT_CLOSE_PAREN, /* ')' */
146   RT_COMMA_CLOSE_PAREN, /* ',' or ')' */
147   RT_PRAGMA_EOL, /* end of line */
148   RT_NAME, /* identifier */
149 
150   /* The type is CPP_KEYWORD */
151   RT_NEW, /* new */
152   RT_DELETE, /* delete */
153   RT_RETURN, /* return */
154   RT_WHILE, /* while */
155   RT_EXTERN, /* extern */
156   RT_STATIC_ASSERT, /* static_assert */
157   RT_DECLTYPE, /* decltype */
158   RT_OPERATOR, /* operator */
159   RT_CLASS, /* class */
160   RT_TEMPLATE, /* template */
161   RT_NAMESPACE, /* namespace */
162   RT_USING, /* using */
163   RT_ASM, /* asm */
164   RT_TRY, /* try */
165   RT_CATCH, /* catch */
166   RT_THROW, /* throw */
167   RT_LABEL, /* __label__ */
168   RT_AT_TRY, /* @try */
169   RT_AT_SYNCHRONIZED, /* @synchronized */
170   RT_AT_THROW, /* @throw */
171 
172   RT_SELECT,  /* selection-statement */
173   RT_INTERATION, /* iteration-statement */
174   RT_JUMP, /* jump-statement */
175   RT_CLASS_KEY, /* class-key */
176   RT_CLASS_TYPENAME_TEMPLATE, /* class, typename, or template */
177   RT_TRANSACTION_ATOMIC, /* __transaction_atomic */
178   RT_TRANSACTION_RELAXED, /* __transaction_relaxed */
179   RT_TRANSACTION_CANCEL /* __transaction_cancel */
180 } required_token;
181 
182 /* Prototypes.  */
183 
184 static cp_lexer *cp_lexer_new_main
185   (void);
186 static cp_lexer *cp_lexer_new_from_tokens
187   (cp_token_cache *tokens);
188 static void cp_lexer_destroy
189   (cp_lexer *);
190 static int cp_lexer_saving_tokens
191   (const cp_lexer *);
192 static cp_token *cp_lexer_token_at
193   (cp_lexer *, cp_token_position);
194 static void cp_lexer_get_preprocessor_token
195   (cp_lexer *, cp_token *);
196 static inline cp_token *cp_lexer_peek_token
197   (cp_lexer *);
198 static cp_token *cp_lexer_peek_nth_token
199   (cp_lexer *, size_t);
200 static inline bool cp_lexer_next_token_is
201   (cp_lexer *, enum cpp_ttype);
202 static bool cp_lexer_next_token_is_not
203   (cp_lexer *, enum cpp_ttype);
204 static bool cp_lexer_next_token_is_keyword
205   (cp_lexer *, enum rid);
206 static cp_token *cp_lexer_consume_token
207   (cp_lexer *);
208 static void cp_lexer_purge_token
209   (cp_lexer *);
210 static void cp_lexer_purge_tokens_after
211   (cp_lexer *, cp_token_position);
212 static void cp_lexer_save_tokens
213   (cp_lexer *);
214 static void cp_lexer_commit_tokens
215   (cp_lexer *);
216 static void cp_lexer_rollback_tokens
217   (cp_lexer *);
218 static void cp_lexer_print_token
219   (FILE *, cp_token *);
220 static inline bool cp_lexer_debugging_p
221   (cp_lexer *);
222 static void cp_lexer_start_debugging
223   (cp_lexer *) ATTRIBUTE_UNUSED;
224 static void cp_lexer_stop_debugging
225   (cp_lexer *) ATTRIBUTE_UNUSED;
226 
227 static cp_token_cache *cp_token_cache_new
228   (cp_token *, cp_token *);
229 
230 static void cp_parser_initial_pragma
231   (cp_token *);
232 
233 static tree cp_literal_operator_id
234   (const char *);
235 
236 /* Manifest constants.  */
237 #define CP_LEXER_BUFFER_SIZE ((256 * 1024) / sizeof (cp_token))
238 #define CP_SAVED_TOKEN_STACK 5
239 
240 /* Variables.  */
241 
242 /* The stream to which debugging output should be written.  */
243 static FILE *cp_lexer_debug_stream;
244 
245 /* Nonzero if we are parsing an unevaluated operand: an operand to
246    sizeof, typeof, or alignof.  */
247 int cp_unevaluated_operand;
248 
249 /* Dump up to NUM tokens in BUFFER to FILE starting with token
250    START_TOKEN.  If START_TOKEN is NULL, the dump starts with the
251    first token in BUFFER.  If NUM is 0, dump all the tokens.  If
252    CURR_TOKEN is set and it is one of the tokens in BUFFER, it will be
253    highlighted by surrounding it in [[ ]].  */
254 
255 static void
256 cp_lexer_dump_tokens (FILE *file, VEC(cp_token,gc) *buffer,
257 		      cp_token *start_token, unsigned num,
258 		      cp_token *curr_token)
259 {
260   unsigned i, nprinted;
261   cp_token *token;
262   bool do_print;
263 
264   fprintf (file, "%u tokens\n", VEC_length (cp_token, buffer));
265 
266   if (buffer == NULL)
267     return;
268 
269   if (num == 0)
270     num = VEC_length (cp_token, buffer);
271 
272   if (start_token == NULL)
273     start_token = VEC_address (cp_token, buffer);
274 
275   if (start_token > VEC_address (cp_token, buffer))
276     {
277       cp_lexer_print_token (file, VEC_index (cp_token, buffer, 0));
278       fprintf (file, " ... ");
279     }
280 
281   do_print = false;
282   nprinted = 0;
283   for (i = 0; VEC_iterate (cp_token, buffer, i, token) && nprinted < num; i++)
284     {
285       if (token == start_token)
286 	do_print = true;
287 
288       if (!do_print)
289 	continue;
290 
291       nprinted++;
292       if (token == curr_token)
293 	fprintf (file, "[[");
294 
295       cp_lexer_print_token (file, token);
296 
297       if (token == curr_token)
298 	fprintf (file, "]]");
299 
300       switch (token->type)
301 	{
302 	  case CPP_SEMICOLON:
303 	  case CPP_OPEN_BRACE:
304 	  case CPP_CLOSE_BRACE:
305 	  case CPP_EOF:
306 	    fputc ('\n', file);
307 	    break;
308 
309 	  default:
310 	    fputc (' ', file);
311 	}
312     }
313 
314   if (i == num && i < VEC_length (cp_token, buffer))
315     {
316       fprintf (file, " ... ");
317       cp_lexer_print_token (file, VEC_index (cp_token, buffer,
318 			    VEC_length (cp_token, buffer) - 1));
319     }
320 
321   fprintf (file, "\n");
322 }
323 
324 
325 /* Dump all tokens in BUFFER to stderr.  */
326 
327 void
328 cp_lexer_debug_tokens (VEC(cp_token,gc) *buffer)
329 {
330   cp_lexer_dump_tokens (stderr, buffer, NULL, 0, NULL);
331 }
332 
333 
334 /* Dump the cp_parser tree field T to FILE if T is non-NULL.  DESC is the
335    description for T.  */
336 
337 static void
338 cp_debug_print_tree_if_set (FILE *file, const char *desc, tree t)
339 {
340   if (t)
341     {
342       fprintf (file, "%s: ", desc);
343       print_node_brief (file, "", t, 0);
344     }
345 }
346 
347 
348 /* Dump parser context C to FILE.  */
349 
350 static void
351 cp_debug_print_context (FILE *file, cp_parser_context *c)
352 {
353   const char *status_s[] = { "OK", "ERROR", "COMMITTED" };
354   fprintf (file, "{ status = %s, scope = ", status_s[c->status]);
355   print_node_brief (file, "", c->object_type, 0);
356   fprintf (file, "}\n");
357 }
358 
359 
360 /* Print the stack of parsing contexts to FILE starting with FIRST.  */
361 
362 static void
363 cp_debug_print_context_stack (FILE *file, cp_parser_context *first)
364 {
365   unsigned i;
366   cp_parser_context *c;
367 
368   fprintf (file, "Parsing context stack:\n");
369   for (i = 0, c = first; c; c = c->next, i++)
370     {
371       fprintf (file, "\t#%u: ", i);
372       cp_debug_print_context (file, c);
373     }
374 }
375 
376 
377 /* Print the value of FLAG to FILE.  DESC is a string describing the flag.  */
378 
379 static void
380 cp_debug_print_flag (FILE *file, const char *desc, bool flag)
381 {
382   if (flag)
383     fprintf (file, "%s: true\n", desc);
384 }
385 
386 
387 /* Print an unparsed function entry UF to FILE.  */
388 
389 static void
390 cp_debug_print_unparsed_function (FILE *file, cp_unparsed_functions_entry *uf)
391 {
392   unsigned i;
393   cp_default_arg_entry *default_arg_fn;
394   tree fn;
395 
396   fprintf (file, "\tFunctions with default args:\n");
397   for (i = 0;
398        VEC_iterate (cp_default_arg_entry, uf->funs_with_default_args, i,
399 		    default_arg_fn);
400        i++)
401     {
402       fprintf (file, "\t\tClass type: ");
403       print_node_brief (file, "", default_arg_fn->class_type, 0);
404       fprintf (file, "\t\tDeclaration: ");
405       print_node_brief (file, "", default_arg_fn->decl, 0);
406       fprintf (file, "\n");
407     }
408 
409   fprintf (file, "\n\tFunctions with definitions that require "
410 	   "post-processing\n\t\t");
411   for (i = 0; VEC_iterate (tree, uf->funs_with_definitions, i, fn); i++)
412     {
413       print_node_brief (file, "", fn, 0);
414       fprintf (file, " ");
415     }
416   fprintf (file, "\n");
417 
418   fprintf (file, "\n\tNon-static data members with initializers that require "
419            "post-processing\n\t\t");
420   for (i = 0; VEC_iterate (tree, uf->nsdmis, i, fn); i++)
421     {
422       print_node_brief (file, "", fn, 0);
423       fprintf (file, " ");
424     }
425   fprintf (file, "\n");
426 }
427 
428 
429 /* Print the stack of unparsed member functions S to FILE.  */
430 
431 static void
432 cp_debug_print_unparsed_queues (FILE *file,
433 				VEC(cp_unparsed_functions_entry, gc) *s)
434 {
435   unsigned i;
436   cp_unparsed_functions_entry *uf;
437 
438   fprintf (file, "Unparsed functions\n");
439   for (i = 0; VEC_iterate (cp_unparsed_functions_entry, s, i, uf); i++)
440     {
441       fprintf (file, "#%u:\n", i);
442       cp_debug_print_unparsed_function (file, uf);
443     }
444 }
445 
446 
447 /* Dump the tokens in a window of size WINDOW_SIZE around the next_token for
448    the given PARSER.  If FILE is NULL, the output is printed on stderr. */
449 
450 static void
451 cp_debug_parser_tokens (FILE *file, cp_parser *parser, int window_size)
452 {
453   cp_token *next_token, *first_token, *start_token;
454 
455   if (file == NULL)
456     file = stderr;
457 
458   next_token = parser->lexer->next_token;
459   first_token = VEC_address (cp_token, parser->lexer->buffer);
460   start_token = (next_token > first_token + window_size / 2)
461 		? next_token - window_size / 2
462 		: first_token;
463   cp_lexer_dump_tokens (file, parser->lexer->buffer, start_token, window_size,
464 			next_token);
465 }
466 
467 
468 /* Dump debugging information for the given PARSER.  If FILE is NULL,
469    the output is printed on stderr.  */
470 
471 void
472 cp_debug_parser (FILE *file, cp_parser *parser)
473 {
474   const size_t window_size = 20;
475   cp_token *token;
476   expanded_location eloc;
477 
478   if (file == NULL)
479     file = stderr;
480 
481   fprintf (file, "Parser state\n\n");
482   fprintf (file, "Number of tokens: %u\n",
483 	   VEC_length (cp_token, parser->lexer->buffer));
484   cp_debug_print_tree_if_set (file, "Lookup scope", parser->scope);
485   cp_debug_print_tree_if_set (file, "Object scope",
486 				     parser->object_scope);
487   cp_debug_print_tree_if_set (file, "Qualifying scope",
488 				     parser->qualifying_scope);
489   cp_debug_print_context_stack (file, parser->context);
490   cp_debug_print_flag (file, "Allow GNU extensions",
491 			      parser->allow_gnu_extensions_p);
492   cp_debug_print_flag (file, "'>' token is greater-than",
493 			      parser->greater_than_is_operator_p);
494   cp_debug_print_flag (file, "Default args allowed in current "
495 			      "parameter list", parser->default_arg_ok_p);
496   cp_debug_print_flag (file, "Parsing integral constant-expression",
497 			      parser->integral_constant_expression_p);
498   cp_debug_print_flag (file, "Allow non-constant expression in current "
499 			      "constant-expression",
500 			      parser->allow_non_integral_constant_expression_p);
501   cp_debug_print_flag (file, "Seen non-constant expression",
502 			      parser->non_integral_constant_expression_p);
503   cp_debug_print_flag (file, "Local names and 'this' forbidden in "
504 			      "current context",
505 			      parser->local_variables_forbidden_p);
506   cp_debug_print_flag (file, "In unbraced linkage specification",
507 			      parser->in_unbraced_linkage_specification_p);
508   cp_debug_print_flag (file, "Parsing a declarator",
509 			      parser->in_declarator_p);
510   cp_debug_print_flag (file, "In template argument list",
511 			      parser->in_template_argument_list_p);
512   cp_debug_print_flag (file, "Parsing an iteration statement",
513 			      parser->in_statement & IN_ITERATION_STMT);
514   cp_debug_print_flag (file, "Parsing a switch statement",
515 			      parser->in_statement & IN_SWITCH_STMT);
516   cp_debug_print_flag (file, "Parsing a structured OpenMP block",
517 			      parser->in_statement & IN_OMP_BLOCK);
518   cp_debug_print_flag (file, "Parsing a an OpenMP loop",
519 			      parser->in_statement & IN_OMP_FOR);
520   cp_debug_print_flag (file, "Parsing an if statement",
521 			      parser->in_statement & IN_IF_STMT);
522   cp_debug_print_flag (file, "Parsing a type-id in an expression "
523 			      "context", parser->in_type_id_in_expr_p);
524   cp_debug_print_flag (file, "Declarations are implicitly extern \"C\"",
525 			      parser->implicit_extern_c);
526   cp_debug_print_flag (file, "String expressions should be translated "
527 			      "to execution character set",
528 			      parser->translate_strings_p);
529   cp_debug_print_flag (file, "Parsing function body outside of a "
530 			      "local class", parser->in_function_body);
531   cp_debug_print_flag (file, "Auto correct a colon to a scope operator",
532 			      parser->colon_corrects_to_scope_p);
533   if (parser->type_definition_forbidden_message)
534     fprintf (file, "Error message for forbidden type definitions: %s\n",
535 	     parser->type_definition_forbidden_message);
536   cp_debug_print_unparsed_queues (file, parser->unparsed_queues);
537   fprintf (file, "Number of class definitions in progress: %u\n",
538 	   parser->num_classes_being_defined);
539   fprintf (file, "Number of template parameter lists for the current "
540 	   "declaration: %u\n", parser->num_template_parameter_lists);
541   cp_debug_parser_tokens (file, parser, window_size);
542   token = parser->lexer->next_token;
543   fprintf (file, "Next token to parse:\n");
544   fprintf (file, "\tToken:  ");
545   cp_lexer_print_token (file, token);
546   eloc = expand_location (token->location);
547   fprintf (file, "\n\tFile:   %s\n", eloc.file);
548   fprintf (file, "\tLine:   %d\n", eloc.line);
549   fprintf (file, "\tColumn: %d\n", eloc.column);
550 }
551 
552 
553 /* Allocate memory for a new lexer object and return it.  */
554 
555 static cp_lexer *
556 cp_lexer_alloc (void)
557 {
558   cp_lexer *lexer;
559 
560   c_common_no_more_pch ();
561 
562   /* Allocate the memory.  */
563   lexer = ggc_alloc_cleared_cp_lexer ();
564 
565   /* Initially we are not debugging.  */
566   lexer->debugging_p = false;
567 
568   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
569 				   CP_SAVED_TOKEN_STACK);
570 
571   /* Create the buffer.  */
572   lexer->buffer = VEC_alloc (cp_token, gc, CP_LEXER_BUFFER_SIZE);
573 
574   return lexer;
575 }
576 
577 
578 /* Create a new main C++ lexer, the lexer that gets tokens from the
579    preprocessor.  */
580 
581 static cp_lexer *
582 cp_lexer_new_main (void)
583 {
584   cp_lexer *lexer;
585   cp_token token;
586 
587   /* It's possible that parsing the first pragma will load a PCH file,
588      which is a GC collection point.  So we have to do that before
589      allocating any memory.  */
590   cp_parser_initial_pragma (&token);
591 
592   lexer = cp_lexer_alloc ();
593 
594   /* Put the first token in the buffer.  */
595   VEC_quick_push (cp_token, lexer->buffer, &token);
596 
597   /* Get the remaining tokens from the preprocessor.  */
598   while (token.type != CPP_EOF)
599     {
600       cp_lexer_get_preprocessor_token (lexer, &token);
601       VEC_safe_push (cp_token, gc, lexer->buffer, &token);
602     }
603 
604   lexer->last_token = VEC_address (cp_token, lexer->buffer)
605                       + VEC_length (cp_token, lexer->buffer)
606 		      - 1;
607   lexer->next_token = VEC_length (cp_token, lexer->buffer)
608 		      ? VEC_address (cp_token, lexer->buffer)
609 		      : &eof_token;
610 
611   /* Subsequent preprocessor diagnostics should use compiler
612      diagnostic functions to get the compiler source location.  */
613   done_lexing = true;
614 
615   gcc_assert (!lexer->next_token->purged_p);
616   return lexer;
617 }
618 
619 /* Create a new lexer whose token stream is primed with the tokens in
620    CACHE.  When these tokens are exhausted, no new tokens will be read.  */
621 
622 static cp_lexer *
623 cp_lexer_new_from_tokens (cp_token_cache *cache)
624 {
625   cp_token *first = cache->first;
626   cp_token *last = cache->last;
627   cp_lexer *lexer = ggc_alloc_cleared_cp_lexer ();
628 
629   /* We do not own the buffer.  */
630   lexer->buffer = NULL;
631   lexer->next_token = first == last ? &eof_token : first;
632   lexer->last_token = last;
633 
634   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
635 				   CP_SAVED_TOKEN_STACK);
636 
637   /* Initially we are not debugging.  */
638   lexer->debugging_p = false;
639 
640   gcc_assert (!lexer->next_token->purged_p);
641   return lexer;
642 }
643 
644 /* Frees all resources associated with LEXER.  */
645 
646 static void
647 cp_lexer_destroy (cp_lexer *lexer)
648 {
649   VEC_free (cp_token, gc, lexer->buffer);
650   VEC_free (cp_token_position, heap, lexer->saved_tokens);
651   ggc_free (lexer);
652 }
653 
654 /* Returns nonzero if debugging information should be output.  */
655 
656 static inline bool
657 cp_lexer_debugging_p (cp_lexer *lexer)
658 {
659   return lexer->debugging_p;
660 }
661 
662 
663 static inline cp_token_position
664 cp_lexer_token_position (cp_lexer *lexer, bool previous_p)
665 {
666   gcc_assert (!previous_p || lexer->next_token != &eof_token);
667 
668   return lexer->next_token - previous_p;
669 }
670 
671 static inline cp_token *
672 cp_lexer_token_at (cp_lexer *lexer ATTRIBUTE_UNUSED, cp_token_position pos)
673 {
674   return pos;
675 }
676 
677 static inline void
678 cp_lexer_set_token_position (cp_lexer *lexer, cp_token_position pos)
679 {
680   lexer->next_token = cp_lexer_token_at (lexer, pos);
681 }
682 
683 static inline cp_token_position
684 cp_lexer_previous_token_position (cp_lexer *lexer)
685 {
686   if (lexer->next_token == &eof_token)
687     return lexer->last_token - 1;
688   else
689     return cp_lexer_token_position (lexer, true);
690 }
691 
692 static inline cp_token *
693 cp_lexer_previous_token (cp_lexer *lexer)
694 {
695   cp_token_position tp = cp_lexer_previous_token_position (lexer);
696 
697   return cp_lexer_token_at (lexer, tp);
698 }
699 
700 /* nonzero if we are presently saving tokens.  */
701 
702 static inline int
703 cp_lexer_saving_tokens (const cp_lexer* lexer)
704 {
705   return VEC_length (cp_token_position, lexer->saved_tokens) != 0;
706 }
707 
708 /* Store the next token from the preprocessor in *TOKEN.  Return true
709    if we reach EOF.  If LEXER is NULL, assume we are handling an
710    initial #pragma pch_preprocess, and thus want the lexer to return
711    processed strings.  */
712 
713 static void
714 cp_lexer_get_preprocessor_token (cp_lexer *lexer, cp_token *token)
715 {
716   static int is_extern_c = 0;
717 
718    /* Get a new token from the preprocessor.  */
719   token->type
720     = c_lex_with_flags (&token->u.value, &token->location, &token->flags,
721 			lexer == NULL ? 0 : C_LEX_STRING_NO_JOIN);
722   token->keyword = RID_MAX;
723   token->pragma_kind = PRAGMA_NONE;
724   token->purged_p = false;
725 
726   /* On some systems, some header files are surrounded by an
727      implicit extern "C" block.  Set a flag in the token if it
728      comes from such a header.  */
729   is_extern_c += pending_lang_change;
730   pending_lang_change = 0;
731   token->implicit_extern_c = is_extern_c > 0;
732 
733   /* Check to see if this token is a keyword.  */
734   if (token->type == CPP_NAME)
735     {
736       if (C_IS_RESERVED_WORD (token->u.value))
737 	{
738 	  /* Mark this token as a keyword.  */
739 	  token->type = CPP_KEYWORD;
740 	  /* Record which keyword.  */
741 	  token->keyword = C_RID_CODE (token->u.value);
742 	}
743       else
744 	{
745           if (warn_cxx0x_compat
746               && C_RID_CODE (token->u.value) >= RID_FIRST_CXX0X
747               && C_RID_CODE (token->u.value) <= RID_LAST_CXX0X)
748             {
749               /* Warn about the C++0x keyword (but still treat it as
750                  an identifier).  */
751               warning (OPT_Wc__0x_compat,
752                        "identifier %qE is a keyword in C++11",
753                        token->u.value);
754 
755               /* Clear out the C_RID_CODE so we don't warn about this
756                  particular identifier-turned-keyword again.  */
757               C_SET_RID_CODE (token->u.value, RID_MAX);
758             }
759 
760 	  token->ambiguous_p = false;
761 	  token->keyword = RID_MAX;
762 	}
763     }
764   else if (token->type == CPP_AT_NAME)
765     {
766       /* This only happens in Objective-C++; it must be a keyword.  */
767       token->type = CPP_KEYWORD;
768       switch (C_RID_CODE (token->u.value))
769 	{
770 	  /* Replace 'class' with '@class', 'private' with '@private',
771 	     etc.  This prevents confusion with the C++ keyword
772 	     'class', and makes the tokens consistent with other
773 	     Objective-C 'AT' keywords.  For example '@class' is
774 	     reported as RID_AT_CLASS which is consistent with
775 	     '@synchronized', which is reported as
776 	     RID_AT_SYNCHRONIZED.
777 	  */
778 	case RID_CLASS:     token->keyword = RID_AT_CLASS; break;
779 	case RID_PRIVATE:   token->keyword = RID_AT_PRIVATE; break;
780 	case RID_PROTECTED: token->keyword = RID_AT_PROTECTED; break;
781 	case RID_PUBLIC:    token->keyword = RID_AT_PUBLIC; break;
782 	case RID_THROW:     token->keyword = RID_AT_THROW; break;
783 	case RID_TRY:       token->keyword = RID_AT_TRY; break;
784 	case RID_CATCH:     token->keyword = RID_AT_CATCH; break;
785 	default:            token->keyword = C_RID_CODE (token->u.value);
786 	}
787     }
788   else if (token->type == CPP_PRAGMA)
789     {
790       /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST.  */
791       token->pragma_kind = ((enum pragma_kind)
792 			    TREE_INT_CST_LOW (token->u.value));
793       token->u.value = NULL_TREE;
794     }
795 }
796 
797 /* Update the globals input_location and the input file stack from TOKEN.  */
798 static inline void
799 cp_lexer_set_source_position_from_token (cp_token *token)
800 {
801   if (token->type != CPP_EOF)
802     {
803       input_location = token->location;
804     }
805 }
806 
807 /* Return a pointer to the next token in the token stream, but do not
808    consume it.  */
809 
810 static inline cp_token *
811 cp_lexer_peek_token (cp_lexer *lexer)
812 {
813   if (cp_lexer_debugging_p (lexer))
814     {
815       fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
816       cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
817       putc ('\n', cp_lexer_debug_stream);
818     }
819   return lexer->next_token;
820 }
821 
822 /* Return true if the next token has the indicated TYPE.  */
823 
824 static inline bool
825 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
826 {
827   return cp_lexer_peek_token (lexer)->type == type;
828 }
829 
830 /* Return true if the next token does not have the indicated TYPE.  */
831 
832 static inline bool
833 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
834 {
835   return !cp_lexer_next_token_is (lexer, type);
836 }
837 
838 /* Return true if the next token is the indicated KEYWORD.  */
839 
840 static inline bool
841 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
842 {
843   return cp_lexer_peek_token (lexer)->keyword == keyword;
844 }
845 
846 /* Return true if the next token is not the indicated KEYWORD.  */
847 
848 static inline bool
849 cp_lexer_next_token_is_not_keyword (cp_lexer* lexer, enum rid keyword)
850 {
851   return cp_lexer_peek_token (lexer)->keyword != keyword;
852 }
853 
854 /* Return true if the next token is a keyword for a decl-specifier.  */
855 
856 static bool
857 cp_lexer_next_token_is_decl_specifier_keyword (cp_lexer *lexer)
858 {
859   cp_token *token;
860 
861   token = cp_lexer_peek_token (lexer);
862   switch (token->keyword)
863     {
864       /* auto specifier: storage-class-specifier in C++,
865          simple-type-specifier in C++0x.  */
866     case RID_AUTO:
867       /* Storage classes.  */
868     case RID_REGISTER:
869     case RID_STATIC:
870     case RID_EXTERN:
871     case RID_MUTABLE:
872     case RID_THREAD:
873       /* Elaborated type specifiers.  */
874     case RID_ENUM:
875     case RID_CLASS:
876     case RID_STRUCT:
877     case RID_UNION:
878     case RID_TYPENAME:
879       /* Simple type specifiers.  */
880     case RID_CHAR:
881     case RID_CHAR16:
882     case RID_CHAR32:
883     case RID_WCHAR:
884     case RID_BOOL:
885     case RID_SHORT:
886     case RID_INT:
887     case RID_LONG:
888     case RID_INT128:
889     case RID_SIGNED:
890     case RID_UNSIGNED:
891     case RID_FLOAT:
892     case RID_DOUBLE:
893     case RID_VOID:
894       /* GNU extensions.  */
895     case RID_ATTRIBUTE:
896     case RID_TYPEOF:
897       /* C++0x extensions.  */
898     case RID_DECLTYPE:
899     case RID_UNDERLYING_TYPE:
900       return true;
901 
902     default:
903       return false;
904     }
905 }
906 
907 /* Returns TRUE iff the token T begins a decltype type.  */
908 
909 static bool
910 token_is_decltype (cp_token *t)
911 {
912   return (t->keyword == RID_DECLTYPE
913 	  || t->type == CPP_DECLTYPE);
914 }
915 
916 /* Returns TRUE iff the next token begins a decltype type.  */
917 
918 static bool
919 cp_lexer_next_token_is_decltype (cp_lexer *lexer)
920 {
921   cp_token *t = cp_lexer_peek_token (lexer);
922   return token_is_decltype (t);
923 }
924 
925 /* Return a pointer to the Nth token in the token stream.  If N is 1,
926    then this is precisely equivalent to cp_lexer_peek_token (except
927    that it is not inline).  One would like to disallow that case, but
928    there is one case (cp_parser_nth_token_starts_template_id) where
929    the caller passes a variable for N and it might be 1.  */
930 
931 static cp_token *
932 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
933 {
934   cp_token *token;
935 
936   /* N is 1-based, not zero-based.  */
937   gcc_assert (n > 0);
938 
939   if (cp_lexer_debugging_p (lexer))
940     fprintf (cp_lexer_debug_stream,
941 	     "cp_lexer: peeking ahead %ld at token: ", (long)n);
942 
943   --n;
944   token = lexer->next_token;
945   gcc_assert (!n || token != &eof_token);
946   while (n != 0)
947     {
948       ++token;
949       if (token == lexer->last_token)
950 	{
951 	  token = &eof_token;
952 	  break;
953 	}
954 
955       if (!token->purged_p)
956 	--n;
957     }
958 
959   if (cp_lexer_debugging_p (lexer))
960     {
961       cp_lexer_print_token (cp_lexer_debug_stream, token);
962       putc ('\n', cp_lexer_debug_stream);
963     }
964 
965   return token;
966 }
967 
968 /* Return the next token, and advance the lexer's next_token pointer
969    to point to the next non-purged token.  */
970 
971 static cp_token *
972 cp_lexer_consume_token (cp_lexer* lexer)
973 {
974   cp_token *token = lexer->next_token;
975 
976   gcc_assert (token != &eof_token);
977   gcc_assert (!lexer->in_pragma || token->type != CPP_PRAGMA_EOL);
978 
979   do
980     {
981       lexer->next_token++;
982       if (lexer->next_token == lexer->last_token)
983 	{
984 	  lexer->next_token = &eof_token;
985 	  break;
986 	}
987 
988     }
989   while (lexer->next_token->purged_p);
990 
991   cp_lexer_set_source_position_from_token (token);
992 
993   /* Provide debugging output.  */
994   if (cp_lexer_debugging_p (lexer))
995     {
996       fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
997       cp_lexer_print_token (cp_lexer_debug_stream, token);
998       putc ('\n', cp_lexer_debug_stream);
999     }
1000 
1001   return token;
1002 }
1003 
1004 /* Permanently remove the next token from the token stream, and
1005    advance the next_token pointer to refer to the next non-purged
1006    token.  */
1007 
1008 static void
1009 cp_lexer_purge_token (cp_lexer *lexer)
1010 {
1011   cp_token *tok = lexer->next_token;
1012 
1013   gcc_assert (tok != &eof_token);
1014   tok->purged_p = true;
1015   tok->location = UNKNOWN_LOCATION;
1016   tok->u.value = NULL_TREE;
1017   tok->keyword = RID_MAX;
1018 
1019   do
1020     {
1021       tok++;
1022       if (tok == lexer->last_token)
1023 	{
1024 	  tok = &eof_token;
1025 	  break;
1026 	}
1027     }
1028   while (tok->purged_p);
1029   lexer->next_token = tok;
1030 }
1031 
1032 /* Permanently remove all tokens after TOK, up to, but not
1033    including, the token that will be returned next by
1034    cp_lexer_peek_token.  */
1035 
1036 static void
1037 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
1038 {
1039   cp_token *peek = lexer->next_token;
1040 
1041   if (peek == &eof_token)
1042     peek = lexer->last_token;
1043 
1044   gcc_assert (tok < peek);
1045 
1046   for ( tok += 1; tok != peek; tok += 1)
1047     {
1048       tok->purged_p = true;
1049       tok->location = UNKNOWN_LOCATION;
1050       tok->u.value = NULL_TREE;
1051       tok->keyword = RID_MAX;
1052     }
1053 }
1054 
1055 /* Begin saving tokens.  All tokens consumed after this point will be
1056    preserved.  */
1057 
1058 static void
1059 cp_lexer_save_tokens (cp_lexer* lexer)
1060 {
1061   /* Provide debugging output.  */
1062   if (cp_lexer_debugging_p (lexer))
1063     fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
1064 
1065   VEC_safe_push (cp_token_position, heap,
1066 		 lexer->saved_tokens, lexer->next_token);
1067 }
1068 
1069 /* Commit to the portion of the token stream most recently saved.  */
1070 
1071 static void
1072 cp_lexer_commit_tokens (cp_lexer* lexer)
1073 {
1074   /* Provide debugging output.  */
1075   if (cp_lexer_debugging_p (lexer))
1076     fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
1077 
1078   VEC_pop (cp_token_position, lexer->saved_tokens);
1079 }
1080 
1081 /* Return all tokens saved since the last call to cp_lexer_save_tokens
1082    to the token stream.  Stop saving tokens.  */
1083 
1084 static void
1085 cp_lexer_rollback_tokens (cp_lexer* lexer)
1086 {
1087   /* Provide debugging output.  */
1088   if (cp_lexer_debugging_p (lexer))
1089     fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
1090 
1091   lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
1092 }
1093 
1094 /* Print a representation of the TOKEN on the STREAM.  */
1095 
1096 static void
1097 cp_lexer_print_token (FILE * stream, cp_token *token)
1098 {
1099   /* We don't use cpp_type2name here because the parser defines
1100      a few tokens of its own.  */
1101   static const char *const token_names[] = {
1102     /* cpplib-defined token types */
1103 #define OP(e, s) #e,
1104 #define TK(e, s) #e,
1105     TTYPE_TABLE
1106 #undef OP
1107 #undef TK
1108     /* C++ parser token types - see "Manifest constants", above.  */
1109     "KEYWORD",
1110     "TEMPLATE_ID",
1111     "NESTED_NAME_SPECIFIER",
1112   };
1113 
1114   /* For some tokens, print the associated data.  */
1115   switch (token->type)
1116     {
1117     case CPP_KEYWORD:
1118       /* Some keywords have a value that is not an IDENTIFIER_NODE.
1119 	 For example, `struct' is mapped to an INTEGER_CST.  */
1120       if (TREE_CODE (token->u.value) != IDENTIFIER_NODE)
1121 	break;
1122       /* else fall through */
1123     case CPP_NAME:
1124       fputs (IDENTIFIER_POINTER (token->u.value), stream);
1125       break;
1126 
1127     case CPP_STRING:
1128     case CPP_STRING16:
1129     case CPP_STRING32:
1130     case CPP_WSTRING:
1131     case CPP_UTF8STRING:
1132       fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->u.value));
1133       break;
1134 
1135     case CPP_NUMBER:
1136       print_generic_expr (stream, token->u.value, 0);
1137       break;
1138 
1139     default:
1140       /* If we have a name for the token, print it out.  Otherwise, we
1141 	 simply give the numeric code.  */
1142       if (token->type < ARRAY_SIZE(token_names))
1143 	fputs (token_names[token->type], stream);
1144       else
1145 	fprintf (stream, "[%d]", token->type);
1146       break;
1147     }
1148 }
1149 
1150 /* Start emitting debugging information.  */
1151 
1152 static void
1153 cp_lexer_start_debugging (cp_lexer* lexer)
1154 {
1155   lexer->debugging_p = true;
1156   cp_lexer_debug_stream = stderr;
1157 }
1158 
1159 /* Stop emitting debugging information.  */
1160 
1161 static void
1162 cp_lexer_stop_debugging (cp_lexer* lexer)
1163 {
1164   lexer->debugging_p = false;
1165   cp_lexer_debug_stream = NULL;
1166 }
1167 
1168 /* Create a new cp_token_cache, representing a range of tokens.  */
1169 
1170 static cp_token_cache *
1171 cp_token_cache_new (cp_token *first, cp_token *last)
1172 {
1173   cp_token_cache *cache = ggc_alloc_cp_token_cache ();
1174   cache->first = first;
1175   cache->last = last;
1176   return cache;
1177 }
1178 
1179 
1180 /* Decl-specifiers.  */
1181 
1182 /* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
1183 
1184 static void
1185 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
1186 {
1187   memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
1188 }
1189 
1190 /* Declarators.  */
1191 
1192 /* Nothing other than the parser should be creating declarators;
1193    declarators are a semi-syntactic representation of C++ entities.
1194    Other parts of the front end that need to create entities (like
1195    VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
1196 
1197 static cp_declarator *make_call_declarator
1198   (cp_declarator *, tree, cp_cv_quals, cp_virt_specifiers, tree, tree);
1199 static cp_declarator *make_array_declarator
1200   (cp_declarator *, tree);
1201 static cp_declarator *make_pointer_declarator
1202   (cp_cv_quals, cp_declarator *);
1203 static cp_declarator *make_reference_declarator
1204   (cp_cv_quals, cp_declarator *, bool);
1205 static cp_parameter_declarator *make_parameter_declarator
1206   (cp_decl_specifier_seq *, cp_declarator *, tree);
1207 static cp_declarator *make_ptrmem_declarator
1208   (cp_cv_quals, tree, cp_declarator *);
1209 
1210 /* An erroneous declarator.  */
1211 static cp_declarator *cp_error_declarator;
1212 
1213 /* The obstack on which declarators and related data structures are
1214    allocated.  */
1215 static struct obstack declarator_obstack;
1216 
1217 /* Alloc BYTES from the declarator memory pool.  */
1218 
1219 static inline void *
1220 alloc_declarator (size_t bytes)
1221 {
1222   return obstack_alloc (&declarator_obstack, bytes);
1223 }
1224 
1225 /* Allocate a declarator of the indicated KIND.  Clear fields that are
1226    common to all declarators.  */
1227 
1228 static cp_declarator *
1229 make_declarator (cp_declarator_kind kind)
1230 {
1231   cp_declarator *declarator;
1232 
1233   declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
1234   declarator->kind = kind;
1235   declarator->attributes = NULL_TREE;
1236   declarator->declarator = NULL;
1237   declarator->parameter_pack_p = false;
1238   declarator->id_loc = UNKNOWN_LOCATION;
1239 
1240   return declarator;
1241 }
1242 
1243 /* Make a declarator for a generalized identifier.  If
1244    QUALIFYING_SCOPE is non-NULL, the identifier is
1245    QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
1246    UNQUALIFIED_NAME.  SFK indicates the kind of special function this
1247    is, if any.   */
1248 
1249 static cp_declarator *
1250 make_id_declarator (tree qualifying_scope, tree unqualified_name,
1251 		    special_function_kind sfk)
1252 {
1253   cp_declarator *declarator;
1254 
1255   /* It is valid to write:
1256 
1257        class C { void f(); };
1258        typedef C D;
1259        void D::f();
1260 
1261      The standard is not clear about whether `typedef const C D' is
1262      legal; as of 2002-09-15 the committee is considering that
1263      question.  EDG 3.0 allows that syntax.  Therefore, we do as
1264      well.  */
1265   if (qualifying_scope && TYPE_P (qualifying_scope))
1266     qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
1267 
1268   gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
1269 	      || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
1270 	      || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
1271 
1272   declarator = make_declarator (cdk_id);
1273   declarator->u.id.qualifying_scope = qualifying_scope;
1274   declarator->u.id.unqualified_name = unqualified_name;
1275   declarator->u.id.sfk = sfk;
1276 
1277   return declarator;
1278 }
1279 
1280 /* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
1281    of modifiers such as const or volatile to apply to the pointer
1282    type, represented as identifiers.  */
1283 
1284 cp_declarator *
1285 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
1286 {
1287   cp_declarator *declarator;
1288 
1289   declarator = make_declarator (cdk_pointer);
1290   declarator->declarator = target;
1291   declarator->u.pointer.qualifiers = cv_qualifiers;
1292   declarator->u.pointer.class_type = NULL_TREE;
1293   if (target)
1294     {
1295       declarator->id_loc = target->id_loc;
1296       declarator->parameter_pack_p = target->parameter_pack_p;
1297       target->parameter_pack_p = false;
1298     }
1299   else
1300     declarator->parameter_pack_p = false;
1301 
1302   return declarator;
1303 }
1304 
1305 /* Like make_pointer_declarator -- but for references.  */
1306 
1307 cp_declarator *
1308 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target,
1309 			   bool rvalue_ref)
1310 {
1311   cp_declarator *declarator;
1312 
1313   declarator = make_declarator (cdk_reference);
1314   declarator->declarator = target;
1315   declarator->u.reference.qualifiers = cv_qualifiers;
1316   declarator->u.reference.rvalue_ref = rvalue_ref;
1317   if (target)
1318     {
1319       declarator->id_loc = target->id_loc;
1320       declarator->parameter_pack_p = target->parameter_pack_p;
1321       target->parameter_pack_p = false;
1322     }
1323   else
1324     declarator->parameter_pack_p = false;
1325 
1326   return declarator;
1327 }
1328 
1329 /* Like make_pointer_declarator -- but for a pointer to a non-static
1330    member of CLASS_TYPE.  */
1331 
1332 cp_declarator *
1333 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
1334 			cp_declarator *pointee)
1335 {
1336   cp_declarator *declarator;
1337 
1338   declarator = make_declarator (cdk_ptrmem);
1339   declarator->declarator = pointee;
1340   declarator->u.pointer.qualifiers = cv_qualifiers;
1341   declarator->u.pointer.class_type = class_type;
1342 
1343   if (pointee)
1344     {
1345       declarator->parameter_pack_p = pointee->parameter_pack_p;
1346       pointee->parameter_pack_p = false;
1347     }
1348   else
1349     declarator->parameter_pack_p = false;
1350 
1351   return declarator;
1352 }
1353 
1354 /* Make a declarator for the function given by TARGET, with the
1355    indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
1356    "const"-qualified member function.  The EXCEPTION_SPECIFICATION
1357    indicates what exceptions can be thrown.  */
1358 
1359 cp_declarator *
1360 make_call_declarator (cp_declarator *target,
1361 		      tree parms,
1362 		      cp_cv_quals cv_qualifiers,
1363 		      cp_virt_specifiers virt_specifiers,
1364 		      tree exception_specification,
1365 		      tree late_return_type)
1366 {
1367   cp_declarator *declarator;
1368 
1369   declarator = make_declarator (cdk_function);
1370   declarator->declarator = target;
1371   declarator->u.function.parameters = parms;
1372   declarator->u.function.qualifiers = cv_qualifiers;
1373   declarator->u.function.virt_specifiers = virt_specifiers;
1374   declarator->u.function.exception_specification = exception_specification;
1375   declarator->u.function.late_return_type = late_return_type;
1376   if (target)
1377     {
1378       declarator->id_loc = target->id_loc;
1379       declarator->parameter_pack_p = target->parameter_pack_p;
1380       target->parameter_pack_p = false;
1381     }
1382   else
1383     declarator->parameter_pack_p = false;
1384 
1385   return declarator;
1386 }
1387 
1388 /* Make a declarator for an array of BOUNDS elements, each of which is
1389    defined by ELEMENT.  */
1390 
1391 cp_declarator *
1392 make_array_declarator (cp_declarator *element, tree bounds)
1393 {
1394   cp_declarator *declarator;
1395 
1396   declarator = make_declarator (cdk_array);
1397   declarator->declarator = element;
1398   declarator->u.array.bounds = bounds;
1399   if (element)
1400     {
1401       declarator->id_loc = element->id_loc;
1402       declarator->parameter_pack_p = element->parameter_pack_p;
1403       element->parameter_pack_p = false;
1404     }
1405   else
1406     declarator->parameter_pack_p = false;
1407 
1408   return declarator;
1409 }
1410 
1411 /* Determine whether the declarator we've seen so far can be a
1412    parameter pack, when followed by an ellipsis.  */
1413 static bool
1414 declarator_can_be_parameter_pack (cp_declarator *declarator)
1415 {
1416   /* Search for a declarator name, or any other declarator that goes
1417      after the point where the ellipsis could appear in a parameter
1418      pack. If we find any of these, then this declarator can not be
1419      made into a parameter pack.  */
1420   bool found = false;
1421   while (declarator && !found)
1422     {
1423       switch ((int)declarator->kind)
1424 	{
1425 	case cdk_id:
1426 	case cdk_array:
1427 	  found = true;
1428 	  break;
1429 
1430 	case cdk_error:
1431 	  return true;
1432 
1433 	default:
1434 	  declarator = declarator->declarator;
1435 	  break;
1436 	}
1437     }
1438 
1439   return !found;
1440 }
1441 
1442 cp_parameter_declarator *no_parameters;
1443 
1444 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
1445    DECLARATOR and DEFAULT_ARGUMENT.  */
1446 
1447 cp_parameter_declarator *
1448 make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
1449 			   cp_declarator *declarator,
1450 			   tree default_argument)
1451 {
1452   cp_parameter_declarator *parameter;
1453 
1454   parameter = ((cp_parameter_declarator *)
1455 	       alloc_declarator (sizeof (cp_parameter_declarator)));
1456   parameter->next = NULL;
1457   if (decl_specifiers)
1458     parameter->decl_specifiers = *decl_specifiers;
1459   else
1460     clear_decl_specs (&parameter->decl_specifiers);
1461   parameter->declarator = declarator;
1462   parameter->default_argument = default_argument;
1463   parameter->ellipsis_p = false;
1464 
1465   return parameter;
1466 }
1467 
1468 /* Returns true iff DECLARATOR  is a declaration for a function.  */
1469 
1470 static bool
1471 function_declarator_p (const cp_declarator *declarator)
1472 {
1473   while (declarator)
1474     {
1475       if (declarator->kind == cdk_function
1476 	  && declarator->declarator->kind == cdk_id)
1477 	return true;
1478       if (declarator->kind == cdk_id
1479 	  || declarator->kind == cdk_error)
1480 	return false;
1481       declarator = declarator->declarator;
1482     }
1483   return false;
1484 }
1485 
1486 /* The parser.  */
1487 
1488 /* Overview
1489    --------
1490 
1491    A cp_parser parses the token stream as specified by the C++
1492    grammar.  Its job is purely parsing, not semantic analysis.  For
1493    example, the parser breaks the token stream into declarators,
1494    expressions, statements, and other similar syntactic constructs.
1495    It does not check that the types of the expressions on either side
1496    of an assignment-statement are compatible, or that a function is
1497    not declared with a parameter of type `void'.
1498 
1499    The parser invokes routines elsewhere in the compiler to perform
1500    semantic analysis and to build up the abstract syntax tree for the
1501    code processed.
1502 
1503    The parser (and the template instantiation code, which is, in a
1504    way, a close relative of parsing) are the only parts of the
1505    compiler that should be calling push_scope and pop_scope, or
1506    related functions.  The parser (and template instantiation code)
1507    keeps track of what scope is presently active; everything else
1508    should simply honor that.  (The code that generates static
1509    initializers may also need to set the scope, in order to check
1510    access control correctly when emitting the initializers.)
1511 
1512    Methodology
1513    -----------
1514 
1515    The parser is of the standard recursive-descent variety.  Upcoming
1516    tokens in the token stream are examined in order to determine which
1517    production to use when parsing a non-terminal.  Some C++ constructs
1518    require arbitrary look ahead to disambiguate.  For example, it is
1519    impossible, in the general case, to tell whether a statement is an
1520    expression or declaration without scanning the entire statement.
1521    Therefore, the parser is capable of "parsing tentatively."  When the
1522    parser is not sure what construct comes next, it enters this mode.
1523    Then, while we attempt to parse the construct, the parser queues up
1524    error messages, rather than issuing them immediately, and saves the
1525    tokens it consumes.  If the construct is parsed successfully, the
1526    parser "commits", i.e., it issues any queued error messages and
1527    the tokens that were being preserved are permanently discarded.
1528    If, however, the construct is not parsed successfully, the parser
1529    rolls back its state completely so that it can resume parsing using
1530    a different alternative.
1531 
1532    Future Improvements
1533    -------------------
1534 
1535    The performance of the parser could probably be improved substantially.
1536    We could often eliminate the need to parse tentatively by looking ahead
1537    a little bit.  In some places, this approach might not entirely eliminate
1538    the need to parse tentatively, but it might still speed up the average
1539    case.  */
1540 
1541 /* Flags that are passed to some parsing functions.  These values can
1542    be bitwise-ored together.  */
1543 
1544 enum
1545 {
1546   /* No flags.  */
1547   CP_PARSER_FLAGS_NONE = 0x0,
1548   /* The construct is optional.  If it is not present, then no error
1549      should be issued.  */
1550   CP_PARSER_FLAGS_OPTIONAL = 0x1,
1551   /* When parsing a type-specifier, treat user-defined type-names
1552      as non-type identifiers.  */
1553   CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2,
1554   /* When parsing a type-specifier, do not try to parse a class-specifier
1555      or enum-specifier.  */
1556   CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS = 0x4,
1557   /* When parsing a decl-specifier-seq, only allow type-specifier or
1558      constexpr.  */
1559   CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR = 0x8
1560 };
1561 
1562 /* This type is used for parameters and variables which hold
1563    combinations of the above flags.  */
1564 typedef int cp_parser_flags;
1565 
1566 /* The different kinds of declarators we want to parse.  */
1567 
1568 typedef enum cp_parser_declarator_kind
1569 {
1570   /* We want an abstract declarator.  */
1571   CP_PARSER_DECLARATOR_ABSTRACT,
1572   /* We want a named declarator.  */
1573   CP_PARSER_DECLARATOR_NAMED,
1574   /* We don't mind, but the name must be an unqualified-id.  */
1575   CP_PARSER_DECLARATOR_EITHER
1576 } cp_parser_declarator_kind;
1577 
1578 /* The precedence values used to parse binary expressions.  The minimum value
1579    of PREC must be 1, because zero is reserved to quickly discriminate
1580    binary operators from other tokens.  */
1581 
1582 enum cp_parser_prec
1583 {
1584   PREC_NOT_OPERATOR,
1585   PREC_LOGICAL_OR_EXPRESSION,
1586   PREC_LOGICAL_AND_EXPRESSION,
1587   PREC_INCLUSIVE_OR_EXPRESSION,
1588   PREC_EXCLUSIVE_OR_EXPRESSION,
1589   PREC_AND_EXPRESSION,
1590   PREC_EQUALITY_EXPRESSION,
1591   PREC_RELATIONAL_EXPRESSION,
1592   PREC_SHIFT_EXPRESSION,
1593   PREC_ADDITIVE_EXPRESSION,
1594   PREC_MULTIPLICATIVE_EXPRESSION,
1595   PREC_PM_EXPRESSION,
1596   NUM_PREC_VALUES = PREC_PM_EXPRESSION
1597 };
1598 
1599 /* A mapping from a token type to a corresponding tree node type, with a
1600    precedence value.  */
1601 
1602 typedef struct cp_parser_binary_operations_map_node
1603 {
1604   /* The token type.  */
1605   enum cpp_ttype token_type;
1606   /* The corresponding tree code.  */
1607   enum tree_code tree_type;
1608   /* The precedence of this operator.  */
1609   enum cp_parser_prec prec;
1610 } cp_parser_binary_operations_map_node;
1611 
1612 typedef struct cp_parser_expression_stack_entry
1613 {
1614   /* Left hand side of the binary operation we are currently
1615      parsing.  */
1616   tree lhs;
1617   /* Original tree code for left hand side, if it was a binary
1618      expression itself (used for -Wparentheses).  */
1619   enum tree_code lhs_type;
1620   /* Tree code for the binary operation we are parsing.  */
1621   enum tree_code tree_type;
1622   /* Precedence of the binary operation we are parsing.  */
1623   enum cp_parser_prec prec;
1624 } cp_parser_expression_stack_entry;
1625 
1626 /* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1627    entries because precedence levels on the stack are monotonically
1628    increasing.  */
1629 typedef struct cp_parser_expression_stack_entry
1630   cp_parser_expression_stack[NUM_PREC_VALUES];
1631 
1632 /* Prototypes.  */
1633 
1634 /* Constructors and destructors.  */
1635 
1636 static cp_parser_context *cp_parser_context_new
1637   (cp_parser_context *);
1638 
1639 /* Class variables.  */
1640 
1641 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1642 
1643 /* The operator-precedence table used by cp_parser_binary_expression.
1644    Transformed into an associative array (binops_by_token) by
1645    cp_parser_new.  */
1646 
1647 static const cp_parser_binary_operations_map_node binops[] = {
1648   { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1649   { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1650 
1651   { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1652   { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1653   { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1654 
1655   { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1656   { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1657 
1658   { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1659   { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1660 
1661   { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1662   { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1663   { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1664   { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1665 
1666   { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1667   { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1668 
1669   { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1670 
1671   { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1672 
1673   { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1674 
1675   { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1676 
1677   { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1678 };
1679 
1680 /* The same as binops, but initialized by cp_parser_new so that
1681    binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1682    for speed.  */
1683 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1684 
1685 /* Constructors and destructors.  */
1686 
1687 /* Construct a new context.  The context below this one on the stack
1688    is given by NEXT.  */
1689 
1690 static cp_parser_context *
1691 cp_parser_context_new (cp_parser_context* next)
1692 {
1693   cp_parser_context *context;
1694 
1695   /* Allocate the storage.  */
1696   if (cp_parser_context_free_list != NULL)
1697     {
1698       /* Pull the first entry from the free list.  */
1699       context = cp_parser_context_free_list;
1700       cp_parser_context_free_list = context->next;
1701       memset (context, 0, sizeof (*context));
1702     }
1703   else
1704     context = ggc_alloc_cleared_cp_parser_context ();
1705 
1706   /* No errors have occurred yet in this context.  */
1707   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1708   /* If this is not the bottommost context, copy information that we
1709      need from the previous context.  */
1710   if (next)
1711     {
1712       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1713 	 expression, then we are parsing one in this context, too.  */
1714       context->object_type = next->object_type;
1715       /* Thread the stack.  */
1716       context->next = next;
1717     }
1718 
1719   return context;
1720 }
1721 
1722 /* Managing the unparsed function queues.  */
1723 
1724 #define unparsed_funs_with_default_args \
1725   VEC_last (cp_unparsed_functions_entry, parser->unparsed_queues)->funs_with_default_args
1726 #define unparsed_funs_with_definitions \
1727   VEC_last (cp_unparsed_functions_entry, parser->unparsed_queues)->funs_with_definitions
1728 #define unparsed_nsdmis \
1729   VEC_last (cp_unparsed_functions_entry, parser->unparsed_queues)->nsdmis
1730 
1731 static void
1732 push_unparsed_function_queues (cp_parser *parser)
1733 {
1734   VEC_safe_push (cp_unparsed_functions_entry, gc,
1735 		 parser->unparsed_queues, NULL);
1736   unparsed_funs_with_default_args = NULL;
1737   unparsed_funs_with_definitions = make_tree_vector ();
1738   unparsed_nsdmis = NULL;
1739 }
1740 
1741 static void
1742 pop_unparsed_function_queues (cp_parser *parser)
1743 {
1744   release_tree_vector (unparsed_funs_with_definitions);
1745   VEC_pop (cp_unparsed_functions_entry, parser->unparsed_queues);
1746 }
1747 
1748 /* Prototypes.  */
1749 
1750 /* Constructors and destructors.  */
1751 
1752 static cp_parser *cp_parser_new
1753   (void);
1754 
1755 /* Routines to parse various constructs.
1756 
1757    Those that return `tree' will return the error_mark_node (rather
1758    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1759    Sometimes, they will return an ordinary node if error-recovery was
1760    attempted, even though a parse error occurred.  So, to check
1761    whether or not a parse error occurred, you should always use
1762    cp_parser_error_occurred.  If the construct is optional (indicated
1763    either by an `_opt' in the name of the function that does the
1764    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1765    the construct is not present.  */
1766 
1767 /* Lexical conventions [gram.lex]  */
1768 
1769 static tree cp_parser_identifier
1770   (cp_parser *);
1771 static tree cp_parser_string_literal
1772   (cp_parser *, bool, bool);
1773 static tree cp_parser_userdef_char_literal
1774   (cp_parser *);
1775 static tree cp_parser_userdef_string_literal
1776   (cp_token *);
1777 static tree cp_parser_userdef_numeric_literal
1778   (cp_parser *);
1779 
1780 /* Basic concepts [gram.basic]  */
1781 
1782 static bool cp_parser_translation_unit
1783   (cp_parser *);
1784 
1785 /* Expressions [gram.expr]  */
1786 
1787 static tree cp_parser_primary_expression
1788   (cp_parser *, bool, bool, bool, cp_id_kind *);
1789 static tree cp_parser_id_expression
1790   (cp_parser *, bool, bool, bool *, bool, bool);
1791 static tree cp_parser_unqualified_id
1792   (cp_parser *, bool, bool, bool, bool);
1793 static tree cp_parser_nested_name_specifier_opt
1794   (cp_parser *, bool, bool, bool, bool);
1795 static tree cp_parser_nested_name_specifier
1796   (cp_parser *, bool, bool, bool, bool);
1797 static tree cp_parser_qualifying_entity
1798   (cp_parser *, bool, bool, bool, bool, bool);
1799 static tree cp_parser_postfix_expression
1800   (cp_parser *, bool, bool, bool, cp_id_kind *);
1801 static tree cp_parser_postfix_open_square_expression
1802   (cp_parser *, tree, bool);
1803 static tree cp_parser_postfix_dot_deref_expression
1804   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *, location_t);
1805 static VEC(tree,gc) *cp_parser_parenthesized_expression_list
1806   (cp_parser *, int, bool, bool, bool *);
1807 /* Values for the second parameter of cp_parser_parenthesized_expression_list.  */
1808 enum { non_attr = 0, normal_attr = 1, id_attr = 2 };
1809 static void cp_parser_pseudo_destructor_name
1810   (cp_parser *, tree *, tree *);
1811 static tree cp_parser_unary_expression
1812   (cp_parser *, bool, bool, cp_id_kind *);
1813 static enum tree_code cp_parser_unary_operator
1814   (cp_token *);
1815 static tree cp_parser_new_expression
1816   (cp_parser *);
1817 static VEC(tree,gc) *cp_parser_new_placement
1818   (cp_parser *);
1819 static tree cp_parser_new_type_id
1820   (cp_parser *, tree *);
1821 static cp_declarator *cp_parser_new_declarator_opt
1822   (cp_parser *);
1823 static cp_declarator *cp_parser_direct_new_declarator
1824   (cp_parser *);
1825 static VEC(tree,gc) *cp_parser_new_initializer
1826   (cp_parser *);
1827 static tree cp_parser_delete_expression
1828   (cp_parser *);
1829 static tree cp_parser_cast_expression
1830   (cp_parser *, bool, bool, cp_id_kind *);
1831 static tree cp_parser_binary_expression
1832   (cp_parser *, bool, bool, enum cp_parser_prec, cp_id_kind *);
1833 static tree cp_parser_question_colon_clause
1834   (cp_parser *, tree);
1835 static tree cp_parser_assignment_expression
1836   (cp_parser *, bool, cp_id_kind *);
1837 static enum tree_code cp_parser_assignment_operator_opt
1838   (cp_parser *);
1839 static tree cp_parser_expression
1840   (cp_parser *, bool, cp_id_kind *);
1841 static tree cp_parser_constant_expression
1842   (cp_parser *, bool, bool *);
1843 static tree cp_parser_builtin_offsetof
1844   (cp_parser *);
1845 static tree cp_parser_lambda_expression
1846   (cp_parser *);
1847 static void cp_parser_lambda_introducer
1848   (cp_parser *, tree);
1849 static bool cp_parser_lambda_declarator_opt
1850   (cp_parser *, tree);
1851 static void cp_parser_lambda_body
1852   (cp_parser *, tree);
1853 
1854 /* Statements [gram.stmt.stmt]  */
1855 
1856 static void cp_parser_statement
1857   (cp_parser *, tree, bool, bool *);
1858 static void cp_parser_label_for_labeled_statement
1859   (cp_parser *);
1860 static tree cp_parser_expression_statement
1861   (cp_parser *, tree);
1862 static tree cp_parser_compound_statement
1863   (cp_parser *, tree, bool, bool);
1864 static void cp_parser_statement_seq_opt
1865   (cp_parser *, tree);
1866 static tree cp_parser_selection_statement
1867   (cp_parser *, bool *);
1868 static tree cp_parser_condition
1869   (cp_parser *);
1870 static tree cp_parser_iteration_statement
1871   (cp_parser *);
1872 static bool cp_parser_for_init_statement
1873   (cp_parser *, tree *decl);
1874 static tree cp_parser_for
1875   (cp_parser *);
1876 static tree cp_parser_c_for
1877   (cp_parser *, tree, tree);
1878 static tree cp_parser_range_for
1879   (cp_parser *, tree, tree, tree);
1880 static void do_range_for_auto_deduction
1881   (tree, tree);
1882 static tree cp_parser_perform_range_for_lookup
1883   (tree, tree *, tree *);
1884 static tree cp_parser_range_for_member_function
1885   (tree, tree);
1886 static tree cp_parser_jump_statement
1887   (cp_parser *);
1888 static void cp_parser_declaration_statement
1889   (cp_parser *);
1890 
1891 static tree cp_parser_implicitly_scoped_statement
1892   (cp_parser *, bool *);
1893 static void cp_parser_already_scoped_statement
1894   (cp_parser *);
1895 
1896 /* Declarations [gram.dcl.dcl] */
1897 
1898 static void cp_parser_declaration_seq_opt
1899   (cp_parser *);
1900 static void cp_parser_declaration
1901   (cp_parser *);
1902 static void cp_parser_block_declaration
1903   (cp_parser *, bool);
1904 static void cp_parser_simple_declaration
1905   (cp_parser *, bool, tree *);
1906 static void cp_parser_decl_specifier_seq
1907   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1908 static tree cp_parser_storage_class_specifier_opt
1909   (cp_parser *);
1910 static tree cp_parser_function_specifier_opt
1911   (cp_parser *, cp_decl_specifier_seq *);
1912 static tree cp_parser_type_specifier
1913   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1914    int *, bool *);
1915 static tree cp_parser_simple_type_specifier
1916   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1917 static tree cp_parser_type_name
1918   (cp_parser *);
1919 static tree cp_parser_nonclass_name
1920   (cp_parser* parser);
1921 static tree cp_parser_elaborated_type_specifier
1922   (cp_parser *, bool, bool);
1923 static tree cp_parser_enum_specifier
1924   (cp_parser *);
1925 static void cp_parser_enumerator_list
1926   (cp_parser *, tree);
1927 static void cp_parser_enumerator_definition
1928   (cp_parser *, tree);
1929 static tree cp_parser_namespace_name
1930   (cp_parser *);
1931 static void cp_parser_namespace_definition
1932   (cp_parser *);
1933 static void cp_parser_namespace_body
1934   (cp_parser *);
1935 static tree cp_parser_qualified_namespace_specifier
1936   (cp_parser *);
1937 static void cp_parser_namespace_alias_definition
1938   (cp_parser *);
1939 static bool cp_parser_using_declaration
1940   (cp_parser *, bool);
1941 static void cp_parser_using_directive
1942   (cp_parser *);
1943 static tree cp_parser_alias_declaration
1944   (cp_parser *);
1945 static void cp_parser_asm_definition
1946   (cp_parser *);
1947 static void cp_parser_linkage_specification
1948   (cp_parser *);
1949 static void cp_parser_static_assert
1950   (cp_parser *, bool);
1951 static tree cp_parser_decltype
1952   (cp_parser *);
1953 
1954 /* Declarators [gram.dcl.decl] */
1955 
1956 static tree cp_parser_init_declarator
1957   (cp_parser *, cp_decl_specifier_seq *, VEC (deferred_access_check,gc)*, bool, bool, int, bool *, tree *);
1958 static cp_declarator *cp_parser_declarator
1959   (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1960 static cp_declarator *cp_parser_direct_declarator
1961   (cp_parser *, cp_parser_declarator_kind, int *, bool);
1962 static enum tree_code cp_parser_ptr_operator
1963   (cp_parser *, tree *, cp_cv_quals *);
1964 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1965   (cp_parser *);
1966 static cp_virt_specifiers cp_parser_virt_specifier_seq_opt
1967   (cp_parser *);
1968 static tree cp_parser_late_return_type_opt
1969   (cp_parser *, cp_cv_quals);
1970 static tree cp_parser_declarator_id
1971   (cp_parser *, bool);
1972 static tree cp_parser_type_id
1973   (cp_parser *);
1974 static tree cp_parser_template_type_arg
1975   (cp_parser *);
1976 static tree cp_parser_trailing_type_id (cp_parser *);
1977 static tree cp_parser_type_id_1
1978   (cp_parser *, bool, bool);
1979 static void cp_parser_type_specifier_seq
1980   (cp_parser *, bool, bool, cp_decl_specifier_seq *);
1981 static tree cp_parser_parameter_declaration_clause
1982   (cp_parser *);
1983 static tree cp_parser_parameter_declaration_list
1984   (cp_parser *, bool *);
1985 static cp_parameter_declarator *cp_parser_parameter_declaration
1986   (cp_parser *, bool, bool *);
1987 static tree cp_parser_default_argument
1988   (cp_parser *, bool);
1989 static void cp_parser_function_body
1990   (cp_parser *);
1991 static tree cp_parser_initializer
1992   (cp_parser *, bool *, bool *);
1993 static tree cp_parser_initializer_clause
1994   (cp_parser *, bool *);
1995 static tree cp_parser_braced_list
1996   (cp_parser*, bool*);
1997 static VEC(constructor_elt,gc) *cp_parser_initializer_list
1998   (cp_parser *, bool *);
1999 
2000 static bool cp_parser_ctor_initializer_opt_and_function_body
2001   (cp_parser *);
2002 
2003 /* Classes [gram.class] */
2004 
2005 static tree cp_parser_class_name
2006   (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
2007 static tree cp_parser_class_specifier
2008   (cp_parser *);
2009 static tree cp_parser_class_head
2010   (cp_parser *, bool *);
2011 static enum tag_types cp_parser_class_key
2012   (cp_parser *);
2013 static void cp_parser_member_specification_opt
2014   (cp_parser *);
2015 static void cp_parser_member_declaration
2016   (cp_parser *);
2017 static tree cp_parser_pure_specifier
2018   (cp_parser *);
2019 static tree cp_parser_constant_initializer
2020   (cp_parser *);
2021 
2022 /* Derived classes [gram.class.derived] */
2023 
2024 static tree cp_parser_base_clause
2025   (cp_parser *);
2026 static tree cp_parser_base_specifier
2027   (cp_parser *);
2028 
2029 /* Special member functions [gram.special] */
2030 
2031 static tree cp_parser_conversion_function_id
2032   (cp_parser *);
2033 static tree cp_parser_conversion_type_id
2034   (cp_parser *);
2035 static cp_declarator *cp_parser_conversion_declarator_opt
2036   (cp_parser *);
2037 static bool cp_parser_ctor_initializer_opt
2038   (cp_parser *);
2039 static void cp_parser_mem_initializer_list
2040   (cp_parser *);
2041 static tree cp_parser_mem_initializer
2042   (cp_parser *);
2043 static tree cp_parser_mem_initializer_id
2044   (cp_parser *);
2045 
2046 /* Overloading [gram.over] */
2047 
2048 static tree cp_parser_operator_function_id
2049   (cp_parser *);
2050 static tree cp_parser_operator
2051   (cp_parser *);
2052 
2053 /* Templates [gram.temp] */
2054 
2055 static void cp_parser_template_declaration
2056   (cp_parser *, bool);
2057 static tree cp_parser_template_parameter_list
2058   (cp_parser *);
2059 static tree cp_parser_template_parameter
2060   (cp_parser *, bool *, bool *);
2061 static tree cp_parser_type_parameter
2062   (cp_parser *, bool *);
2063 static tree cp_parser_template_id
2064   (cp_parser *, bool, bool, bool);
2065 static tree cp_parser_template_name
2066   (cp_parser *, bool, bool, bool, bool *);
2067 static tree cp_parser_template_argument_list
2068   (cp_parser *);
2069 static tree cp_parser_template_argument
2070   (cp_parser *);
2071 static void cp_parser_explicit_instantiation
2072   (cp_parser *);
2073 static void cp_parser_explicit_specialization
2074   (cp_parser *);
2075 
2076 /* Exception handling [gram.exception] */
2077 
2078 static tree cp_parser_try_block
2079   (cp_parser *);
2080 static bool cp_parser_function_try_block
2081   (cp_parser *);
2082 static void cp_parser_handler_seq
2083   (cp_parser *);
2084 static void cp_parser_handler
2085   (cp_parser *);
2086 static tree cp_parser_exception_declaration
2087   (cp_parser *);
2088 static tree cp_parser_throw_expression
2089   (cp_parser *);
2090 static tree cp_parser_exception_specification_opt
2091   (cp_parser *);
2092 static tree cp_parser_type_id_list
2093   (cp_parser *);
2094 
2095 /* GNU Extensions */
2096 
2097 static tree cp_parser_asm_specification_opt
2098   (cp_parser *);
2099 static tree cp_parser_asm_operand_list
2100   (cp_parser *);
2101 static tree cp_parser_asm_clobber_list
2102   (cp_parser *);
2103 static tree cp_parser_asm_label_list
2104   (cp_parser *);
2105 static tree cp_parser_attributes_opt
2106   (cp_parser *);
2107 static tree cp_parser_attribute_list
2108   (cp_parser *);
2109 static bool cp_parser_extension_opt
2110   (cp_parser *, int *);
2111 static void cp_parser_label_declaration
2112   (cp_parser *);
2113 
2114 /* Transactional Memory Extensions */
2115 
2116 static tree cp_parser_transaction
2117   (cp_parser *, enum rid);
2118 static tree cp_parser_transaction_expression
2119   (cp_parser *, enum rid);
2120 static bool cp_parser_function_transaction
2121   (cp_parser *, enum rid);
2122 static tree cp_parser_transaction_cancel
2123   (cp_parser *);
2124 
2125 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
2126 static bool cp_parser_pragma
2127   (cp_parser *, enum pragma_context);
2128 
2129 /* Objective-C++ Productions */
2130 
2131 static tree cp_parser_objc_message_receiver
2132   (cp_parser *);
2133 static tree cp_parser_objc_message_args
2134   (cp_parser *);
2135 static tree cp_parser_objc_message_expression
2136   (cp_parser *);
2137 static tree cp_parser_objc_encode_expression
2138   (cp_parser *);
2139 static tree cp_parser_objc_defs_expression
2140   (cp_parser *);
2141 static tree cp_parser_objc_protocol_expression
2142   (cp_parser *);
2143 static tree cp_parser_objc_selector_expression
2144   (cp_parser *);
2145 static tree cp_parser_objc_expression
2146   (cp_parser *);
2147 static bool cp_parser_objc_selector_p
2148   (enum cpp_ttype);
2149 static tree cp_parser_objc_selector
2150   (cp_parser *);
2151 static tree cp_parser_objc_protocol_refs_opt
2152   (cp_parser *);
2153 static void cp_parser_objc_declaration
2154   (cp_parser *, tree);
2155 static tree cp_parser_objc_statement
2156   (cp_parser *);
2157 static bool cp_parser_objc_valid_prefix_attributes
2158   (cp_parser *, tree *);
2159 static void cp_parser_objc_at_property_declaration
2160   (cp_parser *) ;
2161 static void cp_parser_objc_at_synthesize_declaration
2162   (cp_parser *) ;
2163 static void cp_parser_objc_at_dynamic_declaration
2164   (cp_parser *) ;
2165 static tree cp_parser_objc_struct_declaration
2166   (cp_parser *) ;
2167 
2168 /* Utility Routines */
2169 
2170 static tree cp_parser_lookup_name
2171   (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *, location_t);
2172 static tree cp_parser_lookup_name_simple
2173   (cp_parser *, tree, location_t);
2174 static tree cp_parser_maybe_treat_template_as_class
2175   (tree, bool);
2176 static bool cp_parser_check_declarator_template_parameters
2177   (cp_parser *, cp_declarator *, location_t);
2178 static bool cp_parser_check_template_parameters
2179   (cp_parser *, unsigned, location_t, cp_declarator *);
2180 static tree cp_parser_simple_cast_expression
2181   (cp_parser *);
2182 static tree cp_parser_global_scope_opt
2183   (cp_parser *, bool);
2184 static bool cp_parser_constructor_declarator_p
2185   (cp_parser *, bool);
2186 static tree cp_parser_function_definition_from_specifiers_and_declarator
2187   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
2188 static tree cp_parser_function_definition_after_declarator
2189   (cp_parser *, bool);
2190 static void cp_parser_template_declaration_after_export
2191   (cp_parser *, bool);
2192 static void cp_parser_perform_template_parameter_access_checks
2193   (VEC (deferred_access_check,gc)*);
2194 static tree cp_parser_single_declaration
2195   (cp_parser *, VEC (deferred_access_check,gc)*, bool, bool, bool *);
2196 static tree cp_parser_functional_cast
2197   (cp_parser *, tree);
2198 static tree cp_parser_save_member_function_body
2199   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
2200 static tree cp_parser_save_nsdmi
2201   (cp_parser *);
2202 static tree cp_parser_enclosed_template_argument_list
2203   (cp_parser *);
2204 static void cp_parser_save_default_args
2205   (cp_parser *, tree);
2206 static void cp_parser_late_parsing_for_member
2207   (cp_parser *, tree);
2208 static tree cp_parser_late_parse_one_default_arg
2209   (cp_parser *, tree, tree, tree);
2210 static void cp_parser_late_parsing_nsdmi
2211   (cp_parser *, tree);
2212 static void cp_parser_late_parsing_default_args
2213   (cp_parser *, tree);
2214 static tree cp_parser_sizeof_operand
2215   (cp_parser *, enum rid);
2216 static tree cp_parser_trait_expr
2217   (cp_parser *, enum rid);
2218 static bool cp_parser_declares_only_class_p
2219   (cp_parser *);
2220 static void cp_parser_set_storage_class
2221   (cp_parser *, cp_decl_specifier_seq *, enum rid, location_t);
2222 static void cp_parser_set_decl_spec_type
2223   (cp_decl_specifier_seq *, tree, location_t, bool);
2224 static bool cp_parser_friend_p
2225   (const cp_decl_specifier_seq *);
2226 static void cp_parser_required_error
2227   (cp_parser *, required_token, bool);
2228 static cp_token *cp_parser_require
2229   (cp_parser *, enum cpp_ttype, required_token);
2230 static cp_token *cp_parser_require_keyword
2231   (cp_parser *, enum rid, required_token);
2232 static bool cp_parser_token_starts_function_definition_p
2233   (cp_token *);
2234 static bool cp_parser_next_token_starts_class_definition_p
2235   (cp_parser *);
2236 static bool cp_parser_next_token_ends_template_argument_p
2237   (cp_parser *);
2238 static bool cp_parser_nth_token_starts_template_argument_list_p
2239   (cp_parser *, size_t);
2240 static enum tag_types cp_parser_token_is_class_key
2241   (cp_token *);
2242 static void cp_parser_check_class_key
2243   (enum tag_types, tree type);
2244 static void cp_parser_check_access_in_redeclaration
2245   (tree type, location_t location);
2246 static bool cp_parser_optional_template_keyword
2247   (cp_parser *);
2248 static void cp_parser_pre_parsed_nested_name_specifier
2249   (cp_parser *);
2250 static bool cp_parser_cache_group
2251   (cp_parser *, enum cpp_ttype, unsigned);
2252 static tree cp_parser_cache_defarg
2253   (cp_parser *parser, bool nsdmi);
2254 static void cp_parser_parse_tentatively
2255   (cp_parser *);
2256 static void cp_parser_commit_to_tentative_parse
2257   (cp_parser *);
2258 static void cp_parser_abort_tentative_parse
2259   (cp_parser *);
2260 static bool cp_parser_parse_definitely
2261   (cp_parser *);
2262 static inline bool cp_parser_parsing_tentatively
2263   (cp_parser *);
2264 static bool cp_parser_uncommitted_to_tentative_parse_p
2265   (cp_parser *);
2266 static void cp_parser_error
2267   (cp_parser *, const char *);
2268 static void cp_parser_name_lookup_error
2269   (cp_parser *, tree, tree, name_lookup_error, location_t);
2270 static bool cp_parser_simulate_error
2271   (cp_parser *);
2272 static bool cp_parser_check_type_definition
2273   (cp_parser *);
2274 static void cp_parser_check_for_definition_in_return_type
2275   (cp_declarator *, tree, location_t type_location);
2276 static void cp_parser_check_for_invalid_template_id
2277   (cp_parser *, tree, location_t location);
2278 static bool cp_parser_non_integral_constant_expression
2279   (cp_parser *, non_integral_constant);
2280 static void cp_parser_diagnose_invalid_type_name
2281   (cp_parser *, tree, tree, location_t);
2282 static bool cp_parser_parse_and_diagnose_invalid_type_name
2283   (cp_parser *);
2284 static int cp_parser_skip_to_closing_parenthesis
2285   (cp_parser *, bool, bool, bool);
2286 static void cp_parser_skip_to_end_of_statement
2287   (cp_parser *);
2288 static void cp_parser_consume_semicolon_at_end_of_statement
2289   (cp_parser *);
2290 static void cp_parser_skip_to_end_of_block_or_statement
2291   (cp_parser *);
2292 static bool cp_parser_skip_to_closing_brace
2293   (cp_parser *);
2294 static void cp_parser_skip_to_end_of_template_parameter_list
2295   (cp_parser *);
2296 static void cp_parser_skip_to_pragma_eol
2297   (cp_parser*, cp_token *);
2298 static bool cp_parser_error_occurred
2299   (cp_parser *);
2300 static bool cp_parser_allow_gnu_extensions_p
2301   (cp_parser *);
2302 static bool cp_parser_is_pure_string_literal
2303   (cp_token *);
2304 static bool cp_parser_is_string_literal
2305   (cp_token *);
2306 static bool cp_parser_is_keyword
2307   (cp_token *, enum rid);
2308 static tree cp_parser_make_typename_type
2309   (cp_parser *, tree, tree, location_t location);
2310 static cp_declarator * cp_parser_make_indirect_declarator
2311   (enum tree_code, tree, cp_cv_quals, cp_declarator *);
2312 
2313 /* Returns nonzero if we are parsing tentatively.  */
2314 
2315 static inline bool
2316 cp_parser_parsing_tentatively (cp_parser* parser)
2317 {
2318   return parser->context->next != NULL;
2319 }
2320 
2321 /* Returns nonzero if TOKEN is a string literal.  */
2322 
2323 static bool
2324 cp_parser_is_pure_string_literal (cp_token* token)
2325 {
2326   return (token->type == CPP_STRING ||
2327 	  token->type == CPP_STRING16 ||
2328 	  token->type == CPP_STRING32 ||
2329 	  token->type == CPP_WSTRING ||
2330 	  token->type == CPP_UTF8STRING);
2331 }
2332 
2333 /* Returns nonzero if TOKEN is a string literal
2334    of a user-defined string literal.  */
2335 
2336 static bool
2337 cp_parser_is_string_literal (cp_token* token)
2338 {
2339   return (cp_parser_is_pure_string_literal (token) ||
2340 	  token->type == CPP_STRING_USERDEF ||
2341 	  token->type == CPP_STRING16_USERDEF ||
2342 	  token->type == CPP_STRING32_USERDEF ||
2343 	  token->type == CPP_WSTRING_USERDEF ||
2344 	  token->type == CPP_UTF8STRING_USERDEF);
2345 }
2346 
2347 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
2348 
2349 static bool
2350 cp_parser_is_keyword (cp_token* token, enum rid keyword)
2351 {
2352   return token->keyword == keyword;
2353 }
2354 
2355 /* If not parsing tentatively, issue a diagnostic of the form
2356       FILE:LINE: MESSAGE before TOKEN
2357    where TOKEN is the next token in the input stream.  MESSAGE
2358    (specified by the caller) is usually of the form "expected
2359    OTHER-TOKEN".  */
2360 
2361 static void
2362 cp_parser_error (cp_parser* parser, const char* gmsgid)
2363 {
2364   if (!cp_parser_simulate_error (parser))
2365     {
2366       cp_token *token = cp_lexer_peek_token (parser->lexer);
2367       /* This diagnostic makes more sense if it is tagged to the line
2368 	 of the token we just peeked at.  */
2369       cp_lexer_set_source_position_from_token (token);
2370 
2371       if (token->type == CPP_PRAGMA)
2372 	{
2373 	  error_at (token->location,
2374 		    "%<#pragma%> is not allowed here");
2375 	  cp_parser_skip_to_pragma_eol (parser, token);
2376 	  return;
2377 	}
2378 
2379       c_parse_error (gmsgid,
2380 		     /* Because c_parser_error does not understand
2381 			CPP_KEYWORD, keywords are treated like
2382 			identifiers.  */
2383 		     (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
2384 		     token->u.value, token->flags);
2385     }
2386 }
2387 
2388 /* Issue an error about name-lookup failing.  NAME is the
2389    IDENTIFIER_NODE DECL is the result of
2390    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
2391    the thing that we hoped to find.  */
2392 
2393 static void
2394 cp_parser_name_lookup_error (cp_parser* parser,
2395 			     tree name,
2396 			     tree decl,
2397 			     name_lookup_error desired,
2398 			     location_t location)
2399 {
2400   /* If name lookup completely failed, tell the user that NAME was not
2401      declared.  */
2402   if (decl == error_mark_node)
2403     {
2404       if (parser->scope && parser->scope != global_namespace)
2405 	error_at (location, "%<%E::%E%> has not been declared",
2406 		  parser->scope, name);
2407       else if (parser->scope == global_namespace)
2408 	error_at (location, "%<::%E%> has not been declared", name);
2409       else if (parser->object_scope
2410 	       && !CLASS_TYPE_P (parser->object_scope))
2411 	error_at (location, "request for member %qE in non-class type %qT",
2412 		  name, parser->object_scope);
2413       else if (parser->object_scope)
2414 	error_at (location, "%<%T::%E%> has not been declared",
2415 		  parser->object_scope, name);
2416       else
2417 	error_at (location, "%qE has not been declared", name);
2418     }
2419   else if (parser->scope && parser->scope != global_namespace)
2420     {
2421       switch (desired)
2422 	{
2423 	  case NLE_TYPE:
2424 	    error_at (location, "%<%E::%E%> is not a type",
2425 	    			parser->scope, name);
2426 	    break;
2427 	  case NLE_CXX98:
2428 	    error_at (location, "%<%E::%E%> is not a class or namespace",
2429 	    			parser->scope, name);
2430 	    break;
2431 	  case NLE_NOT_CXX98:
2432 	    error_at (location,
2433 	    	      "%<%E::%E%> is not a class, namespace, or enumeration",
2434 		      parser->scope, name);
2435 	    break;
2436 	  default:
2437 	    gcc_unreachable ();
2438 
2439 	}
2440     }
2441   else if (parser->scope == global_namespace)
2442     {
2443       switch (desired)
2444 	{
2445 	  case NLE_TYPE:
2446 	    error_at (location, "%<::%E%> is not a type", name);
2447 	    break;
2448 	  case NLE_CXX98:
2449 	    error_at (location, "%<::%E%> is not a class or namespace", name);
2450 	    break;
2451 	  case NLE_NOT_CXX98:
2452 	    error_at (location,
2453 		      "%<::%E%> is not a class, namespace, or enumeration",
2454 		      name);
2455 	    break;
2456 	  default:
2457 	    gcc_unreachable ();
2458 	}
2459     }
2460   else
2461     {
2462       switch (desired)
2463 	{
2464 	  case NLE_TYPE:
2465 	    error_at (location, "%qE is not a type", name);
2466 	    break;
2467 	  case NLE_CXX98:
2468 	    error_at (location, "%qE is not a class or namespace", name);
2469 	    break;
2470 	  case NLE_NOT_CXX98:
2471 	    error_at (location,
2472 		      "%qE is not a class, namespace, or enumeration", name);
2473 	    break;
2474 	  default:
2475 	    gcc_unreachable ();
2476 	}
2477     }
2478 }
2479 
2480 /* If we are parsing tentatively, remember that an error has occurred
2481    during this tentative parse.  Returns true if the error was
2482    simulated; false if a message should be issued by the caller.  */
2483 
2484 static bool
2485 cp_parser_simulate_error (cp_parser* parser)
2486 {
2487   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2488     {
2489       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2490       return true;
2491     }
2492   return false;
2493 }
2494 
2495 /* Check for repeated decl-specifiers.  */
2496 
2497 static void
2498 cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs,
2499 			   location_t location)
2500 {
2501   int ds;
2502 
2503   for (ds = ds_first; ds != ds_last; ++ds)
2504     {
2505       unsigned count = decl_specs->specs[ds];
2506       if (count < 2)
2507 	continue;
2508       /* The "long" specifier is a special case because of "long long".  */
2509       if (ds == ds_long)
2510 	{
2511 	  if (count > 2)
2512 	    error_at (location, "%<long long long%> is too long for GCC");
2513 	  else
2514 	    pedwarn_cxx98 (location, OPT_Wlong_long,
2515 			   "ISO C++ 1998 does not support %<long long%>");
2516 	}
2517       else if (count > 1)
2518 	{
2519 	  static const char *const decl_spec_names[] = {
2520 	    "signed",
2521 	    "unsigned",
2522 	    "short",
2523 	    "long",
2524 	    "const",
2525 	    "volatile",
2526 	    "restrict",
2527 	    "inline",
2528 	    "virtual",
2529 	    "explicit",
2530 	    "friend",
2531 	    "typedef",
2532 	    "using",
2533             "constexpr",
2534 	    "__complex",
2535 	    "__thread"
2536 	  };
2537 	  error_at (location, "duplicate %qs", decl_spec_names[ds]);
2538 	}
2539     }
2540 }
2541 
2542 /* This function is called when a type is defined.  If type
2543    definitions are forbidden at this point, an error message is
2544    issued.  */
2545 
2546 static bool
2547 cp_parser_check_type_definition (cp_parser* parser)
2548 {
2549   /* If types are forbidden here, issue a message.  */
2550   if (parser->type_definition_forbidden_message)
2551     {
2552       /* Don't use `%s' to print the string, because quotations (`%<', `%>')
2553 	 in the message need to be interpreted.  */
2554       error (parser->type_definition_forbidden_message);
2555       return false;
2556     }
2557   return true;
2558 }
2559 
2560 /* This function is called when the DECLARATOR is processed.  The TYPE
2561    was a type defined in the decl-specifiers.  If it is invalid to
2562    define a type in the decl-specifiers for DECLARATOR, an error is
2563    issued. TYPE_LOCATION is the location of TYPE and is used
2564    for error reporting.  */
2565 
2566 static void
2567 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2568 					       tree type, location_t type_location)
2569 {
2570   /* [dcl.fct] forbids type definitions in return types.
2571      Unfortunately, it's not easy to know whether or not we are
2572      processing a return type until after the fact.  */
2573   while (declarator
2574 	 && (declarator->kind == cdk_pointer
2575 	     || declarator->kind == cdk_reference
2576 	     || declarator->kind == cdk_ptrmem))
2577     declarator = declarator->declarator;
2578   if (declarator
2579       && declarator->kind == cdk_function)
2580     {
2581       error_at (type_location,
2582 		"new types may not be defined in a return type");
2583       inform (type_location,
2584 	      "(perhaps a semicolon is missing after the definition of %qT)",
2585 	      type);
2586     }
2587 }
2588 
2589 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2590    "<" in any valid C++ program.  If the next token is indeed "<",
2591    issue a message warning the user about what appears to be an
2592    invalid attempt to form a template-id. LOCATION is the location
2593    of the type-specifier (TYPE) */
2594 
2595 static void
2596 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2597 					 tree type, location_t location)
2598 {
2599   cp_token_position start = 0;
2600 
2601   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2602     {
2603       if (TYPE_P (type))
2604 	error_at (location, "%qT is not a template", type);
2605       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2606 	error_at (location, "%qE is not a template", type);
2607       else
2608 	error_at (location, "invalid template-id");
2609       /* Remember the location of the invalid "<".  */
2610       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2611 	start = cp_lexer_token_position (parser->lexer, true);
2612       /* Consume the "<".  */
2613       cp_lexer_consume_token (parser->lexer);
2614       /* Parse the template arguments.  */
2615       cp_parser_enclosed_template_argument_list (parser);
2616       /* Permanently remove the invalid template arguments so that
2617 	 this error message is not issued again.  */
2618       if (start)
2619 	cp_lexer_purge_tokens_after (parser->lexer, start);
2620     }
2621 }
2622 
2623 /* If parsing an integral constant-expression, issue an error message
2624    about the fact that THING appeared and return true.  Otherwise,
2625    return false.  In either case, set
2626    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2627 
2628 static bool
2629 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2630 					    non_integral_constant thing)
2631 {
2632   parser->non_integral_constant_expression_p = true;
2633   if (parser->integral_constant_expression_p)
2634     {
2635       if (!parser->allow_non_integral_constant_expression_p)
2636 	{
2637 	  const char *msg = NULL;
2638 	  switch (thing)
2639 	    {
2640   	      case NIC_FLOAT:
2641 		error ("floating-point literal "
2642 		       "cannot appear in a constant-expression");
2643 		return true;
2644 	      case NIC_CAST:
2645 		error ("a cast to a type other than an integral or "
2646 		       "enumeration type cannot appear in a "
2647 		       "constant-expression");
2648 		return true;
2649 	      case NIC_TYPEID:
2650 		error ("%<typeid%> operator "
2651 		       "cannot appear in a constant-expression");
2652 		return true;
2653 	      case NIC_NCC:
2654 		error ("non-constant compound literals "
2655 		       "cannot appear in a constant-expression");
2656 		return true;
2657 	      case NIC_FUNC_CALL:
2658 		error ("a function call "
2659 		       "cannot appear in a constant-expression");
2660 		return true;
2661 	      case NIC_INC:
2662 		error ("an increment "
2663 		       "cannot appear in a constant-expression");
2664 		return true;
2665 	      case NIC_DEC:
2666 		error ("an decrement "
2667 		       "cannot appear in a constant-expression");
2668 		return true;
2669 	      case NIC_ARRAY_REF:
2670 		error ("an array reference "
2671 		       "cannot appear in a constant-expression");
2672 		return true;
2673 	      case NIC_ADDR_LABEL:
2674 		error ("the address of a label "
2675 		       "cannot appear in a constant-expression");
2676 		return true;
2677 	      case NIC_OVERLOADED:
2678 		error ("calls to overloaded operators "
2679 		       "cannot appear in a constant-expression");
2680 		return true;
2681 	      case NIC_ASSIGNMENT:
2682 		error ("an assignment cannot appear in a constant-expression");
2683 		return true;
2684 	      case NIC_COMMA:
2685 		error ("a comma operator "
2686 		       "cannot appear in a constant-expression");
2687 		return true;
2688 	      case NIC_CONSTRUCTOR:
2689 		error ("a call to a constructor "
2690 		       "cannot appear in a constant-expression");
2691 		return true;
2692 	      case NIC_TRANSACTION:
2693 		error ("a transaction expression "
2694 		       "cannot appear in a constant-expression");
2695 		return true;
2696 	      case NIC_THIS:
2697 		msg = "this";
2698 		break;
2699 	      case NIC_FUNC_NAME:
2700 		msg = "__FUNCTION__";
2701 		break;
2702   	      case NIC_PRETTY_FUNC:
2703 		msg = "__PRETTY_FUNCTION__";
2704 		break;
2705 	      case NIC_C99_FUNC:
2706 		msg = "__func__";
2707 		break;
2708 	      case NIC_VA_ARG:
2709 		msg = "va_arg";
2710 		break;
2711 	      case NIC_ARROW:
2712 		msg = "->";
2713 		break;
2714 	      case NIC_POINT:
2715 		msg = ".";
2716 		break;
2717 	      case NIC_STAR:
2718 		msg = "*";
2719 		break;
2720 	      case NIC_ADDR:
2721 		msg = "&";
2722 		break;
2723 	      case NIC_PREINCREMENT:
2724 		msg = "++";
2725 		break;
2726 	      case NIC_PREDECREMENT:
2727 		msg = "--";
2728 		break;
2729 	      case NIC_NEW:
2730 		msg = "new";
2731 		break;
2732 	      case NIC_DEL:
2733 		msg = "delete";
2734 		break;
2735 	      default:
2736 		gcc_unreachable ();
2737 	    }
2738 	  if (msg)
2739 	    error ("%qs cannot appear in a constant-expression", msg);
2740 	  return true;
2741 	}
2742     }
2743   return false;
2744 }
2745 
2746 /* Emit a diagnostic for an invalid type name.  SCOPE is the
2747    qualifying scope (or NULL, if none) for ID.  This function commits
2748    to the current active tentative parse, if any.  (Otherwise, the
2749    problematic construct might be encountered again later, resulting
2750    in duplicate error messages.) LOCATION is the location of ID.  */
2751 
2752 static void
2753 cp_parser_diagnose_invalid_type_name (cp_parser *parser,
2754 				      tree scope, tree id,
2755 				      location_t location)
2756 {
2757   tree decl, old_scope;
2758   cp_parser_commit_to_tentative_parse (parser);
2759   /* Try to lookup the identifier.  */
2760   old_scope = parser->scope;
2761   parser->scope = scope;
2762   decl = cp_parser_lookup_name_simple (parser, id, location);
2763   parser->scope = old_scope;
2764   /* If the lookup found a template-name, it means that the user forgot
2765   to specify an argument list. Emit a useful error message.  */
2766   if (TREE_CODE (decl) == TEMPLATE_DECL)
2767     error_at (location,
2768 	      "invalid use of template-name %qE without an argument list",
2769 	      decl);
2770   else if (TREE_CODE (id) == BIT_NOT_EXPR)
2771     error_at (location, "invalid use of destructor %qD as a type", id);
2772   else if (TREE_CODE (decl) == TYPE_DECL)
2773     /* Something like 'unsigned A a;'  */
2774     error_at (location, "invalid combination of multiple type-specifiers");
2775   else if (!parser->scope)
2776     {
2777       /* Issue an error message.  */
2778       error_at (location, "%qE does not name a type", id);
2779       /* If we're in a template class, it's possible that the user was
2780 	 referring to a type from a base class.  For example:
2781 
2782 	   template <typename T> struct A { typedef T X; };
2783 	   template <typename T> struct B : public A<T> { X x; };
2784 
2785 	 The user should have said "typename A<T>::X".  */
2786       if (cxx_dialect < cxx0x && id == ridpointers[(int)RID_CONSTEXPR])
2787 	inform (location, "C++11 %<constexpr%> only available with "
2788 		"-std=c++11 or -std=gnu++11");
2789       else if (processing_template_decl && current_class_type
2790 	       && TYPE_BINFO (current_class_type))
2791 	{
2792 	  tree b;
2793 
2794 	  for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2795 	       b;
2796 	       b = TREE_CHAIN (b))
2797 	    {
2798 	      tree base_type = BINFO_TYPE (b);
2799 	      if (CLASS_TYPE_P (base_type)
2800 		  && dependent_type_p (base_type))
2801 		{
2802 		  tree field;
2803 		  /* Go from a particular instantiation of the
2804 		     template (which will have an empty TYPE_FIELDs),
2805 		     to the main version.  */
2806 		  base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2807 		  for (field = TYPE_FIELDS (base_type);
2808 		       field;
2809 		       field = DECL_CHAIN (field))
2810 		    if (TREE_CODE (field) == TYPE_DECL
2811 			&& DECL_NAME (field) == id)
2812 		      {
2813 			inform (location,
2814 				"(perhaps %<typename %T::%E%> was intended)",
2815 				BINFO_TYPE (b), id);
2816 			break;
2817 		      }
2818 		  if (field)
2819 		    break;
2820 		}
2821 	    }
2822 	}
2823     }
2824   /* Here we diagnose qualified-ids where the scope is actually correct,
2825      but the identifier does not resolve to a valid type name.  */
2826   else if (parser->scope != error_mark_node)
2827     {
2828       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2829 	error_at (location, "%qE in namespace %qE does not name a type",
2830 		  id, parser->scope);
2831       else if (CLASS_TYPE_P (parser->scope)
2832 	       && constructor_name_p (id, parser->scope))
2833 	{
2834 	  /* A<T>::A<T>() */
2835 	  error_at (location, "%<%T::%E%> names the constructor, not"
2836 		    " the type", parser->scope, id);
2837 	  if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2838 	    error_at (location, "and %qT has no template constructors",
2839 		      parser->scope);
2840 	}
2841       else if (TYPE_P (parser->scope)
2842 	       && dependent_scope_p (parser->scope))
2843 	error_at (location, "need %<typename%> before %<%T::%E%> because "
2844 		  "%qT is a dependent scope",
2845 		  parser->scope, id, parser->scope);
2846       else if (TYPE_P (parser->scope))
2847 	error_at (location, "%qE in %q#T does not name a type",
2848 		  id, parser->scope);
2849       else
2850 	gcc_unreachable ();
2851     }
2852 }
2853 
2854 /* Check for a common situation where a type-name should be present,
2855    but is not, and issue a sensible error message.  Returns true if an
2856    invalid type-name was detected.
2857 
2858    The situation handled by this function are variable declarations of the
2859    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2860    Usually, `ID' should name a type, but if we got here it means that it
2861    does not. We try to emit the best possible error message depending on
2862    how exactly the id-expression looks like.  */
2863 
2864 static bool
2865 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2866 {
2867   tree id;
2868   cp_token *token = cp_lexer_peek_token (parser->lexer);
2869 
2870   /* Avoid duplicate error about ambiguous lookup.  */
2871   if (token->type == CPP_NESTED_NAME_SPECIFIER)
2872     {
2873       cp_token *next = cp_lexer_peek_nth_token (parser->lexer, 2);
2874       if (next->type == CPP_NAME && next->ambiguous_p)
2875 	goto out;
2876     }
2877 
2878   cp_parser_parse_tentatively (parser);
2879   id = cp_parser_id_expression (parser,
2880 				/*template_keyword_p=*/false,
2881 				/*check_dependency_p=*/true,
2882 				/*template_p=*/NULL,
2883 				/*declarator_p=*/true,
2884 				/*optional_p=*/false);
2885   /* If the next token is a (, this is a function with no explicit return
2886      type, i.e. constructor, destructor or conversion op.  */
2887   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
2888       || TREE_CODE (id) == TYPE_DECL)
2889     {
2890       cp_parser_abort_tentative_parse (parser);
2891       return false;
2892     }
2893   if (!cp_parser_parse_definitely (parser))
2894     return false;
2895 
2896   /* Emit a diagnostic for the invalid type.  */
2897   cp_parser_diagnose_invalid_type_name (parser, parser->scope,
2898 					id, token->location);
2899  out:
2900   /* If we aren't in the middle of a declarator (i.e. in a
2901      parameter-declaration-clause), skip to the end of the declaration;
2902      there's no point in trying to process it.  */
2903   if (!parser->in_declarator_p)
2904     cp_parser_skip_to_end_of_block_or_statement (parser);
2905   return true;
2906 }
2907 
2908 /* Consume tokens up to, and including, the next non-nested closing `)'.
2909    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2910    are doing error recovery. Returns -1 if OR_COMMA is true and we
2911    found an unnested comma.  */
2912 
2913 static int
2914 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2915 				       bool recovering,
2916 				       bool or_comma,
2917 				       bool consume_paren)
2918 {
2919   unsigned paren_depth = 0;
2920   unsigned brace_depth = 0;
2921   unsigned square_depth = 0;
2922 
2923   if (recovering && !or_comma
2924       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2925     return 0;
2926 
2927   while (true)
2928     {
2929       cp_token * token = cp_lexer_peek_token (parser->lexer);
2930 
2931       switch (token->type)
2932 	{
2933 	case CPP_EOF:
2934 	case CPP_PRAGMA_EOL:
2935 	  /* If we've run out of tokens, then there is no closing `)'.  */
2936 	  return 0;
2937 
2938         /* This is good for lambda expression capture-lists.  */
2939         case CPP_OPEN_SQUARE:
2940           ++square_depth;
2941           break;
2942         case CPP_CLOSE_SQUARE:
2943           if (!square_depth--)
2944             return 0;
2945           break;
2946 
2947 	case CPP_SEMICOLON:
2948 	  /* This matches the processing in skip_to_end_of_statement.  */
2949 	  if (!brace_depth)
2950 	    return 0;
2951 	  break;
2952 
2953 	case CPP_OPEN_BRACE:
2954 	  ++brace_depth;
2955 	  break;
2956 	case CPP_CLOSE_BRACE:
2957 	  if (!brace_depth--)
2958 	    return 0;
2959 	  break;
2960 
2961 	case CPP_COMMA:
2962 	  if (recovering && or_comma && !brace_depth && !paren_depth
2963 	      && !square_depth)
2964 	    return -1;
2965 	  break;
2966 
2967 	case CPP_OPEN_PAREN:
2968 	  if (!brace_depth)
2969 	    ++paren_depth;
2970 	  break;
2971 
2972 	case CPP_CLOSE_PAREN:
2973 	  if (!brace_depth && !paren_depth--)
2974 	    {
2975 	      if (consume_paren)
2976 		cp_lexer_consume_token (parser->lexer);
2977 	      return 1;
2978 	    }
2979 	  break;
2980 
2981 	default:
2982 	  break;
2983 	}
2984 
2985       /* Consume the token.  */
2986       cp_lexer_consume_token (parser->lexer);
2987     }
2988 }
2989 
2990 /* Consume tokens until we reach the end of the current statement.
2991    Normally, that will be just before consuming a `;'.  However, if a
2992    non-nested `}' comes first, then we stop before consuming that.  */
2993 
2994 static void
2995 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2996 {
2997   unsigned nesting_depth = 0;
2998 
2999   while (true)
3000     {
3001       cp_token *token = cp_lexer_peek_token (parser->lexer);
3002 
3003       switch (token->type)
3004 	{
3005 	case CPP_EOF:
3006 	case CPP_PRAGMA_EOL:
3007 	  /* If we've run out of tokens, stop.  */
3008 	  return;
3009 
3010 	case CPP_SEMICOLON:
3011 	  /* If the next token is a `;', we have reached the end of the
3012 	     statement.  */
3013 	  if (!nesting_depth)
3014 	    return;
3015 	  break;
3016 
3017 	case CPP_CLOSE_BRACE:
3018 	  /* If this is a non-nested '}', stop before consuming it.
3019 	     That way, when confronted with something like:
3020 
3021 	       { 3 + }
3022 
3023 	     we stop before consuming the closing '}', even though we
3024 	     have not yet reached a `;'.  */
3025 	  if (nesting_depth == 0)
3026 	    return;
3027 
3028 	  /* If it is the closing '}' for a block that we have
3029 	     scanned, stop -- but only after consuming the token.
3030 	     That way given:
3031 
3032 		void f g () { ... }
3033 		typedef int I;
3034 
3035 	     we will stop after the body of the erroneously declared
3036 	     function, but before consuming the following `typedef'
3037 	     declaration.  */
3038 	  if (--nesting_depth == 0)
3039 	    {
3040 	      cp_lexer_consume_token (parser->lexer);
3041 	      return;
3042 	    }
3043 
3044 	case CPP_OPEN_BRACE:
3045 	  ++nesting_depth;
3046 	  break;
3047 
3048 	default:
3049 	  break;
3050 	}
3051 
3052       /* Consume the token.  */
3053       cp_lexer_consume_token (parser->lexer);
3054     }
3055 }
3056 
3057 /* This function is called at the end of a statement or declaration.
3058    If the next token is a semicolon, it is consumed; otherwise, error
3059    recovery is attempted.  */
3060 
3061 static void
3062 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
3063 {
3064   /* Look for the trailing `;'.  */
3065   if (!cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON))
3066     {
3067       /* If there is additional (erroneous) input, skip to the end of
3068 	 the statement.  */
3069       cp_parser_skip_to_end_of_statement (parser);
3070       /* If the next token is now a `;', consume it.  */
3071       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
3072 	cp_lexer_consume_token (parser->lexer);
3073     }
3074 }
3075 
3076 /* Skip tokens until we have consumed an entire block, or until we
3077    have consumed a non-nested `;'.  */
3078 
3079 static void
3080 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
3081 {
3082   int nesting_depth = 0;
3083 
3084   while (nesting_depth >= 0)
3085     {
3086       cp_token *token = cp_lexer_peek_token (parser->lexer);
3087 
3088       switch (token->type)
3089 	{
3090 	case CPP_EOF:
3091 	case CPP_PRAGMA_EOL:
3092 	  /* If we've run out of tokens, stop.  */
3093 	  return;
3094 
3095 	case CPP_SEMICOLON:
3096 	  /* Stop if this is an unnested ';'. */
3097 	  if (!nesting_depth)
3098 	    nesting_depth = -1;
3099 	  break;
3100 
3101 	case CPP_CLOSE_BRACE:
3102 	  /* Stop if this is an unnested '}', or closes the outermost
3103 	     nesting level.  */
3104 	  nesting_depth--;
3105 	  if (nesting_depth < 0)
3106 	    return;
3107 	  if (!nesting_depth)
3108 	    nesting_depth = -1;
3109 	  break;
3110 
3111 	case CPP_OPEN_BRACE:
3112 	  /* Nest. */
3113 	  nesting_depth++;
3114 	  break;
3115 
3116 	default:
3117 	  break;
3118 	}
3119 
3120       /* Consume the token.  */
3121       cp_lexer_consume_token (parser->lexer);
3122     }
3123 }
3124 
3125 /* Skip tokens until a non-nested closing curly brace is the next
3126    token, or there are no more tokens. Return true in the first case,
3127    false otherwise.  */
3128 
3129 static bool
3130 cp_parser_skip_to_closing_brace (cp_parser *parser)
3131 {
3132   unsigned nesting_depth = 0;
3133 
3134   while (true)
3135     {
3136       cp_token *token = cp_lexer_peek_token (parser->lexer);
3137 
3138       switch (token->type)
3139 	{
3140 	case CPP_EOF:
3141 	case CPP_PRAGMA_EOL:
3142 	  /* If we've run out of tokens, stop.  */
3143 	  return false;
3144 
3145 	case CPP_CLOSE_BRACE:
3146 	  /* If the next token is a non-nested `}', then we have reached
3147 	     the end of the current block.  */
3148 	  if (nesting_depth-- == 0)
3149 	    return true;
3150 	  break;
3151 
3152 	case CPP_OPEN_BRACE:
3153 	  /* If it the next token is a `{', then we are entering a new
3154 	     block.  Consume the entire block.  */
3155 	  ++nesting_depth;
3156 	  break;
3157 
3158 	default:
3159 	  break;
3160 	}
3161 
3162       /* Consume the token.  */
3163       cp_lexer_consume_token (parser->lexer);
3164     }
3165 }
3166 
3167 /* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
3168    parameter is the PRAGMA token, allowing us to purge the entire pragma
3169    sequence.  */
3170 
3171 static void
3172 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
3173 {
3174   cp_token *token;
3175 
3176   parser->lexer->in_pragma = false;
3177 
3178   do
3179     token = cp_lexer_consume_token (parser->lexer);
3180   while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
3181 
3182   /* Ensure that the pragma is not parsed again.  */
3183   cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
3184 }
3185 
3186 /* Require pragma end of line, resyncing with it as necessary.  The
3187    arguments are as for cp_parser_skip_to_pragma_eol.  */
3188 
3189 static void
3190 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
3191 {
3192   parser->lexer->in_pragma = false;
3193   if (!cp_parser_require (parser, CPP_PRAGMA_EOL, RT_PRAGMA_EOL))
3194     cp_parser_skip_to_pragma_eol (parser, pragma_tok);
3195 }
3196 
3197 /* This is a simple wrapper around make_typename_type. When the id is
3198    an unresolved identifier node, we can provide a superior diagnostic
3199    using cp_parser_diagnose_invalid_type_name.  */
3200 
3201 static tree
3202 cp_parser_make_typename_type (cp_parser *parser, tree scope,
3203 			      tree id, location_t id_location)
3204 {
3205   tree result;
3206   if (TREE_CODE (id) == IDENTIFIER_NODE)
3207     {
3208       result = make_typename_type (scope, id, typename_type,
3209 				   /*complain=*/tf_none);
3210       if (result == error_mark_node)
3211 	cp_parser_diagnose_invalid_type_name (parser, scope, id, id_location);
3212       return result;
3213     }
3214   return make_typename_type (scope, id, typename_type, tf_error);
3215 }
3216 
3217 /* This is a wrapper around the
3218    make_{pointer,ptrmem,reference}_declarator functions that decides
3219    which one to call based on the CODE and CLASS_TYPE arguments. The
3220    CODE argument should be one of the values returned by
3221    cp_parser_ptr_operator. */
3222 static cp_declarator *
3223 cp_parser_make_indirect_declarator (enum tree_code code, tree class_type,
3224 				    cp_cv_quals cv_qualifiers,
3225 				    cp_declarator *target)
3226 {
3227   if (code == ERROR_MARK)
3228     return cp_error_declarator;
3229 
3230   if (code == INDIRECT_REF)
3231     if (class_type == NULL_TREE)
3232       return make_pointer_declarator (cv_qualifiers, target);
3233     else
3234       return make_ptrmem_declarator (cv_qualifiers, class_type, target);
3235   else if (code == ADDR_EXPR && class_type == NULL_TREE)
3236     return make_reference_declarator (cv_qualifiers, target, false);
3237   else if (code == NON_LVALUE_EXPR && class_type == NULL_TREE)
3238     return make_reference_declarator (cv_qualifiers, target, true);
3239   gcc_unreachable ();
3240 }
3241 
3242 /* Create a new C++ parser.  */
3243 
3244 static cp_parser *
3245 cp_parser_new (void)
3246 {
3247   cp_parser *parser;
3248   cp_lexer *lexer;
3249   unsigned i;
3250 
3251   /* cp_lexer_new_main is called before doing GC allocation because
3252      cp_lexer_new_main might load a PCH file.  */
3253   lexer = cp_lexer_new_main ();
3254 
3255   /* Initialize the binops_by_token so that we can get the tree
3256      directly from the token.  */
3257   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
3258     binops_by_token[binops[i].token_type] = binops[i];
3259 
3260   parser = ggc_alloc_cleared_cp_parser ();
3261   parser->lexer = lexer;
3262   parser->context = cp_parser_context_new (NULL);
3263 
3264   /* For now, we always accept GNU extensions.  */
3265   parser->allow_gnu_extensions_p = 1;
3266 
3267   /* The `>' token is a greater-than operator, not the end of a
3268      template-id.  */
3269   parser->greater_than_is_operator_p = true;
3270 
3271   parser->default_arg_ok_p = true;
3272 
3273   /* We are not parsing a constant-expression.  */
3274   parser->integral_constant_expression_p = false;
3275   parser->allow_non_integral_constant_expression_p = false;
3276   parser->non_integral_constant_expression_p = false;
3277 
3278   /* Local variable names are not forbidden.  */
3279   parser->local_variables_forbidden_p = false;
3280 
3281   /* We are not processing an `extern "C"' declaration.  */
3282   parser->in_unbraced_linkage_specification_p = false;
3283 
3284   /* We are not processing a declarator.  */
3285   parser->in_declarator_p = false;
3286 
3287   /* We are not processing a template-argument-list.  */
3288   parser->in_template_argument_list_p = false;
3289 
3290   /* We are not in an iteration statement.  */
3291   parser->in_statement = 0;
3292 
3293   /* We are not in a switch statement.  */
3294   parser->in_switch_statement_p = false;
3295 
3296   /* We are not parsing a type-id inside an expression.  */
3297   parser->in_type_id_in_expr_p = false;
3298 
3299   /* Declarations aren't implicitly extern "C".  */
3300   parser->implicit_extern_c = false;
3301 
3302   /* String literals should be translated to the execution character set.  */
3303   parser->translate_strings_p = true;
3304 
3305   /* We are not parsing a function body.  */
3306   parser->in_function_body = false;
3307 
3308   /* We can correct until told otherwise.  */
3309   parser->colon_corrects_to_scope_p = true;
3310 
3311   /* The unparsed function queue is empty.  */
3312   push_unparsed_function_queues (parser);
3313 
3314   /* There are no classes being defined.  */
3315   parser->num_classes_being_defined = 0;
3316 
3317   /* No template parameters apply.  */
3318   parser->num_template_parameter_lists = 0;
3319 
3320   return parser;
3321 }
3322 
3323 /* Create a cp_lexer structure which will emit the tokens in CACHE
3324    and push it onto the parser's lexer stack.  This is used for delayed
3325    parsing of in-class method bodies and default arguments, and should
3326    not be confused with tentative parsing.  */
3327 static void
3328 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
3329 {
3330   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
3331   lexer->next = parser->lexer;
3332   parser->lexer = lexer;
3333 
3334   /* Move the current source position to that of the first token in the
3335      new lexer.  */
3336   cp_lexer_set_source_position_from_token (lexer->next_token);
3337 }
3338 
3339 /* Pop the top lexer off the parser stack.  This is never used for the
3340    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
3341 static void
3342 cp_parser_pop_lexer (cp_parser *parser)
3343 {
3344   cp_lexer *lexer = parser->lexer;
3345   parser->lexer = lexer->next;
3346   cp_lexer_destroy (lexer);
3347 
3348   /* Put the current source position back where it was before this
3349      lexer was pushed.  */
3350   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
3351 }
3352 
3353 /* Lexical conventions [gram.lex]  */
3354 
3355 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
3356    identifier.  */
3357 
3358 static tree
3359 cp_parser_identifier (cp_parser* parser)
3360 {
3361   cp_token *token;
3362 
3363   /* Look for the identifier.  */
3364   token = cp_parser_require (parser, CPP_NAME, RT_NAME);
3365   /* Return the value.  */
3366   return token ? token->u.value : error_mark_node;
3367 }
3368 
3369 /* Parse a sequence of adjacent string constants.  Returns a
3370    TREE_STRING representing the combined, nul-terminated string
3371    constant.  If TRANSLATE is true, translate the string to the
3372    execution character set.  If WIDE_OK is true, a wide string is
3373    invalid here.
3374 
3375    C++98 [lex.string] says that if a narrow string literal token is
3376    adjacent to a wide string literal token, the behavior is undefined.
3377    However, C99 6.4.5p4 says that this results in a wide string literal.
3378    We follow C99 here, for consistency with the C front end.
3379 
3380    This code is largely lifted from lex_string() in c-lex.c.
3381 
3382    FUTURE: ObjC++ will need to handle @-strings here.  */
3383 static tree
3384 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
3385 {
3386   tree value;
3387   size_t count;
3388   struct obstack str_ob;
3389   cpp_string str, istr, *strs;
3390   cp_token *tok;
3391   enum cpp_ttype type, curr_type;
3392   int have_suffix_p = 0;
3393   tree string_tree;
3394   tree suffix_id = NULL_TREE;
3395   bool curr_tok_is_userdef_p = false;
3396 
3397   tok = cp_lexer_peek_token (parser->lexer);
3398   if (!cp_parser_is_string_literal (tok))
3399     {
3400       cp_parser_error (parser, "expected string-literal");
3401       return error_mark_node;
3402     }
3403 
3404   if (cpp_userdef_string_p (tok->type))
3405     {
3406       string_tree = USERDEF_LITERAL_VALUE (tok->u.value);
3407       curr_type = cpp_userdef_string_remove_type (tok->type);
3408       curr_tok_is_userdef_p = true;
3409     }
3410   else
3411     {
3412       string_tree = tok->u.value;
3413       curr_type = tok->type;
3414     }
3415   type = curr_type;
3416 
3417   /* Try to avoid the overhead of creating and destroying an obstack
3418      for the common case of just one string.  */
3419   if (!cp_parser_is_string_literal
3420       (cp_lexer_peek_nth_token (parser->lexer, 2)))
3421     {
3422       cp_lexer_consume_token (parser->lexer);
3423 
3424       str.text = (const unsigned char *)TREE_STRING_POINTER (string_tree);
3425       str.len = TREE_STRING_LENGTH (string_tree);
3426       count = 1;
3427 
3428       if (curr_tok_is_userdef_p)
3429 	{
3430 	  suffix_id = USERDEF_LITERAL_SUFFIX_ID (tok->u.value);
3431 	  have_suffix_p = 1;
3432 	  curr_type = cpp_userdef_string_remove_type (tok->type);
3433 	}
3434       else
3435 	curr_type = tok->type;
3436 
3437       strs = &str;
3438     }
3439   else
3440     {
3441       gcc_obstack_init (&str_ob);
3442       count = 0;
3443 
3444       do
3445 	{
3446 	  cp_lexer_consume_token (parser->lexer);
3447 	  count++;
3448 	  str.text = (const unsigned char *)TREE_STRING_POINTER (string_tree);
3449 	  str.len = TREE_STRING_LENGTH (string_tree);
3450 
3451 	  if (curr_tok_is_userdef_p)
3452 	    {
3453 	      tree curr_suffix_id = USERDEF_LITERAL_SUFFIX_ID (tok->u.value);
3454 	      if (have_suffix_p == 0)
3455 		{
3456 		  suffix_id = curr_suffix_id;
3457 		  have_suffix_p = 1;
3458 		}
3459 	      else if (have_suffix_p == 1
3460 		       && curr_suffix_id != suffix_id)
3461 		{
3462 		  error ("inconsistent user-defined literal suffixes"
3463 			 " %qD and %qD in string literal",
3464 			 suffix_id, curr_suffix_id);
3465 		  have_suffix_p = -1;
3466 		}
3467 	      curr_type = cpp_userdef_string_remove_type (tok->type);
3468 	    }
3469 	  else
3470 	    curr_type = tok->type;
3471 
3472 	  if (type != curr_type)
3473 	    {
3474 	      if (type == CPP_STRING)
3475 		type = curr_type;
3476 	      else if (curr_type != CPP_STRING)
3477 		error_at (tok->location,
3478 			  "unsupported non-standard concatenation "
3479 			  "of string literals");
3480 	    }
3481 
3482 	  obstack_grow (&str_ob, &str, sizeof (cpp_string));
3483 
3484 	  tok = cp_lexer_peek_token (parser->lexer);
3485 	  if (cpp_userdef_string_p (tok->type))
3486 	    {
3487 	      string_tree = USERDEF_LITERAL_VALUE (tok->u.value);
3488 	      curr_type = cpp_userdef_string_remove_type (tok->type);
3489 	      curr_tok_is_userdef_p = true;
3490 	    }
3491 	  else
3492 	    {
3493 	      string_tree = tok->u.value;
3494 	      curr_type = tok->type;
3495 	      curr_tok_is_userdef_p = false;
3496 	    }
3497 	}
3498       while (cp_parser_is_string_literal (tok));
3499 
3500       strs = (cpp_string *) obstack_finish (&str_ob);
3501     }
3502 
3503   if (type != CPP_STRING && !wide_ok)
3504     {
3505       cp_parser_error (parser, "a wide string is invalid in this context");
3506       type = CPP_STRING;
3507     }
3508 
3509   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
3510       (parse_in, strs, count, &istr, type))
3511     {
3512       value = build_string (istr.len, (const char *)istr.text);
3513       free (CONST_CAST (unsigned char *, istr.text));
3514 
3515       switch (type)
3516 	{
3517 	default:
3518 	case CPP_STRING:
3519 	case CPP_UTF8STRING:
3520 	  TREE_TYPE (value) = char_array_type_node;
3521 	  break;
3522 	case CPP_STRING16:
3523 	  TREE_TYPE (value) = char16_array_type_node;
3524 	  break;
3525 	case CPP_STRING32:
3526 	  TREE_TYPE (value) = char32_array_type_node;
3527 	  break;
3528 	case CPP_WSTRING:
3529 	  TREE_TYPE (value) = wchar_array_type_node;
3530 	  break;
3531 	}
3532 
3533       value = fix_string_type (value);
3534 
3535       if (have_suffix_p)
3536 	{
3537 	  tree literal = build_userdef_literal (suffix_id, value, NULL_TREE);
3538 	  tok->u.value = literal;
3539 	  return cp_parser_userdef_string_literal (tok);
3540 	}
3541     }
3542   else
3543     /* cpp_interpret_string has issued an error.  */
3544     value = error_mark_node;
3545 
3546   if (count > 1)
3547     obstack_free (&str_ob, 0);
3548 
3549   return value;
3550 }
3551 
3552 /* Look up a literal operator with the name and the exact arguments.  */
3553 
3554 static tree
3555 lookup_literal_operator (tree name, VEC(tree,gc) *args)
3556 {
3557   tree decl, fns;
3558   decl = lookup_name (name);
3559   if (!decl || !is_overloaded_fn (decl))
3560     return error_mark_node;
3561 
3562   for (fns = decl; fns; fns = OVL_NEXT (fns))
3563     {
3564       unsigned int ix;
3565       bool found = true;
3566       tree fn = OVL_CURRENT (fns);
3567       tree argtypes = NULL_TREE;
3568       argtypes = TYPE_ARG_TYPES (TREE_TYPE (fn));
3569       if (argtypes != NULL_TREE)
3570 	{
3571 	  for (ix = 0; ix < VEC_length (tree, args) && argtypes != NULL_TREE;
3572 	       ++ix, argtypes = TREE_CHAIN (argtypes))
3573 	    {
3574 	      tree targ = TREE_VALUE (argtypes);
3575 	      tree tparm = TREE_TYPE (VEC_index (tree, args, ix));
3576 	      bool ptr = TREE_CODE (targ) == POINTER_TYPE;
3577 	      bool arr = TREE_CODE (tparm) == ARRAY_TYPE;
3578 	      if ((ptr || arr || !same_type_p (targ, tparm))
3579 		  && (!ptr || !arr
3580 		      || !same_type_p (TREE_TYPE (targ),
3581 				       TREE_TYPE (tparm))))
3582 		found = false;
3583 	    }
3584 	  if (found
3585 	      && ix == VEC_length (tree, args)
3586 	      /* May be this should be sufficient_parms_p instead,
3587 		 depending on how exactly should user-defined literals
3588 		 work in presence of default arguments on the literal
3589 		 operator parameters.  */
3590 	      && argtypes == void_list_node)
3591 	    return fn;
3592 	}
3593     }
3594 
3595   return error_mark_node;
3596 }
3597 
3598 /* Parse a user-defined char constant.  Returns a call to a user-defined
3599    literal operator taking the character as an argument.  */
3600 
3601 static tree
3602 cp_parser_userdef_char_literal (cp_parser *parser)
3603 {
3604   cp_token *token = cp_lexer_consume_token (parser->lexer);
3605   tree literal = token->u.value;
3606   tree suffix_id = USERDEF_LITERAL_SUFFIX_ID (literal);
3607   tree value = USERDEF_LITERAL_VALUE (literal);
3608   tree name = cp_literal_operator_id (IDENTIFIER_POINTER (suffix_id));
3609   tree decl, result;
3610 
3611   /* Build up a call to the user-defined operator  */
3612   /* Lookup the name we got back from the id-expression.  */
3613   VEC(tree,gc) *args = make_tree_vector ();
3614   VEC_safe_push (tree, gc, args, value);
3615   decl = lookup_literal_operator (name, args);
3616   if (!decl || decl == error_mark_node)
3617     {
3618       error ("unable to find character literal operator %qD with %qT argument",
3619 	     name, TREE_TYPE (value));
3620       release_tree_vector (args);
3621       return error_mark_node;
3622     }
3623   result = finish_call_expr (decl, &args, false, true, tf_warning_or_error);
3624   release_tree_vector (args);
3625   if (result != error_mark_node)
3626     return result;
3627 
3628   error ("unable to find character literal operator %qD with %qT argument",
3629 	 name, TREE_TYPE (value));
3630   return error_mark_node;
3631 }
3632 
3633 /* A subroutine of cp_parser_userdef_numeric_literal to
3634    create a char... template parameter pack from a string node.  */
3635 
3636 static tree
3637 make_char_string_pack (tree value)
3638 {
3639   tree charvec;
3640   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
3641   const char *str = TREE_STRING_POINTER (value);
3642   int i, len = TREE_STRING_LENGTH (value) - 1;
3643   tree argvec = make_tree_vec (1);
3644 
3645   /* Fill in CHARVEC with all of the parameters.  */
3646   charvec = make_tree_vec (len);
3647   for (i = 0; i < len; ++i)
3648     TREE_VEC_ELT (charvec, i) = build_int_cst (char_type_node, str[i]);
3649 
3650   /* Build the argument packs.  */
3651   SET_ARGUMENT_PACK_ARGS (argpack, charvec);
3652   TREE_TYPE (argpack) = char_type_node;
3653 
3654   TREE_VEC_ELT (argvec, 0) = argpack;
3655 
3656   return argvec;
3657 }
3658 
3659 /* Parse a user-defined numeric constant.  returns a call to a user-defined
3660    literal operator.  */
3661 
3662 static tree
3663 cp_parser_userdef_numeric_literal (cp_parser *parser)
3664 {
3665   cp_token *token = cp_lexer_consume_token (parser->lexer);
3666   tree literal = token->u.value;
3667   tree suffix_id = USERDEF_LITERAL_SUFFIX_ID (literal);
3668   tree value = USERDEF_LITERAL_VALUE (literal);
3669   tree num_string = USERDEF_LITERAL_NUM_STRING (literal);
3670   tree name = cp_literal_operator_id (IDENTIFIER_POINTER (suffix_id));
3671   tree decl, result;
3672   VEC(tree,gc) *args;
3673 
3674   /* Look for a literal operator taking the exact type of numeric argument
3675      as the literal value.  */
3676   args = make_tree_vector ();
3677   VEC_safe_push (tree, gc, args, value);
3678   decl = lookup_literal_operator (name, args);
3679   if (decl && decl != error_mark_node)
3680     {
3681       result = finish_call_expr (decl, &args, false, true, tf_none);
3682       if (result != error_mark_node)
3683 	{
3684 	  release_tree_vector (args);
3685 	  return result;
3686 	}
3687     }
3688   release_tree_vector (args);
3689 
3690   /* If the numeric argument didn't work, look for a raw literal
3691      operator taking a const char* argument consisting of the number
3692      in string format.  */
3693   args = make_tree_vector ();
3694   VEC_safe_push (tree, gc, args, num_string);
3695   decl = lookup_literal_operator (name, args);
3696   if (decl && decl != error_mark_node)
3697     {
3698       result = finish_call_expr (decl, &args, false, true, tf_none);
3699       if (result != error_mark_node)
3700 	{
3701 	  release_tree_vector (args);
3702 	  return result;
3703 	}
3704     }
3705   release_tree_vector (args);
3706 
3707   /* If the raw literal didn't work, look for a non-type template
3708      function with parameter pack char....  Call the function with
3709      template parameter characters representing the number.  */
3710   args = make_tree_vector ();
3711   decl = lookup_literal_operator (name, args);
3712   if (decl && decl != error_mark_node)
3713     {
3714       tree tmpl_args = make_char_string_pack (num_string);
3715       decl = lookup_template_function (decl, tmpl_args);
3716       result = finish_call_expr (decl, &args, false, true, tf_none);
3717       if (result != error_mark_node)
3718 	{
3719 	  release_tree_vector (args);
3720 	  return result;
3721 	}
3722     }
3723   release_tree_vector (args);
3724 
3725   error ("unable to find numeric literal operator %qD", name);
3726   return error_mark_node;
3727 }
3728 
3729 /* Parse a user-defined string constant.  Returns a call to a user-defined
3730    literal operator taking a character pointer and the length of the string
3731    as arguments.  */
3732 
3733 static tree
3734 cp_parser_userdef_string_literal (cp_token *token)
3735 {
3736   tree literal = token->u.value;
3737   tree suffix_id = USERDEF_LITERAL_SUFFIX_ID (literal);
3738   tree name = cp_literal_operator_id (IDENTIFIER_POINTER (suffix_id));
3739   tree value = USERDEF_LITERAL_VALUE (literal);
3740   int len = TREE_STRING_LENGTH (value)
3741 	/ TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (value)))) - 1;
3742   tree decl, result;
3743 
3744   /* Build up a call to the user-defined operator  */
3745   /* Lookup the name we got back from the id-expression.  */
3746   VEC(tree,gc) *args = make_tree_vector ();
3747   VEC_safe_push (tree, gc, args, value);
3748   VEC_safe_push (tree, gc, args, build_int_cst (size_type_node, len));
3749   decl = lookup_name (name);
3750   if (!decl || decl == error_mark_node)
3751     {
3752       error ("unable to find string literal operator %qD", name);
3753       release_tree_vector (args);
3754       return error_mark_node;
3755     }
3756   result = finish_call_expr (decl, &args, false, true, tf_none);
3757   release_tree_vector (args);
3758   if (result != error_mark_node)
3759     return result;
3760 
3761   error ("unable to find string literal operator %qD with %qT, %qT arguments",
3762 	 name, TREE_TYPE (value), size_type_node);
3763   return error_mark_node;
3764 }
3765 
3766 
3767 /* Basic concepts [gram.basic]  */
3768 
3769 /* Parse a translation-unit.
3770 
3771    translation-unit:
3772      declaration-seq [opt]
3773 
3774    Returns TRUE if all went well.  */
3775 
3776 static bool
3777 cp_parser_translation_unit (cp_parser* parser)
3778 {
3779   /* The address of the first non-permanent object on the declarator
3780      obstack.  */
3781   static void *declarator_obstack_base;
3782 
3783   bool success;
3784 
3785   /* Create the declarator obstack, if necessary.  */
3786   if (!cp_error_declarator)
3787     {
3788       gcc_obstack_init (&declarator_obstack);
3789       /* Create the error declarator.  */
3790       cp_error_declarator = make_declarator (cdk_error);
3791       /* Create the empty parameter list.  */
3792       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
3793       /* Remember where the base of the declarator obstack lies.  */
3794       declarator_obstack_base = obstack_next_free (&declarator_obstack);
3795     }
3796 
3797   cp_parser_declaration_seq_opt (parser);
3798 
3799   /* If there are no tokens left then all went well.  */
3800   if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
3801     {
3802       /* Get rid of the token array; we don't need it any more.  */
3803       cp_lexer_destroy (parser->lexer);
3804       parser->lexer = NULL;
3805 
3806       /* This file might have been a context that's implicitly extern
3807 	 "C".  If so, pop the lang context.  (Only relevant for PCH.) */
3808       if (parser->implicit_extern_c)
3809 	{
3810 	  pop_lang_context ();
3811 	  parser->implicit_extern_c = false;
3812 	}
3813 
3814       /* Finish up.  */
3815       finish_translation_unit ();
3816 
3817       success = true;
3818     }
3819   else
3820     {
3821       cp_parser_error (parser, "expected declaration");
3822       success = false;
3823     }
3824 
3825   /* Make sure the declarator obstack was fully cleaned up.  */
3826   gcc_assert (obstack_next_free (&declarator_obstack)
3827 	      == declarator_obstack_base);
3828 
3829   /* All went well.  */
3830   return success;
3831 }
3832 
3833 /* Expressions [gram.expr] */
3834 
3835 /* Parse a primary-expression.
3836 
3837    primary-expression:
3838      literal
3839      this
3840      ( expression )
3841      id-expression
3842 
3843    GNU Extensions:
3844 
3845    primary-expression:
3846      ( compound-statement )
3847      __builtin_va_arg ( assignment-expression , type-id )
3848      __builtin_offsetof ( type-id , offsetof-expression )
3849 
3850    C++ Extensions:
3851      __has_nothrow_assign ( type-id )
3852      __has_nothrow_constructor ( type-id )
3853      __has_nothrow_copy ( type-id )
3854      __has_trivial_assign ( type-id )
3855      __has_trivial_constructor ( type-id )
3856      __has_trivial_copy ( type-id )
3857      __has_trivial_destructor ( type-id )
3858      __has_virtual_destructor ( type-id )
3859      __is_abstract ( type-id )
3860      __is_base_of ( type-id , type-id )
3861      __is_class ( type-id )
3862      __is_convertible_to ( type-id , type-id )
3863      __is_empty ( type-id )
3864      __is_enum ( type-id )
3865      __is_final ( type-id )
3866      __is_literal_type ( type-id )
3867      __is_pod ( type-id )
3868      __is_polymorphic ( type-id )
3869      __is_std_layout ( type-id )
3870      __is_trivial ( type-id )
3871      __is_union ( type-id )
3872 
3873    Objective-C++ Extension:
3874 
3875    primary-expression:
3876      objc-expression
3877 
3878    literal:
3879      __null
3880 
3881    ADDRESS_P is true iff this expression was immediately preceded by
3882    "&" and therefore might denote a pointer-to-member.  CAST_P is true
3883    iff this expression is the target of a cast.  TEMPLATE_ARG_P is
3884    true iff this expression is a template argument.
3885 
3886    Returns a representation of the expression.  Upon return, *IDK
3887    indicates what kind of id-expression (if any) was present.  */
3888 
3889 static tree
3890 cp_parser_primary_expression (cp_parser *parser,
3891 			      bool address_p,
3892 			      bool cast_p,
3893 			      bool template_arg_p,
3894 			      cp_id_kind *idk)
3895 {
3896   cp_token *token = NULL;
3897 
3898   /* Assume the primary expression is not an id-expression.  */
3899   *idk = CP_ID_KIND_NONE;
3900 
3901   /* Peek at the next token.  */
3902   token = cp_lexer_peek_token (parser->lexer);
3903   switch (token->type)
3904     {
3905       /* literal:
3906 	   integer-literal
3907 	   character-literal
3908 	   floating-literal
3909 	   string-literal
3910 	   boolean-literal
3911 	   pointer-literal
3912 	   user-defined-literal  */
3913     case CPP_CHAR:
3914     case CPP_CHAR16:
3915     case CPP_CHAR32:
3916     case CPP_WCHAR:
3917     case CPP_NUMBER:
3918       if (TREE_CODE (token->u.value) == USERDEF_LITERAL)
3919 	return cp_parser_userdef_numeric_literal (parser);
3920       token = cp_lexer_consume_token (parser->lexer);
3921       if (TREE_CODE (token->u.value) == FIXED_CST)
3922 	{
3923 	  error_at (token->location,
3924 		    "fixed-point types not supported in C++");
3925 	  return error_mark_node;
3926 	}
3927       /* Floating-point literals are only allowed in an integral
3928 	 constant expression if they are cast to an integral or
3929 	 enumeration type.  */
3930       if (TREE_CODE (token->u.value) == REAL_CST
3931 	  && parser->integral_constant_expression_p
3932 	  && pedantic)
3933 	{
3934 	  /* CAST_P will be set even in invalid code like "int(2.7 +
3935 	     ...)".   Therefore, we have to check that the next token
3936 	     is sure to end the cast.  */
3937 	  if (cast_p)
3938 	    {
3939 	      cp_token *next_token;
3940 
3941 	      next_token = cp_lexer_peek_token (parser->lexer);
3942 	      if (/* The comma at the end of an
3943 		     enumerator-definition.  */
3944 		  next_token->type != CPP_COMMA
3945 		  /* The curly brace at the end of an enum-specifier.  */
3946 		  && next_token->type != CPP_CLOSE_BRACE
3947 		  /* The end of a statement.  */
3948 		  && next_token->type != CPP_SEMICOLON
3949 		  /* The end of the cast-expression.  */
3950 		  && next_token->type != CPP_CLOSE_PAREN
3951 		  /* The end of an array bound.  */
3952 		  && next_token->type != CPP_CLOSE_SQUARE
3953 		  /* The closing ">" in a template-argument-list.  */
3954 		  && (next_token->type != CPP_GREATER
3955 		      || parser->greater_than_is_operator_p)
3956 		  /* C++0x only: A ">>" treated like two ">" tokens,
3957                      in a template-argument-list.  */
3958 		  && (next_token->type != CPP_RSHIFT
3959                       || (cxx_dialect == cxx98)
3960 		      || parser->greater_than_is_operator_p))
3961 		cast_p = false;
3962 	    }
3963 
3964 	  /* If we are within a cast, then the constraint that the
3965 	     cast is to an integral or enumeration type will be
3966 	     checked at that point.  If we are not within a cast, then
3967 	     this code is invalid.  */
3968 	  if (!cast_p)
3969 	    cp_parser_non_integral_constant_expression (parser, NIC_FLOAT);
3970 	}
3971       return token->u.value;
3972 
3973     case CPP_CHAR_USERDEF:
3974     case CPP_CHAR16_USERDEF:
3975     case CPP_CHAR32_USERDEF:
3976     case CPP_WCHAR_USERDEF:
3977       return cp_parser_userdef_char_literal (parser);
3978 
3979     case CPP_STRING:
3980     case CPP_STRING16:
3981     case CPP_STRING32:
3982     case CPP_WSTRING:
3983     case CPP_UTF8STRING:
3984     case CPP_STRING_USERDEF:
3985     case CPP_STRING16_USERDEF:
3986     case CPP_STRING32_USERDEF:
3987     case CPP_WSTRING_USERDEF:
3988     case CPP_UTF8STRING_USERDEF:
3989       /* ??? Should wide strings be allowed when parser->translate_strings_p
3990 	 is false (i.e. in attributes)?  If not, we can kill the third
3991 	 argument to cp_parser_string_literal.  */
3992       return cp_parser_string_literal (parser,
3993 				       parser->translate_strings_p,
3994 				       true);
3995 
3996     case CPP_OPEN_PAREN:
3997       {
3998 	tree expr;
3999 	bool saved_greater_than_is_operator_p;
4000 
4001 	/* Consume the `('.  */
4002 	cp_lexer_consume_token (parser->lexer);
4003 	/* Within a parenthesized expression, a `>' token is always
4004 	   the greater-than operator.  */
4005 	saved_greater_than_is_operator_p
4006 	  = parser->greater_than_is_operator_p;
4007 	parser->greater_than_is_operator_p = true;
4008 	/* If we see `( { ' then we are looking at the beginning of
4009 	   a GNU statement-expression.  */
4010 	if (cp_parser_allow_gnu_extensions_p (parser)
4011 	    && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
4012 	  {
4013 	    /* Statement-expressions are not allowed by the standard.  */
4014 	    pedwarn (token->location, OPT_pedantic,
4015 		     "ISO C++ forbids braced-groups within expressions");
4016 
4017 	    /* And they're not allowed outside of a function-body; you
4018 	       cannot, for example, write:
4019 
4020 		 int i = ({ int j = 3; j + 1; });
4021 
4022 	       at class or namespace scope.  */
4023 	    if (!parser->in_function_body
4024 		|| parser->in_template_argument_list_p)
4025 	      {
4026 		error_at (token->location,
4027 			  "statement-expressions are not allowed outside "
4028 			  "functions nor in template-argument lists");
4029 		cp_parser_skip_to_end_of_block_or_statement (parser);
4030 		expr = error_mark_node;
4031 	      }
4032 	    else
4033 	      {
4034 		/* Start the statement-expression.  */
4035 		expr = begin_stmt_expr ();
4036 		/* Parse the compound-statement.  */
4037 		cp_parser_compound_statement (parser, expr, false, false);
4038 		/* Finish up.  */
4039 		expr = finish_stmt_expr (expr, false);
4040 	      }
4041 	  }
4042 	else
4043 	  {
4044 	    /* Parse the parenthesized expression.  */
4045 	    expr = cp_parser_expression (parser, cast_p, idk);
4046 	    /* Let the front end know that this expression was
4047 	       enclosed in parentheses. This matters in case, for
4048 	       example, the expression is of the form `A::B', since
4049 	       `&A::B' might be a pointer-to-member, but `&(A::B)' is
4050 	       not.  */
4051 	    finish_parenthesized_expr (expr);
4052 	    /* DR 705: Wrapping an unqualified name in parentheses
4053 	       suppresses arg-dependent lookup.  We want to pass back
4054 	       CP_ID_KIND_QUALIFIED for suppressing vtable lookup
4055 	       (c++/37862), but none of the others.  */
4056 	    if (*idk != CP_ID_KIND_QUALIFIED)
4057 	      *idk = CP_ID_KIND_NONE;
4058 	  }
4059 	/* The `>' token might be the end of a template-id or
4060 	   template-parameter-list now.  */
4061 	parser->greater_than_is_operator_p
4062 	  = saved_greater_than_is_operator_p;
4063 	/* Consume the `)'.  */
4064 	if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
4065 	  cp_parser_skip_to_end_of_statement (parser);
4066 
4067 	return expr;
4068       }
4069 
4070     case CPP_OPEN_SQUARE:
4071       if (c_dialect_objc ())
4072         /* We have an Objective-C++ message. */
4073         return cp_parser_objc_expression (parser);
4074       {
4075 	tree lam = cp_parser_lambda_expression (parser);
4076 	/* Don't warn about a failed tentative parse.  */
4077 	if (cp_parser_error_occurred (parser))
4078 	  return error_mark_node;
4079 	maybe_warn_cpp0x (CPP0X_LAMBDA_EXPR);
4080 	return lam;
4081       }
4082 
4083     case CPP_OBJC_STRING:
4084       if (c_dialect_objc ())
4085 	/* We have an Objective-C++ string literal. */
4086         return cp_parser_objc_expression (parser);
4087       cp_parser_error (parser, "expected primary-expression");
4088       return error_mark_node;
4089 
4090     case CPP_KEYWORD:
4091       switch (token->keyword)
4092 	{
4093 	  /* These two are the boolean literals.  */
4094 	case RID_TRUE:
4095 	  cp_lexer_consume_token (parser->lexer);
4096 	  return boolean_true_node;
4097 	case RID_FALSE:
4098 	  cp_lexer_consume_token (parser->lexer);
4099 	  return boolean_false_node;
4100 
4101 	  /* The `__null' literal.  */
4102 	case RID_NULL:
4103 	  cp_lexer_consume_token (parser->lexer);
4104 	  return null_node;
4105 
4106 	  /* The `nullptr' literal.  */
4107 	case RID_NULLPTR:
4108 	  cp_lexer_consume_token (parser->lexer);
4109 	  return nullptr_node;
4110 
4111 	  /* Recognize the `this' keyword.  */
4112 	case RID_THIS:
4113 	  cp_lexer_consume_token (parser->lexer);
4114 	  if (parser->local_variables_forbidden_p)
4115 	    {
4116 	      error_at (token->location,
4117 			"%<this%> may not be used in this context");
4118 	      return error_mark_node;
4119 	    }
4120 	  /* Pointers cannot appear in constant-expressions.  */
4121 	  if (cp_parser_non_integral_constant_expression (parser, NIC_THIS))
4122 	    return error_mark_node;
4123 	  return finish_this_expr ();
4124 
4125 	  /* The `operator' keyword can be the beginning of an
4126 	     id-expression.  */
4127 	case RID_OPERATOR:
4128 	  goto id_expression;
4129 
4130 	case RID_FUNCTION_NAME:
4131 	case RID_PRETTY_FUNCTION_NAME:
4132 	case RID_C99_FUNCTION_NAME:
4133 	  {
4134 	    non_integral_constant name;
4135 
4136 	    /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
4137 	       __func__ are the names of variables -- but they are
4138 	       treated specially.  Therefore, they are handled here,
4139 	       rather than relying on the generic id-expression logic
4140 	       below.  Grammatically, these names are id-expressions.
4141 
4142 	       Consume the token.  */
4143 	    token = cp_lexer_consume_token (parser->lexer);
4144 
4145 	    switch (token->keyword)
4146 	      {
4147 	      case RID_FUNCTION_NAME:
4148 		name = NIC_FUNC_NAME;
4149 		break;
4150 	      case RID_PRETTY_FUNCTION_NAME:
4151 		name = NIC_PRETTY_FUNC;
4152 		break;
4153 	      case RID_C99_FUNCTION_NAME:
4154 		name = NIC_C99_FUNC;
4155 		break;
4156 	      default:
4157 		gcc_unreachable ();
4158 	      }
4159 
4160 	    if (cp_parser_non_integral_constant_expression (parser, name))
4161 	      return error_mark_node;
4162 
4163 	    /* Look up the name.  */
4164 	    return finish_fname (token->u.value);
4165 	  }
4166 
4167 	case RID_VA_ARG:
4168 	  {
4169 	    tree expression;
4170 	    tree type;
4171 
4172 	    /* The `__builtin_va_arg' construct is used to handle
4173 	       `va_arg'.  Consume the `__builtin_va_arg' token.  */
4174 	    cp_lexer_consume_token (parser->lexer);
4175 	    /* Look for the opening `('.  */
4176 	    cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
4177 	    /* Now, parse the assignment-expression.  */
4178 	    expression = cp_parser_assignment_expression (parser,
4179 							  /*cast_p=*/false, NULL);
4180 	    /* Look for the `,'.  */
4181 	    cp_parser_require (parser, CPP_COMMA, RT_COMMA);
4182 	    /* Parse the type-id.  */
4183 	    type = cp_parser_type_id (parser);
4184 	    /* Look for the closing `)'.  */
4185 	    cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
4186 	    /* Using `va_arg' in a constant-expression is not
4187 	       allowed.  */
4188 	    if (cp_parser_non_integral_constant_expression (parser,
4189 							    NIC_VA_ARG))
4190 	      return error_mark_node;
4191 	    return build_x_va_arg (expression, type);
4192 	  }
4193 
4194 	case RID_OFFSETOF:
4195 	  return cp_parser_builtin_offsetof (parser);
4196 
4197 	case RID_HAS_NOTHROW_ASSIGN:
4198 	case RID_HAS_NOTHROW_CONSTRUCTOR:
4199 	case RID_HAS_NOTHROW_COPY:
4200 	case RID_HAS_TRIVIAL_ASSIGN:
4201 	case RID_HAS_TRIVIAL_CONSTRUCTOR:
4202 	case RID_HAS_TRIVIAL_COPY:
4203 	case RID_HAS_TRIVIAL_DESTRUCTOR:
4204 	case RID_HAS_VIRTUAL_DESTRUCTOR:
4205 	case RID_IS_ABSTRACT:
4206 	case RID_IS_BASE_OF:
4207 	case RID_IS_CLASS:
4208 	case RID_IS_CONVERTIBLE_TO:
4209 	case RID_IS_EMPTY:
4210 	case RID_IS_ENUM:
4211 	case RID_IS_FINAL:
4212 	case RID_IS_LITERAL_TYPE:
4213 	case RID_IS_POD:
4214 	case RID_IS_POLYMORPHIC:
4215 	case RID_IS_STD_LAYOUT:
4216 	case RID_IS_TRIVIAL:
4217 	case RID_IS_UNION:
4218 	  return cp_parser_trait_expr (parser, token->keyword);
4219 
4220 	/* Objective-C++ expressions.  */
4221 	case RID_AT_ENCODE:
4222 	case RID_AT_PROTOCOL:
4223 	case RID_AT_SELECTOR:
4224 	  return cp_parser_objc_expression (parser);
4225 
4226 	case RID_TEMPLATE:
4227 	  if (parser->in_function_body
4228 	      && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4229 	      	  == CPP_LESS))
4230 	    {
4231 	      error_at (token->location,
4232 			"a template declaration cannot appear at block scope");
4233 	      cp_parser_skip_to_end_of_block_or_statement (parser);
4234 	      return error_mark_node;
4235 	    }
4236 	default:
4237 	  cp_parser_error (parser, "expected primary-expression");
4238 	  return error_mark_node;
4239 	}
4240 
4241       /* An id-expression can start with either an identifier, a
4242 	 `::' as the beginning of a qualified-id, or the "operator"
4243 	 keyword.  */
4244     case CPP_NAME:
4245     case CPP_SCOPE:
4246     case CPP_TEMPLATE_ID:
4247     case CPP_NESTED_NAME_SPECIFIER:
4248       {
4249 	tree id_expression;
4250 	tree decl;
4251 	const char *error_msg;
4252 	bool template_p;
4253 	bool done;
4254 	cp_token *id_expr_token;
4255 
4256       id_expression:
4257 	/* Parse the id-expression.  */
4258 	id_expression
4259 	  = cp_parser_id_expression (parser,
4260 				     /*template_keyword_p=*/false,
4261 				     /*check_dependency_p=*/true,
4262 				     &template_p,
4263 				     /*declarator_p=*/false,
4264 				     /*optional_p=*/false);
4265 	if (id_expression == error_mark_node)
4266 	  return error_mark_node;
4267 	id_expr_token = token;
4268 	token = cp_lexer_peek_token (parser->lexer);
4269 	done = (token->type != CPP_OPEN_SQUARE
4270 		&& token->type != CPP_OPEN_PAREN
4271 		&& token->type != CPP_DOT
4272 		&& token->type != CPP_DEREF
4273 		&& token->type != CPP_PLUS_PLUS
4274 		&& token->type != CPP_MINUS_MINUS);
4275 	/* If we have a template-id, then no further lookup is
4276 	   required.  If the template-id was for a template-class, we
4277 	   will sometimes have a TYPE_DECL at this point.  */
4278 	if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
4279 		 || TREE_CODE (id_expression) == TYPE_DECL)
4280 	  decl = id_expression;
4281 	/* Look up the name.  */
4282 	else
4283 	  {
4284 	    tree ambiguous_decls;
4285 
4286 	    /* If we already know that this lookup is ambiguous, then
4287 	       we've already issued an error message; there's no reason
4288 	       to check again.  */
4289 	    if (id_expr_token->type == CPP_NAME
4290 		&& id_expr_token->ambiguous_p)
4291 	      {
4292 		cp_parser_simulate_error (parser);
4293 		return error_mark_node;
4294 	      }
4295 
4296 	    decl = cp_parser_lookup_name (parser, id_expression,
4297 					  none_type,
4298 					  template_p,
4299 					  /*is_namespace=*/false,
4300 					  /*check_dependency=*/true,
4301 					  &ambiguous_decls,
4302 					  id_expr_token->location);
4303 	    /* If the lookup was ambiguous, an error will already have
4304 	       been issued.  */
4305 	    if (ambiguous_decls)
4306 	      return error_mark_node;
4307 
4308 	    /* In Objective-C++, we may have an Objective-C 2.0
4309 	       dot-syntax for classes here.  */
4310 	    if (c_dialect_objc ()
4311 		&& cp_lexer_peek_token (parser->lexer)->type == CPP_DOT
4312 		&& TREE_CODE (decl) == TYPE_DECL
4313 		&& objc_is_class_name (decl))
4314 	      {
4315 		tree component;
4316 		cp_lexer_consume_token (parser->lexer);
4317 		component = cp_parser_identifier (parser);
4318 		if (component == error_mark_node)
4319 		  return error_mark_node;
4320 
4321 		return objc_build_class_component_ref (id_expression, component);
4322 	      }
4323 
4324 	    /* In Objective-C++, an instance variable (ivar) may be preferred
4325 	       to whatever cp_parser_lookup_name() found.  */
4326 	    decl = objc_lookup_ivar (decl, id_expression);
4327 
4328 	    /* If name lookup gives us a SCOPE_REF, then the
4329 	       qualifying scope was dependent.  */
4330 	    if (TREE_CODE (decl) == SCOPE_REF)
4331 	      {
4332 		/* At this point, we do not know if DECL is a valid
4333 		   integral constant expression.  We assume that it is
4334 		   in fact such an expression, so that code like:
4335 
4336 		      template <int N> struct A {
4337 			int a[B<N>::i];
4338 		      };
4339 
4340 		   is accepted.  At template-instantiation time, we
4341 		   will check that B<N>::i is actually a constant.  */
4342 		return decl;
4343 	      }
4344 	    /* Check to see if DECL is a local variable in a context
4345 	       where that is forbidden.  */
4346 	    if (parser->local_variables_forbidden_p
4347 		&& local_variable_p (decl))
4348 	      {
4349 		/* It might be that we only found DECL because we are
4350 		   trying to be generous with pre-ISO scoping rules.
4351 		   For example, consider:
4352 
4353 		     int i;
4354 		     void g() {
4355 		       for (int i = 0; i < 10; ++i) {}
4356 		       extern void f(int j = i);
4357 		     }
4358 
4359 		   Here, name look up will originally find the out
4360 		   of scope `i'.  We need to issue a warning message,
4361 		   but then use the global `i'.  */
4362 		decl = check_for_out_of_scope_variable (decl);
4363 		if (local_variable_p (decl))
4364 		  {
4365 		    error_at (id_expr_token->location,
4366 			      "local variable %qD may not appear in this context",
4367 			      decl);
4368 		    return error_mark_node;
4369 		  }
4370 	      }
4371 	  }
4372 
4373 	decl = (finish_id_expression
4374 		(id_expression, decl, parser->scope,
4375 		 idk,
4376 		 parser->integral_constant_expression_p,
4377 		 parser->allow_non_integral_constant_expression_p,
4378 		 &parser->non_integral_constant_expression_p,
4379 		 template_p, done, address_p,
4380 		 template_arg_p,
4381 		 &error_msg,
4382                  id_expr_token->location));
4383 	if (error_msg)
4384 	  cp_parser_error (parser, error_msg);
4385 	return decl;
4386       }
4387 
4388       /* Anything else is an error.  */
4389     default:
4390       cp_parser_error (parser, "expected primary-expression");
4391       return error_mark_node;
4392     }
4393 }
4394 
4395 /* Parse an id-expression.
4396 
4397    id-expression:
4398      unqualified-id
4399      qualified-id
4400 
4401    qualified-id:
4402      :: [opt] nested-name-specifier template [opt] unqualified-id
4403      :: identifier
4404      :: operator-function-id
4405      :: template-id
4406 
4407    Return a representation of the unqualified portion of the
4408    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
4409    a `::' or nested-name-specifier.
4410 
4411    Often, if the id-expression was a qualified-id, the caller will
4412    want to make a SCOPE_REF to represent the qualified-id.  This
4413    function does not do this in order to avoid wastefully creating
4414    SCOPE_REFs when they are not required.
4415 
4416    If TEMPLATE_KEYWORD_P is true, then we have just seen the
4417    `template' keyword.
4418 
4419    If CHECK_DEPENDENCY_P is false, then names are looked up inside
4420    uninstantiated templates.
4421 
4422    If *TEMPLATE_P is non-NULL, it is set to true iff the
4423    `template' keyword is used to explicitly indicate that the entity
4424    named is a template.
4425 
4426    If DECLARATOR_P is true, the id-expression is appearing as part of
4427    a declarator, rather than as part of an expression.  */
4428 
4429 static tree
4430 cp_parser_id_expression (cp_parser *parser,
4431 			 bool template_keyword_p,
4432 			 bool check_dependency_p,
4433 			 bool *template_p,
4434 			 bool declarator_p,
4435 			 bool optional_p)
4436 {
4437   bool global_scope_p;
4438   bool nested_name_specifier_p;
4439 
4440   /* Assume the `template' keyword was not used.  */
4441   if (template_p)
4442     *template_p = template_keyword_p;
4443 
4444   /* Look for the optional `::' operator.  */
4445   global_scope_p
4446     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
4447        != NULL_TREE);
4448   /* Look for the optional nested-name-specifier.  */
4449   nested_name_specifier_p
4450     = (cp_parser_nested_name_specifier_opt (parser,
4451 					    /*typename_keyword_p=*/false,
4452 					    check_dependency_p,
4453 					    /*type_p=*/false,
4454 					    declarator_p)
4455        != NULL_TREE);
4456   /* If there is a nested-name-specifier, then we are looking at
4457      the first qualified-id production.  */
4458   if (nested_name_specifier_p)
4459     {
4460       tree saved_scope;
4461       tree saved_object_scope;
4462       tree saved_qualifying_scope;
4463       tree unqualified_id;
4464       bool is_template;
4465 
4466       /* See if the next token is the `template' keyword.  */
4467       if (!template_p)
4468 	template_p = &is_template;
4469       *template_p = cp_parser_optional_template_keyword (parser);
4470       /* Name lookup we do during the processing of the
4471 	 unqualified-id might obliterate SCOPE.  */
4472       saved_scope = parser->scope;
4473       saved_object_scope = parser->object_scope;
4474       saved_qualifying_scope = parser->qualifying_scope;
4475       /* Process the final unqualified-id.  */
4476       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
4477 						 check_dependency_p,
4478 						 declarator_p,
4479 						 /*optional_p=*/false);
4480       /* Restore the SAVED_SCOPE for our caller.  */
4481       parser->scope = saved_scope;
4482       parser->object_scope = saved_object_scope;
4483       parser->qualifying_scope = saved_qualifying_scope;
4484 
4485       return unqualified_id;
4486     }
4487   /* Otherwise, if we are in global scope, then we are looking at one
4488      of the other qualified-id productions.  */
4489   else if (global_scope_p)
4490     {
4491       cp_token *token;
4492       tree id;
4493 
4494       /* Peek at the next token.  */
4495       token = cp_lexer_peek_token (parser->lexer);
4496 
4497       /* If it's an identifier, and the next token is not a "<", then
4498 	 we can avoid the template-id case.  This is an optimization
4499 	 for this common case.  */
4500       if (token->type == CPP_NAME
4501 	  && !cp_parser_nth_token_starts_template_argument_list_p
4502 	       (parser, 2))
4503 	return cp_parser_identifier (parser);
4504 
4505       cp_parser_parse_tentatively (parser);
4506       /* Try a template-id.  */
4507       id = cp_parser_template_id (parser,
4508 				  /*template_keyword_p=*/false,
4509 				  /*check_dependency_p=*/true,
4510 				  declarator_p);
4511       /* If that worked, we're done.  */
4512       if (cp_parser_parse_definitely (parser))
4513 	return id;
4514 
4515       /* Peek at the next token.  (Changes in the token buffer may
4516 	 have invalidated the pointer obtained above.)  */
4517       token = cp_lexer_peek_token (parser->lexer);
4518 
4519       switch (token->type)
4520 	{
4521 	case CPP_NAME:
4522 	  return cp_parser_identifier (parser);
4523 
4524 	case CPP_KEYWORD:
4525 	  if (token->keyword == RID_OPERATOR)
4526 	    return cp_parser_operator_function_id (parser);
4527 	  /* Fall through.  */
4528 
4529 	default:
4530 	  cp_parser_error (parser, "expected id-expression");
4531 	  return error_mark_node;
4532 	}
4533     }
4534   else
4535     return cp_parser_unqualified_id (parser, template_keyword_p,
4536 				     /*check_dependency_p=*/true,
4537 				     declarator_p,
4538 				     optional_p);
4539 }
4540 
4541 /* Parse an unqualified-id.
4542 
4543    unqualified-id:
4544      identifier
4545      operator-function-id
4546      conversion-function-id
4547      ~ class-name
4548      template-id
4549 
4550    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
4551    keyword, in a construct like `A::template ...'.
4552 
4553    Returns a representation of unqualified-id.  For the `identifier'
4554    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
4555    production a BIT_NOT_EXPR is returned; the operand of the
4556    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
4557    other productions, see the documentation accompanying the
4558    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
4559    names are looked up in uninstantiated templates.  If DECLARATOR_P
4560    is true, the unqualified-id is appearing as part of a declarator,
4561    rather than as part of an expression.  */
4562 
4563 static tree
4564 cp_parser_unqualified_id (cp_parser* parser,
4565 			  bool template_keyword_p,
4566 			  bool check_dependency_p,
4567 			  bool declarator_p,
4568 			  bool optional_p)
4569 {
4570   cp_token *token;
4571 
4572   /* Peek at the next token.  */
4573   token = cp_lexer_peek_token (parser->lexer);
4574 
4575   switch (token->type)
4576     {
4577     case CPP_NAME:
4578       {
4579 	tree id;
4580 
4581 	/* We don't know yet whether or not this will be a
4582 	   template-id.  */
4583 	cp_parser_parse_tentatively (parser);
4584 	/* Try a template-id.  */
4585 	id = cp_parser_template_id (parser, template_keyword_p,
4586 				    check_dependency_p,
4587 				    declarator_p);
4588 	/* If it worked, we're done.  */
4589 	if (cp_parser_parse_definitely (parser))
4590 	  return id;
4591 	/* Otherwise, it's an ordinary identifier.  */
4592 	return cp_parser_identifier (parser);
4593       }
4594 
4595     case CPP_TEMPLATE_ID:
4596       return cp_parser_template_id (parser, template_keyword_p,
4597 				    check_dependency_p,
4598 				    declarator_p);
4599 
4600     case CPP_COMPL:
4601       {
4602 	tree type_decl;
4603 	tree qualifying_scope;
4604 	tree object_scope;
4605 	tree scope;
4606 	bool done;
4607 
4608 	/* Consume the `~' token.  */
4609 	cp_lexer_consume_token (parser->lexer);
4610 	/* Parse the class-name.  The standard, as written, seems to
4611 	   say that:
4612 
4613 	     template <typename T> struct S { ~S (); };
4614 	     template <typename T> S<T>::~S() {}
4615 
4616 	   is invalid, since `~' must be followed by a class-name, but
4617 	   `S<T>' is dependent, and so not known to be a class.
4618 	   That's not right; we need to look in uninstantiated
4619 	   templates.  A further complication arises from:
4620 
4621 	     template <typename T> void f(T t) {
4622 	       t.T::~T();
4623 	     }
4624 
4625 	   Here, it is not possible to look up `T' in the scope of `T'
4626 	   itself.  We must look in both the current scope, and the
4627 	   scope of the containing complete expression.
4628 
4629 	   Yet another issue is:
4630 
4631 	     struct S {
4632 	       int S;
4633 	       ~S();
4634 	     };
4635 
4636 	     S::~S() {}
4637 
4638 	   The standard does not seem to say that the `S' in `~S'
4639 	   should refer to the type `S' and not the data member
4640 	   `S::S'.  */
4641 
4642 	/* DR 244 says that we look up the name after the "~" in the
4643 	   same scope as we looked up the qualifying name.  That idea
4644 	   isn't fully worked out; it's more complicated than that.  */
4645 	scope = parser->scope;
4646 	object_scope = parser->object_scope;
4647 	qualifying_scope = parser->qualifying_scope;
4648 
4649 	/* Check for invalid scopes.  */
4650 	if (scope == error_mark_node)
4651 	  {
4652 	    if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
4653 	      cp_lexer_consume_token (parser->lexer);
4654 	    return error_mark_node;
4655 	  }
4656 	if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
4657 	  {
4658 	    if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
4659 	      error_at (token->location,
4660 			"scope %qT before %<~%> is not a class-name",
4661 			scope);
4662 	    cp_parser_simulate_error (parser);
4663 	    if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
4664 	      cp_lexer_consume_token (parser->lexer);
4665 	    return error_mark_node;
4666 	  }
4667 	gcc_assert (!scope || TYPE_P (scope));
4668 
4669 	/* If the name is of the form "X::~X" it's OK even if X is a
4670 	   typedef.  */
4671 	token = cp_lexer_peek_token (parser->lexer);
4672 	if (scope
4673 	    && token->type == CPP_NAME
4674 	    && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4675 		!= CPP_LESS)
4676 	    && (token->u.value == TYPE_IDENTIFIER (scope)
4677 		|| (CLASS_TYPE_P (scope)
4678 		    && constructor_name_p (token->u.value, scope))))
4679 	  {
4680 	    cp_lexer_consume_token (parser->lexer);
4681 	    return build_nt (BIT_NOT_EXPR, scope);
4682 	  }
4683 
4684 	/* If there was an explicit qualification (S::~T), first look
4685 	   in the scope given by the qualification (i.e., S).
4686 
4687 	   Note: in the calls to cp_parser_class_name below we pass
4688 	   typename_type so that lookup finds the injected-class-name
4689 	   rather than the constructor.  */
4690 	done = false;
4691 	type_decl = NULL_TREE;
4692 	if (scope)
4693 	  {
4694 	    cp_parser_parse_tentatively (parser);
4695 	    type_decl = cp_parser_class_name (parser,
4696 					      /*typename_keyword_p=*/false,
4697 					      /*template_keyword_p=*/false,
4698 					      typename_type,
4699 					      /*check_dependency=*/false,
4700 					      /*class_head_p=*/false,
4701 					      declarator_p);
4702 	    if (cp_parser_parse_definitely (parser))
4703 	      done = true;
4704 	  }
4705 	/* In "N::S::~S", look in "N" as well.  */
4706 	if (!done && scope && qualifying_scope)
4707 	  {
4708 	    cp_parser_parse_tentatively (parser);
4709 	    parser->scope = qualifying_scope;
4710 	    parser->object_scope = NULL_TREE;
4711 	    parser->qualifying_scope = NULL_TREE;
4712 	    type_decl
4713 	      = cp_parser_class_name (parser,
4714 				      /*typename_keyword_p=*/false,
4715 				      /*template_keyword_p=*/false,
4716 				      typename_type,
4717 				      /*check_dependency=*/false,
4718 				      /*class_head_p=*/false,
4719 				      declarator_p);
4720 	    if (cp_parser_parse_definitely (parser))
4721 	      done = true;
4722 	  }
4723 	/* In "p->S::~T", look in the scope given by "*p" as well.  */
4724 	else if (!done && object_scope)
4725 	  {
4726 	    cp_parser_parse_tentatively (parser);
4727 	    parser->scope = object_scope;
4728 	    parser->object_scope = NULL_TREE;
4729 	    parser->qualifying_scope = NULL_TREE;
4730 	    type_decl
4731 	      = cp_parser_class_name (parser,
4732 				      /*typename_keyword_p=*/false,
4733 				      /*template_keyword_p=*/false,
4734 				      typename_type,
4735 				      /*check_dependency=*/false,
4736 				      /*class_head_p=*/false,
4737 				      declarator_p);
4738 	    if (cp_parser_parse_definitely (parser))
4739 	      done = true;
4740 	  }
4741 	/* Look in the surrounding context.  */
4742 	if (!done)
4743 	  {
4744 	    parser->scope = NULL_TREE;
4745 	    parser->object_scope = NULL_TREE;
4746 	    parser->qualifying_scope = NULL_TREE;
4747 	    if (processing_template_decl)
4748 	      cp_parser_parse_tentatively (parser);
4749 	    type_decl
4750 	      = cp_parser_class_name (parser,
4751 				      /*typename_keyword_p=*/false,
4752 				      /*template_keyword_p=*/false,
4753 				      typename_type,
4754 				      /*check_dependency=*/false,
4755 				      /*class_head_p=*/false,
4756 				      declarator_p);
4757 	    if (processing_template_decl
4758 		&& ! cp_parser_parse_definitely (parser))
4759 	      {
4760 		/* We couldn't find a type with this name, so just accept
4761 		   it and check for a match at instantiation time.  */
4762 		type_decl = cp_parser_identifier (parser);
4763 		if (type_decl != error_mark_node)
4764 		  type_decl = build_nt (BIT_NOT_EXPR, type_decl);
4765 		return type_decl;
4766 	      }
4767 	  }
4768 	/* If an error occurred, assume that the name of the
4769 	   destructor is the same as the name of the qualifying
4770 	   class.  That allows us to keep parsing after running
4771 	   into ill-formed destructor names.  */
4772 	if (type_decl == error_mark_node && scope)
4773 	  return build_nt (BIT_NOT_EXPR, scope);
4774 	else if (type_decl == error_mark_node)
4775 	  return error_mark_node;
4776 
4777 	/* Check that destructor name and scope match.  */
4778 	if (declarator_p && scope && !check_dtor_name (scope, type_decl))
4779 	  {
4780 	    if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
4781 	      error_at (token->location,
4782 			"declaration of %<~%T%> as member of %qT",
4783 			type_decl, scope);
4784 	    cp_parser_simulate_error (parser);
4785 	    return error_mark_node;
4786 	  }
4787 
4788 	/* [class.dtor]
4789 
4790 	   A typedef-name that names a class shall not be used as the
4791 	   identifier in the declarator for a destructor declaration.  */
4792 	if (declarator_p
4793 	    && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
4794 	    && !DECL_SELF_REFERENCE_P (type_decl)
4795 	    && !cp_parser_uncommitted_to_tentative_parse_p (parser))
4796 	  error_at (token->location,
4797 		    "typedef-name %qD used as destructor declarator",
4798 		    type_decl);
4799 
4800 	return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
4801       }
4802 
4803     case CPP_KEYWORD:
4804       if (token->keyword == RID_OPERATOR)
4805 	{
4806 	  tree id;
4807 
4808 	  /* This could be a template-id, so we try that first.  */
4809 	  cp_parser_parse_tentatively (parser);
4810 	  /* Try a template-id.  */
4811 	  id = cp_parser_template_id (parser, template_keyword_p,
4812 				      /*check_dependency_p=*/true,
4813 				      declarator_p);
4814 	  /* If that worked, we're done.  */
4815 	  if (cp_parser_parse_definitely (parser))
4816 	    return id;
4817 	  /* We still don't know whether we're looking at an
4818 	     operator-function-id or a conversion-function-id.  */
4819 	  cp_parser_parse_tentatively (parser);
4820 	  /* Try an operator-function-id.  */
4821 	  id = cp_parser_operator_function_id (parser);
4822 	  /* If that didn't work, try a conversion-function-id.  */
4823 	  if (!cp_parser_parse_definitely (parser))
4824 	    id = cp_parser_conversion_function_id (parser);
4825 	  else if (UDLIT_OPER_P (id))
4826 	    {
4827 	      /* 17.6.3.3.5  */
4828 	      const char *name = UDLIT_OP_SUFFIX (id);
4829 	      if (name[0] != '_' && !in_system_header)
4830 		warning (0, "literal operator suffixes not preceded by %<_%>"
4831 			    " are reserved for future standardization");
4832 	    }
4833 
4834 	  return id;
4835 	}
4836       /* Fall through.  */
4837 
4838     default:
4839       if (optional_p)
4840 	return NULL_TREE;
4841       cp_parser_error (parser, "expected unqualified-id");
4842       return error_mark_node;
4843     }
4844 }
4845 
4846 /* Parse an (optional) nested-name-specifier.
4847 
4848    nested-name-specifier: [C++98]
4849      class-or-namespace-name :: nested-name-specifier [opt]
4850      class-or-namespace-name :: template nested-name-specifier [opt]
4851 
4852    nested-name-specifier: [C++0x]
4853      type-name ::
4854      namespace-name ::
4855      nested-name-specifier identifier ::
4856      nested-name-specifier template [opt] simple-template-id ::
4857 
4858    PARSER->SCOPE should be set appropriately before this function is
4859    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
4860    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
4861    in name lookups.
4862 
4863    Sets PARSER->SCOPE to the class (TYPE) or namespace
4864    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
4865    it unchanged if there is no nested-name-specifier.  Returns the new
4866    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
4867 
4868    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
4869    part of a declaration and/or decl-specifier.  */
4870 
4871 static tree
4872 cp_parser_nested_name_specifier_opt (cp_parser *parser,
4873 				     bool typename_keyword_p,
4874 				     bool check_dependency_p,
4875 				     bool type_p,
4876 				     bool is_declaration)
4877 {
4878   bool success = false;
4879   cp_token_position start = 0;
4880   cp_token *token;
4881 
4882   /* Remember where the nested-name-specifier starts.  */
4883   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4884     {
4885       start = cp_lexer_token_position (parser->lexer, false);
4886       push_deferring_access_checks (dk_deferred);
4887     }
4888 
4889   while (true)
4890     {
4891       tree new_scope;
4892       tree old_scope;
4893       tree saved_qualifying_scope;
4894       bool template_keyword_p;
4895 
4896       /* Spot cases that cannot be the beginning of a
4897 	 nested-name-specifier.  */
4898       token = cp_lexer_peek_token (parser->lexer);
4899 
4900       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
4901 	 the already parsed nested-name-specifier.  */
4902       if (token->type == CPP_NESTED_NAME_SPECIFIER)
4903 	{
4904 	  /* Grab the nested-name-specifier and continue the loop.  */
4905 	  cp_parser_pre_parsed_nested_name_specifier (parser);
4906 	  /* If we originally encountered this nested-name-specifier
4907 	     with IS_DECLARATION set to false, we will not have
4908 	     resolved TYPENAME_TYPEs, so we must do so here.  */
4909 	  if (is_declaration
4910 	      && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4911 	    {
4912 	      new_scope = resolve_typename_type (parser->scope,
4913 						 /*only_current_p=*/false);
4914 	      if (TREE_CODE (new_scope) != TYPENAME_TYPE)
4915 		parser->scope = new_scope;
4916 	    }
4917 	  success = true;
4918 	  continue;
4919 	}
4920 
4921       /* Spot cases that cannot be the beginning of a
4922 	 nested-name-specifier.  On the second and subsequent times
4923 	 through the loop, we look for the `template' keyword.  */
4924       if (success && token->keyword == RID_TEMPLATE)
4925 	;
4926       /* A template-id can start a nested-name-specifier.  */
4927       else if (token->type == CPP_TEMPLATE_ID)
4928 	;
4929       /* DR 743: decltype can be used in a nested-name-specifier.  */
4930       else if (token_is_decltype (token))
4931 	;
4932       else
4933 	{
4934 	  /* If the next token is not an identifier, then it is
4935 	     definitely not a type-name or namespace-name.  */
4936 	  if (token->type != CPP_NAME)
4937 	    break;
4938 	  /* If the following token is neither a `<' (to begin a
4939 	     template-id), nor a `::', then we are not looking at a
4940 	     nested-name-specifier.  */
4941 	  token = cp_lexer_peek_nth_token (parser->lexer, 2);
4942 
4943 	  if (token->type == CPP_COLON
4944 	      && parser->colon_corrects_to_scope_p
4945 	      && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_NAME)
4946 	    {
4947 	      error_at (token->location,
4948 			"found %<:%> in nested-name-specifier, expected %<::%>");
4949 	      token->type = CPP_SCOPE;
4950 	    }
4951 
4952 	  if (token->type != CPP_SCOPE
4953 	      && !cp_parser_nth_token_starts_template_argument_list_p
4954 		  (parser, 2))
4955 	    break;
4956 	}
4957 
4958       /* The nested-name-specifier is optional, so we parse
4959 	 tentatively.  */
4960       cp_parser_parse_tentatively (parser);
4961 
4962       /* Look for the optional `template' keyword, if this isn't the
4963 	 first time through the loop.  */
4964       if (success)
4965 	template_keyword_p = cp_parser_optional_template_keyword (parser);
4966       else
4967 	template_keyword_p = false;
4968 
4969       /* Save the old scope since the name lookup we are about to do
4970 	 might destroy it.  */
4971       old_scope = parser->scope;
4972       saved_qualifying_scope = parser->qualifying_scope;
4973       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
4974 	 look up names in "X<T>::I" in order to determine that "Y" is
4975 	 a template.  So, if we have a typename at this point, we make
4976 	 an effort to look through it.  */
4977       if (is_declaration
4978 	  && !typename_keyword_p
4979 	  && parser->scope
4980 	  && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4981 	parser->scope = resolve_typename_type (parser->scope,
4982 					       /*only_current_p=*/false);
4983       /* Parse the qualifying entity.  */
4984       new_scope
4985 	= cp_parser_qualifying_entity (parser,
4986                                        typename_keyword_p,
4987                                        template_keyword_p,
4988                                        check_dependency_p,
4989                                        type_p,
4990                                        is_declaration);
4991       /* Look for the `::' token.  */
4992       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
4993 
4994       /* If we found what we wanted, we keep going; otherwise, we're
4995 	 done.  */
4996       if (!cp_parser_parse_definitely (parser))
4997 	{
4998 	  bool error_p = false;
4999 
5000 	  /* Restore the OLD_SCOPE since it was valid before the
5001 	     failed attempt at finding the last
5002 	     class-or-namespace-name.  */
5003 	  parser->scope = old_scope;
5004 	  parser->qualifying_scope = saved_qualifying_scope;
5005 
5006 	  /* If the next token is a decltype, and the one after that is a
5007 	     `::', then the decltype has failed to resolve to a class or
5008 	     enumeration type.  Give this error even when parsing
5009 	     tentatively since it can't possibly be valid--and we're going
5010 	     to replace it with a CPP_NESTED_NAME_SPECIFIER below, so we
5011 	     won't get another chance.*/
5012 	  if (cp_lexer_next_token_is (parser->lexer, CPP_DECLTYPE)
5013 	      && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
5014 		  == CPP_SCOPE))
5015 	    {
5016 	      token = cp_lexer_consume_token (parser->lexer);
5017 	      error_at (token->location, "decltype evaluates to %qT, "
5018 			"which is not a class or enumeration type",
5019 			token->u.value);
5020 	      parser->scope = error_mark_node;
5021 	      error_p = true;
5022 	      /* As below.  */
5023 	      success = true;
5024 	      cp_lexer_consume_token (parser->lexer);
5025 	    }
5026 
5027 	  if (cp_parser_uncommitted_to_tentative_parse_p (parser))
5028 	    break;
5029 	  /* If the next token is an identifier, and the one after
5030 	     that is a `::', then any valid interpretation would have
5031 	     found a class-or-namespace-name.  */
5032 	  while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
5033 		 && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
5034 		     == CPP_SCOPE)
5035 		 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
5036 		     != CPP_COMPL))
5037 	    {
5038 	      token = cp_lexer_consume_token (parser->lexer);
5039 	      if (!error_p)
5040 		{
5041 		  if (!token->ambiguous_p)
5042 		    {
5043 		      tree decl;
5044 		      tree ambiguous_decls;
5045 
5046 		      decl = cp_parser_lookup_name (parser, token->u.value,
5047 						    none_type,
5048 						    /*is_template=*/false,
5049 						    /*is_namespace=*/false,
5050 						    /*check_dependency=*/true,
5051 						    &ambiguous_decls,
5052 						    token->location);
5053 		      if (TREE_CODE (decl) == TEMPLATE_DECL)
5054 			error_at (token->location,
5055 				  "%qD used without template parameters",
5056 				  decl);
5057 		      else if (ambiguous_decls)
5058 			{
5059 			  error_at (token->location,
5060 				    "reference to %qD is ambiguous",
5061 				    token->u.value);
5062 			  print_candidates (ambiguous_decls);
5063 			  decl = error_mark_node;
5064 			}
5065 		      else
5066                         {
5067                           if (cxx_dialect != cxx98)
5068                             cp_parser_name_lookup_error
5069                             (parser, token->u.value, decl, NLE_NOT_CXX98,
5070 	  		     token->location);
5071 			  else
5072 			    cp_parser_name_lookup_error
5073 			    (parser, token->u.value, decl, NLE_CXX98,
5074 			     token->location);
5075                         }
5076 		    }
5077 		  parser->scope = error_mark_node;
5078 		  error_p = true;
5079 		  /* Treat this as a successful nested-name-specifier
5080 		     due to:
5081 
5082 		     [basic.lookup.qual]
5083 
5084 		     If the name found is not a class-name (clause
5085 		     _class_) or namespace-name (_namespace.def_), the
5086 		     program is ill-formed.  */
5087 		  success = true;
5088 		}
5089 	      cp_lexer_consume_token (parser->lexer);
5090 	    }
5091 	  break;
5092 	}
5093       /* We've found one valid nested-name-specifier.  */
5094       success = true;
5095       /* Name lookup always gives us a DECL.  */
5096       if (TREE_CODE (new_scope) == TYPE_DECL)
5097 	new_scope = TREE_TYPE (new_scope);
5098       /* Uses of "template" must be followed by actual templates.  */
5099       if (template_keyword_p
5100 	  && !(CLASS_TYPE_P (new_scope)
5101 	       && ((CLASSTYPE_USE_TEMPLATE (new_scope)
5102 		    && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
5103 		   || CLASSTYPE_IS_TEMPLATE (new_scope)))
5104 	  && !(TREE_CODE (new_scope) == TYPENAME_TYPE
5105 	       && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
5106 		   == TEMPLATE_ID_EXPR)))
5107 	permerror (input_location, TYPE_P (new_scope)
5108 		   ? G_("%qT is not a template")
5109 		   : G_("%qD is not a template"),
5110 		   new_scope);
5111       /* If it is a class scope, try to complete it; we are about to
5112 	 be looking up names inside the class.  */
5113       if (TYPE_P (new_scope)
5114 	  /* Since checking types for dependency can be expensive,
5115 	     avoid doing it if the type is already complete.  */
5116 	  && !COMPLETE_TYPE_P (new_scope)
5117 	  /* Do not try to complete dependent types.  */
5118 	  && !dependent_type_p (new_scope))
5119 	{
5120 	  new_scope = complete_type (new_scope);
5121 	  /* If it is a typedef to current class, use the current
5122 	     class instead, as the typedef won't have any names inside
5123 	     it yet.  */
5124 	  if (!COMPLETE_TYPE_P (new_scope)
5125 	      && currently_open_class (new_scope))
5126 	    new_scope = TYPE_MAIN_VARIANT (new_scope);
5127 	}
5128       /* Make sure we look in the right scope the next time through
5129 	 the loop.  */
5130       parser->scope = new_scope;
5131     }
5132 
5133   /* If parsing tentatively, replace the sequence of tokens that makes
5134      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
5135      token.  That way, should we re-parse the token stream, we will
5136      not have to repeat the effort required to do the parse, nor will
5137      we issue duplicate error messages.  */
5138   if (success && start)
5139     {
5140       cp_token *token;
5141 
5142       token = cp_lexer_token_at (parser->lexer, start);
5143       /* Reset the contents of the START token.  */
5144       token->type = CPP_NESTED_NAME_SPECIFIER;
5145       /* Retrieve any deferred checks.  Do not pop this access checks yet
5146 	 so the memory will not be reclaimed during token replacing below.  */
5147       token->u.tree_check_value = ggc_alloc_cleared_tree_check ();
5148       token->u.tree_check_value->value = parser->scope;
5149       token->u.tree_check_value->checks = get_deferred_access_checks ();
5150       token->u.tree_check_value->qualifying_scope =
5151 	parser->qualifying_scope;
5152       token->keyword = RID_MAX;
5153 
5154       /* Purge all subsequent tokens.  */
5155       cp_lexer_purge_tokens_after (parser->lexer, start);
5156     }
5157 
5158   if (start)
5159     pop_to_parent_deferring_access_checks ();
5160 
5161   return success ? parser->scope : NULL_TREE;
5162 }
5163 
5164 /* Parse a nested-name-specifier.  See
5165    cp_parser_nested_name_specifier_opt for details.  This function
5166    behaves identically, except that it will an issue an error if no
5167    nested-name-specifier is present.  */
5168 
5169 static tree
5170 cp_parser_nested_name_specifier (cp_parser *parser,
5171 				 bool typename_keyword_p,
5172 				 bool check_dependency_p,
5173 				 bool type_p,
5174 				 bool is_declaration)
5175 {
5176   tree scope;
5177 
5178   /* Look for the nested-name-specifier.  */
5179   scope = cp_parser_nested_name_specifier_opt (parser,
5180 					       typename_keyword_p,
5181 					       check_dependency_p,
5182 					       type_p,
5183 					       is_declaration);
5184   /* If it was not present, issue an error message.  */
5185   if (!scope)
5186     {
5187       cp_parser_error (parser, "expected nested-name-specifier");
5188       parser->scope = NULL_TREE;
5189     }
5190 
5191   return scope;
5192 }
5193 
5194 /* Parse the qualifying entity in a nested-name-specifier. For C++98,
5195    this is either a class-name or a namespace-name (which corresponds
5196    to the class-or-namespace-name production in the grammar). For
5197    C++0x, it can also be a type-name that refers to an enumeration
5198    type or a simple-template-id.
5199 
5200    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
5201    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
5202    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
5203    TYPE_P is TRUE iff the next name should be taken as a class-name,
5204    even the same name is declared to be another entity in the same
5205    scope.
5206 
5207    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
5208    specified by the class-or-namespace-name.  If neither is found the
5209    ERROR_MARK_NODE is returned.  */
5210 
5211 static tree
5212 cp_parser_qualifying_entity (cp_parser *parser,
5213 			     bool typename_keyword_p,
5214 			     bool template_keyword_p,
5215 			     bool check_dependency_p,
5216 			     bool type_p,
5217 			     bool is_declaration)
5218 {
5219   tree saved_scope;
5220   tree saved_qualifying_scope;
5221   tree saved_object_scope;
5222   tree scope;
5223   bool only_class_p;
5224   bool successful_parse_p;
5225 
5226   /* DR 743: decltype can appear in a nested-name-specifier.  */
5227   if (cp_lexer_next_token_is_decltype (parser->lexer))
5228     {
5229       scope = cp_parser_decltype (parser);
5230       if (TREE_CODE (scope) != ENUMERAL_TYPE
5231 	  && !MAYBE_CLASS_TYPE_P (scope))
5232 	{
5233 	  cp_parser_simulate_error (parser);
5234 	  return error_mark_node;
5235 	}
5236       if (TYPE_NAME (scope))
5237 	scope = TYPE_NAME (scope);
5238       return scope;
5239     }
5240 
5241   /* Before we try to parse the class-name, we must save away the
5242      current PARSER->SCOPE since cp_parser_class_name will destroy
5243      it.  */
5244   saved_scope = parser->scope;
5245   saved_qualifying_scope = parser->qualifying_scope;
5246   saved_object_scope = parser->object_scope;
5247   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
5248      there is no need to look for a namespace-name.  */
5249   only_class_p = template_keyword_p
5250     || (saved_scope && TYPE_P (saved_scope) && cxx_dialect == cxx98);
5251   if (!only_class_p)
5252     cp_parser_parse_tentatively (parser);
5253   scope = cp_parser_class_name (parser,
5254 				typename_keyword_p,
5255 				template_keyword_p,
5256 				type_p ? class_type : none_type,
5257 				check_dependency_p,
5258 				/*class_head_p=*/false,
5259 				is_declaration);
5260   successful_parse_p = only_class_p || cp_parser_parse_definitely (parser);
5261   /* If that didn't work and we're in C++0x mode, try for a type-name.  */
5262   if (!only_class_p
5263       && cxx_dialect != cxx98
5264       && !successful_parse_p)
5265     {
5266       /* Restore the saved scope.  */
5267       parser->scope = saved_scope;
5268       parser->qualifying_scope = saved_qualifying_scope;
5269       parser->object_scope = saved_object_scope;
5270 
5271       /* Parse tentatively.  */
5272       cp_parser_parse_tentatively (parser);
5273 
5274       /* Parse a type-name  */
5275       scope = cp_parser_type_name (parser);
5276 
5277       /* "If the name found does not designate a namespace or a class,
5278 	 enumeration, or dependent type, the program is ill-formed."
5279 
5280          We cover classes and dependent types above and namespaces below,
5281          so this code is only looking for enums.  */
5282       if (!scope || TREE_CODE (scope) != TYPE_DECL
5283 	  || TREE_CODE (TREE_TYPE (scope)) != ENUMERAL_TYPE)
5284 	cp_parser_simulate_error (parser);
5285 
5286       successful_parse_p = cp_parser_parse_definitely (parser);
5287     }
5288   /* If that didn't work, try for a namespace-name.  */
5289   if (!only_class_p && !successful_parse_p)
5290     {
5291       /* Restore the saved scope.  */
5292       parser->scope = saved_scope;
5293       parser->qualifying_scope = saved_qualifying_scope;
5294       parser->object_scope = saved_object_scope;
5295       /* If we are not looking at an identifier followed by the scope
5296 	 resolution operator, then this is not part of a
5297 	 nested-name-specifier.  (Note that this function is only used
5298 	 to parse the components of a nested-name-specifier.)  */
5299       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
5300 	  || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
5301 	return error_mark_node;
5302       scope = cp_parser_namespace_name (parser);
5303     }
5304 
5305   return scope;
5306 }
5307 
5308 /* Parse a postfix-expression.
5309 
5310    postfix-expression:
5311      primary-expression
5312      postfix-expression [ expression ]
5313      postfix-expression ( expression-list [opt] )
5314      simple-type-specifier ( expression-list [opt] )
5315      typename :: [opt] nested-name-specifier identifier
5316        ( expression-list [opt] )
5317      typename :: [opt] nested-name-specifier template [opt] template-id
5318        ( expression-list [opt] )
5319      postfix-expression . template [opt] id-expression
5320      postfix-expression -> template [opt] id-expression
5321      postfix-expression . pseudo-destructor-name
5322      postfix-expression -> pseudo-destructor-name
5323      postfix-expression ++
5324      postfix-expression --
5325      dynamic_cast < type-id > ( expression )
5326      static_cast < type-id > ( expression )
5327      reinterpret_cast < type-id > ( expression )
5328      const_cast < type-id > ( expression )
5329      typeid ( expression )
5330      typeid ( type-id )
5331 
5332    GNU Extension:
5333 
5334    postfix-expression:
5335      ( type-id ) { initializer-list , [opt] }
5336 
5337    This extension is a GNU version of the C99 compound-literal
5338    construct.  (The C99 grammar uses `type-name' instead of `type-id',
5339    but they are essentially the same concept.)
5340 
5341    If ADDRESS_P is true, the postfix expression is the operand of the
5342    `&' operator.  CAST_P is true if this expression is the target of a
5343    cast.
5344 
5345    If MEMBER_ACCESS_ONLY_P, we only allow postfix expressions that are
5346    class member access expressions [expr.ref].
5347 
5348    Returns a representation of the expression.  */
5349 
5350 static tree
5351 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
5352                               bool member_access_only_p,
5353 			      cp_id_kind * pidk_return)
5354 {
5355   cp_token *token;
5356   enum rid keyword;
5357   cp_id_kind idk = CP_ID_KIND_NONE;
5358   tree postfix_expression = NULL_TREE;
5359   bool is_member_access = false;
5360 
5361   /* Peek at the next token.  */
5362   token = cp_lexer_peek_token (parser->lexer);
5363   /* Some of the productions are determined by keywords.  */
5364   keyword = token->keyword;
5365   switch (keyword)
5366     {
5367     case RID_DYNCAST:
5368     case RID_STATCAST:
5369     case RID_REINTCAST:
5370     case RID_CONSTCAST:
5371       {
5372 	tree type;
5373 	tree expression;
5374 	const char *saved_message;
5375 
5376 	/* All of these can be handled in the same way from the point
5377 	   of view of parsing.  Begin by consuming the token
5378 	   identifying the cast.  */
5379 	cp_lexer_consume_token (parser->lexer);
5380 
5381 	/* New types cannot be defined in the cast.  */
5382 	saved_message = parser->type_definition_forbidden_message;
5383 	parser->type_definition_forbidden_message
5384 	  = G_("types may not be defined in casts");
5385 
5386 	/* Look for the opening `<'.  */
5387 	cp_parser_require (parser, CPP_LESS, RT_LESS);
5388 	/* Parse the type to which we are casting.  */
5389 	type = cp_parser_type_id (parser);
5390 	/* Look for the closing `>'.  */
5391 	cp_parser_require (parser, CPP_GREATER, RT_GREATER);
5392 	/* Restore the old message.  */
5393 	parser->type_definition_forbidden_message = saved_message;
5394 
5395 	/* And the expression which is being cast.  */
5396 	cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
5397 	expression = cp_parser_expression (parser, /*cast_p=*/true, & idk);
5398 	cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
5399 
5400 	/* Only type conversions to integral or enumeration types
5401 	   can be used in constant-expressions.  */
5402 	if (!cast_valid_in_integral_constant_expression_p (type)
5403 	    && cp_parser_non_integral_constant_expression (parser, NIC_CAST))
5404 	  return error_mark_node;
5405 
5406 	switch (keyword)
5407 	  {
5408 	  case RID_DYNCAST:
5409 	    postfix_expression
5410 	      = build_dynamic_cast (type, expression, tf_warning_or_error);
5411 	    break;
5412 	  case RID_STATCAST:
5413 	    postfix_expression
5414 	      = build_static_cast (type, expression, tf_warning_or_error);
5415 	    break;
5416 	  case RID_REINTCAST:
5417 	    postfix_expression
5418 	      = build_reinterpret_cast (type, expression,
5419                                         tf_warning_or_error);
5420 	    break;
5421 	  case RID_CONSTCAST:
5422 	    postfix_expression
5423 	      = build_const_cast (type, expression, tf_warning_or_error);
5424 	    break;
5425 	  default:
5426 	    gcc_unreachable ();
5427 	  }
5428       }
5429       break;
5430 
5431     case RID_TYPEID:
5432       {
5433 	tree type;
5434 	const char *saved_message;
5435 	bool saved_in_type_id_in_expr_p;
5436 
5437 	/* Consume the `typeid' token.  */
5438 	cp_lexer_consume_token (parser->lexer);
5439 	/* Look for the `(' token.  */
5440 	cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
5441 	/* Types cannot be defined in a `typeid' expression.  */
5442 	saved_message = parser->type_definition_forbidden_message;
5443 	parser->type_definition_forbidden_message
5444 	  = G_("types may not be defined in a %<typeid%> expression");
5445 	/* We can't be sure yet whether we're looking at a type-id or an
5446 	   expression.  */
5447 	cp_parser_parse_tentatively (parser);
5448 	/* Try a type-id first.  */
5449 	saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5450 	parser->in_type_id_in_expr_p = true;
5451 	type = cp_parser_type_id (parser);
5452 	parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5453 	/* Look for the `)' token.  Otherwise, we can't be sure that
5454 	   we're not looking at an expression: consider `typeid (int
5455 	   (3))', for example.  */
5456 	cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
5457 	/* If all went well, simply lookup the type-id.  */
5458 	if (cp_parser_parse_definitely (parser))
5459 	  postfix_expression = get_typeid (type);
5460 	/* Otherwise, fall back to the expression variant.  */
5461 	else
5462 	  {
5463 	    tree expression;
5464 
5465 	    /* Look for an expression.  */
5466 	    expression = cp_parser_expression (parser, /*cast_p=*/false, & idk);
5467 	    /* Compute its typeid.  */
5468 	    postfix_expression = build_typeid (expression);
5469 	    /* Look for the `)' token.  */
5470 	    cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
5471 	  }
5472 	/* Restore the saved message.  */
5473 	parser->type_definition_forbidden_message = saved_message;
5474 	/* `typeid' may not appear in an integral constant expression.  */
5475 	if (cp_parser_non_integral_constant_expression (parser, NIC_TYPEID))
5476 	  return error_mark_node;
5477       }
5478       break;
5479 
5480     case RID_TYPENAME:
5481       {
5482 	tree type;
5483 	/* The syntax permitted here is the same permitted for an
5484 	   elaborated-type-specifier.  */
5485 	type = cp_parser_elaborated_type_specifier (parser,
5486 						    /*is_friend=*/false,
5487 						    /*is_declaration=*/false);
5488 	postfix_expression = cp_parser_functional_cast (parser, type);
5489       }
5490       break;
5491 
5492     default:
5493       {
5494 	tree type;
5495 
5496 	/* If the next thing is a simple-type-specifier, we may be
5497 	   looking at a functional cast.  We could also be looking at
5498 	   an id-expression.  So, we try the functional cast, and if
5499 	   that doesn't work we fall back to the primary-expression.  */
5500 	cp_parser_parse_tentatively (parser);
5501 	/* Look for the simple-type-specifier.  */
5502 	type = cp_parser_simple_type_specifier (parser,
5503 						/*decl_specs=*/NULL,
5504 						CP_PARSER_FLAGS_NONE);
5505 	/* Parse the cast itself.  */
5506 	if (!cp_parser_error_occurred (parser))
5507 	  postfix_expression
5508 	    = cp_parser_functional_cast (parser, type);
5509 	/* If that worked, we're done.  */
5510 	if (cp_parser_parse_definitely (parser))
5511 	  break;
5512 
5513 	/* If the functional-cast didn't work out, try a
5514 	   compound-literal.  */
5515 	if (cp_parser_allow_gnu_extensions_p (parser)
5516 	    && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5517 	  {
5518 	    VEC(constructor_elt,gc) *initializer_list = NULL;
5519 	    bool saved_in_type_id_in_expr_p;
5520 
5521 	    cp_parser_parse_tentatively (parser);
5522 	    /* Consume the `('.  */
5523 	    cp_lexer_consume_token (parser->lexer);
5524 	    /* Parse the type.  */
5525 	    saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5526 	    parser->in_type_id_in_expr_p = true;
5527 	    type = cp_parser_type_id (parser);
5528 	    parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5529 	    /* Look for the `)'.  */
5530 	    cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
5531 	    /* Look for the `{'.  */
5532 	    cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
5533 	    /* If things aren't going well, there's no need to
5534 	       keep going.  */
5535 	    if (!cp_parser_error_occurred (parser))
5536 	      {
5537 		bool non_constant_p;
5538 		/* Parse the initializer-list.  */
5539 		initializer_list
5540 		  = cp_parser_initializer_list (parser, &non_constant_p);
5541 		/* Allow a trailing `,'.  */
5542 		if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
5543 		  cp_lexer_consume_token (parser->lexer);
5544 		/* Look for the final `}'.  */
5545 		cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
5546 	      }
5547 	    /* If that worked, we're definitely looking at a
5548 	       compound-literal expression.  */
5549 	    if (cp_parser_parse_definitely (parser))
5550 	      {
5551 		/* Warn the user that a compound literal is not
5552 		   allowed in standard C++.  */
5553 		pedwarn (input_location, OPT_pedantic, "ISO C++ forbids compound-literals");
5554 		/* For simplicity, we disallow compound literals in
5555 		   constant-expressions.  We could
5556 		   allow compound literals of integer type, whose
5557 		   initializer was a constant, in constant
5558 		   expressions.  Permitting that usage, as a further
5559 		   extension, would not change the meaning of any
5560 		   currently accepted programs.  (Of course, as
5561 		   compound literals are not part of ISO C++, the
5562 		   standard has nothing to say.)  */
5563 		if (cp_parser_non_integral_constant_expression (parser,
5564 								NIC_NCC))
5565 		  {
5566 		    postfix_expression = error_mark_node;
5567 		    break;
5568 		  }
5569 		/* Form the representation of the compound-literal.  */
5570 		postfix_expression
5571 		  = (finish_compound_literal
5572 		     (type, build_constructor (init_list_type_node,
5573 					       initializer_list),
5574 		      tf_warning_or_error));
5575 		break;
5576 	      }
5577 	  }
5578 
5579 	/* It must be a primary-expression.  */
5580 	postfix_expression
5581 	  = cp_parser_primary_expression (parser, address_p, cast_p,
5582 					  /*template_arg_p=*/false,
5583 					  &idk);
5584       }
5585       break;
5586     }
5587 
5588   /* Keep looping until the postfix-expression is complete.  */
5589   while (true)
5590     {
5591       if (idk == CP_ID_KIND_UNQUALIFIED
5592 	  && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
5593 	  && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
5594 	/* It is not a Koenig lookup function call.  */
5595 	postfix_expression
5596 	  = unqualified_name_lookup_error (postfix_expression);
5597 
5598       /* Peek at the next token.  */
5599       token = cp_lexer_peek_token (parser->lexer);
5600 
5601       switch (token->type)
5602 	{
5603 	case CPP_OPEN_SQUARE:
5604 	  postfix_expression
5605 	    = cp_parser_postfix_open_square_expression (parser,
5606 							postfix_expression,
5607 							false);
5608 	  idk = CP_ID_KIND_NONE;
5609           is_member_access = false;
5610 	  break;
5611 
5612 	case CPP_OPEN_PAREN:
5613 	  /* postfix-expression ( expression-list [opt] ) */
5614 	  {
5615 	    bool koenig_p;
5616 	    bool is_builtin_constant_p;
5617 	    bool saved_integral_constant_expression_p = false;
5618 	    bool saved_non_integral_constant_expression_p = false;
5619 	    VEC(tree,gc) *args;
5620 
5621             is_member_access = false;
5622 
5623 	    is_builtin_constant_p
5624 	      = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
5625 	    if (is_builtin_constant_p)
5626 	      {
5627 		/* The whole point of __builtin_constant_p is to allow
5628 		   non-constant expressions to appear as arguments.  */
5629 		saved_integral_constant_expression_p
5630 		  = parser->integral_constant_expression_p;
5631 		saved_non_integral_constant_expression_p
5632 		  = parser->non_integral_constant_expression_p;
5633 		parser->integral_constant_expression_p = false;
5634 	      }
5635 	    args = (cp_parser_parenthesized_expression_list
5636 		    (parser, non_attr,
5637 		     /*cast_p=*/false, /*allow_expansion_p=*/true,
5638 		     /*non_constant_p=*/NULL));
5639 	    if (is_builtin_constant_p)
5640 	      {
5641 		parser->integral_constant_expression_p
5642 		  = saved_integral_constant_expression_p;
5643 		parser->non_integral_constant_expression_p
5644 		  = saved_non_integral_constant_expression_p;
5645 	      }
5646 
5647 	    if (args == NULL)
5648 	      {
5649 		postfix_expression = error_mark_node;
5650 		break;
5651 	      }
5652 
5653 	    /* Function calls are not permitted in
5654 	       constant-expressions.  */
5655 	    if (! builtin_valid_in_constant_expr_p (postfix_expression)
5656 		&& cp_parser_non_integral_constant_expression (parser,
5657 							       NIC_FUNC_CALL))
5658 	      {
5659 		postfix_expression = error_mark_node;
5660 		release_tree_vector (args);
5661 		break;
5662 	      }
5663 
5664 	    koenig_p = false;
5665 	    if (idk == CP_ID_KIND_UNQUALIFIED
5666 		|| idk == CP_ID_KIND_TEMPLATE_ID)
5667 	      {
5668 		if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
5669 		  {
5670 		    if (!VEC_empty (tree, args))
5671 		      {
5672 			koenig_p = true;
5673 			if (!any_type_dependent_arguments_p (args))
5674 			  postfix_expression
5675 			    = perform_koenig_lookup (postfix_expression, args,
5676 						     /*include_std=*/false,
5677 						     tf_warning_or_error);
5678 		      }
5679 		    else
5680 		      postfix_expression
5681 			= unqualified_fn_lookup_error (postfix_expression);
5682 		  }
5683 		/* We do not perform argument-dependent lookup if
5684 		   normal lookup finds a non-function, in accordance
5685 		   with the expected resolution of DR 218.  */
5686 		else if (!VEC_empty (tree, args)
5687 			 && is_overloaded_fn (postfix_expression))
5688 		  {
5689 		    tree fn = get_first_fn (postfix_expression);
5690 		    fn = STRIP_TEMPLATE (fn);
5691 
5692 		    /* Do not do argument dependent lookup if regular
5693 		       lookup finds a member function or a block-scope
5694 		       function declaration.  [basic.lookup.argdep]/3  */
5695 		    if (!DECL_FUNCTION_MEMBER_P (fn)
5696 			&& !DECL_LOCAL_FUNCTION_P (fn))
5697 		      {
5698 			koenig_p = true;
5699 			if (!any_type_dependent_arguments_p (args))
5700 			  postfix_expression
5701 			    = perform_koenig_lookup (postfix_expression, args,
5702 						     /*include_std=*/false,
5703 						     tf_warning_or_error);
5704 		      }
5705 		  }
5706 	      }
5707 
5708 	    if (TREE_CODE (postfix_expression) == COMPONENT_REF)
5709 	      {
5710 		tree instance = TREE_OPERAND (postfix_expression, 0);
5711 		tree fn = TREE_OPERAND (postfix_expression, 1);
5712 
5713 		if (processing_template_decl
5714 		    && (type_dependent_expression_p (instance)
5715 			|| (!BASELINK_P (fn)
5716 			    && TREE_CODE (fn) != FIELD_DECL)
5717 			|| type_dependent_expression_p (fn)
5718 			|| any_type_dependent_arguments_p (args)))
5719 		  {
5720 		    postfix_expression
5721 		      = build_nt_call_vec (postfix_expression, args);
5722 		    release_tree_vector (args);
5723 		    break;
5724 		  }
5725 
5726 		if (BASELINK_P (fn))
5727 		  {
5728 		  postfix_expression
5729 		    = (build_new_method_call
5730 		       (instance, fn, &args, NULL_TREE,
5731 			(idk == CP_ID_KIND_QUALIFIED
5732 			 ? LOOKUP_NORMAL|LOOKUP_NONVIRTUAL
5733 			 : LOOKUP_NORMAL),
5734 			/*fn_p=*/NULL,
5735 			tf_warning_or_error));
5736 		  }
5737 		else
5738 		  postfix_expression
5739 		    = finish_call_expr (postfix_expression, &args,
5740 					/*disallow_virtual=*/false,
5741 					/*koenig_p=*/false,
5742 					tf_warning_or_error);
5743 	      }
5744 	    else if (TREE_CODE (postfix_expression) == OFFSET_REF
5745 		     || TREE_CODE (postfix_expression) == MEMBER_REF
5746 		     || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
5747 	      postfix_expression = (build_offset_ref_call_from_tree
5748 				    (postfix_expression, &args));
5749 	    else if (idk == CP_ID_KIND_QUALIFIED)
5750 	      /* A call to a static class member, or a namespace-scope
5751 		 function.  */
5752 	      postfix_expression
5753 		= finish_call_expr (postfix_expression, &args,
5754 				    /*disallow_virtual=*/true,
5755 				    koenig_p,
5756 				    tf_warning_or_error);
5757 	    else
5758 	      /* All other function calls.  */
5759 	      postfix_expression
5760 		= finish_call_expr (postfix_expression, &args,
5761 				    /*disallow_virtual=*/false,
5762 				    koenig_p,
5763 				    tf_warning_or_error);
5764 
5765 	    /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
5766 	    idk = CP_ID_KIND_NONE;
5767 
5768 	    release_tree_vector (args);
5769 	  }
5770 	  break;
5771 
5772 	case CPP_DOT:
5773 	case CPP_DEREF:
5774 	  /* postfix-expression . template [opt] id-expression
5775 	     postfix-expression . pseudo-destructor-name
5776 	     postfix-expression -> template [opt] id-expression
5777 	     postfix-expression -> pseudo-destructor-name */
5778 
5779 	  /* Consume the `.' or `->' operator.  */
5780 	  cp_lexer_consume_token (parser->lexer);
5781 
5782 	  postfix_expression
5783 	    = cp_parser_postfix_dot_deref_expression (parser, token->type,
5784 						      postfix_expression,
5785 						      false, &idk,
5786 						      token->location);
5787 
5788           is_member_access = true;
5789 	  break;
5790 
5791 	case CPP_PLUS_PLUS:
5792 	  /* postfix-expression ++  */
5793 	  /* Consume the `++' token.  */
5794 	  cp_lexer_consume_token (parser->lexer);
5795 	  /* Generate a representation for the complete expression.  */
5796 	  postfix_expression
5797 	    = finish_increment_expr (postfix_expression,
5798 				     POSTINCREMENT_EXPR);
5799 	  /* Increments may not appear in constant-expressions.  */
5800 	  if (cp_parser_non_integral_constant_expression (parser, NIC_INC))
5801 	    postfix_expression = error_mark_node;
5802 	  idk = CP_ID_KIND_NONE;
5803           is_member_access = false;
5804 	  break;
5805 
5806 	case CPP_MINUS_MINUS:
5807 	  /* postfix-expression -- */
5808 	  /* Consume the `--' token.  */
5809 	  cp_lexer_consume_token (parser->lexer);
5810 	  /* Generate a representation for the complete expression.  */
5811 	  postfix_expression
5812 	    = finish_increment_expr (postfix_expression,
5813 				     POSTDECREMENT_EXPR);
5814 	  /* Decrements may not appear in constant-expressions.  */
5815 	  if (cp_parser_non_integral_constant_expression (parser, NIC_DEC))
5816 	    postfix_expression = error_mark_node;
5817 	  idk = CP_ID_KIND_NONE;
5818           is_member_access = false;
5819 	  break;
5820 
5821 	default:
5822 	  if (pidk_return != NULL)
5823 	    * pidk_return = idk;
5824           if (member_access_only_p)
5825             return is_member_access? postfix_expression : error_mark_node;
5826           else
5827             return postfix_expression;
5828 	}
5829     }
5830 
5831   /* We should never get here.  */
5832   gcc_unreachable ();
5833   return error_mark_node;
5834 }
5835 
5836 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
5837    by cp_parser_builtin_offsetof.  We're looking for
5838 
5839      postfix-expression [ expression ]
5840      postfix-expression [ braced-init-list ] (C++11)
5841 
5842    FOR_OFFSETOF is set if we're being called in that context, which
5843    changes how we deal with integer constant expressions.  */
5844 
5845 static tree
5846 cp_parser_postfix_open_square_expression (cp_parser *parser,
5847 					  tree postfix_expression,
5848 					  bool for_offsetof)
5849 {
5850   tree index;
5851 
5852   /* Consume the `[' token.  */
5853   cp_lexer_consume_token (parser->lexer);
5854 
5855   /* Parse the index expression.  */
5856   /* ??? For offsetof, there is a question of what to allow here.  If
5857      offsetof is not being used in an integral constant expression context,
5858      then we *could* get the right answer by computing the value at runtime.
5859      If we are in an integral constant expression context, then we might
5860      could accept any constant expression; hard to say without analysis.
5861      Rather than open the barn door too wide right away, allow only integer
5862      constant expressions here.  */
5863   if (for_offsetof)
5864     index = cp_parser_constant_expression (parser, false, NULL);
5865   else
5866     {
5867       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
5868 	{
5869 	  bool expr_nonconst_p;
5870 	  maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5871 	  index = cp_parser_braced_list (parser, &expr_nonconst_p);
5872 	}
5873       else
5874 	index = cp_parser_expression (parser, /*cast_p=*/false, NULL);
5875     }
5876 
5877   /* Look for the closing `]'.  */
5878   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
5879 
5880   /* Build the ARRAY_REF.  */
5881   postfix_expression = grok_array_decl (postfix_expression, index);
5882 
5883   /* When not doing offsetof, array references are not permitted in
5884      constant-expressions.  */
5885   if (!for_offsetof
5886       && (cp_parser_non_integral_constant_expression (parser, NIC_ARRAY_REF)))
5887     postfix_expression = error_mark_node;
5888 
5889   return postfix_expression;
5890 }
5891 
5892 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
5893    by cp_parser_builtin_offsetof.  We're looking for
5894 
5895      postfix-expression . template [opt] id-expression
5896      postfix-expression . pseudo-destructor-name
5897      postfix-expression -> template [opt] id-expression
5898      postfix-expression -> pseudo-destructor-name
5899 
5900    FOR_OFFSETOF is set if we're being called in that context.  That sorta
5901    limits what of the above we'll actually accept, but nevermind.
5902    TOKEN_TYPE is the "." or "->" token, which will already have been
5903    removed from the stream.  */
5904 
5905 static tree
5906 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
5907 					enum cpp_ttype token_type,
5908 					tree postfix_expression,
5909 					bool for_offsetof, cp_id_kind *idk,
5910 					location_t location)
5911 {
5912   tree name;
5913   bool dependent_p;
5914   bool pseudo_destructor_p;
5915   tree scope = NULL_TREE;
5916 
5917   /* If this is a `->' operator, dereference the pointer.  */
5918   if (token_type == CPP_DEREF)
5919     postfix_expression = build_x_arrow (postfix_expression);
5920   /* Check to see whether or not the expression is type-dependent.  */
5921   dependent_p = type_dependent_expression_p (postfix_expression);
5922   /* The identifier following the `->' or `.' is not qualified.  */
5923   parser->scope = NULL_TREE;
5924   parser->qualifying_scope = NULL_TREE;
5925   parser->object_scope = NULL_TREE;
5926   *idk = CP_ID_KIND_NONE;
5927 
5928   /* Enter the scope corresponding to the type of the object
5929      given by the POSTFIX_EXPRESSION.  */
5930   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
5931     {
5932       scope = TREE_TYPE (postfix_expression);
5933       /* According to the standard, no expression should ever have
5934 	 reference type.  Unfortunately, we do not currently match
5935 	 the standard in this respect in that our internal representation
5936 	 of an expression may have reference type even when the standard
5937 	 says it does not.  Therefore, we have to manually obtain the
5938 	 underlying type here.  */
5939       scope = non_reference (scope);
5940       /* The type of the POSTFIX_EXPRESSION must be complete.  */
5941       if (scope == unknown_type_node)
5942 	{
5943 	  error_at (location, "%qE does not have class type",
5944 		    postfix_expression);
5945 	  scope = NULL_TREE;
5946 	}
5947       /* Unlike the object expression in other contexts, *this is not
5948 	 required to be of complete type for purposes of class member
5949 	 access (5.2.5) outside the member function body.  */
5950       else if (scope != current_class_ref
5951 	       && !(processing_template_decl && scope == current_class_type))
5952 	scope = complete_type_or_else (scope, NULL_TREE);
5953       /* Let the name lookup machinery know that we are processing a
5954 	 class member access expression.  */
5955       parser->context->object_type = scope;
5956       /* If something went wrong, we want to be able to discern that case,
5957 	 as opposed to the case where there was no SCOPE due to the type
5958 	 of expression being dependent.  */
5959       if (!scope)
5960 	scope = error_mark_node;
5961       /* If the SCOPE was erroneous, make the various semantic analysis
5962 	 functions exit quickly -- and without issuing additional error
5963 	 messages.  */
5964       if (scope == error_mark_node)
5965 	postfix_expression = error_mark_node;
5966     }
5967 
5968   /* Assume this expression is not a pseudo-destructor access.  */
5969   pseudo_destructor_p = false;
5970 
5971   /* If the SCOPE is a scalar type, then, if this is a valid program,
5972      we must be looking at a pseudo-destructor-name.  If POSTFIX_EXPRESSION
5973      is type dependent, it can be pseudo-destructor-name or something else.
5974      Try to parse it as pseudo-destructor-name first.  */
5975   if ((scope && SCALAR_TYPE_P (scope)) || dependent_p)
5976     {
5977       tree s;
5978       tree type;
5979 
5980       cp_parser_parse_tentatively (parser);
5981       /* Parse the pseudo-destructor-name.  */
5982       s = NULL_TREE;
5983       cp_parser_pseudo_destructor_name (parser, &s, &type);
5984       if (dependent_p
5985 	  && (cp_parser_error_occurred (parser)
5986 	      || TREE_CODE (type) != TYPE_DECL
5987 	      || !SCALAR_TYPE_P (TREE_TYPE (type))))
5988 	cp_parser_abort_tentative_parse (parser);
5989       else if (cp_parser_parse_definitely (parser))
5990 	{
5991 	  pseudo_destructor_p = true;
5992 	  postfix_expression
5993 	    = finish_pseudo_destructor_expr (postfix_expression,
5994 					     s, TREE_TYPE (type));
5995 	}
5996     }
5997 
5998   if (!pseudo_destructor_p)
5999     {
6000       /* If the SCOPE is not a scalar type, we are looking at an
6001 	 ordinary class member access expression, rather than a
6002 	 pseudo-destructor-name.  */
6003       bool template_p;
6004       cp_token *token = cp_lexer_peek_token (parser->lexer);
6005       /* Parse the id-expression.  */
6006       name = (cp_parser_id_expression
6007 	      (parser,
6008 	       cp_parser_optional_template_keyword (parser),
6009 	       /*check_dependency_p=*/true,
6010 	       &template_p,
6011 	       /*declarator_p=*/false,
6012 	       /*optional_p=*/false));
6013       /* In general, build a SCOPE_REF if the member name is qualified.
6014 	 However, if the name was not dependent and has already been
6015 	 resolved; there is no need to build the SCOPE_REF.  For example;
6016 
6017 	     struct X { void f(); };
6018 	     template <typename T> void f(T* t) { t->X::f(); }
6019 
6020 	 Even though "t" is dependent, "X::f" is not and has been resolved
6021 	 to a BASELINK; there is no need to include scope information.  */
6022 
6023       /* But we do need to remember that there was an explicit scope for
6024 	 virtual function calls.  */
6025       if (parser->scope)
6026 	*idk = CP_ID_KIND_QUALIFIED;
6027 
6028       /* If the name is a template-id that names a type, we will get a
6029 	 TYPE_DECL here.  That is invalid code.  */
6030       if (TREE_CODE (name) == TYPE_DECL)
6031 	{
6032 	  error_at (token->location, "invalid use of %qD", name);
6033 	  postfix_expression = error_mark_node;
6034 	}
6035       else
6036 	{
6037 	  if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
6038 	    {
6039 	      if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
6040 		{
6041 		  error_at (token->location, "%<%D::%D%> is not a class member",
6042 			    parser->scope, name);
6043 		  postfix_expression = error_mark_node;
6044 		}
6045 	      else
6046 		name = build_qualified_name (/*type=*/NULL_TREE,
6047 					     parser->scope,
6048 					     name,
6049 					     template_p);
6050 	      parser->scope = NULL_TREE;
6051 	      parser->qualifying_scope = NULL_TREE;
6052 	      parser->object_scope = NULL_TREE;
6053 	    }
6054 	  if (parser->scope && name && BASELINK_P (name))
6055 	    adjust_result_of_qualified_name_lookup
6056 	      (name, parser->scope, scope);
6057 	  postfix_expression
6058 	    = finish_class_member_access_expr (postfix_expression, name,
6059 					       template_p,
6060 					       tf_warning_or_error);
6061 	}
6062     }
6063 
6064   /* We no longer need to look up names in the scope of the object on
6065      the left-hand side of the `.' or `->' operator.  */
6066   parser->context->object_type = NULL_TREE;
6067 
6068   /* Outside of offsetof, these operators may not appear in
6069      constant-expressions.  */
6070   if (!for_offsetof
6071       && (cp_parser_non_integral_constant_expression
6072 	  (parser, token_type == CPP_DEREF ? NIC_ARROW : NIC_POINT)))
6073     postfix_expression = error_mark_node;
6074 
6075   return postfix_expression;
6076 }
6077 
6078 /* Parse a parenthesized expression-list.
6079 
6080    expression-list:
6081      assignment-expression
6082      expression-list, assignment-expression
6083 
6084    attribute-list:
6085      expression-list
6086      identifier
6087      identifier, expression-list
6088 
6089    CAST_P is true if this expression is the target of a cast.
6090 
6091    ALLOW_EXPANSION_P is true if this expression allows expansion of an
6092    argument pack.
6093 
6094    Returns a vector of trees.  Each element is a representation of an
6095    assignment-expression.  NULL is returned if the ( and or ) are
6096    missing.  An empty, but allocated, vector is returned on no
6097    expressions.  The parentheses are eaten.  IS_ATTRIBUTE_LIST is id_attr
6098    if we are parsing an attribute list for an attribute that wants a
6099    plain identifier argument, normal_attr for an attribute that wants
6100    an expression, or non_attr if we aren't parsing an attribute list.  If
6101    NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P indicates whether or
6102    not all of the expressions in the list were constant.  */
6103 
6104 static VEC(tree,gc) *
6105 cp_parser_parenthesized_expression_list (cp_parser* parser,
6106 					 int is_attribute_list,
6107 					 bool cast_p,
6108                                          bool allow_expansion_p,
6109 					 bool *non_constant_p)
6110 {
6111   VEC(tree,gc) *expression_list;
6112   bool fold_expr_p = is_attribute_list != non_attr;
6113   tree identifier = NULL_TREE;
6114   bool saved_greater_than_is_operator_p;
6115 
6116   /* Assume all the expressions will be constant.  */
6117   if (non_constant_p)
6118     *non_constant_p = false;
6119 
6120   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
6121     return NULL;
6122 
6123   expression_list = make_tree_vector ();
6124 
6125   /* Within a parenthesized expression, a `>' token is always
6126      the greater-than operator.  */
6127   saved_greater_than_is_operator_p
6128     = parser->greater_than_is_operator_p;
6129   parser->greater_than_is_operator_p = true;
6130 
6131   /* Consume expressions until there are no more.  */
6132   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
6133     while (true)
6134       {
6135 	tree expr;
6136 
6137 	/* At the beginning of attribute lists, check to see if the
6138 	   next token is an identifier.  */
6139 	if (is_attribute_list == id_attr
6140 	    && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
6141 	  {
6142 	    cp_token *token;
6143 
6144 	    /* Consume the identifier.  */
6145 	    token = cp_lexer_consume_token (parser->lexer);
6146 	    /* Save the identifier.  */
6147 	    identifier = token->u.value;
6148 	  }
6149 	else
6150 	  {
6151 	    bool expr_non_constant_p;
6152 
6153 	    /* Parse the next assignment-expression.  */
6154 	    if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6155 	      {
6156 		/* A braced-init-list.  */
6157 		maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6158 		expr = cp_parser_braced_list (parser, &expr_non_constant_p);
6159 		if (non_constant_p && expr_non_constant_p)
6160 		  *non_constant_p = true;
6161 	      }
6162 	    else if (non_constant_p)
6163 	      {
6164 		expr = (cp_parser_constant_expression
6165 			(parser, /*allow_non_constant_p=*/true,
6166 			 &expr_non_constant_p));
6167 		if (expr_non_constant_p)
6168 		  *non_constant_p = true;
6169 	      }
6170 	    else
6171 	      expr = cp_parser_assignment_expression (parser, cast_p, NULL);
6172 
6173 	    if (fold_expr_p)
6174 	      expr = fold_non_dependent_expr (expr);
6175 
6176             /* If we have an ellipsis, then this is an expression
6177 	       expansion.  */
6178             if (allow_expansion_p
6179                 && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
6180               {
6181                 /* Consume the `...'.  */
6182                 cp_lexer_consume_token (parser->lexer);
6183 
6184                 /* Build the argument pack.  */
6185                 expr = make_pack_expansion (expr);
6186               }
6187 
6188 	     /* Add it to the list.  We add error_mark_node
6189 		expressions to the list, so that we can still tell if
6190 		the correct form for a parenthesized expression-list
6191 		is found. That gives better errors.  */
6192 	    VEC_safe_push (tree, gc, expression_list, expr);
6193 
6194 	    if (expr == error_mark_node)
6195 	      goto skip_comma;
6196 	  }
6197 
6198 	/* After the first item, attribute lists look the same as
6199 	   expression lists.  */
6200 	is_attribute_list = non_attr;
6201 
6202       get_comma:;
6203 	/* If the next token isn't a `,', then we are done.  */
6204 	if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
6205 	  break;
6206 
6207 	/* Otherwise, consume the `,' and keep going.  */
6208 	cp_lexer_consume_token (parser->lexer);
6209       }
6210 
6211   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
6212     {
6213       int ending;
6214 
6215     skip_comma:;
6216       /* We try and resync to an unnested comma, as that will give the
6217 	 user better diagnostics.  */
6218       ending = cp_parser_skip_to_closing_parenthesis (parser,
6219 						      /*recovering=*/true,
6220 						      /*or_comma=*/true,
6221 						      /*consume_paren=*/true);
6222       if (ending < 0)
6223 	goto get_comma;
6224       if (!ending)
6225 	{
6226 	  parser->greater_than_is_operator_p
6227 	    = saved_greater_than_is_operator_p;
6228 	  return NULL;
6229 	}
6230     }
6231 
6232   parser->greater_than_is_operator_p
6233     = saved_greater_than_is_operator_p;
6234 
6235   if (identifier)
6236     VEC_safe_insert (tree, gc, expression_list, 0, identifier);
6237 
6238   return expression_list;
6239 }
6240 
6241 /* Parse a pseudo-destructor-name.
6242 
6243    pseudo-destructor-name:
6244      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
6245      :: [opt] nested-name-specifier template template-id :: ~ type-name
6246      :: [opt] nested-name-specifier [opt] ~ type-name
6247 
6248    If either of the first two productions is used, sets *SCOPE to the
6249    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
6250    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
6251    or ERROR_MARK_NODE if the parse fails.  */
6252 
6253 static void
6254 cp_parser_pseudo_destructor_name (cp_parser* parser,
6255 				  tree* scope,
6256 				  tree* type)
6257 {
6258   bool nested_name_specifier_p;
6259 
6260   /* Assume that things will not work out.  */
6261   *type = error_mark_node;
6262 
6263   /* Look for the optional `::' operator.  */
6264   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
6265   /* Look for the optional nested-name-specifier.  */
6266   nested_name_specifier_p
6267     = (cp_parser_nested_name_specifier_opt (parser,
6268 					    /*typename_keyword_p=*/false,
6269 					    /*check_dependency_p=*/true,
6270 					    /*type_p=*/false,
6271 					    /*is_declaration=*/false)
6272        != NULL_TREE);
6273   /* Now, if we saw a nested-name-specifier, we might be doing the
6274      second production.  */
6275   if (nested_name_specifier_p
6276       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
6277     {
6278       /* Consume the `template' keyword.  */
6279       cp_lexer_consume_token (parser->lexer);
6280       /* Parse the template-id.  */
6281       cp_parser_template_id (parser,
6282 			     /*template_keyword_p=*/true,
6283 			     /*check_dependency_p=*/false,
6284 			     /*is_declaration=*/true);
6285       /* Look for the `::' token.  */
6286       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
6287     }
6288   /* If the next token is not a `~', then there might be some
6289      additional qualification.  */
6290   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
6291     {
6292       /* At this point, we're looking for "type-name :: ~".  The type-name
6293 	 must not be a class-name, since this is a pseudo-destructor.  So,
6294 	 it must be either an enum-name, or a typedef-name -- both of which
6295 	 are just identifiers.  So, we peek ahead to check that the "::"
6296 	 and "~" tokens are present; if they are not, then we can avoid
6297 	 calling type_name.  */
6298       if (cp_lexer_peek_token (parser->lexer)->type != CPP_NAME
6299 	  || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE
6300 	  || cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_COMPL)
6301 	{
6302 	  cp_parser_error (parser, "non-scalar type");
6303 	  return;
6304 	}
6305 
6306       /* Look for the type-name.  */
6307       *scope = TREE_TYPE (cp_parser_nonclass_name (parser));
6308       if (*scope == error_mark_node)
6309 	return;
6310 
6311       /* Look for the `::' token.  */
6312       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
6313     }
6314   else
6315     *scope = NULL_TREE;
6316 
6317   /* Look for the `~'.  */
6318   cp_parser_require (parser, CPP_COMPL, RT_COMPL);
6319 
6320   /* Once we see the ~, this has to be a pseudo-destructor.  */
6321   if (!processing_template_decl && !cp_parser_error_occurred (parser))
6322     cp_parser_commit_to_tentative_parse (parser);
6323 
6324   /* Look for the type-name again.  We are not responsible for
6325      checking that it matches the first type-name.  */
6326   *type = cp_parser_nonclass_name (parser);
6327 }
6328 
6329 /* Parse a unary-expression.
6330 
6331    unary-expression:
6332      postfix-expression
6333      ++ cast-expression
6334      -- cast-expression
6335      unary-operator cast-expression
6336      sizeof unary-expression
6337      sizeof ( type-id )
6338      alignof ( type-id )  [C++0x]
6339      new-expression
6340      delete-expression
6341 
6342    GNU Extensions:
6343 
6344    unary-expression:
6345      __extension__ cast-expression
6346      __alignof__ unary-expression
6347      __alignof__ ( type-id )
6348      alignof unary-expression  [C++0x]
6349      __real__ cast-expression
6350      __imag__ cast-expression
6351      && identifier
6352 
6353    ADDRESS_P is true iff the unary-expression is appearing as the
6354    operand of the `&' operator.   CAST_P is true if this expression is
6355    the target of a cast.
6356 
6357    Returns a representation of the expression.  */
6358 
6359 static tree
6360 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p,
6361 			    cp_id_kind * pidk)
6362 {
6363   cp_token *token;
6364   enum tree_code unary_operator;
6365 
6366   /* Peek at the next token.  */
6367   token = cp_lexer_peek_token (parser->lexer);
6368   /* Some keywords give away the kind of expression.  */
6369   if (token->type == CPP_KEYWORD)
6370     {
6371       enum rid keyword = token->keyword;
6372 
6373       switch (keyword)
6374 	{
6375 	case RID_ALIGNOF:
6376 	case RID_SIZEOF:
6377 	  {
6378 	    tree operand;
6379 	    enum tree_code op;
6380 
6381 	    op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
6382 	    /* Consume the token.  */
6383 	    cp_lexer_consume_token (parser->lexer);
6384 	    /* Parse the operand.  */
6385 	    operand = cp_parser_sizeof_operand (parser, keyword);
6386 
6387 	    if (TYPE_P (operand))
6388 	      return cxx_sizeof_or_alignof_type (operand, op, true);
6389 	    else
6390 	      {
6391 		/* ISO C++ defines alignof only with types, not with
6392 		   expressions. So pedwarn if alignof is used with a non-
6393 		   type expression. However, __alignof__ is ok.  */
6394 		if (!strcmp (IDENTIFIER_POINTER (token->u.value), "alignof"))
6395 		  pedwarn (token->location, OPT_pedantic,
6396 			   "ISO C++ does not allow %<alignof%> "
6397 			   "with a non-type");
6398 
6399 		return cxx_sizeof_or_alignof_expr (operand, op, true);
6400 	      }
6401 	  }
6402 
6403 	case RID_NEW:
6404 	  return cp_parser_new_expression (parser);
6405 
6406 	case RID_DELETE:
6407 	  return cp_parser_delete_expression (parser);
6408 
6409 	case RID_EXTENSION:
6410 	  {
6411 	    /* The saved value of the PEDANTIC flag.  */
6412 	    int saved_pedantic;
6413 	    tree expr;
6414 
6415 	    /* Save away the PEDANTIC flag.  */
6416 	    cp_parser_extension_opt (parser, &saved_pedantic);
6417 	    /* Parse the cast-expression.  */
6418 	    expr = cp_parser_simple_cast_expression (parser);
6419 	    /* Restore the PEDANTIC flag.  */
6420 	    pedantic = saved_pedantic;
6421 
6422 	    return expr;
6423 	  }
6424 
6425 	case RID_REALPART:
6426 	case RID_IMAGPART:
6427 	  {
6428 	    tree expression;
6429 
6430 	    /* Consume the `__real__' or `__imag__' token.  */
6431 	    cp_lexer_consume_token (parser->lexer);
6432 	    /* Parse the cast-expression.  */
6433 	    expression = cp_parser_simple_cast_expression (parser);
6434 	    /* Create the complete representation.  */
6435 	    return build_x_unary_op ((keyword == RID_REALPART
6436 				      ? REALPART_EXPR : IMAGPART_EXPR),
6437 				     expression,
6438                                      tf_warning_or_error);
6439 	  }
6440 	  break;
6441 
6442 	case RID_TRANSACTION_ATOMIC:
6443 	case RID_TRANSACTION_RELAXED:
6444 	  return cp_parser_transaction_expression (parser, keyword);
6445 
6446 	case RID_NOEXCEPT:
6447 	  {
6448 	    tree expr;
6449 	    const char *saved_message;
6450 	    bool saved_integral_constant_expression_p;
6451 	    bool saved_non_integral_constant_expression_p;
6452 	    bool saved_greater_than_is_operator_p;
6453 
6454 	    cp_lexer_consume_token (parser->lexer);
6455 	    cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
6456 
6457 	    saved_message = parser->type_definition_forbidden_message;
6458 	    parser->type_definition_forbidden_message
6459 	      = G_("types may not be defined in %<noexcept%> expressions");
6460 
6461 	    saved_integral_constant_expression_p
6462 	      = parser->integral_constant_expression_p;
6463 	    saved_non_integral_constant_expression_p
6464 	      = parser->non_integral_constant_expression_p;
6465 	    parser->integral_constant_expression_p = false;
6466 
6467 	    saved_greater_than_is_operator_p
6468 	      = parser->greater_than_is_operator_p;
6469 	    parser->greater_than_is_operator_p = true;
6470 
6471 	    ++cp_unevaluated_operand;
6472 	    ++c_inhibit_evaluation_warnings;
6473 	    expr = cp_parser_expression (parser, false, NULL);
6474 	    --c_inhibit_evaluation_warnings;
6475 	    --cp_unevaluated_operand;
6476 
6477 	    parser->greater_than_is_operator_p
6478 	      = saved_greater_than_is_operator_p;
6479 
6480 	    parser->integral_constant_expression_p
6481 	      = saved_integral_constant_expression_p;
6482 	    parser->non_integral_constant_expression_p
6483 	      = saved_non_integral_constant_expression_p;
6484 
6485 	    parser->type_definition_forbidden_message = saved_message;
6486 
6487 	    cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
6488 	    return finish_noexcept_expr (expr, tf_warning_or_error);
6489 	  }
6490 
6491 	default:
6492 	  break;
6493 	}
6494     }
6495 
6496   /* Look for the `:: new' and `:: delete', which also signal the
6497      beginning of a new-expression, or delete-expression,
6498      respectively.  If the next token is `::', then it might be one of
6499      these.  */
6500   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
6501     {
6502       enum rid keyword;
6503 
6504       /* See if the token after the `::' is one of the keywords in
6505 	 which we're interested.  */
6506       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
6507       /* If it's `new', we have a new-expression.  */
6508       if (keyword == RID_NEW)
6509 	return cp_parser_new_expression (parser);
6510       /* Similarly, for `delete'.  */
6511       else if (keyword == RID_DELETE)
6512 	return cp_parser_delete_expression (parser);
6513     }
6514 
6515   /* Look for a unary operator.  */
6516   unary_operator = cp_parser_unary_operator (token);
6517   /* The `++' and `--' operators can be handled similarly, even though
6518      they are not technically unary-operators in the grammar.  */
6519   if (unary_operator == ERROR_MARK)
6520     {
6521       if (token->type == CPP_PLUS_PLUS)
6522 	unary_operator = PREINCREMENT_EXPR;
6523       else if (token->type == CPP_MINUS_MINUS)
6524 	unary_operator = PREDECREMENT_EXPR;
6525       /* Handle the GNU address-of-label extension.  */
6526       else if (cp_parser_allow_gnu_extensions_p (parser)
6527 	       && token->type == CPP_AND_AND)
6528 	{
6529 	  tree identifier;
6530 	  tree expression;
6531 	  location_t loc = cp_lexer_peek_token (parser->lexer)->location;
6532 
6533 	  /* Consume the '&&' token.  */
6534 	  cp_lexer_consume_token (parser->lexer);
6535 	  /* Look for the identifier.  */
6536 	  identifier = cp_parser_identifier (parser);
6537 	  /* Create an expression representing the address.  */
6538 	  expression = finish_label_address_expr (identifier, loc);
6539 	  if (cp_parser_non_integral_constant_expression (parser,
6540 							  NIC_ADDR_LABEL))
6541 	    expression = error_mark_node;
6542 	  return expression;
6543 	}
6544     }
6545   if (unary_operator != ERROR_MARK)
6546     {
6547       tree cast_expression;
6548       tree expression = error_mark_node;
6549       non_integral_constant non_constant_p = NIC_NONE;
6550 
6551       /* Consume the operator token.  */
6552       token = cp_lexer_consume_token (parser->lexer);
6553       /* Parse the cast-expression.  */
6554       cast_expression
6555 	= cp_parser_cast_expression (parser,
6556 				     unary_operator == ADDR_EXPR,
6557 				     /*cast_p=*/false, pidk);
6558       /* Now, build an appropriate representation.  */
6559       switch (unary_operator)
6560 	{
6561 	case INDIRECT_REF:
6562 	  non_constant_p = NIC_STAR;
6563 	  expression = build_x_indirect_ref (cast_expression, RO_UNARY_STAR,
6564                                              tf_warning_or_error);
6565 	  break;
6566 
6567 	case ADDR_EXPR:
6568 	   non_constant_p = NIC_ADDR;
6569 	  /* Fall through.  */
6570 	case BIT_NOT_EXPR:
6571 	  expression = build_x_unary_op (unary_operator, cast_expression,
6572                                          tf_warning_or_error);
6573 	  break;
6574 
6575 	case PREINCREMENT_EXPR:
6576 	case PREDECREMENT_EXPR:
6577 	  non_constant_p = unary_operator == PREINCREMENT_EXPR
6578 			   ? NIC_PREINCREMENT : NIC_PREDECREMENT;
6579 	  /* Fall through.  */
6580 	case UNARY_PLUS_EXPR:
6581 	case NEGATE_EXPR:
6582 	case TRUTH_NOT_EXPR:
6583 	  expression = finish_unary_op_expr (unary_operator, cast_expression);
6584 	  break;
6585 
6586 	default:
6587 	  gcc_unreachable ();
6588 	}
6589 
6590       if (non_constant_p != NIC_NONE
6591 	  && cp_parser_non_integral_constant_expression (parser,
6592 							 non_constant_p))
6593 	expression = error_mark_node;
6594 
6595       return expression;
6596     }
6597 
6598   return cp_parser_postfix_expression (parser, address_p, cast_p,
6599                                        /*member_access_only_p=*/false,
6600 				       pidk);
6601 }
6602 
6603 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
6604    unary-operator, the corresponding tree code is returned.  */
6605 
6606 static enum tree_code
6607 cp_parser_unary_operator (cp_token* token)
6608 {
6609   switch (token->type)
6610     {
6611     case CPP_MULT:
6612       return INDIRECT_REF;
6613 
6614     case CPP_AND:
6615       return ADDR_EXPR;
6616 
6617     case CPP_PLUS:
6618       return UNARY_PLUS_EXPR;
6619 
6620     case CPP_MINUS:
6621       return NEGATE_EXPR;
6622 
6623     case CPP_NOT:
6624       return TRUTH_NOT_EXPR;
6625 
6626     case CPP_COMPL:
6627       return BIT_NOT_EXPR;
6628 
6629     default:
6630       return ERROR_MARK;
6631     }
6632 }
6633 
6634 /* Parse a new-expression.
6635 
6636    new-expression:
6637      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
6638      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
6639 
6640    Returns a representation of the expression.  */
6641 
6642 static tree
6643 cp_parser_new_expression (cp_parser* parser)
6644 {
6645   bool global_scope_p;
6646   VEC(tree,gc) *placement;
6647   tree type;
6648   VEC(tree,gc) *initializer;
6649   tree nelts;
6650   tree ret;
6651 
6652   /* Look for the optional `::' operator.  */
6653   global_scope_p
6654     = (cp_parser_global_scope_opt (parser,
6655 				   /*current_scope_valid_p=*/false)
6656        != NULL_TREE);
6657   /* Look for the `new' operator.  */
6658   cp_parser_require_keyword (parser, RID_NEW, RT_NEW);
6659   /* There's no easy way to tell a new-placement from the
6660      `( type-id )' construct.  */
6661   cp_parser_parse_tentatively (parser);
6662   /* Look for a new-placement.  */
6663   placement = cp_parser_new_placement (parser);
6664   /* If that didn't work out, there's no new-placement.  */
6665   if (!cp_parser_parse_definitely (parser))
6666     {
6667       if (placement != NULL)
6668 	release_tree_vector (placement);
6669       placement = NULL;
6670     }
6671 
6672   /* If the next token is a `(', then we have a parenthesized
6673      type-id.  */
6674   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
6675     {
6676       cp_token *token;
6677       const char *saved_message = parser->type_definition_forbidden_message;
6678 
6679       /* Consume the `('.  */
6680       cp_lexer_consume_token (parser->lexer);
6681 
6682       /* Parse the type-id.  */
6683       parser->type_definition_forbidden_message
6684 	= G_("types may not be defined in a new-expression");
6685       type = cp_parser_type_id (parser);
6686       parser->type_definition_forbidden_message = saved_message;
6687 
6688       /* Look for the closing `)'.  */
6689       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
6690       token = cp_lexer_peek_token (parser->lexer);
6691       /* There should not be a direct-new-declarator in this production,
6692 	 but GCC used to allowed this, so we check and emit a sensible error
6693 	 message for this case.  */
6694       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6695 	{
6696 	  error_at (token->location,
6697 		    "array bound forbidden after parenthesized type-id");
6698 	  inform (token->location,
6699 		  "try removing the parentheses around the type-id");
6700 	  cp_parser_direct_new_declarator (parser);
6701 	}
6702       nelts = NULL_TREE;
6703     }
6704   /* Otherwise, there must be a new-type-id.  */
6705   else
6706     type = cp_parser_new_type_id (parser, &nelts);
6707 
6708   /* If the next token is a `(' or '{', then we have a new-initializer.  */
6709   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
6710       || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6711     initializer = cp_parser_new_initializer (parser);
6712   else
6713     initializer = NULL;
6714 
6715   /* A new-expression may not appear in an integral constant
6716      expression.  */
6717   if (cp_parser_non_integral_constant_expression (parser, NIC_NEW))
6718     ret = error_mark_node;
6719   else
6720     {
6721       /* Create a representation of the new-expression.  */
6722       ret = build_new (&placement, type, nelts, &initializer, global_scope_p,
6723 		       tf_warning_or_error);
6724     }
6725 
6726   if (placement != NULL)
6727     release_tree_vector (placement);
6728   if (initializer != NULL)
6729     release_tree_vector (initializer);
6730 
6731   return ret;
6732 }
6733 
6734 /* Parse a new-placement.
6735 
6736    new-placement:
6737      ( expression-list )
6738 
6739    Returns the same representation as for an expression-list.  */
6740 
6741 static VEC(tree,gc) *
6742 cp_parser_new_placement (cp_parser* parser)
6743 {
6744   VEC(tree,gc) *expression_list;
6745 
6746   /* Parse the expression-list.  */
6747   expression_list = (cp_parser_parenthesized_expression_list
6748 		     (parser, non_attr, /*cast_p=*/false,
6749 		      /*allow_expansion_p=*/true,
6750 		      /*non_constant_p=*/NULL));
6751 
6752   return expression_list;
6753 }
6754 
6755 /* Parse a new-type-id.
6756 
6757    new-type-id:
6758      type-specifier-seq new-declarator [opt]
6759 
6760    Returns the TYPE allocated.  If the new-type-id indicates an array
6761    type, *NELTS is set to the number of elements in the last array
6762    bound; the TYPE will not include the last array bound.  */
6763 
6764 static tree
6765 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
6766 {
6767   cp_decl_specifier_seq type_specifier_seq;
6768   cp_declarator *new_declarator;
6769   cp_declarator *declarator;
6770   cp_declarator *outer_declarator;
6771   const char *saved_message;
6772   tree type;
6773 
6774   /* The type-specifier sequence must not contain type definitions.
6775      (It cannot contain declarations of new types either, but if they
6776      are not definitions we will catch that because they are not
6777      complete.)  */
6778   saved_message = parser->type_definition_forbidden_message;
6779   parser->type_definition_forbidden_message
6780     = G_("types may not be defined in a new-type-id");
6781   /* Parse the type-specifier-seq.  */
6782   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
6783 				/*is_trailing_return=*/false,
6784 				&type_specifier_seq);
6785   /* Restore the old message.  */
6786   parser->type_definition_forbidden_message = saved_message;
6787   /* Parse the new-declarator.  */
6788   new_declarator = cp_parser_new_declarator_opt (parser);
6789 
6790   /* Determine the number of elements in the last array dimension, if
6791      any.  */
6792   *nelts = NULL_TREE;
6793   /* Skip down to the last array dimension.  */
6794   declarator = new_declarator;
6795   outer_declarator = NULL;
6796   while (declarator && (declarator->kind == cdk_pointer
6797 			|| declarator->kind == cdk_ptrmem))
6798     {
6799       outer_declarator = declarator;
6800       declarator = declarator->declarator;
6801     }
6802   while (declarator
6803 	 && declarator->kind == cdk_array
6804 	 && declarator->declarator
6805 	 && declarator->declarator->kind == cdk_array)
6806     {
6807       outer_declarator = declarator;
6808       declarator = declarator->declarator;
6809     }
6810 
6811   if (declarator && declarator->kind == cdk_array)
6812     {
6813       *nelts = declarator->u.array.bounds;
6814       if (*nelts == error_mark_node)
6815 	*nelts = integer_one_node;
6816 
6817       if (outer_declarator)
6818 	outer_declarator->declarator = declarator->declarator;
6819       else
6820 	new_declarator = NULL;
6821     }
6822 
6823   type = groktypename (&type_specifier_seq, new_declarator, false);
6824   return type;
6825 }
6826 
6827 /* Parse an (optional) new-declarator.
6828 
6829    new-declarator:
6830      ptr-operator new-declarator [opt]
6831      direct-new-declarator
6832 
6833    Returns the declarator.  */
6834 
6835 static cp_declarator *
6836 cp_parser_new_declarator_opt (cp_parser* parser)
6837 {
6838   enum tree_code code;
6839   tree type;
6840   cp_cv_quals cv_quals;
6841 
6842   /* We don't know if there's a ptr-operator next, or not.  */
6843   cp_parser_parse_tentatively (parser);
6844   /* Look for a ptr-operator.  */
6845   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
6846   /* If that worked, look for more new-declarators.  */
6847   if (cp_parser_parse_definitely (parser))
6848     {
6849       cp_declarator *declarator;
6850 
6851       /* Parse another optional declarator.  */
6852       declarator = cp_parser_new_declarator_opt (parser);
6853 
6854       return cp_parser_make_indirect_declarator
6855 	(code, type, cv_quals, declarator);
6856     }
6857 
6858   /* If the next token is a `[', there is a direct-new-declarator.  */
6859   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6860     return cp_parser_direct_new_declarator (parser);
6861 
6862   return NULL;
6863 }
6864 
6865 /* Parse a direct-new-declarator.
6866 
6867    direct-new-declarator:
6868      [ expression ]
6869      direct-new-declarator [constant-expression]
6870 
6871    */
6872 
6873 static cp_declarator *
6874 cp_parser_direct_new_declarator (cp_parser* parser)
6875 {
6876   cp_declarator *declarator = NULL;
6877 
6878   while (true)
6879     {
6880       tree expression;
6881 
6882       /* Look for the opening `['.  */
6883       cp_parser_require (parser, CPP_OPEN_SQUARE, RT_OPEN_SQUARE);
6884       /* The first expression is not required to be constant.  */
6885       if (!declarator)
6886 	{
6887 	  cp_token *token = cp_lexer_peek_token (parser->lexer);
6888 	  expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
6889 	  /* The standard requires that the expression have integral
6890 	     type.  DR 74 adds enumeration types.  We believe that the
6891 	     real intent is that these expressions be handled like the
6892 	     expression in a `switch' condition, which also allows
6893 	     classes with a single conversion to integral or
6894 	     enumeration type.  */
6895 	  if (!processing_template_decl)
6896 	    {
6897 	      expression
6898 		= build_expr_type_conversion (WANT_INT | WANT_ENUM,
6899 					      expression,
6900 					      /*complain=*/true);
6901 	      if (!expression)
6902 		{
6903 		  error_at (token->location,
6904 			    "expression in new-declarator must have integral "
6905 			    "or enumeration type");
6906 		  expression = error_mark_node;
6907 		}
6908 	    }
6909 	}
6910       /* But all the other expressions must be.  */
6911       else
6912 	expression
6913 	  = cp_parser_constant_expression (parser,
6914 					   /*allow_non_constant=*/false,
6915 					   NULL);
6916       /* Look for the closing `]'.  */
6917       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
6918 
6919       /* Add this bound to the declarator.  */
6920       declarator = make_array_declarator (declarator, expression);
6921 
6922       /* If the next token is not a `[', then there are no more
6923 	 bounds.  */
6924       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
6925 	break;
6926     }
6927 
6928   return declarator;
6929 }
6930 
6931 /* Parse a new-initializer.
6932 
6933    new-initializer:
6934      ( expression-list [opt] )
6935      braced-init-list
6936 
6937    Returns a representation of the expression-list.  */
6938 
6939 static VEC(tree,gc) *
6940 cp_parser_new_initializer (cp_parser* parser)
6941 {
6942   VEC(tree,gc) *expression_list;
6943 
6944   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6945     {
6946       tree t;
6947       bool expr_non_constant_p;
6948       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6949       t = cp_parser_braced_list (parser, &expr_non_constant_p);
6950       CONSTRUCTOR_IS_DIRECT_INIT (t) = 1;
6951       expression_list = make_tree_vector_single (t);
6952     }
6953   else
6954     expression_list = (cp_parser_parenthesized_expression_list
6955 		       (parser, non_attr, /*cast_p=*/false,
6956 			/*allow_expansion_p=*/true,
6957 			/*non_constant_p=*/NULL));
6958 
6959   return expression_list;
6960 }
6961 
6962 /* Parse a delete-expression.
6963 
6964    delete-expression:
6965      :: [opt] delete cast-expression
6966      :: [opt] delete [ ] cast-expression
6967 
6968    Returns a representation of the expression.  */
6969 
6970 static tree
6971 cp_parser_delete_expression (cp_parser* parser)
6972 {
6973   bool global_scope_p;
6974   bool array_p;
6975   tree expression;
6976 
6977   /* Look for the optional `::' operator.  */
6978   global_scope_p
6979     = (cp_parser_global_scope_opt (parser,
6980 				   /*current_scope_valid_p=*/false)
6981        != NULL_TREE);
6982   /* Look for the `delete' keyword.  */
6983   cp_parser_require_keyword (parser, RID_DELETE, RT_DELETE);
6984   /* See if the array syntax is in use.  */
6985   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6986     {
6987       /* Consume the `[' token.  */
6988       cp_lexer_consume_token (parser->lexer);
6989       /* Look for the `]' token.  */
6990       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
6991       /* Remember that this is the `[]' construct.  */
6992       array_p = true;
6993     }
6994   else
6995     array_p = false;
6996 
6997   /* Parse the cast-expression.  */
6998   expression = cp_parser_simple_cast_expression (parser);
6999 
7000   /* A delete-expression may not appear in an integral constant
7001      expression.  */
7002   if (cp_parser_non_integral_constant_expression (parser, NIC_DEL))
7003     return error_mark_node;
7004 
7005   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p,
7006 			tf_warning_or_error);
7007 }
7008 
7009 /* Returns true if TOKEN may start a cast-expression and false
7010    otherwise.  */
7011 
7012 static bool
7013 cp_parser_tokens_start_cast_expression (cp_parser *parser)
7014 {
7015   cp_token *token = cp_lexer_peek_token (parser->lexer);
7016   switch (token->type)
7017     {
7018     case CPP_COMMA:
7019     case CPP_SEMICOLON:
7020     case CPP_QUERY:
7021     case CPP_COLON:
7022     case CPP_CLOSE_SQUARE:
7023     case CPP_CLOSE_PAREN:
7024     case CPP_CLOSE_BRACE:
7025     case CPP_DOT:
7026     case CPP_DOT_STAR:
7027     case CPP_DEREF:
7028     case CPP_DEREF_STAR:
7029     case CPP_DIV:
7030     case CPP_MOD:
7031     case CPP_LSHIFT:
7032     case CPP_RSHIFT:
7033     case CPP_LESS:
7034     case CPP_GREATER:
7035     case CPP_LESS_EQ:
7036     case CPP_GREATER_EQ:
7037     case CPP_EQ_EQ:
7038     case CPP_NOT_EQ:
7039     case CPP_EQ:
7040     case CPP_MULT_EQ:
7041     case CPP_DIV_EQ:
7042     case CPP_MOD_EQ:
7043     case CPP_PLUS_EQ:
7044     case CPP_MINUS_EQ:
7045     case CPP_RSHIFT_EQ:
7046     case CPP_LSHIFT_EQ:
7047     case CPP_AND_EQ:
7048     case CPP_XOR_EQ:
7049     case CPP_OR_EQ:
7050     case CPP_XOR:
7051     case CPP_OR:
7052     case CPP_OR_OR:
7053     case CPP_EOF:
7054       return false;
7055 
7056     case CPP_OPEN_PAREN:
7057       /* In ((type ()) () the last () isn't a valid cast-expression,
7058 	 so the whole must be parsed as postfix-expression.  */
7059       return cp_lexer_peek_nth_token (parser->lexer, 2)->type
7060 	     != CPP_CLOSE_PAREN;
7061 
7062       /* '[' may start a primary-expression in obj-c++.  */
7063     case CPP_OPEN_SQUARE:
7064       return c_dialect_objc ();
7065 
7066     default:
7067       return true;
7068     }
7069 }
7070 
7071 /* Parse a cast-expression.
7072 
7073    cast-expression:
7074      unary-expression
7075      ( type-id ) cast-expression
7076 
7077    ADDRESS_P is true iff the unary-expression is appearing as the
7078    operand of the `&' operator.   CAST_P is true if this expression is
7079    the target of a cast.
7080 
7081    Returns a representation of the expression.  */
7082 
7083 static tree
7084 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p,
7085 			   cp_id_kind * pidk)
7086 {
7087   /* If it's a `(', then we might be looking at a cast.  */
7088   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
7089     {
7090       tree type = NULL_TREE;
7091       tree expr = NULL_TREE;
7092       bool compound_literal_p;
7093       const char *saved_message;
7094 
7095       /* There's no way to know yet whether or not this is a cast.
7096 	 For example, `(int (3))' is a unary-expression, while `(int)
7097 	 3' is a cast.  So, we resort to parsing tentatively.  */
7098       cp_parser_parse_tentatively (parser);
7099       /* Types may not be defined in a cast.  */
7100       saved_message = parser->type_definition_forbidden_message;
7101       parser->type_definition_forbidden_message
7102 	= G_("types may not be defined in casts");
7103       /* Consume the `('.  */
7104       cp_lexer_consume_token (parser->lexer);
7105       /* A very tricky bit is that `(struct S) { 3 }' is a
7106 	 compound-literal (which we permit in C++ as an extension).
7107 	 But, that construct is not a cast-expression -- it is a
7108 	 postfix-expression.  (The reason is that `(struct S) { 3 }.i'
7109 	 is legal; if the compound-literal were a cast-expression,
7110 	 you'd need an extra set of parentheses.)  But, if we parse
7111 	 the type-id, and it happens to be a class-specifier, then we
7112 	 will commit to the parse at that point, because we cannot
7113 	 undo the action that is done when creating a new class.  So,
7114 	 then we cannot back up and do a postfix-expression.
7115 
7116 	 Therefore, we scan ahead to the closing `)', and check to see
7117 	 if the token after the `)' is a `{'.  If so, we are not
7118 	 looking at a cast-expression.
7119 
7120 	 Save tokens so that we can put them back.  */
7121       cp_lexer_save_tokens (parser->lexer);
7122       /* Skip tokens until the next token is a closing parenthesis.
7123 	 If we find the closing `)', and the next token is a `{', then
7124 	 we are looking at a compound-literal.  */
7125       compound_literal_p
7126 	= (cp_parser_skip_to_closing_parenthesis (parser, false, false,
7127 						  /*consume_paren=*/true)
7128 	   && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
7129       /* Roll back the tokens we skipped.  */
7130       cp_lexer_rollback_tokens (parser->lexer);
7131       /* If we were looking at a compound-literal, simulate an error
7132 	 so that the call to cp_parser_parse_definitely below will
7133 	 fail.  */
7134       if (compound_literal_p)
7135 	cp_parser_simulate_error (parser);
7136       else
7137 	{
7138 	  bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
7139 	  parser->in_type_id_in_expr_p = true;
7140 	  /* Look for the type-id.  */
7141 	  type = cp_parser_type_id (parser);
7142 	  /* Look for the closing `)'.  */
7143 	  cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7144 	  parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
7145 	}
7146 
7147       /* Restore the saved message.  */
7148       parser->type_definition_forbidden_message = saved_message;
7149 
7150       /* At this point this can only be either a cast or a
7151 	 parenthesized ctor such as `(T ())' that looks like a cast to
7152 	 function returning T.  */
7153       if (!cp_parser_error_occurred (parser)
7154 	  && cp_parser_tokens_start_cast_expression (parser))
7155 	{
7156 	  cp_parser_parse_definitely (parser);
7157 	  expr = cp_parser_cast_expression (parser,
7158 					    /*address_p=*/false,
7159 					    /*cast_p=*/true, pidk);
7160 
7161 	  /* Warn about old-style casts, if so requested.  */
7162 	  if (warn_old_style_cast
7163 	      && !in_system_header
7164 	      && !VOID_TYPE_P (type)
7165 	      && current_lang_name != lang_name_c)
7166 	    warning (OPT_Wold_style_cast, "use of old-style cast");
7167 
7168 	  /* Only type conversions to integral or enumeration types
7169 	     can be used in constant-expressions.  */
7170 	  if (!cast_valid_in_integral_constant_expression_p (type)
7171 	      && cp_parser_non_integral_constant_expression (parser,
7172 							     NIC_CAST))
7173 	    return error_mark_node;
7174 
7175 	  /* Perform the cast.  */
7176 	  expr = build_c_cast (input_location, type, expr);
7177 	  return expr;
7178 	}
7179       else
7180         cp_parser_abort_tentative_parse (parser);
7181     }
7182 
7183   /* If we get here, then it's not a cast, so it must be a
7184      unary-expression.  */
7185   return cp_parser_unary_expression (parser, address_p, cast_p, pidk);
7186 }
7187 
7188 /* Parse a binary expression of the general form:
7189 
7190    pm-expression:
7191      cast-expression
7192      pm-expression .* cast-expression
7193      pm-expression ->* cast-expression
7194 
7195    multiplicative-expression:
7196      pm-expression
7197      multiplicative-expression * pm-expression
7198      multiplicative-expression / pm-expression
7199      multiplicative-expression % pm-expression
7200 
7201    additive-expression:
7202      multiplicative-expression
7203      additive-expression + multiplicative-expression
7204      additive-expression - multiplicative-expression
7205 
7206    shift-expression:
7207      additive-expression
7208      shift-expression << additive-expression
7209      shift-expression >> additive-expression
7210 
7211    relational-expression:
7212      shift-expression
7213      relational-expression < shift-expression
7214      relational-expression > shift-expression
7215      relational-expression <= shift-expression
7216      relational-expression >= shift-expression
7217 
7218   GNU Extension:
7219 
7220    relational-expression:
7221      relational-expression <? shift-expression
7222      relational-expression >? shift-expression
7223 
7224    equality-expression:
7225      relational-expression
7226      equality-expression == relational-expression
7227      equality-expression != relational-expression
7228 
7229    and-expression:
7230      equality-expression
7231      and-expression & equality-expression
7232 
7233    exclusive-or-expression:
7234      and-expression
7235      exclusive-or-expression ^ and-expression
7236 
7237    inclusive-or-expression:
7238      exclusive-or-expression
7239      inclusive-or-expression | exclusive-or-expression
7240 
7241    logical-and-expression:
7242      inclusive-or-expression
7243      logical-and-expression && inclusive-or-expression
7244 
7245    logical-or-expression:
7246      logical-and-expression
7247      logical-or-expression || logical-and-expression
7248 
7249    All these are implemented with a single function like:
7250 
7251    binary-expression:
7252      simple-cast-expression
7253      binary-expression <token> binary-expression
7254 
7255    CAST_P is true if this expression is the target of a cast.
7256 
7257    The binops_by_token map is used to get the tree codes for each <token> type.
7258    binary-expressions are associated according to a precedence table.  */
7259 
7260 #define TOKEN_PRECEDENCE(token)				     \
7261 (((token->type == CPP_GREATER				     \
7262    || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT)) \
7263   && !parser->greater_than_is_operator_p)		     \
7264  ? PREC_NOT_OPERATOR					     \
7265  : binops_by_token[token->type].prec)
7266 
7267 static tree
7268 cp_parser_binary_expression (cp_parser* parser, bool cast_p,
7269 			     bool no_toplevel_fold_p,
7270 			     enum cp_parser_prec prec,
7271 			     cp_id_kind * pidk)
7272 {
7273   cp_parser_expression_stack stack;
7274   cp_parser_expression_stack_entry *sp = &stack[0];
7275   tree lhs, rhs;
7276   cp_token *token;
7277   enum tree_code tree_type, lhs_type, rhs_type;
7278   enum cp_parser_prec new_prec, lookahead_prec;
7279   tree overload;
7280 
7281   /* Parse the first expression.  */
7282   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p, pidk);
7283   lhs_type = ERROR_MARK;
7284 
7285   if (cp_parser_error_occurred (parser))
7286     return error_mark_node;
7287 
7288   for (;;)
7289     {
7290       /* Get an operator token.  */
7291       token = cp_lexer_peek_token (parser->lexer);
7292 
7293       if (warn_cxx0x_compat
7294           && token->type == CPP_RSHIFT
7295           && !parser->greater_than_is_operator_p)
7296         {
7297           if (warning_at (token->location, OPT_Wc__0x_compat,
7298 			  "%<>>%> operator is treated as"
7299 			  " two right angle brackets in C++11"))
7300 	    inform (token->location,
7301 		    "suggest parentheses around %<>>%> expression");
7302         }
7303 
7304       new_prec = TOKEN_PRECEDENCE (token);
7305 
7306       /* Popping an entry off the stack means we completed a subexpression:
7307 	 - either we found a token which is not an operator (`>' where it is not
7308 	   an operator, or prec == PREC_NOT_OPERATOR), in which case popping
7309 	   will happen repeatedly;
7310 	 - or, we found an operator which has lower priority.  This is the case
7311 	   where the recursive descent *ascends*, as in `3 * 4 + 5' after
7312 	   parsing `3 * 4'.  */
7313       if (new_prec <= prec)
7314 	{
7315 	  if (sp == stack)
7316 	    break;
7317 	  else
7318 	    goto pop;
7319 	}
7320 
7321      get_rhs:
7322       tree_type = binops_by_token[token->type].tree_type;
7323 
7324       /* We used the operator token.  */
7325       cp_lexer_consume_token (parser->lexer);
7326 
7327       /* For "false && x" or "true || x", x will never be executed;
7328 	 disable warnings while evaluating it.  */
7329       if (tree_type == TRUTH_ANDIF_EXPR)
7330 	c_inhibit_evaluation_warnings += lhs == truthvalue_false_node;
7331       else if (tree_type == TRUTH_ORIF_EXPR)
7332 	c_inhibit_evaluation_warnings += lhs == truthvalue_true_node;
7333 
7334       /* Extract another operand.  It may be the RHS of this expression
7335 	 or the LHS of a new, higher priority expression.  */
7336       rhs = cp_parser_simple_cast_expression (parser);
7337       rhs_type = ERROR_MARK;
7338 
7339       /* Get another operator token.  Look up its precedence to avoid
7340 	 building a useless (immediately popped) stack entry for common
7341 	 cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
7342       token = cp_lexer_peek_token (parser->lexer);
7343       lookahead_prec = TOKEN_PRECEDENCE (token);
7344       if (lookahead_prec > new_prec)
7345 	{
7346 	  /* ... and prepare to parse the RHS of the new, higher priority
7347 	     expression.  Since precedence levels on the stack are
7348 	     monotonically increasing, we do not have to care about
7349 	     stack overflows.  */
7350 	  sp->prec = prec;
7351 	  sp->tree_type = tree_type;
7352 	  sp->lhs = lhs;
7353 	  sp->lhs_type = lhs_type;
7354 	  sp++;
7355 	  lhs = rhs;
7356 	  lhs_type = rhs_type;
7357 	  prec = new_prec;
7358 	  new_prec = lookahead_prec;
7359 	  goto get_rhs;
7360 
7361 	 pop:
7362 	  lookahead_prec = new_prec;
7363 	  /* If the stack is not empty, we have parsed into LHS the right side
7364 	     (`4' in the example above) of an expression we had suspended.
7365 	     We can use the information on the stack to recover the LHS (`3')
7366 	     from the stack together with the tree code (`MULT_EXPR'), and
7367 	     the precedence of the higher level subexpression
7368 	     (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
7369 	     which will be used to actually build the additive expression.  */
7370 	  --sp;
7371 	  prec = sp->prec;
7372 	  tree_type = sp->tree_type;
7373 	  rhs = lhs;
7374 	  rhs_type = lhs_type;
7375 	  lhs = sp->lhs;
7376 	  lhs_type = sp->lhs_type;
7377 	}
7378 
7379       /* Undo the disabling of warnings done above.  */
7380       if (tree_type == TRUTH_ANDIF_EXPR)
7381 	c_inhibit_evaluation_warnings -= lhs == truthvalue_false_node;
7382       else if (tree_type == TRUTH_ORIF_EXPR)
7383 	c_inhibit_evaluation_warnings -= lhs == truthvalue_true_node;
7384 
7385       overload = NULL;
7386       /* ??? Currently we pass lhs_type == ERROR_MARK and rhs_type ==
7387 	 ERROR_MARK for everything that is not a binary expression.
7388 	 This makes warn_about_parentheses miss some warnings that
7389 	 involve unary operators.  For unary expressions we should
7390 	 pass the correct tree_code unless the unary expression was
7391 	 surrounded by parentheses.
7392       */
7393       if (no_toplevel_fold_p
7394 	  && lookahead_prec <= prec
7395 	  && sp == stack
7396 	  && TREE_CODE_CLASS (tree_type) == tcc_comparison)
7397 	lhs = build2 (tree_type, boolean_type_node, lhs, rhs);
7398       else
7399 	lhs = build_x_binary_op (tree_type, lhs, lhs_type, rhs, rhs_type,
7400 				 &overload, tf_warning_or_error);
7401       lhs_type = tree_type;
7402 
7403       /* If the binary operator required the use of an overloaded operator,
7404 	 then this expression cannot be an integral constant-expression.
7405 	 An overloaded operator can be used even if both operands are
7406 	 otherwise permissible in an integral constant-expression if at
7407 	 least one of the operands is of enumeration type.  */
7408 
7409       if (overload
7410 	  && cp_parser_non_integral_constant_expression (parser,
7411 							 NIC_OVERLOADED))
7412 	return error_mark_node;
7413     }
7414 
7415   return lhs;
7416 }
7417 
7418 
7419 /* Parse the `? expression : assignment-expression' part of a
7420    conditional-expression.  The LOGICAL_OR_EXPR is the
7421    logical-or-expression that started the conditional-expression.
7422    Returns a representation of the entire conditional-expression.
7423 
7424    This routine is used by cp_parser_assignment_expression.
7425 
7426      ? expression : assignment-expression
7427 
7428    GNU Extensions:
7429 
7430      ? : assignment-expression */
7431 
7432 static tree
7433 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
7434 {
7435   tree expr;
7436   tree assignment_expr;
7437   struct cp_token *token;
7438 
7439   /* Consume the `?' token.  */
7440   cp_lexer_consume_token (parser->lexer);
7441   token = cp_lexer_peek_token (parser->lexer);
7442   if (cp_parser_allow_gnu_extensions_p (parser)
7443       && token->type == CPP_COLON)
7444     {
7445       pedwarn (token->location, OPT_pedantic,
7446                "ISO C++ does not allow ?: with omitted middle operand");
7447       /* Implicit true clause.  */
7448       expr = NULL_TREE;
7449       c_inhibit_evaluation_warnings += logical_or_expr == truthvalue_true_node;
7450       warn_for_omitted_condop (token->location, logical_or_expr);
7451     }
7452   else
7453     {
7454       bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
7455       parser->colon_corrects_to_scope_p = false;
7456       /* Parse the expression.  */
7457       c_inhibit_evaluation_warnings += logical_or_expr == truthvalue_false_node;
7458       expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
7459       c_inhibit_evaluation_warnings +=
7460 	((logical_or_expr == truthvalue_true_node)
7461 	 - (logical_or_expr == truthvalue_false_node));
7462       parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
7463     }
7464 
7465   /* The next token should be a `:'.  */
7466   cp_parser_require (parser, CPP_COLON, RT_COLON);
7467   /* Parse the assignment-expression.  */
7468   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
7469   c_inhibit_evaluation_warnings -= logical_or_expr == truthvalue_true_node;
7470 
7471   /* Build the conditional-expression.  */
7472   return build_x_conditional_expr (logical_or_expr,
7473 				   expr,
7474 				   assignment_expr,
7475                                    tf_warning_or_error);
7476 }
7477 
7478 /* Parse an assignment-expression.
7479 
7480    assignment-expression:
7481      conditional-expression
7482      logical-or-expression assignment-operator assignment_expression
7483      throw-expression
7484 
7485    CAST_P is true if this expression is the target of a cast.
7486 
7487    Returns a representation for the expression.  */
7488 
7489 static tree
7490 cp_parser_assignment_expression (cp_parser* parser, bool cast_p,
7491 				 cp_id_kind * pidk)
7492 {
7493   tree expr;
7494 
7495   /* If the next token is the `throw' keyword, then we're looking at
7496      a throw-expression.  */
7497   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
7498     expr = cp_parser_throw_expression (parser);
7499   /* Otherwise, it must be that we are looking at a
7500      logical-or-expression.  */
7501   else
7502     {
7503       /* Parse the binary expressions (logical-or-expression).  */
7504       expr = cp_parser_binary_expression (parser, cast_p, false,
7505 					  PREC_NOT_OPERATOR, pidk);
7506       /* If the next token is a `?' then we're actually looking at a
7507 	 conditional-expression.  */
7508       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
7509 	return cp_parser_question_colon_clause (parser, expr);
7510       else
7511 	{
7512 	  enum tree_code assignment_operator;
7513 
7514 	  /* If it's an assignment-operator, we're using the second
7515 	     production.  */
7516 	  assignment_operator
7517 	    = cp_parser_assignment_operator_opt (parser);
7518 	  if (assignment_operator != ERROR_MARK)
7519 	    {
7520 	      bool non_constant_p;
7521 
7522 	      /* Parse the right-hand side of the assignment.  */
7523 	      tree rhs = cp_parser_initializer_clause (parser, &non_constant_p);
7524 
7525 	      if (BRACE_ENCLOSED_INITIALIZER_P (rhs))
7526 		maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
7527 
7528 	      /* An assignment may not appear in a
7529 		 constant-expression.  */
7530 	      if (cp_parser_non_integral_constant_expression (parser,
7531 							      NIC_ASSIGNMENT))
7532 		return error_mark_node;
7533 	      /* Build the assignment expression.  */
7534 	      expr = build_x_modify_expr (expr,
7535 					  assignment_operator,
7536 					  rhs,
7537 					  tf_warning_or_error);
7538 	    }
7539 	}
7540     }
7541 
7542   return expr;
7543 }
7544 
7545 /* Parse an (optional) assignment-operator.
7546 
7547    assignment-operator: one of
7548      = *= /= %= += -= >>= <<= &= ^= |=
7549 
7550    GNU Extension:
7551 
7552    assignment-operator: one of
7553      <?= >?=
7554 
7555    If the next token is an assignment operator, the corresponding tree
7556    code is returned, and the token is consumed.  For example, for
7557    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
7558    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
7559    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
7560    operator, ERROR_MARK is returned.  */
7561 
7562 static enum tree_code
7563 cp_parser_assignment_operator_opt (cp_parser* parser)
7564 {
7565   enum tree_code op;
7566   cp_token *token;
7567 
7568   /* Peek at the next token.  */
7569   token = cp_lexer_peek_token (parser->lexer);
7570 
7571   switch (token->type)
7572     {
7573     case CPP_EQ:
7574       op = NOP_EXPR;
7575       break;
7576 
7577     case CPP_MULT_EQ:
7578       op = MULT_EXPR;
7579       break;
7580 
7581     case CPP_DIV_EQ:
7582       op = TRUNC_DIV_EXPR;
7583       break;
7584 
7585     case CPP_MOD_EQ:
7586       op = TRUNC_MOD_EXPR;
7587       break;
7588 
7589     case CPP_PLUS_EQ:
7590       op = PLUS_EXPR;
7591       break;
7592 
7593     case CPP_MINUS_EQ:
7594       op = MINUS_EXPR;
7595       break;
7596 
7597     case CPP_RSHIFT_EQ:
7598       op = RSHIFT_EXPR;
7599       break;
7600 
7601     case CPP_LSHIFT_EQ:
7602       op = LSHIFT_EXPR;
7603       break;
7604 
7605     case CPP_AND_EQ:
7606       op = BIT_AND_EXPR;
7607       break;
7608 
7609     case CPP_XOR_EQ:
7610       op = BIT_XOR_EXPR;
7611       break;
7612 
7613     case CPP_OR_EQ:
7614       op = BIT_IOR_EXPR;
7615       break;
7616 
7617     default:
7618       /* Nothing else is an assignment operator.  */
7619       op = ERROR_MARK;
7620     }
7621 
7622   /* If it was an assignment operator, consume it.  */
7623   if (op != ERROR_MARK)
7624     cp_lexer_consume_token (parser->lexer);
7625 
7626   return op;
7627 }
7628 
7629 /* Parse an expression.
7630 
7631    expression:
7632      assignment-expression
7633      expression , assignment-expression
7634 
7635    CAST_P is true if this expression is the target of a cast.
7636 
7637    Returns a representation of the expression.  */
7638 
7639 static tree
7640 cp_parser_expression (cp_parser* parser, bool cast_p, cp_id_kind * pidk)
7641 {
7642   tree expression = NULL_TREE;
7643 
7644   while (true)
7645     {
7646       tree assignment_expression;
7647 
7648       /* Parse the next assignment-expression.  */
7649       assignment_expression
7650 	= cp_parser_assignment_expression (parser, cast_p, pidk);
7651       /* If this is the first assignment-expression, we can just
7652 	 save it away.  */
7653       if (!expression)
7654 	expression = assignment_expression;
7655       else
7656 	expression = build_x_compound_expr (expression,
7657 					    assignment_expression,
7658                                             tf_warning_or_error);
7659       /* If the next token is not a comma, then we are done with the
7660 	 expression.  */
7661       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
7662 	break;
7663       /* Consume the `,'.  */
7664       cp_lexer_consume_token (parser->lexer);
7665       /* A comma operator cannot appear in a constant-expression.  */
7666       if (cp_parser_non_integral_constant_expression (parser, NIC_COMMA))
7667 	expression = error_mark_node;
7668     }
7669 
7670   return expression;
7671 }
7672 
7673 /* Parse a constant-expression.
7674 
7675    constant-expression:
7676      conditional-expression
7677 
7678   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
7679   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
7680   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
7681   is false, NON_CONSTANT_P should be NULL.  */
7682 
7683 static tree
7684 cp_parser_constant_expression (cp_parser* parser,
7685 			       bool allow_non_constant_p,
7686 			       bool *non_constant_p)
7687 {
7688   bool saved_integral_constant_expression_p;
7689   bool saved_allow_non_integral_constant_expression_p;
7690   bool saved_non_integral_constant_expression_p;
7691   tree expression;
7692 
7693   /* It might seem that we could simply parse the
7694      conditional-expression, and then check to see if it were
7695      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
7696      one that the compiler can figure out is constant, possibly after
7697      doing some simplifications or optimizations.  The standard has a
7698      precise definition of constant-expression, and we must honor
7699      that, even though it is somewhat more restrictive.
7700 
7701      For example:
7702 
7703        int i[(2, 3)];
7704 
7705      is not a legal declaration, because `(2, 3)' is not a
7706      constant-expression.  The `,' operator is forbidden in a
7707      constant-expression.  However, GCC's constant-folding machinery
7708      will fold this operation to an INTEGER_CST for `3'.  */
7709 
7710   /* Save the old settings.  */
7711   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
7712   saved_allow_non_integral_constant_expression_p
7713     = parser->allow_non_integral_constant_expression_p;
7714   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
7715   /* We are now parsing a constant-expression.  */
7716   parser->integral_constant_expression_p = true;
7717   parser->allow_non_integral_constant_expression_p
7718     = (allow_non_constant_p || cxx_dialect >= cxx0x);
7719   parser->non_integral_constant_expression_p = false;
7720   /* Although the grammar says "conditional-expression", we parse an
7721      "assignment-expression", which also permits "throw-expression"
7722      and the use of assignment operators.  In the case that
7723      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
7724      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
7725      actually essential that we look for an assignment-expression.
7726      For example, cp_parser_initializer_clauses uses this function to
7727      determine whether a particular assignment-expression is in fact
7728      constant.  */
7729   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
7730   /* Restore the old settings.  */
7731   parser->integral_constant_expression_p
7732     = saved_integral_constant_expression_p;
7733   parser->allow_non_integral_constant_expression_p
7734     = saved_allow_non_integral_constant_expression_p;
7735   if (cxx_dialect >= cxx0x)
7736     {
7737       /* Require an rvalue constant expression here; that's what our
7738 	 callers expect.  Reference constant expressions are handled
7739 	 separately in e.g. cp_parser_template_argument.  */
7740       bool is_const = potential_rvalue_constant_expression (expression);
7741       parser->non_integral_constant_expression_p = !is_const;
7742       if (!is_const && !allow_non_constant_p)
7743 	require_potential_rvalue_constant_expression (expression);
7744     }
7745   if (allow_non_constant_p)
7746     *non_constant_p = parser->non_integral_constant_expression_p;
7747   parser->non_integral_constant_expression_p
7748     = saved_non_integral_constant_expression_p;
7749 
7750   return expression;
7751 }
7752 
7753 /* Parse __builtin_offsetof.
7754 
7755    offsetof-expression:
7756      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
7757 
7758    offsetof-member-designator:
7759      id-expression
7760      | offsetof-member-designator "." id-expression
7761      | offsetof-member-designator "[" expression "]"
7762      | offsetof-member-designator "->" id-expression  */
7763 
7764 static tree
7765 cp_parser_builtin_offsetof (cp_parser *parser)
7766 {
7767   int save_ice_p, save_non_ice_p;
7768   tree type, expr;
7769   cp_id_kind dummy;
7770   cp_token *token;
7771 
7772   /* We're about to accept non-integral-constant things, but will
7773      definitely yield an integral constant expression.  Save and
7774      restore these values around our local parsing.  */
7775   save_ice_p = parser->integral_constant_expression_p;
7776   save_non_ice_p = parser->non_integral_constant_expression_p;
7777 
7778   /* Consume the "__builtin_offsetof" token.  */
7779   cp_lexer_consume_token (parser->lexer);
7780   /* Consume the opening `('.  */
7781   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
7782   /* Parse the type-id.  */
7783   type = cp_parser_type_id (parser);
7784   /* Look for the `,'.  */
7785   cp_parser_require (parser, CPP_COMMA, RT_COMMA);
7786   token = cp_lexer_peek_token (parser->lexer);
7787 
7788   /* Build the (type *)null that begins the traditional offsetof macro.  */
7789   expr = build_static_cast (build_pointer_type (type), null_pointer_node,
7790                             tf_warning_or_error);
7791 
7792   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
7793   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
7794 						 true, &dummy, token->location);
7795   while (true)
7796     {
7797       token = cp_lexer_peek_token (parser->lexer);
7798       switch (token->type)
7799 	{
7800 	case CPP_OPEN_SQUARE:
7801 	  /* offsetof-member-designator "[" expression "]" */
7802 	  expr = cp_parser_postfix_open_square_expression (parser, expr, true);
7803 	  break;
7804 
7805 	case CPP_DEREF:
7806 	  /* offsetof-member-designator "->" identifier */
7807 	  expr = grok_array_decl (expr, integer_zero_node);
7808 	  /* FALLTHRU */
7809 
7810 	case CPP_DOT:
7811 	  /* offsetof-member-designator "." identifier */
7812 	  cp_lexer_consume_token (parser->lexer);
7813 	  expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT,
7814 							 expr, true, &dummy,
7815 							 token->location);
7816 	  break;
7817 
7818 	case CPP_CLOSE_PAREN:
7819 	  /* Consume the ")" token.  */
7820 	  cp_lexer_consume_token (parser->lexer);
7821 	  goto success;
7822 
7823 	default:
7824 	  /* Error.  We know the following require will fail, but
7825 	     that gives the proper error message.  */
7826 	  cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7827 	  cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
7828 	  expr = error_mark_node;
7829 	  goto failure;
7830 	}
7831     }
7832 
7833  success:
7834   /* If we're processing a template, we can't finish the semantics yet.
7835      Otherwise we can fold the entire expression now.  */
7836   if (processing_template_decl)
7837     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
7838   else
7839     expr = finish_offsetof (expr);
7840 
7841  failure:
7842   parser->integral_constant_expression_p = save_ice_p;
7843   parser->non_integral_constant_expression_p = save_non_ice_p;
7844 
7845   return expr;
7846 }
7847 
7848 /* Parse a trait expression.
7849 
7850    Returns a representation of the expression, the underlying type
7851    of the type at issue when KEYWORD is RID_UNDERLYING_TYPE.  */
7852 
7853 static tree
7854 cp_parser_trait_expr (cp_parser* parser, enum rid keyword)
7855 {
7856   cp_trait_kind kind;
7857   tree type1, type2 = NULL_TREE;
7858   bool binary = false;
7859   cp_decl_specifier_seq decl_specs;
7860 
7861   switch (keyword)
7862     {
7863     case RID_HAS_NOTHROW_ASSIGN:
7864       kind = CPTK_HAS_NOTHROW_ASSIGN;
7865       break;
7866     case RID_HAS_NOTHROW_CONSTRUCTOR:
7867       kind = CPTK_HAS_NOTHROW_CONSTRUCTOR;
7868       break;
7869     case RID_HAS_NOTHROW_COPY:
7870       kind = CPTK_HAS_NOTHROW_COPY;
7871       break;
7872     case RID_HAS_TRIVIAL_ASSIGN:
7873       kind = CPTK_HAS_TRIVIAL_ASSIGN;
7874       break;
7875     case RID_HAS_TRIVIAL_CONSTRUCTOR:
7876       kind = CPTK_HAS_TRIVIAL_CONSTRUCTOR;
7877       break;
7878     case RID_HAS_TRIVIAL_COPY:
7879       kind = CPTK_HAS_TRIVIAL_COPY;
7880       break;
7881     case RID_HAS_TRIVIAL_DESTRUCTOR:
7882       kind = CPTK_HAS_TRIVIAL_DESTRUCTOR;
7883       break;
7884     case RID_HAS_VIRTUAL_DESTRUCTOR:
7885       kind = CPTK_HAS_VIRTUAL_DESTRUCTOR;
7886       break;
7887     case RID_IS_ABSTRACT:
7888       kind = CPTK_IS_ABSTRACT;
7889       break;
7890     case RID_IS_BASE_OF:
7891       kind = CPTK_IS_BASE_OF;
7892       binary = true;
7893       break;
7894     case RID_IS_CLASS:
7895       kind = CPTK_IS_CLASS;
7896       break;
7897     case RID_IS_CONVERTIBLE_TO:
7898       kind = CPTK_IS_CONVERTIBLE_TO;
7899       binary = true;
7900       break;
7901     case RID_IS_EMPTY:
7902       kind = CPTK_IS_EMPTY;
7903       break;
7904     case RID_IS_ENUM:
7905       kind = CPTK_IS_ENUM;
7906       break;
7907     case RID_IS_FINAL:
7908       kind = CPTK_IS_FINAL;
7909       break;
7910     case RID_IS_LITERAL_TYPE:
7911       kind = CPTK_IS_LITERAL_TYPE;
7912       break;
7913     case RID_IS_POD:
7914       kind = CPTK_IS_POD;
7915       break;
7916     case RID_IS_POLYMORPHIC:
7917       kind = CPTK_IS_POLYMORPHIC;
7918       break;
7919     case RID_IS_STD_LAYOUT:
7920       kind = CPTK_IS_STD_LAYOUT;
7921       break;
7922     case RID_IS_TRIVIAL:
7923       kind = CPTK_IS_TRIVIAL;
7924       break;
7925     case RID_IS_UNION:
7926       kind = CPTK_IS_UNION;
7927       break;
7928     case RID_UNDERLYING_TYPE:
7929       kind = CPTK_UNDERLYING_TYPE;
7930       break;
7931     case RID_BASES:
7932       kind = CPTK_BASES;
7933       break;
7934     case RID_DIRECT_BASES:
7935       kind = CPTK_DIRECT_BASES;
7936       break;
7937     default:
7938       gcc_unreachable ();
7939     }
7940 
7941   /* Consume the token.  */
7942   cp_lexer_consume_token (parser->lexer);
7943 
7944   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
7945 
7946   type1 = cp_parser_type_id (parser);
7947 
7948   if (type1 == error_mark_node)
7949     return error_mark_node;
7950 
7951   /* Build a trivial decl-specifier-seq.  */
7952   clear_decl_specs (&decl_specs);
7953   decl_specs.type = type1;
7954 
7955   /* Call grokdeclarator to figure out what type this is.  */
7956   type1 = grokdeclarator (NULL, &decl_specs, TYPENAME,
7957 			  /*initialized=*/0, /*attrlist=*/NULL);
7958 
7959   if (binary)
7960     {
7961       cp_parser_require (parser, CPP_COMMA, RT_COMMA);
7962 
7963       type2 = cp_parser_type_id (parser);
7964 
7965       if (type2 == error_mark_node)
7966 	return error_mark_node;
7967 
7968       /* Build a trivial decl-specifier-seq.  */
7969       clear_decl_specs (&decl_specs);
7970       decl_specs.type = type2;
7971 
7972       /* Call grokdeclarator to figure out what type this is.  */
7973       type2 = grokdeclarator (NULL, &decl_specs, TYPENAME,
7974 			      /*initialized=*/0, /*attrlist=*/NULL);
7975     }
7976 
7977   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7978 
7979   /* Complete the trait expression, which may mean either processing
7980      the trait expr now or saving it for template instantiation.  */
7981   switch(kind)
7982     {
7983     case CPTK_UNDERLYING_TYPE:
7984       return finish_underlying_type (type1);
7985     case CPTK_BASES:
7986       return finish_bases (type1, false);
7987     case CPTK_DIRECT_BASES:
7988       return finish_bases (type1, true);
7989     default:
7990       return finish_trait_expr (kind, type1, type2);
7991     }
7992 }
7993 
7994 /* Lambdas that appear in variable initializer or default argument scope
7995    get that in their mangling, so we need to record it.  We might as well
7996    use the count for function and namespace scopes as well.  */
7997 static GTY(()) tree lambda_scope;
7998 static GTY(()) int lambda_count;
7999 typedef struct GTY(()) tree_int
8000 {
8001   tree t;
8002   int i;
8003 } tree_int;
8004 DEF_VEC_O(tree_int);
8005 DEF_VEC_ALLOC_O(tree_int,gc);
8006 static GTY(()) VEC(tree_int,gc) *lambda_scope_stack;
8007 
8008 static void
8009 start_lambda_scope (tree decl)
8010 {
8011   tree_int ti;
8012   gcc_assert (decl);
8013   /* Once we're inside a function, we ignore other scopes and just push
8014      the function again so that popping works properly.  */
8015   if (current_function_decl && TREE_CODE (decl) != FUNCTION_DECL)
8016     decl = current_function_decl;
8017   ti.t = lambda_scope;
8018   ti.i = lambda_count;
8019   VEC_safe_push (tree_int, gc, lambda_scope_stack, &ti);
8020   if (lambda_scope != decl)
8021     {
8022       /* Don't reset the count if we're still in the same function.  */
8023       lambda_scope = decl;
8024       lambda_count = 0;
8025     }
8026 }
8027 
8028 static void
8029 record_lambda_scope (tree lambda)
8030 {
8031   LAMBDA_EXPR_EXTRA_SCOPE (lambda) = lambda_scope;
8032   LAMBDA_EXPR_DISCRIMINATOR (lambda) = lambda_count++;
8033 }
8034 
8035 static void
8036 finish_lambda_scope (void)
8037 {
8038   tree_int *p = VEC_last (tree_int, lambda_scope_stack);
8039   if (lambda_scope != p->t)
8040     {
8041       lambda_scope = p->t;
8042       lambda_count = p->i;
8043     }
8044   VEC_pop (tree_int, lambda_scope_stack);
8045 }
8046 
8047 /* Parse a lambda expression.
8048 
8049    lambda-expression:
8050      lambda-introducer lambda-declarator [opt] compound-statement
8051 
8052    Returns a representation of the expression.  */
8053 
8054 static tree
8055 cp_parser_lambda_expression (cp_parser* parser)
8056 {
8057   tree lambda_expr = build_lambda_expr ();
8058   tree type;
8059   bool ok;
8060 
8061   LAMBDA_EXPR_LOCATION (lambda_expr)
8062     = cp_lexer_peek_token (parser->lexer)->location;
8063 
8064   if (cp_unevaluated_operand)
8065     error_at (LAMBDA_EXPR_LOCATION (lambda_expr),
8066 	      "lambda-expression in unevaluated context");
8067 
8068   /* We may be in the middle of deferred access check.  Disable
8069      it now.  */
8070   push_deferring_access_checks (dk_no_deferred);
8071 
8072   cp_parser_lambda_introducer (parser, lambda_expr);
8073 
8074   type = begin_lambda_type (lambda_expr);
8075   if (type == error_mark_node)
8076     return error_mark_node;
8077 
8078   record_lambda_scope (lambda_expr);
8079 
8080   /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
8081   determine_visibility (TYPE_NAME (type));
8082 
8083   /* Now that we've started the type, add the capture fields for any
8084      explicit captures.  */
8085   register_capture_members (LAMBDA_EXPR_CAPTURE_LIST (lambda_expr));
8086 
8087   {
8088     /* Inside the class, surrounding template-parameter-lists do not apply.  */
8089     unsigned int saved_num_template_parameter_lists
8090         = parser->num_template_parameter_lists;
8091     unsigned char in_statement = parser->in_statement;
8092     bool in_switch_statement_p = parser->in_switch_statement_p;
8093 
8094     parser->num_template_parameter_lists = 0;
8095     parser->in_statement = 0;
8096     parser->in_switch_statement_p = false;
8097 
8098     /* By virtue of defining a local class, a lambda expression has access to
8099        the private variables of enclosing classes.  */
8100 
8101     ok = cp_parser_lambda_declarator_opt (parser, lambda_expr);
8102 
8103     if (ok)
8104       cp_parser_lambda_body (parser, lambda_expr);
8105     else if (cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
8106       cp_parser_skip_to_end_of_block_or_statement (parser);
8107 
8108     /* The capture list was built up in reverse order; fix that now.  */
8109     {
8110       tree newlist = NULL_TREE;
8111       tree elt, next;
8112 
8113       for (elt = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
8114 	   elt; elt = next)
8115 	{
8116 	  next = TREE_CHAIN (elt);
8117 	  TREE_CHAIN (elt) = newlist;
8118 	  newlist = elt;
8119 	}
8120       LAMBDA_EXPR_CAPTURE_LIST (lambda_expr) = newlist;
8121     }
8122 
8123     if (ok)
8124       maybe_add_lambda_conv_op (type);
8125 
8126     type = finish_struct (type, /*attributes=*/NULL_TREE);
8127 
8128     parser->num_template_parameter_lists = saved_num_template_parameter_lists;
8129     parser->in_statement = in_statement;
8130     parser->in_switch_statement_p = in_switch_statement_p;
8131   }
8132 
8133   pop_deferring_access_checks ();
8134 
8135   /* This field is only used during parsing of the lambda.  */
8136   LAMBDA_EXPR_THIS_CAPTURE (lambda_expr) = NULL_TREE;
8137 
8138   /* This lambda shouldn't have any proxies left at this point.  */
8139   gcc_assert (LAMBDA_EXPR_PENDING_PROXIES (lambda_expr) == NULL);
8140   /* And now that we're done, push proxies for an enclosing lambda.  */
8141   insert_pending_capture_proxies ();
8142 
8143   if (ok)
8144     return build_lambda_object (lambda_expr);
8145   else
8146     return error_mark_node;
8147 }
8148 
8149 /* Parse the beginning of a lambda expression.
8150 
8151    lambda-introducer:
8152      [ lambda-capture [opt] ]
8153 
8154    LAMBDA_EXPR is the current representation of the lambda expression.  */
8155 
8156 static void
8157 cp_parser_lambda_introducer (cp_parser* parser, tree lambda_expr)
8158 {
8159   /* Need commas after the first capture.  */
8160   bool first = true;
8161 
8162   /* Eat the leading `['.  */
8163   cp_parser_require (parser, CPP_OPEN_SQUARE, RT_OPEN_SQUARE);
8164 
8165   /* Record default capture mode.  "[&" "[=" "[&," "[=,"  */
8166   if (cp_lexer_next_token_is (parser->lexer, CPP_AND)
8167       && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_NAME)
8168     LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) = CPLD_REFERENCE;
8169   else if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8170     LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) = CPLD_COPY;
8171 
8172   if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) != CPLD_NONE)
8173     {
8174       cp_lexer_consume_token (parser->lexer);
8175       first = false;
8176     }
8177 
8178   while (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_SQUARE))
8179     {
8180       cp_token* capture_token;
8181       tree capture_id;
8182       tree capture_init_expr;
8183       cp_id_kind idk = CP_ID_KIND_NONE;
8184       bool explicit_init_p = false;
8185 
8186       enum capture_kind_type
8187       {
8188 	BY_COPY,
8189 	BY_REFERENCE
8190       };
8191       enum capture_kind_type capture_kind = BY_COPY;
8192 
8193       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
8194 	{
8195 	  error ("expected end of capture-list");
8196 	  return;
8197 	}
8198 
8199       if (first)
8200 	first = false;
8201       else
8202 	cp_parser_require (parser, CPP_COMMA, RT_COMMA);
8203 
8204       /* Possibly capture `this'.  */
8205       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THIS))
8206 	{
8207 	  location_t loc = cp_lexer_peek_token (parser->lexer)->location;
8208 	  if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) == CPLD_COPY)
8209 	    pedwarn (loc, 0, "explicit by-copy capture of %<this%> redundant "
8210 		     "with by-copy capture default");
8211 	  cp_lexer_consume_token (parser->lexer);
8212 	  add_capture (lambda_expr,
8213 		       /*id=*/this_identifier,
8214 		       /*initializer=*/finish_this_expr(),
8215 		       /*by_reference_p=*/false,
8216 		       explicit_init_p);
8217 	  continue;
8218 	}
8219 
8220       /* Remember whether we want to capture as a reference or not.  */
8221       if (cp_lexer_next_token_is (parser->lexer, CPP_AND))
8222 	{
8223 	  capture_kind = BY_REFERENCE;
8224 	  cp_lexer_consume_token (parser->lexer);
8225 	}
8226 
8227       /* Get the identifier.  */
8228       capture_token = cp_lexer_peek_token (parser->lexer);
8229       capture_id = cp_parser_identifier (parser);
8230 
8231       if (capture_id == error_mark_node)
8232 	/* Would be nice to have a cp_parser_skip_to_closing_x for general
8233            delimiters, but I modified this to stop on unnested ']' as well.  It
8234            was already changed to stop on unnested '}', so the
8235            "closing_parenthesis" name is no more misleading with my change.  */
8236 	{
8237 	  cp_parser_skip_to_closing_parenthesis (parser,
8238 						 /*recovering=*/true,
8239 						 /*or_comma=*/true,
8240 						 /*consume_paren=*/true);
8241 	  break;
8242 	}
8243 
8244       /* Find the initializer for this capture.  */
8245       if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8246 	{
8247 	  /* An explicit expression exists.  */
8248 	  cp_lexer_consume_token (parser->lexer);
8249           pedwarn (input_location, OPT_pedantic,
8250                    "ISO C++ does not allow initializers "
8251                    "in lambda expression capture lists");
8252 	  capture_init_expr = cp_parser_assignment_expression (parser,
8253 							       /*cast_p=*/true,
8254 							       &idk);
8255 	  explicit_init_p = true;
8256 	}
8257       else
8258 	{
8259 	  const char* error_msg;
8260 
8261 	  /* Turn the identifier into an id-expression.  */
8262 	  capture_init_expr
8263             = cp_parser_lookup_name
8264                 (parser,
8265 		 capture_id,
8266                  none_type,
8267                  /*is_template=*/false,
8268                  /*is_namespace=*/false,
8269                  /*check_dependency=*/true,
8270                  /*ambiguous_decls=*/NULL,
8271                  capture_token->location);
8272 
8273 	  if (capture_init_expr == error_mark_node)
8274 	    {
8275 	      unqualified_name_lookup_error (capture_id);
8276 	      continue;
8277 	    }
8278 	  else if (DECL_P (capture_init_expr)
8279 		   && (TREE_CODE (capture_init_expr) != VAR_DECL
8280 		       && TREE_CODE (capture_init_expr) != PARM_DECL))
8281 	    {
8282 	      error_at (capture_token->location,
8283 			"capture of non-variable %qD ",
8284 			capture_init_expr);
8285 	      inform (0, "%q+#D declared here", capture_init_expr);
8286 	      continue;
8287 	    }
8288 	  if (TREE_CODE (capture_init_expr) == VAR_DECL
8289 	      && decl_storage_duration (capture_init_expr) != dk_auto)
8290 	    {
8291 	      pedwarn (capture_token->location, 0, "capture of variable "
8292 		       "%qD with non-automatic storage duration",
8293 		       capture_init_expr);
8294 	      inform (0, "%q+#D declared here", capture_init_expr);
8295 	      continue;
8296 	    }
8297 
8298 	  capture_init_expr
8299             = finish_id_expression
8300                 (capture_id,
8301 		 capture_init_expr,
8302                  parser->scope,
8303                  &idk,
8304                  /*integral_constant_expression_p=*/false,
8305                  /*allow_non_integral_constant_expression_p=*/false,
8306                  /*non_integral_constant_expression_p=*/NULL,
8307                  /*template_p=*/false,
8308                  /*done=*/true,
8309                  /*address_p=*/false,
8310                  /*template_arg_p=*/false,
8311                  &error_msg,
8312                  capture_token->location);
8313 	}
8314 
8315       if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) != CPLD_NONE
8316 	  && !explicit_init_p)
8317 	{
8318 	  if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) == CPLD_COPY
8319 	      && capture_kind == BY_COPY)
8320 	    pedwarn (capture_token->location, 0, "explicit by-copy capture "
8321 		     "of %qD redundant with by-copy capture default",
8322 		     capture_id);
8323 	  if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) == CPLD_REFERENCE
8324 	      && capture_kind == BY_REFERENCE)
8325 	    pedwarn (capture_token->location, 0, "explicit by-reference "
8326 		     "capture of %qD redundant with by-reference capture "
8327 		     "default", capture_id);
8328 	}
8329 
8330       add_capture (lambda_expr,
8331 		   capture_id,
8332 		   capture_init_expr,
8333 		   /*by_reference_p=*/capture_kind == BY_REFERENCE,
8334 		   explicit_init_p);
8335     }
8336 
8337   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
8338 }
8339 
8340 /* Parse the (optional) middle of a lambda expression.
8341 
8342    lambda-declarator:
8343      ( parameter-declaration-clause [opt] )
8344        attribute-specifier [opt]
8345        mutable [opt]
8346        exception-specification [opt]
8347        lambda-return-type-clause [opt]
8348 
8349    LAMBDA_EXPR is the current representation of the lambda expression.  */
8350 
8351 static bool
8352 cp_parser_lambda_declarator_opt (cp_parser* parser, tree lambda_expr)
8353 {
8354   /* 5.1.1.4 of the standard says:
8355        If a lambda-expression does not include a lambda-declarator, it is as if
8356        the lambda-declarator were ().
8357      This means an empty parameter list, no attributes, and no exception
8358      specification.  */
8359   tree param_list = void_list_node;
8360   tree attributes = NULL_TREE;
8361   tree exception_spec = NULL_TREE;
8362   tree t;
8363 
8364   /* The lambda-declarator is optional, but must begin with an opening
8365      parenthesis if present.  */
8366   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
8367     {
8368       cp_lexer_consume_token (parser->lexer);
8369 
8370       begin_scope (sk_function_parms, /*entity=*/NULL_TREE);
8371 
8372       /* Parse parameters.  */
8373       param_list = cp_parser_parameter_declaration_clause (parser);
8374 
8375       /* Default arguments shall not be specified in the
8376 	 parameter-declaration-clause of a lambda-declarator.  */
8377       for (t = param_list; t; t = TREE_CHAIN (t))
8378 	if (TREE_PURPOSE (t))
8379 	  pedwarn (DECL_SOURCE_LOCATION (TREE_VALUE (t)), OPT_pedantic,
8380 		   "default argument specified for lambda parameter");
8381 
8382       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
8383 
8384       attributes = cp_parser_attributes_opt (parser);
8385 
8386       /* Parse optional `mutable' keyword.  */
8387       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_MUTABLE))
8388         {
8389           cp_lexer_consume_token (parser->lexer);
8390           LAMBDA_EXPR_MUTABLE_P (lambda_expr) = 1;
8391         }
8392 
8393       /* Parse optional exception specification.  */
8394       exception_spec = cp_parser_exception_specification_opt (parser);
8395 
8396       /* Parse optional trailing return type.  */
8397       if (cp_lexer_next_token_is (parser->lexer, CPP_DEREF))
8398         {
8399           cp_lexer_consume_token (parser->lexer);
8400           LAMBDA_EXPR_RETURN_TYPE (lambda_expr) = cp_parser_type_id (parser);
8401         }
8402 
8403       /* The function parameters must be in scope all the way until after the
8404          trailing-return-type in case of decltype.  */
8405       for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
8406 	pop_binding (DECL_NAME (t), t);
8407 
8408       leave_scope ();
8409     }
8410 
8411   /* Create the function call operator.
8412 
8413      Messing with declarators like this is no uglier than building up the
8414      FUNCTION_DECL by hand, and this is less likely to get out of sync with
8415      other code.  */
8416   {
8417     cp_decl_specifier_seq return_type_specs;
8418     cp_declarator* declarator;
8419     tree fco;
8420     int quals;
8421     void *p;
8422 
8423     clear_decl_specs (&return_type_specs);
8424     if (LAMBDA_EXPR_RETURN_TYPE (lambda_expr))
8425       return_type_specs.type = LAMBDA_EXPR_RETURN_TYPE (lambda_expr);
8426     else
8427       /* Maybe we will deduce the return type later, but we can use void
8428 	 as a placeholder return type anyways.  */
8429       return_type_specs.type = void_type_node;
8430 
8431     p = obstack_alloc (&declarator_obstack, 0);
8432 
8433     declarator = make_id_declarator (NULL_TREE, ansi_opname (CALL_EXPR),
8434 				     sfk_none);
8435 
8436     quals = (LAMBDA_EXPR_MUTABLE_P (lambda_expr)
8437 	     ? TYPE_UNQUALIFIED : TYPE_QUAL_CONST);
8438     declarator = make_call_declarator (declarator, param_list, quals,
8439 				       VIRT_SPEC_UNSPECIFIED,
8440 				       exception_spec,
8441                                        /*late_return_type=*/NULL_TREE);
8442     declarator->id_loc = LAMBDA_EXPR_LOCATION (lambda_expr);
8443 
8444     fco = grokmethod (&return_type_specs,
8445 		      declarator,
8446 		      attributes);
8447     if (fco != error_mark_node)
8448       {
8449 	DECL_INITIALIZED_IN_CLASS_P (fco) = 1;
8450 	DECL_ARTIFICIAL (fco) = 1;
8451 	/* Give the object parameter a different name.  */
8452 	DECL_NAME (DECL_ARGUMENTS (fco)) = get_identifier ("__closure");
8453       }
8454 
8455     finish_member_declaration (fco);
8456 
8457     obstack_free (&declarator_obstack, p);
8458 
8459     return (fco != error_mark_node);
8460   }
8461 }
8462 
8463 /* Parse the body of a lambda expression, which is simply
8464 
8465    compound-statement
8466 
8467    but which requires special handling.
8468    LAMBDA_EXPR is the current representation of the lambda expression.  */
8469 
8470 static void
8471 cp_parser_lambda_body (cp_parser* parser, tree lambda_expr)
8472 {
8473   bool nested = (current_function_decl != NULL_TREE);
8474   bool local_variables_forbidden_p = parser->local_variables_forbidden_p;
8475   if (nested)
8476     push_function_context ();
8477   else
8478     /* Still increment function_depth so that we don't GC in the
8479        middle of an expression.  */
8480     ++function_depth;
8481   /* Clear this in case we're in the middle of a default argument.  */
8482   parser->local_variables_forbidden_p = false;
8483 
8484   /* Finish the function call operator
8485      - class_specifier
8486      + late_parsing_for_member
8487      + function_definition_after_declarator
8488      + ctor_initializer_opt_and_function_body  */
8489   {
8490     tree fco = lambda_function (lambda_expr);
8491     tree body;
8492     bool done = false;
8493     tree compound_stmt;
8494     tree cap;
8495 
8496     /* Let the front end know that we are going to be defining this
8497        function.  */
8498     start_preparsed_function (fco,
8499 			      NULL_TREE,
8500 			      SF_PRE_PARSED | SF_INCLASS_INLINE);
8501 
8502     start_lambda_scope (fco);
8503     body = begin_function_body ();
8504 
8505     if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
8506       goto out;
8507 
8508     /* Push the proxies for any explicit captures.  */
8509     for (cap = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr); cap;
8510 	 cap = TREE_CHAIN (cap))
8511       build_capture_proxy (TREE_PURPOSE (cap));
8512 
8513     compound_stmt = begin_compound_stmt (0);
8514 
8515     /* 5.1.1.4 of the standard says:
8516          If a lambda-expression does not include a trailing-return-type, it
8517          is as if the trailing-return-type denotes the following type:
8518 	  * if the compound-statement is of the form
8519                { return attribute-specifier [opt] expression ; }
8520              the type of the returned expression after lvalue-to-rvalue
8521              conversion (_conv.lval_ 4.1), array-to-pointer conversion
8522              (_conv.array_ 4.2), and function-to-pointer conversion
8523              (_conv.func_ 4.3);
8524           * otherwise, void.  */
8525 
8526     /* In a lambda that has neither a lambda-return-type-clause
8527        nor a deducible form, errors should be reported for return statements
8528        in the body.  Since we used void as the placeholder return type, parsing
8529        the body as usual will give such desired behavior.  */
8530     if (!LAMBDA_EXPR_RETURN_TYPE (lambda_expr)
8531         && cp_lexer_peek_nth_token (parser->lexer, 1)->keyword == RID_RETURN
8532         && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SEMICOLON)
8533       {
8534 	tree expr = NULL_TREE;
8535 	cp_id_kind idk = CP_ID_KIND_NONE;
8536 
8537 	/* Parse tentatively in case there's more after the initial return
8538 	   statement.  */
8539 	cp_parser_parse_tentatively (parser);
8540 
8541 	cp_parser_require_keyword (parser, RID_RETURN, RT_RETURN);
8542 
8543 	expr = cp_parser_expression (parser, /*cast_p=*/false, &idk);
8544 
8545 	cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
8546 	cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
8547 
8548 	if (cp_parser_parse_definitely (parser))
8549 	  {
8550 	    apply_lambda_return_type (lambda_expr, lambda_return_type (expr));
8551 
8552 	    /* Will get error here if type not deduced yet.  */
8553 	    finish_return_stmt (expr);
8554 
8555 	    done = true;
8556 	  }
8557       }
8558 
8559     if (!done)
8560       {
8561 	if (!LAMBDA_EXPR_RETURN_TYPE (lambda_expr))
8562 	  LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda_expr) = true;
8563 	while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
8564 	  cp_parser_label_declaration (parser);
8565 	cp_parser_statement_seq_opt (parser, NULL_TREE);
8566 	cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
8567 	LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda_expr) = false;
8568       }
8569 
8570     finish_compound_stmt (compound_stmt);
8571 
8572   out:
8573     finish_function_body (body);
8574     finish_lambda_scope ();
8575 
8576     /* Finish the function and generate code for it if necessary.  */
8577     expand_or_defer_fn (finish_function (/*inline*/2));
8578   }
8579 
8580   parser->local_variables_forbidden_p = local_variables_forbidden_p;
8581   if (nested)
8582     pop_function_context();
8583   else
8584     --function_depth;
8585 }
8586 
8587 /* Statements [gram.stmt.stmt]  */
8588 
8589 /* Parse a statement.
8590 
8591    statement:
8592      labeled-statement
8593      expression-statement
8594      compound-statement
8595      selection-statement
8596      iteration-statement
8597      jump-statement
8598      declaration-statement
8599      try-block
8600 
8601   TM Extension:
8602 
8603    statement:
8604      atomic-statement
8605 
8606   IN_COMPOUND is true when the statement is nested inside a
8607   cp_parser_compound_statement; this matters for certain pragmas.
8608 
8609   If IF_P is not NULL, *IF_P is set to indicate whether the statement
8610   is a (possibly labeled) if statement which is not enclosed in braces
8611   and has an else clause.  This is used to implement -Wparentheses.  */
8612 
8613 static void
8614 cp_parser_statement (cp_parser* parser, tree in_statement_expr,
8615 		     bool in_compound, bool *if_p)
8616 {
8617   tree statement;
8618   cp_token *token;
8619   location_t statement_location;
8620 
8621  restart:
8622   if (if_p != NULL)
8623     *if_p = false;
8624   /* There is no statement yet.  */
8625   statement = NULL_TREE;
8626   /* Peek at the next token.  */
8627   token = cp_lexer_peek_token (parser->lexer);
8628   /* Remember the location of the first token in the statement.  */
8629   statement_location = token->location;
8630   /* If this is a keyword, then that will often determine what kind of
8631      statement we have.  */
8632   if (token->type == CPP_KEYWORD)
8633     {
8634       enum rid keyword = token->keyword;
8635 
8636       switch (keyword)
8637 	{
8638 	case RID_CASE:
8639 	case RID_DEFAULT:
8640 	  /* Looks like a labeled-statement with a case label.
8641 	     Parse the label, and then use tail recursion to parse
8642 	     the statement.  */
8643 	  cp_parser_label_for_labeled_statement (parser);
8644 	  goto restart;
8645 
8646 	case RID_IF:
8647 	case RID_SWITCH:
8648 	  statement = cp_parser_selection_statement (parser, if_p);
8649 	  break;
8650 
8651 	case RID_WHILE:
8652 	case RID_DO:
8653 	case RID_FOR:
8654 	  statement = cp_parser_iteration_statement (parser);
8655 	  break;
8656 
8657 	case RID_BREAK:
8658 	case RID_CONTINUE:
8659 	case RID_RETURN:
8660 	case RID_GOTO:
8661 	  statement = cp_parser_jump_statement (parser);
8662 	  break;
8663 
8664 	  /* Objective-C++ exception-handling constructs.  */
8665 	case RID_AT_TRY:
8666 	case RID_AT_CATCH:
8667 	case RID_AT_FINALLY:
8668 	case RID_AT_SYNCHRONIZED:
8669 	case RID_AT_THROW:
8670 	  statement = cp_parser_objc_statement (parser);
8671 	  break;
8672 
8673 	case RID_TRY:
8674 	  statement = cp_parser_try_block (parser);
8675 	  break;
8676 
8677 	case RID_NAMESPACE:
8678 	  /* This must be a namespace alias definition.  */
8679 	  cp_parser_declaration_statement (parser);
8680 	  return;
8681 
8682 	case RID_TRANSACTION_ATOMIC:
8683 	case RID_TRANSACTION_RELAXED:
8684 	  statement = cp_parser_transaction (parser, keyword);
8685 	  break;
8686 	case RID_TRANSACTION_CANCEL:
8687 	  statement = cp_parser_transaction_cancel (parser);
8688 	  break;
8689 
8690 	default:
8691 	  /* It might be a keyword like `int' that can start a
8692 	     declaration-statement.  */
8693 	  break;
8694 	}
8695     }
8696   else if (token->type == CPP_NAME)
8697     {
8698       /* If the next token is a `:', then we are looking at a
8699 	 labeled-statement.  */
8700       token = cp_lexer_peek_nth_token (parser->lexer, 2);
8701       if (token->type == CPP_COLON)
8702 	{
8703 	  /* Looks like a labeled-statement with an ordinary label.
8704 	     Parse the label, and then use tail recursion to parse
8705 	     the statement.  */
8706 	  cp_parser_label_for_labeled_statement (parser);
8707 	  goto restart;
8708 	}
8709     }
8710   /* Anything that starts with a `{' must be a compound-statement.  */
8711   else if (token->type == CPP_OPEN_BRACE)
8712     statement = cp_parser_compound_statement (parser, NULL, false, false);
8713   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
8714      a statement all its own.  */
8715   else if (token->type == CPP_PRAGMA)
8716     {
8717       /* Only certain OpenMP pragmas are attached to statements, and thus
8718 	 are considered statements themselves.  All others are not.  In
8719 	 the context of a compound, accept the pragma as a "statement" and
8720 	 return so that we can check for a close brace.  Otherwise we
8721 	 require a real statement and must go back and read one.  */
8722       if (in_compound)
8723 	cp_parser_pragma (parser, pragma_compound);
8724       else if (!cp_parser_pragma (parser, pragma_stmt))
8725 	goto restart;
8726       return;
8727     }
8728   else if (token->type == CPP_EOF)
8729     {
8730       cp_parser_error (parser, "expected statement");
8731       return;
8732     }
8733 
8734   /* Everything else must be a declaration-statement or an
8735      expression-statement.  Try for the declaration-statement
8736      first, unless we are looking at a `;', in which case we know that
8737      we have an expression-statement.  */
8738   if (!statement)
8739     {
8740       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8741 	{
8742 	  cp_parser_parse_tentatively (parser);
8743 	  /* Try to parse the declaration-statement.  */
8744 	  cp_parser_declaration_statement (parser);
8745 	  /* If that worked, we're done.  */
8746 	  if (cp_parser_parse_definitely (parser))
8747 	    return;
8748 	}
8749       /* Look for an expression-statement instead.  */
8750       statement = cp_parser_expression_statement (parser, in_statement_expr);
8751     }
8752 
8753   /* Set the line number for the statement.  */
8754   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
8755     SET_EXPR_LOCATION (statement, statement_location);
8756 }
8757 
8758 /* Parse the label for a labeled-statement, i.e.
8759 
8760    identifier :
8761    case constant-expression :
8762    default :
8763 
8764    GNU Extension:
8765    case constant-expression ... constant-expression : statement
8766 
8767    When a label is parsed without errors, the label is added to the
8768    parse tree by the finish_* functions, so this function doesn't
8769    have to return the label.  */
8770 
8771 static void
8772 cp_parser_label_for_labeled_statement (cp_parser* parser)
8773 {
8774   cp_token *token;
8775   tree label = NULL_TREE;
8776   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
8777 
8778   /* The next token should be an identifier.  */
8779   token = cp_lexer_peek_token (parser->lexer);
8780   if (token->type != CPP_NAME
8781       && token->type != CPP_KEYWORD)
8782     {
8783       cp_parser_error (parser, "expected labeled-statement");
8784       return;
8785     }
8786 
8787   parser->colon_corrects_to_scope_p = false;
8788   switch (token->keyword)
8789     {
8790     case RID_CASE:
8791       {
8792 	tree expr, expr_hi;
8793 	cp_token *ellipsis;
8794 
8795 	/* Consume the `case' token.  */
8796 	cp_lexer_consume_token (parser->lexer);
8797 	/* Parse the constant-expression.  */
8798 	expr = cp_parser_constant_expression (parser,
8799 					      /*allow_non_constant_p=*/false,
8800 					      NULL);
8801 
8802 	ellipsis = cp_lexer_peek_token (parser->lexer);
8803 	if (ellipsis->type == CPP_ELLIPSIS)
8804 	  {
8805 	    /* Consume the `...' token.  */
8806 	    cp_lexer_consume_token (parser->lexer);
8807 	    expr_hi =
8808 	      cp_parser_constant_expression (parser,
8809 					     /*allow_non_constant_p=*/false,
8810 					     NULL);
8811 	    /* We don't need to emit warnings here, as the common code
8812 	       will do this for us.  */
8813 	  }
8814 	else
8815 	  expr_hi = NULL_TREE;
8816 
8817 	if (parser->in_switch_statement_p)
8818 	  finish_case_label (token->location, expr, expr_hi);
8819 	else
8820 	  error_at (token->location,
8821 		    "case label %qE not within a switch statement",
8822 		    expr);
8823       }
8824       break;
8825 
8826     case RID_DEFAULT:
8827       /* Consume the `default' token.  */
8828       cp_lexer_consume_token (parser->lexer);
8829 
8830       if (parser->in_switch_statement_p)
8831 	finish_case_label (token->location, NULL_TREE, NULL_TREE);
8832       else
8833 	error_at (token->location, "case label not within a switch statement");
8834       break;
8835 
8836     default:
8837       /* Anything else must be an ordinary label.  */
8838       label = finish_label_stmt (cp_parser_identifier (parser));
8839       break;
8840     }
8841 
8842   /* Require the `:' token.  */
8843   cp_parser_require (parser, CPP_COLON, RT_COLON);
8844 
8845   /* An ordinary label may optionally be followed by attributes.
8846      However, this is only permitted if the attributes are then
8847      followed by a semicolon.  This is because, for backward
8848      compatibility, when parsing
8849        lab: __attribute__ ((unused)) int i;
8850      we want the attribute to attach to "i", not "lab".  */
8851   if (label != NULL_TREE
8852       && cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
8853     {
8854       tree attrs;
8855 
8856       cp_parser_parse_tentatively (parser);
8857       attrs = cp_parser_attributes_opt (parser);
8858       if (attrs == NULL_TREE
8859 	  || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8860 	cp_parser_abort_tentative_parse (parser);
8861       else if (!cp_parser_parse_definitely (parser))
8862 	;
8863       else
8864 	cplus_decl_attributes (&label, attrs, 0);
8865     }
8866 
8867   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
8868 }
8869 
8870 /* Parse an expression-statement.
8871 
8872    expression-statement:
8873      expression [opt] ;
8874 
8875    Returns the new EXPR_STMT -- or NULL_TREE if the expression
8876    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
8877    indicates whether this expression-statement is part of an
8878    expression statement.  */
8879 
8880 static tree
8881 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
8882 {
8883   tree statement = NULL_TREE;
8884   cp_token *token = cp_lexer_peek_token (parser->lexer);
8885 
8886   /* If the next token is a ';', then there is no expression
8887      statement.  */
8888   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8889     statement = cp_parser_expression (parser, /*cast_p=*/false, NULL);
8890 
8891   /* Give a helpful message for "A<T>::type t;" and the like.  */
8892   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
8893       && !cp_parser_uncommitted_to_tentative_parse_p (parser))
8894     {
8895       if (TREE_CODE (statement) == SCOPE_REF)
8896 	error_at (token->location, "need %<typename%> before %qE because "
8897 		  "%qT is a dependent scope",
8898 		  statement, TREE_OPERAND (statement, 0));
8899       else if (is_overloaded_fn (statement)
8900 	       && DECL_CONSTRUCTOR_P (get_first_fn (statement)))
8901 	{
8902 	  /* A::A a; */
8903 	  tree fn = get_first_fn (statement);
8904 	  error_at (token->location,
8905 		    "%<%T::%D%> names the constructor, not the type",
8906 		    DECL_CONTEXT (fn), DECL_NAME (fn));
8907 	}
8908     }
8909 
8910   /* Consume the final `;'.  */
8911   cp_parser_consume_semicolon_at_end_of_statement (parser);
8912 
8913   if (in_statement_expr
8914       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
8915     /* This is the final expression statement of a statement
8916        expression.  */
8917     statement = finish_stmt_expr_expr (statement, in_statement_expr);
8918   else if (statement)
8919     statement = finish_expr_stmt (statement);
8920   else
8921     finish_stmt ();
8922 
8923   return statement;
8924 }
8925 
8926 /* Parse a compound-statement.
8927 
8928    compound-statement:
8929      { statement-seq [opt] }
8930 
8931    GNU extension:
8932 
8933    compound-statement:
8934      { label-declaration-seq [opt] statement-seq [opt] }
8935 
8936    label-declaration-seq:
8937      label-declaration
8938      label-declaration-seq label-declaration
8939 
8940    Returns a tree representing the statement.  */
8941 
8942 static tree
8943 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
8944 			      bool in_try, bool function_body)
8945 {
8946   tree compound_stmt;
8947 
8948   /* Consume the `{'.  */
8949   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
8950     return error_mark_node;
8951   if (DECL_DECLARED_CONSTEXPR_P (current_function_decl)
8952       && !function_body)
8953     pedwarn (input_location, OPT_pedantic,
8954 	     "compound-statement in constexpr function");
8955   /* Begin the compound-statement.  */
8956   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
8957   /* If the next keyword is `__label__' we have a label declaration.  */
8958   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
8959     cp_parser_label_declaration (parser);
8960   /* Parse an (optional) statement-seq.  */
8961   cp_parser_statement_seq_opt (parser, in_statement_expr);
8962   /* Finish the compound-statement.  */
8963   finish_compound_stmt (compound_stmt);
8964   /* Consume the `}'.  */
8965   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
8966 
8967   return compound_stmt;
8968 }
8969 
8970 /* Parse an (optional) statement-seq.
8971 
8972    statement-seq:
8973      statement
8974      statement-seq [opt] statement  */
8975 
8976 static void
8977 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
8978 {
8979   /* Scan statements until there aren't any more.  */
8980   while (true)
8981     {
8982       cp_token *token = cp_lexer_peek_token (parser->lexer);
8983 
8984       /* If we are looking at a `}', then we have run out of
8985 	 statements; the same is true if we have reached the end
8986 	 of file, or have stumbled upon a stray '@end'.  */
8987       if (token->type == CPP_CLOSE_BRACE
8988 	  || token->type == CPP_EOF
8989 	  || token->type == CPP_PRAGMA_EOL
8990 	  || (token->type == CPP_KEYWORD && token->keyword == RID_AT_END))
8991 	break;
8992 
8993       /* If we are in a compound statement and find 'else' then
8994 	 something went wrong.  */
8995       else if (token->type == CPP_KEYWORD && token->keyword == RID_ELSE)
8996 	{
8997 	  if (parser->in_statement & IN_IF_STMT)
8998 	    break;
8999 	  else
9000 	    {
9001 	      token = cp_lexer_consume_token (parser->lexer);
9002 	      error_at (token->location, "%<else%> without a previous %<if%>");
9003 	    }
9004 	}
9005 
9006       /* Parse the statement.  */
9007       cp_parser_statement (parser, in_statement_expr, true, NULL);
9008     }
9009 }
9010 
9011 /* Parse a selection-statement.
9012 
9013    selection-statement:
9014      if ( condition ) statement
9015      if ( condition ) statement else statement
9016      switch ( condition ) statement
9017 
9018    Returns the new IF_STMT or SWITCH_STMT.
9019 
9020    If IF_P is not NULL, *IF_P is set to indicate whether the statement
9021    is a (possibly labeled) if statement which is not enclosed in
9022    braces and has an else clause.  This is used to implement
9023    -Wparentheses.  */
9024 
9025 static tree
9026 cp_parser_selection_statement (cp_parser* parser, bool *if_p)
9027 {
9028   cp_token *token;
9029   enum rid keyword;
9030 
9031   if (if_p != NULL)
9032     *if_p = false;
9033 
9034   /* Peek at the next token.  */
9035   token = cp_parser_require (parser, CPP_KEYWORD, RT_SELECT);
9036 
9037   /* See what kind of keyword it is.  */
9038   keyword = token->keyword;
9039   switch (keyword)
9040     {
9041     case RID_IF:
9042     case RID_SWITCH:
9043       {
9044 	tree statement;
9045 	tree condition;
9046 
9047 	/* Look for the `('.  */
9048 	if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
9049 	  {
9050 	    cp_parser_skip_to_end_of_statement (parser);
9051 	    return error_mark_node;
9052 	  }
9053 
9054 	/* Begin the selection-statement.  */
9055 	if (keyword == RID_IF)
9056 	  statement = begin_if_stmt ();
9057 	else
9058 	  statement = begin_switch_stmt ();
9059 
9060 	/* Parse the condition.  */
9061 	condition = cp_parser_condition (parser);
9062 	/* Look for the `)'.  */
9063 	if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
9064 	  cp_parser_skip_to_closing_parenthesis (parser, true, false,
9065 						 /*consume_paren=*/true);
9066 
9067 	if (keyword == RID_IF)
9068 	  {
9069 	    bool nested_if;
9070 	    unsigned char in_statement;
9071 
9072 	    /* Add the condition.  */
9073 	    finish_if_stmt_cond (condition, statement);
9074 
9075 	    /* Parse the then-clause.  */
9076 	    in_statement = parser->in_statement;
9077 	    parser->in_statement |= IN_IF_STMT;
9078 	    if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9079 	      {
9080 	        location_t loc = cp_lexer_peek_token (parser->lexer)->location;
9081 		add_stmt (build_empty_stmt (loc));
9082 		cp_lexer_consume_token (parser->lexer);
9083 	        if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_ELSE))
9084 		  warning_at (loc, OPT_Wempty_body, "suggest braces around "
9085 			      "empty body in an %<if%> statement");
9086 		nested_if = false;
9087 	      }
9088 	    else
9089 	      cp_parser_implicitly_scoped_statement (parser, &nested_if);
9090 	    parser->in_statement = in_statement;
9091 
9092 	    finish_then_clause (statement);
9093 
9094 	    /* If the next token is `else', parse the else-clause.  */
9095 	    if (cp_lexer_next_token_is_keyword (parser->lexer,
9096 						RID_ELSE))
9097 	      {
9098 		/* Consume the `else' keyword.  */
9099 		cp_lexer_consume_token (parser->lexer);
9100 		begin_else_clause (statement);
9101 		/* Parse the else-clause.  */
9102 	        if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9103 	          {
9104 		    location_t loc;
9105 		    loc = cp_lexer_peek_token (parser->lexer)->location;
9106 		    warning_at (loc,
9107 				OPT_Wempty_body, "suggest braces around "
9108 			        "empty body in an %<else%> statement");
9109 		    add_stmt (build_empty_stmt (loc));
9110 		    cp_lexer_consume_token (parser->lexer);
9111 		  }
9112 		else
9113 		  cp_parser_implicitly_scoped_statement (parser, NULL);
9114 
9115 		finish_else_clause (statement);
9116 
9117 		/* If we are currently parsing a then-clause, then
9118 		   IF_P will not be NULL.  We set it to true to
9119 		   indicate that this if statement has an else clause.
9120 		   This may trigger the Wparentheses warning below
9121 		   when we get back up to the parent if statement.  */
9122 		if (if_p != NULL)
9123 		  *if_p = true;
9124 	      }
9125 	    else
9126 	      {
9127 		/* This if statement does not have an else clause.  If
9128 		   NESTED_IF is true, then the then-clause is an if
9129 		   statement which does have an else clause.  We warn
9130 		   about the potential ambiguity.  */
9131 		if (nested_if)
9132 		  warning_at (EXPR_LOCATION (statement), OPT_Wparentheses,
9133 			      "suggest explicit braces to avoid ambiguous"
9134 			      " %<else%>");
9135 	      }
9136 
9137 	    /* Now we're all done with the if-statement.  */
9138 	    finish_if_stmt (statement);
9139 	  }
9140 	else
9141 	  {
9142 	    bool in_switch_statement_p;
9143 	    unsigned char in_statement;
9144 
9145 	    /* Add the condition.  */
9146 	    finish_switch_cond (condition, statement);
9147 
9148 	    /* Parse the body of the switch-statement.  */
9149 	    in_switch_statement_p = parser->in_switch_statement_p;
9150 	    in_statement = parser->in_statement;
9151 	    parser->in_switch_statement_p = true;
9152 	    parser->in_statement |= IN_SWITCH_STMT;
9153 	    cp_parser_implicitly_scoped_statement (parser, NULL);
9154 	    parser->in_switch_statement_p = in_switch_statement_p;
9155 	    parser->in_statement = in_statement;
9156 
9157 	    /* Now we're all done with the switch-statement.  */
9158 	    finish_switch_stmt (statement);
9159 	  }
9160 
9161 	return statement;
9162       }
9163       break;
9164 
9165     default:
9166       cp_parser_error (parser, "expected selection-statement");
9167       return error_mark_node;
9168     }
9169 }
9170 
9171 /* Parse a condition.
9172 
9173    condition:
9174      expression
9175      type-specifier-seq declarator = initializer-clause
9176      type-specifier-seq declarator braced-init-list
9177 
9178    GNU Extension:
9179 
9180    condition:
9181      type-specifier-seq declarator asm-specification [opt]
9182        attributes [opt] = assignment-expression
9183 
9184    Returns the expression that should be tested.  */
9185 
9186 static tree
9187 cp_parser_condition (cp_parser* parser)
9188 {
9189   cp_decl_specifier_seq type_specifiers;
9190   const char *saved_message;
9191   int declares_class_or_enum;
9192 
9193   /* Try the declaration first.  */
9194   cp_parser_parse_tentatively (parser);
9195   /* New types are not allowed in the type-specifier-seq for a
9196      condition.  */
9197   saved_message = parser->type_definition_forbidden_message;
9198   parser->type_definition_forbidden_message
9199     = G_("types may not be defined in conditions");
9200   /* Parse the type-specifier-seq.  */
9201   cp_parser_decl_specifier_seq (parser,
9202 				CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR,
9203 				&type_specifiers,
9204 				&declares_class_or_enum);
9205   /* Restore the saved message.  */
9206   parser->type_definition_forbidden_message = saved_message;
9207   /* If all is well, we might be looking at a declaration.  */
9208   if (!cp_parser_error_occurred (parser))
9209     {
9210       tree decl;
9211       tree asm_specification;
9212       tree attributes;
9213       cp_declarator *declarator;
9214       tree initializer = NULL_TREE;
9215 
9216       /* Parse the declarator.  */
9217       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
9218 					 /*ctor_dtor_or_conv_p=*/NULL,
9219 					 /*parenthesized_p=*/NULL,
9220 					 /*member_p=*/false);
9221       /* Parse the attributes.  */
9222       attributes = cp_parser_attributes_opt (parser);
9223       /* Parse the asm-specification.  */
9224       asm_specification = cp_parser_asm_specification_opt (parser);
9225       /* If the next token is not an `=' or '{', then we might still be
9226 	 looking at an expression.  For example:
9227 
9228 	   if (A(a).x)
9229 
9230 	 looks like a decl-specifier-seq and a declarator -- but then
9231 	 there is no `=', so this is an expression.  */
9232       if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
9233 	  && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
9234 	cp_parser_simulate_error (parser);
9235 
9236       /* If we did see an `=' or '{', then we are looking at a declaration
9237 	 for sure.  */
9238       if (cp_parser_parse_definitely (parser))
9239 	{
9240 	  tree pushed_scope;
9241 	  bool non_constant_p;
9242 	  bool flags = LOOKUP_ONLYCONVERTING;
9243 
9244 	  /* Create the declaration.  */
9245 	  decl = start_decl (declarator, &type_specifiers,
9246 			     /*initialized_p=*/true,
9247 			     attributes, /*prefix_attributes=*/NULL_TREE,
9248 			     &pushed_scope);
9249 
9250 	  /* Parse the initializer.  */
9251 	  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9252 	    {
9253 	      initializer = cp_parser_braced_list (parser, &non_constant_p);
9254 	      CONSTRUCTOR_IS_DIRECT_INIT (initializer) = 1;
9255 	      flags = 0;
9256 	    }
9257 	  else
9258 	    {
9259 	      /* Consume the `='.  */
9260 	      cp_parser_require (parser, CPP_EQ, RT_EQ);
9261 	      initializer = cp_parser_initializer_clause (parser, &non_constant_p);
9262 	    }
9263 	  if (BRACE_ENCLOSED_INITIALIZER_P (initializer))
9264 	    maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
9265 
9266 	  /* Process the initializer.  */
9267 	  cp_finish_decl (decl,
9268 			  initializer, !non_constant_p,
9269 			  asm_specification,
9270 			  flags);
9271 
9272 	  if (pushed_scope)
9273 	    pop_scope (pushed_scope);
9274 
9275 	  return convert_from_reference (decl);
9276 	}
9277     }
9278   /* If we didn't even get past the declarator successfully, we are
9279      definitely not looking at a declaration.  */
9280   else
9281     cp_parser_abort_tentative_parse (parser);
9282 
9283   /* Otherwise, we are looking at an expression.  */
9284   return cp_parser_expression (parser, /*cast_p=*/false, NULL);
9285 }
9286 
9287 /* Parses a for-statement or range-for-statement until the closing ')',
9288    not included. */
9289 
9290 static tree
9291 cp_parser_for (cp_parser *parser)
9292 {
9293   tree init, scope, decl;
9294   bool is_range_for;
9295 
9296   /* Begin the for-statement.  */
9297   scope = begin_for_scope (&init);
9298 
9299   /* Parse the initialization.  */
9300   is_range_for = cp_parser_for_init_statement (parser, &decl);
9301 
9302   if (is_range_for)
9303     return cp_parser_range_for (parser, scope, init, decl);
9304   else
9305     return cp_parser_c_for (parser, scope, init);
9306 }
9307 
9308 static tree
9309 cp_parser_c_for (cp_parser *parser, tree scope, tree init)
9310 {
9311   /* Normal for loop */
9312   tree condition = NULL_TREE;
9313   tree expression = NULL_TREE;
9314   tree stmt;
9315 
9316   stmt = begin_for_stmt (scope, init);
9317   /* The for-init-statement has already been parsed in
9318      cp_parser_for_init_statement, so no work is needed here.  */
9319   finish_for_init_stmt (stmt);
9320 
9321   /* If there's a condition, process it.  */
9322   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
9323     condition = cp_parser_condition (parser);
9324   finish_for_cond (condition, stmt);
9325   /* Look for the `;'.  */
9326   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9327 
9328   /* If there's an expression, process it.  */
9329   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
9330     expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9331   finish_for_expr (expression, stmt);
9332 
9333   return stmt;
9334 }
9335 
9336 /* Tries to parse a range-based for-statement:
9337 
9338   range-based-for:
9339     decl-specifier-seq declarator : expression
9340 
9341   The decl-specifier-seq declarator and the `:' are already parsed by
9342   cp_parser_for_init_statement. If processing_template_decl it returns a
9343   newly created RANGE_FOR_STMT; if not, it is converted to a
9344   regular FOR_STMT.  */
9345 
9346 static tree
9347 cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl)
9348 {
9349   tree stmt, range_expr;
9350 
9351   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9352     {
9353       bool expr_non_constant_p;
9354       range_expr = cp_parser_braced_list (parser, &expr_non_constant_p);
9355     }
9356   else
9357     range_expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9358 
9359   /* If in template, STMT is converted to a normal for-statement
9360      at instantiation. If not, it is done just ahead. */
9361   if (processing_template_decl)
9362     {
9363       if (check_for_bare_parameter_packs (range_expr))
9364 	range_expr = error_mark_node;
9365       stmt = begin_range_for_stmt (scope, init);
9366       finish_range_for_decl (stmt, range_decl, range_expr);
9367       if (range_expr != error_mark_node
9368 	  && !type_dependent_expression_p (range_expr)
9369 	  /* The length of an array might be dependent.  */
9370 	  && COMPLETE_TYPE_P (TREE_TYPE (range_expr))
9371 	  /* do_auto_deduction doesn't mess with template init-lists.  */
9372 	  && !BRACE_ENCLOSED_INITIALIZER_P (range_expr))
9373 	do_range_for_auto_deduction (range_decl, range_expr);
9374     }
9375   else
9376     {
9377       stmt = begin_for_stmt (scope, init);
9378       stmt = cp_convert_range_for (stmt, range_decl, range_expr);
9379     }
9380   return stmt;
9381 }
9382 
9383 /* Subroutine of cp_convert_range_for: given the initializer expression,
9384    builds up the range temporary.  */
9385 
9386 static tree
9387 build_range_temp (tree range_expr)
9388 {
9389   tree range_type, range_temp;
9390 
9391   /* Find out the type deduced by the declaration
9392      `auto &&__range = range_expr'.  */
9393   range_type = cp_build_reference_type (make_auto (), true);
9394   range_type = do_auto_deduction (range_type, range_expr,
9395 				  type_uses_auto (range_type));
9396 
9397   /* Create the __range variable.  */
9398   range_temp = build_decl (input_location, VAR_DECL,
9399 			   get_identifier ("__for_range"), range_type);
9400   TREE_USED (range_temp) = 1;
9401   DECL_ARTIFICIAL (range_temp) = 1;
9402 
9403   return range_temp;
9404 }
9405 
9406 /* Used by cp_parser_range_for in template context: we aren't going to
9407    do a full conversion yet, but we still need to resolve auto in the
9408    type of the for-range-declaration if present.  This is basically
9409    a shortcut version of cp_convert_range_for.  */
9410 
9411 static void
9412 do_range_for_auto_deduction (tree decl, tree range_expr)
9413 {
9414   tree auto_node = type_uses_auto (TREE_TYPE (decl));
9415   if (auto_node)
9416     {
9417       tree begin_dummy, end_dummy, range_temp, iter_type, iter_decl;
9418       range_temp = convert_from_reference (build_range_temp (range_expr));
9419       iter_type = (cp_parser_perform_range_for_lookup
9420 		   (range_temp, &begin_dummy, &end_dummy));
9421       iter_decl = build_decl (input_location, VAR_DECL, NULL_TREE, iter_type);
9422       iter_decl = build_x_indirect_ref (iter_decl, RO_NULL,
9423 					tf_warning_or_error);
9424       TREE_TYPE (decl) = do_auto_deduction (TREE_TYPE (decl),
9425 					    iter_decl, auto_node);
9426     }
9427 }
9428 
9429 /* Converts a range-based for-statement into a normal
9430    for-statement, as per the definition.
9431 
9432       for (RANGE_DECL : RANGE_EXPR)
9433 	BLOCK
9434 
9435    should be equivalent to:
9436 
9437       {
9438 	auto &&__range = RANGE_EXPR;
9439 	for (auto __begin = BEGIN_EXPR, end = END_EXPR;
9440 	      __begin != __end;
9441 	      ++__begin)
9442 	  {
9443 	      RANGE_DECL = *__begin;
9444 	      BLOCK
9445 	  }
9446       }
9447 
9448    If RANGE_EXPR is an array:
9449 	BEGIN_EXPR = __range
9450 	END_EXPR = __range + ARRAY_SIZE(__range)
9451    Else if RANGE_EXPR has a member 'begin' or 'end':
9452 	BEGIN_EXPR = __range.begin()
9453 	END_EXPR = __range.end()
9454    Else:
9455 	BEGIN_EXPR = begin(__range)
9456 	END_EXPR = end(__range);
9457 
9458    If __range has a member 'begin' but not 'end', or vice versa, we must
9459    still use the second alternative (it will surely fail, however).
9460    When calling begin()/end() in the third alternative we must use
9461    argument dependent lookup, but always considering 'std' as an associated
9462    namespace.  */
9463 
9464 tree
9465 cp_convert_range_for (tree statement, tree range_decl, tree range_expr)
9466 {
9467   tree begin, end;
9468   tree iter_type, begin_expr, end_expr;
9469   tree condition, expression;
9470 
9471   if (range_decl == error_mark_node || range_expr == error_mark_node)
9472     /* If an error happened previously do nothing or else a lot of
9473        unhelpful errors would be issued.  */
9474     begin_expr = end_expr = iter_type = error_mark_node;
9475   else
9476     {
9477       tree range_temp = build_range_temp (range_expr);
9478       pushdecl (range_temp);
9479       cp_finish_decl (range_temp, range_expr,
9480 		      /*is_constant_init*/false, NULL_TREE,
9481 		      LOOKUP_ONLYCONVERTING);
9482 
9483       range_temp = convert_from_reference (range_temp);
9484       iter_type = cp_parser_perform_range_for_lookup (range_temp,
9485 						      &begin_expr, &end_expr);
9486     }
9487 
9488   /* The new for initialization statement.  */
9489   begin = build_decl (input_location, VAR_DECL,
9490 		      get_identifier ("__for_begin"), iter_type);
9491   TREE_USED (begin) = 1;
9492   DECL_ARTIFICIAL (begin) = 1;
9493   pushdecl (begin);
9494   cp_finish_decl (begin, begin_expr,
9495 		  /*is_constant_init*/false, NULL_TREE,
9496 		  LOOKUP_ONLYCONVERTING);
9497 
9498   end = build_decl (input_location, VAR_DECL,
9499 		    get_identifier ("__for_end"), iter_type);
9500   TREE_USED (end) = 1;
9501   DECL_ARTIFICIAL (end) = 1;
9502   pushdecl (end);
9503   cp_finish_decl (end, end_expr,
9504 		  /*is_constant_init*/false, NULL_TREE,
9505 		  LOOKUP_ONLYCONVERTING);
9506 
9507   finish_for_init_stmt (statement);
9508 
9509   /* The new for condition.  */
9510   condition = build_x_binary_op (NE_EXPR,
9511 				 begin, ERROR_MARK,
9512 				 end, ERROR_MARK,
9513 				 NULL, tf_warning_or_error);
9514   finish_for_cond (condition, statement);
9515 
9516   /* The new increment expression.  */
9517   expression = finish_unary_op_expr (PREINCREMENT_EXPR, begin);
9518   finish_for_expr (expression, statement);
9519 
9520   /* The declaration is initialized with *__begin inside the loop body.  */
9521   cp_finish_decl (range_decl,
9522 		  build_x_indirect_ref (begin, RO_NULL, tf_warning_or_error),
9523 		  /*is_constant_init*/false, NULL_TREE,
9524 		  LOOKUP_ONLYCONVERTING);
9525 
9526   return statement;
9527 }
9528 
9529 /* Solves BEGIN_EXPR and END_EXPR as described in cp_convert_range_for.
9530    We need to solve both at the same time because the method used
9531    depends on the existence of members begin or end.
9532    Returns the type deduced for the iterator expression.  */
9533 
9534 static tree
9535 cp_parser_perform_range_for_lookup (tree range, tree *begin, tree *end)
9536 {
9537   if (error_operand_p (range))
9538     {
9539       *begin = *end = error_mark_node;
9540       return error_mark_node;
9541     }
9542 
9543   if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (range))))
9544     {
9545       error ("range-based %<for%> expression of type %qT "
9546 	     "has incomplete type", TREE_TYPE (range));
9547       *begin = *end = error_mark_node;
9548       return error_mark_node;
9549     }
9550   if (TREE_CODE (TREE_TYPE (range)) == ARRAY_TYPE)
9551     {
9552       /* If RANGE is an array, we will use pointer arithmetic.  */
9553       *begin = range;
9554       *end = build_binary_op (input_location, PLUS_EXPR,
9555 			      range,
9556 			      array_type_nelts_top (TREE_TYPE (range)),
9557 			      0);
9558       return build_pointer_type (TREE_TYPE (TREE_TYPE (range)));
9559     }
9560   else
9561     {
9562       /* If it is not an array, we must do a bit of magic.  */
9563       tree id_begin, id_end;
9564       tree member_begin, member_end;
9565 
9566       *begin = *end = error_mark_node;
9567 
9568       id_begin = get_identifier ("begin");
9569       id_end = get_identifier ("end");
9570       member_begin = lookup_member (TREE_TYPE (range), id_begin,
9571 				    /*protect=*/2, /*want_type=*/false,
9572 				    tf_warning_or_error);
9573       member_end = lookup_member (TREE_TYPE (range), id_end,
9574 				  /*protect=*/2, /*want_type=*/false,
9575 				  tf_warning_or_error);
9576 
9577       if (member_begin != NULL_TREE || member_end != NULL_TREE)
9578 	{
9579 	  /* Use the member functions.  */
9580 	  if (member_begin != NULL_TREE)
9581 	    *begin = cp_parser_range_for_member_function (range, id_begin);
9582 	  else
9583 	    error ("range-based %<for%> expression of type %qT has an "
9584 		   "%<end%> member but not a %<begin%>", TREE_TYPE (range));
9585 
9586 	  if (member_end != NULL_TREE)
9587 	    *end = cp_parser_range_for_member_function (range, id_end);
9588 	  else
9589 	    error ("range-based %<for%> expression of type %qT has a "
9590 		   "%<begin%> member but not an %<end%>", TREE_TYPE (range));
9591 	}
9592       else
9593 	{
9594 	  /* Use global functions with ADL.  */
9595 	  VEC(tree,gc) *vec;
9596 	  vec = make_tree_vector ();
9597 
9598 	  VEC_safe_push (tree, gc, vec, range);
9599 
9600 	  member_begin = perform_koenig_lookup (id_begin, vec,
9601 						/*include_std=*/true,
9602 						tf_warning_or_error);
9603 	  *begin = finish_call_expr (member_begin, &vec, false, true,
9604 				     tf_warning_or_error);
9605 	  member_end = perform_koenig_lookup (id_end, vec,
9606 					      /*include_std=*/true,
9607 					      tf_warning_or_error);
9608 	  *end = finish_call_expr (member_end, &vec, false, true,
9609 				   tf_warning_or_error);
9610 
9611 	  release_tree_vector (vec);
9612 	}
9613 
9614       /* Last common checks.  */
9615       if (*begin == error_mark_node || *end == error_mark_node)
9616 	{
9617 	  /* If one of the expressions is an error do no more checks.  */
9618 	  *begin = *end = error_mark_node;
9619 	  return error_mark_node;
9620 	}
9621       else
9622 	{
9623 	  tree iter_type = cv_unqualified (TREE_TYPE (*begin));
9624 	  /* The unqualified type of the __begin and __end temporaries should
9625 	     be the same, as required by the multiple auto declaration.  */
9626 	  if (!same_type_p (iter_type, cv_unqualified (TREE_TYPE (*end))))
9627 	    error ("inconsistent begin/end types in range-based %<for%> "
9628 		   "statement: %qT and %qT",
9629 		   TREE_TYPE (*begin), TREE_TYPE (*end));
9630 	  return iter_type;
9631 	}
9632     }
9633 }
9634 
9635 /* Helper function for cp_parser_perform_range_for_lookup.
9636    Builds a tree for RANGE.IDENTIFIER().  */
9637 
9638 static tree
9639 cp_parser_range_for_member_function (tree range, tree identifier)
9640 {
9641   tree member, res;
9642   VEC(tree,gc) *vec;
9643 
9644   member = finish_class_member_access_expr (range, identifier,
9645 					    false, tf_warning_or_error);
9646   if (member == error_mark_node)
9647     return error_mark_node;
9648 
9649   vec = make_tree_vector ();
9650   res = finish_call_expr (member, &vec,
9651 			  /*disallow_virtual=*/false,
9652 			  /*koenig_p=*/false,
9653 			  tf_warning_or_error);
9654   release_tree_vector (vec);
9655   return res;
9656 }
9657 
9658 /* Parse an iteration-statement.
9659 
9660    iteration-statement:
9661      while ( condition ) statement
9662      do statement while ( expression ) ;
9663      for ( for-init-statement condition [opt] ; expression [opt] )
9664        statement
9665 
9666    Returns the new WHILE_STMT, DO_STMT, FOR_STMT or RANGE_FOR_STMT.  */
9667 
9668 static tree
9669 cp_parser_iteration_statement (cp_parser* parser)
9670 {
9671   cp_token *token;
9672   enum rid keyword;
9673   tree statement;
9674   unsigned char in_statement;
9675 
9676   /* Peek at the next token.  */
9677   token = cp_parser_require (parser, CPP_KEYWORD, RT_INTERATION);
9678   if (!token)
9679     return error_mark_node;
9680 
9681   /* Remember whether or not we are already within an iteration
9682      statement.  */
9683   in_statement = parser->in_statement;
9684 
9685   /* See what kind of keyword it is.  */
9686   keyword = token->keyword;
9687   switch (keyword)
9688     {
9689     case RID_WHILE:
9690       {
9691 	tree condition;
9692 
9693 	/* Begin the while-statement.  */
9694 	statement = begin_while_stmt ();
9695 	/* Look for the `('.  */
9696 	cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
9697 	/* Parse the condition.  */
9698 	condition = cp_parser_condition (parser);
9699 	finish_while_stmt_cond (condition, statement);
9700 	/* Look for the `)'.  */
9701 	cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
9702 	/* Parse the dependent statement.  */
9703 	parser->in_statement = IN_ITERATION_STMT;
9704 	cp_parser_already_scoped_statement (parser);
9705 	parser->in_statement = in_statement;
9706 	/* We're done with the while-statement.  */
9707 	finish_while_stmt (statement);
9708       }
9709       break;
9710 
9711     case RID_DO:
9712       {
9713 	tree expression;
9714 
9715 	/* Begin the do-statement.  */
9716 	statement = begin_do_stmt ();
9717 	/* Parse the body of the do-statement.  */
9718 	parser->in_statement = IN_ITERATION_STMT;
9719 	cp_parser_implicitly_scoped_statement (parser, NULL);
9720 	parser->in_statement = in_statement;
9721 	finish_do_body (statement);
9722 	/* Look for the `while' keyword.  */
9723 	cp_parser_require_keyword (parser, RID_WHILE, RT_WHILE);
9724 	/* Look for the `('.  */
9725 	cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
9726 	/* Parse the expression.  */
9727 	expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9728 	/* We're done with the do-statement.  */
9729 	finish_do_stmt (expression, statement);
9730 	/* Look for the `)'.  */
9731 	cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
9732 	/* Look for the `;'.  */
9733 	cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9734       }
9735       break;
9736 
9737     case RID_FOR:
9738       {
9739 	/* Look for the `('.  */
9740 	cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
9741 
9742 	statement = cp_parser_for (parser);
9743 
9744 	/* Look for the `)'.  */
9745 	cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
9746 
9747 	/* Parse the body of the for-statement.  */
9748 	parser->in_statement = IN_ITERATION_STMT;
9749 	cp_parser_already_scoped_statement (parser);
9750 	parser->in_statement = in_statement;
9751 
9752 	/* We're done with the for-statement.  */
9753 	finish_for_stmt (statement);
9754       }
9755       break;
9756 
9757     default:
9758       cp_parser_error (parser, "expected iteration-statement");
9759       statement = error_mark_node;
9760       break;
9761     }
9762 
9763   return statement;
9764 }
9765 
9766 /* Parse a for-init-statement or the declarator of a range-based-for.
9767    Returns true if a range-based-for declaration is seen.
9768 
9769    for-init-statement:
9770      expression-statement
9771      simple-declaration  */
9772 
9773 static bool
9774 cp_parser_for_init_statement (cp_parser* parser, tree *decl)
9775 {
9776   /* If the next token is a `;', then we have an empty
9777      expression-statement.  Grammatically, this is also a
9778      simple-declaration, but an invalid one, because it does not
9779      declare anything.  Therefore, if we did not handle this case
9780      specially, we would issue an error message about an invalid
9781      declaration.  */
9782   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
9783     {
9784       bool is_range_for = false;
9785       bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
9786 
9787       parser->colon_corrects_to_scope_p = false;
9788 
9789       /* We're going to speculatively look for a declaration, falling back
9790 	 to an expression, if necessary.  */
9791       cp_parser_parse_tentatively (parser);
9792       /* Parse the declaration.  */
9793       cp_parser_simple_declaration (parser,
9794 				    /*function_definition_allowed_p=*/false,
9795 				    decl);
9796       parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
9797       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
9798 	{
9799 	  /* It is a range-for, consume the ':' */
9800 	  cp_lexer_consume_token (parser->lexer);
9801 	  is_range_for = true;
9802 	  if (cxx_dialect < cxx0x)
9803 	    {
9804 	      error_at (cp_lexer_peek_token (parser->lexer)->location,
9805 			"range-based %<for%> loops are not allowed "
9806 			"in C++98 mode");
9807 	      *decl = error_mark_node;
9808 	    }
9809 	}
9810       else
9811 	  /* The ';' is not consumed yet because we told
9812 	     cp_parser_simple_declaration not to.  */
9813 	  cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9814 
9815       if (cp_parser_parse_definitely (parser))
9816 	return is_range_for;
9817       /* If the tentative parse failed, then we shall need to look for an
9818 	 expression-statement.  */
9819     }
9820   /* If we are here, it is an expression-statement.  */
9821   cp_parser_expression_statement (parser, NULL_TREE);
9822   return false;
9823 }
9824 
9825 /* Parse a jump-statement.
9826 
9827    jump-statement:
9828      break ;
9829      continue ;
9830      return expression [opt] ;
9831      return braced-init-list ;
9832      goto identifier ;
9833 
9834    GNU extension:
9835 
9836    jump-statement:
9837      goto * expression ;
9838 
9839    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
9840 
9841 static tree
9842 cp_parser_jump_statement (cp_parser* parser)
9843 {
9844   tree statement = error_mark_node;
9845   cp_token *token;
9846   enum rid keyword;
9847   unsigned char in_statement;
9848 
9849   /* Peek at the next token.  */
9850   token = cp_parser_require (parser, CPP_KEYWORD, RT_JUMP);
9851   if (!token)
9852     return error_mark_node;
9853 
9854   /* See what kind of keyword it is.  */
9855   keyword = token->keyword;
9856   switch (keyword)
9857     {
9858     case RID_BREAK:
9859       in_statement = parser->in_statement & ~IN_IF_STMT;
9860       switch (in_statement)
9861 	{
9862 	case 0:
9863 	  error_at (token->location, "break statement not within loop or switch");
9864 	  break;
9865 	default:
9866 	  gcc_assert ((in_statement & IN_SWITCH_STMT)
9867 		      || in_statement == IN_ITERATION_STMT);
9868 	  statement = finish_break_stmt ();
9869 	  break;
9870 	case IN_OMP_BLOCK:
9871 	  error_at (token->location, "invalid exit from OpenMP structured block");
9872 	  break;
9873 	case IN_OMP_FOR:
9874 	  error_at (token->location, "break statement used with OpenMP for loop");
9875 	  break;
9876 	}
9877       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9878       break;
9879 
9880     case RID_CONTINUE:
9881       switch (parser->in_statement & ~(IN_SWITCH_STMT | IN_IF_STMT))
9882 	{
9883 	case 0:
9884 	  error_at (token->location, "continue statement not within a loop");
9885 	  break;
9886 	case IN_ITERATION_STMT:
9887 	case IN_OMP_FOR:
9888 	  statement = finish_continue_stmt ();
9889 	  break;
9890 	case IN_OMP_BLOCK:
9891 	  error_at (token->location, "invalid exit from OpenMP structured block");
9892 	  break;
9893 	default:
9894 	  gcc_unreachable ();
9895 	}
9896       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9897       break;
9898 
9899     case RID_RETURN:
9900       {
9901 	tree expr;
9902 	bool expr_non_constant_p;
9903 
9904 	if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9905 	  {
9906 	    maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
9907 	    expr = cp_parser_braced_list (parser, &expr_non_constant_p);
9908 	  }
9909 	else if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
9910 	  expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9911 	else
9912 	  /* If the next token is a `;', then there is no
9913 	     expression.  */
9914 	  expr = NULL_TREE;
9915 	/* Build the return-statement.  */
9916 	statement = finish_return_stmt (expr);
9917 	/* Look for the final `;'.  */
9918 	cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9919       }
9920       break;
9921 
9922     case RID_GOTO:
9923       /* Create the goto-statement.  */
9924       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
9925 	{
9926 	  /* Issue a warning about this use of a GNU extension.  */
9927 	  pedwarn (token->location, OPT_pedantic, "ISO C++ forbids computed gotos");
9928 	  /* Consume the '*' token.  */
9929 	  cp_lexer_consume_token (parser->lexer);
9930 	  /* Parse the dependent expression.  */
9931 	  finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false, NULL));
9932 	}
9933       else
9934 	finish_goto_stmt (cp_parser_identifier (parser));
9935       /* Look for the final `;'.  */
9936       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9937       break;
9938 
9939     default:
9940       cp_parser_error (parser, "expected jump-statement");
9941       break;
9942     }
9943 
9944   return statement;
9945 }
9946 
9947 /* Parse a declaration-statement.
9948 
9949    declaration-statement:
9950      block-declaration  */
9951 
9952 static void
9953 cp_parser_declaration_statement (cp_parser* parser)
9954 {
9955   void *p;
9956 
9957   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
9958   p = obstack_alloc (&declarator_obstack, 0);
9959 
9960  /* Parse the block-declaration.  */
9961   cp_parser_block_declaration (parser, /*statement_p=*/true);
9962 
9963   /* Free any declarators allocated.  */
9964   obstack_free (&declarator_obstack, p);
9965 
9966   /* Finish off the statement.  */
9967   finish_stmt ();
9968 }
9969 
9970 /* Some dependent statements (like `if (cond) statement'), are
9971    implicitly in their own scope.  In other words, if the statement is
9972    a single statement (as opposed to a compound-statement), it is
9973    none-the-less treated as if it were enclosed in braces.  Any
9974    declarations appearing in the dependent statement are out of scope
9975    after control passes that point.  This function parses a statement,
9976    but ensures that is in its own scope, even if it is not a
9977    compound-statement.
9978 
9979    If IF_P is not NULL, *IF_P is set to indicate whether the statement
9980    is a (possibly labeled) if statement which is not enclosed in
9981    braces and has an else clause.  This is used to implement
9982    -Wparentheses.
9983 
9984    Returns the new statement.  */
9985 
9986 static tree
9987 cp_parser_implicitly_scoped_statement (cp_parser* parser, bool *if_p)
9988 {
9989   tree statement;
9990 
9991   if (if_p != NULL)
9992     *if_p = false;
9993 
9994   /* Mark if () ; with a special NOP_EXPR.  */
9995   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9996     {
9997       location_t loc = cp_lexer_peek_token (parser->lexer)->location;
9998       cp_lexer_consume_token (parser->lexer);
9999       statement = add_stmt (build_empty_stmt (loc));
10000     }
10001   /* if a compound is opened, we simply parse the statement directly.  */
10002   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
10003     statement = cp_parser_compound_statement (parser, NULL, false, false);
10004   /* If the token is not a `{', then we must take special action.  */
10005   else
10006     {
10007       /* Create a compound-statement.  */
10008       statement = begin_compound_stmt (0);
10009       /* Parse the dependent-statement.  */
10010       cp_parser_statement (parser, NULL_TREE, false, if_p);
10011       /* Finish the dummy compound-statement.  */
10012       finish_compound_stmt (statement);
10013     }
10014 
10015   /* Return the statement.  */
10016   return statement;
10017 }
10018 
10019 /* For some dependent statements (like `while (cond) statement'), we
10020    have already created a scope.  Therefore, even if the dependent
10021    statement is a compound-statement, we do not want to create another
10022    scope.  */
10023 
10024 static void
10025 cp_parser_already_scoped_statement (cp_parser* parser)
10026 {
10027   /* If the token is a `{', then we must take special action.  */
10028   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
10029     cp_parser_statement (parser, NULL_TREE, false, NULL);
10030   else
10031     {
10032       /* Avoid calling cp_parser_compound_statement, so that we
10033 	 don't create a new scope.  Do everything else by hand.  */
10034       cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
10035       /* If the next keyword is `__label__' we have a label declaration.  */
10036       while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
10037 	cp_parser_label_declaration (parser);
10038       /* Parse an (optional) statement-seq.  */
10039       cp_parser_statement_seq_opt (parser, NULL_TREE);
10040       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
10041     }
10042 }
10043 
10044 /* Declarations [gram.dcl.dcl] */
10045 
10046 /* Parse an optional declaration-sequence.
10047 
10048    declaration-seq:
10049      declaration
10050      declaration-seq declaration  */
10051 
10052 static void
10053 cp_parser_declaration_seq_opt (cp_parser* parser)
10054 {
10055   while (true)
10056     {
10057       cp_token *token;
10058 
10059       token = cp_lexer_peek_token (parser->lexer);
10060 
10061       if (token->type == CPP_CLOSE_BRACE
10062 	  || token->type == CPP_EOF
10063 	  || token->type == CPP_PRAGMA_EOL)
10064 	break;
10065 
10066       if (token->type == CPP_SEMICOLON)
10067 	{
10068 	  /* A declaration consisting of a single semicolon is
10069 	     invalid.  Allow it unless we're being pedantic.  */
10070 	  cp_lexer_consume_token (parser->lexer);
10071 	  if (!in_system_header)
10072 	    pedwarn (input_location, OPT_pedantic, "extra %<;%>");
10073 	  continue;
10074 	}
10075 
10076       /* If we're entering or exiting a region that's implicitly
10077 	 extern "C", modify the lang context appropriately.  */
10078       if (!parser->implicit_extern_c && token->implicit_extern_c)
10079 	{
10080 	  push_lang_context (lang_name_c);
10081 	  parser->implicit_extern_c = true;
10082 	}
10083       else if (parser->implicit_extern_c && !token->implicit_extern_c)
10084 	{
10085 	  pop_lang_context ();
10086 	  parser->implicit_extern_c = false;
10087 	}
10088 
10089       if (token->type == CPP_PRAGMA)
10090 	{
10091 	  /* A top-level declaration can consist solely of a #pragma.
10092 	     A nested declaration cannot, so this is done here and not
10093 	     in cp_parser_declaration.  (A #pragma at block scope is
10094 	     handled in cp_parser_statement.)  */
10095 	  cp_parser_pragma (parser, pragma_external);
10096 	  continue;
10097 	}
10098 
10099       /* Parse the declaration itself.  */
10100       cp_parser_declaration (parser);
10101     }
10102 }
10103 
10104 /* Parse a declaration.
10105 
10106    declaration:
10107      block-declaration
10108      function-definition
10109      template-declaration
10110      explicit-instantiation
10111      explicit-specialization
10112      linkage-specification
10113      namespace-definition
10114 
10115    GNU extension:
10116 
10117    declaration:
10118       __extension__ declaration */
10119 
10120 static void
10121 cp_parser_declaration (cp_parser* parser)
10122 {
10123   cp_token token1;
10124   cp_token token2;
10125   int saved_pedantic;
10126   void *p;
10127   tree attributes = NULL_TREE;
10128 
10129   /* Check for the `__extension__' keyword.  */
10130   if (cp_parser_extension_opt (parser, &saved_pedantic))
10131     {
10132       /* Parse the qualified declaration.  */
10133       cp_parser_declaration (parser);
10134       /* Restore the PEDANTIC flag.  */
10135       pedantic = saved_pedantic;
10136 
10137       return;
10138     }
10139 
10140   /* Try to figure out what kind of declaration is present.  */
10141   token1 = *cp_lexer_peek_token (parser->lexer);
10142 
10143   if (token1.type != CPP_EOF)
10144     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
10145   else
10146     {
10147       token2.type = CPP_EOF;
10148       token2.keyword = RID_MAX;
10149     }
10150 
10151   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
10152   p = obstack_alloc (&declarator_obstack, 0);
10153 
10154   /* If the next token is `extern' and the following token is a string
10155      literal, then we have a linkage specification.  */
10156   if (token1.keyword == RID_EXTERN
10157       && cp_parser_is_pure_string_literal (&token2))
10158     cp_parser_linkage_specification (parser);
10159   /* If the next token is `template', then we have either a template
10160      declaration, an explicit instantiation, or an explicit
10161      specialization.  */
10162   else if (token1.keyword == RID_TEMPLATE)
10163     {
10164       /* `template <>' indicates a template specialization.  */
10165       if (token2.type == CPP_LESS
10166 	  && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
10167 	cp_parser_explicit_specialization (parser);
10168       /* `template <' indicates a template declaration.  */
10169       else if (token2.type == CPP_LESS)
10170 	cp_parser_template_declaration (parser, /*member_p=*/false);
10171       /* Anything else must be an explicit instantiation.  */
10172       else
10173 	cp_parser_explicit_instantiation (parser);
10174     }
10175   /* If the next token is `export', then we have a template
10176      declaration.  */
10177   else if (token1.keyword == RID_EXPORT)
10178     cp_parser_template_declaration (parser, /*member_p=*/false);
10179   /* If the next token is `extern', 'static' or 'inline' and the one
10180      after that is `template', we have a GNU extended explicit
10181      instantiation directive.  */
10182   else if (cp_parser_allow_gnu_extensions_p (parser)
10183 	   && (token1.keyword == RID_EXTERN
10184 	       || token1.keyword == RID_STATIC
10185 	       || token1.keyword == RID_INLINE)
10186 	   && token2.keyword == RID_TEMPLATE)
10187     cp_parser_explicit_instantiation (parser);
10188   /* If the next token is `namespace', check for a named or unnamed
10189      namespace definition.  */
10190   else if (token1.keyword == RID_NAMESPACE
10191 	   && (/* A named namespace definition.  */
10192 	       (token2.type == CPP_NAME
10193 		&& (cp_lexer_peek_nth_token (parser->lexer, 3)->type
10194 		    != CPP_EQ))
10195 	       /* An unnamed namespace definition.  */
10196 	       || token2.type == CPP_OPEN_BRACE
10197 	       || token2.keyword == RID_ATTRIBUTE))
10198     cp_parser_namespace_definition (parser);
10199   /* An inline (associated) namespace definition.  */
10200   else if (token1.keyword == RID_INLINE
10201 	   && token2.keyword == RID_NAMESPACE)
10202     cp_parser_namespace_definition (parser);
10203   /* Objective-C++ declaration/definition.  */
10204   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
10205     cp_parser_objc_declaration (parser, NULL_TREE);
10206   else if (c_dialect_objc ()
10207 	   && token1.keyword == RID_ATTRIBUTE
10208 	   && cp_parser_objc_valid_prefix_attributes (parser, &attributes))
10209     cp_parser_objc_declaration (parser, attributes);
10210   /* We must have either a block declaration or a function
10211      definition.  */
10212   else
10213     /* Try to parse a block-declaration, or a function-definition.  */
10214     cp_parser_block_declaration (parser, /*statement_p=*/false);
10215 
10216   /* Free any declarators allocated.  */
10217   obstack_free (&declarator_obstack, p);
10218 }
10219 
10220 /* Parse a block-declaration.
10221 
10222    block-declaration:
10223      simple-declaration
10224      asm-definition
10225      namespace-alias-definition
10226      using-declaration
10227      using-directive
10228 
10229    GNU Extension:
10230 
10231    block-declaration:
10232      __extension__ block-declaration
10233 
10234    C++0x Extension:
10235 
10236    block-declaration:
10237      static_assert-declaration
10238 
10239    If STATEMENT_P is TRUE, then this block-declaration is occurring as
10240    part of a declaration-statement.  */
10241 
10242 static void
10243 cp_parser_block_declaration (cp_parser *parser,
10244 			     bool      statement_p)
10245 {
10246   cp_token *token1;
10247   int saved_pedantic;
10248 
10249   /* Check for the `__extension__' keyword.  */
10250   if (cp_parser_extension_opt (parser, &saved_pedantic))
10251     {
10252       /* Parse the qualified declaration.  */
10253       cp_parser_block_declaration (parser, statement_p);
10254       /* Restore the PEDANTIC flag.  */
10255       pedantic = saved_pedantic;
10256 
10257       return;
10258     }
10259 
10260   /* Peek at the next token to figure out which kind of declaration is
10261      present.  */
10262   token1 = cp_lexer_peek_token (parser->lexer);
10263 
10264   /* If the next keyword is `asm', we have an asm-definition.  */
10265   if (token1->keyword == RID_ASM)
10266     {
10267       if (statement_p)
10268 	cp_parser_commit_to_tentative_parse (parser);
10269       cp_parser_asm_definition (parser);
10270     }
10271   /* If the next keyword is `namespace', we have a
10272      namespace-alias-definition.  */
10273   else if (token1->keyword == RID_NAMESPACE)
10274     cp_parser_namespace_alias_definition (parser);
10275   /* If the next keyword is `using', we have a
10276      using-declaration, a using-directive, or an alias-declaration.  */
10277   else if (token1->keyword == RID_USING)
10278     {
10279       cp_token *token2;
10280 
10281       if (statement_p)
10282 	cp_parser_commit_to_tentative_parse (parser);
10283       /* If the token after `using' is `namespace', then we have a
10284 	 using-directive.  */
10285       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
10286       if (token2->keyword == RID_NAMESPACE)
10287 	cp_parser_using_directive (parser);
10288       /* If the second token after 'using' is '=', then we have an
10289 	 alias-declaration.  */
10290       else if (cxx_dialect >= cxx0x
10291 	       && token2->type == CPP_NAME
10292 	       && ((cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_EQ)
10293 		   || (cp_lexer_peek_nth_token (parser->lexer, 3)->keyword
10294 		       == RID_ATTRIBUTE)))
10295 	cp_parser_alias_declaration (parser);
10296       /* Otherwise, it's a using-declaration.  */
10297       else
10298 	cp_parser_using_declaration (parser,
10299 				     /*access_declaration_p=*/false);
10300     }
10301   /* If the next keyword is `__label__' we have a misplaced label
10302      declaration.  */
10303   else if (token1->keyword == RID_LABEL)
10304     {
10305       cp_lexer_consume_token (parser->lexer);
10306       error_at (token1->location, "%<__label__%> not at the beginning of a block");
10307       cp_parser_skip_to_end_of_statement (parser);
10308       /* If the next token is now a `;', consume it.  */
10309       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
10310 	cp_lexer_consume_token (parser->lexer);
10311     }
10312   /* If the next token is `static_assert' we have a static assertion.  */
10313   else if (token1->keyword == RID_STATIC_ASSERT)
10314     cp_parser_static_assert (parser, /*member_p=*/false);
10315   /* Anything else must be a simple-declaration.  */
10316   else
10317     cp_parser_simple_declaration (parser, !statement_p,
10318 				  /*maybe_range_for_decl*/NULL);
10319 }
10320 
10321 /* Parse a simple-declaration.
10322 
10323    simple-declaration:
10324      decl-specifier-seq [opt] init-declarator-list [opt] ;
10325 
10326    init-declarator-list:
10327      init-declarator
10328      init-declarator-list , init-declarator
10329 
10330    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
10331    function-definition as a simple-declaration.
10332 
10333    If MAYBE_RANGE_FOR_DECL is not NULL, the pointed tree will be set to the
10334    parsed declaration if it is an uninitialized single declarator not followed
10335    by a `;', or to error_mark_node otherwise. Either way, the trailing `;',
10336    if present, will not be consumed.  */
10337 
10338 static void
10339 cp_parser_simple_declaration (cp_parser* parser,
10340 			      bool function_definition_allowed_p,
10341 			      tree *maybe_range_for_decl)
10342 {
10343   cp_decl_specifier_seq decl_specifiers;
10344   int declares_class_or_enum;
10345   bool saw_declarator;
10346 
10347   if (maybe_range_for_decl)
10348     *maybe_range_for_decl = NULL_TREE;
10349 
10350   /* Defer access checks until we know what is being declared; the
10351      checks for names appearing in the decl-specifier-seq should be
10352      done as if we were in the scope of the thing being declared.  */
10353   push_deferring_access_checks (dk_deferred);
10354 
10355   /* Parse the decl-specifier-seq.  We have to keep track of whether
10356      or not the decl-specifier-seq declares a named class or
10357      enumeration type, since that is the only case in which the
10358      init-declarator-list is allowed to be empty.
10359 
10360      [dcl.dcl]
10361 
10362      In a simple-declaration, the optional init-declarator-list can be
10363      omitted only when declaring a class or enumeration, that is when
10364      the decl-specifier-seq contains either a class-specifier, an
10365      elaborated-type-specifier, or an enum-specifier.  */
10366   cp_parser_decl_specifier_seq (parser,
10367 				CP_PARSER_FLAGS_OPTIONAL,
10368 				&decl_specifiers,
10369 				&declares_class_or_enum);
10370   /* We no longer need to defer access checks.  */
10371   stop_deferring_access_checks ();
10372 
10373   /* In a block scope, a valid declaration must always have a
10374      decl-specifier-seq.  By not trying to parse declarators, we can
10375      resolve the declaration/expression ambiguity more quickly.  */
10376   if (!function_definition_allowed_p
10377       && !decl_specifiers.any_specifiers_p)
10378     {
10379       cp_parser_error (parser, "expected declaration");
10380       goto done;
10381     }
10382 
10383   /* If the next two tokens are both identifiers, the code is
10384      erroneous. The usual cause of this situation is code like:
10385 
10386        T t;
10387 
10388      where "T" should name a type -- but does not.  */
10389   if (!decl_specifiers.any_type_specifiers_p
10390       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
10391     {
10392       /* If parsing tentatively, we should commit; we really are
10393 	 looking at a declaration.  */
10394       cp_parser_commit_to_tentative_parse (parser);
10395       /* Give up.  */
10396       goto done;
10397     }
10398 
10399   /* If we have seen at least one decl-specifier, and the next token
10400      is not a parenthesis, then we must be looking at a declaration.
10401      (After "int (" we might be looking at a functional cast.)  */
10402   if (decl_specifiers.any_specifiers_p
10403       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN)
10404       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
10405       && !cp_parser_error_occurred (parser))
10406     cp_parser_commit_to_tentative_parse (parser);
10407 
10408   /* Keep going until we hit the `;' at the end of the simple
10409      declaration.  */
10410   saw_declarator = false;
10411   while (cp_lexer_next_token_is_not (parser->lexer,
10412 				     CPP_SEMICOLON))
10413     {
10414       cp_token *token;
10415       bool function_definition_p;
10416       tree decl;
10417 
10418       if (saw_declarator)
10419 	{
10420 	  /* If we are processing next declarator, coma is expected */
10421 	  token = cp_lexer_peek_token (parser->lexer);
10422 	  gcc_assert (token->type == CPP_COMMA);
10423 	  cp_lexer_consume_token (parser->lexer);
10424 	  if (maybe_range_for_decl)
10425 	    *maybe_range_for_decl = error_mark_node;
10426 	}
10427       else
10428 	saw_declarator = true;
10429 
10430       /* Parse the init-declarator.  */
10431       decl = cp_parser_init_declarator (parser, &decl_specifiers,
10432 					/*checks=*/NULL,
10433 					function_definition_allowed_p,
10434 					/*member_p=*/false,
10435 					declares_class_or_enum,
10436 					&function_definition_p,
10437 					maybe_range_for_decl);
10438       /* If an error occurred while parsing tentatively, exit quickly.
10439 	 (That usually happens when in the body of a function; each
10440 	 statement is treated as a declaration-statement until proven
10441 	 otherwise.)  */
10442       if (cp_parser_error_occurred (parser))
10443 	goto done;
10444       /* Handle function definitions specially.  */
10445       if (function_definition_p)
10446 	{
10447 	  /* If the next token is a `,', then we are probably
10448 	     processing something like:
10449 
10450 	       void f() {}, *p;
10451 
10452 	     which is erroneous.  */
10453 	  if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
10454 	    {
10455 	      cp_token *token = cp_lexer_peek_token (parser->lexer);
10456 	      error_at (token->location,
10457 			"mixing"
10458 			" declarations and function-definitions is forbidden");
10459 	    }
10460 	  /* Otherwise, we're done with the list of declarators.  */
10461 	  else
10462 	    {
10463 	      pop_deferring_access_checks ();
10464 	      return;
10465 	    }
10466 	}
10467       if (maybe_range_for_decl && *maybe_range_for_decl == NULL_TREE)
10468 	*maybe_range_for_decl = decl;
10469       /* The next token should be either a `,' or a `;'.  */
10470       token = cp_lexer_peek_token (parser->lexer);
10471       /* If it's a `,', there are more declarators to come.  */
10472       if (token->type == CPP_COMMA)
10473 	/* will be consumed next time around */;
10474       /* If it's a `;', we are done.  */
10475       else if (token->type == CPP_SEMICOLON || maybe_range_for_decl)
10476 	break;
10477       /* Anything else is an error.  */
10478       else
10479 	{
10480 	  /* If we have already issued an error message we don't need
10481 	     to issue another one.  */
10482 	  if (decl != error_mark_node
10483 	      || cp_parser_uncommitted_to_tentative_parse_p (parser))
10484 	    cp_parser_error (parser, "expected %<,%> or %<;%>");
10485 	  /* Skip tokens until we reach the end of the statement.  */
10486 	  cp_parser_skip_to_end_of_statement (parser);
10487 	  /* If the next token is now a `;', consume it.  */
10488 	  if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
10489 	    cp_lexer_consume_token (parser->lexer);
10490 	  goto done;
10491 	}
10492       /* After the first time around, a function-definition is not
10493 	 allowed -- even if it was OK at first.  For example:
10494 
10495 	   int i, f() {}
10496 
10497 	 is not valid.  */
10498       function_definition_allowed_p = false;
10499     }
10500 
10501   /* Issue an error message if no declarators are present, and the
10502      decl-specifier-seq does not itself declare a class or
10503      enumeration.  */
10504   if (!saw_declarator)
10505     {
10506       if (cp_parser_declares_only_class_p (parser))
10507 	shadow_tag (&decl_specifiers);
10508       /* Perform any deferred access checks.  */
10509       perform_deferred_access_checks ();
10510     }
10511 
10512   /* Consume the `;'.  */
10513   if (!maybe_range_for_decl)
10514       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
10515 
10516  done:
10517   pop_deferring_access_checks ();
10518 }
10519 
10520 /* Parse a decl-specifier-seq.
10521 
10522    decl-specifier-seq:
10523      decl-specifier-seq [opt] decl-specifier
10524 
10525    decl-specifier:
10526      storage-class-specifier
10527      type-specifier
10528      function-specifier
10529      friend
10530      typedef
10531 
10532    GNU Extension:
10533 
10534    decl-specifier:
10535      attributes
10536 
10537    Set *DECL_SPECS to a representation of the decl-specifier-seq.
10538 
10539    The parser flags FLAGS is used to control type-specifier parsing.
10540 
10541    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
10542    flags:
10543 
10544      1: one of the decl-specifiers is an elaborated-type-specifier
10545 	(i.e., a type declaration)
10546      2: one of the decl-specifiers is an enum-specifier or a
10547 	class-specifier (i.e., a type definition)
10548 
10549    */
10550 
10551 static void
10552 cp_parser_decl_specifier_seq (cp_parser* parser,
10553 			      cp_parser_flags flags,
10554 			      cp_decl_specifier_seq *decl_specs,
10555 			      int* declares_class_or_enum)
10556 {
10557   bool constructor_possible_p = !parser->in_declarator_p;
10558   cp_token *start_token = NULL;
10559 
10560   /* Clear DECL_SPECS.  */
10561   clear_decl_specs (decl_specs);
10562 
10563   /* Assume no class or enumeration type is declared.  */
10564   *declares_class_or_enum = 0;
10565 
10566   /* Keep reading specifiers until there are no more to read.  */
10567   while (true)
10568     {
10569       bool constructor_p;
10570       bool found_decl_spec;
10571       cp_token *token;
10572 
10573       /* Peek at the next token.  */
10574       token = cp_lexer_peek_token (parser->lexer);
10575 
10576       /* Save the first token of the decl spec list for error
10577          reporting.  */
10578       if (!start_token)
10579 	start_token = token;
10580       /* Handle attributes.  */
10581       if (token->keyword == RID_ATTRIBUTE)
10582 	{
10583 	  /* Parse the attributes.  */
10584 	  decl_specs->attributes
10585 	    = chainon (decl_specs->attributes,
10586 		       cp_parser_attributes_opt (parser));
10587 	  continue;
10588 	}
10589       /* Assume we will find a decl-specifier keyword.  */
10590       found_decl_spec = true;
10591       /* If the next token is an appropriate keyword, we can simply
10592 	 add it to the list.  */
10593       switch (token->keyword)
10594 	{
10595 	  /* decl-specifier:
10596 	       friend
10597                constexpr */
10598 	case RID_FRIEND:
10599 	  if (!at_class_scope_p ())
10600 	    {
10601 	      error_at (token->location, "%<friend%> used outside of class");
10602 	      cp_lexer_purge_token (parser->lexer);
10603 	    }
10604 	  else
10605 	    {
10606 	      ++decl_specs->specs[(int) ds_friend];
10607 	      /* Consume the token.  */
10608 	      cp_lexer_consume_token (parser->lexer);
10609 	    }
10610 	  break;
10611 
10612         case RID_CONSTEXPR:
10613           ++decl_specs->specs[(int) ds_constexpr];
10614           cp_lexer_consume_token (parser->lexer);
10615           break;
10616 
10617 	  /* function-specifier:
10618 	       inline
10619 	       virtual
10620 	       explicit  */
10621 	case RID_INLINE:
10622 	case RID_VIRTUAL:
10623 	case RID_EXPLICIT:
10624 	  cp_parser_function_specifier_opt (parser, decl_specs);
10625 	  break;
10626 
10627 	  /* decl-specifier:
10628 	       typedef  */
10629 	case RID_TYPEDEF:
10630 	  ++decl_specs->specs[(int) ds_typedef];
10631 	  /* Consume the token.  */
10632 	  cp_lexer_consume_token (parser->lexer);
10633 	  /* A constructor declarator cannot appear in a typedef.  */
10634 	  constructor_possible_p = false;
10635 	  /* The "typedef" keyword can only occur in a declaration; we
10636 	     may as well commit at this point.  */
10637 	  cp_parser_commit_to_tentative_parse (parser);
10638 
10639           if (decl_specs->storage_class != sc_none)
10640             decl_specs->conflicting_specifiers_p = true;
10641 	  break;
10642 
10643 	  /* storage-class-specifier:
10644 	       auto
10645 	       register
10646 	       static
10647 	       extern
10648 	       mutable
10649 
10650 	     GNU Extension:
10651 	       thread  */
10652 	case RID_AUTO:
10653           if (cxx_dialect == cxx98)
10654             {
10655 	      /* Consume the token.  */
10656 	      cp_lexer_consume_token (parser->lexer);
10657 
10658               /* Complain about `auto' as a storage specifier, if
10659                  we're complaining about C++0x compatibility.  */
10660               warning_at (token->location, OPT_Wc__0x_compat, "%<auto%>"
10661 			  " changes meaning in C++11; please remove it");
10662 
10663               /* Set the storage class anyway.  */
10664               cp_parser_set_storage_class (parser, decl_specs, RID_AUTO,
10665 					   token->location);
10666             }
10667           else
10668 	    /* C++0x auto type-specifier.  */
10669 	    found_decl_spec = false;
10670           break;
10671 
10672 	case RID_REGISTER:
10673 	case RID_STATIC:
10674 	case RID_EXTERN:
10675 	case RID_MUTABLE:
10676 	  /* Consume the token.  */
10677 	  cp_lexer_consume_token (parser->lexer);
10678           cp_parser_set_storage_class (parser, decl_specs, token->keyword,
10679 				       token->location);
10680 	  break;
10681 	case RID_THREAD:
10682 	  /* Consume the token.  */
10683 	  cp_lexer_consume_token (parser->lexer);
10684 	  ++decl_specs->specs[(int) ds_thread];
10685 	  break;
10686 
10687 	default:
10688 	  /* We did not yet find a decl-specifier yet.  */
10689 	  found_decl_spec = false;
10690 	  break;
10691 	}
10692 
10693       if (found_decl_spec
10694 	  && (flags & CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR)
10695 	  && token->keyword != RID_CONSTEXPR)
10696 	error ("decl-specifier invalid in condition");
10697 
10698       /* Constructors are a special case.  The `S' in `S()' is not a
10699 	 decl-specifier; it is the beginning of the declarator.  */
10700       constructor_p
10701 	= (!found_decl_spec
10702 	   && constructor_possible_p
10703 	   && (cp_parser_constructor_declarator_p
10704 	       (parser, decl_specs->specs[(int) ds_friend] != 0)));
10705 
10706       /* If we don't have a DECL_SPEC yet, then we must be looking at
10707 	 a type-specifier.  */
10708       if (!found_decl_spec && !constructor_p)
10709 	{
10710 	  int decl_spec_declares_class_or_enum;
10711 	  bool is_cv_qualifier;
10712 	  tree type_spec;
10713 
10714 	  type_spec
10715 	    = cp_parser_type_specifier (parser, flags,
10716 					decl_specs,
10717 					/*is_declaration=*/true,
10718 					&decl_spec_declares_class_or_enum,
10719 					&is_cv_qualifier);
10720 	  *declares_class_or_enum |= decl_spec_declares_class_or_enum;
10721 
10722 	  /* If this type-specifier referenced a user-defined type
10723 	     (a typedef, class-name, etc.), then we can't allow any
10724 	     more such type-specifiers henceforth.
10725 
10726 	     [dcl.spec]
10727 
10728 	     The longest sequence of decl-specifiers that could
10729 	     possibly be a type name is taken as the
10730 	     decl-specifier-seq of a declaration.  The sequence shall
10731 	     be self-consistent as described below.
10732 
10733 	     [dcl.type]
10734 
10735 	     As a general rule, at most one type-specifier is allowed
10736 	     in the complete decl-specifier-seq of a declaration.  The
10737 	     only exceptions are the following:
10738 
10739 	     -- const or volatile can be combined with any other
10740 		type-specifier.
10741 
10742 	     -- signed or unsigned can be combined with char, long,
10743 		short, or int.
10744 
10745 	     -- ..
10746 
10747 	     Example:
10748 
10749 	       typedef char* Pc;
10750 	       void g (const int Pc);
10751 
10752 	     Here, Pc is *not* part of the decl-specifier seq; it's
10753 	     the declarator.  Therefore, once we see a type-specifier
10754 	     (other than a cv-qualifier), we forbid any additional
10755 	     user-defined types.  We *do* still allow things like `int
10756 	     int' to be considered a decl-specifier-seq, and issue the
10757 	     error message later.  */
10758 	  if (type_spec && !is_cv_qualifier)
10759 	    flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
10760 	  /* A constructor declarator cannot follow a type-specifier.  */
10761 	  if (type_spec)
10762 	    {
10763 	      constructor_possible_p = false;
10764 	      found_decl_spec = true;
10765 	      if (!is_cv_qualifier)
10766 		decl_specs->any_type_specifiers_p = true;
10767 	    }
10768 	}
10769 
10770       /* If we still do not have a DECL_SPEC, then there are no more
10771 	 decl-specifiers.  */
10772       if (!found_decl_spec)
10773 	break;
10774 
10775       decl_specs->any_specifiers_p = true;
10776       /* After we see one decl-specifier, further decl-specifiers are
10777 	 always optional.  */
10778       flags |= CP_PARSER_FLAGS_OPTIONAL;
10779     }
10780 
10781   cp_parser_check_decl_spec (decl_specs, start_token->location);
10782 
10783   /* Don't allow a friend specifier with a class definition.  */
10784   if (decl_specs->specs[(int) ds_friend] != 0
10785       && (*declares_class_or_enum & 2))
10786     error_at (start_token->location,
10787 	      "class definition may not be declared a friend");
10788 }
10789 
10790 /* Parse an (optional) storage-class-specifier.
10791 
10792    storage-class-specifier:
10793      auto
10794      register
10795      static
10796      extern
10797      mutable
10798 
10799    GNU Extension:
10800 
10801    storage-class-specifier:
10802      thread
10803 
10804    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
10805 
10806 static tree
10807 cp_parser_storage_class_specifier_opt (cp_parser* parser)
10808 {
10809   switch (cp_lexer_peek_token (parser->lexer)->keyword)
10810     {
10811     case RID_AUTO:
10812       if (cxx_dialect != cxx98)
10813         return NULL_TREE;
10814       /* Fall through for C++98.  */
10815 
10816     case RID_REGISTER:
10817     case RID_STATIC:
10818     case RID_EXTERN:
10819     case RID_MUTABLE:
10820     case RID_THREAD:
10821       /* Consume the token.  */
10822       return cp_lexer_consume_token (parser->lexer)->u.value;
10823 
10824     default:
10825       return NULL_TREE;
10826     }
10827 }
10828 
10829 /* Parse an (optional) function-specifier.
10830 
10831    function-specifier:
10832      inline
10833      virtual
10834      explicit
10835 
10836    Returns an IDENTIFIER_NODE corresponding to the keyword used.
10837    Updates DECL_SPECS, if it is non-NULL.  */
10838 
10839 static tree
10840 cp_parser_function_specifier_opt (cp_parser* parser,
10841 				  cp_decl_specifier_seq *decl_specs)
10842 {
10843   cp_token *token = cp_lexer_peek_token (parser->lexer);
10844   switch (token->keyword)
10845     {
10846     case RID_INLINE:
10847       if (decl_specs)
10848 	++decl_specs->specs[(int) ds_inline];
10849       break;
10850 
10851     case RID_VIRTUAL:
10852       /* 14.5.2.3 [temp.mem]
10853 
10854 	 A member function template shall not be virtual.  */
10855       if (PROCESSING_REAL_TEMPLATE_DECL_P ())
10856 	error_at (token->location, "templates may not be %<virtual%>");
10857       else if (decl_specs)
10858 	++decl_specs->specs[(int) ds_virtual];
10859       break;
10860 
10861     case RID_EXPLICIT:
10862       if (decl_specs)
10863 	++decl_specs->specs[(int) ds_explicit];
10864       break;
10865 
10866     default:
10867       return NULL_TREE;
10868     }
10869 
10870   /* Consume the token.  */
10871   return cp_lexer_consume_token (parser->lexer)->u.value;
10872 }
10873 
10874 /* Parse a linkage-specification.
10875 
10876    linkage-specification:
10877      extern string-literal { declaration-seq [opt] }
10878      extern string-literal declaration  */
10879 
10880 static void
10881 cp_parser_linkage_specification (cp_parser* parser)
10882 {
10883   tree linkage;
10884 
10885   /* Look for the `extern' keyword.  */
10886   cp_parser_require_keyword (parser, RID_EXTERN, RT_EXTERN);
10887 
10888   /* Look for the string-literal.  */
10889   linkage = cp_parser_string_literal (parser, false, false);
10890 
10891   /* Transform the literal into an identifier.  If the literal is a
10892      wide-character string, or contains embedded NULs, then we can't
10893      handle it as the user wants.  */
10894   if (strlen (TREE_STRING_POINTER (linkage))
10895       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
10896     {
10897       cp_parser_error (parser, "invalid linkage-specification");
10898       /* Assume C++ linkage.  */
10899       linkage = lang_name_cplusplus;
10900     }
10901   else
10902     linkage = get_identifier (TREE_STRING_POINTER (linkage));
10903 
10904   /* We're now using the new linkage.  */
10905   push_lang_context (linkage);
10906 
10907   /* If the next token is a `{', then we're using the first
10908      production.  */
10909   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
10910     {
10911       /* Consume the `{' token.  */
10912       cp_lexer_consume_token (parser->lexer);
10913       /* Parse the declarations.  */
10914       cp_parser_declaration_seq_opt (parser);
10915       /* Look for the closing `}'.  */
10916       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
10917     }
10918   /* Otherwise, there's just one declaration.  */
10919   else
10920     {
10921       bool saved_in_unbraced_linkage_specification_p;
10922 
10923       saved_in_unbraced_linkage_specification_p
10924 	= parser->in_unbraced_linkage_specification_p;
10925       parser->in_unbraced_linkage_specification_p = true;
10926       cp_parser_declaration (parser);
10927       parser->in_unbraced_linkage_specification_p
10928 	= saved_in_unbraced_linkage_specification_p;
10929     }
10930 
10931   /* We're done with the linkage-specification.  */
10932   pop_lang_context ();
10933 }
10934 
10935 /* Parse a static_assert-declaration.
10936 
10937    static_assert-declaration:
10938      static_assert ( constant-expression , string-literal ) ;
10939 
10940    If MEMBER_P, this static_assert is a class member.  */
10941 
10942 static void
10943 cp_parser_static_assert(cp_parser *parser, bool member_p)
10944 {
10945   tree condition;
10946   tree message;
10947   cp_token *token;
10948   location_t saved_loc;
10949   bool dummy;
10950 
10951   /* Peek at the `static_assert' token so we can keep track of exactly
10952      where the static assertion started.  */
10953   token = cp_lexer_peek_token (parser->lexer);
10954   saved_loc = token->location;
10955 
10956   /* Look for the `static_assert' keyword.  */
10957   if (!cp_parser_require_keyword (parser, RID_STATIC_ASSERT,
10958                                   RT_STATIC_ASSERT))
10959     return;
10960 
10961   /*  We know we are in a static assertion; commit to any tentative
10962       parse.  */
10963   if (cp_parser_parsing_tentatively (parser))
10964     cp_parser_commit_to_tentative_parse (parser);
10965 
10966   /* Parse the `(' starting the static assertion condition.  */
10967   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
10968 
10969   /* Parse the constant-expression.  Allow a non-constant expression
10970      here in order to give better diagnostics in finish_static_assert.  */
10971   condition =
10972     cp_parser_constant_expression (parser,
10973                                    /*allow_non_constant_p=*/true,
10974                                    /*non_constant_p=*/&dummy);
10975 
10976   /* Parse the separating `,'.  */
10977   cp_parser_require (parser, CPP_COMMA, RT_COMMA);
10978 
10979   /* Parse the string-literal message.  */
10980   message = cp_parser_string_literal (parser,
10981                                       /*translate=*/false,
10982                                       /*wide_ok=*/true);
10983 
10984   /* A `)' completes the static assertion.  */
10985   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
10986     cp_parser_skip_to_closing_parenthesis (parser,
10987                                            /*recovering=*/true,
10988                                            /*or_comma=*/false,
10989 					   /*consume_paren=*/true);
10990 
10991   /* A semicolon terminates the declaration.  */
10992   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
10993 
10994   /* Complete the static assertion, which may mean either processing
10995      the static assert now or saving it for template instantiation.  */
10996   finish_static_assert (condition, message, saved_loc, member_p);
10997 }
10998 
10999 /* Parse a `decltype' type. Returns the type.
11000 
11001    simple-type-specifier:
11002      decltype ( expression )  */
11003 
11004 static tree
11005 cp_parser_decltype (cp_parser *parser)
11006 {
11007   tree expr;
11008   bool id_expression_or_member_access_p = false;
11009   const char *saved_message;
11010   bool saved_integral_constant_expression_p;
11011   bool saved_non_integral_constant_expression_p;
11012   cp_token *id_expr_start_token;
11013   cp_token *start_token = cp_lexer_peek_token (parser->lexer);
11014 
11015   if (start_token->type == CPP_DECLTYPE)
11016     {
11017       /* Already parsed.  */
11018       cp_lexer_consume_token (parser->lexer);
11019       return start_token->u.value;
11020     }
11021 
11022   /* Look for the `decltype' token.  */
11023   if (!cp_parser_require_keyword (parser, RID_DECLTYPE, RT_DECLTYPE))
11024     return error_mark_node;
11025 
11026   /* Types cannot be defined in a `decltype' expression.  Save away the
11027      old message.  */
11028   saved_message = parser->type_definition_forbidden_message;
11029 
11030   /* And create the new one.  */
11031   parser->type_definition_forbidden_message
11032     = G_("types may not be defined in %<decltype%> expressions");
11033 
11034   /* The restrictions on constant-expressions do not apply inside
11035      decltype expressions.  */
11036   saved_integral_constant_expression_p
11037     = parser->integral_constant_expression_p;
11038   saved_non_integral_constant_expression_p
11039     = parser->non_integral_constant_expression_p;
11040   parser->integral_constant_expression_p = false;
11041 
11042   /* Do not actually evaluate the expression.  */
11043   ++cp_unevaluated_operand;
11044 
11045   /* Do not warn about problems with the expression.  */
11046   ++c_inhibit_evaluation_warnings;
11047 
11048   /* Parse the opening `('.  */
11049   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
11050     return error_mark_node;
11051 
11052   /* First, try parsing an id-expression.  */
11053   id_expr_start_token = cp_lexer_peek_token (parser->lexer);
11054   cp_parser_parse_tentatively (parser);
11055   expr = cp_parser_id_expression (parser,
11056                                   /*template_keyword_p=*/false,
11057                                   /*check_dependency_p=*/true,
11058                                   /*template_p=*/NULL,
11059                                   /*declarator_p=*/false,
11060                                   /*optional_p=*/false);
11061 
11062   if (!cp_parser_error_occurred (parser) && expr != error_mark_node)
11063     {
11064       bool non_integral_constant_expression_p = false;
11065       tree id_expression = expr;
11066       cp_id_kind idk;
11067       const char *error_msg;
11068 
11069       if (TREE_CODE (expr) == IDENTIFIER_NODE)
11070 	/* Lookup the name we got back from the id-expression.  */
11071 	expr = cp_parser_lookup_name (parser, expr,
11072 				      none_type,
11073 				      /*is_template=*/false,
11074 				      /*is_namespace=*/false,
11075 				      /*check_dependency=*/true,
11076 				      /*ambiguous_decls=*/NULL,
11077 				      id_expr_start_token->location);
11078 
11079       if (expr
11080           && expr != error_mark_node
11081           && TREE_CODE (expr) != TEMPLATE_ID_EXPR
11082           && TREE_CODE (expr) != TYPE_DECL
11083 	  && (TREE_CODE (expr) != BIT_NOT_EXPR
11084 	      || !TYPE_P (TREE_OPERAND (expr, 0)))
11085           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
11086         {
11087           /* Complete lookup of the id-expression.  */
11088           expr = (finish_id_expression
11089                   (id_expression, expr, parser->scope, &idk,
11090                    /*integral_constant_expression_p=*/false,
11091                    /*allow_non_integral_constant_expression_p=*/true,
11092                    &non_integral_constant_expression_p,
11093                    /*template_p=*/false,
11094                    /*done=*/true,
11095                    /*address_p=*/false,
11096                    /*template_arg_p=*/false,
11097                    &error_msg,
11098 		   id_expr_start_token->location));
11099 
11100           if (expr == error_mark_node)
11101             /* We found an id-expression, but it was something that we
11102                should not have found. This is an error, not something
11103                we can recover from, so note that we found an
11104                id-expression and we'll recover as gracefully as
11105                possible.  */
11106             id_expression_or_member_access_p = true;
11107         }
11108 
11109       if (expr
11110           && expr != error_mark_node
11111           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
11112         /* We have an id-expression.  */
11113         id_expression_or_member_access_p = true;
11114     }
11115 
11116   if (!id_expression_or_member_access_p)
11117     {
11118       /* Abort the id-expression parse.  */
11119       cp_parser_abort_tentative_parse (parser);
11120 
11121       /* Parsing tentatively, again.  */
11122       cp_parser_parse_tentatively (parser);
11123 
11124       /* Parse a class member access.  */
11125       expr = cp_parser_postfix_expression (parser, /*address_p=*/false,
11126                                            /*cast_p=*/false,
11127                                            /*member_access_only_p=*/true, NULL);
11128 
11129       if (expr
11130           && expr != error_mark_node
11131           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
11132         /* We have an id-expression.  */
11133         id_expression_or_member_access_p = true;
11134     }
11135 
11136   if (id_expression_or_member_access_p)
11137     /* We have parsed the complete id-expression or member access.  */
11138     cp_parser_parse_definitely (parser);
11139   else
11140     {
11141       bool saved_greater_than_is_operator_p;
11142 
11143       /* Abort our attempt to parse an id-expression or member access
11144          expression.  */
11145       cp_parser_abort_tentative_parse (parser);
11146 
11147       /* Within a parenthesized expression, a `>' token is always
11148 	 the greater-than operator.  */
11149       saved_greater_than_is_operator_p
11150 	= parser->greater_than_is_operator_p;
11151       parser->greater_than_is_operator_p = true;
11152 
11153       /* Parse a full expression.  */
11154       expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
11155 
11156       /* The `>' token might be the end of a template-id or
11157 	 template-parameter-list now.  */
11158       parser->greater_than_is_operator_p
11159 	= saved_greater_than_is_operator_p;
11160     }
11161 
11162   /* Go back to evaluating expressions.  */
11163   --cp_unevaluated_operand;
11164   --c_inhibit_evaluation_warnings;
11165 
11166   /* Restore the old message and the integral constant expression
11167      flags.  */
11168   parser->type_definition_forbidden_message = saved_message;
11169   parser->integral_constant_expression_p
11170     = saved_integral_constant_expression_p;
11171   parser->non_integral_constant_expression_p
11172     = saved_non_integral_constant_expression_p;
11173 
11174   /* Parse to the closing `)'.  */
11175   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
11176     {
11177       cp_parser_skip_to_closing_parenthesis (parser, true, false,
11178 					     /*consume_paren=*/true);
11179       return error_mark_node;
11180     }
11181 
11182   expr = finish_decltype_type (expr, id_expression_or_member_access_p,
11183 			       tf_warning_or_error);
11184 
11185   /* Replace the decltype with a CPP_DECLTYPE so we don't need to parse
11186      it again.  */
11187   start_token->type = CPP_DECLTYPE;
11188   start_token->u.value = expr;
11189   start_token->keyword = RID_MAX;
11190   cp_lexer_purge_tokens_after (parser->lexer, start_token);
11191 
11192   return expr;
11193 }
11194 
11195 /* Special member functions [gram.special] */
11196 
11197 /* Parse a conversion-function-id.
11198 
11199    conversion-function-id:
11200      operator conversion-type-id
11201 
11202    Returns an IDENTIFIER_NODE representing the operator.  */
11203 
11204 static tree
11205 cp_parser_conversion_function_id (cp_parser* parser)
11206 {
11207   tree type;
11208   tree saved_scope;
11209   tree saved_qualifying_scope;
11210   tree saved_object_scope;
11211   tree pushed_scope = NULL_TREE;
11212 
11213   /* Look for the `operator' token.  */
11214   if (!cp_parser_require_keyword (parser, RID_OPERATOR, RT_OPERATOR))
11215     return error_mark_node;
11216   /* When we parse the conversion-type-id, the current scope will be
11217      reset.  However, we need that information in able to look up the
11218      conversion function later, so we save it here.  */
11219   saved_scope = parser->scope;
11220   saved_qualifying_scope = parser->qualifying_scope;
11221   saved_object_scope = parser->object_scope;
11222   /* We must enter the scope of the class so that the names of
11223      entities declared within the class are available in the
11224      conversion-type-id.  For example, consider:
11225 
11226        struct S {
11227 	 typedef int I;
11228 	 operator I();
11229        };
11230 
11231        S::operator I() { ... }
11232 
11233      In order to see that `I' is a type-name in the definition, we
11234      must be in the scope of `S'.  */
11235   if (saved_scope)
11236     pushed_scope = push_scope (saved_scope);
11237   /* Parse the conversion-type-id.  */
11238   type = cp_parser_conversion_type_id (parser);
11239   /* Leave the scope of the class, if any.  */
11240   if (pushed_scope)
11241     pop_scope (pushed_scope);
11242   /* Restore the saved scope.  */
11243   parser->scope = saved_scope;
11244   parser->qualifying_scope = saved_qualifying_scope;
11245   parser->object_scope = saved_object_scope;
11246   /* If the TYPE is invalid, indicate failure.  */
11247   if (type == error_mark_node)
11248     return error_mark_node;
11249   return mangle_conv_op_name_for_type (type);
11250 }
11251 
11252 /* Parse a conversion-type-id:
11253 
11254    conversion-type-id:
11255      type-specifier-seq conversion-declarator [opt]
11256 
11257    Returns the TYPE specified.  */
11258 
11259 static tree
11260 cp_parser_conversion_type_id (cp_parser* parser)
11261 {
11262   tree attributes;
11263   cp_decl_specifier_seq type_specifiers;
11264   cp_declarator *declarator;
11265   tree type_specified;
11266 
11267   /* Parse the attributes.  */
11268   attributes = cp_parser_attributes_opt (parser);
11269   /* Parse the type-specifiers.  */
11270   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
11271 				/*is_trailing_return=*/false,
11272 				&type_specifiers);
11273   /* If that didn't work, stop.  */
11274   if (type_specifiers.type == error_mark_node)
11275     return error_mark_node;
11276   /* Parse the conversion-declarator.  */
11277   declarator = cp_parser_conversion_declarator_opt (parser);
11278 
11279   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
11280 				    /*initialized=*/0, &attributes);
11281   if (attributes)
11282     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
11283 
11284   /* Don't give this error when parsing tentatively.  This happens to
11285      work because we always parse this definitively once.  */
11286   if (! cp_parser_uncommitted_to_tentative_parse_p (parser)
11287       && type_uses_auto (type_specified))
11288     {
11289       error ("invalid use of %<auto%> in conversion operator");
11290       return error_mark_node;
11291     }
11292 
11293   return type_specified;
11294 }
11295 
11296 /* Parse an (optional) conversion-declarator.
11297 
11298    conversion-declarator:
11299      ptr-operator conversion-declarator [opt]
11300 
11301    */
11302 
11303 static cp_declarator *
11304 cp_parser_conversion_declarator_opt (cp_parser* parser)
11305 {
11306   enum tree_code code;
11307   tree class_type;
11308   cp_cv_quals cv_quals;
11309 
11310   /* We don't know if there's a ptr-operator next, or not.  */
11311   cp_parser_parse_tentatively (parser);
11312   /* Try the ptr-operator.  */
11313   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
11314   /* If it worked, look for more conversion-declarators.  */
11315   if (cp_parser_parse_definitely (parser))
11316     {
11317       cp_declarator *declarator;
11318 
11319       /* Parse another optional declarator.  */
11320       declarator = cp_parser_conversion_declarator_opt (parser);
11321 
11322       return cp_parser_make_indirect_declarator
11323 	(code, class_type, cv_quals, declarator);
11324    }
11325 
11326   return NULL;
11327 }
11328 
11329 /* Parse an (optional) ctor-initializer.
11330 
11331    ctor-initializer:
11332      : mem-initializer-list
11333 
11334    Returns TRUE iff the ctor-initializer was actually present.  */
11335 
11336 static bool
11337 cp_parser_ctor_initializer_opt (cp_parser* parser)
11338 {
11339   /* If the next token is not a `:', then there is no
11340      ctor-initializer.  */
11341   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
11342     {
11343       /* Do default initialization of any bases and members.  */
11344       if (DECL_CONSTRUCTOR_P (current_function_decl))
11345 	finish_mem_initializers (NULL_TREE);
11346 
11347       return false;
11348     }
11349 
11350   /* Consume the `:' token.  */
11351   cp_lexer_consume_token (parser->lexer);
11352   /* And the mem-initializer-list.  */
11353   cp_parser_mem_initializer_list (parser);
11354 
11355   return true;
11356 }
11357 
11358 /* Parse a mem-initializer-list.
11359 
11360    mem-initializer-list:
11361      mem-initializer ... [opt]
11362      mem-initializer ... [opt] , mem-initializer-list  */
11363 
11364 static void
11365 cp_parser_mem_initializer_list (cp_parser* parser)
11366 {
11367   tree mem_initializer_list = NULL_TREE;
11368   tree target_ctor = error_mark_node;
11369   cp_token *token = cp_lexer_peek_token (parser->lexer);
11370 
11371   /* Let the semantic analysis code know that we are starting the
11372      mem-initializer-list.  */
11373   if (!DECL_CONSTRUCTOR_P (current_function_decl))
11374     error_at (token->location,
11375 	      "only constructors take member initializers");
11376 
11377   /* Loop through the list.  */
11378   while (true)
11379     {
11380       tree mem_initializer;
11381 
11382       token = cp_lexer_peek_token (parser->lexer);
11383       /* Parse the mem-initializer.  */
11384       mem_initializer = cp_parser_mem_initializer (parser);
11385       /* If the next token is a `...', we're expanding member initializers. */
11386       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
11387         {
11388           /* Consume the `...'. */
11389           cp_lexer_consume_token (parser->lexer);
11390 
11391           /* The TREE_PURPOSE must be a _TYPE, because base-specifiers
11392              can be expanded but members cannot. */
11393           if (mem_initializer != error_mark_node
11394               && !TYPE_P (TREE_PURPOSE (mem_initializer)))
11395             {
11396               error_at (token->location,
11397 			"cannot expand initializer for member %<%D%>",
11398 			TREE_PURPOSE (mem_initializer));
11399               mem_initializer = error_mark_node;
11400             }
11401 
11402           /* Construct the pack expansion type. */
11403           if (mem_initializer != error_mark_node)
11404             mem_initializer = make_pack_expansion (mem_initializer);
11405         }
11406       if (target_ctor != error_mark_node
11407 	  && mem_initializer != error_mark_node)
11408 	{
11409 	  error ("mem-initializer for %qD follows constructor delegation",
11410 		 TREE_PURPOSE (mem_initializer));
11411 	  mem_initializer = error_mark_node;
11412 	}
11413       /* Look for a target constructor. */
11414       if (mem_initializer != error_mark_node
11415 	  && TYPE_P (TREE_PURPOSE (mem_initializer))
11416 	  && same_type_p (TREE_PURPOSE (mem_initializer), current_class_type))
11417 	{
11418 	  maybe_warn_cpp0x (CPP0X_DELEGATING_CTORS);
11419 	  if (mem_initializer_list)
11420 	    {
11421 	      error ("constructor delegation follows mem-initializer for %qD",
11422 		     TREE_PURPOSE (mem_initializer_list));
11423 	      mem_initializer = error_mark_node;
11424 	    }
11425 	  target_ctor = mem_initializer;
11426 	}
11427       /* Add it to the list, unless it was erroneous.  */
11428       if (mem_initializer != error_mark_node)
11429 	{
11430 	  TREE_CHAIN (mem_initializer) = mem_initializer_list;
11431 	  mem_initializer_list = mem_initializer;
11432 	}
11433       /* If the next token is not a `,', we're done.  */
11434       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11435 	break;
11436       /* Consume the `,' token.  */
11437       cp_lexer_consume_token (parser->lexer);
11438     }
11439 
11440   /* Perform semantic analysis.  */
11441   if (DECL_CONSTRUCTOR_P (current_function_decl))
11442     finish_mem_initializers (mem_initializer_list);
11443 }
11444 
11445 /* Parse a mem-initializer.
11446 
11447    mem-initializer:
11448      mem-initializer-id ( expression-list [opt] )
11449      mem-initializer-id braced-init-list
11450 
11451    GNU extension:
11452 
11453    mem-initializer:
11454      ( expression-list [opt] )
11455 
11456    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
11457    class) or FIELD_DECL (for a non-static data member) to initialize;
11458    the TREE_VALUE is the expression-list.  An empty initialization
11459    list is represented by void_list_node.  */
11460 
11461 static tree
11462 cp_parser_mem_initializer (cp_parser* parser)
11463 {
11464   tree mem_initializer_id;
11465   tree expression_list;
11466   tree member;
11467   cp_token *token = cp_lexer_peek_token (parser->lexer);
11468 
11469   /* Find out what is being initialized.  */
11470   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
11471     {
11472       permerror (token->location,
11473 		 "anachronistic old-style base class initializer");
11474       mem_initializer_id = NULL_TREE;
11475     }
11476   else
11477     {
11478       mem_initializer_id = cp_parser_mem_initializer_id (parser);
11479       if (mem_initializer_id == error_mark_node)
11480 	return mem_initializer_id;
11481     }
11482   member = expand_member_init (mem_initializer_id);
11483   if (member && !DECL_P (member))
11484     in_base_initializer = 1;
11485 
11486   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
11487     {
11488       bool expr_non_constant_p;
11489       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
11490       expression_list = cp_parser_braced_list (parser, &expr_non_constant_p);
11491       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
11492       expression_list = build_tree_list (NULL_TREE, expression_list);
11493     }
11494   else
11495     {
11496       VEC(tree,gc)* vec;
11497       vec = cp_parser_parenthesized_expression_list (parser, non_attr,
11498 						     /*cast_p=*/false,
11499 						     /*allow_expansion_p=*/true,
11500 						     /*non_constant_p=*/NULL);
11501       if (vec == NULL)
11502 	return error_mark_node;
11503       expression_list = build_tree_list_vec (vec);
11504       release_tree_vector (vec);
11505     }
11506 
11507   if (expression_list == error_mark_node)
11508     return error_mark_node;
11509   if (!expression_list)
11510     expression_list = void_type_node;
11511 
11512   in_base_initializer = 0;
11513 
11514   return member ? build_tree_list (member, expression_list) : error_mark_node;
11515 }
11516 
11517 /* Parse a mem-initializer-id.
11518 
11519    mem-initializer-id:
11520      :: [opt] nested-name-specifier [opt] class-name
11521      identifier
11522 
11523    Returns a TYPE indicating the class to be initializer for the first
11524    production.  Returns an IDENTIFIER_NODE indicating the data member
11525    to be initialized for the second production.  */
11526 
11527 static tree
11528 cp_parser_mem_initializer_id (cp_parser* parser)
11529 {
11530   bool global_scope_p;
11531   bool nested_name_specifier_p;
11532   bool template_p = false;
11533   tree id;
11534 
11535   cp_token *token = cp_lexer_peek_token (parser->lexer);
11536 
11537   /* `typename' is not allowed in this context ([temp.res]).  */
11538   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
11539     {
11540       error_at (token->location,
11541 		"keyword %<typename%> not allowed in this context (a qualified "
11542 		"member initializer is implicitly a type)");
11543       cp_lexer_consume_token (parser->lexer);
11544     }
11545   /* Look for the optional `::' operator.  */
11546   global_scope_p
11547     = (cp_parser_global_scope_opt (parser,
11548 				   /*current_scope_valid_p=*/false)
11549        != NULL_TREE);
11550   /* Look for the optional nested-name-specifier.  The simplest way to
11551      implement:
11552 
11553        [temp.res]
11554 
11555        The keyword `typename' is not permitted in a base-specifier or
11556        mem-initializer; in these contexts a qualified name that
11557        depends on a template-parameter is implicitly assumed to be a
11558        type name.
11559 
11560      is to assume that we have seen the `typename' keyword at this
11561      point.  */
11562   nested_name_specifier_p
11563     = (cp_parser_nested_name_specifier_opt (parser,
11564 					    /*typename_keyword_p=*/true,
11565 					    /*check_dependency_p=*/true,
11566 					    /*type_p=*/true,
11567 					    /*is_declaration=*/true)
11568        != NULL_TREE);
11569   if (nested_name_specifier_p)
11570     template_p = cp_parser_optional_template_keyword (parser);
11571   /* If there is a `::' operator or a nested-name-specifier, then we
11572      are definitely looking for a class-name.  */
11573   if (global_scope_p || nested_name_specifier_p)
11574     return cp_parser_class_name (parser,
11575 				 /*typename_keyword_p=*/true,
11576 				 /*template_keyword_p=*/template_p,
11577 				 typename_type,
11578 				 /*check_dependency_p=*/true,
11579 				 /*class_head_p=*/false,
11580 				 /*is_declaration=*/true);
11581   /* Otherwise, we could also be looking for an ordinary identifier.  */
11582   cp_parser_parse_tentatively (parser);
11583   /* Try a class-name.  */
11584   id = cp_parser_class_name (parser,
11585 			     /*typename_keyword_p=*/true,
11586 			     /*template_keyword_p=*/false,
11587 			     none_type,
11588 			     /*check_dependency_p=*/true,
11589 			     /*class_head_p=*/false,
11590 			     /*is_declaration=*/true);
11591   /* If we found one, we're done.  */
11592   if (cp_parser_parse_definitely (parser))
11593     return id;
11594   /* Otherwise, look for an ordinary identifier.  */
11595   return cp_parser_identifier (parser);
11596 }
11597 
11598 /* Overloading [gram.over] */
11599 
11600 /* Parse an operator-function-id.
11601 
11602    operator-function-id:
11603      operator operator
11604 
11605    Returns an IDENTIFIER_NODE for the operator which is a
11606    human-readable spelling of the identifier, e.g., `operator +'.  */
11607 
11608 static tree
11609 cp_parser_operator_function_id (cp_parser* parser)
11610 {
11611   /* Look for the `operator' keyword.  */
11612   if (!cp_parser_require_keyword (parser, RID_OPERATOR, RT_OPERATOR))
11613     return error_mark_node;
11614   /* And then the name of the operator itself.  */
11615   return cp_parser_operator (parser);
11616 }
11617 
11618 /* Return an identifier node for a user-defined literal operator.
11619    The suffix identifier is chained to the operator name identifier.  */
11620 
11621 static tree
11622 cp_literal_operator_id (const char* name)
11623 {
11624   tree identifier;
11625   char *buffer = XNEWVEC (char, strlen (UDLIT_OP_ANSI_PREFIX)
11626 			      + strlen (name) + 10);
11627   sprintf (buffer, UDLIT_OP_ANSI_FORMAT, name);
11628   identifier = get_identifier (buffer);
11629   /*IDENTIFIER_UDLIT_OPNAME_P (identifier) = 1; If we get a flag someday. */
11630 
11631   return identifier;
11632 }
11633 
11634 /* Parse an operator.
11635 
11636    operator:
11637      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
11638      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
11639      || ++ -- , ->* -> () []
11640 
11641    GNU Extensions:
11642 
11643    operator:
11644      <? >? <?= >?=
11645 
11646    Returns an IDENTIFIER_NODE for the operator which is a
11647    human-readable spelling of the identifier, e.g., `operator +'.  */
11648 
11649 static tree
11650 cp_parser_operator (cp_parser* parser)
11651 {
11652   tree id = NULL_TREE;
11653   cp_token *token;
11654 
11655   /* Peek at the next token.  */
11656   token = cp_lexer_peek_token (parser->lexer);
11657   /* Figure out which operator we have.  */
11658   switch (token->type)
11659     {
11660     case CPP_KEYWORD:
11661       {
11662 	enum tree_code op;
11663 
11664 	/* The keyword should be either `new' or `delete'.  */
11665 	if (token->keyword == RID_NEW)
11666 	  op = NEW_EXPR;
11667 	else if (token->keyword == RID_DELETE)
11668 	  op = DELETE_EXPR;
11669 	else
11670 	  break;
11671 
11672 	/* Consume the `new' or `delete' token.  */
11673 	cp_lexer_consume_token (parser->lexer);
11674 
11675 	/* Peek at the next token.  */
11676 	token = cp_lexer_peek_token (parser->lexer);
11677 	/* If it's a `[' token then this is the array variant of the
11678 	   operator.  */
11679 	if (token->type == CPP_OPEN_SQUARE)
11680 	  {
11681 	    /* Consume the `[' token.  */
11682 	    cp_lexer_consume_token (parser->lexer);
11683 	    /* Look for the `]' token.  */
11684 	    cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
11685 	    id = ansi_opname (op == NEW_EXPR
11686 			      ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
11687 	  }
11688 	/* Otherwise, we have the non-array variant.  */
11689 	else
11690 	  id = ansi_opname (op);
11691 
11692 	return id;
11693       }
11694 
11695     case CPP_PLUS:
11696       id = ansi_opname (PLUS_EXPR);
11697       break;
11698 
11699     case CPP_MINUS:
11700       id = ansi_opname (MINUS_EXPR);
11701       break;
11702 
11703     case CPP_MULT:
11704       id = ansi_opname (MULT_EXPR);
11705       break;
11706 
11707     case CPP_DIV:
11708       id = ansi_opname (TRUNC_DIV_EXPR);
11709       break;
11710 
11711     case CPP_MOD:
11712       id = ansi_opname (TRUNC_MOD_EXPR);
11713       break;
11714 
11715     case CPP_XOR:
11716       id = ansi_opname (BIT_XOR_EXPR);
11717       break;
11718 
11719     case CPP_AND:
11720       id = ansi_opname (BIT_AND_EXPR);
11721       break;
11722 
11723     case CPP_OR:
11724       id = ansi_opname (BIT_IOR_EXPR);
11725       break;
11726 
11727     case CPP_COMPL:
11728       id = ansi_opname (BIT_NOT_EXPR);
11729       break;
11730 
11731     case CPP_NOT:
11732       id = ansi_opname (TRUTH_NOT_EXPR);
11733       break;
11734 
11735     case CPP_EQ:
11736       id = ansi_assopname (NOP_EXPR);
11737       break;
11738 
11739     case CPP_LESS:
11740       id = ansi_opname (LT_EXPR);
11741       break;
11742 
11743     case CPP_GREATER:
11744       id = ansi_opname (GT_EXPR);
11745       break;
11746 
11747     case CPP_PLUS_EQ:
11748       id = ansi_assopname (PLUS_EXPR);
11749       break;
11750 
11751     case CPP_MINUS_EQ:
11752       id = ansi_assopname (MINUS_EXPR);
11753       break;
11754 
11755     case CPP_MULT_EQ:
11756       id = ansi_assopname (MULT_EXPR);
11757       break;
11758 
11759     case CPP_DIV_EQ:
11760       id = ansi_assopname (TRUNC_DIV_EXPR);
11761       break;
11762 
11763     case CPP_MOD_EQ:
11764       id = ansi_assopname (TRUNC_MOD_EXPR);
11765       break;
11766 
11767     case CPP_XOR_EQ:
11768       id = ansi_assopname (BIT_XOR_EXPR);
11769       break;
11770 
11771     case CPP_AND_EQ:
11772       id = ansi_assopname (BIT_AND_EXPR);
11773       break;
11774 
11775     case CPP_OR_EQ:
11776       id = ansi_assopname (BIT_IOR_EXPR);
11777       break;
11778 
11779     case CPP_LSHIFT:
11780       id = ansi_opname (LSHIFT_EXPR);
11781       break;
11782 
11783     case CPP_RSHIFT:
11784       id = ansi_opname (RSHIFT_EXPR);
11785       break;
11786 
11787     case CPP_LSHIFT_EQ:
11788       id = ansi_assopname (LSHIFT_EXPR);
11789       break;
11790 
11791     case CPP_RSHIFT_EQ:
11792       id = ansi_assopname (RSHIFT_EXPR);
11793       break;
11794 
11795     case CPP_EQ_EQ:
11796       id = ansi_opname (EQ_EXPR);
11797       break;
11798 
11799     case CPP_NOT_EQ:
11800       id = ansi_opname (NE_EXPR);
11801       break;
11802 
11803     case CPP_LESS_EQ:
11804       id = ansi_opname (LE_EXPR);
11805       break;
11806 
11807     case CPP_GREATER_EQ:
11808       id = ansi_opname (GE_EXPR);
11809       break;
11810 
11811     case CPP_AND_AND:
11812       id = ansi_opname (TRUTH_ANDIF_EXPR);
11813       break;
11814 
11815     case CPP_OR_OR:
11816       id = ansi_opname (TRUTH_ORIF_EXPR);
11817       break;
11818 
11819     case CPP_PLUS_PLUS:
11820       id = ansi_opname (POSTINCREMENT_EXPR);
11821       break;
11822 
11823     case CPP_MINUS_MINUS:
11824       id = ansi_opname (PREDECREMENT_EXPR);
11825       break;
11826 
11827     case CPP_COMMA:
11828       id = ansi_opname (COMPOUND_EXPR);
11829       break;
11830 
11831     case CPP_DEREF_STAR:
11832       id = ansi_opname (MEMBER_REF);
11833       break;
11834 
11835     case CPP_DEREF:
11836       id = ansi_opname (COMPONENT_REF);
11837       break;
11838 
11839     case CPP_OPEN_PAREN:
11840       /* Consume the `('.  */
11841       cp_lexer_consume_token (parser->lexer);
11842       /* Look for the matching `)'.  */
11843       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
11844       return ansi_opname (CALL_EXPR);
11845 
11846     case CPP_OPEN_SQUARE:
11847       /* Consume the `['.  */
11848       cp_lexer_consume_token (parser->lexer);
11849       /* Look for the matching `]'.  */
11850       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
11851       return ansi_opname (ARRAY_REF);
11852 
11853     case CPP_STRING:
11854       if (cxx_dialect == cxx98)
11855 	maybe_warn_cpp0x (CPP0X_USER_DEFINED_LITERALS);
11856       if (TREE_STRING_LENGTH (token->u.value) > 2)
11857 	{
11858 	  error ("expected empty string after %<operator%> keyword");
11859 	  return error_mark_node;
11860 	}
11861       /* Consume the string.  */
11862       cp_lexer_consume_token (parser->lexer);
11863       /* Look for the suffix identifier.  */
11864       token = cp_lexer_peek_token (parser->lexer);
11865       if (token->type == CPP_NAME)
11866 	{
11867 	  id = cp_parser_identifier (parser);
11868 	  if (id != error_mark_node)
11869 	    {
11870 	      const char *name = IDENTIFIER_POINTER (id);
11871 	      return cp_literal_operator_id (name);
11872 	    }
11873 	}
11874       else
11875 	{
11876 	  error ("expected suffix identifier");
11877 	  return error_mark_node;
11878 	}
11879 
11880     case CPP_STRING_USERDEF:
11881       error ("missing space between %<\"\"%> and suffix identifier");
11882       return error_mark_node;
11883 
11884     default:
11885       /* Anything else is an error.  */
11886       break;
11887     }
11888 
11889   /* If we have selected an identifier, we need to consume the
11890      operator token.  */
11891   if (id)
11892     cp_lexer_consume_token (parser->lexer);
11893   /* Otherwise, no valid operator name was present.  */
11894   else
11895     {
11896       cp_parser_error (parser, "expected operator");
11897       id = error_mark_node;
11898     }
11899 
11900   return id;
11901 }
11902 
11903 /* Parse a template-declaration.
11904 
11905    template-declaration:
11906      export [opt] template < template-parameter-list > declaration
11907 
11908    If MEMBER_P is TRUE, this template-declaration occurs within a
11909    class-specifier.
11910 
11911    The grammar rule given by the standard isn't correct.  What
11912    is really meant is:
11913 
11914    template-declaration:
11915      export [opt] template-parameter-list-seq
11916        decl-specifier-seq [opt] init-declarator [opt] ;
11917      export [opt] template-parameter-list-seq
11918        function-definition
11919 
11920    template-parameter-list-seq:
11921      template-parameter-list-seq [opt]
11922      template < template-parameter-list >  */
11923 
11924 static void
11925 cp_parser_template_declaration (cp_parser* parser, bool member_p)
11926 {
11927   /* Check for `export'.  */
11928   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
11929     {
11930       /* Consume the `export' token.  */
11931       cp_lexer_consume_token (parser->lexer);
11932       /* Warn that we do not support `export'.  */
11933       warning (0, "keyword %<export%> not implemented, and will be ignored");
11934     }
11935 
11936   cp_parser_template_declaration_after_export (parser, member_p);
11937 }
11938 
11939 /* Parse a template-parameter-list.
11940 
11941    template-parameter-list:
11942      template-parameter
11943      template-parameter-list , template-parameter
11944 
11945    Returns a TREE_LIST.  Each node represents a template parameter.
11946    The nodes are connected via their TREE_CHAINs.  */
11947 
11948 static tree
11949 cp_parser_template_parameter_list (cp_parser* parser)
11950 {
11951   tree parameter_list = NULL_TREE;
11952 
11953   begin_template_parm_list ();
11954 
11955   /* The loop below parses the template parms.  We first need to know
11956      the total number of template parms to be able to compute proper
11957      canonical types of each dependent type. So after the loop, when
11958      we know the total number of template parms,
11959      end_template_parm_list computes the proper canonical types and
11960      fixes up the dependent types accordingly.  */
11961   while (true)
11962     {
11963       tree parameter;
11964       bool is_non_type;
11965       bool is_parameter_pack;
11966       location_t parm_loc;
11967 
11968       /* Parse the template-parameter.  */
11969       parm_loc = cp_lexer_peek_token (parser->lexer)->location;
11970       parameter = cp_parser_template_parameter (parser,
11971                                                 &is_non_type,
11972                                                 &is_parameter_pack);
11973       /* Add it to the list.  */
11974       if (parameter != error_mark_node)
11975 	parameter_list = process_template_parm (parameter_list,
11976 						parm_loc,
11977 						parameter,
11978 						is_non_type,
11979 						is_parameter_pack);
11980       else
11981        {
11982          tree err_parm = build_tree_list (parameter, parameter);
11983          parameter_list = chainon (parameter_list, err_parm);
11984        }
11985 
11986       /* If the next token is not a `,', we're done.  */
11987       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11988 	break;
11989       /* Otherwise, consume the `,' token.  */
11990       cp_lexer_consume_token (parser->lexer);
11991     }
11992 
11993   return end_template_parm_list (parameter_list);
11994 }
11995 
11996 /* Parse a template-parameter.
11997 
11998    template-parameter:
11999      type-parameter
12000      parameter-declaration
12001 
12002    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
12003    the parameter.  The TREE_PURPOSE is the default value, if any.
12004    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
12005    iff this parameter is a non-type parameter.  *IS_PARAMETER_PACK is
12006    set to true iff this parameter is a parameter pack. */
12007 
12008 static tree
12009 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type,
12010                               bool *is_parameter_pack)
12011 {
12012   cp_token *token;
12013   cp_parameter_declarator *parameter_declarator;
12014   cp_declarator *id_declarator;
12015   tree parm;
12016 
12017   /* Assume it is a type parameter or a template parameter.  */
12018   *is_non_type = false;
12019   /* Assume it not a parameter pack. */
12020   *is_parameter_pack = false;
12021   /* Peek at the next token.  */
12022   token = cp_lexer_peek_token (parser->lexer);
12023   /* If it is `class' or `template', we have a type-parameter.  */
12024   if (token->keyword == RID_TEMPLATE)
12025     return cp_parser_type_parameter (parser, is_parameter_pack);
12026   /* If it is `class' or `typename' we do not know yet whether it is a
12027      type parameter or a non-type parameter.  Consider:
12028 
12029        template <typename T, typename T::X X> ...
12030 
12031      or:
12032 
12033        template <class C, class D*> ...
12034 
12035      Here, the first parameter is a type parameter, and the second is
12036      a non-type parameter.  We can tell by looking at the token after
12037      the identifier -- if it is a `,', `=', or `>' then we have a type
12038      parameter.  */
12039   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
12040     {
12041       /* Peek at the token after `class' or `typename'.  */
12042       token = cp_lexer_peek_nth_token (parser->lexer, 2);
12043       /* If it's an ellipsis, we have a template type parameter
12044          pack. */
12045       if (token->type == CPP_ELLIPSIS)
12046         return cp_parser_type_parameter (parser, is_parameter_pack);
12047       /* If it's an identifier, skip it.  */
12048       if (token->type == CPP_NAME)
12049 	token = cp_lexer_peek_nth_token (parser->lexer, 3);
12050       /* Now, see if the token looks like the end of a template
12051 	 parameter.  */
12052       if (token->type == CPP_COMMA
12053 	  || token->type == CPP_EQ
12054 	  || token->type == CPP_GREATER)
12055 	return cp_parser_type_parameter (parser, is_parameter_pack);
12056     }
12057 
12058   /* Otherwise, it is a non-type parameter.
12059 
12060      [temp.param]
12061 
12062      When parsing a default template-argument for a non-type
12063      template-parameter, the first non-nested `>' is taken as the end
12064      of the template parameter-list rather than a greater-than
12065      operator.  */
12066   *is_non_type = true;
12067   parameter_declarator
12068      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
12069 					/*parenthesized_p=*/NULL);
12070 
12071   /* If the parameter declaration is marked as a parameter pack, set
12072      *IS_PARAMETER_PACK to notify the caller. Also, unmark the
12073      declarator's PACK_EXPANSION_P, otherwise we'll get errors from
12074      grokdeclarator. */
12075   if (parameter_declarator
12076       && parameter_declarator->declarator
12077       && parameter_declarator->declarator->parameter_pack_p)
12078     {
12079       *is_parameter_pack = true;
12080       parameter_declarator->declarator->parameter_pack_p = false;
12081     }
12082 
12083   /* If the next token is an ellipsis, and we don't already have it
12084      marked as a parameter pack, then we have a parameter pack (that
12085      has no declarator).  */
12086   if (!*is_parameter_pack
12087       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
12088       && declarator_can_be_parameter_pack (parameter_declarator->declarator))
12089     {
12090       /* Consume the `...'.  */
12091       cp_lexer_consume_token (parser->lexer);
12092       maybe_warn_variadic_templates ();
12093 
12094       *is_parameter_pack = true;
12095     }
12096   /* We might end up with a pack expansion as the type of the non-type
12097      template parameter, in which case this is a non-type template
12098      parameter pack.  */
12099   else if (parameter_declarator
12100 	   && parameter_declarator->decl_specifiers.type
12101 	   && PACK_EXPANSION_P (parameter_declarator->decl_specifiers.type))
12102     {
12103       *is_parameter_pack = true;
12104       parameter_declarator->decl_specifiers.type =
12105 	PACK_EXPANSION_PATTERN (parameter_declarator->decl_specifiers.type);
12106     }
12107 
12108   if (*is_parameter_pack && cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12109     {
12110       /* Parameter packs cannot have default arguments.  However, a
12111 	 user may try to do so, so we'll parse them and give an
12112 	 appropriate diagnostic here.  */
12113 
12114       cp_token *start_token = cp_lexer_peek_token (parser->lexer);
12115 
12116       /* Find the name of the parameter pack.  */
12117       id_declarator = parameter_declarator->declarator;
12118       while (id_declarator && id_declarator->kind != cdk_id)
12119 	id_declarator = id_declarator->declarator;
12120 
12121       if (id_declarator && id_declarator->kind == cdk_id)
12122 	error_at (start_token->location,
12123 		  "template parameter pack %qD cannot have a default argument",
12124 		  id_declarator->u.id.unqualified_name);
12125       else
12126 	error_at (start_token->location,
12127 		  "template parameter pack cannot have a default argument");
12128 
12129       /* Parse the default argument, but throw away the result.  */
12130       cp_parser_default_argument (parser, /*template_parm_p=*/true);
12131     }
12132 
12133   parm = grokdeclarator (parameter_declarator->declarator,
12134 			 &parameter_declarator->decl_specifiers,
12135 			 TPARM, /*initialized=*/0,
12136 			 /*attrlist=*/NULL);
12137   if (parm == error_mark_node)
12138     return error_mark_node;
12139 
12140   return build_tree_list (parameter_declarator->default_argument, parm);
12141 }
12142 
12143 /* Parse a type-parameter.
12144 
12145    type-parameter:
12146      class identifier [opt]
12147      class identifier [opt] = type-id
12148      typename identifier [opt]
12149      typename identifier [opt] = type-id
12150      template < template-parameter-list > class identifier [opt]
12151      template < template-parameter-list > class identifier [opt]
12152        = id-expression
12153 
12154    GNU Extension (variadic templates):
12155 
12156    type-parameter:
12157      class ... identifier [opt]
12158      typename ... identifier [opt]
12159 
12160    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
12161    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
12162    the declaration of the parameter.
12163 
12164    Sets *IS_PARAMETER_PACK if this is a template parameter pack. */
12165 
12166 static tree
12167 cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
12168 {
12169   cp_token *token;
12170   tree parameter;
12171 
12172   /* Look for a keyword to tell us what kind of parameter this is.  */
12173   token = cp_parser_require (parser, CPP_KEYWORD, RT_CLASS_TYPENAME_TEMPLATE);
12174   if (!token)
12175     return error_mark_node;
12176 
12177   switch (token->keyword)
12178     {
12179     case RID_CLASS:
12180     case RID_TYPENAME:
12181       {
12182 	tree identifier;
12183 	tree default_argument;
12184 
12185         /* If the next token is an ellipsis, we have a template
12186            argument pack. */
12187         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
12188           {
12189             /* Consume the `...' token. */
12190             cp_lexer_consume_token (parser->lexer);
12191             maybe_warn_variadic_templates ();
12192 
12193             *is_parameter_pack = true;
12194           }
12195 
12196 	/* If the next token is an identifier, then it names the
12197 	   parameter.  */
12198 	if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12199 	  identifier = cp_parser_identifier (parser);
12200 	else
12201 	  identifier = NULL_TREE;
12202 
12203 	/* Create the parameter.  */
12204 	parameter = finish_template_type_parm (class_type_node, identifier);
12205 
12206 	/* If the next token is an `=', we have a default argument.  */
12207 	if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12208 	  {
12209 	    /* Consume the `=' token.  */
12210 	    cp_lexer_consume_token (parser->lexer);
12211 	    /* Parse the default-argument.  */
12212 	    push_deferring_access_checks (dk_no_deferred);
12213 	    default_argument = cp_parser_type_id (parser);
12214 
12215             /* Template parameter packs cannot have default
12216                arguments. */
12217             if (*is_parameter_pack)
12218               {
12219                 if (identifier)
12220                   error_at (token->location,
12221 			    "template parameter pack %qD cannot have a "
12222 			    "default argument", identifier);
12223                 else
12224                   error_at (token->location,
12225 			    "template parameter packs cannot have "
12226 			    "default arguments");
12227                 default_argument = NULL_TREE;
12228               }
12229 	    pop_deferring_access_checks ();
12230 	  }
12231 	else
12232 	  default_argument = NULL_TREE;
12233 
12234 	/* Create the combined representation of the parameter and the
12235 	   default argument.  */
12236 	parameter = build_tree_list (default_argument, parameter);
12237       }
12238       break;
12239 
12240     case RID_TEMPLATE:
12241       {
12242 	tree identifier;
12243 	tree default_argument;
12244 
12245 	/* Look for the `<'.  */
12246 	cp_parser_require (parser, CPP_LESS, RT_LESS);
12247 	/* Parse the template-parameter-list.  */
12248 	cp_parser_template_parameter_list (parser);
12249 	/* Look for the `>'.  */
12250 	cp_parser_require (parser, CPP_GREATER, RT_GREATER);
12251 	/* Look for the `class' keyword.  */
12252 	cp_parser_require_keyword (parser, RID_CLASS, RT_CLASS);
12253         /* If the next token is an ellipsis, we have a template
12254            argument pack. */
12255         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
12256           {
12257             /* Consume the `...' token. */
12258             cp_lexer_consume_token (parser->lexer);
12259             maybe_warn_variadic_templates ();
12260 
12261             *is_parameter_pack = true;
12262           }
12263 	/* If the next token is an `=', then there is a
12264 	   default-argument.  If the next token is a `>', we are at
12265 	   the end of the parameter-list.  If the next token is a `,',
12266 	   then we are at the end of this parameter.  */
12267 	if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
12268 	    && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
12269 	    && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
12270 	  {
12271 	    identifier = cp_parser_identifier (parser);
12272 	    /* Treat invalid names as if the parameter were nameless.  */
12273 	    if (identifier == error_mark_node)
12274 	      identifier = NULL_TREE;
12275 	  }
12276 	else
12277 	  identifier = NULL_TREE;
12278 
12279 	/* Create the template parameter.  */
12280 	parameter = finish_template_template_parm (class_type_node,
12281 						   identifier);
12282 
12283 	/* If the next token is an `=', then there is a
12284 	   default-argument.  */
12285 	if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12286 	  {
12287 	    bool is_template;
12288 
12289 	    /* Consume the `='.  */
12290 	    cp_lexer_consume_token (parser->lexer);
12291 	    /* Parse the id-expression.  */
12292 	    push_deferring_access_checks (dk_no_deferred);
12293 	    /* save token before parsing the id-expression, for error
12294 	       reporting */
12295 	    token = cp_lexer_peek_token (parser->lexer);
12296 	    default_argument
12297 	      = cp_parser_id_expression (parser,
12298 					 /*template_keyword_p=*/false,
12299 					 /*check_dependency_p=*/true,
12300 					 /*template_p=*/&is_template,
12301 					 /*declarator_p=*/false,
12302 					 /*optional_p=*/false);
12303 	    if (TREE_CODE (default_argument) == TYPE_DECL)
12304 	      /* If the id-expression was a template-id that refers to
12305 		 a template-class, we already have the declaration here,
12306 		 so no further lookup is needed.  */
12307 		 ;
12308 	    else
12309 	      /* Look up the name.  */
12310 	      default_argument
12311 		= cp_parser_lookup_name (parser, default_argument,
12312 					 none_type,
12313 					 /*is_template=*/is_template,
12314 					 /*is_namespace=*/false,
12315 					 /*check_dependency=*/true,
12316 					 /*ambiguous_decls=*/NULL,
12317 					 token->location);
12318 	    /* See if the default argument is valid.  */
12319 	    default_argument
12320 	      = check_template_template_default_arg (default_argument);
12321 
12322             /* Template parameter packs cannot have default
12323                arguments. */
12324             if (*is_parameter_pack)
12325               {
12326                 if (identifier)
12327                   error_at (token->location,
12328 			    "template parameter pack %qD cannot "
12329 			    "have a default argument",
12330 			    identifier);
12331                 else
12332                   error_at (token->location, "template parameter packs cannot "
12333 			    "have default arguments");
12334                 default_argument = NULL_TREE;
12335               }
12336 	    pop_deferring_access_checks ();
12337 	  }
12338 	else
12339 	  default_argument = NULL_TREE;
12340 
12341 	/* Create the combined representation of the parameter and the
12342 	   default argument.  */
12343 	parameter = build_tree_list (default_argument, parameter);
12344       }
12345       break;
12346 
12347     default:
12348       gcc_unreachable ();
12349       break;
12350     }
12351 
12352   return parameter;
12353 }
12354 
12355 /* Parse a template-id.
12356 
12357    template-id:
12358      template-name < template-argument-list [opt] >
12359 
12360    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
12361    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
12362    returned.  Otherwise, if the template-name names a function, or set
12363    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
12364    names a class, returns a TYPE_DECL for the specialization.
12365 
12366    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
12367    uninstantiated templates.  */
12368 
12369 static tree
12370 cp_parser_template_id (cp_parser *parser,
12371 		       bool template_keyword_p,
12372 		       bool check_dependency_p,
12373 		       bool is_declaration)
12374 {
12375   int i;
12376   tree templ;
12377   tree arguments;
12378   tree template_id;
12379   cp_token_position start_of_id = 0;
12380   deferred_access_check *chk;
12381   VEC (deferred_access_check,gc) *access_check;
12382   cp_token *next_token = NULL, *next_token_2 = NULL;
12383   bool is_identifier;
12384 
12385   /* If the next token corresponds to a template-id, there is no need
12386      to reparse it.  */
12387   next_token = cp_lexer_peek_token (parser->lexer);
12388   if (next_token->type == CPP_TEMPLATE_ID)
12389     {
12390       struct tree_check *check_value;
12391 
12392       /* Get the stored value.  */
12393       check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
12394       /* Perform any access checks that were deferred.  */
12395       access_check = check_value->checks;
12396       if (access_check)
12397 	{
12398 	  FOR_EACH_VEC_ELT (deferred_access_check, access_check, i, chk)
12399 	    perform_or_defer_access_check (chk->binfo,
12400 					   chk->decl,
12401 					   chk->diag_decl);
12402 	}
12403       /* Return the stored value.  */
12404       return check_value->value;
12405     }
12406 
12407   /* Avoid performing name lookup if there is no possibility of
12408      finding a template-id.  */
12409   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
12410       || (next_token->type == CPP_NAME
12411 	  && !cp_parser_nth_token_starts_template_argument_list_p
12412 	       (parser, 2)))
12413     {
12414       cp_parser_error (parser, "expected template-id");
12415       return error_mark_node;
12416     }
12417 
12418   /* Remember where the template-id starts.  */
12419   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
12420     start_of_id = cp_lexer_token_position (parser->lexer, false);
12421 
12422   push_deferring_access_checks (dk_deferred);
12423 
12424   /* Parse the template-name.  */
12425   is_identifier = false;
12426   templ = cp_parser_template_name (parser, template_keyword_p,
12427 				   check_dependency_p,
12428 				   is_declaration,
12429 				   &is_identifier);
12430   if (templ == error_mark_node || is_identifier)
12431     {
12432       pop_deferring_access_checks ();
12433       return templ;
12434     }
12435 
12436   /* If we find the sequence `[:' after a template-name, it's probably
12437      a digraph-typo for `< ::'. Substitute the tokens and check if we can
12438      parse correctly the argument list.  */
12439   next_token = cp_lexer_peek_token (parser->lexer);
12440   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
12441   if (next_token->type == CPP_OPEN_SQUARE
12442       && next_token->flags & DIGRAPH
12443       && next_token_2->type == CPP_COLON
12444       && !(next_token_2->flags & PREV_WHITE))
12445     {
12446       cp_parser_parse_tentatively (parser);
12447       /* Change `:' into `::'.  */
12448       next_token_2->type = CPP_SCOPE;
12449       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
12450 	 CPP_LESS.  */
12451       cp_lexer_consume_token (parser->lexer);
12452 
12453       /* Parse the arguments.  */
12454       arguments = cp_parser_enclosed_template_argument_list (parser);
12455       if (!cp_parser_parse_definitely (parser))
12456 	{
12457 	  /* If we couldn't parse an argument list, then we revert our changes
12458 	     and return simply an error. Maybe this is not a template-id
12459 	     after all.  */
12460 	  next_token_2->type = CPP_COLON;
12461 	  cp_parser_error (parser, "expected %<<%>");
12462 	  pop_deferring_access_checks ();
12463 	  return error_mark_node;
12464 	}
12465       /* Otherwise, emit an error about the invalid digraph, but continue
12466 	 parsing because we got our argument list.  */
12467       if (permerror (next_token->location,
12468 		     "%<<::%> cannot begin a template-argument list"))
12469 	{
12470 	  static bool hint = false;
12471 	  inform (next_token->location,
12472 		  "%<<:%> is an alternate spelling for %<[%>."
12473 		  " Insert whitespace between %<<%> and %<::%>");
12474 	  if (!hint && !flag_permissive)
12475 	    {
12476 	      inform (next_token->location, "(if you use %<-fpermissive%>"
12477 		      " G++ will accept your code)");
12478 	      hint = true;
12479 	    }
12480 	}
12481     }
12482   else
12483     {
12484       /* Look for the `<' that starts the template-argument-list.  */
12485       if (!cp_parser_require (parser, CPP_LESS, RT_LESS))
12486 	{
12487 	  pop_deferring_access_checks ();
12488 	  return error_mark_node;
12489 	}
12490       /* Parse the arguments.  */
12491       arguments = cp_parser_enclosed_template_argument_list (parser);
12492     }
12493 
12494   /* Build a representation of the specialization.  */
12495   if (TREE_CODE (templ) == IDENTIFIER_NODE)
12496     template_id = build_min_nt (TEMPLATE_ID_EXPR, templ, arguments);
12497   else if (DECL_TYPE_TEMPLATE_P (templ)
12498 	   || DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
12499     {
12500       bool entering_scope;
12501       /* In "template <typename T> ... A<T>::", A<T> is the abstract A
12502 	 template (rather than some instantiation thereof) only if
12503 	 is not nested within some other construct.  For example, in
12504 	 "template <typename T> void f(T) { A<T>::", A<T> is just an
12505 	 instantiation of A.  */
12506       entering_scope = (template_parm_scope_p ()
12507 			&& cp_lexer_next_token_is (parser->lexer,
12508 						   CPP_SCOPE));
12509       template_id
12510 	= finish_template_type (templ, arguments, entering_scope);
12511     }
12512   else
12513     {
12514       /* If it's not a class-template or a template-template, it should be
12515 	 a function-template.  */
12516       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (templ)
12517 		   || TREE_CODE (templ) == OVERLOAD
12518 		   || BASELINK_P (templ)));
12519 
12520       template_id = lookup_template_function (templ, arguments);
12521     }
12522 
12523   /* If parsing tentatively, replace the sequence of tokens that makes
12524      up the template-id with a CPP_TEMPLATE_ID token.  That way,
12525      should we re-parse the token stream, we will not have to repeat
12526      the effort required to do the parse, nor will we issue duplicate
12527      error messages about problems during instantiation of the
12528      template.  */
12529   if (start_of_id)
12530     {
12531       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
12532 
12533       /* Reset the contents of the START_OF_ID token.  */
12534       token->type = CPP_TEMPLATE_ID;
12535       /* Retrieve any deferred checks.  Do not pop this access checks yet
12536 	 so the memory will not be reclaimed during token replacing below.  */
12537       token->u.tree_check_value = ggc_alloc_cleared_tree_check ();
12538       token->u.tree_check_value->value = template_id;
12539       token->u.tree_check_value->checks = get_deferred_access_checks ();
12540       token->keyword = RID_MAX;
12541 
12542       /* Purge all subsequent tokens.  */
12543       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
12544 
12545       /* ??? Can we actually assume that, if template_id ==
12546 	 error_mark_node, we will have issued a diagnostic to the
12547 	 user, as opposed to simply marking the tentative parse as
12548 	 failed?  */
12549       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
12550 	error_at (token->location, "parse error in template argument list");
12551     }
12552 
12553   pop_deferring_access_checks ();
12554   return template_id;
12555 }
12556 
12557 /* Parse a template-name.
12558 
12559    template-name:
12560      identifier
12561 
12562    The standard should actually say:
12563 
12564    template-name:
12565      identifier
12566      operator-function-id
12567 
12568    A defect report has been filed about this issue.
12569 
12570    A conversion-function-id cannot be a template name because they cannot
12571    be part of a template-id. In fact, looking at this code:
12572 
12573    a.operator K<int>()
12574 
12575    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
12576    It is impossible to call a templated conversion-function-id with an
12577    explicit argument list, since the only allowed template parameter is
12578    the type to which it is converting.
12579 
12580    If TEMPLATE_KEYWORD_P is true, then we have just seen the
12581    `template' keyword, in a construction like:
12582 
12583      T::template f<3>()
12584 
12585    In that case `f' is taken to be a template-name, even though there
12586    is no way of knowing for sure.
12587 
12588    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
12589    name refers to a set of overloaded functions, at least one of which
12590    is a template, or an IDENTIFIER_NODE with the name of the template,
12591    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
12592    names are looked up inside uninstantiated templates.  */
12593 
12594 static tree
12595 cp_parser_template_name (cp_parser* parser,
12596 			 bool template_keyword_p,
12597 			 bool check_dependency_p,
12598 			 bool is_declaration,
12599 			 bool *is_identifier)
12600 {
12601   tree identifier;
12602   tree decl;
12603   tree fns;
12604   cp_token *token = cp_lexer_peek_token (parser->lexer);
12605 
12606   /* If the next token is `operator', then we have either an
12607      operator-function-id or a conversion-function-id.  */
12608   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
12609     {
12610       /* We don't know whether we're looking at an
12611 	 operator-function-id or a conversion-function-id.  */
12612       cp_parser_parse_tentatively (parser);
12613       /* Try an operator-function-id.  */
12614       identifier = cp_parser_operator_function_id (parser);
12615       /* If that didn't work, try a conversion-function-id.  */
12616       if (!cp_parser_parse_definitely (parser))
12617 	{
12618 	  cp_parser_error (parser, "expected template-name");
12619 	  return error_mark_node;
12620 	}
12621     }
12622   /* Look for the identifier.  */
12623   else
12624     identifier = cp_parser_identifier (parser);
12625 
12626   /* If we didn't find an identifier, we don't have a template-id.  */
12627   if (identifier == error_mark_node)
12628     return error_mark_node;
12629 
12630   /* If the name immediately followed the `template' keyword, then it
12631      is a template-name.  However, if the next token is not `<', then
12632      we do not treat it as a template-name, since it is not being used
12633      as part of a template-id.  This enables us to handle constructs
12634      like:
12635 
12636        template <typename T> struct S { S(); };
12637        template <typename T> S<T>::S();
12638 
12639      correctly.  We would treat `S' as a template -- if it were `S<T>'
12640      -- but we do not if there is no `<'.  */
12641 
12642   if (processing_template_decl
12643       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
12644     {
12645       /* In a declaration, in a dependent context, we pretend that the
12646 	 "template" keyword was present in order to improve error
12647 	 recovery.  For example, given:
12648 
12649 	   template <typename T> void f(T::X<int>);
12650 
12651 	 we want to treat "X<int>" as a template-id.  */
12652       if (is_declaration
12653 	  && !template_keyword_p
12654 	  && parser->scope && TYPE_P (parser->scope)
12655 	  && check_dependency_p
12656 	  && dependent_scope_p (parser->scope)
12657 	  /* Do not do this for dtors (or ctors), since they never
12658 	     need the template keyword before their name.  */
12659 	  && !constructor_name_p (identifier, parser->scope))
12660 	{
12661 	  cp_token_position start = 0;
12662 
12663 	  /* Explain what went wrong.  */
12664 	  error_at (token->location, "non-template %qD used as template",
12665 		    identifier);
12666 	  inform (token->location, "use %<%T::template %D%> to indicate that it is a template",
12667 		  parser->scope, identifier);
12668 	  /* If parsing tentatively, find the location of the "<" token.  */
12669 	  if (cp_parser_simulate_error (parser))
12670 	    start = cp_lexer_token_position (parser->lexer, true);
12671 	  /* Parse the template arguments so that we can issue error
12672 	     messages about them.  */
12673 	  cp_lexer_consume_token (parser->lexer);
12674 	  cp_parser_enclosed_template_argument_list (parser);
12675 	  /* Skip tokens until we find a good place from which to
12676 	     continue parsing.  */
12677 	  cp_parser_skip_to_closing_parenthesis (parser,
12678 						 /*recovering=*/true,
12679 						 /*or_comma=*/true,
12680 						 /*consume_paren=*/false);
12681 	  /* If parsing tentatively, permanently remove the
12682 	     template argument list.  That will prevent duplicate
12683 	     error messages from being issued about the missing
12684 	     "template" keyword.  */
12685 	  if (start)
12686 	    cp_lexer_purge_tokens_after (parser->lexer, start);
12687 	  if (is_identifier)
12688 	    *is_identifier = true;
12689 	  return identifier;
12690 	}
12691 
12692       /* If the "template" keyword is present, then there is generally
12693 	 no point in doing name-lookup, so we just return IDENTIFIER.
12694 	 But, if the qualifying scope is non-dependent then we can
12695 	 (and must) do name-lookup normally.  */
12696       if (template_keyword_p
12697 	  && (!parser->scope
12698 	      || (TYPE_P (parser->scope)
12699 		  && dependent_type_p (parser->scope))))
12700 	return identifier;
12701     }
12702 
12703   /* Look up the name.  */
12704   decl = cp_parser_lookup_name (parser, identifier,
12705 				none_type,
12706 				/*is_template=*/true,
12707 				/*is_namespace=*/false,
12708 				check_dependency_p,
12709 				/*ambiguous_decls=*/NULL,
12710 				token->location);
12711 
12712   /* If DECL is a template, then the name was a template-name.  */
12713   if (TREE_CODE (decl) == TEMPLATE_DECL)
12714     ;
12715   else
12716     {
12717       tree fn = NULL_TREE;
12718 
12719       /* The standard does not explicitly indicate whether a name that
12720 	 names a set of overloaded declarations, some of which are
12721 	 templates, is a template-name.  However, such a name should
12722 	 be a template-name; otherwise, there is no way to form a
12723 	 template-id for the overloaded templates.  */
12724       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
12725       if (TREE_CODE (fns) == OVERLOAD)
12726 	for (fn = fns; fn; fn = OVL_NEXT (fn))
12727 	  if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
12728 	    break;
12729 
12730       if (!fn)
12731 	{
12732 	  /* The name does not name a template.  */
12733 	  cp_parser_error (parser, "expected template-name");
12734 	  return error_mark_node;
12735 	}
12736     }
12737 
12738   /* If DECL is dependent, and refers to a function, then just return
12739      its name; we will look it up again during template instantiation.  */
12740   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
12741     {
12742       tree scope = ovl_scope (decl);
12743       if (TYPE_P (scope) && dependent_type_p (scope))
12744 	return identifier;
12745     }
12746 
12747   return decl;
12748 }
12749 
12750 /* Parse a template-argument-list.
12751 
12752    template-argument-list:
12753      template-argument ... [opt]
12754      template-argument-list , template-argument ... [opt]
12755 
12756    Returns a TREE_VEC containing the arguments.  */
12757 
12758 static tree
12759 cp_parser_template_argument_list (cp_parser* parser)
12760 {
12761   tree fixed_args[10];
12762   unsigned n_args = 0;
12763   unsigned alloced = 10;
12764   tree *arg_ary = fixed_args;
12765   tree vec;
12766   bool saved_in_template_argument_list_p;
12767   bool saved_ice_p;
12768   bool saved_non_ice_p;
12769 
12770   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
12771   parser->in_template_argument_list_p = true;
12772   /* Even if the template-id appears in an integral
12773      constant-expression, the contents of the argument list do
12774      not.  */
12775   saved_ice_p = parser->integral_constant_expression_p;
12776   parser->integral_constant_expression_p = false;
12777   saved_non_ice_p = parser->non_integral_constant_expression_p;
12778   parser->non_integral_constant_expression_p = false;
12779 
12780   /* Parse the arguments.  */
12781   do
12782     {
12783       tree argument;
12784 
12785       if (n_args)
12786 	/* Consume the comma.  */
12787 	cp_lexer_consume_token (parser->lexer);
12788 
12789       /* Parse the template-argument.  */
12790       argument = cp_parser_template_argument (parser);
12791 
12792       /* If the next token is an ellipsis, we're expanding a template
12793          argument pack. */
12794       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
12795         {
12796 	  if (argument == error_mark_node)
12797 	    {
12798 	      cp_token *token = cp_lexer_peek_token (parser->lexer);
12799 	      error_at (token->location,
12800 			"expected parameter pack before %<...%>");
12801 	    }
12802           /* Consume the `...' token. */
12803           cp_lexer_consume_token (parser->lexer);
12804 
12805           /* Make the argument into a TYPE_PACK_EXPANSION or
12806              EXPR_PACK_EXPANSION. */
12807           argument = make_pack_expansion (argument);
12808         }
12809 
12810       if (n_args == alloced)
12811 	{
12812 	  alloced *= 2;
12813 
12814 	  if (arg_ary == fixed_args)
12815 	    {
12816 	      arg_ary = XNEWVEC (tree, alloced);
12817 	      memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
12818 	    }
12819 	  else
12820 	    arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
12821 	}
12822       arg_ary[n_args++] = argument;
12823     }
12824   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
12825 
12826   vec = make_tree_vec (n_args);
12827 
12828   while (n_args--)
12829     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
12830 
12831   if (arg_ary != fixed_args)
12832     free (arg_ary);
12833   parser->non_integral_constant_expression_p = saved_non_ice_p;
12834   parser->integral_constant_expression_p = saved_ice_p;
12835   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
12836 #ifdef ENABLE_CHECKING
12837   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
12838 #endif
12839   return vec;
12840 }
12841 
12842 /* Parse a template-argument.
12843 
12844    template-argument:
12845      assignment-expression
12846      type-id
12847      id-expression
12848 
12849    The representation is that of an assignment-expression, type-id, or
12850    id-expression -- except that the qualified id-expression is
12851    evaluated, so that the value returned is either a DECL or an
12852    OVERLOAD.
12853 
12854    Although the standard says "assignment-expression", it forbids
12855    throw-expressions or assignments in the template argument.
12856    Therefore, we use "conditional-expression" instead.  */
12857 
12858 static tree
12859 cp_parser_template_argument (cp_parser* parser)
12860 {
12861   tree argument;
12862   bool template_p;
12863   bool address_p;
12864   bool maybe_type_id = false;
12865   cp_token *token = NULL, *argument_start_token = NULL;
12866   cp_id_kind idk;
12867 
12868   /* There's really no way to know what we're looking at, so we just
12869      try each alternative in order.
12870 
12871        [temp.arg]
12872 
12873        In a template-argument, an ambiguity between a type-id and an
12874        expression is resolved to a type-id, regardless of the form of
12875        the corresponding template-parameter.
12876 
12877      Therefore, we try a type-id first.  */
12878   cp_parser_parse_tentatively (parser);
12879   argument = cp_parser_template_type_arg (parser);
12880   /* If there was no error parsing the type-id but the next token is a
12881      '>>', our behavior depends on which dialect of C++ we're
12882      parsing. In C++98, we probably found a typo for '> >'. But there
12883      are type-id which are also valid expressions. For instance:
12884 
12885      struct X { int operator >> (int); };
12886      template <int V> struct Foo {};
12887      Foo<X () >> 5> r;
12888 
12889      Here 'X()' is a valid type-id of a function type, but the user just
12890      wanted to write the expression "X() >> 5". Thus, we remember that we
12891      found a valid type-id, but we still try to parse the argument as an
12892      expression to see what happens.
12893 
12894      In C++0x, the '>>' will be considered two separate '>'
12895      tokens.  */
12896   if (!cp_parser_error_occurred (parser)
12897       && cxx_dialect == cxx98
12898       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
12899     {
12900       maybe_type_id = true;
12901       cp_parser_abort_tentative_parse (parser);
12902     }
12903   else
12904     {
12905       /* If the next token isn't a `,' or a `>', then this argument wasn't
12906       really finished. This means that the argument is not a valid
12907       type-id.  */
12908       if (!cp_parser_next_token_ends_template_argument_p (parser))
12909 	cp_parser_error (parser, "expected template-argument");
12910       /* If that worked, we're done.  */
12911       if (cp_parser_parse_definitely (parser))
12912 	return argument;
12913     }
12914   /* We're still not sure what the argument will be.  */
12915   cp_parser_parse_tentatively (parser);
12916   /* Try a template.  */
12917   argument_start_token = cp_lexer_peek_token (parser->lexer);
12918   argument = cp_parser_id_expression (parser,
12919 				      /*template_keyword_p=*/false,
12920 				      /*check_dependency_p=*/true,
12921 				      &template_p,
12922 				      /*declarator_p=*/false,
12923 				      /*optional_p=*/false);
12924   /* If the next token isn't a `,' or a `>', then this argument wasn't
12925      really finished.  */
12926   if (!cp_parser_next_token_ends_template_argument_p (parser))
12927     cp_parser_error (parser, "expected template-argument");
12928   if (!cp_parser_error_occurred (parser))
12929     {
12930       /* Figure out what is being referred to.  If the id-expression
12931 	 was for a class template specialization, then we will have a
12932 	 TYPE_DECL at this point.  There is no need to do name lookup
12933 	 at this point in that case.  */
12934       if (TREE_CODE (argument) != TYPE_DECL)
12935 	argument = cp_parser_lookup_name (parser, argument,
12936 					  none_type,
12937 					  /*is_template=*/template_p,
12938 					  /*is_namespace=*/false,
12939 					  /*check_dependency=*/true,
12940 					  /*ambiguous_decls=*/NULL,
12941 					  argument_start_token->location);
12942       if (TREE_CODE (argument) != TEMPLATE_DECL
12943 	  && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
12944 	cp_parser_error (parser, "expected template-name");
12945     }
12946   if (cp_parser_parse_definitely (parser))
12947     return argument;
12948   /* It must be a non-type argument.  There permitted cases are given
12949      in [temp.arg.nontype]:
12950 
12951      -- an integral constant-expression of integral or enumeration
12952 	type; or
12953 
12954      -- the name of a non-type template-parameter; or
12955 
12956      -- the name of an object or function with external linkage...
12957 
12958      -- the address of an object or function with external linkage...
12959 
12960      -- a pointer to member...  */
12961   /* Look for a non-type template parameter.  */
12962   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12963     {
12964       cp_parser_parse_tentatively (parser);
12965       argument = cp_parser_primary_expression (parser,
12966 					       /*address_p=*/false,
12967 					       /*cast_p=*/false,
12968 					       /*template_arg_p=*/true,
12969 					       &idk);
12970       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
12971 	  || !cp_parser_next_token_ends_template_argument_p (parser))
12972 	cp_parser_simulate_error (parser);
12973       if (cp_parser_parse_definitely (parser))
12974 	return argument;
12975     }
12976 
12977   /* If the next token is "&", the argument must be the address of an
12978      object or function with external linkage.  */
12979   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
12980   if (address_p)
12981     cp_lexer_consume_token (parser->lexer);
12982   /* See if we might have an id-expression.  */
12983   token = cp_lexer_peek_token (parser->lexer);
12984   if (token->type == CPP_NAME
12985       || token->keyword == RID_OPERATOR
12986       || token->type == CPP_SCOPE
12987       || token->type == CPP_TEMPLATE_ID
12988       || token->type == CPP_NESTED_NAME_SPECIFIER)
12989     {
12990       cp_parser_parse_tentatively (parser);
12991       argument = cp_parser_primary_expression (parser,
12992 					       address_p,
12993 					       /*cast_p=*/false,
12994 					       /*template_arg_p=*/true,
12995 					       &idk);
12996       if (cp_parser_error_occurred (parser)
12997 	  || !cp_parser_next_token_ends_template_argument_p (parser))
12998 	cp_parser_abort_tentative_parse (parser);
12999       else
13000 	{
13001 	  tree probe;
13002 
13003 	  if (TREE_CODE (argument) == INDIRECT_REF)
13004 	    {
13005 	      gcc_assert (REFERENCE_REF_P (argument));
13006 	      argument = TREE_OPERAND (argument, 0);
13007 	    }
13008 
13009 	  /* If we're in a template, we represent a qualified-id referring
13010 	     to a static data member as a SCOPE_REF even if the scope isn't
13011 	     dependent so that we can check access control later.  */
13012 	  probe = argument;
13013 	  if (TREE_CODE (probe) == SCOPE_REF)
13014 	    probe = TREE_OPERAND (probe, 1);
13015 	  if (TREE_CODE (probe) == VAR_DECL)
13016 	    {
13017 	      /* A variable without external linkage might still be a
13018 		 valid constant-expression, so no error is issued here
13019 		 if the external-linkage check fails.  */
13020 	      if (!address_p && !DECL_EXTERNAL_LINKAGE_P (probe))
13021 		cp_parser_simulate_error (parser);
13022 	    }
13023 	  else if (is_overloaded_fn (argument))
13024 	    /* All overloaded functions are allowed; if the external
13025 	       linkage test does not pass, an error will be issued
13026 	       later.  */
13027 	    ;
13028 	  else if (address_p
13029 		   && (TREE_CODE (argument) == OFFSET_REF
13030 		       || TREE_CODE (argument) == SCOPE_REF))
13031 	    /* A pointer-to-member.  */
13032 	    ;
13033 	  else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
13034 	    ;
13035 	  else
13036 	    cp_parser_simulate_error (parser);
13037 
13038 	  if (cp_parser_parse_definitely (parser))
13039 	    {
13040 	      if (address_p)
13041 		argument = build_x_unary_op (ADDR_EXPR, argument,
13042                                              tf_warning_or_error);
13043 	      return argument;
13044 	    }
13045 	}
13046     }
13047   /* If the argument started with "&", there are no other valid
13048      alternatives at this point.  */
13049   if (address_p)
13050     {
13051       cp_parser_error (parser, "invalid non-type template argument");
13052       return error_mark_node;
13053     }
13054 
13055   /* If the argument wasn't successfully parsed as a type-id followed
13056      by '>>', the argument can only be a constant expression now.
13057      Otherwise, we try parsing the constant-expression tentatively,
13058      because the argument could really be a type-id.  */
13059   if (maybe_type_id)
13060     cp_parser_parse_tentatively (parser);
13061   argument = cp_parser_constant_expression (parser,
13062 					    /*allow_non_constant_p=*/false,
13063 					    /*non_constant_p=*/NULL);
13064   argument = fold_non_dependent_expr (argument);
13065   if (!maybe_type_id)
13066     return argument;
13067   if (!cp_parser_next_token_ends_template_argument_p (parser))
13068     cp_parser_error (parser, "expected template-argument");
13069   if (cp_parser_parse_definitely (parser))
13070     return argument;
13071   /* We did our best to parse the argument as a non type-id, but that
13072      was the only alternative that matched (albeit with a '>' after
13073      it). We can assume it's just a typo from the user, and a
13074      diagnostic will then be issued.  */
13075   return cp_parser_template_type_arg (parser);
13076 }
13077 
13078 /* Parse an explicit-instantiation.
13079 
13080    explicit-instantiation:
13081      template declaration
13082 
13083    Although the standard says `declaration', what it really means is:
13084 
13085    explicit-instantiation:
13086      template decl-specifier-seq [opt] declarator [opt] ;
13087 
13088    Things like `template int S<int>::i = 5, int S<double>::j;' are not
13089    supposed to be allowed.  A defect report has been filed about this
13090    issue.
13091 
13092    GNU Extension:
13093 
13094    explicit-instantiation:
13095      storage-class-specifier template
13096        decl-specifier-seq [opt] declarator [opt] ;
13097      function-specifier template
13098        decl-specifier-seq [opt] declarator [opt] ;  */
13099 
13100 static void
13101 cp_parser_explicit_instantiation (cp_parser* parser)
13102 {
13103   int declares_class_or_enum;
13104   cp_decl_specifier_seq decl_specifiers;
13105   tree extension_specifier = NULL_TREE;
13106 
13107   timevar_push (TV_TEMPLATE_INST);
13108 
13109   /* Look for an (optional) storage-class-specifier or
13110      function-specifier.  */
13111   if (cp_parser_allow_gnu_extensions_p (parser))
13112     {
13113       extension_specifier
13114 	= cp_parser_storage_class_specifier_opt (parser);
13115       if (!extension_specifier)
13116 	extension_specifier
13117 	  = cp_parser_function_specifier_opt (parser,
13118 					      /*decl_specs=*/NULL);
13119     }
13120 
13121   /* Look for the `template' keyword.  */
13122   cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE);
13123   /* Let the front end know that we are processing an explicit
13124      instantiation.  */
13125   begin_explicit_instantiation ();
13126   /* [temp.explicit] says that we are supposed to ignore access
13127      control while processing explicit instantiation directives.  */
13128   push_deferring_access_checks (dk_no_check);
13129   /* Parse a decl-specifier-seq.  */
13130   cp_parser_decl_specifier_seq (parser,
13131 				CP_PARSER_FLAGS_OPTIONAL,
13132 				&decl_specifiers,
13133 				&declares_class_or_enum);
13134   /* If there was exactly one decl-specifier, and it declared a class,
13135      and there's no declarator, then we have an explicit type
13136      instantiation.  */
13137   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
13138     {
13139       tree type;
13140 
13141       type = check_tag_decl (&decl_specifiers);
13142       /* Turn access control back on for names used during
13143 	 template instantiation.  */
13144       pop_deferring_access_checks ();
13145       if (type)
13146 	do_type_instantiation (type, extension_specifier,
13147 			       /*complain=*/tf_error);
13148     }
13149   else
13150     {
13151       cp_declarator *declarator;
13152       tree decl;
13153 
13154       /* Parse the declarator.  */
13155       declarator
13156 	= cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
13157 				/*ctor_dtor_or_conv_p=*/NULL,
13158 				/*parenthesized_p=*/NULL,
13159 				/*member_p=*/false);
13160       if (declares_class_or_enum & 2)
13161 	cp_parser_check_for_definition_in_return_type (declarator,
13162 						       decl_specifiers.type,
13163 						       decl_specifiers.type_location);
13164       if (declarator != cp_error_declarator)
13165 	{
13166 	  if (decl_specifiers.specs[(int)ds_inline])
13167 	    permerror (input_location, "explicit instantiation shall not use"
13168 		       " %<inline%> specifier");
13169 	  if (decl_specifiers.specs[(int)ds_constexpr])
13170 	    permerror (input_location, "explicit instantiation shall not use"
13171 		       " %<constexpr%> specifier");
13172 
13173 	  decl = grokdeclarator (declarator, &decl_specifiers,
13174 				 NORMAL, 0, &decl_specifiers.attributes);
13175 	  /* Turn access control back on for names used during
13176 	     template instantiation.  */
13177 	  pop_deferring_access_checks ();
13178 	  /* Do the explicit instantiation.  */
13179 	  do_decl_instantiation (decl, extension_specifier);
13180 	}
13181       else
13182 	{
13183 	  pop_deferring_access_checks ();
13184 	  /* Skip the body of the explicit instantiation.  */
13185 	  cp_parser_skip_to_end_of_statement (parser);
13186 	}
13187     }
13188   /* We're done with the instantiation.  */
13189   end_explicit_instantiation ();
13190 
13191   cp_parser_consume_semicolon_at_end_of_statement (parser);
13192 
13193   timevar_pop (TV_TEMPLATE_INST);
13194 }
13195 
13196 /* Parse an explicit-specialization.
13197 
13198    explicit-specialization:
13199      template < > declaration
13200 
13201    Although the standard says `declaration', what it really means is:
13202 
13203    explicit-specialization:
13204      template <> decl-specifier [opt] init-declarator [opt] ;
13205      template <> function-definition
13206      template <> explicit-specialization
13207      template <> template-declaration  */
13208 
13209 static void
13210 cp_parser_explicit_specialization (cp_parser* parser)
13211 {
13212   bool need_lang_pop;
13213   cp_token *token = cp_lexer_peek_token (parser->lexer);
13214 
13215   /* Look for the `template' keyword.  */
13216   cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE);
13217   /* Look for the `<'.  */
13218   cp_parser_require (parser, CPP_LESS, RT_LESS);
13219   /* Look for the `>'.  */
13220   cp_parser_require (parser, CPP_GREATER, RT_GREATER);
13221   /* We have processed another parameter list.  */
13222   ++parser->num_template_parameter_lists;
13223   /* [temp]
13224 
13225      A template ... explicit specialization ... shall not have C
13226      linkage.  */
13227   if (current_lang_name == lang_name_c)
13228     {
13229       error_at (token->location, "template specialization with C linkage");
13230       /* Give it C++ linkage to avoid confusing other parts of the
13231 	 front end.  */
13232       push_lang_context (lang_name_cplusplus);
13233       need_lang_pop = true;
13234     }
13235   else
13236     need_lang_pop = false;
13237   /* Let the front end know that we are beginning a specialization.  */
13238   if (!begin_specialization ())
13239     {
13240       end_specialization ();
13241       return;
13242     }
13243 
13244   /* If the next keyword is `template', we need to figure out whether
13245      or not we're looking a template-declaration.  */
13246   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
13247     {
13248       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
13249 	  && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
13250 	cp_parser_template_declaration_after_export (parser,
13251 						     /*member_p=*/false);
13252       else
13253 	cp_parser_explicit_specialization (parser);
13254     }
13255   else
13256     /* Parse the dependent declaration.  */
13257     cp_parser_single_declaration (parser,
13258 				  /*checks=*/NULL,
13259 				  /*member_p=*/false,
13260                                   /*explicit_specialization_p=*/true,
13261 				  /*friend_p=*/NULL);
13262   /* We're done with the specialization.  */
13263   end_specialization ();
13264   /* For the erroneous case of a template with C linkage, we pushed an
13265      implicit C++ linkage scope; exit that scope now.  */
13266   if (need_lang_pop)
13267     pop_lang_context ();
13268   /* We're done with this parameter list.  */
13269   --parser->num_template_parameter_lists;
13270 }
13271 
13272 /* Parse a type-specifier.
13273 
13274    type-specifier:
13275      simple-type-specifier
13276      class-specifier
13277      enum-specifier
13278      elaborated-type-specifier
13279      cv-qualifier
13280 
13281    GNU Extension:
13282 
13283    type-specifier:
13284      __complex__
13285 
13286    Returns a representation of the type-specifier.  For a
13287    class-specifier, enum-specifier, or elaborated-type-specifier, a
13288    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
13289 
13290    The parser flags FLAGS is used to control type-specifier parsing.
13291 
13292    If IS_DECLARATION is TRUE, then this type-specifier is appearing
13293    in a decl-specifier-seq.
13294 
13295    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
13296    class-specifier, enum-specifier, or elaborated-type-specifier, then
13297    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
13298    if a type is declared; 2 if it is defined.  Otherwise, it is set to
13299    zero.
13300 
13301    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
13302    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
13303    is set to FALSE.  */
13304 
13305 static tree
13306 cp_parser_type_specifier (cp_parser* parser,
13307 			  cp_parser_flags flags,
13308 			  cp_decl_specifier_seq *decl_specs,
13309 			  bool is_declaration,
13310 			  int* declares_class_or_enum,
13311 			  bool* is_cv_qualifier)
13312 {
13313   tree type_spec = NULL_TREE;
13314   cp_token *token;
13315   enum rid keyword;
13316   cp_decl_spec ds = ds_last;
13317 
13318   /* Assume this type-specifier does not declare a new type.  */
13319   if (declares_class_or_enum)
13320     *declares_class_or_enum = 0;
13321   /* And that it does not specify a cv-qualifier.  */
13322   if (is_cv_qualifier)
13323     *is_cv_qualifier = false;
13324   /* Peek at the next token.  */
13325   token = cp_lexer_peek_token (parser->lexer);
13326 
13327   /* If we're looking at a keyword, we can use that to guide the
13328      production we choose.  */
13329   keyword = token->keyword;
13330   switch (keyword)
13331     {
13332     case RID_ENUM:
13333       if ((flags & CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS))
13334 	goto elaborated_type_specifier;
13335 
13336       /* Look for the enum-specifier.  */
13337       type_spec = cp_parser_enum_specifier (parser);
13338       /* If that worked, we're done.  */
13339       if (type_spec)
13340 	{
13341 	  if (declares_class_or_enum)
13342 	    *declares_class_or_enum = 2;
13343 	  if (decl_specs)
13344 	    cp_parser_set_decl_spec_type (decl_specs,
13345 					  type_spec,
13346 					  token->location,
13347 					  /*type_definition_p=*/true);
13348 	  return type_spec;
13349 	}
13350       else
13351 	goto elaborated_type_specifier;
13352 
13353       /* Any of these indicate either a class-specifier, or an
13354 	 elaborated-type-specifier.  */
13355     case RID_CLASS:
13356     case RID_STRUCT:
13357     case RID_UNION:
13358       if ((flags & CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS))
13359 	goto elaborated_type_specifier;
13360 
13361       /* Parse tentatively so that we can back up if we don't find a
13362 	 class-specifier.  */
13363       cp_parser_parse_tentatively (parser);
13364       /* Look for the class-specifier.  */
13365       type_spec = cp_parser_class_specifier (parser);
13366       invoke_plugin_callbacks (PLUGIN_FINISH_TYPE, type_spec);
13367       /* If that worked, we're done.  */
13368       if (cp_parser_parse_definitely (parser))
13369 	{
13370 	  if (declares_class_or_enum)
13371 	    *declares_class_or_enum = 2;
13372 	  if (decl_specs)
13373 	    cp_parser_set_decl_spec_type (decl_specs,
13374 					  type_spec,
13375 					  token->location,
13376 					  /*type_definition_p=*/true);
13377 	  return type_spec;
13378 	}
13379 
13380       /* Fall through.  */
13381     elaborated_type_specifier:
13382       /* We're declaring (not defining) a class or enum.  */
13383       if (declares_class_or_enum)
13384 	*declares_class_or_enum = 1;
13385 
13386       /* Fall through.  */
13387     case RID_TYPENAME:
13388       /* Look for an elaborated-type-specifier.  */
13389       type_spec
13390 	= (cp_parser_elaborated_type_specifier
13391 	   (parser,
13392 	    decl_specs && decl_specs->specs[(int) ds_friend],
13393 	    is_declaration));
13394       if (decl_specs)
13395 	cp_parser_set_decl_spec_type (decl_specs,
13396 				      type_spec,
13397 				      token->location,
13398 				      /*type_definition_p=*/false);
13399       return type_spec;
13400 
13401     case RID_CONST:
13402       ds = ds_const;
13403       if (is_cv_qualifier)
13404 	*is_cv_qualifier = true;
13405       break;
13406 
13407     case RID_VOLATILE:
13408       ds = ds_volatile;
13409       if (is_cv_qualifier)
13410 	*is_cv_qualifier = true;
13411       break;
13412 
13413     case RID_RESTRICT:
13414       ds = ds_restrict;
13415       if (is_cv_qualifier)
13416 	*is_cv_qualifier = true;
13417       break;
13418 
13419     case RID_COMPLEX:
13420       /* The `__complex__' keyword is a GNU extension.  */
13421       ds = ds_complex;
13422       break;
13423 
13424     default:
13425       break;
13426     }
13427 
13428   /* Handle simple keywords.  */
13429   if (ds != ds_last)
13430     {
13431       if (decl_specs)
13432 	{
13433 	  ++decl_specs->specs[(int)ds];
13434 	  decl_specs->any_specifiers_p = true;
13435 	}
13436       return cp_lexer_consume_token (parser->lexer)->u.value;
13437     }
13438 
13439   /* If we do not already have a type-specifier, assume we are looking
13440      at a simple-type-specifier.  */
13441   type_spec = cp_parser_simple_type_specifier (parser,
13442 					       decl_specs,
13443 					       flags);
13444 
13445   /* If we didn't find a type-specifier, and a type-specifier was not
13446      optional in this context, issue an error message.  */
13447   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
13448     {
13449       cp_parser_error (parser, "expected type specifier");
13450       return error_mark_node;
13451     }
13452 
13453   return type_spec;
13454 }
13455 
13456 /* Parse a simple-type-specifier.
13457 
13458    simple-type-specifier:
13459      :: [opt] nested-name-specifier [opt] type-name
13460      :: [opt] nested-name-specifier template template-id
13461      char
13462      wchar_t
13463      bool
13464      short
13465      int
13466      long
13467      signed
13468      unsigned
13469      float
13470      double
13471      void
13472 
13473    C++0x Extension:
13474 
13475    simple-type-specifier:
13476      auto
13477      decltype ( expression )
13478      char16_t
13479      char32_t
13480      __underlying_type ( type-id )
13481 
13482    GNU Extension:
13483 
13484    simple-type-specifier:
13485      __int128
13486      __typeof__ unary-expression
13487      __typeof__ ( type-id )
13488 
13489    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
13490    appropriately updated.  */
13491 
13492 static tree
13493 cp_parser_simple_type_specifier (cp_parser* parser,
13494 				 cp_decl_specifier_seq *decl_specs,
13495 				 cp_parser_flags flags)
13496 {
13497   tree type = NULL_TREE;
13498   cp_token *token;
13499 
13500   /* Peek at the next token.  */
13501   token = cp_lexer_peek_token (parser->lexer);
13502 
13503   /* If we're looking at a keyword, things are easy.  */
13504   switch (token->keyword)
13505     {
13506     case RID_CHAR:
13507       if (decl_specs)
13508 	decl_specs->explicit_char_p = true;
13509       type = char_type_node;
13510       break;
13511     case RID_CHAR16:
13512       type = char16_type_node;
13513       break;
13514     case RID_CHAR32:
13515       type = char32_type_node;
13516       break;
13517     case RID_WCHAR:
13518       type = wchar_type_node;
13519       break;
13520     case RID_BOOL:
13521       type = boolean_type_node;
13522       break;
13523     case RID_SHORT:
13524       if (decl_specs)
13525 	++decl_specs->specs[(int) ds_short];
13526       type = short_integer_type_node;
13527       break;
13528     case RID_INT:
13529       if (decl_specs)
13530 	decl_specs->explicit_int_p = true;
13531       type = integer_type_node;
13532       break;
13533     case RID_INT128:
13534       if (!int128_integer_type_node)
13535 	break;
13536       if (decl_specs)
13537         decl_specs->explicit_int128_p = true;
13538       type = int128_integer_type_node;
13539       break;
13540     case RID_LONG:
13541       if (decl_specs)
13542 	++decl_specs->specs[(int) ds_long];
13543       type = long_integer_type_node;
13544       break;
13545     case RID_SIGNED:
13546       if (decl_specs)
13547 	++decl_specs->specs[(int) ds_signed];
13548       type = integer_type_node;
13549       break;
13550     case RID_UNSIGNED:
13551       if (decl_specs)
13552 	++decl_specs->specs[(int) ds_unsigned];
13553       type = unsigned_type_node;
13554       break;
13555     case RID_FLOAT:
13556       type = float_type_node;
13557       break;
13558     case RID_DOUBLE:
13559       type = double_type_node;
13560       break;
13561     case RID_VOID:
13562       type = void_type_node;
13563       break;
13564 
13565     case RID_AUTO:
13566       maybe_warn_cpp0x (CPP0X_AUTO);
13567       type = make_auto ();
13568       break;
13569 
13570     case RID_DECLTYPE:
13571       /* Since DR 743, decltype can either be a simple-type-specifier by
13572 	 itself or begin a nested-name-specifier.  Parsing it will replace
13573 	 it with a CPP_DECLTYPE, so just rewind and let the CPP_DECLTYPE
13574 	 handling below decide what to do.  */
13575       cp_parser_decltype (parser);
13576       cp_lexer_set_token_position (parser->lexer, token);
13577       break;
13578 
13579     case RID_TYPEOF:
13580       /* Consume the `typeof' token.  */
13581       cp_lexer_consume_token (parser->lexer);
13582       /* Parse the operand to `typeof'.  */
13583       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
13584       /* If it is not already a TYPE, take its type.  */
13585       if (!TYPE_P (type))
13586 	type = finish_typeof (type);
13587 
13588       if (decl_specs)
13589 	cp_parser_set_decl_spec_type (decl_specs, type,
13590 				      token->location,
13591 				      /*type_definition_p=*/false);
13592 
13593       return type;
13594 
13595     case RID_UNDERLYING_TYPE:
13596       type = cp_parser_trait_expr (parser, RID_UNDERLYING_TYPE);
13597       if (decl_specs)
13598 	cp_parser_set_decl_spec_type (decl_specs, type,
13599 				      token->location,
13600 				      /*type_definition_p=*/false);
13601 
13602       return type;
13603 
13604     case RID_BASES:
13605     case RID_DIRECT_BASES:
13606       type = cp_parser_trait_expr (parser, token->keyword);
13607       if (decl_specs)
13608        cp_parser_set_decl_spec_type (decl_specs, type,
13609                                      token->location,
13610                                      /*type_definition_p=*/false);
13611       return type;
13612     default:
13613       break;
13614     }
13615 
13616   /* If token is an already-parsed decltype not followed by ::,
13617      it's a simple-type-specifier.  */
13618   if (token->type == CPP_DECLTYPE
13619       && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
13620     {
13621       type = token->u.value;
13622       if (decl_specs)
13623 	cp_parser_set_decl_spec_type (decl_specs, type,
13624 				      token->location,
13625 				      /*type_definition_p=*/false);
13626       cp_lexer_consume_token (parser->lexer);
13627       return type;
13628     }
13629 
13630   /* If the type-specifier was for a built-in type, we're done.  */
13631   if (type)
13632     {
13633       /* Record the type.  */
13634       if (decl_specs
13635 	  && (token->keyword != RID_SIGNED
13636 	      && token->keyword != RID_UNSIGNED
13637 	      && token->keyword != RID_SHORT
13638 	      && token->keyword != RID_LONG))
13639 	cp_parser_set_decl_spec_type (decl_specs,
13640 				      type,
13641 				      token->location,
13642 				      /*type_definition_p=*/false);
13643       if (decl_specs)
13644 	decl_specs->any_specifiers_p = true;
13645 
13646       /* Consume the token.  */
13647       cp_lexer_consume_token (parser->lexer);
13648 
13649       /* There is no valid C++ program where a non-template type is
13650 	 followed by a "<".  That usually indicates that the user thought
13651 	 that the type was a template.  */
13652       cp_parser_check_for_invalid_template_id (parser, type, token->location);
13653 
13654       return TYPE_NAME (type);
13655     }
13656 
13657   /* The type-specifier must be a user-defined type.  */
13658   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
13659     {
13660       bool qualified_p;
13661       bool global_p;
13662 
13663       /* Don't gobble tokens or issue error messages if this is an
13664 	 optional type-specifier.  */
13665       if (flags & CP_PARSER_FLAGS_OPTIONAL)
13666 	cp_parser_parse_tentatively (parser);
13667 
13668       /* Look for the optional `::' operator.  */
13669       global_p
13670 	= (cp_parser_global_scope_opt (parser,
13671 				       /*current_scope_valid_p=*/false)
13672 	   != NULL_TREE);
13673       /* Look for the nested-name specifier.  */
13674       qualified_p
13675 	= (cp_parser_nested_name_specifier_opt (parser,
13676 						/*typename_keyword_p=*/false,
13677 						/*check_dependency_p=*/true,
13678 						/*type_p=*/false,
13679 						/*is_declaration=*/false)
13680 	   != NULL_TREE);
13681       token = cp_lexer_peek_token (parser->lexer);
13682       /* If we have seen a nested-name-specifier, and the next token
13683 	 is `template', then we are using the template-id production.  */
13684       if (parser->scope
13685 	  && cp_parser_optional_template_keyword (parser))
13686 	{
13687 	  /* Look for the template-id.  */
13688 	  type = cp_parser_template_id (parser,
13689 					/*template_keyword_p=*/true,
13690 					/*check_dependency_p=*/true,
13691 					/*is_declaration=*/false);
13692 	  /* If the template-id did not name a type, we are out of
13693 	     luck.  */
13694 	  if (TREE_CODE (type) != TYPE_DECL)
13695 	    {
13696 	      cp_parser_error (parser, "expected template-id for type");
13697 	      type = NULL_TREE;
13698 	    }
13699 	}
13700       /* Otherwise, look for a type-name.  */
13701       else
13702 	type = cp_parser_type_name (parser);
13703       /* Keep track of all name-lookups performed in class scopes.  */
13704       if (type
13705 	  && !global_p
13706 	  && !qualified_p
13707 	  && TREE_CODE (type) == TYPE_DECL
13708 	  && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
13709 	maybe_note_name_used_in_class (DECL_NAME (type), type);
13710       /* If it didn't work out, we don't have a TYPE.  */
13711       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
13712 	  && !cp_parser_parse_definitely (parser))
13713 	type = NULL_TREE;
13714       if (type && decl_specs)
13715 	cp_parser_set_decl_spec_type (decl_specs, type,
13716 				      token->location,
13717 				      /*type_definition_p=*/false);
13718     }
13719 
13720   /* If we didn't get a type-name, issue an error message.  */
13721   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
13722     {
13723       cp_parser_error (parser, "expected type-name");
13724       return error_mark_node;
13725     }
13726 
13727   if (type && type != error_mark_node)
13728     {
13729       /* See if TYPE is an Objective-C type, and if so, parse and
13730 	 accept any protocol references following it.  Do this before
13731 	 the cp_parser_check_for_invalid_template_id() call, because
13732 	 Objective-C types can be followed by '<...>' which would
13733 	 enclose protocol names rather than template arguments, and so
13734 	 everything is fine.  */
13735       if (c_dialect_objc () && !parser->scope
13736 	  && (objc_is_id (type) || objc_is_class_name (type)))
13737 	{
13738 	  tree protos = cp_parser_objc_protocol_refs_opt (parser);
13739 	  tree qual_type = objc_get_protocol_qualified_type (type, protos);
13740 
13741 	  /* Clobber the "unqualified" type previously entered into
13742 	     DECL_SPECS with the new, improved protocol-qualified version.  */
13743 	  if (decl_specs)
13744 	    decl_specs->type = qual_type;
13745 
13746 	  return qual_type;
13747 	}
13748 
13749       /* There is no valid C++ program where a non-template type is
13750 	 followed by a "<".  That usually indicates that the user
13751 	 thought that the type was a template.  */
13752       cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type),
13753 					       token->location);
13754     }
13755 
13756   return type;
13757 }
13758 
13759 /* Parse a type-name.
13760 
13761    type-name:
13762      class-name
13763      enum-name
13764      typedef-name
13765      simple-template-id [in c++0x]
13766 
13767    enum-name:
13768      identifier
13769 
13770    typedef-name:
13771      identifier
13772 
13773    Returns a TYPE_DECL for the type.  */
13774 
13775 static tree
13776 cp_parser_type_name (cp_parser* parser)
13777 {
13778   tree type_decl;
13779 
13780   /* We can't know yet whether it is a class-name or not.  */
13781   cp_parser_parse_tentatively (parser);
13782   /* Try a class-name.  */
13783   type_decl = cp_parser_class_name (parser,
13784 				    /*typename_keyword_p=*/false,
13785 				    /*template_keyword_p=*/false,
13786 				    none_type,
13787 				    /*check_dependency_p=*/true,
13788 				    /*class_head_p=*/false,
13789 				    /*is_declaration=*/false);
13790   /* If it's not a class-name, keep looking.  */
13791   if (!cp_parser_parse_definitely (parser))
13792     {
13793       if (cxx_dialect < cxx0x)
13794 	/* It must be a typedef-name or an enum-name.  */
13795 	return cp_parser_nonclass_name (parser);
13796 
13797       cp_parser_parse_tentatively (parser);
13798       /* It is either a simple-template-id representing an
13799 	 instantiation of an alias template...  */
13800       type_decl = cp_parser_template_id (parser,
13801 					 /*template_keyword_p=*/false,
13802 					 /*check_dependency_p=*/false,
13803 					 /*is_declaration=*/false);
13804       /* Note that this must be an instantiation of an alias template
13805 	 because [temp.names]/6 says:
13806 
13807 	     A template-id that names an alias template specialization
13808 	     is a type-name.
13809 
13810 	 Whereas [temp.names]/7 says:
13811 
13812 	     A simple-template-id that names a class template
13813 	     specialization is a class-name.  */
13814       if (type_decl != NULL_TREE
13815 	  && TREE_CODE (type_decl) == TYPE_DECL
13816 	  && TYPE_DECL_ALIAS_P (type_decl))
13817 	gcc_assert (DECL_TEMPLATE_INSTANTIATION (type_decl));
13818       else
13819 	cp_parser_simulate_error (parser);
13820 
13821       if (!cp_parser_parse_definitely (parser))
13822 	/* ... Or a typedef-name or an enum-name.  */
13823 	return cp_parser_nonclass_name (parser);
13824     }
13825 
13826   return type_decl;
13827 }
13828 
13829 /* Parse a non-class type-name, that is, either an enum-name or a typedef-name.
13830 
13831    enum-name:
13832      identifier
13833 
13834    typedef-name:
13835      identifier
13836 
13837    Returns a TYPE_DECL for the type.  */
13838 
13839 static tree
13840 cp_parser_nonclass_name (cp_parser* parser)
13841 {
13842   tree type_decl;
13843   tree identifier;
13844 
13845   cp_token *token = cp_lexer_peek_token (parser->lexer);
13846   identifier = cp_parser_identifier (parser);
13847   if (identifier == error_mark_node)
13848     return error_mark_node;
13849 
13850   /* Look up the type-name.  */
13851   type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
13852 
13853   if (TREE_CODE (type_decl) == USING_DECL)
13854     {
13855       if (!DECL_DEPENDENT_P (type_decl))
13856 	type_decl = strip_using_decl (type_decl);
13857       else if (USING_DECL_TYPENAME_P (type_decl))
13858 	{
13859 	  /* We have found a type introduced by a using
13860 	     declaration at class scope that refers to a dependent
13861 	     type.
13862 
13863 	     using typename :: [opt] nested-name-specifier unqualified-id ;
13864 	  */
13865 	  type_decl = make_typename_type (TREE_TYPE (type_decl),
13866 					  DECL_NAME (type_decl),
13867 					  typename_type, tf_error);
13868 	  if (type_decl != error_mark_node)
13869 	    type_decl = TYPE_NAME (type_decl);
13870 	}
13871     }
13872 
13873   if (TREE_CODE (type_decl) != TYPE_DECL
13874       && (objc_is_id (identifier) || objc_is_class_name (identifier)))
13875     {
13876       /* See if this is an Objective-C type.  */
13877       tree protos = cp_parser_objc_protocol_refs_opt (parser);
13878       tree type = objc_get_protocol_qualified_type (identifier, protos);
13879       if (type)
13880 	type_decl = TYPE_NAME (type);
13881     }
13882 
13883   /* Issue an error if we did not find a type-name.  */
13884   if (TREE_CODE (type_decl) != TYPE_DECL
13885       /* In Objective-C, we have the complication that class names are
13886 	 normally type names and start declarations (eg, the
13887 	 "NSObject" in "NSObject *object;"), but can be used in an
13888 	 Objective-C 2.0 dot-syntax (as in "NSObject.version") which
13889 	 is an expression.  So, a classname followed by a dot is not a
13890 	 valid type-name.  */
13891       || (objc_is_class_name (TREE_TYPE (type_decl))
13892 	  && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT))
13893     {
13894       if (!cp_parser_simulate_error (parser))
13895 	cp_parser_name_lookup_error (parser, identifier, type_decl,
13896 				     NLE_TYPE, token->location);
13897       return error_mark_node;
13898     }
13899   /* Remember that the name was used in the definition of the
13900      current class so that we can check later to see if the
13901      meaning would have been different after the class was
13902      entirely defined.  */
13903   else if (type_decl != error_mark_node
13904 	   && !parser->scope)
13905     maybe_note_name_used_in_class (identifier, type_decl);
13906 
13907   return type_decl;
13908 }
13909 
13910 /* Parse an elaborated-type-specifier.  Note that the grammar given
13911    here incorporates the resolution to DR68.
13912 
13913    elaborated-type-specifier:
13914      class-key :: [opt] nested-name-specifier [opt] identifier
13915      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
13916      enum-key :: [opt] nested-name-specifier [opt] identifier
13917      typename :: [opt] nested-name-specifier identifier
13918      typename :: [opt] nested-name-specifier template [opt]
13919        template-id
13920 
13921    GNU extension:
13922 
13923    elaborated-type-specifier:
13924      class-key attributes :: [opt] nested-name-specifier [opt] identifier
13925      class-key attributes :: [opt] nested-name-specifier [opt]
13926 	       template [opt] template-id
13927      enum attributes :: [opt] nested-name-specifier [opt] identifier
13928 
13929    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
13930    declared `friend'.  If IS_DECLARATION is TRUE, then this
13931    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
13932    something is being declared.
13933 
13934    Returns the TYPE specified.  */
13935 
13936 static tree
13937 cp_parser_elaborated_type_specifier (cp_parser* parser,
13938 				     bool is_friend,
13939 				     bool is_declaration)
13940 {
13941   enum tag_types tag_type;
13942   tree identifier;
13943   tree type = NULL_TREE;
13944   tree attributes = NULL_TREE;
13945   tree globalscope;
13946   cp_token *token = NULL;
13947 
13948   /* See if we're looking at the `enum' keyword.  */
13949   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
13950     {
13951       /* Consume the `enum' token.  */
13952       cp_lexer_consume_token (parser->lexer);
13953       /* Remember that it's an enumeration type.  */
13954       tag_type = enum_type;
13955       /* Issue a warning if the `struct' or `class' key (for C++0x scoped
13956 	 enums) is used here.  */
13957       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
13958 	  || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
13959 	{
13960 	    pedwarn (input_location, 0, "elaborated-type-specifier "
13961 		      "for a scoped enum must not use the %<%D%> keyword",
13962 		      cp_lexer_peek_token (parser->lexer)->u.value);
13963 	  /* Consume the `struct' or `class' and parse it anyway.  */
13964 	  cp_lexer_consume_token (parser->lexer);
13965 	}
13966       /* Parse the attributes.  */
13967       attributes = cp_parser_attributes_opt (parser);
13968     }
13969   /* Or, it might be `typename'.  */
13970   else if (cp_lexer_next_token_is_keyword (parser->lexer,
13971 					   RID_TYPENAME))
13972     {
13973       /* Consume the `typename' token.  */
13974       cp_lexer_consume_token (parser->lexer);
13975       /* Remember that it's a `typename' type.  */
13976       tag_type = typename_type;
13977     }
13978   /* Otherwise it must be a class-key.  */
13979   else
13980     {
13981       tag_type = cp_parser_class_key (parser);
13982       if (tag_type == none_type)
13983 	return error_mark_node;
13984       /* Parse the attributes.  */
13985       attributes = cp_parser_attributes_opt (parser);
13986     }
13987 
13988   /* Look for the `::' operator.  */
13989   globalscope =  cp_parser_global_scope_opt (parser,
13990 					     /*current_scope_valid_p=*/false);
13991   /* Look for the nested-name-specifier.  */
13992   if (tag_type == typename_type && !globalscope)
13993     {
13994       if (!cp_parser_nested_name_specifier (parser,
13995 					   /*typename_keyword_p=*/true,
13996 					   /*check_dependency_p=*/true,
13997 					   /*type_p=*/true,
13998 					    is_declaration))
13999 	return error_mark_node;
14000     }
14001   else
14002     /* Even though `typename' is not present, the proposed resolution
14003        to Core Issue 180 says that in `class A<T>::B', `B' should be
14004        considered a type-name, even if `A<T>' is dependent.  */
14005     cp_parser_nested_name_specifier_opt (parser,
14006 					 /*typename_keyword_p=*/true,
14007 					 /*check_dependency_p=*/true,
14008 					 /*type_p=*/true,
14009 					 is_declaration);
14010  /* For everything but enumeration types, consider a template-id.
14011     For an enumeration type, consider only a plain identifier.  */
14012   if (tag_type != enum_type)
14013     {
14014       bool template_p = false;
14015       tree decl;
14016 
14017       /* Allow the `template' keyword.  */
14018       template_p = cp_parser_optional_template_keyword (parser);
14019       /* If we didn't see `template', we don't know if there's a
14020 	 template-id or not.  */
14021       if (!template_p)
14022 	cp_parser_parse_tentatively (parser);
14023       /* Parse the template-id.  */
14024       token = cp_lexer_peek_token (parser->lexer);
14025       decl = cp_parser_template_id (parser, template_p,
14026 				    /*check_dependency_p=*/true,
14027 				    is_declaration);
14028       /* If we didn't find a template-id, look for an ordinary
14029 	 identifier.  */
14030       if (!template_p && !cp_parser_parse_definitely (parser))
14031 	;
14032       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
14033 	 in effect, then we must assume that, upon instantiation, the
14034 	 template will correspond to a class.  */
14035       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
14036 	       && tag_type == typename_type)
14037 	type = make_typename_type (parser->scope, decl,
14038 				   typename_type,
14039 				   /*complain=*/tf_error);
14040       /* If the `typename' keyword is in effect and DECL is not a type
14041 	 decl, then type is non existent.   */
14042       else if (tag_type == typename_type && TREE_CODE (decl) != TYPE_DECL)
14043         ;
14044       else if (TREE_CODE (decl) == TYPE_DECL)
14045         type = check_elaborated_type_specifier (tag_type, decl,
14046 						/*allow_template_p=*/true);
14047       else if (decl == error_mark_node)
14048 	type = error_mark_node;
14049     }
14050 
14051   if (!type)
14052     {
14053       token = cp_lexer_peek_token (parser->lexer);
14054       identifier = cp_parser_identifier (parser);
14055 
14056       if (identifier == error_mark_node)
14057 	{
14058 	  parser->scope = NULL_TREE;
14059 	  return error_mark_node;
14060 	}
14061 
14062       /* For a `typename', we needn't call xref_tag.  */
14063       if (tag_type == typename_type
14064 	  && TREE_CODE (parser->scope) != NAMESPACE_DECL)
14065 	return cp_parser_make_typename_type (parser, parser->scope,
14066 					     identifier,
14067 					     token->location);
14068       /* Look up a qualified name in the usual way.  */
14069       if (parser->scope)
14070 	{
14071 	  tree decl;
14072 	  tree ambiguous_decls;
14073 
14074 	  decl = cp_parser_lookup_name (parser, identifier,
14075 					tag_type,
14076 					/*is_template=*/false,
14077 					/*is_namespace=*/false,
14078 					/*check_dependency=*/true,
14079 					&ambiguous_decls,
14080 					token->location);
14081 
14082 	  /* If the lookup was ambiguous, an error will already have been
14083 	     issued.  */
14084 	  if (ambiguous_decls)
14085 	    return error_mark_node;
14086 
14087 	  /* If we are parsing friend declaration, DECL may be a
14088 	     TEMPLATE_DECL tree node here.  However, we need to check
14089 	     whether this TEMPLATE_DECL results in valid code.  Consider
14090 	     the following example:
14091 
14092 	       namespace N {
14093 		 template <class T> class C {};
14094 	       }
14095 	       class X {
14096 		 template <class T> friend class N::C; // #1, valid code
14097 	       };
14098 	       template <class T> class Y {
14099 		 friend class N::C;		       // #2, invalid code
14100 	       };
14101 
14102 	     For both case #1 and #2, we arrive at a TEMPLATE_DECL after
14103 	     name lookup of `N::C'.  We see that friend declaration must
14104 	     be template for the code to be valid.  Note that
14105 	     processing_template_decl does not work here since it is
14106 	     always 1 for the above two cases.  */
14107 
14108 	  decl = (cp_parser_maybe_treat_template_as_class
14109 		  (decl, /*tag_name_p=*/is_friend
14110 			 && parser->num_template_parameter_lists));
14111 
14112 	  if (TREE_CODE (decl) != TYPE_DECL)
14113 	    {
14114 	      cp_parser_diagnose_invalid_type_name (parser,
14115 						    parser->scope,
14116 						    identifier,
14117 						    token->location);
14118 	      return error_mark_node;
14119 	    }
14120 
14121 	  if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
14122             {
14123               bool allow_template = (parser->num_template_parameter_lists
14124 		                      || DECL_SELF_REFERENCE_P (decl));
14125               type = check_elaborated_type_specifier (tag_type, decl,
14126                                                       allow_template);
14127 
14128               if (type == error_mark_node)
14129                 return error_mark_node;
14130             }
14131 
14132           /* Forward declarations of nested types, such as
14133 
14134                class C1::C2;
14135                class C1::C2::C3;
14136 
14137              are invalid unless all components preceding the final '::'
14138              are complete.  If all enclosing types are complete, these
14139              declarations become merely pointless.
14140 
14141              Invalid forward declarations of nested types are errors
14142              caught elsewhere in parsing.  Those that are pointless arrive
14143              here.  */
14144 
14145           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
14146               && !is_friend && !processing_explicit_instantiation)
14147             warning (0, "declaration %qD does not declare anything", decl);
14148 
14149 	  type = TREE_TYPE (decl);
14150 	}
14151       else
14152 	{
14153 	  /* An elaborated-type-specifier sometimes introduces a new type and
14154 	     sometimes names an existing type.  Normally, the rule is that it
14155 	     introduces a new type only if there is not an existing type of
14156 	     the same name already in scope.  For example, given:
14157 
14158 	       struct S {};
14159 	       void f() { struct S s; }
14160 
14161 	     the `struct S' in the body of `f' is the same `struct S' as in
14162 	     the global scope; the existing definition is used.  However, if
14163 	     there were no global declaration, this would introduce a new
14164 	     local class named `S'.
14165 
14166 	     An exception to this rule applies to the following code:
14167 
14168 	       namespace N { struct S; }
14169 
14170 	     Here, the elaborated-type-specifier names a new type
14171 	     unconditionally; even if there is already an `S' in the
14172 	     containing scope this declaration names a new type.
14173 	     This exception only applies if the elaborated-type-specifier
14174 	     forms the complete declaration:
14175 
14176 	       [class.name]
14177 
14178 	       A declaration consisting solely of `class-key identifier ;' is
14179 	       either a redeclaration of the name in the current scope or a
14180 	       forward declaration of the identifier as a class name.  It
14181 	       introduces the name into the current scope.
14182 
14183 	     We are in this situation precisely when the next token is a `;'.
14184 
14185 	     An exception to the exception is that a `friend' declaration does
14186 	     *not* name a new type; i.e., given:
14187 
14188 	       struct S { friend struct T; };
14189 
14190 	     `T' is not a new type in the scope of `S'.
14191 
14192 	     Also, `new struct S' or `sizeof (struct S)' never results in the
14193 	     definition of a new type; a new type can only be declared in a
14194 	     declaration context.  */
14195 
14196 	  tag_scope ts;
14197 	  bool template_p;
14198 
14199 	  if (is_friend)
14200 	    /* Friends have special name lookup rules.  */
14201 	    ts = ts_within_enclosing_non_class;
14202 	  else if (is_declaration
14203 		   && cp_lexer_next_token_is (parser->lexer,
14204 					      CPP_SEMICOLON))
14205 	    /* This is a `class-key identifier ;' */
14206 	    ts = ts_current;
14207 	  else
14208 	    ts = ts_global;
14209 
14210 	  template_p =
14211 	    (parser->num_template_parameter_lists
14212 	     && (cp_parser_next_token_starts_class_definition_p (parser)
14213 		 || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
14214 	  /* An unqualified name was used to reference this type, so
14215 	     there were no qualifying templates.  */
14216 	  if (!cp_parser_check_template_parameters (parser,
14217 						    /*num_templates=*/0,
14218 						    token->location,
14219 						    /*declarator=*/NULL))
14220 	    return error_mark_node;
14221 	  type = xref_tag (tag_type, identifier, ts, template_p);
14222 	}
14223     }
14224 
14225   if (type == error_mark_node)
14226     return error_mark_node;
14227 
14228   /* Allow attributes on forward declarations of classes.  */
14229   if (attributes)
14230     {
14231       if (TREE_CODE (type) == TYPENAME_TYPE)
14232 	warning (OPT_Wattributes,
14233 		 "attributes ignored on uninstantiated type");
14234       else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
14235 	       && ! processing_explicit_instantiation)
14236 	warning (OPT_Wattributes,
14237 		 "attributes ignored on template instantiation");
14238       else if (is_declaration && cp_parser_declares_only_class_p (parser))
14239 	cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
14240       else
14241 	warning (OPT_Wattributes,
14242 		 "attributes ignored on elaborated-type-specifier that is not a forward declaration");
14243     }
14244 
14245   if (tag_type != enum_type)
14246     {
14247       /* Indicate whether this class was declared as a `class' or as a
14248 	 `struct'.  */
14249       if (TREE_CODE (type) == RECORD_TYPE)
14250 	CLASSTYPE_DECLARED_CLASS (type) = (tag_type == class_type);
14251       cp_parser_check_class_key (tag_type, type);
14252     }
14253 
14254   /* A "<" cannot follow an elaborated type specifier.  If that
14255      happens, the user was probably trying to form a template-id.  */
14256   cp_parser_check_for_invalid_template_id (parser, type, token->location);
14257 
14258   return type;
14259 }
14260 
14261 /* Parse an enum-specifier.
14262 
14263    enum-specifier:
14264      enum-head { enumerator-list [opt] }
14265      enum-head { enumerator-list , } [C++0x]
14266 
14267    enum-head:
14268      enum-key identifier [opt] enum-base [opt]
14269      enum-key nested-name-specifier identifier enum-base [opt]
14270 
14271    enum-key:
14272      enum
14273      enum class   [C++0x]
14274      enum struct  [C++0x]
14275 
14276    enum-base:   [C++0x]
14277      : type-specifier-seq
14278 
14279    opaque-enum-specifier:
14280      enum-key identifier enum-base [opt] ;
14281 
14282    GNU Extensions:
14283      enum-key attributes[opt] identifier [opt] enum-base [opt]
14284        { enumerator-list [opt] }attributes[opt]
14285      enum-key attributes[opt] identifier [opt] enum-base [opt]
14286        { enumerator-list, }attributes[opt] [C++0x]
14287 
14288    Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
14289    if the token stream isn't an enum-specifier after all.  */
14290 
14291 static tree
14292 cp_parser_enum_specifier (cp_parser* parser)
14293 {
14294   tree identifier;
14295   tree type = NULL_TREE;
14296   tree prev_scope;
14297   tree nested_name_specifier = NULL_TREE;
14298   tree attributes;
14299   bool scoped_enum_p = false;
14300   bool has_underlying_type = false;
14301   bool nested_being_defined = false;
14302   bool new_value_list = false;
14303   bool is_new_type = false;
14304   bool is_anonymous = false;
14305   tree underlying_type = NULL_TREE;
14306   cp_token *type_start_token = NULL;
14307   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
14308 
14309   parser->colon_corrects_to_scope_p = false;
14310 
14311   /* Parse tentatively so that we can back up if we don't find a
14312      enum-specifier.  */
14313   cp_parser_parse_tentatively (parser);
14314 
14315   /* Caller guarantees that the current token is 'enum', an identifier
14316      possibly follows, and the token after that is an opening brace.
14317      If we don't have an identifier, fabricate an anonymous name for
14318      the enumeration being defined.  */
14319   cp_lexer_consume_token (parser->lexer);
14320 
14321   /* Parse the "class" or "struct", which indicates a scoped
14322      enumeration type in C++0x.  */
14323   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
14324       || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
14325     {
14326       if (cxx_dialect < cxx0x)
14327         maybe_warn_cpp0x (CPP0X_SCOPED_ENUMS);
14328 
14329       /* Consume the `struct' or `class' token.  */
14330       cp_lexer_consume_token (parser->lexer);
14331 
14332       scoped_enum_p = true;
14333     }
14334 
14335   attributes = cp_parser_attributes_opt (parser);
14336 
14337   /* Clear the qualification.  */
14338   parser->scope = NULL_TREE;
14339   parser->qualifying_scope = NULL_TREE;
14340   parser->object_scope = NULL_TREE;
14341 
14342   /* Figure out in what scope the declaration is being placed.  */
14343   prev_scope = current_scope ();
14344 
14345   type_start_token = cp_lexer_peek_token (parser->lexer);
14346 
14347   push_deferring_access_checks (dk_no_check);
14348   nested_name_specifier
14349       = cp_parser_nested_name_specifier_opt (parser,
14350 					     /*typename_keyword_p=*/true,
14351 					     /*check_dependency_p=*/false,
14352 					     /*type_p=*/false,
14353 					     /*is_declaration=*/false);
14354 
14355   if (nested_name_specifier)
14356     {
14357       tree name;
14358 
14359       identifier = cp_parser_identifier (parser);
14360       name =  cp_parser_lookup_name (parser, identifier,
14361 				     enum_type,
14362 				     /*is_template=*/false,
14363 				     /*is_namespace=*/false,
14364 				     /*check_dependency=*/true,
14365 				     /*ambiguous_decls=*/NULL,
14366 				     input_location);
14367       if (name)
14368 	{
14369 	  type = TREE_TYPE (name);
14370 	  if (TREE_CODE (type) == TYPENAME_TYPE)
14371 	    {
14372 	      /* Are template enums allowed in ISO? */
14373 	      if (template_parm_scope_p ())
14374 		pedwarn (type_start_token->location, OPT_pedantic,
14375 			 "%qD is an enumeration template", name);
14376 	      /* ignore a typename reference, for it will be solved by name
14377 	         in start_enum.  */
14378 	      type = NULL_TREE;
14379 	    }
14380 	}
14381       else
14382 	error_at (type_start_token->location,
14383 		  "%qD is not an enumerator-name", identifier);
14384     }
14385   else
14386     {
14387       if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
14388 	identifier = cp_parser_identifier (parser);
14389       else
14390 	{
14391 	  identifier = make_anon_name ();
14392 	  is_anonymous = true;
14393 	}
14394     }
14395   pop_deferring_access_checks ();
14396 
14397   /* Check for the `:' that denotes a specified underlying type in C++0x.
14398      Note that a ':' could also indicate a bitfield width, however.  */
14399   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
14400     {
14401       cp_decl_specifier_seq type_specifiers;
14402 
14403       /* Consume the `:'.  */
14404       cp_lexer_consume_token (parser->lexer);
14405 
14406       /* Parse the type-specifier-seq.  */
14407       cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
14408 				    /*is_trailing_return=*/false,
14409                                     &type_specifiers);
14410 
14411       /* At this point this is surely not elaborated type specifier.  */
14412       if (!cp_parser_parse_definitely (parser))
14413 	return NULL_TREE;
14414 
14415       if (cxx_dialect < cxx0x)
14416         maybe_warn_cpp0x (CPP0X_SCOPED_ENUMS);
14417 
14418       has_underlying_type = true;
14419 
14420       /* If that didn't work, stop.  */
14421       if (type_specifiers.type != error_mark_node)
14422         {
14423           underlying_type = grokdeclarator (NULL, &type_specifiers, TYPENAME,
14424                                             /*initialized=*/0, NULL);
14425           if (underlying_type == error_mark_node)
14426             underlying_type = NULL_TREE;
14427         }
14428     }
14429 
14430   /* Look for the `{' but don't consume it yet.  */
14431   if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
14432     {
14433       if (cxx_dialect < cxx0x || (!scoped_enum_p && !underlying_type))
14434 	{
14435 	  cp_parser_error (parser, "expected %<{%>");
14436 	  if (has_underlying_type)
14437 	    {
14438 	      type = NULL_TREE;
14439 	      goto out;
14440 	    }
14441 	}
14442       /* An opaque-enum-specifier must have a ';' here.  */
14443       if ((scoped_enum_p || underlying_type)
14444 	  && cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
14445 	{
14446 	  cp_parser_error (parser, "expected %<;%> or %<{%>");
14447 	  if (has_underlying_type)
14448 	    {
14449 	      type = NULL_TREE;
14450 	      goto out;
14451 	    }
14452 	}
14453     }
14454 
14455   if (!has_underlying_type && !cp_parser_parse_definitely (parser))
14456     return NULL_TREE;
14457 
14458   if (nested_name_specifier)
14459     {
14460       if (CLASS_TYPE_P (nested_name_specifier))
14461 	{
14462 	  nested_being_defined = TYPE_BEING_DEFINED (nested_name_specifier);
14463 	  TYPE_BEING_DEFINED (nested_name_specifier) = 1;
14464 	  push_scope (nested_name_specifier);
14465 	}
14466       else if (TREE_CODE (nested_name_specifier) == NAMESPACE_DECL)
14467 	{
14468 	  push_nested_namespace (nested_name_specifier);
14469 	}
14470     }
14471 
14472   /* Issue an error message if type-definitions are forbidden here.  */
14473   if (!cp_parser_check_type_definition (parser))
14474     type = error_mark_node;
14475   else
14476     /* Create the new type.  We do this before consuming the opening
14477        brace so the enum will be recorded as being on the line of its
14478        tag (or the 'enum' keyword, if there is no tag).  */
14479     type = start_enum (identifier, type, underlying_type,
14480 		       scoped_enum_p, &is_new_type);
14481 
14482   /* If the next token is not '{' it is an opaque-enum-specifier or an
14483      elaborated-type-specifier.  */
14484   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
14485     {
14486       timevar_push (TV_PARSE_ENUM);
14487       if (nested_name_specifier)
14488 	{
14489 	  /* The following catches invalid code such as:
14490 	     enum class S<int>::E { A, B, C }; */
14491 	  if (!processing_specialization
14492 	      && CLASS_TYPE_P (nested_name_specifier)
14493 	      && CLASSTYPE_USE_TEMPLATE (nested_name_specifier))
14494 	    error_at (type_start_token->location, "cannot add an enumerator "
14495 		      "list to a template instantiation");
14496 
14497 	  /* If that scope does not contain the scope in which the
14498 	     class was originally declared, the program is invalid.  */
14499 	  if (prev_scope && !is_ancestor (prev_scope, nested_name_specifier))
14500 	    {
14501 	      if (at_namespace_scope_p ())
14502 		error_at (type_start_token->location,
14503 			  "declaration of %qD in namespace %qD which does not "
14504 			  "enclose %qD",
14505 			  type, prev_scope, nested_name_specifier);
14506 	      else
14507 		error_at (type_start_token->location,
14508 			  "declaration of %qD in %qD which does not enclose %qD",
14509 			  type, prev_scope, nested_name_specifier);
14510 	      type = error_mark_node;
14511 	    }
14512 	}
14513 
14514       if (scoped_enum_p)
14515 	begin_scope (sk_scoped_enum, type);
14516 
14517       /* Consume the opening brace.  */
14518       cp_lexer_consume_token (parser->lexer);
14519 
14520       if (type == error_mark_node)
14521 	; /* Nothing to add */
14522       else if (OPAQUE_ENUM_P (type)
14523 	       || (cxx_dialect > cxx98 && processing_specialization))
14524 	{
14525 	  new_value_list = true;
14526 	  SET_OPAQUE_ENUM_P (type, false);
14527 	  DECL_SOURCE_LOCATION (TYPE_NAME (type)) = type_start_token->location;
14528 	}
14529       else
14530 	{
14531 	  error_at (type_start_token->location, "multiple definition of %q#T", type);
14532 	  error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
14533 		    "previous definition here");
14534 	  type = error_mark_node;
14535 	}
14536 
14537       if (type == error_mark_node)
14538 	cp_parser_skip_to_end_of_block_or_statement (parser);
14539       /* If the next token is not '}', then there are some enumerators.  */
14540       else if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
14541 	cp_parser_enumerator_list (parser, type);
14542 
14543       /* Consume the final '}'.  */
14544       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
14545 
14546       if (scoped_enum_p)
14547 	finish_scope ();
14548       timevar_pop (TV_PARSE_ENUM);
14549     }
14550   else
14551     {
14552       /* If a ';' follows, then it is an opaque-enum-specifier
14553 	and additional restrictions apply.  */
14554       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
14555 	{
14556 	  if (is_anonymous)
14557 	    error_at (type_start_token->location,
14558 		      "opaque-enum-specifier without name");
14559 	  else if (nested_name_specifier)
14560 	    error_at (type_start_token->location,
14561 		      "opaque-enum-specifier must use a simple identifier");
14562 	}
14563     }
14564 
14565   /* Look for trailing attributes to apply to this enumeration, and
14566      apply them if appropriate.  */
14567   if (cp_parser_allow_gnu_extensions_p (parser))
14568     {
14569       tree trailing_attr = cp_parser_attributes_opt (parser);
14570       trailing_attr = chainon (trailing_attr, attributes);
14571       cplus_decl_attributes (&type,
14572 			     trailing_attr,
14573 			     (int) ATTR_FLAG_TYPE_IN_PLACE);
14574     }
14575 
14576   /* Finish up the enumeration.  */
14577   if (type != error_mark_node)
14578     {
14579       if (new_value_list)
14580 	finish_enum_value_list (type);
14581       if (is_new_type)
14582 	finish_enum (type);
14583     }
14584 
14585   if (nested_name_specifier)
14586     {
14587       if (CLASS_TYPE_P (nested_name_specifier))
14588 	{
14589 	  TYPE_BEING_DEFINED (nested_name_specifier) = nested_being_defined;
14590 	  pop_scope (nested_name_specifier);
14591 	}
14592       else if (TREE_CODE (nested_name_specifier) == NAMESPACE_DECL)
14593 	{
14594 	  pop_nested_namespace (nested_name_specifier);
14595 	}
14596     }
14597  out:
14598   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
14599   return type;
14600 }
14601 
14602 /* Parse an enumerator-list.  The enumerators all have the indicated
14603    TYPE.
14604 
14605    enumerator-list:
14606      enumerator-definition
14607      enumerator-list , enumerator-definition  */
14608 
14609 static void
14610 cp_parser_enumerator_list (cp_parser* parser, tree type)
14611 {
14612   while (true)
14613     {
14614       /* Parse an enumerator-definition.  */
14615       cp_parser_enumerator_definition (parser, type);
14616 
14617       /* If the next token is not a ',', we've reached the end of
14618 	 the list.  */
14619       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14620 	break;
14621       /* Otherwise, consume the `,' and keep going.  */
14622       cp_lexer_consume_token (parser->lexer);
14623       /* If the next token is a `}', there is a trailing comma.  */
14624       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
14625 	{
14626 	  if (cxx_dialect < cxx0x && !in_system_header)
14627 	    pedwarn (input_location, OPT_pedantic,
14628                      "comma at end of enumerator list");
14629 	  break;
14630 	}
14631     }
14632 }
14633 
14634 /* Parse an enumerator-definition.  The enumerator has the indicated
14635    TYPE.
14636 
14637    enumerator-definition:
14638      enumerator
14639      enumerator = constant-expression
14640 
14641    enumerator:
14642      identifier  */
14643 
14644 static void
14645 cp_parser_enumerator_definition (cp_parser* parser, tree type)
14646 {
14647   tree identifier;
14648   tree value;
14649   location_t loc;
14650 
14651   /* Save the input location because we are interested in the location
14652      of the identifier and not the location of the explicit value.  */
14653   loc = cp_lexer_peek_token (parser->lexer)->location;
14654 
14655   /* Look for the identifier.  */
14656   identifier = cp_parser_identifier (parser);
14657   if (identifier == error_mark_node)
14658     return;
14659 
14660   /* If the next token is an '=', then there is an explicit value.  */
14661   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
14662     {
14663       /* Consume the `=' token.  */
14664       cp_lexer_consume_token (parser->lexer);
14665       /* Parse the value.  */
14666       value = cp_parser_constant_expression (parser,
14667 					     /*allow_non_constant_p=*/false,
14668 					     NULL);
14669     }
14670   else
14671     value = NULL_TREE;
14672 
14673   /* If we are processing a template, make sure the initializer of the
14674      enumerator doesn't contain any bare template parameter pack.  */
14675   if (check_for_bare_parameter_packs (value))
14676     value = error_mark_node;
14677 
14678   /* integral_constant_value will pull out this expression, so make sure
14679      it's folded as appropriate.  */
14680   value = fold_non_dependent_expr (value);
14681 
14682   /* Create the enumerator.  */
14683   build_enumerator (identifier, value, type, loc);
14684 }
14685 
14686 /* Parse a namespace-name.
14687 
14688    namespace-name:
14689      original-namespace-name
14690      namespace-alias
14691 
14692    Returns the NAMESPACE_DECL for the namespace.  */
14693 
14694 static tree
14695 cp_parser_namespace_name (cp_parser* parser)
14696 {
14697   tree identifier;
14698   tree namespace_decl;
14699 
14700   cp_token *token = cp_lexer_peek_token (parser->lexer);
14701 
14702   /* Get the name of the namespace.  */
14703   identifier = cp_parser_identifier (parser);
14704   if (identifier == error_mark_node)
14705     return error_mark_node;
14706 
14707   /* Look up the identifier in the currently active scope.  Look only
14708      for namespaces, due to:
14709 
14710        [basic.lookup.udir]
14711 
14712        When looking up a namespace-name in a using-directive or alias
14713        definition, only namespace names are considered.
14714 
14715      And:
14716 
14717        [basic.lookup.qual]
14718 
14719        During the lookup of a name preceding the :: scope resolution
14720        operator, object, function, and enumerator names are ignored.
14721 
14722      (Note that cp_parser_qualifying_entity only calls this
14723      function if the token after the name is the scope resolution
14724      operator.)  */
14725   namespace_decl = cp_parser_lookup_name (parser, identifier,
14726 					  none_type,
14727 					  /*is_template=*/false,
14728 					  /*is_namespace=*/true,
14729 					  /*check_dependency=*/true,
14730 					  /*ambiguous_decls=*/NULL,
14731 					  token->location);
14732   /* If it's not a namespace, issue an error.  */
14733   if (namespace_decl == error_mark_node
14734       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
14735     {
14736       if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
14737 	error_at (token->location, "%qD is not a namespace-name", identifier);
14738       cp_parser_error (parser, "expected namespace-name");
14739       namespace_decl = error_mark_node;
14740     }
14741 
14742   return namespace_decl;
14743 }
14744 
14745 /* Parse a namespace-definition.
14746 
14747    namespace-definition:
14748      named-namespace-definition
14749      unnamed-namespace-definition
14750 
14751    named-namespace-definition:
14752      original-namespace-definition
14753      extension-namespace-definition
14754 
14755    original-namespace-definition:
14756      namespace identifier { namespace-body }
14757 
14758    extension-namespace-definition:
14759      namespace original-namespace-name { namespace-body }
14760 
14761    unnamed-namespace-definition:
14762      namespace { namespace-body } */
14763 
14764 static void
14765 cp_parser_namespace_definition (cp_parser* parser)
14766 {
14767   tree identifier, attribs;
14768   bool has_visibility;
14769   bool is_inline;
14770 
14771   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_INLINE))
14772     {
14773       maybe_warn_cpp0x (CPP0X_INLINE_NAMESPACES);
14774       is_inline = true;
14775       cp_lexer_consume_token (parser->lexer);
14776     }
14777   else
14778     is_inline = false;
14779 
14780   /* Look for the `namespace' keyword.  */
14781   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
14782 
14783   /* Get the name of the namespace.  We do not attempt to distinguish
14784      between an original-namespace-definition and an
14785      extension-namespace-definition at this point.  The semantic
14786      analysis routines are responsible for that.  */
14787   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
14788     identifier = cp_parser_identifier (parser);
14789   else
14790     identifier = NULL_TREE;
14791 
14792   /* Parse any specified attributes.  */
14793   attribs = cp_parser_attributes_opt (parser);
14794 
14795   /* Look for the `{' to start the namespace.  */
14796   cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
14797   /* Start the namespace.  */
14798   push_namespace (identifier);
14799 
14800   /* "inline namespace" is equivalent to a stub namespace definition
14801      followed by a strong using directive.  */
14802   if (is_inline)
14803     {
14804       tree name_space = current_namespace;
14805       /* Set up namespace association.  */
14806       DECL_NAMESPACE_ASSOCIATIONS (name_space)
14807 	= tree_cons (CP_DECL_CONTEXT (name_space), NULL_TREE,
14808 		     DECL_NAMESPACE_ASSOCIATIONS (name_space));
14809       /* Import the contents of the inline namespace.  */
14810       pop_namespace ();
14811       do_using_directive (name_space);
14812       push_namespace (identifier);
14813     }
14814 
14815   has_visibility = handle_namespace_attrs (current_namespace, attribs);
14816 
14817   /* Parse the body of the namespace.  */
14818   cp_parser_namespace_body (parser);
14819 
14820   if (has_visibility)
14821     pop_visibility (1);
14822 
14823   /* Finish the namespace.  */
14824   pop_namespace ();
14825   /* Look for the final `}'.  */
14826   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
14827 }
14828 
14829 /* Parse a namespace-body.
14830 
14831    namespace-body:
14832      declaration-seq [opt]  */
14833 
14834 static void
14835 cp_parser_namespace_body (cp_parser* parser)
14836 {
14837   cp_parser_declaration_seq_opt (parser);
14838 }
14839 
14840 /* Parse a namespace-alias-definition.
14841 
14842    namespace-alias-definition:
14843      namespace identifier = qualified-namespace-specifier ;  */
14844 
14845 static void
14846 cp_parser_namespace_alias_definition (cp_parser* parser)
14847 {
14848   tree identifier;
14849   tree namespace_specifier;
14850 
14851   cp_token *token = cp_lexer_peek_token (parser->lexer);
14852 
14853   /* Look for the `namespace' keyword.  */
14854   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
14855   /* Look for the identifier.  */
14856   identifier = cp_parser_identifier (parser);
14857   if (identifier == error_mark_node)
14858     return;
14859   /* Look for the `=' token.  */
14860   if (!cp_parser_uncommitted_to_tentative_parse_p (parser)
14861       && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
14862     {
14863       error_at (token->location, "%<namespace%> definition is not allowed here");
14864       /* Skip the definition.  */
14865       cp_lexer_consume_token (parser->lexer);
14866       if (cp_parser_skip_to_closing_brace (parser))
14867 	cp_lexer_consume_token (parser->lexer);
14868       return;
14869     }
14870   cp_parser_require (parser, CPP_EQ, RT_EQ);
14871   /* Look for the qualified-namespace-specifier.  */
14872   namespace_specifier
14873     = cp_parser_qualified_namespace_specifier (parser);
14874   /* Look for the `;' token.  */
14875   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
14876 
14877   /* Register the alias in the symbol table.  */
14878   do_namespace_alias (identifier, namespace_specifier);
14879 }
14880 
14881 /* Parse a qualified-namespace-specifier.
14882 
14883    qualified-namespace-specifier:
14884      :: [opt] nested-name-specifier [opt] namespace-name
14885 
14886    Returns a NAMESPACE_DECL corresponding to the specified
14887    namespace.  */
14888 
14889 static tree
14890 cp_parser_qualified_namespace_specifier (cp_parser* parser)
14891 {
14892   /* Look for the optional `::'.  */
14893   cp_parser_global_scope_opt (parser,
14894 			      /*current_scope_valid_p=*/false);
14895 
14896   /* Look for the optional nested-name-specifier.  */
14897   cp_parser_nested_name_specifier_opt (parser,
14898 				       /*typename_keyword_p=*/false,
14899 				       /*check_dependency_p=*/true,
14900 				       /*type_p=*/false,
14901 				       /*is_declaration=*/true);
14902 
14903   return cp_parser_namespace_name (parser);
14904 }
14905 
14906 /* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
14907    access declaration.
14908 
14909    using-declaration:
14910      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
14911      using :: unqualified-id ;
14912 
14913    access-declaration:
14914      qualified-id ;
14915 
14916    */
14917 
14918 static bool
14919 cp_parser_using_declaration (cp_parser* parser,
14920 			     bool access_declaration_p)
14921 {
14922   cp_token *token;
14923   bool typename_p = false;
14924   bool global_scope_p;
14925   tree decl;
14926   tree identifier;
14927   tree qscope;
14928   int oldcount = errorcount;
14929   cp_token *diag_token = NULL;
14930 
14931   if (access_declaration_p)
14932     {
14933       diag_token = cp_lexer_peek_token (parser->lexer);
14934       cp_parser_parse_tentatively (parser);
14935     }
14936   else
14937     {
14938       /* Look for the `using' keyword.  */
14939       cp_parser_require_keyword (parser, RID_USING, RT_USING);
14940 
14941       /* Peek at the next token.  */
14942       token = cp_lexer_peek_token (parser->lexer);
14943       /* See if it's `typename'.  */
14944       if (token->keyword == RID_TYPENAME)
14945 	{
14946 	  /* Remember that we've seen it.  */
14947 	  typename_p = true;
14948 	  /* Consume the `typename' token.  */
14949 	  cp_lexer_consume_token (parser->lexer);
14950 	}
14951     }
14952 
14953   /* Look for the optional global scope qualification.  */
14954   global_scope_p
14955     = (cp_parser_global_scope_opt (parser,
14956 				   /*current_scope_valid_p=*/false)
14957        != NULL_TREE);
14958 
14959   /* If we saw `typename', or didn't see `::', then there must be a
14960      nested-name-specifier present.  */
14961   if (typename_p || !global_scope_p)
14962     qscope = cp_parser_nested_name_specifier (parser, typename_p,
14963 					      /*check_dependency_p=*/true,
14964 					      /*type_p=*/false,
14965 					      /*is_declaration=*/true);
14966   /* Otherwise, we could be in either of the two productions.  In that
14967      case, treat the nested-name-specifier as optional.  */
14968   else
14969     qscope = cp_parser_nested_name_specifier_opt (parser,
14970 						  /*typename_keyword_p=*/false,
14971 						  /*check_dependency_p=*/true,
14972 						  /*type_p=*/false,
14973 						  /*is_declaration=*/true);
14974   if (!qscope)
14975     qscope = global_namespace;
14976 
14977   if (access_declaration_p && cp_parser_error_occurred (parser))
14978     /* Something has already gone wrong; there's no need to parse
14979        further.  Since an error has occurred, the return value of
14980        cp_parser_parse_definitely will be false, as required.  */
14981     return cp_parser_parse_definitely (parser);
14982 
14983   token = cp_lexer_peek_token (parser->lexer);
14984   /* Parse the unqualified-id.  */
14985   identifier = cp_parser_unqualified_id (parser,
14986 					 /*template_keyword_p=*/false,
14987 					 /*check_dependency_p=*/true,
14988 					 /*declarator_p=*/true,
14989 					 /*optional_p=*/false);
14990 
14991   if (access_declaration_p)
14992     {
14993       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
14994 	cp_parser_simulate_error (parser);
14995       if (!cp_parser_parse_definitely (parser))
14996 	return false;
14997     }
14998 
14999   /* The function we call to handle a using-declaration is different
15000      depending on what scope we are in.  */
15001   if (qscope == error_mark_node || identifier == error_mark_node)
15002     ;
15003   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
15004 	   && TREE_CODE (identifier) != BIT_NOT_EXPR)
15005     /* [namespace.udecl]
15006 
15007        A using declaration shall not name a template-id.  */
15008     error_at (token->location,
15009 	      "a template-id may not appear in a using-declaration");
15010   else
15011     {
15012       if (at_class_scope_p ())
15013 	{
15014 	  /* Create the USING_DECL.  */
15015 	  decl = do_class_using_decl (parser->scope, identifier);
15016 
15017 	  if (decl && typename_p)
15018 	    USING_DECL_TYPENAME_P (decl) = 1;
15019 
15020 	  if (check_for_bare_parameter_packs (decl))
15021             return false;
15022 	  else
15023 	    /* Add it to the list of members in this class.  */
15024 	    finish_member_declaration (decl);
15025 	}
15026       else
15027 	{
15028 	  decl = cp_parser_lookup_name_simple (parser,
15029 					       identifier,
15030 					       token->location);
15031 	  if (decl == error_mark_node)
15032 	    cp_parser_name_lookup_error (parser, identifier,
15033 					 decl, NLE_NULL,
15034 					 token->location);
15035 	  else if (check_for_bare_parameter_packs (decl))
15036 	    return false;
15037 	  else if (!at_namespace_scope_p ())
15038 	    do_local_using_decl (decl, qscope, identifier);
15039 	  else
15040 	    do_toplevel_using_decl (decl, qscope, identifier);
15041 	}
15042     }
15043 
15044   /* Look for the final `;'.  */
15045   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
15046 
15047   if (access_declaration_p && errorcount == oldcount)
15048     warning_at (diag_token->location, OPT_Wdeprecated,
15049 		"access declarations are deprecated "
15050 		"in favour of using-declarations; "
15051 		"suggestion: add the %<using%> keyword");
15052 
15053   return true;
15054 }
15055 
15056 /* Parse an alias-declaration.
15057 
15058    alias-declaration:
15059      using identifier attribute-specifier-seq [opt] = type-id  */
15060 
15061 static tree
15062 cp_parser_alias_declaration (cp_parser* parser)
15063 {
15064   tree id, type, decl, pushed_scope = NULL_TREE, attributes;
15065   location_t id_location;
15066   cp_declarator *declarator;
15067   cp_decl_specifier_seq decl_specs;
15068   bool member_p;
15069   const char *saved_message = NULL;
15070 
15071   /* Look for the `using' keyword.  */
15072   cp_parser_require_keyword (parser, RID_USING, RT_USING);
15073   id_location = cp_lexer_peek_token (parser->lexer)->location;
15074   id = cp_parser_identifier (parser);
15075   if (id == error_mark_node)
15076     return error_mark_node;
15077 
15078   attributes = cp_parser_attributes_opt (parser);
15079   if (attributes == error_mark_node)
15080     return error_mark_node;
15081 
15082   cp_parser_require (parser, CPP_EQ, RT_EQ);
15083 
15084   if (cp_parser_error_occurred (parser))
15085     return error_mark_node;
15086 
15087   /* Now we are going to parse the type-id of the declaration.  */
15088 
15089   /*
15090     [dcl.type]/3 says:
15091 
15092 	"A type-specifier-seq shall not define a class or enumeration
15093 	 unless it appears in the type-id of an alias-declaration (7.1.3) that
15094 	 is not the declaration of a template-declaration."
15095 
15096     In other words, if we currently are in an alias template, the
15097     type-id should not define a type.
15098 
15099     So let's set parser->type_definition_forbidden_message in that
15100     case; cp_parser_check_type_definition (called by
15101     cp_parser_class_specifier) will then emit an error if a type is
15102     defined in the type-id.  */
15103   if (parser->num_template_parameter_lists)
15104     {
15105       saved_message = parser->type_definition_forbidden_message;
15106       parser->type_definition_forbidden_message =
15107 	G_("types may not be defined in alias template declarations");
15108     }
15109 
15110   type = cp_parser_type_id (parser);
15111 
15112   /* Restore the error message if need be.  */
15113   if (parser->num_template_parameter_lists)
15114     parser->type_definition_forbidden_message = saved_message;
15115 
15116   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
15117 
15118   if (cp_parser_error_occurred (parser))
15119     return error_mark_node;
15120 
15121   /* A typedef-name can also be introduced by an alias-declaration. The
15122      identifier following the using keyword becomes a typedef-name. It has
15123      the same semantics as if it were introduced by the typedef
15124      specifier. In particular, it does not define a new type and it shall
15125      not appear in the type-id.  */
15126 
15127   clear_decl_specs (&decl_specs);
15128   decl_specs.type = type;
15129   decl_specs.attributes = attributes;
15130   ++decl_specs.specs[(int) ds_typedef];
15131   ++decl_specs.specs[(int) ds_alias];
15132 
15133   declarator = make_id_declarator (NULL_TREE, id, sfk_none);
15134   declarator->id_loc = id_location;
15135 
15136   member_p = at_class_scope_p ();
15137   if (member_p)
15138     decl = grokfield (declarator, &decl_specs, NULL_TREE, false,
15139 		      NULL_TREE, attributes);
15140   else
15141     decl = start_decl (declarator, &decl_specs, 0,
15142 		       attributes, NULL_TREE, &pushed_scope);
15143   if (decl == error_mark_node)
15144     return decl;
15145 
15146   cp_finish_decl (decl, NULL_TREE, 0, NULL_TREE, 0);
15147 
15148   if (pushed_scope)
15149     pop_scope (pushed_scope);
15150 
15151   /* If decl is a template, return its TEMPLATE_DECL so that it gets
15152      added into the symbol table; otherwise, return the TYPE_DECL.  */
15153   if (DECL_LANG_SPECIFIC (decl)
15154       && DECL_TEMPLATE_INFO (decl)
15155       && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
15156     {
15157       decl = DECL_TI_TEMPLATE (decl);
15158       if (member_p)
15159 	check_member_template (decl);
15160     }
15161 
15162   return decl;
15163 }
15164 
15165 /* Parse a using-directive.
15166 
15167    using-directive:
15168      using namespace :: [opt] nested-name-specifier [opt]
15169        namespace-name ;  */
15170 
15171 static void
15172 cp_parser_using_directive (cp_parser* parser)
15173 {
15174   tree namespace_decl;
15175   tree attribs;
15176 
15177   /* Look for the `using' keyword.  */
15178   cp_parser_require_keyword (parser, RID_USING, RT_USING);
15179   /* And the `namespace' keyword.  */
15180   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
15181   /* Look for the optional `::' operator.  */
15182   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
15183   /* And the optional nested-name-specifier.  */
15184   cp_parser_nested_name_specifier_opt (parser,
15185 				       /*typename_keyword_p=*/false,
15186 				       /*check_dependency_p=*/true,
15187 				       /*type_p=*/false,
15188 				       /*is_declaration=*/true);
15189   /* Get the namespace being used.  */
15190   namespace_decl = cp_parser_namespace_name (parser);
15191   /* And any specified attributes.  */
15192   attribs = cp_parser_attributes_opt (parser);
15193   /* Update the symbol table.  */
15194   parse_using_directive (namespace_decl, attribs);
15195   /* Look for the final `;'.  */
15196   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
15197 }
15198 
15199 /* Parse an asm-definition.
15200 
15201    asm-definition:
15202      asm ( string-literal ) ;
15203 
15204    GNU Extension:
15205 
15206    asm-definition:
15207      asm volatile [opt] ( string-literal ) ;
15208      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
15209      asm volatile [opt] ( string-literal : asm-operand-list [opt]
15210 			  : asm-operand-list [opt] ) ;
15211      asm volatile [opt] ( string-literal : asm-operand-list [opt]
15212 			  : asm-operand-list [opt]
15213 			  : asm-clobber-list [opt] ) ;
15214      asm volatile [opt] goto ( string-literal : : asm-operand-list [opt]
15215 			       : asm-clobber-list [opt]
15216 			       : asm-goto-list ) ;  */
15217 
15218 static void
15219 cp_parser_asm_definition (cp_parser* parser)
15220 {
15221   tree string;
15222   tree outputs = NULL_TREE;
15223   tree inputs = NULL_TREE;
15224   tree clobbers = NULL_TREE;
15225   tree labels = NULL_TREE;
15226   tree asm_stmt;
15227   bool volatile_p = false;
15228   bool extended_p = false;
15229   bool invalid_inputs_p = false;
15230   bool invalid_outputs_p = false;
15231   bool goto_p = false;
15232   required_token missing = RT_NONE;
15233 
15234   /* Look for the `asm' keyword.  */
15235   cp_parser_require_keyword (parser, RID_ASM, RT_ASM);
15236   /* See if the next token is `volatile'.  */
15237   if (cp_parser_allow_gnu_extensions_p (parser)
15238       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
15239     {
15240       /* Remember that we saw the `volatile' keyword.  */
15241       volatile_p = true;
15242       /* Consume the token.  */
15243       cp_lexer_consume_token (parser->lexer);
15244     }
15245   if (cp_parser_allow_gnu_extensions_p (parser)
15246       && parser->in_function_body
15247       && cp_lexer_next_token_is_keyword (parser->lexer, RID_GOTO))
15248     {
15249       /* Remember that we saw the `goto' keyword.  */
15250       goto_p = true;
15251       /* Consume the token.  */
15252       cp_lexer_consume_token (parser->lexer);
15253     }
15254   /* Look for the opening `('.  */
15255   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
15256     return;
15257   /* Look for the string.  */
15258   string = cp_parser_string_literal (parser, false, false);
15259   if (string == error_mark_node)
15260     {
15261       cp_parser_skip_to_closing_parenthesis (parser, true, false,
15262 					     /*consume_paren=*/true);
15263       return;
15264     }
15265 
15266   /* If we're allowing GNU extensions, check for the extended assembly
15267      syntax.  Unfortunately, the `:' tokens need not be separated by
15268      a space in C, and so, for compatibility, we tolerate that here
15269      too.  Doing that means that we have to treat the `::' operator as
15270      two `:' tokens.  */
15271   if (cp_parser_allow_gnu_extensions_p (parser)
15272       && parser->in_function_body
15273       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
15274 	  || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
15275     {
15276       bool inputs_p = false;
15277       bool clobbers_p = false;
15278       bool labels_p = false;
15279 
15280       /* The extended syntax was used.  */
15281       extended_p = true;
15282 
15283       /* Look for outputs.  */
15284       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
15285 	{
15286 	  /* Consume the `:'.  */
15287 	  cp_lexer_consume_token (parser->lexer);
15288 	  /* Parse the output-operands.  */
15289 	  if (cp_lexer_next_token_is_not (parser->lexer,
15290 					  CPP_COLON)
15291 	      && cp_lexer_next_token_is_not (parser->lexer,
15292 					     CPP_SCOPE)
15293 	      && cp_lexer_next_token_is_not (parser->lexer,
15294 					     CPP_CLOSE_PAREN)
15295 	      && !goto_p)
15296 	    outputs = cp_parser_asm_operand_list (parser);
15297 
15298 	    if (outputs == error_mark_node)
15299 	      invalid_outputs_p = true;
15300 	}
15301       /* If the next token is `::', there are no outputs, and the
15302 	 next token is the beginning of the inputs.  */
15303       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
15304 	/* The inputs are coming next.  */
15305 	inputs_p = true;
15306 
15307       /* Look for inputs.  */
15308       if (inputs_p
15309 	  || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
15310 	{
15311 	  /* Consume the `:' or `::'.  */
15312 	  cp_lexer_consume_token (parser->lexer);
15313 	  /* Parse the output-operands.  */
15314 	  if (cp_lexer_next_token_is_not (parser->lexer,
15315 					  CPP_COLON)
15316 	      && cp_lexer_next_token_is_not (parser->lexer,
15317 					     CPP_SCOPE)
15318 	      && cp_lexer_next_token_is_not (parser->lexer,
15319 					     CPP_CLOSE_PAREN))
15320 	    inputs = cp_parser_asm_operand_list (parser);
15321 
15322 	    if (inputs == error_mark_node)
15323 	      invalid_inputs_p = true;
15324 	}
15325       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
15326 	/* The clobbers are coming next.  */
15327 	clobbers_p = true;
15328 
15329       /* Look for clobbers.  */
15330       if (clobbers_p
15331 	  || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
15332 	{
15333 	  clobbers_p = true;
15334 	  /* Consume the `:' or `::'.  */
15335 	  cp_lexer_consume_token (parser->lexer);
15336 	  /* Parse the clobbers.  */
15337 	  if (cp_lexer_next_token_is_not (parser->lexer,
15338 					  CPP_COLON)
15339 	      && cp_lexer_next_token_is_not (parser->lexer,
15340 					     CPP_CLOSE_PAREN))
15341 	    clobbers = cp_parser_asm_clobber_list (parser);
15342 	}
15343       else if (goto_p
15344 	       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
15345 	/* The labels are coming next.  */
15346 	labels_p = true;
15347 
15348       /* Look for labels.  */
15349       if (labels_p
15350 	  || (goto_p && cp_lexer_next_token_is (parser->lexer, CPP_COLON)))
15351 	{
15352 	  labels_p = true;
15353 	  /* Consume the `:' or `::'.  */
15354 	  cp_lexer_consume_token (parser->lexer);
15355 	  /* Parse the labels.  */
15356 	  labels = cp_parser_asm_label_list (parser);
15357 	}
15358 
15359       if (goto_p && !labels_p)
15360 	missing = clobbers_p ? RT_COLON : RT_COLON_SCOPE;
15361     }
15362   else if (goto_p)
15363     missing = RT_COLON_SCOPE;
15364 
15365   /* Look for the closing `)'.  */
15366   if (!cp_parser_require (parser, missing ? CPP_COLON : CPP_CLOSE_PAREN,
15367 			  missing ? missing : RT_CLOSE_PAREN))
15368     cp_parser_skip_to_closing_parenthesis (parser, true, false,
15369 					   /*consume_paren=*/true);
15370   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
15371 
15372   if (!invalid_inputs_p && !invalid_outputs_p)
15373     {
15374       /* Create the ASM_EXPR.  */
15375       if (parser->in_function_body)
15376 	{
15377 	  asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
15378 				      inputs, clobbers, labels);
15379 	  /* If the extended syntax was not used, mark the ASM_EXPR.  */
15380 	  if (!extended_p)
15381 	    {
15382 	      tree temp = asm_stmt;
15383 	      if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
15384 		temp = TREE_OPERAND (temp, 0);
15385 
15386 	      ASM_INPUT_P (temp) = 1;
15387 	    }
15388 	}
15389       else
15390 	cgraph_add_asm_node (string);
15391     }
15392 }
15393 
15394 /* Declarators [gram.dcl.decl] */
15395 
15396 /* Parse an init-declarator.
15397 
15398    init-declarator:
15399      declarator initializer [opt]
15400 
15401    GNU Extension:
15402 
15403    init-declarator:
15404      declarator asm-specification [opt] attributes [opt] initializer [opt]
15405 
15406    function-definition:
15407      decl-specifier-seq [opt] declarator ctor-initializer [opt]
15408        function-body
15409      decl-specifier-seq [opt] declarator function-try-block
15410 
15411    GNU Extension:
15412 
15413    function-definition:
15414      __extension__ function-definition
15415 
15416    TM Extension:
15417 
15418    function-definition:
15419      decl-specifier-seq [opt] declarator function-transaction-block
15420 
15421    The DECL_SPECIFIERS apply to this declarator.  Returns a
15422    representation of the entity declared.  If MEMBER_P is TRUE, then
15423    this declarator appears in a class scope.  The new DECL created by
15424    this declarator is returned.
15425 
15426    The CHECKS are access checks that should be performed once we know
15427    what entity is being declared (and, therefore, what classes have
15428    befriended it).
15429 
15430    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
15431    for a function-definition here as well.  If the declarator is a
15432    declarator for a function-definition, *FUNCTION_DEFINITION_P will
15433    be TRUE upon return.  By that point, the function-definition will
15434    have been completely parsed.
15435 
15436    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
15437    is FALSE.
15438 
15439    If MAYBE_RANGE_FOR_DECL is not NULL, the pointed tree will be set to the
15440    parsed declaration if it is an uninitialized single declarator not followed
15441    by a `;', or to error_mark_node otherwise. Either way, the trailing `;',
15442    if present, will not be consumed.  If returned, this declarator will be
15443    created with SD_INITIALIZED but will not call cp_finish_decl.  */
15444 
15445 static tree
15446 cp_parser_init_declarator (cp_parser* parser,
15447 			   cp_decl_specifier_seq *decl_specifiers,
15448 			   VEC (deferred_access_check,gc)* checks,
15449 			   bool function_definition_allowed_p,
15450 			   bool member_p,
15451 			   int declares_class_or_enum,
15452 			   bool* function_definition_p,
15453 			   tree* maybe_range_for_decl)
15454 {
15455   cp_token *token = NULL, *asm_spec_start_token = NULL,
15456            *attributes_start_token = NULL;
15457   cp_declarator *declarator;
15458   tree prefix_attributes;
15459   tree attributes;
15460   tree asm_specification;
15461   tree initializer;
15462   tree decl = NULL_TREE;
15463   tree scope;
15464   int is_initialized;
15465   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
15466      initialized with "= ..", CPP_OPEN_PAREN if initialized with
15467      "(...)".  */
15468   enum cpp_ttype initialization_kind;
15469   bool is_direct_init = false;
15470   bool is_non_constant_init;
15471   int ctor_dtor_or_conv_p;
15472   bool friend_p;
15473   tree pushed_scope = NULL_TREE;
15474   bool range_for_decl_p = false;
15475 
15476   /* Gather the attributes that were provided with the
15477      decl-specifiers.  */
15478   prefix_attributes = decl_specifiers->attributes;
15479 
15480   /* Assume that this is not the declarator for a function
15481      definition.  */
15482   if (function_definition_p)
15483     *function_definition_p = false;
15484 
15485   /* Defer access checks while parsing the declarator; we cannot know
15486      what names are accessible until we know what is being
15487      declared.  */
15488   resume_deferring_access_checks ();
15489 
15490   /* Parse the declarator.  */
15491   token = cp_lexer_peek_token (parser->lexer);
15492   declarator
15493     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
15494 			    &ctor_dtor_or_conv_p,
15495 			    /*parenthesized_p=*/NULL,
15496 			    member_p);
15497   /* Gather up the deferred checks.  */
15498   stop_deferring_access_checks ();
15499 
15500   /* If the DECLARATOR was erroneous, there's no need to go
15501      further.  */
15502   if (declarator == cp_error_declarator)
15503     return error_mark_node;
15504 
15505   /* Check that the number of template-parameter-lists is OK.  */
15506   if (!cp_parser_check_declarator_template_parameters (parser, declarator,
15507 						       token->location))
15508     return error_mark_node;
15509 
15510   if (declares_class_or_enum & 2)
15511     cp_parser_check_for_definition_in_return_type (declarator,
15512 						   decl_specifiers->type,
15513 						   decl_specifiers->type_location);
15514 
15515   /* Figure out what scope the entity declared by the DECLARATOR is
15516      located in.  `grokdeclarator' sometimes changes the scope, so
15517      we compute it now.  */
15518   scope = get_scope_of_declarator (declarator);
15519 
15520   /* Perform any lookups in the declared type which were thought to be
15521      dependent, but are not in the scope of the declarator.  */
15522   decl_specifiers->type
15523     = maybe_update_decl_type (decl_specifiers->type, scope);
15524 
15525   /* If we're allowing GNU extensions, look for an asm-specification
15526      and attributes.  */
15527   if (cp_parser_allow_gnu_extensions_p (parser))
15528     {
15529       /* Look for an asm-specification.  */
15530       asm_spec_start_token = cp_lexer_peek_token (parser->lexer);
15531       asm_specification = cp_parser_asm_specification_opt (parser);
15532       /* And attributes.  */
15533       attributes_start_token = cp_lexer_peek_token (parser->lexer);
15534       attributes = cp_parser_attributes_opt (parser);
15535     }
15536   else
15537     {
15538       asm_specification = NULL_TREE;
15539       attributes = NULL_TREE;
15540     }
15541 
15542   /* Peek at the next token.  */
15543   token = cp_lexer_peek_token (parser->lexer);
15544   /* Check to see if the token indicates the start of a
15545      function-definition.  */
15546   if (function_declarator_p (declarator)
15547       && cp_parser_token_starts_function_definition_p (token))
15548     {
15549       if (!function_definition_allowed_p)
15550 	{
15551 	  /* If a function-definition should not appear here, issue an
15552 	     error message.  */
15553 	  cp_parser_error (parser,
15554 			   "a function-definition is not allowed here");
15555 	  return error_mark_node;
15556 	}
15557       else
15558 	{
15559 	  location_t func_brace_location
15560 	    = cp_lexer_peek_token (parser->lexer)->location;
15561 
15562 	  /* Neither attributes nor an asm-specification are allowed
15563 	     on a function-definition.  */
15564 	  if (asm_specification)
15565 	    error_at (asm_spec_start_token->location,
15566 		      "an asm-specification is not allowed "
15567 		      "on a function-definition");
15568 	  if (attributes)
15569 	    error_at (attributes_start_token->location,
15570 		      "attributes are not allowed on a function-definition");
15571 	  /* This is a function-definition.  */
15572 	  *function_definition_p = true;
15573 
15574 	  /* Parse the function definition.  */
15575 	  if (member_p)
15576 	    decl = cp_parser_save_member_function_body (parser,
15577 							decl_specifiers,
15578 							declarator,
15579 							prefix_attributes);
15580 	  else
15581 	    decl
15582 	      = (cp_parser_function_definition_from_specifiers_and_declarator
15583 		 (parser, decl_specifiers, prefix_attributes, declarator));
15584 
15585 	  if (decl != error_mark_node && DECL_STRUCT_FUNCTION (decl))
15586 	    {
15587 	      /* This is where the prologue starts...  */
15588 	      DECL_STRUCT_FUNCTION (decl)->function_start_locus
15589 		= func_brace_location;
15590 	    }
15591 
15592 	  return decl;
15593 	}
15594     }
15595 
15596   /* [dcl.dcl]
15597 
15598      Only in function declarations for constructors, destructors, and
15599      type conversions can the decl-specifier-seq be omitted.
15600 
15601      We explicitly postpone this check past the point where we handle
15602      function-definitions because we tolerate function-definitions
15603      that are missing their return types in some modes.  */
15604   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
15605     {
15606       cp_parser_error (parser,
15607 		       "expected constructor, destructor, or type conversion");
15608       return error_mark_node;
15609     }
15610 
15611   /* An `=' or an `(', or an '{' in C++0x, indicates an initializer.  */
15612   if (token->type == CPP_EQ
15613       || token->type == CPP_OPEN_PAREN
15614       || token->type == CPP_OPEN_BRACE)
15615     {
15616       is_initialized = SD_INITIALIZED;
15617       initialization_kind = token->type;
15618       if (maybe_range_for_decl)
15619 	*maybe_range_for_decl = error_mark_node;
15620 
15621       if (token->type == CPP_EQ
15622 	  && function_declarator_p (declarator))
15623 	{
15624 	  cp_token *t2 = cp_lexer_peek_nth_token (parser->lexer, 2);
15625 	  if (t2->keyword == RID_DEFAULT)
15626 	    is_initialized = SD_DEFAULTED;
15627 	  else if (t2->keyword == RID_DELETE)
15628 	    is_initialized = SD_DELETED;
15629 	}
15630     }
15631   else
15632     {
15633       /* If the init-declarator isn't initialized and isn't followed by a
15634 	 `,' or `;', it's not a valid init-declarator.  */
15635       if (token->type != CPP_COMMA
15636 	  && token->type != CPP_SEMICOLON)
15637 	{
15638 	  if (maybe_range_for_decl && *maybe_range_for_decl != error_mark_node)
15639 	    range_for_decl_p = true;
15640 	  else
15641 	    {
15642 	      cp_parser_error (parser, "expected initializer");
15643 	      return error_mark_node;
15644 	    }
15645 	}
15646       is_initialized = SD_UNINITIALIZED;
15647       initialization_kind = CPP_EOF;
15648     }
15649 
15650   /* Because start_decl has side-effects, we should only call it if we
15651      know we're going ahead.  By this point, we know that we cannot
15652      possibly be looking at any other construct.  */
15653   cp_parser_commit_to_tentative_parse (parser);
15654 
15655   /* If the decl specifiers were bad, issue an error now that we're
15656      sure this was intended to be a declarator.  Then continue
15657      declaring the variable(s), as int, to try to cut down on further
15658      errors.  */
15659   if (decl_specifiers->any_specifiers_p
15660       && decl_specifiers->type == error_mark_node)
15661     {
15662       cp_parser_error (parser, "invalid type in declaration");
15663       decl_specifiers->type = integer_type_node;
15664     }
15665 
15666   /* Check to see whether or not this declaration is a friend.  */
15667   friend_p = cp_parser_friend_p (decl_specifiers);
15668 
15669   /* Enter the newly declared entry in the symbol table.  If we're
15670      processing a declaration in a class-specifier, we wait until
15671      after processing the initializer.  */
15672   if (!member_p)
15673     {
15674       if (parser->in_unbraced_linkage_specification_p)
15675 	decl_specifiers->storage_class = sc_extern;
15676       decl = start_decl (declarator, decl_specifiers,
15677 			 range_for_decl_p? SD_INITIALIZED : is_initialized,
15678 			 attributes, prefix_attributes,
15679 			 &pushed_scope);
15680       /* Adjust location of decl if declarator->id_loc is more appropriate:
15681 	 set, and decl wasn't merged with another decl, in which case its
15682 	 location would be different from input_location, and more accurate.  */
15683       if (DECL_P (decl)
15684 	  && declarator->id_loc != UNKNOWN_LOCATION
15685 	  && DECL_SOURCE_LOCATION (decl) == input_location)
15686 	DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
15687     }
15688   else if (scope)
15689     /* Enter the SCOPE.  That way unqualified names appearing in the
15690        initializer will be looked up in SCOPE.  */
15691     pushed_scope = push_scope (scope);
15692 
15693   /* Perform deferred access control checks, now that we know in which
15694      SCOPE the declared entity resides.  */
15695   if (!member_p && decl)
15696     {
15697       tree saved_current_function_decl = NULL_TREE;
15698 
15699       /* If the entity being declared is a function, pretend that we
15700 	 are in its scope.  If it is a `friend', it may have access to
15701 	 things that would not otherwise be accessible.  */
15702       if (TREE_CODE (decl) == FUNCTION_DECL)
15703 	{
15704 	  saved_current_function_decl = current_function_decl;
15705 	  current_function_decl = decl;
15706 	}
15707 
15708       /* Perform access checks for template parameters.  */
15709       cp_parser_perform_template_parameter_access_checks (checks);
15710 
15711       /* Perform the access control checks for the declarator and the
15712 	 decl-specifiers.  */
15713       perform_deferred_access_checks ();
15714 
15715       /* Restore the saved value.  */
15716       if (TREE_CODE (decl) == FUNCTION_DECL)
15717 	current_function_decl = saved_current_function_decl;
15718     }
15719 
15720   /* Parse the initializer.  */
15721   initializer = NULL_TREE;
15722   is_direct_init = false;
15723   is_non_constant_init = true;
15724   if (is_initialized)
15725     {
15726       if (function_declarator_p (declarator))
15727 	{
15728 	  cp_token *initializer_start_token = cp_lexer_peek_token (parser->lexer);
15729 	   if (initialization_kind == CPP_EQ)
15730 	     initializer = cp_parser_pure_specifier (parser);
15731 	   else
15732 	     {
15733 	       /* If the declaration was erroneous, we don't really
15734 		  know what the user intended, so just silently
15735 		  consume the initializer.  */
15736 	       if (decl != error_mark_node)
15737 		 error_at (initializer_start_token->location,
15738 			   "initializer provided for function");
15739 	       cp_parser_skip_to_closing_parenthesis (parser,
15740 						      /*recovering=*/true,
15741 						      /*or_comma=*/false,
15742 						      /*consume_paren=*/true);
15743 	     }
15744 	}
15745       else
15746 	{
15747 	  /* We want to record the extra mangling scope for in-class
15748 	     initializers of class members and initializers of static data
15749 	     member templates.  The former involves deferring
15750 	     parsing of the initializer until end of class as with default
15751 	     arguments.  So right here we only handle the latter.  */
15752 	  if (!member_p && processing_template_decl)
15753 	    start_lambda_scope (decl);
15754 	  initializer = cp_parser_initializer (parser,
15755 					       &is_direct_init,
15756 					       &is_non_constant_init);
15757 	  if (!member_p && processing_template_decl)
15758 	    finish_lambda_scope ();
15759 	}
15760     }
15761 
15762   /* The old parser allows attributes to appear after a parenthesized
15763      initializer.  Mark Mitchell proposed removing this functionality
15764      on the GCC mailing lists on 2002-08-13.  This parser accepts the
15765      attributes -- but ignores them.  */
15766   if (cp_parser_allow_gnu_extensions_p (parser)
15767       && initialization_kind == CPP_OPEN_PAREN)
15768     if (cp_parser_attributes_opt (parser))
15769       warning (OPT_Wattributes,
15770 	       "attributes after parenthesized initializer ignored");
15771 
15772   /* For an in-class declaration, use `grokfield' to create the
15773      declaration.  */
15774   if (member_p)
15775     {
15776       if (pushed_scope)
15777 	{
15778 	  pop_scope (pushed_scope);
15779 	  pushed_scope = NULL_TREE;
15780 	}
15781       decl = grokfield (declarator, decl_specifiers,
15782 			initializer, !is_non_constant_init,
15783 			/*asmspec=*/NULL_TREE,
15784 			prefix_attributes);
15785       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
15786 	cp_parser_save_default_args (parser, decl);
15787     }
15788 
15789   /* Finish processing the declaration.  But, skip member
15790      declarations.  */
15791   if (!member_p && decl && decl != error_mark_node && !range_for_decl_p)
15792     {
15793       cp_finish_decl (decl,
15794 		      initializer, !is_non_constant_init,
15795 		      asm_specification,
15796 		      /* If the initializer is in parentheses, then this is
15797 			 a direct-initialization, which means that an
15798 			 `explicit' constructor is OK.  Otherwise, an
15799 			 `explicit' constructor cannot be used.  */
15800 		      ((is_direct_init || !is_initialized)
15801 		       ? LOOKUP_NORMAL : LOOKUP_IMPLICIT));
15802     }
15803   else if ((cxx_dialect != cxx98) && friend_p
15804 	   && decl && TREE_CODE (decl) == FUNCTION_DECL)
15805     /* Core issue #226 (C++0x only): A default template-argument
15806        shall not be specified in a friend class template
15807        declaration. */
15808     check_default_tmpl_args (decl, current_template_parms, /*is_primary=*/1,
15809                              /*is_partial=*/0, /*is_friend_decl=*/1);
15810 
15811   if (!friend_p && pushed_scope)
15812     pop_scope (pushed_scope);
15813 
15814   return decl;
15815 }
15816 
15817 /* Parse a declarator.
15818 
15819    declarator:
15820      direct-declarator
15821      ptr-operator declarator
15822 
15823    abstract-declarator:
15824      ptr-operator abstract-declarator [opt]
15825      direct-abstract-declarator
15826 
15827    GNU Extensions:
15828 
15829    declarator:
15830      attributes [opt] direct-declarator
15831      attributes [opt] ptr-operator declarator
15832 
15833    abstract-declarator:
15834      attributes [opt] ptr-operator abstract-declarator [opt]
15835      attributes [opt] direct-abstract-declarator
15836 
15837    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
15838    detect constructor, destructor or conversion operators. It is set
15839    to -1 if the declarator is a name, and +1 if it is a
15840    function. Otherwise it is set to zero. Usually you just want to
15841    test for >0, but internally the negative value is used.
15842 
15843    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
15844    a decl-specifier-seq unless it declares a constructor, destructor,
15845    or conversion.  It might seem that we could check this condition in
15846    semantic analysis, rather than parsing, but that makes it difficult
15847    to handle something like `f()'.  We want to notice that there are
15848    no decl-specifiers, and therefore realize that this is an
15849    expression, not a declaration.)
15850 
15851    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
15852    the declarator is a direct-declarator of the form "(...)".
15853 
15854    MEMBER_P is true iff this declarator is a member-declarator.  */
15855 
15856 static cp_declarator *
15857 cp_parser_declarator (cp_parser* parser,
15858 		      cp_parser_declarator_kind dcl_kind,
15859 		      int* ctor_dtor_or_conv_p,
15860 		      bool* parenthesized_p,
15861 		      bool member_p)
15862 {
15863   cp_declarator *declarator;
15864   enum tree_code code;
15865   cp_cv_quals cv_quals;
15866   tree class_type;
15867   tree attributes = NULL_TREE;
15868 
15869   /* Assume this is not a constructor, destructor, or type-conversion
15870      operator.  */
15871   if (ctor_dtor_or_conv_p)
15872     *ctor_dtor_or_conv_p = 0;
15873 
15874   if (cp_parser_allow_gnu_extensions_p (parser))
15875     attributes = cp_parser_attributes_opt (parser);
15876 
15877   /* Check for the ptr-operator production.  */
15878   cp_parser_parse_tentatively (parser);
15879   /* Parse the ptr-operator.  */
15880   code = cp_parser_ptr_operator (parser,
15881 				 &class_type,
15882 				 &cv_quals);
15883   /* If that worked, then we have a ptr-operator.  */
15884   if (cp_parser_parse_definitely (parser))
15885     {
15886       /* If a ptr-operator was found, then this declarator was not
15887 	 parenthesized.  */
15888       if (parenthesized_p)
15889 	*parenthesized_p = true;
15890       /* The dependent declarator is optional if we are parsing an
15891 	 abstract-declarator.  */
15892       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
15893 	cp_parser_parse_tentatively (parser);
15894 
15895       /* Parse the dependent declarator.  */
15896       declarator = cp_parser_declarator (parser, dcl_kind,
15897 					 /*ctor_dtor_or_conv_p=*/NULL,
15898 					 /*parenthesized_p=*/NULL,
15899 					 /*member_p=*/false);
15900 
15901       /* If we are parsing an abstract-declarator, we must handle the
15902 	 case where the dependent declarator is absent.  */
15903       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
15904 	  && !cp_parser_parse_definitely (parser))
15905 	declarator = NULL;
15906 
15907       declarator = cp_parser_make_indirect_declarator
15908 	(code, class_type, cv_quals, declarator);
15909     }
15910   /* Everything else is a direct-declarator.  */
15911   else
15912     {
15913       if (parenthesized_p)
15914 	*parenthesized_p = cp_lexer_next_token_is (parser->lexer,
15915 						   CPP_OPEN_PAREN);
15916       declarator = cp_parser_direct_declarator (parser, dcl_kind,
15917 						ctor_dtor_or_conv_p,
15918 						member_p);
15919     }
15920 
15921   if (attributes && declarator && declarator != cp_error_declarator)
15922     declarator->attributes = attributes;
15923 
15924   return declarator;
15925 }
15926 
15927 /* Parse a direct-declarator or direct-abstract-declarator.
15928 
15929    direct-declarator:
15930      declarator-id
15931      direct-declarator ( parameter-declaration-clause )
15932        cv-qualifier-seq [opt]
15933        exception-specification [opt]
15934      direct-declarator [ constant-expression [opt] ]
15935      ( declarator )
15936 
15937    direct-abstract-declarator:
15938      direct-abstract-declarator [opt]
15939        ( parameter-declaration-clause )
15940        cv-qualifier-seq [opt]
15941        exception-specification [opt]
15942      direct-abstract-declarator [opt] [ constant-expression [opt] ]
15943      ( abstract-declarator )
15944 
15945    Returns a representation of the declarator.  DCL_KIND is
15946    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
15947    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
15948    we are parsing a direct-declarator.  It is
15949    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
15950    of ambiguity we prefer an abstract declarator, as per
15951    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
15952    cp_parser_declarator.  */
15953 
15954 static cp_declarator *
15955 cp_parser_direct_declarator (cp_parser* parser,
15956 			     cp_parser_declarator_kind dcl_kind,
15957 			     int* ctor_dtor_or_conv_p,
15958 			     bool member_p)
15959 {
15960   cp_token *token;
15961   cp_declarator *declarator = NULL;
15962   tree scope = NULL_TREE;
15963   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
15964   bool saved_in_declarator_p = parser->in_declarator_p;
15965   bool first = true;
15966   tree pushed_scope = NULL_TREE;
15967 
15968   while (true)
15969     {
15970       /* Peek at the next token.  */
15971       token = cp_lexer_peek_token (parser->lexer);
15972       if (token->type == CPP_OPEN_PAREN)
15973 	{
15974 	  /* This is either a parameter-declaration-clause, or a
15975 	     parenthesized declarator. When we know we are parsing a
15976 	     named declarator, it must be a parenthesized declarator
15977 	     if FIRST is true. For instance, `(int)' is a
15978 	     parameter-declaration-clause, with an omitted
15979 	     direct-abstract-declarator. But `((*))', is a
15980 	     parenthesized abstract declarator. Finally, when T is a
15981 	     template parameter `(T)' is a
15982 	     parameter-declaration-clause, and not a parenthesized
15983 	     named declarator.
15984 
15985 	     We first try and parse a parameter-declaration-clause,
15986 	     and then try a nested declarator (if FIRST is true).
15987 
15988 	     It is not an error for it not to be a
15989 	     parameter-declaration-clause, even when FIRST is
15990 	     false. Consider,
15991 
15992 	       int i (int);
15993 	       int i (3);
15994 
15995 	     The first is the declaration of a function while the
15996 	     second is the definition of a variable, including its
15997 	     initializer.
15998 
15999 	     Having seen only the parenthesis, we cannot know which of
16000 	     these two alternatives should be selected.  Even more
16001 	     complex are examples like:
16002 
16003 	       int i (int (a));
16004 	       int i (int (3));
16005 
16006 	     The former is a function-declaration; the latter is a
16007 	     variable initialization.
16008 
16009 	     Thus again, we try a parameter-declaration-clause, and if
16010 	     that fails, we back out and return.  */
16011 
16012 	  if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
16013 	    {
16014 	      tree params;
16015 	      unsigned saved_num_template_parameter_lists;
16016 	      bool is_declarator = false;
16017 	      tree t;
16018 
16019 	      /* In a member-declarator, the only valid interpretation
16020 		 of a parenthesis is the start of a
16021 		 parameter-declaration-clause.  (It is invalid to
16022 		 initialize a static data member with a parenthesized
16023 		 initializer; only the "=" form of initialization is
16024 		 permitted.)  */
16025 	      if (!member_p)
16026 		cp_parser_parse_tentatively (parser);
16027 
16028 	      /* Consume the `('.  */
16029 	      cp_lexer_consume_token (parser->lexer);
16030 	      if (first)
16031 		{
16032 		  /* If this is going to be an abstract declarator, we're
16033 		     in a declarator and we can't have default args.  */
16034 		  parser->default_arg_ok_p = false;
16035 		  parser->in_declarator_p = true;
16036 		}
16037 
16038 	      /* Inside the function parameter list, surrounding
16039 		 template-parameter-lists do not apply.  */
16040 	      saved_num_template_parameter_lists
16041 		= parser->num_template_parameter_lists;
16042 	      parser->num_template_parameter_lists = 0;
16043 
16044 	      begin_scope (sk_function_parms, NULL_TREE);
16045 
16046 	      /* Parse the parameter-declaration-clause.  */
16047 	      params = cp_parser_parameter_declaration_clause (parser);
16048 
16049 	      parser->num_template_parameter_lists
16050 		= saved_num_template_parameter_lists;
16051 
16052 	      /* Consume the `)'.  */
16053 	      cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
16054 
16055 	      /* If all went well, parse the cv-qualifier-seq and the
16056 		 exception-specification.  */
16057 	      if (member_p || cp_parser_parse_definitely (parser))
16058 		{
16059 		  cp_cv_quals cv_quals;
16060 		  cp_virt_specifiers virt_specifiers;
16061 		  tree exception_specification;
16062 		  tree late_return;
16063 
16064 		  is_declarator = true;
16065 
16066 		  if (ctor_dtor_or_conv_p)
16067 		    *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
16068 		  first = false;
16069 
16070 		  /* Parse the cv-qualifier-seq.  */
16071 		  cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
16072 		  /* And the exception-specification.  */
16073 		  exception_specification
16074 		    = cp_parser_exception_specification_opt (parser);
16075 		  /* Parse the virt-specifier-seq.  */
16076 		  virt_specifiers = cp_parser_virt_specifier_seq_opt (parser);
16077 
16078 		  late_return = (cp_parser_late_return_type_opt
16079 				 (parser, member_p ? cv_quals : -1));
16080 
16081 		  /* Create the function-declarator.  */
16082 		  declarator = make_call_declarator (declarator,
16083 						     params,
16084 						     cv_quals,
16085 						     virt_specifiers,
16086 						     exception_specification,
16087 						     late_return);
16088 		  /* Any subsequent parameter lists are to do with
16089 		     return type, so are not those of the declared
16090 		     function.  */
16091 		  parser->default_arg_ok_p = false;
16092 		}
16093 
16094 	      /* Remove the function parms from scope.  */
16095 	      for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
16096 		pop_binding (DECL_NAME (t), t);
16097 	      leave_scope();
16098 
16099 	      if (is_declarator)
16100 		/* Repeat the main loop.  */
16101 		continue;
16102 	    }
16103 
16104 	  /* If this is the first, we can try a parenthesized
16105 	     declarator.  */
16106 	  if (first)
16107 	    {
16108 	      bool saved_in_type_id_in_expr_p;
16109 
16110 	      parser->default_arg_ok_p = saved_default_arg_ok_p;
16111 	      parser->in_declarator_p = saved_in_declarator_p;
16112 
16113 	      /* Consume the `('.  */
16114 	      cp_lexer_consume_token (parser->lexer);
16115 	      /* Parse the nested declarator.  */
16116 	      saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
16117 	      parser->in_type_id_in_expr_p = true;
16118 	      declarator
16119 		= cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
16120 					/*parenthesized_p=*/NULL,
16121 					member_p);
16122 	      parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
16123 	      first = false;
16124 	      /* Expect a `)'.  */
16125 	      if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
16126 		declarator = cp_error_declarator;
16127 	      if (declarator == cp_error_declarator)
16128 		break;
16129 
16130 	      goto handle_declarator;
16131 	    }
16132 	  /* Otherwise, we must be done.  */
16133 	  else
16134 	    break;
16135 	}
16136       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
16137 	       && token->type == CPP_OPEN_SQUARE)
16138 	{
16139 	  /* Parse an array-declarator.  */
16140 	  tree bounds;
16141 
16142 	  if (ctor_dtor_or_conv_p)
16143 	    *ctor_dtor_or_conv_p = 0;
16144 
16145 	  first = false;
16146 	  parser->default_arg_ok_p = false;
16147 	  parser->in_declarator_p = true;
16148 	  /* Consume the `['.  */
16149 	  cp_lexer_consume_token (parser->lexer);
16150 	  /* Peek at the next token.  */
16151 	  token = cp_lexer_peek_token (parser->lexer);
16152 	  /* If the next token is `]', then there is no
16153 	     constant-expression.  */
16154 	  if (token->type != CPP_CLOSE_SQUARE)
16155 	    {
16156 	      bool non_constant_p;
16157 
16158 	      bounds
16159 		= cp_parser_constant_expression (parser,
16160 						 /*allow_non_constant=*/true,
16161 						 &non_constant_p);
16162 	      if (!non_constant_p)
16163 		/* OK */;
16164 	      else if (error_operand_p (bounds))
16165 		/* Already gave an error.  */;
16166 	      else if (!parser->in_function_body
16167 		       || current_binding_level->kind == sk_function_parms)
16168 		{
16169 		  /* Normally, the array bound must be an integral constant
16170 		     expression.  However, as an extension, we allow VLAs
16171 		     in function scopes as long as they aren't part of a
16172 		     parameter declaration.  */
16173 		  cp_parser_error (parser,
16174 				   "array bound is not an integer constant");
16175 		  bounds = error_mark_node;
16176 		}
16177 	      else if (processing_template_decl)
16178 		{
16179 		  /* Remember this wasn't a constant-expression.  */
16180 		  bounds = build_nop (TREE_TYPE (bounds), bounds);
16181 		  TREE_SIDE_EFFECTS (bounds) = 1;
16182 		}
16183 	    }
16184 	  else
16185 	    bounds = NULL_TREE;
16186 	  /* Look for the closing `]'.  */
16187 	  if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE))
16188 	    {
16189 	      declarator = cp_error_declarator;
16190 	      break;
16191 	    }
16192 
16193 	  declarator = make_array_declarator (declarator, bounds);
16194 	}
16195       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
16196 	{
16197 	  {
16198 	    tree qualifying_scope;
16199 	    tree unqualified_name;
16200 	    special_function_kind sfk;
16201 	    bool abstract_ok;
16202 	    bool pack_expansion_p = false;
16203 	    cp_token *declarator_id_start_token;
16204 
16205 	    /* Parse a declarator-id */
16206 	    abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
16207 	    if (abstract_ok)
16208 	      {
16209 		cp_parser_parse_tentatively (parser);
16210 
16211 		/* If we see an ellipsis, we should be looking at a
16212 		   parameter pack. */
16213 		if (token->type == CPP_ELLIPSIS)
16214 		  {
16215 		    /* Consume the `...' */
16216 		    cp_lexer_consume_token (parser->lexer);
16217 
16218 		    pack_expansion_p = true;
16219 		  }
16220 	      }
16221 
16222 	    declarator_id_start_token = cp_lexer_peek_token (parser->lexer);
16223 	    unqualified_name
16224 	      = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
16225 	    qualifying_scope = parser->scope;
16226 	    if (abstract_ok)
16227 	      {
16228 		bool okay = false;
16229 
16230 		if (!unqualified_name && pack_expansion_p)
16231 		  {
16232 		    /* Check whether an error occurred. */
16233 		    okay = !cp_parser_error_occurred (parser);
16234 
16235 		    /* We already consumed the ellipsis to mark a
16236 		       parameter pack, but we have no way to report it,
16237 		       so abort the tentative parse. We will be exiting
16238 		       immediately anyway. */
16239 		    cp_parser_abort_tentative_parse (parser);
16240 		  }
16241 		else
16242 		  okay = cp_parser_parse_definitely (parser);
16243 
16244 		if (!okay)
16245 		  unqualified_name = error_mark_node;
16246 		else if (unqualified_name
16247 			 && (qualifying_scope
16248 			     || (TREE_CODE (unqualified_name)
16249 				 != IDENTIFIER_NODE)))
16250 		  {
16251 		    cp_parser_error (parser, "expected unqualified-id");
16252 		    unqualified_name = error_mark_node;
16253 		  }
16254 	      }
16255 
16256 	    if (!unqualified_name)
16257 	      return NULL;
16258 	    if (unqualified_name == error_mark_node)
16259 	      {
16260 		declarator = cp_error_declarator;
16261 		pack_expansion_p = false;
16262 		declarator->parameter_pack_p = false;
16263 		break;
16264 	      }
16265 
16266 	    if (qualifying_scope && at_namespace_scope_p ()
16267 		&& TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
16268 	      {
16269 		/* In the declaration of a member of a template class
16270 		   outside of the class itself, the SCOPE will sometimes
16271 		   be a TYPENAME_TYPE.  For example, given:
16272 
16273 		   template <typename T>
16274 		   int S<T>::R::i = 3;
16275 
16276 		   the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
16277 		   this context, we must resolve S<T>::R to an ordinary
16278 		   type, rather than a typename type.
16279 
16280 		   The reason we normally avoid resolving TYPENAME_TYPEs
16281 		   is that a specialization of `S' might render
16282 		   `S<T>::R' not a type.  However, if `S' is
16283 		   specialized, then this `i' will not be used, so there
16284 		   is no harm in resolving the types here.  */
16285 		tree type;
16286 
16287 		/* Resolve the TYPENAME_TYPE.  */
16288 		type = resolve_typename_type (qualifying_scope,
16289 					      /*only_current_p=*/false);
16290 		/* If that failed, the declarator is invalid.  */
16291 		if (TREE_CODE (type) == TYPENAME_TYPE)
16292 		  {
16293 		    if (typedef_variant_p (type))
16294 		      error_at (declarator_id_start_token->location,
16295 				"cannot define member of dependent typedef "
16296 				"%qT", type);
16297 		    else
16298 		      error_at (declarator_id_start_token->location,
16299 				"%<%T::%E%> is not a type",
16300 				TYPE_CONTEXT (qualifying_scope),
16301 				TYPE_IDENTIFIER (qualifying_scope));
16302 		  }
16303 		qualifying_scope = type;
16304 	      }
16305 
16306 	    sfk = sfk_none;
16307 
16308 	    if (unqualified_name)
16309 	      {
16310 		tree class_type;
16311 
16312 		if (qualifying_scope
16313 		    && CLASS_TYPE_P (qualifying_scope))
16314 		  class_type = qualifying_scope;
16315 		else
16316 		  class_type = current_class_type;
16317 
16318 		if (TREE_CODE (unqualified_name) == TYPE_DECL)
16319 		  {
16320 		    tree name_type = TREE_TYPE (unqualified_name);
16321 		    if (class_type && same_type_p (name_type, class_type))
16322 		      {
16323 			if (qualifying_scope
16324 			    && CLASSTYPE_USE_TEMPLATE (name_type))
16325 			  {
16326 			    error_at (declarator_id_start_token->location,
16327 				      "invalid use of constructor as a template");
16328 			    inform (declarator_id_start_token->location,
16329 				    "use %<%T::%D%> instead of %<%T::%D%> to "
16330 				    "name the constructor in a qualified name",
16331 				    class_type,
16332 				    DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
16333 				    class_type, name_type);
16334 			    declarator = cp_error_declarator;
16335 			    break;
16336 			  }
16337 			else
16338 			  unqualified_name = constructor_name (class_type);
16339 		      }
16340 		    else
16341 		      {
16342 			/* We do not attempt to print the declarator
16343 			   here because we do not have enough
16344 			   information about its original syntactic
16345 			   form.  */
16346 			cp_parser_error (parser, "invalid declarator");
16347 			declarator = cp_error_declarator;
16348 			break;
16349 		      }
16350 		  }
16351 
16352 		if (class_type)
16353 		  {
16354 		    if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
16355 		      sfk = sfk_destructor;
16356 		    else if (IDENTIFIER_TYPENAME_P (unqualified_name))
16357 		      sfk = sfk_conversion;
16358 		    else if (/* There's no way to declare a constructor
16359 				for an anonymous type, even if the type
16360 				got a name for linkage purposes.  */
16361 			     !TYPE_WAS_ANONYMOUS (class_type)
16362 			     && constructor_name_p (unqualified_name,
16363 						    class_type))
16364 		      {
16365 			unqualified_name = constructor_name (class_type);
16366 			sfk = sfk_constructor;
16367 		      }
16368 		    else if (is_overloaded_fn (unqualified_name)
16369 			     && DECL_CONSTRUCTOR_P (get_first_fn
16370 						    (unqualified_name)))
16371 		      sfk = sfk_constructor;
16372 
16373 		    if (ctor_dtor_or_conv_p && sfk != sfk_none)
16374 		      *ctor_dtor_or_conv_p = -1;
16375 		  }
16376 	      }
16377 	    declarator = make_id_declarator (qualifying_scope,
16378 					     unqualified_name,
16379 					     sfk);
16380 	    declarator->id_loc = token->location;
16381 	    declarator->parameter_pack_p = pack_expansion_p;
16382 
16383 	    if (pack_expansion_p)
16384 	      maybe_warn_variadic_templates ();
16385 	  }
16386 
16387 	handle_declarator:;
16388 	  scope = get_scope_of_declarator (declarator);
16389 	  if (scope)
16390 	    /* Any names that appear after the declarator-id for a
16391 	       member are looked up in the containing scope.  */
16392 	    pushed_scope = push_scope (scope);
16393 	  parser->in_declarator_p = true;
16394 	  if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
16395 	      || (declarator && declarator->kind == cdk_id))
16396 	    /* Default args are only allowed on function
16397 	       declarations.  */
16398 	    parser->default_arg_ok_p = saved_default_arg_ok_p;
16399 	  else
16400 	    parser->default_arg_ok_p = false;
16401 
16402 	  first = false;
16403 	}
16404       /* We're done.  */
16405       else
16406 	break;
16407     }
16408 
16409   /* For an abstract declarator, we might wind up with nothing at this
16410      point.  That's an error; the declarator is not optional.  */
16411   if (!declarator)
16412     cp_parser_error (parser, "expected declarator");
16413 
16414   /* If we entered a scope, we must exit it now.  */
16415   if (pushed_scope)
16416     pop_scope (pushed_scope);
16417 
16418   parser->default_arg_ok_p = saved_default_arg_ok_p;
16419   parser->in_declarator_p = saved_in_declarator_p;
16420 
16421   return declarator;
16422 }
16423 
16424 /* Parse a ptr-operator.
16425 
16426    ptr-operator:
16427      * cv-qualifier-seq [opt]
16428      &
16429      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
16430 
16431    GNU Extension:
16432 
16433    ptr-operator:
16434      & cv-qualifier-seq [opt]
16435 
16436    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
16437    Returns ADDR_EXPR if a reference was used, or NON_LVALUE_EXPR for
16438    an rvalue reference. In the case of a pointer-to-member, *TYPE is
16439    filled in with the TYPE containing the member.  *CV_QUALS is
16440    filled in with the cv-qualifier-seq, or TYPE_UNQUALIFIED, if there
16441    are no cv-qualifiers.  Returns ERROR_MARK if an error occurred.
16442    Note that the tree codes returned by this function have nothing
16443    to do with the types of trees that will be eventually be created
16444    to represent the pointer or reference type being parsed. They are
16445    just constants with suggestive names. */
16446 static enum tree_code
16447 cp_parser_ptr_operator (cp_parser* parser,
16448 			tree* type,
16449 			cp_cv_quals *cv_quals)
16450 {
16451   enum tree_code code = ERROR_MARK;
16452   cp_token *token;
16453 
16454   /* Assume that it's not a pointer-to-member.  */
16455   *type = NULL_TREE;
16456   /* And that there are no cv-qualifiers.  */
16457   *cv_quals = TYPE_UNQUALIFIED;
16458 
16459   /* Peek at the next token.  */
16460   token = cp_lexer_peek_token (parser->lexer);
16461 
16462   /* If it's a `*', `&' or `&&' we have a pointer or reference.  */
16463   if (token->type == CPP_MULT)
16464     code = INDIRECT_REF;
16465   else if (token->type == CPP_AND)
16466     code = ADDR_EXPR;
16467   else if ((cxx_dialect != cxx98) &&
16468 	   token->type == CPP_AND_AND) /* C++0x only */
16469     code = NON_LVALUE_EXPR;
16470 
16471   if (code != ERROR_MARK)
16472     {
16473       /* Consume the `*', `&' or `&&'.  */
16474       cp_lexer_consume_token (parser->lexer);
16475 
16476       /* A `*' can be followed by a cv-qualifier-seq, and so can a
16477 	 `&', if we are allowing GNU extensions.  (The only qualifier
16478 	 that can legally appear after `&' is `restrict', but that is
16479 	 enforced during semantic analysis.  */
16480       if (code == INDIRECT_REF
16481 	  || cp_parser_allow_gnu_extensions_p (parser))
16482 	*cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
16483     }
16484   else
16485     {
16486       /* Try the pointer-to-member case.  */
16487       cp_parser_parse_tentatively (parser);
16488       /* Look for the optional `::' operator.  */
16489       cp_parser_global_scope_opt (parser,
16490 				  /*current_scope_valid_p=*/false);
16491       /* Look for the nested-name specifier.  */
16492       token = cp_lexer_peek_token (parser->lexer);
16493       cp_parser_nested_name_specifier (parser,
16494 				       /*typename_keyword_p=*/false,
16495 				       /*check_dependency_p=*/true,
16496 				       /*type_p=*/false,
16497 				       /*is_declaration=*/false);
16498       /* If we found it, and the next token is a `*', then we are
16499 	 indeed looking at a pointer-to-member operator.  */
16500       if (!cp_parser_error_occurred (parser)
16501 	  && cp_parser_require (parser, CPP_MULT, RT_MULT))
16502 	{
16503 	  /* Indicate that the `*' operator was used.  */
16504 	  code = INDIRECT_REF;
16505 
16506 	  if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
16507 	    error_at (token->location, "%qD is a namespace", parser->scope);
16508 	  else if (TREE_CODE (parser->scope) == ENUMERAL_TYPE)
16509 	    error_at (token->location, "cannot form pointer to member of "
16510 		      "non-class %q#T", parser->scope);
16511 	  else
16512 	    {
16513 	      /* The type of which the member is a member is given by the
16514 		 current SCOPE.  */
16515 	      *type = parser->scope;
16516 	      /* The next name will not be qualified.  */
16517 	      parser->scope = NULL_TREE;
16518 	      parser->qualifying_scope = NULL_TREE;
16519 	      parser->object_scope = NULL_TREE;
16520 	      /* Look for the optional cv-qualifier-seq.  */
16521 	      *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
16522 	    }
16523 	}
16524       /* If that didn't work we don't have a ptr-operator.  */
16525       if (!cp_parser_parse_definitely (parser))
16526 	cp_parser_error (parser, "expected ptr-operator");
16527     }
16528 
16529   return code;
16530 }
16531 
16532 /* Parse an (optional) cv-qualifier-seq.
16533 
16534    cv-qualifier-seq:
16535      cv-qualifier cv-qualifier-seq [opt]
16536 
16537    cv-qualifier:
16538      const
16539      volatile
16540 
16541    GNU Extension:
16542 
16543    cv-qualifier:
16544      __restrict__
16545 
16546    Returns a bitmask representing the cv-qualifiers.  */
16547 
16548 static cp_cv_quals
16549 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
16550 {
16551   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
16552 
16553   while (true)
16554     {
16555       cp_token *token;
16556       cp_cv_quals cv_qualifier;
16557 
16558       /* Peek at the next token.  */
16559       token = cp_lexer_peek_token (parser->lexer);
16560       /* See if it's a cv-qualifier.  */
16561       switch (token->keyword)
16562 	{
16563 	case RID_CONST:
16564 	  cv_qualifier = TYPE_QUAL_CONST;
16565 	  break;
16566 
16567 	case RID_VOLATILE:
16568 	  cv_qualifier = TYPE_QUAL_VOLATILE;
16569 	  break;
16570 
16571 	case RID_RESTRICT:
16572 	  cv_qualifier = TYPE_QUAL_RESTRICT;
16573 	  break;
16574 
16575 	default:
16576 	  cv_qualifier = TYPE_UNQUALIFIED;
16577 	  break;
16578 	}
16579 
16580       if (!cv_qualifier)
16581 	break;
16582 
16583       if (cv_quals & cv_qualifier)
16584 	{
16585 	  error_at (token->location, "duplicate cv-qualifier");
16586 	  cp_lexer_purge_token (parser->lexer);
16587 	}
16588       else
16589 	{
16590 	  cp_lexer_consume_token (parser->lexer);
16591 	  cv_quals |= cv_qualifier;
16592 	}
16593     }
16594 
16595   return cv_quals;
16596 }
16597 
16598 /* Parse an (optional) virt-specifier-seq.
16599 
16600    virt-specifier-seq:
16601      virt-specifier virt-specifier-seq [opt]
16602 
16603    virt-specifier:
16604      override
16605      final
16606 
16607    Returns a bitmask representing the virt-specifiers.  */
16608 
16609 static cp_virt_specifiers
16610 cp_parser_virt_specifier_seq_opt (cp_parser* parser)
16611 {
16612   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
16613 
16614   while (true)
16615     {
16616       cp_token *token;
16617       cp_virt_specifiers virt_specifier;
16618 
16619       /* Peek at the next token.  */
16620       token = cp_lexer_peek_token (parser->lexer);
16621       /* See if it's a virt-specifier-qualifier.  */
16622       if (token->type != CPP_NAME)
16623         break;
16624       if (!strcmp (IDENTIFIER_POINTER(token->u.value), "override"))
16625         {
16626           maybe_warn_cpp0x (CPP0X_OVERRIDE_CONTROLS);
16627           virt_specifier = VIRT_SPEC_OVERRIDE;
16628         }
16629       else if (!strcmp (IDENTIFIER_POINTER(token->u.value), "final"))
16630         {
16631           maybe_warn_cpp0x (CPP0X_OVERRIDE_CONTROLS);
16632           virt_specifier = VIRT_SPEC_FINAL;
16633         }
16634       else if (!strcmp (IDENTIFIER_POINTER(token->u.value), "__final"))
16635         {
16636           virt_specifier = VIRT_SPEC_FINAL;
16637         }
16638       else
16639 	break;
16640 
16641       if (virt_specifiers & virt_specifier)
16642 	{
16643 	  error_at (token->location, "duplicate virt-specifier");
16644 	  cp_lexer_purge_token (parser->lexer);
16645 	}
16646       else
16647 	{
16648 	  cp_lexer_consume_token (parser->lexer);
16649 	  virt_specifiers |= virt_specifier;
16650 	}
16651     }
16652   return virt_specifiers;
16653 }
16654 
16655 /* Used by handling of trailing-return-types and NSDMI, in which 'this'
16656    is in scope even though it isn't real.  */
16657 
16658 static void
16659 inject_this_parameter (tree ctype, cp_cv_quals quals)
16660 {
16661   tree this_parm;
16662 
16663   if (current_class_ptr)
16664     {
16665       /* We don't clear this between NSDMIs.  Is it already what we want?  */
16666       tree type = TREE_TYPE (TREE_TYPE (current_class_ptr));
16667       if (same_type_ignoring_top_level_qualifiers_p (ctype, type)
16668 	  && cp_type_quals (type) == quals)
16669 	return;
16670     }
16671 
16672   this_parm = build_this_parm (ctype, quals);
16673   /* Clear this first to avoid shortcut in cp_build_indirect_ref.  */
16674   current_class_ptr = NULL_TREE;
16675   current_class_ref
16676     = cp_build_indirect_ref (this_parm, RO_NULL, tf_warning_or_error);
16677   current_class_ptr = this_parm;
16678 }
16679 
16680 /* Parse a late-specified return type, if any.  This is not a separate
16681    non-terminal, but part of a function declarator, which looks like
16682 
16683    -> trailing-type-specifier-seq abstract-declarator(opt)
16684 
16685    Returns the type indicated by the type-id.
16686 
16687    QUALS is either a bitmask of cv_qualifiers or -1 for a non-member
16688    function.  */
16689 
16690 static tree
16691 cp_parser_late_return_type_opt (cp_parser* parser, cp_cv_quals quals)
16692 {
16693   cp_token *token;
16694   tree type;
16695 
16696   /* Peek at the next token.  */
16697   token = cp_lexer_peek_token (parser->lexer);
16698   /* A late-specified return type is indicated by an initial '->'. */
16699   if (token->type != CPP_DEREF)
16700     return NULL_TREE;
16701 
16702   /* Consume the ->.  */
16703   cp_lexer_consume_token (parser->lexer);
16704 
16705   tree save_ccp = current_class_ptr;
16706   tree save_ccr = current_class_ref;
16707   if (quals >= 0)
16708     {
16709       /* DR 1207: 'this' is in scope in the trailing return type.  */
16710       inject_this_parameter (current_class_type, quals);
16711     }
16712 
16713   type = cp_parser_trailing_type_id (parser);
16714 
16715   if (quals >= 0)
16716     {
16717       current_class_ptr = save_ccp;
16718       current_class_ref = save_ccr;
16719     }
16720 
16721   return type;
16722 }
16723 
16724 /* Parse a declarator-id.
16725 
16726    declarator-id:
16727      id-expression
16728      :: [opt] nested-name-specifier [opt] type-name
16729 
16730    In the `id-expression' case, the value returned is as for
16731    cp_parser_id_expression if the id-expression was an unqualified-id.
16732    If the id-expression was a qualified-id, then a SCOPE_REF is
16733    returned.  The first operand is the scope (either a NAMESPACE_DECL
16734    or TREE_TYPE), but the second is still just a representation of an
16735    unqualified-id.  */
16736 
16737 static tree
16738 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
16739 {
16740   tree id;
16741   /* The expression must be an id-expression.  Assume that qualified
16742      names are the names of types so that:
16743 
16744        template <class T>
16745        int S<T>::R::i = 3;
16746 
16747      will work; we must treat `S<T>::R' as the name of a type.
16748      Similarly, assume that qualified names are templates, where
16749      required, so that:
16750 
16751        template <class T>
16752        int S<T>::R<T>::i = 3;
16753 
16754      will work, too.  */
16755   id = cp_parser_id_expression (parser,
16756 				/*template_keyword_p=*/false,
16757 				/*check_dependency_p=*/false,
16758 				/*template_p=*/NULL,
16759 				/*declarator_p=*/true,
16760 				optional_p);
16761   if (id && BASELINK_P (id))
16762     id = BASELINK_FUNCTIONS (id);
16763   return id;
16764 }
16765 
16766 /* Parse a type-id.
16767 
16768    type-id:
16769      type-specifier-seq abstract-declarator [opt]
16770 
16771    Returns the TYPE specified.  */
16772 
16773 static tree
16774 cp_parser_type_id_1 (cp_parser* parser, bool is_template_arg,
16775 		     bool is_trailing_return)
16776 {
16777   cp_decl_specifier_seq type_specifier_seq;
16778   cp_declarator *abstract_declarator;
16779 
16780   /* Parse the type-specifier-seq.  */
16781   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
16782 				is_trailing_return,
16783 				&type_specifier_seq);
16784   if (type_specifier_seq.type == error_mark_node)
16785     return error_mark_node;
16786 
16787   /* There might or might not be an abstract declarator.  */
16788   cp_parser_parse_tentatively (parser);
16789   /* Look for the declarator.  */
16790   abstract_declarator
16791     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
16792 			    /*parenthesized_p=*/NULL,
16793 			    /*member_p=*/false);
16794   /* Check to see if there really was a declarator.  */
16795   if (!cp_parser_parse_definitely (parser))
16796     abstract_declarator = NULL;
16797 
16798   if (type_specifier_seq.type
16799       && type_uses_auto (type_specifier_seq.type))
16800     {
16801       /* A type-id with type 'auto' is only ok if the abstract declarator
16802 	 is a function declarator with a late-specified return type.  */
16803       if (abstract_declarator
16804 	  && abstract_declarator->kind == cdk_function
16805 	  && abstract_declarator->u.function.late_return_type)
16806 	/* OK */;
16807       else
16808 	{
16809 	  error ("invalid use of %<auto%>");
16810 	  return error_mark_node;
16811 	}
16812     }
16813 
16814   return groktypename (&type_specifier_seq, abstract_declarator,
16815 		       is_template_arg);
16816 }
16817 
16818 static tree cp_parser_type_id (cp_parser *parser)
16819 {
16820   return cp_parser_type_id_1 (parser, false, false);
16821 }
16822 
16823 static tree cp_parser_template_type_arg (cp_parser *parser)
16824 {
16825   tree r;
16826   const char *saved_message = parser->type_definition_forbidden_message;
16827   parser->type_definition_forbidden_message
16828     = G_("types may not be defined in template arguments");
16829   r = cp_parser_type_id_1 (parser, true, false);
16830   parser->type_definition_forbidden_message = saved_message;
16831   return r;
16832 }
16833 
16834 static tree cp_parser_trailing_type_id (cp_parser *parser)
16835 {
16836   return cp_parser_type_id_1 (parser, false, true);
16837 }
16838 
16839 /* Parse a type-specifier-seq.
16840 
16841    type-specifier-seq:
16842      type-specifier type-specifier-seq [opt]
16843 
16844    GNU extension:
16845 
16846    type-specifier-seq:
16847      attributes type-specifier-seq [opt]
16848 
16849    If IS_DECLARATION is true, we are at the start of a "condition" or
16850    exception-declaration, so we might be followed by a declarator-id.
16851 
16852    If IS_TRAILING_RETURN is true, we are in a trailing-return-type,
16853    i.e. we've just seen "->".
16854 
16855    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
16856 
16857 static void
16858 cp_parser_type_specifier_seq (cp_parser* parser,
16859 			      bool is_declaration,
16860 			      bool is_trailing_return,
16861 			      cp_decl_specifier_seq *type_specifier_seq)
16862 {
16863   bool seen_type_specifier = false;
16864   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
16865   cp_token *start_token = NULL;
16866 
16867   /* Clear the TYPE_SPECIFIER_SEQ.  */
16868   clear_decl_specs (type_specifier_seq);
16869 
16870   /* In the context of a trailing return type, enum E { } is an
16871      elaborated-type-specifier followed by a function-body, not an
16872      enum-specifier.  */
16873   if (is_trailing_return)
16874     flags |= CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS;
16875 
16876   /* Parse the type-specifiers and attributes.  */
16877   while (true)
16878     {
16879       tree type_specifier;
16880       bool is_cv_qualifier;
16881 
16882       /* Check for attributes first.  */
16883       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
16884 	{
16885 	  type_specifier_seq->attributes =
16886 	    chainon (type_specifier_seq->attributes,
16887 		     cp_parser_attributes_opt (parser));
16888 	  continue;
16889 	}
16890 
16891       /* record the token of the beginning of the type specifier seq,
16892          for error reporting purposes*/
16893      if (!start_token)
16894        start_token = cp_lexer_peek_token (parser->lexer);
16895 
16896       /* Look for the type-specifier.  */
16897       type_specifier = cp_parser_type_specifier (parser,
16898 						 flags,
16899 						 type_specifier_seq,
16900 						 /*is_declaration=*/false,
16901 						 NULL,
16902 						 &is_cv_qualifier);
16903       if (!type_specifier)
16904 	{
16905 	  /* If the first type-specifier could not be found, this is not a
16906 	     type-specifier-seq at all.  */
16907 	  if (!seen_type_specifier)
16908 	    {
16909 	      cp_parser_error (parser, "expected type-specifier");
16910 	      type_specifier_seq->type = error_mark_node;
16911 	      return;
16912 	    }
16913 	  /* If subsequent type-specifiers could not be found, the
16914 	     type-specifier-seq is complete.  */
16915 	  break;
16916 	}
16917 
16918       seen_type_specifier = true;
16919       /* The standard says that a condition can be:
16920 
16921 	    type-specifier-seq declarator = assignment-expression
16922 
16923 	 However, given:
16924 
16925 	   struct S {};
16926 	   if (int S = ...)
16927 
16928 	 we should treat the "S" as a declarator, not as a
16929 	 type-specifier.  The standard doesn't say that explicitly for
16930 	 type-specifier-seq, but it does say that for
16931 	 decl-specifier-seq in an ordinary declaration.  Perhaps it
16932 	 would be clearer just to allow a decl-specifier-seq here, and
16933 	 then add a semantic restriction that if any decl-specifiers
16934 	 that are not type-specifiers appear, the program is invalid.  */
16935       if (is_declaration && !is_cv_qualifier)
16936 	flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
16937     }
16938 
16939   cp_parser_check_decl_spec (type_specifier_seq, start_token->location);
16940 }
16941 
16942 /* Parse a parameter-declaration-clause.
16943 
16944    parameter-declaration-clause:
16945      parameter-declaration-list [opt] ... [opt]
16946      parameter-declaration-list , ...
16947 
16948    Returns a representation for the parameter declarations.  A return
16949    value of NULL indicates a parameter-declaration-clause consisting
16950    only of an ellipsis.  */
16951 
16952 static tree
16953 cp_parser_parameter_declaration_clause (cp_parser* parser)
16954 {
16955   tree parameters;
16956   cp_token *token;
16957   bool ellipsis_p;
16958   bool is_error;
16959 
16960   /* Peek at the next token.  */
16961   token = cp_lexer_peek_token (parser->lexer);
16962   /* Check for trivial parameter-declaration-clauses.  */
16963   if (token->type == CPP_ELLIPSIS)
16964     {
16965       /* Consume the `...' token.  */
16966       cp_lexer_consume_token (parser->lexer);
16967       return NULL_TREE;
16968     }
16969   else if (token->type == CPP_CLOSE_PAREN)
16970     /* There are no parameters.  */
16971     {
16972 #ifndef NO_IMPLICIT_EXTERN_C
16973       if (in_system_header && current_class_type == NULL
16974 	  && current_lang_name == lang_name_c)
16975 	return NULL_TREE;
16976       else
16977 #endif
16978 	return void_list_node;
16979     }
16980   /* Check for `(void)', too, which is a special case.  */
16981   else if (token->keyword == RID_VOID
16982 	   && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
16983 	       == CPP_CLOSE_PAREN))
16984     {
16985       /* Consume the `void' token.  */
16986       cp_lexer_consume_token (parser->lexer);
16987       /* There are no parameters.  */
16988       return void_list_node;
16989     }
16990 
16991   /* Parse the parameter-declaration-list.  */
16992   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
16993   /* If a parse error occurred while parsing the
16994      parameter-declaration-list, then the entire
16995      parameter-declaration-clause is erroneous.  */
16996   if (is_error)
16997     return NULL;
16998 
16999   /* Peek at the next token.  */
17000   token = cp_lexer_peek_token (parser->lexer);
17001   /* If it's a `,', the clause should terminate with an ellipsis.  */
17002   if (token->type == CPP_COMMA)
17003     {
17004       /* Consume the `,'.  */
17005       cp_lexer_consume_token (parser->lexer);
17006       /* Expect an ellipsis.  */
17007       ellipsis_p
17008 	= (cp_parser_require (parser, CPP_ELLIPSIS, RT_ELLIPSIS) != NULL);
17009     }
17010   /* It might also be `...' if the optional trailing `,' was
17011      omitted.  */
17012   else if (token->type == CPP_ELLIPSIS)
17013     {
17014       /* Consume the `...' token.  */
17015       cp_lexer_consume_token (parser->lexer);
17016       /* And remember that we saw it.  */
17017       ellipsis_p = true;
17018     }
17019   else
17020     ellipsis_p = false;
17021 
17022   /* Finish the parameter list.  */
17023   if (!ellipsis_p)
17024     parameters = chainon (parameters, void_list_node);
17025 
17026   return parameters;
17027 }
17028 
17029 /* Parse a parameter-declaration-list.
17030 
17031    parameter-declaration-list:
17032      parameter-declaration
17033      parameter-declaration-list , parameter-declaration
17034 
17035    Returns a representation of the parameter-declaration-list, as for
17036    cp_parser_parameter_declaration_clause.  However, the
17037    `void_list_node' is never appended to the list.  Upon return,
17038    *IS_ERROR will be true iff an error occurred.  */
17039 
17040 static tree
17041 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
17042 {
17043   tree parameters = NULL_TREE;
17044   tree *tail = &parameters;
17045   bool saved_in_unbraced_linkage_specification_p;
17046   int index = 0;
17047 
17048   /* Assume all will go well.  */
17049   *is_error = false;
17050   /* The special considerations that apply to a function within an
17051      unbraced linkage specifications do not apply to the parameters
17052      to the function.  */
17053   saved_in_unbraced_linkage_specification_p
17054     = parser->in_unbraced_linkage_specification_p;
17055   parser->in_unbraced_linkage_specification_p = false;
17056 
17057   /* Look for more parameters.  */
17058   while (true)
17059     {
17060       cp_parameter_declarator *parameter;
17061       tree decl = error_mark_node;
17062       bool parenthesized_p = false;
17063       /* Parse the parameter.  */
17064       parameter
17065 	= cp_parser_parameter_declaration (parser,
17066 					   /*template_parm_p=*/false,
17067 					   &parenthesized_p);
17068 
17069       /* We don't know yet if the enclosing context is deprecated, so wait
17070 	 and warn in grokparms if appropriate.  */
17071       deprecated_state = DEPRECATED_SUPPRESS;
17072 
17073       if (parameter)
17074 	decl = grokdeclarator (parameter->declarator,
17075 			       &parameter->decl_specifiers,
17076 			       PARM,
17077 			       parameter->default_argument != NULL_TREE,
17078 			       &parameter->decl_specifiers.attributes);
17079 
17080       deprecated_state = DEPRECATED_NORMAL;
17081 
17082       /* If a parse error occurred parsing the parameter declaration,
17083 	 then the entire parameter-declaration-list is erroneous.  */
17084       if (decl == error_mark_node)
17085 	{
17086 	  *is_error = true;
17087 	  parameters = error_mark_node;
17088 	  break;
17089 	}
17090 
17091       if (parameter->decl_specifiers.attributes)
17092 	cplus_decl_attributes (&decl,
17093 			       parameter->decl_specifiers.attributes,
17094 			       0);
17095       if (DECL_NAME (decl))
17096 	decl = pushdecl (decl);
17097 
17098       if (decl != error_mark_node)
17099 	{
17100 	  retrofit_lang_decl (decl);
17101 	  DECL_PARM_INDEX (decl) = ++index;
17102 	  DECL_PARM_LEVEL (decl) = function_parm_depth ();
17103 	}
17104 
17105       /* Add the new parameter to the list.  */
17106       *tail = build_tree_list (parameter->default_argument, decl);
17107       tail = &TREE_CHAIN (*tail);
17108 
17109       /* Peek at the next token.  */
17110       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
17111 	  || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
17112 	  /* These are for Objective-C++ */
17113 	  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
17114 	  || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
17115 	/* The parameter-declaration-list is complete.  */
17116 	break;
17117       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
17118 	{
17119 	  cp_token *token;
17120 
17121 	  /* Peek at the next token.  */
17122 	  token = cp_lexer_peek_nth_token (parser->lexer, 2);
17123 	  /* If it's an ellipsis, then the list is complete.  */
17124 	  if (token->type == CPP_ELLIPSIS)
17125 	    break;
17126 	  /* Otherwise, there must be more parameters.  Consume the
17127 	     `,'.  */
17128 	  cp_lexer_consume_token (parser->lexer);
17129 	  /* When parsing something like:
17130 
17131 		int i(float f, double d)
17132 
17133 	     we can tell after seeing the declaration for "f" that we
17134 	     are not looking at an initialization of a variable "i",
17135 	     but rather at the declaration of a function "i".
17136 
17137 	     Due to the fact that the parsing of template arguments
17138 	     (as specified to a template-id) requires backtracking we
17139 	     cannot use this technique when inside a template argument
17140 	     list.  */
17141 	  if (!parser->in_template_argument_list_p
17142 	      && !parser->in_type_id_in_expr_p
17143 	      && cp_parser_uncommitted_to_tentative_parse_p (parser)
17144 	      /* However, a parameter-declaration of the form
17145 		 "foat(f)" (which is a valid declaration of a
17146 		 parameter "f") can also be interpreted as an
17147 		 expression (the conversion of "f" to "float").  */
17148 	      && !parenthesized_p)
17149 	    cp_parser_commit_to_tentative_parse (parser);
17150 	}
17151       else
17152 	{
17153 	  cp_parser_error (parser, "expected %<,%> or %<...%>");
17154 	  if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
17155 	    cp_parser_skip_to_closing_parenthesis (parser,
17156 						   /*recovering=*/true,
17157 						   /*or_comma=*/false,
17158 						   /*consume_paren=*/false);
17159 	  break;
17160 	}
17161     }
17162 
17163   parser->in_unbraced_linkage_specification_p
17164     = saved_in_unbraced_linkage_specification_p;
17165 
17166   return parameters;
17167 }
17168 
17169 /* Parse a parameter declaration.
17170 
17171    parameter-declaration:
17172      decl-specifier-seq ... [opt] declarator
17173      decl-specifier-seq declarator = assignment-expression
17174      decl-specifier-seq ... [opt] abstract-declarator [opt]
17175      decl-specifier-seq abstract-declarator [opt] = assignment-expression
17176 
17177    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
17178    declares a template parameter.  (In that case, a non-nested `>'
17179    token encountered during the parsing of the assignment-expression
17180    is not interpreted as a greater-than operator.)
17181 
17182    Returns a representation of the parameter, or NULL if an error
17183    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
17184    true iff the declarator is of the form "(p)".  */
17185 
17186 static cp_parameter_declarator *
17187 cp_parser_parameter_declaration (cp_parser *parser,
17188 				 bool template_parm_p,
17189 				 bool *parenthesized_p)
17190 {
17191   int declares_class_or_enum;
17192   cp_decl_specifier_seq decl_specifiers;
17193   cp_declarator *declarator;
17194   tree default_argument;
17195   cp_token *token = NULL, *declarator_token_start = NULL;
17196   const char *saved_message;
17197 
17198   /* In a template parameter, `>' is not an operator.
17199 
17200      [temp.param]
17201 
17202      When parsing a default template-argument for a non-type
17203      template-parameter, the first non-nested `>' is taken as the end
17204      of the template parameter-list rather than a greater-than
17205      operator.  */
17206 
17207   /* Type definitions may not appear in parameter types.  */
17208   saved_message = parser->type_definition_forbidden_message;
17209   parser->type_definition_forbidden_message
17210     = G_("types may not be defined in parameter types");
17211 
17212   /* Parse the declaration-specifiers.  */
17213   cp_parser_decl_specifier_seq (parser,
17214 				CP_PARSER_FLAGS_NONE,
17215 				&decl_specifiers,
17216 				&declares_class_or_enum);
17217 
17218   /* Complain about missing 'typename' or other invalid type names.  */
17219   if (!decl_specifiers.any_type_specifiers_p)
17220     cp_parser_parse_and_diagnose_invalid_type_name (parser);
17221 
17222   /* If an error occurred, there's no reason to attempt to parse the
17223      rest of the declaration.  */
17224   if (cp_parser_error_occurred (parser))
17225     {
17226       parser->type_definition_forbidden_message = saved_message;
17227       return NULL;
17228     }
17229 
17230   /* Peek at the next token.  */
17231   token = cp_lexer_peek_token (parser->lexer);
17232 
17233   /* If the next token is a `)', `,', `=', `>', or `...', then there
17234      is no declarator. However, when variadic templates are enabled,
17235      there may be a declarator following `...'.  */
17236   if (token->type == CPP_CLOSE_PAREN
17237       || token->type == CPP_COMMA
17238       || token->type == CPP_EQ
17239       || token->type == CPP_GREATER)
17240     {
17241       declarator = NULL;
17242       if (parenthesized_p)
17243 	*parenthesized_p = false;
17244     }
17245   /* Otherwise, there should be a declarator.  */
17246   else
17247     {
17248       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
17249       parser->default_arg_ok_p = false;
17250 
17251       /* After seeing a decl-specifier-seq, if the next token is not a
17252 	 "(", there is no possibility that the code is a valid
17253 	 expression.  Therefore, if parsing tentatively, we commit at
17254 	 this point.  */
17255       if (!parser->in_template_argument_list_p
17256 	  /* In an expression context, having seen:
17257 
17258 	       (int((char ...
17259 
17260 	     we cannot be sure whether we are looking at a
17261 	     function-type (taking a "char" as a parameter) or a cast
17262 	     of some object of type "char" to "int".  */
17263 	  && !parser->in_type_id_in_expr_p
17264 	  && cp_parser_uncommitted_to_tentative_parse_p (parser)
17265 	  && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
17266 	  && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
17267 	cp_parser_commit_to_tentative_parse (parser);
17268       /* Parse the declarator.  */
17269       declarator_token_start = token;
17270       declarator = cp_parser_declarator (parser,
17271 					 CP_PARSER_DECLARATOR_EITHER,
17272 					 /*ctor_dtor_or_conv_p=*/NULL,
17273 					 parenthesized_p,
17274 					 /*member_p=*/false);
17275       parser->default_arg_ok_p = saved_default_arg_ok_p;
17276       /* After the declarator, allow more attributes.  */
17277       decl_specifiers.attributes
17278 	= chainon (decl_specifiers.attributes,
17279 		   cp_parser_attributes_opt (parser));
17280     }
17281 
17282   /* If the next token is an ellipsis, and we have not seen a
17283      declarator name, and the type of the declarator contains parameter
17284      packs but it is not a TYPE_PACK_EXPANSION, then we actually have
17285      a parameter pack expansion expression. Otherwise, leave the
17286      ellipsis for a C-style variadic function. */
17287   token = cp_lexer_peek_token (parser->lexer);
17288   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
17289     {
17290       tree type = decl_specifiers.type;
17291 
17292       if (type && DECL_P (type))
17293         type = TREE_TYPE (type);
17294 
17295       if (type
17296 	  && TREE_CODE (type) != TYPE_PACK_EXPANSION
17297 	  && declarator_can_be_parameter_pack (declarator)
17298           && (!declarator || !declarator->parameter_pack_p)
17299           && uses_parameter_packs (type))
17300         {
17301 	  /* Consume the `...'. */
17302 	  cp_lexer_consume_token (parser->lexer);
17303 	  maybe_warn_variadic_templates ();
17304 
17305 	  /* Build a pack expansion type */
17306 	  if (declarator)
17307 	    declarator->parameter_pack_p = true;
17308 	  else
17309 	    decl_specifiers.type = make_pack_expansion (type);
17310 	}
17311     }
17312 
17313   /* The restriction on defining new types applies only to the type
17314      of the parameter, not to the default argument.  */
17315   parser->type_definition_forbidden_message = saved_message;
17316 
17317   /* If the next token is `=', then process a default argument.  */
17318   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
17319     {
17320       token = cp_lexer_peek_token (parser->lexer);
17321       /* If we are defining a class, then the tokens that make up the
17322 	 default argument must be saved and processed later.  */
17323       if (!template_parm_p && at_class_scope_p ()
17324 	  && TYPE_BEING_DEFINED (current_class_type)
17325 	  && !LAMBDA_TYPE_P (current_class_type))
17326 	default_argument = cp_parser_cache_defarg (parser, /*nsdmi=*/false);
17327       /* Outside of a class definition, we can just parse the
17328 	 assignment-expression.  */
17329       else
17330 	default_argument
17331 	  = cp_parser_default_argument (parser, template_parm_p);
17332 
17333       if (!parser->default_arg_ok_p)
17334 	{
17335 	  if (flag_permissive)
17336 	    warning (0, "deprecated use of default argument for parameter of non-function");
17337 	  else
17338 	    {
17339 	      error_at (token->location,
17340 			"default arguments are only "
17341 			"permitted for function parameters");
17342 	      default_argument = NULL_TREE;
17343 	    }
17344 	}
17345       else if ((declarator && declarator->parameter_pack_p)
17346 	       || (decl_specifiers.type
17347 		   && PACK_EXPANSION_P (decl_specifiers.type)))
17348 	{
17349 	  /* Find the name of the parameter pack.  */
17350 	  cp_declarator *id_declarator = declarator;
17351 	  while (id_declarator && id_declarator->kind != cdk_id)
17352 	    id_declarator = id_declarator->declarator;
17353 
17354 	  if (id_declarator && id_declarator->kind == cdk_id)
17355 	    error_at (declarator_token_start->location,
17356 		      template_parm_p
17357 		      ? G_("template parameter pack %qD "
17358 			   "cannot have a default argument")
17359 		      : G_("parameter pack %qD cannot have "
17360 			   "a default argument"),
17361 		      id_declarator->u.id.unqualified_name);
17362 	  else
17363 	    error_at (declarator_token_start->location,
17364 		      template_parm_p
17365 		      ? G_("template parameter pack cannot have "
17366 			   "a default argument")
17367 		      : G_("parameter pack cannot have a "
17368 			   "default argument"));
17369 
17370 	  default_argument = NULL_TREE;
17371 	}
17372     }
17373   else
17374     default_argument = NULL_TREE;
17375 
17376   return make_parameter_declarator (&decl_specifiers,
17377 				    declarator,
17378 				    default_argument);
17379 }
17380 
17381 /* Parse a default argument and return it.
17382 
17383    TEMPLATE_PARM_P is true if this is a default argument for a
17384    non-type template parameter.  */
17385 static tree
17386 cp_parser_default_argument (cp_parser *parser, bool template_parm_p)
17387 {
17388   tree default_argument = NULL_TREE;
17389   bool saved_greater_than_is_operator_p;
17390   bool saved_local_variables_forbidden_p;
17391   bool non_constant_p, is_direct_init;
17392 
17393   /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
17394      set correctly.  */
17395   saved_greater_than_is_operator_p = parser->greater_than_is_operator_p;
17396   parser->greater_than_is_operator_p = !template_parm_p;
17397   /* Local variable names (and the `this' keyword) may not
17398      appear in a default argument.  */
17399   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
17400   parser->local_variables_forbidden_p = true;
17401   /* Parse the assignment-expression.  */
17402   if (template_parm_p)
17403     push_deferring_access_checks (dk_no_deferred);
17404   default_argument
17405     = cp_parser_initializer (parser, &is_direct_init, &non_constant_p);
17406   if (BRACE_ENCLOSED_INITIALIZER_P (default_argument))
17407     maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
17408   if (template_parm_p)
17409     pop_deferring_access_checks ();
17410   parser->greater_than_is_operator_p = saved_greater_than_is_operator_p;
17411   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
17412 
17413   return default_argument;
17414 }
17415 
17416 /* Parse a function-body.
17417 
17418    function-body:
17419      compound_statement  */
17420 
17421 static void
17422 cp_parser_function_body (cp_parser *parser)
17423 {
17424   cp_parser_compound_statement (parser, NULL, false, true);
17425 }
17426 
17427 /* Parse a ctor-initializer-opt followed by a function-body.  Return
17428    true if a ctor-initializer was present.  */
17429 
17430 static bool
17431 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
17432 {
17433   tree body, list;
17434   bool ctor_initializer_p;
17435   const bool check_body_p =
17436      DECL_CONSTRUCTOR_P (current_function_decl)
17437      && DECL_DECLARED_CONSTEXPR_P (current_function_decl);
17438   tree last = NULL;
17439 
17440   /* Begin the function body.  */
17441   body = begin_function_body ();
17442   /* Parse the optional ctor-initializer.  */
17443   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
17444 
17445   /* If we're parsing a constexpr constructor definition, we need
17446      to check that the constructor body is indeed empty.  However,
17447      before we get to cp_parser_function_body lot of junk has been
17448      generated, so we can't just check that we have an empty block.
17449      Rather we take a snapshot of the outermost block, and check whether
17450      cp_parser_function_body changed its state.  */
17451   if (check_body_p)
17452     {
17453       list = cur_stmt_list;
17454       if (STATEMENT_LIST_TAIL (list))
17455 	last = STATEMENT_LIST_TAIL (list)->stmt;
17456     }
17457   /* Parse the function-body.  */
17458   cp_parser_function_body (parser);
17459   if (check_body_p)
17460     check_constexpr_ctor_body (last, list);
17461   /* Finish the function body.  */
17462   finish_function_body (body);
17463 
17464   return ctor_initializer_p;
17465 }
17466 
17467 /* Parse an initializer.
17468 
17469    initializer:
17470      = initializer-clause
17471      ( expression-list )
17472 
17473    Returns an expression representing the initializer.  If no
17474    initializer is present, NULL_TREE is returned.
17475 
17476    *IS_DIRECT_INIT is set to FALSE if the `= initializer-clause'
17477    production is used, and TRUE otherwise.  *IS_DIRECT_INIT is
17478    set to TRUE if there is no initializer present.  If there is an
17479    initializer, and it is not a constant-expression, *NON_CONSTANT_P
17480    is set to true; otherwise it is set to false.  */
17481 
17482 static tree
17483 cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
17484 		       bool* non_constant_p)
17485 {
17486   cp_token *token;
17487   tree init;
17488 
17489   /* Peek at the next token.  */
17490   token = cp_lexer_peek_token (parser->lexer);
17491 
17492   /* Let our caller know whether or not this initializer was
17493      parenthesized.  */
17494   *is_direct_init = (token->type != CPP_EQ);
17495   /* Assume that the initializer is constant.  */
17496   *non_constant_p = false;
17497 
17498   if (token->type == CPP_EQ)
17499     {
17500       /* Consume the `='.  */
17501       cp_lexer_consume_token (parser->lexer);
17502       /* Parse the initializer-clause.  */
17503       init = cp_parser_initializer_clause (parser, non_constant_p);
17504     }
17505   else if (token->type == CPP_OPEN_PAREN)
17506     {
17507       VEC(tree,gc) *vec;
17508       vec = cp_parser_parenthesized_expression_list (parser, non_attr,
17509 						     /*cast_p=*/false,
17510 						     /*allow_expansion_p=*/true,
17511 						     non_constant_p);
17512       if (vec == NULL)
17513 	return error_mark_node;
17514       init = build_tree_list_vec (vec);
17515       release_tree_vector (vec);
17516     }
17517   else if (token->type == CPP_OPEN_BRACE)
17518     {
17519       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
17520       init = cp_parser_braced_list (parser, non_constant_p);
17521       CONSTRUCTOR_IS_DIRECT_INIT (init) = 1;
17522     }
17523   else
17524     {
17525       /* Anything else is an error.  */
17526       cp_parser_error (parser, "expected initializer");
17527       init = error_mark_node;
17528     }
17529 
17530   return init;
17531 }
17532 
17533 /* Parse an initializer-clause.
17534 
17535    initializer-clause:
17536      assignment-expression
17537      braced-init-list
17538 
17539    Returns an expression representing the initializer.
17540 
17541    If the `assignment-expression' production is used the value
17542    returned is simply a representation for the expression.
17543 
17544    Otherwise, calls cp_parser_braced_list.  */
17545 
17546 static tree
17547 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
17548 {
17549   tree initializer;
17550 
17551   /* Assume the expression is constant.  */
17552   *non_constant_p = false;
17553 
17554   /* If it is not a `{', then we are looking at an
17555      assignment-expression.  */
17556   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
17557     {
17558       initializer
17559 	= cp_parser_constant_expression (parser,
17560 					/*allow_non_constant_p=*/true,
17561 					non_constant_p);
17562     }
17563   else
17564     initializer = cp_parser_braced_list (parser, non_constant_p);
17565 
17566   return initializer;
17567 }
17568 
17569 /* Parse a brace-enclosed initializer list.
17570 
17571    braced-init-list:
17572      { initializer-list , [opt] }
17573      { }
17574 
17575    Returns a CONSTRUCTOR.  The CONSTRUCTOR_ELTS will be
17576    the elements of the initializer-list (or NULL, if the last
17577    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
17578    NULL_TREE.  There is no way to detect whether or not the optional
17579    trailing `,' was provided.  NON_CONSTANT_P is as for
17580    cp_parser_initializer.  */
17581 
17582 static tree
17583 cp_parser_braced_list (cp_parser* parser, bool* non_constant_p)
17584 {
17585   tree initializer;
17586 
17587   /* Consume the `{' token.  */
17588   cp_lexer_consume_token (parser->lexer);
17589   /* Create a CONSTRUCTOR to represent the braced-initializer.  */
17590   initializer = make_node (CONSTRUCTOR);
17591   /* If it's not a `}', then there is a non-trivial initializer.  */
17592   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
17593     {
17594       /* Parse the initializer list.  */
17595       CONSTRUCTOR_ELTS (initializer)
17596 	= cp_parser_initializer_list (parser, non_constant_p);
17597       /* A trailing `,' token is allowed.  */
17598       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
17599 	cp_lexer_consume_token (parser->lexer);
17600     }
17601   /* Now, there should be a trailing `}'.  */
17602   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
17603   TREE_TYPE (initializer) = init_list_type_node;
17604   return initializer;
17605 }
17606 
17607 /* Parse an initializer-list.
17608 
17609    initializer-list:
17610      initializer-clause ... [opt]
17611      initializer-list , initializer-clause ... [opt]
17612 
17613    GNU Extension:
17614 
17615    initializer-list:
17616      designation initializer-clause ...[opt]
17617      initializer-list , designation initializer-clause ...[opt]
17618 
17619    designation:
17620      . identifier =
17621      identifier :
17622      [ constant-expression ] =
17623 
17624    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
17625    for the initializer.  If the INDEX of the elt is non-NULL, it is the
17626    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
17627    as for cp_parser_initializer.  */
17628 
17629 static VEC(constructor_elt,gc) *
17630 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
17631 {
17632   VEC(constructor_elt,gc) *v = NULL;
17633 
17634   /* Assume all of the expressions are constant.  */
17635   *non_constant_p = false;
17636 
17637   /* Parse the rest of the list.  */
17638   while (true)
17639     {
17640       cp_token *token;
17641       tree designator;
17642       tree initializer;
17643       bool clause_non_constant_p;
17644 
17645       /* If the next token is an identifier and the following one is a
17646 	 colon, we are looking at the GNU designated-initializer
17647 	 syntax.  */
17648       if (cp_parser_allow_gnu_extensions_p (parser)
17649 	  && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
17650 	  && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
17651 	{
17652 	  /* Warn the user that they are using an extension.  */
17653 	  pedwarn (input_location, OPT_pedantic,
17654 		   "ISO C++ does not allow designated initializers");
17655 	  /* Consume the identifier.  */
17656 	  designator = cp_lexer_consume_token (parser->lexer)->u.value;
17657 	  /* Consume the `:'.  */
17658 	  cp_lexer_consume_token (parser->lexer);
17659 	}
17660       /* Also handle the C99 syntax, '. id ='.  */
17661       else if (cp_parser_allow_gnu_extensions_p (parser)
17662 	       && cp_lexer_next_token_is (parser->lexer, CPP_DOT)
17663 	       && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME
17664 	       && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_EQ)
17665 	{
17666 	  /* Warn the user that they are using an extension.  */
17667 	  pedwarn (input_location, OPT_pedantic,
17668 		   "ISO C++ does not allow C99 designated initializers");
17669 	  /* Consume the `.'.  */
17670 	  cp_lexer_consume_token (parser->lexer);
17671 	  /* Consume the identifier.  */
17672 	  designator = cp_lexer_consume_token (parser->lexer)->u.value;
17673 	  /* Consume the `='.  */
17674 	  cp_lexer_consume_token (parser->lexer);
17675 	}
17676       /* Also handle C99 array designators, '[ const ] ='.  */
17677       else if (cp_parser_allow_gnu_extensions_p (parser)
17678 	       && !c_dialect_objc ()
17679 	       && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
17680 	{
17681 	  /* In C++11, [ could start a lambda-introducer.  */
17682 	  bool non_const = false;
17683 
17684 	  cp_parser_parse_tentatively (parser);
17685 	  cp_lexer_consume_token (parser->lexer);
17686 	  designator = cp_parser_constant_expression (parser, true, &non_const);
17687 	  cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
17688 	  cp_parser_require (parser, CPP_EQ, RT_EQ);
17689 	  if (!cp_parser_parse_definitely (parser))
17690 	    designator = NULL_TREE;
17691 	  else if (non_const)
17692 	    require_potential_rvalue_constant_expression (designator);
17693 	}
17694       else
17695 	designator = NULL_TREE;
17696 
17697       /* Parse the initializer.  */
17698       initializer = cp_parser_initializer_clause (parser,
17699 						  &clause_non_constant_p);
17700       /* If any clause is non-constant, so is the entire initializer.  */
17701       if (clause_non_constant_p)
17702 	*non_constant_p = true;
17703 
17704       /* If we have an ellipsis, this is an initializer pack
17705 	 expansion.  */
17706       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
17707         {
17708           /* Consume the `...'.  */
17709           cp_lexer_consume_token (parser->lexer);
17710 
17711           /* Turn the initializer into an initializer expansion.  */
17712           initializer = make_pack_expansion (initializer);
17713         }
17714 
17715       /* Add it to the vector.  */
17716       CONSTRUCTOR_APPEND_ELT (v, designator, initializer);
17717 
17718       /* If the next token is not a comma, we have reached the end of
17719 	 the list.  */
17720       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
17721 	break;
17722 
17723       /* Peek at the next token.  */
17724       token = cp_lexer_peek_nth_token (parser->lexer, 2);
17725       /* If the next token is a `}', then we're still done.  An
17726 	 initializer-clause can have a trailing `,' after the
17727 	 initializer-list and before the closing `}'.  */
17728       if (token->type == CPP_CLOSE_BRACE)
17729 	break;
17730 
17731       /* Consume the `,' token.  */
17732       cp_lexer_consume_token (parser->lexer);
17733     }
17734 
17735   return v;
17736 }
17737 
17738 /* Classes [gram.class] */
17739 
17740 /* Parse a class-name.
17741 
17742    class-name:
17743      identifier
17744      template-id
17745 
17746    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
17747    to indicate that names looked up in dependent types should be
17748    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
17749    keyword has been used to indicate that the name that appears next
17750    is a template.  TAG_TYPE indicates the explicit tag given before
17751    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
17752    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
17753    is the class being defined in a class-head.
17754 
17755    Returns the TYPE_DECL representing the class.  */
17756 
17757 static tree
17758 cp_parser_class_name (cp_parser *parser,
17759 		      bool typename_keyword_p,
17760 		      bool template_keyword_p,
17761 		      enum tag_types tag_type,
17762 		      bool check_dependency_p,
17763 		      bool class_head_p,
17764 		      bool is_declaration)
17765 {
17766   tree decl;
17767   tree scope;
17768   bool typename_p;
17769   cp_token *token;
17770   tree identifier = NULL_TREE;
17771 
17772   /* All class-names start with an identifier.  */
17773   token = cp_lexer_peek_token (parser->lexer);
17774   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
17775     {
17776       cp_parser_error (parser, "expected class-name");
17777       return error_mark_node;
17778     }
17779 
17780   /* PARSER->SCOPE can be cleared when parsing the template-arguments
17781      to a template-id, so we save it here.  */
17782   scope = parser->scope;
17783   if (scope == error_mark_node)
17784     return error_mark_node;
17785 
17786   /* Any name names a type if we're following the `typename' keyword
17787      in a qualified name where the enclosing scope is type-dependent.  */
17788   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
17789 		&& dependent_type_p (scope));
17790   /* Handle the common case (an identifier, but not a template-id)
17791      efficiently.  */
17792   if (token->type == CPP_NAME
17793       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
17794     {
17795       cp_token *identifier_token;
17796       bool ambiguous_p;
17797 
17798       /* Look for the identifier.  */
17799       identifier_token = cp_lexer_peek_token (parser->lexer);
17800       ambiguous_p = identifier_token->ambiguous_p;
17801       identifier = cp_parser_identifier (parser);
17802       /* If the next token isn't an identifier, we are certainly not
17803 	 looking at a class-name.  */
17804       if (identifier == error_mark_node)
17805 	decl = error_mark_node;
17806       /* If we know this is a type-name, there's no need to look it
17807 	 up.  */
17808       else if (typename_p)
17809 	decl = identifier;
17810       else
17811 	{
17812 	  tree ambiguous_decls;
17813 	  /* If we already know that this lookup is ambiguous, then
17814 	     we've already issued an error message; there's no reason
17815 	     to check again.  */
17816 	  if (ambiguous_p)
17817 	    {
17818 	      cp_parser_simulate_error (parser);
17819 	      return error_mark_node;
17820 	    }
17821 	  /* If the next token is a `::', then the name must be a type
17822 	     name.
17823 
17824 	     [basic.lookup.qual]
17825 
17826 	     During the lookup for a name preceding the :: scope
17827 	     resolution operator, object, function, and enumerator
17828 	     names are ignored.  */
17829 	  if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
17830 	    tag_type = typename_type;
17831 	  /* Look up the name.  */
17832 	  decl = cp_parser_lookup_name (parser, identifier,
17833 					tag_type,
17834 					/*is_template=*/false,
17835 					/*is_namespace=*/false,
17836 					check_dependency_p,
17837 					&ambiguous_decls,
17838 					identifier_token->location);
17839 	  if (ambiguous_decls)
17840 	    {
17841 	      if (cp_parser_parsing_tentatively (parser))
17842 		cp_parser_simulate_error (parser);
17843 	      return error_mark_node;
17844 	    }
17845 	}
17846     }
17847   else
17848     {
17849       /* Try a template-id.  */
17850       decl = cp_parser_template_id (parser, template_keyword_p,
17851 				    check_dependency_p,
17852 				    is_declaration);
17853       if (decl == error_mark_node)
17854 	return error_mark_node;
17855     }
17856 
17857   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
17858 
17859   /* If this is a typename, create a TYPENAME_TYPE.  */
17860   if (typename_p && decl != error_mark_node)
17861     {
17862       decl = make_typename_type (scope, decl, typename_type,
17863 				 /*complain=*/tf_error);
17864       if (decl != error_mark_node)
17865 	decl = TYPE_NAME (decl);
17866     }
17867 
17868   decl = strip_using_decl (decl);
17869 
17870   /* Check to see that it is really the name of a class.  */
17871   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
17872       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
17873       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
17874     /* Situations like this:
17875 
17876 	 template <typename T> struct A {
17877 	   typename T::template X<int>::I i;
17878 	 };
17879 
17880        are problematic.  Is `T::template X<int>' a class-name?  The
17881        standard does not seem to be definitive, but there is no other
17882        valid interpretation of the following `::'.  Therefore, those
17883        names are considered class-names.  */
17884     {
17885       decl = make_typename_type (scope, decl, tag_type, tf_error);
17886       if (decl != error_mark_node)
17887 	decl = TYPE_NAME (decl);
17888     }
17889   else if (TREE_CODE (decl) != TYPE_DECL
17890 	   || TREE_TYPE (decl) == error_mark_node
17891 	   || !MAYBE_CLASS_TYPE_P (TREE_TYPE (decl))
17892 	   /* In Objective-C 2.0, a classname followed by '.' starts a
17893 	      dot-syntax expression, and it's not a type-name.  */
17894 	   || (c_dialect_objc ()
17895 	       && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT
17896 	       && objc_is_class_name (decl)))
17897     decl = error_mark_node;
17898 
17899   if (decl == error_mark_node)
17900     cp_parser_error (parser, "expected class-name");
17901   else if (identifier && !parser->scope)
17902     maybe_note_name_used_in_class (identifier, decl);
17903 
17904   return decl;
17905 }
17906 
17907 /* Parse a class-specifier.
17908 
17909    class-specifier:
17910      class-head { member-specification [opt] }
17911 
17912    Returns the TREE_TYPE representing the class.  */
17913 
17914 static tree
17915 cp_parser_class_specifier_1 (cp_parser* parser)
17916 {
17917   tree type;
17918   tree attributes = NULL_TREE;
17919   bool nested_name_specifier_p;
17920   unsigned saved_num_template_parameter_lists;
17921   bool saved_in_function_body;
17922   unsigned char in_statement;
17923   bool in_switch_statement_p;
17924   bool saved_in_unbraced_linkage_specification_p;
17925   tree old_scope = NULL_TREE;
17926   tree scope = NULL_TREE;
17927   cp_token *closing_brace;
17928 
17929   push_deferring_access_checks (dk_no_deferred);
17930 
17931   /* Parse the class-head.  */
17932   type = cp_parser_class_head (parser,
17933 			       &nested_name_specifier_p);
17934   /* If the class-head was a semantic disaster, skip the entire body
17935      of the class.  */
17936   if (!type)
17937     {
17938       cp_parser_skip_to_end_of_block_or_statement (parser);
17939       pop_deferring_access_checks ();
17940       return error_mark_node;
17941     }
17942 
17943   /* Look for the `{'.  */
17944   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
17945     {
17946       pop_deferring_access_checks ();
17947       return error_mark_node;
17948     }
17949 
17950   /* Issue an error message if type-definitions are forbidden here.  */
17951   cp_parser_check_type_definition (parser);
17952   /* Remember that we are defining one more class.  */
17953   ++parser->num_classes_being_defined;
17954   /* Inside the class, surrounding template-parameter-lists do not
17955      apply.  */
17956   saved_num_template_parameter_lists
17957     = parser->num_template_parameter_lists;
17958   parser->num_template_parameter_lists = 0;
17959   /* We are not in a function body.  */
17960   saved_in_function_body = parser->in_function_body;
17961   parser->in_function_body = false;
17962   /* Or in a loop.  */
17963   in_statement = parser->in_statement;
17964   parser->in_statement = 0;
17965   /* Or in a switch.  */
17966   in_switch_statement_p = parser->in_switch_statement_p;
17967   parser->in_switch_statement_p = false;
17968   /* We are not immediately inside an extern "lang" block.  */
17969   saved_in_unbraced_linkage_specification_p
17970     = parser->in_unbraced_linkage_specification_p;
17971   parser->in_unbraced_linkage_specification_p = false;
17972 
17973   /* Start the class.  */
17974   if (nested_name_specifier_p)
17975     {
17976       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
17977       old_scope = push_inner_scope (scope);
17978     }
17979   type = begin_class_definition (type);
17980 
17981   if (type == error_mark_node)
17982     /* If the type is erroneous, skip the entire body of the class.  */
17983     cp_parser_skip_to_closing_brace (parser);
17984   else
17985     /* Parse the member-specification.  */
17986     cp_parser_member_specification_opt (parser);
17987 
17988   /* Look for the trailing `}'.  */
17989   closing_brace = cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
17990   /* Look for trailing attributes to apply to this class.  */
17991   if (cp_parser_allow_gnu_extensions_p (parser))
17992     attributes = cp_parser_attributes_opt (parser);
17993   if (type != error_mark_node)
17994     type = finish_struct (type, attributes);
17995   if (nested_name_specifier_p)
17996     pop_inner_scope (old_scope, scope);
17997 
17998   /* We've finished a type definition.  Check for the common syntax
17999      error of forgetting a semicolon after the definition.  We need to
18000      be careful, as we can't just check for not-a-semicolon and be done
18001      with it; the user might have typed:
18002 
18003      class X { } c = ...;
18004      class X { } *p = ...;
18005 
18006      and so forth.  Instead, enumerate all the possible tokens that
18007      might follow this production; if we don't see one of them, then
18008      complain and silently insert the semicolon.  */
18009   {
18010     cp_token *token = cp_lexer_peek_token (parser->lexer);
18011     bool want_semicolon = true;
18012 
18013     switch (token->type)
18014       {
18015       case CPP_NAME:
18016       case CPP_SEMICOLON:
18017       case CPP_MULT:
18018       case CPP_AND:
18019       case CPP_OPEN_PAREN:
18020       case CPP_CLOSE_PAREN:
18021       case CPP_COMMA:
18022         want_semicolon = false;
18023         break;
18024 
18025         /* While it's legal for type qualifiers and storage class
18026            specifiers to follow type definitions in the grammar, only
18027            compiler testsuites contain code like that.  Assume that if
18028            we see such code, then what we're really seeing is a case
18029            like:
18030 
18031            class X { }
18032            const <type> var = ...;
18033 
18034            or
18035 
18036            class Y { }
18037            static <type> func (...) ...
18038 
18039            i.e. the qualifier or specifier applies to the next
18040            declaration.  To do so, however, we need to look ahead one
18041            more token to see if *that* token is a type specifier.
18042 
18043 	   This code could be improved to handle:
18044 
18045 	   class Z { }
18046 	   static const <type> var = ...;  */
18047       case CPP_KEYWORD:
18048 	if (keyword_is_decl_specifier (token->keyword))
18049 	  {
18050 	    cp_token *lookahead = cp_lexer_peek_nth_token (parser->lexer, 2);
18051 
18052 	    /* Handling user-defined types here would be nice, but very
18053 	       tricky.  */
18054 	    want_semicolon
18055 	      = (lookahead->type == CPP_KEYWORD
18056 		 && keyword_begins_type_specifier (lookahead->keyword));
18057 	  }
18058 	break;
18059       default:
18060 	break;
18061       }
18062 
18063     /* If we don't have a type, then something is very wrong and we
18064        shouldn't try to do anything clever.  Likewise for not seeing the
18065        closing brace.  */
18066     if (closing_brace && TYPE_P (type) && want_semicolon)
18067       {
18068 	cp_token_position prev
18069 	  = cp_lexer_previous_token_position (parser->lexer);
18070 	cp_token *prev_token = cp_lexer_token_at (parser->lexer, prev);
18071 	location_t loc = prev_token->location;
18072 
18073 	if (CLASSTYPE_DECLARED_CLASS (type))
18074 	  error_at (loc, "expected %<;%> after class definition");
18075 	else if (TREE_CODE (type) == RECORD_TYPE)
18076 	  error_at (loc, "expected %<;%> after struct definition");
18077 	else if (TREE_CODE (type) == UNION_TYPE)
18078 	  error_at (loc, "expected %<;%> after union definition");
18079 	else
18080 	  gcc_unreachable ();
18081 
18082 	/* Unget one token and smash it to look as though we encountered
18083 	   a semicolon in the input stream.  */
18084 	cp_lexer_set_token_position (parser->lexer, prev);
18085 	token = cp_lexer_peek_token (parser->lexer);
18086 	token->type = CPP_SEMICOLON;
18087 	token->keyword = RID_MAX;
18088       }
18089   }
18090 
18091   /* If this class is not itself within the scope of another class,
18092      then we need to parse the bodies of all of the queued function
18093      definitions.  Note that the queued functions defined in a class
18094      are not always processed immediately following the
18095      class-specifier for that class.  Consider:
18096 
18097        struct A {
18098 	 struct B { void f() { sizeof (A); } };
18099        };
18100 
18101      If `f' were processed before the processing of `A' were
18102      completed, there would be no way to compute the size of `A'.
18103      Note that the nesting we are interested in here is lexical --
18104      not the semantic nesting given by TYPE_CONTEXT.  In particular,
18105      for:
18106 
18107        struct A { struct B; };
18108        struct A::B { void f() { } };
18109 
18110      there is no need to delay the parsing of `A::B::f'.  */
18111   if (--parser->num_classes_being_defined == 0)
18112     {
18113       tree decl;
18114       tree class_type = NULL_TREE;
18115       tree pushed_scope = NULL_TREE;
18116       unsigned ix;
18117       cp_default_arg_entry *e;
18118       tree save_ccp, save_ccr;
18119 
18120       /* In a first pass, parse default arguments to the functions.
18121 	 Then, in a second pass, parse the bodies of the functions.
18122 	 This two-phased approach handles cases like:
18123 
18124 	    struct S {
18125 	      void f() { g(); }
18126 	      void g(int i = 3);
18127 	    };
18128 
18129 	 */
18130       FOR_EACH_VEC_ELT (cp_default_arg_entry, unparsed_funs_with_default_args,
18131 			ix, e)
18132 	{
18133 	  decl = e->decl;
18134 	  /* If there are default arguments that have not yet been processed,
18135 	     take care of them now.  */
18136 	  if (class_type != e->class_type)
18137 	    {
18138 	      if (pushed_scope)
18139 		pop_scope (pushed_scope);
18140 	      class_type = e->class_type;
18141 	      pushed_scope = push_scope (class_type);
18142 	    }
18143 	  /* Make sure that any template parameters are in scope.  */
18144 	  maybe_begin_member_template_processing (decl);
18145 	  /* Parse the default argument expressions.  */
18146 	  cp_parser_late_parsing_default_args (parser, decl);
18147 	  /* Remove any template parameters from the symbol table.  */
18148 	  maybe_end_member_template_processing ();
18149 	}
18150       VEC_truncate (cp_default_arg_entry, unparsed_funs_with_default_args, 0);
18151       /* Now parse any NSDMIs.  */
18152       save_ccp = current_class_ptr;
18153       save_ccr = current_class_ref;
18154       FOR_EACH_VEC_ELT (tree, unparsed_nsdmis, ix, decl)
18155 	{
18156 	  if (class_type != DECL_CONTEXT (decl))
18157 	    {
18158 	      if (pushed_scope)
18159 		pop_scope (pushed_scope);
18160 	      class_type = DECL_CONTEXT (decl);
18161 	      pushed_scope = push_scope (class_type);
18162 	    }
18163 	  inject_this_parameter (class_type, TYPE_UNQUALIFIED);
18164 	  cp_parser_late_parsing_nsdmi (parser, decl);
18165 	}
18166       VEC_truncate (tree, unparsed_nsdmis, 0);
18167       current_class_ptr = save_ccp;
18168       current_class_ref = save_ccr;
18169       if (pushed_scope)
18170 	pop_scope (pushed_scope);
18171       /* Now parse the body of the functions.  */
18172       FOR_EACH_VEC_ELT (tree, unparsed_funs_with_definitions, ix, decl)
18173 	cp_parser_late_parsing_for_member (parser, decl);
18174       VEC_truncate (tree, unparsed_funs_with_definitions, 0);
18175     }
18176 
18177   /* Put back any saved access checks.  */
18178   pop_deferring_access_checks ();
18179 
18180   /* Restore saved state.  */
18181   parser->in_switch_statement_p = in_switch_statement_p;
18182   parser->in_statement = in_statement;
18183   parser->in_function_body = saved_in_function_body;
18184   parser->num_template_parameter_lists
18185     = saved_num_template_parameter_lists;
18186   parser->in_unbraced_linkage_specification_p
18187     = saved_in_unbraced_linkage_specification_p;
18188 
18189   return type;
18190 }
18191 
18192 static tree
18193 cp_parser_class_specifier (cp_parser* parser)
18194 {
18195   tree ret;
18196   timevar_push (TV_PARSE_STRUCT);
18197   ret = cp_parser_class_specifier_1 (parser);
18198   timevar_pop (TV_PARSE_STRUCT);
18199   return ret;
18200 }
18201 
18202 /* Parse a class-head.
18203 
18204    class-head:
18205      class-key identifier [opt] base-clause [opt]
18206      class-key nested-name-specifier identifier class-virt-specifier [opt] base-clause [opt]
18207      class-key nested-name-specifier [opt] template-id
18208        base-clause [opt]
18209 
18210    class-virt-specifier:
18211      final
18212 
18213    GNU Extensions:
18214      class-key attributes identifier [opt] base-clause [opt]
18215      class-key attributes nested-name-specifier identifier base-clause [opt]
18216      class-key attributes nested-name-specifier [opt] template-id
18217        base-clause [opt]
18218 
18219    Upon return BASES is initialized to the list of base classes (or
18220    NULL, if there are none) in the same form returned by
18221    cp_parser_base_clause.
18222 
18223    Returns the TYPE of the indicated class.  Sets
18224    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
18225    involving a nested-name-specifier was used, and FALSE otherwise.
18226 
18227    Returns error_mark_node if this is not a class-head.
18228 
18229    Returns NULL_TREE if the class-head is syntactically valid, but
18230    semantically invalid in a way that means we should skip the entire
18231    body of the class.  */
18232 
18233 static tree
18234 cp_parser_class_head (cp_parser* parser,
18235 		      bool* nested_name_specifier_p)
18236 {
18237   tree nested_name_specifier;
18238   enum tag_types class_key;
18239   tree id = NULL_TREE;
18240   tree type = NULL_TREE;
18241   tree attributes;
18242   tree bases;
18243   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
18244   bool template_id_p = false;
18245   bool qualified_p = false;
18246   bool invalid_nested_name_p = false;
18247   bool invalid_explicit_specialization_p = false;
18248   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
18249   tree pushed_scope = NULL_TREE;
18250   unsigned num_templates;
18251   cp_token *type_start_token = NULL, *nested_name_specifier_token_start = NULL;
18252   /* Assume no nested-name-specifier will be present.  */
18253   *nested_name_specifier_p = false;
18254   /* Assume no template parameter lists will be used in defining the
18255      type.  */
18256   num_templates = 0;
18257   parser->colon_corrects_to_scope_p = false;
18258 
18259   /* Look for the class-key.  */
18260   class_key = cp_parser_class_key (parser);
18261   if (class_key == none_type)
18262     return error_mark_node;
18263 
18264   /* Parse the attributes.  */
18265   attributes = cp_parser_attributes_opt (parser);
18266 
18267   /* If the next token is `::', that is invalid -- but sometimes
18268      people do try to write:
18269 
18270        struct ::S {};
18271 
18272      Handle this gracefully by accepting the extra qualifier, and then
18273      issuing an error about it later if this really is a
18274      class-head.  If it turns out just to be an elaborated type
18275      specifier, remain silent.  */
18276   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
18277     qualified_p = true;
18278 
18279   push_deferring_access_checks (dk_no_check);
18280 
18281   /* Determine the name of the class.  Begin by looking for an
18282      optional nested-name-specifier.  */
18283   nested_name_specifier_token_start = cp_lexer_peek_token (parser->lexer);
18284   nested_name_specifier
18285     = cp_parser_nested_name_specifier_opt (parser,
18286 					   /*typename_keyword_p=*/false,
18287 					   /*check_dependency_p=*/false,
18288 					   /*type_p=*/false,
18289 					   /*is_declaration=*/false);
18290   /* If there was a nested-name-specifier, then there *must* be an
18291      identifier.  */
18292   if (nested_name_specifier)
18293     {
18294       type_start_token = cp_lexer_peek_token (parser->lexer);
18295       /* Although the grammar says `identifier', it really means
18296 	 `class-name' or `template-name'.  You are only allowed to
18297 	 define a class that has already been declared with this
18298 	 syntax.
18299 
18300 	 The proposed resolution for Core Issue 180 says that wherever
18301 	 you see `class T::X' you should treat `X' as a type-name.
18302 
18303 	 It is OK to define an inaccessible class; for example:
18304 
18305 	   class A { class B; };
18306 	   class A::B {};
18307 
18308 	 We do not know if we will see a class-name, or a
18309 	 template-name.  We look for a class-name first, in case the
18310 	 class-name is a template-id; if we looked for the
18311 	 template-name first we would stop after the template-name.  */
18312       cp_parser_parse_tentatively (parser);
18313       type = cp_parser_class_name (parser,
18314 				   /*typename_keyword_p=*/false,
18315 				   /*template_keyword_p=*/false,
18316 				   class_type,
18317 				   /*check_dependency_p=*/false,
18318 				   /*class_head_p=*/true,
18319 				   /*is_declaration=*/false);
18320       /* If that didn't work, ignore the nested-name-specifier.  */
18321       if (!cp_parser_parse_definitely (parser))
18322 	{
18323 	  invalid_nested_name_p = true;
18324 	  type_start_token = cp_lexer_peek_token (parser->lexer);
18325 	  id = cp_parser_identifier (parser);
18326 	  if (id == error_mark_node)
18327 	    id = NULL_TREE;
18328 	}
18329       /* If we could not find a corresponding TYPE, treat this
18330 	 declaration like an unqualified declaration.  */
18331       if (type == error_mark_node)
18332 	nested_name_specifier = NULL_TREE;
18333       /* Otherwise, count the number of templates used in TYPE and its
18334 	 containing scopes.  */
18335       else
18336 	{
18337 	  tree scope;
18338 
18339 	  for (scope = TREE_TYPE (type);
18340 	       scope && TREE_CODE (scope) != NAMESPACE_DECL;
18341 	       scope = (TYPE_P (scope)
18342 			? TYPE_CONTEXT (scope)
18343 			: DECL_CONTEXT (scope)))
18344 	    if (TYPE_P (scope)
18345 		&& CLASS_TYPE_P (scope)
18346 		&& CLASSTYPE_TEMPLATE_INFO (scope)
18347 		&& PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
18348 		&& !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
18349 	      ++num_templates;
18350 	}
18351     }
18352   /* Otherwise, the identifier is optional.  */
18353   else
18354     {
18355       /* We don't know whether what comes next is a template-id,
18356 	 an identifier, or nothing at all.  */
18357       cp_parser_parse_tentatively (parser);
18358       /* Check for a template-id.  */
18359       type_start_token = cp_lexer_peek_token (parser->lexer);
18360       id = cp_parser_template_id (parser,
18361 				  /*template_keyword_p=*/false,
18362 				  /*check_dependency_p=*/true,
18363 				  /*is_declaration=*/true);
18364       /* If that didn't work, it could still be an identifier.  */
18365       if (!cp_parser_parse_definitely (parser))
18366 	{
18367 	  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18368 	    {
18369 	      type_start_token = cp_lexer_peek_token (parser->lexer);
18370 	      id = cp_parser_identifier (parser);
18371 	    }
18372 	  else
18373 	    id = NULL_TREE;
18374 	}
18375       else
18376 	{
18377 	  template_id_p = true;
18378 	  ++num_templates;
18379 	}
18380     }
18381 
18382   pop_deferring_access_checks ();
18383 
18384   if (id)
18385     {
18386       cp_parser_check_for_invalid_template_id (parser, id,
18387                                                type_start_token->location);
18388     }
18389   virt_specifiers = cp_parser_virt_specifier_seq_opt (parser);
18390 
18391   /* If it's not a `:' or a `{' then we can't really be looking at a
18392      class-head, since a class-head only appears as part of a
18393      class-specifier.  We have to detect this situation before calling
18394      xref_tag, since that has irreversible side-effects.  */
18395   if (!cp_parser_next_token_starts_class_definition_p (parser))
18396     {
18397       cp_parser_error (parser, "expected %<{%> or %<:%>");
18398       type = error_mark_node;
18399       goto out;
18400     }
18401 
18402   /* At this point, we're going ahead with the class-specifier, even
18403      if some other problem occurs.  */
18404   cp_parser_commit_to_tentative_parse (parser);
18405   if (virt_specifiers & VIRT_SPEC_OVERRIDE)
18406     {
18407       cp_parser_error (parser,
18408                        "cannot specify %<override%> for a class");
18409       type = error_mark_node;
18410       goto out;
18411     }
18412   /* Issue the error about the overly-qualified name now.  */
18413   if (qualified_p)
18414     {
18415       cp_parser_error (parser,
18416 		       "global qualification of class name is invalid");
18417       type = error_mark_node;
18418       goto out;
18419     }
18420   else if (invalid_nested_name_p)
18421     {
18422       cp_parser_error (parser,
18423 		       "qualified name does not name a class");
18424       type = error_mark_node;
18425       goto out;
18426     }
18427   else if (nested_name_specifier)
18428     {
18429       tree scope;
18430 
18431       /* Reject typedef-names in class heads.  */
18432       if (!DECL_IMPLICIT_TYPEDEF_P (type))
18433 	{
18434 	  error_at (type_start_token->location,
18435 		    "invalid class name in declaration of %qD",
18436 		    type);
18437 	  type = NULL_TREE;
18438 	  goto done;
18439 	}
18440 
18441       /* Figure out in what scope the declaration is being placed.  */
18442       scope = current_scope ();
18443       /* If that scope does not contain the scope in which the
18444 	 class was originally declared, the program is invalid.  */
18445       if (scope && !is_ancestor (scope, nested_name_specifier))
18446 	{
18447 	  if (at_namespace_scope_p ())
18448 	    error_at (type_start_token->location,
18449 		      "declaration of %qD in namespace %qD which does not "
18450 		      "enclose %qD",
18451 		      type, scope, nested_name_specifier);
18452 	  else
18453 	    error_at (type_start_token->location,
18454 		      "declaration of %qD in %qD which does not enclose %qD",
18455 		      type, scope, nested_name_specifier);
18456 	  type = NULL_TREE;
18457 	  goto done;
18458 	}
18459       /* [dcl.meaning]
18460 
18461 	 A declarator-id shall not be qualified except for the
18462 	 definition of a ... nested class outside of its class
18463 	 ... [or] the definition or explicit instantiation of a
18464 	 class member of a namespace outside of its namespace.  */
18465       if (scope == nested_name_specifier)
18466 	{
18467 	  permerror (nested_name_specifier_token_start->location,
18468 		     "extra qualification not allowed");
18469 	  nested_name_specifier = NULL_TREE;
18470 	  num_templates = 0;
18471 	}
18472     }
18473   /* An explicit-specialization must be preceded by "template <>".  If
18474      it is not, try to recover gracefully.  */
18475   if (at_namespace_scope_p ()
18476       && parser->num_template_parameter_lists == 0
18477       && template_id_p)
18478     {
18479       error_at (type_start_token->location,
18480 		"an explicit specialization must be preceded by %<template <>%>");
18481       invalid_explicit_specialization_p = true;
18482       /* Take the same action that would have been taken by
18483 	 cp_parser_explicit_specialization.  */
18484       ++parser->num_template_parameter_lists;
18485       begin_specialization ();
18486     }
18487   /* There must be no "return" statements between this point and the
18488      end of this function; set "type "to the correct return value and
18489      use "goto done;" to return.  */
18490   /* Make sure that the right number of template parameters were
18491      present.  */
18492   if (!cp_parser_check_template_parameters (parser, num_templates,
18493 					    type_start_token->location,
18494 					    /*declarator=*/NULL))
18495     {
18496       /* If something went wrong, there is no point in even trying to
18497 	 process the class-definition.  */
18498       type = NULL_TREE;
18499       goto done;
18500     }
18501 
18502   /* Look up the type.  */
18503   if (template_id_p)
18504     {
18505       if (TREE_CODE (id) == TEMPLATE_ID_EXPR
18506 	  && (DECL_FUNCTION_TEMPLATE_P (TREE_OPERAND (id, 0))
18507 	      || TREE_CODE (TREE_OPERAND (id, 0)) == OVERLOAD))
18508 	{
18509 	  error_at (type_start_token->location,
18510 		    "function template %qD redeclared as a class template", id);
18511 	  type = error_mark_node;
18512 	}
18513       else
18514 	{
18515 	  type = TREE_TYPE (id);
18516 	  type = maybe_process_partial_specialization (type);
18517 	}
18518       if (nested_name_specifier)
18519 	pushed_scope = push_scope (nested_name_specifier);
18520     }
18521   else if (nested_name_specifier)
18522     {
18523       tree class_type;
18524 
18525       /* Given:
18526 
18527 	    template <typename T> struct S { struct T };
18528 	    template <typename T> struct S<T>::T { };
18529 
18530 	 we will get a TYPENAME_TYPE when processing the definition of
18531 	 `S::T'.  We need to resolve it to the actual type before we
18532 	 try to define it.  */
18533       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
18534 	{
18535 	  class_type = resolve_typename_type (TREE_TYPE (type),
18536 					      /*only_current_p=*/false);
18537 	  if (TREE_CODE (class_type) != TYPENAME_TYPE)
18538 	    type = TYPE_NAME (class_type);
18539 	  else
18540 	    {
18541 	      cp_parser_error (parser, "could not resolve typename type");
18542 	      type = error_mark_node;
18543 	    }
18544 	}
18545 
18546       if (maybe_process_partial_specialization (TREE_TYPE (type))
18547 	  == error_mark_node)
18548 	{
18549 	  type = NULL_TREE;
18550 	  goto done;
18551 	}
18552 
18553       class_type = current_class_type;
18554       /* Enter the scope indicated by the nested-name-specifier.  */
18555       pushed_scope = push_scope (nested_name_specifier);
18556       /* Get the canonical version of this type.  */
18557       type = TYPE_MAIN_DECL (TREE_TYPE (type));
18558       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
18559 	  && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
18560 	{
18561 	  type = push_template_decl (type);
18562 	  if (type == error_mark_node)
18563 	    {
18564 	      type = NULL_TREE;
18565 	      goto done;
18566 	    }
18567 	}
18568 
18569       type = TREE_TYPE (type);
18570       *nested_name_specifier_p = true;
18571     }
18572   else      /* The name is not a nested name.  */
18573     {
18574       /* If the class was unnamed, create a dummy name.  */
18575       if (!id)
18576 	id = make_anon_name ();
18577       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
18578 		       parser->num_template_parameter_lists);
18579     }
18580 
18581   /* Indicate whether this class was declared as a `class' or as a
18582      `struct'.  */
18583   if (TREE_CODE (type) == RECORD_TYPE)
18584     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
18585   cp_parser_check_class_key (class_key, type);
18586 
18587   /* If this type was already complete, and we see another definition,
18588      that's an error.  */
18589   if (type != error_mark_node && COMPLETE_TYPE_P (type))
18590     {
18591       error_at (type_start_token->location, "redefinition of %q#T",
18592 		type);
18593       error_at (type_start_token->location, "previous definition of %q+#T",
18594 		type);
18595       type = NULL_TREE;
18596       goto done;
18597     }
18598   else if (type == error_mark_node)
18599     type = NULL_TREE;
18600 
18601   if (type)
18602     {
18603       /* Apply attributes now, before any use of the class as a template
18604 	 argument in its base list.  */
18605       cplus_decl_attributes (&type, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
18606       fixup_attribute_variants (type);
18607     }
18608 
18609   /* We will have entered the scope containing the class; the names of
18610      base classes should be looked up in that context.  For example:
18611 
18612        struct A { struct B {}; struct C; };
18613        struct A::C : B {};
18614 
18615      is valid.  */
18616 
18617   /* Get the list of base-classes, if there is one.  */
18618   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
18619     bases = cp_parser_base_clause (parser);
18620   else
18621     bases = NULL_TREE;
18622 
18623   /* If we're really defining a class, process the base classes.
18624      If they're invalid, fail.  */
18625   if (type && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)
18626       && !xref_basetypes (type, bases))
18627     type = NULL_TREE;
18628 
18629  done:
18630   /* Leave the scope given by the nested-name-specifier.  We will
18631      enter the class scope itself while processing the members.  */
18632   if (pushed_scope)
18633     pop_scope (pushed_scope);
18634 
18635   if (invalid_explicit_specialization_p)
18636     {
18637       end_specialization ();
18638       --parser->num_template_parameter_lists;
18639     }
18640 
18641   if (type)
18642     DECL_SOURCE_LOCATION (TYPE_NAME (type)) = type_start_token->location;
18643   if (type && (virt_specifiers & VIRT_SPEC_FINAL))
18644     CLASSTYPE_FINAL (type) = 1;
18645  out:
18646   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
18647   return type;
18648 }
18649 
18650 /* Parse a class-key.
18651 
18652    class-key:
18653      class
18654      struct
18655      union
18656 
18657    Returns the kind of class-key specified, or none_type to indicate
18658    error.  */
18659 
18660 static enum tag_types
18661 cp_parser_class_key (cp_parser* parser)
18662 {
18663   cp_token *token;
18664   enum tag_types tag_type;
18665 
18666   /* Look for the class-key.  */
18667   token = cp_parser_require (parser, CPP_KEYWORD, RT_CLASS_KEY);
18668   if (!token)
18669     return none_type;
18670 
18671   /* Check to see if the TOKEN is a class-key.  */
18672   tag_type = cp_parser_token_is_class_key (token);
18673   if (!tag_type)
18674     cp_parser_error (parser, "expected class-key");
18675   return tag_type;
18676 }
18677 
18678 /* Parse an (optional) member-specification.
18679 
18680    member-specification:
18681      member-declaration member-specification [opt]
18682      access-specifier : member-specification [opt]  */
18683 
18684 static void
18685 cp_parser_member_specification_opt (cp_parser* parser)
18686 {
18687   while (true)
18688     {
18689       cp_token *token;
18690       enum rid keyword;
18691 
18692       /* Peek at the next token.  */
18693       token = cp_lexer_peek_token (parser->lexer);
18694       /* If it's a `}', or EOF then we've seen all the members.  */
18695       if (token->type == CPP_CLOSE_BRACE
18696 	  || token->type == CPP_EOF
18697 	  || token->type == CPP_PRAGMA_EOL)
18698 	break;
18699 
18700       /* See if this token is a keyword.  */
18701       keyword = token->keyword;
18702       switch (keyword)
18703 	{
18704 	case RID_PUBLIC:
18705 	case RID_PROTECTED:
18706 	case RID_PRIVATE:
18707 	  /* Consume the access-specifier.  */
18708 	  cp_lexer_consume_token (parser->lexer);
18709 	  /* Remember which access-specifier is active.  */
18710 	  current_access_specifier = token->u.value;
18711 	  /* Look for the `:'.  */
18712 	  cp_parser_require (parser, CPP_COLON, RT_COLON);
18713 	  break;
18714 
18715 	default:
18716 	  /* Accept #pragmas at class scope.  */
18717 	  if (token->type == CPP_PRAGMA)
18718 	    {
18719 	      cp_parser_pragma (parser, pragma_external);
18720 	      break;
18721 	    }
18722 
18723 	  /* Otherwise, the next construction must be a
18724 	     member-declaration.  */
18725 	  cp_parser_member_declaration (parser);
18726 	}
18727     }
18728 }
18729 
18730 /* Parse a member-declaration.
18731 
18732    member-declaration:
18733      decl-specifier-seq [opt] member-declarator-list [opt] ;
18734      function-definition ; [opt]
18735      :: [opt] nested-name-specifier template [opt] unqualified-id ;
18736      using-declaration
18737      template-declaration
18738      alias-declaration
18739 
18740    member-declarator-list:
18741      member-declarator
18742      member-declarator-list , member-declarator
18743 
18744    member-declarator:
18745      declarator pure-specifier [opt]
18746      declarator constant-initializer [opt]
18747      identifier [opt] : constant-expression
18748 
18749    GNU Extensions:
18750 
18751    member-declaration:
18752      __extension__ member-declaration
18753 
18754    member-declarator:
18755      declarator attributes [opt] pure-specifier [opt]
18756      declarator attributes [opt] constant-initializer [opt]
18757      identifier [opt] attributes [opt] : constant-expression
18758 
18759    C++0x Extensions:
18760 
18761    member-declaration:
18762      static_assert-declaration  */
18763 
18764 static void
18765 cp_parser_member_declaration (cp_parser* parser)
18766 {
18767   cp_decl_specifier_seq decl_specifiers;
18768   tree prefix_attributes;
18769   tree decl;
18770   int declares_class_or_enum;
18771   bool friend_p;
18772   cp_token *token = NULL;
18773   cp_token *decl_spec_token_start = NULL;
18774   cp_token *initializer_token_start = NULL;
18775   int saved_pedantic;
18776   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
18777 
18778   /* Check for the `__extension__' keyword.  */
18779   if (cp_parser_extension_opt (parser, &saved_pedantic))
18780     {
18781       /* Recurse.  */
18782       cp_parser_member_declaration (parser);
18783       /* Restore the old value of the PEDANTIC flag.  */
18784       pedantic = saved_pedantic;
18785 
18786       return;
18787     }
18788 
18789   /* Check for a template-declaration.  */
18790   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
18791     {
18792       /* An explicit specialization here is an error condition, and we
18793 	 expect the specialization handler to detect and report this.  */
18794       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
18795 	  && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
18796 	cp_parser_explicit_specialization (parser);
18797       else
18798 	cp_parser_template_declaration (parser, /*member_p=*/true);
18799 
18800       return;
18801     }
18802 
18803   /* Check for a using-declaration.  */
18804   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
18805     {
18806       if (cxx_dialect < cxx0x)
18807 	{
18808 	  /* Parse the using-declaration.  */
18809 	  cp_parser_using_declaration (parser,
18810 				       /*access_declaration_p=*/false);
18811 	  return;
18812 	}
18813       else
18814 	{
18815 	  tree decl;
18816 	  cp_parser_parse_tentatively (parser);
18817 	  decl = cp_parser_alias_declaration (parser);
18818 	  if (cp_parser_parse_definitely (parser))
18819 	    finish_member_declaration (decl);
18820 	  else
18821 	    cp_parser_using_declaration (parser,
18822 					 /*access_declaration_p=*/false);
18823 	  return;
18824 	}
18825     }
18826 
18827   /* Check for @defs.  */
18828   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
18829     {
18830       tree ivar, member;
18831       tree ivar_chains = cp_parser_objc_defs_expression (parser);
18832       ivar = ivar_chains;
18833       while (ivar)
18834 	{
18835 	  member = ivar;
18836 	  ivar = TREE_CHAIN (member);
18837 	  TREE_CHAIN (member) = NULL_TREE;
18838 	  finish_member_declaration (member);
18839 	}
18840       return;
18841     }
18842 
18843   /* If the next token is `static_assert' we have a static assertion.  */
18844   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC_ASSERT))
18845     {
18846       cp_parser_static_assert (parser, /*member_p=*/true);
18847       return;
18848     }
18849 
18850   parser->colon_corrects_to_scope_p = false;
18851 
18852   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
18853       goto out;
18854 
18855   /* Parse the decl-specifier-seq.  */
18856   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
18857   cp_parser_decl_specifier_seq (parser,
18858 				CP_PARSER_FLAGS_OPTIONAL,
18859 				&decl_specifiers,
18860 				&declares_class_or_enum);
18861   prefix_attributes = decl_specifiers.attributes;
18862   decl_specifiers.attributes = NULL_TREE;
18863   /* Check for an invalid type-name.  */
18864   if (!decl_specifiers.any_type_specifiers_p
18865       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
18866     goto out;
18867   /* If there is no declarator, then the decl-specifier-seq should
18868      specify a type.  */
18869   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
18870     {
18871       /* If there was no decl-specifier-seq, and the next token is a
18872 	 `;', then we have something like:
18873 
18874 	   struct S { ; };
18875 
18876 	 [class.mem]
18877 
18878 	 Each member-declaration shall declare at least one member
18879 	 name of the class.  */
18880       if (!decl_specifiers.any_specifiers_p)
18881 	{
18882 	  cp_token *token = cp_lexer_peek_token (parser->lexer);
18883 	  if (!in_system_header_at (token->location))
18884 	    pedwarn (token->location, OPT_pedantic, "extra %<;%>");
18885 	}
18886       else
18887 	{
18888 	  tree type;
18889 
18890 	  /* See if this declaration is a friend.  */
18891 	  friend_p = cp_parser_friend_p (&decl_specifiers);
18892 	  /* If there were decl-specifiers, check to see if there was
18893 	     a class-declaration.  */
18894 	  type = check_tag_decl (&decl_specifiers);
18895 	  /* Nested classes have already been added to the class, but
18896 	     a `friend' needs to be explicitly registered.  */
18897 	  if (friend_p)
18898 	    {
18899 	      /* If the `friend' keyword was present, the friend must
18900 		 be introduced with a class-key.  */
18901 	       if (!declares_class_or_enum && cxx_dialect < cxx0x)
18902 		 pedwarn (decl_spec_token_start->location, OPT_pedantic,
18903 			  "in C++03 a class-key must be used "
18904 			  "when declaring a friend");
18905 	       /* In this case:
18906 
18907 		    template <typename T> struct A {
18908 		      friend struct A<T>::B;
18909 		    };
18910 
18911 		  A<T>::B will be represented by a TYPENAME_TYPE, and
18912 		  therefore not recognized by check_tag_decl.  */
18913 	       if (!type)
18914 		 {
18915 		   type = decl_specifiers.type;
18916 		   if (type && TREE_CODE (type) == TYPE_DECL)
18917 		     type = TREE_TYPE (type);
18918 		 }
18919 	       if (!type || !TYPE_P (type))
18920 		 error_at (decl_spec_token_start->location,
18921 			   "friend declaration does not name a class or "
18922 			   "function");
18923 	       else
18924 		 make_friend_class (current_class_type, type,
18925 				    /*complain=*/true);
18926 	    }
18927 	  /* If there is no TYPE, an error message will already have
18928 	     been issued.  */
18929 	  else if (!type || type == error_mark_node)
18930 	    ;
18931 	  /* An anonymous aggregate has to be handled specially; such
18932 	     a declaration really declares a data member (with a
18933 	     particular type), as opposed to a nested class.  */
18934 	  else if (ANON_AGGR_TYPE_P (type))
18935 	    {
18936 	      /* Remove constructors and such from TYPE, now that we
18937 		 know it is an anonymous aggregate.  */
18938 	      fixup_anonymous_aggr (type);
18939 	      /* And make the corresponding data member.  */
18940 	      decl = build_decl (decl_spec_token_start->location,
18941 				 FIELD_DECL, NULL_TREE, type);
18942 	      /* Add it to the class.  */
18943 	      finish_member_declaration (decl);
18944 	    }
18945 	  else
18946 	    cp_parser_check_access_in_redeclaration
18947 					      (TYPE_NAME (type),
18948 					       decl_spec_token_start->location);
18949 	}
18950     }
18951   else
18952     {
18953       bool assume_semicolon = false;
18954 
18955       /* See if these declarations will be friends.  */
18956       friend_p = cp_parser_friend_p (&decl_specifiers);
18957 
18958       /* Keep going until we hit the `;' at the end of the
18959 	 declaration.  */
18960       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18961 	{
18962 	  tree attributes = NULL_TREE;
18963 	  tree first_attribute;
18964 
18965 	  /* Peek at the next token.  */
18966 	  token = cp_lexer_peek_token (parser->lexer);
18967 
18968 	  /* Check for a bitfield declaration.  */
18969 	  if (token->type == CPP_COLON
18970 	      || (token->type == CPP_NAME
18971 		  && cp_lexer_peek_nth_token (parser->lexer, 2)->type
18972 		  == CPP_COLON))
18973 	    {
18974 	      tree identifier;
18975 	      tree width;
18976 
18977 	      /* Get the name of the bitfield.  Note that we cannot just
18978 		 check TOKEN here because it may have been invalidated by
18979 		 the call to cp_lexer_peek_nth_token above.  */
18980 	      if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
18981 		identifier = cp_parser_identifier (parser);
18982 	      else
18983 		identifier = NULL_TREE;
18984 
18985 	      /* Consume the `:' token.  */
18986 	      cp_lexer_consume_token (parser->lexer);
18987 	      /* Get the width of the bitfield.  */
18988 	      width
18989 		= cp_parser_constant_expression (parser,
18990 						 /*allow_non_constant=*/false,
18991 						 NULL);
18992 
18993 	      /* Look for attributes that apply to the bitfield.  */
18994 	      attributes = cp_parser_attributes_opt (parser);
18995 	      /* Remember which attributes are prefix attributes and
18996 		 which are not.  */
18997 	      first_attribute = attributes;
18998 	      /* Combine the attributes.  */
18999 	      attributes = chainon (prefix_attributes, attributes);
19000 
19001 	      /* Create the bitfield declaration.  */
19002 	      decl = grokbitfield (identifier
19003 				   ? make_id_declarator (NULL_TREE,
19004 							 identifier,
19005 							 sfk_none)
19006 				   : NULL,
19007 				   &decl_specifiers,
19008 				   width,
19009 				   attributes);
19010 	    }
19011 	  else
19012 	    {
19013 	      cp_declarator *declarator;
19014 	      tree initializer;
19015 	      tree asm_specification;
19016 	      int ctor_dtor_or_conv_p;
19017 
19018 	      /* Parse the declarator.  */
19019 	      declarator
19020 		= cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
19021 					&ctor_dtor_or_conv_p,
19022 					/*parenthesized_p=*/NULL,
19023 					/*member_p=*/true);
19024 
19025 	      /* If something went wrong parsing the declarator, make sure
19026 		 that we at least consume some tokens.  */
19027 	      if (declarator == cp_error_declarator)
19028 		{
19029 		  /* Skip to the end of the statement.  */
19030 		  cp_parser_skip_to_end_of_statement (parser);
19031 		  /* If the next token is not a semicolon, that is
19032 		     probably because we just skipped over the body of
19033 		     a function.  So, we consume a semicolon if
19034 		     present, but do not issue an error message if it
19035 		     is not present.  */
19036 		  if (cp_lexer_next_token_is (parser->lexer,
19037 					      CPP_SEMICOLON))
19038 		    cp_lexer_consume_token (parser->lexer);
19039 		  goto out;
19040 		}
19041 
19042 	      if (declares_class_or_enum & 2)
19043 		cp_parser_check_for_definition_in_return_type
19044 					    (declarator, decl_specifiers.type,
19045 					     decl_specifiers.type_location);
19046 
19047 	      /* Look for an asm-specification.  */
19048 	      asm_specification = cp_parser_asm_specification_opt (parser);
19049 	      /* Look for attributes that apply to the declaration.  */
19050 	      attributes = cp_parser_attributes_opt (parser);
19051 	      /* Remember which attributes are prefix attributes and
19052 		 which are not.  */
19053 	      first_attribute = attributes;
19054 	      /* Combine the attributes.  */
19055 	      attributes = chainon (prefix_attributes, attributes);
19056 
19057 	      /* If it's an `=', then we have a constant-initializer or a
19058 		 pure-specifier.  It is not correct to parse the
19059 		 initializer before registering the member declaration
19060 		 since the member declaration should be in scope while
19061 		 its initializer is processed.  However, the rest of the
19062 		 front end does not yet provide an interface that allows
19063 		 us to handle this correctly.  */
19064 	      if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
19065 		{
19066 		  /* In [class.mem]:
19067 
19068 		     A pure-specifier shall be used only in the declaration of
19069 		     a virtual function.
19070 
19071 		     A member-declarator can contain a constant-initializer
19072 		     only if it declares a static member of integral or
19073 		     enumeration type.
19074 
19075 		     Therefore, if the DECLARATOR is for a function, we look
19076 		     for a pure-specifier; otherwise, we look for a
19077 		     constant-initializer.  When we call `grokfield', it will
19078 		     perform more stringent semantics checks.  */
19079 		  initializer_token_start = cp_lexer_peek_token (parser->lexer);
19080 		  if (function_declarator_p (declarator)
19081 		      || (decl_specifiers.type
19082 			  && TREE_CODE (decl_specifiers.type) == TYPE_DECL
19083 			  && (TREE_CODE (TREE_TYPE (decl_specifiers.type))
19084 			      == FUNCTION_TYPE)))
19085 		    initializer = cp_parser_pure_specifier (parser);
19086 		  else if (decl_specifiers.storage_class != sc_static)
19087 		    initializer = cp_parser_save_nsdmi (parser);
19088 		  else if (cxx_dialect >= cxx0x)
19089 		    {
19090 		      bool nonconst;
19091 		      /* Don't require a constant rvalue in C++11, since we
19092 			 might want a reference constant.  We'll enforce
19093 		         constancy later.  */
19094 		      cp_lexer_consume_token (parser->lexer);
19095 		      /* Parse the initializer.  */
19096 		      initializer = cp_parser_initializer_clause (parser,
19097 								  &nonconst);
19098 		    }
19099 		  else
19100 		    /* Parse the initializer.  */
19101 		    initializer = cp_parser_constant_initializer (parser);
19102 		}
19103 	      else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)
19104 		       && !function_declarator_p (declarator))
19105 		{
19106 		  bool x;
19107 		  if (decl_specifiers.storage_class != sc_static)
19108 		    initializer = cp_parser_save_nsdmi (parser);
19109 		  else
19110 		    initializer = cp_parser_initializer (parser, &x, &x);
19111 		}
19112 	      /* Otherwise, there is no initializer.  */
19113 	      else
19114 		initializer = NULL_TREE;
19115 
19116 	      /* See if we are probably looking at a function
19117 		 definition.  We are certainly not looking at a
19118 		 member-declarator.  Calling `grokfield' has
19119 		 side-effects, so we must not do it unless we are sure
19120 		 that we are looking at a member-declarator.  */
19121 	      if (cp_parser_token_starts_function_definition_p
19122 		  (cp_lexer_peek_token (parser->lexer)))
19123 		{
19124 		  /* The grammar does not allow a pure-specifier to be
19125 		     used when a member function is defined.  (It is
19126 		     possible that this fact is an oversight in the
19127 		     standard, since a pure function may be defined
19128 		     outside of the class-specifier.  */
19129 		  if (initializer && initializer_token_start)
19130 		    error_at (initializer_token_start->location,
19131 			      "pure-specifier on function-definition");
19132 		  decl = cp_parser_save_member_function_body (parser,
19133 							      &decl_specifiers,
19134 							      declarator,
19135 							      attributes);
19136 		  /* If the member was not a friend, declare it here.  */
19137 		  if (!friend_p)
19138 		    finish_member_declaration (decl);
19139 		  /* Peek at the next token.  */
19140 		  token = cp_lexer_peek_token (parser->lexer);
19141 		  /* If the next token is a semicolon, consume it.  */
19142 		  if (token->type == CPP_SEMICOLON)
19143 		    cp_lexer_consume_token (parser->lexer);
19144 		  goto out;
19145 		}
19146 	      else
19147 		if (declarator->kind == cdk_function)
19148 		  declarator->id_loc = token->location;
19149 		/* Create the declaration.  */
19150 		decl = grokfield (declarator, &decl_specifiers,
19151 				  initializer, /*init_const_expr_p=*/true,
19152 				  asm_specification,
19153 				  attributes);
19154 	    }
19155 
19156 	  /* Reset PREFIX_ATTRIBUTES.  */
19157 	  while (attributes && TREE_CHAIN (attributes) != first_attribute)
19158 	    attributes = TREE_CHAIN (attributes);
19159 	  if (attributes)
19160 	    TREE_CHAIN (attributes) = NULL_TREE;
19161 
19162 	  /* If there is any qualification still in effect, clear it
19163 	     now; we will be starting fresh with the next declarator.  */
19164 	  parser->scope = NULL_TREE;
19165 	  parser->qualifying_scope = NULL_TREE;
19166 	  parser->object_scope = NULL_TREE;
19167 	  /* If it's a `,', then there are more declarators.  */
19168 	  if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
19169 	    cp_lexer_consume_token (parser->lexer);
19170 	  /* If the next token isn't a `;', then we have a parse error.  */
19171 	  else if (cp_lexer_next_token_is_not (parser->lexer,
19172 					       CPP_SEMICOLON))
19173 	    {
19174 	      /* The next token might be a ways away from where the
19175 		 actual semicolon is missing.  Find the previous token
19176 		 and use that for our error position.  */
19177 	      cp_token *token = cp_lexer_previous_token (parser->lexer);
19178 	      error_at (token->location,
19179 			"expected %<;%> at end of member declaration");
19180 
19181 	      /* Assume that the user meant to provide a semicolon.  If
19182 		 we were to cp_parser_skip_to_end_of_statement, we might
19183 		 skip to a semicolon inside a member function definition
19184 		 and issue nonsensical error messages.  */
19185 	      assume_semicolon = true;
19186 	    }
19187 
19188 	  if (decl)
19189 	    {
19190 	      /* Add DECL to the list of members.  */
19191 	      if (!friend_p)
19192 		finish_member_declaration (decl);
19193 
19194 	      if (TREE_CODE (decl) == FUNCTION_DECL)
19195 		cp_parser_save_default_args (parser, decl);
19196 	      else if (TREE_CODE (decl) == FIELD_DECL
19197 		       && !DECL_C_BIT_FIELD (decl)
19198 		       && DECL_INITIAL (decl))
19199 		/* Add DECL to the queue of NSDMI to be parsed later.  */
19200 		VEC_safe_push (tree, gc, unparsed_nsdmis, decl);
19201 	    }
19202 
19203 	  if (assume_semicolon)
19204 	    goto out;
19205 	}
19206     }
19207 
19208   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
19209  out:
19210   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
19211 }
19212 
19213 /* Parse a pure-specifier.
19214 
19215    pure-specifier:
19216      = 0
19217 
19218    Returns INTEGER_ZERO_NODE if a pure specifier is found.
19219    Otherwise, ERROR_MARK_NODE is returned.  */
19220 
19221 static tree
19222 cp_parser_pure_specifier (cp_parser* parser)
19223 {
19224   cp_token *token;
19225 
19226   /* Look for the `=' token.  */
19227   if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
19228     return error_mark_node;
19229   /* Look for the `0' token.  */
19230   token = cp_lexer_peek_token (parser->lexer);
19231 
19232   if (token->type == CPP_EOF
19233       || token->type == CPP_PRAGMA_EOL)
19234     return error_mark_node;
19235 
19236   cp_lexer_consume_token (parser->lexer);
19237 
19238   /* Accept = default or = delete in c++0x mode.  */
19239   if (token->keyword == RID_DEFAULT
19240       || token->keyword == RID_DELETE)
19241     {
19242       maybe_warn_cpp0x (CPP0X_DEFAULTED_DELETED);
19243       return token->u.value;
19244     }
19245 
19246   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
19247   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
19248     {
19249       cp_parser_error (parser,
19250 		       "invalid pure specifier (only %<= 0%> is allowed)");
19251       cp_parser_skip_to_end_of_statement (parser);
19252       return error_mark_node;
19253     }
19254   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
19255     {
19256       error_at (token->location, "templates may not be %<virtual%>");
19257       return error_mark_node;
19258     }
19259 
19260   return integer_zero_node;
19261 }
19262 
19263 /* Parse a constant-initializer.
19264 
19265    constant-initializer:
19266      = constant-expression
19267 
19268    Returns a representation of the constant-expression.  */
19269 
19270 static tree
19271 cp_parser_constant_initializer (cp_parser* parser)
19272 {
19273   /* Look for the `=' token.  */
19274   if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
19275     return error_mark_node;
19276 
19277   /* It is invalid to write:
19278 
19279        struct S { static const int i = { 7 }; };
19280 
19281      */
19282   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
19283     {
19284       cp_parser_error (parser,
19285 		       "a brace-enclosed initializer is not allowed here");
19286       /* Consume the opening brace.  */
19287       cp_lexer_consume_token (parser->lexer);
19288       /* Skip the initializer.  */
19289       cp_parser_skip_to_closing_brace (parser);
19290       /* Look for the trailing `}'.  */
19291       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
19292 
19293       return error_mark_node;
19294     }
19295 
19296   return cp_parser_constant_expression (parser,
19297 					/*allow_non_constant=*/false,
19298 					NULL);
19299 }
19300 
19301 /* Derived classes [gram.class.derived] */
19302 
19303 /* Parse a base-clause.
19304 
19305    base-clause:
19306      : base-specifier-list
19307 
19308    base-specifier-list:
19309      base-specifier ... [opt]
19310      base-specifier-list , base-specifier ... [opt]
19311 
19312    Returns a TREE_LIST representing the base-classes, in the order in
19313    which they were declared.  The representation of each node is as
19314    described by cp_parser_base_specifier.
19315 
19316    In the case that no bases are specified, this function will return
19317    NULL_TREE, not ERROR_MARK_NODE.  */
19318 
19319 static tree
19320 cp_parser_base_clause (cp_parser* parser)
19321 {
19322   tree bases = NULL_TREE;
19323 
19324   /* Look for the `:' that begins the list.  */
19325   cp_parser_require (parser, CPP_COLON, RT_COLON);
19326 
19327   /* Scan the base-specifier-list.  */
19328   while (true)
19329     {
19330       cp_token *token;
19331       tree base;
19332       bool pack_expansion_p = false;
19333 
19334       /* Look for the base-specifier.  */
19335       base = cp_parser_base_specifier (parser);
19336       /* Look for the (optional) ellipsis. */
19337       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
19338         {
19339           /* Consume the `...'. */
19340           cp_lexer_consume_token (parser->lexer);
19341 
19342           pack_expansion_p = true;
19343         }
19344 
19345       /* Add BASE to the front of the list.  */
19346       if (base && base != error_mark_node)
19347 	{
19348           if (pack_expansion_p)
19349             /* Make this a pack expansion type. */
19350             TREE_VALUE (base) = make_pack_expansion (TREE_VALUE (base));
19351 
19352           if (!check_for_bare_parameter_packs (TREE_VALUE (base)))
19353             {
19354               TREE_CHAIN (base) = bases;
19355               bases = base;
19356             }
19357 	}
19358       /* Peek at the next token.  */
19359       token = cp_lexer_peek_token (parser->lexer);
19360       /* If it's not a comma, then the list is complete.  */
19361       if (token->type != CPP_COMMA)
19362 	break;
19363       /* Consume the `,'.  */
19364       cp_lexer_consume_token (parser->lexer);
19365     }
19366 
19367   /* PARSER->SCOPE may still be non-NULL at this point, if the last
19368      base class had a qualified name.  However, the next name that
19369      appears is certainly not qualified.  */
19370   parser->scope = NULL_TREE;
19371   parser->qualifying_scope = NULL_TREE;
19372   parser->object_scope = NULL_TREE;
19373 
19374   return nreverse (bases);
19375 }
19376 
19377 /* Parse a base-specifier.
19378 
19379    base-specifier:
19380      :: [opt] nested-name-specifier [opt] class-name
19381      virtual access-specifier [opt] :: [opt] nested-name-specifier
19382        [opt] class-name
19383      access-specifier virtual [opt] :: [opt] nested-name-specifier
19384        [opt] class-name
19385 
19386    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
19387    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
19388    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
19389    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
19390 
19391 static tree
19392 cp_parser_base_specifier (cp_parser* parser)
19393 {
19394   cp_token *token;
19395   bool done = false;
19396   bool virtual_p = false;
19397   bool duplicate_virtual_error_issued_p = false;
19398   bool duplicate_access_error_issued_p = false;
19399   bool class_scope_p, template_p;
19400   tree access = access_default_node;
19401   tree type;
19402 
19403   /* Process the optional `virtual' and `access-specifier'.  */
19404   while (!done)
19405     {
19406       /* Peek at the next token.  */
19407       token = cp_lexer_peek_token (parser->lexer);
19408       /* Process `virtual'.  */
19409       switch (token->keyword)
19410 	{
19411 	case RID_VIRTUAL:
19412 	  /* If `virtual' appears more than once, issue an error.  */
19413 	  if (virtual_p && !duplicate_virtual_error_issued_p)
19414 	    {
19415 	      cp_parser_error (parser,
19416 			       "%<virtual%> specified more than once in base-specified");
19417 	      duplicate_virtual_error_issued_p = true;
19418 	    }
19419 
19420 	  virtual_p = true;
19421 
19422 	  /* Consume the `virtual' token.  */
19423 	  cp_lexer_consume_token (parser->lexer);
19424 
19425 	  break;
19426 
19427 	case RID_PUBLIC:
19428 	case RID_PROTECTED:
19429 	case RID_PRIVATE:
19430 	  /* If more than one access specifier appears, issue an
19431 	     error.  */
19432 	  if (access != access_default_node
19433 	      && !duplicate_access_error_issued_p)
19434 	    {
19435 	      cp_parser_error (parser,
19436 			       "more than one access specifier in base-specified");
19437 	      duplicate_access_error_issued_p = true;
19438 	    }
19439 
19440 	  access = ridpointers[(int) token->keyword];
19441 
19442 	  /* Consume the access-specifier.  */
19443 	  cp_lexer_consume_token (parser->lexer);
19444 
19445 	  break;
19446 
19447 	default:
19448 	  done = true;
19449 	  break;
19450 	}
19451     }
19452   /* It is not uncommon to see programs mechanically, erroneously, use
19453      the 'typename' keyword to denote (dependent) qualified types
19454      as base classes.  */
19455   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
19456     {
19457       token = cp_lexer_peek_token (parser->lexer);
19458       if (!processing_template_decl)
19459 	error_at (token->location,
19460 		  "keyword %<typename%> not allowed outside of templates");
19461       else
19462 	error_at (token->location,
19463 		  "keyword %<typename%> not allowed in this context "
19464 		  "(the base class is implicitly a type)");
19465       cp_lexer_consume_token (parser->lexer);
19466     }
19467 
19468   /* Look for the optional `::' operator.  */
19469   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
19470   /* Look for the nested-name-specifier.  The simplest way to
19471      implement:
19472 
19473        [temp.res]
19474 
19475        The keyword `typename' is not permitted in a base-specifier or
19476        mem-initializer; in these contexts a qualified name that
19477        depends on a template-parameter is implicitly assumed to be a
19478        type name.
19479 
19480      is to pretend that we have seen the `typename' keyword at this
19481      point.  */
19482   cp_parser_nested_name_specifier_opt (parser,
19483 				       /*typename_keyword_p=*/true,
19484 				       /*check_dependency_p=*/true,
19485 				       typename_type,
19486 				       /*is_declaration=*/true);
19487   /* If the base class is given by a qualified name, assume that names
19488      we see are type names or templates, as appropriate.  */
19489   class_scope_p = (parser->scope && TYPE_P (parser->scope));
19490   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
19491 
19492   if (!parser->scope
19493       && cp_lexer_next_token_is_decltype (parser->lexer))
19494     /* DR 950 allows decltype as a base-specifier.  */
19495     type = cp_parser_decltype (parser);
19496   else
19497     {
19498       /* Otherwise, look for the class-name.  */
19499       type = cp_parser_class_name (parser,
19500 				   class_scope_p,
19501 				   template_p,
19502 				   typename_type,
19503 				   /*check_dependency_p=*/true,
19504 				   /*class_head_p=*/false,
19505 				   /*is_declaration=*/true);
19506       type = TREE_TYPE (type);
19507     }
19508 
19509   if (type == error_mark_node)
19510     return error_mark_node;
19511 
19512   return finish_base_specifier (type, access, virtual_p);
19513 }
19514 
19515 /* Exception handling [gram.exception] */
19516 
19517 /* Parse an (optional) noexcept-specification.
19518 
19519    noexcept-specification:
19520      noexcept ( constant-expression ) [opt]
19521 
19522    If no noexcept-specification is present, returns NULL_TREE.
19523    Otherwise, if REQUIRE_CONSTEXPR is false, then either parse and return any
19524    expression if parentheses follow noexcept, or return BOOLEAN_TRUE_NODE if
19525    there are no parentheses.  CONSUMED_EXPR will be set accordingly.
19526    Otherwise, returns a noexcept specification unless RETURN_COND is true,
19527    in which case a boolean condition is returned instead.  */
19528 
19529 static tree
19530 cp_parser_noexcept_specification_opt (cp_parser* parser,
19531 				      bool require_constexpr,
19532 				      bool* consumed_expr,
19533 				      bool return_cond)
19534 {
19535   cp_token *token;
19536   const char *saved_message;
19537 
19538   /* Peek at the next token.  */
19539   token = cp_lexer_peek_token (parser->lexer);
19540 
19541   /* Is it a noexcept-specification?  */
19542   if (cp_parser_is_keyword (token, RID_NOEXCEPT))
19543     {
19544       tree expr;
19545       cp_lexer_consume_token (parser->lexer);
19546 
19547       if (cp_lexer_peek_token (parser->lexer)->type == CPP_OPEN_PAREN)
19548 	{
19549 	  cp_lexer_consume_token (parser->lexer);
19550 
19551 	  if (require_constexpr)
19552 	    {
19553 	      /* Types may not be defined in an exception-specification.  */
19554 	      saved_message = parser->type_definition_forbidden_message;
19555 	      parser->type_definition_forbidden_message
19556 	      = G_("types may not be defined in an exception-specification");
19557 
19558 	      expr = cp_parser_constant_expression (parser, false, NULL);
19559 
19560 	      /* Restore the saved message.  */
19561 	      parser->type_definition_forbidden_message = saved_message;
19562 	    }
19563 	  else
19564 	    {
19565 	      expr = cp_parser_expression (parser, false, NULL);
19566 	      *consumed_expr = true;
19567 	    }
19568 
19569 	  cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19570 	}
19571       else
19572 	{
19573 	  expr = boolean_true_node;
19574 	  if (!require_constexpr)
19575 	    *consumed_expr = false;
19576 	}
19577 
19578       /* We cannot build a noexcept-spec right away because this will check
19579 	 that expr is a constexpr.  */
19580       if (!return_cond)
19581 	return build_noexcept_spec (expr, tf_warning_or_error);
19582       else
19583 	return expr;
19584     }
19585   else
19586     return NULL_TREE;
19587 }
19588 
19589 /* Parse an (optional) exception-specification.
19590 
19591    exception-specification:
19592      throw ( type-id-list [opt] )
19593 
19594    Returns a TREE_LIST representing the exception-specification.  The
19595    TREE_VALUE of each node is a type.  */
19596 
19597 static tree
19598 cp_parser_exception_specification_opt (cp_parser* parser)
19599 {
19600   cp_token *token;
19601   tree type_id_list;
19602   const char *saved_message;
19603 
19604   /* Peek at the next token.  */
19605   token = cp_lexer_peek_token (parser->lexer);
19606 
19607   /* Is it a noexcept-specification?  */
19608   type_id_list = cp_parser_noexcept_specification_opt(parser, true, NULL,
19609 						      false);
19610   if (type_id_list != NULL_TREE)
19611     return type_id_list;
19612 
19613   /* If it's not `throw', then there's no exception-specification.  */
19614   if (!cp_parser_is_keyword (token, RID_THROW))
19615     return NULL_TREE;
19616 
19617 #if 0
19618   /* Enable this once a lot of code has transitioned to noexcept?  */
19619   if (cxx_dialect == cxx0x && !in_system_header)
19620     warning (OPT_Wdeprecated, "dynamic exception specifications are "
19621 	     "deprecated in C++0x; use %<noexcept%> instead");
19622 #endif
19623 
19624   /* Consume the `throw'.  */
19625   cp_lexer_consume_token (parser->lexer);
19626 
19627   /* Look for the `('.  */
19628   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19629 
19630   /* Peek at the next token.  */
19631   token = cp_lexer_peek_token (parser->lexer);
19632   /* If it's not a `)', then there is a type-id-list.  */
19633   if (token->type != CPP_CLOSE_PAREN)
19634     {
19635       /* Types may not be defined in an exception-specification.  */
19636       saved_message = parser->type_definition_forbidden_message;
19637       parser->type_definition_forbidden_message
19638 	= G_("types may not be defined in an exception-specification");
19639       /* Parse the type-id-list.  */
19640       type_id_list = cp_parser_type_id_list (parser);
19641       /* Restore the saved message.  */
19642       parser->type_definition_forbidden_message = saved_message;
19643     }
19644   else
19645     type_id_list = empty_except_spec;
19646 
19647   /* Look for the `)'.  */
19648   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19649 
19650   return type_id_list;
19651 }
19652 
19653 /* Parse an (optional) type-id-list.
19654 
19655    type-id-list:
19656      type-id ... [opt]
19657      type-id-list , type-id ... [opt]
19658 
19659    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
19660    in the order that the types were presented.  */
19661 
19662 static tree
19663 cp_parser_type_id_list (cp_parser* parser)
19664 {
19665   tree types = NULL_TREE;
19666 
19667   while (true)
19668     {
19669       cp_token *token;
19670       tree type;
19671 
19672       /* Get the next type-id.  */
19673       type = cp_parser_type_id (parser);
19674       /* Parse the optional ellipsis. */
19675       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
19676         {
19677           /* Consume the `...'. */
19678           cp_lexer_consume_token (parser->lexer);
19679 
19680           /* Turn the type into a pack expansion expression. */
19681           type = make_pack_expansion (type);
19682         }
19683       /* Add it to the list.  */
19684       types = add_exception_specifier (types, type, /*complain=*/1);
19685       /* Peek at the next token.  */
19686       token = cp_lexer_peek_token (parser->lexer);
19687       /* If it is not a `,', we are done.  */
19688       if (token->type != CPP_COMMA)
19689 	break;
19690       /* Consume the `,'.  */
19691       cp_lexer_consume_token (parser->lexer);
19692     }
19693 
19694   return nreverse (types);
19695 }
19696 
19697 /* Parse a try-block.
19698 
19699    try-block:
19700      try compound-statement handler-seq  */
19701 
19702 static tree
19703 cp_parser_try_block (cp_parser* parser)
19704 {
19705   tree try_block;
19706 
19707   cp_parser_require_keyword (parser, RID_TRY, RT_TRY);
19708   try_block = begin_try_block ();
19709   cp_parser_compound_statement (parser, NULL, true, false);
19710   finish_try_block (try_block);
19711   cp_parser_handler_seq (parser);
19712   finish_handler_sequence (try_block);
19713 
19714   return try_block;
19715 }
19716 
19717 /* Parse a function-try-block.
19718 
19719    function-try-block:
19720      try ctor-initializer [opt] function-body handler-seq  */
19721 
19722 static bool
19723 cp_parser_function_try_block (cp_parser* parser)
19724 {
19725   tree compound_stmt;
19726   tree try_block;
19727   bool ctor_initializer_p;
19728 
19729   /* Look for the `try' keyword.  */
19730   if (!cp_parser_require_keyword (parser, RID_TRY, RT_TRY))
19731     return false;
19732   /* Let the rest of the front end know where we are.  */
19733   try_block = begin_function_try_block (&compound_stmt);
19734   /* Parse the function-body.  */
19735   ctor_initializer_p
19736     = cp_parser_ctor_initializer_opt_and_function_body (parser);
19737   /* We're done with the `try' part.  */
19738   finish_function_try_block (try_block);
19739   /* Parse the handlers.  */
19740   cp_parser_handler_seq (parser);
19741   /* We're done with the handlers.  */
19742   finish_function_handler_sequence (try_block, compound_stmt);
19743 
19744   return ctor_initializer_p;
19745 }
19746 
19747 /* Parse a handler-seq.
19748 
19749    handler-seq:
19750      handler handler-seq [opt]  */
19751 
19752 static void
19753 cp_parser_handler_seq (cp_parser* parser)
19754 {
19755   while (true)
19756     {
19757       cp_token *token;
19758 
19759       /* Parse the handler.  */
19760       cp_parser_handler (parser);
19761       /* Peek at the next token.  */
19762       token = cp_lexer_peek_token (parser->lexer);
19763       /* If it's not `catch' then there are no more handlers.  */
19764       if (!cp_parser_is_keyword (token, RID_CATCH))
19765 	break;
19766     }
19767 }
19768 
19769 /* Parse a handler.
19770 
19771    handler:
19772      catch ( exception-declaration ) compound-statement  */
19773 
19774 static void
19775 cp_parser_handler (cp_parser* parser)
19776 {
19777   tree handler;
19778   tree declaration;
19779 
19780   cp_parser_require_keyword (parser, RID_CATCH, RT_CATCH);
19781   handler = begin_handler ();
19782   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19783   declaration = cp_parser_exception_declaration (parser);
19784   finish_handler_parms (declaration, handler);
19785   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19786   cp_parser_compound_statement (parser, NULL, false, false);
19787   finish_handler (handler);
19788 }
19789 
19790 /* Parse an exception-declaration.
19791 
19792    exception-declaration:
19793      type-specifier-seq declarator
19794      type-specifier-seq abstract-declarator
19795      type-specifier-seq
19796      ...
19797 
19798    Returns a VAR_DECL for the declaration, or NULL_TREE if the
19799    ellipsis variant is used.  */
19800 
19801 static tree
19802 cp_parser_exception_declaration (cp_parser* parser)
19803 {
19804   cp_decl_specifier_seq type_specifiers;
19805   cp_declarator *declarator;
19806   const char *saved_message;
19807 
19808   /* If it's an ellipsis, it's easy to handle.  */
19809   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
19810     {
19811       /* Consume the `...' token.  */
19812       cp_lexer_consume_token (parser->lexer);
19813       return NULL_TREE;
19814     }
19815 
19816   /* Types may not be defined in exception-declarations.  */
19817   saved_message = parser->type_definition_forbidden_message;
19818   parser->type_definition_forbidden_message
19819     = G_("types may not be defined in exception-declarations");
19820 
19821   /* Parse the type-specifier-seq.  */
19822   cp_parser_type_specifier_seq (parser, /*is_declaration=*/true,
19823 				/*is_trailing_return=*/false,
19824 				&type_specifiers);
19825   /* If it's a `)', then there is no declarator.  */
19826   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
19827     declarator = NULL;
19828   else
19829     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
19830 				       /*ctor_dtor_or_conv_p=*/NULL,
19831 				       /*parenthesized_p=*/NULL,
19832 				       /*member_p=*/false);
19833 
19834   /* Restore the saved message.  */
19835   parser->type_definition_forbidden_message = saved_message;
19836 
19837   if (!type_specifiers.any_specifiers_p)
19838     return error_mark_node;
19839 
19840   return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
19841 }
19842 
19843 /* Parse a throw-expression.
19844 
19845    throw-expression:
19846      throw assignment-expression [opt]
19847 
19848    Returns a THROW_EXPR representing the throw-expression.  */
19849 
19850 static tree
19851 cp_parser_throw_expression (cp_parser* parser)
19852 {
19853   tree expression;
19854   cp_token* token;
19855 
19856   cp_parser_require_keyword (parser, RID_THROW, RT_THROW);
19857   token = cp_lexer_peek_token (parser->lexer);
19858   /* Figure out whether or not there is an assignment-expression
19859      following the "throw" keyword.  */
19860   if (token->type == CPP_COMMA
19861       || token->type == CPP_SEMICOLON
19862       || token->type == CPP_CLOSE_PAREN
19863       || token->type == CPP_CLOSE_SQUARE
19864       || token->type == CPP_CLOSE_BRACE
19865       || token->type == CPP_COLON)
19866     expression = NULL_TREE;
19867   else
19868     expression = cp_parser_assignment_expression (parser,
19869 						  /*cast_p=*/false, NULL);
19870 
19871   return build_throw (expression);
19872 }
19873 
19874 /* GNU Extensions */
19875 
19876 /* Parse an (optional) asm-specification.
19877 
19878    asm-specification:
19879      asm ( string-literal )
19880 
19881    If the asm-specification is present, returns a STRING_CST
19882    corresponding to the string-literal.  Otherwise, returns
19883    NULL_TREE.  */
19884 
19885 static tree
19886 cp_parser_asm_specification_opt (cp_parser* parser)
19887 {
19888   cp_token *token;
19889   tree asm_specification;
19890 
19891   /* Peek at the next token.  */
19892   token = cp_lexer_peek_token (parser->lexer);
19893   /* If the next token isn't the `asm' keyword, then there's no
19894      asm-specification.  */
19895   if (!cp_parser_is_keyword (token, RID_ASM))
19896     return NULL_TREE;
19897 
19898   /* Consume the `asm' token.  */
19899   cp_lexer_consume_token (parser->lexer);
19900   /* Look for the `('.  */
19901   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19902 
19903   /* Look for the string-literal.  */
19904   asm_specification = cp_parser_string_literal (parser, false, false);
19905 
19906   /* Look for the `)'.  */
19907   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19908 
19909   return asm_specification;
19910 }
19911 
19912 /* Parse an asm-operand-list.
19913 
19914    asm-operand-list:
19915      asm-operand
19916      asm-operand-list , asm-operand
19917 
19918    asm-operand:
19919      string-literal ( expression )
19920      [ string-literal ] string-literal ( expression )
19921 
19922    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
19923    each node is the expression.  The TREE_PURPOSE is itself a
19924    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
19925    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
19926    is a STRING_CST for the string literal before the parenthesis. Returns
19927    ERROR_MARK_NODE if any of the operands are invalid.  */
19928 
19929 static tree
19930 cp_parser_asm_operand_list (cp_parser* parser)
19931 {
19932   tree asm_operands = NULL_TREE;
19933   bool invalid_operands = false;
19934 
19935   while (true)
19936     {
19937       tree string_literal;
19938       tree expression;
19939       tree name;
19940 
19941       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
19942 	{
19943 	  /* Consume the `[' token.  */
19944 	  cp_lexer_consume_token (parser->lexer);
19945 	  /* Read the operand name.  */
19946 	  name = cp_parser_identifier (parser);
19947 	  if (name != error_mark_node)
19948 	    name = build_string (IDENTIFIER_LENGTH (name),
19949 				 IDENTIFIER_POINTER (name));
19950 	  /* Look for the closing `]'.  */
19951 	  cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
19952 	}
19953       else
19954 	name = NULL_TREE;
19955       /* Look for the string-literal.  */
19956       string_literal = cp_parser_string_literal (parser, false, false);
19957 
19958       /* Look for the `('.  */
19959       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19960       /* Parse the expression.  */
19961       expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
19962       /* Look for the `)'.  */
19963       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19964 
19965       if (name == error_mark_node
19966 	  || string_literal == error_mark_node
19967 	  || expression == error_mark_node)
19968         invalid_operands = true;
19969 
19970       /* Add this operand to the list.  */
19971       asm_operands = tree_cons (build_tree_list (name, string_literal),
19972 				expression,
19973 				asm_operands);
19974       /* If the next token is not a `,', there are no more
19975 	 operands.  */
19976       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
19977 	break;
19978       /* Consume the `,'.  */
19979       cp_lexer_consume_token (parser->lexer);
19980     }
19981 
19982   return invalid_operands ? error_mark_node : nreverse (asm_operands);
19983 }
19984 
19985 /* Parse an asm-clobber-list.
19986 
19987    asm-clobber-list:
19988      string-literal
19989      asm-clobber-list , string-literal
19990 
19991    Returns a TREE_LIST, indicating the clobbers in the order that they
19992    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
19993 
19994 static tree
19995 cp_parser_asm_clobber_list (cp_parser* parser)
19996 {
19997   tree clobbers = NULL_TREE;
19998 
19999   while (true)
20000     {
20001       tree string_literal;
20002 
20003       /* Look for the string literal.  */
20004       string_literal = cp_parser_string_literal (parser, false, false);
20005       /* Add it to the list.  */
20006       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
20007       /* If the next token is not a `,', then the list is
20008 	 complete.  */
20009       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
20010 	break;
20011       /* Consume the `,' token.  */
20012       cp_lexer_consume_token (parser->lexer);
20013     }
20014 
20015   return clobbers;
20016 }
20017 
20018 /* Parse an asm-label-list.
20019 
20020    asm-label-list:
20021      identifier
20022      asm-label-list , identifier
20023 
20024    Returns a TREE_LIST, indicating the labels in the order that they
20025    appeared.  The TREE_VALUE of each node is a label.  */
20026 
20027 static tree
20028 cp_parser_asm_label_list (cp_parser* parser)
20029 {
20030   tree labels = NULL_TREE;
20031 
20032   while (true)
20033     {
20034       tree identifier, label, name;
20035 
20036       /* Look for the identifier.  */
20037       identifier = cp_parser_identifier (parser);
20038       if (!error_operand_p (identifier))
20039         {
20040 	  label = lookup_label (identifier);
20041 	  if (TREE_CODE (label) == LABEL_DECL)
20042 	    {
20043 	      TREE_USED (label) = 1;
20044 	      check_goto (label);
20045 	      name = build_string (IDENTIFIER_LENGTH (identifier),
20046 				   IDENTIFIER_POINTER (identifier));
20047 	      labels = tree_cons (name, label, labels);
20048 	    }
20049 	}
20050       /* If the next token is not a `,', then the list is
20051 	 complete.  */
20052       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
20053 	break;
20054       /* Consume the `,' token.  */
20055       cp_lexer_consume_token (parser->lexer);
20056     }
20057 
20058   return nreverse (labels);
20059 }
20060 
20061 /* Parse an (optional) series of attributes.
20062 
20063    attributes:
20064      attributes attribute
20065 
20066    attribute:
20067      __attribute__ (( attribute-list [opt] ))
20068 
20069    The return value is as for cp_parser_attribute_list.  */
20070 
20071 static tree
20072 cp_parser_attributes_opt (cp_parser* parser)
20073 {
20074   tree attributes = NULL_TREE;
20075 
20076   while (true)
20077     {
20078       cp_token *token;
20079       tree attribute_list;
20080 
20081       /* Peek at the next token.  */
20082       token = cp_lexer_peek_token (parser->lexer);
20083       /* If it's not `__attribute__', then we're done.  */
20084       if (token->keyword != RID_ATTRIBUTE)
20085 	break;
20086 
20087       /* Consume the `__attribute__' keyword.  */
20088       cp_lexer_consume_token (parser->lexer);
20089       /* Look for the two `(' tokens.  */
20090       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
20091       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
20092 
20093       /* Peek at the next token.  */
20094       token = cp_lexer_peek_token (parser->lexer);
20095       if (token->type != CPP_CLOSE_PAREN)
20096 	/* Parse the attribute-list.  */
20097 	attribute_list = cp_parser_attribute_list (parser);
20098       else
20099 	/* If the next token is a `)', then there is no attribute
20100 	   list.  */
20101 	attribute_list = NULL;
20102 
20103       /* Look for the two `)' tokens.  */
20104       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
20105       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
20106 
20107       /* Add these new attributes to the list.  */
20108       attributes = chainon (attributes, attribute_list);
20109     }
20110 
20111   return attributes;
20112 }
20113 
20114 /* Parse an attribute-list.
20115 
20116    attribute-list:
20117      attribute
20118      attribute-list , attribute
20119 
20120    attribute:
20121      identifier
20122      identifier ( identifier )
20123      identifier ( identifier , expression-list )
20124      identifier ( expression-list )
20125 
20126    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
20127    to an attribute.  The TREE_PURPOSE of each node is the identifier
20128    indicating which attribute is in use.  The TREE_VALUE represents
20129    the arguments, if any.  */
20130 
20131 static tree
20132 cp_parser_attribute_list (cp_parser* parser)
20133 {
20134   tree attribute_list = NULL_TREE;
20135   bool save_translate_strings_p = parser->translate_strings_p;
20136 
20137   parser->translate_strings_p = false;
20138   while (true)
20139     {
20140       cp_token *token;
20141       tree identifier;
20142       tree attribute;
20143 
20144       /* Look for the identifier.  We also allow keywords here; for
20145 	 example `__attribute__ ((const))' is legal.  */
20146       token = cp_lexer_peek_token (parser->lexer);
20147       if (token->type == CPP_NAME
20148 	  || token->type == CPP_KEYWORD)
20149 	{
20150 	  tree arguments = NULL_TREE;
20151 
20152 	  /* Consume the token.  */
20153 	  token = cp_lexer_consume_token (parser->lexer);
20154 
20155 	  /* Save away the identifier that indicates which attribute
20156 	     this is.  */
20157 	  identifier = (token->type == CPP_KEYWORD)
20158 	    /* For keywords, use the canonical spelling, not the
20159 	       parsed identifier.  */
20160 	    ? ridpointers[(int) token->keyword]
20161 	    : token->u.value;
20162 
20163 	  attribute = build_tree_list (identifier, NULL_TREE);
20164 
20165 	  /* Peek at the next token.  */
20166 	  token = cp_lexer_peek_token (parser->lexer);
20167 	  /* If it's an `(', then parse the attribute arguments.  */
20168 	  if (token->type == CPP_OPEN_PAREN)
20169 	    {
20170 	      VEC(tree,gc) *vec;
20171 	      int attr_flag = (attribute_takes_identifier_p (identifier)
20172 			       ? id_attr : normal_attr);
20173 	      vec = cp_parser_parenthesized_expression_list
20174 		    (parser, attr_flag, /*cast_p=*/false,
20175 		     /*allow_expansion_p=*/false,
20176 		     /*non_constant_p=*/NULL);
20177 	      if (vec == NULL)
20178 		arguments = error_mark_node;
20179 	      else
20180 		{
20181 		  arguments = build_tree_list_vec (vec);
20182 		  release_tree_vector (vec);
20183 		}
20184 	      /* Save the arguments away.  */
20185 	      TREE_VALUE (attribute) = arguments;
20186 	    }
20187 
20188 	  if (arguments != error_mark_node)
20189 	    {
20190 	      /* Add this attribute to the list.  */
20191 	      TREE_CHAIN (attribute) = attribute_list;
20192 	      attribute_list = attribute;
20193 	    }
20194 
20195 	  token = cp_lexer_peek_token (parser->lexer);
20196 	}
20197       /* Now, look for more attributes.  If the next token isn't a
20198 	 `,', we're done.  */
20199       if (token->type != CPP_COMMA)
20200 	break;
20201 
20202       /* Consume the comma and keep going.  */
20203       cp_lexer_consume_token (parser->lexer);
20204     }
20205   parser->translate_strings_p = save_translate_strings_p;
20206 
20207   /* We built up the list in reverse order.  */
20208   return nreverse (attribute_list);
20209 }
20210 
20211 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
20212    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
20213    current value of the PEDANTIC flag, regardless of whether or not
20214    the `__extension__' keyword is present.  The caller is responsible
20215    for restoring the value of the PEDANTIC flag.  */
20216 
20217 static bool
20218 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
20219 {
20220   /* Save the old value of the PEDANTIC flag.  */
20221   *saved_pedantic = pedantic;
20222 
20223   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
20224     {
20225       /* Consume the `__extension__' token.  */
20226       cp_lexer_consume_token (parser->lexer);
20227       /* We're not being pedantic while the `__extension__' keyword is
20228 	 in effect.  */
20229       pedantic = 0;
20230 
20231       return true;
20232     }
20233 
20234   return false;
20235 }
20236 
20237 /* Parse a label declaration.
20238 
20239    label-declaration:
20240      __label__ label-declarator-seq ;
20241 
20242    label-declarator-seq:
20243      identifier , label-declarator-seq
20244      identifier  */
20245 
20246 static void
20247 cp_parser_label_declaration (cp_parser* parser)
20248 {
20249   /* Look for the `__label__' keyword.  */
20250   cp_parser_require_keyword (parser, RID_LABEL, RT_LABEL);
20251 
20252   while (true)
20253     {
20254       tree identifier;
20255 
20256       /* Look for an identifier.  */
20257       identifier = cp_parser_identifier (parser);
20258       /* If we failed, stop.  */
20259       if (identifier == error_mark_node)
20260 	break;
20261       /* Declare it as a label.  */
20262       finish_label_decl (identifier);
20263       /* If the next token is a `;', stop.  */
20264       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
20265 	break;
20266       /* Look for the `,' separating the label declarations.  */
20267       cp_parser_require (parser, CPP_COMMA, RT_COMMA);
20268     }
20269 
20270   /* Look for the final `;'.  */
20271   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
20272 }
20273 
20274 /* Support Functions */
20275 
20276 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
20277    NAME should have one of the representations used for an
20278    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
20279    is returned.  If PARSER->SCOPE is a dependent type, then a
20280    SCOPE_REF is returned.
20281 
20282    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
20283    returned; the name was already resolved when the TEMPLATE_ID_EXPR
20284    was formed.  Abstractly, such entities should not be passed to this
20285    function, because they do not need to be looked up, but it is
20286    simpler to check for this special case here, rather than at the
20287    call-sites.
20288 
20289    In cases not explicitly covered above, this function returns a
20290    DECL, OVERLOAD, or baselink representing the result of the lookup.
20291    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
20292    is returned.
20293 
20294    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
20295    (e.g., "struct") that was used.  In that case bindings that do not
20296    refer to types are ignored.
20297 
20298    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
20299    ignored.
20300 
20301    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
20302    are ignored.
20303 
20304    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
20305    types.
20306 
20307    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
20308    TREE_LIST of candidates if name-lookup results in an ambiguity, and
20309    NULL_TREE otherwise.  */
20310 
20311 static tree
20312 cp_parser_lookup_name (cp_parser *parser, tree name,
20313 		       enum tag_types tag_type,
20314 		       bool is_template,
20315 		       bool is_namespace,
20316 		       bool check_dependency,
20317 		       tree *ambiguous_decls,
20318 		       location_t name_location)
20319 {
20320   int flags = 0;
20321   tree decl;
20322   tree object_type = parser->context->object_type;
20323 
20324   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
20325     flags |= LOOKUP_COMPLAIN;
20326 
20327   /* Assume that the lookup will be unambiguous.  */
20328   if (ambiguous_decls)
20329     *ambiguous_decls = NULL_TREE;
20330 
20331   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
20332      no longer valid.  Note that if we are parsing tentatively, and
20333      the parse fails, OBJECT_TYPE will be automatically restored.  */
20334   parser->context->object_type = NULL_TREE;
20335 
20336   if (name == error_mark_node)
20337     return error_mark_node;
20338 
20339   /* A template-id has already been resolved; there is no lookup to
20340      do.  */
20341   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
20342     return name;
20343   if (BASELINK_P (name))
20344     {
20345       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
20346 		  == TEMPLATE_ID_EXPR);
20347       return name;
20348     }
20349 
20350   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
20351      it should already have been checked to make sure that the name
20352      used matches the type being destroyed.  */
20353   if (TREE_CODE (name) == BIT_NOT_EXPR)
20354     {
20355       tree type;
20356 
20357       /* Figure out to which type this destructor applies.  */
20358       if (parser->scope)
20359 	type = parser->scope;
20360       else if (object_type)
20361 	type = object_type;
20362       else
20363 	type = current_class_type;
20364       /* If that's not a class type, there is no destructor.  */
20365       if (!type || !CLASS_TYPE_P (type))
20366 	return error_mark_node;
20367       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
20368 	lazily_declare_fn (sfk_destructor, type);
20369       if (!CLASSTYPE_DESTRUCTORS (type))
20370 	  return error_mark_node;
20371       /* If it was a class type, return the destructor.  */
20372       return CLASSTYPE_DESTRUCTORS (type);
20373     }
20374 
20375   /* By this point, the NAME should be an ordinary identifier.  If
20376      the id-expression was a qualified name, the qualifying scope is
20377      stored in PARSER->SCOPE at this point.  */
20378   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
20379 
20380   /* Perform the lookup.  */
20381   if (parser->scope)
20382     {
20383       bool dependent_p;
20384 
20385       if (parser->scope == error_mark_node)
20386 	return error_mark_node;
20387 
20388       /* If the SCOPE is dependent, the lookup must be deferred until
20389 	 the template is instantiated -- unless we are explicitly
20390 	 looking up names in uninstantiated templates.  Even then, we
20391 	 cannot look up the name if the scope is not a class type; it
20392 	 might, for example, be a template type parameter.  */
20393       dependent_p = (TYPE_P (parser->scope)
20394 		     && dependent_scope_p (parser->scope));
20395       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
20396 	  && dependent_p)
20397 	/* Defer lookup.  */
20398 	decl = error_mark_node;
20399       else
20400 	{
20401 	  tree pushed_scope = NULL_TREE;
20402 
20403 	  /* If PARSER->SCOPE is a dependent type, then it must be a
20404 	     class type, and we must not be checking dependencies;
20405 	     otherwise, we would have processed this lookup above.  So
20406 	     that PARSER->SCOPE is not considered a dependent base by
20407 	     lookup_member, we must enter the scope here.  */
20408 	  if (dependent_p)
20409 	    pushed_scope = push_scope (parser->scope);
20410 
20411 	  /* If the PARSER->SCOPE is a template specialization, it
20412 	     may be instantiated during name lookup.  In that case,
20413 	     errors may be issued.  Even if we rollback the current
20414 	     tentative parse, those errors are valid.  */
20415 	  decl = lookup_qualified_name (parser->scope, name,
20416 					tag_type != none_type,
20417 					/*complain=*/true);
20418 
20419 	  /* 3.4.3.1: In a lookup in which the constructor is an acceptable
20420 	     lookup result and the nested-name-specifier nominates a class C:
20421 	       * if the name specified after the nested-name-specifier, when
20422 	       looked up in C, is the injected-class-name of C (Clause 9), or
20423 	       * if the name specified after the nested-name-specifier is the
20424 	       same as the identifier or the simple-template-id's template-
20425 	       name in the last component of the nested-name-specifier,
20426 	     the name is instead considered to name the constructor of
20427 	     class C. [ Note: for example, the constructor is not an
20428 	     acceptable lookup result in an elaborated-type-specifier so
20429 	     the constructor would not be used in place of the
20430 	     injected-class-name. --end note ] Such a constructor name
20431 	     shall be used only in the declarator-id of a declaration that
20432 	     names a constructor or in a using-declaration.  */
20433 	  if (tag_type == none_type
20434 	      && DECL_SELF_REFERENCE_P (decl)
20435 	      && same_type_p (DECL_CONTEXT (decl), parser->scope))
20436 	    decl = lookup_qualified_name (parser->scope, ctor_identifier,
20437 					  tag_type != none_type,
20438 					  /*complain=*/true);
20439 
20440 	  /* If we have a single function from a using decl, pull it out.  */
20441 	  if (TREE_CODE (decl) == OVERLOAD
20442 	      && !really_overloaded_fn (decl))
20443 	    decl = OVL_FUNCTION (decl);
20444 
20445 	  if (pushed_scope)
20446 	    pop_scope (pushed_scope);
20447 	}
20448 
20449       /* If the scope is a dependent type and either we deferred lookup or
20450 	 we did lookup but didn't find the name, rememeber the name.  */
20451       if (decl == error_mark_node && TYPE_P (parser->scope)
20452 	  && dependent_type_p (parser->scope))
20453 	{
20454 	  if (tag_type)
20455 	    {
20456 	      tree type;
20457 
20458 	      /* The resolution to Core Issue 180 says that `struct
20459 		 A::B' should be considered a type-name, even if `A'
20460 		 is dependent.  */
20461 	      type = make_typename_type (parser->scope, name, tag_type,
20462 					 /*complain=*/tf_error);
20463 	      decl = TYPE_NAME (type);
20464 	    }
20465 	  else if (is_template
20466 		   && (cp_parser_next_token_ends_template_argument_p (parser)
20467 		       || cp_lexer_next_token_is (parser->lexer,
20468 						  CPP_CLOSE_PAREN)))
20469 	    decl = make_unbound_class_template (parser->scope,
20470 						name, NULL_TREE,
20471 						/*complain=*/tf_error);
20472 	  else
20473 	    decl = build_qualified_name (/*type=*/NULL_TREE,
20474 					 parser->scope, name,
20475 					 is_template);
20476 	}
20477       parser->qualifying_scope = parser->scope;
20478       parser->object_scope = NULL_TREE;
20479     }
20480   else if (object_type)
20481     {
20482       tree object_decl = NULL_TREE;
20483       /* Look up the name in the scope of the OBJECT_TYPE, unless the
20484 	 OBJECT_TYPE is not a class.  */
20485       if (CLASS_TYPE_P (object_type))
20486 	/* If the OBJECT_TYPE is a template specialization, it may
20487 	   be instantiated during name lookup.  In that case, errors
20488 	   may be issued.  Even if we rollback the current tentative
20489 	   parse, those errors are valid.  */
20490 	object_decl = lookup_member (object_type,
20491 				     name,
20492 				     /*protect=*/0,
20493 				     tag_type != none_type,
20494 				     tf_warning_or_error);
20495       /* Look it up in the enclosing context, too.  */
20496       decl = lookup_name_real (name, tag_type != none_type,
20497 			       /*nonclass=*/0,
20498 			       /*block_p=*/true, is_namespace, flags);
20499       parser->object_scope = object_type;
20500       parser->qualifying_scope = NULL_TREE;
20501       if (object_decl)
20502 	decl = object_decl;
20503     }
20504   else
20505     {
20506       decl = lookup_name_real (name, tag_type != none_type,
20507 			       /*nonclass=*/0,
20508 			       /*block_p=*/true, is_namespace, flags);
20509       parser->qualifying_scope = NULL_TREE;
20510       parser->object_scope = NULL_TREE;
20511     }
20512 
20513   /* If the lookup failed, let our caller know.  */
20514   if (!decl || decl == error_mark_node)
20515     return error_mark_node;
20516 
20517   /* Pull out the template from an injected-class-name (or multiple).  */
20518   if (is_template)
20519     decl = maybe_get_template_decl_from_type_decl (decl);
20520 
20521   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
20522   if (TREE_CODE (decl) == TREE_LIST)
20523     {
20524       if (ambiguous_decls)
20525 	*ambiguous_decls = decl;
20526       /* The error message we have to print is too complicated for
20527 	 cp_parser_error, so we incorporate its actions directly.  */
20528       if (!cp_parser_simulate_error (parser))
20529 	{
20530 	  error_at (name_location, "reference to %qD is ambiguous",
20531 		    name);
20532 	  print_candidates (decl);
20533 	}
20534       return error_mark_node;
20535     }
20536 
20537   gcc_assert (DECL_P (decl)
20538 	      || TREE_CODE (decl) == OVERLOAD
20539 	      || TREE_CODE (decl) == SCOPE_REF
20540 	      || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
20541 	      || BASELINK_P (decl));
20542 
20543   /* If we have resolved the name of a member declaration, check to
20544      see if the declaration is accessible.  When the name resolves to
20545      set of overloaded functions, accessibility is checked when
20546      overload resolution is done.
20547 
20548      During an explicit instantiation, access is not checked at all,
20549      as per [temp.explicit].  */
20550   if (DECL_P (decl))
20551     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
20552 
20553   maybe_record_typedef_use (decl);
20554 
20555   return decl;
20556 }
20557 
20558 /* Like cp_parser_lookup_name, but for use in the typical case where
20559    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
20560    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
20561 
20562 static tree
20563 cp_parser_lookup_name_simple (cp_parser* parser, tree name, location_t location)
20564 {
20565   return cp_parser_lookup_name (parser, name,
20566 				none_type,
20567 				/*is_template=*/false,
20568 				/*is_namespace=*/false,
20569 				/*check_dependency=*/true,
20570 				/*ambiguous_decls=*/NULL,
20571 				location);
20572 }
20573 
20574 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
20575    the current context, return the TYPE_DECL.  If TAG_NAME_P is
20576    true, the DECL indicates the class being defined in a class-head,
20577    or declared in an elaborated-type-specifier.
20578 
20579    Otherwise, return DECL.  */
20580 
20581 static tree
20582 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
20583 {
20584   /* If the TEMPLATE_DECL is being declared as part of a class-head,
20585      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
20586 
20587        struct A {
20588 	 template <typename T> struct B;
20589        };
20590 
20591        template <typename T> struct A::B {};
20592 
20593      Similarly, in an elaborated-type-specifier:
20594 
20595        namespace N { struct X{}; }
20596 
20597        struct A {
20598 	 template <typename T> friend struct N::X;
20599        };
20600 
20601      However, if the DECL refers to a class type, and we are in
20602      the scope of the class, then the name lookup automatically
20603      finds the TYPE_DECL created by build_self_reference rather
20604      than a TEMPLATE_DECL.  For example, in:
20605 
20606        template <class T> struct S {
20607 	 S s;
20608        };
20609 
20610      there is no need to handle such case.  */
20611 
20612   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
20613     return DECL_TEMPLATE_RESULT (decl);
20614 
20615   return decl;
20616 }
20617 
20618 /* If too many, or too few, template-parameter lists apply to the
20619    declarator, issue an error message.  Returns TRUE if all went well,
20620    and FALSE otherwise.  */
20621 
20622 static bool
20623 cp_parser_check_declarator_template_parameters (cp_parser* parser,
20624 						cp_declarator *declarator,
20625 						location_t declarator_location)
20626 {
20627   unsigned num_templates;
20628 
20629   /* We haven't seen any classes that involve template parameters yet.  */
20630   num_templates = 0;
20631 
20632   switch (declarator->kind)
20633     {
20634     case cdk_id:
20635       if (declarator->u.id.qualifying_scope)
20636 	{
20637 	  tree scope;
20638 
20639 	  scope = declarator->u.id.qualifying_scope;
20640 
20641 	  while (scope && CLASS_TYPE_P (scope))
20642 	    {
20643 	      /* You're supposed to have one `template <...>'
20644 		 for every template class, but you don't need one
20645 		 for a full specialization.  For example:
20646 
20647 		 template <class T> struct S{};
20648 		 template <> struct S<int> { void f(); };
20649 		 void S<int>::f () {}
20650 
20651 		 is correct; there shouldn't be a `template <>' for
20652 		 the definition of `S<int>::f'.  */
20653 	      if (!CLASSTYPE_TEMPLATE_INFO (scope))
20654 		/* If SCOPE does not have template information of any
20655 		   kind, then it is not a template, nor is it nested
20656 		   within a template.  */
20657 		break;
20658 	      if (explicit_class_specialization_p (scope))
20659 		break;
20660 	      if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
20661 		++num_templates;
20662 
20663 	      scope = TYPE_CONTEXT (scope);
20664 	    }
20665 	}
20666       else if (TREE_CODE (declarator->u.id.unqualified_name)
20667 	       == TEMPLATE_ID_EXPR)
20668 	/* If the DECLARATOR has the form `X<y>' then it uses one
20669 	   additional level of template parameters.  */
20670 	++num_templates;
20671 
20672       return cp_parser_check_template_parameters
20673 	(parser, num_templates, declarator_location, declarator);
20674 
20675 
20676     case cdk_function:
20677     case cdk_array:
20678     case cdk_pointer:
20679     case cdk_reference:
20680     case cdk_ptrmem:
20681       return (cp_parser_check_declarator_template_parameters
20682 	      (parser, declarator->declarator, declarator_location));
20683 
20684     case cdk_error:
20685       return true;
20686 
20687     default:
20688       gcc_unreachable ();
20689     }
20690   return false;
20691 }
20692 
20693 /* NUM_TEMPLATES were used in the current declaration.  If that is
20694    invalid, return FALSE and issue an error messages.  Otherwise,
20695    return TRUE.  If DECLARATOR is non-NULL, then we are checking a
20696    declarator and we can print more accurate diagnostics.  */
20697 
20698 static bool
20699 cp_parser_check_template_parameters (cp_parser* parser,
20700 				     unsigned num_templates,
20701 				     location_t location,
20702 				     cp_declarator *declarator)
20703 {
20704   /* If there are the same number of template classes and parameter
20705      lists, that's OK.  */
20706   if (parser->num_template_parameter_lists == num_templates)
20707     return true;
20708   /* If there are more, but only one more, then we are referring to a
20709      member template.  That's OK too.  */
20710   if (parser->num_template_parameter_lists == num_templates + 1)
20711     return true;
20712   /* If there are more template classes than parameter lists, we have
20713      something like:
20714 
20715        template <class T> void S<T>::R<T>::f ();  */
20716   if (parser->num_template_parameter_lists < num_templates)
20717     {
20718       if (declarator && !current_function_decl)
20719 	error_at (location, "specializing member %<%T::%E%> "
20720 		  "requires %<template<>%> syntax",
20721 		  declarator->u.id.qualifying_scope,
20722 		  declarator->u.id.unqualified_name);
20723       else if (declarator)
20724 	error_at (location, "invalid declaration of %<%T::%E%>",
20725 		  declarator->u.id.qualifying_scope,
20726 		  declarator->u.id.unqualified_name);
20727       else
20728 	error_at (location, "too few template-parameter-lists");
20729       return false;
20730     }
20731   /* Otherwise, there are too many template parameter lists.  We have
20732      something like:
20733 
20734      template <class T> template <class U> void S::f();  */
20735   error_at (location, "too many template-parameter-lists");
20736   return false;
20737 }
20738 
20739 /* Parse an optional `::' token indicating that the following name is
20740    from the global namespace.  If so, PARSER->SCOPE is set to the
20741    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
20742    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
20743    Returns the new value of PARSER->SCOPE, if the `::' token is
20744    present, and NULL_TREE otherwise.  */
20745 
20746 static tree
20747 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
20748 {
20749   cp_token *token;
20750 
20751   /* Peek at the next token.  */
20752   token = cp_lexer_peek_token (parser->lexer);
20753   /* If we're looking at a `::' token then we're starting from the
20754      global namespace, not our current location.  */
20755   if (token->type == CPP_SCOPE)
20756     {
20757       /* Consume the `::' token.  */
20758       cp_lexer_consume_token (parser->lexer);
20759       /* Set the SCOPE so that we know where to start the lookup.  */
20760       parser->scope = global_namespace;
20761       parser->qualifying_scope = global_namespace;
20762       parser->object_scope = NULL_TREE;
20763 
20764       return parser->scope;
20765     }
20766   else if (!current_scope_valid_p)
20767     {
20768       parser->scope = NULL_TREE;
20769       parser->qualifying_scope = NULL_TREE;
20770       parser->object_scope = NULL_TREE;
20771     }
20772 
20773   return NULL_TREE;
20774 }
20775 
20776 /* Returns TRUE if the upcoming token sequence is the start of a
20777    constructor declarator.  If FRIEND_P is true, the declarator is
20778    preceded by the `friend' specifier.  */
20779 
20780 static bool
20781 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
20782 {
20783   bool constructor_p;
20784   tree nested_name_specifier;
20785   cp_token *next_token;
20786 
20787   /* The common case is that this is not a constructor declarator, so
20788      try to avoid doing lots of work if at all possible.  It's not
20789      valid declare a constructor at function scope.  */
20790   if (parser->in_function_body)
20791     return false;
20792   /* And only certain tokens can begin a constructor declarator.  */
20793   next_token = cp_lexer_peek_token (parser->lexer);
20794   if (next_token->type != CPP_NAME
20795       && next_token->type != CPP_SCOPE
20796       && next_token->type != CPP_NESTED_NAME_SPECIFIER
20797       && next_token->type != CPP_TEMPLATE_ID)
20798     return false;
20799 
20800   /* Parse tentatively; we are going to roll back all of the tokens
20801      consumed here.  */
20802   cp_parser_parse_tentatively (parser);
20803   /* Assume that we are looking at a constructor declarator.  */
20804   constructor_p = true;
20805 
20806   /* Look for the optional `::' operator.  */
20807   cp_parser_global_scope_opt (parser,
20808 			      /*current_scope_valid_p=*/false);
20809   /* Look for the nested-name-specifier.  */
20810   nested_name_specifier
20811     = (cp_parser_nested_name_specifier_opt (parser,
20812 					    /*typename_keyword_p=*/false,
20813 					    /*check_dependency_p=*/false,
20814 					    /*type_p=*/false,
20815 					    /*is_declaration=*/false));
20816   /* Outside of a class-specifier, there must be a
20817      nested-name-specifier.  */
20818   if (!nested_name_specifier &&
20819       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
20820        || friend_p))
20821     constructor_p = false;
20822   else if (nested_name_specifier == error_mark_node)
20823     constructor_p = false;
20824 
20825   /* If we have a class scope, this is easy; DR 147 says that S::S always
20826      names the constructor, and no other qualified name could.  */
20827   if (constructor_p && nested_name_specifier
20828       && CLASS_TYPE_P (nested_name_specifier))
20829     {
20830       tree id = cp_parser_unqualified_id (parser,
20831 					  /*template_keyword_p=*/false,
20832 					  /*check_dependency_p=*/false,
20833 					  /*declarator_p=*/true,
20834 					  /*optional_p=*/false);
20835       if (is_overloaded_fn (id))
20836 	id = DECL_NAME (get_first_fn (id));
20837       if (!constructor_name_p (id, nested_name_specifier))
20838 	constructor_p = false;
20839     }
20840   /* If we still think that this might be a constructor-declarator,
20841      look for a class-name.  */
20842   else if (constructor_p)
20843     {
20844       /* If we have:
20845 
20846 	   template <typename T> struct S {
20847 	     S();
20848 	   };
20849 
20850 	 we must recognize that the nested `S' names a class.  */
20851       tree type_decl;
20852       type_decl = cp_parser_class_name (parser,
20853 					/*typename_keyword_p=*/false,
20854 					/*template_keyword_p=*/false,
20855 					none_type,
20856 					/*check_dependency_p=*/false,
20857 					/*class_head_p=*/false,
20858 					/*is_declaration=*/false);
20859       /* If there was no class-name, then this is not a constructor.  */
20860       constructor_p = !cp_parser_error_occurred (parser);
20861 
20862       /* If we're still considering a constructor, we have to see a `(',
20863 	 to begin the parameter-declaration-clause, followed by either a
20864 	 `)', an `...', or a decl-specifier.  We need to check for a
20865 	 type-specifier to avoid being fooled into thinking that:
20866 
20867 	   S (f) (int);
20868 
20869 	 is a constructor.  (It is actually a function named `f' that
20870 	 takes one parameter (of type `int') and returns a value of type
20871 	 `S'.  */
20872       if (constructor_p
20873 	  && !cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
20874 	constructor_p = false;
20875 
20876       if (constructor_p
20877 	  && cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
20878 	  && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
20879 	  /* A parameter declaration begins with a decl-specifier,
20880 	     which is either the "attribute" keyword, a storage class
20881 	     specifier, or (usually) a type-specifier.  */
20882 	  && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
20883 	{
20884 	  tree type;
20885 	  tree pushed_scope = NULL_TREE;
20886 	  unsigned saved_num_template_parameter_lists;
20887 
20888 	  /* Names appearing in the type-specifier should be looked up
20889 	     in the scope of the class.  */
20890 	  if (current_class_type)
20891 	    type = NULL_TREE;
20892 	  else
20893 	    {
20894 	      type = TREE_TYPE (type_decl);
20895 	      if (TREE_CODE (type) == TYPENAME_TYPE)
20896 		{
20897 		  type = resolve_typename_type (type,
20898 						/*only_current_p=*/false);
20899 		  if (TREE_CODE (type) == TYPENAME_TYPE)
20900 		    {
20901 		      cp_parser_abort_tentative_parse (parser);
20902 		      return false;
20903 		    }
20904 		}
20905 	      pushed_scope = push_scope (type);
20906 	    }
20907 
20908 	  /* Inside the constructor parameter list, surrounding
20909 	     template-parameter-lists do not apply.  */
20910 	  saved_num_template_parameter_lists
20911 	    = parser->num_template_parameter_lists;
20912 	  parser->num_template_parameter_lists = 0;
20913 
20914 	  /* Look for the type-specifier.  */
20915 	  cp_parser_type_specifier (parser,
20916 				    CP_PARSER_FLAGS_NONE,
20917 				    /*decl_specs=*/NULL,
20918 				    /*is_declarator=*/true,
20919 				    /*declares_class_or_enum=*/NULL,
20920 				    /*is_cv_qualifier=*/NULL);
20921 
20922 	  parser->num_template_parameter_lists
20923 	    = saved_num_template_parameter_lists;
20924 
20925 	  /* Leave the scope of the class.  */
20926 	  if (pushed_scope)
20927 	    pop_scope (pushed_scope);
20928 
20929 	  constructor_p = !cp_parser_error_occurred (parser);
20930 	}
20931     }
20932 
20933   /* We did not really want to consume any tokens.  */
20934   cp_parser_abort_tentative_parse (parser);
20935 
20936   return constructor_p;
20937 }
20938 
20939 /* Parse the definition of the function given by the DECL_SPECIFIERS,
20940    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
20941    they must be performed once we are in the scope of the function.
20942 
20943    Returns the function defined.  */
20944 
20945 static tree
20946 cp_parser_function_definition_from_specifiers_and_declarator
20947   (cp_parser* parser,
20948    cp_decl_specifier_seq *decl_specifiers,
20949    tree attributes,
20950    const cp_declarator *declarator)
20951 {
20952   tree fn;
20953   bool success_p;
20954 
20955   /* Begin the function-definition.  */
20956   success_p = start_function (decl_specifiers, declarator, attributes);
20957 
20958   /* The things we're about to see are not directly qualified by any
20959      template headers we've seen thus far.  */
20960   reset_specialization ();
20961 
20962   /* If there were names looked up in the decl-specifier-seq that we
20963      did not check, check them now.  We must wait until we are in the
20964      scope of the function to perform the checks, since the function
20965      might be a friend.  */
20966   perform_deferred_access_checks ();
20967 
20968   if (!success_p)
20969     {
20970       /* Skip the entire function.  */
20971       cp_parser_skip_to_end_of_block_or_statement (parser);
20972       fn = error_mark_node;
20973     }
20974   else if (DECL_INITIAL (current_function_decl) != error_mark_node)
20975     {
20976       /* Seen already, skip it.  An error message has already been output.  */
20977       cp_parser_skip_to_end_of_block_or_statement (parser);
20978       fn = current_function_decl;
20979       current_function_decl = NULL_TREE;
20980       /* If this is a function from a class, pop the nested class.  */
20981       if (current_class_name)
20982 	pop_nested_class ();
20983     }
20984   else
20985     {
20986       timevar_id_t tv;
20987       if (DECL_DECLARED_INLINE_P (current_function_decl))
20988         tv = TV_PARSE_INLINE;
20989       else
20990         tv = TV_PARSE_FUNC;
20991       timevar_push (tv);
20992       fn = cp_parser_function_definition_after_declarator (parser,
20993 							 /*inline_p=*/false);
20994       timevar_pop (tv);
20995     }
20996 
20997   return fn;
20998 }
20999 
21000 /* Parse the part of a function-definition that follows the
21001    declarator.  INLINE_P is TRUE iff this function is an inline
21002    function defined within a class-specifier.
21003 
21004    Returns the function defined.  */
21005 
21006 static tree
21007 cp_parser_function_definition_after_declarator (cp_parser* parser,
21008 						bool inline_p)
21009 {
21010   tree fn;
21011   bool ctor_initializer_p = false;
21012   bool saved_in_unbraced_linkage_specification_p;
21013   bool saved_in_function_body;
21014   unsigned saved_num_template_parameter_lists;
21015   cp_token *token;
21016 
21017   saved_in_function_body = parser->in_function_body;
21018   parser->in_function_body = true;
21019   /* If the next token is `return', then the code may be trying to
21020      make use of the "named return value" extension that G++ used to
21021      support.  */
21022   token = cp_lexer_peek_token (parser->lexer);
21023   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
21024     {
21025       /* Consume the `return' keyword.  */
21026       cp_lexer_consume_token (parser->lexer);
21027       /* Look for the identifier that indicates what value is to be
21028 	 returned.  */
21029       cp_parser_identifier (parser);
21030       /* Issue an error message.  */
21031       error_at (token->location,
21032 		"named return values are no longer supported");
21033       /* Skip tokens until we reach the start of the function body.  */
21034       while (true)
21035 	{
21036 	  cp_token *token = cp_lexer_peek_token (parser->lexer);
21037 	  if (token->type == CPP_OPEN_BRACE
21038 	      || token->type == CPP_EOF
21039 	      || token->type == CPP_PRAGMA_EOL)
21040 	    break;
21041 	  cp_lexer_consume_token (parser->lexer);
21042 	}
21043     }
21044   /* The `extern' in `extern "C" void f () { ... }' does not apply to
21045      anything declared inside `f'.  */
21046   saved_in_unbraced_linkage_specification_p
21047     = parser->in_unbraced_linkage_specification_p;
21048   parser->in_unbraced_linkage_specification_p = false;
21049   /* Inside the function, surrounding template-parameter-lists do not
21050      apply.  */
21051   saved_num_template_parameter_lists
21052     = parser->num_template_parameter_lists;
21053   parser->num_template_parameter_lists = 0;
21054 
21055   start_lambda_scope (current_function_decl);
21056 
21057   /* If the next token is `try', `__transaction_atomic', or
21058      `__transaction_relaxed`, then we are looking at either function-try-block
21059      or function-transaction-block.  Note that all of these include the
21060      function-body.  */
21061   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRANSACTION_ATOMIC))
21062     ctor_initializer_p = cp_parser_function_transaction (parser,
21063 	RID_TRANSACTION_ATOMIC);
21064   else if (cp_lexer_next_token_is_keyword (parser->lexer,
21065       RID_TRANSACTION_RELAXED))
21066     ctor_initializer_p = cp_parser_function_transaction (parser,
21067 	RID_TRANSACTION_RELAXED);
21068   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
21069     ctor_initializer_p = cp_parser_function_try_block (parser);
21070   else
21071     ctor_initializer_p
21072       = cp_parser_ctor_initializer_opt_and_function_body (parser);
21073 
21074   finish_lambda_scope ();
21075 
21076   /* Finish the function.  */
21077   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
21078 			(inline_p ? 2 : 0));
21079   /* Generate code for it, if necessary.  */
21080   expand_or_defer_fn (fn);
21081   /* Restore the saved values.  */
21082   parser->in_unbraced_linkage_specification_p
21083     = saved_in_unbraced_linkage_specification_p;
21084   parser->num_template_parameter_lists
21085     = saved_num_template_parameter_lists;
21086   parser->in_function_body = saved_in_function_body;
21087 
21088   return fn;
21089 }
21090 
21091 /* Parse a template-declaration, assuming that the `export' (and
21092    `extern') keywords, if present, has already been scanned.  MEMBER_P
21093    is as for cp_parser_template_declaration.  */
21094 
21095 static void
21096 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
21097 {
21098   tree decl = NULL_TREE;
21099   VEC (deferred_access_check,gc) *checks;
21100   tree parameter_list;
21101   bool friend_p = false;
21102   bool need_lang_pop;
21103   cp_token *token;
21104 
21105   /* Look for the `template' keyword.  */
21106   token = cp_lexer_peek_token (parser->lexer);
21107   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE))
21108     return;
21109 
21110   /* And the `<'.  */
21111   if (!cp_parser_require (parser, CPP_LESS, RT_LESS))
21112     return;
21113   if (at_class_scope_p () && current_function_decl)
21114     {
21115       /* 14.5.2.2 [temp.mem]
21116 
21117          A local class shall not have member templates.  */
21118       error_at (token->location,
21119 		"invalid declaration of member template in local class");
21120       cp_parser_skip_to_end_of_block_or_statement (parser);
21121       return;
21122     }
21123   /* [temp]
21124 
21125      A template ... shall not have C linkage.  */
21126   if (current_lang_name == lang_name_c)
21127     {
21128       error_at (token->location, "template with C linkage");
21129       /* Give it C++ linkage to avoid confusing other parts of the
21130 	 front end.  */
21131       push_lang_context (lang_name_cplusplus);
21132       need_lang_pop = true;
21133     }
21134   else
21135     need_lang_pop = false;
21136 
21137   /* We cannot perform access checks on the template parameter
21138      declarations until we know what is being declared, just as we
21139      cannot check the decl-specifier list.  */
21140   push_deferring_access_checks (dk_deferred);
21141 
21142   /* If the next token is `>', then we have an invalid
21143      specialization.  Rather than complain about an invalid template
21144      parameter, issue an error message here.  */
21145   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
21146     {
21147       cp_parser_error (parser, "invalid explicit specialization");
21148       begin_specialization ();
21149       parameter_list = NULL_TREE;
21150     }
21151   else
21152     {
21153       /* Parse the template parameters.  */
21154       parameter_list = cp_parser_template_parameter_list (parser);
21155     }
21156 
21157   /* Get the deferred access checks from the parameter list.  These
21158      will be checked once we know what is being declared, as for a
21159      member template the checks must be performed in the scope of the
21160      class containing the member.  */
21161   checks = get_deferred_access_checks ();
21162 
21163   /* Look for the `>'.  */
21164   cp_parser_skip_to_end_of_template_parameter_list (parser);
21165   /* We just processed one more parameter list.  */
21166   ++parser->num_template_parameter_lists;
21167   /* If the next token is `template', there are more template
21168      parameters.  */
21169   if (cp_lexer_next_token_is_keyword (parser->lexer,
21170 				      RID_TEMPLATE))
21171     cp_parser_template_declaration_after_export (parser, member_p);
21172   else if (cxx_dialect >= cxx0x
21173 	   && cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
21174     decl = cp_parser_alias_declaration (parser);
21175   else
21176     {
21177       /* There are no access checks when parsing a template, as we do not
21178 	 know if a specialization will be a friend.  */
21179       push_deferring_access_checks (dk_no_check);
21180       token = cp_lexer_peek_token (parser->lexer);
21181       decl = cp_parser_single_declaration (parser,
21182 					   checks,
21183 					   member_p,
21184                                            /*explicit_specialization_p=*/false,
21185 					   &friend_p);
21186       pop_deferring_access_checks ();
21187 
21188       /* If this is a member template declaration, let the front
21189 	 end know.  */
21190       if (member_p && !friend_p && decl)
21191 	{
21192 	  if (TREE_CODE (decl) == TYPE_DECL)
21193 	    cp_parser_check_access_in_redeclaration (decl, token->location);
21194 
21195 	  decl = finish_member_template_decl (decl);
21196 	}
21197       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
21198 	make_friend_class (current_class_type, TREE_TYPE (decl),
21199 			   /*complain=*/true);
21200     }
21201   /* We are done with the current parameter list.  */
21202   --parser->num_template_parameter_lists;
21203 
21204   pop_deferring_access_checks ();
21205 
21206   /* Finish up.  */
21207   finish_template_decl (parameter_list);
21208 
21209   /* Check the template arguments for a literal operator template.  */
21210   if (decl
21211       && (TREE_CODE (decl) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (decl))
21212       && UDLIT_OPER_P (DECL_NAME (decl)))
21213     {
21214       bool ok = true;
21215       if (parameter_list == NULL_TREE)
21216 	ok = false;
21217       else
21218 	{
21219 	  int num_parms = TREE_VEC_LENGTH (parameter_list);
21220 	  if (num_parms != 1)
21221 	    ok = false;
21222 	  else
21223 	    {
21224 	      tree parm_list = TREE_VEC_ELT (parameter_list, 0);
21225 	      tree parm = INNERMOST_TEMPLATE_PARMS (parm_list);
21226 	      if (TREE_TYPE (parm) != char_type_node
21227 		  || !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
21228 		ok = false;
21229 	    }
21230 	}
21231       if (!ok)
21232 	error ("literal operator template %qD has invalid parameter list."
21233 	       "  Expected non-type template argument pack <char...>",
21234 	       decl);
21235     }
21236   /* Register member declarations.  */
21237   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
21238     finish_member_declaration (decl);
21239   /* For the erroneous case of a template with C linkage, we pushed an
21240      implicit C++ linkage scope; exit that scope now.  */
21241   if (need_lang_pop)
21242     pop_lang_context ();
21243   /* If DECL is a function template, we must return to parse it later.
21244      (Even though there is no definition, there might be default
21245      arguments that need handling.)  */
21246   if (member_p && decl
21247       && (TREE_CODE (decl) == FUNCTION_DECL
21248 	  || DECL_FUNCTION_TEMPLATE_P (decl)))
21249     VEC_safe_push (tree, gc, unparsed_funs_with_definitions, decl);
21250 }
21251 
21252 /* Perform the deferred access checks from a template-parameter-list.
21253    CHECKS is a TREE_LIST of access checks, as returned by
21254    get_deferred_access_checks.  */
21255 
21256 static void
21257 cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
21258 {
21259   ++processing_template_parmlist;
21260   perform_access_checks (checks);
21261   --processing_template_parmlist;
21262 }
21263 
21264 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
21265    `function-definition' sequence.  MEMBER_P is true, this declaration
21266    appears in a class scope.
21267 
21268    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
21269    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
21270 
21271 static tree
21272 cp_parser_single_declaration (cp_parser* parser,
21273 			      VEC (deferred_access_check,gc)* checks,
21274 			      bool member_p,
21275                               bool explicit_specialization_p,
21276 			      bool* friend_p)
21277 {
21278   int declares_class_or_enum;
21279   tree decl = NULL_TREE;
21280   cp_decl_specifier_seq decl_specifiers;
21281   bool function_definition_p = false;
21282   cp_token *decl_spec_token_start;
21283 
21284   /* This function is only used when processing a template
21285      declaration.  */
21286   gcc_assert (innermost_scope_kind () == sk_template_parms
21287 	      || innermost_scope_kind () == sk_template_spec);
21288 
21289   /* Defer access checks until we know what is being declared.  */
21290   push_deferring_access_checks (dk_deferred);
21291 
21292   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
21293      alternative.  */
21294   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
21295   cp_parser_decl_specifier_seq (parser,
21296 				CP_PARSER_FLAGS_OPTIONAL,
21297 				&decl_specifiers,
21298 				&declares_class_or_enum);
21299   if (friend_p)
21300     *friend_p = cp_parser_friend_p (&decl_specifiers);
21301 
21302   /* There are no template typedefs.  */
21303   if (decl_specifiers.specs[(int) ds_typedef])
21304     {
21305       error_at (decl_spec_token_start->location,
21306 		"template declaration of %<typedef%>");
21307       decl = error_mark_node;
21308     }
21309 
21310   /* Gather up the access checks that occurred the
21311      decl-specifier-seq.  */
21312   stop_deferring_access_checks ();
21313 
21314   /* Check for the declaration of a template class.  */
21315   if (declares_class_or_enum)
21316     {
21317       if (cp_parser_declares_only_class_p (parser))
21318 	{
21319 	  decl = shadow_tag (&decl_specifiers);
21320 
21321 	  /* In this case:
21322 
21323 	       struct C {
21324 		 friend template <typename T> struct A<T>::B;
21325 	       };
21326 
21327 	     A<T>::B will be represented by a TYPENAME_TYPE, and
21328 	     therefore not recognized by shadow_tag.  */
21329 	  if (friend_p && *friend_p
21330 	      && !decl
21331 	      && decl_specifiers.type
21332 	      && TYPE_P (decl_specifiers.type))
21333 	    decl = decl_specifiers.type;
21334 
21335 	  if (decl && decl != error_mark_node)
21336 	    decl = TYPE_NAME (decl);
21337 	  else
21338 	    decl = error_mark_node;
21339 
21340 	  /* Perform access checks for template parameters.  */
21341 	  cp_parser_perform_template_parameter_access_checks (checks);
21342 	}
21343     }
21344 
21345   /* Complain about missing 'typename' or other invalid type names.  */
21346   if (!decl_specifiers.any_type_specifiers_p
21347       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
21348     {
21349       /* cp_parser_parse_and_diagnose_invalid_type_name calls
21350 	 cp_parser_skip_to_end_of_block_or_statement, so don't try to parse
21351 	 the rest of this declaration.  */
21352       decl = error_mark_node;
21353       goto out;
21354     }
21355 
21356   /* If it's not a template class, try for a template function.  If
21357      the next token is a `;', then this declaration does not declare
21358      anything.  But, if there were errors in the decl-specifiers, then
21359      the error might well have come from an attempted class-specifier.
21360      In that case, there's no need to warn about a missing declarator.  */
21361   if (!decl
21362       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
21363 	  || decl_specifiers.type != error_mark_node))
21364     {
21365       decl = cp_parser_init_declarator (parser,
21366 				        &decl_specifiers,
21367 				        checks,
21368 				        /*function_definition_allowed_p=*/true,
21369 				        member_p,
21370 				        declares_class_or_enum,
21371 				        &function_definition_p,
21372 					NULL);
21373 
21374     /* 7.1.1-1 [dcl.stc]
21375 
21376        A storage-class-specifier shall not be specified in an explicit
21377        specialization...  */
21378     if (decl
21379         && explicit_specialization_p
21380         && decl_specifiers.storage_class != sc_none)
21381       {
21382         error_at (decl_spec_token_start->location,
21383 		  "explicit template specialization cannot have a storage class");
21384         decl = error_mark_node;
21385       }
21386     }
21387 
21388   /* Look for a trailing `;' after the declaration.  */
21389   if (!function_definition_p
21390       && (decl == error_mark_node
21391 	  || !cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON)))
21392     cp_parser_skip_to_end_of_block_or_statement (parser);
21393 
21394  out:
21395   pop_deferring_access_checks ();
21396 
21397   /* Clear any current qualification; whatever comes next is the start
21398      of something new.  */
21399   parser->scope = NULL_TREE;
21400   parser->qualifying_scope = NULL_TREE;
21401   parser->object_scope = NULL_TREE;
21402 
21403   return decl;
21404 }
21405 
21406 /* Parse a cast-expression that is not the operand of a unary "&".  */
21407 
21408 static tree
21409 cp_parser_simple_cast_expression (cp_parser *parser)
21410 {
21411   return cp_parser_cast_expression (parser, /*address_p=*/false,
21412 				    /*cast_p=*/false, NULL);
21413 }
21414 
21415 /* Parse a functional cast to TYPE.  Returns an expression
21416    representing the cast.  */
21417 
21418 static tree
21419 cp_parser_functional_cast (cp_parser* parser, tree type)
21420 {
21421   VEC(tree,gc) *vec;
21422   tree expression_list;
21423   tree cast;
21424   bool nonconst_p;
21425 
21426   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
21427     {
21428       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
21429       expression_list = cp_parser_braced_list (parser, &nonconst_p);
21430       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
21431       if (TREE_CODE (type) == TYPE_DECL)
21432 	type = TREE_TYPE (type);
21433       return finish_compound_literal (type, expression_list,
21434 				      tf_warning_or_error);
21435     }
21436 
21437 
21438   vec = cp_parser_parenthesized_expression_list (parser, non_attr,
21439 						 /*cast_p=*/true,
21440 						 /*allow_expansion_p=*/true,
21441 						 /*non_constant_p=*/NULL);
21442   if (vec == NULL)
21443     expression_list = error_mark_node;
21444   else
21445     {
21446       expression_list = build_tree_list_vec (vec);
21447       release_tree_vector (vec);
21448     }
21449 
21450   cast = build_functional_cast (type, expression_list,
21451                                 tf_warning_or_error);
21452   /* [expr.const]/1: In an integral constant expression "only type
21453      conversions to integral or enumeration type can be used".  */
21454   if (TREE_CODE (type) == TYPE_DECL)
21455     type = TREE_TYPE (type);
21456   if (cast != error_mark_node
21457       && !cast_valid_in_integral_constant_expression_p (type)
21458       && cp_parser_non_integral_constant_expression (parser,
21459 						     NIC_CONSTRUCTOR))
21460     return error_mark_node;
21461   return cast;
21462 }
21463 
21464 /* Save the tokens that make up the body of a member function defined
21465    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
21466    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
21467    specifiers applied to the declaration.  Returns the FUNCTION_DECL
21468    for the member function.  */
21469 
21470 static tree
21471 cp_parser_save_member_function_body (cp_parser* parser,
21472 				     cp_decl_specifier_seq *decl_specifiers,
21473 				     cp_declarator *declarator,
21474 				     tree attributes)
21475 {
21476   cp_token *first;
21477   cp_token *last;
21478   tree fn;
21479 
21480   /* Create the FUNCTION_DECL.  */
21481   fn = grokmethod (decl_specifiers, declarator, attributes);
21482   /* If something went badly wrong, bail out now.  */
21483   if (fn == error_mark_node)
21484     {
21485       /* If there's a function-body, skip it.  */
21486       if (cp_parser_token_starts_function_definition_p
21487 	  (cp_lexer_peek_token (parser->lexer)))
21488 	cp_parser_skip_to_end_of_block_or_statement (parser);
21489       return error_mark_node;
21490     }
21491 
21492   /* Remember it, if there default args to post process.  */
21493   cp_parser_save_default_args (parser, fn);
21494 
21495   /* Save away the tokens that make up the body of the
21496      function.  */
21497   first = parser->lexer->next_token;
21498   /* We can have braced-init-list mem-initializers before the fn body.  */
21499   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
21500     {
21501       cp_lexer_consume_token (parser->lexer);
21502       while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
21503 	     && cp_lexer_next_token_is_not_keyword (parser->lexer, RID_TRY))
21504 	{
21505 	  /* cache_group will stop after an un-nested { } pair, too.  */
21506 	  if (cp_parser_cache_group (parser, CPP_CLOSE_PAREN, /*depth=*/0))
21507 	    break;
21508 
21509 	  /* variadic mem-inits have ... after the ')'.  */
21510 	  if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
21511 	    cp_lexer_consume_token (parser->lexer);
21512 	}
21513     }
21514   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
21515   /* Handle function try blocks.  */
21516   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
21517     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
21518   last = parser->lexer->next_token;
21519 
21520   /* Save away the inline definition; we will process it when the
21521      class is complete.  */
21522   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
21523   DECL_PENDING_INLINE_P (fn) = 1;
21524 
21525   /* We need to know that this was defined in the class, so that
21526      friend templates are handled correctly.  */
21527   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
21528 
21529   /* Add FN to the queue of functions to be parsed later.  */
21530   VEC_safe_push (tree, gc, unparsed_funs_with_definitions, fn);
21531 
21532   return fn;
21533 }
21534 
21535 /* Save the tokens that make up the in-class initializer for a non-static
21536    data member.  Returns a DEFAULT_ARG.  */
21537 
21538 static tree
21539 cp_parser_save_nsdmi (cp_parser* parser)
21540 {
21541   return cp_parser_cache_defarg (parser, /*nsdmi=*/true);
21542 }
21543 
21544 /* Parse a template-argument-list, as well as the trailing ">" (but
21545    not the opening "<").  See cp_parser_template_argument_list for the
21546    return value.  */
21547 
21548 static tree
21549 cp_parser_enclosed_template_argument_list (cp_parser* parser)
21550 {
21551   tree arguments;
21552   tree saved_scope;
21553   tree saved_qualifying_scope;
21554   tree saved_object_scope;
21555   bool saved_greater_than_is_operator_p;
21556   int saved_unevaluated_operand;
21557   int saved_inhibit_evaluation_warnings;
21558 
21559   /* [temp.names]
21560 
21561      When parsing a template-id, the first non-nested `>' is taken as
21562      the end of the template-argument-list rather than a greater-than
21563      operator.  */
21564   saved_greater_than_is_operator_p
21565     = parser->greater_than_is_operator_p;
21566   parser->greater_than_is_operator_p = false;
21567   /* Parsing the argument list may modify SCOPE, so we save it
21568      here.  */
21569   saved_scope = parser->scope;
21570   saved_qualifying_scope = parser->qualifying_scope;
21571   saved_object_scope = parser->object_scope;
21572   /* We need to evaluate the template arguments, even though this
21573      template-id may be nested within a "sizeof".  */
21574   saved_unevaluated_operand = cp_unevaluated_operand;
21575   cp_unevaluated_operand = 0;
21576   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
21577   c_inhibit_evaluation_warnings = 0;
21578   /* Parse the template-argument-list itself.  */
21579   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER)
21580       || cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
21581     arguments = NULL_TREE;
21582   else
21583     arguments = cp_parser_template_argument_list (parser);
21584   /* Look for the `>' that ends the template-argument-list. If we find
21585      a '>>' instead, it's probably just a typo.  */
21586   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
21587     {
21588       if (cxx_dialect != cxx98)
21589         {
21590           /* In C++0x, a `>>' in a template argument list or cast
21591              expression is considered to be two separate `>'
21592              tokens. So, change the current token to a `>', but don't
21593              consume it: it will be consumed later when the outer
21594              template argument list (or cast expression) is parsed.
21595              Note that this replacement of `>' for `>>' is necessary
21596              even if we are parsing tentatively: in the tentative
21597              case, after calling
21598              cp_parser_enclosed_template_argument_list we will always
21599              throw away all of the template arguments and the first
21600              closing `>', either because the template argument list
21601              was erroneous or because we are replacing those tokens
21602              with a CPP_TEMPLATE_ID token.  The second `>' (which will
21603              not have been thrown away) is needed either to close an
21604              outer template argument list or to complete a new-style
21605              cast.  */
21606 	  cp_token *token = cp_lexer_peek_token (parser->lexer);
21607           token->type = CPP_GREATER;
21608         }
21609       else if (!saved_greater_than_is_operator_p)
21610 	{
21611 	  /* If we're in a nested template argument list, the '>>' has
21612 	    to be a typo for '> >'. We emit the error message, but we
21613 	    continue parsing and we push a '>' as next token, so that
21614 	    the argument list will be parsed correctly.  Note that the
21615 	    global source location is still on the token before the
21616 	    '>>', so we need to say explicitly where we want it.  */
21617 	  cp_token *token = cp_lexer_peek_token (parser->lexer);
21618 	  error_at (token->location, "%<>>%> should be %<> >%> "
21619 		    "within a nested template argument list");
21620 
21621 	  token->type = CPP_GREATER;
21622 	}
21623       else
21624 	{
21625 	  /* If this is not a nested template argument list, the '>>'
21626 	    is a typo for '>'. Emit an error message and continue.
21627 	    Same deal about the token location, but here we can get it
21628 	    right by consuming the '>>' before issuing the diagnostic.  */
21629 	  cp_token *token = cp_lexer_consume_token (parser->lexer);
21630 	  error_at (token->location,
21631 		    "spurious %<>>%>, use %<>%> to terminate "
21632 		    "a template argument list");
21633 	}
21634     }
21635   else
21636     cp_parser_skip_to_end_of_template_parameter_list (parser);
21637   /* The `>' token might be a greater-than operator again now.  */
21638   parser->greater_than_is_operator_p
21639     = saved_greater_than_is_operator_p;
21640   /* Restore the SAVED_SCOPE.  */
21641   parser->scope = saved_scope;
21642   parser->qualifying_scope = saved_qualifying_scope;
21643   parser->object_scope = saved_object_scope;
21644   cp_unevaluated_operand = saved_unevaluated_operand;
21645   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
21646 
21647   return arguments;
21648 }
21649 
21650 /* MEMBER_FUNCTION is a member function, or a friend.  If default
21651    arguments, or the body of the function have not yet been parsed,
21652    parse them now.  */
21653 
21654 static void
21655 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
21656 {
21657   timevar_push (TV_PARSE_INMETH);
21658   /* If this member is a template, get the underlying
21659      FUNCTION_DECL.  */
21660   if (DECL_FUNCTION_TEMPLATE_P (member_function))
21661     member_function = DECL_TEMPLATE_RESULT (member_function);
21662 
21663   /* There should not be any class definitions in progress at this
21664      point; the bodies of members are only parsed outside of all class
21665      definitions.  */
21666   gcc_assert (parser->num_classes_being_defined == 0);
21667   /* While we're parsing the member functions we might encounter more
21668      classes.  We want to handle them right away, but we don't want
21669      them getting mixed up with functions that are currently in the
21670      queue.  */
21671   push_unparsed_function_queues (parser);
21672 
21673   /* Make sure that any template parameters are in scope.  */
21674   maybe_begin_member_template_processing (member_function);
21675 
21676   /* If the body of the function has not yet been parsed, parse it
21677      now.  */
21678   if (DECL_PENDING_INLINE_P (member_function))
21679     {
21680       tree function_scope;
21681       cp_token_cache *tokens;
21682 
21683       /* The function is no longer pending; we are processing it.  */
21684       tokens = DECL_PENDING_INLINE_INFO (member_function);
21685       DECL_PENDING_INLINE_INFO (member_function) = NULL;
21686       DECL_PENDING_INLINE_P (member_function) = 0;
21687 
21688       /* If this is a local class, enter the scope of the containing
21689 	 function.  */
21690       function_scope = current_function_decl;
21691       if (function_scope)
21692 	push_function_context ();
21693 
21694       /* Push the body of the function onto the lexer stack.  */
21695       cp_parser_push_lexer_for_tokens (parser, tokens);
21696 
21697       /* Let the front end know that we going to be defining this
21698 	 function.  */
21699       start_preparsed_function (member_function, NULL_TREE,
21700 				SF_PRE_PARSED | SF_INCLASS_INLINE);
21701 
21702       /* Don't do access checking if it is a templated function.  */
21703       if (processing_template_decl)
21704 	push_deferring_access_checks (dk_no_check);
21705 
21706       /* Now, parse the body of the function.  */
21707       cp_parser_function_definition_after_declarator (parser,
21708 						      /*inline_p=*/true);
21709 
21710       if (processing_template_decl)
21711 	pop_deferring_access_checks ();
21712 
21713       /* Leave the scope of the containing function.  */
21714       if (function_scope)
21715 	pop_function_context ();
21716       cp_parser_pop_lexer (parser);
21717     }
21718 
21719   /* Remove any template parameters from the symbol table.  */
21720   maybe_end_member_template_processing ();
21721 
21722   /* Restore the queue.  */
21723   pop_unparsed_function_queues (parser);
21724   timevar_pop (TV_PARSE_INMETH);
21725 }
21726 
21727 /* If DECL contains any default args, remember it on the unparsed
21728    functions queue.  */
21729 
21730 static void
21731 cp_parser_save_default_args (cp_parser* parser, tree decl)
21732 {
21733   tree probe;
21734 
21735   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
21736        probe;
21737        probe = TREE_CHAIN (probe))
21738     if (TREE_PURPOSE (probe))
21739       {
21740 	cp_default_arg_entry *entry
21741 	  = VEC_safe_push (cp_default_arg_entry, gc,
21742 			   unparsed_funs_with_default_args, NULL);
21743 	entry->class_type = current_class_type;
21744 	entry->decl = decl;
21745 	break;
21746       }
21747 }
21748 
21749 /* DEFAULT_ARG contains the saved tokens for the initializer of DECL,
21750    which is either a FIELD_DECL or PARM_DECL.  Parse it and return
21751    the result.  For a PARM_DECL, PARMTYPE is the corresponding type
21752    from the parameter-type-list.  */
21753 
21754 static tree
21755 cp_parser_late_parse_one_default_arg (cp_parser *parser, tree decl,
21756 				      tree default_arg, tree parmtype)
21757 {
21758   cp_token_cache *tokens;
21759   tree parsed_arg;
21760   bool dummy;
21761 
21762   if (default_arg == error_mark_node)
21763     return error_mark_node;
21764 
21765   /* Push the saved tokens for the default argument onto the parser's
21766      lexer stack.  */
21767   tokens = DEFARG_TOKENS (default_arg);
21768   cp_parser_push_lexer_for_tokens (parser, tokens);
21769 
21770   start_lambda_scope (decl);
21771 
21772   /* Parse the default argument.  */
21773   parsed_arg = cp_parser_initializer (parser, &dummy, &dummy);
21774   if (BRACE_ENCLOSED_INITIALIZER_P (parsed_arg))
21775     maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
21776 
21777   finish_lambda_scope ();
21778 
21779   if (!processing_template_decl)
21780     {
21781       /* In a non-template class, check conversions now.  In a template,
21782 	 we'll wait and instantiate these as needed.  */
21783       if (TREE_CODE (decl) == PARM_DECL)
21784 	parsed_arg = check_default_argument (parmtype, parsed_arg);
21785       else
21786 	{
21787 	  int flags = LOOKUP_IMPLICIT;
21788 	  if (BRACE_ENCLOSED_INITIALIZER_P (parsed_arg)
21789 	      && CONSTRUCTOR_IS_DIRECT_INIT (parsed_arg))
21790 	    flags = LOOKUP_NORMAL;
21791 	  parsed_arg = digest_init_flags (TREE_TYPE (decl), parsed_arg, flags);
21792 	}
21793     }
21794 
21795   /* If the token stream has not been completely used up, then
21796      there was extra junk after the end of the default
21797      argument.  */
21798   if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
21799     {
21800       if (TREE_CODE (decl) == PARM_DECL)
21801 	cp_parser_error (parser, "expected %<,%>");
21802       else
21803 	cp_parser_error (parser, "expected %<;%>");
21804     }
21805 
21806   /* Revert to the main lexer.  */
21807   cp_parser_pop_lexer (parser);
21808 
21809   return parsed_arg;
21810 }
21811 
21812 /* FIELD is a non-static data member with an initializer which we saved for
21813    later; parse it now.  */
21814 
21815 static void
21816 cp_parser_late_parsing_nsdmi (cp_parser *parser, tree field)
21817 {
21818   tree def;
21819 
21820   push_unparsed_function_queues (parser);
21821   def = cp_parser_late_parse_one_default_arg (parser, field,
21822 					      DECL_INITIAL (field),
21823 					      NULL_TREE);
21824   pop_unparsed_function_queues (parser);
21825 
21826   DECL_INITIAL (field) = def;
21827 }
21828 
21829 /* FN is a FUNCTION_DECL which may contains a parameter with an
21830    unparsed DEFAULT_ARG.  Parse the default args now.  This function
21831    assumes that the current scope is the scope in which the default
21832    argument should be processed.  */
21833 
21834 static void
21835 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
21836 {
21837   bool saved_local_variables_forbidden_p;
21838   tree parm, parmdecl;
21839 
21840   /* While we're parsing the default args, we might (due to the
21841      statement expression extension) encounter more classes.  We want
21842      to handle them right away, but we don't want them getting mixed
21843      up with default args that are currently in the queue.  */
21844   push_unparsed_function_queues (parser);
21845 
21846   /* Local variable names (and the `this' keyword) may not appear
21847      in a default argument.  */
21848   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
21849   parser->local_variables_forbidden_p = true;
21850 
21851   push_defarg_context (fn);
21852 
21853   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn)),
21854 	 parmdecl = DECL_ARGUMENTS (fn);
21855        parm && parm != void_list_node;
21856        parm = TREE_CHAIN (parm),
21857 	 parmdecl = DECL_CHAIN (parmdecl))
21858     {
21859       tree default_arg = TREE_PURPOSE (parm);
21860       tree parsed_arg;
21861       VEC(tree,gc) *insts;
21862       tree copy;
21863       unsigned ix;
21864 
21865       if (!default_arg)
21866 	continue;
21867 
21868       if (TREE_CODE (default_arg) != DEFAULT_ARG)
21869 	/* This can happen for a friend declaration for a function
21870 	   already declared with default arguments.  */
21871 	continue;
21872 
21873       parsed_arg
21874 	= cp_parser_late_parse_one_default_arg (parser, parmdecl,
21875 						default_arg,
21876 						TREE_VALUE (parm));
21877       if (parsed_arg == error_mark_node)
21878 	{
21879 	  continue;
21880 	}
21881 
21882       TREE_PURPOSE (parm) = parsed_arg;
21883 
21884       /* Update any instantiations we've already created.  */
21885       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
21886 	   VEC_iterate (tree, insts, ix, copy); ix++)
21887 	TREE_PURPOSE (copy) = parsed_arg;
21888     }
21889 
21890   pop_defarg_context ();
21891 
21892   /* Make sure no default arg is missing.  */
21893   check_default_args (fn);
21894 
21895   /* Restore the state of local_variables_forbidden_p.  */
21896   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
21897 
21898   /* Restore the queue.  */
21899   pop_unparsed_function_queues (parser);
21900 }
21901 
21902 /* Parse the operand of `sizeof' (or a similar operator).  Returns
21903    either a TYPE or an expression, depending on the form of the
21904    input.  The KEYWORD indicates which kind of expression we have
21905    encountered.  */
21906 
21907 static tree
21908 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
21909 {
21910   tree expr = NULL_TREE;
21911   const char *saved_message;
21912   char *tmp;
21913   bool saved_integral_constant_expression_p;
21914   bool saved_non_integral_constant_expression_p;
21915   bool pack_expansion_p = false;
21916 
21917   /* Types cannot be defined in a `sizeof' expression.  Save away the
21918      old message.  */
21919   saved_message = parser->type_definition_forbidden_message;
21920   /* And create the new one.  */
21921   tmp = concat ("types may not be defined in %<",
21922 		IDENTIFIER_POINTER (ridpointers[keyword]),
21923 		"%> expressions", NULL);
21924   parser->type_definition_forbidden_message = tmp;
21925 
21926   /* The restrictions on constant-expressions do not apply inside
21927      sizeof expressions.  */
21928   saved_integral_constant_expression_p
21929     = parser->integral_constant_expression_p;
21930   saved_non_integral_constant_expression_p
21931     = parser->non_integral_constant_expression_p;
21932   parser->integral_constant_expression_p = false;
21933 
21934   /* If it's a `...', then we are computing the length of a parameter
21935      pack.  */
21936   if (keyword == RID_SIZEOF
21937       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
21938     {
21939       /* Consume the `...'.  */
21940       cp_lexer_consume_token (parser->lexer);
21941       maybe_warn_variadic_templates ();
21942 
21943       /* Note that this is an expansion.  */
21944       pack_expansion_p = true;
21945     }
21946 
21947   /* Do not actually evaluate the expression.  */
21948   ++cp_unevaluated_operand;
21949   ++c_inhibit_evaluation_warnings;
21950   /* If it's a `(', then we might be looking at the type-id
21951      construction.  */
21952   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
21953     {
21954       tree type;
21955       bool saved_in_type_id_in_expr_p;
21956 
21957       /* We can't be sure yet whether we're looking at a type-id or an
21958 	 expression.  */
21959       cp_parser_parse_tentatively (parser);
21960       /* Consume the `('.  */
21961       cp_lexer_consume_token (parser->lexer);
21962       /* Parse the type-id.  */
21963       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
21964       parser->in_type_id_in_expr_p = true;
21965       type = cp_parser_type_id (parser);
21966       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
21967       /* Now, look for the trailing `)'.  */
21968       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
21969       /* If all went well, then we're done.  */
21970       if (cp_parser_parse_definitely (parser))
21971 	{
21972 	  cp_decl_specifier_seq decl_specs;
21973 
21974 	  /* Build a trivial decl-specifier-seq.  */
21975 	  clear_decl_specs (&decl_specs);
21976 	  decl_specs.type = type;
21977 
21978 	  /* Call grokdeclarator to figure out what type this is.  */
21979 	  expr = grokdeclarator (NULL,
21980 				 &decl_specs,
21981 				 TYPENAME,
21982 				 /*initialized=*/0,
21983 				 /*attrlist=*/NULL);
21984 	}
21985     }
21986 
21987   /* If the type-id production did not work out, then we must be
21988      looking at the unary-expression production.  */
21989   if (!expr)
21990     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
21991 				       /*cast_p=*/false, NULL);
21992 
21993   if (pack_expansion_p)
21994     /* Build a pack expansion. */
21995     expr = make_pack_expansion (expr);
21996 
21997   /* Go back to evaluating expressions.  */
21998   --cp_unevaluated_operand;
21999   --c_inhibit_evaluation_warnings;
22000 
22001   /* Free the message we created.  */
22002   free (tmp);
22003   /* And restore the old one.  */
22004   parser->type_definition_forbidden_message = saved_message;
22005   parser->integral_constant_expression_p
22006     = saved_integral_constant_expression_p;
22007   parser->non_integral_constant_expression_p
22008     = saved_non_integral_constant_expression_p;
22009 
22010   return expr;
22011 }
22012 
22013 /* If the current declaration has no declarator, return true.  */
22014 
22015 static bool
22016 cp_parser_declares_only_class_p (cp_parser *parser)
22017 {
22018   /* If the next token is a `;' or a `,' then there is no
22019      declarator.  */
22020   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
22021 	  || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
22022 }
22023 
22024 /* Update the DECL_SPECS to reflect the storage class indicated by
22025    KEYWORD.  */
22026 
22027 static void
22028 cp_parser_set_storage_class (cp_parser *parser,
22029 			     cp_decl_specifier_seq *decl_specs,
22030 			     enum rid keyword,
22031 			     location_t location)
22032 {
22033   cp_storage_class storage_class;
22034 
22035   if (parser->in_unbraced_linkage_specification_p)
22036     {
22037       error_at (location, "invalid use of %qD in linkage specification",
22038 		ridpointers[keyword]);
22039       return;
22040     }
22041   else if (decl_specs->storage_class != sc_none)
22042     {
22043       decl_specs->conflicting_specifiers_p = true;
22044       return;
22045     }
22046 
22047   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
22048       && decl_specs->specs[(int) ds_thread])
22049     {
22050       error_at (location, "%<__thread%> before %qD", ridpointers[keyword]);
22051       decl_specs->specs[(int) ds_thread] = 0;
22052     }
22053 
22054   switch (keyword)
22055     {
22056     case RID_AUTO:
22057       storage_class = sc_auto;
22058       break;
22059     case RID_REGISTER:
22060       storage_class = sc_register;
22061       break;
22062     case RID_STATIC:
22063       storage_class = sc_static;
22064       break;
22065     case RID_EXTERN:
22066       storage_class = sc_extern;
22067       break;
22068     case RID_MUTABLE:
22069       storage_class = sc_mutable;
22070       break;
22071     default:
22072       gcc_unreachable ();
22073     }
22074   decl_specs->storage_class = storage_class;
22075 
22076   /* A storage class specifier cannot be applied alongside a typedef
22077      specifier. If there is a typedef specifier present then set
22078      conflicting_specifiers_p which will trigger an error later
22079      on in grokdeclarator. */
22080   if (decl_specs->specs[(int)ds_typedef])
22081     decl_specs->conflicting_specifiers_p = true;
22082 }
22083 
22084 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If TYPE_DEFINITION_P
22085    is true, the type is a class or enum definition.  */
22086 
22087 static void
22088 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
22089 			      tree type_spec,
22090 			      location_t location,
22091 			      bool type_definition_p)
22092 {
22093   decl_specs->any_specifiers_p = true;
22094 
22095   /* If the user tries to redeclare bool, char16_t, char32_t, or wchar_t
22096      (with, for example, in "typedef int wchar_t;") we remember that
22097      this is what happened.  In system headers, we ignore these
22098      declarations so that G++ can work with system headers that are not
22099      C++-safe.  */
22100   if (decl_specs->specs[(int) ds_typedef]
22101       && !type_definition_p
22102       && (type_spec == boolean_type_node
22103 	  || type_spec == char16_type_node
22104 	  || type_spec == char32_type_node
22105 	  || type_spec == wchar_type_node)
22106       && (decl_specs->type
22107 	  || decl_specs->specs[(int) ds_long]
22108 	  || decl_specs->specs[(int) ds_short]
22109 	  || decl_specs->specs[(int) ds_unsigned]
22110 	  || decl_specs->specs[(int) ds_signed]))
22111     {
22112       decl_specs->redefined_builtin_type = type_spec;
22113       if (!decl_specs->type)
22114 	{
22115 	  decl_specs->type = type_spec;
22116 	  decl_specs->type_definition_p = false;
22117 	  decl_specs->type_location = location;
22118 	}
22119     }
22120   else if (decl_specs->type)
22121     decl_specs->multiple_types_p = true;
22122   else
22123     {
22124       decl_specs->type = type_spec;
22125       decl_specs->type_definition_p = type_definition_p;
22126       decl_specs->redefined_builtin_type = NULL_TREE;
22127       decl_specs->type_location = location;
22128     }
22129 }
22130 
22131 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
22132    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
22133 
22134 static bool
22135 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
22136 {
22137   return decl_specifiers->specs[(int) ds_friend] != 0;
22138 }
22139 
22140 /* Issue an error message indicating that TOKEN_DESC was expected.
22141    If KEYWORD is true, it indicated this function is called by
22142    cp_parser_require_keword and the required token can only be
22143    a indicated keyword. */
22144 
22145 static void
22146 cp_parser_required_error (cp_parser *parser,
22147 			  required_token token_desc,
22148 			  bool keyword)
22149 {
22150   switch (token_desc)
22151     {
22152       case RT_NEW:
22153 	cp_parser_error (parser, "expected %<new%>");
22154 	return;
22155       case RT_DELETE:
22156 	cp_parser_error (parser, "expected %<delete%>");
22157 	return;
22158       case RT_RETURN:
22159 	cp_parser_error (parser, "expected %<return%>");
22160 	return;
22161       case RT_WHILE:
22162 	cp_parser_error (parser, "expected %<while%>");
22163 	return;
22164       case RT_EXTERN:
22165 	cp_parser_error (parser, "expected %<extern%>");
22166 	return;
22167       case RT_STATIC_ASSERT:
22168 	cp_parser_error (parser, "expected %<static_assert%>");
22169 	return;
22170       case RT_DECLTYPE:
22171 	cp_parser_error (parser, "expected %<decltype%>");
22172 	return;
22173       case RT_OPERATOR:
22174 	cp_parser_error (parser, "expected %<operator%>");
22175 	return;
22176       case RT_CLASS:
22177 	cp_parser_error (parser, "expected %<class%>");
22178 	return;
22179       case RT_TEMPLATE:
22180 	cp_parser_error (parser, "expected %<template%>");
22181 	return;
22182       case RT_NAMESPACE:
22183 	cp_parser_error (parser, "expected %<namespace%>");
22184 	return;
22185       case RT_USING:
22186 	cp_parser_error (parser, "expected %<using%>");
22187 	return;
22188       case RT_ASM:
22189 	cp_parser_error (parser, "expected %<asm%>");
22190 	return;
22191       case RT_TRY:
22192 	cp_parser_error (parser, "expected %<try%>");
22193 	return;
22194       case RT_CATCH:
22195 	cp_parser_error (parser, "expected %<catch%>");
22196 	return;
22197       case RT_THROW:
22198 	cp_parser_error (parser, "expected %<throw%>");
22199 	return;
22200       case RT_LABEL:
22201 	cp_parser_error (parser, "expected %<__label__%>");
22202 	return;
22203       case RT_AT_TRY:
22204 	cp_parser_error (parser, "expected %<@try%>");
22205 	return;
22206       case RT_AT_SYNCHRONIZED:
22207 	cp_parser_error (parser, "expected %<@synchronized%>");
22208 	return;
22209       case RT_AT_THROW:
22210 	cp_parser_error (parser, "expected %<@throw%>");
22211 	return;
22212       case RT_TRANSACTION_ATOMIC:
22213 	cp_parser_error (parser, "expected %<__transaction_atomic%>");
22214 	return;
22215       case RT_TRANSACTION_RELAXED:
22216 	cp_parser_error (parser, "expected %<__transaction_relaxed%>");
22217 	return;
22218       default:
22219 	break;
22220     }
22221   if (!keyword)
22222     {
22223       switch (token_desc)
22224         {
22225 	  case RT_SEMICOLON:
22226 	    cp_parser_error (parser, "expected %<;%>");
22227 	    return;
22228 	  case RT_OPEN_PAREN:
22229 	    cp_parser_error (parser, "expected %<(%>");
22230 	    return;
22231 	  case RT_CLOSE_BRACE:
22232 	    cp_parser_error (parser, "expected %<}%>");
22233 	    return;
22234 	  case RT_OPEN_BRACE:
22235 	    cp_parser_error (parser, "expected %<{%>");
22236 	    return;
22237 	  case RT_CLOSE_SQUARE:
22238 	    cp_parser_error (parser, "expected %<]%>");
22239 	    return;
22240 	  case RT_OPEN_SQUARE:
22241 	    cp_parser_error (parser, "expected %<[%>");
22242 	    return;
22243 	  case RT_COMMA:
22244 	    cp_parser_error (parser, "expected %<,%>");
22245 	    return;
22246 	  case RT_SCOPE:
22247 	    cp_parser_error (parser, "expected %<::%>");
22248 	    return;
22249 	  case RT_LESS:
22250 	    cp_parser_error (parser, "expected %<<%>");
22251 	    return;
22252 	  case RT_GREATER:
22253 	    cp_parser_error (parser, "expected %<>%>");
22254 	    return;
22255 	  case RT_EQ:
22256 	    cp_parser_error (parser, "expected %<=%>");
22257 	    return;
22258 	  case RT_ELLIPSIS:
22259 	    cp_parser_error (parser, "expected %<...%>");
22260 	    return;
22261 	  case RT_MULT:
22262 	    cp_parser_error (parser, "expected %<*%>");
22263 	    return;
22264 	  case RT_COMPL:
22265 	    cp_parser_error (parser, "expected %<~%>");
22266 	    return;
22267 	  case RT_COLON:
22268 	    cp_parser_error (parser, "expected %<:%>");
22269 	    return;
22270 	  case RT_COLON_SCOPE:
22271 	    cp_parser_error (parser, "expected %<:%> or %<::%>");
22272 	    return;
22273 	  case RT_CLOSE_PAREN:
22274 	    cp_parser_error (parser, "expected %<)%>");
22275 	    return;
22276 	  case RT_COMMA_CLOSE_PAREN:
22277 	    cp_parser_error (parser, "expected %<,%> or %<)%>");
22278 	    return;
22279 	  case RT_PRAGMA_EOL:
22280 	    cp_parser_error (parser, "expected end of line");
22281 	    return;
22282 	  case RT_NAME:
22283 	    cp_parser_error (parser, "expected identifier");
22284 	    return;
22285 	  case RT_SELECT:
22286 	    cp_parser_error (parser, "expected selection-statement");
22287 	    return;
22288 	  case RT_INTERATION:
22289 	    cp_parser_error (parser, "expected iteration-statement");
22290 	    return;
22291 	  case RT_JUMP:
22292 	    cp_parser_error (parser, "expected jump-statement");
22293 	    return;
22294 	  case RT_CLASS_KEY:
22295 	    cp_parser_error (parser, "expected class-key");
22296 	    return;
22297 	  case RT_CLASS_TYPENAME_TEMPLATE:
22298 	    cp_parser_error (parser,
22299 	  	 "expected %<class%>, %<typename%>, or %<template%>");
22300 	    return;
22301 	  default:
22302 	    gcc_unreachable ();
22303 	}
22304     }
22305   else
22306     gcc_unreachable ();
22307 }
22308 
22309 
22310 
22311 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
22312    issue an error message indicating that TOKEN_DESC was expected.
22313 
22314    Returns the token consumed, if the token had the appropriate type.
22315    Otherwise, returns NULL.  */
22316 
22317 static cp_token *
22318 cp_parser_require (cp_parser* parser,
22319 		   enum cpp_ttype type,
22320 		   required_token token_desc)
22321 {
22322   if (cp_lexer_next_token_is (parser->lexer, type))
22323     return cp_lexer_consume_token (parser->lexer);
22324   else
22325     {
22326       /* Output the MESSAGE -- unless we're parsing tentatively.  */
22327       if (!cp_parser_simulate_error (parser))
22328 	cp_parser_required_error (parser, token_desc, /*keyword=*/false);
22329       return NULL;
22330     }
22331 }
22332 
22333 /* An error message is produced if the next token is not '>'.
22334    All further tokens are skipped until the desired token is
22335    found or '{', '}', ';' or an unbalanced ')' or ']'.  */
22336 
22337 static void
22338 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
22339 {
22340   /* Current level of '< ... >'.  */
22341   unsigned level = 0;
22342   /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
22343   unsigned nesting_depth = 0;
22344 
22345   /* Are we ready, yet?  If not, issue error message.  */
22346   if (cp_parser_require (parser, CPP_GREATER, RT_GREATER))
22347     return;
22348 
22349   /* Skip tokens until the desired token is found.  */
22350   while (true)
22351     {
22352       /* Peek at the next token.  */
22353       switch (cp_lexer_peek_token (parser->lexer)->type)
22354 	{
22355 	case CPP_LESS:
22356 	  if (!nesting_depth)
22357 	    ++level;
22358 	  break;
22359 
22360         case CPP_RSHIFT:
22361           if (cxx_dialect == cxx98)
22362             /* C++0x views the `>>' operator as two `>' tokens, but
22363                C++98 does not. */
22364             break;
22365           else if (!nesting_depth && level-- == 0)
22366 	    {
22367               /* We've hit a `>>' where the first `>' closes the
22368                  template argument list, and the second `>' is
22369                  spurious.  Just consume the `>>' and stop; we've
22370                  already produced at least one error.  */
22371 	      cp_lexer_consume_token (parser->lexer);
22372 	      return;
22373 	    }
22374           /* Fall through for C++0x, so we handle the second `>' in
22375              the `>>'.  */
22376 
22377 	case CPP_GREATER:
22378 	  if (!nesting_depth && level-- == 0)
22379 	    {
22380 	      /* We've reached the token we want, consume it and stop.  */
22381 	      cp_lexer_consume_token (parser->lexer);
22382 	      return;
22383 	    }
22384 	  break;
22385 
22386 	case CPP_OPEN_PAREN:
22387 	case CPP_OPEN_SQUARE:
22388 	  ++nesting_depth;
22389 	  break;
22390 
22391 	case CPP_CLOSE_PAREN:
22392 	case CPP_CLOSE_SQUARE:
22393 	  if (nesting_depth-- == 0)
22394 	    return;
22395 	  break;
22396 
22397 	case CPP_EOF:
22398 	case CPP_PRAGMA_EOL:
22399 	case CPP_SEMICOLON:
22400 	case CPP_OPEN_BRACE:
22401 	case CPP_CLOSE_BRACE:
22402 	  /* The '>' was probably forgotten, don't look further.  */
22403 	  return;
22404 
22405 	default:
22406 	  break;
22407 	}
22408 
22409       /* Consume this token.  */
22410       cp_lexer_consume_token (parser->lexer);
22411     }
22412 }
22413 
22414 /* If the next token is the indicated keyword, consume it.  Otherwise,
22415    issue an error message indicating that TOKEN_DESC was expected.
22416 
22417    Returns the token consumed, if the token had the appropriate type.
22418    Otherwise, returns NULL.  */
22419 
22420 static cp_token *
22421 cp_parser_require_keyword (cp_parser* parser,
22422 			   enum rid keyword,
22423 			   required_token token_desc)
22424 {
22425   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
22426 
22427   if (token && token->keyword != keyword)
22428     {
22429       cp_parser_required_error (parser, token_desc, /*keyword=*/true);
22430       return NULL;
22431     }
22432 
22433   return token;
22434 }
22435 
22436 /* Returns TRUE iff TOKEN is a token that can begin the body of a
22437    function-definition.  */
22438 
22439 static bool
22440 cp_parser_token_starts_function_definition_p (cp_token* token)
22441 {
22442   return (/* An ordinary function-body begins with an `{'.  */
22443 	  token->type == CPP_OPEN_BRACE
22444 	  /* A ctor-initializer begins with a `:'.  */
22445 	  || token->type == CPP_COLON
22446 	  /* A function-try-block begins with `try'.  */
22447 	  || token->keyword == RID_TRY
22448 	  /* A function-transaction-block begins with `__transaction_atomic'
22449 	     or `__transaction_relaxed'.  */
22450 	  || token->keyword == RID_TRANSACTION_ATOMIC
22451 	  || token->keyword == RID_TRANSACTION_RELAXED
22452 	  /* The named return value extension begins with `return'.  */
22453 	  || token->keyword == RID_RETURN);
22454 }
22455 
22456 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
22457    definition.  */
22458 
22459 static bool
22460 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
22461 {
22462   cp_token *token;
22463 
22464   token = cp_lexer_peek_token (parser->lexer);
22465   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
22466 }
22467 
22468 /* Returns TRUE iff the next token is the "," or ">" (or `>>', in
22469    C++0x) ending a template-argument.  */
22470 
22471 static bool
22472 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
22473 {
22474   cp_token *token;
22475 
22476   token = cp_lexer_peek_token (parser->lexer);
22477   return (token->type == CPP_COMMA
22478           || token->type == CPP_GREATER
22479           || token->type == CPP_ELLIPSIS
22480 	  || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT));
22481 }
22482 
22483 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
22484    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
22485 
22486 static bool
22487 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
22488 						     size_t n)
22489 {
22490   cp_token *token;
22491 
22492   token = cp_lexer_peek_nth_token (parser->lexer, n);
22493   if (token->type == CPP_LESS)
22494     return true;
22495   /* Check for the sequence `<::' in the original code. It would be lexed as
22496      `[:', where `[' is a digraph, and there is no whitespace before
22497      `:'.  */
22498   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
22499     {
22500       cp_token *token2;
22501       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
22502       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
22503 	return true;
22504     }
22505   return false;
22506 }
22507 
22508 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
22509    or none_type otherwise.  */
22510 
22511 static enum tag_types
22512 cp_parser_token_is_class_key (cp_token* token)
22513 {
22514   switch (token->keyword)
22515     {
22516     case RID_CLASS:
22517       return class_type;
22518     case RID_STRUCT:
22519       return record_type;
22520     case RID_UNION:
22521       return union_type;
22522 
22523     default:
22524       return none_type;
22525     }
22526 }
22527 
22528 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
22529 
22530 static void
22531 cp_parser_check_class_key (enum tag_types class_key, tree type)
22532 {
22533   if (type == error_mark_node)
22534     return;
22535   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
22536     {
22537       permerror (input_location, "%qs tag used in naming %q#T",
22538 		 class_key == union_type ? "union"
22539 		 : class_key == record_type ? "struct" : "class",
22540 		 type);
22541       inform (DECL_SOURCE_LOCATION (TYPE_NAME (type)),
22542 	      "%q#T was previously declared here", type);
22543     }
22544 }
22545 
22546 /* Issue an error message if DECL is redeclared with different
22547    access than its original declaration [class.access.spec/3].
22548    This applies to nested classes and nested class templates.
22549    [class.mem/1].  */
22550 
22551 static void
22552 cp_parser_check_access_in_redeclaration (tree decl, location_t location)
22553 {
22554   if (!decl || !CLASS_TYPE_P (TREE_TYPE (decl)))
22555     return;
22556 
22557   if ((TREE_PRIVATE (decl)
22558        != (current_access_specifier == access_private_node))
22559       || (TREE_PROTECTED (decl)
22560 	  != (current_access_specifier == access_protected_node)))
22561     error_at (location, "%qD redeclared with different access", decl);
22562 }
22563 
22564 /* Look for the `template' keyword, as a syntactic disambiguator.
22565    Return TRUE iff it is present, in which case it will be
22566    consumed.  */
22567 
22568 static bool
22569 cp_parser_optional_template_keyword (cp_parser *parser)
22570 {
22571   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
22572     {
22573       /* The `template' keyword can only be used within templates;
22574 	 outside templates the parser can always figure out what is a
22575 	 template and what is not.  */
22576       if (!processing_template_decl)
22577 	{
22578 	  cp_token *token = cp_lexer_peek_token (parser->lexer);
22579 	  error_at (token->location,
22580 		    "%<template%> (as a disambiguator) is only allowed "
22581 		    "within templates");
22582 	  /* If this part of the token stream is rescanned, the same
22583 	     error message would be generated.  So, we purge the token
22584 	     from the stream.  */
22585 	  cp_lexer_purge_token (parser->lexer);
22586 	  return false;
22587 	}
22588       else
22589 	{
22590 	  /* Consume the `template' keyword.  */
22591 	  cp_lexer_consume_token (parser->lexer);
22592 	  return true;
22593 	}
22594     }
22595 
22596   return false;
22597 }
22598 
22599 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
22600    set PARSER->SCOPE, and perform other related actions.  */
22601 
22602 static void
22603 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
22604 {
22605   int i;
22606   struct tree_check *check_value;
22607   deferred_access_check *chk;
22608   VEC (deferred_access_check,gc) *checks;
22609 
22610   /* Get the stored value.  */
22611   check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
22612   /* Perform any access checks that were deferred.  */
22613   checks = check_value->checks;
22614   if (checks)
22615     {
22616       FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
22617 	perform_or_defer_access_check (chk->binfo,
22618 				       chk->decl,
22619 				       chk->diag_decl);
22620     }
22621   /* Set the scope from the stored value.  */
22622   parser->scope = check_value->value;
22623   parser->qualifying_scope = check_value->qualifying_scope;
22624   parser->object_scope = NULL_TREE;
22625 }
22626 
22627 /* Consume tokens up through a non-nested END token.  Returns TRUE if we
22628    encounter the end of a block before what we were looking for.  */
22629 
22630 static bool
22631 cp_parser_cache_group (cp_parser *parser,
22632 		       enum cpp_ttype end,
22633 		       unsigned depth)
22634 {
22635   while (true)
22636     {
22637       cp_token *token = cp_lexer_peek_token (parser->lexer);
22638 
22639       /* Abort a parenthesized expression if we encounter a semicolon.  */
22640       if ((end == CPP_CLOSE_PAREN || depth == 0)
22641 	  && token->type == CPP_SEMICOLON)
22642 	return true;
22643       /* If we've reached the end of the file, stop.  */
22644       if (token->type == CPP_EOF
22645 	  || (end != CPP_PRAGMA_EOL
22646 	      && token->type == CPP_PRAGMA_EOL))
22647 	return true;
22648       if (token->type == CPP_CLOSE_BRACE && depth == 0)
22649 	/* We've hit the end of an enclosing block, so there's been some
22650 	   kind of syntax error.  */
22651 	return true;
22652 
22653       /* Consume the token.  */
22654       cp_lexer_consume_token (parser->lexer);
22655       /* See if it starts a new group.  */
22656       if (token->type == CPP_OPEN_BRACE)
22657 	{
22658 	  cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
22659 	  /* In theory this should probably check end == '}', but
22660 	     cp_parser_save_member_function_body needs it to exit
22661 	     after either '}' or ')' when called with ')'.  */
22662 	  if (depth == 0)
22663 	    return false;
22664 	}
22665       else if (token->type == CPP_OPEN_PAREN)
22666 	{
22667 	  cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
22668 	  if (depth == 0 && end == CPP_CLOSE_PAREN)
22669 	    return false;
22670 	}
22671       else if (token->type == CPP_PRAGMA)
22672 	cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
22673       else if (token->type == end)
22674 	return false;
22675     }
22676 }
22677 
22678 /* Like above, for caching a default argument or NSDMI.  Both of these are
22679    terminated by a non-nested comma, but it can be unclear whether or not a
22680    comma is nested in a template argument list unless we do more parsing.
22681    In order to handle this ambiguity, when we encounter a ',' after a '<'
22682    we try to parse what follows as a parameter-declaration-list (in the
22683    case of a default argument) or a member-declarator (in the case of an
22684    NSDMI).  If that succeeds, then we stop caching.  */
22685 
22686 static tree
22687 cp_parser_cache_defarg (cp_parser *parser, bool nsdmi)
22688 {
22689   unsigned depth = 0;
22690   int maybe_template_id = 0;
22691   cp_token *first_token;
22692   cp_token *token;
22693   tree default_argument;
22694 
22695   /* Add tokens until we have processed the entire default
22696      argument.  We add the range [first_token, token).  */
22697   first_token = cp_lexer_peek_token (parser->lexer);
22698   if (first_token->type == CPP_OPEN_BRACE)
22699     {
22700       /* For list-initialization, this is straightforward.  */
22701       cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
22702       token = cp_lexer_peek_token (parser->lexer);
22703     }
22704   else while (true)
22705     {
22706       bool done = false;
22707 
22708       /* Peek at the next token.  */
22709       token = cp_lexer_peek_token (parser->lexer);
22710       /* What we do depends on what token we have.  */
22711       switch (token->type)
22712 	{
22713 	  /* In valid code, a default argument must be
22714 	     immediately followed by a `,' `)', or `...'.  */
22715 	case CPP_COMMA:
22716 	  if (depth == 0 && maybe_template_id)
22717 	    {
22718 	      /* If we've seen a '<', we might be in a
22719 		 template-argument-list.  Until Core issue 325 is
22720 		 resolved, we don't know how this situation ought
22721 		 to be handled, so try to DTRT.  We check whether
22722 		 what comes after the comma is a valid parameter
22723 		 declaration list.  If it is, then the comma ends
22724 		 the default argument; otherwise the default
22725 		 argument continues.  */
22726 	      bool error = false;
22727 	      tree t;
22728 
22729 	      /* Set ITALP so cp_parser_parameter_declaration_list
22730 		 doesn't decide to commit to this parse.  */
22731 	      bool saved_italp = parser->in_template_argument_list_p;
22732 	      parser->in_template_argument_list_p = true;
22733 
22734 	      cp_parser_parse_tentatively (parser);
22735 	      cp_lexer_consume_token (parser->lexer);
22736 
22737 	      if (nsdmi)
22738 		{
22739 		  int ctor_dtor_or_conv_p;
22740 		  cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
22741 					&ctor_dtor_or_conv_p,
22742 					/*parenthesized_p=*/NULL,
22743 					/*member_p=*/true);
22744 		}
22745 	      else
22746 		{
22747 		  begin_scope (sk_function_parms, NULL_TREE);
22748 		  cp_parser_parameter_declaration_list (parser, &error);
22749 		  for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
22750 		    pop_binding (DECL_NAME (t), t);
22751 		  leave_scope ();
22752 		}
22753 	      if (!cp_parser_error_occurred (parser) && !error)
22754 		done = true;
22755 	      cp_parser_abort_tentative_parse (parser);
22756 
22757 	      parser->in_template_argument_list_p = saved_italp;
22758 	      break;
22759 	    }
22760 	case CPP_CLOSE_PAREN:
22761 	case CPP_ELLIPSIS:
22762 	  /* If we run into a non-nested `;', `}', or `]',
22763 	     then the code is invalid -- but the default
22764 	     argument is certainly over.  */
22765 	case CPP_SEMICOLON:
22766 	case CPP_CLOSE_BRACE:
22767 	case CPP_CLOSE_SQUARE:
22768 	  if (depth == 0)
22769 	    done = true;
22770 	  /* Update DEPTH, if necessary.  */
22771 	  else if (token->type == CPP_CLOSE_PAREN
22772 		   || token->type == CPP_CLOSE_BRACE
22773 		   || token->type == CPP_CLOSE_SQUARE)
22774 	    --depth;
22775 	  break;
22776 
22777 	case CPP_OPEN_PAREN:
22778 	case CPP_OPEN_SQUARE:
22779 	case CPP_OPEN_BRACE:
22780 	  ++depth;
22781 	  break;
22782 
22783 	case CPP_LESS:
22784 	  if (depth == 0)
22785 	    /* This might be the comparison operator, or it might
22786 	       start a template argument list.  */
22787 	    ++maybe_template_id;
22788 	  break;
22789 
22790 	case CPP_RSHIFT:
22791 	  if (cxx_dialect == cxx98)
22792 	    break;
22793 	  /* Fall through for C++0x, which treats the `>>'
22794 	     operator like two `>' tokens in certain
22795 	     cases.  */
22796 
22797 	case CPP_GREATER:
22798 	  if (depth == 0)
22799 	    {
22800 	      /* This might be an operator, or it might close a
22801 		 template argument list.  But if a previous '<'
22802 		 started a template argument list, this will have
22803 		 closed it, so we can't be in one anymore.  */
22804 	      maybe_template_id -= 1 + (token->type == CPP_RSHIFT);
22805 	      if (maybe_template_id < 0)
22806 		maybe_template_id = 0;
22807 	    }
22808 	  break;
22809 
22810 	  /* If we run out of tokens, issue an error message.  */
22811 	case CPP_EOF:
22812 	case CPP_PRAGMA_EOL:
22813 	  error_at (token->location, "file ends in default argument");
22814 	  done = true;
22815 	  break;
22816 
22817 	case CPP_NAME:
22818 	case CPP_SCOPE:
22819 	  /* In these cases, we should look for template-ids.
22820 	     For example, if the default argument is
22821 	     `X<int, double>()', we need to do name lookup to
22822 	     figure out whether or not `X' is a template; if
22823 	     so, the `,' does not end the default argument.
22824 
22825 	     That is not yet done.  */
22826 	  break;
22827 
22828 	default:
22829 	  break;
22830 	}
22831 
22832       /* If we've reached the end, stop.  */
22833       if (done)
22834 	break;
22835 
22836       /* Add the token to the token block.  */
22837       token = cp_lexer_consume_token (parser->lexer);
22838     }
22839 
22840   /* Create a DEFAULT_ARG to represent the unparsed default
22841      argument.  */
22842   default_argument = make_node (DEFAULT_ARG);
22843   DEFARG_TOKENS (default_argument)
22844     = cp_token_cache_new (first_token, token);
22845   DEFARG_INSTANTIATIONS (default_argument) = NULL;
22846 
22847   return default_argument;
22848 }
22849 
22850 /* Begin parsing tentatively.  We always save tokens while parsing
22851    tentatively so that if the tentative parsing fails we can restore the
22852    tokens.  */
22853 
22854 static void
22855 cp_parser_parse_tentatively (cp_parser* parser)
22856 {
22857   /* Enter a new parsing context.  */
22858   parser->context = cp_parser_context_new (parser->context);
22859   /* Begin saving tokens.  */
22860   cp_lexer_save_tokens (parser->lexer);
22861   /* In order to avoid repetitive access control error messages,
22862      access checks are queued up until we are no longer parsing
22863      tentatively.  */
22864   push_deferring_access_checks (dk_deferred);
22865 }
22866 
22867 /* Commit to the currently active tentative parse.  */
22868 
22869 static void
22870 cp_parser_commit_to_tentative_parse (cp_parser* parser)
22871 {
22872   cp_parser_context *context;
22873   cp_lexer *lexer;
22874 
22875   /* Mark all of the levels as committed.  */
22876   lexer = parser->lexer;
22877   for (context = parser->context; context->next; context = context->next)
22878     {
22879       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
22880 	break;
22881       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
22882       while (!cp_lexer_saving_tokens (lexer))
22883 	lexer = lexer->next;
22884       cp_lexer_commit_tokens (lexer);
22885     }
22886 }
22887 
22888 /* Abort the currently active tentative parse.  All consumed tokens
22889    will be rolled back, and no diagnostics will be issued.  */
22890 
22891 static void
22892 cp_parser_abort_tentative_parse (cp_parser* parser)
22893 {
22894   gcc_assert (parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED
22895 	      || errorcount > 0);
22896   cp_parser_simulate_error (parser);
22897   /* Now, pretend that we want to see if the construct was
22898      successfully parsed.  */
22899   cp_parser_parse_definitely (parser);
22900 }
22901 
22902 /* Stop parsing tentatively.  If a parse error has occurred, restore the
22903    token stream.  Otherwise, commit to the tokens we have consumed.
22904    Returns true if no error occurred; false otherwise.  */
22905 
22906 static bool
22907 cp_parser_parse_definitely (cp_parser* parser)
22908 {
22909   bool error_occurred;
22910   cp_parser_context *context;
22911 
22912   /* Remember whether or not an error occurred, since we are about to
22913      destroy that information.  */
22914   error_occurred = cp_parser_error_occurred (parser);
22915   /* Remove the topmost context from the stack.  */
22916   context = parser->context;
22917   parser->context = context->next;
22918   /* If no parse errors occurred, commit to the tentative parse.  */
22919   if (!error_occurred)
22920     {
22921       /* Commit to the tokens read tentatively, unless that was
22922 	 already done.  */
22923       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
22924 	cp_lexer_commit_tokens (parser->lexer);
22925 
22926       pop_to_parent_deferring_access_checks ();
22927     }
22928   /* Otherwise, if errors occurred, roll back our state so that things
22929      are just as they were before we began the tentative parse.  */
22930   else
22931     {
22932       cp_lexer_rollback_tokens (parser->lexer);
22933       pop_deferring_access_checks ();
22934     }
22935   /* Add the context to the front of the free list.  */
22936   context->next = cp_parser_context_free_list;
22937   cp_parser_context_free_list = context;
22938 
22939   return !error_occurred;
22940 }
22941 
22942 /* Returns true if we are parsing tentatively and are not committed to
22943    this tentative parse.  */
22944 
22945 static bool
22946 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
22947 {
22948   return (cp_parser_parsing_tentatively (parser)
22949 	  && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
22950 }
22951 
22952 /* Returns nonzero iff an error has occurred during the most recent
22953    tentative parse.  */
22954 
22955 static bool
22956 cp_parser_error_occurred (cp_parser* parser)
22957 {
22958   return (cp_parser_parsing_tentatively (parser)
22959 	  && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
22960 }
22961 
22962 /* Returns nonzero if GNU extensions are allowed.  */
22963 
22964 static bool
22965 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
22966 {
22967   return parser->allow_gnu_extensions_p;
22968 }
22969 
22970 /* Objective-C++ Productions */
22971 
22972 
22973 /* Parse an Objective-C expression, which feeds into a primary-expression
22974    above.
22975 
22976    objc-expression:
22977      objc-message-expression
22978      objc-string-literal
22979      objc-encode-expression
22980      objc-protocol-expression
22981      objc-selector-expression
22982 
22983   Returns a tree representation of the expression.  */
22984 
22985 static tree
22986 cp_parser_objc_expression (cp_parser* parser)
22987 {
22988   /* Try to figure out what kind of declaration is present.  */
22989   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
22990 
22991   switch (kwd->type)
22992     {
22993     case CPP_OPEN_SQUARE:
22994       return cp_parser_objc_message_expression (parser);
22995 
22996     case CPP_OBJC_STRING:
22997       kwd = cp_lexer_consume_token (parser->lexer);
22998       return objc_build_string_object (kwd->u.value);
22999 
23000     case CPP_KEYWORD:
23001       switch (kwd->keyword)
23002 	{
23003 	case RID_AT_ENCODE:
23004 	  return cp_parser_objc_encode_expression (parser);
23005 
23006 	case RID_AT_PROTOCOL:
23007 	  return cp_parser_objc_protocol_expression (parser);
23008 
23009 	case RID_AT_SELECTOR:
23010 	  return cp_parser_objc_selector_expression (parser);
23011 
23012 	default:
23013 	  break;
23014 	}
23015     default:
23016       error_at (kwd->location,
23017 		"misplaced %<@%D%> Objective-C++ construct",
23018 		kwd->u.value);
23019       cp_parser_skip_to_end_of_block_or_statement (parser);
23020     }
23021 
23022   return error_mark_node;
23023 }
23024 
23025 /* Parse an Objective-C message expression.
23026 
23027    objc-message-expression:
23028      [ objc-message-receiver objc-message-args ]
23029 
23030    Returns a representation of an Objective-C message.  */
23031 
23032 static tree
23033 cp_parser_objc_message_expression (cp_parser* parser)
23034 {
23035   tree receiver, messageargs;
23036 
23037   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
23038   receiver = cp_parser_objc_message_receiver (parser);
23039   messageargs = cp_parser_objc_message_args (parser);
23040   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
23041 
23042   return objc_build_message_expr (receiver, messageargs);
23043 }
23044 
23045 /* Parse an objc-message-receiver.
23046 
23047    objc-message-receiver:
23048      expression
23049      simple-type-specifier
23050 
23051   Returns a representation of the type or expression.  */
23052 
23053 static tree
23054 cp_parser_objc_message_receiver (cp_parser* parser)
23055 {
23056   tree rcv;
23057 
23058   /* An Objective-C message receiver may be either (1) a type
23059      or (2) an expression.  */
23060   cp_parser_parse_tentatively (parser);
23061   rcv = cp_parser_expression (parser, false, NULL);
23062 
23063   if (cp_parser_parse_definitely (parser))
23064     return rcv;
23065 
23066   rcv = cp_parser_simple_type_specifier (parser,
23067 					 /*decl_specs=*/NULL,
23068 					 CP_PARSER_FLAGS_NONE);
23069 
23070   return objc_get_class_reference (rcv);
23071 }
23072 
23073 /* Parse the arguments and selectors comprising an Objective-C message.
23074 
23075    objc-message-args:
23076      objc-selector
23077      objc-selector-args
23078      objc-selector-args , objc-comma-args
23079 
23080    objc-selector-args:
23081      objc-selector [opt] : assignment-expression
23082      objc-selector-args objc-selector [opt] : assignment-expression
23083 
23084    objc-comma-args:
23085      assignment-expression
23086      objc-comma-args , assignment-expression
23087 
23088    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
23089    selector arguments and TREE_VALUE containing a list of comma
23090    arguments.  */
23091 
23092 static tree
23093 cp_parser_objc_message_args (cp_parser* parser)
23094 {
23095   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
23096   bool maybe_unary_selector_p = true;
23097   cp_token *token = cp_lexer_peek_token (parser->lexer);
23098 
23099   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
23100     {
23101       tree selector = NULL_TREE, arg;
23102 
23103       if (token->type != CPP_COLON)
23104 	selector = cp_parser_objc_selector (parser);
23105 
23106       /* Detect if we have a unary selector.  */
23107       if (maybe_unary_selector_p
23108 	  && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
23109 	return build_tree_list (selector, NULL_TREE);
23110 
23111       maybe_unary_selector_p = false;
23112       cp_parser_require (parser, CPP_COLON, RT_COLON);
23113       arg = cp_parser_assignment_expression (parser, false, NULL);
23114 
23115       sel_args
23116 	= chainon (sel_args,
23117 		   build_tree_list (selector, arg));
23118 
23119       token = cp_lexer_peek_token (parser->lexer);
23120     }
23121 
23122   /* Handle non-selector arguments, if any. */
23123   while (token->type == CPP_COMMA)
23124     {
23125       tree arg;
23126 
23127       cp_lexer_consume_token (parser->lexer);
23128       arg = cp_parser_assignment_expression (parser, false, NULL);
23129 
23130       addl_args
23131 	= chainon (addl_args,
23132 		   build_tree_list (NULL_TREE, arg));
23133 
23134       token = cp_lexer_peek_token (parser->lexer);
23135     }
23136 
23137   if (sel_args == NULL_TREE && addl_args == NULL_TREE)
23138     {
23139       cp_parser_error (parser, "objective-c++ message argument(s) are expected");
23140       return build_tree_list (error_mark_node, error_mark_node);
23141     }
23142 
23143   return build_tree_list (sel_args, addl_args);
23144 }
23145 
23146 /* Parse an Objective-C encode expression.
23147 
23148    objc-encode-expression:
23149      @encode objc-typename
23150 
23151    Returns an encoded representation of the type argument.  */
23152 
23153 static tree
23154 cp_parser_objc_encode_expression (cp_parser* parser)
23155 {
23156   tree type;
23157   cp_token *token;
23158 
23159   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
23160   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
23161   token = cp_lexer_peek_token (parser->lexer);
23162   type = complete_type (cp_parser_type_id (parser));
23163   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23164 
23165   if (!type)
23166     {
23167       error_at (token->location,
23168 		"%<@encode%> must specify a type as an argument");
23169       return error_mark_node;
23170     }
23171 
23172   /* This happens if we find @encode(T) (where T is a template
23173      typename or something dependent on a template typename) when
23174      parsing a template.  In that case, we can't compile it
23175      immediately, but we rather create an AT_ENCODE_EXPR which will
23176      need to be instantiated when the template is used.
23177   */
23178   if (dependent_type_p (type))
23179     {
23180       tree value = build_min (AT_ENCODE_EXPR, size_type_node, type);
23181       TREE_READONLY (value) = 1;
23182       return value;
23183     }
23184 
23185   return objc_build_encode_expr (type);
23186 }
23187 
23188 /* Parse an Objective-C @defs expression.  */
23189 
23190 static tree
23191 cp_parser_objc_defs_expression (cp_parser *parser)
23192 {
23193   tree name;
23194 
23195   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
23196   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
23197   name = cp_parser_identifier (parser);
23198   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23199 
23200   return objc_get_class_ivars (name);
23201 }
23202 
23203 /* Parse an Objective-C protocol expression.
23204 
23205   objc-protocol-expression:
23206     @protocol ( identifier )
23207 
23208   Returns a representation of the protocol expression.  */
23209 
23210 static tree
23211 cp_parser_objc_protocol_expression (cp_parser* parser)
23212 {
23213   tree proto;
23214 
23215   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
23216   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
23217   proto = cp_parser_identifier (parser);
23218   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23219 
23220   return objc_build_protocol_expr (proto);
23221 }
23222 
23223 /* Parse an Objective-C selector expression.
23224 
23225    objc-selector-expression:
23226      @selector ( objc-method-signature )
23227 
23228    objc-method-signature:
23229      objc-selector
23230      objc-selector-seq
23231 
23232    objc-selector-seq:
23233      objc-selector :
23234      objc-selector-seq objc-selector :
23235 
23236   Returns a representation of the method selector.  */
23237 
23238 static tree
23239 cp_parser_objc_selector_expression (cp_parser* parser)
23240 {
23241   tree sel_seq = NULL_TREE;
23242   bool maybe_unary_selector_p = true;
23243   cp_token *token;
23244   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
23245 
23246   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
23247   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
23248   token = cp_lexer_peek_token (parser->lexer);
23249 
23250   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
23251 	 || token->type == CPP_SCOPE)
23252     {
23253       tree selector = NULL_TREE;
23254 
23255       if (token->type != CPP_COLON
23256 	  || token->type == CPP_SCOPE)
23257 	selector = cp_parser_objc_selector (parser);
23258 
23259       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
23260 	  && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
23261 	{
23262 	  /* Detect if we have a unary selector.  */
23263 	  if (maybe_unary_selector_p)
23264 	    {
23265 	      sel_seq = selector;
23266 	      goto finish_selector;
23267 	    }
23268 	  else
23269 	    {
23270 	      cp_parser_error (parser, "expected %<:%>");
23271 	    }
23272 	}
23273       maybe_unary_selector_p = false;
23274       token = cp_lexer_consume_token (parser->lexer);
23275 
23276       if (token->type == CPP_SCOPE)
23277 	{
23278 	  sel_seq
23279 	    = chainon (sel_seq,
23280 		       build_tree_list (selector, NULL_TREE));
23281 	  sel_seq
23282 	    = chainon (sel_seq,
23283 		       build_tree_list (NULL_TREE, NULL_TREE));
23284 	}
23285       else
23286 	sel_seq
23287 	  = chainon (sel_seq,
23288 		     build_tree_list (selector, NULL_TREE));
23289 
23290       token = cp_lexer_peek_token (parser->lexer);
23291     }
23292 
23293  finish_selector:
23294   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23295 
23296   return objc_build_selector_expr (loc, sel_seq);
23297 }
23298 
23299 /* Parse a list of identifiers.
23300 
23301    objc-identifier-list:
23302      identifier
23303      objc-identifier-list , identifier
23304 
23305    Returns a TREE_LIST of identifier nodes.  */
23306 
23307 static tree
23308 cp_parser_objc_identifier_list (cp_parser* parser)
23309 {
23310   tree identifier;
23311   tree list;
23312   cp_token *sep;
23313 
23314   identifier = cp_parser_identifier (parser);
23315   if (identifier == error_mark_node)
23316     return error_mark_node;
23317 
23318   list = build_tree_list (NULL_TREE, identifier);
23319   sep = cp_lexer_peek_token (parser->lexer);
23320 
23321   while (sep->type == CPP_COMMA)
23322     {
23323       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
23324       identifier = cp_parser_identifier (parser);
23325       if (identifier == error_mark_node)
23326 	return list;
23327 
23328       list = chainon (list, build_tree_list (NULL_TREE,
23329 					     identifier));
23330       sep = cp_lexer_peek_token (parser->lexer);
23331     }
23332 
23333   return list;
23334 }
23335 
23336 /* Parse an Objective-C alias declaration.
23337 
23338    objc-alias-declaration:
23339      @compatibility_alias identifier identifier ;
23340 
23341    This function registers the alias mapping with the Objective-C front end.
23342    It returns nothing.  */
23343 
23344 static void
23345 cp_parser_objc_alias_declaration (cp_parser* parser)
23346 {
23347   tree alias, orig;
23348 
23349   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
23350   alias = cp_parser_identifier (parser);
23351   orig = cp_parser_identifier (parser);
23352   objc_declare_alias (alias, orig);
23353   cp_parser_consume_semicolon_at_end_of_statement (parser);
23354 }
23355 
23356 /* Parse an Objective-C class forward-declaration.
23357 
23358    objc-class-declaration:
23359      @class objc-identifier-list ;
23360 
23361    The function registers the forward declarations with the Objective-C
23362    front end.  It returns nothing.  */
23363 
23364 static void
23365 cp_parser_objc_class_declaration (cp_parser* parser)
23366 {
23367   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
23368   while (true)
23369     {
23370       tree id;
23371 
23372       id = cp_parser_identifier (parser);
23373       if (id == error_mark_node)
23374 	break;
23375 
23376       objc_declare_class (id);
23377 
23378       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23379 	cp_lexer_consume_token (parser->lexer);
23380       else
23381 	break;
23382     }
23383   cp_parser_consume_semicolon_at_end_of_statement (parser);
23384 }
23385 
23386 /* Parse a list of Objective-C protocol references.
23387 
23388    objc-protocol-refs-opt:
23389      objc-protocol-refs [opt]
23390 
23391    objc-protocol-refs:
23392      < objc-identifier-list >
23393 
23394    Returns a TREE_LIST of identifiers, if any.  */
23395 
23396 static tree
23397 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
23398 {
23399   tree protorefs = NULL_TREE;
23400 
23401   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
23402     {
23403       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
23404       protorefs = cp_parser_objc_identifier_list (parser);
23405       cp_parser_require (parser, CPP_GREATER, RT_GREATER);
23406     }
23407 
23408   return protorefs;
23409 }
23410 
23411 /* Parse a Objective-C visibility specification.  */
23412 
23413 static void
23414 cp_parser_objc_visibility_spec (cp_parser* parser)
23415 {
23416   cp_token *vis = cp_lexer_peek_token (parser->lexer);
23417 
23418   switch (vis->keyword)
23419     {
23420     case RID_AT_PRIVATE:
23421       objc_set_visibility (OBJC_IVAR_VIS_PRIVATE);
23422       break;
23423     case RID_AT_PROTECTED:
23424       objc_set_visibility (OBJC_IVAR_VIS_PROTECTED);
23425       break;
23426     case RID_AT_PUBLIC:
23427       objc_set_visibility (OBJC_IVAR_VIS_PUBLIC);
23428       break;
23429     case RID_AT_PACKAGE:
23430       objc_set_visibility (OBJC_IVAR_VIS_PACKAGE);
23431       break;
23432     default:
23433       return;
23434     }
23435 
23436   /* Eat '@private'/'@protected'/'@public'.  */
23437   cp_lexer_consume_token (parser->lexer);
23438 }
23439 
23440 /* Parse an Objective-C method type.  Return 'true' if it is a class
23441    (+) method, and 'false' if it is an instance (-) method.  */
23442 
23443 static inline bool
23444 cp_parser_objc_method_type (cp_parser* parser)
23445 {
23446   if (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS)
23447     return true;
23448   else
23449     return false;
23450 }
23451 
23452 /* Parse an Objective-C protocol qualifier.  */
23453 
23454 static tree
23455 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
23456 {
23457   tree quals = NULL_TREE, node;
23458   cp_token *token = cp_lexer_peek_token (parser->lexer);
23459 
23460   node = token->u.value;
23461 
23462   while (node && TREE_CODE (node) == IDENTIFIER_NODE
23463 	 && (node == ridpointers [(int) RID_IN]
23464 	     || node == ridpointers [(int) RID_OUT]
23465 	     || node == ridpointers [(int) RID_INOUT]
23466 	     || node == ridpointers [(int) RID_BYCOPY]
23467 	     || node == ridpointers [(int) RID_BYREF]
23468 	     || node == ridpointers [(int) RID_ONEWAY]))
23469     {
23470       quals = tree_cons (NULL_TREE, node, quals);
23471       cp_lexer_consume_token (parser->lexer);
23472       token = cp_lexer_peek_token (parser->lexer);
23473       node = token->u.value;
23474     }
23475 
23476   return quals;
23477 }
23478 
23479 /* Parse an Objective-C typename.  */
23480 
23481 static tree
23482 cp_parser_objc_typename (cp_parser* parser)
23483 {
23484   tree type_name = NULL_TREE;
23485 
23486   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
23487     {
23488       tree proto_quals, cp_type = NULL_TREE;
23489 
23490       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
23491       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
23492 
23493       /* An ObjC type name may consist of just protocol qualifiers, in which
23494 	 case the type shall default to 'id'.  */
23495       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
23496 	{
23497 	  cp_type = cp_parser_type_id (parser);
23498 
23499 	  /* If the type could not be parsed, an error has already
23500 	     been produced.  For error recovery, behave as if it had
23501 	     not been specified, which will use the default type
23502 	     'id'.  */
23503 	  if (cp_type == error_mark_node)
23504 	    {
23505 	      cp_type = NULL_TREE;
23506 	      /* We need to skip to the closing parenthesis as
23507 		 cp_parser_type_id() does not seem to do it for
23508 		 us.  */
23509 	      cp_parser_skip_to_closing_parenthesis (parser,
23510 						     /*recovering=*/true,
23511 						     /*or_comma=*/false,
23512 						     /*consume_paren=*/false);
23513 	    }
23514 	}
23515 
23516       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23517       type_name = build_tree_list (proto_quals, cp_type);
23518     }
23519 
23520   return type_name;
23521 }
23522 
23523 /* Check to see if TYPE refers to an Objective-C selector name.  */
23524 
23525 static bool
23526 cp_parser_objc_selector_p (enum cpp_ttype type)
23527 {
23528   return (type == CPP_NAME || type == CPP_KEYWORD
23529 	  || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
23530 	  || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
23531 	  || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
23532 	  || type == CPP_XOR || type == CPP_XOR_EQ);
23533 }
23534 
23535 /* Parse an Objective-C selector.  */
23536 
23537 static tree
23538 cp_parser_objc_selector (cp_parser* parser)
23539 {
23540   cp_token *token = cp_lexer_consume_token (parser->lexer);
23541 
23542   if (!cp_parser_objc_selector_p (token->type))
23543     {
23544       error_at (token->location, "invalid Objective-C++ selector name");
23545       return error_mark_node;
23546     }
23547 
23548   /* C++ operator names are allowed to appear in ObjC selectors.  */
23549   switch (token->type)
23550     {
23551     case CPP_AND_AND: return get_identifier ("and");
23552     case CPP_AND_EQ: return get_identifier ("and_eq");
23553     case CPP_AND: return get_identifier ("bitand");
23554     case CPP_OR: return get_identifier ("bitor");
23555     case CPP_COMPL: return get_identifier ("compl");
23556     case CPP_NOT: return get_identifier ("not");
23557     case CPP_NOT_EQ: return get_identifier ("not_eq");
23558     case CPP_OR_OR: return get_identifier ("or");
23559     case CPP_OR_EQ: return get_identifier ("or_eq");
23560     case CPP_XOR: return get_identifier ("xor");
23561     case CPP_XOR_EQ: return get_identifier ("xor_eq");
23562     default: return token->u.value;
23563     }
23564 }
23565 
23566 /* Parse an Objective-C params list.  */
23567 
23568 static tree
23569 cp_parser_objc_method_keyword_params (cp_parser* parser, tree* attributes)
23570 {
23571   tree params = NULL_TREE;
23572   bool maybe_unary_selector_p = true;
23573   cp_token *token = cp_lexer_peek_token (parser->lexer);
23574 
23575   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
23576     {
23577       tree selector = NULL_TREE, type_name, identifier;
23578       tree parm_attr = NULL_TREE;
23579 
23580       if (token->keyword == RID_ATTRIBUTE)
23581 	break;
23582 
23583       if (token->type != CPP_COLON)
23584 	selector = cp_parser_objc_selector (parser);
23585 
23586       /* Detect if we have a unary selector.  */
23587       if (maybe_unary_selector_p
23588 	  && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
23589 	{
23590 	  params = selector; /* Might be followed by attributes.  */
23591 	  break;
23592 	}
23593 
23594       maybe_unary_selector_p = false;
23595       if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
23596 	{
23597 	  /* Something went quite wrong.  There should be a colon
23598 	     here, but there is not.  Stop parsing parameters.  */
23599 	  break;
23600 	}
23601       type_name = cp_parser_objc_typename (parser);
23602       /* New ObjC allows attributes on parameters too.  */
23603       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
23604 	parm_attr = cp_parser_attributes_opt (parser);
23605       identifier = cp_parser_identifier (parser);
23606 
23607       params
23608 	= chainon (params,
23609 		   objc_build_keyword_decl (selector,
23610 					    type_name,
23611 					    identifier,
23612 					    parm_attr));
23613 
23614       token = cp_lexer_peek_token (parser->lexer);
23615     }
23616 
23617   if (params == NULL_TREE)
23618     {
23619       cp_parser_error (parser, "objective-c++ method declaration is expected");
23620       return error_mark_node;
23621     }
23622 
23623   /* We allow tail attributes for the method.  */
23624   if (token->keyword == RID_ATTRIBUTE)
23625     {
23626       *attributes = cp_parser_attributes_opt (parser);
23627       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
23628 	  || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
23629 	return params;
23630       cp_parser_error (parser,
23631 		       "method attributes must be specified at the end");
23632       return error_mark_node;
23633     }
23634 
23635   if (params == NULL_TREE)
23636     {
23637       cp_parser_error (parser, "objective-c++ method declaration is expected");
23638       return error_mark_node;
23639     }
23640   return params;
23641 }
23642 
23643 /* Parse the non-keyword Objective-C params.  */
23644 
23645 static tree
23646 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp,
23647 				       tree* attributes)
23648 {
23649   tree params = make_node (TREE_LIST);
23650   cp_token *token = cp_lexer_peek_token (parser->lexer);
23651   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
23652 
23653   while (token->type == CPP_COMMA)
23654     {
23655       cp_parameter_declarator *parmdecl;
23656       tree parm;
23657 
23658       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
23659       token = cp_lexer_peek_token (parser->lexer);
23660 
23661       if (token->type == CPP_ELLIPSIS)
23662 	{
23663 	  cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
23664 	  *ellipsisp = true;
23665 	  token = cp_lexer_peek_token (parser->lexer);
23666 	  break;
23667 	}
23668 
23669       /* TODO: parse attributes for tail parameters.  */
23670       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
23671       parm = grokdeclarator (parmdecl->declarator,
23672 			     &parmdecl->decl_specifiers,
23673 			     PARM, /*initialized=*/0,
23674 			     /*attrlist=*/NULL);
23675 
23676       chainon (params, build_tree_list (NULL_TREE, parm));
23677       token = cp_lexer_peek_token (parser->lexer);
23678     }
23679 
23680   /* We allow tail attributes for the method.  */
23681   if (token->keyword == RID_ATTRIBUTE)
23682     {
23683       if (*attributes == NULL_TREE)
23684 	{
23685 	  *attributes = cp_parser_attributes_opt (parser);
23686 	  if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
23687 	      || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
23688 	    return params;
23689 	}
23690       else
23691 	/* We have an error, but parse the attributes, so that we can
23692 	   carry on.  */
23693 	*attributes = cp_parser_attributes_opt (parser);
23694 
23695       cp_parser_error (parser,
23696 		       "method attributes must be specified at the end");
23697       return error_mark_node;
23698     }
23699 
23700   return params;
23701 }
23702 
23703 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
23704 
23705 static void
23706 cp_parser_objc_interstitial_code (cp_parser* parser)
23707 {
23708   cp_token *token = cp_lexer_peek_token (parser->lexer);
23709 
23710   /* If the next token is `extern' and the following token is a string
23711      literal, then we have a linkage specification.  */
23712   if (token->keyword == RID_EXTERN
23713       && cp_parser_is_pure_string_literal
23714 	 (cp_lexer_peek_nth_token (parser->lexer, 2)))
23715     cp_parser_linkage_specification (parser);
23716   /* Handle #pragma, if any.  */
23717   else if (token->type == CPP_PRAGMA)
23718     cp_parser_pragma (parser, pragma_external);
23719   /* Allow stray semicolons.  */
23720   else if (token->type == CPP_SEMICOLON)
23721     cp_lexer_consume_token (parser->lexer);
23722   /* Mark methods as optional or required, when building protocols.  */
23723   else if (token->keyword == RID_AT_OPTIONAL)
23724     {
23725       cp_lexer_consume_token (parser->lexer);
23726       objc_set_method_opt (true);
23727     }
23728   else if (token->keyword == RID_AT_REQUIRED)
23729     {
23730       cp_lexer_consume_token (parser->lexer);
23731       objc_set_method_opt (false);
23732     }
23733   else if (token->keyword == RID_NAMESPACE)
23734     cp_parser_namespace_definition (parser);
23735   /* Other stray characters must generate errors.  */
23736   else if (token->type == CPP_OPEN_BRACE || token->type == CPP_CLOSE_BRACE)
23737     {
23738       cp_lexer_consume_token (parser->lexer);
23739       error ("stray %qs between Objective-C++ methods",
23740 	     token->type == CPP_OPEN_BRACE ? "{" : "}");
23741     }
23742   /* Finally, try to parse a block-declaration, or a function-definition.  */
23743   else
23744     cp_parser_block_declaration (parser, /*statement_p=*/false);
23745 }
23746 
23747 /* Parse a method signature.  */
23748 
23749 static tree
23750 cp_parser_objc_method_signature (cp_parser* parser, tree* attributes)
23751 {
23752   tree rettype, kwdparms, optparms;
23753   bool ellipsis = false;
23754   bool is_class_method;
23755 
23756   is_class_method = cp_parser_objc_method_type (parser);
23757   rettype = cp_parser_objc_typename (parser);
23758   *attributes = NULL_TREE;
23759   kwdparms = cp_parser_objc_method_keyword_params (parser, attributes);
23760   if (kwdparms == error_mark_node)
23761     return error_mark_node;
23762   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis, attributes);
23763   if (optparms == error_mark_node)
23764     return error_mark_node;
23765 
23766   return objc_build_method_signature (is_class_method, rettype, kwdparms, optparms, ellipsis);
23767 }
23768 
23769 static bool
23770 cp_parser_objc_method_maybe_bad_prefix_attributes (cp_parser* parser)
23771 {
23772   tree tattr;
23773   cp_lexer_save_tokens (parser->lexer);
23774   tattr = cp_parser_attributes_opt (parser);
23775   gcc_assert (tattr) ;
23776 
23777   /* If the attributes are followed by a method introducer, this is not allowed.
23778      Dump the attributes and flag the situation.  */
23779   if (cp_lexer_next_token_is (parser->lexer, CPP_PLUS)
23780       || cp_lexer_next_token_is (parser->lexer, CPP_MINUS))
23781     return true;
23782 
23783   /* Otherwise, the attributes introduce some interstitial code, possibly so
23784      rewind to allow that check.  */
23785   cp_lexer_rollback_tokens (parser->lexer);
23786   return false;
23787 }
23788 
23789 /* Parse an Objective-C method prototype list.  */
23790 
23791 static void
23792 cp_parser_objc_method_prototype_list (cp_parser* parser)
23793 {
23794   cp_token *token = cp_lexer_peek_token (parser->lexer);
23795 
23796   while (token->keyword != RID_AT_END && token->type != CPP_EOF)
23797     {
23798       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
23799 	{
23800 	  tree attributes, sig;
23801 	  bool is_class_method;
23802 	  if (token->type == CPP_PLUS)
23803 	    is_class_method = true;
23804 	  else
23805 	    is_class_method = false;
23806 	  sig = cp_parser_objc_method_signature (parser, &attributes);
23807 	  if (sig == error_mark_node)
23808 	    {
23809 	      cp_parser_skip_to_end_of_block_or_statement (parser);
23810 	      token = cp_lexer_peek_token (parser->lexer);
23811 	      continue;
23812 	    }
23813 	  objc_add_method_declaration (is_class_method, sig, attributes);
23814 	  cp_parser_consume_semicolon_at_end_of_statement (parser);
23815 	}
23816       else if (token->keyword == RID_AT_PROPERTY)
23817 	cp_parser_objc_at_property_declaration (parser);
23818       else if (token->keyword == RID_ATTRIBUTE
23819       	       && cp_parser_objc_method_maybe_bad_prefix_attributes(parser))
23820 	warning_at (cp_lexer_peek_token (parser->lexer)->location,
23821 		    OPT_Wattributes,
23822 		    "prefix attributes are ignored for methods");
23823       else
23824 	/* Allow for interspersed non-ObjC++ code.  */
23825 	cp_parser_objc_interstitial_code (parser);
23826 
23827       token = cp_lexer_peek_token (parser->lexer);
23828     }
23829 
23830   if (token->type != CPP_EOF)
23831     cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
23832   else
23833     cp_parser_error (parser, "expected %<@end%>");
23834 
23835   objc_finish_interface ();
23836 }
23837 
23838 /* Parse an Objective-C method definition list.  */
23839 
23840 static void
23841 cp_parser_objc_method_definition_list (cp_parser* parser)
23842 {
23843   cp_token *token = cp_lexer_peek_token (parser->lexer);
23844 
23845   while (token->keyword != RID_AT_END && token->type != CPP_EOF)
23846     {
23847       tree meth;
23848 
23849       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
23850 	{
23851 	  cp_token *ptk;
23852 	  tree sig, attribute;
23853 	  bool is_class_method;
23854 	  if (token->type == CPP_PLUS)
23855 	    is_class_method = true;
23856 	  else
23857 	    is_class_method = false;
23858 	  push_deferring_access_checks (dk_deferred);
23859 	  sig = cp_parser_objc_method_signature (parser, &attribute);
23860 	  if (sig == error_mark_node)
23861 	    {
23862 	      cp_parser_skip_to_end_of_block_or_statement (parser);
23863 	      token = cp_lexer_peek_token (parser->lexer);
23864 	      continue;
23865 	    }
23866 	  objc_start_method_definition (is_class_method, sig, attribute,
23867 					NULL_TREE);
23868 
23869 	  /* For historical reasons, we accept an optional semicolon.  */
23870 	  if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
23871 	    cp_lexer_consume_token (parser->lexer);
23872 
23873 	  ptk = cp_lexer_peek_token (parser->lexer);
23874 	  if (!(ptk->type == CPP_PLUS || ptk->type == CPP_MINUS
23875 		|| ptk->type == CPP_EOF || ptk->keyword == RID_AT_END))
23876 	    {
23877 	      perform_deferred_access_checks ();
23878 	      stop_deferring_access_checks ();
23879 	      meth = cp_parser_function_definition_after_declarator (parser,
23880 								     false);
23881 	      pop_deferring_access_checks ();
23882 	      objc_finish_method_definition (meth);
23883 	    }
23884 	}
23885       /* The following case will be removed once @synthesize is
23886 	 completely implemented.  */
23887       else if (token->keyword == RID_AT_PROPERTY)
23888 	cp_parser_objc_at_property_declaration (parser);
23889       else if (token->keyword == RID_AT_SYNTHESIZE)
23890 	cp_parser_objc_at_synthesize_declaration (parser);
23891       else if (token->keyword == RID_AT_DYNAMIC)
23892 	cp_parser_objc_at_dynamic_declaration (parser);
23893       else if (token->keyword == RID_ATTRIBUTE
23894       	       && cp_parser_objc_method_maybe_bad_prefix_attributes(parser))
23895 	warning_at (token->location, OPT_Wattributes,
23896 	       	    "prefix attributes are ignored for methods");
23897       else
23898 	/* Allow for interspersed non-ObjC++ code.  */
23899 	cp_parser_objc_interstitial_code (parser);
23900 
23901       token = cp_lexer_peek_token (parser->lexer);
23902     }
23903 
23904   if (token->type != CPP_EOF)
23905     cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
23906   else
23907     cp_parser_error (parser, "expected %<@end%>");
23908 
23909   objc_finish_implementation ();
23910 }
23911 
23912 /* Parse Objective-C ivars.  */
23913 
23914 static void
23915 cp_parser_objc_class_ivars (cp_parser* parser)
23916 {
23917   cp_token *token = cp_lexer_peek_token (parser->lexer);
23918 
23919   if (token->type != CPP_OPEN_BRACE)
23920     return;	/* No ivars specified.  */
23921 
23922   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
23923   token = cp_lexer_peek_token (parser->lexer);
23924 
23925   while (token->type != CPP_CLOSE_BRACE
23926 	&& token->keyword != RID_AT_END && token->type != CPP_EOF)
23927     {
23928       cp_decl_specifier_seq declspecs;
23929       int decl_class_or_enum_p;
23930       tree prefix_attributes;
23931 
23932       cp_parser_objc_visibility_spec (parser);
23933 
23934       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
23935 	break;
23936 
23937       cp_parser_decl_specifier_seq (parser,
23938 				    CP_PARSER_FLAGS_OPTIONAL,
23939 				    &declspecs,
23940 				    &decl_class_or_enum_p);
23941 
23942       /* auto, register, static, extern, mutable.  */
23943       if (declspecs.storage_class != sc_none)
23944 	{
23945 	  cp_parser_error (parser, "invalid type for instance variable");
23946 	  declspecs.storage_class = sc_none;
23947 	}
23948 
23949       /* __thread.  */
23950       if (declspecs.specs[(int) ds_thread])
23951 	{
23952 	  cp_parser_error (parser, "invalid type for instance variable");
23953 	  declspecs.specs[(int) ds_thread] = 0;
23954 	}
23955 
23956       /* typedef.  */
23957       if (declspecs.specs[(int) ds_typedef])
23958 	{
23959 	  cp_parser_error (parser, "invalid type for instance variable");
23960 	  declspecs.specs[(int) ds_typedef] = 0;
23961 	}
23962 
23963       prefix_attributes = declspecs.attributes;
23964       declspecs.attributes = NULL_TREE;
23965 
23966       /* Keep going until we hit the `;' at the end of the
23967 	 declaration.  */
23968       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
23969 	{
23970 	  tree width = NULL_TREE, attributes, first_attribute, decl;
23971 	  cp_declarator *declarator = NULL;
23972 	  int ctor_dtor_or_conv_p;
23973 
23974 	  /* Check for a (possibly unnamed) bitfield declaration.  */
23975 	  token = cp_lexer_peek_token (parser->lexer);
23976 	  if (token->type == CPP_COLON)
23977 	    goto eat_colon;
23978 
23979 	  if (token->type == CPP_NAME
23980 	      && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
23981 		  == CPP_COLON))
23982 	    {
23983 	      /* Get the name of the bitfield.  */
23984 	      declarator = make_id_declarator (NULL_TREE,
23985 					       cp_parser_identifier (parser),
23986 					       sfk_none);
23987 
23988 	     eat_colon:
23989 	      cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
23990 	      /* Get the width of the bitfield.  */
23991 	      width
23992 		= cp_parser_constant_expression (parser,
23993 						 /*allow_non_constant=*/false,
23994 						 NULL);
23995 	    }
23996 	  else
23997 	    {
23998 	      /* Parse the declarator.  */
23999 	      declarator
24000 		= cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
24001 					&ctor_dtor_or_conv_p,
24002 					/*parenthesized_p=*/NULL,
24003 					/*member_p=*/false);
24004 	    }
24005 
24006 	  /* Look for attributes that apply to the ivar.  */
24007 	  attributes = cp_parser_attributes_opt (parser);
24008 	  /* Remember which attributes are prefix attributes and
24009 	     which are not.  */
24010 	  first_attribute = attributes;
24011 	  /* Combine the attributes.  */
24012 	  attributes = chainon (prefix_attributes, attributes);
24013 
24014 	  if (width)
24015 	      /* Create the bitfield declaration.  */
24016 	      decl = grokbitfield (declarator, &declspecs,
24017 				   width,
24018 				   attributes);
24019 	  else
24020 	    decl = grokfield (declarator, &declspecs,
24021 			      NULL_TREE, /*init_const_expr_p=*/false,
24022 			      NULL_TREE, attributes);
24023 
24024 	  /* Add the instance variable.  */
24025 	  if (decl != error_mark_node && decl != NULL_TREE)
24026 	    objc_add_instance_variable (decl);
24027 
24028 	  /* Reset PREFIX_ATTRIBUTES.  */
24029 	  while (attributes && TREE_CHAIN (attributes) != first_attribute)
24030 	    attributes = TREE_CHAIN (attributes);
24031 	  if (attributes)
24032 	    TREE_CHAIN (attributes) = NULL_TREE;
24033 
24034 	  token = cp_lexer_peek_token (parser->lexer);
24035 
24036 	  if (token->type == CPP_COMMA)
24037 	    {
24038 	      cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
24039 	      continue;
24040 	    }
24041 	  break;
24042 	}
24043 
24044       cp_parser_consume_semicolon_at_end_of_statement (parser);
24045       token = cp_lexer_peek_token (parser->lexer);
24046     }
24047 
24048   if (token->keyword == RID_AT_END)
24049     cp_parser_error (parser, "expected %<}%>");
24050 
24051   /* Do not consume the RID_AT_END, so it will be read again as terminating
24052      the @interface of @implementation.  */
24053   if (token->keyword != RID_AT_END && token->type != CPP_EOF)
24054     cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
24055 
24056   /* For historical reasons, we accept an optional semicolon.  */
24057   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
24058     cp_lexer_consume_token (parser->lexer);
24059 }
24060 
24061 /* Parse an Objective-C protocol declaration.  */
24062 
24063 static void
24064 cp_parser_objc_protocol_declaration (cp_parser* parser, tree attributes)
24065 {
24066   tree proto, protorefs;
24067   cp_token *tok;
24068 
24069   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
24070   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
24071     {
24072       tok = cp_lexer_peek_token (parser->lexer);
24073       error_at (tok->location, "identifier expected after %<@protocol%>");
24074       cp_parser_consume_semicolon_at_end_of_statement (parser);
24075       return;
24076     }
24077 
24078   /* See if we have a forward declaration or a definition.  */
24079   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
24080 
24081   /* Try a forward declaration first.  */
24082   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
24083     {
24084       while (true)
24085 	{
24086 	  tree id;
24087 
24088 	  id = cp_parser_identifier (parser);
24089 	  if (id == error_mark_node)
24090 	    break;
24091 
24092 	  objc_declare_protocol (id, attributes);
24093 
24094 	  if(cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24095 	    cp_lexer_consume_token (parser->lexer);
24096 	  else
24097 	    break;
24098 	}
24099       cp_parser_consume_semicolon_at_end_of_statement (parser);
24100     }
24101 
24102   /* Ok, we got a full-fledged definition (or at least should).  */
24103   else
24104     {
24105       proto = cp_parser_identifier (parser);
24106       protorefs = cp_parser_objc_protocol_refs_opt (parser);
24107       objc_start_protocol (proto, protorefs, attributes);
24108       cp_parser_objc_method_prototype_list (parser);
24109     }
24110 }
24111 
24112 /* Parse an Objective-C superclass or category.  */
24113 
24114 static void
24115 cp_parser_objc_superclass_or_category (cp_parser *parser,
24116 				       bool iface_p,
24117 				       tree *super,
24118 				       tree *categ, bool *is_class_extension)
24119 {
24120   cp_token *next = cp_lexer_peek_token (parser->lexer);
24121 
24122   *super = *categ = NULL_TREE;
24123   *is_class_extension = false;
24124   if (next->type == CPP_COLON)
24125     {
24126       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
24127       *super = cp_parser_identifier (parser);
24128     }
24129   else if (next->type == CPP_OPEN_PAREN)
24130     {
24131       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
24132 
24133       /* If there is no category name, and this is an @interface, we
24134 	 have a class extension.  */
24135       if (iface_p && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
24136 	{
24137 	  *categ = NULL_TREE;
24138 	  *is_class_extension = true;
24139 	}
24140       else
24141 	*categ = cp_parser_identifier (parser);
24142 
24143       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
24144     }
24145 }
24146 
24147 /* Parse an Objective-C class interface.  */
24148 
24149 static void
24150 cp_parser_objc_class_interface (cp_parser* parser, tree attributes)
24151 {
24152   tree name, super, categ, protos;
24153   bool is_class_extension;
24154 
24155   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
24156   name = cp_parser_identifier (parser);
24157   if (name == error_mark_node)
24158     {
24159       /* It's hard to recover because even if valid @interface stuff
24160 	 is to follow, we can't compile it (or validate it) if we
24161 	 don't even know which class it refers to.  Let's assume this
24162 	 was a stray '@interface' token in the stream and skip it.
24163       */
24164       return;
24165     }
24166   cp_parser_objc_superclass_or_category (parser, true, &super, &categ,
24167 					 &is_class_extension);
24168   protos = cp_parser_objc_protocol_refs_opt (parser);
24169 
24170   /* We have either a class or a category on our hands.  */
24171   if (categ || is_class_extension)
24172     objc_start_category_interface (name, categ, protos, attributes);
24173   else
24174     {
24175       objc_start_class_interface (name, super, protos, attributes);
24176       /* Handle instance variable declarations, if any.  */
24177       cp_parser_objc_class_ivars (parser);
24178       objc_continue_interface ();
24179     }
24180 
24181   cp_parser_objc_method_prototype_list (parser);
24182 }
24183 
24184 /* Parse an Objective-C class implementation.  */
24185 
24186 static void
24187 cp_parser_objc_class_implementation (cp_parser* parser)
24188 {
24189   tree name, super, categ;
24190   bool is_class_extension;
24191 
24192   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
24193   name = cp_parser_identifier (parser);
24194   if (name == error_mark_node)
24195     {
24196       /* It's hard to recover because even if valid @implementation
24197 	 stuff is to follow, we can't compile it (or validate it) if
24198 	 we don't even know which class it refers to.  Let's assume
24199 	 this was a stray '@implementation' token in the stream and
24200 	 skip it.
24201       */
24202       return;
24203     }
24204   cp_parser_objc_superclass_or_category (parser, false, &super, &categ,
24205 					 &is_class_extension);
24206 
24207   /* We have either a class or a category on our hands.  */
24208   if (categ)
24209     objc_start_category_implementation (name, categ);
24210   else
24211     {
24212       objc_start_class_implementation (name, super);
24213       /* Handle instance variable declarations, if any.  */
24214       cp_parser_objc_class_ivars (parser);
24215       objc_continue_implementation ();
24216     }
24217 
24218   cp_parser_objc_method_definition_list (parser);
24219 }
24220 
24221 /* Consume the @end token and finish off the implementation.  */
24222 
24223 static void
24224 cp_parser_objc_end_implementation (cp_parser* parser)
24225 {
24226   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
24227   objc_finish_implementation ();
24228 }
24229 
24230 /* Parse an Objective-C declaration.  */
24231 
24232 static void
24233 cp_parser_objc_declaration (cp_parser* parser, tree attributes)
24234 {
24235   /* Try to figure out what kind of declaration is present.  */
24236   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
24237 
24238   if (attributes)
24239     switch (kwd->keyword)
24240       {
24241 	case RID_AT_ALIAS:
24242 	case RID_AT_CLASS:
24243 	case RID_AT_END:
24244 	  error_at (kwd->location, "attributes may not be specified before"
24245 	            " the %<@%D%> Objective-C++ keyword",
24246 		    kwd->u.value);
24247 	  attributes = NULL;
24248 	  break;
24249 	case RID_AT_IMPLEMENTATION:
24250 	  warning_at (kwd->location, OPT_Wattributes,
24251 		      "prefix attributes are ignored before %<@%D%>",
24252 		      kwd->u.value);
24253 	  attributes = NULL;
24254 	default:
24255 	  break;
24256       }
24257 
24258   switch (kwd->keyword)
24259     {
24260     case RID_AT_ALIAS:
24261       cp_parser_objc_alias_declaration (parser);
24262       break;
24263     case RID_AT_CLASS:
24264       cp_parser_objc_class_declaration (parser);
24265       break;
24266     case RID_AT_PROTOCOL:
24267       cp_parser_objc_protocol_declaration (parser, attributes);
24268       break;
24269     case RID_AT_INTERFACE:
24270       cp_parser_objc_class_interface (parser, attributes);
24271       break;
24272     case RID_AT_IMPLEMENTATION:
24273       cp_parser_objc_class_implementation (parser);
24274       break;
24275     case RID_AT_END:
24276       cp_parser_objc_end_implementation (parser);
24277       break;
24278     default:
24279       error_at (kwd->location, "misplaced %<@%D%> Objective-C++ construct",
24280 		kwd->u.value);
24281       cp_parser_skip_to_end_of_block_or_statement (parser);
24282     }
24283 }
24284 
24285 /* Parse an Objective-C try-catch-finally statement.
24286 
24287    objc-try-catch-finally-stmt:
24288      @try compound-statement objc-catch-clause-seq [opt]
24289        objc-finally-clause [opt]
24290 
24291    objc-catch-clause-seq:
24292      objc-catch-clause objc-catch-clause-seq [opt]
24293 
24294    objc-catch-clause:
24295      @catch ( objc-exception-declaration ) compound-statement
24296 
24297    objc-finally-clause:
24298      @finally compound-statement
24299 
24300    objc-exception-declaration:
24301      parameter-declaration
24302      '...'
24303 
24304    where '...' is to be interpreted literally, that is, it means CPP_ELLIPSIS.
24305 
24306    Returns NULL_TREE.
24307 
24308    PS: This function is identical to c_parser_objc_try_catch_finally_statement
24309    for C.  Keep them in sync.  */
24310 
24311 static tree
24312 cp_parser_objc_try_catch_finally_statement (cp_parser *parser)
24313 {
24314   location_t location;
24315   tree stmt;
24316 
24317   cp_parser_require_keyword (parser, RID_AT_TRY, RT_AT_TRY);
24318   location = cp_lexer_peek_token (parser->lexer)->location;
24319   objc_maybe_warn_exceptions (location);
24320   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
24321      node, lest it get absorbed into the surrounding block.  */
24322   stmt = push_stmt_list ();
24323   cp_parser_compound_statement (parser, NULL, false, false);
24324   objc_begin_try_stmt (location, pop_stmt_list (stmt));
24325 
24326   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
24327     {
24328       cp_parameter_declarator *parm;
24329       tree parameter_declaration = error_mark_node;
24330       bool seen_open_paren = false;
24331 
24332       cp_lexer_consume_token (parser->lexer);
24333       if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24334 	seen_open_paren = true;
24335       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
24336 	{
24337 	  /* We have "@catch (...)" (where the '...' are literally
24338 	     what is in the code).  Skip the '...'.
24339 	     parameter_declaration is set to NULL_TREE, and
24340 	     objc_being_catch_clauses() knows that that means
24341 	     '...'.  */
24342 	  cp_lexer_consume_token (parser->lexer);
24343 	  parameter_declaration = NULL_TREE;
24344 	}
24345       else
24346 	{
24347 	  /* We have "@catch (NSException *exception)" or something
24348 	     like that.  Parse the parameter declaration.  */
24349 	  parm = cp_parser_parameter_declaration (parser, false, NULL);
24350 	  if (parm == NULL)
24351 	    parameter_declaration = error_mark_node;
24352 	  else
24353 	    parameter_declaration = grokdeclarator (parm->declarator,
24354 						    &parm->decl_specifiers,
24355 						    PARM, /*initialized=*/0,
24356 						    /*attrlist=*/NULL);
24357 	}
24358       if (seen_open_paren)
24359 	cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
24360       else
24361 	{
24362 	  /* If there was no open parenthesis, we are recovering from
24363 	     an error, and we are trying to figure out what mistake
24364 	     the user has made.  */
24365 
24366 	  /* If there is an immediate closing parenthesis, the user
24367 	     probably forgot the opening one (ie, they typed "@catch
24368 	     NSException *e)".  Parse the closing parenthesis and keep
24369 	     going.  */
24370 	  if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
24371 	    cp_lexer_consume_token (parser->lexer);
24372 
24373 	  /* If these is no immediate closing parenthesis, the user
24374 	     probably doesn't know that parenthesis are required at
24375 	     all (ie, they typed "@catch NSException *e").  So, just
24376 	     forget about the closing parenthesis and keep going.  */
24377 	}
24378       objc_begin_catch_clause (parameter_declaration);
24379       cp_parser_compound_statement (parser, NULL, false, false);
24380       objc_finish_catch_clause ();
24381     }
24382   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
24383     {
24384       cp_lexer_consume_token (parser->lexer);
24385       location = cp_lexer_peek_token (parser->lexer)->location;
24386       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
24387 	 node, lest it get absorbed into the surrounding block.  */
24388       stmt = push_stmt_list ();
24389       cp_parser_compound_statement (parser, NULL, false, false);
24390       objc_build_finally_clause (location, pop_stmt_list (stmt));
24391     }
24392 
24393   return objc_finish_try_stmt ();
24394 }
24395 
24396 /* Parse an Objective-C synchronized statement.
24397 
24398    objc-synchronized-stmt:
24399      @synchronized ( expression ) compound-statement
24400 
24401    Returns NULL_TREE.  */
24402 
24403 static tree
24404 cp_parser_objc_synchronized_statement (cp_parser *parser)
24405 {
24406   location_t location;
24407   tree lock, stmt;
24408 
24409   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, RT_AT_SYNCHRONIZED);
24410 
24411   location = cp_lexer_peek_token (parser->lexer)->location;
24412   objc_maybe_warn_exceptions (location);
24413   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
24414   lock = cp_parser_expression (parser, false, NULL);
24415   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
24416 
24417   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
24418      node, lest it get absorbed into the surrounding block.  */
24419   stmt = push_stmt_list ();
24420   cp_parser_compound_statement (parser, NULL, false, false);
24421 
24422   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
24423 }
24424 
24425 /* Parse an Objective-C throw statement.
24426 
24427    objc-throw-stmt:
24428      @throw assignment-expression [opt] ;
24429 
24430    Returns a constructed '@throw' statement.  */
24431 
24432 static tree
24433 cp_parser_objc_throw_statement (cp_parser *parser)
24434 {
24435   tree expr = NULL_TREE;
24436   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
24437 
24438   cp_parser_require_keyword (parser, RID_AT_THROW, RT_AT_THROW);
24439 
24440   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
24441     expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
24442 
24443   cp_parser_consume_semicolon_at_end_of_statement (parser);
24444 
24445   return objc_build_throw_stmt (loc, expr);
24446 }
24447 
24448 /* Parse an Objective-C statement.  */
24449 
24450 static tree
24451 cp_parser_objc_statement (cp_parser * parser)
24452 {
24453   /* Try to figure out what kind of declaration is present.  */
24454   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
24455 
24456   switch (kwd->keyword)
24457     {
24458     case RID_AT_TRY:
24459       return cp_parser_objc_try_catch_finally_statement (parser);
24460     case RID_AT_SYNCHRONIZED:
24461       return cp_parser_objc_synchronized_statement (parser);
24462     case RID_AT_THROW:
24463       return cp_parser_objc_throw_statement (parser);
24464     default:
24465       error_at (kwd->location, "misplaced %<@%D%> Objective-C++ construct",
24466 	       kwd->u.value);
24467       cp_parser_skip_to_end_of_block_or_statement (parser);
24468     }
24469 
24470   return error_mark_node;
24471 }
24472 
24473 /* If we are compiling ObjC++ and we see an __attribute__ we neeed to
24474    look ahead to see if an objc keyword follows the attributes.  This
24475    is to detect the use of prefix attributes on ObjC @interface and
24476    @protocol.  */
24477 
24478 static bool
24479 cp_parser_objc_valid_prefix_attributes (cp_parser* parser, tree *attrib)
24480 {
24481   cp_lexer_save_tokens (parser->lexer);
24482   *attrib = cp_parser_attributes_opt (parser);
24483   gcc_assert (*attrib);
24484   if (OBJC_IS_AT_KEYWORD (cp_lexer_peek_token (parser->lexer)->keyword))
24485     {
24486       cp_lexer_commit_tokens (parser->lexer);
24487       return true;
24488     }
24489   cp_lexer_rollback_tokens (parser->lexer);
24490   return false;
24491 }
24492 
24493 /* This routine is a minimal replacement for
24494    c_parser_struct_declaration () used when parsing the list of
24495    types/names or ObjC++ properties.  For example, when parsing the
24496    code
24497 
24498    @property (readonly) int a, b, c;
24499 
24500    this function is responsible for parsing "int a, int b, int c" and
24501    returning the declarations as CHAIN of DECLs.
24502 
24503    TODO: Share this code with cp_parser_objc_class_ivars.  It's very
24504    similar parsing.  */
24505 static tree
24506 cp_parser_objc_struct_declaration (cp_parser *parser)
24507 {
24508   tree decls = NULL_TREE;
24509   cp_decl_specifier_seq declspecs;
24510   int decl_class_or_enum_p;
24511   tree prefix_attributes;
24512 
24513   cp_parser_decl_specifier_seq (parser,
24514 				CP_PARSER_FLAGS_NONE,
24515 				&declspecs,
24516 				&decl_class_or_enum_p);
24517 
24518   if (declspecs.type == error_mark_node)
24519     return error_mark_node;
24520 
24521   /* auto, register, static, extern, mutable.  */
24522   if (declspecs.storage_class != sc_none)
24523     {
24524       cp_parser_error (parser, "invalid type for property");
24525       declspecs.storage_class = sc_none;
24526     }
24527 
24528   /* __thread.  */
24529   if (declspecs.specs[(int) ds_thread])
24530     {
24531       cp_parser_error (parser, "invalid type for property");
24532       declspecs.specs[(int) ds_thread] = 0;
24533     }
24534 
24535   /* typedef.  */
24536   if (declspecs.specs[(int) ds_typedef])
24537     {
24538       cp_parser_error (parser, "invalid type for property");
24539       declspecs.specs[(int) ds_typedef] = 0;
24540     }
24541 
24542   prefix_attributes = declspecs.attributes;
24543   declspecs.attributes = NULL_TREE;
24544 
24545   /* Keep going until we hit the `;' at the end of the declaration. */
24546   while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
24547     {
24548       tree attributes, first_attribute, decl;
24549       cp_declarator *declarator;
24550       cp_token *token;
24551 
24552       /* Parse the declarator.  */
24553       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
24554 					 NULL, NULL, false);
24555 
24556       /* Look for attributes that apply to the ivar.  */
24557       attributes = cp_parser_attributes_opt (parser);
24558       /* Remember which attributes are prefix attributes and
24559 	 which are not.  */
24560       first_attribute = attributes;
24561       /* Combine the attributes.  */
24562       attributes = chainon (prefix_attributes, attributes);
24563 
24564       decl = grokfield (declarator, &declspecs,
24565 			NULL_TREE, /*init_const_expr_p=*/false,
24566 			NULL_TREE, attributes);
24567 
24568       if (decl == error_mark_node || decl == NULL_TREE)
24569 	return error_mark_node;
24570 
24571       /* Reset PREFIX_ATTRIBUTES.  */
24572       while (attributes && TREE_CHAIN (attributes) != first_attribute)
24573 	attributes = TREE_CHAIN (attributes);
24574       if (attributes)
24575 	TREE_CHAIN (attributes) = NULL_TREE;
24576 
24577       DECL_CHAIN (decl) = decls;
24578       decls = decl;
24579 
24580       token = cp_lexer_peek_token (parser->lexer);
24581       if (token->type == CPP_COMMA)
24582 	{
24583 	  cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
24584 	  continue;
24585 	}
24586       else
24587 	break;
24588     }
24589   return decls;
24590 }
24591 
24592 /* Parse an Objective-C @property declaration.  The syntax is:
24593 
24594    objc-property-declaration:
24595      '@property' objc-property-attributes[opt] struct-declaration ;
24596 
24597    objc-property-attributes:
24598     '(' objc-property-attribute-list ')'
24599 
24600    objc-property-attribute-list:
24601      objc-property-attribute
24602      objc-property-attribute-list, objc-property-attribute
24603 
24604    objc-property-attribute
24605      'getter' = identifier
24606      'setter' = identifier
24607      'readonly'
24608      'readwrite'
24609      'assign'
24610      'retain'
24611      'copy'
24612      'nonatomic'
24613 
24614   For example:
24615     @property NSString *name;
24616     @property (readonly) id object;
24617     @property (retain, nonatomic, getter=getTheName) id name;
24618     @property int a, b, c;
24619 
24620    PS: This function is identical to
24621    c_parser_objc_at_property_declaration for C.  Keep them in sync.  */
24622 static void
24623 cp_parser_objc_at_property_declaration (cp_parser *parser)
24624 {
24625   /* The following variables hold the attributes of the properties as
24626      parsed.  They are 'false' or 'NULL_TREE' if the attribute was not
24627      seen.  When we see an attribute, we set them to 'true' (if they
24628      are boolean properties) or to the identifier (if they have an
24629      argument, ie, for getter and setter).  Note that here we only
24630      parse the list of attributes, check the syntax and accumulate the
24631      attributes that we find.  objc_add_property_declaration() will
24632      then process the information.  */
24633   bool property_assign = false;
24634   bool property_copy = false;
24635   tree property_getter_ident = NULL_TREE;
24636   bool property_nonatomic = false;
24637   bool property_readonly = false;
24638   bool property_readwrite = false;
24639   bool property_retain = false;
24640   tree property_setter_ident = NULL_TREE;
24641 
24642   /* 'properties' is the list of properties that we read.  Usually a
24643      single one, but maybe more (eg, in "@property int a, b, c;" there
24644      are three).  */
24645   tree properties;
24646   location_t loc;
24647 
24648   loc = cp_lexer_peek_token (parser->lexer)->location;
24649 
24650   cp_lexer_consume_token (parser->lexer);  /* Eat '@property'.  */
24651 
24652   /* Parse the optional attribute list...  */
24653   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
24654     {
24655       /* Eat the '('.  */
24656       cp_lexer_consume_token (parser->lexer);
24657 
24658       while (true)
24659 	{
24660 	  bool syntax_error = false;
24661 	  cp_token *token = cp_lexer_peek_token (parser->lexer);
24662       	  enum rid keyword;
24663 
24664 	  if (token->type != CPP_NAME)
24665 	    {
24666 	      cp_parser_error (parser, "expected identifier");
24667 	      break;
24668 	    }
24669 	  keyword = C_RID_CODE (token->u.value);
24670 	  cp_lexer_consume_token (parser->lexer);
24671 	  switch (keyword)
24672 	    {
24673 	    case RID_ASSIGN:    property_assign = true;    break;
24674 	    case RID_COPY:      property_copy = true;      break;
24675 	    case RID_NONATOMIC: property_nonatomic = true; break;
24676 	    case RID_READONLY:  property_readonly = true;  break;
24677 	    case RID_READWRITE: property_readwrite = true; break;
24678 	    case RID_RETAIN:    property_retain = true;    break;
24679 
24680 	    case RID_GETTER:
24681 	    case RID_SETTER:
24682 	      if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
24683 		{
24684 		  if (keyword == RID_GETTER)
24685 		    cp_parser_error (parser,
24686 				     "missing %<=%> (after %<getter%> attribute)");
24687 		  else
24688 		    cp_parser_error (parser,
24689 				     "missing %<=%> (after %<setter%> attribute)");
24690 		  syntax_error = true;
24691 		  break;
24692 		}
24693 	      cp_lexer_consume_token (parser->lexer); /* eat the = */
24694 	      if (!cp_parser_objc_selector_p (cp_lexer_peek_token (parser->lexer)->type))
24695 		{
24696 		  cp_parser_error (parser, "expected identifier");
24697 		  syntax_error = true;
24698 		  break;
24699 		}
24700 	      if (keyword == RID_SETTER)
24701 		{
24702 		  if (property_setter_ident != NULL_TREE)
24703 		    {
24704 		      cp_parser_error (parser, "the %<setter%> attribute may only be specified once");
24705 		      cp_lexer_consume_token (parser->lexer);
24706 		    }
24707 		  else
24708 		    property_setter_ident = cp_parser_objc_selector (parser);
24709 		  if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
24710 		    cp_parser_error (parser, "setter name must terminate with %<:%>");
24711 		  else
24712 		    cp_lexer_consume_token (parser->lexer);
24713 		}
24714 	      else
24715 		{
24716 		  if (property_getter_ident != NULL_TREE)
24717 		    {
24718 		      cp_parser_error (parser, "the %<getter%> attribute may only be specified once");
24719 		      cp_lexer_consume_token (parser->lexer);
24720 		    }
24721 		  else
24722 		    property_getter_ident = cp_parser_objc_selector (parser);
24723 		}
24724 	      break;
24725 	    default:
24726 	      cp_parser_error (parser, "unknown property attribute");
24727 	      syntax_error = true;
24728 	      break;
24729 	    }
24730 
24731 	  if (syntax_error)
24732 	    break;
24733 
24734 	  if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24735 	    cp_lexer_consume_token (parser->lexer);
24736 	  else
24737 	    break;
24738 	}
24739 
24740       /* FIXME: "@property (setter, assign);" will generate a spurious
24741 	 "error: expected ‘)’ before ‘,’ token".  This is because
24742 	 cp_parser_require, unlike the C counterpart, will produce an
24743 	 error even if we are in error recovery.  */
24744       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24745 	{
24746 	  cp_parser_skip_to_closing_parenthesis (parser,
24747 						 /*recovering=*/true,
24748 						 /*or_comma=*/false,
24749 						 /*consume_paren=*/true);
24750 	}
24751     }
24752 
24753   /* ... and the property declaration(s).  */
24754   properties = cp_parser_objc_struct_declaration (parser);
24755 
24756   if (properties == error_mark_node)
24757     {
24758       cp_parser_skip_to_end_of_statement (parser);
24759       /* If the next token is now a `;', consume it.  */
24760       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
24761 	cp_lexer_consume_token (parser->lexer);
24762       return;
24763     }
24764 
24765   if (properties == NULL_TREE)
24766     cp_parser_error (parser, "expected identifier");
24767   else
24768     {
24769       /* Comma-separated properties are chained together in
24770 	 reverse order; add them one by one.  */
24771       properties = nreverse (properties);
24772 
24773       for (; properties; properties = TREE_CHAIN (properties))
24774 	objc_add_property_declaration (loc, copy_node (properties),
24775 				       property_readonly, property_readwrite,
24776 				       property_assign, property_retain,
24777 				       property_copy, property_nonatomic,
24778 				       property_getter_ident, property_setter_ident);
24779     }
24780 
24781   cp_parser_consume_semicolon_at_end_of_statement (parser);
24782 }
24783 
24784 /* Parse an Objective-C++ @synthesize declaration.  The syntax is:
24785 
24786    objc-synthesize-declaration:
24787      @synthesize objc-synthesize-identifier-list ;
24788 
24789    objc-synthesize-identifier-list:
24790      objc-synthesize-identifier
24791      objc-synthesize-identifier-list, objc-synthesize-identifier
24792 
24793    objc-synthesize-identifier
24794      identifier
24795      identifier = identifier
24796 
24797   For example:
24798     @synthesize MyProperty;
24799     @synthesize OneProperty, AnotherProperty=MyIvar, YetAnotherProperty;
24800 
24801   PS: This function is identical to c_parser_objc_at_synthesize_declaration
24802   for C.  Keep them in sync.
24803 */
24804 static void
24805 cp_parser_objc_at_synthesize_declaration (cp_parser *parser)
24806 {
24807   tree list = NULL_TREE;
24808   location_t loc;
24809   loc = cp_lexer_peek_token (parser->lexer)->location;
24810 
24811   cp_lexer_consume_token (parser->lexer);  /* Eat '@synthesize'.  */
24812   while (true)
24813     {
24814       tree property, ivar;
24815       property = cp_parser_identifier (parser);
24816       if (property == error_mark_node)
24817 	{
24818 	  cp_parser_consume_semicolon_at_end_of_statement (parser);
24819 	  return;
24820 	}
24821       if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
24822 	{
24823 	  cp_lexer_consume_token (parser->lexer);
24824 	  ivar = cp_parser_identifier (parser);
24825 	  if (ivar == error_mark_node)
24826 	    {
24827 	      cp_parser_consume_semicolon_at_end_of_statement (parser);
24828 	      return;
24829 	    }
24830 	}
24831       else
24832 	ivar = NULL_TREE;
24833       list = chainon (list, build_tree_list (ivar, property));
24834       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24835 	cp_lexer_consume_token (parser->lexer);
24836       else
24837 	break;
24838     }
24839   cp_parser_consume_semicolon_at_end_of_statement (parser);
24840   objc_add_synthesize_declaration (loc, list);
24841 }
24842 
24843 /* Parse an Objective-C++ @dynamic declaration.  The syntax is:
24844 
24845    objc-dynamic-declaration:
24846      @dynamic identifier-list ;
24847 
24848    For example:
24849      @dynamic MyProperty;
24850      @dynamic MyProperty, AnotherProperty;
24851 
24852   PS: This function is identical to c_parser_objc_at_dynamic_declaration
24853   for C.  Keep them in sync.
24854 */
24855 static void
24856 cp_parser_objc_at_dynamic_declaration (cp_parser *parser)
24857 {
24858   tree list = NULL_TREE;
24859   location_t loc;
24860   loc = cp_lexer_peek_token (parser->lexer)->location;
24861 
24862   cp_lexer_consume_token (parser->lexer);  /* Eat '@dynamic'.  */
24863   while (true)
24864     {
24865       tree property;
24866       property = cp_parser_identifier (parser);
24867       if (property == error_mark_node)
24868 	{
24869 	  cp_parser_consume_semicolon_at_end_of_statement (parser);
24870 	  return;
24871 	}
24872       list = chainon (list, build_tree_list (NULL, property));
24873       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24874 	cp_lexer_consume_token (parser->lexer);
24875       else
24876 	break;
24877     }
24878   cp_parser_consume_semicolon_at_end_of_statement (parser);
24879   objc_add_dynamic_declaration (loc, list);
24880 }
24881 
24882 
24883 /* OpenMP 2.5 parsing routines.  */
24884 
24885 /* Returns name of the next clause.
24886    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
24887    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
24888    returned and the token is consumed.  */
24889 
24890 static pragma_omp_clause
24891 cp_parser_omp_clause_name (cp_parser *parser)
24892 {
24893   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
24894 
24895   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
24896     result = PRAGMA_OMP_CLAUSE_IF;
24897   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
24898     result = PRAGMA_OMP_CLAUSE_DEFAULT;
24899   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
24900     result = PRAGMA_OMP_CLAUSE_PRIVATE;
24901   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
24902     {
24903       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
24904       const char *p = IDENTIFIER_POINTER (id);
24905 
24906       switch (p[0])
24907 	{
24908 	case 'c':
24909 	  if (!strcmp ("collapse", p))
24910 	    result = PRAGMA_OMP_CLAUSE_COLLAPSE;
24911 	  else if (!strcmp ("copyin", p))
24912 	    result = PRAGMA_OMP_CLAUSE_COPYIN;
24913 	  else if (!strcmp ("copyprivate", p))
24914 	    result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
24915 	  break;
24916 	case 'f':
24917 	  if (!strcmp ("final", p))
24918 	    result = PRAGMA_OMP_CLAUSE_FINAL;
24919 	  else if (!strcmp ("firstprivate", p))
24920 	    result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
24921 	  break;
24922 	case 'l':
24923 	  if (!strcmp ("lastprivate", p))
24924 	    result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
24925 	  break;
24926 	case 'm':
24927 	  if (!strcmp ("mergeable", p))
24928 	    result = PRAGMA_OMP_CLAUSE_MERGEABLE;
24929 	  break;
24930 	case 'n':
24931 	  if (!strcmp ("nowait", p))
24932 	    result = PRAGMA_OMP_CLAUSE_NOWAIT;
24933 	  else if (!strcmp ("num_threads", p))
24934 	    result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
24935 	  break;
24936 	case 'o':
24937 	  if (!strcmp ("ordered", p))
24938 	    result = PRAGMA_OMP_CLAUSE_ORDERED;
24939 	  break;
24940 	case 'r':
24941 	  if (!strcmp ("reduction", p))
24942 	    result = PRAGMA_OMP_CLAUSE_REDUCTION;
24943 	  break;
24944 	case 's':
24945 	  if (!strcmp ("schedule", p))
24946 	    result = PRAGMA_OMP_CLAUSE_SCHEDULE;
24947 	  else if (!strcmp ("shared", p))
24948 	    result = PRAGMA_OMP_CLAUSE_SHARED;
24949 	  break;
24950 	case 'u':
24951 	  if (!strcmp ("untied", p))
24952 	    result = PRAGMA_OMP_CLAUSE_UNTIED;
24953 	  break;
24954 	}
24955     }
24956 
24957   if (result != PRAGMA_OMP_CLAUSE_NONE)
24958     cp_lexer_consume_token (parser->lexer);
24959 
24960   return result;
24961 }
24962 
24963 /* Validate that a clause of the given type does not already exist.  */
24964 
24965 static void
24966 check_no_duplicate_clause (tree clauses, enum omp_clause_code code,
24967 			   const char *name, location_t location)
24968 {
24969   tree c;
24970 
24971   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
24972     if (OMP_CLAUSE_CODE (c) == code)
24973       {
24974 	error_at (location, "too many %qs clauses", name);
24975 	break;
24976       }
24977 }
24978 
24979 /* OpenMP 2.5:
24980    variable-list:
24981      identifier
24982      variable-list , identifier
24983 
24984    In addition, we match a closing parenthesis.  An opening parenthesis
24985    will have been consumed by the caller.
24986 
24987    If KIND is nonzero, create the appropriate node and install the decl
24988    in OMP_CLAUSE_DECL and add the node to the head of the list.
24989 
24990    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
24991    return the list created.  */
24992 
24993 static tree
24994 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
24995 				tree list)
24996 {
24997   cp_token *token;
24998   while (1)
24999     {
25000       tree name, decl;
25001 
25002       token = cp_lexer_peek_token (parser->lexer);
25003       name = cp_parser_id_expression (parser, /*template_p=*/false,
25004 				      /*check_dependency_p=*/true,
25005 				      /*template_p=*/NULL,
25006 				      /*declarator_p=*/false,
25007 				      /*optional_p=*/false);
25008       if (name == error_mark_node)
25009 	goto skip_comma;
25010 
25011       decl = cp_parser_lookup_name_simple (parser, name, token->location);
25012       if (decl == error_mark_node)
25013 	cp_parser_name_lookup_error (parser, name, decl, NLE_NULL,
25014 				     token->location);
25015       else if (kind != 0)
25016 	{
25017 	  tree u = build_omp_clause (token->location, kind);
25018 	  OMP_CLAUSE_DECL (u) = decl;
25019 	  OMP_CLAUSE_CHAIN (u) = list;
25020 	  list = u;
25021 	}
25022       else
25023 	list = tree_cons (decl, NULL_TREE, list);
25024 
25025     get_comma:
25026       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
25027 	break;
25028       cp_lexer_consume_token (parser->lexer);
25029     }
25030 
25031   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25032     {
25033       int ending;
25034 
25035       /* Try to resync to an unnested comma.  Copied from
25036 	 cp_parser_parenthesized_expression_list.  */
25037     skip_comma:
25038       ending = cp_parser_skip_to_closing_parenthesis (parser,
25039 						      /*recovering=*/true,
25040 						      /*or_comma=*/true,
25041 						      /*consume_paren=*/true);
25042       if (ending < 0)
25043 	goto get_comma;
25044     }
25045 
25046   return list;
25047 }
25048 
25049 /* Similarly, but expect leading and trailing parenthesis.  This is a very
25050    common case for omp clauses.  */
25051 
25052 static tree
25053 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
25054 {
25055   if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25056     return cp_parser_omp_var_list_no_open (parser, kind, list);
25057   return list;
25058 }
25059 
25060 /* OpenMP 3.0:
25061    collapse ( constant-expression ) */
25062 
25063 static tree
25064 cp_parser_omp_clause_collapse (cp_parser *parser, tree list, location_t location)
25065 {
25066   tree c, num;
25067   location_t loc;
25068   HOST_WIDE_INT n;
25069 
25070   loc = cp_lexer_peek_token (parser->lexer)->location;
25071   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25072     return list;
25073 
25074   num = cp_parser_constant_expression (parser, false, NULL);
25075 
25076   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25077     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25078 					   /*or_comma=*/false,
25079 					   /*consume_paren=*/true);
25080 
25081   if (num == error_mark_node)
25082     return list;
25083   num = fold_non_dependent_expr (num);
25084   if (!INTEGRAL_TYPE_P (TREE_TYPE (num))
25085       || !host_integerp (num, 0)
25086       || (n = tree_low_cst (num, 0)) <= 0
25087       || (int) n != n)
25088     {
25089       error_at (loc, "collapse argument needs positive constant integer expression");
25090       return list;
25091     }
25092 
25093   check_no_duplicate_clause (list, OMP_CLAUSE_COLLAPSE, "collapse", location);
25094   c = build_omp_clause (loc, OMP_CLAUSE_COLLAPSE);
25095   OMP_CLAUSE_CHAIN (c) = list;
25096   OMP_CLAUSE_COLLAPSE_EXPR (c) = num;
25097 
25098   return c;
25099 }
25100 
25101 /* OpenMP 2.5:
25102    default ( shared | none ) */
25103 
25104 static tree
25105 cp_parser_omp_clause_default (cp_parser *parser, tree list, location_t location)
25106 {
25107   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
25108   tree c;
25109 
25110   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25111     return list;
25112   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
25113     {
25114       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
25115       const char *p = IDENTIFIER_POINTER (id);
25116 
25117       switch (p[0])
25118 	{
25119 	case 'n':
25120 	  if (strcmp ("none", p) != 0)
25121 	    goto invalid_kind;
25122 	  kind = OMP_CLAUSE_DEFAULT_NONE;
25123 	  break;
25124 
25125 	case 's':
25126 	  if (strcmp ("shared", p) != 0)
25127 	    goto invalid_kind;
25128 	  kind = OMP_CLAUSE_DEFAULT_SHARED;
25129 	  break;
25130 
25131 	default:
25132 	  goto invalid_kind;
25133 	}
25134 
25135       cp_lexer_consume_token (parser->lexer);
25136     }
25137   else
25138     {
25139     invalid_kind:
25140       cp_parser_error (parser, "expected %<none%> or %<shared%>");
25141     }
25142 
25143   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25144     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25145 					   /*or_comma=*/false,
25146 					   /*consume_paren=*/true);
25147 
25148   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
25149     return list;
25150 
25151   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default", location);
25152   c = build_omp_clause (location, OMP_CLAUSE_DEFAULT);
25153   OMP_CLAUSE_CHAIN (c) = list;
25154   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
25155 
25156   return c;
25157 }
25158 
25159 /* OpenMP 3.1:
25160    final ( expression ) */
25161 
25162 static tree
25163 cp_parser_omp_clause_final (cp_parser *parser, tree list, location_t location)
25164 {
25165   tree t, c;
25166 
25167   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25168     return list;
25169 
25170   t = cp_parser_condition (parser);
25171 
25172   if (t == error_mark_node
25173       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25174     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25175 					   /*or_comma=*/false,
25176 					   /*consume_paren=*/true);
25177 
25178   check_no_duplicate_clause (list, OMP_CLAUSE_FINAL, "final", location);
25179 
25180   c = build_omp_clause (location, OMP_CLAUSE_FINAL);
25181   OMP_CLAUSE_FINAL_EXPR (c) = t;
25182   OMP_CLAUSE_CHAIN (c) = list;
25183 
25184   return c;
25185 }
25186 
25187 /* OpenMP 2.5:
25188    if ( expression ) */
25189 
25190 static tree
25191 cp_parser_omp_clause_if (cp_parser *parser, tree list, location_t location)
25192 {
25193   tree t, c;
25194 
25195   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25196     return list;
25197 
25198   t = cp_parser_condition (parser);
25199 
25200   if (t == error_mark_node
25201       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25202     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25203 					   /*or_comma=*/false,
25204 					   /*consume_paren=*/true);
25205 
25206   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if", location);
25207 
25208   c = build_omp_clause (location, OMP_CLAUSE_IF);
25209   OMP_CLAUSE_IF_EXPR (c) = t;
25210   OMP_CLAUSE_CHAIN (c) = list;
25211 
25212   return c;
25213 }
25214 
25215 /* OpenMP 3.1:
25216    mergeable */
25217 
25218 static tree
25219 cp_parser_omp_clause_mergeable (cp_parser *parser ATTRIBUTE_UNUSED,
25220 				tree list, location_t location)
25221 {
25222   tree c;
25223 
25224   check_no_duplicate_clause (list, OMP_CLAUSE_MERGEABLE, "mergeable",
25225 			     location);
25226 
25227   c = build_omp_clause (location, OMP_CLAUSE_MERGEABLE);
25228   OMP_CLAUSE_CHAIN (c) = list;
25229   return c;
25230 }
25231 
25232 /* OpenMP 2.5:
25233    nowait */
25234 
25235 static tree
25236 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED,
25237 			     tree list, location_t location)
25238 {
25239   tree c;
25240 
25241   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait", location);
25242 
25243   c = build_omp_clause (location, OMP_CLAUSE_NOWAIT);
25244   OMP_CLAUSE_CHAIN (c) = list;
25245   return c;
25246 }
25247 
25248 /* OpenMP 2.5:
25249    num_threads ( expression ) */
25250 
25251 static tree
25252 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list,
25253 				  location_t location)
25254 {
25255   tree t, c;
25256 
25257   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25258     return list;
25259 
25260   t = cp_parser_expression (parser, false, NULL);
25261 
25262   if (t == error_mark_node
25263       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25264     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25265 					   /*or_comma=*/false,
25266 					   /*consume_paren=*/true);
25267 
25268   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS,
25269 			     "num_threads", location);
25270 
25271   c = build_omp_clause (location, OMP_CLAUSE_NUM_THREADS);
25272   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
25273   OMP_CLAUSE_CHAIN (c) = list;
25274 
25275   return c;
25276 }
25277 
25278 /* OpenMP 2.5:
25279    ordered */
25280 
25281 static tree
25282 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED,
25283 			      tree list, location_t location)
25284 {
25285   tree c;
25286 
25287   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED,
25288 			     "ordered", location);
25289 
25290   c = build_omp_clause (location, OMP_CLAUSE_ORDERED);
25291   OMP_CLAUSE_CHAIN (c) = list;
25292   return c;
25293 }
25294 
25295 /* OpenMP 2.5:
25296    reduction ( reduction-operator : variable-list )
25297 
25298    reduction-operator:
25299      One of: + * - & ^ | && ||
25300 
25301    OpenMP 3.1:
25302 
25303    reduction-operator:
25304      One of: + * - & ^ | && || min max  */
25305 
25306 static tree
25307 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
25308 {
25309   enum tree_code code;
25310   tree nlist, c;
25311 
25312   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25313     return list;
25314 
25315   switch (cp_lexer_peek_token (parser->lexer)->type)
25316     {
25317     case CPP_PLUS:
25318       code = PLUS_EXPR;
25319       break;
25320     case CPP_MULT:
25321       code = MULT_EXPR;
25322       break;
25323     case CPP_MINUS:
25324       code = MINUS_EXPR;
25325       break;
25326     case CPP_AND:
25327       code = BIT_AND_EXPR;
25328       break;
25329     case CPP_XOR:
25330       code = BIT_XOR_EXPR;
25331       break;
25332     case CPP_OR:
25333       code = BIT_IOR_EXPR;
25334       break;
25335     case CPP_AND_AND:
25336       code = TRUTH_ANDIF_EXPR;
25337       break;
25338     case CPP_OR_OR:
25339       code = TRUTH_ORIF_EXPR;
25340       break;
25341     case CPP_NAME:
25342       {
25343 	tree id = cp_lexer_peek_token (parser->lexer)->u.value;
25344 	const char *p = IDENTIFIER_POINTER (id);
25345 
25346 	if (strcmp (p, "min") == 0)
25347 	  {
25348 	    code = MIN_EXPR;
25349 	    break;
25350 	  }
25351 	if (strcmp (p, "max") == 0)
25352 	  {
25353 	    code = MAX_EXPR;
25354 	    break;
25355 	  }
25356       }
25357       /* FALLTHROUGH */
25358     default:
25359       cp_parser_error (parser, "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, "
25360 			       "%<|%>, %<&&%>, %<||%>, %<min%> or %<max%>");
25361     resync_fail:
25362       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25363 					     /*or_comma=*/false,
25364 					     /*consume_paren=*/true);
25365       return list;
25366     }
25367   cp_lexer_consume_token (parser->lexer);
25368 
25369   if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
25370     goto resync_fail;
25371 
25372   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
25373   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
25374     OMP_CLAUSE_REDUCTION_CODE (c) = code;
25375 
25376   return nlist;
25377 }
25378 
25379 /* OpenMP 2.5:
25380    schedule ( schedule-kind )
25381    schedule ( schedule-kind , expression )
25382 
25383    schedule-kind:
25384      static | dynamic | guided | runtime | auto  */
25385 
25386 static tree
25387 cp_parser_omp_clause_schedule (cp_parser *parser, tree list, location_t location)
25388 {
25389   tree c, t;
25390 
25391   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25392     return list;
25393 
25394   c = build_omp_clause (location, OMP_CLAUSE_SCHEDULE);
25395 
25396   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
25397     {
25398       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
25399       const char *p = IDENTIFIER_POINTER (id);
25400 
25401       switch (p[0])
25402 	{
25403 	case 'd':
25404 	  if (strcmp ("dynamic", p) != 0)
25405 	    goto invalid_kind;
25406 	  OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
25407 	  break;
25408 
25409 	case 'g':
25410 	  if (strcmp ("guided", p) != 0)
25411 	    goto invalid_kind;
25412 	  OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
25413 	  break;
25414 
25415 	case 'r':
25416 	  if (strcmp ("runtime", p) != 0)
25417 	    goto invalid_kind;
25418 	  OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
25419 	  break;
25420 
25421 	default:
25422 	  goto invalid_kind;
25423 	}
25424     }
25425   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
25426     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
25427   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AUTO))
25428     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_AUTO;
25429   else
25430     goto invalid_kind;
25431   cp_lexer_consume_token (parser->lexer);
25432 
25433   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
25434     {
25435       cp_token *token;
25436       cp_lexer_consume_token (parser->lexer);
25437 
25438       token = cp_lexer_peek_token (parser->lexer);
25439       t = cp_parser_assignment_expression (parser, false, NULL);
25440 
25441       if (t == error_mark_node)
25442 	goto resync_fail;
25443       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
25444 	error_at (token->location, "schedule %<runtime%> does not take "
25445 		  "a %<chunk_size%> parameter");
25446       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_AUTO)
25447 	error_at (token->location, "schedule %<auto%> does not take "
25448 		  "a %<chunk_size%> parameter");
25449       else
25450 	OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
25451 
25452       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25453 	goto resync_fail;
25454     }
25455   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_COMMA_CLOSE_PAREN))
25456     goto resync_fail;
25457 
25458   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule", location);
25459   OMP_CLAUSE_CHAIN (c) = list;
25460   return c;
25461 
25462  invalid_kind:
25463   cp_parser_error (parser, "invalid schedule kind");
25464  resync_fail:
25465   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25466 					 /*or_comma=*/false,
25467 					 /*consume_paren=*/true);
25468   return list;
25469 }
25470 
25471 /* OpenMP 3.0:
25472    untied */
25473 
25474 static tree
25475 cp_parser_omp_clause_untied (cp_parser *parser ATTRIBUTE_UNUSED,
25476 			     tree list, location_t location)
25477 {
25478   tree c;
25479 
25480   check_no_duplicate_clause (list, OMP_CLAUSE_UNTIED, "untied", location);
25481 
25482   c = build_omp_clause (location, OMP_CLAUSE_UNTIED);
25483   OMP_CLAUSE_CHAIN (c) = list;
25484   return c;
25485 }
25486 
25487 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
25488    is a bitmask in MASK.  Return the list of clauses found; the result
25489    of clause default goes in *pdefault.  */
25490 
25491 static tree
25492 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
25493 			   const char *where, cp_token *pragma_tok)
25494 {
25495   tree clauses = NULL;
25496   bool first = true;
25497   cp_token *token = NULL;
25498 
25499   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
25500     {
25501       pragma_omp_clause c_kind;
25502       const char *c_name;
25503       tree prev = clauses;
25504 
25505       if (!first && cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
25506 	cp_lexer_consume_token (parser->lexer);
25507 
25508       token = cp_lexer_peek_token (parser->lexer);
25509       c_kind = cp_parser_omp_clause_name (parser);
25510       first = false;
25511 
25512       switch (c_kind)
25513 	{
25514 	case PRAGMA_OMP_CLAUSE_COLLAPSE:
25515 	  clauses = cp_parser_omp_clause_collapse (parser, clauses,
25516 						   token->location);
25517 	  c_name = "collapse";
25518 	  break;
25519 	case PRAGMA_OMP_CLAUSE_COPYIN:
25520 	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
25521 	  c_name = "copyin";
25522 	  break;
25523 	case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
25524 	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
25525 					    clauses);
25526 	  c_name = "copyprivate";
25527 	  break;
25528 	case PRAGMA_OMP_CLAUSE_DEFAULT:
25529 	  clauses = cp_parser_omp_clause_default (parser, clauses,
25530 						  token->location);
25531 	  c_name = "default";
25532 	  break;
25533 	case PRAGMA_OMP_CLAUSE_FINAL:
25534 	  clauses = cp_parser_omp_clause_final (parser, clauses, token->location);
25535 	  c_name = "final";
25536 	  break;
25537 	case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
25538 	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
25539 					    clauses);
25540 	  c_name = "firstprivate";
25541 	  break;
25542 	case PRAGMA_OMP_CLAUSE_IF:
25543 	  clauses = cp_parser_omp_clause_if (parser, clauses, token->location);
25544 	  c_name = "if";
25545 	  break;
25546 	case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
25547 	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
25548 					    clauses);
25549 	  c_name = "lastprivate";
25550 	  break;
25551 	case PRAGMA_OMP_CLAUSE_MERGEABLE:
25552 	  clauses = cp_parser_omp_clause_mergeable (parser, clauses,
25553 						    token->location);
25554 	  c_name = "mergeable";
25555 	  break;
25556 	case PRAGMA_OMP_CLAUSE_NOWAIT:
25557 	  clauses = cp_parser_omp_clause_nowait (parser, clauses, token->location);
25558 	  c_name = "nowait";
25559 	  break;
25560 	case PRAGMA_OMP_CLAUSE_NUM_THREADS:
25561 	  clauses = cp_parser_omp_clause_num_threads (parser, clauses,
25562 						      token->location);
25563 	  c_name = "num_threads";
25564 	  break;
25565 	case PRAGMA_OMP_CLAUSE_ORDERED:
25566 	  clauses = cp_parser_omp_clause_ordered (parser, clauses,
25567 						  token->location);
25568 	  c_name = "ordered";
25569 	  break;
25570 	case PRAGMA_OMP_CLAUSE_PRIVATE:
25571 	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
25572 					    clauses);
25573 	  c_name = "private";
25574 	  break;
25575 	case PRAGMA_OMP_CLAUSE_REDUCTION:
25576 	  clauses = cp_parser_omp_clause_reduction (parser, clauses);
25577 	  c_name = "reduction";
25578 	  break;
25579 	case PRAGMA_OMP_CLAUSE_SCHEDULE:
25580 	  clauses = cp_parser_omp_clause_schedule (parser, clauses,
25581 						   token->location);
25582 	  c_name = "schedule";
25583 	  break;
25584 	case PRAGMA_OMP_CLAUSE_SHARED:
25585 	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
25586 					    clauses);
25587 	  c_name = "shared";
25588 	  break;
25589 	case PRAGMA_OMP_CLAUSE_UNTIED:
25590 	  clauses = cp_parser_omp_clause_untied (parser, clauses,
25591 						 token->location);
25592 	  c_name = "nowait";
25593 	  break;
25594 	default:
25595 	  cp_parser_error (parser, "expected %<#pragma omp%> clause");
25596 	  goto saw_error;
25597 	}
25598 
25599       if (((mask >> c_kind) & 1) == 0)
25600 	{
25601 	  /* Remove the invalid clause(s) from the list to avoid
25602 	     confusing the rest of the compiler.  */
25603 	  clauses = prev;
25604 	  error_at (token->location, "%qs is not valid for %qs", c_name, where);
25605 	}
25606     }
25607  saw_error:
25608   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
25609   return finish_omp_clauses (clauses);
25610 }
25611 
25612 /* OpenMP 2.5:
25613    structured-block:
25614      statement
25615 
25616    In practice, we're also interested in adding the statement to an
25617    outer node.  So it is convenient if we work around the fact that
25618    cp_parser_statement calls add_stmt.  */
25619 
25620 static unsigned
25621 cp_parser_begin_omp_structured_block (cp_parser *parser)
25622 {
25623   unsigned save = parser->in_statement;
25624 
25625   /* Only move the values to IN_OMP_BLOCK if they weren't false.
25626      This preserves the "not within loop or switch" style error messages
25627      for nonsense cases like
25628 	void foo() {
25629 	#pragma omp single
25630 	  break;
25631 	}
25632   */
25633   if (parser->in_statement)
25634     parser->in_statement = IN_OMP_BLOCK;
25635 
25636   return save;
25637 }
25638 
25639 static void
25640 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
25641 {
25642   parser->in_statement = save;
25643 }
25644 
25645 static tree
25646 cp_parser_omp_structured_block (cp_parser *parser)
25647 {
25648   tree stmt = begin_omp_structured_block ();
25649   unsigned int save = cp_parser_begin_omp_structured_block (parser);
25650 
25651   cp_parser_statement (parser, NULL_TREE, false, NULL);
25652 
25653   cp_parser_end_omp_structured_block (parser, save);
25654   return finish_omp_structured_block (stmt);
25655 }
25656 
25657 /* OpenMP 2.5:
25658    # pragma omp atomic new-line
25659      expression-stmt
25660 
25661    expression-stmt:
25662      x binop= expr | x++ | ++x | x-- | --x
25663    binop:
25664      +, *, -, /, &, ^, |, <<, >>
25665 
25666   where x is an lvalue expression with scalar type.
25667 
25668    OpenMP 3.1:
25669    # pragma omp atomic new-line
25670      update-stmt
25671 
25672    # pragma omp atomic read new-line
25673      read-stmt
25674 
25675    # pragma omp atomic write new-line
25676      write-stmt
25677 
25678    # pragma omp atomic update new-line
25679      update-stmt
25680 
25681    # pragma omp atomic capture new-line
25682      capture-stmt
25683 
25684    # pragma omp atomic capture new-line
25685      capture-block
25686 
25687    read-stmt:
25688      v = x
25689    write-stmt:
25690      x = expr
25691    update-stmt:
25692      expression-stmt | x = x binop expr
25693    capture-stmt:
25694      v = x binop= expr | v = x++ | v = ++x | v = x-- | v = --x
25695    capture-block:
25696      { v = x; update-stmt; } | { update-stmt; v = x; }
25697 
25698   where x and v are lvalue expressions with scalar type.  */
25699 
25700 static void
25701 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
25702 {
25703   tree lhs = NULL_TREE, rhs = NULL_TREE, v = NULL_TREE, lhs1 = NULL_TREE;
25704   tree rhs1 = NULL_TREE, orig_lhs;
25705   enum tree_code code = OMP_ATOMIC, opcode = NOP_EXPR;
25706   bool structured_block = false;
25707 
25708   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
25709     {
25710       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
25711       const char *p = IDENTIFIER_POINTER (id);
25712 
25713       if (!strcmp (p, "read"))
25714 	code = OMP_ATOMIC_READ;
25715       else if (!strcmp (p, "write"))
25716 	code = NOP_EXPR;
25717       else if (!strcmp (p, "update"))
25718 	code = OMP_ATOMIC;
25719       else if (!strcmp (p, "capture"))
25720 	code = OMP_ATOMIC_CAPTURE_NEW;
25721       else
25722 	p = NULL;
25723       if (p)
25724 	cp_lexer_consume_token (parser->lexer);
25725     }
25726   cp_parser_require_pragma_eol (parser, pragma_tok);
25727 
25728   switch (code)
25729     {
25730     case OMP_ATOMIC_READ:
25731     case NOP_EXPR: /* atomic write */
25732       v = cp_parser_unary_expression (parser, /*address_p=*/false,
25733 				      /*cast_p=*/false, NULL);
25734       if (v == error_mark_node)
25735 	goto saw_error;
25736       if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
25737 	goto saw_error;
25738       if (code == NOP_EXPR)
25739 	lhs = cp_parser_expression (parser, /*cast_p=*/false, NULL);
25740       else
25741 	lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
25742 					  /*cast_p=*/false, NULL);
25743       if (lhs == error_mark_node)
25744 	goto saw_error;
25745       if (code == NOP_EXPR)
25746 	{
25747 	  /* atomic write is represented by OMP_ATOMIC with NOP_EXPR
25748 	     opcode.  */
25749 	  code = OMP_ATOMIC;
25750 	  rhs = lhs;
25751 	  lhs = v;
25752 	  v = NULL_TREE;
25753 	}
25754       goto done;
25755     case OMP_ATOMIC_CAPTURE_NEW:
25756       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
25757 	{
25758 	  cp_lexer_consume_token (parser->lexer);
25759 	  structured_block = true;
25760 	}
25761       else
25762 	{
25763 	  v = cp_parser_unary_expression (parser, /*address_p=*/false,
25764 					  /*cast_p=*/false, NULL);
25765 	  if (v == error_mark_node)
25766 	    goto saw_error;
25767 	  if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
25768 	    goto saw_error;
25769 	}
25770     default:
25771       break;
25772     }
25773 
25774 restart:
25775   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
25776 				    /*cast_p=*/false, NULL);
25777   orig_lhs = lhs;
25778   switch (TREE_CODE (lhs))
25779     {
25780     case ERROR_MARK:
25781       goto saw_error;
25782 
25783     case POSTINCREMENT_EXPR:
25784       if (code == OMP_ATOMIC_CAPTURE_NEW && !structured_block)
25785 	code = OMP_ATOMIC_CAPTURE_OLD;
25786       /* FALLTHROUGH */
25787     case PREINCREMENT_EXPR:
25788       lhs = TREE_OPERAND (lhs, 0);
25789       opcode = PLUS_EXPR;
25790       rhs = integer_one_node;
25791       break;
25792 
25793     case POSTDECREMENT_EXPR:
25794       if (code == OMP_ATOMIC_CAPTURE_NEW && !structured_block)
25795 	code = OMP_ATOMIC_CAPTURE_OLD;
25796       /* FALLTHROUGH */
25797     case PREDECREMENT_EXPR:
25798       lhs = TREE_OPERAND (lhs, 0);
25799       opcode = MINUS_EXPR;
25800       rhs = integer_one_node;
25801       break;
25802 
25803     case COMPOUND_EXPR:
25804       if (TREE_CODE (TREE_OPERAND (lhs, 0)) == SAVE_EXPR
25805 	 && TREE_CODE (TREE_OPERAND (lhs, 1)) == COMPOUND_EXPR
25806 	 && TREE_CODE (TREE_OPERAND (TREE_OPERAND (lhs, 1), 0)) == MODIFY_EXPR
25807 	 && TREE_OPERAND (TREE_OPERAND (lhs, 1), 1) == TREE_OPERAND (lhs, 0)
25808 	 && TREE_CODE (TREE_TYPE (TREE_OPERAND (TREE_OPERAND
25809 					     (TREE_OPERAND (lhs, 1), 0), 0)))
25810 	    == BOOLEAN_TYPE)
25811        /* Undo effects of boolean_increment for post {in,de}crement.  */
25812        lhs = TREE_OPERAND (TREE_OPERAND (lhs, 1), 0);
25813       /* FALLTHRU */
25814     case MODIFY_EXPR:
25815       if (TREE_CODE (lhs) == MODIFY_EXPR
25816 	 && TREE_CODE (TREE_TYPE (TREE_OPERAND (lhs, 0))) == BOOLEAN_TYPE)
25817 	{
25818 	  /* Undo effects of boolean_increment.  */
25819 	  if (integer_onep (TREE_OPERAND (lhs, 1)))
25820 	    {
25821 	      /* This is pre or post increment.  */
25822 	      rhs = TREE_OPERAND (lhs, 1);
25823 	      lhs = TREE_OPERAND (lhs, 0);
25824 	      opcode = NOP_EXPR;
25825 	      if (code == OMP_ATOMIC_CAPTURE_NEW
25826 		  && !structured_block
25827 		  && TREE_CODE (orig_lhs) == COMPOUND_EXPR)
25828 		code = OMP_ATOMIC_CAPTURE_OLD;
25829 	      break;
25830 	    }
25831 	}
25832       /* FALLTHRU */
25833     default:
25834       switch (cp_lexer_peek_token (parser->lexer)->type)
25835 	{
25836 	case CPP_MULT_EQ:
25837 	  opcode = MULT_EXPR;
25838 	  break;
25839 	case CPP_DIV_EQ:
25840 	  opcode = TRUNC_DIV_EXPR;
25841 	  break;
25842 	case CPP_PLUS_EQ:
25843 	  opcode = PLUS_EXPR;
25844 	  break;
25845 	case CPP_MINUS_EQ:
25846 	  opcode = MINUS_EXPR;
25847 	  break;
25848 	case CPP_LSHIFT_EQ:
25849 	  opcode = LSHIFT_EXPR;
25850 	  break;
25851 	case CPP_RSHIFT_EQ:
25852 	  opcode = RSHIFT_EXPR;
25853 	  break;
25854 	case CPP_AND_EQ:
25855 	  opcode = BIT_AND_EXPR;
25856 	  break;
25857 	case CPP_OR_EQ:
25858 	  opcode = BIT_IOR_EXPR;
25859 	  break;
25860 	case CPP_XOR_EQ:
25861 	  opcode = BIT_XOR_EXPR;
25862 	  break;
25863 	case CPP_EQ:
25864 	  if (structured_block || code == OMP_ATOMIC)
25865 	    {
25866 	      enum cp_parser_prec oprec;
25867 	      cp_token *token;
25868 	      cp_lexer_consume_token (parser->lexer);
25869 	      rhs1 = cp_parser_unary_expression (parser, /*address_p=*/false,
25870 						 /*cast_p=*/false, NULL);
25871 	      if (rhs1 == error_mark_node)
25872 		goto saw_error;
25873 	      token = cp_lexer_peek_token (parser->lexer);
25874 	      switch (token->type)
25875 		{
25876 		case CPP_SEMICOLON:
25877 		  if (code == OMP_ATOMIC_CAPTURE_NEW)
25878 		    {
25879 		      code = OMP_ATOMIC_CAPTURE_OLD;
25880 		      v = lhs;
25881 		      lhs = NULL_TREE;
25882 		      lhs1 = rhs1;
25883 		      rhs1 = NULL_TREE;
25884 		      cp_lexer_consume_token (parser->lexer);
25885 		      goto restart;
25886 		    }
25887 		  cp_parser_error (parser,
25888 				   "invalid form of %<#pragma omp atomic%>");
25889 		  goto saw_error;
25890 		case CPP_MULT:
25891 		  opcode = MULT_EXPR;
25892 		  break;
25893 		case CPP_DIV:
25894 		  opcode = TRUNC_DIV_EXPR;
25895 		  break;
25896 		case CPP_PLUS:
25897 		  opcode = PLUS_EXPR;
25898 		  break;
25899 		case CPP_MINUS:
25900 		  opcode = MINUS_EXPR;
25901 		  break;
25902 		case CPP_LSHIFT:
25903 		  opcode = LSHIFT_EXPR;
25904 		  break;
25905 		case CPP_RSHIFT:
25906 		  opcode = RSHIFT_EXPR;
25907 		  break;
25908 		case CPP_AND:
25909 		  opcode = BIT_AND_EXPR;
25910 		  break;
25911 		case CPP_OR:
25912 		  opcode = BIT_IOR_EXPR;
25913 		  break;
25914 		case CPP_XOR:
25915 		  opcode = BIT_XOR_EXPR;
25916 		  break;
25917 		default:
25918 		  cp_parser_error (parser,
25919 				   "invalid operator for %<#pragma omp atomic%>");
25920 		  goto saw_error;
25921 		}
25922 	      oprec = TOKEN_PRECEDENCE (token);
25923 	      gcc_assert (oprec != PREC_NOT_OPERATOR);
25924 	      if (commutative_tree_code (opcode))
25925 		oprec = (enum cp_parser_prec) (oprec - 1);
25926 	      cp_lexer_consume_token (parser->lexer);
25927 	      rhs = cp_parser_binary_expression (parser, false, false,
25928 						 oprec, NULL);
25929 	      if (rhs == error_mark_node)
25930 		goto saw_error;
25931 	      goto stmt_done;
25932 	    }
25933 	  /* FALLTHROUGH */
25934 	default:
25935 	  cp_parser_error (parser,
25936 			   "invalid operator for %<#pragma omp atomic%>");
25937 	  goto saw_error;
25938 	}
25939       cp_lexer_consume_token (parser->lexer);
25940 
25941       rhs = cp_parser_expression (parser, false, NULL);
25942       if (rhs == error_mark_node)
25943 	goto saw_error;
25944       break;
25945     }
25946 stmt_done:
25947   if (structured_block && code == OMP_ATOMIC_CAPTURE_NEW)
25948     {
25949       if (!cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON))
25950 	goto saw_error;
25951       v = cp_parser_unary_expression (parser, /*address_p=*/false,
25952 				      /*cast_p=*/false, NULL);
25953       if (v == error_mark_node)
25954 	goto saw_error;
25955       if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
25956 	goto saw_error;
25957       lhs1 = cp_parser_unary_expression (parser, /*address_p=*/false,
25958 					 /*cast_p=*/false, NULL);
25959       if (lhs1 == error_mark_node)
25960 	goto saw_error;
25961     }
25962   if (structured_block)
25963     {
25964       cp_parser_consume_semicolon_at_end_of_statement (parser);
25965       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
25966     }
25967 done:
25968   finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
25969   if (!structured_block)
25970     cp_parser_consume_semicolon_at_end_of_statement (parser);
25971   return;
25972 
25973  saw_error:
25974   cp_parser_skip_to_end_of_block_or_statement (parser);
25975   if (structured_block)
25976     {
25977       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
25978         cp_lexer_consume_token (parser->lexer);
25979       else if (code == OMP_ATOMIC_CAPTURE_NEW)
25980 	{
25981 	  cp_parser_skip_to_end_of_block_or_statement (parser);
25982 	  if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
25983 	    cp_lexer_consume_token (parser->lexer);
25984 	}
25985     }
25986 }
25987 
25988 
25989 /* OpenMP 2.5:
25990    # pragma omp barrier new-line  */
25991 
25992 static void
25993 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
25994 {
25995   cp_parser_require_pragma_eol (parser, pragma_tok);
25996   finish_omp_barrier ();
25997 }
25998 
25999 /* OpenMP 2.5:
26000    # pragma omp critical [(name)] new-line
26001      structured-block  */
26002 
26003 static tree
26004 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
26005 {
26006   tree stmt, name = NULL;
26007 
26008   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
26009     {
26010       cp_lexer_consume_token (parser->lexer);
26011 
26012       name = cp_parser_identifier (parser);
26013 
26014       if (name == error_mark_node
26015 	  || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
26016 	cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
26017 					       /*or_comma=*/false,
26018 					       /*consume_paren=*/true);
26019       if (name == error_mark_node)
26020 	name = NULL;
26021     }
26022   cp_parser_require_pragma_eol (parser, pragma_tok);
26023 
26024   stmt = cp_parser_omp_structured_block (parser);
26025   return c_finish_omp_critical (input_location, stmt, name);
26026 }
26027 
26028 /* OpenMP 2.5:
26029    # pragma omp flush flush-vars[opt] new-line
26030 
26031    flush-vars:
26032      ( variable-list ) */
26033 
26034 static void
26035 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
26036 {
26037   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
26038     (void) cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
26039   cp_parser_require_pragma_eol (parser, pragma_tok);
26040 
26041   finish_omp_flush ();
26042 }
26043 
26044 /* Helper function, to parse omp for increment expression.  */
26045 
26046 static tree
26047 cp_parser_omp_for_cond (cp_parser *parser, tree decl)
26048 {
26049   tree cond = cp_parser_binary_expression (parser, false, true,
26050 					   PREC_NOT_OPERATOR, NULL);
26051   if (cond == error_mark_node
26052       || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
26053     {
26054       cp_parser_skip_to_end_of_statement (parser);
26055       return error_mark_node;
26056     }
26057 
26058   switch (TREE_CODE (cond))
26059     {
26060     case GT_EXPR:
26061     case GE_EXPR:
26062     case LT_EXPR:
26063     case LE_EXPR:
26064       break;
26065     default:
26066       return error_mark_node;
26067     }
26068 
26069   /* If decl is an iterator, preserve LHS and RHS of the relational
26070      expr until finish_omp_for.  */
26071   if (decl
26072       && (type_dependent_expression_p (decl)
26073 	  || CLASS_TYPE_P (TREE_TYPE (decl))))
26074     return cond;
26075 
26076   return build_x_binary_op (TREE_CODE (cond),
26077 			    TREE_OPERAND (cond, 0), ERROR_MARK,
26078 			    TREE_OPERAND (cond, 1), ERROR_MARK,
26079 			    /*overload=*/NULL, tf_warning_or_error);
26080 }
26081 
26082 /* Helper function, to parse omp for increment expression.  */
26083 
26084 static tree
26085 cp_parser_omp_for_incr (cp_parser *parser, tree decl)
26086 {
26087   cp_token *token = cp_lexer_peek_token (parser->lexer);
26088   enum tree_code op;
26089   tree lhs, rhs;
26090   cp_id_kind idk;
26091   bool decl_first;
26092 
26093   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
26094     {
26095       op = (token->type == CPP_PLUS_PLUS
26096 	    ? PREINCREMENT_EXPR : PREDECREMENT_EXPR);
26097       cp_lexer_consume_token (parser->lexer);
26098       lhs = cp_parser_cast_expression (parser, false, false, NULL);
26099       if (lhs != decl)
26100 	return error_mark_node;
26101       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
26102     }
26103 
26104   lhs = cp_parser_primary_expression (parser, false, false, false, &idk);
26105   if (lhs != decl)
26106     return error_mark_node;
26107 
26108   token = cp_lexer_peek_token (parser->lexer);
26109   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
26110     {
26111       op = (token->type == CPP_PLUS_PLUS
26112 	    ? POSTINCREMENT_EXPR : POSTDECREMENT_EXPR);
26113       cp_lexer_consume_token (parser->lexer);
26114       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
26115     }
26116 
26117   op = cp_parser_assignment_operator_opt (parser);
26118   if (op == ERROR_MARK)
26119     return error_mark_node;
26120 
26121   if (op != NOP_EXPR)
26122     {
26123       rhs = cp_parser_assignment_expression (parser, false, NULL);
26124       rhs = build2 (op, TREE_TYPE (decl), decl, rhs);
26125       return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
26126     }
26127 
26128   lhs = cp_parser_binary_expression (parser, false, false,
26129 				     PREC_ADDITIVE_EXPRESSION, NULL);
26130   token = cp_lexer_peek_token (parser->lexer);
26131   decl_first = lhs == decl;
26132   if (decl_first)
26133     lhs = NULL_TREE;
26134   if (token->type != CPP_PLUS
26135       && token->type != CPP_MINUS)
26136     return error_mark_node;
26137 
26138   do
26139     {
26140       op = token->type == CPP_PLUS ? PLUS_EXPR : MINUS_EXPR;
26141       cp_lexer_consume_token (parser->lexer);
26142       rhs = cp_parser_binary_expression (parser, false, false,
26143 					 PREC_ADDITIVE_EXPRESSION, NULL);
26144       token = cp_lexer_peek_token (parser->lexer);
26145       if (token->type == CPP_PLUS || token->type == CPP_MINUS || decl_first)
26146 	{
26147 	  if (lhs == NULL_TREE)
26148 	    {
26149 	      if (op == PLUS_EXPR)
26150 		lhs = rhs;
26151 	      else
26152 		lhs = build_x_unary_op (NEGATE_EXPR, rhs, tf_warning_or_error);
26153 	    }
26154 	  else
26155 	    lhs = build_x_binary_op (op, lhs, ERROR_MARK, rhs, ERROR_MARK,
26156 				     NULL, tf_warning_or_error);
26157 	}
26158     }
26159   while (token->type == CPP_PLUS || token->type == CPP_MINUS);
26160 
26161   if (!decl_first)
26162     {
26163       if (rhs != decl || op == MINUS_EXPR)
26164 	return error_mark_node;
26165       rhs = build2 (op, TREE_TYPE (decl), lhs, decl);
26166     }
26167   else
26168     rhs = build2 (PLUS_EXPR, TREE_TYPE (decl), decl, lhs);
26169 
26170   return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
26171 }
26172 
26173 /* Parse the restricted form of the for statement allowed by OpenMP.  */
26174 
26175 static tree
26176 cp_parser_omp_for_loop (cp_parser *parser, tree clauses, tree *par_clauses)
26177 {
26178   tree init, cond, incr, body, decl, pre_body = NULL_TREE, ret;
26179   tree real_decl, initv, condv, incrv, declv;
26180   tree this_pre_body, cl;
26181   location_t loc_first;
26182   bool collapse_err = false;
26183   int i, collapse = 1, nbraces = 0;
26184   VEC(tree,gc) *for_block = make_tree_vector ();
26185 
26186   for (cl = clauses; cl; cl = OMP_CLAUSE_CHAIN (cl))
26187     if (OMP_CLAUSE_CODE (cl) == OMP_CLAUSE_COLLAPSE)
26188       collapse = tree_low_cst (OMP_CLAUSE_COLLAPSE_EXPR (cl), 0);
26189 
26190   gcc_assert (collapse >= 1);
26191 
26192   declv = make_tree_vec (collapse);
26193   initv = make_tree_vec (collapse);
26194   condv = make_tree_vec (collapse);
26195   incrv = make_tree_vec (collapse);
26196 
26197   loc_first = cp_lexer_peek_token (parser->lexer)->location;
26198 
26199   for (i = 0; i < collapse; i++)
26200     {
26201       int bracecount = 0;
26202       bool add_private_clause = false;
26203       location_t loc;
26204 
26205       if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
26206 	{
26207 	  cp_parser_error (parser, "for statement expected");
26208 	  return NULL;
26209 	}
26210       loc = cp_lexer_consume_token (parser->lexer)->location;
26211 
26212       if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
26213 	return NULL;
26214 
26215       init = decl = real_decl = NULL;
26216       this_pre_body = push_stmt_list ();
26217       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
26218 	{
26219 	  /* See 2.5.1 (in OpenMP 3.0, similar wording is in 2.5 standard too):
26220 
26221 	     init-expr:
26222 	               var = lb
26223 		       integer-type var = lb
26224 		       random-access-iterator-type var = lb
26225 		       pointer-type var = lb
26226 	  */
26227 	  cp_decl_specifier_seq type_specifiers;
26228 
26229 	  /* First, try to parse as an initialized declaration.  See
26230 	     cp_parser_condition, from whence the bulk of this is copied.  */
26231 
26232 	  cp_parser_parse_tentatively (parser);
26233 	  cp_parser_type_specifier_seq (parser, /*is_declaration=*/true,
26234 					/*is_trailing_return=*/false,
26235 					&type_specifiers);
26236 	  if (cp_parser_parse_definitely (parser))
26237 	    {
26238 	      /* If parsing a type specifier seq succeeded, then this
26239 		 MUST be a initialized declaration.  */
26240 	      tree asm_specification, attributes;
26241 	      cp_declarator *declarator;
26242 
26243 	      declarator = cp_parser_declarator (parser,
26244 						 CP_PARSER_DECLARATOR_NAMED,
26245 						 /*ctor_dtor_or_conv_p=*/NULL,
26246 						 /*parenthesized_p=*/NULL,
26247 						 /*member_p=*/false);
26248 	      attributes = cp_parser_attributes_opt (parser);
26249 	      asm_specification = cp_parser_asm_specification_opt (parser);
26250 
26251 	      if (declarator == cp_error_declarator)
26252 		cp_parser_skip_to_end_of_statement (parser);
26253 
26254 	      else
26255 		{
26256 		  tree pushed_scope, auto_node;
26257 
26258 		  decl = start_decl (declarator, &type_specifiers,
26259 				     SD_INITIALIZED, attributes,
26260 				     /*prefix_attributes=*/NULL_TREE,
26261 				     &pushed_scope);
26262 
26263 		  auto_node = type_uses_auto (TREE_TYPE (decl));
26264 		  if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
26265 		    {
26266 		      if (cp_lexer_next_token_is (parser->lexer,
26267 						  CPP_OPEN_PAREN))
26268 			error ("parenthesized initialization is not allowed in "
26269 			       "OpenMP %<for%> loop");
26270 		      else
26271 			/* Trigger an error.  */
26272 			cp_parser_require (parser, CPP_EQ, RT_EQ);
26273 
26274 		      init = error_mark_node;
26275 		      cp_parser_skip_to_end_of_statement (parser);
26276 		    }
26277 		  else if (CLASS_TYPE_P (TREE_TYPE (decl))
26278 			   || type_dependent_expression_p (decl)
26279 			   || auto_node)
26280 		    {
26281 		      bool is_direct_init, is_non_constant_init;
26282 
26283 		      init = cp_parser_initializer (parser,
26284 						    &is_direct_init,
26285 						    &is_non_constant_init);
26286 
26287 		      if (auto_node)
26288 			{
26289 			  TREE_TYPE (decl)
26290 			    = do_auto_deduction (TREE_TYPE (decl), init,
26291 						 auto_node);
26292 
26293 			  if (!CLASS_TYPE_P (TREE_TYPE (decl))
26294 			      && !type_dependent_expression_p (decl))
26295 			    goto non_class;
26296 			}
26297 
26298 		      cp_finish_decl (decl, init, !is_non_constant_init,
26299 				      asm_specification,
26300 				      LOOKUP_ONLYCONVERTING);
26301 		      if (CLASS_TYPE_P (TREE_TYPE (decl)))
26302 			{
26303 			  VEC_safe_push (tree, gc, for_block, this_pre_body);
26304 			  init = NULL_TREE;
26305 			}
26306 		      else
26307 			init = pop_stmt_list (this_pre_body);
26308 		      this_pre_body = NULL_TREE;
26309 		    }
26310 		  else
26311 		    {
26312 		      /* Consume '='.  */
26313 		      cp_lexer_consume_token (parser->lexer);
26314 		      init = cp_parser_assignment_expression (parser, false, NULL);
26315 
26316 		    non_class:
26317 		      if (TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
26318 			init = error_mark_node;
26319 		      else
26320 			cp_finish_decl (decl, NULL_TREE,
26321 					/*init_const_expr_p=*/false,
26322 					asm_specification,
26323 					LOOKUP_ONLYCONVERTING);
26324 		    }
26325 
26326 		  if (pushed_scope)
26327 		    pop_scope (pushed_scope);
26328 		}
26329 	    }
26330 	  else
26331 	    {
26332 	      cp_id_kind idk;
26333 	      /* If parsing a type specifier sequence failed, then
26334 		 this MUST be a simple expression.  */
26335 	      cp_parser_parse_tentatively (parser);
26336 	      decl = cp_parser_primary_expression (parser, false, false,
26337 						   false, &idk);
26338 	      if (!cp_parser_error_occurred (parser)
26339 		  && decl
26340 		  && DECL_P (decl)
26341 		  && CLASS_TYPE_P (TREE_TYPE (decl)))
26342 		{
26343 		  tree rhs;
26344 
26345 		  cp_parser_parse_definitely (parser);
26346 		  cp_parser_require (parser, CPP_EQ, RT_EQ);
26347 		  rhs = cp_parser_assignment_expression (parser, false, NULL);
26348 		  finish_expr_stmt (build_x_modify_expr (decl, NOP_EXPR,
26349 							 rhs,
26350 							 tf_warning_or_error));
26351 		  add_private_clause = true;
26352 		}
26353 	      else
26354 		{
26355 		  decl = NULL;
26356 		  cp_parser_abort_tentative_parse (parser);
26357 		  init = cp_parser_expression (parser, false, NULL);
26358 		  if (init)
26359 		    {
26360 		      if (TREE_CODE (init) == MODIFY_EXPR
26361 			  || TREE_CODE (init) == MODOP_EXPR)
26362 			real_decl = TREE_OPERAND (init, 0);
26363 		    }
26364 		}
26365 	    }
26366 	}
26367       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
26368       if (this_pre_body)
26369 	{
26370 	  this_pre_body = pop_stmt_list (this_pre_body);
26371 	  if (pre_body)
26372 	    {
26373 	      tree t = pre_body;
26374 	      pre_body = push_stmt_list ();
26375 	      add_stmt (t);
26376 	      add_stmt (this_pre_body);
26377 	      pre_body = pop_stmt_list (pre_body);
26378 	    }
26379 	  else
26380 	    pre_body = this_pre_body;
26381 	}
26382 
26383       if (decl)
26384 	real_decl = decl;
26385       if (par_clauses != NULL && real_decl != NULL_TREE)
26386 	{
26387 	  tree *c;
26388 	  for (c = par_clauses; *c ; )
26389 	    if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_FIRSTPRIVATE
26390 		&& OMP_CLAUSE_DECL (*c) == real_decl)
26391 	      {
26392 		error_at (loc, "iteration variable %qD"
26393 			  " should not be firstprivate", real_decl);
26394 		*c = OMP_CLAUSE_CHAIN (*c);
26395 	      }
26396 	    else if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_LASTPRIVATE
26397 		     && OMP_CLAUSE_DECL (*c) == real_decl)
26398 	      {
26399 		/* Add lastprivate (decl) clause to OMP_FOR_CLAUSES,
26400 		   change it to shared (decl) in OMP_PARALLEL_CLAUSES.  */
26401 		tree l = build_omp_clause (loc, OMP_CLAUSE_LASTPRIVATE);
26402 		OMP_CLAUSE_DECL (l) = real_decl;
26403 		OMP_CLAUSE_CHAIN (l) = clauses;
26404 		CP_OMP_CLAUSE_INFO (l) = CP_OMP_CLAUSE_INFO (*c);
26405 		clauses = l;
26406 		OMP_CLAUSE_SET_CODE (*c, OMP_CLAUSE_SHARED);
26407 		CP_OMP_CLAUSE_INFO (*c) = NULL;
26408 		add_private_clause = false;
26409 	      }
26410 	    else
26411 	      {
26412 		if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_PRIVATE
26413 		    && OMP_CLAUSE_DECL (*c) == real_decl)
26414 		  add_private_clause = false;
26415 		c = &OMP_CLAUSE_CHAIN (*c);
26416 	      }
26417 	}
26418 
26419       if (add_private_clause)
26420 	{
26421 	  tree c;
26422 	  for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
26423 	    {
26424 	      if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
26425 		   || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
26426 		  && OMP_CLAUSE_DECL (c) == decl)
26427 		break;
26428 	      else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
26429 		       && OMP_CLAUSE_DECL (c) == decl)
26430 		error_at (loc, "iteration variable %qD "
26431 			  "should not be firstprivate",
26432 			  decl);
26433 	      else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
26434 		       && OMP_CLAUSE_DECL (c) == decl)
26435 		error_at (loc, "iteration variable %qD should not be reduction",
26436 			  decl);
26437 	    }
26438 	  if (c == NULL)
26439 	    {
26440 	      c = build_omp_clause (loc, OMP_CLAUSE_PRIVATE);
26441 	      OMP_CLAUSE_DECL (c) = decl;
26442 	      c = finish_omp_clauses (c);
26443 	      if (c)
26444 		{
26445 		  OMP_CLAUSE_CHAIN (c) = clauses;
26446 		  clauses = c;
26447 		}
26448 	    }
26449 	}
26450 
26451       cond = NULL;
26452       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
26453 	cond = cp_parser_omp_for_cond (parser, decl);
26454       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
26455 
26456       incr = NULL;
26457       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
26458 	{
26459 	  /* If decl is an iterator, preserve the operator on decl
26460 	     until finish_omp_for.  */
26461 	  if (real_decl
26462 	      && ((processing_template_decl
26463 		   && !POINTER_TYPE_P (TREE_TYPE (real_decl)))
26464 		  || CLASS_TYPE_P (TREE_TYPE (real_decl))))
26465 	    incr = cp_parser_omp_for_incr (parser, real_decl);
26466 	  else
26467 	    incr = cp_parser_expression (parser, false, NULL);
26468 	}
26469 
26470       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
26471 	cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
26472 					       /*or_comma=*/false,
26473 					       /*consume_paren=*/true);
26474 
26475       TREE_VEC_ELT (declv, i) = decl;
26476       TREE_VEC_ELT (initv, i) = init;
26477       TREE_VEC_ELT (condv, i) = cond;
26478       TREE_VEC_ELT (incrv, i) = incr;
26479 
26480       if (i == collapse - 1)
26481 	break;
26482 
26483       /* FIXME: OpenMP 3.0 draft isn't very clear on what exactly is allowed
26484 	 in between the collapsed for loops to be still considered perfectly
26485 	 nested.  Hopefully the final version clarifies this.
26486 	 For now handle (multiple) {'s and empty statements.  */
26487       cp_parser_parse_tentatively (parser);
26488       do
26489 	{
26490 	  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
26491 	    break;
26492 	  else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
26493 	    {
26494 	      cp_lexer_consume_token (parser->lexer);
26495 	      bracecount++;
26496 	    }
26497 	  else if (bracecount
26498 		   && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
26499 	    cp_lexer_consume_token (parser->lexer);
26500 	  else
26501 	    {
26502 	      loc = cp_lexer_peek_token (parser->lexer)->location;
26503 	      error_at (loc, "not enough collapsed for loops");
26504 	      collapse_err = true;
26505 	      cp_parser_abort_tentative_parse (parser);
26506 	      declv = NULL_TREE;
26507 	      break;
26508 	    }
26509 	}
26510       while (1);
26511 
26512       if (declv)
26513 	{
26514 	  cp_parser_parse_definitely (parser);
26515 	  nbraces += bracecount;
26516 	}
26517     }
26518 
26519   /* Note that we saved the original contents of this flag when we entered
26520      the structured block, and so we don't need to re-save it here.  */
26521   parser->in_statement = IN_OMP_FOR;
26522 
26523   /* Note that the grammar doesn't call for a structured block here,
26524      though the loop as a whole is a structured block.  */
26525   body = push_stmt_list ();
26526   cp_parser_statement (parser, NULL_TREE, false, NULL);
26527   body = pop_stmt_list (body);
26528 
26529   if (declv == NULL_TREE)
26530     ret = NULL_TREE;
26531   else
26532     ret = finish_omp_for (loc_first, declv, initv, condv, incrv, body,
26533 			  pre_body, clauses);
26534 
26535   while (nbraces)
26536     {
26537       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
26538 	{
26539 	  cp_lexer_consume_token (parser->lexer);
26540 	  nbraces--;
26541 	}
26542       else if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
26543 	cp_lexer_consume_token (parser->lexer);
26544       else
26545 	{
26546 	  if (!collapse_err)
26547 	    {
26548 	      error_at (cp_lexer_peek_token (parser->lexer)->location,
26549 			"collapsed loops not perfectly nested");
26550 	    }
26551 	  collapse_err = true;
26552 	  cp_parser_statement_seq_opt (parser, NULL);
26553 	  if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
26554 	    break;
26555 	}
26556     }
26557 
26558   while (!VEC_empty (tree, for_block))
26559     add_stmt (pop_stmt_list (VEC_pop (tree, for_block)));
26560   release_tree_vector (for_block);
26561 
26562   return ret;
26563 }
26564 
26565 /* OpenMP 2.5:
26566    #pragma omp for for-clause[optseq] new-line
26567      for-loop  */
26568 
26569 #define OMP_FOR_CLAUSE_MASK				\
26570 	( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)		\
26571 	| (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)	\
26572 	| (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)		\
26573 	| (1u << PRAGMA_OMP_CLAUSE_REDUCTION)		\
26574 	| (1u << PRAGMA_OMP_CLAUSE_ORDERED)		\
26575 	| (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)		\
26576 	| (1u << PRAGMA_OMP_CLAUSE_NOWAIT)		\
26577 	| (1u << PRAGMA_OMP_CLAUSE_COLLAPSE))
26578 
26579 static tree
26580 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
26581 {
26582   tree clauses, sb, ret;
26583   unsigned int save;
26584 
26585   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
26586 				       "#pragma omp for", pragma_tok);
26587 
26588   sb = begin_omp_structured_block ();
26589   save = cp_parser_begin_omp_structured_block (parser);
26590 
26591   ret = cp_parser_omp_for_loop (parser, clauses, NULL);
26592 
26593   cp_parser_end_omp_structured_block (parser, save);
26594   add_stmt (finish_omp_structured_block (sb));
26595 
26596   return ret;
26597 }
26598 
26599 /* OpenMP 2.5:
26600    # pragma omp master new-line
26601      structured-block  */
26602 
26603 static tree
26604 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
26605 {
26606   cp_parser_require_pragma_eol (parser, pragma_tok);
26607   return c_finish_omp_master (input_location,
26608 			      cp_parser_omp_structured_block (parser));
26609 }
26610 
26611 /* OpenMP 2.5:
26612    # pragma omp ordered new-line
26613      structured-block  */
26614 
26615 static tree
26616 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
26617 {
26618   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
26619   cp_parser_require_pragma_eol (parser, pragma_tok);
26620   return c_finish_omp_ordered (loc, cp_parser_omp_structured_block (parser));
26621 }
26622 
26623 /* OpenMP 2.5:
26624 
26625    section-scope:
26626      { section-sequence }
26627 
26628    section-sequence:
26629      section-directive[opt] structured-block
26630      section-sequence section-directive structured-block  */
26631 
26632 static tree
26633 cp_parser_omp_sections_scope (cp_parser *parser)
26634 {
26635   tree stmt, substmt;
26636   bool error_suppress = false;
26637   cp_token *tok;
26638 
26639   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
26640     return NULL_TREE;
26641 
26642   stmt = push_stmt_list ();
26643 
26644   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
26645     {
26646       unsigned save;
26647 
26648       substmt = begin_omp_structured_block ();
26649       save = cp_parser_begin_omp_structured_block (parser);
26650 
26651       while (1)
26652 	{
26653 	  cp_parser_statement (parser, NULL_TREE, false, NULL);
26654 
26655 	  tok = cp_lexer_peek_token (parser->lexer);
26656 	  if (tok->pragma_kind == PRAGMA_OMP_SECTION)
26657 	    break;
26658 	  if (tok->type == CPP_CLOSE_BRACE)
26659 	    break;
26660 	  if (tok->type == CPP_EOF)
26661 	    break;
26662 	}
26663 
26664       cp_parser_end_omp_structured_block (parser, save);
26665       substmt = finish_omp_structured_block (substmt);
26666       substmt = build1 (OMP_SECTION, void_type_node, substmt);
26667       add_stmt (substmt);
26668     }
26669 
26670   while (1)
26671     {
26672       tok = cp_lexer_peek_token (parser->lexer);
26673       if (tok->type == CPP_CLOSE_BRACE)
26674 	break;
26675       if (tok->type == CPP_EOF)
26676 	break;
26677 
26678       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
26679 	{
26680 	  cp_lexer_consume_token (parser->lexer);
26681 	  cp_parser_require_pragma_eol (parser, tok);
26682 	  error_suppress = false;
26683 	}
26684       else if (!error_suppress)
26685 	{
26686 	  cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
26687 	  error_suppress = true;
26688 	}
26689 
26690       substmt = cp_parser_omp_structured_block (parser);
26691       substmt = build1 (OMP_SECTION, void_type_node, substmt);
26692       add_stmt (substmt);
26693     }
26694   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
26695 
26696   substmt = pop_stmt_list (stmt);
26697 
26698   stmt = make_node (OMP_SECTIONS);
26699   TREE_TYPE (stmt) = void_type_node;
26700   OMP_SECTIONS_BODY (stmt) = substmt;
26701 
26702   add_stmt (stmt);
26703   return stmt;
26704 }
26705 
26706 /* OpenMP 2.5:
26707    # pragma omp sections sections-clause[optseq] newline
26708      sections-scope  */
26709 
26710 #define OMP_SECTIONS_CLAUSE_MASK			\
26711 	( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)		\
26712 	| (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)	\
26713 	| (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)		\
26714 	| (1u << PRAGMA_OMP_CLAUSE_REDUCTION)		\
26715 	| (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
26716 
26717 static tree
26718 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
26719 {
26720   tree clauses, ret;
26721 
26722   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
26723 				       "#pragma omp sections", pragma_tok);
26724 
26725   ret = cp_parser_omp_sections_scope (parser);
26726   if (ret)
26727     OMP_SECTIONS_CLAUSES (ret) = clauses;
26728 
26729   return ret;
26730 }
26731 
26732 /* OpenMP 2.5:
26733    # pragma parallel parallel-clause new-line
26734    # pragma parallel for parallel-for-clause new-line
26735    # pragma parallel sections parallel-sections-clause new-line  */
26736 
26737 #define OMP_PARALLEL_CLAUSE_MASK			\
26738 	( (1u << PRAGMA_OMP_CLAUSE_IF)			\
26739 	| (1u << PRAGMA_OMP_CLAUSE_PRIVATE)		\
26740 	| (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)	\
26741 	| (1u << PRAGMA_OMP_CLAUSE_DEFAULT)		\
26742 	| (1u << PRAGMA_OMP_CLAUSE_SHARED)		\
26743 	| (1u << PRAGMA_OMP_CLAUSE_COPYIN)		\
26744 	| (1u << PRAGMA_OMP_CLAUSE_REDUCTION)		\
26745 	| (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
26746 
26747 static tree
26748 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
26749 {
26750   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
26751   const char *p_name = "#pragma omp parallel";
26752   tree stmt, clauses, par_clause, ws_clause, block;
26753   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
26754   unsigned int save;
26755   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
26756 
26757   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
26758     {
26759       cp_lexer_consume_token (parser->lexer);
26760       p_kind = PRAGMA_OMP_PARALLEL_FOR;
26761       p_name = "#pragma omp parallel for";
26762       mask |= OMP_FOR_CLAUSE_MASK;
26763       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
26764     }
26765   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
26766     {
26767       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
26768       const char *p = IDENTIFIER_POINTER (id);
26769       if (strcmp (p, "sections") == 0)
26770 	{
26771 	  cp_lexer_consume_token (parser->lexer);
26772 	  p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
26773 	  p_name = "#pragma omp parallel sections";
26774 	  mask |= OMP_SECTIONS_CLAUSE_MASK;
26775 	  mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
26776 	}
26777     }
26778 
26779   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
26780   block = begin_omp_parallel ();
26781   save = cp_parser_begin_omp_structured_block (parser);
26782 
26783   switch (p_kind)
26784     {
26785     case PRAGMA_OMP_PARALLEL:
26786       cp_parser_statement (parser, NULL_TREE, false, NULL);
26787       par_clause = clauses;
26788       break;
26789 
26790     case PRAGMA_OMP_PARALLEL_FOR:
26791       c_split_parallel_clauses (loc, clauses, &par_clause, &ws_clause);
26792       cp_parser_omp_for_loop (parser, ws_clause, &par_clause);
26793       break;
26794 
26795     case PRAGMA_OMP_PARALLEL_SECTIONS:
26796       c_split_parallel_clauses (loc, clauses, &par_clause, &ws_clause);
26797       stmt = cp_parser_omp_sections_scope (parser);
26798       if (stmt)
26799 	OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
26800       break;
26801 
26802     default:
26803       gcc_unreachable ();
26804     }
26805 
26806   cp_parser_end_omp_structured_block (parser, save);
26807   stmt = finish_omp_parallel (par_clause, block);
26808   if (p_kind != PRAGMA_OMP_PARALLEL)
26809     OMP_PARALLEL_COMBINED (stmt) = 1;
26810   return stmt;
26811 }
26812 
26813 /* OpenMP 2.5:
26814    # pragma omp single single-clause[optseq] new-line
26815      structured-block  */
26816 
26817 #define OMP_SINGLE_CLAUSE_MASK				\
26818 	( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)		\
26819 	| (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)	\
26820 	| (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)		\
26821 	| (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
26822 
26823 static tree
26824 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
26825 {
26826   tree stmt = make_node (OMP_SINGLE);
26827   TREE_TYPE (stmt) = void_type_node;
26828 
26829   OMP_SINGLE_CLAUSES (stmt)
26830     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
26831 				 "#pragma omp single", pragma_tok);
26832   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
26833 
26834   return add_stmt (stmt);
26835 }
26836 
26837 /* OpenMP 3.0:
26838    # pragma omp task task-clause[optseq] new-line
26839      structured-block  */
26840 
26841 #define OMP_TASK_CLAUSE_MASK				\
26842 	( (1u << PRAGMA_OMP_CLAUSE_IF)			\
26843 	| (1u << PRAGMA_OMP_CLAUSE_UNTIED)		\
26844 	| (1u << PRAGMA_OMP_CLAUSE_DEFAULT)		\
26845 	| (1u << PRAGMA_OMP_CLAUSE_PRIVATE)		\
26846 	| (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)	\
26847 	| (1u << PRAGMA_OMP_CLAUSE_SHARED)		\
26848 	| (1u << PRAGMA_OMP_CLAUSE_FINAL)		\
26849 	| (1u << PRAGMA_OMP_CLAUSE_MERGEABLE))
26850 
26851 static tree
26852 cp_parser_omp_task (cp_parser *parser, cp_token *pragma_tok)
26853 {
26854   tree clauses, block;
26855   unsigned int save;
26856 
26857   clauses = cp_parser_omp_all_clauses (parser, OMP_TASK_CLAUSE_MASK,
26858 				       "#pragma omp task", pragma_tok);
26859   block = begin_omp_task ();
26860   save = cp_parser_begin_omp_structured_block (parser);
26861   cp_parser_statement (parser, NULL_TREE, false, NULL);
26862   cp_parser_end_omp_structured_block (parser, save);
26863   return finish_omp_task (clauses, block);
26864 }
26865 
26866 /* OpenMP 3.0:
26867    # pragma omp taskwait new-line  */
26868 
26869 static void
26870 cp_parser_omp_taskwait (cp_parser *parser, cp_token *pragma_tok)
26871 {
26872   cp_parser_require_pragma_eol (parser, pragma_tok);
26873   finish_omp_taskwait ();
26874 }
26875 
26876 /* OpenMP 3.1:
26877    # pragma omp taskyield new-line  */
26878 
26879 static void
26880 cp_parser_omp_taskyield (cp_parser *parser, cp_token *pragma_tok)
26881 {
26882   cp_parser_require_pragma_eol (parser, pragma_tok);
26883   finish_omp_taskyield ();
26884 }
26885 
26886 /* OpenMP 2.5:
26887    # pragma omp threadprivate (variable-list) */
26888 
26889 static void
26890 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
26891 {
26892   tree vars;
26893 
26894   vars = cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
26895   cp_parser_require_pragma_eol (parser, pragma_tok);
26896 
26897   finish_omp_threadprivate (vars);
26898 }
26899 
26900 /* Main entry point to OpenMP statement pragmas.  */
26901 
26902 static void
26903 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
26904 {
26905   tree stmt;
26906 
26907   switch (pragma_tok->pragma_kind)
26908     {
26909     case PRAGMA_OMP_ATOMIC:
26910       cp_parser_omp_atomic (parser, pragma_tok);
26911       return;
26912     case PRAGMA_OMP_CRITICAL:
26913       stmt = cp_parser_omp_critical (parser, pragma_tok);
26914       break;
26915     case PRAGMA_OMP_FOR:
26916       stmt = cp_parser_omp_for (parser, pragma_tok);
26917       break;
26918     case PRAGMA_OMP_MASTER:
26919       stmt = cp_parser_omp_master (parser, pragma_tok);
26920       break;
26921     case PRAGMA_OMP_ORDERED:
26922       stmt = cp_parser_omp_ordered (parser, pragma_tok);
26923       break;
26924     case PRAGMA_OMP_PARALLEL:
26925       stmt = cp_parser_omp_parallel (parser, pragma_tok);
26926       break;
26927     case PRAGMA_OMP_SECTIONS:
26928       stmt = cp_parser_omp_sections (parser, pragma_tok);
26929       break;
26930     case PRAGMA_OMP_SINGLE:
26931       stmt = cp_parser_omp_single (parser, pragma_tok);
26932       break;
26933     case PRAGMA_OMP_TASK:
26934       stmt = cp_parser_omp_task (parser, pragma_tok);
26935       break;
26936     default:
26937       gcc_unreachable ();
26938     }
26939 
26940   if (stmt)
26941     SET_EXPR_LOCATION (stmt, pragma_tok->location);
26942 }
26943 
26944 /* Transactional Memory parsing routines.  */
26945 
26946 /* Parse a transaction attribute.
26947 
26948    txn-attribute:
26949 	attribute
26950 	[ [ identifier ] ]
26951 
26952    ??? Simplify this when C++0x bracket attributes are
26953    implemented properly.  */
26954 
26955 static tree
26956 cp_parser_txn_attribute_opt (cp_parser *parser)
26957 {
26958   cp_token *token;
26959   tree attr_name, attr = NULL;
26960 
26961   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
26962     return cp_parser_attributes_opt (parser);
26963 
26964   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
26965     return NULL_TREE;
26966   cp_lexer_consume_token (parser->lexer);
26967   if (!cp_parser_require (parser, CPP_OPEN_SQUARE, RT_OPEN_SQUARE))
26968     goto error1;
26969 
26970   token = cp_lexer_peek_token (parser->lexer);
26971   if (token->type == CPP_NAME || token->type == CPP_KEYWORD)
26972     {
26973       token = cp_lexer_consume_token (parser->lexer);
26974 
26975       attr_name = (token->type == CPP_KEYWORD
26976 		   /* For keywords, use the canonical spelling,
26977 		      not the parsed identifier.  */
26978 		   ? ridpointers[(int) token->keyword]
26979 		   : token->u.value);
26980       attr = build_tree_list (attr_name, NULL_TREE);
26981     }
26982   else
26983     cp_parser_error (parser, "expected identifier");
26984 
26985   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
26986  error1:
26987   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
26988   return attr;
26989 }
26990 
26991 /* Parse a __transaction_atomic or __transaction_relaxed statement.
26992 
26993    transaction-statement:
26994      __transaction_atomic txn-attribute[opt] txn-noexcept-spec[opt]
26995        compound-statement
26996      __transaction_relaxed txn-noexcept-spec[opt] compound-statement
26997 */
26998 
26999 static tree
27000 cp_parser_transaction (cp_parser *parser, enum rid keyword)
27001 {
27002   unsigned char old_in = parser->in_transaction;
27003   unsigned char this_in = 1, new_in;
27004   cp_token *token;
27005   tree stmt, attrs, noex;
27006 
27007   gcc_assert (keyword == RID_TRANSACTION_ATOMIC
27008       || keyword == RID_TRANSACTION_RELAXED);
27009   token = cp_parser_require_keyword (parser, keyword,
27010       (keyword == RID_TRANSACTION_ATOMIC ? RT_TRANSACTION_ATOMIC
27011 	  : RT_TRANSACTION_RELAXED));
27012   gcc_assert (token != NULL);
27013 
27014   if (keyword == RID_TRANSACTION_RELAXED)
27015     this_in |= TM_STMT_ATTR_RELAXED;
27016   else
27017     {
27018       attrs = cp_parser_txn_attribute_opt (parser);
27019       if (attrs)
27020 	this_in |= parse_tm_stmt_attr (attrs, TM_STMT_ATTR_OUTER);
27021     }
27022 
27023   /* Parse a noexcept specification.  */
27024   noex = cp_parser_noexcept_specification_opt (parser, true, NULL, true);
27025 
27026   /* Keep track if we're in the lexical scope of an outer transaction.  */
27027   new_in = this_in | (old_in & TM_STMT_ATTR_OUTER);
27028 
27029   stmt = begin_transaction_stmt (token->location, NULL, this_in);
27030 
27031   parser->in_transaction = new_in;
27032   cp_parser_compound_statement (parser, NULL, false, false);
27033   parser->in_transaction = old_in;
27034 
27035   finish_transaction_stmt (stmt, NULL, this_in, noex);
27036 
27037   return stmt;
27038 }
27039 
27040 /* Parse a __transaction_atomic or __transaction_relaxed expression.
27041 
27042    transaction-expression:
27043      __transaction_atomic txn-noexcept-spec[opt] ( expression )
27044      __transaction_relaxed txn-noexcept-spec[opt] ( expression )
27045 */
27046 
27047 static tree
27048 cp_parser_transaction_expression (cp_parser *parser, enum rid keyword)
27049 {
27050   unsigned char old_in = parser->in_transaction;
27051   unsigned char this_in = 1;
27052   cp_token *token;
27053   tree expr, noex;
27054   bool noex_expr;
27055 
27056   gcc_assert (keyword == RID_TRANSACTION_ATOMIC
27057       || keyword == RID_TRANSACTION_RELAXED);
27058 
27059   if (!flag_tm)
27060     error (keyword == RID_TRANSACTION_RELAXED
27061 	   ? G_("%<__transaction_relaxed%> without transactional memory "
27062 		"support enabled")
27063 	   : G_("%<__transaction_atomic%> without transactional memory "
27064 		"support enabled"));
27065 
27066   token = cp_parser_require_keyword (parser, keyword,
27067       (keyword == RID_TRANSACTION_ATOMIC ? RT_TRANSACTION_ATOMIC
27068 	  : RT_TRANSACTION_RELAXED));
27069   gcc_assert (token != NULL);
27070 
27071   if (keyword == RID_TRANSACTION_RELAXED)
27072     this_in |= TM_STMT_ATTR_RELAXED;
27073 
27074   /* Set this early.  This might mean that we allow transaction_cancel in
27075      an expression that we find out later actually has to be a constexpr.
27076      However, we expect that cxx_constant_value will be able to deal with
27077      this; also, if the noexcept has no constexpr, then what we parse next
27078      really is a transaction's body.  */
27079   parser->in_transaction = this_in;
27080 
27081   /* Parse a noexcept specification.  */
27082   noex = cp_parser_noexcept_specification_opt (parser, false, &noex_expr,
27083 					       true);
27084 
27085   if (!noex || !noex_expr
27086       || cp_lexer_peek_token (parser->lexer)->type == CPP_OPEN_PAREN)
27087     {
27088       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
27089 
27090       expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
27091       finish_parenthesized_expr (expr);
27092 
27093       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
27094     }
27095   else
27096     {
27097       /* The only expression that is available got parsed for the noexcept
27098          already.  noexcept is true then.  */
27099       expr = noex;
27100       noex = boolean_true_node;
27101     }
27102 
27103   expr = build_transaction_expr (token->location, expr, this_in, noex);
27104   parser->in_transaction = old_in;
27105 
27106   if (cp_parser_non_integral_constant_expression (parser, NIC_TRANSACTION))
27107     return error_mark_node;
27108 
27109   return (flag_tm ? expr : error_mark_node);
27110 }
27111 
27112 /* Parse a function-transaction-block.
27113 
27114    function-transaction-block:
27115      __transaction_atomic txn-attribute[opt] ctor-initializer[opt]
27116 	 function-body
27117      __transaction_atomic txn-attribute[opt] function-try-block
27118      __transaction_relaxed ctor-initializer[opt] function-body
27119      __transaction_relaxed function-try-block
27120 */
27121 
27122 static bool
27123 cp_parser_function_transaction (cp_parser *parser, enum rid keyword)
27124 {
27125   unsigned char old_in = parser->in_transaction;
27126   unsigned char new_in = 1;
27127   tree compound_stmt, stmt, attrs;
27128   bool ctor_initializer_p;
27129   cp_token *token;
27130 
27131   gcc_assert (keyword == RID_TRANSACTION_ATOMIC
27132       || keyword == RID_TRANSACTION_RELAXED);
27133   token = cp_parser_require_keyword (parser, keyword,
27134       (keyword == RID_TRANSACTION_ATOMIC ? RT_TRANSACTION_ATOMIC
27135 	  : RT_TRANSACTION_RELAXED));
27136   gcc_assert (token != NULL);
27137 
27138   if (keyword == RID_TRANSACTION_RELAXED)
27139     new_in |= TM_STMT_ATTR_RELAXED;
27140   else
27141     {
27142       attrs = cp_parser_txn_attribute_opt (parser);
27143       if (attrs)
27144 	new_in |= parse_tm_stmt_attr (attrs, TM_STMT_ATTR_OUTER);
27145     }
27146 
27147   stmt = begin_transaction_stmt (token->location, &compound_stmt, new_in);
27148 
27149   parser->in_transaction = new_in;
27150 
27151   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
27152     ctor_initializer_p = cp_parser_function_try_block (parser);
27153   else
27154     ctor_initializer_p
27155       = cp_parser_ctor_initializer_opt_and_function_body (parser);
27156 
27157   parser->in_transaction = old_in;
27158 
27159   finish_transaction_stmt (stmt, compound_stmt, new_in, NULL_TREE);
27160 
27161   return ctor_initializer_p;
27162 }
27163 
27164 /* Parse a __transaction_cancel statement.
27165 
27166    cancel-statement:
27167      __transaction_cancel txn-attribute[opt] ;
27168      __transaction_cancel txn-attribute[opt] throw-expression ;
27169 
27170    ??? Cancel and throw is not yet implemented.  */
27171 
27172 static tree
27173 cp_parser_transaction_cancel (cp_parser *parser)
27174 {
27175   cp_token *token;
27176   bool is_outer = false;
27177   tree stmt, attrs;
27178 
27179   token = cp_parser_require_keyword (parser, RID_TRANSACTION_CANCEL,
27180 				     RT_TRANSACTION_CANCEL);
27181   gcc_assert (token != NULL);
27182 
27183   attrs = cp_parser_txn_attribute_opt (parser);
27184   if (attrs)
27185     is_outer = (parse_tm_stmt_attr (attrs, TM_STMT_ATTR_OUTER) != 0);
27186 
27187   /* ??? Parse cancel-and-throw here.  */
27188 
27189   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
27190 
27191   if (!flag_tm)
27192     {
27193       error_at (token->location, "%<__transaction_cancel%> without "
27194 		"transactional memory support enabled");
27195       return error_mark_node;
27196     }
27197   else if (parser->in_transaction & TM_STMT_ATTR_RELAXED)
27198     {
27199       error_at (token->location, "%<__transaction_cancel%> within a "
27200 		"%<__transaction_relaxed%>");
27201       return error_mark_node;
27202     }
27203   else if (is_outer)
27204     {
27205       if ((parser->in_transaction & TM_STMT_ATTR_OUTER) == 0
27206 	  && !is_tm_may_cancel_outer (current_function_decl))
27207 	{
27208 	  error_at (token->location, "outer %<__transaction_cancel%> not "
27209 		    "within outer %<__transaction_atomic%>");
27210 	  error_at (token->location,
27211 		    "  or a %<transaction_may_cancel_outer%> function");
27212 	  return error_mark_node;
27213 	}
27214     }
27215   else if (parser->in_transaction == 0)
27216     {
27217       error_at (token->location, "%<__transaction_cancel%> not within "
27218 		"%<__transaction_atomic%>");
27219       return error_mark_node;
27220     }
27221 
27222   stmt = build_tm_abort_call (token->location, is_outer);
27223   add_stmt (stmt);
27224   finish_stmt ();
27225 
27226   return stmt;
27227 }
27228 
27229 /* The parser.  */
27230 
27231 static GTY (()) cp_parser *the_parser;
27232 
27233 
27234 /* Special handling for the first token or line in the file.  The first
27235    thing in the file might be #pragma GCC pch_preprocess, which loads a
27236    PCH file, which is a GC collection point.  So we need to handle this
27237    first pragma without benefit of an existing lexer structure.
27238 
27239    Always returns one token to the caller in *FIRST_TOKEN.  This is
27240    either the true first token of the file, or the first token after
27241    the initial pragma.  */
27242 
27243 static void
27244 cp_parser_initial_pragma (cp_token *first_token)
27245 {
27246   tree name = NULL;
27247 
27248   cp_lexer_get_preprocessor_token (NULL, first_token);
27249   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
27250     return;
27251 
27252   cp_lexer_get_preprocessor_token (NULL, first_token);
27253   if (first_token->type == CPP_STRING)
27254     {
27255       name = first_token->u.value;
27256 
27257       cp_lexer_get_preprocessor_token (NULL, first_token);
27258       if (first_token->type != CPP_PRAGMA_EOL)
27259 	error_at (first_token->location,
27260 		  "junk at end of %<#pragma GCC pch_preprocess%>");
27261     }
27262   else
27263     error_at (first_token->location, "expected string literal");
27264 
27265   /* Skip to the end of the pragma.  */
27266   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
27267     cp_lexer_get_preprocessor_token (NULL, first_token);
27268 
27269   /* Now actually load the PCH file.  */
27270   if (name)
27271     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
27272 
27273   /* Read one more token to return to our caller.  We have to do this
27274      after reading the PCH file in, since its pointers have to be
27275      live.  */
27276   cp_lexer_get_preprocessor_token (NULL, first_token);
27277 }
27278 
27279 /* Normal parsing of a pragma token.  Here we can (and must) use the
27280    regular lexer.  */
27281 
27282 static bool
27283 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
27284 {
27285   cp_token *pragma_tok;
27286   unsigned int id;
27287 
27288   pragma_tok = cp_lexer_consume_token (parser->lexer);
27289   gcc_assert (pragma_tok->type == CPP_PRAGMA);
27290   parser->lexer->in_pragma = true;
27291 
27292   id = pragma_tok->pragma_kind;
27293   switch (id)
27294     {
27295     case PRAGMA_GCC_PCH_PREPROCESS:
27296       error_at (pragma_tok->location,
27297 		"%<#pragma GCC pch_preprocess%> must be first");
27298       break;
27299 
27300     case PRAGMA_OMP_BARRIER:
27301       switch (context)
27302 	{
27303 	case pragma_compound:
27304 	  cp_parser_omp_barrier (parser, pragma_tok);
27305 	  return false;
27306 	case pragma_stmt:
27307 	  error_at (pragma_tok->location, "%<#pragma omp barrier%> may only be "
27308 		    "used in compound statements");
27309 	  break;
27310 	default:
27311 	  goto bad_stmt;
27312 	}
27313       break;
27314 
27315     case PRAGMA_OMP_FLUSH:
27316       switch (context)
27317 	{
27318 	case pragma_compound:
27319 	  cp_parser_omp_flush (parser, pragma_tok);
27320 	  return false;
27321 	case pragma_stmt:
27322 	  error_at (pragma_tok->location, "%<#pragma omp flush%> may only be "
27323 		    "used in compound statements");
27324 	  break;
27325 	default:
27326 	  goto bad_stmt;
27327 	}
27328       break;
27329 
27330     case PRAGMA_OMP_TASKWAIT:
27331       switch (context)
27332 	{
27333 	case pragma_compound:
27334 	  cp_parser_omp_taskwait (parser, pragma_tok);
27335 	  return false;
27336 	case pragma_stmt:
27337 	  error_at (pragma_tok->location,
27338 		    "%<#pragma omp taskwait%> may only be "
27339 		    "used in compound statements");
27340 	  break;
27341 	default:
27342 	  goto bad_stmt;
27343 	}
27344       break;
27345 
27346     case PRAGMA_OMP_TASKYIELD:
27347       switch (context)
27348 	{
27349 	case pragma_compound:
27350 	  cp_parser_omp_taskyield (parser, pragma_tok);
27351 	  return false;
27352 	case pragma_stmt:
27353 	  error_at (pragma_tok->location,
27354 		    "%<#pragma omp taskyield%> may only be "
27355 		    "used in compound statements");
27356 	  break;
27357 	default:
27358 	  goto bad_stmt;
27359 	}
27360       break;
27361 
27362     case PRAGMA_OMP_THREADPRIVATE:
27363       cp_parser_omp_threadprivate (parser, pragma_tok);
27364       return false;
27365 
27366     case PRAGMA_OMP_ATOMIC:
27367     case PRAGMA_OMP_CRITICAL:
27368     case PRAGMA_OMP_FOR:
27369     case PRAGMA_OMP_MASTER:
27370     case PRAGMA_OMP_ORDERED:
27371     case PRAGMA_OMP_PARALLEL:
27372     case PRAGMA_OMP_SECTIONS:
27373     case PRAGMA_OMP_SINGLE:
27374     case PRAGMA_OMP_TASK:
27375       if (context == pragma_external)
27376 	goto bad_stmt;
27377       cp_parser_omp_construct (parser, pragma_tok);
27378       return true;
27379 
27380     case PRAGMA_OMP_SECTION:
27381       error_at (pragma_tok->location,
27382 		"%<#pragma omp section%> may only be used in "
27383 		"%<#pragma omp sections%> construct");
27384       break;
27385 
27386     default:
27387       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
27388       c_invoke_pragma_handler (id);
27389       break;
27390 
27391     bad_stmt:
27392       cp_parser_error (parser, "expected declaration specifiers");
27393       break;
27394     }
27395 
27396   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
27397   return false;
27398 }
27399 
27400 /* The interface the pragma parsers have to the lexer.  */
27401 
27402 enum cpp_ttype
27403 pragma_lex (tree *value)
27404 {
27405   cp_token *tok;
27406   enum cpp_ttype ret;
27407 
27408   tok = cp_lexer_peek_token (the_parser->lexer);
27409 
27410   ret = tok->type;
27411   *value = tok->u.value;
27412 
27413   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
27414     ret = CPP_EOF;
27415   else if (ret == CPP_STRING)
27416     *value = cp_parser_string_literal (the_parser, false, false);
27417   else
27418     {
27419       cp_lexer_consume_token (the_parser->lexer);
27420       if (ret == CPP_KEYWORD)
27421 	ret = CPP_NAME;
27422     }
27423 
27424   return ret;
27425 }
27426 
27427 
27428 /* External interface.  */
27429 
27430 /* Parse one entire translation unit.  */
27431 
27432 void
27433 c_parse_file (void)
27434 {
27435   static bool already_called = false;
27436 
27437   if (already_called)
27438     {
27439       sorry ("inter-module optimizations not implemented for C++");
27440       return;
27441     }
27442   already_called = true;
27443 
27444   the_parser = cp_parser_new ();
27445   push_deferring_access_checks (flag_access_control
27446 				? dk_no_deferred : dk_no_check);
27447   cp_parser_translation_unit (the_parser);
27448   the_parser = NULL;
27449 }
27450 
27451 #include "gt-cp-parser.h"
27452