OSDN Git Service

fde4c6d838f8daad62eb963a74a716deaa2f1e68
[pf3gnuchains/gcc-fork.git] / gcc / cp / parser.c
1 /* C++ Parser.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004,
3    2005, 2007, 2008, 2009, 2010, 2011  Free Software Foundation, Inc.
4    Written by Mark Mitchell <mark@codesourcery.com>.
5
6    This file is part of GCC.
7
8    GCC is free software; you can redistribute it and/or modify it
9    under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3, or (at your option)
11    any later version.
12
13    GCC is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "timevar.h"
27 #include "cpplib.h"
28 #include "tree.h"
29 #include "cp-tree.h"
30 #include "intl.h"
31 #include "c-family/c-pragma.h"
32 #include "decl.h"
33 #include "flags.h"
34 #include "diagnostic-core.h"
35 #include "output.h"
36 #include "target.h"
37 #include "cgraph.h"
38 #include "c-family/c-common.h"
39 #include "c-family/c-objc.h"
40 #include "plugin.h"
41 #include "tree-pretty-print.h"
42 #include "parser.h"
43
44 \f
45 /* The lexer.  */
46
47 /* The cp_lexer_* routines mediate between the lexer proper (in libcpp
48    and c-lex.c) and the C++ parser.  */
49
50 static cp_token eof_token =
51 {
52   CPP_EOF, RID_MAX, 0, PRAGMA_NONE, false, false, false, 0, { NULL }
53 };
54
55 /* The various kinds of non integral constant we encounter. */
56 typedef enum non_integral_constant {
57   NIC_NONE,
58   /* floating-point literal */
59   NIC_FLOAT,
60   /* %<this%> */
61   NIC_THIS,
62   /* %<__FUNCTION__%> */
63   NIC_FUNC_NAME,
64   /* %<__PRETTY_FUNCTION__%> */
65   NIC_PRETTY_FUNC,
66   /* %<__func__%> */
67   NIC_C99_FUNC,
68   /* "%<va_arg%> */
69   NIC_VA_ARG,
70   /* a cast */
71   NIC_CAST,
72   /* %<typeid%> operator */
73   NIC_TYPEID,
74   /* non-constant compound literals */
75   NIC_NCC,
76   /* a function call */
77   NIC_FUNC_CALL,
78   /* an increment */
79   NIC_INC,
80   /* an decrement */
81   NIC_DEC,
82   /* an array reference */
83   NIC_ARRAY_REF,
84   /* %<->%> */
85   NIC_ARROW,
86   /* %<.%> */
87   NIC_POINT,
88   /* the address of a label */
89   NIC_ADDR_LABEL,
90   /* %<*%> */
91   NIC_STAR,
92   /* %<&%> */
93   NIC_ADDR,
94   /* %<++%> */
95   NIC_PREINCREMENT,
96   /* %<--%> */
97   NIC_PREDECREMENT,
98   /* %<new%> */
99   NIC_NEW,
100   /* %<delete%> */
101   NIC_DEL,
102   /* calls to overloaded operators */
103   NIC_OVERLOADED,
104   /* an assignment */
105   NIC_ASSIGNMENT,
106   /* a comma operator */
107   NIC_COMMA,
108   /* a call to a constructor */
109   NIC_CONSTRUCTOR,
110   /* 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 \f
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 *, tree *, tree *);
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 void cp_parser_parse_tentatively
2253   (cp_parser *);
2254 static void cp_parser_commit_to_tentative_parse
2255   (cp_parser *);
2256 static void cp_parser_abort_tentative_parse
2257   (cp_parser *);
2258 static bool cp_parser_parse_definitely
2259   (cp_parser *);
2260 static inline bool cp_parser_parsing_tentatively
2261   (cp_parser *);
2262 static bool cp_parser_uncommitted_to_tentative_parse_p
2263   (cp_parser *);
2264 static void cp_parser_error
2265   (cp_parser *, const char *);
2266 static void cp_parser_name_lookup_error
2267   (cp_parser *, tree, tree, name_lookup_error, location_t);
2268 static bool cp_parser_simulate_error
2269   (cp_parser *);
2270 static bool cp_parser_check_type_definition
2271   (cp_parser *);
2272 static void cp_parser_check_for_definition_in_return_type
2273   (cp_declarator *, tree, location_t type_location);
2274 static void cp_parser_check_for_invalid_template_id
2275   (cp_parser *, tree, location_t location);
2276 static bool cp_parser_non_integral_constant_expression
2277   (cp_parser *, non_integral_constant);
2278 static void cp_parser_diagnose_invalid_type_name
2279   (cp_parser *, tree, tree, location_t);
2280 static bool cp_parser_parse_and_diagnose_invalid_type_name
2281   (cp_parser *);
2282 static int cp_parser_skip_to_closing_parenthesis
2283   (cp_parser *, bool, bool, bool);
2284 static void cp_parser_skip_to_end_of_statement
2285   (cp_parser *);
2286 static void cp_parser_consume_semicolon_at_end_of_statement
2287   (cp_parser *);
2288 static void cp_parser_skip_to_end_of_block_or_statement
2289   (cp_parser *);
2290 static bool cp_parser_skip_to_closing_brace
2291   (cp_parser *);
2292 static void cp_parser_skip_to_end_of_template_parameter_list
2293   (cp_parser *);
2294 static void cp_parser_skip_to_pragma_eol
2295   (cp_parser*, cp_token *);
2296 static bool cp_parser_error_occurred
2297   (cp_parser *);
2298 static bool cp_parser_allow_gnu_extensions_p
2299   (cp_parser *);
2300 static bool cp_parser_is_pure_string_literal
2301   (cp_token *);
2302 static bool cp_parser_is_string_literal
2303   (cp_token *);
2304 static bool cp_parser_is_keyword
2305   (cp_token *, enum rid);
2306 static tree cp_parser_make_typename_type
2307   (cp_parser *, tree, tree, location_t location);
2308 static cp_declarator * cp_parser_make_indirect_declarator
2309   (enum tree_code, tree, cp_cv_quals, cp_declarator *);
2310
2311 /* Returns nonzero if we are parsing tentatively.  */
2312
2313 static inline bool
2314 cp_parser_parsing_tentatively (cp_parser* parser)
2315 {
2316   return parser->context->next != NULL;
2317 }
2318
2319 /* Returns nonzero if TOKEN is a string literal.  */
2320
2321 static bool
2322 cp_parser_is_pure_string_literal (cp_token* token)
2323 {
2324   return (token->type == CPP_STRING ||
2325           token->type == CPP_STRING16 ||
2326           token->type == CPP_STRING32 ||
2327           token->type == CPP_WSTRING ||
2328           token->type == CPP_UTF8STRING);
2329 }
2330
2331 /* Returns nonzero if TOKEN is a string literal
2332    of a user-defined string literal.  */
2333
2334 static bool
2335 cp_parser_is_string_literal (cp_token* token)
2336 {
2337   return (cp_parser_is_pure_string_literal (token) ||
2338           token->type == CPP_STRING_USERDEF ||
2339           token->type == CPP_STRING16_USERDEF ||
2340           token->type == CPP_STRING32_USERDEF ||
2341           token->type == CPP_WSTRING_USERDEF ||
2342           token->type == CPP_UTF8STRING_USERDEF);
2343 }
2344
2345 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
2346
2347 static bool
2348 cp_parser_is_keyword (cp_token* token, enum rid keyword)
2349 {
2350   return token->keyword == keyword;
2351 }
2352
2353 /* If not parsing tentatively, issue a diagnostic of the form
2354       FILE:LINE: MESSAGE before TOKEN
2355    where TOKEN is the next token in the input stream.  MESSAGE
2356    (specified by the caller) is usually of the form "expected
2357    OTHER-TOKEN".  */
2358
2359 static void
2360 cp_parser_error (cp_parser* parser, const char* gmsgid)
2361 {
2362   if (!cp_parser_simulate_error (parser))
2363     {
2364       cp_token *token = cp_lexer_peek_token (parser->lexer);
2365       /* This diagnostic makes more sense if it is tagged to the line
2366          of the token we just peeked at.  */
2367       cp_lexer_set_source_position_from_token (token);
2368
2369       if (token->type == CPP_PRAGMA)
2370         {
2371           error_at (token->location,
2372                     "%<#pragma%> is not allowed here");
2373           cp_parser_skip_to_pragma_eol (parser, token);
2374           return;
2375         }
2376
2377       c_parse_error (gmsgid,
2378                      /* Because c_parser_error does not understand
2379                         CPP_KEYWORD, keywords are treated like
2380                         identifiers.  */
2381                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
2382                      token->u.value, token->flags);
2383     }
2384 }
2385
2386 /* Issue an error about name-lookup failing.  NAME is the
2387    IDENTIFIER_NODE DECL is the result of
2388    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
2389    the thing that we hoped to find.  */
2390
2391 static void
2392 cp_parser_name_lookup_error (cp_parser* parser,
2393                              tree name,
2394                              tree decl,
2395                              name_lookup_error desired,
2396                              location_t location)
2397 {
2398   /* If name lookup completely failed, tell the user that NAME was not
2399      declared.  */
2400   if (decl == error_mark_node)
2401     {
2402       if (parser->scope && parser->scope != global_namespace)
2403         error_at (location, "%<%E::%E%> has not been declared",
2404                   parser->scope, name);
2405       else if (parser->scope == global_namespace)
2406         error_at (location, "%<::%E%> has not been declared", name);
2407       else if (parser->object_scope
2408                && !CLASS_TYPE_P (parser->object_scope))
2409         error_at (location, "request for member %qE in non-class type %qT",
2410                   name, parser->object_scope);
2411       else if (parser->object_scope)
2412         error_at (location, "%<%T::%E%> has not been declared",
2413                   parser->object_scope, name);
2414       else
2415         error_at (location, "%qE has not been declared", name);
2416     }
2417   else if (parser->scope && parser->scope != global_namespace)
2418     {
2419       switch (desired)
2420         {
2421           case NLE_TYPE:
2422             error_at (location, "%<%E::%E%> is not a type",
2423                                 parser->scope, name);
2424             break;
2425           case NLE_CXX98:
2426             error_at (location, "%<%E::%E%> is not a class or namespace",
2427                                 parser->scope, name);
2428             break;
2429           case NLE_NOT_CXX98:
2430             error_at (location,
2431                       "%<%E::%E%> is not a class, namespace, or enumeration",
2432                       parser->scope, name);
2433             break;
2434           default:
2435             gcc_unreachable ();
2436             
2437         }
2438     }
2439   else if (parser->scope == global_namespace)
2440     {
2441       switch (desired)
2442         {
2443           case NLE_TYPE:
2444             error_at (location, "%<::%E%> is not a type", name);
2445             break;
2446           case NLE_CXX98:
2447             error_at (location, "%<::%E%> is not a class or namespace", name);
2448             break;
2449           case NLE_NOT_CXX98:
2450             error_at (location,
2451                       "%<::%E%> is not a class, namespace, or enumeration",
2452                       name);
2453             break;
2454           default:
2455             gcc_unreachable ();
2456         }
2457     }
2458   else
2459     {
2460       switch (desired)
2461         {
2462           case NLE_TYPE:
2463             error_at (location, "%qE is not a type", name);
2464             break;
2465           case NLE_CXX98:
2466             error_at (location, "%qE is not a class or namespace", name);
2467             break;
2468           case NLE_NOT_CXX98:
2469             error_at (location,
2470                       "%qE is not a class, namespace, or enumeration", name);
2471             break;
2472           default:
2473             gcc_unreachable ();
2474         }
2475     }
2476 }
2477
2478 /* If we are parsing tentatively, remember that an error has occurred
2479    during this tentative parse.  Returns true if the error was
2480    simulated; false if a message should be issued by the caller.  */
2481
2482 static bool
2483 cp_parser_simulate_error (cp_parser* parser)
2484 {
2485   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2486     {
2487       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2488       return true;
2489     }
2490   return false;
2491 }
2492
2493 /* Check for repeated decl-specifiers.  */
2494
2495 static void
2496 cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs,
2497                            location_t location)
2498 {
2499   int ds;
2500
2501   for (ds = ds_first; ds != ds_last; ++ds)
2502     {
2503       unsigned count = decl_specs->specs[ds];
2504       if (count < 2)
2505         continue;
2506       /* The "long" specifier is a special case because of "long long".  */
2507       if (ds == ds_long)
2508         {
2509           if (count > 2)
2510             error_at (location, "%<long long long%> is too long for GCC");
2511           else 
2512             pedwarn_cxx98 (location, OPT_Wlong_long, 
2513                            "ISO C++ 1998 does not support %<long long%>");
2514         }
2515       else if (count > 1)
2516         {
2517           static const char *const decl_spec_names[] = {
2518             "signed",
2519             "unsigned",
2520             "short",
2521             "long",
2522             "const",
2523             "volatile",
2524             "restrict",
2525             "inline",
2526             "virtual",
2527             "explicit",
2528             "friend",
2529             "typedef",
2530             "using",
2531             "constexpr",
2532             "__complex",
2533             "__thread"
2534           };
2535           error_at (location, "duplicate %qs", decl_spec_names[ds]);
2536         }
2537     }
2538 }
2539
2540 /* This function is called when a type is defined.  If type
2541    definitions are forbidden at this point, an error message is
2542    issued.  */
2543
2544 static bool
2545 cp_parser_check_type_definition (cp_parser* parser)
2546 {
2547   /* If types are forbidden here, issue a message.  */
2548   if (parser->type_definition_forbidden_message)
2549     {
2550       /* Don't use `%s' to print the string, because quotations (`%<', `%>')
2551          in the message need to be interpreted.  */
2552       error (parser->type_definition_forbidden_message);
2553       return false;
2554     }
2555   return true;
2556 }
2557
2558 /* This function is called when the DECLARATOR is processed.  The TYPE
2559    was a type defined in the decl-specifiers.  If it is invalid to
2560    define a type in the decl-specifiers for DECLARATOR, an error is
2561    issued. TYPE_LOCATION is the location of TYPE and is used
2562    for error reporting.  */
2563
2564 static void
2565 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2566                                                tree type, location_t type_location)
2567 {
2568   /* [dcl.fct] forbids type definitions in return types.
2569      Unfortunately, it's not easy to know whether or not we are
2570      processing a return type until after the fact.  */
2571   while (declarator
2572          && (declarator->kind == cdk_pointer
2573              || declarator->kind == cdk_reference
2574              || declarator->kind == cdk_ptrmem))
2575     declarator = declarator->declarator;
2576   if (declarator
2577       && declarator->kind == cdk_function)
2578     {
2579       error_at (type_location,
2580                 "new types may not be defined in a return type");
2581       inform (type_location, 
2582               "(perhaps a semicolon is missing after the definition of %qT)",
2583               type);
2584     }
2585 }
2586
2587 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2588    "<" in any valid C++ program.  If the next token is indeed "<",
2589    issue a message warning the user about what appears to be an
2590    invalid attempt to form a template-id. LOCATION is the location
2591    of the type-specifier (TYPE) */
2592
2593 static void
2594 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2595                                          tree type, location_t location)
2596 {
2597   cp_token_position start = 0;
2598
2599   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2600     {
2601       if (TYPE_P (type))
2602         error_at (location, "%qT is not a template", type);
2603       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2604         error_at (location, "%qE is not a template", type);
2605       else
2606         error_at (location, "invalid template-id");
2607       /* Remember the location of the invalid "<".  */
2608       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2609         start = cp_lexer_token_position (parser->lexer, true);
2610       /* Consume the "<".  */
2611       cp_lexer_consume_token (parser->lexer);
2612       /* Parse the template arguments.  */
2613       cp_parser_enclosed_template_argument_list (parser);
2614       /* Permanently remove the invalid template arguments so that
2615          this error message is not issued again.  */
2616       if (start)
2617         cp_lexer_purge_tokens_after (parser->lexer, start);
2618     }
2619 }
2620
2621 /* If parsing an integral constant-expression, issue an error message
2622    about the fact that THING appeared and return true.  Otherwise,
2623    return false.  In either case, set
2624    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2625
2626 static bool
2627 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2628                                             non_integral_constant thing)
2629 {
2630   parser->non_integral_constant_expression_p = true;
2631   if (parser->integral_constant_expression_p)
2632     {
2633       if (!parser->allow_non_integral_constant_expression_p)
2634         {
2635           const char *msg = NULL;
2636           switch (thing)
2637             {
2638               case NIC_FLOAT:
2639                 error ("floating-point literal "
2640                        "cannot appear in a constant-expression");
2641                 return true;
2642               case NIC_CAST:
2643                 error ("a cast to a type other than an integral or "
2644                        "enumeration type cannot appear in a "
2645                        "constant-expression");
2646                 return true;
2647               case NIC_TYPEID:
2648                 error ("%<typeid%> operator "
2649                        "cannot appear in a constant-expression");
2650                 return true;
2651               case NIC_NCC:
2652                 error ("non-constant compound literals "
2653                        "cannot appear in a constant-expression");
2654                 return true;
2655               case NIC_FUNC_CALL:
2656                 error ("a function call "
2657                        "cannot appear in a constant-expression");
2658                 return true;
2659               case NIC_INC:
2660                 error ("an increment "
2661                        "cannot appear in a constant-expression");
2662                 return true;
2663               case NIC_DEC:
2664                 error ("an decrement "
2665                        "cannot appear in a constant-expression");
2666                 return true;
2667               case NIC_ARRAY_REF:
2668                 error ("an array reference "
2669                        "cannot appear in a constant-expression");
2670                 return true;
2671               case NIC_ADDR_LABEL:
2672                 error ("the address of a label "
2673                        "cannot appear in a constant-expression");
2674                 return true;
2675               case NIC_OVERLOADED:
2676                 error ("calls to overloaded operators "
2677                        "cannot appear in a constant-expression");
2678                 return true;
2679               case NIC_ASSIGNMENT:
2680                 error ("an assignment cannot appear in a constant-expression");
2681                 return true;
2682               case NIC_COMMA:
2683                 error ("a comma operator "
2684                        "cannot appear in a constant-expression");
2685                 return true;
2686               case NIC_CONSTRUCTOR:
2687                 error ("a call to a constructor "
2688                        "cannot appear in a constant-expression");
2689                 return true;
2690               case NIC_TRANSACTION:
2691                 error ("a transaction expression "
2692                        "cannot appear in a constant-expression");
2693                 return true;
2694               case NIC_THIS:
2695                 msg = "this";
2696                 break;
2697               case NIC_FUNC_NAME:
2698                 msg = "__FUNCTION__";
2699                 break;
2700               case NIC_PRETTY_FUNC:
2701                 msg = "__PRETTY_FUNCTION__";
2702                 break;
2703               case NIC_C99_FUNC:
2704                 msg = "__func__";
2705                 break;
2706               case NIC_VA_ARG:
2707                 msg = "va_arg";
2708                 break;
2709               case NIC_ARROW:
2710                 msg = "->";
2711                 break;
2712               case NIC_POINT:
2713                 msg = ".";
2714                 break;
2715               case NIC_STAR:
2716                 msg = "*";
2717                 break;
2718               case NIC_ADDR:
2719                 msg = "&";
2720                 break;
2721               case NIC_PREINCREMENT:
2722                 msg = "++";
2723                 break;
2724               case NIC_PREDECREMENT:
2725                 msg = "--";
2726                 break;
2727               case NIC_NEW:
2728                 msg = "new";
2729                 break;
2730               case NIC_DEL:
2731                 msg = "delete";
2732                 break;
2733               default:
2734                 gcc_unreachable ();
2735             }
2736           if (msg)
2737             error ("%qs cannot appear in a constant-expression", msg);
2738           return true;
2739         }
2740     }
2741   return false;
2742 }
2743
2744 /* Emit a diagnostic for an invalid type name.  SCOPE is the
2745    qualifying scope (or NULL, if none) for ID.  This function commits
2746    to the current active tentative parse, if any.  (Otherwise, the
2747    problematic construct might be encountered again later, resulting
2748    in duplicate error messages.) LOCATION is the location of ID.  */
2749
2750 static void
2751 cp_parser_diagnose_invalid_type_name (cp_parser *parser,
2752                                       tree scope, tree id,
2753                                       location_t location)
2754 {
2755   tree decl, old_scope;
2756   cp_parser_commit_to_tentative_parse (parser);
2757   /* Try to lookup the identifier.  */
2758   old_scope = parser->scope;
2759   parser->scope = scope;
2760   decl = cp_parser_lookup_name_simple (parser, id, location);
2761   parser->scope = old_scope;
2762   /* If the lookup found a template-name, it means that the user forgot
2763   to specify an argument list. Emit a useful error message.  */
2764   if (TREE_CODE (decl) == TEMPLATE_DECL)
2765     error_at (location,
2766               "invalid use of template-name %qE without an argument list",
2767               decl);
2768   else if (TREE_CODE (id) == BIT_NOT_EXPR)
2769     error_at (location, "invalid use of destructor %qD as a type", id);
2770   else if (TREE_CODE (decl) == TYPE_DECL)
2771     /* Something like 'unsigned A a;'  */
2772     error_at (location, "invalid combination of multiple type-specifiers");
2773   else if (!parser->scope)
2774     {
2775       /* Issue an error message.  */
2776       error_at (location, "%qE does not name a type", id);
2777       /* If we're in a template class, it's possible that the user was
2778          referring to a type from a base class.  For example:
2779
2780            template <typename T> struct A { typedef T X; };
2781            template <typename T> struct B : public A<T> { X x; };
2782
2783          The user should have said "typename A<T>::X".  */
2784       if (cxx_dialect < cxx0x && id == ridpointers[(int)RID_CONSTEXPR])
2785         inform (location, "C++11 %<constexpr%> only available with "
2786                 "-std=c++11 or -std=gnu++11");
2787       else if (processing_template_decl && current_class_type
2788                && TYPE_BINFO (current_class_type))
2789         {
2790           tree b;
2791
2792           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2793                b;
2794                b = TREE_CHAIN (b))
2795             {
2796               tree base_type = BINFO_TYPE (b);
2797               if (CLASS_TYPE_P (base_type)
2798                   && dependent_type_p (base_type))
2799                 {
2800                   tree field;
2801                   /* Go from a particular instantiation of the
2802                      template (which will have an empty TYPE_FIELDs),
2803                      to the main version.  */
2804                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2805                   for (field = TYPE_FIELDS (base_type);
2806                        field;
2807                        field = DECL_CHAIN (field))
2808                     if (TREE_CODE (field) == TYPE_DECL
2809                         && DECL_NAME (field) == id)
2810                       {
2811                         inform (location, 
2812                                 "(perhaps %<typename %T::%E%> was intended)",
2813                                 BINFO_TYPE (b), id);
2814                         break;
2815                       }
2816                   if (field)
2817                     break;
2818                 }
2819             }
2820         }
2821     }
2822   /* Here we diagnose qualified-ids where the scope is actually correct,
2823      but the identifier does not resolve to a valid type name.  */
2824   else if (parser->scope != error_mark_node)
2825     {
2826       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2827         error_at (location, "%qE in namespace %qE does not name a type",
2828                   id, parser->scope);
2829       else if (CLASS_TYPE_P (parser->scope)
2830                && constructor_name_p (id, parser->scope))
2831         {
2832           /* A<T>::A<T>() */
2833           error_at (location, "%<%T::%E%> names the constructor, not"
2834                     " the type", parser->scope, id);
2835           if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2836             error_at (location, "and %qT has no template constructors",
2837                       parser->scope);
2838         }
2839       else if (TYPE_P (parser->scope)
2840                && dependent_scope_p (parser->scope))
2841         error_at (location, "need %<typename%> before %<%T::%E%> because "
2842                   "%qT is a dependent scope",
2843                   parser->scope, id, parser->scope);
2844       else if (TYPE_P (parser->scope))
2845         error_at (location, "%qE in %q#T does not name a type",
2846                   id, parser->scope);
2847       else
2848         gcc_unreachable ();
2849     }
2850 }
2851
2852 /* Check for a common situation where a type-name should be present,
2853    but is not, and issue a sensible error message.  Returns true if an
2854    invalid type-name was detected.
2855
2856    The situation handled by this function are variable declarations of the
2857    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2858    Usually, `ID' should name a type, but if we got here it means that it
2859    does not. We try to emit the best possible error message depending on
2860    how exactly the id-expression looks like.  */
2861
2862 static bool
2863 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2864 {
2865   tree id;
2866   cp_token *token = cp_lexer_peek_token (parser->lexer);
2867
2868   /* Avoid duplicate error about ambiguous lookup.  */
2869   if (token->type == CPP_NESTED_NAME_SPECIFIER)
2870     {
2871       cp_token *next = cp_lexer_peek_nth_token (parser->lexer, 2);
2872       if (next->type == CPP_NAME && next->ambiguous_p)
2873         goto out;
2874     }
2875
2876   cp_parser_parse_tentatively (parser);
2877   id = cp_parser_id_expression (parser,
2878                                 /*template_keyword_p=*/false,
2879                                 /*check_dependency_p=*/true,
2880                                 /*template_p=*/NULL,
2881                                 /*declarator_p=*/true,
2882                                 /*optional_p=*/false);
2883   /* If the next token is a (, this is a function with no explicit return
2884      type, i.e. constructor, destructor or conversion op.  */
2885   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
2886       || TREE_CODE (id) == TYPE_DECL)
2887     {
2888       cp_parser_abort_tentative_parse (parser);
2889       return false;
2890     }
2891   if (!cp_parser_parse_definitely (parser))
2892     return false;
2893
2894   /* Emit a diagnostic for the invalid type.  */
2895   cp_parser_diagnose_invalid_type_name (parser, parser->scope,
2896                                         id, token->location);
2897  out:
2898   /* If we aren't in the middle of a declarator (i.e. in a
2899      parameter-declaration-clause), skip to the end of the declaration;
2900      there's no point in trying to process it.  */
2901   if (!parser->in_declarator_p)
2902     cp_parser_skip_to_end_of_block_or_statement (parser);
2903   return true;
2904 }
2905
2906 /* Consume tokens up to, and including, the next non-nested closing `)'.
2907    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2908    are doing error recovery. Returns -1 if OR_COMMA is true and we
2909    found an unnested comma.  */
2910
2911 static int
2912 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2913                                        bool recovering,
2914                                        bool or_comma,
2915                                        bool consume_paren)
2916 {
2917   unsigned paren_depth = 0;
2918   unsigned brace_depth = 0;
2919   unsigned square_depth = 0;
2920
2921   if (recovering && !or_comma
2922       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2923     return 0;
2924
2925   while (true)
2926     {
2927       cp_token * token = cp_lexer_peek_token (parser->lexer);
2928
2929       switch (token->type)
2930         {
2931         case CPP_EOF:
2932         case CPP_PRAGMA_EOL:
2933           /* If we've run out of tokens, then there is no closing `)'.  */
2934           return 0;
2935
2936         /* This is good for lambda expression capture-lists.  */
2937         case CPP_OPEN_SQUARE:
2938           ++square_depth;
2939           break;
2940         case CPP_CLOSE_SQUARE:
2941           if (!square_depth--)
2942             return 0;
2943           break;
2944
2945         case CPP_SEMICOLON:
2946           /* This matches the processing in skip_to_end_of_statement.  */
2947           if (!brace_depth)
2948             return 0;
2949           break;
2950
2951         case CPP_OPEN_BRACE:
2952           ++brace_depth;
2953           break;
2954         case CPP_CLOSE_BRACE:
2955           if (!brace_depth--)
2956             return 0;
2957           break;
2958
2959         case CPP_COMMA:
2960           if (recovering && or_comma && !brace_depth && !paren_depth
2961               && !square_depth)
2962             return -1;
2963           break;
2964
2965         case CPP_OPEN_PAREN:
2966           if (!brace_depth)
2967             ++paren_depth;
2968           break;
2969
2970         case CPP_CLOSE_PAREN:
2971           if (!brace_depth && !paren_depth--)
2972             {
2973               if (consume_paren)
2974                 cp_lexer_consume_token (parser->lexer);
2975               return 1;
2976             }
2977           break;
2978
2979         default:
2980           break;
2981         }
2982
2983       /* Consume the token.  */
2984       cp_lexer_consume_token (parser->lexer);
2985     }
2986 }
2987
2988 /* Consume tokens until we reach the end of the current statement.
2989    Normally, that will be just before consuming a `;'.  However, if a
2990    non-nested `}' comes first, then we stop before consuming that.  */
2991
2992 static void
2993 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2994 {
2995   unsigned nesting_depth = 0;
2996
2997   while (true)
2998     {
2999       cp_token *token = cp_lexer_peek_token (parser->lexer);
3000
3001       switch (token->type)
3002         {
3003         case CPP_EOF:
3004         case CPP_PRAGMA_EOL:
3005           /* If we've run out of tokens, stop.  */
3006           return;
3007
3008         case CPP_SEMICOLON:
3009           /* If the next token is a `;', we have reached the end of the
3010              statement.  */
3011           if (!nesting_depth)
3012             return;
3013           break;
3014
3015         case CPP_CLOSE_BRACE:
3016           /* If this is a non-nested '}', stop before consuming it.
3017              That way, when confronted with something like:
3018
3019                { 3 + }
3020
3021              we stop before consuming the closing '}', even though we
3022              have not yet reached a `;'.  */
3023           if (nesting_depth == 0)
3024             return;
3025
3026           /* If it is the closing '}' for a block that we have
3027              scanned, stop -- but only after consuming the token.
3028              That way given:
3029
3030                 void f g () { ... }
3031                 typedef int I;
3032
3033              we will stop after the body of the erroneously declared
3034              function, but before consuming the following `typedef'
3035              declaration.  */
3036           if (--nesting_depth == 0)
3037             {
3038               cp_lexer_consume_token (parser->lexer);
3039               return;
3040             }
3041
3042         case CPP_OPEN_BRACE:
3043           ++nesting_depth;
3044           break;
3045
3046         default:
3047           break;
3048         }
3049
3050       /* Consume the token.  */
3051       cp_lexer_consume_token (parser->lexer);
3052     }
3053 }
3054
3055 /* This function is called at the end of a statement or declaration.
3056    If the next token is a semicolon, it is consumed; otherwise, error
3057    recovery is attempted.  */
3058
3059 static void
3060 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
3061 {
3062   /* Look for the trailing `;'.  */
3063   if (!cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON))
3064     {
3065       /* If there is additional (erroneous) input, skip to the end of
3066          the statement.  */
3067       cp_parser_skip_to_end_of_statement (parser);
3068       /* If the next token is now a `;', consume it.  */
3069       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
3070         cp_lexer_consume_token (parser->lexer);
3071     }
3072 }
3073
3074 /* Skip tokens until we have consumed an entire block, or until we
3075    have consumed a non-nested `;'.  */
3076
3077 static void
3078 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
3079 {
3080   int nesting_depth = 0;
3081
3082   while (nesting_depth >= 0)
3083     {
3084       cp_token *token = cp_lexer_peek_token (parser->lexer);
3085
3086       switch (token->type)
3087         {
3088         case CPP_EOF:
3089         case CPP_PRAGMA_EOL:
3090           /* If we've run out of tokens, stop.  */
3091           return;
3092
3093         case CPP_SEMICOLON:
3094           /* Stop if this is an unnested ';'. */
3095           if (!nesting_depth)
3096             nesting_depth = -1;
3097           break;
3098
3099         case CPP_CLOSE_BRACE:
3100           /* Stop if this is an unnested '}', or closes the outermost
3101              nesting level.  */
3102           nesting_depth--;
3103           if (nesting_depth < 0)
3104             return;
3105           if (!nesting_depth)
3106             nesting_depth = -1;
3107           break;
3108
3109         case CPP_OPEN_BRACE:
3110           /* Nest. */
3111           nesting_depth++;
3112           break;
3113
3114         default:
3115           break;
3116         }
3117
3118       /* Consume the token.  */
3119       cp_lexer_consume_token (parser->lexer);
3120     }
3121 }
3122
3123 /* Skip tokens until a non-nested closing curly brace is the next
3124    token, or there are no more tokens. Return true in the first case,
3125    false otherwise.  */
3126
3127 static bool
3128 cp_parser_skip_to_closing_brace (cp_parser *parser)
3129 {
3130   unsigned nesting_depth = 0;
3131
3132   while (true)
3133     {
3134       cp_token *token = cp_lexer_peek_token (parser->lexer);
3135
3136       switch (token->type)
3137         {
3138         case CPP_EOF:
3139         case CPP_PRAGMA_EOL:
3140           /* If we've run out of tokens, stop.  */
3141           return false;
3142
3143         case CPP_CLOSE_BRACE:
3144           /* If the next token is a non-nested `}', then we have reached
3145              the end of the current block.  */
3146           if (nesting_depth-- == 0)
3147             return true;
3148           break;
3149
3150         case CPP_OPEN_BRACE:
3151           /* If it the next token is a `{', then we are entering a new
3152              block.  Consume the entire block.  */
3153           ++nesting_depth;
3154           break;
3155
3156         default:
3157           break;
3158         }
3159
3160       /* Consume the token.  */
3161       cp_lexer_consume_token (parser->lexer);
3162     }
3163 }
3164
3165 /* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
3166    parameter is the PRAGMA token, allowing us to purge the entire pragma
3167    sequence.  */
3168
3169 static void
3170 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
3171 {
3172   cp_token *token;
3173
3174   parser->lexer->in_pragma = false;
3175
3176   do
3177     token = cp_lexer_consume_token (parser->lexer);
3178   while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
3179
3180   /* Ensure that the pragma is not parsed again.  */
3181   cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
3182 }
3183
3184 /* Require pragma end of line, resyncing with it as necessary.  The
3185    arguments are as for cp_parser_skip_to_pragma_eol.  */
3186
3187 static void
3188 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
3189 {
3190   parser->lexer->in_pragma = false;
3191   if (!cp_parser_require (parser, CPP_PRAGMA_EOL, RT_PRAGMA_EOL))
3192     cp_parser_skip_to_pragma_eol (parser, pragma_tok);
3193 }
3194
3195 /* This is a simple wrapper around make_typename_type. When the id is
3196    an unresolved identifier node, we can provide a superior diagnostic
3197    using cp_parser_diagnose_invalid_type_name.  */
3198
3199 static tree
3200 cp_parser_make_typename_type (cp_parser *parser, tree scope,
3201                               tree id, location_t id_location)
3202 {
3203   tree result;
3204   if (TREE_CODE (id) == IDENTIFIER_NODE)
3205     {
3206       result = make_typename_type (scope, id, typename_type,
3207                                    /*complain=*/tf_none);
3208       if (result == error_mark_node)
3209         cp_parser_diagnose_invalid_type_name (parser, scope, id, id_location);
3210       return result;
3211     }
3212   return make_typename_type (scope, id, typename_type, tf_error);
3213 }
3214
3215 /* This is a wrapper around the
3216    make_{pointer,ptrmem,reference}_declarator functions that decides
3217    which one to call based on the CODE and CLASS_TYPE arguments. The
3218    CODE argument should be one of the values returned by
3219    cp_parser_ptr_operator. */
3220 static cp_declarator *
3221 cp_parser_make_indirect_declarator (enum tree_code code, tree class_type,
3222                                     cp_cv_quals cv_qualifiers,
3223                                     cp_declarator *target)
3224 {
3225   if (code == ERROR_MARK)
3226     return cp_error_declarator;
3227
3228   if (code == INDIRECT_REF)
3229     if (class_type == NULL_TREE)
3230       return make_pointer_declarator (cv_qualifiers, target);
3231     else
3232       return make_ptrmem_declarator (cv_qualifiers, class_type, target);
3233   else if (code == ADDR_EXPR && class_type == NULL_TREE)
3234     return make_reference_declarator (cv_qualifiers, target, false);
3235   else if (code == NON_LVALUE_EXPR && class_type == NULL_TREE)
3236     return make_reference_declarator (cv_qualifiers, target, true);
3237   gcc_unreachable ();
3238 }
3239
3240 /* Create a new C++ parser.  */
3241
3242 static cp_parser *
3243 cp_parser_new (void)
3244 {
3245   cp_parser *parser;
3246   cp_lexer *lexer;
3247   unsigned i;
3248
3249   /* cp_lexer_new_main is called before doing GC allocation because
3250      cp_lexer_new_main might load a PCH file.  */
3251   lexer = cp_lexer_new_main ();
3252
3253   /* Initialize the binops_by_token so that we can get the tree
3254      directly from the token.  */
3255   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
3256     binops_by_token[binops[i].token_type] = binops[i];
3257
3258   parser = ggc_alloc_cleared_cp_parser ();
3259   parser->lexer = lexer;
3260   parser->context = cp_parser_context_new (NULL);
3261
3262   /* For now, we always accept GNU extensions.  */
3263   parser->allow_gnu_extensions_p = 1;
3264
3265   /* The `>' token is a greater-than operator, not the end of a
3266      template-id.  */
3267   parser->greater_than_is_operator_p = true;
3268
3269   parser->default_arg_ok_p = true;
3270
3271   /* We are not parsing a constant-expression.  */
3272   parser->integral_constant_expression_p = false;
3273   parser->allow_non_integral_constant_expression_p = false;
3274   parser->non_integral_constant_expression_p = false;
3275
3276   /* Local variable names are not forbidden.  */
3277   parser->local_variables_forbidden_p = false;
3278
3279   /* We are not processing an `extern "C"' declaration.  */
3280   parser->in_unbraced_linkage_specification_p = false;
3281
3282   /* We are not processing a declarator.  */
3283   parser->in_declarator_p = false;
3284
3285   /* We are not processing a template-argument-list.  */
3286   parser->in_template_argument_list_p = false;
3287
3288   /* We are not in an iteration statement.  */
3289   parser->in_statement = 0;
3290
3291   /* We are not in a switch statement.  */
3292   parser->in_switch_statement_p = false;
3293
3294   /* We are not parsing a type-id inside an expression.  */
3295   parser->in_type_id_in_expr_p = false;
3296
3297   /* Declarations aren't implicitly extern "C".  */
3298   parser->implicit_extern_c = false;
3299
3300   /* String literals should be translated to the execution character set.  */
3301   parser->translate_strings_p = true;
3302
3303   /* We are not parsing a function body.  */
3304   parser->in_function_body = false;
3305
3306   /* We can correct until told otherwise.  */
3307   parser->colon_corrects_to_scope_p = true;
3308
3309   /* The unparsed function queue is empty.  */
3310   push_unparsed_function_queues (parser);
3311
3312   /* There are no classes being defined.  */
3313   parser->num_classes_being_defined = 0;
3314
3315   /* No template parameters apply.  */
3316   parser->num_template_parameter_lists = 0;
3317
3318   return parser;
3319 }
3320
3321 /* Create a cp_lexer structure which will emit the tokens in CACHE
3322    and push it onto the parser's lexer stack.  This is used for delayed
3323    parsing of in-class method bodies and default arguments, and should
3324    not be confused with tentative parsing.  */
3325 static void
3326 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
3327 {
3328   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
3329   lexer->next = parser->lexer;
3330   parser->lexer = lexer;
3331
3332   /* Move the current source position to that of the first token in the
3333      new lexer.  */
3334   cp_lexer_set_source_position_from_token (lexer->next_token);
3335 }
3336
3337 /* Pop the top lexer off the parser stack.  This is never used for the
3338    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
3339 static void
3340 cp_parser_pop_lexer (cp_parser *parser)
3341 {
3342   cp_lexer *lexer = parser->lexer;
3343   parser->lexer = lexer->next;
3344   cp_lexer_destroy (lexer);
3345
3346   /* Put the current source position back where it was before this
3347      lexer was pushed.  */
3348   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
3349 }
3350
3351 /* Lexical conventions [gram.lex]  */
3352
3353 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
3354    identifier.  */
3355
3356 static tree
3357 cp_parser_identifier (cp_parser* parser)
3358 {
3359   cp_token *token;
3360
3361   /* Look for the identifier.  */
3362   token = cp_parser_require (parser, CPP_NAME, RT_NAME);
3363   /* Return the value.  */
3364   return token ? token->u.value : error_mark_node;
3365 }
3366
3367 /* Parse a sequence of adjacent string constants.  Returns a
3368    TREE_STRING representing the combined, nul-terminated string
3369    constant.  If TRANSLATE is true, translate the string to the
3370    execution character set.  If WIDE_OK is true, a wide string is
3371    invalid here.
3372
3373    C++98 [lex.string] says that if a narrow string literal token is
3374    adjacent to a wide string literal token, the behavior is undefined.
3375    However, C99 6.4.5p4 says that this results in a wide string literal.
3376    We follow C99 here, for consistency with the C front end.
3377
3378    This code is largely lifted from lex_string() in c-lex.c.
3379
3380    FUTURE: ObjC++ will need to handle @-strings here.  */
3381 static tree
3382 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
3383 {
3384   tree value;
3385   size_t count;
3386   struct obstack str_ob;
3387   cpp_string str, istr, *strs;
3388   cp_token *tok;
3389   enum cpp_ttype type, curr_type;
3390   int have_suffix_p = 0;
3391   tree string_tree;
3392   tree suffix_id = NULL_TREE;
3393   bool curr_tok_is_userdef_p = false;
3394
3395   tok = cp_lexer_peek_token (parser->lexer);
3396   if (!cp_parser_is_string_literal (tok))
3397     {
3398       cp_parser_error (parser, "expected string-literal");
3399       return error_mark_node;
3400     }
3401
3402   if (cpp_userdef_string_p (tok->type))
3403     {
3404       string_tree = USERDEF_LITERAL_VALUE (tok->u.value);
3405       curr_type = cpp_userdef_string_remove_type (tok->type);
3406       curr_tok_is_userdef_p = true;
3407     }
3408   else
3409     {
3410       string_tree = tok->u.value;
3411       curr_type = tok->type;
3412     }
3413   type = curr_type;
3414
3415   /* Try to avoid the overhead of creating and destroying an obstack
3416      for the common case of just one string.  */
3417   if (!cp_parser_is_string_literal
3418       (cp_lexer_peek_nth_token (parser->lexer, 2)))
3419     {
3420       cp_lexer_consume_token (parser->lexer);
3421
3422       str.text = (const unsigned char *)TREE_STRING_POINTER (string_tree);
3423       str.len = TREE_STRING_LENGTH (string_tree);
3424       count = 1;
3425
3426       if (curr_tok_is_userdef_p)
3427         {
3428           suffix_id = USERDEF_LITERAL_SUFFIX_ID (tok->u.value);
3429           have_suffix_p = 1;
3430           curr_type = cpp_userdef_string_remove_type (tok->type);
3431         }
3432       else
3433         curr_type = tok->type;
3434
3435       strs = &str;
3436     }
3437   else
3438     {
3439       gcc_obstack_init (&str_ob);
3440       count = 0;
3441
3442       do
3443         {
3444           cp_lexer_consume_token (parser->lexer);
3445           count++;
3446           str.text = (const unsigned char *)TREE_STRING_POINTER (string_tree);
3447           str.len = TREE_STRING_LENGTH (string_tree);
3448
3449           if (curr_tok_is_userdef_p)
3450             {
3451               tree curr_suffix_id = USERDEF_LITERAL_SUFFIX_ID (tok->u.value);
3452               if (have_suffix_p == 0)
3453                 {
3454                   suffix_id = curr_suffix_id;
3455                   have_suffix_p = 1;
3456                 }
3457               else if (have_suffix_p == 1
3458                        && curr_suffix_id != suffix_id)
3459                 {
3460                   error ("inconsistent user-defined literal suffixes"
3461                          " %qD and %qD in string literal",
3462                          suffix_id, curr_suffix_id);
3463                   have_suffix_p = -1;
3464                 }
3465               curr_type = cpp_userdef_string_remove_type (tok->type);
3466             }
3467           else
3468             curr_type = tok->type;
3469
3470           if (type != curr_type)
3471             {
3472               if (type == CPP_STRING)
3473                 type = curr_type;
3474               else if (curr_type != CPP_STRING)
3475                 error_at (tok->location,
3476                           "unsupported non-standard concatenation "
3477                           "of string literals");
3478             }
3479
3480           obstack_grow (&str_ob, &str, sizeof (cpp_string));
3481
3482           tok = cp_lexer_peek_token (parser->lexer);
3483           if (cpp_userdef_string_p (tok->type))
3484             {
3485               string_tree = USERDEF_LITERAL_VALUE (tok->u.value);
3486               curr_type = cpp_userdef_string_remove_type (tok->type);
3487               curr_tok_is_userdef_p = true;
3488             }
3489           else
3490             {
3491               string_tree = tok->u.value;
3492               curr_type = tok->type;
3493               curr_tok_is_userdef_p = false;
3494             }
3495         }
3496       while (cp_parser_is_string_literal (tok));
3497
3498       strs = (cpp_string *) obstack_finish (&str_ob);
3499     }
3500
3501   if (type != CPP_STRING && !wide_ok)
3502     {
3503       cp_parser_error (parser, "a wide string is invalid in this context");
3504       type = CPP_STRING;
3505     }
3506
3507   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
3508       (parse_in, strs, count, &istr, type))
3509     {
3510       value = build_string (istr.len, (const char *)istr.text);
3511       free (CONST_CAST (unsigned char *, istr.text));
3512
3513       switch (type)
3514         {
3515         default:
3516         case CPP_STRING:
3517         case CPP_UTF8STRING:
3518           TREE_TYPE (value) = char_array_type_node;
3519           break;
3520         case CPP_STRING16:
3521           TREE_TYPE (value) = char16_array_type_node;
3522           break;
3523         case CPP_STRING32:
3524           TREE_TYPE (value) = char32_array_type_node;
3525           break;
3526         case CPP_WSTRING:
3527           TREE_TYPE (value) = wchar_array_type_node;
3528           break;
3529         }
3530
3531       value = fix_string_type (value);
3532
3533       if (have_suffix_p)
3534         {
3535           tree literal = build_userdef_literal (suffix_id, value, NULL_TREE);
3536           tok->u.value = literal;
3537           return cp_parser_userdef_string_literal (tok);
3538         }
3539     }
3540   else
3541     /* cpp_interpret_string has issued an error.  */
3542     value = error_mark_node;
3543
3544   if (count > 1)
3545     obstack_free (&str_ob, 0);
3546
3547   return value;
3548 }
3549
3550 /* Parse a user-defined char constant.  Returns a call to a user-defined
3551    literal operator taking the character as an argument.  */
3552
3553 static tree
3554 cp_parser_userdef_char_literal (cp_parser *parser)
3555 {
3556   cp_token *token = NULL;
3557   tree literal, suffix_id, value;
3558   tree name, decl;
3559   tree result;
3560   VEC(tree,gc) *vec;
3561
3562   token = cp_lexer_consume_token (parser->lexer);
3563   literal = token->u.value;
3564   suffix_id = USERDEF_LITERAL_SUFFIX_ID (literal);
3565   value = USERDEF_LITERAL_VALUE (literal);
3566   name = cp_literal_operator_id (IDENTIFIER_POINTER (suffix_id));
3567
3568   /* Build up a call to the user-defined operator  */
3569   /* Lookup the name we got back from the id-expression.  */
3570   vec = make_tree_vector ();
3571   VEC_safe_push (tree, gc, vec, value);
3572   decl = lookup_function_nonclass (name, vec, /*block_p=*/false);
3573   if (!decl || decl == error_mark_node)
3574     {
3575       error ("unable to find user-defined character literal operator %qD",
3576              name);
3577       release_tree_vector (vec);
3578       return error_mark_node;
3579     }
3580   result = finish_call_expr (decl, &vec, false, true, tf_warning_or_error);
3581   release_tree_vector (vec);
3582
3583   return result;
3584 }
3585
3586 /* A subroutine of cp_parser_userdef_numeric_literal to
3587    create a char... template parameter pack from a string node.  */
3588
3589 static tree
3590 make_char_string_pack (tree value)
3591 {
3592   tree charvec;
3593   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
3594   const char *str = TREE_STRING_POINTER (value);
3595   int i, len = TREE_STRING_LENGTH (value) - 1;
3596   tree argvec = make_tree_vec (1);
3597
3598   /* Fill in CHARVEC with all of the parameters.  */
3599   charvec = make_tree_vec (len);
3600   for (i = 0; i < len; ++i)
3601     TREE_VEC_ELT (charvec, i) = build_int_cst (char_type_node, str[i]);
3602
3603   /* Build the argument packs.  */
3604   SET_ARGUMENT_PACK_ARGS (argpack, charvec);
3605   TREE_TYPE (argpack) = char_type_node;
3606
3607   TREE_VEC_ELT (argvec, 0) = argpack;
3608
3609   return argvec;
3610 }
3611
3612 /* Parse a user-defined numeric constant.  returns a call to a user-defined
3613    literal operator.  */
3614
3615 static tree
3616 cp_parser_userdef_numeric_literal (cp_parser *parser)
3617 {
3618   cp_token *token = NULL;
3619   tree literal, suffix_id, value, num_string;
3620   tree name, decl;
3621   tree result = error_mark_node;
3622   VEC(tree,gc) *args;
3623
3624   token = cp_lexer_consume_token (parser->lexer);
3625   literal = token->u.value;
3626   suffix_id = USERDEF_LITERAL_SUFFIX_ID (literal);
3627   value = USERDEF_LITERAL_VALUE (literal);
3628   num_string = USERDEF_LITERAL_NUM_STRING (literal);
3629   name = cp_literal_operator_id (IDENTIFIER_POINTER (suffix_id));
3630
3631   /* Build up a call to the user-defined operator  */
3632   /* Lookup the name we got back from the id-expression.  */
3633   /* Try to find the literal operator by finishing the call expression
3634      with the numeric argument.  */
3635   args = make_tree_vector ();
3636   VEC_safe_push (tree, gc, args, value);
3637   decl = lookup_function_nonclass (name, args, /*block_p=*/false);
3638   if (decl && decl != error_mark_node)
3639     {
3640       result = finish_call_expr (decl, &args, false, true, tf_none);
3641       if (result != error_mark_node)
3642         {
3643           release_tree_vector (args);
3644           return result;
3645         }
3646     }
3647   release_tree_vector (args);
3648
3649   /* If the numeric argument didn't work, look for a raw literal
3650      operator taking a const char* argument consisting of the number
3651      in string format.  */
3652   args = make_tree_vector ();
3653   VEC_safe_push (tree, gc, args, num_string);
3654   decl = lookup_function_nonclass (name, args, /*block_p=*/false);
3655   if (decl && decl != error_mark_node)
3656     {
3657       result = finish_call_expr (decl, &args, false, true, tf_none);
3658       if (result != error_mark_node)
3659         {
3660           release_tree_vector (args);
3661           return result;
3662         }
3663     }
3664   release_tree_vector (args);
3665
3666   /* If the raw literal didn't work, look for a non-type template
3667      function with parameter pack char....  Call the function with
3668      template parameter characters representing the number.  */
3669   args = make_tree_vector ();
3670   decl = lookup_function_nonclass (name, args, /*block_p=*/false);
3671   if (decl && decl != error_mark_node)
3672     {
3673       tree tmpl_args = make_char_string_pack (num_string);
3674       decl = lookup_template_function (decl, tmpl_args);
3675       result = finish_call_expr (decl, &args, false, true, tf_none);
3676       if (result != error_mark_node)
3677         {
3678           release_tree_vector (args);
3679           return result;
3680         }
3681     }
3682   release_tree_vector (args);
3683
3684   if (result == error_mark_node)
3685     error ("unable to find user-defined numeric literal operator %qD", name);
3686
3687   return result;
3688 }
3689
3690 /* Parse a user-defined string constant.  Returns a call to a user-defined
3691    literal operator taking a character pointer and the length of the string
3692    as arguments.  */
3693
3694 static tree
3695 cp_parser_userdef_string_literal (cp_token *token)
3696 {
3697   tree literal, suffix_id, value;
3698   tree name, decl;
3699   tree result;
3700   VEC(tree,gc) *vec;
3701   int len;
3702
3703   literal = token->u.value;
3704   suffix_id = USERDEF_LITERAL_SUFFIX_ID (literal);
3705   name = cp_literal_operator_id (IDENTIFIER_POINTER (suffix_id));
3706   value = USERDEF_LITERAL_VALUE (literal);
3707   len = TREE_STRING_LENGTH (value)
3708         / TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (value)))) - 1;
3709   /* Build up a call to the user-defined operator  */
3710   /* Lookup the name we got back from the id-expression.  */
3711   vec = make_tree_vector ();
3712   VEC_safe_push (tree, gc, vec, value);
3713   VEC_safe_push (tree, gc, vec, build_int_cst (size_type_node, len));
3714   decl = lookup_function_nonclass (name, vec, /*block_p=*/false);
3715   if (!decl || decl == error_mark_node)
3716     {
3717       error ("unable to find user-defined string literal operator %qD", name);
3718       release_tree_vector (vec);
3719       return error_mark_node;
3720     }
3721   result = finish_call_expr (decl, &vec, false, true, tf_none);
3722   if (result == error_mark_node)
3723     error ("unable to find valid user-defined string literal operator %qD."
3724            "  Possible missing length argument in string literal operator.",
3725            name);
3726   release_tree_vector (vec);
3727
3728   return result;
3729 }
3730
3731
3732 /* Basic concepts [gram.basic]  */
3733
3734 /* Parse a translation-unit.
3735
3736    translation-unit:
3737      declaration-seq [opt]
3738
3739    Returns TRUE if all went well.  */
3740
3741 static bool
3742 cp_parser_translation_unit (cp_parser* parser)
3743 {
3744   /* The address of the first non-permanent object on the declarator
3745      obstack.  */
3746   static void *declarator_obstack_base;
3747
3748   bool success;
3749
3750   /* Create the declarator obstack, if necessary.  */
3751   if (!cp_error_declarator)
3752     {
3753       gcc_obstack_init (&declarator_obstack);
3754       /* Create the error declarator.  */
3755       cp_error_declarator = make_declarator (cdk_error);
3756       /* Create the empty parameter list.  */
3757       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
3758       /* Remember where the base of the declarator obstack lies.  */
3759       declarator_obstack_base = obstack_next_free (&declarator_obstack);
3760     }
3761
3762   cp_parser_declaration_seq_opt (parser);
3763
3764   /* If there are no tokens left then all went well.  */
3765   if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
3766     {
3767       /* Get rid of the token array; we don't need it any more.  */
3768       cp_lexer_destroy (parser->lexer);
3769       parser->lexer = NULL;
3770
3771       /* This file might have been a context that's implicitly extern
3772          "C".  If so, pop the lang context.  (Only relevant for PCH.) */
3773       if (parser->implicit_extern_c)
3774         {
3775           pop_lang_context ();
3776           parser->implicit_extern_c = false;
3777         }
3778
3779       /* Finish up.  */
3780       finish_translation_unit ();
3781
3782       success = true;
3783     }
3784   else
3785     {
3786       cp_parser_error (parser, "expected declaration");
3787       success = false;
3788     }
3789
3790   /* Make sure the declarator obstack was fully cleaned up.  */
3791   gcc_assert (obstack_next_free (&declarator_obstack)
3792               == declarator_obstack_base);
3793
3794   /* All went well.  */
3795   return success;
3796 }
3797
3798 /* Expressions [gram.expr] */
3799
3800 /* Parse a primary-expression.
3801
3802    primary-expression:
3803      literal
3804      this
3805      ( expression )
3806      id-expression
3807
3808    GNU Extensions:
3809
3810    primary-expression:
3811      ( compound-statement )
3812      __builtin_va_arg ( assignment-expression , type-id )
3813      __builtin_offsetof ( type-id , offsetof-expression )
3814
3815    C++ Extensions:
3816      __has_nothrow_assign ( type-id )   
3817      __has_nothrow_constructor ( type-id )
3818      __has_nothrow_copy ( type-id )
3819      __has_trivial_assign ( type-id )   
3820      __has_trivial_constructor ( type-id )
3821      __has_trivial_copy ( type-id )
3822      __has_trivial_destructor ( type-id )
3823      __has_virtual_destructor ( type-id )     
3824      __is_abstract ( type-id )
3825      __is_base_of ( type-id , type-id )
3826      __is_class ( type-id )
3827      __is_convertible_to ( type-id , type-id )     
3828      __is_empty ( type-id )
3829      __is_enum ( type-id )
3830      __is_literal_type ( type-id )
3831      __is_pod ( type-id )
3832      __is_polymorphic ( type-id )
3833      __is_std_layout ( type-id )
3834      __is_trivial ( type-id )
3835      __is_union ( type-id )
3836
3837    Objective-C++ Extension:
3838
3839    primary-expression:
3840      objc-expression
3841
3842    literal:
3843      __null
3844
3845    ADDRESS_P is true iff this expression was immediately preceded by
3846    "&" and therefore might denote a pointer-to-member.  CAST_P is true
3847    iff this expression is the target of a cast.  TEMPLATE_ARG_P is
3848    true iff this expression is a template argument.
3849
3850    Returns a representation of the expression.  Upon return, *IDK
3851    indicates what kind of id-expression (if any) was present.  */
3852
3853 static tree
3854 cp_parser_primary_expression (cp_parser *parser,
3855                               bool address_p,
3856                               bool cast_p,
3857                               bool template_arg_p,
3858                               cp_id_kind *idk)
3859 {
3860   cp_token *token = NULL;
3861
3862   /* Assume the primary expression is not an id-expression.  */
3863   *idk = CP_ID_KIND_NONE;
3864
3865   /* Peek at the next token.  */
3866   token = cp_lexer_peek_token (parser->lexer);
3867   switch (token->type)
3868     {
3869       /* literal:
3870            integer-literal
3871            character-literal
3872            floating-literal
3873            string-literal
3874            boolean-literal
3875            pointer-literal
3876            user-defined-literal  */
3877     case CPP_CHAR:
3878     case CPP_CHAR16:
3879     case CPP_CHAR32:
3880     case CPP_WCHAR:
3881     case CPP_NUMBER:
3882       if (TREE_CODE (token->u.value) == USERDEF_LITERAL)
3883         return cp_parser_userdef_numeric_literal (parser);
3884       token = cp_lexer_consume_token (parser->lexer);
3885       if (TREE_CODE (token->u.value) == FIXED_CST)
3886         {
3887           error_at (token->location,
3888                     "fixed-point types not supported in C++");
3889           return error_mark_node;
3890         }
3891       /* Floating-point literals are only allowed in an integral
3892          constant expression if they are cast to an integral or
3893          enumeration type.  */
3894       if (TREE_CODE (token->u.value) == REAL_CST
3895           && parser->integral_constant_expression_p
3896           && pedantic)
3897         {
3898           /* CAST_P will be set even in invalid code like "int(2.7 +
3899              ...)".   Therefore, we have to check that the next token
3900              is sure to end the cast.  */
3901           if (cast_p)
3902             {
3903               cp_token *next_token;
3904
3905               next_token = cp_lexer_peek_token (parser->lexer);
3906               if (/* The comma at the end of an
3907                      enumerator-definition.  */
3908                   next_token->type != CPP_COMMA
3909                   /* The curly brace at the end of an enum-specifier.  */
3910                   && next_token->type != CPP_CLOSE_BRACE
3911                   /* The end of a statement.  */
3912                   && next_token->type != CPP_SEMICOLON
3913                   /* The end of the cast-expression.  */
3914                   && next_token->type != CPP_CLOSE_PAREN
3915                   /* The end of an array bound.  */
3916                   && next_token->type != CPP_CLOSE_SQUARE
3917                   /* The closing ">" in a template-argument-list.  */
3918                   && (next_token->type != CPP_GREATER
3919                       || parser->greater_than_is_operator_p)
3920                   /* C++0x only: A ">>" treated like two ">" tokens,
3921                      in a template-argument-list.  */
3922                   && (next_token->type != CPP_RSHIFT
3923                       || (cxx_dialect == cxx98)
3924                       || parser->greater_than_is_operator_p))
3925                 cast_p = false;
3926             }
3927
3928           /* If we are within a cast, then the constraint that the
3929              cast is to an integral or enumeration type will be
3930              checked at that point.  If we are not within a cast, then
3931              this code is invalid.  */
3932           if (!cast_p)
3933             cp_parser_non_integral_constant_expression (parser, NIC_FLOAT);
3934         }
3935       return token->u.value;
3936
3937     case CPP_CHAR_USERDEF:
3938     case CPP_CHAR16_USERDEF:
3939     case CPP_CHAR32_USERDEF:
3940     case CPP_WCHAR_USERDEF:
3941       return cp_parser_userdef_char_literal (parser);
3942
3943     case CPP_STRING:
3944     case CPP_STRING16:
3945     case CPP_STRING32:
3946     case CPP_WSTRING:
3947     case CPP_UTF8STRING:
3948     case CPP_STRING_USERDEF:
3949     case CPP_STRING16_USERDEF:
3950     case CPP_STRING32_USERDEF:
3951     case CPP_WSTRING_USERDEF:
3952     case CPP_UTF8STRING_USERDEF:
3953       /* ??? Should wide strings be allowed when parser->translate_strings_p
3954          is false (i.e. in attributes)?  If not, we can kill the third
3955          argument to cp_parser_string_literal.  */
3956       return cp_parser_string_literal (parser,
3957                                        parser->translate_strings_p,
3958                                        true);
3959
3960     case CPP_OPEN_PAREN:
3961       {
3962         tree expr;
3963         bool saved_greater_than_is_operator_p;
3964
3965         /* Consume the `('.  */
3966         cp_lexer_consume_token (parser->lexer);
3967         /* Within a parenthesized expression, a `>' token is always
3968            the greater-than operator.  */
3969         saved_greater_than_is_operator_p
3970           = parser->greater_than_is_operator_p;
3971         parser->greater_than_is_operator_p = true;
3972         /* If we see `( { ' then we are looking at the beginning of
3973            a GNU statement-expression.  */
3974         if (cp_parser_allow_gnu_extensions_p (parser)
3975             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
3976           {
3977             /* Statement-expressions are not allowed by the standard.  */
3978             pedwarn (token->location, OPT_pedantic, 
3979                      "ISO C++ forbids braced-groups within expressions");
3980
3981             /* And they're not allowed outside of a function-body; you
3982                cannot, for example, write:
3983
3984                  int i = ({ int j = 3; j + 1; });
3985
3986                at class or namespace scope.  */
3987             if (!parser->in_function_body
3988                 || parser->in_template_argument_list_p)
3989               {
3990                 error_at (token->location,
3991                           "statement-expressions are not allowed outside "
3992                           "functions nor in template-argument lists");
3993                 cp_parser_skip_to_end_of_block_or_statement (parser);
3994                 expr = error_mark_node;
3995               }
3996             else
3997               {
3998                 /* Start the statement-expression.  */
3999                 expr = begin_stmt_expr ();
4000                 /* Parse the compound-statement.  */
4001                 cp_parser_compound_statement (parser, expr, false, false);
4002                 /* Finish up.  */
4003                 expr = finish_stmt_expr (expr, false);
4004               }
4005           }
4006         else
4007           {
4008             /* Parse the parenthesized expression.  */
4009             expr = cp_parser_expression (parser, cast_p, idk);
4010             /* Let the front end know that this expression was
4011                enclosed in parentheses. This matters in case, for
4012                example, the expression is of the form `A::B', since
4013                `&A::B' might be a pointer-to-member, but `&(A::B)' is
4014                not.  */
4015             finish_parenthesized_expr (expr);
4016             /* DR 705: Wrapping an unqualified name in parentheses
4017                suppresses arg-dependent lookup.  We want to pass back
4018                CP_ID_KIND_QUALIFIED for suppressing vtable lookup
4019                (c++/37862), but none of the others.  */
4020             if (*idk != CP_ID_KIND_QUALIFIED)
4021               *idk = CP_ID_KIND_NONE;
4022           }
4023         /* The `>' token might be the end of a template-id or
4024            template-parameter-list now.  */
4025         parser->greater_than_is_operator_p
4026           = saved_greater_than_is_operator_p;
4027         /* Consume the `)'.  */
4028         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
4029           cp_parser_skip_to_end_of_statement (parser);
4030
4031         return expr;
4032       }
4033
4034     case CPP_OPEN_SQUARE:
4035       if (c_dialect_objc ())
4036         /* We have an Objective-C++ message. */
4037         return cp_parser_objc_expression (parser);
4038       {
4039         tree lam = cp_parser_lambda_expression (parser);
4040         /* Don't warn about a failed tentative parse.  */
4041         if (cp_parser_error_occurred (parser))
4042           return error_mark_node;
4043         maybe_warn_cpp0x (CPP0X_LAMBDA_EXPR);
4044         return lam;
4045       }
4046
4047     case CPP_OBJC_STRING:
4048       if (c_dialect_objc ())
4049         /* We have an Objective-C++ string literal. */
4050         return cp_parser_objc_expression (parser);
4051       cp_parser_error (parser, "expected primary-expression");
4052       return error_mark_node;
4053
4054     case CPP_KEYWORD:
4055       switch (token->keyword)
4056         {
4057           /* These two are the boolean literals.  */
4058         case RID_TRUE:
4059           cp_lexer_consume_token (parser->lexer);
4060           return boolean_true_node;
4061         case RID_FALSE:
4062           cp_lexer_consume_token (parser->lexer);
4063           return boolean_false_node;
4064
4065           /* The `__null' literal.  */
4066         case RID_NULL:
4067           cp_lexer_consume_token (parser->lexer);
4068           return null_node;
4069
4070           /* The `nullptr' literal.  */
4071         case RID_NULLPTR:
4072           cp_lexer_consume_token (parser->lexer);
4073           return nullptr_node;
4074
4075           /* Recognize the `this' keyword.  */
4076         case RID_THIS:
4077           cp_lexer_consume_token (parser->lexer);
4078           if (parser->local_variables_forbidden_p)
4079             {
4080               error_at (token->location,
4081                         "%<this%> may not be used in this context");
4082               return error_mark_node;
4083             }
4084           /* Pointers cannot appear in constant-expressions.  */
4085           if (cp_parser_non_integral_constant_expression (parser, NIC_THIS))
4086             return error_mark_node;
4087           return finish_this_expr ();
4088
4089           /* The `operator' keyword can be the beginning of an
4090              id-expression.  */
4091         case RID_OPERATOR:
4092           goto id_expression;
4093
4094         case RID_FUNCTION_NAME:
4095         case RID_PRETTY_FUNCTION_NAME:
4096         case RID_C99_FUNCTION_NAME:
4097           {
4098             non_integral_constant name;
4099
4100             /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
4101                __func__ are the names of variables -- but they are
4102                treated specially.  Therefore, they are handled here,
4103                rather than relying on the generic id-expression logic
4104                below.  Grammatically, these names are id-expressions.
4105
4106                Consume the token.  */
4107             token = cp_lexer_consume_token (parser->lexer);
4108
4109             switch (token->keyword)
4110               {
4111               case RID_FUNCTION_NAME:
4112                 name = NIC_FUNC_NAME;
4113                 break;
4114               case RID_PRETTY_FUNCTION_NAME:
4115                 name = NIC_PRETTY_FUNC;
4116                 break;
4117               case RID_C99_FUNCTION_NAME:
4118                 name = NIC_C99_FUNC;
4119                 break;
4120               default:
4121                 gcc_unreachable ();
4122               }
4123
4124             if (cp_parser_non_integral_constant_expression (parser, name))
4125               return error_mark_node;
4126
4127             /* Look up the name.  */
4128             return finish_fname (token->u.value);
4129           }
4130
4131         case RID_VA_ARG:
4132           {
4133             tree expression;
4134             tree type;
4135
4136             /* The `__builtin_va_arg' construct is used to handle
4137                `va_arg'.  Consume the `__builtin_va_arg' token.  */
4138             cp_lexer_consume_token (parser->lexer);
4139             /* Look for the opening `('.  */
4140             cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
4141             /* Now, parse the assignment-expression.  */
4142             expression = cp_parser_assignment_expression (parser,
4143                                                           /*cast_p=*/false, NULL);
4144             /* Look for the `,'.  */
4145             cp_parser_require (parser, CPP_COMMA, RT_COMMA);
4146             /* Parse the type-id.  */
4147             type = cp_parser_type_id (parser);
4148             /* Look for the closing `)'.  */
4149             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
4150             /* Using `va_arg' in a constant-expression is not
4151                allowed.  */
4152             if (cp_parser_non_integral_constant_expression (parser,
4153                                                             NIC_VA_ARG))
4154               return error_mark_node;
4155             return build_x_va_arg (expression, type);
4156           }
4157
4158         case RID_OFFSETOF:
4159           return cp_parser_builtin_offsetof (parser);
4160
4161         case RID_HAS_NOTHROW_ASSIGN:
4162         case RID_HAS_NOTHROW_CONSTRUCTOR:
4163         case RID_HAS_NOTHROW_COPY:        
4164         case RID_HAS_TRIVIAL_ASSIGN:
4165         case RID_HAS_TRIVIAL_CONSTRUCTOR:
4166         case RID_HAS_TRIVIAL_COPY:        
4167         case RID_HAS_TRIVIAL_DESTRUCTOR:
4168         case RID_HAS_VIRTUAL_DESTRUCTOR:
4169         case RID_IS_ABSTRACT:
4170         case RID_IS_BASE_OF:
4171         case RID_IS_CLASS:
4172         case RID_IS_CONVERTIBLE_TO:
4173         case RID_IS_EMPTY:
4174         case RID_IS_ENUM:
4175         case RID_IS_LITERAL_TYPE:
4176         case RID_IS_POD:
4177         case RID_IS_POLYMORPHIC:
4178         case RID_IS_STD_LAYOUT:
4179         case RID_IS_TRIVIAL:
4180         case RID_IS_UNION:
4181           return cp_parser_trait_expr (parser, token->keyword);
4182
4183         /* Objective-C++ expressions.  */
4184         case RID_AT_ENCODE:
4185         case RID_AT_PROTOCOL:
4186         case RID_AT_SELECTOR:
4187           return cp_parser_objc_expression (parser);
4188
4189         case RID_TEMPLATE:
4190           if (parser->in_function_body
4191               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4192                   == CPP_LESS))
4193             {
4194               error_at (token->location,
4195                         "a template declaration cannot appear at block scope");
4196               cp_parser_skip_to_end_of_block_or_statement (parser);
4197               return error_mark_node;
4198             }
4199         default:
4200           cp_parser_error (parser, "expected primary-expression");
4201           return error_mark_node;
4202         }
4203
4204       /* An id-expression can start with either an identifier, a
4205          `::' as the beginning of a qualified-id, or the "operator"
4206          keyword.  */
4207     case CPP_NAME:
4208     case CPP_SCOPE:
4209     case CPP_TEMPLATE_ID:
4210     case CPP_NESTED_NAME_SPECIFIER:
4211       {
4212         tree id_expression;
4213         tree decl;
4214         const char *error_msg;
4215         bool template_p;
4216         bool done;
4217         cp_token *id_expr_token;
4218
4219       id_expression:
4220         /* Parse the id-expression.  */
4221         id_expression
4222           = cp_parser_id_expression (parser,
4223                                      /*template_keyword_p=*/false,
4224                                      /*check_dependency_p=*/true,
4225                                      &template_p,
4226                                      /*declarator_p=*/false,
4227                                      /*optional_p=*/false);
4228         if (id_expression == error_mark_node)
4229           return error_mark_node;
4230         id_expr_token = token;
4231         token = cp_lexer_peek_token (parser->lexer);
4232         done = (token->type != CPP_OPEN_SQUARE
4233                 && token->type != CPP_OPEN_PAREN
4234                 && token->type != CPP_DOT
4235                 && token->type != CPP_DEREF
4236                 && token->type != CPP_PLUS_PLUS
4237                 && token->type != CPP_MINUS_MINUS);
4238         /* If we have a template-id, then no further lookup is
4239            required.  If the template-id was for a template-class, we
4240            will sometimes have a TYPE_DECL at this point.  */
4241         if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
4242                  || TREE_CODE (id_expression) == TYPE_DECL)
4243           decl = id_expression;
4244         /* Look up the name.  */
4245         else
4246           {
4247             tree ambiguous_decls;
4248
4249             /* If we already know that this lookup is ambiguous, then
4250                we've already issued an error message; there's no reason
4251                to check again.  */
4252             if (id_expr_token->type == CPP_NAME
4253                 && id_expr_token->ambiguous_p)
4254               {
4255                 cp_parser_simulate_error (parser);
4256                 return error_mark_node;
4257               }
4258
4259             decl = cp_parser_lookup_name (parser, id_expression,
4260                                           none_type,
4261                                           template_p,
4262                                           /*is_namespace=*/false,
4263                                           /*check_dependency=*/true,
4264                                           &ambiguous_decls,
4265                                           id_expr_token->location);
4266             /* If the lookup was ambiguous, an error will already have
4267                been issued.  */
4268             if (ambiguous_decls)
4269               return error_mark_node;
4270
4271             /* In Objective-C++, we may have an Objective-C 2.0
4272                dot-syntax for classes here.  */
4273             if (c_dialect_objc ()
4274                 && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT
4275                 && TREE_CODE (decl) == TYPE_DECL
4276                 && objc_is_class_name (decl))
4277               {
4278                 tree component;
4279                 cp_lexer_consume_token (parser->lexer);
4280                 component = cp_parser_identifier (parser);
4281                 if (component == error_mark_node)
4282                   return error_mark_node;
4283
4284                 return objc_build_class_component_ref (id_expression, component);
4285               }
4286
4287             /* In Objective-C++, an instance variable (ivar) may be preferred
4288                to whatever cp_parser_lookup_name() found.  */
4289             decl = objc_lookup_ivar (decl, id_expression);
4290
4291             /* If name lookup gives us a SCOPE_REF, then the
4292                qualifying scope was dependent.  */
4293             if (TREE_CODE (decl) == SCOPE_REF)
4294               {
4295                 /* At this point, we do not know if DECL is a valid
4296                    integral constant expression.  We assume that it is
4297                    in fact such an expression, so that code like:
4298
4299                       template <int N> struct A {
4300                         int a[B<N>::i];
4301                       };
4302                      
4303                    is accepted.  At template-instantiation time, we
4304                    will check that B<N>::i is actually a constant.  */
4305                 return decl;
4306               }
4307             /* Check to see if DECL is a local variable in a context
4308                where that is forbidden.  */
4309             if (parser->local_variables_forbidden_p
4310                 && local_variable_p (decl))
4311               {
4312                 /* It might be that we only found DECL because we are
4313                    trying to be generous with pre-ISO scoping rules.
4314                    For example, consider:
4315
4316                      int i;
4317                      void g() {
4318                        for (int i = 0; i < 10; ++i) {}
4319                        extern void f(int j = i);
4320                      }
4321
4322                    Here, name look up will originally find the out
4323                    of scope `i'.  We need to issue a warning message,
4324                    but then use the global `i'.  */
4325                 decl = check_for_out_of_scope_variable (decl);
4326                 if (local_variable_p (decl))
4327                   {
4328                     error_at (id_expr_token->location,
4329                               "local variable %qD may not appear in this context",
4330                               decl);
4331                     return error_mark_node;
4332                   }
4333               }
4334           }
4335
4336         decl = (finish_id_expression
4337                 (id_expression, decl, parser->scope,
4338                  idk,
4339                  parser->integral_constant_expression_p,
4340                  parser->allow_non_integral_constant_expression_p,
4341                  &parser->non_integral_constant_expression_p,
4342                  template_p, done, address_p,
4343                  template_arg_p,
4344                  &error_msg,
4345                  id_expr_token->location));
4346         if (error_msg)
4347           cp_parser_error (parser, error_msg);
4348         return decl;
4349       }
4350
4351       /* Anything else is an error.  */
4352     default:
4353       cp_parser_error (parser, "expected primary-expression");
4354       return error_mark_node;
4355     }
4356 }
4357
4358 /* Parse an id-expression.
4359
4360    id-expression:
4361      unqualified-id
4362      qualified-id
4363
4364    qualified-id:
4365      :: [opt] nested-name-specifier template [opt] unqualified-id
4366      :: identifier
4367      :: operator-function-id
4368      :: template-id
4369
4370    Return a representation of the unqualified portion of the
4371    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
4372    a `::' or nested-name-specifier.
4373
4374    Often, if the id-expression was a qualified-id, the caller will
4375    want to make a SCOPE_REF to represent the qualified-id.  This
4376    function does not do this in order to avoid wastefully creating
4377    SCOPE_REFs when they are not required.
4378
4379    If TEMPLATE_KEYWORD_P is true, then we have just seen the
4380    `template' keyword.
4381
4382    If CHECK_DEPENDENCY_P is false, then names are looked up inside
4383    uninstantiated templates.
4384
4385    If *TEMPLATE_P is non-NULL, it is set to true iff the
4386    `template' keyword is used to explicitly indicate that the entity
4387    named is a template.
4388
4389    If DECLARATOR_P is true, the id-expression is appearing as part of
4390    a declarator, rather than as part of an expression.  */
4391
4392 static tree
4393 cp_parser_id_expression (cp_parser *parser,
4394                          bool template_keyword_p,
4395                          bool check_dependency_p,
4396                          bool *template_p,
4397                          bool declarator_p,
4398                          bool optional_p)
4399 {
4400   bool global_scope_p;
4401   bool nested_name_specifier_p;
4402
4403   /* Assume the `template' keyword was not used.  */
4404   if (template_p)
4405     *template_p = template_keyword_p;
4406
4407   /* Look for the optional `::' operator.  */
4408   global_scope_p
4409     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
4410        != NULL_TREE);
4411   /* Look for the optional nested-name-specifier.  */
4412   nested_name_specifier_p
4413     = (cp_parser_nested_name_specifier_opt (parser,
4414                                             /*typename_keyword_p=*/false,
4415                                             check_dependency_p,
4416                                             /*type_p=*/false,
4417                                             declarator_p)
4418        != NULL_TREE);
4419   /* If there is a nested-name-specifier, then we are looking at
4420      the first qualified-id production.  */
4421   if (nested_name_specifier_p)
4422     {
4423       tree saved_scope;
4424       tree saved_object_scope;
4425       tree saved_qualifying_scope;
4426       tree unqualified_id;
4427       bool is_template;
4428
4429       /* See if the next token is the `template' keyword.  */
4430       if (!template_p)
4431         template_p = &is_template;
4432       *template_p = cp_parser_optional_template_keyword (parser);
4433       /* Name lookup we do during the processing of the
4434          unqualified-id might obliterate SCOPE.  */
4435       saved_scope = parser->scope;
4436       saved_object_scope = parser->object_scope;
4437       saved_qualifying_scope = parser->qualifying_scope;
4438       /* Process the final unqualified-id.  */
4439       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
4440                                                  check_dependency_p,
4441                                                  declarator_p,
4442                                                  /*optional_p=*/false);
4443       /* Restore the SAVED_SCOPE for our caller.  */
4444       parser->scope = saved_scope;
4445       parser->object_scope = saved_object_scope;
4446       parser->qualifying_scope = saved_qualifying_scope;
4447
4448       return unqualified_id;
4449     }
4450   /* Otherwise, if we are in global scope, then we are looking at one
4451      of the other qualified-id productions.  */
4452   else if (global_scope_p)
4453     {
4454       cp_token *token;
4455       tree id;
4456
4457       /* Peek at the next token.  */
4458       token = cp_lexer_peek_token (parser->lexer);
4459
4460       /* If it's an identifier, and the next token is not a "<", then
4461          we can avoid the template-id case.  This is an optimization
4462          for this common case.  */
4463       if (token->type == CPP_NAME
4464           && !cp_parser_nth_token_starts_template_argument_list_p
4465                (parser, 2))
4466         return cp_parser_identifier (parser);
4467
4468       cp_parser_parse_tentatively (parser);
4469       /* Try a template-id.  */
4470       id = cp_parser_template_id (parser,
4471                                   /*template_keyword_p=*/false,
4472                                   /*check_dependency_p=*/true,
4473                                   declarator_p);
4474       /* If that worked, we're done.  */
4475       if (cp_parser_parse_definitely (parser))
4476         return id;
4477
4478       /* Peek at the next token.  (Changes in the token buffer may
4479          have invalidated the pointer obtained above.)  */
4480       token = cp_lexer_peek_token (parser->lexer);
4481
4482       switch (token->type)
4483         {
4484         case CPP_NAME:
4485           return cp_parser_identifier (parser);
4486
4487         case CPP_KEYWORD:
4488           if (token->keyword == RID_OPERATOR)
4489             return cp_parser_operator_function_id (parser);
4490           /* Fall through.  */
4491
4492         default:
4493           cp_parser_error (parser, "expected id-expression");
4494           return error_mark_node;
4495         }
4496     }
4497   else
4498     return cp_parser_unqualified_id (parser, template_keyword_p,
4499                                      /*check_dependency_p=*/true,
4500                                      declarator_p,
4501                                      optional_p);
4502 }
4503
4504 /* Parse an unqualified-id.
4505
4506    unqualified-id:
4507      identifier
4508      operator-function-id
4509      conversion-function-id
4510      ~ class-name
4511      template-id
4512
4513    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
4514    keyword, in a construct like `A::template ...'.
4515
4516    Returns a representation of unqualified-id.  For the `identifier'
4517    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
4518    production a BIT_NOT_EXPR is returned; the operand of the
4519    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
4520    other productions, see the documentation accompanying the
4521    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
4522    names are looked up in uninstantiated templates.  If DECLARATOR_P
4523    is true, the unqualified-id is appearing as part of a declarator,
4524    rather than as part of an expression.  */
4525
4526 static tree
4527 cp_parser_unqualified_id (cp_parser* parser,
4528                           bool template_keyword_p,
4529                           bool check_dependency_p,
4530                           bool declarator_p,
4531                           bool optional_p)
4532 {
4533   cp_token *token;
4534
4535   /* Peek at the next token.  */
4536   token = cp_lexer_peek_token (parser->lexer);
4537
4538   switch (token->type)
4539     {
4540     case CPP_NAME:
4541       {
4542         tree id;
4543
4544         /* We don't know yet whether or not this will be a
4545            template-id.  */
4546         cp_parser_parse_tentatively (parser);
4547         /* Try a template-id.  */
4548         id = cp_parser_template_id (parser, template_keyword_p,
4549                                     check_dependency_p,
4550                                     declarator_p);
4551         /* If it worked, we're done.  */
4552         if (cp_parser_parse_definitely (parser))
4553           return id;
4554         /* Otherwise, it's an ordinary identifier.  */
4555         return cp_parser_identifier (parser);
4556       }
4557
4558     case CPP_TEMPLATE_ID:
4559       return cp_parser_template_id (parser, template_keyword_p,
4560                                     check_dependency_p,
4561                                     declarator_p);
4562
4563     case CPP_COMPL:
4564       {
4565         tree type_decl;
4566         tree qualifying_scope;
4567         tree object_scope;
4568         tree scope;
4569         bool done;
4570
4571         /* Consume the `~' token.  */
4572         cp_lexer_consume_token (parser->lexer);
4573         /* Parse the class-name.  The standard, as written, seems to
4574            say that:
4575
4576              template <typename T> struct S { ~S (); };
4577              template <typename T> S<T>::~S() {}
4578
4579            is invalid, since `~' must be followed by a class-name, but
4580            `S<T>' is dependent, and so not known to be a class.
4581            That's not right; we need to look in uninstantiated
4582            templates.  A further complication arises from:
4583
4584              template <typename T> void f(T t) {
4585                t.T::~T();
4586              }
4587
4588            Here, it is not possible to look up `T' in the scope of `T'
4589            itself.  We must look in both the current scope, and the
4590            scope of the containing complete expression.
4591
4592            Yet another issue is:
4593
4594              struct S {
4595                int S;
4596                ~S();
4597              };
4598
4599              S::~S() {}
4600
4601            The standard does not seem to say that the `S' in `~S'
4602            should refer to the type `S' and not the data member
4603            `S::S'.  */
4604
4605         /* DR 244 says that we look up the name after the "~" in the
4606            same scope as we looked up the qualifying name.  That idea
4607            isn't fully worked out; it's more complicated than that.  */
4608         scope = parser->scope;
4609         object_scope = parser->object_scope;
4610         qualifying_scope = parser->qualifying_scope;
4611
4612         /* Check for invalid scopes.  */
4613         if (scope == error_mark_node)
4614           {
4615             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
4616               cp_lexer_consume_token (parser->lexer);
4617             return error_mark_node;
4618           }
4619         if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
4620           {
4621             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
4622               error_at (token->location,
4623                         "scope %qT before %<~%> is not a class-name",
4624                         scope);
4625             cp_parser_simulate_error (parser);
4626             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
4627               cp_lexer_consume_token (parser->lexer);
4628             return error_mark_node;
4629           }
4630         gcc_assert (!scope || TYPE_P (scope));
4631
4632         /* If the name is of the form "X::~X" it's OK even if X is a
4633            typedef.  */
4634         token = cp_lexer_peek_token (parser->lexer);
4635         if (scope
4636             && token->type == CPP_NAME
4637             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4638                 != CPP_LESS)
4639             && (token->u.value == TYPE_IDENTIFIER (scope)
4640                 || (CLASS_TYPE_P (scope)
4641                     && constructor_name_p (token->u.value, scope))))
4642           {
4643             cp_lexer_consume_token (parser->lexer);
4644             return build_nt (BIT_NOT_EXPR, scope);
4645           }
4646
4647         /* If there was an explicit qualification (S::~T), first look
4648            in the scope given by the qualification (i.e., S).
4649
4650            Note: in the calls to cp_parser_class_name below we pass
4651            typename_type so that lookup finds the injected-class-name
4652            rather than the constructor.  */
4653         done = false;
4654         type_decl = NULL_TREE;
4655         if (scope)
4656           {
4657             cp_parser_parse_tentatively (parser);
4658             type_decl = cp_parser_class_name (parser,
4659                                               /*typename_keyword_p=*/false,
4660                                               /*template_keyword_p=*/false,
4661                                               typename_type,
4662                                               /*check_dependency=*/false,
4663                                               /*class_head_p=*/false,
4664                                               declarator_p);
4665             if (cp_parser_parse_definitely (parser))
4666               done = true;
4667           }
4668         /* In "N::S::~S", look in "N" as well.  */
4669         if (!done && scope && qualifying_scope)
4670           {
4671             cp_parser_parse_tentatively (parser);
4672             parser->scope = qualifying_scope;
4673             parser->object_scope = NULL_TREE;
4674             parser->qualifying_scope = NULL_TREE;
4675             type_decl
4676               = cp_parser_class_name (parser,
4677                                       /*typename_keyword_p=*/false,
4678                                       /*template_keyword_p=*/false,
4679                                       typename_type,
4680                                       /*check_dependency=*/false,
4681                                       /*class_head_p=*/false,
4682                                       declarator_p);
4683             if (cp_parser_parse_definitely (parser))
4684               done = true;
4685           }
4686         /* In "p->S::~T", look in the scope given by "*p" as well.  */
4687         else if (!done && object_scope)
4688           {
4689             cp_parser_parse_tentatively (parser);
4690             parser->scope = object_scope;
4691             parser->object_scope = NULL_TREE;
4692             parser->qualifying_scope = NULL_TREE;
4693             type_decl
4694               = cp_parser_class_name (parser,
4695                                       /*typename_keyword_p=*/false,
4696                                       /*template_keyword_p=*/false,
4697                                       typename_type,
4698                                       /*check_dependency=*/false,
4699                                       /*class_head_p=*/false,
4700                                       declarator_p);
4701             if (cp_parser_parse_definitely (parser))
4702               done = true;
4703           }
4704         /* Look in the surrounding context.  */
4705         if (!done)
4706           {
4707             parser->scope = NULL_TREE;
4708             parser->object_scope = NULL_TREE;
4709             parser->qualifying_scope = NULL_TREE;
4710             if (processing_template_decl)
4711               cp_parser_parse_tentatively (parser);
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 (processing_template_decl
4721                 && ! cp_parser_parse_definitely (parser))
4722               {
4723                 /* We couldn't find a type with this name, so just accept
4724                    it and check for a match at instantiation time.  */
4725                 type_decl = cp_parser_identifier (parser);
4726                 if (type_decl != error_mark_node)
4727                   type_decl = build_nt (BIT_NOT_EXPR, type_decl);
4728                 return type_decl;
4729               }
4730           }
4731         /* If an error occurred, assume that the name of the
4732            destructor is the same as the name of the qualifying
4733            class.  That allows us to keep parsing after running
4734            into ill-formed destructor names.  */
4735         if (type_decl == error_mark_node && scope)
4736           return build_nt (BIT_NOT_EXPR, scope);
4737         else if (type_decl == error_mark_node)
4738           return error_mark_node;
4739
4740         /* Check that destructor name and scope match.  */
4741         if (declarator_p && scope && !check_dtor_name (scope, type_decl))
4742           {
4743             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
4744               error_at (token->location,
4745                         "declaration of %<~%T%> as member of %qT",
4746                         type_decl, scope);
4747             cp_parser_simulate_error (parser);
4748             return error_mark_node;
4749           }
4750
4751         /* [class.dtor]
4752
4753            A typedef-name that names a class shall not be used as the
4754            identifier in the declarator for a destructor declaration.  */
4755         if (declarator_p
4756             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
4757             && !DECL_SELF_REFERENCE_P (type_decl)
4758             && !cp_parser_uncommitted_to_tentative_parse_p (parser))
4759           error_at (token->location,
4760                     "typedef-name %qD used as destructor declarator",
4761                     type_decl);
4762
4763         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
4764       }
4765
4766     case CPP_KEYWORD:
4767       if (token->keyword == RID_OPERATOR)
4768         {
4769           tree id;
4770
4771           /* This could be a template-id, so we try that first.  */
4772           cp_parser_parse_tentatively (parser);
4773           /* Try a template-id.  */
4774           id = cp_parser_template_id (parser, template_keyword_p,
4775                                       /*check_dependency_p=*/true,
4776                                       declarator_p);
4777           /* If that worked, we're done.  */
4778           if (cp_parser_parse_definitely (parser))
4779             return id;
4780           /* We still don't know whether we're looking at an
4781              operator-function-id or a conversion-function-id.  */
4782           cp_parser_parse_tentatively (parser);
4783           /* Try an operator-function-id.  */
4784           id = cp_parser_operator_function_id (parser);
4785           /* If that didn't work, try a conversion-function-id.  */
4786           if (!cp_parser_parse_definitely (parser))
4787             id = cp_parser_conversion_function_id (parser);
4788           else if (UDLIT_OPER_P (id))
4789             {
4790               /* 17.6.3.3.5  */
4791               const char *name = UDLIT_OP_SUFFIX (id);
4792               if (name[0] != '_' && !in_system_header)
4793                 warning (0, "literal operator suffixes not preceded by %<_%>"
4794                             " are reserved for future standardization");
4795             }
4796
4797           return id;
4798         }
4799       /* Fall through.  */
4800
4801     default:
4802       if (optional_p)
4803         return NULL_TREE;
4804       cp_parser_error (parser, "expected unqualified-id");
4805       return error_mark_node;
4806     }
4807 }
4808
4809 /* Parse an (optional) nested-name-specifier.
4810
4811    nested-name-specifier: [C++98]
4812      class-or-namespace-name :: nested-name-specifier [opt]
4813      class-or-namespace-name :: template nested-name-specifier [opt]
4814
4815    nested-name-specifier: [C++0x]
4816      type-name ::
4817      namespace-name ::
4818      nested-name-specifier identifier ::
4819      nested-name-specifier template [opt] simple-template-id ::
4820
4821    PARSER->SCOPE should be set appropriately before this function is
4822    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
4823    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
4824    in name lookups.
4825
4826    Sets PARSER->SCOPE to the class (TYPE) or namespace
4827    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
4828    it unchanged if there is no nested-name-specifier.  Returns the new
4829    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
4830
4831    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
4832    part of a declaration and/or decl-specifier.  */
4833
4834 static tree
4835 cp_parser_nested_name_specifier_opt (cp_parser *parser,
4836                                      bool typename_keyword_p,
4837                                      bool check_dependency_p,
4838                                      bool type_p,
4839                                      bool is_declaration)
4840 {
4841   bool success = false;
4842   cp_token_position start = 0;
4843   cp_token *token;
4844
4845   /* Remember where the nested-name-specifier starts.  */
4846   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4847     {
4848       start = cp_lexer_token_position (parser->lexer, false);
4849       push_deferring_access_checks (dk_deferred);
4850     }
4851
4852   while (true)
4853     {
4854       tree new_scope;
4855       tree old_scope;
4856       tree saved_qualifying_scope;
4857       bool template_keyword_p;
4858
4859       /* Spot cases that cannot be the beginning of a
4860          nested-name-specifier.  */
4861       token = cp_lexer_peek_token (parser->lexer);
4862
4863       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
4864          the already parsed nested-name-specifier.  */
4865       if (token->type == CPP_NESTED_NAME_SPECIFIER)
4866         {
4867           /* Grab the nested-name-specifier and continue the loop.  */
4868           cp_parser_pre_parsed_nested_name_specifier (parser);
4869           /* If we originally encountered this nested-name-specifier
4870              with IS_DECLARATION set to false, we will not have
4871              resolved TYPENAME_TYPEs, so we must do so here.  */
4872           if (is_declaration
4873               && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4874             {
4875               new_scope = resolve_typename_type (parser->scope,
4876                                                  /*only_current_p=*/false);
4877               if (TREE_CODE (new_scope) != TYPENAME_TYPE)
4878                 parser->scope = new_scope;
4879             }
4880           success = true;
4881           continue;
4882         }
4883
4884       /* Spot cases that cannot be the beginning of a
4885          nested-name-specifier.  On the second and subsequent times
4886          through the loop, we look for the `template' keyword.  */
4887       if (success && token->keyword == RID_TEMPLATE)
4888         ;
4889       /* A template-id can start a nested-name-specifier.  */
4890       else if (token->type == CPP_TEMPLATE_ID)
4891         ;
4892       /* DR 743: decltype can be used in a nested-name-specifier.  */
4893       else if (token_is_decltype (token))
4894         ;
4895       else
4896         {
4897           /* If the next token is not an identifier, then it is
4898              definitely not a type-name or namespace-name.  */
4899           if (token->type != CPP_NAME)
4900             break;
4901           /* If the following token is neither a `<' (to begin a
4902              template-id), nor a `::', then we are not looking at a
4903              nested-name-specifier.  */
4904           token = cp_lexer_peek_nth_token (parser->lexer, 2);
4905
4906           if (token->type == CPP_COLON
4907               && parser->colon_corrects_to_scope_p
4908               && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_NAME)
4909             {
4910               error_at (token->location,
4911                         "found %<:%> in nested-name-specifier, expected %<::%>");
4912               token->type = CPP_SCOPE;
4913             }
4914
4915           if (token->type != CPP_SCOPE
4916               && !cp_parser_nth_token_starts_template_argument_list_p
4917                   (parser, 2))
4918             break;
4919         }
4920
4921       /* The nested-name-specifier is optional, so we parse
4922          tentatively.  */
4923       cp_parser_parse_tentatively (parser);
4924
4925       /* Look for the optional `template' keyword, if this isn't the
4926          first time through the loop.  */
4927       if (success)
4928         template_keyword_p = cp_parser_optional_template_keyword (parser);
4929       else
4930         template_keyword_p = false;
4931
4932       /* Save the old scope since the name lookup we are about to do
4933          might destroy it.  */
4934       old_scope = parser->scope;
4935       saved_qualifying_scope = parser->qualifying_scope;
4936       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
4937          look up names in "X<T>::I" in order to determine that "Y" is
4938          a template.  So, if we have a typename at this point, we make
4939          an effort to look through it.  */
4940       if (is_declaration
4941           && !typename_keyword_p
4942           && parser->scope
4943           && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4944         parser->scope = resolve_typename_type (parser->scope,
4945                                                /*only_current_p=*/false);
4946       /* Parse the qualifying entity.  */
4947       new_scope
4948         = cp_parser_qualifying_entity (parser,
4949                                        typename_keyword_p,
4950                                        template_keyword_p,
4951                                        check_dependency_p,
4952                                        type_p,
4953                                        is_declaration);
4954       /* Look for the `::' token.  */
4955       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
4956
4957       /* If we found what we wanted, we keep going; otherwise, we're
4958          done.  */
4959       if (!cp_parser_parse_definitely (parser))
4960         {
4961           bool error_p = false;
4962
4963           /* Restore the OLD_SCOPE since it was valid before the
4964              failed attempt at finding the last
4965              class-or-namespace-name.  */
4966           parser->scope = old_scope;
4967           parser->qualifying_scope = saved_qualifying_scope;
4968
4969           /* If the next token is a decltype, and the one after that is a
4970              `::', then the decltype has failed to resolve to a class or
4971              enumeration type.  Give this error even when parsing
4972              tentatively since it can't possibly be valid--and we're going
4973              to replace it with a CPP_NESTED_NAME_SPECIFIER below, so we
4974              won't get another chance.*/
4975           if (cp_lexer_next_token_is (parser->lexer, CPP_DECLTYPE)
4976               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4977                   == CPP_SCOPE))
4978             {
4979               token = cp_lexer_consume_token (parser->lexer);
4980               error_at (token->location, "decltype evaluates to %qT, "
4981                         "which is not a class or enumeration type",
4982                         token->u.value);
4983               parser->scope = error_mark_node;
4984               error_p = true;
4985               /* As below.  */
4986               success = true;
4987               cp_lexer_consume_token (parser->lexer);
4988             }
4989
4990           if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4991             break;
4992           /* If the next token is an identifier, and the one after
4993              that is a `::', then any valid interpretation would have
4994              found a class-or-namespace-name.  */
4995           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
4996                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4997                      == CPP_SCOPE)
4998                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
4999                      != CPP_COMPL))
5000             {
5001               token = cp_lexer_consume_token (parser->lexer);
5002               if (!error_p)
5003                 {
5004                   if (!token->ambiguous_p)
5005                     {
5006                       tree decl;
5007                       tree ambiguous_decls;
5008
5009                       decl = cp_parser_lookup_name (parser, token->u.value,
5010                                                     none_type,
5011                                                     /*is_template=*/false,
5012                                                     /*is_namespace=*/false,
5013                                                     /*check_dependency=*/true,
5014                                                     &ambiguous_decls,
5015                                                     token->location);
5016                       if (TREE_CODE (decl) == TEMPLATE_DECL)
5017                         error_at (token->location,
5018                                   "%qD used without template parameters",
5019                                   decl);
5020                       else if (ambiguous_decls)
5021                         {
5022                           error_at (token->location,
5023                                     "reference to %qD is ambiguous",
5024                                     token->u.value);
5025                           print_candidates (ambiguous_decls);
5026                           decl = error_mark_node;
5027                         }
5028                       else
5029                         {
5030                           if (cxx_dialect != cxx98)
5031                             cp_parser_name_lookup_error
5032                             (parser, token->u.value, decl, NLE_NOT_CXX98,
5033                              token->location);
5034                           else
5035                             cp_parser_name_lookup_error
5036                             (parser, token->u.value, decl, NLE_CXX98,
5037                              token->location);
5038                         }
5039                     }
5040                   parser->scope = error_mark_node;
5041                   error_p = true;
5042                   /* Treat this as a successful nested-name-specifier
5043                      due to:
5044
5045                      [basic.lookup.qual]
5046
5047                      If the name found is not a class-name (clause
5048                      _class_) or namespace-name (_namespace.def_), the
5049                      program is ill-formed.  */
5050                   success = true;
5051                 }
5052               cp_lexer_consume_token (parser->lexer);
5053             }
5054           break;
5055         }
5056       /* We've found one valid nested-name-specifier.  */
5057       success = true;
5058       /* Name lookup always gives us a DECL.  */
5059       if (TREE_CODE (new_scope) == TYPE_DECL)
5060         new_scope = TREE_TYPE (new_scope);
5061       /* Uses of "template" must be followed by actual templates.  */
5062       if (template_keyword_p
5063           && !(CLASS_TYPE_P (new_scope)
5064                && ((CLASSTYPE_USE_TEMPLATE (new_scope)
5065                     && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
5066                    || CLASSTYPE_IS_TEMPLATE (new_scope)))
5067           && !(TREE_CODE (new_scope) == TYPENAME_TYPE
5068                && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
5069                    == TEMPLATE_ID_EXPR)))
5070         permerror (input_location, TYPE_P (new_scope)
5071                    ? G_("%qT is not a template")
5072                    : G_("%qD is not a template"),
5073                    new_scope);
5074       /* If it is a class scope, try to complete it; we are about to
5075          be looking up names inside the class.  */
5076       if (TYPE_P (new_scope)
5077           /* Since checking types for dependency can be expensive,
5078              avoid doing it if the type is already complete.  */
5079           && !COMPLETE_TYPE_P (new_scope)
5080           /* Do not try to complete dependent types.  */
5081           && !dependent_type_p (new_scope))
5082         {
5083           new_scope = complete_type (new_scope);
5084           /* If it is a typedef to current class, use the current
5085              class instead, as the typedef won't have any names inside
5086              it yet.  */
5087           if (!COMPLETE_TYPE_P (new_scope)
5088               && currently_open_class (new_scope))
5089             new_scope = TYPE_MAIN_VARIANT (new_scope);
5090         }
5091       /* Make sure we look in the right scope the next time through
5092          the loop.  */
5093       parser->scope = new_scope;
5094     }
5095
5096   /* If parsing tentatively, replace the sequence of tokens that makes
5097      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
5098      token.  That way, should we re-parse the token stream, we will
5099      not have to repeat the effort required to do the parse, nor will
5100      we issue duplicate error messages.  */
5101   if (success && start)
5102     {
5103       cp_token *token;
5104
5105       token = cp_lexer_token_at (parser->lexer, start);
5106       /* Reset the contents of the START token.  */
5107       token->type = CPP_NESTED_NAME_SPECIFIER;
5108       /* Retrieve any deferred checks.  Do not pop this access checks yet
5109          so the memory will not be reclaimed during token replacing below.  */
5110       token->u.tree_check_value = ggc_alloc_cleared_tree_check ();
5111       token->u.tree_check_value->value = parser->scope;
5112       token->u.tree_check_value->checks = get_deferred_access_checks ();
5113       token->u.tree_check_value->qualifying_scope =
5114         parser->qualifying_scope;
5115       token->keyword = RID_MAX;
5116
5117       /* Purge all subsequent tokens.  */
5118       cp_lexer_purge_tokens_after (parser->lexer, start);
5119     }
5120
5121   if (start)
5122     pop_to_parent_deferring_access_checks ();
5123
5124   return success ? parser->scope : NULL_TREE;
5125 }
5126
5127 /* Parse a nested-name-specifier.  See
5128    cp_parser_nested_name_specifier_opt for details.  This function
5129    behaves identically, except that it will an issue an error if no
5130    nested-name-specifier is present.  */
5131
5132 static tree
5133 cp_parser_nested_name_specifier (cp_parser *parser,
5134                                  bool typename_keyword_p,
5135                                  bool check_dependency_p,
5136                                  bool type_p,
5137                                  bool is_declaration)
5138 {
5139   tree scope;
5140
5141   /* Look for the nested-name-specifier.  */
5142   scope = cp_parser_nested_name_specifier_opt (parser,
5143                                                typename_keyword_p,
5144                                                check_dependency_p,
5145                                                type_p,
5146                                                is_declaration);
5147   /* If it was not present, issue an error message.  */
5148   if (!scope)
5149     {
5150       cp_parser_error (parser, "expected nested-name-specifier");
5151       parser->scope = NULL_TREE;
5152     }
5153
5154   return scope;
5155 }
5156
5157 /* Parse the qualifying entity in a nested-name-specifier. For C++98,
5158    this is either a class-name or a namespace-name (which corresponds
5159    to the class-or-namespace-name production in the grammar). For
5160    C++0x, it can also be a type-name that refers to an enumeration
5161    type or a simple-template-id.
5162
5163    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
5164    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
5165    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
5166    TYPE_P is TRUE iff the next name should be taken as a class-name,
5167    even the same name is declared to be another entity in the same
5168    scope.
5169
5170    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
5171    specified by the class-or-namespace-name.  If neither is found the
5172    ERROR_MARK_NODE is returned.  */
5173
5174 static tree
5175 cp_parser_qualifying_entity (cp_parser *parser,
5176                              bool typename_keyword_p,
5177                              bool template_keyword_p,
5178                              bool check_dependency_p,
5179                              bool type_p,
5180                              bool is_declaration)
5181 {
5182   tree saved_scope;
5183   tree saved_qualifying_scope;
5184   tree saved_object_scope;
5185   tree scope;
5186   bool only_class_p;
5187   bool successful_parse_p;
5188
5189   /* DR 743: decltype can appear in a nested-name-specifier.  */
5190   if (cp_lexer_next_token_is_decltype (parser->lexer))
5191     {
5192       scope = cp_parser_decltype (parser);
5193       if (TREE_CODE (scope) != ENUMERAL_TYPE
5194           && !MAYBE_CLASS_TYPE_P (scope))
5195         {
5196           cp_parser_simulate_error (parser);
5197           return error_mark_node;
5198         }
5199       if (TYPE_NAME (scope))
5200         scope = TYPE_NAME (scope);
5201       return scope;
5202     }
5203
5204   /* Before we try to parse the class-name, we must save away the
5205      current PARSER->SCOPE since cp_parser_class_name will destroy
5206      it.  */
5207   saved_scope = parser->scope;
5208   saved_qualifying_scope = parser->qualifying_scope;
5209   saved_object_scope = parser->object_scope;
5210   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
5211      there is no need to look for a namespace-name.  */
5212   only_class_p = template_keyword_p 
5213     || (saved_scope && TYPE_P (saved_scope) && cxx_dialect == cxx98);
5214   if (!only_class_p)
5215     cp_parser_parse_tentatively (parser);
5216   scope = cp_parser_class_name (parser,
5217                                 typename_keyword_p,
5218                                 template_keyword_p,
5219                                 type_p ? class_type : none_type,
5220                                 check_dependency_p,
5221                                 /*class_head_p=*/false,
5222                                 is_declaration);
5223   successful_parse_p = only_class_p || cp_parser_parse_definitely (parser);
5224   /* If that didn't work and we're in C++0x mode, try for a type-name.  */
5225   if (!only_class_p 
5226       && cxx_dialect != cxx98
5227       && !successful_parse_p)
5228     {
5229       /* Restore the saved scope.  */
5230       parser->scope = saved_scope;
5231       parser->qualifying_scope = saved_qualifying_scope;
5232       parser->object_scope = saved_object_scope;
5233
5234       /* Parse tentatively.  */
5235       cp_parser_parse_tentatively (parser);
5236      
5237       /* Parse a type-name  */
5238       scope = cp_parser_type_name (parser);
5239
5240       /* "If the name found does not designate a namespace or a class,
5241          enumeration, or dependent type, the program is ill-formed."
5242
5243          We cover classes and dependent types above and namespaces below,
5244          so this code is only looking for enums.  */
5245       if (!scope || TREE_CODE (scope) != TYPE_DECL
5246           || TREE_CODE (TREE_TYPE (scope)) != ENUMERAL_TYPE)
5247         cp_parser_simulate_error (parser);
5248
5249       successful_parse_p = cp_parser_parse_definitely (parser);
5250     }
5251   /* If that didn't work, try for a namespace-name.  */
5252   if (!only_class_p && !successful_parse_p)
5253     {
5254       /* Restore the saved scope.  */
5255       parser->scope = saved_scope;
5256       parser->qualifying_scope = saved_qualifying_scope;
5257       parser->object_scope = saved_object_scope;
5258       /* If we are not looking at an identifier followed by the scope
5259          resolution operator, then this is not part of a
5260          nested-name-specifier.  (Note that this function is only used
5261          to parse the components of a nested-name-specifier.)  */
5262       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
5263           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
5264         return error_mark_node;
5265       scope = cp_parser_namespace_name (parser);
5266     }
5267
5268   return scope;
5269 }
5270
5271 /* Parse a postfix-expression.
5272
5273    postfix-expression:
5274      primary-expression
5275      postfix-expression [ expression ]
5276      postfix-expression ( expression-list [opt] )
5277      simple-type-specifier ( expression-list [opt] )
5278      typename :: [opt] nested-name-specifier identifier
5279        ( expression-list [opt] )
5280      typename :: [opt] nested-name-specifier template [opt] template-id
5281        ( expression-list [opt] )
5282      postfix-expression . template [opt] id-expression
5283      postfix-expression -> template [opt] id-expression
5284      postfix-expression . pseudo-destructor-name
5285      postfix-expression -> pseudo-destructor-name
5286      postfix-expression ++
5287      postfix-expression --
5288      dynamic_cast < type-id > ( expression )
5289      static_cast < type-id > ( expression )
5290      reinterpret_cast < type-id > ( expression )
5291      const_cast < type-id > ( expression )
5292      typeid ( expression )
5293      typeid ( type-id )
5294
5295    GNU Extension:
5296
5297    postfix-expression:
5298      ( type-id ) { initializer-list , [opt] }
5299
5300    This extension is a GNU version of the C99 compound-literal
5301    construct.  (The C99 grammar uses `type-name' instead of `type-id',
5302    but they are essentially the same concept.)
5303
5304    If ADDRESS_P is true, the postfix expression is the operand of the
5305    `&' operator.  CAST_P is true if this expression is the target of a
5306    cast.
5307
5308    If MEMBER_ACCESS_ONLY_P, we only allow postfix expressions that are
5309    class member access expressions [expr.ref].
5310
5311    Returns a representation of the expression.  */
5312
5313 static tree
5314 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
5315                               bool member_access_only_p,
5316                               cp_id_kind * pidk_return)
5317 {
5318   cp_token *token;
5319   enum rid keyword;
5320   cp_id_kind idk = CP_ID_KIND_NONE;
5321   tree postfix_expression = NULL_TREE;
5322   bool is_member_access = false;
5323
5324   /* Peek at the next token.  */
5325   token = cp_lexer_peek_token (parser->lexer);
5326   /* Some of the productions are determined by keywords.  */
5327   keyword = token->keyword;
5328   switch (keyword)
5329     {
5330     case RID_DYNCAST:
5331     case RID_STATCAST:
5332     case RID_REINTCAST:
5333     case RID_CONSTCAST:
5334       {
5335         tree type;
5336         tree expression;
5337         const char *saved_message;
5338
5339         /* All of these can be handled in the same way from the point
5340            of view of parsing.  Begin by consuming the token
5341            identifying the cast.  */
5342         cp_lexer_consume_token (parser->lexer);
5343
5344         /* New types cannot be defined in the cast.  */
5345         saved_message = parser->type_definition_forbidden_message;
5346         parser->type_definition_forbidden_message
5347           = G_("types may not be defined in casts");
5348
5349         /* Look for the opening `<'.  */
5350         cp_parser_require (parser, CPP_LESS, RT_LESS);
5351         /* Parse the type to which we are casting.  */
5352         type = cp_parser_type_id (parser);
5353         /* Look for the closing `>'.  */
5354         cp_parser_require (parser, CPP_GREATER, RT_GREATER);
5355         /* Restore the old message.  */
5356         parser->type_definition_forbidden_message = saved_message;
5357
5358         /* And the expression which is being cast.  */
5359         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
5360         expression = cp_parser_expression (parser, /*cast_p=*/true, & idk);
5361         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
5362
5363         /* Only type conversions to integral or enumeration types
5364            can be used in constant-expressions.  */
5365         if (!cast_valid_in_integral_constant_expression_p (type)
5366             && cp_parser_non_integral_constant_expression (parser, NIC_CAST))
5367           return error_mark_node;
5368
5369         switch (keyword)
5370           {
5371           case RID_DYNCAST:
5372             postfix_expression
5373               = build_dynamic_cast (type, expression, tf_warning_or_error);
5374             break;
5375           case RID_STATCAST:
5376             postfix_expression
5377               = build_static_cast (type, expression, tf_warning_or_error);
5378             break;
5379           case RID_REINTCAST:
5380             postfix_expression
5381               = build_reinterpret_cast (type, expression, 
5382                                         tf_warning_or_error);
5383             break;
5384           case RID_CONSTCAST:
5385             postfix_expression
5386               = build_const_cast (type, expression, tf_warning_or_error);
5387             break;
5388           default:
5389             gcc_unreachable ();
5390           }
5391       }
5392       break;
5393
5394     case RID_TYPEID:
5395       {
5396         tree type;
5397         const char *saved_message;
5398         bool saved_in_type_id_in_expr_p;
5399
5400         /* Consume the `typeid' token.  */
5401         cp_lexer_consume_token (parser->lexer);
5402         /* Look for the `(' token.  */
5403         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
5404         /* Types cannot be defined in a `typeid' expression.  */
5405         saved_message = parser->type_definition_forbidden_message;
5406         parser->type_definition_forbidden_message
5407           = G_("types may not be defined in a %<typeid%> expression");
5408         /* We can't be sure yet whether we're looking at a type-id or an
5409            expression.  */
5410         cp_parser_parse_tentatively (parser);
5411         /* Try a type-id first.  */
5412         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5413         parser->in_type_id_in_expr_p = true;
5414         type = cp_parser_type_id (parser);
5415         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5416         /* Look for the `)' token.  Otherwise, we can't be sure that
5417            we're not looking at an expression: consider `typeid (int
5418            (3))', for example.  */
5419         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
5420         /* If all went well, simply lookup the type-id.  */
5421         if (cp_parser_parse_definitely (parser))
5422           postfix_expression = get_typeid (type);
5423         /* Otherwise, fall back to the expression variant.  */
5424         else
5425           {
5426             tree expression;
5427
5428             /* Look for an expression.  */
5429             expression = cp_parser_expression (parser, /*cast_p=*/false, & idk);
5430             /* Compute its typeid.  */
5431             postfix_expression = build_typeid (expression);
5432             /* Look for the `)' token.  */
5433             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
5434           }
5435         /* Restore the saved message.  */
5436         parser->type_definition_forbidden_message = saved_message;
5437         /* `typeid' may not appear in an integral constant expression.  */
5438         if (cp_parser_non_integral_constant_expression (parser, NIC_TYPEID))
5439           return error_mark_node;
5440       }
5441       break;
5442
5443     case RID_TYPENAME:
5444       {
5445         tree type;
5446         /* The syntax permitted here is the same permitted for an
5447            elaborated-type-specifier.  */
5448         type = cp_parser_elaborated_type_specifier (parser,
5449                                                     /*is_friend=*/false,
5450                                                     /*is_declaration=*/false);
5451         postfix_expression = cp_parser_functional_cast (parser, type);
5452       }
5453       break;
5454
5455     default:
5456       {
5457         tree type;
5458
5459         /* If the next thing is a simple-type-specifier, we may be
5460            looking at a functional cast.  We could also be looking at
5461            an id-expression.  So, we try the functional cast, and if
5462            that doesn't work we fall back to the primary-expression.  */
5463         cp_parser_parse_tentatively (parser);
5464         /* Look for the simple-type-specifier.  */
5465         type = cp_parser_simple_type_specifier (parser,
5466                                                 /*decl_specs=*/NULL,
5467                                                 CP_PARSER_FLAGS_NONE);
5468         /* Parse the cast itself.  */
5469         if (!cp_parser_error_occurred (parser))
5470           postfix_expression
5471             = cp_parser_functional_cast (parser, type);
5472         /* If that worked, we're done.  */
5473         if (cp_parser_parse_definitely (parser))
5474           break;
5475
5476         /* If the functional-cast didn't work out, try a
5477            compound-literal.  */
5478         if (cp_parser_allow_gnu_extensions_p (parser)
5479             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5480           {
5481             VEC(constructor_elt,gc) *initializer_list = NULL;
5482             bool saved_in_type_id_in_expr_p;
5483
5484             cp_parser_parse_tentatively (parser);
5485             /* Consume the `('.  */
5486             cp_lexer_consume_token (parser->lexer);
5487             /* Parse the type.  */
5488             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5489             parser->in_type_id_in_expr_p = true;
5490             type = cp_parser_type_id (parser);
5491             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5492             /* Look for the `)'.  */
5493             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
5494             /* Look for the `{'.  */
5495             cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
5496             /* If things aren't going well, there's no need to
5497                keep going.  */
5498             if (!cp_parser_error_occurred (parser))
5499               {
5500                 bool non_constant_p;
5501                 /* Parse the initializer-list.  */
5502                 initializer_list
5503                   = cp_parser_initializer_list (parser, &non_constant_p);
5504                 /* Allow a trailing `,'.  */
5505                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
5506                   cp_lexer_consume_token (parser->lexer);
5507                 /* Look for the final `}'.  */
5508                 cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
5509               }
5510             /* If that worked, we're definitely looking at a
5511                compound-literal expression.  */
5512             if (cp_parser_parse_definitely (parser))
5513               {
5514                 /* Warn the user that a compound literal is not
5515                    allowed in standard C++.  */
5516                 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids compound-literals");
5517                 /* For simplicity, we disallow compound literals in
5518                    constant-expressions.  We could
5519                    allow compound literals of integer type, whose
5520                    initializer was a constant, in constant
5521                    expressions.  Permitting that usage, as a further
5522                    extension, would not change the meaning of any
5523                    currently accepted programs.  (Of course, as
5524                    compound literals are not part of ISO C++, the
5525                    standard has nothing to say.)  */
5526                 if (cp_parser_non_integral_constant_expression (parser,
5527                                                                 NIC_NCC))
5528                   {
5529                     postfix_expression = error_mark_node;
5530                     break;
5531                   }
5532                 /* Form the representation of the compound-literal.  */
5533                 postfix_expression
5534                   = (finish_compound_literal
5535                      (type, build_constructor (init_list_type_node,
5536                                                initializer_list),
5537                       tf_warning_or_error));
5538                 break;
5539               }
5540           }
5541
5542         /* It must be a primary-expression.  */
5543         postfix_expression
5544           = cp_parser_primary_expression (parser, address_p, cast_p,
5545                                           /*template_arg_p=*/false,
5546                                           &idk);
5547       }
5548       break;
5549     }
5550
5551   /* Keep looping until the postfix-expression is complete.  */
5552   while (true)
5553     {
5554       if (idk == CP_ID_KIND_UNQUALIFIED
5555           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
5556           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
5557         /* It is not a Koenig lookup function call.  */
5558         postfix_expression
5559           = unqualified_name_lookup_error (postfix_expression);
5560
5561       /* Peek at the next token.  */
5562       token = cp_lexer_peek_token (parser->lexer);
5563
5564       switch (token->type)
5565         {
5566         case CPP_OPEN_SQUARE:
5567           postfix_expression
5568             = cp_parser_postfix_open_square_expression (parser,
5569                                                         postfix_expression,
5570                                                         false);
5571           idk = CP_ID_KIND_NONE;
5572           is_member_access = false;
5573           break;
5574
5575         case CPP_OPEN_PAREN:
5576           /* postfix-expression ( expression-list [opt] ) */
5577           {
5578             bool koenig_p;
5579             bool is_builtin_constant_p;
5580             bool saved_integral_constant_expression_p = false;
5581             bool saved_non_integral_constant_expression_p = false;
5582             VEC(tree,gc) *args;
5583
5584             is_member_access = false;
5585
5586             is_builtin_constant_p
5587               = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
5588             if (is_builtin_constant_p)
5589               {
5590                 /* The whole point of __builtin_constant_p is to allow
5591                    non-constant expressions to appear as arguments.  */
5592                 saved_integral_constant_expression_p
5593                   = parser->integral_constant_expression_p;
5594                 saved_non_integral_constant_expression_p
5595                   = parser->non_integral_constant_expression_p;
5596                 parser->integral_constant_expression_p = false;
5597               }
5598             args = (cp_parser_parenthesized_expression_list
5599                     (parser, non_attr,
5600                      /*cast_p=*/false, /*allow_expansion_p=*/true,
5601                      /*non_constant_p=*/NULL));
5602             if (is_builtin_constant_p)
5603               {
5604                 parser->integral_constant_expression_p
5605                   = saved_integral_constant_expression_p;
5606                 parser->non_integral_constant_expression_p
5607                   = saved_non_integral_constant_expression_p;
5608               }
5609
5610             if (args == NULL)
5611               {
5612                 postfix_expression = error_mark_node;
5613                 break;
5614               }
5615
5616             /* Function calls are not permitted in
5617                constant-expressions.  */
5618             if (! builtin_valid_in_constant_expr_p (postfix_expression)
5619                 && cp_parser_non_integral_constant_expression (parser,
5620                                                                NIC_FUNC_CALL))
5621               {
5622                 postfix_expression = error_mark_node;
5623                 release_tree_vector (args);
5624                 break;
5625               }
5626
5627             koenig_p = false;
5628             if (idk == CP_ID_KIND_UNQUALIFIED
5629                 || idk == CP_ID_KIND_TEMPLATE_ID)
5630               {
5631                 if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
5632                   {
5633                     if (!VEC_empty (tree, args))
5634                       {
5635                         koenig_p = true;
5636                         if (!any_type_dependent_arguments_p (args))
5637                           postfix_expression
5638                             = perform_koenig_lookup (postfix_expression, args,
5639                                                      /*include_std=*/false,
5640                                                      tf_warning_or_error);
5641                       }
5642                     else
5643                       postfix_expression
5644                         = unqualified_fn_lookup_error (postfix_expression);
5645                   }
5646                 /* We do not perform argument-dependent lookup if
5647                    normal lookup finds a non-function, in accordance
5648                    with the expected resolution of DR 218.  */
5649                 else if (!VEC_empty (tree, args)
5650                          && is_overloaded_fn (postfix_expression))
5651                   {
5652                     tree fn = get_first_fn (postfix_expression);
5653                     fn = STRIP_TEMPLATE (fn);
5654
5655                     /* Do not do argument dependent lookup if regular
5656                        lookup finds a member function or a block-scope
5657                        function declaration.  [basic.lookup.argdep]/3  */
5658                     if (!DECL_FUNCTION_MEMBER_P (fn)
5659                         && !DECL_LOCAL_FUNCTION_P (fn))
5660                       {
5661                         koenig_p = true;
5662                         if (!any_type_dependent_arguments_p (args))
5663                           postfix_expression
5664                             = perform_koenig_lookup (postfix_expression, args,
5665                                                      /*include_std=*/false,
5666                                                      tf_warning_or_error);
5667                       }
5668                   }
5669               }
5670
5671             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
5672               {
5673                 tree instance = TREE_OPERAND (postfix_expression, 0);
5674                 tree fn = TREE_OPERAND (postfix_expression, 1);
5675
5676                 if (processing_template_decl
5677                     && (type_dependent_expression_p (instance)
5678                         || (!BASELINK_P (fn)
5679                             && TREE_CODE (fn) != FIELD_DECL)
5680                         || type_dependent_expression_p (fn)
5681                         || any_type_dependent_arguments_p (args)))
5682                   {
5683                     postfix_expression
5684                       = build_nt_call_vec (postfix_expression, args);
5685                     release_tree_vector (args);
5686                     break;
5687                   }
5688
5689                 if (BASELINK_P (fn))
5690                   {
5691                   postfix_expression
5692                     = (build_new_method_call
5693                        (instance, fn, &args, NULL_TREE,
5694                         (idk == CP_ID_KIND_QUALIFIED
5695                          ? LOOKUP_NORMAL|LOOKUP_NONVIRTUAL
5696                          : LOOKUP_NORMAL),
5697                         /*fn_p=*/NULL,
5698                         tf_warning_or_error));
5699                   }
5700                 else
5701                   postfix_expression
5702                     = finish_call_expr (postfix_expression, &args,
5703                                         /*disallow_virtual=*/false,
5704                                         /*koenig_p=*/false,
5705                                         tf_warning_or_error);
5706               }
5707             else if (TREE_CODE (postfix_expression) == OFFSET_REF
5708                      || TREE_CODE (postfix_expression) == MEMBER_REF
5709                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
5710               postfix_expression = (build_offset_ref_call_from_tree
5711                                     (postfix_expression, &args));
5712             else if (idk == CP_ID_KIND_QUALIFIED)
5713               /* A call to a static class member, or a namespace-scope
5714                  function.  */
5715               postfix_expression
5716                 = finish_call_expr (postfix_expression, &args,
5717                                     /*disallow_virtual=*/true,
5718                                     koenig_p,
5719                                     tf_warning_or_error);
5720             else
5721               /* All other function calls.  */
5722               postfix_expression
5723                 = finish_call_expr (postfix_expression, &args,
5724                                     /*disallow_virtual=*/false,
5725                                     koenig_p,
5726                                     tf_warning_or_error);
5727
5728             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
5729             idk = CP_ID_KIND_NONE;
5730
5731             release_tree_vector (args);
5732           }
5733           break;
5734
5735         case CPP_DOT:
5736         case CPP_DEREF:
5737           /* postfix-expression . template [opt] id-expression
5738              postfix-expression . pseudo-destructor-name
5739              postfix-expression -> template [opt] id-expression
5740              postfix-expression -> pseudo-destructor-name */
5741
5742           /* Consume the `.' or `->' operator.  */
5743           cp_lexer_consume_token (parser->lexer);
5744
5745           postfix_expression
5746             = cp_parser_postfix_dot_deref_expression (parser, token->type,
5747                                                       postfix_expression,
5748                                                       false, &idk,
5749                                                       token->location);
5750
5751           is_member_access = true;
5752           break;
5753
5754         case CPP_PLUS_PLUS:
5755           /* postfix-expression ++  */
5756           /* Consume the `++' token.  */
5757           cp_lexer_consume_token (parser->lexer);
5758           /* Generate a representation for the complete expression.  */
5759           postfix_expression
5760             = finish_increment_expr (postfix_expression,
5761                                      POSTINCREMENT_EXPR);
5762           /* Increments may not appear in constant-expressions.  */
5763           if (cp_parser_non_integral_constant_expression (parser, NIC_INC))
5764             postfix_expression = error_mark_node;
5765           idk = CP_ID_KIND_NONE;
5766           is_member_access = false;
5767           break;
5768
5769         case CPP_MINUS_MINUS:
5770           /* postfix-expression -- */
5771           /* Consume the `--' token.  */
5772           cp_lexer_consume_token (parser->lexer);
5773           /* Generate a representation for the complete expression.  */
5774           postfix_expression
5775             = finish_increment_expr (postfix_expression,
5776                                      POSTDECREMENT_EXPR);
5777           /* Decrements may not appear in constant-expressions.  */
5778           if (cp_parser_non_integral_constant_expression (parser, NIC_DEC))
5779             postfix_expression = error_mark_node;
5780           idk = CP_ID_KIND_NONE;
5781           is_member_access = false;
5782           break;
5783
5784         default:
5785           if (pidk_return != NULL)
5786             * pidk_return = idk;
5787           if (member_access_only_p)
5788             return is_member_access? postfix_expression : error_mark_node;
5789           else
5790             return postfix_expression;
5791         }
5792     }
5793
5794   /* We should never get here.  */
5795   gcc_unreachable ();
5796   return error_mark_node;
5797 }
5798
5799 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
5800    by cp_parser_builtin_offsetof.  We're looking for
5801
5802      postfix-expression [ expression ]
5803
5804    FOR_OFFSETOF is set if we're being called in that context, which
5805    changes how we deal with integer constant expressions.  */
5806
5807 static tree
5808 cp_parser_postfix_open_square_expression (cp_parser *parser,
5809                                           tree postfix_expression,
5810                                           bool for_offsetof)
5811 {
5812   tree index;
5813
5814   /* Consume the `[' token.  */
5815   cp_lexer_consume_token (parser->lexer);
5816
5817   /* Parse the index expression.  */
5818   /* ??? For offsetof, there is a question of what to allow here.  If
5819      offsetof is not being used in an integral constant expression context,
5820      then we *could* get the right answer by computing the value at runtime.
5821      If we are in an integral constant expression context, then we might
5822      could accept any constant expression; hard to say without analysis.
5823      Rather than open the barn door too wide right away, allow only integer
5824      constant expressions here.  */
5825   if (for_offsetof)
5826     index = cp_parser_constant_expression (parser, false, NULL);
5827   else
5828     index = cp_parser_expression (parser, /*cast_p=*/false, NULL);
5829
5830   /* Look for the closing `]'.  */
5831   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
5832
5833   /* Build the ARRAY_REF.  */
5834   postfix_expression = grok_array_decl (postfix_expression, index);
5835
5836   /* When not doing offsetof, array references are not permitted in
5837      constant-expressions.  */
5838   if (!for_offsetof
5839       && (cp_parser_non_integral_constant_expression (parser, NIC_ARRAY_REF)))
5840     postfix_expression = error_mark_node;
5841
5842   return postfix_expression;
5843 }
5844
5845 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
5846    by cp_parser_builtin_offsetof.  We're looking for
5847
5848      postfix-expression . template [opt] id-expression
5849      postfix-expression . pseudo-destructor-name
5850      postfix-expression -> template [opt] id-expression
5851      postfix-expression -> pseudo-destructor-name
5852
5853    FOR_OFFSETOF is set if we're being called in that context.  That sorta
5854    limits what of the above we'll actually accept, but nevermind.
5855    TOKEN_TYPE is the "." or "->" token, which will already have been
5856    removed from the stream.  */
5857
5858 static tree
5859 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
5860                                         enum cpp_ttype token_type,
5861                                         tree postfix_expression,
5862                                         bool for_offsetof, cp_id_kind *idk,
5863                                         location_t location)
5864 {
5865   tree name;
5866   bool dependent_p;
5867   bool pseudo_destructor_p;
5868   tree scope = NULL_TREE;
5869
5870   /* If this is a `->' operator, dereference the pointer.  */
5871   if (token_type == CPP_DEREF)
5872     postfix_expression = build_x_arrow (postfix_expression);
5873   /* Check to see whether or not the expression is type-dependent.  */
5874   dependent_p = type_dependent_expression_p (postfix_expression);
5875   /* The identifier following the `->' or `.' is not qualified.  */
5876   parser->scope = NULL_TREE;
5877   parser->qualifying_scope = NULL_TREE;
5878   parser->object_scope = NULL_TREE;
5879   *idk = CP_ID_KIND_NONE;
5880
5881   /* Enter the scope corresponding to the type of the object
5882      given by the POSTFIX_EXPRESSION.  */
5883   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
5884     {
5885       scope = TREE_TYPE (postfix_expression);
5886       /* According to the standard, no expression should ever have
5887          reference type.  Unfortunately, we do not currently match
5888          the standard in this respect in that our internal representation
5889          of an expression may have reference type even when the standard
5890          says it does not.  Therefore, we have to manually obtain the
5891          underlying type here.  */
5892       scope = non_reference (scope);
5893       /* The type of the POSTFIX_EXPRESSION must be complete.  */
5894       if (scope == unknown_type_node)
5895         {
5896           error_at (location, "%qE does not have class type",
5897                     postfix_expression);
5898           scope = NULL_TREE;
5899         }
5900       /* Unlike the object expression in other contexts, *this is not
5901          required to be of complete type for purposes of class member
5902          access (5.2.5) outside the member function body.  */
5903       else if (scope != current_class_ref
5904                && !(processing_template_decl && scope == current_class_type))
5905         scope = complete_type_or_else (scope, NULL_TREE);
5906       /* Let the name lookup machinery know that we are processing a
5907          class member access expression.  */
5908       parser->context->object_type = scope;
5909       /* If something went wrong, we want to be able to discern that case,
5910          as opposed to the case where there was no SCOPE due to the type
5911          of expression being dependent.  */
5912       if (!scope)
5913         scope = error_mark_node;
5914       /* If the SCOPE was erroneous, make the various semantic analysis
5915          functions exit quickly -- and without issuing additional error
5916          messages.  */
5917       if (scope == error_mark_node)
5918         postfix_expression = error_mark_node;
5919     }
5920
5921   /* Assume this expression is not a pseudo-destructor access.  */
5922   pseudo_destructor_p = false;
5923
5924   /* If the SCOPE is a scalar type, then, if this is a valid program,
5925      we must be looking at a pseudo-destructor-name.  If POSTFIX_EXPRESSION
5926      is type dependent, it can be pseudo-destructor-name or something else.
5927      Try to parse it as pseudo-destructor-name first.  */
5928   if ((scope && SCALAR_TYPE_P (scope)) || dependent_p)
5929     {
5930       tree s;
5931       tree type;
5932
5933       cp_parser_parse_tentatively (parser);
5934       /* Parse the pseudo-destructor-name.  */
5935       s = NULL_TREE;
5936       cp_parser_pseudo_destructor_name (parser, &s, &type);
5937       if (dependent_p
5938           && (cp_parser_error_occurred (parser)
5939               || TREE_CODE (type) != TYPE_DECL
5940               || !SCALAR_TYPE_P (TREE_TYPE (type))))
5941         cp_parser_abort_tentative_parse (parser);
5942       else if (cp_parser_parse_definitely (parser))
5943         {
5944           pseudo_destructor_p = true;
5945           postfix_expression
5946             = finish_pseudo_destructor_expr (postfix_expression,
5947                                              s, TREE_TYPE (type));
5948         }
5949     }
5950
5951   if (!pseudo_destructor_p)
5952     {
5953       /* If the SCOPE is not a scalar type, we are looking at an
5954          ordinary class member access expression, rather than a
5955          pseudo-destructor-name.  */
5956       bool template_p;
5957       cp_token *token = cp_lexer_peek_token (parser->lexer);
5958       /* Parse the id-expression.  */
5959       name = (cp_parser_id_expression
5960               (parser,
5961                cp_parser_optional_template_keyword (parser),
5962                /*check_dependency_p=*/true,
5963                &template_p,
5964                /*declarator_p=*/false,
5965                /*optional_p=*/false));
5966       /* In general, build a SCOPE_REF if the member name is qualified.
5967          However, if the name was not dependent and has already been
5968          resolved; there is no need to build the SCOPE_REF.  For example;
5969
5970              struct X { void f(); };
5971              template <typename T> void f(T* t) { t->X::f(); }
5972
5973          Even though "t" is dependent, "X::f" is not and has been resolved
5974          to a BASELINK; there is no need to include scope information.  */
5975
5976       /* But we do need to remember that there was an explicit scope for
5977          virtual function calls.  */
5978       if (parser->scope)
5979         *idk = CP_ID_KIND_QUALIFIED;
5980
5981       /* If the name is a template-id that names a type, we will get a
5982          TYPE_DECL here.  That is invalid code.  */
5983       if (TREE_CODE (name) == TYPE_DECL)
5984         {
5985           error_at (token->location, "invalid use of %qD", name);
5986           postfix_expression = error_mark_node;
5987         }
5988       else
5989         {
5990           if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
5991             {
5992               if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
5993                 {
5994                   error_at (token->location, "%<%D::%D%> is not a class member",
5995                             parser->scope, name);
5996                   postfix_expression = error_mark_node;
5997                 }
5998               else
5999                 name = build_qualified_name (/*type=*/NULL_TREE,
6000                                              parser->scope,
6001                                              name,
6002                                              template_p);
6003               parser->scope = NULL_TREE;
6004               parser->qualifying_scope = NULL_TREE;
6005               parser->object_scope = NULL_TREE;
6006             }
6007           if (scope && name && BASELINK_P (name))
6008             adjust_result_of_qualified_name_lookup
6009               (name, BINFO_TYPE (BASELINK_ACCESS_BINFO (name)), scope);
6010           postfix_expression
6011             = finish_class_member_access_expr (postfix_expression, name,
6012                                                template_p, 
6013                                                tf_warning_or_error);
6014         }
6015     }
6016
6017   /* We no longer need to look up names in the scope of the object on
6018      the left-hand side of the `.' or `->' operator.  */
6019   parser->context->object_type = NULL_TREE;
6020
6021   /* Outside of offsetof, these operators may not appear in
6022      constant-expressions.  */
6023   if (!for_offsetof
6024       && (cp_parser_non_integral_constant_expression
6025           (parser, token_type == CPP_DEREF ? NIC_ARROW : NIC_POINT)))
6026     postfix_expression = error_mark_node;
6027
6028   return postfix_expression;
6029 }
6030
6031 /* Parse a parenthesized expression-list.
6032
6033    expression-list:
6034      assignment-expression
6035      expression-list, assignment-expression
6036
6037    attribute-list:
6038      expression-list
6039      identifier
6040      identifier, expression-list
6041
6042    CAST_P is true if this expression is the target of a cast.
6043
6044    ALLOW_EXPANSION_P is true if this expression allows expansion of an
6045    argument pack.
6046
6047    Returns a vector of trees.  Each element is a representation of an
6048    assignment-expression.  NULL is returned if the ( and or ) are
6049    missing.  An empty, but allocated, vector is returned on no
6050    expressions.  The parentheses are eaten.  IS_ATTRIBUTE_LIST is id_attr
6051    if we are parsing an attribute list for an attribute that wants a
6052    plain identifier argument, normal_attr for an attribute that wants
6053    an expression, or non_attr if we aren't parsing an attribute list.  If
6054    NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P indicates whether or
6055    not all of the expressions in the list were constant.  */
6056
6057 static VEC(tree,gc) *
6058 cp_parser_parenthesized_expression_list (cp_parser* parser,
6059                                          int is_attribute_list,
6060                                          bool cast_p,
6061                                          bool allow_expansion_p,
6062                                          bool *non_constant_p)
6063 {
6064   VEC(tree,gc) *expression_list;
6065   bool fold_expr_p = is_attribute_list != non_attr;
6066   tree identifier = NULL_TREE;
6067   bool saved_greater_than_is_operator_p;
6068
6069   /* Assume all the expressions will be constant.  */
6070   if (non_constant_p)
6071     *non_constant_p = false;
6072
6073   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
6074     return NULL;
6075
6076   expression_list = make_tree_vector ();
6077
6078   /* Within a parenthesized expression, a `>' token is always
6079      the greater-than operator.  */
6080   saved_greater_than_is_operator_p
6081     = parser->greater_than_is_operator_p;
6082   parser->greater_than_is_operator_p = true;
6083
6084   /* Consume expressions until there are no more.  */
6085   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
6086     while (true)
6087       {
6088         tree expr;
6089
6090         /* At the beginning of attribute lists, check to see if the
6091            next token is an identifier.  */
6092         if (is_attribute_list == id_attr
6093             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
6094           {
6095             cp_token *token;
6096
6097             /* Consume the identifier.  */
6098             token = cp_lexer_consume_token (parser->lexer);
6099             /* Save the identifier.  */
6100             identifier = token->u.value;
6101           }
6102         else
6103           {
6104             bool expr_non_constant_p;
6105
6106             /* Parse the next assignment-expression.  */
6107             if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6108               {
6109                 /* A braced-init-list.  */
6110                 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6111                 expr = cp_parser_braced_list (parser, &expr_non_constant_p);
6112                 if (non_constant_p && expr_non_constant_p)
6113                   *non_constant_p = true;
6114               }
6115             else if (non_constant_p)
6116               {
6117                 expr = (cp_parser_constant_expression
6118                         (parser, /*allow_non_constant_p=*/true,
6119                          &expr_non_constant_p));
6120                 if (expr_non_constant_p)
6121                   *non_constant_p = true;
6122               }
6123             else
6124               expr = cp_parser_assignment_expression (parser, cast_p, NULL);
6125
6126             if (fold_expr_p)
6127               expr = fold_non_dependent_expr (expr);
6128
6129             /* If we have an ellipsis, then this is an expression
6130                expansion.  */
6131             if (allow_expansion_p
6132                 && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
6133               {
6134                 /* Consume the `...'.  */
6135                 cp_lexer_consume_token (parser->lexer);
6136
6137                 /* Build the argument pack.  */
6138                 expr = make_pack_expansion (expr);
6139               }
6140
6141              /* Add it to the list.  We add error_mark_node
6142                 expressions to the list, so that we can still tell if
6143                 the correct form for a parenthesized expression-list
6144                 is found. That gives better errors.  */
6145             VEC_safe_push (tree, gc, expression_list, expr);
6146
6147             if (expr == error_mark_node)
6148               goto skip_comma;
6149           }
6150
6151         /* After the first item, attribute lists look the same as
6152            expression lists.  */
6153         is_attribute_list = non_attr;
6154
6155       get_comma:;
6156         /* If the next token isn't a `,', then we are done.  */
6157         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
6158           break;
6159
6160         /* Otherwise, consume the `,' and keep going.  */
6161         cp_lexer_consume_token (parser->lexer);
6162       }
6163
6164   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
6165     {
6166       int ending;
6167
6168     skip_comma:;
6169       /* We try and resync to an unnested comma, as that will give the
6170          user better diagnostics.  */
6171       ending = cp_parser_skip_to_closing_parenthesis (parser,
6172                                                       /*recovering=*/true,
6173                                                       /*or_comma=*/true,
6174                                                       /*consume_paren=*/true);
6175       if (ending < 0)
6176         goto get_comma;
6177       if (!ending)
6178         {
6179           parser->greater_than_is_operator_p
6180             = saved_greater_than_is_operator_p;
6181           return NULL;
6182         }
6183     }
6184
6185   parser->greater_than_is_operator_p
6186     = saved_greater_than_is_operator_p;
6187
6188   if (identifier)
6189     VEC_safe_insert (tree, gc, expression_list, 0, identifier);
6190
6191   return expression_list;
6192 }
6193
6194 /* Parse a pseudo-destructor-name.
6195
6196    pseudo-destructor-name:
6197      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
6198      :: [opt] nested-name-specifier template template-id :: ~ type-name
6199      :: [opt] nested-name-specifier [opt] ~ type-name
6200
6201    If either of the first two productions is used, sets *SCOPE to the
6202    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
6203    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
6204    or ERROR_MARK_NODE if the parse fails.  */
6205
6206 static void
6207 cp_parser_pseudo_destructor_name (cp_parser* parser,
6208                                   tree* scope,
6209                                   tree* type)
6210 {
6211   bool nested_name_specifier_p;
6212
6213   /* Assume that things will not work out.  */
6214   *type = error_mark_node;
6215
6216   /* Look for the optional `::' operator.  */
6217   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
6218   /* Look for the optional nested-name-specifier.  */
6219   nested_name_specifier_p
6220     = (cp_parser_nested_name_specifier_opt (parser,
6221                                             /*typename_keyword_p=*/false,
6222                                             /*check_dependency_p=*/true,
6223                                             /*type_p=*/false,
6224                                             /*is_declaration=*/false)
6225        != NULL_TREE);
6226   /* Now, if we saw a nested-name-specifier, we might be doing the
6227      second production.  */
6228   if (nested_name_specifier_p
6229       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
6230     {
6231       /* Consume the `template' keyword.  */
6232       cp_lexer_consume_token (parser->lexer);
6233       /* Parse the template-id.  */
6234       cp_parser_template_id (parser,
6235                              /*template_keyword_p=*/true,
6236                              /*check_dependency_p=*/false,
6237                              /*is_declaration=*/true);
6238       /* Look for the `::' token.  */
6239       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
6240     }
6241   /* If the next token is not a `~', then there might be some
6242      additional qualification.  */
6243   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
6244     {
6245       /* At this point, we're looking for "type-name :: ~".  The type-name
6246          must not be a class-name, since this is a pseudo-destructor.  So,
6247          it must be either an enum-name, or a typedef-name -- both of which
6248          are just identifiers.  So, we peek ahead to check that the "::"
6249          and "~" tokens are present; if they are not, then we can avoid
6250          calling type_name.  */
6251       if (cp_lexer_peek_token (parser->lexer)->type != CPP_NAME
6252           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE
6253           || cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_COMPL)
6254         {
6255           cp_parser_error (parser, "non-scalar type");
6256           return;
6257         }
6258
6259       /* Look for the type-name.  */
6260       *scope = TREE_TYPE (cp_parser_nonclass_name (parser));
6261       if (*scope == error_mark_node)
6262         return;
6263
6264       /* Look for the `::' token.  */
6265       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
6266     }
6267   else
6268     *scope = NULL_TREE;
6269
6270   /* Look for the `~'.  */
6271   cp_parser_require (parser, CPP_COMPL, RT_COMPL);
6272
6273   /* Once we see the ~, this has to be a pseudo-destructor.  */
6274   if (!processing_template_decl && !cp_parser_error_occurred (parser))
6275     cp_parser_commit_to_tentative_parse (parser);
6276
6277   /* Look for the type-name again.  We are not responsible for
6278      checking that it matches the first type-name.  */
6279   *type = cp_parser_nonclass_name (parser);
6280 }
6281
6282 /* Parse a unary-expression.
6283
6284    unary-expression:
6285      postfix-expression
6286      ++ cast-expression
6287      -- cast-expression
6288      unary-operator cast-expression
6289      sizeof unary-expression
6290      sizeof ( type-id )
6291      alignof ( type-id )  [C++0x]
6292      new-expression
6293      delete-expression
6294
6295    GNU Extensions:
6296
6297    unary-expression:
6298      __extension__ cast-expression
6299      __alignof__ unary-expression
6300      __alignof__ ( type-id )
6301      alignof unary-expression  [C++0x]
6302      __real__ cast-expression
6303      __imag__ cast-expression
6304      && identifier
6305
6306    ADDRESS_P is true iff the unary-expression is appearing as the
6307    operand of the `&' operator.   CAST_P is true if this expression is
6308    the target of a cast.
6309
6310    Returns a representation of the expression.  */
6311
6312 static tree
6313 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p,
6314                             cp_id_kind * pidk)
6315 {
6316   cp_token *token;
6317   enum tree_code unary_operator;
6318
6319   /* Peek at the next token.  */
6320   token = cp_lexer_peek_token (parser->lexer);
6321   /* Some keywords give away the kind of expression.  */
6322   if (token->type == CPP_KEYWORD)
6323     {
6324       enum rid keyword = token->keyword;
6325
6326       switch (keyword)
6327         {
6328         case RID_ALIGNOF:
6329         case RID_SIZEOF:
6330           {
6331             tree operand;
6332             enum tree_code op;
6333
6334             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
6335             /* Consume the token.  */
6336             cp_lexer_consume_token (parser->lexer);
6337             /* Parse the operand.  */
6338             operand = cp_parser_sizeof_operand (parser, keyword);
6339
6340             if (TYPE_P (operand))
6341               return cxx_sizeof_or_alignof_type (operand, op, true);
6342             else
6343               {
6344                 /* ISO C++ defines alignof only with types, not with
6345                    expressions. So pedwarn if alignof is used with a non-
6346                    type expression. However, __alignof__ is ok.  */
6347                 if (!strcmp (IDENTIFIER_POINTER (token->u.value), "alignof"))
6348                   pedwarn (token->location, OPT_pedantic,
6349                            "ISO C++ does not allow %<alignof%> "
6350                            "with a non-type");
6351
6352                 return cxx_sizeof_or_alignof_expr (operand, op, true);
6353               }
6354           }
6355
6356         case RID_NEW:
6357           return cp_parser_new_expression (parser);
6358
6359         case RID_DELETE:
6360           return cp_parser_delete_expression (parser);
6361
6362         case RID_EXTENSION:
6363           {
6364             /* The saved value of the PEDANTIC flag.  */
6365             int saved_pedantic;
6366             tree expr;
6367
6368             /* Save away the PEDANTIC flag.  */
6369             cp_parser_extension_opt (parser, &saved_pedantic);
6370             /* Parse the cast-expression.  */
6371             expr = cp_parser_simple_cast_expression (parser);
6372             /* Restore the PEDANTIC flag.  */
6373             pedantic = saved_pedantic;
6374
6375             return expr;
6376           }
6377
6378         case RID_REALPART:
6379         case RID_IMAGPART:
6380           {
6381             tree expression;
6382
6383             /* Consume the `__real__' or `__imag__' token.  */
6384             cp_lexer_consume_token (parser->lexer);
6385             /* Parse the cast-expression.  */
6386             expression = cp_parser_simple_cast_expression (parser);
6387             /* Create the complete representation.  */
6388             return build_x_unary_op ((keyword == RID_REALPART
6389                                       ? REALPART_EXPR : IMAGPART_EXPR),
6390                                      expression,
6391                                      tf_warning_or_error);
6392           }
6393           break;
6394
6395         case RID_TRANSACTION_ATOMIC:
6396         case RID_TRANSACTION_RELAXED:
6397           return cp_parser_transaction_expression (parser, keyword);
6398
6399         case RID_NOEXCEPT:
6400           {
6401             tree expr;
6402             const char *saved_message;
6403             bool saved_integral_constant_expression_p;
6404             bool saved_non_integral_constant_expression_p;
6405             bool saved_greater_than_is_operator_p;
6406
6407             cp_lexer_consume_token (parser->lexer);
6408             cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
6409
6410             saved_message = parser->type_definition_forbidden_message;
6411             parser->type_definition_forbidden_message
6412               = G_("types may not be defined in %<noexcept%> expressions");
6413
6414             saved_integral_constant_expression_p
6415               = parser->integral_constant_expression_p;
6416             saved_non_integral_constant_expression_p
6417               = parser->non_integral_constant_expression_p;
6418             parser->integral_constant_expression_p = false;
6419
6420             saved_greater_than_is_operator_p
6421               = parser->greater_than_is_operator_p;
6422             parser->greater_than_is_operator_p = true;
6423
6424             ++cp_unevaluated_operand;
6425             ++c_inhibit_evaluation_warnings;
6426             expr = cp_parser_expression (parser, false, NULL);
6427             --c_inhibit_evaluation_warnings;
6428             --cp_unevaluated_operand;
6429
6430             parser->greater_than_is_operator_p
6431               = saved_greater_than_is_operator_p;
6432
6433             parser->integral_constant_expression_p
6434               = saved_integral_constant_expression_p;
6435             parser->non_integral_constant_expression_p
6436               = saved_non_integral_constant_expression_p;
6437
6438             parser->type_definition_forbidden_message = saved_message;
6439
6440             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
6441             return finish_noexcept_expr (expr, tf_warning_or_error);
6442           }
6443
6444         default:
6445           break;
6446         }
6447     }
6448
6449   /* Look for the `:: new' and `:: delete', which also signal the
6450      beginning of a new-expression, or delete-expression,
6451      respectively.  If the next token is `::', then it might be one of
6452      these.  */
6453   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
6454     {
6455       enum rid keyword;
6456
6457       /* See if the token after the `::' is one of the keywords in
6458          which we're interested.  */
6459       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
6460       /* If it's `new', we have a new-expression.  */
6461       if (keyword == RID_NEW)
6462         return cp_parser_new_expression (parser);
6463       /* Similarly, for `delete'.  */
6464       else if (keyword == RID_DELETE)
6465         return cp_parser_delete_expression (parser);
6466     }
6467
6468   /* Look for a unary operator.  */
6469   unary_operator = cp_parser_unary_operator (token);
6470   /* The `++' and `--' operators can be handled similarly, even though
6471      they are not technically unary-operators in the grammar.  */
6472   if (unary_operator == ERROR_MARK)
6473     {
6474       if (token->type == CPP_PLUS_PLUS)
6475         unary_operator = PREINCREMENT_EXPR;
6476       else if (token->type == CPP_MINUS_MINUS)
6477         unary_operator = PREDECREMENT_EXPR;
6478       /* Handle the GNU address-of-label extension.  */
6479       else if (cp_parser_allow_gnu_extensions_p (parser)
6480                && token->type == CPP_AND_AND)
6481         {
6482           tree identifier;
6483           tree expression;
6484           location_t loc = cp_lexer_peek_token (parser->lexer)->location;
6485
6486           /* Consume the '&&' token.  */
6487           cp_lexer_consume_token (parser->lexer);
6488           /* Look for the identifier.  */
6489           identifier = cp_parser_identifier (parser);
6490           /* Create an expression representing the address.  */
6491           expression = finish_label_address_expr (identifier, loc);
6492           if (cp_parser_non_integral_constant_expression (parser,
6493                                                           NIC_ADDR_LABEL))
6494             expression = error_mark_node;
6495           return expression;
6496         }
6497     }
6498   if (unary_operator != ERROR_MARK)
6499     {
6500       tree cast_expression;
6501       tree expression = error_mark_node;
6502       non_integral_constant non_constant_p = NIC_NONE;
6503
6504       /* Consume the operator token.  */
6505       token = cp_lexer_consume_token (parser->lexer);
6506       /* Parse the cast-expression.  */
6507       cast_expression
6508         = cp_parser_cast_expression (parser,
6509                                      unary_operator == ADDR_EXPR,
6510                                      /*cast_p=*/false, pidk);
6511       /* Now, build an appropriate representation.  */
6512       switch (unary_operator)
6513         {
6514         case INDIRECT_REF:
6515           non_constant_p = NIC_STAR;
6516           expression = build_x_indirect_ref (cast_expression, RO_UNARY_STAR,
6517                                              tf_warning_or_error);
6518           break;
6519
6520         case ADDR_EXPR:
6521            non_constant_p = NIC_ADDR;
6522           /* Fall through.  */
6523         case BIT_NOT_EXPR:
6524           expression = build_x_unary_op (unary_operator, cast_expression,
6525                                          tf_warning_or_error);
6526           break;
6527
6528         case PREINCREMENT_EXPR:
6529         case PREDECREMENT_EXPR:
6530           non_constant_p = unary_operator == PREINCREMENT_EXPR
6531                            ? NIC_PREINCREMENT : NIC_PREDECREMENT;
6532           /* Fall through.  */
6533         case UNARY_PLUS_EXPR:
6534         case NEGATE_EXPR:
6535         case TRUTH_NOT_EXPR:
6536           expression = finish_unary_op_expr (unary_operator, cast_expression);
6537           break;
6538
6539         default:
6540           gcc_unreachable ();
6541         }
6542
6543       if (non_constant_p != NIC_NONE
6544           && cp_parser_non_integral_constant_expression (parser,
6545                                                          non_constant_p))
6546         expression = error_mark_node;
6547
6548       return expression;
6549     }
6550
6551   return cp_parser_postfix_expression (parser, address_p, cast_p,
6552                                        /*member_access_only_p=*/false,
6553                                        pidk);
6554 }
6555
6556 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
6557    unary-operator, the corresponding tree code is returned.  */
6558
6559 static enum tree_code
6560 cp_parser_unary_operator (cp_token* token)
6561 {
6562   switch (token->type)
6563     {
6564     case CPP_MULT:
6565       return INDIRECT_REF;
6566
6567     case CPP_AND:
6568       return ADDR_EXPR;
6569
6570     case CPP_PLUS:
6571       return UNARY_PLUS_EXPR;
6572
6573     case CPP_MINUS:
6574       return NEGATE_EXPR;
6575
6576     case CPP_NOT:
6577       return TRUTH_NOT_EXPR;
6578
6579     case CPP_COMPL:
6580       return BIT_NOT_EXPR;
6581
6582     default:
6583       return ERROR_MARK;
6584     }
6585 }
6586
6587 /* Parse a new-expression.
6588
6589    new-expression:
6590      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
6591      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
6592
6593    Returns a representation of the expression.  */
6594
6595 static tree
6596 cp_parser_new_expression (cp_parser* parser)
6597 {
6598   bool global_scope_p;
6599   VEC(tree,gc) *placement;
6600   tree type;
6601   VEC(tree,gc) *initializer;
6602   tree nelts;
6603   tree ret;
6604
6605   /* Look for the optional `::' operator.  */
6606   global_scope_p
6607     = (cp_parser_global_scope_opt (parser,
6608                                    /*current_scope_valid_p=*/false)
6609        != NULL_TREE);
6610   /* Look for the `new' operator.  */
6611   cp_parser_require_keyword (parser, RID_NEW, RT_NEW);
6612   /* There's no easy way to tell a new-placement from the
6613      `( type-id )' construct.  */
6614   cp_parser_parse_tentatively (parser);
6615   /* Look for a new-placement.  */
6616   placement = cp_parser_new_placement (parser);
6617   /* If that didn't work out, there's no new-placement.  */
6618   if (!cp_parser_parse_definitely (parser))
6619     {
6620       if (placement != NULL)
6621         release_tree_vector (placement);
6622       placement = NULL;
6623     }
6624
6625   /* If the next token is a `(', then we have a parenthesized
6626      type-id.  */
6627   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
6628     {
6629       cp_token *token;
6630       /* Consume the `('.  */
6631       cp_lexer_consume_token (parser->lexer);
6632       /* Parse the type-id.  */
6633       type = cp_parser_type_id (parser);
6634       /* Look for the closing `)'.  */
6635       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
6636       token = cp_lexer_peek_token (parser->lexer);
6637       /* There should not be a direct-new-declarator in this production,
6638          but GCC used to allowed this, so we check and emit a sensible error
6639          message for this case.  */
6640       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6641         {
6642           error_at (token->location,
6643                     "array bound forbidden after parenthesized type-id");
6644           inform (token->location, 
6645                   "try removing the parentheses around the type-id");
6646           cp_parser_direct_new_declarator (parser);
6647         }
6648       nelts = NULL_TREE;
6649     }
6650   /* Otherwise, there must be a new-type-id.  */
6651   else
6652     type = cp_parser_new_type_id (parser, &nelts);
6653
6654   /* If the next token is a `(' or '{', then we have a new-initializer.  */
6655   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
6656       || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6657     initializer = cp_parser_new_initializer (parser);
6658   else
6659     initializer = NULL;
6660
6661   /* A new-expression may not appear in an integral constant
6662      expression.  */
6663   if (cp_parser_non_integral_constant_expression (parser, NIC_NEW))
6664     ret = error_mark_node;
6665   else
6666     {
6667       /* Create a representation of the new-expression.  */
6668       ret = build_new (&placement, type, nelts, &initializer, global_scope_p,
6669                        tf_warning_or_error);
6670     }
6671
6672   if (placement != NULL)
6673     release_tree_vector (placement);
6674   if (initializer != NULL)
6675     release_tree_vector (initializer);
6676
6677   return ret;
6678 }
6679
6680 /* Parse a new-placement.
6681
6682    new-placement:
6683      ( expression-list )
6684
6685    Returns the same representation as for an expression-list.  */
6686
6687 static VEC(tree,gc) *
6688 cp_parser_new_placement (cp_parser* parser)
6689 {
6690   VEC(tree,gc) *expression_list;
6691
6692   /* Parse the expression-list.  */
6693   expression_list = (cp_parser_parenthesized_expression_list
6694                      (parser, non_attr, /*cast_p=*/false,
6695                       /*allow_expansion_p=*/true,
6696                       /*non_constant_p=*/NULL));
6697
6698   return expression_list;
6699 }
6700
6701 /* Parse a new-type-id.
6702
6703    new-type-id:
6704      type-specifier-seq new-declarator [opt]
6705
6706    Returns the TYPE allocated.  If the new-type-id indicates an array
6707    type, *NELTS is set to the number of elements in the last array
6708    bound; the TYPE will not include the last array bound.  */
6709
6710 static tree
6711 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
6712 {
6713   cp_decl_specifier_seq type_specifier_seq;
6714   cp_declarator *new_declarator;
6715   cp_declarator *declarator;
6716   cp_declarator *outer_declarator;
6717   const char *saved_message;
6718   tree type;
6719
6720   /* The type-specifier sequence must not contain type definitions.
6721      (It cannot contain declarations of new types either, but if they
6722      are not definitions we will catch that because they are not
6723      complete.)  */
6724   saved_message = parser->type_definition_forbidden_message;
6725   parser->type_definition_forbidden_message
6726     = G_("types may not be defined in a new-type-id");
6727   /* Parse the type-specifier-seq.  */
6728   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
6729                                 /*is_trailing_return=*/false,
6730                                 &type_specifier_seq);
6731   /* Restore the old message.  */
6732   parser->type_definition_forbidden_message = saved_message;
6733   /* Parse the new-declarator.  */
6734   new_declarator = cp_parser_new_declarator_opt (parser);
6735
6736   /* Determine the number of elements in the last array dimension, if
6737      any.  */
6738   *nelts = NULL_TREE;
6739   /* Skip down to the last array dimension.  */
6740   declarator = new_declarator;
6741   outer_declarator = NULL;
6742   while (declarator && (declarator->kind == cdk_pointer
6743                         || declarator->kind == cdk_ptrmem))
6744     {
6745       outer_declarator = declarator;
6746       declarator = declarator->declarator;
6747     }
6748   while (declarator
6749          && declarator->kind == cdk_array
6750          && declarator->declarator
6751          && declarator->declarator->kind == cdk_array)
6752     {
6753       outer_declarator = declarator;
6754       declarator = declarator->declarator;
6755     }
6756
6757   if (declarator && declarator->kind == cdk_array)
6758     {
6759       *nelts = declarator->u.array.bounds;
6760       if (*nelts == error_mark_node)
6761         *nelts = integer_one_node;
6762
6763       if (outer_declarator)
6764         outer_declarator->declarator = declarator->declarator;
6765       else
6766         new_declarator = NULL;
6767     }
6768
6769   type = groktypename (&type_specifier_seq, new_declarator, false);
6770   return type;
6771 }
6772
6773 /* Parse an (optional) new-declarator.
6774
6775    new-declarator:
6776      ptr-operator new-declarator [opt]
6777      direct-new-declarator
6778
6779    Returns the declarator.  */
6780
6781 static cp_declarator *
6782 cp_parser_new_declarator_opt (cp_parser* parser)
6783 {
6784   enum tree_code code;
6785   tree type;
6786   cp_cv_quals cv_quals;
6787
6788   /* We don't know if there's a ptr-operator next, or not.  */
6789   cp_parser_parse_tentatively (parser);
6790   /* Look for a ptr-operator.  */
6791   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
6792   /* If that worked, look for more new-declarators.  */
6793   if (cp_parser_parse_definitely (parser))
6794     {
6795       cp_declarator *declarator;
6796
6797       /* Parse another optional declarator.  */
6798       declarator = cp_parser_new_declarator_opt (parser);
6799
6800       return cp_parser_make_indirect_declarator
6801         (code, type, cv_quals, declarator);
6802     }
6803
6804   /* If the next token is a `[', there is a direct-new-declarator.  */
6805   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6806     return cp_parser_direct_new_declarator (parser);
6807
6808   return NULL;
6809 }
6810
6811 /* Parse a direct-new-declarator.
6812
6813    direct-new-declarator:
6814      [ expression ]
6815      direct-new-declarator [constant-expression]
6816
6817    */
6818
6819 static cp_declarator *
6820 cp_parser_direct_new_declarator (cp_parser* parser)
6821 {
6822   cp_declarator *declarator = NULL;
6823
6824   while (true)
6825     {
6826       tree expression;
6827
6828       /* Look for the opening `['.  */
6829       cp_parser_require (parser, CPP_OPEN_SQUARE, RT_OPEN_SQUARE);
6830       /* The first expression is not required to be constant.  */
6831       if (!declarator)
6832         {
6833           cp_token *token = cp_lexer_peek_token (parser->lexer);
6834           expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
6835           /* The standard requires that the expression have integral
6836              type.  DR 74 adds enumeration types.  We believe that the
6837              real intent is that these expressions be handled like the
6838              expression in a `switch' condition, which also allows
6839              classes with a single conversion to integral or
6840              enumeration type.  */
6841           if (!processing_template_decl)
6842             {
6843               expression
6844                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
6845                                               expression,
6846                                               /*complain=*/true);
6847               if (!expression)
6848                 {
6849                   error_at (token->location,
6850                             "expression in new-declarator must have integral "
6851                             "or enumeration type");
6852                   expression = error_mark_node;
6853                 }
6854             }
6855         }
6856       /* But all the other expressions must be.  */
6857       else
6858         expression
6859           = cp_parser_constant_expression (parser,
6860                                            /*allow_non_constant=*/false,
6861                                            NULL);
6862       /* Look for the closing `]'.  */
6863       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
6864
6865       /* Add this bound to the declarator.  */
6866       declarator = make_array_declarator (declarator, expression);
6867
6868       /* If the next token is not a `[', then there are no more
6869          bounds.  */
6870       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
6871         break;
6872     }
6873
6874   return declarator;
6875 }
6876
6877 /* Parse a new-initializer.
6878
6879    new-initializer:
6880      ( expression-list [opt] )
6881      braced-init-list
6882
6883    Returns a representation of the expression-list.  */
6884
6885 static VEC(tree,gc) *
6886 cp_parser_new_initializer (cp_parser* parser)
6887 {
6888   VEC(tree,gc) *expression_list;
6889
6890   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6891     {
6892       tree t;
6893       bool expr_non_constant_p;
6894       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6895       t = cp_parser_braced_list (parser, &expr_non_constant_p);
6896       CONSTRUCTOR_IS_DIRECT_INIT (t) = 1;
6897       expression_list = make_tree_vector_single (t);
6898     }
6899   else
6900     expression_list = (cp_parser_parenthesized_expression_list
6901                        (parser, non_attr, /*cast_p=*/false,
6902                         /*allow_expansion_p=*/true,
6903                         /*non_constant_p=*/NULL));
6904
6905   return expression_list;
6906 }
6907
6908 /* Parse a delete-expression.
6909
6910    delete-expression:
6911      :: [opt] delete cast-expression
6912      :: [opt] delete [ ] cast-expression
6913
6914    Returns a representation of the expression.  */
6915
6916 static tree
6917 cp_parser_delete_expression (cp_parser* parser)
6918 {
6919   bool global_scope_p;
6920   bool array_p;
6921   tree expression;
6922
6923   /* Look for the optional `::' operator.  */
6924   global_scope_p
6925     = (cp_parser_global_scope_opt (parser,
6926                                    /*current_scope_valid_p=*/false)
6927        != NULL_TREE);
6928   /* Look for the `delete' keyword.  */
6929   cp_parser_require_keyword (parser, RID_DELETE, RT_DELETE);
6930   /* See if the array syntax is in use.  */
6931   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6932     {
6933       /* Consume the `[' token.  */
6934       cp_lexer_consume_token (parser->lexer);
6935       /* Look for the `]' token.  */
6936       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
6937       /* Remember that this is the `[]' construct.  */
6938       array_p = true;
6939     }
6940   else
6941     array_p = false;
6942
6943   /* Parse the cast-expression.  */
6944   expression = cp_parser_simple_cast_expression (parser);
6945
6946   /* A delete-expression may not appear in an integral constant
6947      expression.  */
6948   if (cp_parser_non_integral_constant_expression (parser, NIC_DEL))
6949     return error_mark_node;
6950
6951   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p,
6952                         tf_warning_or_error);
6953 }
6954
6955 /* Returns true if TOKEN may start a cast-expression and false
6956    otherwise.  */
6957
6958 static bool
6959 cp_parser_token_starts_cast_expression (cp_token *token)
6960 {
6961   switch (token->type)
6962     {
6963     case CPP_COMMA:
6964     case CPP_SEMICOLON:
6965     case CPP_QUERY:
6966     case CPP_COLON:
6967     case CPP_CLOSE_SQUARE:
6968     case CPP_CLOSE_PAREN:
6969     case CPP_CLOSE_BRACE:
6970     case CPP_DOT:
6971     case CPP_DOT_STAR:
6972     case CPP_DEREF:
6973     case CPP_DEREF_STAR:
6974     case CPP_DIV:
6975     case CPP_MOD:
6976     case CPP_LSHIFT:
6977     case CPP_RSHIFT:
6978     case CPP_LESS:
6979     case CPP_GREATER:
6980     case CPP_LESS_EQ:
6981     case CPP_GREATER_EQ:
6982     case CPP_EQ_EQ:
6983     case CPP_NOT_EQ:
6984     case CPP_EQ:
6985     case CPP_MULT_EQ:
6986     case CPP_DIV_EQ:
6987     case CPP_MOD_EQ:
6988     case CPP_PLUS_EQ:
6989     case CPP_MINUS_EQ:
6990     case CPP_RSHIFT_EQ:
6991     case CPP_LSHIFT_EQ:
6992     case CPP_AND_EQ:
6993     case CPP_XOR_EQ:
6994     case CPP_OR_EQ:
6995     case CPP_XOR:
6996     case CPP_OR:
6997     case CPP_OR_OR:
6998     case CPP_EOF:
6999       return false;
7000
7001       /* '[' may start a primary-expression in obj-c++.  */
7002     case CPP_OPEN_SQUARE:
7003       return c_dialect_objc ();
7004
7005     default:
7006       return true;
7007     }
7008 }
7009
7010 /* Parse a cast-expression.
7011
7012    cast-expression:
7013      unary-expression
7014      ( type-id ) cast-expression
7015
7016    ADDRESS_P is true iff the unary-expression is appearing as the
7017    operand of the `&' operator.   CAST_P is true if this expression is
7018    the target of a cast.
7019
7020    Returns a representation of the expression.  */
7021
7022 static tree
7023 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p,
7024                            cp_id_kind * pidk)
7025 {
7026   /* If it's a `(', then we might be looking at a cast.  */
7027   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
7028     {
7029       tree type = NULL_TREE;
7030       tree expr = NULL_TREE;
7031       bool compound_literal_p;
7032       const char *saved_message;
7033
7034       /* There's no way to know yet whether or not this is a cast.
7035          For example, `(int (3))' is a unary-expression, while `(int)
7036          3' is a cast.  So, we resort to parsing tentatively.  */
7037       cp_parser_parse_tentatively (parser);
7038       /* Types may not be defined in a cast.  */
7039       saved_message = parser->type_definition_forbidden_message;
7040       parser->type_definition_forbidden_message
7041         = G_("types may not be defined in casts");
7042       /* Consume the `('.  */
7043       cp_lexer_consume_token (parser->lexer);
7044       /* A very tricky bit is that `(struct S) { 3 }' is a
7045          compound-literal (which we permit in C++ as an extension).
7046          But, that construct is not a cast-expression -- it is a
7047          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
7048          is legal; if the compound-literal were a cast-expression,
7049          you'd need an extra set of parentheses.)  But, if we parse
7050          the type-id, and it happens to be a class-specifier, then we
7051          will commit to the parse at that point, because we cannot
7052          undo the action that is done when creating a new class.  So,
7053          then we cannot back up and do a postfix-expression.
7054
7055          Therefore, we scan ahead to the closing `)', and check to see
7056          if the token after the `)' is a `{'.  If so, we are not
7057          looking at a cast-expression.
7058
7059          Save tokens so that we can put them back.  */
7060       cp_lexer_save_tokens (parser->lexer);
7061       /* Skip tokens until the next token is a closing parenthesis.
7062          If we find the closing `)', and the next token is a `{', then
7063          we are looking at a compound-literal.  */
7064       compound_literal_p
7065         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
7066                                                   /*consume_paren=*/true)
7067            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
7068       /* Roll back the tokens we skipped.  */
7069       cp_lexer_rollback_tokens (parser->lexer);
7070       /* If we were looking at a compound-literal, simulate an error
7071          so that the call to cp_parser_parse_definitely below will
7072          fail.  */
7073       if (compound_literal_p)
7074         cp_parser_simulate_error (parser);
7075       else
7076         {
7077           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
7078           parser->in_type_id_in_expr_p = true;
7079           /* Look for the type-id.  */
7080           type = cp_parser_type_id (parser);
7081           /* Look for the closing `)'.  */
7082           cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7083           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
7084         }
7085
7086       /* Restore the saved message.  */
7087       parser->type_definition_forbidden_message = saved_message;
7088
7089       /* At this point this can only be either a cast or a
7090          parenthesized ctor such as `(T ())' that looks like a cast to
7091          function returning T.  */
7092       if (!cp_parser_error_occurred (parser)
7093           && cp_parser_token_starts_cast_expression (cp_lexer_peek_token
7094                                                      (parser->lexer)))
7095         {
7096           cp_parser_parse_definitely (parser);
7097           expr = cp_parser_cast_expression (parser,
7098                                             /*address_p=*/false,
7099                                             /*cast_p=*/true, pidk);
7100
7101           /* Warn about old-style casts, if so requested.  */
7102           if (warn_old_style_cast
7103               && !in_system_header
7104               && !VOID_TYPE_P (type)
7105               && current_lang_name != lang_name_c)
7106             warning (OPT_Wold_style_cast, "use of old-style cast");
7107
7108           /* Only type conversions to integral or enumeration types
7109              can be used in constant-expressions.  */
7110           if (!cast_valid_in_integral_constant_expression_p (type)
7111               && cp_parser_non_integral_constant_expression (parser,
7112                                                              NIC_CAST))
7113             return error_mark_node;
7114
7115           /* Perform the cast.  */
7116           expr = build_c_cast (input_location, type, expr);
7117           return expr;
7118         }
7119       else 
7120         cp_parser_abort_tentative_parse (parser);
7121     }
7122
7123   /* If we get here, then it's not a cast, so it must be a
7124      unary-expression.  */
7125   return cp_parser_unary_expression (parser, address_p, cast_p, pidk);
7126 }
7127
7128 /* Parse a binary expression of the general form:
7129
7130    pm-expression:
7131      cast-expression
7132      pm-expression .* cast-expression
7133      pm-expression ->* cast-expression
7134
7135    multiplicative-expression:
7136      pm-expression
7137      multiplicative-expression * pm-expression
7138      multiplicative-expression / pm-expression
7139      multiplicative-expression % pm-expression
7140
7141    additive-expression:
7142      multiplicative-expression
7143      additive-expression + multiplicative-expression
7144      additive-expression - multiplicative-expression
7145
7146    shift-expression:
7147      additive-expression
7148      shift-expression << additive-expression
7149      shift-expression >> additive-expression
7150
7151    relational-expression:
7152      shift-expression
7153      relational-expression < shift-expression
7154      relational-expression > shift-expression
7155      relational-expression <= shift-expression
7156      relational-expression >= shift-expression
7157
7158   GNU Extension:
7159
7160    relational-expression:
7161      relational-expression <? shift-expression
7162      relational-expression >? shift-expression
7163
7164    equality-expression:
7165      relational-expression
7166      equality-expression == relational-expression
7167      equality-expression != relational-expression
7168
7169    and-expression:
7170      equality-expression
7171      and-expression & equality-expression
7172
7173    exclusive-or-expression:
7174      and-expression
7175      exclusive-or-expression ^ and-expression
7176
7177    inclusive-or-expression:
7178      exclusive-or-expression
7179      inclusive-or-expression | exclusive-or-expression
7180
7181    logical-and-expression:
7182      inclusive-or-expression
7183      logical-and-expression && inclusive-or-expression
7184
7185    logical-or-expression:
7186      logical-and-expression
7187      logical-or-expression || logical-and-expression
7188
7189    All these are implemented with a single function like:
7190
7191    binary-expression:
7192      simple-cast-expression
7193      binary-expression <token> binary-expression
7194
7195    CAST_P is true if this expression is the target of a cast.
7196
7197    The binops_by_token map is used to get the tree codes for each <token> type.
7198    binary-expressions are associated according to a precedence table.  */
7199
7200 #define TOKEN_PRECEDENCE(token)                              \
7201 (((token->type == CPP_GREATER                                \
7202    || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT)) \
7203   && !parser->greater_than_is_operator_p)                    \
7204  ? PREC_NOT_OPERATOR                                         \
7205  : binops_by_token[token->type].prec)
7206
7207 static tree
7208 cp_parser_binary_expression (cp_parser* parser, bool cast_p,
7209                              bool no_toplevel_fold_p,
7210                              enum cp_parser_prec prec,
7211                              cp_id_kind * pidk)
7212 {
7213   cp_parser_expression_stack stack;
7214   cp_parser_expression_stack_entry *sp = &stack[0];
7215   tree lhs, rhs;
7216   cp_token *token;
7217   enum tree_code tree_type, lhs_type, rhs_type;
7218   enum cp_parser_prec new_prec, lookahead_prec;
7219   tree overload;
7220
7221   /* Parse the first expression.  */
7222   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p, pidk);
7223   lhs_type = ERROR_MARK;
7224
7225   for (;;)
7226     {
7227       /* Get an operator token.  */
7228       token = cp_lexer_peek_token (parser->lexer);
7229
7230       if (warn_cxx0x_compat
7231           && token->type == CPP_RSHIFT
7232           && !parser->greater_than_is_operator_p)
7233         {
7234           if (warning_at (token->location, OPT_Wc__0x_compat, 
7235                           "%<>>%> operator is treated as"
7236                           " two right angle brackets in C++11"))
7237             inform (token->location,
7238                     "suggest parentheses around %<>>%> expression");
7239         }
7240
7241       new_prec = TOKEN_PRECEDENCE (token);
7242
7243       /* Popping an entry off the stack means we completed a subexpression:
7244          - either we found a token which is not an operator (`>' where it is not
7245            an operator, or prec == PREC_NOT_OPERATOR), in which case popping
7246            will happen repeatedly;
7247          - or, we found an operator which has lower priority.  This is the case
7248            where the recursive descent *ascends*, as in `3 * 4 + 5' after
7249            parsing `3 * 4'.  */
7250       if (new_prec <= prec)
7251         {
7252           if (sp == stack)
7253             break;
7254           else
7255             goto pop;
7256         }
7257
7258      get_rhs:
7259       tree_type = binops_by_token[token->type].tree_type;
7260
7261       /* We used the operator token.  */
7262       cp_lexer_consume_token (parser->lexer);
7263
7264       /* For "false && x" or "true || x", x will never be executed;
7265          disable warnings while evaluating it.  */
7266       if (tree_type == TRUTH_ANDIF_EXPR)
7267         c_inhibit_evaluation_warnings += lhs == truthvalue_false_node;
7268       else if (tree_type == TRUTH_ORIF_EXPR)
7269         c_inhibit_evaluation_warnings += lhs == truthvalue_true_node;
7270
7271       /* Extract another operand.  It may be the RHS of this expression
7272          or the LHS of a new, higher priority expression.  */
7273       rhs = cp_parser_simple_cast_expression (parser);
7274       rhs_type = ERROR_MARK;
7275
7276       /* Get another operator token.  Look up its precedence to avoid
7277          building a useless (immediately popped) stack entry for common
7278          cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
7279       token = cp_lexer_peek_token (parser->lexer);
7280       lookahead_prec = TOKEN_PRECEDENCE (token);
7281       if (lookahead_prec > new_prec)
7282         {
7283           /* ... and prepare to parse the RHS of the new, higher priority
7284              expression.  Since precedence levels on the stack are
7285              monotonically increasing, we do not have to care about
7286              stack overflows.  */
7287           sp->prec = prec;
7288           sp->tree_type = tree_type;
7289           sp->lhs = lhs;
7290           sp->lhs_type = lhs_type;
7291           sp++;
7292           lhs = rhs;
7293           lhs_type = rhs_type;
7294           prec = new_prec;
7295           new_prec = lookahead_prec;
7296           goto get_rhs;
7297
7298          pop:
7299           lookahead_prec = new_prec;
7300           /* If the stack is not empty, we have parsed into LHS the right side
7301              (`4' in the example above) of an expression we had suspended.
7302              We can use the information on the stack to recover the LHS (`3')
7303              from the stack together with the tree code (`MULT_EXPR'), and
7304              the precedence of the higher level subexpression
7305              (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
7306              which will be used to actually build the additive expression.  */
7307           --sp;
7308           prec = sp->prec;
7309           tree_type = sp->tree_type;
7310           rhs = lhs;
7311           rhs_type = lhs_type;
7312           lhs = sp->lhs;
7313           lhs_type = sp->lhs_type;
7314         }
7315
7316       /* Undo the disabling of warnings done above.  */
7317       if (tree_type == TRUTH_ANDIF_EXPR)
7318         c_inhibit_evaluation_warnings -= lhs == truthvalue_false_node;
7319       else if (tree_type == TRUTH_ORIF_EXPR)
7320         c_inhibit_evaluation_warnings -= lhs == truthvalue_true_node;
7321
7322       overload = NULL;
7323       /* ??? Currently we pass lhs_type == ERROR_MARK and rhs_type ==
7324          ERROR_MARK for everything that is not a binary expression.
7325          This makes warn_about_parentheses miss some warnings that
7326          involve unary operators.  For unary expressions we should
7327          pass the correct tree_code unless the unary expression was
7328          surrounded by parentheses.
7329       */
7330       if (no_toplevel_fold_p
7331           && lookahead_prec <= prec
7332           && sp == stack
7333           && TREE_CODE_CLASS (tree_type) == tcc_comparison)
7334         lhs = build2 (tree_type, boolean_type_node, lhs, rhs);
7335       else
7336         lhs = build_x_binary_op (tree_type, lhs, lhs_type, rhs, rhs_type,
7337                                  &overload, tf_warning_or_error);
7338       lhs_type = tree_type;
7339
7340       /* If the binary operator required the use of an overloaded operator,
7341          then this expression cannot be an integral constant-expression.
7342          An overloaded operator can be used even if both operands are
7343          otherwise permissible in an integral constant-expression if at
7344          least one of the operands is of enumeration type.  */
7345
7346       if (overload
7347           && cp_parser_non_integral_constant_expression (parser,
7348                                                          NIC_OVERLOADED))
7349         return error_mark_node;
7350     }
7351
7352   return lhs;
7353 }
7354
7355
7356 /* Parse the `? expression : assignment-expression' part of a
7357    conditional-expression.  The LOGICAL_OR_EXPR is the
7358    logical-or-expression that started the conditional-expression.
7359    Returns a representation of the entire conditional-expression.
7360
7361    This routine is used by cp_parser_assignment_expression.
7362
7363      ? expression : assignment-expression
7364
7365    GNU Extensions:
7366
7367      ? : assignment-expression */
7368
7369 static tree
7370 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
7371 {
7372   tree expr;
7373   tree assignment_expr;
7374   struct cp_token *token;
7375
7376   /* Consume the `?' token.  */
7377   cp_lexer_consume_token (parser->lexer);
7378   token = cp_lexer_peek_token (parser->lexer);
7379   if (cp_parser_allow_gnu_extensions_p (parser)
7380       && token->type == CPP_COLON)
7381     {
7382       pedwarn (token->location, OPT_pedantic, 
7383                "ISO C++ does not allow ?: with omitted middle operand");
7384       /* Implicit true clause.  */
7385       expr = NULL_TREE;
7386       c_inhibit_evaluation_warnings += logical_or_expr == truthvalue_true_node;
7387       warn_for_omitted_condop (token->location, logical_or_expr);
7388     }
7389   else
7390     {
7391       bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
7392       parser->colon_corrects_to_scope_p = false;
7393       /* Parse the expression.  */
7394       c_inhibit_evaluation_warnings += logical_or_expr == truthvalue_false_node;
7395       expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
7396       c_inhibit_evaluation_warnings +=
7397         ((logical_or_expr == truthvalue_true_node)
7398          - (logical_or_expr == truthvalue_false_node));
7399       parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
7400     }
7401
7402   /* The next token should be a `:'.  */
7403   cp_parser_require (parser, CPP_COLON, RT_COLON);
7404   /* Parse the assignment-expression.  */
7405   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
7406   c_inhibit_evaluation_warnings -= logical_or_expr == truthvalue_true_node;
7407
7408   /* Build the conditional-expression.  */
7409   return build_x_conditional_expr (logical_or_expr,
7410                                    expr,
7411                                    assignment_expr,
7412                                    tf_warning_or_error);
7413 }
7414
7415 /* Parse an assignment-expression.
7416
7417    assignment-expression:
7418      conditional-expression
7419      logical-or-expression assignment-operator assignment_expression
7420      throw-expression
7421
7422    CAST_P is true if this expression is the target of a cast.
7423
7424    Returns a representation for the expression.  */
7425
7426 static tree
7427 cp_parser_assignment_expression (cp_parser* parser, bool cast_p,
7428                                  cp_id_kind * pidk)
7429 {
7430   tree expr;
7431
7432   /* If the next token is the `throw' keyword, then we're looking at
7433      a throw-expression.  */
7434   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
7435     expr = cp_parser_throw_expression (parser);
7436   /* Otherwise, it must be that we are looking at a
7437      logical-or-expression.  */
7438   else
7439     {
7440       /* Parse the binary expressions (logical-or-expression).  */
7441       expr = cp_parser_binary_expression (parser, cast_p, false,
7442                                           PREC_NOT_OPERATOR, pidk);
7443       /* If the next token is a `?' then we're actually looking at a
7444          conditional-expression.  */
7445       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
7446         return cp_parser_question_colon_clause (parser, expr);
7447       else
7448         {
7449           enum tree_code assignment_operator;
7450
7451           /* If it's an assignment-operator, we're using the second
7452              production.  */
7453           assignment_operator
7454             = cp_parser_assignment_operator_opt (parser);
7455           if (assignment_operator != ERROR_MARK)
7456             {
7457               bool non_constant_p;
7458
7459               /* Parse the right-hand side of the assignment.  */
7460               tree rhs = cp_parser_initializer_clause (parser, &non_constant_p);
7461
7462               if (BRACE_ENCLOSED_INITIALIZER_P (rhs))
7463                 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
7464
7465               /* An assignment may not appear in a
7466                  constant-expression.  */
7467               if (cp_parser_non_integral_constant_expression (parser,
7468                                                               NIC_ASSIGNMENT))
7469                 return error_mark_node;
7470               /* Build the assignment expression.  */
7471               expr = build_x_modify_expr (expr,
7472                                           assignment_operator,
7473                                           rhs,
7474                                           tf_warning_or_error);
7475             }
7476         }
7477     }
7478
7479   return expr;
7480 }
7481
7482 /* Parse an (optional) assignment-operator.
7483
7484    assignment-operator: one of
7485      = *= /= %= += -= >>= <<= &= ^= |=
7486
7487    GNU Extension:
7488
7489    assignment-operator: one of
7490      <?= >?=
7491
7492    If the next token is an assignment operator, the corresponding tree
7493    code is returned, and the token is consumed.  For example, for
7494    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
7495    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
7496    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
7497    operator, ERROR_MARK is returned.  */
7498
7499 static enum tree_code
7500 cp_parser_assignment_operator_opt (cp_parser* parser)
7501 {
7502   enum tree_code op;
7503   cp_token *token;
7504
7505   /* Peek at the next token.  */
7506   token = cp_lexer_peek_token (parser->lexer);
7507
7508   switch (token->type)
7509     {
7510     case CPP_EQ:
7511       op = NOP_EXPR;
7512       break;
7513
7514     case CPP_MULT_EQ:
7515       op = MULT_EXPR;
7516       break;
7517
7518     case CPP_DIV_EQ:
7519       op = TRUNC_DIV_EXPR;
7520       break;
7521
7522     case CPP_MOD_EQ:
7523       op = TRUNC_MOD_EXPR;
7524       break;
7525
7526     case CPP_PLUS_EQ:
7527       op = PLUS_EXPR;
7528       break;
7529
7530     case CPP_MINUS_EQ:
7531       op = MINUS_EXPR;
7532       break;
7533
7534     case CPP_RSHIFT_EQ:
7535       op = RSHIFT_EXPR;
7536       break;
7537
7538     case CPP_LSHIFT_EQ:
7539       op = LSHIFT_EXPR;
7540       break;
7541
7542     case CPP_AND_EQ:
7543       op = BIT_AND_EXPR;
7544       break;
7545
7546     case CPP_XOR_EQ:
7547       op = BIT_XOR_EXPR;
7548       break;
7549
7550     case CPP_OR_EQ:
7551       op = BIT_IOR_EXPR;
7552       break;
7553
7554     default:
7555       /* Nothing else is an assignment operator.  */
7556       op = ERROR_MARK;
7557     }
7558
7559   /* If it was an assignment operator, consume it.  */
7560   if (op != ERROR_MARK)
7561     cp_lexer_consume_token (parser->lexer);
7562
7563   return op;
7564 }
7565
7566 /* Parse an expression.
7567
7568    expression:
7569      assignment-expression
7570      expression , assignment-expression
7571
7572    CAST_P is true if this expression is the target of a cast.
7573
7574    Returns a representation of the expression.  */
7575
7576 static tree
7577 cp_parser_expression (cp_parser* parser, bool cast_p, cp_id_kind * pidk)
7578 {
7579   tree expression = NULL_TREE;
7580
7581   while (true)
7582     {
7583       tree assignment_expression;
7584
7585       /* Parse the next assignment-expression.  */
7586       assignment_expression
7587         = cp_parser_assignment_expression (parser, cast_p, pidk);
7588       /* If this is the first assignment-expression, we can just
7589          save it away.  */
7590       if (!expression)
7591         expression = assignment_expression;
7592       else
7593         expression = build_x_compound_expr (expression,
7594                                             assignment_expression,
7595                                             tf_warning_or_error);
7596       /* If the next token is not a comma, then we are done with the
7597          expression.  */
7598       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
7599         break;
7600       /* Consume the `,'.  */
7601       cp_lexer_consume_token (parser->lexer);
7602       /* A comma operator cannot appear in a constant-expression.  */
7603       if (cp_parser_non_integral_constant_expression (parser, NIC_COMMA))
7604         expression = error_mark_node;
7605     }
7606
7607   return expression;
7608 }
7609
7610 /* Parse a constant-expression.
7611
7612    constant-expression:
7613      conditional-expression
7614
7615   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
7616   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
7617   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
7618   is false, NON_CONSTANT_P should be NULL.  */
7619
7620 static tree
7621 cp_parser_constant_expression (cp_parser* parser,
7622                                bool allow_non_constant_p,
7623                                bool *non_constant_p)
7624 {
7625   bool saved_integral_constant_expression_p;
7626   bool saved_allow_non_integral_constant_expression_p;
7627   bool saved_non_integral_constant_expression_p;
7628   tree expression;
7629
7630   /* It might seem that we could simply parse the
7631      conditional-expression, and then check to see if it were
7632      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
7633      one that the compiler can figure out is constant, possibly after
7634      doing some simplifications or optimizations.  The standard has a
7635      precise definition of constant-expression, and we must honor
7636      that, even though it is somewhat more restrictive.
7637
7638      For example:
7639
7640        int i[(2, 3)];
7641
7642      is not a legal declaration, because `(2, 3)' is not a
7643      constant-expression.  The `,' operator is forbidden in a
7644      constant-expression.  However, GCC's constant-folding machinery
7645      will fold this operation to an INTEGER_CST for `3'.  */
7646
7647   /* Save the old settings.  */
7648   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
7649   saved_allow_non_integral_constant_expression_p
7650     = parser->allow_non_integral_constant_expression_p;
7651   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
7652   /* We are now parsing a constant-expression.  */
7653   parser->integral_constant_expression_p = true;
7654   parser->allow_non_integral_constant_expression_p
7655     = (allow_non_constant_p || cxx_dialect >= cxx0x);
7656   parser->non_integral_constant_expression_p = false;
7657   /* Although the grammar says "conditional-expression", we parse an
7658      "assignment-expression", which also permits "throw-expression"
7659      and the use of assignment operators.  In the case that
7660      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
7661      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
7662      actually essential that we look for an assignment-expression.
7663      For example, cp_parser_initializer_clauses uses this function to
7664      determine whether a particular assignment-expression is in fact
7665      constant.  */
7666   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
7667   /* Restore the old settings.  */
7668   parser->integral_constant_expression_p
7669     = saved_integral_constant_expression_p;
7670   parser->allow_non_integral_constant_expression_p
7671     = saved_allow_non_integral_constant_expression_p;
7672   if (cxx_dialect >= cxx0x)
7673     {
7674       /* Require an rvalue constant expression here; that's what our
7675          callers expect.  Reference constant expressions are handled
7676          separately in e.g. cp_parser_template_argument.  */
7677       bool is_const = potential_rvalue_constant_expression (expression);
7678       parser->non_integral_constant_expression_p = !is_const;
7679       if (!is_const && !allow_non_constant_p)
7680         require_potential_rvalue_constant_expression (expression);
7681     }
7682   if (allow_non_constant_p)
7683     *non_constant_p = parser->non_integral_constant_expression_p;
7684   parser->non_integral_constant_expression_p
7685     = saved_non_integral_constant_expression_p;
7686
7687   return expression;
7688 }
7689
7690 /* Parse __builtin_offsetof.
7691
7692    offsetof-expression:
7693      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
7694
7695    offsetof-member-designator:
7696      id-expression
7697      | offsetof-member-designator "." id-expression
7698      | offsetof-member-designator "[" expression "]"
7699      | offsetof-member-designator "->" id-expression  */
7700
7701 static tree
7702 cp_parser_builtin_offsetof (cp_parser *parser)
7703 {
7704   int save_ice_p, save_non_ice_p;
7705   tree type, expr;
7706   cp_id_kind dummy;
7707   cp_token *token;
7708
7709   /* We're about to accept non-integral-constant things, but will
7710      definitely yield an integral constant expression.  Save and
7711      restore these values around our local parsing.  */
7712   save_ice_p = parser->integral_constant_expression_p;
7713   save_non_ice_p = parser->non_integral_constant_expression_p;
7714
7715   /* Consume the "__builtin_offsetof" token.  */
7716   cp_lexer_consume_token (parser->lexer);
7717   /* Consume the opening `('.  */
7718   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
7719   /* Parse the type-id.  */
7720   type = cp_parser_type_id (parser);
7721   /* Look for the `,'.  */
7722   cp_parser_require (parser, CPP_COMMA, RT_COMMA);
7723   token = cp_lexer_peek_token (parser->lexer);
7724
7725   /* Build the (type *)null that begins the traditional offsetof macro.  */
7726   expr = build_static_cast (build_pointer_type (type), null_pointer_node,
7727                             tf_warning_or_error);
7728
7729   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
7730   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
7731                                                  true, &dummy, token->location);
7732   while (true)
7733     {
7734       token = cp_lexer_peek_token (parser->lexer);
7735       switch (token->type)
7736         {
7737         case CPP_OPEN_SQUARE:
7738           /* offsetof-member-designator "[" expression "]" */
7739           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
7740           break;
7741
7742         case CPP_DEREF:
7743           /* offsetof-member-designator "->" identifier */
7744           expr = grok_array_decl (expr, integer_zero_node);
7745           /* FALLTHRU */
7746
7747         case CPP_DOT:
7748           /* offsetof-member-designator "." identifier */
7749           cp_lexer_consume_token (parser->lexer);
7750           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT,
7751                                                          expr, true, &dummy,
7752                                                          token->location);
7753           break;
7754
7755         case CPP_CLOSE_PAREN:
7756           /* Consume the ")" token.  */
7757           cp_lexer_consume_token (parser->lexer);
7758           goto success;
7759
7760         default:
7761           /* Error.  We know the following require will fail, but
7762              that gives the proper error message.  */
7763           cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7764           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
7765           expr = error_mark_node;
7766           goto failure;
7767         }
7768     }
7769
7770  success:
7771   /* If we're processing a template, we can't finish the semantics yet.
7772      Otherwise we can fold the entire expression now.  */
7773   if (processing_template_decl)
7774     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
7775   else
7776     expr = finish_offsetof (expr);
7777
7778  failure:
7779   parser->integral_constant_expression_p = save_ice_p;
7780   parser->non_integral_constant_expression_p = save_non_ice_p;
7781
7782   return expr;
7783 }
7784
7785 /* Parse a trait expression.
7786
7787    Returns a representation of the expression, the underlying type
7788    of the type at issue when KEYWORD is RID_UNDERLYING_TYPE.  */
7789
7790 static tree
7791 cp_parser_trait_expr (cp_parser* parser, enum rid keyword)
7792 {
7793   cp_trait_kind kind;
7794   tree type1, type2 = NULL_TREE;
7795   bool binary = false;
7796   cp_decl_specifier_seq decl_specs;
7797
7798   switch (keyword)
7799     {
7800     case RID_HAS_NOTHROW_ASSIGN:
7801       kind = CPTK_HAS_NOTHROW_ASSIGN;
7802       break;
7803     case RID_HAS_NOTHROW_CONSTRUCTOR:
7804       kind = CPTK_HAS_NOTHROW_CONSTRUCTOR;
7805       break;
7806     case RID_HAS_NOTHROW_COPY:
7807       kind = CPTK_HAS_NOTHROW_COPY;
7808       break;
7809     case RID_HAS_TRIVIAL_ASSIGN:
7810       kind = CPTK_HAS_TRIVIAL_ASSIGN;
7811       break;
7812     case RID_HAS_TRIVIAL_CONSTRUCTOR:
7813       kind = CPTK_HAS_TRIVIAL_CONSTRUCTOR;
7814       break;
7815     case RID_HAS_TRIVIAL_COPY:
7816       kind = CPTK_HAS_TRIVIAL_COPY;
7817       break;
7818     case RID_HAS_TRIVIAL_DESTRUCTOR:
7819       kind = CPTK_HAS_TRIVIAL_DESTRUCTOR;
7820       break;
7821     case RID_HAS_VIRTUAL_DESTRUCTOR:
7822       kind = CPTK_HAS_VIRTUAL_DESTRUCTOR;
7823       break;
7824     case RID_IS_ABSTRACT:
7825       kind = CPTK_IS_ABSTRACT;
7826       break;
7827     case RID_IS_BASE_OF:
7828       kind = CPTK_IS_BASE_OF;
7829       binary = true;
7830       break;
7831     case RID_IS_CLASS:
7832       kind = CPTK_IS_CLASS;
7833       break;
7834     case RID_IS_CONVERTIBLE_TO:
7835       kind = CPTK_IS_CONVERTIBLE_TO;
7836       binary = true;
7837       break;
7838     case RID_IS_EMPTY:
7839       kind = CPTK_IS_EMPTY;
7840       break;
7841     case RID_IS_ENUM:
7842       kind = CPTK_IS_ENUM;
7843       break;
7844     case RID_IS_LITERAL_TYPE:
7845       kind = CPTK_IS_LITERAL_TYPE;
7846       break;
7847     case RID_IS_POD:
7848       kind = CPTK_IS_POD;
7849       break;
7850     case RID_IS_POLYMORPHIC:
7851       kind = CPTK_IS_POLYMORPHIC;
7852       break;
7853     case RID_IS_STD_LAYOUT:
7854       kind = CPTK_IS_STD_LAYOUT;
7855       break;
7856     case RID_IS_TRIVIAL:
7857       kind = CPTK_IS_TRIVIAL;
7858       break;
7859     case RID_IS_UNION:
7860       kind = CPTK_IS_UNION;
7861       break;
7862     case RID_UNDERLYING_TYPE:
7863       kind = CPTK_UNDERLYING_TYPE;
7864       break;
7865     case RID_BASES:
7866       kind = CPTK_BASES;
7867       break;
7868     case RID_DIRECT_BASES:
7869       kind = CPTK_DIRECT_BASES;
7870       break;
7871     default:
7872       gcc_unreachable ();
7873     }
7874
7875   /* Consume the token.  */
7876   cp_lexer_consume_token (parser->lexer);
7877
7878   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
7879
7880   type1 = cp_parser_type_id (parser);
7881
7882   if (type1 == error_mark_node)
7883     return error_mark_node;
7884
7885   /* Build a trivial decl-specifier-seq.  */
7886   clear_decl_specs (&decl_specs);
7887   decl_specs.type = type1;
7888
7889   /* Call grokdeclarator to figure out what type this is.  */
7890   type1 = grokdeclarator (NULL, &decl_specs, TYPENAME,
7891                           /*initialized=*/0, /*attrlist=*/NULL);
7892
7893   if (binary)
7894     {
7895       cp_parser_require (parser, CPP_COMMA, RT_COMMA);
7896  
7897       type2 = cp_parser_type_id (parser);
7898
7899       if (type2 == error_mark_node)
7900         return error_mark_node;
7901
7902       /* Build a trivial decl-specifier-seq.  */
7903       clear_decl_specs (&decl_specs);
7904       decl_specs.type = type2;
7905
7906       /* Call grokdeclarator to figure out what type this is.  */
7907       type2 = grokdeclarator (NULL, &decl_specs, TYPENAME,
7908                               /*initialized=*/0, /*attrlist=*/NULL);
7909     }
7910
7911   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7912
7913   /* Complete the trait expression, which may mean either processing
7914      the trait expr now or saving it for template instantiation.  */
7915   switch(kind)
7916     {
7917     case CPTK_UNDERLYING_TYPE:
7918       return finish_underlying_type (type1);
7919     case CPTK_BASES:
7920       return finish_bases (type1, false);
7921     case CPTK_DIRECT_BASES:
7922       return finish_bases (type1, true);
7923     default:
7924       return finish_trait_expr (kind, type1, type2);
7925     }
7926 }
7927
7928 /* Lambdas that appear in variable initializer or default argument scope
7929    get that in their mangling, so we need to record it.  We might as well
7930    use the count for function and namespace scopes as well.  */
7931 static GTY(()) tree lambda_scope;
7932 static GTY(()) int lambda_count;
7933 typedef struct GTY(()) tree_int
7934 {
7935   tree t;
7936   int i;
7937 } tree_int;
7938 DEF_VEC_O(tree_int);
7939 DEF_VEC_ALLOC_O(tree_int,gc);
7940 static GTY(()) VEC(tree_int,gc) *lambda_scope_stack;
7941
7942 static void
7943 start_lambda_scope (tree decl)
7944 {
7945   tree_int ti;
7946   gcc_assert (decl);
7947   /* Once we're inside a function, we ignore other scopes and just push
7948      the function again so that popping works properly.  */
7949   if (current_function_decl && TREE_CODE (decl) != FUNCTION_DECL)
7950     decl = current_function_decl;
7951   ti.t = lambda_scope;
7952   ti.i = lambda_count;
7953   VEC_safe_push (tree_int, gc, lambda_scope_stack, &ti);
7954   if (lambda_scope != decl)
7955     {
7956       /* Don't reset the count if we're still in the same function.  */
7957       lambda_scope = decl;
7958       lambda_count = 0;
7959     }
7960 }
7961
7962 static void
7963 record_lambda_scope (tree lambda)
7964 {
7965   LAMBDA_EXPR_EXTRA_SCOPE (lambda) = lambda_scope;
7966   LAMBDA_EXPR_DISCRIMINATOR (lambda) = lambda_count++;
7967 }
7968
7969 static void
7970 finish_lambda_scope (void)
7971 {
7972   tree_int *p = VEC_last (tree_int, lambda_scope_stack);
7973   if (lambda_scope != p->t)
7974     {
7975       lambda_scope = p->t;
7976       lambda_count = p->i;
7977     }
7978   VEC_pop (tree_int, lambda_scope_stack);
7979 }
7980
7981 /* Parse a lambda expression.
7982
7983    lambda-expression:
7984      lambda-introducer lambda-declarator [opt] compound-statement
7985
7986    Returns a representation of the expression.  */
7987
7988 static tree
7989 cp_parser_lambda_expression (cp_parser* parser)
7990 {
7991   tree lambda_expr = build_lambda_expr ();
7992   tree type;
7993   bool ok;
7994
7995   LAMBDA_EXPR_LOCATION (lambda_expr)
7996     = cp_lexer_peek_token (parser->lexer)->location;
7997
7998   if (cp_unevaluated_operand)
7999     error_at (LAMBDA_EXPR_LOCATION (lambda_expr),
8000               "lambda-expression in unevaluated context");
8001
8002   /* We may be in the middle of deferred access check.  Disable
8003      it now.  */
8004   push_deferring_access_checks (dk_no_deferred);
8005
8006   cp_parser_lambda_introducer (parser, lambda_expr);
8007
8008   type = begin_lambda_type (lambda_expr);
8009
8010   record_lambda_scope (lambda_expr);
8011
8012   /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
8013   determine_visibility (TYPE_NAME (type));
8014
8015   /* Now that we've started the type, add the capture fields for any
8016      explicit captures.  */
8017   register_capture_members (LAMBDA_EXPR_CAPTURE_LIST (lambda_expr));
8018
8019   {
8020     /* Inside the class, surrounding template-parameter-lists do not apply.  */
8021     unsigned int saved_num_template_parameter_lists
8022         = parser->num_template_parameter_lists;
8023     unsigned char in_statement = parser->in_statement;
8024     bool in_switch_statement_p = parser->in_switch_statement_p;
8025
8026     parser->num_template_parameter_lists = 0;
8027     parser->in_statement = 0;
8028     parser->in_switch_statement_p = false;
8029
8030     /* By virtue of defining a local class, a lambda expression has access to
8031        the private variables of enclosing classes.  */
8032
8033     ok = cp_parser_lambda_declarator_opt (parser, lambda_expr);
8034
8035     if (ok)
8036       cp_parser_lambda_body (parser, lambda_expr);
8037     else if (cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
8038       cp_parser_skip_to_end_of_block_or_statement (parser);
8039
8040     /* The capture list was built up in reverse order; fix that now.  */
8041     {
8042       tree newlist = NULL_TREE;
8043       tree elt, next;
8044
8045       for (elt = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
8046            elt; elt = next)
8047         {
8048           next = TREE_CHAIN (elt);
8049           TREE_CHAIN (elt) = newlist;
8050           newlist = elt;
8051         }
8052       LAMBDA_EXPR_CAPTURE_LIST (lambda_expr) = newlist;
8053     }
8054
8055     if (ok)
8056       maybe_add_lambda_conv_op (type);
8057
8058     type = finish_struct (type, /*attributes=*/NULL_TREE);
8059
8060     parser->num_template_parameter_lists = saved_num_template_parameter_lists;
8061     parser->in_statement = in_statement;
8062     parser->in_switch_statement_p = in_switch_statement_p;
8063   }
8064
8065   pop_deferring_access_checks ();
8066
8067   /* This field is only used during parsing of the lambda.  */
8068   LAMBDA_EXPR_THIS_CAPTURE (lambda_expr) = NULL_TREE;
8069
8070   /* This lambda shouldn't have any proxies left at this point.  */
8071   gcc_assert (LAMBDA_EXPR_PENDING_PROXIES (lambda_expr) == NULL);
8072   /* And now that we're done, push proxies for an enclosing lambda.  */
8073   insert_pending_capture_proxies ();
8074
8075   if (ok)
8076     return build_lambda_object (lambda_expr);
8077   else
8078     return error_mark_node;
8079 }
8080
8081 /* Parse the beginning of a lambda expression.
8082
8083    lambda-introducer:
8084      [ lambda-capture [opt] ]
8085
8086    LAMBDA_EXPR is the current representation of the lambda expression.  */
8087
8088 static void
8089 cp_parser_lambda_introducer (cp_parser* parser, tree lambda_expr)
8090 {
8091   /* Need commas after the first capture.  */
8092   bool first = true;
8093
8094   /* Eat the leading `['.  */
8095   cp_parser_require (parser, CPP_OPEN_SQUARE, RT_OPEN_SQUARE);
8096
8097   /* Record default capture mode.  "[&" "[=" "[&," "[=,"  */
8098   if (cp_lexer_next_token_is (parser->lexer, CPP_AND)
8099       && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_NAME)
8100     LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) = CPLD_REFERENCE;
8101   else if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8102     LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) = CPLD_COPY;
8103
8104   if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) != CPLD_NONE)
8105     {
8106       cp_lexer_consume_token (parser->lexer);
8107       first = false;
8108     }
8109
8110   while (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_SQUARE))
8111     {
8112       cp_token* capture_token;
8113       tree capture_id;
8114       tree capture_init_expr;
8115       cp_id_kind idk = CP_ID_KIND_NONE;
8116       bool explicit_init_p = false;
8117
8118       enum capture_kind_type
8119       {
8120         BY_COPY,
8121         BY_REFERENCE
8122       };
8123       enum capture_kind_type capture_kind = BY_COPY;
8124
8125       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
8126         {
8127           error ("expected end of capture-list");
8128           return;
8129         }
8130
8131       if (first)
8132         first = false;
8133       else
8134         cp_parser_require (parser, CPP_COMMA, RT_COMMA);
8135
8136       /* Possibly capture `this'.  */
8137       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THIS))
8138         {
8139           location_t loc = cp_lexer_peek_token (parser->lexer)->location;
8140           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) == CPLD_COPY)
8141             pedwarn (loc, 0, "explicit by-copy capture of %<this%> redundant "
8142                      "with by-copy capture default");
8143           cp_lexer_consume_token (parser->lexer);
8144           add_capture (lambda_expr,
8145                        /*id=*/this_identifier,
8146                        /*initializer=*/finish_this_expr(),
8147                        /*by_reference_p=*/false,
8148                        explicit_init_p);
8149           continue;
8150         }
8151
8152       /* Remember whether we want to capture as a reference or not.  */
8153       if (cp_lexer_next_token_is (parser->lexer, CPP_AND))
8154         {
8155           capture_kind = BY_REFERENCE;
8156           cp_lexer_consume_token (parser->lexer);
8157         }
8158
8159       /* Get the identifier.  */
8160       capture_token = cp_lexer_peek_token (parser->lexer);
8161       capture_id = cp_parser_identifier (parser);
8162
8163       if (capture_id == error_mark_node)
8164         /* Would be nice to have a cp_parser_skip_to_closing_x for general
8165            delimiters, but I modified this to stop on unnested ']' as well.  It
8166            was already changed to stop on unnested '}', so the
8167            "closing_parenthesis" name is no more misleading with my change.  */
8168         {
8169           cp_parser_skip_to_closing_parenthesis (parser,
8170                                                  /*recovering=*/true,
8171                                                  /*or_comma=*/true,
8172                                                  /*consume_paren=*/true);
8173           break;
8174         }
8175
8176       /* Find the initializer for this capture.  */
8177       if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8178         {
8179           /* An explicit expression exists.  */
8180           cp_lexer_consume_token (parser->lexer);
8181           pedwarn (input_location, OPT_pedantic,
8182                    "ISO C++ does not allow initializers "
8183                    "in lambda expression capture lists");
8184           capture_init_expr = cp_parser_assignment_expression (parser,
8185                                                                /*cast_p=*/true,
8186                                                                &idk);
8187           explicit_init_p = true;
8188         }
8189       else
8190         {
8191           const char* error_msg;
8192
8193           /* Turn the identifier into an id-expression.  */
8194           capture_init_expr
8195             = cp_parser_lookup_name
8196                 (parser,
8197                  capture_id,
8198                  none_type,
8199                  /*is_template=*/false,
8200                  /*is_namespace=*/false,
8201                  /*check_dependency=*/true,
8202                  /*ambiguous_decls=*/NULL,
8203                  capture_token->location);
8204
8205           if (capture_init_expr == error_mark_node)
8206             {
8207               unqualified_name_lookup_error (capture_id);
8208               continue;
8209             }
8210           else if (DECL_P (capture_init_expr)
8211                    && (TREE_CODE (capture_init_expr) != VAR_DECL
8212                        && TREE_CODE (capture_init_expr) != PARM_DECL))
8213             {
8214               error_at (capture_token->location,
8215                         "capture of non-variable %qD ",
8216                         capture_init_expr);
8217               inform (0, "%q+#D declared here", capture_init_expr);
8218               continue;
8219             }
8220           if (TREE_CODE (capture_init_expr) == VAR_DECL
8221               && decl_storage_duration (capture_init_expr) != dk_auto)
8222             {
8223               pedwarn (capture_token->location, 0, "capture of variable "
8224                        "%qD with non-automatic storage duration",
8225                        capture_init_expr);
8226               inform (0, "%q+#D declared here", capture_init_expr);
8227               continue;
8228             }
8229
8230           capture_init_expr
8231             = finish_id_expression
8232                 (capture_id,
8233                  capture_init_expr,
8234                  parser->scope,
8235                  &idk,
8236                  /*integral_constant_expression_p=*/false,
8237                  /*allow_non_integral_constant_expression_p=*/false,
8238                  /*non_integral_constant_expression_p=*/NULL,
8239                  /*template_p=*/false,
8240                  /*done=*/true,
8241                  /*address_p=*/false,
8242                  /*template_arg_p=*/false,
8243                  &error_msg,
8244                  capture_token->location);
8245         }
8246
8247       if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) != CPLD_NONE
8248           && !explicit_init_p)
8249         {
8250           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) == CPLD_COPY
8251               && capture_kind == BY_COPY)
8252             pedwarn (capture_token->location, 0, "explicit by-copy capture "
8253                      "of %qD redundant with by-copy capture default",
8254                      capture_id);
8255           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) == CPLD_REFERENCE
8256               && capture_kind == BY_REFERENCE)
8257             pedwarn (capture_token->location, 0, "explicit by-reference "
8258                      "capture of %qD redundant with by-reference capture "
8259                      "default", capture_id);
8260         }
8261
8262       add_capture (lambda_expr,
8263                    capture_id,
8264                    capture_init_expr,
8265                    /*by_reference_p=*/capture_kind == BY_REFERENCE,
8266                    explicit_init_p);
8267     }
8268
8269   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
8270 }
8271
8272 /* Parse the (optional) middle of a lambda expression.
8273
8274    lambda-declarator:
8275      ( parameter-declaration-clause [opt] )
8276        attribute-specifier [opt]
8277        mutable [opt]
8278        exception-specification [opt]
8279        lambda-return-type-clause [opt]
8280
8281    LAMBDA_EXPR is the current representation of the lambda expression.  */
8282
8283 static bool
8284 cp_parser_lambda_declarator_opt (cp_parser* parser, tree lambda_expr)
8285 {
8286   /* 5.1.1.4 of the standard says:
8287        If a lambda-expression does not include a lambda-declarator, it is as if
8288        the lambda-declarator were ().
8289      This means an empty parameter list, no attributes, and no exception
8290      specification.  */
8291   tree param_list = void_list_node;
8292   tree attributes = NULL_TREE;
8293   tree exception_spec = NULL_TREE;
8294   tree t;
8295
8296   /* The lambda-declarator is optional, but must begin with an opening
8297      parenthesis if present.  */
8298   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
8299     {
8300       cp_lexer_consume_token (parser->lexer);
8301
8302       begin_scope (sk_function_parms, /*entity=*/NULL_TREE);
8303
8304       /* Parse parameters.  */
8305       param_list = cp_parser_parameter_declaration_clause (parser);
8306
8307       /* Default arguments shall not be specified in the
8308          parameter-declaration-clause of a lambda-declarator.  */
8309       for (t = param_list; t; t = TREE_CHAIN (t))
8310         if (TREE_PURPOSE (t))
8311           pedwarn (DECL_SOURCE_LOCATION (TREE_VALUE (t)), OPT_pedantic,
8312                    "default argument specified for lambda parameter");
8313
8314       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
8315
8316       attributes = cp_parser_attributes_opt (parser);
8317
8318       /* Parse optional `mutable' keyword.  */
8319       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_MUTABLE))
8320         {
8321           cp_lexer_consume_token (parser->lexer);
8322           LAMBDA_EXPR_MUTABLE_P (lambda_expr) = 1;
8323         }
8324
8325       /* Parse optional exception specification.  */
8326       exception_spec = cp_parser_exception_specification_opt (parser);
8327
8328       /* Parse optional trailing return type.  */
8329       if (cp_lexer_next_token_is (parser->lexer, CPP_DEREF))
8330         {
8331           cp_lexer_consume_token (parser->lexer);
8332           LAMBDA_EXPR_RETURN_TYPE (lambda_expr) = cp_parser_type_id (parser);
8333         }
8334
8335       /* The function parameters must be in scope all the way until after the
8336          trailing-return-type in case of decltype.  */
8337       for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
8338         pop_binding (DECL_NAME (t), t);
8339
8340       leave_scope ();
8341     }
8342
8343   /* Create the function call operator.
8344
8345      Messing with declarators like this is no uglier than building up the
8346      FUNCTION_DECL by hand, and this is less likely to get out of sync with
8347      other code.  */
8348   {
8349     cp_decl_specifier_seq return_type_specs;
8350     cp_declarator* declarator;
8351     tree fco;
8352     int quals;
8353     void *p;
8354
8355     clear_decl_specs (&return_type_specs);
8356     if (LAMBDA_EXPR_RETURN_TYPE (lambda_expr))
8357       return_type_specs.type = LAMBDA_EXPR_RETURN_TYPE (lambda_expr);
8358     else
8359       /* Maybe we will deduce the return type later, but we can use void
8360          as a placeholder return type anyways.  */
8361       return_type_specs.type = void_type_node;
8362
8363     p = obstack_alloc (&declarator_obstack, 0);
8364
8365     declarator = make_id_declarator (NULL_TREE, ansi_opname (CALL_EXPR),
8366                                      sfk_none);
8367
8368     quals = (LAMBDA_EXPR_MUTABLE_P (lambda_expr)
8369              ? TYPE_UNQUALIFIED : TYPE_QUAL_CONST);
8370     declarator = make_call_declarator (declarator, param_list, quals,
8371                                        VIRT_SPEC_UNSPECIFIED,
8372                                        exception_spec,
8373                                        /*late_return_type=*/NULL_TREE);
8374     declarator->id_loc = LAMBDA_EXPR_LOCATION (lambda_expr);
8375
8376     fco = grokmethod (&return_type_specs,
8377                       declarator,
8378                       attributes);
8379     if (fco != error_mark_node)
8380       {
8381         DECL_INITIALIZED_IN_CLASS_P (fco) = 1;
8382         DECL_ARTIFICIAL (fco) = 1;
8383         /* Give the object parameter a different name.  */
8384         DECL_NAME (DECL_ARGUMENTS (fco)) = get_identifier ("__closure");
8385       }
8386
8387     finish_member_declaration (fco);
8388
8389     obstack_free (&declarator_obstack, p);
8390
8391     return (fco != error_mark_node);
8392   }
8393 }
8394
8395 /* Parse the body of a lambda expression, which is simply
8396
8397    compound-statement
8398
8399    but which requires special handling.
8400    LAMBDA_EXPR is the current representation of the lambda expression.  */
8401
8402 static void
8403 cp_parser_lambda_body (cp_parser* parser, tree lambda_expr)
8404 {
8405   bool nested = (current_function_decl != NULL_TREE);
8406   bool local_variables_forbidden_p = parser->local_variables_forbidden_p;
8407   if (nested)
8408     push_function_context ();
8409   else
8410     /* Still increment function_depth so that we don't GC in the
8411        middle of an expression.  */
8412     ++function_depth;
8413   /* Clear this in case we're in the middle of a default argument.  */
8414   parser->local_variables_forbidden_p = false;
8415
8416   /* Finish the function call operator
8417      - class_specifier
8418      + late_parsing_for_member
8419      + function_definition_after_declarator
8420      + ctor_initializer_opt_and_function_body  */
8421   {
8422     tree fco = lambda_function (lambda_expr);
8423     tree body;
8424     bool done = false;
8425     tree compound_stmt;
8426     tree cap;
8427
8428     /* Let the front end know that we are going to be defining this
8429        function.  */
8430     start_preparsed_function (fco,
8431                               NULL_TREE,
8432                               SF_PRE_PARSED | SF_INCLASS_INLINE);
8433
8434     start_lambda_scope (fco);
8435     body = begin_function_body ();
8436
8437     if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
8438       goto out;
8439
8440     /* Push the proxies for any explicit captures.  */
8441     for (cap = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr); cap;
8442          cap = TREE_CHAIN (cap))
8443       build_capture_proxy (TREE_PURPOSE (cap));
8444
8445     compound_stmt = begin_compound_stmt (0);
8446
8447     /* 5.1.1.4 of the standard says:
8448          If a lambda-expression does not include a trailing-return-type, it
8449          is as if the trailing-return-type denotes the following type:
8450           * if the compound-statement is of the form
8451                { return attribute-specifier [opt] expression ; }
8452              the type of the returned expression after lvalue-to-rvalue
8453              conversion (_conv.lval_ 4.1), array-to-pointer conversion
8454              (_conv.array_ 4.2), and function-to-pointer conversion
8455              (_conv.func_ 4.3);
8456           * otherwise, void.  */
8457
8458     /* In a lambda that has neither a lambda-return-type-clause
8459        nor a deducible form, errors should be reported for return statements
8460        in the body.  Since we used void as the placeholder return type, parsing
8461        the body as usual will give such desired behavior.  */
8462     if (!LAMBDA_EXPR_RETURN_TYPE (lambda_expr)
8463         && cp_lexer_peek_nth_token (parser->lexer, 1)->keyword == RID_RETURN
8464         && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SEMICOLON)
8465       {
8466         tree expr = NULL_TREE;
8467         cp_id_kind idk = CP_ID_KIND_NONE;
8468
8469         /* Parse tentatively in case there's more after the initial return
8470            statement.  */
8471         cp_parser_parse_tentatively (parser);
8472
8473         cp_parser_require_keyword (parser, RID_RETURN, RT_RETURN);
8474
8475         expr = cp_parser_expression (parser, /*cast_p=*/false, &idk);
8476
8477         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
8478         cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
8479
8480         if (cp_parser_parse_definitely (parser))
8481           {
8482             apply_lambda_return_type (lambda_expr, lambda_return_type (expr));
8483
8484             /* Will get error here if type not deduced yet.  */
8485             finish_return_stmt (expr);
8486
8487             done = true;
8488           }
8489       }
8490
8491     if (!done)
8492       {
8493         if (!LAMBDA_EXPR_RETURN_TYPE (lambda_expr))
8494           LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda_expr) = true;
8495         while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
8496           cp_parser_label_declaration (parser);
8497         cp_parser_statement_seq_opt (parser, NULL_TREE);
8498         cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
8499         LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda_expr) = false;
8500       }
8501
8502     finish_compound_stmt (compound_stmt);
8503
8504   out:
8505     finish_function_body (body);
8506     finish_lambda_scope ();
8507
8508     /* Finish the function and generate code for it if necessary.  */
8509     expand_or_defer_fn (finish_function (/*inline*/2));
8510   }
8511
8512   parser->local_variables_forbidden_p = local_variables_forbidden_p;
8513   if (nested)
8514     pop_function_context();
8515   else
8516     --function_depth;
8517 }
8518
8519 /* Statements [gram.stmt.stmt]  */
8520
8521 /* Parse a statement.
8522
8523    statement:
8524      labeled-statement
8525      expression-statement
8526      compound-statement
8527      selection-statement
8528      iteration-statement
8529      jump-statement
8530      declaration-statement
8531      try-block
8532
8533   TM Extension:
8534
8535    statement:
8536      atomic-statement
8537
8538   IN_COMPOUND is true when the statement is nested inside a
8539   cp_parser_compound_statement; this matters for certain pragmas.
8540
8541   If IF_P is not NULL, *IF_P is set to indicate whether the statement
8542   is a (possibly labeled) if statement which is not enclosed in braces
8543   and has an else clause.  This is used to implement -Wparentheses.  */
8544
8545 static void
8546 cp_parser_statement (cp_parser* parser, tree in_statement_expr,
8547                      bool in_compound, bool *if_p)
8548 {
8549   tree statement;
8550   cp_token *token;
8551   location_t statement_location;
8552
8553  restart:
8554   if (if_p != NULL)
8555     *if_p = false;
8556   /* There is no statement yet.  */
8557   statement = NULL_TREE;
8558   /* Peek at the next token.  */
8559   token = cp_lexer_peek_token (parser->lexer);
8560   /* Remember the location of the first token in the statement.  */
8561   statement_location = token->location;
8562   /* If this is a keyword, then that will often determine what kind of
8563      statement we have.  */
8564   if (token->type == CPP_KEYWORD)
8565     {
8566       enum rid keyword = token->keyword;
8567
8568       switch (keyword)
8569         {
8570         case RID_CASE:
8571         case RID_DEFAULT:
8572           /* Looks like a labeled-statement with a case label.
8573              Parse the label, and then use tail recursion to parse
8574              the statement.  */
8575           cp_parser_label_for_labeled_statement (parser);
8576           goto restart;
8577
8578         case RID_IF:
8579         case RID_SWITCH:
8580           statement = cp_parser_selection_statement (parser, if_p);
8581           break;
8582
8583         case RID_WHILE:
8584         case RID_DO:
8585         case RID_FOR:
8586           statement = cp_parser_iteration_statement (parser);
8587           break;
8588
8589         case RID_BREAK:
8590         case RID_CONTINUE:
8591         case RID_RETURN:
8592         case RID_GOTO:
8593           statement = cp_parser_jump_statement (parser);
8594           break;
8595
8596           /* Objective-C++ exception-handling constructs.  */
8597         case RID_AT_TRY:
8598         case RID_AT_CATCH:
8599         case RID_AT_FINALLY:
8600         case RID_AT_SYNCHRONIZED:
8601         case RID_AT_THROW:
8602           statement = cp_parser_objc_statement (parser);
8603           break;
8604
8605         case RID_TRY:
8606           statement = cp_parser_try_block (parser);
8607           break;
8608
8609         case RID_NAMESPACE:
8610           /* This must be a namespace alias definition.  */
8611           cp_parser_declaration_statement (parser);
8612           return;
8613           
8614         case RID_TRANSACTION_ATOMIC:
8615         case RID_TRANSACTION_RELAXED:
8616           statement = cp_parser_transaction (parser, keyword);
8617           break;
8618         case RID_TRANSACTION_CANCEL:
8619           statement = cp_parser_transaction_cancel (parser);
8620           break;
8621
8622         default:
8623           /* It might be a keyword like `int' that can start a
8624              declaration-statement.  */
8625           break;
8626         }
8627     }
8628   else if (token->type == CPP_NAME)
8629     {
8630       /* If the next token is a `:', then we are looking at a
8631          labeled-statement.  */
8632       token = cp_lexer_peek_nth_token (parser->lexer, 2);
8633       if (token->type == CPP_COLON)
8634         {
8635           /* Looks like a labeled-statement with an ordinary label.
8636              Parse the label, and then use tail recursion to parse
8637              the statement.  */
8638           cp_parser_label_for_labeled_statement (parser);
8639           goto restart;
8640         }
8641     }
8642   /* Anything that starts with a `{' must be a compound-statement.  */
8643   else if (token->type == CPP_OPEN_BRACE)
8644     statement = cp_parser_compound_statement (parser, NULL, false, false);
8645   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
8646      a statement all its own.  */
8647   else if (token->type == CPP_PRAGMA)
8648     {
8649       /* Only certain OpenMP pragmas are attached to statements, and thus
8650          are considered statements themselves.  All others are not.  In
8651          the context of a compound, accept the pragma as a "statement" and
8652          return so that we can check for a close brace.  Otherwise we
8653          require a real statement and must go back and read one.  */
8654       if (in_compound)
8655         cp_parser_pragma (parser, pragma_compound);
8656       else if (!cp_parser_pragma (parser, pragma_stmt))
8657         goto restart;
8658       return;
8659     }
8660   else if (token->type == CPP_EOF)
8661     {
8662       cp_parser_error (parser, "expected statement");
8663       return;
8664     }
8665
8666   /* Everything else must be a declaration-statement or an
8667      expression-statement.  Try for the declaration-statement
8668      first, unless we are looking at a `;', in which case we know that
8669      we have an expression-statement.  */
8670   if (!statement)
8671     {
8672       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8673         {
8674           cp_parser_parse_tentatively (parser);
8675           /* Try to parse the declaration-statement.  */
8676           cp_parser_declaration_statement (parser);
8677           /* If that worked, we're done.  */
8678           if (cp_parser_parse_definitely (parser))
8679             return;
8680         }
8681       /* Look for an expression-statement instead.  */
8682       statement = cp_parser_expression_statement (parser, in_statement_expr);
8683     }
8684
8685   /* Set the line number for the statement.  */
8686   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
8687     SET_EXPR_LOCATION (statement, statement_location);
8688 }
8689
8690 /* Parse the label for a labeled-statement, i.e.
8691
8692    identifier :
8693    case constant-expression :
8694    default :
8695
8696    GNU Extension:
8697    case constant-expression ... constant-expression : statement
8698
8699    When a label is parsed without errors, the label is added to the
8700    parse tree by the finish_* functions, so this function doesn't
8701    have to return the label.  */
8702
8703 static void
8704 cp_parser_label_for_labeled_statement (cp_parser* parser)
8705 {
8706   cp_token *token;
8707   tree label = NULL_TREE;
8708   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
8709
8710   /* The next token should be an identifier.  */
8711   token = cp_lexer_peek_token (parser->lexer);
8712   if (token->type != CPP_NAME
8713       && token->type != CPP_KEYWORD)
8714     {
8715       cp_parser_error (parser, "expected labeled-statement");
8716       return;
8717     }
8718
8719   parser->colon_corrects_to_scope_p = false;
8720   switch (token->keyword)
8721     {
8722     case RID_CASE:
8723       {
8724         tree expr, expr_hi;
8725         cp_token *ellipsis;
8726
8727         /* Consume the `case' token.  */
8728         cp_lexer_consume_token (parser->lexer);
8729         /* Parse the constant-expression.  */
8730         expr = cp_parser_constant_expression (parser,
8731                                               /*allow_non_constant_p=*/false,
8732                                               NULL);
8733
8734         ellipsis = cp_lexer_peek_token (parser->lexer);
8735         if (ellipsis->type == CPP_ELLIPSIS)
8736           {
8737             /* Consume the `...' token.  */
8738             cp_lexer_consume_token (parser->lexer);
8739             expr_hi =
8740               cp_parser_constant_expression (parser,
8741                                              /*allow_non_constant_p=*/false,
8742                                              NULL);
8743             /* We don't need to emit warnings here, as the common code
8744                will do this for us.  */
8745           }
8746         else
8747           expr_hi = NULL_TREE;
8748
8749         if (parser->in_switch_statement_p)
8750           finish_case_label (token->location, expr, expr_hi);
8751         else
8752           error_at (token->location,
8753                     "case label %qE not within a switch statement",
8754                     expr);
8755       }
8756       break;
8757
8758     case RID_DEFAULT:
8759       /* Consume the `default' token.  */
8760       cp_lexer_consume_token (parser->lexer);
8761
8762       if (parser->in_switch_statement_p)
8763         finish_case_label (token->location, NULL_TREE, NULL_TREE);
8764       else
8765         error_at (token->location, "case label not within a switch statement");
8766       break;
8767
8768     default:
8769       /* Anything else must be an ordinary label.  */
8770       label = finish_label_stmt (cp_parser_identifier (parser));
8771       break;
8772     }
8773
8774   /* Require the `:' token.  */
8775   cp_parser_require (parser, CPP_COLON, RT_COLON);
8776
8777   /* An ordinary label may optionally be followed by attributes.
8778      However, this is only permitted if the attributes are then
8779      followed by a semicolon.  This is because, for backward
8780      compatibility, when parsing
8781        lab: __attribute__ ((unused)) int i;
8782      we want the attribute to attach to "i", not "lab".  */
8783   if (label != NULL_TREE
8784       && cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
8785     {
8786       tree attrs;
8787
8788       cp_parser_parse_tentatively (parser);
8789       attrs = cp_parser_attributes_opt (parser);
8790       if (attrs == NULL_TREE
8791           || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8792         cp_parser_abort_tentative_parse (parser);
8793       else if (!cp_parser_parse_definitely (parser))
8794         ;
8795       else
8796         cplus_decl_attributes (&label, attrs, 0);
8797     }
8798
8799   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
8800 }
8801
8802 /* Parse an expression-statement.
8803
8804    expression-statement:
8805      expression [opt] ;
8806
8807    Returns the new EXPR_STMT -- or NULL_TREE if the expression
8808    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
8809    indicates whether this expression-statement is part of an
8810    expression statement.  */
8811
8812 static tree
8813 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
8814 {
8815   tree statement = NULL_TREE;
8816   cp_token *token = cp_lexer_peek_token (parser->lexer);
8817
8818   /* If the next token is a ';', then there is no expression
8819      statement.  */
8820   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8821     statement = cp_parser_expression (parser, /*cast_p=*/false, NULL);
8822
8823   /* Give a helpful message for "A<T>::type t;" and the like.  */
8824   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
8825       && !cp_parser_uncommitted_to_tentative_parse_p (parser))
8826     {
8827       if (TREE_CODE (statement) == SCOPE_REF)
8828         error_at (token->location, "need %<typename%> before %qE because "
8829                   "%qT is a dependent scope",
8830                   statement, TREE_OPERAND (statement, 0));
8831       else if (is_overloaded_fn (statement)
8832                && DECL_CONSTRUCTOR_P (get_first_fn (statement)))
8833         {
8834           /* A::A a; */
8835           tree fn = get_first_fn (statement);
8836           error_at (token->location,
8837                     "%<%T::%D%> names the constructor, not the type",
8838                     DECL_CONTEXT (fn), DECL_NAME (fn));
8839         }
8840     }
8841
8842   /* Consume the final `;'.  */
8843   cp_parser_consume_semicolon_at_end_of_statement (parser);
8844
8845   if (in_statement_expr
8846       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
8847     /* This is the final expression statement of a statement
8848        expression.  */
8849     statement = finish_stmt_expr_expr (statement, in_statement_expr);
8850   else if (statement)
8851     statement = finish_expr_stmt (statement);
8852   else
8853     finish_stmt ();
8854
8855   return statement;
8856 }
8857
8858 /* Parse a compound-statement.
8859
8860    compound-statement:
8861      { statement-seq [opt] }
8862
8863    GNU extension:
8864
8865    compound-statement:
8866      { label-declaration-seq [opt] statement-seq [opt] }
8867
8868    label-declaration-seq:
8869      label-declaration
8870      label-declaration-seq label-declaration
8871
8872    Returns a tree representing the statement.  */
8873
8874 static tree
8875 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
8876                               bool in_try, bool function_body)
8877 {
8878   tree compound_stmt;
8879
8880   /* Consume the `{'.  */
8881   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
8882     return error_mark_node;
8883   if (DECL_DECLARED_CONSTEXPR_P (current_function_decl)
8884       && !function_body)
8885     pedwarn (input_location, OPT_pedantic,
8886              "compound-statement in constexpr function");
8887   /* Begin the compound-statement.  */
8888   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
8889   /* If the next keyword is `__label__' we have a label declaration.  */
8890   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
8891     cp_parser_label_declaration (parser);
8892   /* Parse an (optional) statement-seq.  */
8893   cp_parser_statement_seq_opt (parser, in_statement_expr);
8894   /* Finish the compound-statement.  */
8895   finish_compound_stmt (compound_stmt);
8896   /* Consume the `}'.  */
8897   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
8898
8899   return compound_stmt;
8900 }
8901
8902 /* Parse an (optional) statement-seq.
8903
8904    statement-seq:
8905      statement
8906      statement-seq [opt] statement  */
8907
8908 static void
8909 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
8910 {
8911   /* Scan statements until there aren't any more.  */
8912   while (true)
8913     {
8914       cp_token *token = cp_lexer_peek_token (parser->lexer);
8915
8916       /* If we are looking at a `}', then we have run out of
8917          statements; the same is true if we have reached the end
8918          of file, or have stumbled upon a stray '@end'.  */
8919       if (token->type == CPP_CLOSE_BRACE
8920           || token->type == CPP_EOF
8921           || token->type == CPP_PRAGMA_EOL
8922           || (token->type == CPP_KEYWORD && token->keyword == RID_AT_END))
8923         break;
8924       
8925       /* If we are in a compound statement and find 'else' then
8926          something went wrong.  */
8927       else if (token->type == CPP_KEYWORD && token->keyword == RID_ELSE)
8928         {
8929           if (parser->in_statement & IN_IF_STMT) 
8930             break;
8931           else
8932             {
8933               token = cp_lexer_consume_token (parser->lexer);
8934               error_at (token->location, "%<else%> without a previous %<if%>");
8935             }
8936         }
8937
8938       /* Parse the statement.  */
8939       cp_parser_statement (parser, in_statement_expr, true, NULL);
8940     }
8941 }
8942
8943 /* Parse a selection-statement.
8944
8945    selection-statement:
8946      if ( condition ) statement
8947      if ( condition ) statement else statement
8948      switch ( condition ) statement
8949
8950    Returns the new IF_STMT or SWITCH_STMT.
8951
8952    If IF_P is not NULL, *IF_P is set to indicate whether the statement
8953    is a (possibly labeled) if statement which is not enclosed in
8954    braces and has an else clause.  This is used to implement
8955    -Wparentheses.  */
8956
8957 static tree
8958 cp_parser_selection_statement (cp_parser* parser, bool *if_p)
8959 {
8960   cp_token *token;
8961   enum rid keyword;
8962
8963   if (if_p != NULL)
8964     *if_p = false;
8965
8966   /* Peek at the next token.  */
8967   token = cp_parser_require (parser, CPP_KEYWORD, RT_SELECT);
8968
8969   /* See what kind of keyword it is.  */
8970   keyword = token->keyword;
8971   switch (keyword)
8972     {
8973     case RID_IF:
8974     case RID_SWITCH:
8975       {
8976         tree statement;
8977         tree condition;
8978
8979         /* Look for the `('.  */
8980         if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
8981           {
8982             cp_parser_skip_to_end_of_statement (parser);
8983             return error_mark_node;
8984           }
8985
8986         /* Begin the selection-statement.  */
8987         if (keyword == RID_IF)
8988           statement = begin_if_stmt ();
8989         else
8990           statement = begin_switch_stmt ();
8991
8992         /* Parse the condition.  */
8993         condition = cp_parser_condition (parser);
8994         /* Look for the `)'.  */
8995         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
8996           cp_parser_skip_to_closing_parenthesis (parser, true, false,
8997                                                  /*consume_paren=*/true);
8998
8999         if (keyword == RID_IF)
9000           {
9001             bool nested_if;
9002             unsigned char in_statement;
9003
9004             /* Add the condition.  */
9005             finish_if_stmt_cond (condition, statement);
9006
9007             /* Parse the then-clause.  */
9008             in_statement = parser->in_statement;
9009             parser->in_statement |= IN_IF_STMT;
9010             if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9011               {
9012                 location_t loc = cp_lexer_peek_token (parser->lexer)->location;
9013                 add_stmt (build_empty_stmt (loc));
9014                 cp_lexer_consume_token (parser->lexer);
9015                 if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_ELSE))
9016                   warning_at (loc, OPT_Wempty_body, "suggest braces around "
9017                               "empty body in an %<if%> statement");
9018                 nested_if = false;
9019               }
9020             else
9021               cp_parser_implicitly_scoped_statement (parser, &nested_if);
9022             parser->in_statement = in_statement;
9023
9024             finish_then_clause (statement);
9025
9026             /* If the next token is `else', parse the else-clause.  */
9027             if (cp_lexer_next_token_is_keyword (parser->lexer,
9028                                                 RID_ELSE))
9029               {
9030                 /* Consume the `else' keyword.  */
9031                 cp_lexer_consume_token (parser->lexer);
9032                 begin_else_clause (statement);
9033                 /* Parse the else-clause.  */
9034                 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9035                   {
9036                     location_t loc;
9037                     loc = cp_lexer_peek_token (parser->lexer)->location;
9038                     warning_at (loc,
9039                                 OPT_Wempty_body, "suggest braces around "
9040                                 "empty body in an %<else%> statement");
9041                     add_stmt (build_empty_stmt (loc));
9042                     cp_lexer_consume_token (parser->lexer);
9043                   }
9044                 else
9045                   cp_parser_implicitly_scoped_statement (parser, NULL);
9046
9047                 finish_else_clause (statement);
9048
9049                 /* If we are currently parsing a then-clause, then
9050                    IF_P will not be NULL.  We set it to true to
9051                    indicate that this if statement has an else clause.
9052                    This may trigger the Wparentheses warning below
9053                    when we get back up to the parent if statement.  */
9054                 if (if_p != NULL)
9055                   *if_p = true;
9056               }
9057             else
9058               {
9059                 /* This if statement does not have an else clause.  If
9060                    NESTED_IF is true, then the then-clause is an if
9061                    statement which does have an else clause.  We warn
9062                    about the potential ambiguity.  */
9063                 if (nested_if)
9064                   warning_at (EXPR_LOCATION (statement), OPT_Wparentheses,
9065                               "suggest explicit braces to avoid ambiguous"
9066                               " %<else%>");
9067               }
9068
9069             /* Now we're all done with the if-statement.  */
9070             finish_if_stmt (statement);
9071           }
9072         else
9073           {
9074             bool in_switch_statement_p;
9075             unsigned char in_statement;
9076
9077             /* Add the condition.  */
9078             finish_switch_cond (condition, statement);
9079
9080             /* Parse the body of the switch-statement.  */
9081             in_switch_statement_p = parser->in_switch_statement_p;
9082             in_statement = parser->in_statement;
9083             parser->in_switch_statement_p = true;
9084             parser->in_statement |= IN_SWITCH_STMT;
9085             cp_parser_implicitly_scoped_statement (parser, NULL);
9086             parser->in_switch_statement_p = in_switch_statement_p;
9087             parser->in_statement = in_statement;
9088
9089             /* Now we're all done with the switch-statement.  */
9090             finish_switch_stmt (statement);
9091           }
9092
9093         return statement;
9094       }
9095       break;
9096
9097     default:
9098       cp_parser_error (parser, "expected selection-statement");
9099       return error_mark_node;
9100     }
9101 }
9102
9103 /* Parse a condition.
9104
9105    condition:
9106      expression
9107      type-specifier-seq declarator = initializer-clause
9108      type-specifier-seq declarator braced-init-list
9109
9110    GNU Extension:
9111
9112    condition:
9113      type-specifier-seq declarator asm-specification [opt]
9114        attributes [opt] = assignment-expression
9115
9116    Returns the expression that should be tested.  */
9117
9118 static tree
9119 cp_parser_condition (cp_parser* parser)
9120 {
9121   cp_decl_specifier_seq type_specifiers;
9122   const char *saved_message;
9123   int declares_class_or_enum;
9124
9125   /* Try the declaration first.  */
9126   cp_parser_parse_tentatively (parser);
9127   /* New types are not allowed in the type-specifier-seq for a
9128      condition.  */
9129   saved_message = parser->type_definition_forbidden_message;
9130   parser->type_definition_forbidden_message
9131     = G_("types may not be defined in conditions");
9132   /* Parse the type-specifier-seq.  */
9133   cp_parser_decl_specifier_seq (parser,
9134                                 CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR,
9135                                 &type_specifiers,
9136                                 &declares_class_or_enum);
9137   /* Restore the saved message.  */
9138   parser->type_definition_forbidden_message = saved_message;
9139   /* If all is well, we might be looking at a declaration.  */
9140   if (!cp_parser_error_occurred (parser))
9141     {
9142       tree decl;
9143       tree asm_specification;
9144       tree attributes;
9145       cp_declarator *declarator;
9146       tree initializer = NULL_TREE;
9147
9148       /* Parse the declarator.  */
9149       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
9150                                          /*ctor_dtor_or_conv_p=*/NULL,
9151                                          /*parenthesized_p=*/NULL,
9152                                          /*member_p=*/false);
9153       /* Parse the attributes.  */
9154       attributes = cp_parser_attributes_opt (parser);
9155       /* Parse the asm-specification.  */
9156       asm_specification = cp_parser_asm_specification_opt (parser);
9157       /* If the next token is not an `=' or '{', then we might still be
9158          looking at an expression.  For example:
9159
9160            if (A(a).x)
9161
9162          looks like a decl-specifier-seq and a declarator -- but then
9163          there is no `=', so this is an expression.  */
9164       if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
9165           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
9166         cp_parser_simulate_error (parser);
9167         
9168       /* If we did see an `=' or '{', then we are looking at a declaration
9169          for sure.  */
9170       if (cp_parser_parse_definitely (parser))
9171         {
9172           tree pushed_scope;
9173           bool non_constant_p;
9174           bool flags = LOOKUP_ONLYCONVERTING;
9175
9176           /* Create the declaration.  */
9177           decl = start_decl (declarator, &type_specifiers,
9178                              /*initialized_p=*/true,
9179                              attributes, /*prefix_attributes=*/NULL_TREE,
9180                              &pushed_scope);
9181
9182           /* Parse the initializer.  */
9183           if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9184             {
9185               initializer = cp_parser_braced_list (parser, &non_constant_p);
9186               CONSTRUCTOR_IS_DIRECT_INIT (initializer) = 1;
9187               flags = 0;
9188             }
9189           else
9190             {
9191               /* Consume the `='.  */
9192               cp_parser_require (parser, CPP_EQ, RT_EQ);
9193               initializer = cp_parser_initializer_clause (parser, &non_constant_p);
9194             }
9195           if (BRACE_ENCLOSED_INITIALIZER_P (initializer))
9196             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
9197
9198           /* Process the initializer.  */
9199           cp_finish_decl (decl,
9200                           initializer, !non_constant_p,
9201                           asm_specification,
9202                           flags);
9203
9204           if (pushed_scope)
9205             pop_scope (pushed_scope);
9206
9207           return convert_from_reference (decl);
9208         }
9209     }
9210   /* If we didn't even get past the declarator successfully, we are
9211      definitely not looking at a declaration.  */
9212   else
9213     cp_parser_abort_tentative_parse (parser);
9214
9215   /* Otherwise, we are looking at an expression.  */
9216   return cp_parser_expression (parser, /*cast_p=*/false, NULL);
9217 }
9218
9219 /* Parses a for-statement or range-for-statement until the closing ')',
9220    not included. */
9221
9222 static tree
9223 cp_parser_for (cp_parser *parser)
9224 {
9225   tree init, scope, decl;
9226   bool is_range_for;
9227
9228   /* Begin the for-statement.  */
9229   scope = begin_for_scope (&init);
9230
9231   /* Parse the initialization.  */
9232   is_range_for = cp_parser_for_init_statement (parser, &decl);
9233
9234   if (is_range_for)
9235     return cp_parser_range_for (parser, scope, init, decl);
9236   else
9237     return cp_parser_c_for (parser, scope, init);
9238 }
9239
9240 static tree
9241 cp_parser_c_for (cp_parser *parser, tree scope, tree init)
9242 {
9243   /* Normal for loop */
9244   tree condition = NULL_TREE;
9245   tree expression = NULL_TREE;
9246   tree stmt;
9247
9248   stmt = begin_for_stmt (scope, init);
9249   /* The for-init-statement has already been parsed in
9250      cp_parser_for_init_statement, so no work is needed here.  */
9251   finish_for_init_stmt (stmt);
9252
9253   /* If there's a condition, process it.  */
9254   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
9255     condition = cp_parser_condition (parser);
9256   finish_for_cond (condition, stmt);
9257   /* Look for the `;'.  */
9258   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9259
9260   /* If there's an expression, process it.  */
9261   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
9262     expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9263   finish_for_expr (expression, stmt);
9264
9265   return stmt;
9266 }
9267
9268 /* Tries to parse a range-based for-statement:
9269
9270   range-based-for:
9271     decl-specifier-seq declarator : expression
9272
9273   The decl-specifier-seq declarator and the `:' are already parsed by
9274   cp_parser_for_init_statement. If processing_template_decl it returns a
9275   newly created RANGE_FOR_STMT; if not, it is converted to a
9276   regular FOR_STMT.  */
9277
9278 static tree
9279 cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl)
9280 {
9281   tree stmt, range_expr;
9282
9283   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9284     {
9285       bool expr_non_constant_p;
9286       range_expr = cp_parser_braced_list (parser, &expr_non_constant_p);
9287     }
9288   else
9289     range_expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9290
9291   /* If in template, STMT is converted to a normal for-statement
9292      at instantiation. If not, it is done just ahead. */
9293   if (processing_template_decl)
9294     {
9295       stmt = begin_range_for_stmt (scope, init);
9296       finish_range_for_decl (stmt, range_decl, range_expr);
9297       if (!type_dependent_expression_p (range_expr)
9298           /* do_auto_deduction doesn't mess with template init-lists.  */
9299           && !BRACE_ENCLOSED_INITIALIZER_P (range_expr))
9300         do_range_for_auto_deduction (range_decl, range_expr);
9301     }
9302   else
9303     {
9304       stmt = begin_for_stmt (scope, init);
9305       stmt = cp_convert_range_for (stmt, range_decl, range_expr);
9306     }
9307   return stmt;
9308 }
9309
9310 /* Subroutine of cp_convert_range_for: given the initializer expression,
9311    builds up the range temporary.  */
9312
9313 static tree
9314 build_range_temp (tree range_expr)
9315 {
9316   tree range_type, range_temp;
9317
9318   /* Find out the type deduced by the declaration
9319      `auto &&__range = range_expr'.  */
9320   range_type = cp_build_reference_type (make_auto (), true);
9321   range_type = do_auto_deduction (range_type, range_expr,
9322                                   type_uses_auto (range_type));
9323
9324   /* Create the __range variable.  */
9325   range_temp = build_decl (input_location, VAR_DECL,
9326                            get_identifier ("__for_range"), range_type);
9327   TREE_USED (range_temp) = 1;
9328   DECL_ARTIFICIAL (range_temp) = 1;
9329
9330   return range_temp;
9331 }
9332
9333 /* Used by cp_parser_range_for in template context: we aren't going to
9334    do a full conversion yet, but we still need to resolve auto in the
9335    type of the for-range-declaration if present.  This is basically
9336    a shortcut version of cp_convert_range_for.  */
9337
9338 static void
9339 do_range_for_auto_deduction (tree decl, tree range_expr)
9340 {
9341   tree auto_node = type_uses_auto (TREE_TYPE (decl));
9342   if (auto_node)
9343     {
9344       tree begin_dummy, end_dummy, range_temp, iter_type, iter_decl;
9345       range_temp = convert_from_reference (build_range_temp (range_expr));
9346       iter_type = (cp_parser_perform_range_for_lookup
9347                    (range_temp, &begin_dummy, &end_dummy));
9348       iter_decl = build_decl (input_location, VAR_DECL, NULL_TREE, iter_type);
9349       iter_decl = build_x_indirect_ref (iter_decl, RO_NULL,
9350                                         tf_warning_or_error);
9351       TREE_TYPE (decl) = do_auto_deduction (TREE_TYPE (decl),
9352                                             iter_decl, auto_node);
9353     }
9354 }
9355
9356 /* Converts a range-based for-statement into a normal
9357    for-statement, as per the definition.
9358
9359       for (RANGE_DECL : RANGE_EXPR)
9360         BLOCK
9361
9362    should be equivalent to:
9363
9364       {
9365         auto &&__range = RANGE_EXPR;
9366         for (auto __begin = BEGIN_EXPR, end = END_EXPR;
9367               __begin != __end;
9368               ++__begin)
9369           {
9370               RANGE_DECL = *__begin;
9371               BLOCK
9372           }
9373       }
9374
9375    If RANGE_EXPR is an array:
9376         BEGIN_EXPR = __range
9377         END_EXPR = __range + ARRAY_SIZE(__range)
9378    Else if RANGE_EXPR has a member 'begin' or 'end':
9379         BEGIN_EXPR = __range.begin()
9380         END_EXPR = __range.end()
9381    Else:
9382         BEGIN_EXPR = begin(__range)
9383         END_EXPR = end(__range);
9384
9385    If __range has a member 'begin' but not 'end', or vice versa, we must
9386    still use the second alternative (it will surely fail, however).
9387    When calling begin()/end() in the third alternative we must use
9388    argument dependent lookup, but always considering 'std' as an associated
9389    namespace.  */
9390
9391 tree
9392 cp_convert_range_for (tree statement, tree range_decl, tree range_expr)
9393 {
9394   tree begin, end;
9395   tree iter_type, begin_expr, end_expr;
9396   tree condition, expression;
9397
9398   if (range_decl == error_mark_node || range_expr == error_mark_node)
9399     /* If an error happened previously do nothing or else a lot of
9400        unhelpful errors would be issued.  */
9401     begin_expr = end_expr = iter_type = error_mark_node;
9402   else
9403     {
9404       tree range_temp = build_range_temp (range_expr);
9405       pushdecl (range_temp);
9406       cp_finish_decl (range_temp, range_expr,
9407                       /*is_constant_init*/false, NULL_TREE,
9408                       LOOKUP_ONLYCONVERTING);
9409
9410       range_temp = convert_from_reference (range_temp);
9411       iter_type = cp_parser_perform_range_for_lookup (range_temp,
9412                                                       &begin_expr, &end_expr);
9413     }
9414
9415   /* The new for initialization statement.  */
9416   begin = build_decl (input_location, VAR_DECL,
9417                       get_identifier ("__for_begin"), iter_type);
9418   TREE_USED (begin) = 1;
9419   DECL_ARTIFICIAL (begin) = 1;
9420   pushdecl (begin);
9421   cp_finish_decl (begin, begin_expr,
9422                   /*is_constant_init*/false, NULL_TREE,
9423                   LOOKUP_ONLYCONVERTING);
9424
9425   end = build_decl (input_location, VAR_DECL,
9426                     get_identifier ("__for_end"), iter_type);
9427   TREE_USED (end) = 1;
9428   DECL_ARTIFICIAL (end) = 1;
9429   pushdecl (end);
9430   cp_finish_decl (end, end_expr,
9431                   /*is_constant_init*/false, NULL_TREE,
9432                   LOOKUP_ONLYCONVERTING);
9433
9434   finish_for_init_stmt (statement);
9435
9436   /* The new for condition.  */
9437   condition = build_x_binary_op (NE_EXPR,
9438                                  begin, ERROR_MARK,
9439                                  end, ERROR_MARK,
9440                                  NULL, tf_warning_or_error);
9441   finish_for_cond (condition, statement);
9442
9443   /* The new increment expression.  */
9444   expression = finish_unary_op_expr (PREINCREMENT_EXPR, begin);
9445   finish_for_expr (expression, statement);
9446
9447   /* The declaration is initialized with *__begin inside the loop body.  */
9448   cp_finish_decl (range_decl,
9449                   build_x_indirect_ref (begin, RO_NULL, tf_warning_or_error),
9450                   /*is_constant_init*/false, NULL_TREE,
9451                   LOOKUP_ONLYCONVERTING);
9452
9453   return statement;
9454 }
9455
9456 /* Solves BEGIN_EXPR and END_EXPR as described in cp_convert_range_for.
9457    We need to solve both at the same time because the method used
9458    depends on the existence of members begin or end.
9459    Returns the type deduced for the iterator expression.  */
9460
9461 static tree
9462 cp_parser_perform_range_for_lookup (tree range, tree *begin, tree *end)
9463 {
9464   if (error_operand_p (range))
9465     {
9466       *begin = *end = error_mark_node;
9467       return error_mark_node;
9468     }
9469
9470   if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (range))))
9471     {
9472       error ("range-based %<for%> expression of type %qT "
9473              "has incomplete type", TREE_TYPE (range));
9474       *begin = *end = error_mark_node;
9475       return error_mark_node;
9476     }
9477   if (TREE_CODE (TREE_TYPE (range)) == ARRAY_TYPE)
9478     {
9479       /* If RANGE is an array, we will use pointer arithmetic.  */
9480       *begin = range;
9481       *end = build_binary_op (input_location, PLUS_EXPR,
9482                               range,
9483                               array_type_nelts_top (TREE_TYPE (range)),
9484                               0);
9485       return build_pointer_type (TREE_TYPE (TREE_TYPE (range)));
9486     }
9487   else
9488     {
9489       /* If it is not an array, we must do a bit of magic.  */
9490       tree id_begin, id_end;
9491       tree member_begin, member_end;
9492
9493       *begin = *end = error_mark_node;
9494
9495       id_begin = get_identifier ("begin");
9496       id_end = get_identifier ("end");
9497       member_begin = lookup_member (TREE_TYPE (range), id_begin,
9498                                     /*protect=*/2, /*want_type=*/false);
9499       member_end = lookup_member (TREE_TYPE (range), id_end,
9500                                   /*protect=*/2, /*want_type=*/false);
9501
9502       if (member_begin != NULL_TREE || member_end != NULL_TREE)
9503         {
9504           /* Use the member functions.  */
9505           if (member_begin != NULL_TREE)
9506             *begin = cp_parser_range_for_member_function (range, id_begin);
9507           else
9508             error ("range-based %<for%> expression of type %qT has an "
9509                    "%<end%> member but not a %<begin%>", TREE_TYPE (range));
9510
9511           if (member_end != NULL_TREE)
9512             *end = cp_parser_range_for_member_function (range, id_end);
9513           else
9514             error ("range-based %<for%> expression of type %qT has a "
9515                    "%<begin%> member but not an %<end%>", TREE_TYPE (range));
9516         }
9517       else
9518         {
9519           /* Use global functions with ADL.  */
9520           VEC(tree,gc) *vec;
9521           vec = make_tree_vector ();
9522
9523           VEC_safe_push (tree, gc, vec, range);
9524
9525           member_begin = perform_koenig_lookup (id_begin, vec,
9526                                                 /*include_std=*/true,
9527                                                 tf_warning_or_error);
9528           *begin = finish_call_expr (member_begin, &vec, false, true,
9529                                      tf_warning_or_error);
9530           member_end = perform_koenig_lookup (id_end, vec,
9531                                               /*include_std=*/true,
9532                                               tf_warning_or_error);
9533           *end = finish_call_expr (member_end, &vec, false, true,
9534                                    tf_warning_or_error);
9535
9536           release_tree_vector (vec);
9537         }
9538
9539       /* Last common checks.  */
9540       if (*begin == error_mark_node || *end == error_mark_node)
9541         {
9542           /* If one of the expressions is an error do no more checks.  */
9543           *begin = *end = error_mark_node;
9544           return error_mark_node;
9545         }
9546       else
9547         {
9548           tree iter_type = cv_unqualified (TREE_TYPE (*begin));
9549           /* The unqualified type of the __begin and __end temporaries should
9550              be the same, as required by the multiple auto declaration.  */
9551           if (!same_type_p (iter_type, cv_unqualified (TREE_TYPE (*end))))
9552             error ("inconsistent begin/end types in range-based %<for%> "
9553                    "statement: %qT and %qT",
9554                    TREE_TYPE (*begin), TREE_TYPE (*end));
9555           return iter_type;
9556         }
9557     }
9558 }
9559
9560 /* Helper function for cp_parser_perform_range_for_lookup.
9561    Builds a tree for RANGE.IDENTIFIER().  */
9562
9563 static tree
9564 cp_parser_range_for_member_function (tree range, tree identifier)
9565 {
9566   tree member, res;
9567   VEC(tree,gc) *vec;
9568
9569   member = finish_class_member_access_expr (range, identifier,
9570                                             false, tf_warning_or_error);
9571   if (member == error_mark_node)
9572     return error_mark_node;
9573
9574   vec = make_tree_vector ();
9575   res = finish_call_expr (member, &vec,
9576                           /*disallow_virtual=*/false,
9577                           /*koenig_p=*/false,
9578                           tf_warning_or_error);
9579   release_tree_vector (vec);
9580   return res;
9581 }
9582
9583 /* Parse an iteration-statement.
9584
9585    iteration-statement:
9586      while ( condition ) statement
9587      do statement while ( expression ) ;
9588      for ( for-init-statement condition [opt] ; expression [opt] )
9589        statement
9590
9591    Returns the new WHILE_STMT, DO_STMT, FOR_STMT or RANGE_FOR_STMT.  */
9592
9593 static tree
9594 cp_parser_iteration_statement (cp_parser* parser)
9595 {
9596   cp_token *token;
9597   enum rid keyword;
9598   tree statement;
9599   unsigned char in_statement;
9600
9601   /* Peek at the next token.  */
9602   token = cp_parser_require (parser, CPP_KEYWORD, RT_INTERATION);
9603   if (!token)
9604     return error_mark_node;
9605
9606   /* Remember whether or not we are already within an iteration
9607      statement.  */
9608   in_statement = parser->in_statement;
9609
9610   /* See what kind of keyword it is.  */
9611   keyword = token->keyword;
9612   switch (keyword)
9613     {
9614     case RID_WHILE:
9615       {
9616         tree condition;
9617
9618         /* Begin the while-statement.  */
9619         statement = begin_while_stmt ();
9620         /* Look for the `('.  */
9621         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
9622         /* Parse the condition.  */
9623         condition = cp_parser_condition (parser);
9624         finish_while_stmt_cond (condition, statement);
9625         /* Look for the `)'.  */
9626         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
9627         /* Parse the dependent statement.  */
9628         parser->in_statement = IN_ITERATION_STMT;
9629         cp_parser_already_scoped_statement (parser);
9630         parser->in_statement = in_statement;
9631         /* We're done with the while-statement.  */
9632         finish_while_stmt (statement);
9633       }
9634       break;
9635
9636     case RID_DO:
9637       {
9638         tree expression;
9639
9640         /* Begin the do-statement.  */
9641         statement = begin_do_stmt ();
9642         /* Parse the body of the do-statement.  */
9643         parser->in_statement = IN_ITERATION_STMT;
9644         cp_parser_implicitly_scoped_statement (parser, NULL);
9645         parser->in_statement = in_statement;
9646         finish_do_body (statement);
9647         /* Look for the `while' keyword.  */
9648         cp_parser_require_keyword (parser, RID_WHILE, RT_WHILE);
9649         /* Look for the `('.  */
9650         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
9651         /* Parse the expression.  */
9652         expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9653         /* We're done with the do-statement.  */
9654         finish_do_stmt (expression, statement);
9655         /* Look for the `)'.  */
9656         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
9657         /* Look for the `;'.  */
9658         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9659       }
9660       break;
9661
9662     case RID_FOR:
9663       {
9664         /* Look for the `('.  */
9665         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
9666
9667         statement = cp_parser_for (parser);
9668
9669         /* Look for the `)'.  */
9670         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
9671
9672         /* Parse the body of the for-statement.  */
9673         parser->in_statement = IN_ITERATION_STMT;
9674         cp_parser_already_scoped_statement (parser);
9675         parser->in_statement = in_statement;
9676
9677         /* We're done with the for-statement.  */
9678         finish_for_stmt (statement);
9679       }
9680       break;
9681
9682     default:
9683       cp_parser_error (parser, "expected iteration-statement");
9684       statement = error_mark_node;
9685       break;
9686     }
9687
9688   return statement;
9689 }
9690
9691 /* Parse a for-init-statement or the declarator of a range-based-for.
9692    Returns true if a range-based-for declaration is seen.
9693
9694    for-init-statement:
9695      expression-statement
9696      simple-declaration  */
9697
9698 static bool
9699 cp_parser_for_init_statement (cp_parser* parser, tree *decl)
9700 {
9701   /* If the next token is a `;', then we have an empty
9702      expression-statement.  Grammatically, this is also a
9703      simple-declaration, but an invalid one, because it does not
9704      declare anything.  Therefore, if we did not handle this case
9705      specially, we would issue an error message about an invalid
9706      declaration.  */
9707   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
9708     {
9709       bool is_range_for = false;
9710       bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
9711
9712       parser->colon_corrects_to_scope_p = false;
9713
9714       /* We're going to speculatively look for a declaration, falling back
9715          to an expression, if necessary.  */
9716       cp_parser_parse_tentatively (parser);
9717       /* Parse the declaration.  */
9718       cp_parser_simple_declaration (parser,
9719                                     /*function_definition_allowed_p=*/false,
9720                                     decl);
9721       parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
9722       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
9723         {
9724           /* It is a range-for, consume the ':' */
9725           cp_lexer_consume_token (parser->lexer);
9726           is_range_for = true;
9727           if (cxx_dialect < cxx0x)
9728             {
9729               error_at (cp_lexer_peek_token (parser->lexer)->location,
9730                         "range-based %<for%> loops are not allowed "
9731                         "in C++98 mode");
9732               *decl = error_mark_node;
9733             }
9734         }
9735       else
9736           /* The ';' is not consumed yet because we told
9737              cp_parser_simple_declaration not to.  */
9738           cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9739
9740       if (cp_parser_parse_definitely (parser))
9741         return is_range_for;
9742       /* If the tentative parse failed, then we shall need to look for an
9743          expression-statement.  */
9744     }
9745   /* If we are here, it is an expression-statement.  */
9746   cp_parser_expression_statement (parser, NULL_TREE);
9747   return false;
9748 }
9749
9750 /* Parse a jump-statement.
9751
9752    jump-statement:
9753      break ;
9754      continue ;
9755      return expression [opt] ;
9756      return braced-init-list ;
9757      goto identifier ;
9758
9759    GNU extension:
9760
9761    jump-statement:
9762      goto * expression ;
9763
9764    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
9765
9766 static tree
9767 cp_parser_jump_statement (cp_parser* parser)
9768 {
9769   tree statement = error_mark_node;
9770   cp_token *token;
9771   enum rid keyword;
9772   unsigned char in_statement;
9773
9774   /* Peek at the next token.  */
9775   token = cp_parser_require (parser, CPP_KEYWORD, RT_JUMP);
9776   if (!token)
9777     return error_mark_node;
9778
9779   /* See what kind of keyword it is.  */
9780   keyword = token->keyword;
9781   switch (keyword)
9782     {
9783     case RID_BREAK:
9784       in_statement = parser->in_statement & ~IN_IF_STMT;      
9785       switch (in_statement)
9786         {
9787         case 0:
9788           error_at (token->location, "break statement not within loop or switch");
9789           break;
9790         default:
9791           gcc_assert ((in_statement & IN_SWITCH_STMT)
9792                       || in_statement == IN_ITERATION_STMT);
9793           statement = finish_break_stmt ();
9794           break;
9795         case IN_OMP_BLOCK:
9796           error_at (token->location, "invalid exit from OpenMP structured block");
9797           break;
9798         case IN_OMP_FOR:
9799           error_at (token->location, "break statement used with OpenMP for loop");
9800           break;
9801         }
9802       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9803       break;
9804
9805     case RID_CONTINUE:
9806       switch (parser->in_statement & ~(IN_SWITCH_STMT | IN_IF_STMT))
9807         {
9808         case 0:
9809           error_at (token->location, "continue statement not within a loop");
9810           break;
9811         case IN_ITERATION_STMT:
9812         case IN_OMP_FOR:
9813           statement = finish_continue_stmt ();
9814           break;
9815         case IN_OMP_BLOCK:
9816           error_at (token->location, "invalid exit from OpenMP structured block");
9817           break;
9818         default:
9819           gcc_unreachable ();
9820         }
9821       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9822       break;
9823
9824     case RID_RETURN:
9825       {
9826         tree expr;
9827         bool expr_non_constant_p;
9828
9829         if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9830           {
9831             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
9832             expr = cp_parser_braced_list (parser, &expr_non_constant_p);
9833           }
9834         else if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
9835           expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9836         else
9837           /* If the next token is a `;', then there is no
9838              expression.  */
9839           expr = NULL_TREE;
9840         /* Build the return-statement.  */
9841         statement = finish_return_stmt (expr);
9842         /* Look for the final `;'.  */
9843         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9844       }
9845       break;
9846
9847     case RID_GOTO:
9848       /* Create the goto-statement.  */
9849       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
9850         {
9851           /* Issue a warning about this use of a GNU extension.  */
9852           pedwarn (token->location, OPT_pedantic, "ISO C++ forbids computed gotos");
9853           /* Consume the '*' token.  */
9854           cp_lexer_consume_token (parser->lexer);
9855           /* Parse the dependent expression.  */
9856           finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false, NULL));
9857         }
9858       else
9859         finish_goto_stmt (cp_parser_identifier (parser));
9860       /* Look for the final `;'.  */
9861       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9862       break;
9863
9864     default:
9865       cp_parser_error (parser, "expected jump-statement");
9866       break;
9867     }
9868
9869   return statement;
9870 }
9871
9872 /* Parse a declaration-statement.
9873
9874    declaration-statement:
9875      block-declaration  */
9876
9877 static void
9878 cp_parser_declaration_statement (cp_parser* parser)
9879 {
9880   void *p;
9881
9882   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
9883   p = obstack_alloc (&declarator_obstack, 0);
9884
9885  /* Parse the block-declaration.  */
9886   cp_parser_block_declaration (parser, /*statement_p=*/true);
9887
9888   /* Free any declarators allocated.  */
9889   obstack_free (&declarator_obstack, p);
9890
9891   /* Finish off the statement.  */
9892   finish_stmt ();
9893 }
9894
9895 /* Some dependent statements (like `if (cond) statement'), are
9896    implicitly in their own scope.  In other words, if the statement is
9897    a single statement (as opposed to a compound-statement), it is
9898    none-the-less treated as if it were enclosed in braces.  Any
9899    declarations appearing in the dependent statement are out of scope
9900    after control passes that point.  This function parses a statement,
9901    but ensures that is in its own scope, even if it is not a
9902    compound-statement.
9903
9904    If IF_P is not NULL, *IF_P is set to indicate whether the statement
9905    is a (possibly labeled) if statement which is not enclosed in
9906    braces and has an else clause.  This is used to implement
9907    -Wparentheses.
9908
9909    Returns the new statement.  */
9910
9911 static tree
9912 cp_parser_implicitly_scoped_statement (cp_parser* parser, bool *if_p)
9913 {
9914   tree statement;
9915
9916   if (if_p != NULL)
9917     *if_p = false;
9918
9919   /* Mark if () ; with a special NOP_EXPR.  */
9920   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9921     {
9922       location_t loc = cp_lexer_peek_token (parser->lexer)->location;
9923       cp_lexer_consume_token (parser->lexer);
9924       statement = add_stmt (build_empty_stmt (loc));
9925     }
9926   /* if a compound is opened, we simply parse the statement directly.  */
9927   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9928     statement = cp_parser_compound_statement (parser, NULL, false, false);
9929   /* If the token is not a `{', then we must take special action.  */
9930   else
9931     {
9932       /* Create a compound-statement.  */
9933       statement = begin_compound_stmt (0);
9934       /* Parse the dependent-statement.  */
9935       cp_parser_statement (parser, NULL_TREE, false, if_p);
9936       /* Finish the dummy compound-statement.  */
9937       finish_compound_stmt (statement);
9938     }
9939
9940   /* Return the statement.  */
9941   return statement;
9942 }
9943
9944 /* For some dependent statements (like `while (cond) statement'), we
9945    have already created a scope.  Therefore, even if the dependent
9946    statement is a compound-statement, we do not want to create another
9947    scope.  */
9948
9949 static void
9950 cp_parser_already_scoped_statement (cp_parser* parser)
9951 {
9952   /* If the token is a `{', then we must take special action.  */
9953   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
9954     cp_parser_statement (parser, NULL_TREE, false, NULL);
9955   else
9956     {
9957       /* Avoid calling cp_parser_compound_statement, so that we
9958          don't create a new scope.  Do everything else by hand.  */
9959       cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
9960       /* If the next keyword is `__label__' we have a label declaration.  */
9961       while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
9962         cp_parser_label_declaration (parser);
9963       /* Parse an (optional) statement-seq.  */
9964       cp_parser_statement_seq_opt (parser, NULL_TREE);
9965       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
9966     }
9967 }
9968
9969 /* Declarations [gram.dcl.dcl] */
9970
9971 /* Parse an optional declaration-sequence.
9972
9973    declaration-seq:
9974      declaration
9975      declaration-seq declaration  */
9976
9977 static void
9978 cp_parser_declaration_seq_opt (cp_parser* parser)
9979 {
9980   while (true)
9981     {
9982       cp_token *token;
9983
9984       token = cp_lexer_peek_token (parser->lexer);
9985
9986       if (token->type == CPP_CLOSE_BRACE
9987           || token->type == CPP_EOF
9988           || token->type == CPP_PRAGMA_EOL)
9989         break;
9990
9991       if (token->type == CPP_SEMICOLON)
9992         {
9993           /* A declaration consisting of a single semicolon is
9994              invalid.  Allow it unless we're being pedantic.  */
9995           cp_lexer_consume_token (parser->lexer);
9996           if (!in_system_header)
9997             pedwarn (input_location, OPT_pedantic, "extra %<;%>");
9998           continue;
9999         }
10000
10001       /* If we're entering or exiting a region that's implicitly
10002          extern "C", modify the lang context appropriately.  */
10003       if (!parser->implicit_extern_c && token->implicit_extern_c)
10004         {
10005           push_lang_context (lang_name_c);
10006           parser->implicit_extern_c = true;
10007         }
10008       else if (parser->implicit_extern_c && !token->implicit_extern_c)
10009         {
10010           pop_lang_context ();
10011           parser->implicit_extern_c = false;
10012         }
10013
10014       if (token->type == CPP_PRAGMA)
10015         {
10016           /* A top-level declaration can consist solely of a #pragma.
10017              A nested declaration cannot, so this is done here and not
10018              in cp_parser_declaration.  (A #pragma at block scope is
10019              handled in cp_parser_statement.)  */
10020           cp_parser_pragma (parser, pragma_external);
10021           continue;
10022         }
10023
10024       /* Parse the declaration itself.  */
10025       cp_parser_declaration (parser);
10026     }
10027 }
10028
10029 /* Parse a declaration.
10030
10031    declaration:
10032      block-declaration
10033      function-definition
10034      template-declaration
10035      explicit-instantiation
10036      explicit-specialization
10037      linkage-specification
10038      namespace-definition
10039
10040    GNU extension:
10041
10042    declaration:
10043       __extension__ declaration */
10044
10045 static void
10046 cp_parser_declaration (cp_parser* parser)
10047 {
10048   cp_token token1;
10049   cp_token token2;
10050   int saved_pedantic;
10051   void *p;
10052   tree attributes = NULL_TREE;
10053
10054   /* Check for the `__extension__' keyword.  */
10055   if (cp_parser_extension_opt (parser, &saved_pedantic))
10056     {
10057       /* Parse the qualified declaration.  */
10058       cp_parser_declaration (parser);
10059       /* Restore the PEDANTIC flag.  */
10060       pedantic = saved_pedantic;
10061
10062       return;
10063     }
10064
10065   /* Try to figure out what kind of declaration is present.  */
10066   token1 = *cp_lexer_peek_token (parser->lexer);
10067
10068   if (token1.type != CPP_EOF)
10069     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
10070   else
10071     {
10072       token2.type = CPP_EOF;
10073       token2.keyword = RID_MAX;
10074     }
10075
10076   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
10077   p = obstack_alloc (&declarator_obstack, 0);
10078
10079   /* If the next token is `extern' and the following token is a string
10080      literal, then we have a linkage specification.  */
10081   if (token1.keyword == RID_EXTERN
10082       && cp_parser_is_pure_string_literal (&token2))
10083     cp_parser_linkage_specification (parser);
10084   /* If the next token is `template', then we have either a template
10085      declaration, an explicit instantiation, or an explicit
10086      specialization.  */
10087   else if (token1.keyword == RID_TEMPLATE)
10088     {
10089       /* `template <>' indicates a template specialization.  */
10090       if (token2.type == CPP_LESS
10091           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
10092         cp_parser_explicit_specialization (parser);
10093       /* `template <' indicates a template declaration.  */
10094       else if (token2.type == CPP_LESS)
10095         cp_parser_template_declaration (parser, /*member_p=*/false);
10096       /* Anything else must be an explicit instantiation.  */
10097       else
10098         cp_parser_explicit_instantiation (parser);
10099     }
10100   /* If the next token is `export', then we have a template
10101      declaration.  */
10102   else if (token1.keyword == RID_EXPORT)
10103     cp_parser_template_declaration (parser, /*member_p=*/false);
10104   /* If the next token is `extern', 'static' or 'inline' and the one
10105      after that is `template', we have a GNU extended explicit
10106      instantiation directive.  */
10107   else if (cp_parser_allow_gnu_extensions_p (parser)
10108            && (token1.keyword == RID_EXTERN
10109                || token1.keyword == RID_STATIC
10110                || token1.keyword == RID_INLINE)
10111            && token2.keyword == RID_TEMPLATE)
10112     cp_parser_explicit_instantiation (parser);
10113   /* If the next token is `namespace', check for a named or unnamed
10114      namespace definition.  */
10115   else if (token1.keyword == RID_NAMESPACE
10116            && (/* A named namespace definition.  */
10117                (token2.type == CPP_NAME
10118                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
10119                     != CPP_EQ))
10120                /* An unnamed namespace definition.  */
10121                || token2.type == CPP_OPEN_BRACE
10122                || token2.keyword == RID_ATTRIBUTE))
10123     cp_parser_namespace_definition (parser);
10124   /* An inline (associated) namespace definition.  */
10125   else if (token1.keyword == RID_INLINE
10126            && token2.keyword == RID_NAMESPACE)
10127     cp_parser_namespace_definition (parser);
10128   /* Objective-C++ declaration/definition.  */
10129   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
10130     cp_parser_objc_declaration (parser, NULL_TREE);
10131   else if (c_dialect_objc ()
10132            && token1.keyword == RID_ATTRIBUTE
10133            && cp_parser_objc_valid_prefix_attributes (parser, &attributes))
10134     cp_parser_objc_declaration (parser, attributes);
10135   /* We must have either a block declaration or a function
10136      definition.  */
10137   else
10138     /* Try to parse a block-declaration, or a function-definition.  */
10139     cp_parser_block_declaration (parser, /*statement_p=*/false);
10140
10141   /* Free any declarators allocated.  */
10142   obstack_free (&declarator_obstack, p);
10143 }
10144
10145 /* Parse a block-declaration.
10146
10147    block-declaration:
10148      simple-declaration
10149      asm-definition
10150      namespace-alias-definition
10151      using-declaration
10152      using-directive
10153
10154    GNU Extension:
10155
10156    block-declaration:
10157      __extension__ block-declaration
10158
10159    C++0x Extension:
10160
10161    block-declaration:
10162      static_assert-declaration
10163
10164    If STATEMENT_P is TRUE, then this block-declaration is occurring as
10165    part of a declaration-statement.  */
10166
10167 static void
10168 cp_parser_block_declaration (cp_parser *parser,
10169                              bool      statement_p)
10170 {
10171   cp_token *token1;
10172   int saved_pedantic;
10173
10174   /* Check for the `__extension__' keyword.  */
10175   if (cp_parser_extension_opt (parser, &saved_pedantic))
10176     {
10177       /* Parse the qualified declaration.  */
10178       cp_parser_block_declaration (parser, statement_p);
10179       /* Restore the PEDANTIC flag.  */
10180       pedantic = saved_pedantic;
10181
10182       return;
10183     }
10184
10185   /* Peek at the next token to figure out which kind of declaration is
10186      present.  */
10187   token1 = cp_lexer_peek_token (parser->lexer);
10188
10189   /* If the next keyword is `asm', we have an asm-definition.  */
10190   if (token1->keyword == RID_ASM)
10191     {
10192       if (statement_p)
10193         cp_parser_commit_to_tentative_parse (parser);
10194       cp_parser_asm_definition (parser);
10195     }
10196   /* If the next keyword is `namespace', we have a
10197      namespace-alias-definition.  */
10198   else if (token1->keyword == RID_NAMESPACE)
10199     cp_parser_namespace_alias_definition (parser);
10200   /* If the next keyword is `using', we have a
10201      using-declaration, a using-directive, or an alias-declaration.  */
10202   else if (token1->keyword == RID_USING)
10203     {
10204       cp_token *token2;
10205
10206       if (statement_p)
10207         cp_parser_commit_to_tentative_parse (parser);
10208       /* If the token after `using' is `namespace', then we have a
10209          using-directive.  */
10210       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
10211       if (token2->keyword == RID_NAMESPACE)
10212         cp_parser_using_directive (parser);
10213       /* If the second token after 'using' is '=', then we have an
10214          alias-declaration.  */
10215       else if (cxx_dialect >= cxx0x
10216                && token2->type == CPP_NAME
10217                && ((cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_EQ)
10218                    || (cp_lexer_peek_nth_token (parser->lexer, 3)->keyword
10219                        == RID_ATTRIBUTE)))
10220         cp_parser_alias_declaration (parser);
10221       /* Otherwise, it's a using-declaration.  */
10222       else
10223         cp_parser_using_declaration (parser,
10224                                      /*access_declaration_p=*/false);
10225     }
10226   /* If the next keyword is `__label__' we have a misplaced label
10227      declaration.  */
10228   else if (token1->keyword == RID_LABEL)
10229     {
10230       cp_lexer_consume_token (parser->lexer);
10231       error_at (token1->location, "%<__label__%> not at the beginning of a block");
10232       cp_parser_skip_to_end_of_statement (parser);
10233       /* If the next token is now a `;', consume it.  */
10234       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
10235         cp_lexer_consume_token (parser->lexer);
10236     }
10237   /* If the next token is `static_assert' we have a static assertion.  */
10238   else if (token1->keyword == RID_STATIC_ASSERT)
10239     cp_parser_static_assert (parser, /*member_p=*/false);
10240   /* Anything else must be a simple-declaration.  */
10241   else
10242     cp_parser_simple_declaration (parser, !statement_p,
10243                                   /*maybe_range_for_decl*/NULL);
10244 }
10245
10246 /* Parse a simple-declaration.
10247
10248    simple-declaration:
10249      decl-specifier-seq [opt] init-declarator-list [opt] ;
10250
10251    init-declarator-list:
10252      init-declarator
10253      init-declarator-list , init-declarator
10254
10255    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
10256    function-definition as a simple-declaration.
10257
10258    If MAYBE_RANGE_FOR_DECL is not NULL, the pointed tree will be set to the
10259    parsed declaration if it is an uninitialized single declarator not followed
10260    by a `;', or to error_mark_node otherwise. Either way, the trailing `;',
10261    if present, will not be consumed.  */
10262
10263 static void
10264 cp_parser_simple_declaration (cp_parser* parser,
10265                               bool function_definition_allowed_p,
10266                               tree *maybe_range_for_decl)
10267 {
10268   cp_decl_specifier_seq decl_specifiers;
10269   int declares_class_or_enum;
10270   bool saw_declarator;
10271
10272   if (maybe_range_for_decl)
10273     *maybe_range_for_decl = NULL_TREE;
10274
10275   /* Defer access checks until we know what is being declared; the
10276      checks for names appearing in the decl-specifier-seq should be
10277      done as if we were in the scope of the thing being declared.  */
10278   push_deferring_access_checks (dk_deferred);
10279
10280   /* Parse the decl-specifier-seq.  We have to keep track of whether
10281      or not the decl-specifier-seq declares a named class or
10282      enumeration type, since that is the only case in which the
10283      init-declarator-list is allowed to be empty.
10284
10285      [dcl.dcl]
10286
10287      In a simple-declaration, the optional init-declarator-list can be
10288      omitted only when declaring a class or enumeration, that is when
10289      the decl-specifier-seq contains either a class-specifier, an
10290      elaborated-type-specifier, or an enum-specifier.  */
10291   cp_parser_decl_specifier_seq (parser,
10292                                 CP_PARSER_FLAGS_OPTIONAL,
10293                                 &decl_specifiers,
10294                                 &declares_class_or_enum);
10295   /* We no longer need to defer access checks.  */
10296   stop_deferring_access_checks ();
10297
10298   /* In a block scope, a valid declaration must always have a
10299      decl-specifier-seq.  By not trying to parse declarators, we can
10300      resolve the declaration/expression ambiguity more quickly.  */
10301   if (!function_definition_allowed_p
10302       && !decl_specifiers.any_specifiers_p)
10303     {
10304       cp_parser_error (parser, "expected declaration");
10305       goto done;
10306     }
10307
10308   /* If the next two tokens are both identifiers, the code is
10309      erroneous. The usual cause of this situation is code like:
10310
10311        T t;
10312
10313      where "T" should name a type -- but does not.  */
10314   if (!decl_specifiers.any_type_specifiers_p
10315       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
10316     {
10317       /* If parsing tentatively, we should commit; we really are
10318          looking at a declaration.  */
10319       cp_parser_commit_to_tentative_parse (parser);
10320       /* Give up.  */
10321       goto done;
10322     }
10323
10324   /* If we have seen at least one decl-specifier, and the next token
10325      is not a parenthesis, then we must be looking at a declaration.
10326      (After "int (" we might be looking at a functional cast.)  */
10327   if (decl_specifiers.any_specifiers_p
10328       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN)
10329       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
10330       && !cp_parser_error_occurred (parser))
10331     cp_parser_commit_to_tentative_parse (parser);
10332
10333   /* Keep going until we hit the `;' at the end of the simple
10334      declaration.  */
10335   saw_declarator = false;
10336   while (cp_lexer_next_token_is_not (parser->lexer,
10337                                      CPP_SEMICOLON))
10338     {
10339       cp_token *token;
10340       bool function_definition_p;
10341       tree decl;
10342
10343       if (saw_declarator)
10344         {
10345           /* If we are processing next declarator, coma is expected */
10346           token = cp_lexer_peek_token (parser->lexer);
10347           gcc_assert (token->type == CPP_COMMA);
10348           cp_lexer_consume_token (parser->lexer);
10349           if (maybe_range_for_decl)
10350             *maybe_range_for_decl = error_mark_node;
10351         }
10352       else
10353         saw_declarator = true;
10354
10355       /* Parse the init-declarator.  */
10356       decl = cp_parser_init_declarator (parser, &decl_specifiers,
10357                                         /*checks=*/NULL,
10358                                         function_definition_allowed_p,
10359                                         /*member_p=*/false,
10360                                         declares_class_or_enum,
10361                                         &function_definition_p,
10362                                         maybe_range_for_decl);
10363       /* If an error occurred while parsing tentatively, exit quickly.
10364          (That usually happens when in the body of a function; each
10365          statement is treated as a declaration-statement until proven
10366          otherwise.)  */
10367       if (cp_parser_error_occurred (parser))
10368         goto done;
10369       /* Handle function definitions specially.  */
10370       if (function_definition_p)
10371         {
10372           /* If the next token is a `,', then we are probably
10373              processing something like:
10374
10375                void f() {}, *p;
10376
10377              which is erroneous.  */
10378           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
10379             {
10380               cp_token *token = cp_lexer_peek_token (parser->lexer);
10381               error_at (token->location,
10382                         "mixing"
10383                         " declarations and function-definitions is forbidden");
10384             }
10385           /* Otherwise, we're done with the list of declarators.  */
10386           else
10387             {
10388               pop_deferring_access_checks ();
10389               return;
10390             }
10391         }
10392       if (maybe_range_for_decl && *maybe_range_for_decl == NULL_TREE)
10393         *maybe_range_for_decl = decl;
10394       /* The next token should be either a `,' or a `;'.  */
10395       token = cp_lexer_peek_token (parser->lexer);
10396       /* If it's a `,', there are more declarators to come.  */
10397       if (token->type == CPP_COMMA)
10398         /* will be consumed next time around */;
10399       /* If it's a `;', we are done.  */
10400       else if (token->type == CPP_SEMICOLON || maybe_range_for_decl)
10401         break;
10402       /* Anything else is an error.  */
10403       else
10404         {
10405           /* If we have already issued an error message we don't need
10406              to issue another one.  */
10407           if (decl != error_mark_node
10408               || cp_parser_uncommitted_to_tentative_parse_p (parser))
10409             cp_parser_error (parser, "expected %<,%> or %<;%>");
10410           /* Skip tokens until we reach the end of the statement.  */
10411           cp_parser_skip_to_end_of_statement (parser);
10412           /* If the next token is now a `;', consume it.  */
10413           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
10414             cp_lexer_consume_token (parser->lexer);
10415           goto done;
10416         }
10417       /* After the first time around, a function-definition is not
10418          allowed -- even if it was OK at first.  For example:
10419
10420            int i, f() {}
10421
10422          is not valid.  */
10423       function_definition_allowed_p = false;
10424     }
10425
10426   /* Issue an error message if no declarators are present, and the
10427      decl-specifier-seq does not itself declare a class or
10428      enumeration.  */
10429   if (!saw_declarator)
10430     {
10431       if (cp_parser_declares_only_class_p (parser))
10432         shadow_tag (&decl_specifiers);
10433       /* Perform any deferred access checks.  */
10434       perform_deferred_access_checks ();
10435     }
10436
10437   /* Consume the `;'.  */
10438   if (!maybe_range_for_decl)
10439       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
10440
10441  done:
10442   pop_deferring_access_checks ();
10443 }
10444
10445 /* Parse a decl-specifier-seq.
10446
10447    decl-specifier-seq:
10448      decl-specifier-seq [opt] decl-specifier
10449
10450    decl-specifier:
10451      storage-class-specifier
10452      type-specifier
10453      function-specifier
10454      friend
10455      typedef
10456
10457    GNU Extension:
10458
10459    decl-specifier:
10460      attributes
10461
10462    Set *DECL_SPECS to a representation of the decl-specifier-seq.
10463
10464    The parser flags FLAGS is used to control type-specifier parsing.
10465
10466    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
10467    flags:
10468
10469      1: one of the decl-specifiers is an elaborated-type-specifier
10470         (i.e., a type declaration)
10471      2: one of the decl-specifiers is an enum-specifier or a
10472         class-specifier (i.e., a type definition)
10473
10474    */
10475
10476 static void
10477 cp_parser_decl_specifier_seq (cp_parser* parser,
10478                               cp_parser_flags flags,
10479                               cp_decl_specifier_seq *decl_specs,
10480                               int* declares_class_or_enum)
10481 {
10482   bool constructor_possible_p = !parser->in_declarator_p;
10483   cp_token *start_token = NULL;
10484
10485   /* Clear DECL_SPECS.  */
10486   clear_decl_specs (decl_specs);
10487
10488   /* Assume no class or enumeration type is declared.  */
10489   *declares_class_or_enum = 0;
10490
10491   /* Keep reading specifiers until there are no more to read.  */
10492   while (true)
10493     {
10494       bool constructor_p;
10495       bool found_decl_spec;
10496       cp_token *token;
10497
10498       /* Peek at the next token.  */
10499       token = cp_lexer_peek_token (parser->lexer);
10500
10501       /* Save the first token of the decl spec list for error
10502          reporting.  */
10503       if (!start_token)
10504         start_token = token;
10505       /* Handle attributes.  */
10506       if (token->keyword == RID_ATTRIBUTE)
10507         {
10508           /* Parse the attributes.  */
10509           decl_specs->attributes
10510             = chainon (decl_specs->attributes,
10511                        cp_parser_attributes_opt (parser));
10512           continue;
10513         }
10514       /* Assume we will find a decl-specifier keyword.  */
10515       found_decl_spec = true;
10516       /* If the next token is an appropriate keyword, we can simply
10517          add it to the list.  */
10518       switch (token->keyword)
10519         {
10520           /* decl-specifier:
10521                friend
10522                constexpr */
10523         case RID_FRIEND:
10524           if (!at_class_scope_p ())
10525             {
10526               error_at (token->location, "%<friend%> used outside of class");
10527               cp_lexer_purge_token (parser->lexer);
10528             }
10529           else
10530             {
10531               ++decl_specs->specs[(int) ds_friend];
10532               /* Consume the token.  */
10533               cp_lexer_consume_token (parser->lexer);
10534             }
10535           break;
10536
10537         case RID_CONSTEXPR:
10538           ++decl_specs->specs[(int) ds_constexpr];
10539           cp_lexer_consume_token (parser->lexer);
10540           break;
10541
10542           /* function-specifier:
10543                inline
10544                virtual
10545                explicit  */
10546         case RID_INLINE:
10547         case RID_VIRTUAL:
10548         case RID_EXPLICIT:
10549           cp_parser_function_specifier_opt (parser, decl_specs);
10550           break;
10551
10552           /* decl-specifier:
10553                typedef  */
10554         case RID_TYPEDEF:
10555           ++decl_specs->specs[(int) ds_typedef];
10556           /* Consume the token.  */
10557           cp_lexer_consume_token (parser->lexer);
10558           /* A constructor declarator cannot appear in a typedef.  */
10559           constructor_possible_p = false;
10560           /* The "typedef" keyword can only occur in a declaration; we
10561              may as well commit at this point.  */
10562           cp_parser_commit_to_tentative_parse (parser);
10563
10564           if (decl_specs->storage_class != sc_none)
10565             decl_specs->conflicting_specifiers_p = true;
10566           break;
10567
10568           /* storage-class-specifier:
10569                auto
10570                register
10571                static
10572                extern
10573                mutable
10574
10575              GNU Extension:
10576                thread  */
10577         case RID_AUTO:
10578           if (cxx_dialect == cxx98) 
10579             {
10580               /* Consume the token.  */
10581               cp_lexer_consume_token (parser->lexer);
10582
10583               /* Complain about `auto' as a storage specifier, if
10584                  we're complaining about C++0x compatibility.  */
10585               warning_at (token->location, OPT_Wc__0x_compat, "%<auto%>"
10586                           " changes meaning in C++11; please remove it");
10587
10588               /* Set the storage class anyway.  */
10589               cp_parser_set_storage_class (parser, decl_specs, RID_AUTO,
10590                                            token->location);
10591             }
10592           else
10593             /* C++0x auto type-specifier.  */
10594             found_decl_spec = false;
10595           break;
10596
10597         case RID_REGISTER:
10598         case RID_STATIC:
10599         case RID_EXTERN:
10600         case RID_MUTABLE:
10601           /* Consume the token.  */
10602           cp_lexer_consume_token (parser->lexer);
10603           cp_parser_set_storage_class (parser, decl_specs, token->keyword,
10604                                        token->location);
10605           break;
10606         case RID_THREAD:
10607           /* Consume the token.  */
10608           cp_lexer_consume_token (parser->lexer);
10609           ++decl_specs->specs[(int) ds_thread];
10610           break;
10611
10612         default:
10613           /* We did not yet find a decl-specifier yet.  */
10614           found_decl_spec = false;
10615           break;
10616         }
10617
10618       if (found_decl_spec
10619           && (flags & CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR)
10620           && token->keyword != RID_CONSTEXPR)
10621         error ("decl-specifier invalid in condition");
10622
10623       /* Constructors are a special case.  The `S' in `S()' is not a
10624          decl-specifier; it is the beginning of the declarator.  */
10625       constructor_p
10626         = (!found_decl_spec
10627            && constructor_possible_p
10628            && (cp_parser_constructor_declarator_p
10629                (parser, decl_specs->specs[(int) ds_friend] != 0)));
10630
10631       /* If we don't have a DECL_SPEC yet, then we must be looking at
10632          a type-specifier.  */
10633       if (!found_decl_spec && !constructor_p)
10634         {
10635           int decl_spec_declares_class_or_enum;
10636           bool is_cv_qualifier;
10637           tree type_spec;
10638
10639           type_spec
10640             = cp_parser_type_specifier (parser, flags,
10641                                         decl_specs,
10642                                         /*is_declaration=*/true,
10643                                         &decl_spec_declares_class_or_enum,
10644                                         &is_cv_qualifier);
10645           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
10646
10647           /* If this type-specifier referenced a user-defined type
10648              (a typedef, class-name, etc.), then we can't allow any
10649              more such type-specifiers henceforth.
10650
10651              [dcl.spec]
10652
10653              The longest sequence of decl-specifiers that could
10654              possibly be a type name is taken as the
10655              decl-specifier-seq of a declaration.  The sequence shall
10656              be self-consistent as described below.
10657
10658              [dcl.type]
10659
10660              As a general rule, at most one type-specifier is allowed
10661              in the complete decl-specifier-seq of a declaration.  The
10662              only exceptions are the following:
10663
10664              -- const or volatile can be combined with any other
10665                 type-specifier.
10666
10667              -- signed or unsigned can be combined with char, long,
10668                 short, or int.
10669
10670              -- ..
10671
10672              Example:
10673
10674                typedef char* Pc;
10675                void g (const int Pc);
10676
10677              Here, Pc is *not* part of the decl-specifier seq; it's
10678              the declarator.  Therefore, once we see a type-specifier
10679              (other than a cv-qualifier), we forbid any additional
10680              user-defined types.  We *do* still allow things like `int
10681              int' to be considered a decl-specifier-seq, and issue the
10682              error message later.  */
10683           if (type_spec && !is_cv_qualifier)
10684             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
10685           /* A constructor declarator cannot follow a type-specifier.  */
10686           if (type_spec)
10687             {
10688               constructor_possible_p = false;
10689               found_decl_spec = true;
10690               if (!is_cv_qualifier)
10691                 decl_specs->any_type_specifiers_p = true;
10692             }
10693         }
10694
10695       /* If we still do not have a DECL_SPEC, then there are no more
10696          decl-specifiers.  */
10697       if (!found_decl_spec)
10698         break;
10699
10700       decl_specs->any_specifiers_p = true;
10701       /* After we see one decl-specifier, further decl-specifiers are
10702          always optional.  */
10703       flags |= CP_PARSER_FLAGS_OPTIONAL;
10704     }
10705
10706   cp_parser_check_decl_spec (decl_specs, start_token->location);
10707
10708   /* Don't allow a friend specifier with a class definition.  */
10709   if (decl_specs->specs[(int) ds_friend] != 0
10710       && (*declares_class_or_enum & 2))
10711     error_at (start_token->location,
10712               "class definition may not be declared a friend");
10713 }
10714
10715 /* Parse an (optional) storage-class-specifier.
10716
10717    storage-class-specifier:
10718      auto
10719      register
10720      static
10721      extern
10722      mutable
10723
10724    GNU Extension:
10725
10726    storage-class-specifier:
10727      thread
10728
10729    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
10730
10731 static tree
10732 cp_parser_storage_class_specifier_opt (cp_parser* parser)
10733 {
10734   switch (cp_lexer_peek_token (parser->lexer)->keyword)
10735     {
10736     case RID_AUTO:
10737       if (cxx_dialect != cxx98)
10738         return NULL_TREE;
10739       /* Fall through for C++98.  */
10740
10741     case RID_REGISTER:
10742     case RID_STATIC:
10743     case RID_EXTERN:
10744     case RID_MUTABLE:
10745     case RID_THREAD:
10746       /* Consume the token.  */
10747       return cp_lexer_consume_token (parser->lexer)->u.value;
10748
10749     default:
10750       return NULL_TREE;
10751     }
10752 }
10753
10754 /* Parse an (optional) function-specifier.
10755
10756    function-specifier:
10757      inline
10758      virtual
10759      explicit
10760
10761    Returns an IDENTIFIER_NODE corresponding to the keyword used.
10762    Updates DECL_SPECS, if it is non-NULL.  */
10763
10764 static tree
10765 cp_parser_function_specifier_opt (cp_parser* parser,
10766                                   cp_decl_specifier_seq *decl_specs)
10767 {
10768   cp_token *token = cp_lexer_peek_token (parser->lexer);
10769   switch (token->keyword)
10770     {
10771     case RID_INLINE:
10772       if (decl_specs)
10773         ++decl_specs->specs[(int) ds_inline];
10774       break;
10775
10776     case RID_VIRTUAL:
10777       /* 14.5.2.3 [temp.mem]
10778
10779          A member function template shall not be virtual.  */
10780       if (PROCESSING_REAL_TEMPLATE_DECL_P ())
10781         error_at (token->location, "templates may not be %<virtual%>");
10782       else if (decl_specs)
10783         ++decl_specs->specs[(int) ds_virtual];
10784       break;
10785
10786     case RID_EXPLICIT:
10787       if (decl_specs)
10788         ++decl_specs->specs[(int) ds_explicit];
10789       break;
10790
10791     default:
10792       return NULL_TREE;
10793     }
10794
10795   /* Consume the token.  */
10796   return cp_lexer_consume_token (parser->lexer)->u.value;
10797 }
10798
10799 /* Parse a linkage-specification.
10800
10801    linkage-specification:
10802      extern string-literal { declaration-seq [opt] }
10803      extern string-literal declaration  */
10804
10805 static void
10806 cp_parser_linkage_specification (cp_parser* parser)
10807 {
10808   tree linkage;
10809
10810   /* Look for the `extern' keyword.  */
10811   cp_parser_require_keyword (parser, RID_EXTERN, RT_EXTERN);
10812
10813   /* Look for the string-literal.  */
10814   linkage = cp_parser_string_literal (parser, false, false);
10815
10816   /* Transform the literal into an identifier.  If the literal is a
10817      wide-character string, or contains embedded NULs, then we can't
10818      handle it as the user wants.  */
10819   if (strlen (TREE_STRING_POINTER (linkage))
10820       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
10821     {
10822       cp_parser_error (parser, "invalid linkage-specification");
10823       /* Assume C++ linkage.  */
10824       linkage = lang_name_cplusplus;
10825     }
10826   else
10827     linkage = get_identifier (TREE_STRING_POINTER (linkage));
10828
10829   /* We're now using the new linkage.  */
10830   push_lang_context (linkage);
10831
10832   /* If the next token is a `{', then we're using the first
10833      production.  */
10834   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
10835     {
10836       /* Consume the `{' token.  */
10837       cp_lexer_consume_token (parser->lexer);
10838       /* Parse the declarations.  */
10839       cp_parser_declaration_seq_opt (parser);
10840       /* Look for the closing `}'.  */
10841       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
10842     }
10843   /* Otherwise, there's just one declaration.  */
10844   else
10845     {
10846       bool saved_in_unbraced_linkage_specification_p;
10847
10848       saved_in_unbraced_linkage_specification_p
10849         = parser->in_unbraced_linkage_specification_p;
10850       parser->in_unbraced_linkage_specification_p = true;
10851       cp_parser_declaration (parser);
10852       parser->in_unbraced_linkage_specification_p
10853         = saved_in_unbraced_linkage_specification_p;
10854     }
10855
10856   /* We're done with the linkage-specification.  */
10857   pop_lang_context ();
10858 }
10859
10860 /* Parse a static_assert-declaration.
10861
10862    static_assert-declaration:
10863      static_assert ( constant-expression , string-literal ) ; 
10864
10865    If MEMBER_P, this static_assert is a class member.  */
10866
10867 static void 
10868 cp_parser_static_assert(cp_parser *parser, bool member_p)
10869 {
10870   tree condition;
10871   tree message;
10872   cp_token *token;
10873   location_t saved_loc;
10874   bool dummy;
10875
10876   /* Peek at the `static_assert' token so we can keep track of exactly
10877      where the static assertion started.  */
10878   token = cp_lexer_peek_token (parser->lexer);
10879   saved_loc = token->location;
10880
10881   /* Look for the `static_assert' keyword.  */
10882   if (!cp_parser_require_keyword (parser, RID_STATIC_ASSERT, 
10883                                   RT_STATIC_ASSERT))
10884     return;
10885
10886   /*  We know we are in a static assertion; commit to any tentative
10887       parse.  */
10888   if (cp_parser_parsing_tentatively (parser))
10889     cp_parser_commit_to_tentative_parse (parser);
10890
10891   /* Parse the `(' starting the static assertion condition.  */
10892   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
10893
10894   /* Parse the constant-expression.  Allow a non-constant expression
10895      here in order to give better diagnostics in finish_static_assert.  */
10896   condition = 
10897     cp_parser_constant_expression (parser,
10898                                    /*allow_non_constant_p=*/true,
10899                                    /*non_constant_p=*/&dummy);
10900
10901   /* Parse the separating `,'.  */
10902   cp_parser_require (parser, CPP_COMMA, RT_COMMA);
10903
10904   /* Parse the string-literal message.  */
10905   message = cp_parser_string_literal (parser, 
10906                                       /*translate=*/false,
10907                                       /*wide_ok=*/true);
10908
10909   /* A `)' completes the static assertion.  */
10910   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
10911     cp_parser_skip_to_closing_parenthesis (parser, 
10912                                            /*recovering=*/true, 
10913                                            /*or_comma=*/false,
10914                                            /*consume_paren=*/true);
10915
10916   /* A semicolon terminates the declaration.  */
10917   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
10918
10919   /* Complete the static assertion, which may mean either processing 
10920      the static assert now or saving it for template instantiation.  */
10921   finish_static_assert (condition, message, saved_loc, member_p);
10922 }
10923
10924 /* Parse a `decltype' type. Returns the type. 
10925
10926    simple-type-specifier:
10927      decltype ( expression )  */
10928
10929 static tree
10930 cp_parser_decltype (cp_parser *parser)
10931 {
10932   tree expr;
10933   bool id_expression_or_member_access_p = false;
10934   const char *saved_message;
10935   bool saved_integral_constant_expression_p;
10936   bool saved_non_integral_constant_expression_p;
10937   cp_token *id_expr_start_token;
10938   cp_token *start_token = cp_lexer_peek_token (parser->lexer);
10939
10940   if (start_token->type == CPP_DECLTYPE)
10941     {
10942       /* Already parsed.  */
10943       cp_lexer_consume_token (parser->lexer);
10944       return start_token->u.value;
10945     }
10946
10947   /* Look for the `decltype' token.  */
10948   if (!cp_parser_require_keyword (parser, RID_DECLTYPE, RT_DECLTYPE))
10949     return error_mark_node;
10950
10951   /* Types cannot be defined in a `decltype' expression.  Save away the
10952      old message.  */
10953   saved_message = parser->type_definition_forbidden_message;
10954
10955   /* And create the new one.  */
10956   parser->type_definition_forbidden_message
10957     = G_("types may not be defined in %<decltype%> expressions");
10958
10959   /* The restrictions on constant-expressions do not apply inside
10960      decltype expressions.  */
10961   saved_integral_constant_expression_p
10962     = parser->integral_constant_expression_p;
10963   saved_non_integral_constant_expression_p
10964     = parser->non_integral_constant_expression_p;
10965   parser->integral_constant_expression_p = false;
10966
10967   /* Do not actually evaluate the expression.  */
10968   ++cp_unevaluated_operand;
10969
10970   /* Do not warn about problems with the expression.  */
10971   ++c_inhibit_evaluation_warnings;
10972
10973   /* Parse the opening `('.  */
10974   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
10975     return error_mark_node;
10976   
10977   /* First, try parsing an id-expression.  */
10978   id_expr_start_token = cp_lexer_peek_token (parser->lexer);
10979   cp_parser_parse_tentatively (parser);
10980   expr = cp_parser_id_expression (parser,
10981                                   /*template_keyword_p=*/false,
10982                                   /*check_dependency_p=*/true,
10983                                   /*template_p=*/NULL,
10984                                   /*declarator_p=*/false,
10985                                   /*optional_p=*/false);
10986
10987   if (!cp_parser_error_occurred (parser) && expr != error_mark_node)
10988     {
10989       bool non_integral_constant_expression_p = false;
10990       tree id_expression = expr;
10991       cp_id_kind idk;
10992       const char *error_msg;
10993
10994       if (TREE_CODE (expr) == IDENTIFIER_NODE)
10995         /* Lookup the name we got back from the id-expression.  */
10996         expr = cp_parser_lookup_name (parser, expr,
10997                                       none_type,
10998                                       /*is_template=*/false,
10999                                       /*is_namespace=*/false,
11000                                       /*check_dependency=*/true,
11001                                       /*ambiguous_decls=*/NULL,
11002                                       id_expr_start_token->location);
11003
11004       if (expr
11005           && expr != error_mark_node
11006           && TREE_CODE (expr) != TEMPLATE_ID_EXPR
11007           && TREE_CODE (expr) != TYPE_DECL
11008           && (TREE_CODE (expr) != BIT_NOT_EXPR
11009               || !TYPE_P (TREE_OPERAND (expr, 0)))
11010           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
11011         {
11012           /* Complete lookup of the id-expression.  */
11013           expr = (finish_id_expression
11014                   (id_expression, expr, parser->scope, &idk,
11015                    /*integral_constant_expression_p=*/false,
11016                    /*allow_non_integral_constant_expression_p=*/true,
11017                    &non_integral_constant_expression_p,
11018                    /*template_p=*/false,
11019                    /*done=*/true,
11020                    /*address_p=*/false,
11021                    /*template_arg_p=*/false,
11022                    &error_msg,
11023                    id_expr_start_token->location));
11024
11025           if (expr == error_mark_node)
11026             /* We found an id-expression, but it was something that we
11027                should not have found. This is an error, not something
11028                we can recover from, so note that we found an
11029                id-expression and we'll recover as gracefully as
11030                possible.  */
11031             id_expression_or_member_access_p = true;
11032         }
11033
11034       if (expr 
11035           && expr != error_mark_node
11036           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
11037         /* We have an id-expression.  */
11038         id_expression_or_member_access_p = true;
11039     }
11040
11041   if (!id_expression_or_member_access_p)
11042     {
11043       /* Abort the id-expression parse.  */
11044       cp_parser_abort_tentative_parse (parser);
11045
11046       /* Parsing tentatively, again.  */
11047       cp_parser_parse_tentatively (parser);
11048
11049       /* Parse a class member access.  */
11050       expr = cp_parser_postfix_expression (parser, /*address_p=*/false,
11051                                            /*cast_p=*/false,
11052                                            /*member_access_only_p=*/true, NULL);
11053
11054       if (expr 
11055           && expr != error_mark_node
11056           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
11057         /* We have an id-expression.  */
11058         id_expression_or_member_access_p = true;
11059     }
11060
11061   if (id_expression_or_member_access_p)
11062     /* We have parsed the complete id-expression or member access.  */
11063     cp_parser_parse_definitely (parser);
11064   else
11065     {
11066       bool saved_greater_than_is_operator_p;
11067
11068       /* Abort our attempt to parse an id-expression or member access
11069          expression.  */
11070       cp_parser_abort_tentative_parse (parser);
11071
11072       /* Within a parenthesized expression, a `>' token is always
11073          the greater-than operator.  */
11074       saved_greater_than_is_operator_p
11075         = parser->greater_than_is_operator_p;
11076       parser->greater_than_is_operator_p = true;
11077
11078       /* Parse a full expression.  */
11079       expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
11080
11081       /* The `>' token might be the end of a template-id or
11082          template-parameter-list now.  */
11083       parser->greater_than_is_operator_p
11084         = saved_greater_than_is_operator_p;
11085     }
11086
11087   /* Go back to evaluating expressions.  */
11088   --cp_unevaluated_operand;
11089   --c_inhibit_evaluation_warnings;
11090
11091   /* Restore the old message and the integral constant expression
11092      flags.  */
11093   parser->type_definition_forbidden_message = saved_message;
11094   parser->integral_constant_expression_p
11095     = saved_integral_constant_expression_p;
11096   parser->non_integral_constant_expression_p
11097     = saved_non_integral_constant_expression_p;
11098
11099   /* Parse to the closing `)'.  */
11100   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
11101     {
11102       cp_parser_skip_to_closing_parenthesis (parser, true, false,
11103                                              /*consume_paren=*/true);
11104       return error_mark_node;
11105     }
11106
11107   expr = finish_decltype_type (expr, id_expression_or_member_access_p,
11108                                tf_warning_or_error);
11109
11110   /* Replace the decltype with a CPP_DECLTYPE so we don't need to parse
11111      it again.  */
11112   start_token->type = CPP_DECLTYPE;
11113   start_token->u.value = expr;
11114   start_token->keyword = RID_MAX;
11115   cp_lexer_purge_tokens_after (parser->lexer, start_token);
11116
11117   return expr;
11118 }
11119
11120 /* Special member functions [gram.special] */
11121
11122 /* Parse a conversion-function-id.
11123
11124    conversion-function-id:
11125      operator conversion-type-id
11126
11127    Returns an IDENTIFIER_NODE representing the operator.  */
11128
11129 static tree
11130 cp_parser_conversion_function_id (cp_parser* parser)
11131 {
11132   tree type;
11133   tree saved_scope;
11134   tree saved_qualifying_scope;
11135   tree saved_object_scope;
11136   tree pushed_scope = NULL_TREE;
11137
11138   /* Look for the `operator' token.  */
11139   if (!cp_parser_require_keyword (parser, RID_OPERATOR, RT_OPERATOR))
11140     return error_mark_node;
11141   /* When we parse the conversion-type-id, the current scope will be
11142      reset.  However, we need that information in able to look up the
11143      conversion function later, so we save it here.  */
11144   saved_scope = parser->scope;
11145   saved_qualifying_scope = parser->qualifying_scope;
11146   saved_object_scope = parser->object_scope;
11147   /* We must enter the scope of the class so that the names of
11148      entities declared within the class are available in the
11149      conversion-type-id.  For example, consider:
11150
11151        struct S {
11152          typedef int I;
11153          operator I();
11154        };
11155
11156        S::operator I() { ... }
11157
11158      In order to see that `I' is a type-name in the definition, we
11159      must be in the scope of `S'.  */
11160   if (saved_scope)
11161     pushed_scope = push_scope (saved_scope);
11162   /* Parse the conversion-type-id.  */
11163   type = cp_parser_conversion_type_id (parser);
11164   /* Leave the scope of the class, if any.  */
11165   if (pushed_scope)
11166     pop_scope (pushed_scope);
11167   /* Restore the saved scope.  */
11168   parser->scope = saved_scope;
11169   parser->qualifying_scope = saved_qualifying_scope;
11170   parser->object_scope = saved_object_scope;
11171   /* If the TYPE is invalid, indicate failure.  */
11172   if (type == error_mark_node)
11173     return error_mark_node;
11174   return mangle_conv_op_name_for_type (type);
11175 }
11176
11177 /* Parse a conversion-type-id:
11178
11179    conversion-type-id:
11180      type-specifier-seq conversion-declarator [opt]
11181
11182    Returns the TYPE specified.  */
11183
11184 static tree
11185 cp_parser_conversion_type_id (cp_parser* parser)
11186 {
11187   tree attributes;
11188   cp_decl_specifier_seq type_specifiers;
11189   cp_declarator *declarator;
11190   tree type_specified;
11191
11192   /* Parse the attributes.  */
11193   attributes = cp_parser_attributes_opt (parser);
11194   /* Parse the type-specifiers.  */
11195   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
11196                                 /*is_trailing_return=*/false,
11197                                 &type_specifiers);
11198   /* If that didn't work, stop.  */
11199   if (type_specifiers.type == error_mark_node)
11200     return error_mark_node;
11201   /* Parse the conversion-declarator.  */
11202   declarator = cp_parser_conversion_declarator_opt (parser);
11203
11204   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
11205                                     /*initialized=*/0, &attributes);
11206   if (attributes)
11207     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
11208
11209   /* Don't give this error when parsing tentatively.  This happens to
11210      work because we always parse this definitively once.  */
11211   if (! cp_parser_uncommitted_to_tentative_parse_p (parser)
11212       && type_uses_auto (type_specified))
11213     {
11214       error ("invalid use of %<auto%> in conversion operator");
11215       return error_mark_node;
11216     }
11217
11218   return type_specified;
11219 }
11220
11221 /* Parse an (optional) conversion-declarator.
11222
11223    conversion-declarator:
11224      ptr-operator conversion-declarator [opt]
11225
11226    */
11227
11228 static cp_declarator *
11229 cp_parser_conversion_declarator_opt (cp_parser* parser)
11230 {
11231   enum tree_code code;
11232   tree class_type;
11233   cp_cv_quals cv_quals;
11234
11235   /* We don't know if there's a ptr-operator next, or not.  */
11236   cp_parser_parse_tentatively (parser);
11237   /* Try the ptr-operator.  */
11238   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
11239   /* If it worked, look for more conversion-declarators.  */
11240   if (cp_parser_parse_definitely (parser))
11241     {
11242       cp_declarator *declarator;
11243
11244       /* Parse another optional declarator.  */
11245       declarator = cp_parser_conversion_declarator_opt (parser);
11246
11247       return cp_parser_make_indirect_declarator
11248         (code, class_type, cv_quals, declarator);
11249    }
11250
11251   return NULL;
11252 }
11253
11254 /* Parse an (optional) ctor-initializer.
11255
11256    ctor-initializer:
11257      : mem-initializer-list
11258
11259    Returns TRUE iff the ctor-initializer was actually present.  */
11260
11261 static bool
11262 cp_parser_ctor_initializer_opt (cp_parser* parser)
11263 {
11264   /* If the next token is not a `:', then there is no
11265      ctor-initializer.  */
11266   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
11267     {
11268       /* Do default initialization of any bases and members.  */
11269       if (DECL_CONSTRUCTOR_P (current_function_decl))
11270         finish_mem_initializers (NULL_TREE);
11271
11272       return false;
11273     }
11274
11275   /* Consume the `:' token.  */
11276   cp_lexer_consume_token (parser->lexer);
11277   /* And the mem-initializer-list.  */
11278   cp_parser_mem_initializer_list (parser);
11279
11280   return true;
11281 }
11282
11283 /* Parse a mem-initializer-list.
11284
11285    mem-initializer-list:
11286      mem-initializer ... [opt]
11287      mem-initializer ... [opt] , mem-initializer-list  */
11288
11289 static void
11290 cp_parser_mem_initializer_list (cp_parser* parser)
11291 {
11292   tree mem_initializer_list = NULL_TREE;
11293   cp_token *token = cp_lexer_peek_token (parser->lexer);
11294
11295   /* Let the semantic analysis code know that we are starting the
11296      mem-initializer-list.  */
11297   if (!DECL_CONSTRUCTOR_P (current_function_decl))
11298     error_at (token->location,
11299               "only constructors take member initializers");
11300
11301   /* Loop through the list.  */
11302   while (true)
11303     {
11304       tree mem_initializer;
11305
11306       token = cp_lexer_peek_token (parser->lexer);
11307       /* Parse the mem-initializer.  */
11308       mem_initializer = cp_parser_mem_initializer (parser);
11309       /* If the next token is a `...', we're expanding member initializers. */
11310       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
11311         {
11312           /* Consume the `...'. */
11313           cp_lexer_consume_token (parser->lexer);
11314
11315           /* The TREE_PURPOSE must be a _TYPE, because base-specifiers
11316              can be expanded but members cannot. */
11317           if (mem_initializer != error_mark_node
11318               && !TYPE_P (TREE_PURPOSE (mem_initializer)))
11319             {
11320               error_at (token->location,
11321                         "cannot expand initializer for member %<%D%>",
11322                         TREE_PURPOSE (mem_initializer));
11323               mem_initializer = error_mark_node;
11324             }
11325
11326           /* Construct the pack expansion type. */
11327           if (mem_initializer != error_mark_node)
11328             mem_initializer = make_pack_expansion (mem_initializer);
11329         }
11330       /* Add it to the list, unless it was erroneous.  */
11331       if (mem_initializer != error_mark_node)
11332         {
11333           TREE_CHAIN (mem_initializer) = mem_initializer_list;
11334           mem_initializer_list = mem_initializer;
11335         }
11336       /* If the next token is not a `,', we're done.  */
11337       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11338         break;
11339       /* Consume the `,' token.  */
11340       cp_lexer_consume_token (parser->lexer);
11341     }
11342
11343   /* Perform semantic analysis.  */
11344   if (DECL_CONSTRUCTOR_P (current_function_decl))
11345     finish_mem_initializers (mem_initializer_list);
11346 }
11347
11348 /* Parse a mem-initializer.
11349
11350    mem-initializer:
11351      mem-initializer-id ( expression-list [opt] )
11352      mem-initializer-id braced-init-list
11353
11354    GNU extension:
11355
11356    mem-initializer:
11357      ( expression-list [opt] )
11358
11359    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
11360    class) or FIELD_DECL (for a non-static data member) to initialize;
11361    the TREE_VALUE is the expression-list.  An empty initialization
11362    list is represented by void_list_node.  */
11363
11364 static tree
11365 cp_parser_mem_initializer (cp_parser* parser)
11366 {
11367   tree mem_initializer_id;
11368   tree expression_list;
11369   tree member;
11370   cp_token *token = cp_lexer_peek_token (parser->lexer);
11371
11372   /* Find out what is being initialized.  */
11373   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
11374     {
11375       permerror (token->location,
11376                  "anachronistic old-style base class initializer");
11377       mem_initializer_id = NULL_TREE;
11378     }
11379   else
11380     {
11381       mem_initializer_id = cp_parser_mem_initializer_id (parser);
11382       if (mem_initializer_id == error_mark_node)
11383         return mem_initializer_id;
11384     }
11385   member = expand_member_init (mem_initializer_id);
11386   if (member && !DECL_P (member))
11387     in_base_initializer = 1;
11388
11389   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
11390     {
11391       bool expr_non_constant_p;
11392       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
11393       expression_list = cp_parser_braced_list (parser, &expr_non_constant_p);
11394       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
11395       expression_list = build_tree_list (NULL_TREE, expression_list);
11396     }
11397   else
11398     {
11399       VEC(tree,gc)* vec;
11400       vec = cp_parser_parenthesized_expression_list (parser, non_attr,
11401                                                      /*cast_p=*/false,
11402                                                      /*allow_expansion_p=*/true,
11403                                                      /*non_constant_p=*/NULL);
11404       if (vec == NULL)
11405         return error_mark_node;
11406       expression_list = build_tree_list_vec (vec);
11407       release_tree_vector (vec);
11408     }
11409
11410   if (expression_list == error_mark_node)
11411     return error_mark_node;
11412   if (!expression_list)
11413     expression_list = void_type_node;
11414
11415   in_base_initializer = 0;
11416
11417   return member ? build_tree_list (member, expression_list) : error_mark_node;
11418 }
11419
11420 /* Parse a mem-initializer-id.
11421
11422    mem-initializer-id:
11423      :: [opt] nested-name-specifier [opt] class-name
11424      identifier
11425
11426    Returns a TYPE indicating the class to be initializer for the first
11427    production.  Returns an IDENTIFIER_NODE indicating the data member
11428    to be initialized for the second production.  */
11429
11430 static tree
11431 cp_parser_mem_initializer_id (cp_parser* parser)
11432 {
11433   bool global_scope_p;
11434   bool nested_name_specifier_p;
11435   bool template_p = false;
11436   tree id;
11437
11438   cp_token *token = cp_lexer_peek_token (parser->lexer);
11439
11440   /* `typename' is not allowed in this context ([temp.res]).  */
11441   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
11442     {
11443       error_at (token->location, 
11444                 "keyword %<typename%> not allowed in this context (a qualified "
11445                 "member initializer is implicitly a type)");
11446       cp_lexer_consume_token (parser->lexer);
11447     }
11448   /* Look for the optional `::' operator.  */
11449   global_scope_p
11450     = (cp_parser_global_scope_opt (parser,
11451                                    /*current_scope_valid_p=*/false)
11452        != NULL_TREE);
11453   /* Look for the optional nested-name-specifier.  The simplest way to
11454      implement:
11455
11456        [temp.res]
11457
11458        The keyword `typename' is not permitted in a base-specifier or
11459        mem-initializer; in these contexts a qualified name that
11460        depends on a template-parameter is implicitly assumed to be a
11461        type name.
11462
11463      is to assume that we have seen the `typename' keyword at this
11464      point.  */
11465   nested_name_specifier_p
11466     = (cp_parser_nested_name_specifier_opt (parser,
11467                                             /*typename_keyword_p=*/true,
11468                                             /*check_dependency_p=*/true,
11469                                             /*type_p=*/true,
11470                                             /*is_declaration=*/true)
11471        != NULL_TREE);
11472   if (nested_name_specifier_p)
11473     template_p = cp_parser_optional_template_keyword (parser);
11474   /* If there is a `::' operator or a nested-name-specifier, then we
11475      are definitely looking for a class-name.  */
11476   if (global_scope_p || nested_name_specifier_p)
11477     return cp_parser_class_name (parser,
11478                                  /*typename_keyword_p=*/true,
11479                                  /*template_keyword_p=*/template_p,
11480                                  typename_type,
11481                                  /*check_dependency_p=*/true,
11482                                  /*class_head_p=*/false,
11483                                  /*is_declaration=*/true);
11484   /* Otherwise, we could also be looking for an ordinary identifier.  */
11485   cp_parser_parse_tentatively (parser);
11486   /* Try a class-name.  */
11487   id = cp_parser_class_name (parser,
11488                              /*typename_keyword_p=*/true,
11489                              /*template_keyword_p=*/false,
11490                              none_type,
11491                              /*check_dependency_p=*/true,
11492                              /*class_head_p=*/false,
11493                              /*is_declaration=*/true);
11494   /* If we found one, we're done.  */
11495   if (cp_parser_parse_definitely (parser))
11496     return id;
11497   /* Otherwise, look for an ordinary identifier.  */
11498   return cp_parser_identifier (parser);
11499 }
11500
11501 /* Overloading [gram.over] */
11502
11503 /* Parse an operator-function-id.
11504
11505    operator-function-id:
11506      operator operator
11507
11508    Returns an IDENTIFIER_NODE for the operator which is a
11509    human-readable spelling of the identifier, e.g., `operator +'.  */
11510
11511 static tree
11512 cp_parser_operator_function_id (cp_parser* parser)
11513 {
11514   /* Look for the `operator' keyword.  */
11515   if (!cp_parser_require_keyword (parser, RID_OPERATOR, RT_OPERATOR))
11516     return error_mark_node;
11517   /* And then the name of the operator itself.  */
11518   return cp_parser_operator (parser);
11519 }
11520
11521 /* Return an identifier node for a user-defined literal operator.
11522    The suffix identifier is chained to the operator name identifier.  */
11523
11524 static tree
11525 cp_literal_operator_id (const char* name)
11526 {
11527   tree identifier;
11528   char *buffer = XNEWVEC (char, strlen (UDLIT_OP_ANSI_PREFIX)
11529                               + strlen (name) + 10);
11530   sprintf (buffer, UDLIT_OP_ANSI_FORMAT, name);
11531   identifier = get_identifier (buffer);
11532   /*IDENTIFIER_UDLIT_OPNAME_P (identifier) = 1; If we get a flag someday. */
11533
11534   return identifier;
11535 }
11536
11537 /* Parse an operator.
11538
11539    operator:
11540      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
11541      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
11542      || ++ -- , ->* -> () []
11543
11544    GNU Extensions:
11545
11546    operator:
11547      <? >? <?= >?=
11548
11549    Returns an IDENTIFIER_NODE for the operator which is a
11550    human-readable spelling of the identifier, e.g., `operator +'.  */
11551
11552 static tree
11553 cp_parser_operator (cp_parser* parser)
11554 {
11555   tree id = NULL_TREE;
11556   cp_token *token;
11557
11558   /* Peek at the next token.  */
11559   token = cp_lexer_peek_token (parser->lexer);
11560   /* Figure out which operator we have.  */
11561   switch (token->type)
11562     {
11563     case CPP_KEYWORD:
11564       {
11565         enum tree_code op;
11566
11567         /* The keyword should be either `new' or `delete'.  */
11568         if (token->keyword == RID_NEW)
11569           op = NEW_EXPR;
11570         else if (token->keyword == RID_DELETE)
11571           op = DELETE_EXPR;
11572         else
11573           break;
11574
11575         /* Consume the `new' or `delete' token.  */
11576         cp_lexer_consume_token (parser->lexer);
11577
11578         /* Peek at the next token.  */
11579         token = cp_lexer_peek_token (parser->lexer);
11580         /* If it's a `[' token then this is the array variant of the
11581            operator.  */
11582         if (token->type == CPP_OPEN_SQUARE)
11583           {
11584             /* Consume the `[' token.  */
11585             cp_lexer_consume_token (parser->lexer);
11586             /* Look for the `]' token.  */
11587             cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
11588             id = ansi_opname (op == NEW_EXPR
11589                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
11590           }
11591         /* Otherwise, we have the non-array variant.  */
11592         else
11593           id = ansi_opname (op);
11594
11595         return id;
11596       }
11597
11598     case CPP_PLUS:
11599       id = ansi_opname (PLUS_EXPR);
11600       break;
11601
11602     case CPP_MINUS:
11603       id = ansi_opname (MINUS_EXPR);
11604       break;
11605
11606     case CPP_MULT:
11607       id = ansi_opname (MULT_EXPR);
11608       break;
11609
11610     case CPP_DIV:
11611       id = ansi_opname (TRUNC_DIV_EXPR);
11612       break;
11613
11614     case CPP_MOD:
11615       id = ansi_opname (TRUNC_MOD_EXPR);
11616       break;
11617
11618     case CPP_XOR:
11619       id = ansi_opname (BIT_XOR_EXPR);
11620       break;
11621
11622     case CPP_AND:
11623       id = ansi_opname (BIT_AND_EXPR);
11624       break;
11625
11626     case CPP_OR:
11627       id = ansi_opname (BIT_IOR_EXPR);
11628       break;
11629
11630     case CPP_COMPL:
11631       id = ansi_opname (BIT_NOT_EXPR);
11632       break;
11633
11634     case CPP_NOT:
11635       id = ansi_opname (TRUTH_NOT_EXPR);
11636       break;
11637
11638     case CPP_EQ:
11639       id = ansi_assopname (NOP_EXPR);
11640       break;
11641
11642     case CPP_LESS:
11643       id = ansi_opname (LT_EXPR);
11644       break;
11645
11646     case CPP_GREATER:
11647       id = ansi_opname (GT_EXPR);
11648       break;
11649
11650     case CPP_PLUS_EQ:
11651       id = ansi_assopname (PLUS_EXPR);
11652       break;
11653
11654     case CPP_MINUS_EQ:
11655       id = ansi_assopname (MINUS_EXPR);
11656       break;
11657
11658     case CPP_MULT_EQ:
11659       id = ansi_assopname (MULT_EXPR);
11660       break;
11661
11662     case CPP_DIV_EQ:
11663       id = ansi_assopname (TRUNC_DIV_EXPR);
11664       break;
11665
11666     case CPP_MOD_EQ:
11667       id = ansi_assopname (TRUNC_MOD_EXPR);
11668       break;
11669
11670     case CPP_XOR_EQ:
11671       id = ansi_assopname (BIT_XOR_EXPR);
11672       break;
11673
11674     case CPP_AND_EQ:
11675       id = ansi_assopname (BIT_AND_EXPR);
11676       break;
11677
11678     case CPP_OR_EQ:
11679       id = ansi_assopname (BIT_IOR_EXPR);
11680       break;
11681
11682     case CPP_LSHIFT:
11683       id = ansi_opname (LSHIFT_EXPR);
11684       break;
11685
11686     case CPP_RSHIFT:
11687       id = ansi_opname (RSHIFT_EXPR);
11688       break;
11689
11690     case CPP_LSHIFT_EQ:
11691       id = ansi_assopname (LSHIFT_EXPR);
11692       break;
11693
11694     case CPP_RSHIFT_EQ:
11695       id = ansi_assopname (RSHIFT_EXPR);
11696       break;
11697
11698     case CPP_EQ_EQ:
11699       id = ansi_opname (EQ_EXPR);
11700       break;
11701
11702     case CPP_NOT_EQ:
11703       id = ansi_opname (NE_EXPR);
11704       break;
11705
11706     case CPP_LESS_EQ:
11707       id = ansi_opname (LE_EXPR);
11708       break;
11709
11710     case CPP_GREATER_EQ:
11711       id = ansi_opname (GE_EXPR);
11712       break;
11713
11714     case CPP_AND_AND:
11715       id = ansi_opname (TRUTH_ANDIF_EXPR);
11716       break;
11717
11718     case CPP_OR_OR:
11719       id = ansi_opname (TRUTH_ORIF_EXPR);
11720       break;
11721
11722     case CPP_PLUS_PLUS:
11723       id = ansi_opname (POSTINCREMENT_EXPR);
11724       break;
11725
11726     case CPP_MINUS_MINUS:
11727       id = ansi_opname (PREDECREMENT_EXPR);
11728       break;
11729
11730     case CPP_COMMA:
11731       id = ansi_opname (COMPOUND_EXPR);
11732       break;
11733
11734     case CPP_DEREF_STAR:
11735       id = ansi_opname (MEMBER_REF);
11736       break;
11737
11738     case CPP_DEREF:
11739       id = ansi_opname (COMPONENT_REF);
11740       break;
11741
11742     case CPP_OPEN_PAREN:
11743       /* Consume the `('.  */
11744       cp_lexer_consume_token (parser->lexer);
11745       /* Look for the matching `)'.  */
11746       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
11747       return ansi_opname (CALL_EXPR);
11748
11749     case CPP_OPEN_SQUARE:
11750       /* Consume the `['.  */
11751       cp_lexer_consume_token (parser->lexer);
11752       /* Look for the matching `]'.  */
11753       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
11754       return ansi_opname (ARRAY_REF);
11755
11756     case CPP_STRING:
11757       if (cxx_dialect == cxx98)
11758         maybe_warn_cpp0x (CPP0X_USER_DEFINED_LITERALS);
11759       if (TREE_STRING_LENGTH (token->u.value) > 2)
11760         {
11761           error ("expected empty string after %<operator%> keyword");
11762           return error_mark_node;
11763         }
11764       /* Consume the string.  */
11765       cp_lexer_consume_token (parser->lexer);
11766       /* Look for the suffix identifier.  */
11767       token = cp_lexer_peek_token (parser->lexer);
11768       if (token->type == CPP_NAME)
11769         {
11770           id = cp_parser_identifier (parser);
11771           if (id != error_mark_node)
11772             {
11773               const char *name = IDENTIFIER_POINTER (id);
11774               return cp_literal_operator_id (name);
11775             }
11776         }
11777       else
11778         {
11779           error ("expected suffix identifier");
11780           return error_mark_node;
11781         }
11782
11783     case CPP_STRING_USERDEF:
11784       error ("missing space between %<\"\"%> and suffix identifier");
11785       return error_mark_node;
11786
11787     default:
11788       /* Anything else is an error.  */
11789       break;
11790     }
11791
11792   /* If we have selected an identifier, we need to consume the
11793      operator token.  */
11794   if (id)
11795     cp_lexer_consume_token (parser->lexer);
11796   /* Otherwise, no valid operator name was present.  */
11797   else
11798     {
11799       cp_parser_error (parser, "expected operator");
11800       id = error_mark_node;
11801     }
11802
11803   return id;
11804 }
11805
11806 /* Parse a template-declaration.
11807
11808    template-declaration:
11809      export [opt] template < template-parameter-list > declaration
11810
11811    If MEMBER_P is TRUE, this template-declaration occurs within a
11812    class-specifier.
11813
11814    The grammar rule given by the standard isn't correct.  What
11815    is really meant is:
11816
11817    template-declaration:
11818      export [opt] template-parameter-list-seq
11819        decl-specifier-seq [opt] init-declarator [opt] ;
11820      export [opt] template-parameter-list-seq
11821        function-definition
11822
11823    template-parameter-list-seq:
11824      template-parameter-list-seq [opt]
11825      template < template-parameter-list >  */
11826
11827 static void
11828 cp_parser_template_declaration (cp_parser* parser, bool member_p)
11829 {
11830   /* Check for `export'.  */
11831   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
11832     {
11833       /* Consume the `export' token.  */
11834       cp_lexer_consume_token (parser->lexer);
11835       /* Warn that we do not support `export'.  */
11836       warning (0, "keyword %<export%> not implemented, and will be ignored");
11837     }
11838
11839   cp_parser_template_declaration_after_export (parser, member_p);
11840 }
11841
11842 /* Parse a template-parameter-list.
11843
11844    template-parameter-list:
11845      template-parameter
11846      template-parameter-list , template-parameter
11847
11848    Returns a TREE_LIST.  Each node represents a template parameter.
11849    The nodes are connected via their TREE_CHAINs.  */
11850
11851 static tree
11852 cp_parser_template_parameter_list (cp_parser* parser)
11853 {
11854   tree parameter_list = NULL_TREE;
11855
11856   begin_template_parm_list ();
11857
11858   /* The loop below parses the template parms.  We first need to know
11859      the total number of template parms to be able to compute proper
11860      canonical types of each dependent type. So after the loop, when
11861      we know the total number of template parms,
11862      end_template_parm_list computes the proper canonical types and
11863      fixes up the dependent types accordingly.  */
11864   while (true)
11865     {
11866       tree parameter;
11867       bool is_non_type;
11868       bool is_parameter_pack;
11869       location_t parm_loc;
11870
11871       /* Parse the template-parameter.  */
11872       parm_loc = cp_lexer_peek_token (parser->lexer)->location;
11873       parameter = cp_parser_template_parameter (parser, 
11874                                                 &is_non_type,
11875                                                 &is_parameter_pack);
11876       /* Add it to the list.  */
11877       if (parameter != error_mark_node)
11878         parameter_list = process_template_parm (parameter_list,
11879                                                 parm_loc,
11880                                                 parameter,
11881                                                 is_non_type,
11882                                                 is_parameter_pack,
11883                                                 0);
11884       else
11885        {
11886          tree err_parm = build_tree_list (parameter, parameter);
11887          parameter_list = chainon (parameter_list, err_parm);
11888        }
11889
11890       /* If the next token is not a `,', we're done.  */
11891       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11892         break;
11893       /* Otherwise, consume the `,' token.  */
11894       cp_lexer_consume_token (parser->lexer);
11895     }
11896
11897   return end_template_parm_list (parameter_list);
11898 }
11899
11900 /* Parse a template-parameter.
11901
11902    template-parameter:
11903      type-parameter
11904      parameter-declaration
11905
11906    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
11907    the parameter.  The TREE_PURPOSE is the default value, if any.
11908    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
11909    iff this parameter is a non-type parameter.  *IS_PARAMETER_PACK is
11910    set to true iff this parameter is a parameter pack. */
11911
11912 static tree
11913 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type,
11914                               bool *is_parameter_pack)
11915 {
11916   cp_token *token;
11917   cp_parameter_declarator *parameter_declarator;
11918   cp_declarator *id_declarator;
11919   tree parm;
11920
11921   /* Assume it is a type parameter or a template parameter.  */
11922   *is_non_type = false;
11923   /* Assume it not a parameter pack. */
11924   *is_parameter_pack = false;
11925   /* Peek at the next token.  */
11926   token = cp_lexer_peek_token (parser->lexer);
11927   /* If it is `class' or `template', we have a type-parameter.  */
11928   if (token->keyword == RID_TEMPLATE)
11929     return cp_parser_type_parameter (parser, is_parameter_pack);
11930   /* If it is `class' or `typename' we do not know yet whether it is a
11931      type parameter or a non-type parameter.  Consider:
11932
11933        template <typename T, typename T::X X> ...
11934
11935      or:
11936
11937        template <class C, class D*> ...
11938
11939      Here, the first parameter is a type parameter, and the second is
11940      a non-type parameter.  We can tell by looking at the token after
11941      the identifier -- if it is a `,', `=', or `>' then we have a type
11942      parameter.  */
11943   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
11944     {
11945       /* Peek at the token after `class' or `typename'.  */
11946       token = cp_lexer_peek_nth_token (parser->lexer, 2);
11947       /* If it's an ellipsis, we have a template type parameter
11948          pack. */
11949       if (token->type == CPP_ELLIPSIS)
11950         return cp_parser_type_parameter (parser, is_parameter_pack);
11951       /* If it's an identifier, skip it.  */
11952       if (token->type == CPP_NAME)
11953         token = cp_lexer_peek_nth_token (parser->lexer, 3);
11954       /* Now, see if the token looks like the end of a template
11955          parameter.  */
11956       if (token->type == CPP_COMMA
11957           || token->type == CPP_EQ
11958           || token->type == CPP_GREATER)
11959         return cp_parser_type_parameter (parser, is_parameter_pack);
11960     }
11961
11962   /* Otherwise, it is a non-type parameter.
11963
11964      [temp.param]
11965
11966      When parsing a default template-argument for a non-type
11967      template-parameter, the first non-nested `>' is taken as the end
11968      of the template parameter-list rather than a greater-than
11969      operator.  */
11970   *is_non_type = true;
11971   parameter_declarator
11972      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
11973                                         /*parenthesized_p=*/NULL);
11974
11975   /* If the parameter declaration is marked as a parameter pack, set
11976      *IS_PARAMETER_PACK to notify the caller. Also, unmark the
11977      declarator's PACK_EXPANSION_P, otherwise we'll get errors from
11978      grokdeclarator. */
11979   if (parameter_declarator
11980       && parameter_declarator->declarator
11981       && parameter_declarator->declarator->parameter_pack_p)
11982     {
11983       *is_parameter_pack = true;
11984       parameter_declarator->declarator->parameter_pack_p = false;
11985     }
11986
11987   /* If the next token is an ellipsis, and we don't already have it
11988      marked as a parameter pack, then we have a parameter pack (that
11989      has no declarator).  */
11990   if (!*is_parameter_pack
11991       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
11992       && declarator_can_be_parameter_pack (parameter_declarator->declarator))
11993     {
11994       /* Consume the `...'.  */
11995       cp_lexer_consume_token (parser->lexer);
11996       maybe_warn_variadic_templates ();
11997       
11998       *is_parameter_pack = true;
11999     }
12000   /* We might end up with a pack expansion as the type of the non-type
12001      template parameter, in which case this is a non-type template
12002      parameter pack.  */
12003   else if (parameter_declarator
12004            && parameter_declarator->decl_specifiers.type
12005            && PACK_EXPANSION_P (parameter_declarator->decl_specifiers.type))
12006     {
12007       *is_parameter_pack = true;
12008       parameter_declarator->decl_specifiers.type = 
12009         PACK_EXPANSION_PATTERN (parameter_declarator->decl_specifiers.type);
12010     }
12011
12012   if (*is_parameter_pack && cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12013     {
12014       /* Parameter packs cannot have default arguments.  However, a
12015          user may try to do so, so we'll parse them and give an
12016          appropriate diagnostic here.  */
12017
12018       cp_token *start_token = cp_lexer_peek_token (parser->lexer);
12019       
12020       /* Find the name of the parameter pack.  */     
12021       id_declarator = parameter_declarator->declarator;
12022       while (id_declarator && id_declarator->kind != cdk_id)
12023         id_declarator = id_declarator->declarator;
12024       
12025       if (id_declarator && id_declarator->kind == cdk_id)
12026         error_at (start_token->location,
12027                   "template parameter pack %qD cannot have a default argument",
12028                   id_declarator->u.id.unqualified_name);
12029       else
12030         error_at (start_token->location,
12031                   "template parameter pack cannot have a default argument");
12032       
12033       /* Parse the default argument, but throw away the result.  */
12034       cp_parser_default_argument (parser, /*template_parm_p=*/true);
12035     }
12036
12037   parm = grokdeclarator (parameter_declarator->declarator,
12038                          &parameter_declarator->decl_specifiers,
12039                          TPARM, /*initialized=*/0,
12040                          /*attrlist=*/NULL);
12041   if (parm == error_mark_node)
12042     return error_mark_node;
12043
12044   return build_tree_list (parameter_declarator->default_argument, parm);
12045 }
12046
12047 /* Parse a type-parameter.
12048
12049    type-parameter:
12050      class identifier [opt]
12051      class identifier [opt] = type-id
12052      typename identifier [opt]
12053      typename identifier [opt] = type-id
12054      template < template-parameter-list > class identifier [opt]
12055      template < template-parameter-list > class identifier [opt]
12056        = id-expression
12057
12058    GNU Extension (variadic templates):
12059
12060    type-parameter:
12061      class ... identifier [opt]
12062      typename ... identifier [opt]
12063
12064    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
12065    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
12066    the declaration of the parameter.
12067
12068    Sets *IS_PARAMETER_PACK if this is a template parameter pack. */
12069
12070 static tree
12071 cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
12072 {
12073   cp_token *token;
12074   tree parameter;
12075
12076   /* Look for a keyword to tell us what kind of parameter this is.  */
12077   token = cp_parser_require (parser, CPP_KEYWORD, RT_CLASS_TYPENAME_TEMPLATE);
12078   if (!token)
12079     return error_mark_node;
12080
12081   switch (token->keyword)
12082     {
12083     case RID_CLASS:
12084     case RID_TYPENAME:
12085       {
12086         tree identifier;
12087         tree default_argument;
12088
12089         /* If the next token is an ellipsis, we have a template
12090            argument pack. */
12091         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
12092           {
12093             /* Consume the `...' token. */
12094             cp_lexer_consume_token (parser->lexer);
12095             maybe_warn_variadic_templates ();
12096
12097             *is_parameter_pack = true;
12098           }
12099
12100         /* If the next token is an identifier, then it names the
12101            parameter.  */
12102         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12103           identifier = cp_parser_identifier (parser);
12104         else
12105           identifier = NULL_TREE;
12106
12107         /* Create the parameter.  */
12108         parameter = finish_template_type_parm (class_type_node, identifier);
12109
12110         /* If the next token is an `=', we have a default argument.  */
12111         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12112           {
12113             /* Consume the `=' token.  */
12114             cp_lexer_consume_token (parser->lexer);
12115             /* Parse the default-argument.  */
12116             push_deferring_access_checks (dk_no_deferred);
12117             default_argument = cp_parser_type_id (parser);
12118
12119             /* Template parameter packs cannot have default
12120                arguments. */
12121             if (*is_parameter_pack)
12122               {
12123                 if (identifier)
12124                   error_at (token->location,
12125                             "template parameter pack %qD cannot have a "
12126                             "default argument", identifier);
12127                 else
12128                   error_at (token->location,
12129                             "template parameter packs cannot have "
12130                             "default arguments");
12131                 default_argument = NULL_TREE;
12132               }
12133             pop_deferring_access_checks ();
12134           }
12135         else
12136           default_argument = NULL_TREE;
12137
12138         /* Create the combined representation of the parameter and the
12139            default argument.  */
12140         parameter = build_tree_list (default_argument, parameter);
12141       }
12142       break;
12143
12144     case RID_TEMPLATE:
12145       {
12146         tree identifier;
12147         tree default_argument;
12148
12149         /* Look for the `<'.  */
12150         cp_parser_require (parser, CPP_LESS, RT_LESS);
12151         /* Parse the template-parameter-list.  */
12152         cp_parser_template_parameter_list (parser);
12153         /* Look for the `>'.  */
12154         cp_parser_require (parser, CPP_GREATER, RT_GREATER);
12155         /* Look for the `class' keyword.  */
12156         cp_parser_require_keyword (parser, RID_CLASS, RT_CLASS);
12157         /* If the next token is an ellipsis, we have a template
12158            argument pack. */
12159         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
12160           {
12161             /* Consume the `...' token. */
12162             cp_lexer_consume_token (parser->lexer);
12163             maybe_warn_variadic_templates ();
12164
12165             *is_parameter_pack = true;
12166           }
12167         /* If the next token is an `=', then there is a
12168            default-argument.  If the next token is a `>', we are at
12169            the end of the parameter-list.  If the next token is a `,',
12170            then we are at the end of this parameter.  */
12171         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
12172             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
12173             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
12174           {
12175             identifier = cp_parser_identifier (parser);
12176             /* Treat invalid names as if the parameter were nameless.  */
12177             if (identifier == error_mark_node)
12178               identifier = NULL_TREE;
12179           }
12180         else
12181           identifier = NULL_TREE;
12182
12183         /* Create the template parameter.  */
12184         parameter = finish_template_template_parm (class_type_node,
12185                                                    identifier);
12186
12187         /* If the next token is an `=', then there is a
12188            default-argument.  */
12189         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12190           {
12191             bool is_template;
12192
12193             /* Consume the `='.  */
12194             cp_lexer_consume_token (parser->lexer);
12195             /* Parse the id-expression.  */
12196             push_deferring_access_checks (dk_no_deferred);
12197             /* save token before parsing the id-expression, for error
12198                reporting */
12199             token = cp_lexer_peek_token (parser->lexer);
12200             default_argument
12201               = cp_parser_id_expression (parser,
12202                                          /*template_keyword_p=*/false,
12203                                          /*check_dependency_p=*/true,
12204                                          /*template_p=*/&is_template,
12205                                          /*declarator_p=*/false,
12206                                          /*optional_p=*/false);
12207             if (TREE_CODE (default_argument) == TYPE_DECL)
12208               /* If the id-expression was a template-id that refers to
12209                  a template-class, we already have the declaration here,
12210                  so no further lookup is needed.  */
12211                  ;
12212             else
12213               /* Look up the name.  */
12214               default_argument
12215                 = cp_parser_lookup_name (parser, default_argument,
12216                                          none_type,
12217                                          /*is_template=*/is_template,
12218                                          /*is_namespace=*/false,
12219                                          /*check_dependency=*/true,
12220                                          /*ambiguous_decls=*/NULL,
12221                                          token->location);
12222             /* See if the default argument is valid.  */
12223             default_argument
12224               = check_template_template_default_arg (default_argument);
12225
12226             /* Template parameter packs cannot have default
12227                arguments. */
12228             if (*is_parameter_pack)
12229               {
12230                 if (identifier)
12231                   error_at (token->location,
12232                             "template parameter pack %qD cannot "
12233                             "have a default argument",
12234                             identifier);
12235                 else
12236                   error_at (token->location, "template parameter packs cannot "
12237                             "have default arguments");
12238                 default_argument = NULL_TREE;
12239               }
12240             pop_deferring_access_checks ();
12241           }
12242         else
12243           default_argument = NULL_TREE;
12244
12245         /* Create the combined representation of the parameter and the
12246            default argument.  */
12247         parameter = build_tree_list (default_argument, parameter);
12248       }
12249       break;
12250
12251     default:
12252       gcc_unreachable ();
12253       break;
12254     }
12255
12256   return parameter;
12257 }
12258
12259 /* Parse a template-id.
12260
12261    template-id:
12262      template-name < template-argument-list [opt] >
12263
12264    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
12265    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
12266    returned.  Otherwise, if the template-name names a function, or set
12267    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
12268    names a class, returns a TYPE_DECL for the specialization.
12269
12270    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
12271    uninstantiated templates.  */
12272
12273 static tree
12274 cp_parser_template_id (cp_parser *parser,
12275                        bool template_keyword_p,
12276                        bool check_dependency_p,
12277                        bool is_declaration)
12278 {
12279   int i;
12280   tree templ;
12281   tree arguments;
12282   tree template_id;
12283   cp_token_position start_of_id = 0;
12284   deferred_access_check *chk;
12285   VEC (deferred_access_check,gc) *access_check;
12286   cp_token *next_token = NULL, *next_token_2 = NULL;
12287   bool is_identifier;
12288
12289   /* If the next token corresponds to a template-id, there is no need
12290      to reparse it.  */
12291   next_token = cp_lexer_peek_token (parser->lexer);
12292   if (next_token->type == CPP_TEMPLATE_ID)
12293     {
12294       struct tree_check *check_value;
12295
12296       /* Get the stored value.  */
12297       check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
12298       /* Perform any access checks that were deferred.  */
12299       access_check = check_value->checks;
12300       if (access_check)
12301         {
12302           FOR_EACH_VEC_ELT (deferred_access_check, access_check, i, chk)
12303             perform_or_defer_access_check (chk->binfo,
12304                                            chk->decl,
12305                                            chk->diag_decl);
12306         }
12307       /* Return the stored value.  */
12308       return check_value->value;
12309     }
12310
12311   /* Avoid performing name lookup if there is no possibility of
12312      finding a template-id.  */
12313   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
12314       || (next_token->type == CPP_NAME
12315           && !cp_parser_nth_token_starts_template_argument_list_p
12316                (parser, 2)))
12317     {
12318       cp_parser_error (parser, "expected template-id");
12319       return error_mark_node;
12320     }
12321
12322   /* Remember where the template-id starts.  */
12323   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
12324     start_of_id = cp_lexer_token_position (parser->lexer, false);
12325
12326   push_deferring_access_checks (dk_deferred);
12327
12328   /* Parse the template-name.  */
12329   is_identifier = false;
12330   templ = cp_parser_template_name (parser, template_keyword_p,
12331                                    check_dependency_p,
12332                                    is_declaration,
12333                                    &is_identifier);
12334   if (templ == error_mark_node || is_identifier)
12335     {
12336       pop_deferring_access_checks ();
12337       return templ;
12338     }
12339
12340   /* If we find the sequence `[:' after a template-name, it's probably
12341      a digraph-typo for `< ::'. Substitute the tokens and check if we can
12342      parse correctly the argument list.  */
12343   next_token = cp_lexer_peek_token (parser->lexer);
12344   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
12345   if (next_token->type == CPP_OPEN_SQUARE
12346       && next_token->flags & DIGRAPH
12347       && next_token_2->type == CPP_COLON
12348       && !(next_token_2->flags & PREV_WHITE))
12349     {
12350       cp_parser_parse_tentatively (parser);
12351       /* Change `:' into `::'.  */
12352       next_token_2->type = CPP_SCOPE;
12353       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
12354          CPP_LESS.  */
12355       cp_lexer_consume_token (parser->lexer);
12356
12357       /* Parse the arguments.  */
12358       arguments = cp_parser_enclosed_template_argument_list (parser);
12359       if (!cp_parser_parse_definitely (parser))
12360         {
12361           /* If we couldn't parse an argument list, then we revert our changes
12362              and return simply an error. Maybe this is not a template-id
12363              after all.  */
12364           next_token_2->type = CPP_COLON;
12365           cp_parser_error (parser, "expected %<<%>");
12366           pop_deferring_access_checks ();
12367           return error_mark_node;
12368         }
12369       /* Otherwise, emit an error about the invalid digraph, but continue
12370          parsing because we got our argument list.  */
12371       if (permerror (next_token->location,
12372                      "%<<::%> cannot begin a template-argument list"))
12373         {
12374           static bool hint = false;
12375           inform (next_token->location,
12376                   "%<<:%> is an alternate spelling for %<[%>."
12377                   " Insert whitespace between %<<%> and %<::%>");
12378           if (!hint && !flag_permissive)
12379             {
12380               inform (next_token->location, "(if you use %<-fpermissive%>"
12381                       " G++ will accept your code)");
12382               hint = true;
12383             }
12384         }
12385     }
12386   else
12387     {
12388       /* Look for the `<' that starts the template-argument-list.  */
12389       if (!cp_parser_require (parser, CPP_LESS, RT_LESS))
12390         {
12391           pop_deferring_access_checks ();
12392           return error_mark_node;
12393         }
12394       /* Parse the arguments.  */
12395       arguments = cp_parser_enclosed_template_argument_list (parser);
12396     }
12397
12398   /* Build a representation of the specialization.  */
12399   if (TREE_CODE (templ) == IDENTIFIER_NODE)
12400     template_id = build_min_nt (TEMPLATE_ID_EXPR, templ, arguments);
12401   else if (DECL_TYPE_TEMPLATE_P (templ)
12402            || DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
12403     {
12404       bool entering_scope;
12405       /* In "template <typename T> ... A<T>::", A<T> is the abstract A
12406          template (rather than some instantiation thereof) only if
12407          is not nested within some other construct.  For example, in
12408          "template <typename T> void f(T) { A<T>::", A<T> is just an
12409          instantiation of A.  */
12410       entering_scope = (template_parm_scope_p ()
12411                         && cp_lexer_next_token_is (parser->lexer,
12412                                                    CPP_SCOPE));
12413       template_id
12414         = finish_template_type (templ, arguments, entering_scope);
12415     }
12416   else
12417     {
12418       /* If it's not a class-template or a template-template, it should be
12419          a function-template.  */
12420       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (templ)
12421                    || TREE_CODE (templ) == OVERLOAD
12422                    || BASELINK_P (templ)));
12423
12424       template_id = lookup_template_function (templ, arguments);
12425     }
12426
12427   /* If parsing tentatively, replace the sequence of tokens that makes
12428      up the template-id with a CPP_TEMPLATE_ID token.  That way,
12429      should we re-parse the token stream, we will not have to repeat
12430      the effort required to do the parse, nor will we issue duplicate
12431      error messages about problems during instantiation of the
12432      template.  */
12433   if (start_of_id)
12434     {
12435       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
12436
12437       /* Reset the contents of the START_OF_ID token.  */
12438       token->type = CPP_TEMPLATE_ID;
12439       /* Retrieve any deferred checks.  Do not pop this access checks yet
12440          so the memory will not be reclaimed during token replacing below.  */
12441       token->u.tree_check_value = ggc_alloc_cleared_tree_check ();
12442       token->u.tree_check_value->value = template_id;
12443       token->u.tree_check_value->checks = get_deferred_access_checks ();
12444       token->keyword = RID_MAX;
12445
12446       /* Purge all subsequent tokens.  */
12447       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
12448
12449       /* ??? Can we actually assume that, if template_id ==
12450          error_mark_node, we will have issued a diagnostic to the
12451          user, as opposed to simply marking the tentative parse as
12452          failed?  */
12453       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
12454         error_at (token->location, "parse error in template argument list");
12455     }
12456
12457   pop_deferring_access_checks ();
12458   return template_id;
12459 }
12460
12461 /* Parse a template-name.
12462
12463    template-name:
12464      identifier
12465
12466    The standard should actually say:
12467
12468    template-name:
12469      identifier
12470      operator-function-id
12471
12472    A defect report has been filed about this issue.
12473
12474    A conversion-function-id cannot be a template name because they cannot
12475    be part of a template-id. In fact, looking at this code:
12476
12477    a.operator K<int>()
12478
12479    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
12480    It is impossible to call a templated conversion-function-id with an
12481    explicit argument list, since the only allowed template parameter is
12482    the type to which it is converting.
12483
12484    If TEMPLATE_KEYWORD_P is true, then we have just seen the
12485    `template' keyword, in a construction like:
12486
12487      T::template f<3>()
12488
12489    In that case `f' is taken to be a template-name, even though there
12490    is no way of knowing for sure.
12491
12492    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
12493    name refers to a set of overloaded functions, at least one of which
12494    is a template, or an IDENTIFIER_NODE with the name of the template,
12495    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
12496    names are looked up inside uninstantiated templates.  */
12497
12498 static tree
12499 cp_parser_template_name (cp_parser* parser,
12500                          bool template_keyword_p,
12501                          bool check_dependency_p,
12502                          bool is_declaration,
12503                          bool *is_identifier)
12504 {
12505   tree identifier;
12506   tree decl;
12507   tree fns;
12508   cp_token *token = cp_lexer_peek_token (parser->lexer);
12509
12510   /* If the next token is `operator', then we have either an
12511      operator-function-id or a conversion-function-id.  */
12512   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
12513     {
12514       /* We don't know whether we're looking at an
12515          operator-function-id or a conversion-function-id.  */
12516       cp_parser_parse_tentatively (parser);
12517       /* Try an operator-function-id.  */
12518       identifier = cp_parser_operator_function_id (parser);
12519       /* If that didn't work, try a conversion-function-id.  */
12520       if (!cp_parser_parse_definitely (parser))
12521         {
12522           cp_parser_error (parser, "expected template-name");
12523           return error_mark_node;
12524         }
12525     }
12526   /* Look for the identifier.  */
12527   else
12528     identifier = cp_parser_identifier (parser);
12529
12530   /* If we didn't find an identifier, we don't have a template-id.  */
12531   if (identifier == error_mark_node)
12532     return error_mark_node;
12533
12534   /* If the name immediately followed the `template' keyword, then it
12535      is a template-name.  However, if the next token is not `<', then
12536      we do not treat it as a template-name, since it is not being used
12537      as part of a template-id.  This enables us to handle constructs
12538      like:
12539
12540        template <typename T> struct S { S(); };
12541        template <typename T> S<T>::S();
12542
12543      correctly.  We would treat `S' as a template -- if it were `S<T>'
12544      -- but we do not if there is no `<'.  */
12545
12546   if (processing_template_decl
12547       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
12548     {
12549       /* In a declaration, in a dependent context, we pretend that the
12550          "template" keyword was present in order to improve error
12551          recovery.  For example, given:
12552
12553            template <typename T> void f(T::X<int>);
12554
12555          we want to treat "X<int>" as a template-id.  */
12556       if (is_declaration
12557           && !template_keyword_p
12558           && parser->scope && TYPE_P (parser->scope)
12559           && check_dependency_p
12560           && dependent_scope_p (parser->scope)
12561           /* Do not do this for dtors (or ctors), since they never
12562              need the template keyword before their name.  */
12563           && !constructor_name_p (identifier, parser->scope))
12564         {
12565           cp_token_position start = 0;
12566
12567           /* Explain what went wrong.  */
12568           error_at (token->location, "non-template %qD used as template",
12569                     identifier);
12570           inform (token->location, "use %<%T::template %D%> to indicate that it is a template",
12571                   parser->scope, identifier);
12572           /* If parsing tentatively, find the location of the "<" token.  */
12573           if (cp_parser_simulate_error (parser))
12574             start = cp_lexer_token_position (parser->lexer, true);
12575           /* Parse the template arguments so that we can issue error
12576              messages about them.  */
12577           cp_lexer_consume_token (parser->lexer);
12578           cp_parser_enclosed_template_argument_list (parser);
12579           /* Skip tokens until we find a good place from which to
12580              continue parsing.  */
12581           cp_parser_skip_to_closing_parenthesis (parser,
12582                                                  /*recovering=*/true,
12583                                                  /*or_comma=*/true,
12584                                                  /*consume_paren=*/false);
12585           /* If parsing tentatively, permanently remove the
12586              template argument list.  That will prevent duplicate
12587              error messages from being issued about the missing
12588              "template" keyword.  */
12589           if (start)
12590             cp_lexer_purge_tokens_after (parser->lexer, start);
12591           if (is_identifier)
12592             *is_identifier = true;
12593           return identifier;
12594         }
12595
12596       /* If the "template" keyword is present, then there is generally
12597          no point in doing name-lookup, so we just return IDENTIFIER.
12598          But, if the qualifying scope is non-dependent then we can
12599          (and must) do name-lookup normally.  */
12600       if (template_keyword_p
12601           && (!parser->scope
12602               || (TYPE_P (parser->scope)
12603                   && dependent_type_p (parser->scope))))
12604         return identifier;
12605     }
12606
12607   /* Look up the name.  */
12608   decl = cp_parser_lookup_name (parser, identifier,
12609                                 none_type,
12610                                 /*is_template=*/true,
12611                                 /*is_namespace=*/false,
12612                                 check_dependency_p,
12613                                 /*ambiguous_decls=*/NULL,
12614                                 token->location);
12615
12616   /* If DECL is a template, then the name was a template-name.  */
12617   if (TREE_CODE (decl) == TEMPLATE_DECL)
12618     ;
12619   else
12620     {
12621       tree fn = NULL_TREE;
12622
12623       /* The standard does not explicitly indicate whether a name that
12624          names a set of overloaded declarations, some of which are
12625          templates, is a template-name.  However, such a name should
12626          be a template-name; otherwise, there is no way to form a
12627          template-id for the overloaded templates.  */
12628       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
12629       if (TREE_CODE (fns) == OVERLOAD)
12630         for (fn = fns; fn; fn = OVL_NEXT (fn))
12631           if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
12632             break;
12633
12634       if (!fn)
12635         {
12636           /* The name does not name a template.  */
12637           cp_parser_error (parser, "expected template-name");
12638           return error_mark_node;
12639         }
12640     }
12641
12642   /* If DECL is dependent, and refers to a function, then just return
12643      its name; we will look it up again during template instantiation.  */
12644   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
12645     {
12646       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
12647       if (TYPE_P (scope) && dependent_type_p (scope))
12648         return identifier;
12649     }
12650
12651   return decl;
12652 }
12653
12654 /* Parse a template-argument-list.
12655
12656    template-argument-list:
12657      template-argument ... [opt]
12658      template-argument-list , template-argument ... [opt]
12659
12660    Returns a TREE_VEC containing the arguments.  */
12661
12662 static tree
12663 cp_parser_template_argument_list (cp_parser* parser)
12664 {
12665   tree fixed_args[10];
12666   unsigned n_args = 0;
12667   unsigned alloced = 10;
12668   tree *arg_ary = fixed_args;
12669   tree vec;
12670   bool saved_in_template_argument_list_p;
12671   bool saved_ice_p;
12672   bool saved_non_ice_p;
12673
12674   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
12675   parser->in_template_argument_list_p = true;
12676   /* Even if the template-id appears in an integral
12677      constant-expression, the contents of the argument list do
12678      not.  */
12679   saved_ice_p = parser->integral_constant_expression_p;
12680   parser->integral_constant_expression_p = false;
12681   saved_non_ice_p = parser->non_integral_constant_expression_p;
12682   parser->non_integral_constant_expression_p = false;
12683
12684   /* Parse the arguments.  */
12685   do
12686     {
12687       tree argument;
12688
12689       if (n_args)
12690         /* Consume the comma.  */
12691         cp_lexer_consume_token (parser->lexer);
12692
12693       /* Parse the template-argument.  */
12694       argument = cp_parser_template_argument (parser);
12695
12696       /* If the next token is an ellipsis, we're expanding a template
12697          argument pack. */
12698       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
12699         {
12700           if (argument == error_mark_node)
12701             {
12702               cp_token *token = cp_lexer_peek_token (parser->lexer);
12703               error_at (token->location,
12704                         "expected parameter pack before %<...%>");
12705             }
12706           /* Consume the `...' token. */
12707           cp_lexer_consume_token (parser->lexer);
12708
12709           /* Make the argument into a TYPE_PACK_EXPANSION or
12710              EXPR_PACK_EXPANSION. */
12711           argument = make_pack_expansion (argument);
12712         }
12713
12714       if (n_args == alloced)
12715         {
12716           alloced *= 2;
12717
12718           if (arg_ary == fixed_args)
12719             {
12720               arg_ary = XNEWVEC (tree, alloced);
12721               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
12722             }
12723           else
12724             arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
12725         }
12726       arg_ary[n_args++] = argument;
12727     }
12728   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
12729
12730   vec = make_tree_vec (n_args);
12731
12732   while (n_args--)
12733     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
12734
12735   if (arg_ary != fixed_args)
12736     free (arg_ary);
12737   parser->non_integral_constant_expression_p = saved_non_ice_p;
12738   parser->integral_constant_expression_p = saved_ice_p;
12739   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
12740 #ifdef ENABLE_CHECKING
12741   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
12742 #endif
12743   return vec;
12744 }
12745
12746 /* Parse a template-argument.
12747
12748    template-argument:
12749      assignment-expression
12750      type-id
12751      id-expression
12752
12753    The representation is that of an assignment-expression, type-id, or
12754    id-expression -- except that the qualified id-expression is
12755    evaluated, so that the value returned is either a DECL or an
12756    OVERLOAD.
12757
12758    Although the standard says "assignment-expression", it forbids
12759    throw-expressions or assignments in the template argument.
12760    Therefore, we use "conditional-expression" instead.  */
12761
12762 static tree
12763 cp_parser_template_argument (cp_parser* parser)
12764 {
12765   tree argument;
12766   bool template_p;
12767   bool address_p;
12768   bool maybe_type_id = false;
12769   cp_token *token = NULL, *argument_start_token = NULL;
12770   cp_id_kind idk;
12771
12772   /* There's really no way to know what we're looking at, so we just
12773      try each alternative in order.
12774
12775        [temp.arg]
12776
12777        In a template-argument, an ambiguity between a type-id and an
12778        expression is resolved to a type-id, regardless of the form of
12779        the corresponding template-parameter.
12780
12781      Therefore, we try a type-id first.  */
12782   cp_parser_parse_tentatively (parser);
12783   argument = cp_parser_template_type_arg (parser);
12784   /* If there was no error parsing the type-id but the next token is a
12785      '>>', our behavior depends on which dialect of C++ we're
12786      parsing. In C++98, we probably found a typo for '> >'. But there
12787      are type-id which are also valid expressions. For instance:
12788
12789      struct X { int operator >> (int); };
12790      template <int V> struct Foo {};
12791      Foo<X () >> 5> r;
12792
12793      Here 'X()' is a valid type-id of a function type, but the user just
12794      wanted to write the expression "X() >> 5". Thus, we remember that we
12795      found a valid type-id, but we still try to parse the argument as an
12796      expression to see what happens. 
12797
12798      In C++0x, the '>>' will be considered two separate '>'
12799      tokens.  */
12800   if (!cp_parser_error_occurred (parser)
12801       && cxx_dialect == cxx98
12802       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
12803     {
12804       maybe_type_id = true;
12805       cp_parser_abort_tentative_parse (parser);
12806     }
12807   else
12808     {
12809       /* If the next token isn't a `,' or a `>', then this argument wasn't
12810       really finished. This means that the argument is not a valid
12811       type-id.  */
12812       if (!cp_parser_next_token_ends_template_argument_p (parser))
12813         cp_parser_error (parser, "expected template-argument");
12814       /* If that worked, we're done.  */
12815       if (cp_parser_parse_definitely (parser))
12816         return argument;
12817     }
12818   /* We're still not sure what the argument will be.  */
12819   cp_parser_parse_tentatively (parser);
12820   /* Try a template.  */
12821   argument_start_token = cp_lexer_peek_token (parser->lexer);
12822   argument = cp_parser_id_expression (parser,
12823                                       /*template_keyword_p=*/false,
12824                                       /*check_dependency_p=*/true,
12825                                       &template_p,
12826                                       /*declarator_p=*/false,
12827                                       /*optional_p=*/false);
12828   /* If the next token isn't a `,' or a `>', then this argument wasn't
12829      really finished.  */
12830   if (!cp_parser_next_token_ends_template_argument_p (parser))
12831     cp_parser_error (parser, "expected template-argument");
12832   if (!cp_parser_error_occurred (parser))
12833     {
12834       /* Figure out what is being referred to.  If the id-expression
12835          was for a class template specialization, then we will have a
12836          TYPE_DECL at this point.  There is no need to do name lookup
12837          at this point in that case.  */
12838       if (TREE_CODE (argument) != TYPE_DECL)
12839         argument = cp_parser_lookup_name (parser, argument,
12840                                           none_type,
12841                                           /*is_template=*/template_p,
12842                                           /*is_namespace=*/false,
12843                                           /*check_dependency=*/true,
12844                                           /*ambiguous_decls=*/NULL,
12845                                           argument_start_token->location);
12846       if (TREE_CODE (argument) != TEMPLATE_DECL
12847           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
12848         cp_parser_error (parser, "expected template-name");
12849     }
12850   if (cp_parser_parse_definitely (parser))
12851     return argument;
12852   /* It must be a non-type argument.  There permitted cases are given
12853      in [temp.arg.nontype]:
12854
12855      -- an integral constant-expression of integral or enumeration
12856         type; or
12857
12858      -- the name of a non-type template-parameter; or
12859
12860      -- the name of an object or function with external linkage...
12861
12862      -- the address of an object or function with external linkage...
12863
12864      -- a pointer to member...  */
12865   /* Look for a non-type template parameter.  */
12866   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12867     {
12868       cp_parser_parse_tentatively (parser);
12869       argument = cp_parser_primary_expression (parser,
12870                                                /*address_p=*/false,
12871                                                /*cast_p=*/false,
12872                                                /*template_arg_p=*/true,
12873                                                &idk);
12874       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
12875           || !cp_parser_next_token_ends_template_argument_p (parser))
12876         cp_parser_simulate_error (parser);
12877       if (cp_parser_parse_definitely (parser))
12878         return argument;
12879     }
12880
12881   /* If the next token is "&", the argument must be the address of an
12882      object or function with external linkage.  */
12883   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
12884   if (address_p)
12885     cp_lexer_consume_token (parser->lexer);
12886   /* See if we might have an id-expression.  */
12887   token = cp_lexer_peek_token (parser->lexer);
12888   if (token->type == CPP_NAME
12889       || token->keyword == RID_OPERATOR
12890       || token->type == CPP_SCOPE
12891       || token->type == CPP_TEMPLATE_ID
12892       || token->type == CPP_NESTED_NAME_SPECIFIER)
12893     {
12894       cp_parser_parse_tentatively (parser);
12895       argument = cp_parser_primary_expression (parser,
12896                                                address_p,
12897                                                /*cast_p=*/false,
12898                                                /*template_arg_p=*/true,
12899                                                &idk);
12900       if (cp_parser_error_occurred (parser)
12901           || !cp_parser_next_token_ends_template_argument_p (parser))
12902         cp_parser_abort_tentative_parse (parser);
12903       else
12904         {
12905           tree probe;
12906
12907           if (TREE_CODE (argument) == INDIRECT_REF)
12908             {
12909               gcc_assert (REFERENCE_REF_P (argument));
12910               argument = TREE_OPERAND (argument, 0);
12911             }
12912
12913           /* If we're in a template, we represent a qualified-id referring
12914              to a static data member as a SCOPE_REF even if the scope isn't
12915              dependent so that we can check access control later.  */
12916           probe = argument;
12917           if (TREE_CODE (probe) == SCOPE_REF)
12918             probe = TREE_OPERAND (probe, 1);
12919           if (TREE_CODE (probe) == VAR_DECL)
12920             {
12921               /* A variable without external linkage might still be a
12922                  valid constant-expression, so no error is issued here
12923                  if the external-linkage check fails.  */
12924               if (!address_p && !DECL_EXTERNAL_LINKAGE_P (probe))
12925                 cp_parser_simulate_error (parser);
12926             }
12927           else if (is_overloaded_fn (argument))
12928             /* All overloaded functions are allowed; if the external
12929                linkage test does not pass, an error will be issued
12930                later.  */
12931             ;
12932           else if (address_p
12933                    && (TREE_CODE (argument) == OFFSET_REF
12934                        || TREE_CODE (argument) == SCOPE_REF))
12935             /* A pointer-to-member.  */
12936             ;
12937           else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
12938             ;
12939           else
12940             cp_parser_simulate_error (parser);
12941
12942           if (cp_parser_parse_definitely (parser))
12943             {
12944               if (address_p)
12945                 argument = build_x_unary_op (ADDR_EXPR, argument,
12946                                              tf_warning_or_error);
12947               return argument;
12948             }
12949         }
12950     }
12951   /* If the argument started with "&", there are no other valid
12952      alternatives at this point.  */
12953   if (address_p)
12954     {
12955       cp_parser_error (parser, "invalid non-type template argument");
12956       return error_mark_node;
12957     }
12958
12959   /* If the argument wasn't successfully parsed as a type-id followed
12960      by '>>', the argument can only be a constant expression now.
12961      Otherwise, we try parsing the constant-expression tentatively,
12962      because the argument could really be a type-id.  */
12963   if (maybe_type_id)
12964     cp_parser_parse_tentatively (parser);
12965   argument = cp_parser_constant_expression (parser,
12966                                             /*allow_non_constant_p=*/false,
12967                                             /*non_constant_p=*/NULL);
12968   argument = fold_non_dependent_expr (argument);
12969   if (!maybe_type_id)
12970     return argument;
12971   if (!cp_parser_next_token_ends_template_argument_p (parser))
12972     cp_parser_error (parser, "expected template-argument");
12973   if (cp_parser_parse_definitely (parser))
12974     return argument;
12975   /* We did our best to parse the argument as a non type-id, but that
12976      was the only alternative that matched (albeit with a '>' after
12977      it). We can assume it's just a typo from the user, and a
12978      diagnostic will then be issued.  */
12979   return cp_parser_template_type_arg (parser);
12980 }
12981
12982 /* Parse an explicit-instantiation.
12983
12984    explicit-instantiation:
12985      template declaration
12986
12987    Although the standard says `declaration', what it really means is:
12988
12989    explicit-instantiation:
12990      template decl-specifier-seq [opt] declarator [opt] ;
12991
12992    Things like `template int S<int>::i = 5, int S<double>::j;' are not
12993    supposed to be allowed.  A defect report has been filed about this
12994    issue.
12995
12996    GNU Extension:
12997
12998    explicit-instantiation:
12999      storage-class-specifier template
13000        decl-specifier-seq [opt] declarator [opt] ;
13001      function-specifier template
13002        decl-specifier-seq [opt] declarator [opt] ;  */
13003
13004 static void
13005 cp_parser_explicit_instantiation (cp_parser* parser)
13006 {
13007   int declares_class_or_enum;
13008   cp_decl_specifier_seq decl_specifiers;
13009   tree extension_specifier = NULL_TREE;
13010
13011   timevar_push (TV_TEMPLATE_INST);
13012
13013   /* Look for an (optional) storage-class-specifier or
13014      function-specifier.  */
13015   if (cp_parser_allow_gnu_extensions_p (parser))
13016     {
13017       extension_specifier
13018         = cp_parser_storage_class_specifier_opt (parser);
13019       if (!extension_specifier)
13020         extension_specifier
13021           = cp_parser_function_specifier_opt (parser,
13022                                               /*decl_specs=*/NULL);
13023     }
13024
13025   /* Look for the `template' keyword.  */
13026   cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE);
13027   /* Let the front end know that we are processing an explicit
13028      instantiation.  */
13029   begin_explicit_instantiation ();
13030   /* [temp.explicit] says that we are supposed to ignore access
13031      control while processing explicit instantiation directives.  */
13032   push_deferring_access_checks (dk_no_check);
13033   /* Parse a decl-specifier-seq.  */
13034   cp_parser_decl_specifier_seq (parser,
13035                                 CP_PARSER_FLAGS_OPTIONAL,
13036                                 &decl_specifiers,
13037                                 &declares_class_or_enum);
13038   /* If there was exactly one decl-specifier, and it declared a class,
13039      and there's no declarator, then we have an explicit type
13040      instantiation.  */
13041   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
13042     {
13043       tree type;
13044
13045       type = check_tag_decl (&decl_specifiers);
13046       /* Turn access control back on for names used during
13047          template instantiation.  */
13048       pop_deferring_access_checks ();
13049       if (type)
13050         do_type_instantiation (type, extension_specifier,
13051                                /*complain=*/tf_error);
13052     }
13053   else
13054     {
13055       cp_declarator *declarator;
13056       tree decl;
13057
13058       /* Parse the declarator.  */
13059       declarator
13060         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
13061                                 /*ctor_dtor_or_conv_p=*/NULL,
13062                                 /*parenthesized_p=*/NULL,
13063                                 /*member_p=*/false);
13064       if (declares_class_or_enum & 2)
13065         cp_parser_check_for_definition_in_return_type (declarator,
13066                                                        decl_specifiers.type,
13067                                                        decl_specifiers.type_location);
13068       if (declarator != cp_error_declarator)
13069         {
13070           if (decl_specifiers.specs[(int)ds_inline])
13071             permerror (input_location, "explicit instantiation shall not use"
13072                        " %<inline%> specifier");
13073           if (decl_specifiers.specs[(int)ds_constexpr])
13074             permerror (input_location, "explicit instantiation shall not use"
13075                        " %<constexpr%> specifier");
13076
13077           decl = grokdeclarator (declarator, &decl_specifiers,
13078                                  NORMAL, 0, &decl_specifiers.attributes);
13079           /* Turn access control back on for names used during
13080              template instantiation.  */
13081           pop_deferring_access_checks ();
13082           /* Do the explicit instantiation.  */
13083           do_decl_instantiation (decl, extension_specifier);
13084         }
13085       else
13086         {
13087           pop_deferring_access_checks ();
13088           /* Skip the body of the explicit instantiation.  */
13089           cp_parser_skip_to_end_of_statement (parser);
13090         }
13091     }
13092   /* We're done with the instantiation.  */
13093   end_explicit_instantiation ();
13094
13095   cp_parser_consume_semicolon_at_end_of_statement (parser);
13096
13097   timevar_pop (TV_TEMPLATE_INST);
13098 }
13099
13100 /* Parse an explicit-specialization.
13101
13102    explicit-specialization:
13103      template < > declaration
13104
13105    Although the standard says `declaration', what it really means is:
13106
13107    explicit-specialization:
13108      template <> decl-specifier [opt] init-declarator [opt] ;
13109      template <> function-definition
13110      template <> explicit-specialization
13111      template <> template-declaration  */
13112
13113 static void
13114 cp_parser_explicit_specialization (cp_parser* parser)
13115 {
13116   bool need_lang_pop;
13117   cp_token *token = cp_lexer_peek_token (parser->lexer);
13118
13119   /* Look for the `template' keyword.  */
13120   cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE);
13121   /* Look for the `<'.  */
13122   cp_parser_require (parser, CPP_LESS, RT_LESS);
13123   /* Look for the `>'.  */
13124   cp_parser_require (parser, CPP_GREATER, RT_GREATER);
13125   /* We have processed another parameter list.  */
13126   ++parser->num_template_parameter_lists;
13127   /* [temp]
13128
13129      A template ... explicit specialization ... shall not have C
13130      linkage.  */
13131   if (current_lang_name == lang_name_c)
13132     {
13133       error_at (token->location, "template specialization with C linkage");
13134       /* Give it C++ linkage to avoid confusing other parts of the
13135          front end.  */
13136       push_lang_context (lang_name_cplusplus);
13137       need_lang_pop = true;
13138     }
13139   else
13140     need_lang_pop = false;
13141   /* Let the front end know that we are beginning a specialization.  */
13142   if (!begin_specialization ())
13143     {
13144       end_specialization ();
13145       return;
13146     }
13147
13148   /* If the next keyword is `template', we need to figure out whether
13149      or not we're looking a template-declaration.  */
13150   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
13151     {
13152       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
13153           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
13154         cp_parser_template_declaration_after_export (parser,
13155                                                      /*member_p=*/false);
13156       else
13157         cp_parser_explicit_specialization (parser);
13158     }
13159   else
13160     /* Parse the dependent declaration.  */
13161     cp_parser_single_declaration (parser,
13162                                   /*checks=*/NULL,
13163                                   /*member_p=*/false,
13164                                   /*explicit_specialization_p=*/true,
13165                                   /*friend_p=*/NULL);
13166   /* We're done with the specialization.  */
13167   end_specialization ();
13168   /* For the erroneous case of a template with C linkage, we pushed an
13169      implicit C++ linkage scope; exit that scope now.  */
13170   if (need_lang_pop)
13171     pop_lang_context ();
13172   /* We're done with this parameter list.  */
13173   --parser->num_template_parameter_lists;
13174 }
13175
13176 /* Parse a type-specifier.
13177
13178    type-specifier:
13179      simple-type-specifier
13180      class-specifier
13181      enum-specifier
13182      elaborated-type-specifier
13183      cv-qualifier
13184
13185    GNU Extension:
13186
13187    type-specifier:
13188      __complex__
13189
13190    Returns a representation of the type-specifier.  For a
13191    class-specifier, enum-specifier, or elaborated-type-specifier, a
13192    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
13193
13194    The parser flags FLAGS is used to control type-specifier parsing.
13195
13196    If IS_DECLARATION is TRUE, then this type-specifier is appearing
13197    in a decl-specifier-seq.
13198
13199    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
13200    class-specifier, enum-specifier, or elaborated-type-specifier, then
13201    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
13202    if a type is declared; 2 if it is defined.  Otherwise, it is set to
13203    zero.
13204
13205    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
13206    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
13207    is set to FALSE.  */
13208
13209 static tree
13210 cp_parser_type_specifier (cp_parser* parser,
13211                           cp_parser_flags flags,
13212                           cp_decl_specifier_seq *decl_specs,
13213                           bool is_declaration,
13214                           int* declares_class_or_enum,
13215                           bool* is_cv_qualifier)
13216 {
13217   tree type_spec = NULL_TREE;
13218   cp_token *token;
13219   enum rid keyword;
13220   cp_decl_spec ds = ds_last;
13221
13222   /* Assume this type-specifier does not declare a new type.  */
13223   if (declares_class_or_enum)
13224     *declares_class_or_enum = 0;
13225   /* And that it does not specify a cv-qualifier.  */
13226   if (is_cv_qualifier)
13227     *is_cv_qualifier = false;
13228   /* Peek at the next token.  */
13229   token = cp_lexer_peek_token (parser->lexer);
13230
13231   /* If we're looking at a keyword, we can use that to guide the
13232      production we choose.  */
13233   keyword = token->keyword;
13234   switch (keyword)
13235     {
13236     case RID_ENUM:
13237       if ((flags & CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS))
13238         goto elaborated_type_specifier;
13239
13240       /* Look for the enum-specifier.  */
13241       type_spec = cp_parser_enum_specifier (parser);
13242       /* If that worked, we're done.  */
13243       if (type_spec)
13244         {
13245           if (declares_class_or_enum)
13246             *declares_class_or_enum = 2;
13247           if (decl_specs)
13248             cp_parser_set_decl_spec_type (decl_specs,
13249                                           type_spec,
13250                                           token->location,
13251                                           /*type_definition_p=*/true);
13252           return type_spec;
13253         }
13254       else
13255         goto elaborated_type_specifier;
13256
13257       /* Any of these indicate either a class-specifier, or an
13258          elaborated-type-specifier.  */
13259     case RID_CLASS:
13260     case RID_STRUCT:
13261     case RID_UNION:
13262       if ((flags & CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS))
13263         goto elaborated_type_specifier;
13264
13265       /* Parse tentatively so that we can back up if we don't find a
13266          class-specifier.  */
13267       cp_parser_parse_tentatively (parser);
13268       /* Look for the class-specifier.  */
13269       type_spec = cp_parser_class_specifier (parser);
13270       invoke_plugin_callbacks (PLUGIN_FINISH_TYPE, type_spec);
13271       /* If that worked, we're done.  */
13272       if (cp_parser_parse_definitely (parser))
13273         {
13274           if (declares_class_or_enum)
13275             *declares_class_or_enum = 2;
13276           if (decl_specs)
13277             cp_parser_set_decl_spec_type (decl_specs,
13278                                           type_spec,
13279                                           token->location,
13280                                           /*type_definition_p=*/true);
13281           return type_spec;
13282         }
13283
13284       /* Fall through.  */
13285     elaborated_type_specifier:
13286       /* We're declaring (not defining) a class or enum.  */
13287       if (declares_class_or_enum)
13288         *declares_class_or_enum = 1;
13289
13290       /* Fall through.  */
13291     case RID_TYPENAME:
13292       /* Look for an elaborated-type-specifier.  */
13293       type_spec
13294         = (cp_parser_elaborated_type_specifier
13295            (parser,
13296             decl_specs && decl_specs->specs[(int) ds_friend],
13297             is_declaration));
13298       if (decl_specs)
13299         cp_parser_set_decl_spec_type (decl_specs,
13300                                       type_spec,
13301                                       token->location,
13302                                       /*type_definition_p=*/false);
13303       return type_spec;
13304
13305     case RID_CONST:
13306       ds = ds_const;
13307       if (is_cv_qualifier)
13308         *is_cv_qualifier = true;
13309       break;
13310
13311     case RID_VOLATILE:
13312       ds = ds_volatile;
13313       if (is_cv_qualifier)
13314         *is_cv_qualifier = true;
13315       break;
13316
13317     case RID_RESTRICT:
13318       ds = ds_restrict;
13319       if (is_cv_qualifier)
13320         *is_cv_qualifier = true;
13321       break;
13322
13323     case RID_COMPLEX:
13324       /* The `__complex__' keyword is a GNU extension.  */
13325       ds = ds_complex;
13326       break;
13327
13328     default:
13329       break;
13330     }
13331
13332   /* Handle simple keywords.  */
13333   if (ds != ds_last)
13334     {
13335       if (decl_specs)
13336         {
13337           ++decl_specs->specs[(int)ds];
13338           decl_specs->any_specifiers_p = true;
13339         }
13340       return cp_lexer_consume_token (parser->lexer)->u.value;
13341     }
13342
13343   /* If we do not already have a type-specifier, assume we are looking
13344      at a simple-type-specifier.  */
13345   type_spec = cp_parser_simple_type_specifier (parser,
13346                                                decl_specs,
13347                                                flags);
13348
13349   /* If we didn't find a type-specifier, and a type-specifier was not
13350      optional in this context, issue an error message.  */
13351   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
13352     {
13353       cp_parser_error (parser, "expected type specifier");
13354       return error_mark_node;
13355     }
13356
13357   return type_spec;
13358 }
13359
13360 /* Parse a simple-type-specifier.
13361
13362    simple-type-specifier:
13363      :: [opt] nested-name-specifier [opt] type-name
13364      :: [opt] nested-name-specifier template template-id
13365      char
13366      wchar_t
13367      bool
13368      short
13369      int
13370      long
13371      signed
13372      unsigned
13373      float
13374      double
13375      void
13376
13377    C++0x Extension:
13378
13379    simple-type-specifier:
13380      auto
13381      decltype ( expression )   
13382      char16_t
13383      char32_t
13384      __underlying_type ( type-id )
13385
13386    GNU Extension:
13387
13388    simple-type-specifier:
13389      __int128
13390      __typeof__ unary-expression
13391      __typeof__ ( type-id )
13392
13393    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
13394    appropriately updated.  */
13395
13396 static tree
13397 cp_parser_simple_type_specifier (cp_parser* parser,
13398                                  cp_decl_specifier_seq *decl_specs,
13399                                  cp_parser_flags flags)
13400 {
13401   tree type = NULL_TREE;
13402   cp_token *token;
13403
13404   /* Peek at the next token.  */
13405   token = cp_lexer_peek_token (parser->lexer);
13406
13407   /* If we're looking at a keyword, things are easy.  */
13408   switch (token->keyword)
13409     {
13410     case RID_CHAR:
13411       if (decl_specs)
13412         decl_specs->explicit_char_p = true;
13413       type = char_type_node;
13414       break;
13415     case RID_CHAR16:
13416       type = char16_type_node;
13417       break;
13418     case RID_CHAR32:
13419       type = char32_type_node;
13420       break;
13421     case RID_WCHAR:
13422       type = wchar_type_node;
13423       break;
13424     case RID_BOOL:
13425       type = boolean_type_node;
13426       break;
13427     case RID_SHORT:
13428       if (decl_specs)
13429         ++decl_specs->specs[(int) ds_short];
13430       type = short_integer_type_node;
13431       break;
13432     case RID_INT:
13433       if (decl_specs)
13434         decl_specs->explicit_int_p = true;
13435       type = integer_type_node;
13436       break;
13437     case RID_INT128:
13438       if (!int128_integer_type_node)
13439         break;
13440       if (decl_specs)
13441         decl_specs->explicit_int128_p = true;
13442       type = int128_integer_type_node;
13443       break;
13444     case RID_LONG:
13445       if (decl_specs)
13446         ++decl_specs->specs[(int) ds_long];
13447       type = long_integer_type_node;
13448       break;
13449     case RID_SIGNED:
13450       if (decl_specs)
13451         ++decl_specs->specs[(int) ds_signed];
13452       type = integer_type_node;
13453       break;
13454     case RID_UNSIGNED:
13455       if (decl_specs)
13456         ++decl_specs->specs[(int) ds_unsigned];
13457       type = unsigned_type_node;
13458       break;
13459     case RID_FLOAT:
13460       type = float_type_node;
13461       break;
13462     case RID_DOUBLE:
13463       type = double_type_node;
13464       break;
13465     case RID_VOID:
13466       type = void_type_node;
13467       break;
13468       
13469     case RID_AUTO:
13470       maybe_warn_cpp0x (CPP0X_AUTO);
13471       type = make_auto ();
13472       break;
13473
13474     case RID_DECLTYPE:
13475       /* Since DR 743, decltype can either be a simple-type-specifier by
13476          itself or begin a nested-name-specifier.  Parsing it will replace
13477          it with a CPP_DECLTYPE, so just rewind and let the CPP_DECLTYPE
13478          handling below decide what to do.  */
13479       cp_parser_decltype (parser);
13480       cp_lexer_set_token_position (parser->lexer, token);
13481       break;
13482
13483     case RID_TYPEOF:
13484       /* Consume the `typeof' token.  */
13485       cp_lexer_consume_token (parser->lexer);
13486       /* Parse the operand to `typeof'.  */
13487       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
13488       /* If it is not already a TYPE, take its type.  */
13489       if (!TYPE_P (type))
13490         type = finish_typeof (type);
13491
13492       if (decl_specs)
13493         cp_parser_set_decl_spec_type (decl_specs, type,
13494                                       token->location,
13495                                       /*type_definition_p=*/false);
13496
13497       return type;
13498
13499     case RID_UNDERLYING_TYPE:
13500       type = cp_parser_trait_expr (parser, RID_UNDERLYING_TYPE);
13501       if (decl_specs)
13502         cp_parser_set_decl_spec_type (decl_specs, type,
13503                                       token->location,
13504                                       /*type_definition_p=*/false);
13505
13506       return type;
13507
13508     case RID_BASES:
13509     case RID_DIRECT_BASES:
13510       type = cp_parser_trait_expr (parser, token->keyword);
13511       if (decl_specs)
13512        cp_parser_set_decl_spec_type (decl_specs, type,
13513                                      token->location,
13514                                      /*type_definition_p=*/false);
13515       return type;
13516     default:
13517       break;
13518     }
13519
13520   /* If token is an already-parsed decltype not followed by ::,
13521      it's a simple-type-specifier.  */
13522   if (token->type == CPP_DECLTYPE
13523       && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
13524     {
13525       type = token->u.value;
13526       if (decl_specs)
13527         cp_parser_set_decl_spec_type (decl_specs, type,
13528                                       token->location,
13529                                       /*type_definition_p=*/false);
13530       cp_lexer_consume_token (parser->lexer);
13531       return type;
13532     }
13533
13534   /* If the type-specifier was for a built-in type, we're done.  */
13535   if (type)
13536     {
13537       /* Record the type.  */
13538       if (decl_specs
13539           && (token->keyword != RID_SIGNED
13540               && token->keyword != RID_UNSIGNED
13541               && token->keyword != RID_SHORT
13542               && token->keyword != RID_LONG))
13543         cp_parser_set_decl_spec_type (decl_specs,
13544                                       type,
13545                                       token->location,
13546                                       /*type_definition_p=*/false);
13547       if (decl_specs)
13548         decl_specs->any_specifiers_p = true;
13549
13550       /* Consume the token.  */
13551       cp_lexer_consume_token (parser->lexer);
13552
13553       /* There is no valid C++ program where a non-template type is
13554          followed by a "<".  That usually indicates that the user thought
13555          that the type was a template.  */
13556       cp_parser_check_for_invalid_template_id (parser, type, token->location);
13557
13558       return TYPE_NAME (type);
13559     }
13560
13561   /* The type-specifier must be a user-defined type.  */
13562   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
13563     {
13564       bool qualified_p;
13565       bool global_p;
13566
13567       /* Don't gobble tokens or issue error messages if this is an
13568          optional type-specifier.  */
13569       if (flags & CP_PARSER_FLAGS_OPTIONAL)
13570         cp_parser_parse_tentatively (parser);
13571
13572       /* Look for the optional `::' operator.  */
13573       global_p
13574         = (cp_parser_global_scope_opt (parser,
13575                                        /*current_scope_valid_p=*/false)
13576            != NULL_TREE);
13577       /* Look for the nested-name specifier.  */
13578       qualified_p
13579         = (cp_parser_nested_name_specifier_opt (parser,
13580                                                 /*typename_keyword_p=*/false,
13581                                                 /*check_dependency_p=*/true,
13582                                                 /*type_p=*/false,
13583                                                 /*is_declaration=*/false)
13584            != NULL_TREE);
13585       token = cp_lexer_peek_token (parser->lexer);
13586       /* If we have seen a nested-name-specifier, and the next token
13587          is `template', then we are using the template-id production.  */
13588       if (parser->scope
13589           && cp_parser_optional_template_keyword (parser))
13590         {
13591           /* Look for the template-id.  */
13592           type = cp_parser_template_id (parser,
13593                                         /*template_keyword_p=*/true,
13594                                         /*check_dependency_p=*/true,
13595                                         /*is_declaration=*/false);
13596           /* If the template-id did not name a type, we are out of
13597              luck.  */
13598           if (TREE_CODE (type) != TYPE_DECL)
13599             {
13600               cp_parser_error (parser, "expected template-id for type");
13601               type = NULL_TREE;
13602             }
13603         }
13604       /* Otherwise, look for a type-name.  */
13605       else
13606         type = cp_parser_type_name (parser);
13607       /* Keep track of all name-lookups performed in class scopes.  */
13608       if (type
13609           && !global_p
13610           && !qualified_p
13611           && TREE_CODE (type) == TYPE_DECL
13612           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
13613         maybe_note_name_used_in_class (DECL_NAME (type), type);
13614       /* If it didn't work out, we don't have a TYPE.  */
13615       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
13616           && !cp_parser_parse_definitely (parser))
13617         type = NULL_TREE;
13618       if (type && decl_specs)
13619         cp_parser_set_decl_spec_type (decl_specs, type,
13620                                       token->location,
13621                                       /*type_definition_p=*/false);
13622     }
13623
13624   /* If we didn't get a type-name, issue an error message.  */
13625   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
13626     {
13627       cp_parser_error (parser, "expected type-name");
13628       return error_mark_node;
13629     }
13630
13631   if (type && type != error_mark_node)
13632     {
13633       /* See if TYPE is an Objective-C type, and if so, parse and
13634          accept any protocol references following it.  Do this before
13635          the cp_parser_check_for_invalid_template_id() call, because
13636          Objective-C types can be followed by '<...>' which would
13637          enclose protocol names rather than template arguments, and so
13638          everything is fine.  */
13639       if (c_dialect_objc () && !parser->scope
13640           && (objc_is_id (type) || objc_is_class_name (type)))
13641         {
13642           tree protos = cp_parser_objc_protocol_refs_opt (parser);
13643           tree qual_type = objc_get_protocol_qualified_type (type, protos);
13644
13645           /* Clobber the "unqualified" type previously entered into
13646              DECL_SPECS with the new, improved protocol-qualified version.  */
13647           if (decl_specs)
13648             decl_specs->type = qual_type;
13649
13650           return qual_type;
13651         }
13652
13653       /* There is no valid C++ program where a non-template type is
13654          followed by a "<".  That usually indicates that the user
13655          thought that the type was a template.  */
13656       cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type),
13657                                                token->location);
13658     }
13659
13660   return type;
13661 }
13662
13663 /* Parse a type-name.
13664
13665    type-name:
13666      class-name
13667      enum-name
13668      typedef-name
13669      simple-template-id [in c++0x]
13670
13671    enum-name:
13672      identifier
13673
13674    typedef-name:
13675      identifier
13676
13677    Returns a TYPE_DECL for the type.  */
13678
13679 static tree
13680 cp_parser_type_name (cp_parser* parser)
13681 {
13682   tree type_decl;
13683
13684   /* We can't know yet whether it is a class-name or not.  */
13685   cp_parser_parse_tentatively (parser);
13686   /* Try a class-name.  */
13687   type_decl = cp_parser_class_name (parser,
13688                                     /*typename_keyword_p=*/false,
13689                                     /*template_keyword_p=*/false,
13690                                     none_type,
13691                                     /*check_dependency_p=*/true,
13692                                     /*class_head_p=*/false,
13693                                     /*is_declaration=*/false);
13694   /* If it's not a class-name, keep looking.  */
13695   if (!cp_parser_parse_definitely (parser))
13696     {
13697       if (cxx_dialect < cxx0x)
13698         /* It must be a typedef-name or an enum-name.  */
13699         return cp_parser_nonclass_name (parser);
13700
13701       cp_parser_parse_tentatively (parser);
13702       /* It is either a simple-template-id representing an
13703          instantiation of an alias template...  */
13704       type_decl = cp_parser_template_id (parser,
13705                                          /*template_keyword_p=*/false,
13706                                          /*check_dependency_p=*/false,
13707                                          /*is_declaration=*/false);
13708       /* Note that this must be an instantiation of an alias template
13709          because [temp.names]/6 says:
13710          
13711              A template-id that names an alias template specialization
13712              is a type-name.
13713
13714          Whereas [temp.names]/7 says:
13715          
13716              A simple-template-id that names a class template
13717              specialization is a class-name.  */
13718       if (type_decl != NULL_TREE
13719           && TREE_CODE (type_decl) == TYPE_DECL
13720           && TYPE_DECL_ALIAS_P (type_decl))
13721         gcc_assert (DECL_TEMPLATE_INSTANTIATION (type_decl));
13722       else
13723         cp_parser_simulate_error (parser);
13724
13725       if (!cp_parser_parse_definitely (parser))
13726         /* ... Or a typedef-name or an enum-name.  */
13727         return cp_parser_nonclass_name (parser);
13728     }
13729
13730   return type_decl;
13731 }
13732
13733 /* Parse a non-class type-name, that is, either an enum-name or a typedef-name.
13734
13735    enum-name:
13736      identifier
13737
13738    typedef-name:
13739      identifier
13740
13741    Returns a TYPE_DECL for the type.  */
13742
13743 static tree
13744 cp_parser_nonclass_name (cp_parser* parser)
13745 {
13746   tree type_decl;
13747   tree identifier;
13748
13749   cp_token *token = cp_lexer_peek_token (parser->lexer);
13750   identifier = cp_parser_identifier (parser);
13751   if (identifier == error_mark_node)
13752     return error_mark_node;
13753
13754   /* Look up the type-name.  */
13755   type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
13756
13757   if (TREE_CODE (type_decl) != TYPE_DECL
13758       && (objc_is_id (identifier) || objc_is_class_name (identifier)))
13759     {
13760       /* See if this is an Objective-C type.  */
13761       tree protos = cp_parser_objc_protocol_refs_opt (parser);
13762       tree type = objc_get_protocol_qualified_type (identifier, protos);
13763       if (type)
13764         type_decl = TYPE_NAME (type);
13765     }
13766
13767   /* Issue an error if we did not find a type-name.  */
13768   if (TREE_CODE (type_decl) != TYPE_DECL
13769       /* In Objective-C, we have the complication that class names are
13770          normally type names and start declarations (eg, the
13771          "NSObject" in "NSObject *object;"), but can be used in an
13772          Objective-C 2.0 dot-syntax (as in "NSObject.version") which
13773          is an expression.  So, a classname followed by a dot is not a
13774          valid type-name.  */
13775       || (objc_is_class_name (TREE_TYPE (type_decl))
13776           && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT))
13777     {
13778       if (!cp_parser_simulate_error (parser))
13779         cp_parser_name_lookup_error (parser, identifier, type_decl,
13780                                      NLE_TYPE, token->location);
13781       return error_mark_node;
13782     }
13783   /* Remember that the name was used in the definition of the
13784      current class so that we can check later to see if the
13785      meaning would have been different after the class was
13786      entirely defined.  */
13787   else if (type_decl != error_mark_node
13788            && !parser->scope)
13789     maybe_note_name_used_in_class (identifier, type_decl);
13790   
13791   return type_decl;
13792 }
13793
13794 /* Parse an elaborated-type-specifier.  Note that the grammar given
13795    here incorporates the resolution to DR68.
13796
13797    elaborated-type-specifier:
13798      class-key :: [opt] nested-name-specifier [opt] identifier
13799      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
13800      enum-key :: [opt] nested-name-specifier [opt] identifier
13801      typename :: [opt] nested-name-specifier identifier
13802      typename :: [opt] nested-name-specifier template [opt]
13803        template-id
13804
13805    GNU extension:
13806
13807    elaborated-type-specifier:
13808      class-key attributes :: [opt] nested-name-specifier [opt] identifier
13809      class-key attributes :: [opt] nested-name-specifier [opt]
13810                template [opt] template-id
13811      enum attributes :: [opt] nested-name-specifier [opt] identifier
13812
13813    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
13814    declared `friend'.  If IS_DECLARATION is TRUE, then this
13815    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
13816    something is being declared.
13817
13818    Returns the TYPE specified.  */
13819
13820 static tree
13821 cp_parser_elaborated_type_specifier (cp_parser* parser,
13822                                      bool is_friend,
13823                                      bool is_declaration)
13824 {
13825   enum tag_types tag_type;
13826   tree identifier;
13827   tree type = NULL_TREE;
13828   tree attributes = NULL_TREE;
13829   tree globalscope;
13830   cp_token *token = NULL;
13831
13832   /* See if we're looking at the `enum' keyword.  */
13833   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
13834     {
13835       /* Consume the `enum' token.  */
13836       cp_lexer_consume_token (parser->lexer);
13837       /* Remember that it's an enumeration type.  */
13838       tag_type = enum_type;
13839       /* Issue a warning if the `struct' or `class' key (for C++0x scoped
13840          enums) is used here.  */
13841       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
13842           || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
13843         {
13844             pedwarn (input_location, 0, "elaborated-type-specifier "
13845                       "for a scoped enum must not use the %<%D%> keyword",
13846                       cp_lexer_peek_token (parser->lexer)->u.value);
13847           /* Consume the `struct' or `class' and parse it anyway.  */
13848           cp_lexer_consume_token (parser->lexer);
13849         }
13850       /* Parse the attributes.  */
13851       attributes = cp_parser_attributes_opt (parser);
13852     }
13853   /* Or, it might be `typename'.  */
13854   else if (cp_lexer_next_token_is_keyword (parser->lexer,
13855                                            RID_TYPENAME))
13856     {
13857       /* Consume the `typename' token.  */
13858       cp_lexer_consume_token (parser->lexer);
13859       /* Remember that it's a `typename' type.  */
13860       tag_type = typename_type;
13861     }
13862   /* Otherwise it must be a class-key.  */
13863   else
13864     {
13865       tag_type = cp_parser_class_key (parser);
13866       if (tag_type == none_type)
13867         return error_mark_node;
13868       /* Parse the attributes.  */
13869       attributes = cp_parser_attributes_opt (parser);
13870     }
13871
13872   /* Look for the `::' operator.  */
13873   globalscope =  cp_parser_global_scope_opt (parser,
13874                                              /*current_scope_valid_p=*/false);
13875   /* Look for the nested-name-specifier.  */
13876   if (tag_type == typename_type && !globalscope)
13877     {
13878       if (!cp_parser_nested_name_specifier (parser,
13879                                            /*typename_keyword_p=*/true,
13880                                            /*check_dependency_p=*/true,
13881                                            /*type_p=*/true,
13882                                             is_declaration))
13883         return error_mark_node;
13884     }
13885   else
13886     /* Even though `typename' is not present, the proposed resolution
13887        to Core Issue 180 says that in `class A<T>::B', `B' should be
13888        considered a type-name, even if `A<T>' is dependent.  */
13889     cp_parser_nested_name_specifier_opt (parser,
13890                                          /*typename_keyword_p=*/true,
13891                                          /*check_dependency_p=*/true,
13892                                          /*type_p=*/true,
13893                                          is_declaration);
13894  /* For everything but enumeration types, consider a template-id.
13895     For an enumeration type, consider only a plain identifier.  */
13896   if (tag_type != enum_type)
13897     {
13898       bool template_p = false;
13899       tree decl;
13900
13901       /* Allow the `template' keyword.  */
13902       template_p = cp_parser_optional_template_keyword (parser);
13903       /* If we didn't see `template', we don't know if there's a
13904          template-id or not.  */
13905       if (!template_p)
13906         cp_parser_parse_tentatively (parser);
13907       /* Parse the template-id.  */
13908       token = cp_lexer_peek_token (parser->lexer);
13909       decl = cp_parser_template_id (parser, template_p,
13910                                     /*check_dependency_p=*/true,
13911                                     is_declaration);
13912       /* If we didn't find a template-id, look for an ordinary
13913          identifier.  */
13914       if (!template_p && !cp_parser_parse_definitely (parser))
13915         ;
13916       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
13917          in effect, then we must assume that, upon instantiation, the
13918          template will correspond to a class.  */
13919       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
13920                && tag_type == typename_type)
13921         type = make_typename_type (parser->scope, decl,
13922                                    typename_type,
13923                                    /*complain=*/tf_error);
13924       /* If the `typename' keyword is in effect and DECL is not a type
13925          decl. Then type is non existant.   */
13926       else if (tag_type == typename_type && TREE_CODE (decl) != TYPE_DECL)
13927         type = NULL_TREE; 
13928       else 
13929         type = TREE_TYPE (decl);
13930     }
13931
13932   if (!type)
13933     {
13934       token = cp_lexer_peek_token (parser->lexer);
13935       identifier = cp_parser_identifier (parser);
13936
13937       if (identifier == error_mark_node)
13938         {
13939           parser->scope = NULL_TREE;
13940           return error_mark_node;
13941         }
13942
13943       /* For a `typename', we needn't call xref_tag.  */
13944       if (tag_type == typename_type
13945           && TREE_CODE (parser->scope) != NAMESPACE_DECL)
13946         return cp_parser_make_typename_type (parser, parser->scope,
13947                                              identifier,
13948                                              token->location);
13949       /* Look up a qualified name in the usual way.  */
13950       if (parser->scope)
13951         {
13952           tree decl;
13953           tree ambiguous_decls;
13954
13955           decl = cp_parser_lookup_name (parser, identifier,
13956                                         tag_type,
13957                                         /*is_template=*/false,
13958                                         /*is_namespace=*/false,
13959                                         /*check_dependency=*/true,
13960                                         &ambiguous_decls,
13961                                         token->location);
13962
13963           /* If the lookup was ambiguous, an error will already have been
13964              issued.  */
13965           if (ambiguous_decls)
13966             return error_mark_node;
13967
13968           /* If we are parsing friend declaration, DECL may be a
13969              TEMPLATE_DECL tree node here.  However, we need to check
13970              whether this TEMPLATE_DECL results in valid code.  Consider
13971              the following example:
13972
13973                namespace N {
13974                  template <class T> class C {};
13975                }
13976                class X {
13977                  template <class T> friend class N::C; // #1, valid code
13978                };
13979                template <class T> class Y {
13980                  friend class N::C;                    // #2, invalid code
13981                };
13982
13983              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
13984              name lookup of `N::C'.  We see that friend declaration must
13985              be template for the code to be valid.  Note that
13986              processing_template_decl does not work here since it is
13987              always 1 for the above two cases.  */
13988
13989           decl = (cp_parser_maybe_treat_template_as_class
13990                   (decl, /*tag_name_p=*/is_friend
13991                          && parser->num_template_parameter_lists));
13992
13993           if (TREE_CODE (decl) != TYPE_DECL)
13994             {
13995               cp_parser_diagnose_invalid_type_name (parser,
13996                                                     parser->scope,
13997                                                     identifier,
13998                                                     token->location);
13999               return error_mark_node;
14000             }
14001
14002           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
14003             {
14004               bool allow_template = (parser->num_template_parameter_lists
14005                                       || DECL_SELF_REFERENCE_P (decl));
14006               type = check_elaborated_type_specifier (tag_type, decl, 
14007                                                       allow_template);
14008
14009               if (type == error_mark_node)
14010                 return error_mark_node;
14011             }
14012
14013           /* Forward declarations of nested types, such as
14014
14015                class C1::C2;
14016                class C1::C2::C3;
14017
14018              are invalid unless all components preceding the final '::'
14019              are complete.  If all enclosing types are complete, these
14020              declarations become merely pointless.
14021
14022              Invalid forward declarations of nested types are errors
14023              caught elsewhere in parsing.  Those that are pointless arrive
14024              here.  */
14025
14026           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
14027               && !is_friend && !processing_explicit_instantiation)
14028             warning (0, "declaration %qD does not declare anything", decl);
14029
14030           type = TREE_TYPE (decl);
14031         }
14032       else
14033         {
14034           /* An elaborated-type-specifier sometimes introduces a new type and
14035              sometimes names an existing type.  Normally, the rule is that it
14036              introduces a new type only if there is not an existing type of
14037              the same name already in scope.  For example, given:
14038
14039                struct S {};
14040                void f() { struct S s; }
14041
14042              the `struct S' in the body of `f' is the same `struct S' as in
14043              the global scope; the existing definition is used.  However, if
14044              there were no global declaration, this would introduce a new
14045              local class named `S'.
14046
14047              An exception to this rule applies to the following code:
14048
14049                namespace N { struct S; }
14050
14051              Here, the elaborated-type-specifier names a new type
14052              unconditionally; even if there is already an `S' in the
14053              containing scope this declaration names a new type.
14054              This exception only applies if the elaborated-type-specifier
14055              forms the complete declaration:
14056
14057                [class.name]
14058
14059                A declaration consisting solely of `class-key identifier ;' is
14060                either a redeclaration of the name in the current scope or a
14061                forward declaration of the identifier as a class name.  It
14062                introduces the name into the current scope.
14063
14064              We are in this situation precisely when the next token is a `;'.
14065
14066              An exception to the exception is that a `friend' declaration does
14067              *not* name a new type; i.e., given:
14068
14069                struct S { friend struct T; };
14070
14071              `T' is not a new type in the scope of `S'.
14072
14073              Also, `new struct S' or `sizeof (struct S)' never results in the
14074              definition of a new type; a new type can only be declared in a
14075              declaration context.  */
14076
14077           tag_scope ts;
14078           bool template_p;
14079
14080           if (is_friend)
14081             /* Friends have special name lookup rules.  */
14082             ts = ts_within_enclosing_non_class;
14083           else if (is_declaration
14084                    && cp_lexer_next_token_is (parser->lexer,
14085                                               CPP_SEMICOLON))
14086             /* This is a `class-key identifier ;' */
14087             ts = ts_current;
14088           else
14089             ts = ts_global;
14090
14091           template_p =
14092             (parser->num_template_parameter_lists
14093              && (cp_parser_next_token_starts_class_definition_p (parser)
14094                  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
14095           /* An unqualified name was used to reference this type, so
14096              there were no qualifying templates.  */
14097           if (!cp_parser_check_template_parameters (parser,
14098                                                     /*num_templates=*/0,
14099                                                     token->location,
14100                                                     /*declarator=*/NULL))
14101             return error_mark_node;
14102           type = xref_tag (tag_type, identifier, ts, template_p);
14103         }
14104     }
14105
14106   if (type == error_mark_node)
14107     return error_mark_node;
14108
14109   /* Allow attributes on forward declarations of classes.  */
14110   if (attributes)
14111     {
14112       if (TREE_CODE (type) == TYPENAME_TYPE)
14113         warning (OPT_Wattributes,
14114                  "attributes ignored on uninstantiated type");
14115       else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
14116                && ! processing_explicit_instantiation)
14117         warning (OPT_Wattributes,
14118                  "attributes ignored on template instantiation");
14119       else if (is_declaration && cp_parser_declares_only_class_p (parser))
14120         cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
14121       else
14122         warning (OPT_Wattributes,
14123                  "attributes ignored on elaborated-type-specifier that is not a forward declaration");
14124     }
14125
14126   if (tag_type != enum_type)
14127     {
14128       /* Indicate whether this class was declared as a `class' or as a
14129          `struct'.  */
14130       if (TREE_CODE (type) == RECORD_TYPE)
14131         CLASSTYPE_DECLARED_CLASS (type) = (tag_type == class_type);
14132       cp_parser_check_class_key (tag_type, type);
14133     }
14134
14135   /* A "<" cannot follow an elaborated type specifier.  If that
14136      happens, the user was probably trying to form a template-id.  */
14137   cp_parser_check_for_invalid_template_id (parser, type, token->location);
14138
14139   return type;
14140 }
14141
14142 /* Parse an enum-specifier.
14143
14144    enum-specifier:
14145      enum-head { enumerator-list [opt] }
14146      enum-head { enumerator-list , } [C++0x]
14147
14148    enum-head:
14149      enum-key identifier [opt] enum-base [opt]
14150      enum-key nested-name-specifier identifier enum-base [opt]
14151
14152    enum-key:
14153      enum
14154      enum class   [C++0x]
14155      enum struct  [C++0x]
14156
14157    enum-base:   [C++0x]
14158      : type-specifier-seq
14159
14160    opaque-enum-specifier:
14161      enum-key identifier enum-base [opt] ;
14162
14163    GNU Extensions:
14164      enum-key attributes[opt] identifier [opt] enum-base [opt] 
14165        { enumerator-list [opt] }attributes[opt]
14166      enum-key attributes[opt] identifier [opt] enum-base [opt]
14167        { enumerator-list, }attributes[opt] [C++0x]
14168
14169    Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
14170    if the token stream isn't an enum-specifier after all.  */
14171
14172 static tree
14173 cp_parser_enum_specifier (cp_parser* parser)
14174 {
14175   tree identifier;
14176   tree type = NULL_TREE;
14177   tree prev_scope;
14178   tree nested_name_specifier = NULL_TREE;
14179   tree attributes;
14180   bool scoped_enum_p = false;
14181   bool has_underlying_type = false;
14182   bool nested_being_defined = false;
14183   bool new_value_list = false;
14184   bool is_new_type = false;
14185   bool is_anonymous = false;
14186   tree underlying_type = NULL_TREE;
14187   cp_token *type_start_token = NULL;
14188   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
14189
14190   parser->colon_corrects_to_scope_p = false;
14191
14192   /* Parse tentatively so that we can back up if we don't find a
14193      enum-specifier.  */
14194   cp_parser_parse_tentatively (parser);
14195
14196   /* Caller guarantees that the current token is 'enum', an identifier
14197      possibly follows, and the token after that is an opening brace.
14198      If we don't have an identifier, fabricate an anonymous name for
14199      the enumeration being defined.  */
14200   cp_lexer_consume_token (parser->lexer);
14201
14202   /* Parse the "class" or "struct", which indicates a scoped
14203      enumeration type in C++0x.  */
14204   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
14205       || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
14206     {
14207       if (cxx_dialect < cxx0x)
14208         maybe_warn_cpp0x (CPP0X_SCOPED_ENUMS);
14209
14210       /* Consume the `struct' or `class' token.  */
14211       cp_lexer_consume_token (parser->lexer);
14212
14213       scoped_enum_p = true;
14214     }
14215
14216   attributes = cp_parser_attributes_opt (parser);
14217
14218   /* Clear the qualification.  */
14219   parser->scope = NULL_TREE;
14220   parser->qualifying_scope = NULL_TREE;
14221   parser->object_scope = NULL_TREE;
14222
14223   /* Figure out in what scope the declaration is being placed.  */
14224   prev_scope = current_scope ();
14225
14226   type_start_token = cp_lexer_peek_token (parser->lexer);
14227
14228   push_deferring_access_checks (dk_no_check);
14229   nested_name_specifier
14230       = cp_parser_nested_name_specifier_opt (parser,
14231                                              /*typename_keyword_p=*/true,
14232                                              /*check_dependency_p=*/false,
14233                                              /*type_p=*/false,
14234                                              /*is_declaration=*/false);
14235
14236   if (nested_name_specifier)
14237     {
14238       tree name;
14239
14240       identifier = cp_parser_identifier (parser);
14241       name =  cp_parser_lookup_name (parser, identifier,
14242                                      enum_type,
14243                                      /*is_template=*/false,
14244                                      /*is_namespace=*/false,
14245                                      /*check_dependency=*/true,
14246                                      /*ambiguous_decls=*/NULL,
14247                                      input_location);
14248       if (name)
14249         {
14250           type = TREE_TYPE (name);
14251           if (TREE_CODE (type) == TYPENAME_TYPE)
14252             {
14253               /* Are template enums allowed in ISO? */
14254               if (template_parm_scope_p ())
14255                 pedwarn (type_start_token->location, OPT_pedantic,
14256                          "%qD is an enumeration template", name);
14257               /* ignore a typename reference, for it will be solved by name
14258                  in start_enum.  */
14259               type = NULL_TREE;
14260             }
14261         }
14262       else
14263         error_at (type_start_token->location,
14264                   "%qD is not an enumerator-name", identifier);
14265     }
14266   else
14267     {
14268       if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
14269         identifier = cp_parser_identifier (parser);
14270       else
14271         {
14272           identifier = make_anon_name ();
14273           is_anonymous = true;
14274         }
14275     }
14276   pop_deferring_access_checks ();
14277
14278   /* Check for the `:' that denotes a specified underlying type in C++0x.
14279      Note that a ':' could also indicate a bitfield width, however.  */
14280   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
14281     {
14282       cp_decl_specifier_seq type_specifiers;
14283
14284       /* Consume the `:'.  */
14285       cp_lexer_consume_token (parser->lexer);
14286
14287       /* Parse the type-specifier-seq.  */
14288       cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
14289                                     /*is_trailing_return=*/false,
14290                                     &type_specifiers);
14291
14292       /* At this point this is surely not elaborated type specifier.  */
14293       if (!cp_parser_parse_definitely (parser))
14294         return NULL_TREE;
14295
14296       if (cxx_dialect < cxx0x)
14297         maybe_warn_cpp0x (CPP0X_SCOPED_ENUMS);
14298
14299       has_underlying_type = true;
14300
14301       /* If that didn't work, stop.  */
14302       if (type_specifiers.type != error_mark_node)
14303         {
14304           underlying_type = grokdeclarator (NULL, &type_specifiers, TYPENAME,
14305                                             /*initialized=*/0, NULL);
14306           if (underlying_type == error_mark_node)
14307             underlying_type = NULL_TREE;
14308         }
14309     }
14310
14311   /* Look for the `{' but don't consume it yet.  */
14312   if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
14313     {
14314       if (cxx_dialect < cxx0x || (!scoped_enum_p && !underlying_type))
14315         {
14316           cp_parser_error (parser, "expected %<{%>");
14317           if (has_underlying_type)
14318             {
14319               type = NULL_TREE;
14320               goto out;
14321             }
14322         }
14323       /* An opaque-enum-specifier must have a ';' here.  */
14324       if ((scoped_enum_p || underlying_type)
14325           && cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
14326         {
14327           cp_parser_error (parser, "expected %<;%> or %<{%>");
14328           if (has_underlying_type)
14329             {
14330               type = NULL_TREE;
14331               goto out;
14332             }
14333         }
14334     }
14335
14336   if (!has_underlying_type && !cp_parser_parse_definitely (parser))
14337     return NULL_TREE;
14338
14339   if (nested_name_specifier)
14340     {
14341       if (CLASS_TYPE_P (nested_name_specifier))
14342         {
14343           nested_being_defined = TYPE_BEING_DEFINED (nested_name_specifier);
14344           TYPE_BEING_DEFINED (nested_name_specifier) = 1;
14345           push_scope (nested_name_specifier);
14346         }
14347       else if (TREE_CODE (nested_name_specifier) == NAMESPACE_DECL)
14348         {
14349           push_nested_namespace (nested_name_specifier);
14350         }
14351     }
14352
14353   /* Issue an error message if type-definitions are forbidden here.  */
14354   if (!cp_parser_check_type_definition (parser))
14355     type = error_mark_node;
14356   else
14357     /* Create the new type.  We do this before consuming the opening
14358        brace so the enum will be recorded as being on the line of its
14359        tag (or the 'enum' keyword, if there is no tag).  */
14360     type = start_enum (identifier, type, underlying_type,
14361                        scoped_enum_p, &is_new_type);
14362
14363   /* If the next token is not '{' it is an opaque-enum-specifier or an
14364      elaborated-type-specifier.  */
14365   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
14366     {
14367       timevar_push (TV_PARSE_ENUM);
14368       if (nested_name_specifier)
14369         {
14370           /* The following catches invalid code such as:
14371              enum class S<int>::E { A, B, C }; */
14372           if (!processing_specialization
14373               && CLASS_TYPE_P (nested_name_specifier)
14374               && CLASSTYPE_USE_TEMPLATE (nested_name_specifier))
14375             error_at (type_start_token->location, "cannot add an enumerator "
14376                       "list to a template instantiation");
14377
14378           /* If that scope does not contain the scope in which the
14379              class was originally declared, the program is invalid.  */
14380           if (prev_scope && !is_ancestor (prev_scope, nested_name_specifier))
14381             {
14382               if (at_namespace_scope_p ())
14383                 error_at (type_start_token->location,
14384                           "declaration of %qD in namespace %qD which does not "
14385                           "enclose %qD",
14386                           type, prev_scope, nested_name_specifier);
14387               else
14388                 error_at (type_start_token->location,
14389                           "declaration of %qD in %qD which does not enclose %qD",
14390                           type, prev_scope, nested_name_specifier);
14391               type = error_mark_node;
14392             }
14393         }
14394
14395       if (scoped_enum_p)
14396         begin_scope (sk_scoped_enum, type);
14397
14398       /* Consume the opening brace.  */
14399       cp_lexer_consume_token (parser->lexer);
14400
14401       if (type == error_mark_node)
14402         ; /* Nothing to add */
14403       else if (OPAQUE_ENUM_P (type)
14404                || (cxx_dialect > cxx98 && processing_specialization))
14405         {
14406           new_value_list = true;
14407           SET_OPAQUE_ENUM_P (type, false);
14408           DECL_SOURCE_LOCATION (TYPE_NAME (type)) = type_start_token->location;
14409         }
14410       else
14411         {
14412           error_at (type_start_token->location, "multiple definition of %q#T", type);
14413           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
14414                     "previous definition here");
14415           type = error_mark_node;
14416         }
14417
14418       if (type == error_mark_node)
14419         cp_parser_skip_to_end_of_block_or_statement (parser);
14420       /* If the next token is not '}', then there are some enumerators.  */
14421       else if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
14422         cp_parser_enumerator_list (parser, type);
14423
14424       /* Consume the final '}'.  */
14425       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
14426
14427       if (scoped_enum_p)
14428         finish_scope ();
14429       timevar_pop (TV_PARSE_ENUM);
14430     }
14431   else
14432     {
14433       /* If a ';' follows, then it is an opaque-enum-specifier
14434         and additional restrictions apply.  */
14435       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
14436         {
14437           if (is_anonymous)
14438             error_at (type_start_token->location,
14439                       "opaque-enum-specifier without name");
14440           else if (nested_name_specifier)
14441             error_at (type_start_token->location,
14442                       "opaque-enum-specifier must use a simple identifier");
14443         }
14444     }
14445
14446   /* Look for trailing attributes to apply to this enumeration, and
14447      apply them if appropriate.  */
14448   if (cp_parser_allow_gnu_extensions_p (parser))
14449     {
14450       tree trailing_attr = cp_parser_attributes_opt (parser);
14451       trailing_attr = chainon (trailing_attr, attributes);
14452       cplus_decl_attributes (&type,
14453                              trailing_attr,
14454                              (int) ATTR_FLAG_TYPE_IN_PLACE);
14455     }
14456
14457   /* Finish up the enumeration.  */
14458   if (type != error_mark_node)
14459     {
14460       if (new_value_list)
14461         finish_enum_value_list (type);
14462       if (is_new_type)
14463         finish_enum (type);
14464     }
14465
14466   if (nested_name_specifier)
14467     {
14468       if (CLASS_TYPE_P (nested_name_specifier))
14469         {
14470           TYPE_BEING_DEFINED (nested_name_specifier) = nested_being_defined;
14471           pop_scope (nested_name_specifier);
14472         }
14473       else if (TREE_CODE (nested_name_specifier) == NAMESPACE_DECL)
14474         {
14475           pop_nested_namespace (nested_name_specifier);
14476         }
14477     }
14478  out:
14479   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
14480   return type;
14481 }
14482
14483 /* Parse an enumerator-list.  The enumerators all have the indicated
14484    TYPE.
14485
14486    enumerator-list:
14487      enumerator-definition
14488      enumerator-list , enumerator-definition  */
14489
14490 static void
14491 cp_parser_enumerator_list (cp_parser* parser, tree type)
14492 {
14493   while (true)
14494     {
14495       /* Parse an enumerator-definition.  */
14496       cp_parser_enumerator_definition (parser, type);
14497
14498       /* If the next token is not a ',', we've reached the end of
14499          the list.  */
14500       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14501         break;
14502       /* Otherwise, consume the `,' and keep going.  */
14503       cp_lexer_consume_token (parser->lexer);
14504       /* If the next token is a `}', there is a trailing comma.  */
14505       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
14506         {
14507           if (cxx_dialect < cxx0x && !in_system_header)
14508             pedwarn (input_location, OPT_pedantic,
14509                      "comma at end of enumerator list");
14510           break;
14511         }
14512     }
14513 }
14514
14515 /* Parse an enumerator-definition.  The enumerator has the indicated
14516    TYPE.
14517
14518    enumerator-definition:
14519      enumerator
14520      enumerator = constant-expression
14521
14522    enumerator:
14523      identifier  */
14524
14525 static void
14526 cp_parser_enumerator_definition (cp_parser* parser, tree type)
14527 {
14528   tree identifier;
14529   tree value;
14530   location_t loc;
14531
14532   /* Save the input location because we are interested in the location
14533      of the identifier and not the location of the explicit value.  */
14534   loc = cp_lexer_peek_token (parser->lexer)->location;
14535
14536   /* Look for the identifier.  */
14537   identifier = cp_parser_identifier (parser);
14538   if (identifier == error_mark_node)
14539     return;
14540
14541   /* If the next token is an '=', then there is an explicit value.  */
14542   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
14543     {
14544       /* Consume the `=' token.  */
14545       cp_lexer_consume_token (parser->lexer);
14546       /* Parse the value.  */
14547       value = cp_parser_constant_expression (parser,
14548                                              /*allow_non_constant_p=*/false,
14549                                              NULL);
14550     }
14551   else
14552     value = NULL_TREE;
14553
14554   /* If we are processing a template, make sure the initializer of the
14555      enumerator doesn't contain any bare template parameter pack.  */
14556   if (check_for_bare_parameter_packs (value))
14557     value = error_mark_node;
14558
14559   /* integral_constant_value will pull out this expression, so make sure
14560      it's folded as appropriate.  */
14561   value = fold_non_dependent_expr (value);
14562
14563   /* Create the enumerator.  */
14564   build_enumerator (identifier, value, type, loc);
14565 }
14566
14567 /* Parse a namespace-name.
14568
14569    namespace-name:
14570      original-namespace-name
14571      namespace-alias
14572
14573    Returns the NAMESPACE_DECL for the namespace.  */
14574
14575 static tree
14576 cp_parser_namespace_name (cp_parser* parser)
14577 {
14578   tree identifier;
14579   tree namespace_decl;
14580
14581   cp_token *token = cp_lexer_peek_token (parser->lexer);
14582
14583   /* Get the name of the namespace.  */
14584   identifier = cp_parser_identifier (parser);
14585   if (identifier == error_mark_node)
14586     return error_mark_node;
14587
14588   /* Look up the identifier in the currently active scope.  Look only
14589      for namespaces, due to:
14590
14591        [basic.lookup.udir]
14592
14593        When looking up a namespace-name in a using-directive or alias
14594        definition, only namespace names are considered.
14595
14596      And:
14597
14598        [basic.lookup.qual]
14599
14600        During the lookup of a name preceding the :: scope resolution
14601        operator, object, function, and enumerator names are ignored.
14602
14603      (Note that cp_parser_qualifying_entity only calls this
14604      function if the token after the name is the scope resolution
14605      operator.)  */
14606   namespace_decl = cp_parser_lookup_name (parser, identifier,
14607                                           none_type,
14608                                           /*is_template=*/false,
14609                                           /*is_namespace=*/true,
14610                                           /*check_dependency=*/true,
14611                                           /*ambiguous_decls=*/NULL,
14612                                           token->location);
14613   /* If it's not a namespace, issue an error.  */
14614   if (namespace_decl == error_mark_node
14615       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
14616     {
14617       if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
14618         error_at (token->location, "%qD is not a namespace-name", identifier);
14619       cp_parser_error (parser, "expected namespace-name");
14620       namespace_decl = error_mark_node;
14621     }
14622
14623   return namespace_decl;
14624 }
14625
14626 /* Parse a namespace-definition.
14627
14628    namespace-definition:
14629      named-namespace-definition
14630      unnamed-namespace-definition
14631
14632    named-namespace-definition:
14633      original-namespace-definition
14634      extension-namespace-definition
14635
14636    original-namespace-definition:
14637      namespace identifier { namespace-body }
14638
14639    extension-namespace-definition:
14640      namespace original-namespace-name { namespace-body }
14641
14642    unnamed-namespace-definition:
14643      namespace { namespace-body } */
14644
14645 static void
14646 cp_parser_namespace_definition (cp_parser* parser)
14647 {
14648   tree identifier, attribs;
14649   bool has_visibility;
14650   bool is_inline;
14651
14652   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_INLINE))
14653     {
14654       maybe_warn_cpp0x (CPP0X_INLINE_NAMESPACES);
14655       is_inline = true;
14656       cp_lexer_consume_token (parser->lexer);
14657     }
14658   else
14659     is_inline = false;
14660
14661   /* Look for the `namespace' keyword.  */
14662   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
14663
14664   /* Get the name of the namespace.  We do not attempt to distinguish
14665      between an original-namespace-definition and an
14666      extension-namespace-definition at this point.  The semantic
14667      analysis routines are responsible for that.  */
14668   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
14669     identifier = cp_parser_identifier (parser);
14670   else
14671     identifier = NULL_TREE;
14672
14673   /* Parse any specified attributes.  */
14674   attribs = cp_parser_attributes_opt (parser);
14675
14676   /* Look for the `{' to start the namespace.  */
14677   cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
14678   /* Start the namespace.  */
14679   push_namespace (identifier);
14680
14681   /* "inline namespace" is equivalent to a stub namespace definition
14682      followed by a strong using directive.  */
14683   if (is_inline)
14684     {
14685       tree name_space = current_namespace;
14686       /* Set up namespace association.  */
14687       DECL_NAMESPACE_ASSOCIATIONS (name_space)
14688         = tree_cons (CP_DECL_CONTEXT (name_space), NULL_TREE,
14689                      DECL_NAMESPACE_ASSOCIATIONS (name_space));
14690       /* Import the contents of the inline namespace.  */
14691       pop_namespace ();
14692       do_using_directive (name_space);
14693       push_namespace (identifier);
14694     }
14695
14696   has_visibility = handle_namespace_attrs (current_namespace, attribs);
14697
14698   /* Parse the body of the namespace.  */
14699   cp_parser_namespace_body (parser);
14700
14701   if (has_visibility)
14702     pop_visibility (1);
14703
14704   /* Finish the namespace.  */
14705   pop_namespace ();
14706   /* Look for the final `}'.  */
14707   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
14708 }
14709
14710 /* Parse a namespace-body.
14711
14712    namespace-body:
14713      declaration-seq [opt]  */
14714
14715 static void
14716 cp_parser_namespace_body (cp_parser* parser)
14717 {
14718   cp_parser_declaration_seq_opt (parser);
14719 }
14720
14721 /* Parse a namespace-alias-definition.
14722
14723    namespace-alias-definition:
14724      namespace identifier = qualified-namespace-specifier ;  */
14725
14726 static void
14727 cp_parser_namespace_alias_definition (cp_parser* parser)
14728 {
14729   tree identifier;
14730   tree namespace_specifier;
14731
14732   cp_token *token = cp_lexer_peek_token (parser->lexer);
14733
14734   /* Look for the `namespace' keyword.  */
14735   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
14736   /* Look for the identifier.  */
14737   identifier = cp_parser_identifier (parser);
14738   if (identifier == error_mark_node)
14739     return;
14740   /* Look for the `=' token.  */
14741   if (!cp_parser_uncommitted_to_tentative_parse_p (parser)
14742       && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) 
14743     {
14744       error_at (token->location, "%<namespace%> definition is not allowed here");
14745       /* Skip the definition.  */
14746       cp_lexer_consume_token (parser->lexer);
14747       if (cp_parser_skip_to_closing_brace (parser))
14748         cp_lexer_consume_token (parser->lexer);
14749       return;
14750     }
14751   cp_parser_require (parser, CPP_EQ, RT_EQ);
14752   /* Look for the qualified-namespace-specifier.  */
14753   namespace_specifier
14754     = cp_parser_qualified_namespace_specifier (parser);
14755   /* Look for the `;' token.  */
14756   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
14757
14758   /* Register the alias in the symbol table.  */
14759   do_namespace_alias (identifier, namespace_specifier);
14760 }
14761
14762 /* Parse a qualified-namespace-specifier.
14763
14764    qualified-namespace-specifier:
14765      :: [opt] nested-name-specifier [opt] namespace-name
14766
14767    Returns a NAMESPACE_DECL corresponding to the specified
14768    namespace.  */
14769
14770 static tree
14771 cp_parser_qualified_namespace_specifier (cp_parser* parser)
14772 {
14773   /* Look for the optional `::'.  */
14774   cp_parser_global_scope_opt (parser,
14775                               /*current_scope_valid_p=*/false);
14776
14777   /* Look for the optional nested-name-specifier.  */
14778   cp_parser_nested_name_specifier_opt (parser,
14779                                        /*typename_keyword_p=*/false,
14780                                        /*check_dependency_p=*/true,
14781                                        /*type_p=*/false,
14782                                        /*is_declaration=*/true);
14783
14784   return cp_parser_namespace_name (parser);
14785 }
14786
14787 /* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
14788    access declaration.
14789
14790    using-declaration:
14791      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
14792      using :: unqualified-id ;  
14793
14794    access-declaration:
14795      qualified-id ;  
14796
14797    */
14798
14799 static bool
14800 cp_parser_using_declaration (cp_parser* parser, 
14801                              bool access_declaration_p)
14802 {
14803   cp_token *token;
14804   bool typename_p = false;
14805   bool global_scope_p;
14806   tree decl;
14807   tree identifier;
14808   tree qscope;
14809
14810   if (access_declaration_p)
14811     cp_parser_parse_tentatively (parser);
14812   else
14813     {
14814       /* Look for the `using' keyword.  */
14815       cp_parser_require_keyword (parser, RID_USING, RT_USING);
14816       
14817       /* Peek at the next token.  */
14818       token = cp_lexer_peek_token (parser->lexer);
14819       /* See if it's `typename'.  */
14820       if (token->keyword == RID_TYPENAME)
14821         {
14822           /* Remember that we've seen it.  */
14823           typename_p = true;
14824           /* Consume the `typename' token.  */
14825           cp_lexer_consume_token (parser->lexer);
14826         }
14827     }
14828
14829   /* Look for the optional global scope qualification.  */
14830   global_scope_p
14831     = (cp_parser_global_scope_opt (parser,
14832                                    /*current_scope_valid_p=*/false)
14833        != NULL_TREE);
14834
14835   /* If we saw `typename', or didn't see `::', then there must be a
14836      nested-name-specifier present.  */
14837   if (typename_p || !global_scope_p)
14838     qscope = cp_parser_nested_name_specifier (parser, typename_p,
14839                                               /*check_dependency_p=*/true,
14840                                               /*type_p=*/false,
14841                                               /*is_declaration=*/true);
14842   /* Otherwise, we could be in either of the two productions.  In that
14843      case, treat the nested-name-specifier as optional.  */
14844   else
14845     qscope = cp_parser_nested_name_specifier_opt (parser,
14846                                                   /*typename_keyword_p=*/false,
14847                                                   /*check_dependency_p=*/true,
14848                                                   /*type_p=*/false,
14849                                                   /*is_declaration=*/true);
14850   if (!qscope)
14851     qscope = global_namespace;
14852
14853   if (access_declaration_p && cp_parser_error_occurred (parser))
14854     /* Something has already gone wrong; there's no need to parse
14855        further.  Since an error has occurred, the return value of
14856        cp_parser_parse_definitely will be false, as required.  */
14857     return cp_parser_parse_definitely (parser);
14858
14859   token = cp_lexer_peek_token (parser->lexer);
14860   /* Parse the unqualified-id.  */
14861   identifier = cp_parser_unqualified_id (parser,
14862                                          /*template_keyword_p=*/false,
14863                                          /*check_dependency_p=*/true,
14864                                          /*declarator_p=*/true,
14865                                          /*optional_p=*/false);
14866
14867   if (access_declaration_p)
14868     {
14869       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
14870         cp_parser_simulate_error (parser);
14871       if (!cp_parser_parse_definitely (parser))
14872         return false;
14873     }
14874
14875   /* The function we call to handle a using-declaration is different
14876      depending on what scope we are in.  */
14877   if (qscope == error_mark_node || identifier == error_mark_node)
14878     ;
14879   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
14880            && TREE_CODE (identifier) != BIT_NOT_EXPR)
14881     /* [namespace.udecl]
14882
14883        A using declaration shall not name a template-id.  */
14884     error_at (token->location,
14885               "a template-id may not appear in a using-declaration");
14886   else
14887     {
14888       if (at_class_scope_p ())
14889         {
14890           /* Create the USING_DECL.  */
14891           decl = do_class_using_decl (parser->scope, identifier);
14892
14893           if (check_for_bare_parameter_packs (decl))
14894             return false;
14895           else
14896             /* Add it to the list of members in this class.  */
14897             finish_member_declaration (decl);
14898         }
14899       else
14900         {
14901           decl = cp_parser_lookup_name_simple (parser,
14902                                                identifier,
14903                                                token->location);
14904           if (decl == error_mark_node)
14905             cp_parser_name_lookup_error (parser, identifier,
14906                                          decl, NLE_NULL,
14907                                          token->location);
14908           else if (check_for_bare_parameter_packs (decl))
14909             return false;
14910           else if (!at_namespace_scope_p ())
14911             do_local_using_decl (decl, qscope, identifier);
14912           else
14913             do_toplevel_using_decl (decl, qscope, identifier);
14914         }
14915     }
14916
14917   /* Look for the final `;'.  */
14918   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
14919   
14920   return true;
14921 }
14922
14923 /* Parse an alias-declaration.
14924
14925    alias-declaration:
14926      using identifier attribute-specifier-seq [opt] = type-id  */
14927
14928 static tree
14929 cp_parser_alias_declaration (cp_parser* parser)
14930 {
14931   tree id, type, decl, pushed_scope = NULL_TREE, attributes;
14932   location_t id_location;
14933   cp_declarator *declarator;
14934   cp_decl_specifier_seq decl_specs;
14935   bool member_p;
14936
14937   /* Look for the `using' keyword.  */
14938   cp_parser_require_keyword (parser, RID_USING, RT_USING);
14939   id_location = cp_lexer_peek_token (parser->lexer)->location;
14940   id = cp_parser_identifier (parser);
14941   attributes = cp_parser_attributes_opt (parser);
14942   cp_parser_require (parser, CPP_EQ, RT_EQ);
14943
14944   type = cp_parser_type_id (parser);
14945
14946   /* A typedef-name can also be introduced by an alias-declaration. The
14947      identifier following the using keyword becomes a typedef-name. It has
14948      the same semantics as if it were introduced by the typedef
14949      specifier. In particular, it does not define a new type and it shall
14950      not appear in the type-id.  */
14951
14952   clear_decl_specs (&decl_specs);
14953   decl_specs.type = type;
14954   decl_specs.attributes = attributes;
14955   ++decl_specs.specs[(int) ds_typedef];
14956   ++decl_specs.specs[(int) ds_alias];
14957
14958   declarator = make_id_declarator (NULL_TREE, id, sfk_none);
14959   declarator->id_loc = id_location;
14960
14961   member_p = at_class_scope_p ();
14962   if (member_p)
14963     decl = grokfield (declarator, &decl_specs, NULL_TREE, false,
14964                       NULL_TREE, attributes);
14965   else
14966     decl = start_decl (declarator, &decl_specs, 0,
14967                        attributes, NULL_TREE, &pushed_scope);
14968   if (decl == error_mark_node)
14969     return decl;
14970
14971   cp_finish_decl (decl, NULL_TREE, 0, NULL_TREE, 0);
14972
14973   if (pushed_scope)
14974     pop_scope (pushed_scope);
14975
14976   /* If decl is a template, return its TEMPLATE_DECL so that it gets
14977      added into the symbol table; otherwise, return the TYPE_DECL.  */
14978   if (DECL_LANG_SPECIFIC (decl)
14979       && DECL_TEMPLATE_INFO (decl)
14980       && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
14981     {
14982       decl = DECL_TI_TEMPLATE (decl);
14983       if (member_p)
14984         check_member_template (decl);
14985     }
14986
14987   return decl;
14988 }
14989
14990 /* Parse a using-directive.
14991
14992    using-directive:
14993      using namespace :: [opt] nested-name-specifier [opt]
14994        namespace-name ;  */
14995
14996 static void
14997 cp_parser_using_directive (cp_parser* parser)
14998 {
14999   tree namespace_decl;
15000   tree attribs;
15001
15002   /* Look for the `using' keyword.  */
15003   cp_parser_require_keyword (parser, RID_USING, RT_USING);
15004   /* And the `namespace' keyword.  */
15005   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
15006   /* Look for the optional `::' operator.  */
15007   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
15008   /* And the optional nested-name-specifier.  */
15009   cp_parser_nested_name_specifier_opt (parser,
15010                                        /*typename_keyword_p=*/false,
15011                                        /*check_dependency_p=*/true,
15012                                        /*type_p=*/false,
15013                                        /*is_declaration=*/true);
15014   /* Get the namespace being used.  */
15015   namespace_decl = cp_parser_namespace_name (parser);
15016   /* And any specified attributes.  */
15017   attribs = cp_parser_attributes_opt (parser);
15018   /* Update the symbol table.  */
15019   parse_using_directive (namespace_decl, attribs);
15020   /* Look for the final `;'.  */
15021   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
15022 }
15023
15024 /* Parse an asm-definition.
15025
15026    asm-definition:
15027      asm ( string-literal ) ;
15028
15029    GNU Extension:
15030
15031    asm-definition:
15032      asm volatile [opt] ( string-literal ) ;
15033      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
15034      asm volatile [opt] ( string-literal : asm-operand-list [opt]
15035                           : asm-operand-list [opt] ) ;
15036      asm volatile [opt] ( string-literal : asm-operand-list [opt]
15037                           : asm-operand-list [opt]
15038                           : asm-clobber-list [opt] ) ;
15039      asm volatile [opt] goto ( string-literal : : asm-operand-list [opt]
15040                                : asm-clobber-list [opt]
15041                                : asm-goto-list ) ;  */
15042
15043 static void
15044 cp_parser_asm_definition (cp_parser* parser)
15045 {
15046   tree string;
15047   tree outputs = NULL_TREE;
15048   tree inputs = NULL_TREE;
15049   tree clobbers = NULL_TREE;
15050   tree labels = NULL_TREE;
15051   tree asm_stmt;
15052   bool volatile_p = false;
15053   bool extended_p = false;
15054   bool invalid_inputs_p = false;
15055   bool invalid_outputs_p = false;
15056   bool goto_p = false;
15057   required_token missing = RT_NONE;
15058
15059   /* Look for the `asm' keyword.  */
15060   cp_parser_require_keyword (parser, RID_ASM, RT_ASM);
15061   /* See if the next token is `volatile'.  */
15062   if (cp_parser_allow_gnu_extensions_p (parser)
15063       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
15064     {
15065       /* Remember that we saw the `volatile' keyword.  */
15066       volatile_p = true;
15067       /* Consume the token.  */
15068       cp_lexer_consume_token (parser->lexer);
15069     }
15070   if (cp_parser_allow_gnu_extensions_p (parser)
15071       && parser->in_function_body
15072       && cp_lexer_next_token_is_keyword (parser->lexer, RID_GOTO))
15073     {
15074       /* Remember that we saw the `goto' keyword.  */
15075       goto_p = true;
15076       /* Consume the token.  */
15077       cp_lexer_consume_token (parser->lexer);
15078     }
15079   /* Look for the opening `('.  */
15080   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
15081     return;
15082   /* Look for the string.  */
15083   string = cp_parser_string_literal (parser, false, false);
15084   if (string == error_mark_node)
15085     {
15086       cp_parser_skip_to_closing_parenthesis (parser, true, false,
15087                                              /*consume_paren=*/true);
15088       return;
15089     }
15090
15091   /* If we're allowing GNU extensions, check for the extended assembly
15092      syntax.  Unfortunately, the `:' tokens need not be separated by
15093      a space in C, and so, for compatibility, we tolerate that here
15094      too.  Doing that means that we have to treat the `::' operator as
15095      two `:' tokens.  */
15096   if (cp_parser_allow_gnu_extensions_p (parser)
15097       && parser->in_function_body
15098       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
15099           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
15100     {
15101       bool inputs_p = false;
15102       bool clobbers_p = false;
15103       bool labels_p = false;
15104
15105       /* The extended syntax was used.  */
15106       extended_p = true;
15107
15108       /* Look for outputs.  */
15109       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
15110         {
15111           /* Consume the `:'.  */
15112           cp_lexer_consume_token (parser->lexer);
15113           /* Parse the output-operands.  */
15114           if (cp_lexer_next_token_is_not (parser->lexer,
15115                                           CPP_COLON)
15116               && cp_lexer_next_token_is_not (parser->lexer,
15117                                              CPP_SCOPE)
15118               && cp_lexer_next_token_is_not (parser->lexer,
15119                                              CPP_CLOSE_PAREN)
15120               && !goto_p)
15121             outputs = cp_parser_asm_operand_list (parser);
15122
15123             if (outputs == error_mark_node)
15124               invalid_outputs_p = true;
15125         }
15126       /* If the next token is `::', there are no outputs, and the
15127          next token is the beginning of the inputs.  */
15128       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
15129         /* The inputs are coming next.  */
15130         inputs_p = true;
15131
15132       /* Look for inputs.  */
15133       if (inputs_p
15134           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
15135         {
15136           /* Consume the `:' or `::'.  */
15137           cp_lexer_consume_token (parser->lexer);
15138           /* Parse the output-operands.  */
15139           if (cp_lexer_next_token_is_not (parser->lexer,
15140                                           CPP_COLON)
15141               && cp_lexer_next_token_is_not (parser->lexer,
15142                                              CPP_SCOPE)
15143               && cp_lexer_next_token_is_not (parser->lexer,
15144                                              CPP_CLOSE_PAREN))
15145             inputs = cp_parser_asm_operand_list (parser);
15146
15147             if (inputs == error_mark_node)
15148               invalid_inputs_p = true;
15149         }
15150       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
15151         /* The clobbers are coming next.  */
15152         clobbers_p = true;
15153
15154       /* Look for clobbers.  */
15155       if (clobbers_p
15156           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
15157         {
15158           clobbers_p = true;
15159           /* Consume the `:' or `::'.  */
15160           cp_lexer_consume_token (parser->lexer);
15161           /* Parse the clobbers.  */
15162           if (cp_lexer_next_token_is_not (parser->lexer,
15163                                           CPP_COLON)
15164               && cp_lexer_next_token_is_not (parser->lexer,
15165                                              CPP_CLOSE_PAREN))
15166             clobbers = cp_parser_asm_clobber_list (parser);
15167         }
15168       else if (goto_p
15169                && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
15170         /* The labels are coming next.  */
15171         labels_p = true;
15172
15173       /* Look for labels.  */
15174       if (labels_p
15175           || (goto_p && cp_lexer_next_token_is (parser->lexer, CPP_COLON)))
15176         {
15177           labels_p = true;
15178           /* Consume the `:' or `::'.  */
15179           cp_lexer_consume_token (parser->lexer);
15180           /* Parse the labels.  */
15181           labels = cp_parser_asm_label_list (parser);
15182         }
15183
15184       if (goto_p && !labels_p)
15185         missing = clobbers_p ? RT_COLON : RT_COLON_SCOPE;
15186     }
15187   else if (goto_p)
15188     missing = RT_COLON_SCOPE;
15189
15190   /* Look for the closing `)'.  */
15191   if (!cp_parser_require (parser, missing ? CPP_COLON : CPP_CLOSE_PAREN,
15192                           missing ? missing : RT_CLOSE_PAREN))
15193     cp_parser_skip_to_closing_parenthesis (parser, true, false,
15194                                            /*consume_paren=*/true);
15195   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
15196
15197   if (!invalid_inputs_p && !invalid_outputs_p)
15198     {
15199       /* Create the ASM_EXPR.  */
15200       if (parser->in_function_body)
15201         {
15202           asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
15203                                       inputs, clobbers, labels);
15204           /* If the extended syntax was not used, mark the ASM_EXPR.  */
15205           if (!extended_p)
15206             {
15207               tree temp = asm_stmt;
15208               if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
15209                 temp = TREE_OPERAND (temp, 0);
15210
15211               ASM_INPUT_P (temp) = 1;
15212             }
15213         }
15214       else
15215         cgraph_add_asm_node (string);
15216     }
15217 }
15218
15219 /* Declarators [gram.dcl.decl] */
15220
15221 /* Parse an init-declarator.
15222
15223    init-declarator:
15224      declarator initializer [opt]
15225
15226    GNU Extension:
15227
15228    init-declarator:
15229      declarator asm-specification [opt] attributes [opt] initializer [opt]
15230
15231    function-definition:
15232      decl-specifier-seq [opt] declarator ctor-initializer [opt]
15233        function-body
15234      decl-specifier-seq [opt] declarator function-try-block
15235
15236    GNU Extension:
15237
15238    function-definition:
15239      __extension__ function-definition
15240
15241    TM Extension:
15242
15243    function-definition:
15244      decl-specifier-seq [opt] declarator function-transaction-block
15245
15246    The DECL_SPECIFIERS apply to this declarator.  Returns a
15247    representation of the entity declared.  If MEMBER_P is TRUE, then
15248    this declarator appears in a class scope.  The new DECL created by
15249    this declarator is returned.
15250
15251    The CHECKS are access checks that should be performed once we know
15252    what entity is being declared (and, therefore, what classes have
15253    befriended it).
15254
15255    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
15256    for a function-definition here as well.  If the declarator is a
15257    declarator for a function-definition, *FUNCTION_DEFINITION_P will
15258    be TRUE upon return.  By that point, the function-definition will
15259    have been completely parsed.
15260
15261    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
15262    is FALSE.
15263
15264    If MAYBE_RANGE_FOR_DECL is not NULL, the pointed tree will be set to the
15265    parsed declaration if it is an uninitialized single declarator not followed
15266    by a `;', or to error_mark_node otherwise. Either way, the trailing `;',
15267    if present, will not be consumed.  If returned, this declarator will be
15268    created with SD_INITIALIZED but will not call cp_finish_decl.  */
15269
15270 static tree
15271 cp_parser_init_declarator (cp_parser* parser,
15272                            cp_decl_specifier_seq *decl_specifiers,
15273                            VEC (deferred_access_check,gc)* checks,
15274                            bool function_definition_allowed_p,
15275                            bool member_p,
15276                            int declares_class_or_enum,
15277                            bool* function_definition_p,
15278                            tree* maybe_range_for_decl)
15279 {
15280   cp_token *token = NULL, *asm_spec_start_token = NULL,
15281            *attributes_start_token = NULL;
15282   cp_declarator *declarator;
15283   tree prefix_attributes;
15284   tree attributes;
15285   tree asm_specification;
15286   tree initializer;
15287   tree decl = NULL_TREE;
15288   tree scope;
15289   int is_initialized;
15290   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
15291      initialized with "= ..", CPP_OPEN_PAREN if initialized with
15292      "(...)".  */
15293   enum cpp_ttype initialization_kind;
15294   bool is_direct_init = false;
15295   bool is_non_constant_init;
15296   int ctor_dtor_or_conv_p;
15297   bool friend_p;
15298   tree pushed_scope = NULL_TREE;
15299   bool range_for_decl_p = false;
15300
15301   /* Gather the attributes that were provided with the
15302      decl-specifiers.  */
15303   prefix_attributes = decl_specifiers->attributes;
15304
15305   /* Assume that this is not the declarator for a function
15306      definition.  */
15307   if (function_definition_p)
15308     *function_definition_p = false;
15309
15310   /* Defer access checks while parsing the declarator; we cannot know
15311      what names are accessible until we know what is being
15312      declared.  */
15313   resume_deferring_access_checks ();
15314
15315   /* Parse the declarator.  */
15316   token = cp_lexer_peek_token (parser->lexer);
15317   declarator
15318     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
15319                             &ctor_dtor_or_conv_p,
15320                             /*parenthesized_p=*/NULL,
15321                             member_p);
15322   /* Gather up the deferred checks.  */
15323   stop_deferring_access_checks ();
15324
15325   /* If the DECLARATOR was erroneous, there's no need to go
15326      further.  */
15327   if (declarator == cp_error_declarator)
15328     return error_mark_node;
15329
15330   /* Check that the number of template-parameter-lists is OK.  */
15331   if (!cp_parser_check_declarator_template_parameters (parser, declarator,
15332                                                        token->location))
15333     return error_mark_node;
15334
15335   if (declares_class_or_enum & 2)
15336     cp_parser_check_for_definition_in_return_type (declarator,
15337                                                    decl_specifiers->type,
15338                                                    decl_specifiers->type_location);
15339
15340   /* Figure out what scope the entity declared by the DECLARATOR is
15341      located in.  `grokdeclarator' sometimes changes the scope, so
15342      we compute it now.  */
15343   scope = get_scope_of_declarator (declarator);
15344
15345   /* Perform any lookups in the declared type which were thought to be
15346      dependent, but are not in the scope of the declarator.  */
15347   decl_specifiers->type
15348     = maybe_update_decl_type (decl_specifiers->type, scope);
15349
15350   /* If we're allowing GNU extensions, look for an asm-specification
15351      and attributes.  */
15352   if (cp_parser_allow_gnu_extensions_p (parser))
15353     {
15354       /* Look for an asm-specification.  */
15355       asm_spec_start_token = cp_lexer_peek_token (parser->lexer);
15356       asm_specification = cp_parser_asm_specification_opt (parser);
15357       /* And attributes.  */
15358       attributes_start_token = cp_lexer_peek_token (parser->lexer);
15359       attributes = cp_parser_attributes_opt (parser);
15360     }
15361   else
15362     {
15363       asm_specification = NULL_TREE;
15364       attributes = NULL_TREE;
15365     }
15366
15367   /* Peek at the next token.  */
15368   token = cp_lexer_peek_token (parser->lexer);
15369   /* Check to see if the token indicates the start of a
15370      function-definition.  */
15371   if (function_declarator_p (declarator)
15372       && cp_parser_token_starts_function_definition_p (token))
15373     {
15374       if (!function_definition_allowed_p)
15375         {
15376           /* If a function-definition should not appear here, issue an
15377              error message.  */
15378           cp_parser_error (parser,
15379                            "a function-definition is not allowed here");
15380           return error_mark_node;
15381         }
15382       else
15383         {
15384           location_t func_brace_location
15385             = cp_lexer_peek_token (parser->lexer)->location;
15386
15387           /* Neither attributes nor an asm-specification are allowed
15388              on a function-definition.  */
15389           if (asm_specification)
15390             error_at (asm_spec_start_token->location,
15391                       "an asm-specification is not allowed "
15392                       "on a function-definition");
15393           if (attributes)
15394             error_at (attributes_start_token->location,
15395                       "attributes are not allowed on a function-definition");
15396           /* This is a function-definition.  */
15397           *function_definition_p = true;
15398
15399           /* Parse the function definition.  */
15400           if (member_p)
15401             decl = cp_parser_save_member_function_body (parser,
15402                                                         decl_specifiers,
15403                                                         declarator,
15404                                                         prefix_attributes);
15405           else
15406             decl
15407               = (cp_parser_function_definition_from_specifiers_and_declarator
15408                  (parser, decl_specifiers, prefix_attributes, declarator));
15409
15410           if (decl != error_mark_node && DECL_STRUCT_FUNCTION (decl))
15411             {
15412               /* This is where the prologue starts...  */
15413               DECL_STRUCT_FUNCTION (decl)->function_start_locus
15414                 = func_brace_location;
15415             }
15416
15417           return decl;
15418         }
15419     }
15420
15421   /* [dcl.dcl]
15422
15423      Only in function declarations for constructors, destructors, and
15424      type conversions can the decl-specifier-seq be omitted.
15425
15426      We explicitly postpone this check past the point where we handle
15427      function-definitions because we tolerate function-definitions
15428      that are missing their return types in some modes.  */
15429   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
15430     {
15431       cp_parser_error (parser,
15432                        "expected constructor, destructor, or type conversion");
15433       return error_mark_node;
15434     }
15435
15436   /* An `=' or an `(', or an '{' in C++0x, indicates an initializer.  */
15437   if (token->type == CPP_EQ
15438       || token->type == CPP_OPEN_PAREN
15439       || token->type == CPP_OPEN_BRACE)
15440     {
15441       is_initialized = SD_INITIALIZED;
15442       initialization_kind = token->type;
15443       if (maybe_range_for_decl)
15444         *maybe_range_for_decl = error_mark_node;
15445
15446       if (token->type == CPP_EQ
15447           && function_declarator_p (declarator))
15448         {
15449           cp_token *t2 = cp_lexer_peek_nth_token (parser->lexer, 2);
15450           if (t2->keyword == RID_DEFAULT)
15451             is_initialized = SD_DEFAULTED;
15452           else if (t2->keyword == RID_DELETE)
15453             is_initialized = SD_DELETED;
15454         }
15455     }
15456   else
15457     {
15458       /* If the init-declarator isn't initialized and isn't followed by a
15459          `,' or `;', it's not a valid init-declarator.  */
15460       if (token->type != CPP_COMMA
15461           && token->type != CPP_SEMICOLON)
15462         {
15463           if (maybe_range_for_decl && *maybe_range_for_decl != error_mark_node)
15464             range_for_decl_p = true;
15465           else
15466             {
15467               cp_parser_error (parser, "expected initializer");
15468               return error_mark_node;
15469             }
15470         }
15471       is_initialized = SD_UNINITIALIZED;
15472       initialization_kind = CPP_EOF;
15473     }
15474
15475   /* Because start_decl has side-effects, we should only call it if we
15476      know we're going ahead.  By this point, we know that we cannot
15477      possibly be looking at any other construct.  */
15478   cp_parser_commit_to_tentative_parse (parser);
15479
15480   /* If the decl specifiers were bad, issue an error now that we're
15481      sure this was intended to be a declarator.  Then continue
15482      declaring the variable(s), as int, to try to cut down on further
15483      errors.  */
15484   if (decl_specifiers->any_specifiers_p
15485       && decl_specifiers->type == error_mark_node)
15486     {
15487       cp_parser_error (parser, "invalid type in declaration");
15488       decl_specifiers->type = integer_type_node;
15489     }
15490
15491   /* Check to see whether or not this declaration is a friend.  */
15492   friend_p = cp_parser_friend_p (decl_specifiers);
15493
15494   /* Enter the newly declared entry in the symbol table.  If we're
15495      processing a declaration in a class-specifier, we wait until
15496      after processing the initializer.  */
15497   if (!member_p)
15498     {
15499       if (parser->in_unbraced_linkage_specification_p)
15500         decl_specifiers->storage_class = sc_extern;
15501       decl = start_decl (declarator, decl_specifiers,
15502                          range_for_decl_p? SD_INITIALIZED : is_initialized,
15503                          attributes, prefix_attributes,
15504                          &pushed_scope);
15505       /* Adjust location of decl if declarator->id_loc is more appropriate:
15506          set, and decl wasn't merged with another decl, in which case its
15507          location would be different from input_location, and more accurate.  */
15508       if (DECL_P (decl)
15509           && declarator->id_loc != UNKNOWN_LOCATION
15510           && DECL_SOURCE_LOCATION (decl) == input_location)
15511         DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
15512     }
15513   else if (scope)
15514     /* Enter the SCOPE.  That way unqualified names appearing in the
15515        initializer will be looked up in SCOPE.  */
15516     pushed_scope = push_scope (scope);
15517
15518   /* Perform deferred access control checks, now that we know in which
15519      SCOPE the declared entity resides.  */
15520   if (!member_p && decl)
15521     {
15522       tree saved_current_function_decl = NULL_TREE;
15523
15524       /* If the entity being declared is a function, pretend that we
15525          are in its scope.  If it is a `friend', it may have access to
15526          things that would not otherwise be accessible.  */
15527       if (TREE_CODE (decl) == FUNCTION_DECL)
15528         {
15529           saved_current_function_decl = current_function_decl;
15530           current_function_decl = decl;
15531         }
15532
15533       /* Perform access checks for template parameters.  */
15534       cp_parser_perform_template_parameter_access_checks (checks);
15535
15536       /* Perform the access control checks for the declarator and the
15537          decl-specifiers.  */
15538       perform_deferred_access_checks ();
15539
15540       /* Restore the saved value.  */
15541       if (TREE_CODE (decl) == FUNCTION_DECL)
15542         current_function_decl = saved_current_function_decl;
15543     }
15544
15545   /* Parse the initializer.  */
15546   initializer = NULL_TREE;
15547   is_direct_init = false;
15548   is_non_constant_init = true;
15549   if (is_initialized)
15550     {
15551       if (function_declarator_p (declarator))
15552         {
15553           cp_token *initializer_start_token = cp_lexer_peek_token (parser->lexer);
15554            if (initialization_kind == CPP_EQ)
15555              initializer = cp_parser_pure_specifier (parser);
15556            else
15557              {
15558                /* If the declaration was erroneous, we don't really
15559                   know what the user intended, so just silently
15560                   consume the initializer.  */
15561                if (decl != error_mark_node)
15562                  error_at (initializer_start_token->location,
15563                            "initializer provided for function");
15564                cp_parser_skip_to_closing_parenthesis (parser,
15565                                                       /*recovering=*/true,
15566                                                       /*or_comma=*/false,
15567                                                       /*consume_paren=*/true);
15568              }
15569         }
15570       else
15571         {
15572           /* We want to record the extra mangling scope for in-class
15573              initializers of class members and initializers of static data
15574              member templates.  The former is a C++0x feature which isn't
15575              implemented yet, and I expect it will involve deferring
15576              parsing of the initializer until end of class as with default
15577              arguments.  So right here we only handle the latter.  */
15578           if (!member_p && processing_template_decl)
15579             start_lambda_scope (decl);
15580           initializer = cp_parser_initializer (parser,
15581                                                &is_direct_init,
15582                                                &is_non_constant_init);
15583           if (!member_p && processing_template_decl)
15584             finish_lambda_scope ();
15585         }
15586     }
15587
15588   /* The old parser allows attributes to appear after a parenthesized
15589      initializer.  Mark Mitchell proposed removing this functionality
15590      on the GCC mailing lists on 2002-08-13.  This parser accepts the
15591      attributes -- but ignores them.  */
15592   if (cp_parser_allow_gnu_extensions_p (parser)
15593       && initialization_kind == CPP_OPEN_PAREN)
15594     if (cp_parser_attributes_opt (parser))
15595       warning (OPT_Wattributes,
15596                "attributes after parenthesized initializer ignored");
15597
15598   /* For an in-class declaration, use `grokfield' to create the
15599      declaration.  */
15600   if (member_p)
15601     {
15602       if (pushed_scope)
15603         {
15604           pop_scope (pushed_scope);
15605           pushed_scope = NULL_TREE;
15606         }
15607       decl = grokfield (declarator, decl_specifiers,
15608                         initializer, !is_non_constant_init,
15609                         /*asmspec=*/NULL_TREE,
15610                         prefix_attributes);
15611       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
15612         cp_parser_save_default_args (parser, decl);
15613     }
15614
15615   /* Finish processing the declaration.  But, skip member
15616      declarations.  */
15617   if (!member_p && decl && decl != error_mark_node && !range_for_decl_p)
15618     {
15619       cp_finish_decl (decl,
15620                       initializer, !is_non_constant_init,
15621                       asm_specification,
15622                       /* If the initializer is in parentheses, then this is
15623                          a direct-initialization, which means that an
15624                          `explicit' constructor is OK.  Otherwise, an
15625                          `explicit' constructor cannot be used.  */
15626                       ((is_direct_init || !is_initialized)
15627                        ? LOOKUP_NORMAL : LOOKUP_IMPLICIT));
15628     }
15629   else if ((cxx_dialect != cxx98) && friend_p
15630            && decl && TREE_CODE (decl) == FUNCTION_DECL)
15631     /* Core issue #226 (C++0x only): A default template-argument
15632        shall not be specified in a friend class template
15633        declaration. */
15634     check_default_tmpl_args (decl, current_template_parms, /*is_primary=*/1, 
15635                              /*is_partial=*/0, /*is_friend_decl=*/1);
15636
15637   if (!friend_p && pushed_scope)
15638     pop_scope (pushed_scope);
15639
15640   return decl;
15641 }
15642
15643 /* Parse a declarator.
15644
15645    declarator:
15646      direct-declarator
15647      ptr-operator declarator
15648
15649    abstract-declarator:
15650      ptr-operator abstract-declarator [opt]
15651      direct-abstract-declarator
15652
15653    GNU Extensions:
15654
15655    declarator:
15656      attributes [opt] direct-declarator
15657      attributes [opt] ptr-operator declarator
15658
15659    abstract-declarator:
15660      attributes [opt] ptr-operator abstract-declarator [opt]
15661      attributes [opt] direct-abstract-declarator
15662
15663    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
15664    detect constructor, destructor or conversion operators. It is set
15665    to -1 if the declarator is a name, and +1 if it is a
15666    function. Otherwise it is set to zero. Usually you just want to
15667    test for >0, but internally the negative value is used.
15668
15669    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
15670    a decl-specifier-seq unless it declares a constructor, destructor,
15671    or conversion.  It might seem that we could check this condition in
15672    semantic analysis, rather than parsing, but that makes it difficult
15673    to handle something like `f()'.  We want to notice that there are
15674    no decl-specifiers, and therefore realize that this is an
15675    expression, not a declaration.)
15676
15677    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
15678    the declarator is a direct-declarator of the form "(...)".
15679
15680    MEMBER_P is true iff this declarator is a member-declarator.  */
15681
15682 static cp_declarator *
15683 cp_parser_declarator (cp_parser* parser,
15684                       cp_parser_declarator_kind dcl_kind,
15685                       int* ctor_dtor_or_conv_p,
15686                       bool* parenthesized_p,
15687                       bool member_p)
15688 {
15689   cp_declarator *declarator;
15690   enum tree_code code;
15691   cp_cv_quals cv_quals;
15692   tree class_type;
15693   tree attributes = NULL_TREE;
15694
15695   /* Assume this is not a constructor, destructor, or type-conversion
15696      operator.  */
15697   if (ctor_dtor_or_conv_p)
15698     *ctor_dtor_or_conv_p = 0;
15699
15700   if (cp_parser_allow_gnu_extensions_p (parser))
15701     attributes = cp_parser_attributes_opt (parser);
15702
15703   /* Check for the ptr-operator production.  */
15704   cp_parser_parse_tentatively (parser);
15705   /* Parse the ptr-operator.  */
15706   code = cp_parser_ptr_operator (parser,
15707                                  &class_type,
15708                                  &cv_quals);
15709   /* If that worked, then we have a ptr-operator.  */
15710   if (cp_parser_parse_definitely (parser))
15711     {
15712       /* If a ptr-operator was found, then this declarator was not
15713          parenthesized.  */
15714       if (parenthesized_p)
15715         *parenthesized_p = true;
15716       /* The dependent declarator is optional if we are parsing an
15717          abstract-declarator.  */
15718       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
15719         cp_parser_parse_tentatively (parser);
15720
15721       /* Parse the dependent declarator.  */
15722       declarator = cp_parser_declarator (parser, dcl_kind,
15723                                          /*ctor_dtor_or_conv_p=*/NULL,
15724                                          /*parenthesized_p=*/NULL,
15725                                          /*member_p=*/false);
15726
15727       /* If we are parsing an abstract-declarator, we must handle the
15728          case where the dependent declarator is absent.  */
15729       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
15730           && !cp_parser_parse_definitely (parser))
15731         declarator = NULL;
15732
15733       declarator = cp_parser_make_indirect_declarator
15734         (code, class_type, cv_quals, declarator);
15735     }
15736   /* Everything else is a direct-declarator.  */
15737   else
15738     {
15739       if (parenthesized_p)
15740         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
15741                                                    CPP_OPEN_PAREN);
15742       declarator = cp_parser_direct_declarator (parser, dcl_kind,
15743                                                 ctor_dtor_or_conv_p,
15744                                                 member_p);
15745     }
15746
15747   if (attributes && declarator && declarator != cp_error_declarator)
15748     declarator->attributes = attributes;
15749
15750   return declarator;
15751 }
15752
15753 /* Parse a direct-declarator or direct-abstract-declarator.
15754
15755    direct-declarator:
15756      declarator-id
15757      direct-declarator ( parameter-declaration-clause )
15758        cv-qualifier-seq [opt]
15759        exception-specification [opt]
15760      direct-declarator [ constant-expression [opt] ]
15761      ( declarator )
15762
15763    direct-abstract-declarator:
15764      direct-abstract-declarator [opt]
15765        ( parameter-declaration-clause )
15766        cv-qualifier-seq [opt]
15767        exception-specification [opt]
15768      direct-abstract-declarator [opt] [ constant-expression [opt] ]
15769      ( abstract-declarator )
15770
15771    Returns a representation of the declarator.  DCL_KIND is
15772    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
15773    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
15774    we are parsing a direct-declarator.  It is
15775    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
15776    of ambiguity we prefer an abstract declarator, as per
15777    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
15778    cp_parser_declarator.  */
15779
15780 static cp_declarator *
15781 cp_parser_direct_declarator (cp_parser* parser,
15782                              cp_parser_declarator_kind dcl_kind,
15783                              int* ctor_dtor_or_conv_p,
15784                              bool member_p)
15785 {
15786   cp_token *token;
15787   cp_declarator *declarator = NULL;
15788   tree scope = NULL_TREE;
15789   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
15790   bool saved_in_declarator_p = parser->in_declarator_p;
15791   bool first = true;
15792   tree pushed_scope = NULL_TREE;
15793
15794   while (true)
15795     {
15796       /* Peek at the next token.  */
15797       token = cp_lexer_peek_token (parser->lexer);
15798       if (token->type == CPP_OPEN_PAREN)
15799         {
15800           /* This is either a parameter-declaration-clause, or a
15801              parenthesized declarator. When we know we are parsing a
15802              named declarator, it must be a parenthesized declarator
15803              if FIRST is true. For instance, `(int)' is a
15804              parameter-declaration-clause, with an omitted
15805              direct-abstract-declarator. But `((*))', is a
15806              parenthesized abstract declarator. Finally, when T is a
15807              template parameter `(T)' is a
15808              parameter-declaration-clause, and not a parenthesized
15809              named declarator.
15810
15811              We first try and parse a parameter-declaration-clause,
15812              and then try a nested declarator (if FIRST is true).
15813
15814              It is not an error for it not to be a
15815              parameter-declaration-clause, even when FIRST is
15816              false. Consider,
15817
15818                int i (int);
15819                int i (3);
15820
15821              The first is the declaration of a function while the
15822              second is the definition of a variable, including its
15823              initializer.
15824
15825              Having seen only the parenthesis, we cannot know which of
15826              these two alternatives should be selected.  Even more
15827              complex are examples like:
15828
15829                int i (int (a));
15830                int i (int (3));
15831
15832              The former is a function-declaration; the latter is a
15833              variable initialization.
15834
15835              Thus again, we try a parameter-declaration-clause, and if
15836              that fails, we back out and return.  */
15837
15838           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
15839             {
15840               tree params;
15841               unsigned saved_num_template_parameter_lists;
15842               bool is_declarator = false;
15843               tree t;
15844
15845               /* In a member-declarator, the only valid interpretation
15846                  of a parenthesis is the start of a
15847                  parameter-declaration-clause.  (It is invalid to
15848                  initialize a static data member with a parenthesized
15849                  initializer; only the "=" form of initialization is
15850                  permitted.)  */
15851               if (!member_p)
15852                 cp_parser_parse_tentatively (parser);
15853
15854               /* Consume the `('.  */
15855               cp_lexer_consume_token (parser->lexer);
15856               if (first)
15857                 {
15858                   /* If this is going to be an abstract declarator, we're
15859                      in a declarator and we can't have default args.  */
15860                   parser->default_arg_ok_p = false;
15861                   parser->in_declarator_p = true;
15862                 }
15863
15864               /* Inside the function parameter list, surrounding
15865                  template-parameter-lists do not apply.  */
15866               saved_num_template_parameter_lists
15867                 = parser->num_template_parameter_lists;
15868               parser->num_template_parameter_lists = 0;
15869
15870               begin_scope (sk_function_parms, NULL_TREE);
15871
15872               /* Parse the parameter-declaration-clause.  */
15873               params = cp_parser_parameter_declaration_clause (parser);
15874
15875               parser->num_template_parameter_lists
15876                 = saved_num_template_parameter_lists;
15877
15878               /* Consume the `)'.  */
15879               cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
15880
15881               /* If all went well, parse the cv-qualifier-seq and the
15882                  exception-specification.  */
15883               if (member_p || cp_parser_parse_definitely (parser))
15884                 {
15885                   cp_cv_quals cv_quals;
15886                   cp_virt_specifiers virt_specifiers;
15887                   tree exception_specification;
15888                   tree late_return;
15889
15890                   is_declarator = true;
15891
15892                   if (ctor_dtor_or_conv_p)
15893                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
15894                   first = false;
15895
15896                   /* Parse the cv-qualifier-seq.  */
15897                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
15898                   /* And the exception-specification.  */
15899                   exception_specification
15900                     = cp_parser_exception_specification_opt (parser);
15901                   /* Parse the virt-specifier-seq.  */
15902                   virt_specifiers = cp_parser_virt_specifier_seq_opt (parser);
15903
15904                   late_return = (cp_parser_late_return_type_opt
15905                                  (parser, member_p ? cv_quals : -1));
15906
15907                   /* Create the function-declarator.  */
15908                   declarator = make_call_declarator (declarator,
15909                                                      params,
15910                                                      cv_quals,
15911                                                      virt_specifiers,
15912                                                      exception_specification,
15913                                                      late_return);
15914                   /* Any subsequent parameter lists are to do with
15915                      return type, so are not those of the declared
15916                      function.  */
15917                   parser->default_arg_ok_p = false;
15918                 }
15919
15920               /* Remove the function parms from scope.  */
15921               for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
15922                 pop_binding (DECL_NAME (t), t);
15923               leave_scope();
15924
15925               if (is_declarator)
15926                 /* Repeat the main loop.  */
15927                 continue;
15928             }
15929
15930           /* If this is the first, we can try a parenthesized
15931              declarator.  */
15932           if (first)
15933             {
15934               bool saved_in_type_id_in_expr_p;
15935
15936               parser->default_arg_ok_p = saved_default_arg_ok_p;
15937               parser->in_declarator_p = saved_in_declarator_p;
15938
15939               /* Consume the `('.  */
15940               cp_lexer_consume_token (parser->lexer);
15941               /* Parse the nested declarator.  */
15942               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
15943               parser->in_type_id_in_expr_p = true;
15944               declarator
15945                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
15946                                         /*parenthesized_p=*/NULL,
15947                                         member_p);
15948               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
15949               first = false;
15950               /* Expect a `)'.  */
15951               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
15952                 declarator = cp_error_declarator;
15953               if (declarator == cp_error_declarator)
15954                 break;
15955
15956               goto handle_declarator;
15957             }
15958           /* Otherwise, we must be done.  */
15959           else
15960             break;
15961         }
15962       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
15963                && token->type == CPP_OPEN_SQUARE)
15964         {
15965           /* Parse an array-declarator.  */
15966           tree bounds;
15967
15968           if (ctor_dtor_or_conv_p)
15969             *ctor_dtor_or_conv_p = 0;
15970
15971           first = false;
15972           parser->default_arg_ok_p = false;
15973           parser->in_declarator_p = true;
15974           /* Consume the `['.  */
15975           cp_lexer_consume_token (parser->lexer);
15976           /* Peek at the next token.  */
15977           token = cp_lexer_peek_token (parser->lexer);
15978           /* If the next token is `]', then there is no
15979              constant-expression.  */
15980           if (token->type != CPP_CLOSE_SQUARE)
15981             {
15982               bool non_constant_p;
15983
15984               bounds
15985                 = cp_parser_constant_expression (parser,
15986                                                  /*allow_non_constant=*/true,
15987                                                  &non_constant_p);
15988               if (!non_constant_p)
15989                 /* OK */;
15990               /* Normally, the array bound must be an integral constant
15991                  expression.  However, as an extension, we allow VLAs
15992                  in function scopes as long as they aren't part of a
15993                  parameter declaration.  */
15994               else if (!parser->in_function_body
15995                        || current_binding_level->kind == sk_function_parms)
15996                 {
15997                   cp_parser_error (parser,
15998                                    "array bound is not an integer constant");
15999                   bounds = error_mark_node;
16000                 }
16001               else if (processing_template_decl && !error_operand_p (bounds))
16002                 {
16003                   /* Remember this wasn't a constant-expression.  */
16004                   bounds = build_nop (TREE_TYPE (bounds), bounds);
16005                   TREE_SIDE_EFFECTS (bounds) = 1;
16006                 }
16007             }
16008           else
16009             bounds = NULL_TREE;
16010           /* Look for the closing `]'.  */
16011           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE))
16012             {
16013               declarator = cp_error_declarator;
16014               break;
16015             }
16016
16017           declarator = make_array_declarator (declarator, bounds);
16018         }
16019       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
16020         {
16021           {
16022             tree qualifying_scope;
16023             tree unqualified_name;
16024             special_function_kind sfk;
16025             bool abstract_ok;
16026             bool pack_expansion_p = false;
16027             cp_token *declarator_id_start_token;
16028
16029             /* Parse a declarator-id */
16030             abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
16031             if (abstract_ok)
16032               {
16033                 cp_parser_parse_tentatively (parser);
16034
16035                 /* If we see an ellipsis, we should be looking at a
16036                    parameter pack. */
16037                 if (token->type == CPP_ELLIPSIS)
16038                   {
16039                     /* Consume the `...' */
16040                     cp_lexer_consume_token (parser->lexer);
16041
16042                     pack_expansion_p = true;
16043                   }
16044               }
16045
16046             declarator_id_start_token = cp_lexer_peek_token (parser->lexer);
16047             unqualified_name
16048               = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
16049             qualifying_scope = parser->scope;
16050             if (abstract_ok)
16051               {
16052                 bool okay = false;
16053
16054                 if (!unqualified_name && pack_expansion_p)
16055                   {
16056                     /* Check whether an error occurred. */
16057                     okay = !cp_parser_error_occurred (parser);
16058
16059                     /* We already consumed the ellipsis to mark a
16060                        parameter pack, but we have no way to report it,
16061                        so abort the tentative parse. We will be exiting
16062                        immediately anyway. */
16063                     cp_parser_abort_tentative_parse (parser);
16064                   }
16065                 else
16066                   okay = cp_parser_parse_definitely (parser);
16067
16068                 if (!okay)
16069                   unqualified_name = error_mark_node;
16070                 else if (unqualified_name
16071                          && (qualifying_scope
16072                              || (TREE_CODE (unqualified_name)
16073                                  != IDENTIFIER_NODE)))
16074                   {
16075                     cp_parser_error (parser, "expected unqualified-id");
16076                     unqualified_name = error_mark_node;
16077                   }
16078               }
16079
16080             if (!unqualified_name)
16081               return NULL;
16082             if (unqualified_name == error_mark_node)
16083               {
16084                 declarator = cp_error_declarator;
16085                 pack_expansion_p = false;
16086                 declarator->parameter_pack_p = false;
16087                 break;
16088               }
16089
16090             if (qualifying_scope && at_namespace_scope_p ()
16091                 && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
16092               {
16093                 /* In the declaration of a member of a template class
16094                    outside of the class itself, the SCOPE will sometimes
16095                    be a TYPENAME_TYPE.  For example, given:
16096
16097                    template <typename T>
16098                    int S<T>::R::i = 3;
16099
16100                    the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
16101                    this context, we must resolve S<T>::R to an ordinary
16102                    type, rather than a typename type.
16103
16104                    The reason we normally avoid resolving TYPENAME_TYPEs
16105                    is that a specialization of `S' might render
16106                    `S<T>::R' not a type.  However, if `S' is
16107                    specialized, then this `i' will not be used, so there
16108                    is no harm in resolving the types here.  */
16109                 tree type;
16110
16111                 /* Resolve the TYPENAME_TYPE.  */
16112                 type = resolve_typename_type (qualifying_scope,
16113                                               /*only_current_p=*/false);
16114                 /* If that failed, the declarator is invalid.  */
16115                 if (TREE_CODE (type) == TYPENAME_TYPE)
16116                   {
16117                     if (typedef_variant_p (type))
16118                       error_at (declarator_id_start_token->location,
16119                                 "cannot define member of dependent typedef "
16120                                 "%qT", type);
16121                     else
16122                       error_at (declarator_id_start_token->location,
16123                                 "%<%T::%E%> is not a type",
16124                                 TYPE_CONTEXT (qualifying_scope),
16125                                 TYPE_IDENTIFIER (qualifying_scope));
16126                   }
16127                 qualifying_scope = type;
16128               }
16129
16130             sfk = sfk_none;
16131
16132             if (unqualified_name)
16133               {
16134                 tree class_type;
16135
16136                 if (qualifying_scope
16137                     && CLASS_TYPE_P (qualifying_scope))
16138                   class_type = qualifying_scope;
16139                 else
16140                   class_type = current_class_type;
16141
16142                 if (TREE_CODE (unqualified_name) == TYPE_DECL)
16143                   {
16144                     tree name_type = TREE_TYPE (unqualified_name);
16145                     if (class_type && same_type_p (name_type, class_type))
16146                       {
16147                         if (qualifying_scope
16148                             && CLASSTYPE_USE_TEMPLATE (name_type))
16149                           {
16150                             error_at (declarator_id_start_token->location,
16151                                       "invalid use of constructor as a template");
16152                             inform (declarator_id_start_token->location,
16153                                     "use %<%T::%D%> instead of %<%T::%D%> to "
16154                                     "name the constructor in a qualified name",
16155                                     class_type,
16156                                     DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
16157                                     class_type, name_type);
16158                             declarator = cp_error_declarator;
16159                             break;
16160                           }
16161                         else
16162                           unqualified_name = constructor_name (class_type);
16163                       }
16164                     else
16165                       {
16166                         /* We do not attempt to print the declarator
16167                            here because we do not have enough
16168                            information about its original syntactic
16169                            form.  */
16170                         cp_parser_error (parser, "invalid declarator");
16171                         declarator = cp_error_declarator;
16172                         break;
16173                       }
16174                   }
16175
16176                 if (class_type)
16177                   {
16178                     if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
16179                       sfk = sfk_destructor;
16180                     else if (IDENTIFIER_TYPENAME_P (unqualified_name))
16181                       sfk = sfk_conversion;
16182                     else if (/* There's no way to declare a constructor
16183                                 for an anonymous type, even if the type
16184                                 got a name for linkage purposes.  */
16185                              !TYPE_WAS_ANONYMOUS (class_type)
16186                              && constructor_name_p (unqualified_name,
16187                                                     class_type))
16188                       {
16189                         unqualified_name = constructor_name (class_type);
16190                         sfk = sfk_constructor;
16191                       }
16192                     else if (is_overloaded_fn (unqualified_name)
16193                              && DECL_CONSTRUCTOR_P (get_first_fn
16194                                                     (unqualified_name)))
16195                       sfk = sfk_constructor;
16196
16197                     if (ctor_dtor_or_conv_p && sfk != sfk_none)
16198                       *ctor_dtor_or_conv_p = -1;
16199                   }
16200               }
16201             declarator = make_id_declarator (qualifying_scope,
16202                                              unqualified_name,
16203                                              sfk);
16204             declarator->id_loc = token->location;
16205             declarator->parameter_pack_p = pack_expansion_p;
16206
16207             if (pack_expansion_p)
16208               maybe_warn_variadic_templates ();
16209           }
16210
16211         handle_declarator:;
16212           scope = get_scope_of_declarator (declarator);
16213           if (scope)
16214             /* Any names that appear after the declarator-id for a
16215                member are looked up in the containing scope.  */
16216             pushed_scope = push_scope (scope);
16217           parser->in_declarator_p = true;
16218           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
16219               || (declarator && declarator->kind == cdk_id))
16220             /* Default args are only allowed on function
16221                declarations.  */
16222             parser->default_arg_ok_p = saved_default_arg_ok_p;
16223           else
16224             parser->default_arg_ok_p = false;
16225
16226           first = false;
16227         }
16228       /* We're done.  */
16229       else
16230         break;
16231     }
16232
16233   /* For an abstract declarator, we might wind up with nothing at this
16234      point.  That's an error; the declarator is not optional.  */
16235   if (!declarator)
16236     cp_parser_error (parser, "expected declarator");
16237
16238   /* If we entered a scope, we must exit it now.  */
16239   if (pushed_scope)
16240     pop_scope (pushed_scope);
16241
16242   parser->default_arg_ok_p = saved_default_arg_ok_p;
16243   parser->in_declarator_p = saved_in_declarator_p;
16244
16245   return declarator;
16246 }
16247
16248 /* Parse a ptr-operator.
16249
16250    ptr-operator:
16251      * cv-qualifier-seq [opt]
16252      &
16253      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
16254
16255    GNU Extension:
16256
16257    ptr-operator:
16258      & cv-qualifier-seq [opt]
16259
16260    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
16261    Returns ADDR_EXPR if a reference was used, or NON_LVALUE_EXPR for
16262    an rvalue reference. In the case of a pointer-to-member, *TYPE is
16263    filled in with the TYPE containing the member.  *CV_QUALS is
16264    filled in with the cv-qualifier-seq, or TYPE_UNQUALIFIED, if there
16265    are no cv-qualifiers.  Returns ERROR_MARK if an error occurred.
16266    Note that the tree codes returned by this function have nothing
16267    to do with the types of trees that will be eventually be created
16268    to represent the pointer or reference type being parsed. They are
16269    just constants with suggestive names. */
16270 static enum tree_code
16271 cp_parser_ptr_operator (cp_parser* parser,
16272                         tree* type,
16273                         cp_cv_quals *cv_quals)
16274 {
16275   enum tree_code code = ERROR_MARK;
16276   cp_token *token;
16277
16278   /* Assume that it's not a pointer-to-member.  */
16279   *type = NULL_TREE;
16280   /* And that there are no cv-qualifiers.  */
16281   *cv_quals = TYPE_UNQUALIFIED;
16282
16283   /* Peek at the next token.  */
16284   token = cp_lexer_peek_token (parser->lexer);
16285
16286   /* If it's a `*', `&' or `&&' we have a pointer or reference.  */
16287   if (token->type == CPP_MULT)
16288     code = INDIRECT_REF;
16289   else if (token->type == CPP_AND)
16290     code = ADDR_EXPR;
16291   else if ((cxx_dialect != cxx98) &&
16292            token->type == CPP_AND_AND) /* C++0x only */
16293     code = NON_LVALUE_EXPR;
16294
16295   if (code != ERROR_MARK)
16296     {
16297       /* Consume the `*', `&' or `&&'.  */
16298       cp_lexer_consume_token (parser->lexer);
16299
16300       /* A `*' can be followed by a cv-qualifier-seq, and so can a
16301          `&', if we are allowing GNU extensions.  (The only qualifier
16302          that can legally appear after `&' is `restrict', but that is
16303          enforced during semantic analysis.  */
16304       if (code == INDIRECT_REF
16305           || cp_parser_allow_gnu_extensions_p (parser))
16306         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
16307     }
16308   else
16309     {
16310       /* Try the pointer-to-member case.  */
16311       cp_parser_parse_tentatively (parser);
16312       /* Look for the optional `::' operator.  */
16313       cp_parser_global_scope_opt (parser,
16314                                   /*current_scope_valid_p=*/false);
16315       /* Look for the nested-name specifier.  */
16316       token = cp_lexer_peek_token (parser->lexer);
16317       cp_parser_nested_name_specifier (parser,
16318                                        /*typename_keyword_p=*/false,
16319                                        /*check_dependency_p=*/true,
16320                                        /*type_p=*/false,
16321                                        /*is_declaration=*/false);
16322       /* If we found it, and the next token is a `*', then we are
16323          indeed looking at a pointer-to-member operator.  */
16324       if (!cp_parser_error_occurred (parser)
16325           && cp_parser_require (parser, CPP_MULT, RT_MULT))
16326         {
16327           /* Indicate that the `*' operator was used.  */
16328           code = INDIRECT_REF;
16329
16330           if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
16331             error_at (token->location, "%qD is a namespace", parser->scope);
16332           else
16333             {
16334               /* The type of which the member is a member is given by the
16335                  current SCOPE.  */
16336               *type = parser->scope;
16337               /* The next name will not be qualified.  */
16338               parser->scope = NULL_TREE;
16339               parser->qualifying_scope = NULL_TREE;
16340               parser->object_scope = NULL_TREE;
16341               /* Look for the optional cv-qualifier-seq.  */
16342               *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
16343             }
16344         }
16345       /* If that didn't work we don't have a ptr-operator.  */
16346       if (!cp_parser_parse_definitely (parser))
16347         cp_parser_error (parser, "expected ptr-operator");
16348     }
16349
16350   return code;
16351 }
16352
16353 /* Parse an (optional) cv-qualifier-seq.
16354
16355    cv-qualifier-seq:
16356      cv-qualifier cv-qualifier-seq [opt]
16357
16358    cv-qualifier:
16359      const
16360      volatile
16361
16362    GNU Extension:
16363
16364    cv-qualifier:
16365      __restrict__
16366
16367    Returns a bitmask representing the cv-qualifiers.  */
16368
16369 static cp_cv_quals
16370 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
16371 {
16372   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
16373
16374   while (true)
16375     {
16376       cp_token *token;
16377       cp_cv_quals cv_qualifier;
16378
16379       /* Peek at the next token.  */
16380       token = cp_lexer_peek_token (parser->lexer);
16381       /* See if it's a cv-qualifier.  */
16382       switch (token->keyword)
16383         {
16384         case RID_CONST:
16385           cv_qualifier = TYPE_QUAL_CONST;
16386           break;
16387
16388         case RID_VOLATILE:
16389           cv_qualifier = TYPE_QUAL_VOLATILE;
16390           break;
16391
16392         case RID_RESTRICT:
16393           cv_qualifier = TYPE_QUAL_RESTRICT;
16394           break;
16395
16396         default:
16397           cv_qualifier = TYPE_UNQUALIFIED;
16398           break;
16399         }
16400
16401       if (!cv_qualifier)
16402         break;
16403
16404       if (cv_quals & cv_qualifier)
16405         {
16406           error_at (token->location, "duplicate cv-qualifier");
16407           cp_lexer_purge_token (parser->lexer);
16408         }
16409       else
16410         {
16411           cp_lexer_consume_token (parser->lexer);
16412           cv_quals |= cv_qualifier;
16413         }
16414     }
16415
16416   return cv_quals;
16417 }
16418
16419 /* Parse an (optional) virt-specifier-seq.
16420
16421    virt-specifier-seq:
16422      virt-specifier virt-specifier-seq [opt]
16423
16424    virt-specifier:
16425      override
16426      final
16427
16428    Returns a bitmask representing the virt-specifiers.  */
16429
16430 static cp_virt_specifiers
16431 cp_parser_virt_specifier_seq_opt (cp_parser* parser)
16432 {
16433   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
16434
16435   while (true)
16436     {
16437       cp_token *token;
16438       cp_virt_specifiers virt_specifier;
16439
16440       /* Peek at the next token.  */
16441       token = cp_lexer_peek_token (parser->lexer);
16442       /* See if it's a virt-specifier-qualifier.  */
16443       if (token->type != CPP_NAME)
16444         break;
16445       if (!strcmp (IDENTIFIER_POINTER(token->u.value), "override"))
16446         {
16447           maybe_warn_cpp0x (CPP0X_OVERRIDE_CONTROLS);
16448           virt_specifier = VIRT_SPEC_OVERRIDE;
16449         }
16450       else if (!strcmp (IDENTIFIER_POINTER(token->u.value), "final"))
16451         {
16452           maybe_warn_cpp0x (CPP0X_OVERRIDE_CONTROLS);
16453           virt_specifier = VIRT_SPEC_FINAL;
16454         }
16455       else if (!strcmp (IDENTIFIER_POINTER(token->u.value), "__final"))
16456         {
16457           virt_specifier = VIRT_SPEC_FINAL;
16458         }
16459       else
16460         break;
16461
16462       if (virt_specifiers & virt_specifier)
16463         {
16464           error_at (token->location, "duplicate virt-specifier");
16465           cp_lexer_purge_token (parser->lexer);
16466         }
16467       else
16468         {
16469           cp_lexer_consume_token (parser->lexer);
16470           virt_specifiers |= virt_specifier;
16471         }
16472     }
16473   return virt_specifiers;
16474 }
16475
16476 /* Used by handling of trailing-return-types and NSDMI, in which 'this'
16477    is in scope even though it isn't real.  */
16478
16479 static void
16480 inject_this_parameter (tree ctype, cp_cv_quals quals)
16481 {
16482   tree this_parm;
16483
16484   if (current_class_ptr)
16485     {
16486       /* We don't clear this between NSDMIs.  Is it already what we want?  */
16487       tree type = TREE_TYPE (TREE_TYPE (current_class_ptr));
16488       if (same_type_ignoring_top_level_qualifiers_p (ctype, type)
16489           && cp_type_quals (type) == quals)
16490         return;
16491     }
16492
16493   this_parm = build_this_parm (ctype, quals);
16494   /* Clear this first to avoid shortcut in cp_build_indirect_ref.  */
16495   current_class_ptr = NULL_TREE;
16496   current_class_ref
16497     = cp_build_indirect_ref (this_parm, RO_NULL, tf_warning_or_error);
16498   current_class_ptr = this_parm;
16499 }
16500
16501 /* Parse a late-specified return type, if any.  This is not a separate
16502    non-terminal, but part of a function declarator, which looks like
16503
16504    -> trailing-type-specifier-seq abstract-declarator(opt)
16505
16506    Returns the type indicated by the type-id.
16507
16508    QUALS is either a bitmask of cv_qualifiers or -1 for a non-member
16509    function.  */
16510
16511 static tree
16512 cp_parser_late_return_type_opt (cp_parser* parser, cp_cv_quals quals)
16513 {
16514   cp_token *token;
16515   tree type;
16516
16517   /* Peek at the next token.  */
16518   token = cp_lexer_peek_token (parser->lexer);
16519   /* A late-specified return type is indicated by an initial '->'. */
16520   if (token->type != CPP_DEREF)
16521     return NULL_TREE;
16522
16523   /* Consume the ->.  */
16524   cp_lexer_consume_token (parser->lexer);
16525
16526   if (quals >= 0)
16527     {
16528       /* DR 1207: 'this' is in scope in the trailing return type.  */
16529       gcc_assert (current_class_ptr == NULL_TREE);
16530       inject_this_parameter (current_class_type, quals);
16531     }
16532
16533   type = cp_parser_trailing_type_id (parser);
16534
16535   if (quals >= 0)
16536     current_class_ptr = current_class_ref = NULL_TREE;
16537
16538   return type;
16539 }
16540
16541 /* Parse a declarator-id.
16542
16543    declarator-id:
16544      id-expression
16545      :: [opt] nested-name-specifier [opt] type-name
16546
16547    In the `id-expression' case, the value returned is as for
16548    cp_parser_id_expression if the id-expression was an unqualified-id.
16549    If the id-expression was a qualified-id, then a SCOPE_REF is
16550    returned.  The first operand is the scope (either a NAMESPACE_DECL
16551    or TREE_TYPE), but the second is still just a representation of an
16552    unqualified-id.  */
16553
16554 static tree
16555 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
16556 {
16557   tree id;
16558   /* The expression must be an id-expression.  Assume that qualified
16559      names are the names of types so that:
16560
16561        template <class T>
16562        int S<T>::R::i = 3;
16563
16564      will work; we must treat `S<T>::R' as the name of a type.
16565      Similarly, assume that qualified names are templates, where
16566      required, so that:
16567
16568        template <class T>
16569        int S<T>::R<T>::i = 3;
16570
16571      will work, too.  */
16572   id = cp_parser_id_expression (parser,
16573                                 /*template_keyword_p=*/false,
16574                                 /*check_dependency_p=*/false,
16575                                 /*template_p=*/NULL,
16576                                 /*declarator_p=*/true,
16577                                 optional_p);
16578   if (id && BASELINK_P (id))
16579     id = BASELINK_FUNCTIONS (id);
16580   return id;
16581 }
16582
16583 /* Parse a type-id.
16584
16585    type-id:
16586      type-specifier-seq abstract-declarator [opt]
16587
16588    Returns the TYPE specified.  */
16589
16590 static tree
16591 cp_parser_type_id_1 (cp_parser* parser, bool is_template_arg,
16592                      bool is_trailing_return)
16593 {
16594   cp_decl_specifier_seq type_specifier_seq;
16595   cp_declarator *abstract_declarator;
16596
16597   /* Parse the type-specifier-seq.  */
16598   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
16599                                 is_trailing_return,
16600                                 &type_specifier_seq);
16601   if (type_specifier_seq.type == error_mark_node)
16602     return error_mark_node;
16603
16604   /* There might or might not be an abstract declarator.  */
16605   cp_parser_parse_tentatively (parser);
16606   /* Look for the declarator.  */
16607   abstract_declarator
16608     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
16609                             /*parenthesized_p=*/NULL,
16610                             /*member_p=*/false);
16611   /* Check to see if there really was a declarator.  */
16612   if (!cp_parser_parse_definitely (parser))
16613     abstract_declarator = NULL;
16614
16615   if (type_specifier_seq.type
16616       && type_uses_auto (type_specifier_seq.type))
16617     {
16618       /* A type-id with type 'auto' is only ok if the abstract declarator
16619          is a function declarator with a late-specified return type.  */
16620       if (abstract_declarator
16621           && abstract_declarator->kind == cdk_function
16622           && abstract_declarator->u.function.late_return_type)
16623         /* OK */;
16624       else
16625         {
16626           error ("invalid use of %<auto%>");
16627           return error_mark_node;
16628         }
16629     }
16630   
16631   return groktypename (&type_specifier_seq, abstract_declarator,
16632                        is_template_arg);
16633 }
16634
16635 static tree cp_parser_type_id (cp_parser *parser)
16636 {
16637   return cp_parser_type_id_1 (parser, false, false);
16638 }
16639
16640 static tree cp_parser_template_type_arg (cp_parser *parser)
16641 {
16642   tree r;
16643   const char *saved_message = parser->type_definition_forbidden_message;
16644   parser->type_definition_forbidden_message
16645     = G_("types may not be defined in template arguments");
16646   r = cp_parser_type_id_1 (parser, true, false);
16647   parser->type_definition_forbidden_message = saved_message;
16648   return r;
16649 }
16650
16651 static tree cp_parser_trailing_type_id (cp_parser *parser)
16652 {
16653   return cp_parser_type_id_1 (parser, false, true);
16654 }
16655
16656 /* Parse a type-specifier-seq.
16657
16658    type-specifier-seq:
16659      type-specifier type-specifier-seq [opt]
16660
16661    GNU extension:
16662
16663    type-specifier-seq:
16664      attributes type-specifier-seq [opt]
16665
16666    If IS_DECLARATION is true, we are at the start of a "condition" or
16667    exception-declaration, so we might be followed by a declarator-id.
16668
16669    If IS_TRAILING_RETURN is true, we are in a trailing-return-type,
16670    i.e. we've just seen "->".
16671
16672    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
16673
16674 static void
16675 cp_parser_type_specifier_seq (cp_parser* parser,
16676                               bool is_declaration,
16677                               bool is_trailing_return,
16678                               cp_decl_specifier_seq *type_specifier_seq)
16679 {
16680   bool seen_type_specifier = false;
16681   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
16682   cp_token *start_token = NULL;
16683
16684   /* Clear the TYPE_SPECIFIER_SEQ.  */
16685   clear_decl_specs (type_specifier_seq);
16686
16687   /* In the context of a trailing return type, enum E { } is an
16688      elaborated-type-specifier followed by a function-body, not an
16689      enum-specifier.  */
16690   if (is_trailing_return)
16691     flags |= CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS;
16692
16693   /* Parse the type-specifiers and attributes.  */
16694   while (true)
16695     {
16696       tree type_specifier;
16697       bool is_cv_qualifier;
16698
16699       /* Check for attributes first.  */
16700       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
16701         {
16702           type_specifier_seq->attributes =
16703             chainon (type_specifier_seq->attributes,
16704                      cp_parser_attributes_opt (parser));
16705           continue;
16706         }
16707
16708       /* record the token of the beginning of the type specifier seq,
16709          for error reporting purposes*/
16710      if (!start_token)
16711        start_token = cp_lexer_peek_token (parser->lexer);
16712
16713       /* Look for the type-specifier.  */
16714       type_specifier = cp_parser_type_specifier (parser,
16715                                                  flags,
16716                                                  type_specifier_seq,
16717                                                  /*is_declaration=*/false,
16718                                                  NULL,
16719                                                  &is_cv_qualifier);
16720       if (!type_specifier)
16721         {
16722           /* If the first type-specifier could not be found, this is not a
16723              type-specifier-seq at all.  */
16724           if (!seen_type_specifier)
16725             {
16726               cp_parser_error (parser, "expected type-specifier");
16727               type_specifier_seq->type = error_mark_node;
16728               return;
16729             }
16730           /* If subsequent type-specifiers could not be found, the
16731              type-specifier-seq is complete.  */
16732           break;
16733         }
16734
16735       seen_type_specifier = true;
16736       /* The standard says that a condition can be:
16737
16738             type-specifier-seq declarator = assignment-expression
16739
16740          However, given:
16741
16742            struct S {};
16743            if (int S = ...)
16744
16745          we should treat the "S" as a declarator, not as a
16746          type-specifier.  The standard doesn't say that explicitly for
16747          type-specifier-seq, but it does say that for
16748          decl-specifier-seq in an ordinary declaration.  Perhaps it
16749          would be clearer just to allow a decl-specifier-seq here, and
16750          then add a semantic restriction that if any decl-specifiers
16751          that are not type-specifiers appear, the program is invalid.  */
16752       if (is_declaration && !is_cv_qualifier)
16753         flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
16754     }
16755
16756   cp_parser_check_decl_spec (type_specifier_seq, start_token->location);
16757 }
16758
16759 /* Parse a parameter-declaration-clause.
16760
16761    parameter-declaration-clause:
16762      parameter-declaration-list [opt] ... [opt]
16763      parameter-declaration-list , ...
16764
16765    Returns a representation for the parameter declarations.  A return
16766    value of NULL indicates a parameter-declaration-clause consisting
16767    only of an ellipsis.  */
16768
16769 static tree
16770 cp_parser_parameter_declaration_clause (cp_parser* parser)
16771 {
16772   tree parameters;
16773   cp_token *token;
16774   bool ellipsis_p;
16775   bool is_error;
16776
16777   /* Peek at the next token.  */
16778   token = cp_lexer_peek_token (parser->lexer);
16779   /* Check for trivial parameter-declaration-clauses.  */
16780   if (token->type == CPP_ELLIPSIS)
16781     {
16782       /* Consume the `...' token.  */
16783       cp_lexer_consume_token (parser->lexer);
16784       return NULL_TREE;
16785     }
16786   else if (token->type == CPP_CLOSE_PAREN)
16787     /* There are no parameters.  */
16788     {
16789 #ifndef NO_IMPLICIT_EXTERN_C
16790       if (in_system_header && current_class_type == NULL
16791           && current_lang_name == lang_name_c)
16792         return NULL_TREE;
16793       else
16794 #endif
16795         return void_list_node;
16796     }
16797   /* Check for `(void)', too, which is a special case.  */
16798   else if (token->keyword == RID_VOID
16799            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
16800                == CPP_CLOSE_PAREN))
16801     {
16802       /* Consume the `void' token.  */
16803       cp_lexer_consume_token (parser->lexer);
16804       /* There are no parameters.  */
16805       return void_list_node;
16806     }
16807
16808   /* Parse the parameter-declaration-list.  */
16809   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
16810   /* If a parse error occurred while parsing the
16811      parameter-declaration-list, then the entire
16812      parameter-declaration-clause is erroneous.  */
16813   if (is_error)
16814     return NULL;
16815
16816   /* Peek at the next token.  */
16817   token = cp_lexer_peek_token (parser->lexer);
16818   /* If it's a `,', the clause should terminate with an ellipsis.  */
16819   if (token->type == CPP_COMMA)
16820     {
16821       /* Consume the `,'.  */
16822       cp_lexer_consume_token (parser->lexer);
16823       /* Expect an ellipsis.  */
16824       ellipsis_p
16825         = (cp_parser_require (parser, CPP_ELLIPSIS, RT_ELLIPSIS) != NULL);
16826     }
16827   /* It might also be `...' if the optional trailing `,' was
16828      omitted.  */
16829   else if (token->type == CPP_ELLIPSIS)
16830     {
16831       /* Consume the `...' token.  */
16832       cp_lexer_consume_token (parser->lexer);
16833       /* And remember that we saw it.  */
16834       ellipsis_p = true;
16835     }
16836   else
16837     ellipsis_p = false;
16838
16839   /* Finish the parameter list.  */
16840   if (!ellipsis_p)
16841     parameters = chainon (parameters, void_list_node);
16842
16843   return parameters;
16844 }
16845
16846 /* Parse a parameter-declaration-list.
16847
16848    parameter-declaration-list:
16849      parameter-declaration
16850      parameter-declaration-list , parameter-declaration
16851
16852    Returns a representation of the parameter-declaration-list, as for
16853    cp_parser_parameter_declaration_clause.  However, the
16854    `void_list_node' is never appended to the list.  Upon return,
16855    *IS_ERROR will be true iff an error occurred.  */
16856
16857 static tree
16858 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
16859 {
16860   tree parameters = NULL_TREE;
16861   tree *tail = &parameters; 
16862   bool saved_in_unbraced_linkage_specification_p;
16863   int index = 0;
16864
16865   /* Assume all will go well.  */
16866   *is_error = false;
16867   /* The special considerations that apply to a function within an
16868      unbraced linkage specifications do not apply to the parameters
16869      to the function.  */
16870   saved_in_unbraced_linkage_specification_p 
16871     = parser->in_unbraced_linkage_specification_p;
16872   parser->in_unbraced_linkage_specification_p = false;
16873
16874   /* Look for more parameters.  */
16875   while (true)
16876     {
16877       cp_parameter_declarator *parameter;
16878       tree decl = error_mark_node;
16879       bool parenthesized_p = false;
16880       /* Parse the parameter.  */
16881       parameter
16882         = cp_parser_parameter_declaration (parser,
16883                                            /*template_parm_p=*/false,
16884                                            &parenthesized_p);
16885
16886       /* We don't know yet if the enclosing context is deprecated, so wait
16887          and warn in grokparms if appropriate.  */
16888       deprecated_state = DEPRECATED_SUPPRESS;
16889
16890       if (parameter)
16891         decl = grokdeclarator (parameter->declarator,
16892                                &parameter->decl_specifiers,
16893                                PARM,
16894                                parameter->default_argument != NULL_TREE,
16895                                &parameter->decl_specifiers.attributes);
16896
16897       deprecated_state = DEPRECATED_NORMAL;
16898
16899       /* If a parse error occurred parsing the parameter declaration,
16900          then the entire parameter-declaration-list is erroneous.  */
16901       if (decl == error_mark_node)
16902         {
16903           *is_error = true;
16904           parameters = error_mark_node;
16905           break;
16906         }
16907
16908       if (parameter->decl_specifiers.attributes)
16909         cplus_decl_attributes (&decl,
16910                                parameter->decl_specifiers.attributes,
16911                                0);
16912       if (DECL_NAME (decl))
16913         decl = pushdecl (decl);
16914
16915       if (decl != error_mark_node)
16916         {
16917           retrofit_lang_decl (decl);
16918           DECL_PARM_INDEX (decl) = ++index;
16919           DECL_PARM_LEVEL (decl) = function_parm_depth ();
16920         }
16921
16922       /* Add the new parameter to the list.  */
16923       *tail = build_tree_list (parameter->default_argument, decl);
16924       tail = &TREE_CHAIN (*tail);
16925
16926       /* Peek at the next token.  */
16927       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
16928           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
16929           /* These are for Objective-C++ */
16930           || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
16931           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
16932         /* The parameter-declaration-list is complete.  */
16933         break;
16934       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
16935         {
16936           cp_token *token;
16937
16938           /* Peek at the next token.  */
16939           token = cp_lexer_peek_nth_token (parser->lexer, 2);
16940           /* If it's an ellipsis, then the list is complete.  */
16941           if (token->type == CPP_ELLIPSIS)
16942             break;
16943           /* Otherwise, there must be more parameters.  Consume the
16944              `,'.  */
16945           cp_lexer_consume_token (parser->lexer);
16946           /* When parsing something like:
16947
16948                 int i(float f, double d)
16949
16950              we can tell after seeing the declaration for "f" that we
16951              are not looking at an initialization of a variable "i",
16952              but rather at the declaration of a function "i".
16953
16954              Due to the fact that the parsing of template arguments
16955              (as specified to a template-id) requires backtracking we
16956              cannot use this technique when inside a template argument
16957              list.  */
16958           if (!parser->in_template_argument_list_p
16959               && !parser->in_type_id_in_expr_p
16960               && cp_parser_uncommitted_to_tentative_parse_p (parser)
16961               /* However, a parameter-declaration of the form
16962                  "foat(f)" (which is a valid declaration of a
16963                  parameter "f") can also be interpreted as an
16964                  expression (the conversion of "f" to "float").  */
16965               && !parenthesized_p)
16966             cp_parser_commit_to_tentative_parse (parser);
16967         }
16968       else
16969         {
16970           cp_parser_error (parser, "expected %<,%> or %<...%>");
16971           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
16972             cp_parser_skip_to_closing_parenthesis (parser,
16973                                                    /*recovering=*/true,
16974                                                    /*or_comma=*/false,
16975                                                    /*consume_paren=*/false);
16976           break;
16977         }
16978     }
16979
16980   parser->in_unbraced_linkage_specification_p
16981     = saved_in_unbraced_linkage_specification_p;
16982
16983   return parameters;
16984 }
16985
16986 /* Parse a parameter declaration.
16987
16988    parameter-declaration:
16989      decl-specifier-seq ... [opt] declarator
16990      decl-specifier-seq declarator = assignment-expression
16991      decl-specifier-seq ... [opt] abstract-declarator [opt]
16992      decl-specifier-seq abstract-declarator [opt] = assignment-expression
16993
16994    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
16995    declares a template parameter.  (In that case, a non-nested `>'
16996    token encountered during the parsing of the assignment-expression
16997    is not interpreted as a greater-than operator.)
16998
16999    Returns a representation of the parameter, or NULL if an error
17000    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
17001    true iff the declarator is of the form "(p)".  */
17002
17003 static cp_parameter_declarator *
17004 cp_parser_parameter_declaration (cp_parser *parser,
17005                                  bool template_parm_p,
17006                                  bool *parenthesized_p)
17007 {
17008   int declares_class_or_enum;
17009   cp_decl_specifier_seq decl_specifiers;
17010   cp_declarator *declarator;
17011   tree default_argument;
17012   cp_token *token = NULL, *declarator_token_start = NULL;
17013   const char *saved_message;
17014
17015   /* In a template parameter, `>' is not an operator.
17016
17017      [temp.param]
17018
17019      When parsing a default template-argument for a non-type
17020      template-parameter, the first non-nested `>' is taken as the end
17021      of the template parameter-list rather than a greater-than
17022      operator.  */
17023
17024   /* Type definitions may not appear in parameter types.  */
17025   saved_message = parser->type_definition_forbidden_message;
17026   parser->type_definition_forbidden_message
17027     = G_("types may not be defined in parameter types");
17028
17029   /* Parse the declaration-specifiers.  */
17030   cp_parser_decl_specifier_seq (parser,
17031                                 CP_PARSER_FLAGS_NONE,
17032                                 &decl_specifiers,
17033                                 &declares_class_or_enum);
17034
17035   /* Complain about missing 'typename' or other invalid type names.  */
17036   if (!decl_specifiers.any_type_specifiers_p)
17037     cp_parser_parse_and_diagnose_invalid_type_name (parser);
17038
17039   /* If an error occurred, there's no reason to attempt to parse the
17040      rest of the declaration.  */
17041   if (cp_parser_error_occurred (parser))
17042     {
17043       parser->type_definition_forbidden_message = saved_message;
17044       return NULL;
17045     }
17046
17047   /* Peek at the next token.  */
17048   token = cp_lexer_peek_token (parser->lexer);
17049
17050   /* If the next token is a `)', `,', `=', `>', or `...', then there
17051      is no declarator. However, when variadic templates are enabled,
17052      there may be a declarator following `...'.  */
17053   if (token->type == CPP_CLOSE_PAREN
17054       || token->type == CPP_COMMA
17055       || token->type == CPP_EQ
17056       || token->type == CPP_GREATER)
17057     {
17058       declarator = NULL;
17059       if (parenthesized_p)
17060         *parenthesized_p = false;
17061     }
17062   /* Otherwise, there should be a declarator.  */
17063   else
17064     {
17065       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
17066       parser->default_arg_ok_p = false;
17067
17068       /* After seeing a decl-specifier-seq, if the next token is not a
17069          "(", there is no possibility that the code is a valid
17070          expression.  Therefore, if parsing tentatively, we commit at
17071          this point.  */
17072       if (!parser->in_template_argument_list_p
17073           /* In an expression context, having seen:
17074
17075                (int((char ...
17076
17077              we cannot be sure whether we are looking at a
17078              function-type (taking a "char" as a parameter) or a cast
17079              of some object of type "char" to "int".  */
17080           && !parser->in_type_id_in_expr_p
17081           && cp_parser_uncommitted_to_tentative_parse_p (parser)
17082           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
17083           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
17084         cp_parser_commit_to_tentative_parse (parser);
17085       /* Parse the declarator.  */
17086       declarator_token_start = token;
17087       declarator = cp_parser_declarator (parser,
17088                                          CP_PARSER_DECLARATOR_EITHER,
17089                                          /*ctor_dtor_or_conv_p=*/NULL,
17090                                          parenthesized_p,
17091                                          /*member_p=*/false);
17092       parser->default_arg_ok_p = saved_default_arg_ok_p;
17093       /* After the declarator, allow more attributes.  */
17094       decl_specifiers.attributes
17095         = chainon (decl_specifiers.attributes,
17096                    cp_parser_attributes_opt (parser));
17097     }
17098
17099   /* If the next token is an ellipsis, and we have not seen a
17100      declarator name, and the type of the declarator contains parameter
17101      packs but it is not a TYPE_PACK_EXPANSION, then we actually have
17102      a parameter pack expansion expression. Otherwise, leave the
17103      ellipsis for a C-style variadic function. */
17104   token = cp_lexer_peek_token (parser->lexer);
17105   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
17106     {
17107       tree type = decl_specifiers.type;
17108
17109       if (type && DECL_P (type))
17110         type = TREE_TYPE (type);
17111
17112       if (type
17113           && TREE_CODE (type) != TYPE_PACK_EXPANSION
17114           && declarator_can_be_parameter_pack (declarator)
17115           && (!declarator || !declarator->parameter_pack_p)
17116           && uses_parameter_packs (type))
17117         {
17118           /* Consume the `...'. */
17119           cp_lexer_consume_token (parser->lexer);
17120           maybe_warn_variadic_templates ();
17121           
17122           /* Build a pack expansion type */
17123           if (declarator)
17124             declarator->parameter_pack_p = true;
17125           else
17126             decl_specifiers.type = make_pack_expansion (type);
17127         }
17128     }
17129
17130   /* The restriction on defining new types applies only to the type
17131      of the parameter, not to the default argument.  */
17132   parser->type_definition_forbidden_message = saved_message;
17133
17134   /* If the next token is `=', then process a default argument.  */
17135   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
17136     {
17137       /* If we are defining a class, then the tokens that make up the
17138          default argument must be saved and processed later.  */
17139       if (!template_parm_p && at_class_scope_p ()
17140           && TYPE_BEING_DEFINED (current_class_type)
17141           && !LAMBDA_TYPE_P (current_class_type))
17142         {
17143           unsigned depth = 0;
17144           int maybe_template_id = 0;
17145           cp_token *first_token;
17146           cp_token *token;
17147
17148           /* Add tokens until we have processed the entire default
17149              argument.  We add the range [first_token, token).  */
17150           first_token = cp_lexer_peek_token (parser->lexer);
17151           while (true)
17152             {
17153               bool done = false;
17154
17155               /* Peek at the next token.  */
17156               token = cp_lexer_peek_token (parser->lexer);
17157               /* What we do depends on what token we have.  */
17158               switch (token->type)
17159                 {
17160                   /* In valid code, a default argument must be
17161                      immediately followed by a `,' `)', or `...'.  */
17162                 case CPP_COMMA:
17163                   if (depth == 0 && maybe_template_id)
17164                     {
17165                       /* If we've seen a '<', we might be in a
17166                          template-argument-list.  Until Core issue 325 is
17167                          resolved, we don't know how this situation ought
17168                          to be handled, so try to DTRT.  We check whether
17169                          what comes after the comma is a valid parameter
17170                          declaration list.  If it is, then the comma ends
17171                          the default argument; otherwise the default
17172                          argument continues.  */
17173                       bool error = false;
17174                       tree t;
17175
17176                       /* Set ITALP so cp_parser_parameter_declaration_list
17177                          doesn't decide to commit to this parse.  */
17178                       bool saved_italp = parser->in_template_argument_list_p;
17179                       parser->in_template_argument_list_p = true;
17180
17181                       cp_parser_parse_tentatively (parser);
17182                       cp_lexer_consume_token (parser->lexer);
17183                       begin_scope (sk_function_parms, NULL_TREE);
17184                       cp_parser_parameter_declaration_list (parser, &error);
17185                       for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
17186                         pop_binding (DECL_NAME (t), t);
17187                       leave_scope ();
17188                       if (!cp_parser_error_occurred (parser) && !error)
17189                         done = true;
17190                       cp_parser_abort_tentative_parse (parser);
17191
17192                       parser->in_template_argument_list_p = saved_italp;
17193                       break;
17194                     }
17195                 case CPP_CLOSE_PAREN:
17196                 case CPP_ELLIPSIS:
17197                   /* If we run into a non-nested `;', `}', or `]',
17198                      then the code is invalid -- but the default
17199                      argument is certainly over.  */
17200                 case CPP_SEMICOLON:
17201                 case CPP_CLOSE_BRACE:
17202                 case CPP_CLOSE_SQUARE:
17203                   if (depth == 0)
17204                     done = true;
17205                   /* Update DEPTH, if necessary.  */
17206                   else if (token->type == CPP_CLOSE_PAREN
17207                            || token->type == CPP_CLOSE_BRACE
17208                            || token->type == CPP_CLOSE_SQUARE)
17209                     --depth;
17210                   break;
17211
17212                 case CPP_OPEN_PAREN:
17213                 case CPP_OPEN_SQUARE:
17214                 case CPP_OPEN_BRACE:
17215                   ++depth;
17216                   break;
17217
17218                 case CPP_LESS:
17219                   if (depth == 0)
17220                     /* This might be the comparison operator, or it might
17221                        start a template argument list.  */
17222                     ++maybe_template_id;
17223                   break;
17224
17225                 case CPP_RSHIFT:
17226                   if (cxx_dialect == cxx98)
17227                     break;
17228                   /* Fall through for C++0x, which treats the `>>'
17229                      operator like two `>' tokens in certain
17230                      cases.  */
17231
17232                 case CPP_GREATER:
17233                   if (depth == 0)
17234                     {
17235                       /* This might be an operator, or it might close a
17236                          template argument list.  But if a previous '<'
17237                          started a template argument list, this will have
17238                          closed it, so we can't be in one anymore.  */
17239                       maybe_template_id -= 1 + (token->type == CPP_RSHIFT);
17240                       if (maybe_template_id < 0)
17241                         maybe_template_id = 0;
17242                     }
17243                   break;
17244
17245                   /* If we run out of tokens, issue an error message.  */
17246                 case CPP_EOF:
17247                 case CPP_PRAGMA_EOL:
17248                   error_at (token->location, "file ends in default argument");
17249                   done = true;
17250                   break;
17251
17252                 case CPP_NAME:
17253                 case CPP_SCOPE:
17254                   /* In these cases, we should look for template-ids.
17255                      For example, if the default argument is
17256                      `X<int, double>()', we need to do name lookup to
17257                      figure out whether or not `X' is a template; if
17258                      so, the `,' does not end the default argument.
17259
17260                      That is not yet done.  */
17261                   break;
17262
17263                 default:
17264                   break;
17265                 }
17266
17267               /* If we've reached the end, stop.  */
17268               if (done)
17269                 break;
17270
17271               /* Add the token to the token block.  */
17272               token = cp_lexer_consume_token (parser->lexer);
17273             }
17274
17275           /* Create a DEFAULT_ARG to represent the unparsed default
17276              argument.  */
17277           default_argument = make_node (DEFAULT_ARG);
17278           DEFARG_TOKENS (default_argument)
17279             = cp_token_cache_new (first_token, token);
17280           DEFARG_INSTANTIATIONS (default_argument) = NULL;
17281         }
17282       /* Outside of a class definition, we can just parse the
17283          assignment-expression.  */
17284       else
17285         {
17286           token = cp_lexer_peek_token (parser->lexer);
17287           default_argument 
17288             = cp_parser_default_argument (parser, template_parm_p);
17289         }
17290
17291       if (!parser->default_arg_ok_p)
17292         {
17293           if (flag_permissive)
17294             warning (0, "deprecated use of default argument for parameter of non-function");
17295           else
17296             {
17297               error_at (token->location,
17298                         "default arguments are only "
17299                         "permitted for function parameters");
17300               default_argument = NULL_TREE;
17301             }
17302         }
17303       else if ((declarator && declarator->parameter_pack_p)
17304                || (decl_specifiers.type
17305                    && PACK_EXPANSION_P (decl_specifiers.type)))
17306         {
17307           /* Find the name of the parameter pack.  */     
17308           cp_declarator *id_declarator = declarator;
17309           while (id_declarator && id_declarator->kind != cdk_id)
17310             id_declarator = id_declarator->declarator;
17311           
17312           if (id_declarator && id_declarator->kind == cdk_id)
17313             error_at (declarator_token_start->location,
17314                       template_parm_p
17315                       ? G_("template parameter pack %qD "
17316                            "cannot have a default argument")
17317                       : G_("parameter pack %qD cannot have "
17318                            "a default argument"),
17319                       id_declarator->u.id.unqualified_name);
17320           else
17321             error_at (declarator_token_start->location,
17322                       template_parm_p
17323                       ? G_("template parameter pack cannot have "
17324                            "a default argument")
17325                       : G_("parameter pack cannot have a "
17326                            "default argument"));
17327
17328           default_argument = NULL_TREE;
17329         }
17330     }
17331   else
17332     default_argument = NULL_TREE;
17333
17334   return make_parameter_declarator (&decl_specifiers,
17335                                     declarator,
17336                                     default_argument);
17337 }
17338
17339 /* Parse a default argument and return it.
17340
17341    TEMPLATE_PARM_P is true if this is a default argument for a
17342    non-type template parameter.  */
17343 static tree
17344 cp_parser_default_argument (cp_parser *parser, bool template_parm_p)
17345 {
17346   tree default_argument = NULL_TREE;
17347   bool saved_greater_than_is_operator_p;
17348   bool saved_local_variables_forbidden_p;
17349   bool non_constant_p, is_direct_init;
17350
17351   /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
17352      set correctly.  */
17353   saved_greater_than_is_operator_p = parser->greater_than_is_operator_p;
17354   parser->greater_than_is_operator_p = !template_parm_p;
17355   /* Local variable names (and the `this' keyword) may not
17356      appear in a default argument.  */
17357   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
17358   parser->local_variables_forbidden_p = true;
17359   /* Parse the assignment-expression.  */
17360   if (template_parm_p)
17361     push_deferring_access_checks (dk_no_deferred);
17362   default_argument
17363     = cp_parser_initializer (parser, &is_direct_init, &non_constant_p);
17364   if (BRACE_ENCLOSED_INITIALIZER_P (default_argument))
17365     maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
17366   if (template_parm_p)
17367     pop_deferring_access_checks ();
17368   parser->greater_than_is_operator_p = saved_greater_than_is_operator_p;
17369   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
17370
17371   return default_argument;
17372 }
17373
17374 /* Parse a function-body.
17375
17376    function-body:
17377      compound_statement  */
17378
17379 static void
17380 cp_parser_function_body (cp_parser *parser)
17381 {
17382   cp_parser_compound_statement (parser, NULL, false, true);
17383 }
17384
17385 /* Parse a ctor-initializer-opt followed by a function-body.  Return
17386    true if a ctor-initializer was present.  */
17387
17388 static bool
17389 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
17390 {
17391   tree body, list;
17392   bool ctor_initializer_p;
17393   const bool check_body_p =
17394      DECL_CONSTRUCTOR_P (current_function_decl)
17395      && DECL_DECLARED_CONSTEXPR_P (current_function_decl);
17396   tree last = NULL;
17397
17398   /* Begin the function body.  */
17399   body = begin_function_body ();
17400   /* Parse the optional ctor-initializer.  */
17401   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
17402
17403   /* If we're parsing a constexpr constructor definition, we need
17404      to check that the constructor body is indeed empty.  However,
17405      before we get to cp_parser_function_body lot of junk has been
17406      generated, so we can't just check that we have an empty block.
17407      Rather we take a snapshot of the outermost block, and check whether
17408      cp_parser_function_body changed its state.  */
17409   if (check_body_p)
17410     {
17411       list = body;
17412       if (TREE_CODE (list) == BIND_EXPR)
17413         list = BIND_EXPR_BODY (list);
17414       if (TREE_CODE (list) == STATEMENT_LIST
17415           && STATEMENT_LIST_TAIL (list) != NULL)
17416         last = STATEMENT_LIST_TAIL (list)->stmt;
17417     }
17418   /* Parse the function-body.  */
17419   cp_parser_function_body (parser);
17420   if (check_body_p)
17421     check_constexpr_ctor_body (last, list);
17422   /* Finish the function body.  */
17423   finish_function_body (body);
17424
17425   return ctor_initializer_p;
17426 }
17427
17428 /* Parse an initializer.
17429
17430    initializer:
17431      = initializer-clause
17432      ( expression-list )
17433
17434    Returns an expression representing the initializer.  If no
17435    initializer is present, NULL_TREE is returned.
17436
17437    *IS_DIRECT_INIT is set to FALSE if the `= initializer-clause'
17438    production is used, and TRUE otherwise.  *IS_DIRECT_INIT is
17439    set to TRUE if there is no initializer present.  If there is an
17440    initializer, and it is not a constant-expression, *NON_CONSTANT_P
17441    is set to true; otherwise it is set to false.  */
17442
17443 static tree
17444 cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
17445                        bool* non_constant_p)
17446 {
17447   cp_token *token;
17448   tree init;
17449
17450   /* Peek at the next token.  */
17451   token = cp_lexer_peek_token (parser->lexer);
17452
17453   /* Let our caller know whether or not this initializer was
17454      parenthesized.  */
17455   *is_direct_init = (token->type != CPP_EQ);
17456   /* Assume that the initializer is constant.  */
17457   *non_constant_p = false;
17458
17459   if (token->type == CPP_EQ)
17460     {
17461       /* Consume the `='.  */
17462       cp_lexer_consume_token (parser->lexer);
17463       /* Parse the initializer-clause.  */
17464       init = cp_parser_initializer_clause (parser, non_constant_p);
17465     }
17466   else if (token->type == CPP_OPEN_PAREN)
17467     {
17468       VEC(tree,gc) *vec;
17469       vec = cp_parser_parenthesized_expression_list (parser, non_attr,
17470                                                      /*cast_p=*/false,
17471                                                      /*allow_expansion_p=*/true,
17472                                                      non_constant_p);
17473       if (vec == NULL)
17474         return error_mark_node;
17475       init = build_tree_list_vec (vec);
17476       release_tree_vector (vec);
17477     }
17478   else if (token->type == CPP_OPEN_BRACE)
17479     {
17480       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
17481       init = cp_parser_braced_list (parser, non_constant_p);
17482       CONSTRUCTOR_IS_DIRECT_INIT (init) = 1;
17483     }
17484   else
17485     {
17486       /* Anything else is an error.  */
17487       cp_parser_error (parser, "expected initializer");
17488       init = error_mark_node;
17489     }
17490
17491   return init;
17492 }
17493
17494 /* Parse an initializer-clause.
17495
17496    initializer-clause:
17497      assignment-expression
17498      braced-init-list
17499
17500    Returns an expression representing the initializer.
17501
17502    If the `assignment-expression' production is used the value
17503    returned is simply a representation for the expression.
17504
17505    Otherwise, calls cp_parser_braced_list.  */
17506
17507 static tree
17508 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
17509 {
17510   tree initializer;
17511
17512   /* Assume the expression is constant.  */
17513   *non_constant_p = false;
17514
17515   /* If it is not a `{', then we are looking at an
17516      assignment-expression.  */
17517   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
17518     {
17519       initializer
17520         = cp_parser_constant_expression (parser,
17521                                         /*allow_non_constant_p=*/true,
17522                                         non_constant_p);
17523     }
17524   else
17525     initializer = cp_parser_braced_list (parser, non_constant_p);
17526
17527   return initializer;
17528 }
17529
17530 /* Parse a brace-enclosed initializer list.
17531
17532    braced-init-list:
17533      { initializer-list , [opt] }
17534      { }
17535
17536    Returns a CONSTRUCTOR.  The CONSTRUCTOR_ELTS will be
17537    the elements of the initializer-list (or NULL, if the last
17538    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
17539    NULL_TREE.  There is no way to detect whether or not the optional
17540    trailing `,' was provided.  NON_CONSTANT_P is as for
17541    cp_parser_initializer.  */     
17542
17543 static tree
17544 cp_parser_braced_list (cp_parser* parser, bool* non_constant_p)
17545 {
17546   tree initializer;
17547
17548   /* Consume the `{' token.  */
17549   cp_lexer_consume_token (parser->lexer);
17550   /* Create a CONSTRUCTOR to represent the braced-initializer.  */
17551   initializer = make_node (CONSTRUCTOR);
17552   /* If it's not a `}', then there is a non-trivial initializer.  */
17553   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
17554     {
17555       /* Parse the initializer list.  */
17556       CONSTRUCTOR_ELTS (initializer)
17557         = cp_parser_initializer_list (parser, non_constant_p);
17558       /* A trailing `,' token is allowed.  */
17559       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
17560         cp_lexer_consume_token (parser->lexer);
17561     }
17562   /* Now, there should be a trailing `}'.  */
17563   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
17564   TREE_TYPE (initializer) = init_list_type_node;
17565   return initializer;
17566 }
17567
17568 /* Parse an initializer-list.
17569
17570    initializer-list:
17571      initializer-clause ... [opt]
17572      initializer-list , initializer-clause ... [opt]
17573
17574    GNU Extension:
17575
17576    initializer-list:
17577      designation initializer-clause ...[opt]
17578      initializer-list , designation initializer-clause ...[opt]
17579
17580    designation:
17581      . identifier =
17582      identifier :
17583      [ constant-expression ] =
17584
17585    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
17586    for the initializer.  If the INDEX of the elt is non-NULL, it is the
17587    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
17588    as for cp_parser_initializer.  */
17589
17590 static VEC(constructor_elt,gc) *
17591 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
17592 {
17593   VEC(constructor_elt,gc) *v = NULL;
17594
17595   /* Assume all of the expressions are constant.  */
17596   *non_constant_p = false;
17597
17598   /* Parse the rest of the list.  */
17599   while (true)
17600     {
17601       cp_token *token;
17602       tree designator;
17603       tree initializer;
17604       bool clause_non_constant_p;
17605
17606       /* If the next token is an identifier and the following one is a
17607          colon, we are looking at the GNU designated-initializer
17608          syntax.  */
17609       if (cp_parser_allow_gnu_extensions_p (parser)
17610           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
17611           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
17612         {
17613           /* Warn the user that they are using an extension.  */
17614           pedwarn (input_location, OPT_pedantic, 
17615                    "ISO C++ does not allow designated initializers");
17616           /* Consume the identifier.  */
17617           designator = cp_lexer_consume_token (parser->lexer)->u.value;
17618           /* Consume the `:'.  */
17619           cp_lexer_consume_token (parser->lexer);
17620         }
17621       /* Also handle the C99 syntax, '. id ='.  */
17622       else if (cp_parser_allow_gnu_extensions_p (parser)
17623                && cp_lexer_next_token_is (parser->lexer, CPP_DOT)
17624                && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME
17625                && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_EQ)
17626         {
17627           /* Warn the user that they are using an extension.  */
17628           pedwarn (input_location, OPT_pedantic,
17629                    "ISO C++ does not allow C99 designated initializers");
17630           /* Consume the `.'.  */
17631           cp_lexer_consume_token (parser->lexer);
17632           /* Consume the identifier.  */
17633           designator = cp_lexer_consume_token (parser->lexer)->u.value;
17634           /* Consume the `='.  */
17635           cp_lexer_consume_token (parser->lexer);
17636         }
17637       /* Also handle C99 array designators, '[ const ] ='.  */
17638       else if (cp_parser_allow_gnu_extensions_p (parser)
17639                && !c_dialect_objc ()
17640                && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
17641         {
17642           /* In C++11, [ could start a lambda-introducer.  */
17643           cp_parser_parse_tentatively (parser);
17644           cp_lexer_consume_token (parser->lexer);
17645           designator = cp_parser_constant_expression (parser, false, NULL);
17646           cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
17647           cp_parser_require (parser, CPP_EQ, RT_EQ);
17648           cp_parser_parse_definitely (parser);
17649         }
17650       else
17651         designator = NULL_TREE;
17652
17653       /* Parse the initializer.  */
17654       initializer = cp_parser_initializer_clause (parser,
17655                                                   &clause_non_constant_p);
17656       /* If any clause is non-constant, so is the entire initializer.  */
17657       if (clause_non_constant_p)
17658         *non_constant_p = true;
17659
17660       /* If we have an ellipsis, this is an initializer pack
17661          expansion.  */
17662       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
17663         {
17664           /* Consume the `...'.  */
17665           cp_lexer_consume_token (parser->lexer);
17666
17667           /* Turn the initializer into an initializer expansion.  */
17668           initializer = make_pack_expansion (initializer);
17669         }
17670
17671       /* Add it to the vector.  */
17672       CONSTRUCTOR_APPEND_ELT (v, designator, initializer);
17673
17674       /* If the next token is not a comma, we have reached the end of
17675          the list.  */
17676       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
17677         break;
17678
17679       /* Peek at the next token.  */
17680       token = cp_lexer_peek_nth_token (parser->lexer, 2);
17681       /* If the next token is a `}', then we're still done.  An
17682          initializer-clause can have a trailing `,' after the
17683          initializer-list and before the closing `}'.  */
17684       if (token->type == CPP_CLOSE_BRACE)
17685         break;
17686
17687       /* Consume the `,' token.  */
17688       cp_lexer_consume_token (parser->lexer);
17689     }
17690
17691   return v;
17692 }
17693
17694 /* Classes [gram.class] */
17695
17696 /* Parse a class-name.
17697
17698    class-name:
17699      identifier
17700      template-id
17701
17702    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
17703    to indicate that names looked up in dependent types should be
17704    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
17705    keyword has been used to indicate that the name that appears next
17706    is a template.  TAG_TYPE indicates the explicit tag given before
17707    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
17708    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
17709    is the class being defined in a class-head.
17710
17711    Returns the TYPE_DECL representing the class.  */
17712
17713 static tree
17714 cp_parser_class_name (cp_parser *parser,
17715                       bool typename_keyword_p,
17716                       bool template_keyword_p,
17717                       enum tag_types tag_type,
17718                       bool check_dependency_p,
17719                       bool class_head_p,
17720                       bool is_declaration)
17721 {
17722   tree decl;
17723   tree scope;
17724   bool typename_p;
17725   cp_token *token;
17726   tree identifier = NULL_TREE;
17727
17728   /* All class-names start with an identifier.  */
17729   token = cp_lexer_peek_token (parser->lexer);
17730   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
17731     {
17732       cp_parser_error (parser, "expected class-name");
17733       return error_mark_node;
17734     }
17735
17736   /* PARSER->SCOPE can be cleared when parsing the template-arguments
17737      to a template-id, so we save it here.  */
17738   scope = parser->scope;
17739   if (scope == error_mark_node)
17740     return error_mark_node;
17741
17742   /* Any name names a type if we're following the `typename' keyword
17743      in a qualified name where the enclosing scope is type-dependent.  */
17744   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
17745                 && dependent_type_p (scope));
17746   /* Handle the common case (an identifier, but not a template-id)
17747      efficiently.  */
17748   if (token->type == CPP_NAME
17749       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
17750     {
17751       cp_token *identifier_token;
17752       bool ambiguous_p;
17753
17754       /* Look for the identifier.  */
17755       identifier_token = cp_lexer_peek_token (parser->lexer);
17756       ambiguous_p = identifier_token->ambiguous_p;
17757       identifier = cp_parser_identifier (parser);
17758       /* If the next token isn't an identifier, we are certainly not
17759          looking at a class-name.  */
17760       if (identifier == error_mark_node)
17761         decl = error_mark_node;
17762       /* If we know this is a type-name, there's no need to look it
17763          up.  */
17764       else if (typename_p)
17765         decl = identifier;
17766       else
17767         {
17768           tree ambiguous_decls;
17769           /* If we already know that this lookup is ambiguous, then
17770              we've already issued an error message; there's no reason
17771              to check again.  */
17772           if (ambiguous_p)
17773             {
17774               cp_parser_simulate_error (parser);
17775               return error_mark_node;
17776             }
17777           /* If the next token is a `::', then the name must be a type
17778              name.
17779
17780              [basic.lookup.qual]
17781
17782              During the lookup for a name preceding the :: scope
17783              resolution operator, object, function, and enumerator
17784              names are ignored.  */
17785           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
17786             tag_type = typename_type;
17787           /* Look up the name.  */
17788           decl = cp_parser_lookup_name (parser, identifier,
17789                                         tag_type,
17790                                         /*is_template=*/false,
17791                                         /*is_namespace=*/false,
17792                                         check_dependency_p,
17793                                         &ambiguous_decls,
17794                                         identifier_token->location);
17795           if (ambiguous_decls)
17796             {
17797               if (cp_parser_parsing_tentatively (parser))
17798                 cp_parser_simulate_error (parser);
17799               return error_mark_node;
17800             }
17801         }
17802     }
17803   else
17804     {
17805       /* Try a template-id.  */
17806       decl = cp_parser_template_id (parser, template_keyword_p,
17807                                     check_dependency_p,
17808                                     is_declaration);
17809       if (decl == error_mark_node)
17810         return error_mark_node;
17811     }
17812
17813   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
17814
17815   /* If this is a typename, create a TYPENAME_TYPE.  */
17816   if (typename_p && decl != error_mark_node)
17817     {
17818       decl = make_typename_type (scope, decl, typename_type,
17819                                  /*complain=*/tf_error);
17820       if (decl != error_mark_node)
17821         decl = TYPE_NAME (decl);
17822     }
17823
17824   /* Check to see that it is really the name of a class.  */
17825   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
17826       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
17827       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
17828     /* Situations like this:
17829
17830          template <typename T> struct A {
17831            typename T::template X<int>::I i;
17832          };
17833
17834        are problematic.  Is `T::template X<int>' a class-name?  The
17835        standard does not seem to be definitive, but there is no other
17836        valid interpretation of the following `::'.  Therefore, those
17837        names are considered class-names.  */
17838     {
17839       decl = make_typename_type (scope, decl, tag_type, tf_error);
17840       if (decl != error_mark_node)
17841         decl = TYPE_NAME (decl);
17842     }
17843   else if (TREE_CODE (decl) != TYPE_DECL
17844            || TREE_TYPE (decl) == error_mark_node
17845            || !MAYBE_CLASS_TYPE_P (TREE_TYPE (decl))
17846            /* In Objective-C 2.0, a classname followed by '.' starts a
17847               dot-syntax expression, and it's not a type-name.  */
17848            || (c_dialect_objc ()
17849                && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT 
17850                && objc_is_class_name (decl)))
17851     decl = error_mark_node;
17852
17853   if (decl == error_mark_node)
17854     cp_parser_error (parser, "expected class-name");
17855   else if (identifier && !parser->scope)
17856     maybe_note_name_used_in_class (identifier, decl);
17857
17858   return decl;
17859 }
17860
17861 /* Parse a class-specifier.
17862
17863    class-specifier:
17864      class-head { member-specification [opt] }
17865
17866    Returns the TREE_TYPE representing the class.  */
17867
17868 static tree
17869 cp_parser_class_specifier_1 (cp_parser* parser)
17870 {
17871   tree type;
17872   tree attributes = NULL_TREE;
17873   bool nested_name_specifier_p;
17874   unsigned saved_num_template_parameter_lists;
17875   bool saved_in_function_body;
17876   unsigned char in_statement;
17877   bool in_switch_statement_p;
17878   bool saved_in_unbraced_linkage_specification_p;
17879   tree old_scope = NULL_TREE;
17880   tree scope = NULL_TREE;
17881   tree bases;
17882   cp_token *closing_brace;
17883
17884   push_deferring_access_checks (dk_no_deferred);
17885
17886   /* Parse the class-head.  */
17887   type = cp_parser_class_head (parser,
17888                                &nested_name_specifier_p,
17889                                &attributes,
17890                                &bases);
17891   /* If the class-head was a semantic disaster, skip the entire body
17892      of the class.  */
17893   if (!type)
17894     {
17895       cp_parser_skip_to_end_of_block_or_statement (parser);
17896       pop_deferring_access_checks ();
17897       return error_mark_node;
17898     }
17899
17900   /* Look for the `{'.  */
17901   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
17902     {
17903       pop_deferring_access_checks ();
17904       return error_mark_node;
17905     }
17906
17907   /* Process the base classes. If they're invalid, skip the 
17908      entire class body.  */
17909   if (!xref_basetypes (type, bases))
17910     {
17911       /* Consuming the closing brace yields better error messages
17912          later on.  */
17913       if (cp_parser_skip_to_closing_brace (parser))
17914         cp_lexer_consume_token (parser->lexer);
17915       pop_deferring_access_checks ();
17916       return error_mark_node;
17917     }
17918
17919   /* Issue an error message if type-definitions are forbidden here.  */
17920   cp_parser_check_type_definition (parser);
17921   /* Remember that we are defining one more class.  */
17922   ++parser->num_classes_being_defined;
17923   /* Inside the class, surrounding template-parameter-lists do not
17924      apply.  */
17925   saved_num_template_parameter_lists
17926     = parser->num_template_parameter_lists;
17927   parser->num_template_parameter_lists = 0;
17928   /* We are not in a function body.  */
17929   saved_in_function_body = parser->in_function_body;
17930   parser->in_function_body = false;
17931   /* Or in a loop.  */
17932   in_statement = parser->in_statement;
17933   parser->in_statement = 0;
17934   /* Or in a switch.  */
17935   in_switch_statement_p = parser->in_switch_statement_p;
17936   parser->in_switch_statement_p = false;
17937   /* We are not immediately inside an extern "lang" block.  */
17938   saved_in_unbraced_linkage_specification_p
17939     = parser->in_unbraced_linkage_specification_p;
17940   parser->in_unbraced_linkage_specification_p = false;
17941
17942   /* Start the class.  */
17943   if (nested_name_specifier_p)
17944     {
17945       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
17946       old_scope = push_inner_scope (scope);
17947     }
17948   type = begin_class_definition (type, attributes);
17949
17950   if (type == error_mark_node)
17951     /* If the type is erroneous, skip the entire body of the class.  */
17952     cp_parser_skip_to_closing_brace (parser);
17953   else
17954     /* Parse the member-specification.  */
17955     cp_parser_member_specification_opt (parser);
17956
17957   /* Look for the trailing `}'.  */
17958   closing_brace = cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
17959   /* Look for trailing attributes to apply to this class.  */
17960   if (cp_parser_allow_gnu_extensions_p (parser))
17961     attributes = cp_parser_attributes_opt (parser);
17962   if (type != error_mark_node)
17963     type = finish_struct (type, attributes);
17964   if (nested_name_specifier_p)
17965     pop_inner_scope (old_scope, scope);
17966
17967   /* We've finished a type definition.  Check for the common syntax
17968      error of forgetting a semicolon after the definition.  We need to
17969      be careful, as we can't just check for not-a-semicolon and be done
17970      with it; the user might have typed:
17971
17972      class X { } c = ...;
17973      class X { } *p = ...;
17974
17975      and so forth.  Instead, enumerate all the possible tokens that
17976      might follow this production; if we don't see one of them, then
17977      complain and silently insert the semicolon.  */
17978   {
17979     cp_token *token = cp_lexer_peek_token (parser->lexer);
17980     bool want_semicolon = true;
17981
17982     switch (token->type)
17983       {
17984       case CPP_NAME:
17985       case CPP_SEMICOLON:
17986       case CPP_MULT:
17987       case CPP_AND:
17988       case CPP_OPEN_PAREN:
17989       case CPP_CLOSE_PAREN:
17990       case CPP_COMMA:
17991         want_semicolon = false;
17992         break;
17993
17994         /* While it's legal for type qualifiers and storage class
17995            specifiers to follow type definitions in the grammar, only
17996            compiler testsuites contain code like that.  Assume that if
17997            we see such code, then what we're really seeing is a case
17998            like:
17999
18000            class X { }
18001            const <type> var = ...;
18002
18003            or
18004
18005            class Y { }
18006            static <type> func (...) ...
18007
18008            i.e. the qualifier or specifier applies to the next
18009            declaration.  To do so, however, we need to look ahead one
18010            more token to see if *that* token is a type specifier.
18011
18012            This code could be improved to handle:
18013
18014            class Z { }
18015            static const <type> var = ...;  */
18016       case CPP_KEYWORD:
18017         if (keyword_is_decl_specifier (token->keyword))
18018           {
18019             cp_token *lookahead = cp_lexer_peek_nth_token (parser->lexer, 2);
18020
18021             /* Handling user-defined types here would be nice, but very
18022                tricky.  */
18023             want_semicolon
18024               = (lookahead->type == CPP_KEYWORD
18025                  && keyword_begins_type_specifier (lookahead->keyword));
18026           }
18027         break;
18028       default:
18029         break;
18030       }
18031
18032     /* If we don't have a type, then something is very wrong and we
18033        shouldn't try to do anything clever.  Likewise for not seeing the
18034        closing brace.  */
18035     if (closing_brace && TYPE_P (type) && want_semicolon)
18036       {
18037         cp_token_position prev
18038           = cp_lexer_previous_token_position (parser->lexer);
18039         cp_token *prev_token = cp_lexer_token_at (parser->lexer, prev);
18040         location_t loc = prev_token->location;
18041
18042         if (CLASSTYPE_DECLARED_CLASS (type))
18043           error_at (loc, "expected %<;%> after class definition");
18044         else if (TREE_CODE (type) == RECORD_TYPE)
18045           error_at (loc, "expected %<;%> after struct definition");
18046         else if (TREE_CODE (type) == UNION_TYPE)
18047           error_at (loc, "expected %<;%> after union definition");
18048         else
18049           gcc_unreachable ();
18050
18051         /* Unget one token and smash it to look as though we encountered
18052            a semicolon in the input stream.  */
18053         cp_lexer_set_token_position (parser->lexer, prev);
18054         token = cp_lexer_peek_token (parser->lexer);
18055         token->type = CPP_SEMICOLON;
18056         token->keyword = RID_MAX;
18057       }
18058   }
18059
18060   /* If this class is not itself within the scope of another class,
18061      then we need to parse the bodies of all of the queued function
18062      definitions.  Note that the queued functions defined in a class
18063      are not always processed immediately following the
18064      class-specifier for that class.  Consider:
18065
18066        struct A {
18067          struct B { void f() { sizeof (A); } };
18068        };
18069
18070      If `f' were processed before the processing of `A' were
18071      completed, there would be no way to compute the size of `A'.
18072      Note that the nesting we are interested in here is lexical --
18073      not the semantic nesting given by TYPE_CONTEXT.  In particular,
18074      for:
18075
18076        struct A { struct B; };
18077        struct A::B { void f() { } };
18078
18079      there is no need to delay the parsing of `A::B::f'.  */
18080   if (--parser->num_classes_being_defined == 0)
18081     {
18082       tree decl;
18083       tree class_type = NULL_TREE;
18084       tree pushed_scope = NULL_TREE;
18085       unsigned ix;
18086       cp_default_arg_entry *e;
18087       tree save_ccp, save_ccr;
18088
18089       /* In a first pass, parse default arguments to the functions.
18090          Then, in a second pass, parse the bodies of the functions.
18091          This two-phased approach handles cases like:
18092
18093             struct S {
18094               void f() { g(); }
18095               void g(int i = 3);
18096             };
18097
18098          */
18099       FOR_EACH_VEC_ELT (cp_default_arg_entry, unparsed_funs_with_default_args,
18100                         ix, e)
18101         {
18102           decl = e->decl;
18103           /* If there are default arguments that have not yet been processed,
18104              take care of them now.  */
18105           if (class_type != e->class_type)
18106             {
18107               if (pushed_scope)
18108                 pop_scope (pushed_scope);
18109               class_type = e->class_type;
18110               pushed_scope = push_scope (class_type);
18111             }
18112           /* Make sure that any template parameters are in scope.  */
18113           maybe_begin_member_template_processing (decl);
18114           /* Parse the default argument expressions.  */
18115           cp_parser_late_parsing_default_args (parser, decl);
18116           /* Remove any template parameters from the symbol table.  */
18117           maybe_end_member_template_processing ();
18118         }
18119       VEC_truncate (cp_default_arg_entry, unparsed_funs_with_default_args, 0);
18120       /* Now parse any NSDMIs.  */
18121       save_ccp = current_class_ptr;
18122       save_ccr = current_class_ref;
18123       FOR_EACH_VEC_ELT (tree, unparsed_nsdmis, ix, decl)
18124         {
18125           if (class_type != DECL_CONTEXT (decl))
18126             {
18127               if (pushed_scope)
18128                 pop_scope (pushed_scope);
18129               class_type = DECL_CONTEXT (decl);
18130               pushed_scope = push_scope (class_type);
18131             }
18132           inject_this_parameter (class_type, TYPE_UNQUALIFIED);
18133           cp_parser_late_parsing_nsdmi (parser, decl);
18134         }
18135       VEC_truncate (tree, unparsed_nsdmis, 0);
18136       current_class_ptr = save_ccp;
18137       current_class_ref = save_ccr;
18138       if (pushed_scope)
18139         pop_scope (pushed_scope);
18140       /* Now parse the body of the functions.  */
18141       FOR_EACH_VEC_ELT (tree, unparsed_funs_with_definitions, ix, decl)
18142         cp_parser_late_parsing_for_member (parser, decl);
18143       VEC_truncate (tree, unparsed_funs_with_definitions, 0);
18144     }
18145
18146   /* Put back any saved access checks.  */
18147   pop_deferring_access_checks ();
18148
18149   /* Restore saved state.  */
18150   parser->in_switch_statement_p = in_switch_statement_p;
18151   parser->in_statement = in_statement;
18152   parser->in_function_body = saved_in_function_body;
18153   parser->num_template_parameter_lists
18154     = saved_num_template_parameter_lists;
18155   parser->in_unbraced_linkage_specification_p
18156     = saved_in_unbraced_linkage_specification_p;
18157
18158   return type;
18159 }
18160
18161 static tree
18162 cp_parser_class_specifier (cp_parser* parser)
18163 {
18164   tree ret;
18165   timevar_push (TV_PARSE_STRUCT);
18166   ret = cp_parser_class_specifier_1 (parser);
18167   timevar_pop (TV_PARSE_STRUCT);
18168   return ret;
18169 }
18170
18171 /* Parse a class-head.
18172
18173    class-head:
18174      class-key identifier [opt] base-clause [opt]
18175      class-key nested-name-specifier identifier class-virt-specifier [opt] base-clause [opt]
18176      class-key nested-name-specifier [opt] template-id
18177        base-clause [opt]
18178
18179    class-virt-specifier:
18180      final
18181
18182    GNU Extensions:
18183      class-key attributes identifier [opt] base-clause [opt]
18184      class-key attributes nested-name-specifier identifier base-clause [opt]
18185      class-key attributes nested-name-specifier [opt] template-id
18186        base-clause [opt]
18187
18188    Upon return BASES is initialized to the list of base classes (or
18189    NULL, if there are none) in the same form returned by
18190    cp_parser_base_clause.
18191
18192    Returns the TYPE of the indicated class.  Sets
18193    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
18194    involving a nested-name-specifier was used, and FALSE otherwise.
18195
18196    Returns error_mark_node if this is not a class-head.
18197
18198    Returns NULL_TREE if the class-head is syntactically valid, but
18199    semantically invalid in a way that means we should skip the entire
18200    body of the class.  */
18201
18202 static tree
18203 cp_parser_class_head (cp_parser* parser,
18204                       bool* nested_name_specifier_p,
18205                       tree *attributes_p,
18206                       tree *bases)
18207 {
18208   tree nested_name_specifier;
18209   enum tag_types class_key;
18210   tree id = NULL_TREE;
18211   tree type = NULL_TREE;
18212   tree attributes;
18213   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
18214   bool template_id_p = false;
18215   bool qualified_p = false;
18216   bool invalid_nested_name_p = false;
18217   bool invalid_explicit_specialization_p = false;
18218   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
18219   tree pushed_scope = NULL_TREE;
18220   unsigned num_templates;
18221   cp_token *type_start_token = NULL, *nested_name_specifier_token_start = NULL;
18222   /* Assume no nested-name-specifier will be present.  */
18223   *nested_name_specifier_p = false;
18224   /* Assume no template parameter lists will be used in defining the
18225      type.  */
18226   num_templates = 0;
18227   parser->colon_corrects_to_scope_p = false;
18228
18229   *bases = NULL_TREE;
18230
18231   /* Look for the class-key.  */
18232   class_key = cp_parser_class_key (parser);
18233   if (class_key == none_type)
18234     return error_mark_node;
18235
18236   /* Parse the attributes.  */
18237   attributes = cp_parser_attributes_opt (parser);
18238
18239   /* If the next token is `::', that is invalid -- but sometimes
18240      people do try to write:
18241
18242        struct ::S {};
18243
18244      Handle this gracefully by accepting the extra qualifier, and then
18245      issuing an error about it later if this really is a
18246      class-head.  If it turns out just to be an elaborated type
18247      specifier, remain silent.  */
18248   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
18249     qualified_p = true;
18250
18251   push_deferring_access_checks (dk_no_check);
18252
18253   /* Determine the name of the class.  Begin by looking for an
18254      optional nested-name-specifier.  */
18255   nested_name_specifier_token_start = cp_lexer_peek_token (parser->lexer);
18256   nested_name_specifier
18257     = cp_parser_nested_name_specifier_opt (parser,
18258                                            /*typename_keyword_p=*/false,
18259                                            /*check_dependency_p=*/false,
18260                                            /*type_p=*/false,
18261                                            /*is_declaration=*/false);
18262   /* If there was a nested-name-specifier, then there *must* be an
18263      identifier.  */
18264   if (nested_name_specifier)
18265     {
18266       type_start_token = cp_lexer_peek_token (parser->lexer);
18267       /* Although the grammar says `identifier', it really means
18268          `class-name' or `template-name'.  You are only allowed to
18269          define a class that has already been declared with this
18270          syntax.
18271
18272          The proposed resolution for Core Issue 180 says that wherever
18273          you see `class T::X' you should treat `X' as a type-name.
18274
18275          It is OK to define an inaccessible class; for example:
18276
18277            class A { class B; };
18278            class A::B {};
18279
18280          We do not know if we will see a class-name, or a
18281          template-name.  We look for a class-name first, in case the
18282          class-name is a template-id; if we looked for the
18283          template-name first we would stop after the template-name.  */
18284       cp_parser_parse_tentatively (parser);
18285       type = cp_parser_class_name (parser,
18286                                    /*typename_keyword_p=*/false,
18287                                    /*template_keyword_p=*/false,
18288                                    class_type,
18289                                    /*check_dependency_p=*/false,
18290                                    /*class_head_p=*/true,
18291                                    /*is_declaration=*/false);
18292       /* If that didn't work, ignore the nested-name-specifier.  */
18293       if (!cp_parser_parse_definitely (parser))
18294         {
18295           invalid_nested_name_p = true;
18296           type_start_token = cp_lexer_peek_token (parser->lexer);
18297           id = cp_parser_identifier (parser);
18298           if (id == error_mark_node)
18299             id = NULL_TREE;
18300         }
18301       /* If we could not find a corresponding TYPE, treat this
18302          declaration like an unqualified declaration.  */
18303       if (type == error_mark_node)
18304         nested_name_specifier = NULL_TREE;
18305       /* Otherwise, count the number of templates used in TYPE and its
18306          containing scopes.  */
18307       else
18308         {
18309           tree scope;
18310
18311           for (scope = TREE_TYPE (type);
18312                scope && TREE_CODE (scope) != NAMESPACE_DECL;
18313                scope = (TYPE_P (scope)
18314                         ? TYPE_CONTEXT (scope)
18315                         : DECL_CONTEXT (scope)))
18316             if (TYPE_P (scope)
18317                 && CLASS_TYPE_P (scope)
18318                 && CLASSTYPE_TEMPLATE_INFO (scope)
18319                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
18320                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
18321               ++num_templates;
18322         }
18323     }
18324   /* Otherwise, the identifier is optional.  */
18325   else
18326     {
18327       /* We don't know whether what comes next is a template-id,
18328          an identifier, or nothing at all.  */
18329       cp_parser_parse_tentatively (parser);
18330       /* Check for a template-id.  */
18331       type_start_token = cp_lexer_peek_token (parser->lexer);
18332       id = cp_parser_template_id (parser,
18333                                   /*template_keyword_p=*/false,
18334                                   /*check_dependency_p=*/true,
18335                                   /*is_declaration=*/true);
18336       /* If that didn't work, it could still be an identifier.  */
18337       if (!cp_parser_parse_definitely (parser))
18338         {
18339           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18340             {
18341               type_start_token = cp_lexer_peek_token (parser->lexer);
18342               id = cp_parser_identifier (parser);
18343             }
18344           else
18345             id = NULL_TREE;
18346         }
18347       else
18348         {
18349           template_id_p = true;
18350           ++num_templates;
18351         }
18352     }
18353
18354   pop_deferring_access_checks ();
18355
18356   if (id)
18357     {
18358       cp_parser_check_for_invalid_template_id (parser, id,
18359                                                type_start_token->location);
18360     }
18361   virt_specifiers = cp_parser_virt_specifier_seq_opt (parser);
18362
18363   /* If it's not a `:' or a `{' then we can't really be looking at a
18364      class-head, since a class-head only appears as part of a
18365      class-specifier.  We have to detect this situation before calling
18366      xref_tag, since that has irreversible side-effects.  */
18367   if (!cp_parser_next_token_starts_class_definition_p (parser))
18368     {
18369       cp_parser_error (parser, "expected %<{%> or %<:%>");
18370       type = error_mark_node;
18371       goto out;
18372     }
18373
18374   /* At this point, we're going ahead with the class-specifier, even
18375      if some other problem occurs.  */
18376   cp_parser_commit_to_tentative_parse (parser);
18377   if (virt_specifiers & VIRT_SPEC_OVERRIDE)
18378     {
18379       cp_parser_error (parser,
18380                        "cannot specify %<override%> for a class");
18381       type = error_mark_node;
18382       goto out;
18383     }
18384   /* Issue the error about the overly-qualified name now.  */
18385   if (qualified_p)
18386     {
18387       cp_parser_error (parser,
18388                        "global qualification of class name is invalid");
18389       type = error_mark_node;
18390       goto out;
18391     }
18392   else if (invalid_nested_name_p)
18393     {
18394       cp_parser_error (parser,
18395                        "qualified name does not name a class");
18396       type = error_mark_node;
18397       goto out;
18398     }
18399   else if (nested_name_specifier)
18400     {
18401       tree scope;
18402
18403       /* Reject typedef-names in class heads.  */
18404       if (!DECL_IMPLICIT_TYPEDEF_P (type))
18405         {
18406           error_at (type_start_token->location,
18407                     "invalid class name in declaration of %qD",
18408                     type);
18409           type = NULL_TREE;
18410           goto done;
18411         }
18412
18413       /* Figure out in what scope the declaration is being placed.  */
18414       scope = current_scope ();
18415       /* If that scope does not contain the scope in which the
18416          class was originally declared, the program is invalid.  */
18417       if (scope && !is_ancestor (scope, nested_name_specifier))
18418         {
18419           if (at_namespace_scope_p ())
18420             error_at (type_start_token->location,
18421                       "declaration of %qD in namespace %qD which does not "
18422                       "enclose %qD",
18423                       type, scope, nested_name_specifier);
18424           else
18425             error_at (type_start_token->location,
18426                       "declaration of %qD in %qD which does not enclose %qD",
18427                       type, scope, nested_name_specifier);
18428           type = NULL_TREE;
18429           goto done;
18430         }
18431       /* [dcl.meaning]
18432
18433          A declarator-id shall not be qualified except for the
18434          definition of a ... nested class outside of its class
18435          ... [or] the definition or explicit instantiation of a
18436          class member of a namespace outside of its namespace.  */
18437       if (scope == nested_name_specifier)
18438         {
18439           permerror (nested_name_specifier_token_start->location,
18440                      "extra qualification not allowed");
18441           nested_name_specifier = NULL_TREE;
18442           num_templates = 0;
18443         }
18444     }
18445   /* An explicit-specialization must be preceded by "template <>".  If
18446      it is not, try to recover gracefully.  */
18447   if (at_namespace_scope_p ()
18448       && parser->num_template_parameter_lists == 0
18449       && template_id_p)
18450     {
18451       error_at (type_start_token->location,
18452                 "an explicit specialization must be preceded by %<template <>%>");
18453       invalid_explicit_specialization_p = true;
18454       /* Take the same action that would have been taken by
18455          cp_parser_explicit_specialization.  */
18456       ++parser->num_template_parameter_lists;
18457       begin_specialization ();
18458     }
18459   /* There must be no "return" statements between this point and the
18460      end of this function; set "type "to the correct return value and
18461      use "goto done;" to return.  */
18462   /* Make sure that the right number of template parameters were
18463      present.  */
18464   if (!cp_parser_check_template_parameters (parser, num_templates,
18465                                             type_start_token->location,
18466                                             /*declarator=*/NULL))
18467     {
18468       /* If something went wrong, there is no point in even trying to
18469          process the class-definition.  */
18470       type = NULL_TREE;
18471       goto done;
18472     }
18473
18474   /* Look up the type.  */
18475   if (template_id_p)
18476     {
18477       if (TREE_CODE (id) == TEMPLATE_ID_EXPR
18478           && (DECL_FUNCTION_TEMPLATE_P (TREE_OPERAND (id, 0))
18479               || TREE_CODE (TREE_OPERAND (id, 0)) == OVERLOAD))
18480         {
18481           error_at (type_start_token->location,
18482                     "function template %qD redeclared as a class template", id);
18483           type = error_mark_node;
18484         }
18485       else
18486         {
18487           type = TREE_TYPE (id);
18488           type = maybe_process_partial_specialization (type);
18489         }
18490       if (nested_name_specifier)
18491         pushed_scope = push_scope (nested_name_specifier);
18492     }
18493   else if (nested_name_specifier)
18494     {
18495       tree class_type;
18496
18497       /* Given:
18498
18499             template <typename T> struct S { struct T };
18500             template <typename T> struct S<T>::T { };
18501
18502          we will get a TYPENAME_TYPE when processing the definition of
18503          `S::T'.  We need to resolve it to the actual type before we
18504          try to define it.  */
18505       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
18506         {
18507           class_type = resolve_typename_type (TREE_TYPE (type),
18508                                               /*only_current_p=*/false);
18509           if (TREE_CODE (class_type) != TYPENAME_TYPE)
18510             type = TYPE_NAME (class_type);
18511           else
18512             {
18513               cp_parser_error (parser, "could not resolve typename type");
18514               type = error_mark_node;
18515             }
18516         }
18517
18518       if (maybe_process_partial_specialization (TREE_TYPE (type))
18519           == error_mark_node)
18520         {
18521           type = NULL_TREE;
18522           goto done;
18523         }
18524
18525       class_type = current_class_type;
18526       /* Enter the scope indicated by the nested-name-specifier.  */
18527       pushed_scope = push_scope (nested_name_specifier);
18528       /* Get the canonical version of this type.  */
18529       type = TYPE_MAIN_DECL (TREE_TYPE (type));
18530       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
18531           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
18532         {
18533           type = push_template_decl (type);
18534           if (type == error_mark_node)
18535             {
18536               type = NULL_TREE;
18537               goto done;
18538             }
18539         }
18540
18541       type = TREE_TYPE (type);
18542       *nested_name_specifier_p = true;
18543     }
18544   else      /* The name is not a nested name.  */
18545     {
18546       /* If the class was unnamed, create a dummy name.  */
18547       if (!id)
18548         id = make_anon_name ();
18549       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
18550                        parser->num_template_parameter_lists);
18551     }
18552
18553   /* Indicate whether this class was declared as a `class' or as a
18554      `struct'.  */
18555   if (TREE_CODE (type) == RECORD_TYPE)
18556     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
18557   cp_parser_check_class_key (class_key, type);
18558
18559   /* If this type was already complete, and we see another definition,
18560      that's an error.  */
18561   if (type != error_mark_node && COMPLETE_TYPE_P (type))
18562     {
18563       error_at (type_start_token->location, "redefinition of %q#T",
18564                 type);
18565       error_at (type_start_token->location, "previous definition of %q+#T",
18566                 type);
18567       type = NULL_TREE;
18568       goto done;
18569     }
18570   else if (type == error_mark_node)
18571     type = NULL_TREE;
18572
18573   /* We will have entered the scope containing the class; the names of
18574      base classes should be looked up in that context.  For example:
18575
18576        struct A { struct B {}; struct C; };
18577        struct A::C : B {};
18578
18579      is valid.  */
18580
18581   /* Get the list of base-classes, if there is one.  */
18582   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
18583     *bases = cp_parser_base_clause (parser);
18584
18585  done:
18586   /* Leave the scope given by the nested-name-specifier.  We will
18587      enter the class scope itself while processing the members.  */
18588   if (pushed_scope)
18589     pop_scope (pushed_scope);
18590
18591   if (invalid_explicit_specialization_p)
18592     {
18593       end_specialization ();
18594       --parser->num_template_parameter_lists;
18595     }
18596
18597   if (type)
18598     DECL_SOURCE_LOCATION (TYPE_NAME (type)) = type_start_token->location;
18599   *attributes_p = attributes;
18600   if (type && (virt_specifiers & VIRT_SPEC_FINAL))
18601     CLASSTYPE_FINAL (type) = 1;
18602  out:
18603   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
18604   return type;
18605 }
18606
18607 /* Parse a class-key.
18608
18609    class-key:
18610      class
18611      struct
18612      union
18613
18614    Returns the kind of class-key specified, or none_type to indicate
18615    error.  */
18616
18617 static enum tag_types
18618 cp_parser_class_key (cp_parser* parser)
18619 {
18620   cp_token *token;
18621   enum tag_types tag_type;
18622
18623   /* Look for the class-key.  */
18624   token = cp_parser_require (parser, CPP_KEYWORD, RT_CLASS_KEY);
18625   if (!token)
18626     return none_type;
18627
18628   /* Check to see if the TOKEN is a class-key.  */
18629   tag_type = cp_parser_token_is_class_key (token);
18630   if (!tag_type)
18631     cp_parser_error (parser, "expected class-key");
18632   return tag_type;
18633 }
18634
18635 /* Parse an (optional) member-specification.
18636
18637    member-specification:
18638      member-declaration member-specification [opt]
18639      access-specifier : member-specification [opt]  */
18640
18641 static void
18642 cp_parser_member_specification_opt (cp_parser* parser)
18643 {
18644   while (true)
18645     {
18646       cp_token *token;
18647       enum rid keyword;
18648
18649       /* Peek at the next token.  */
18650       token = cp_lexer_peek_token (parser->lexer);
18651       /* If it's a `}', or EOF then we've seen all the members.  */
18652       if (token->type == CPP_CLOSE_BRACE
18653           || token->type == CPP_EOF
18654           || token->type == CPP_PRAGMA_EOL)
18655         break;
18656
18657       /* See if this token is a keyword.  */
18658       keyword = token->keyword;
18659       switch (keyword)
18660         {
18661         case RID_PUBLIC:
18662         case RID_PROTECTED:
18663         case RID_PRIVATE:
18664           /* Consume the access-specifier.  */
18665           cp_lexer_consume_token (parser->lexer);
18666           /* Remember which access-specifier is active.  */
18667           current_access_specifier = token->u.value;
18668           /* Look for the `:'.  */
18669           cp_parser_require (parser, CPP_COLON, RT_COLON);
18670           break;
18671
18672         default:
18673           /* Accept #pragmas at class scope.  */
18674           if (token->type == CPP_PRAGMA)
18675             {
18676               cp_parser_pragma (parser, pragma_external);
18677               break;
18678             }
18679
18680           /* Otherwise, the next construction must be a
18681              member-declaration.  */
18682           cp_parser_member_declaration (parser);
18683         }
18684     }
18685 }
18686
18687 /* Parse a member-declaration.
18688
18689    member-declaration:
18690      decl-specifier-seq [opt] member-declarator-list [opt] ;
18691      function-definition ; [opt]
18692      :: [opt] nested-name-specifier template [opt] unqualified-id ;
18693      using-declaration
18694      template-declaration
18695      alias-declaration
18696
18697    member-declarator-list:
18698      member-declarator
18699      member-declarator-list , member-declarator
18700
18701    member-declarator:
18702      declarator pure-specifier [opt]
18703      declarator constant-initializer [opt]
18704      identifier [opt] : constant-expression
18705
18706    GNU Extensions:
18707
18708    member-declaration:
18709      __extension__ member-declaration
18710
18711    member-declarator:
18712      declarator attributes [opt] pure-specifier [opt]
18713      declarator attributes [opt] constant-initializer [opt]
18714      identifier [opt] attributes [opt] : constant-expression  
18715
18716    C++0x Extensions:
18717
18718    member-declaration:
18719      static_assert-declaration  */
18720
18721 static void
18722 cp_parser_member_declaration (cp_parser* parser)
18723 {
18724   cp_decl_specifier_seq decl_specifiers;
18725   tree prefix_attributes;
18726   tree decl;
18727   int declares_class_or_enum;
18728   bool friend_p;
18729   cp_token *token = NULL;
18730   cp_token *decl_spec_token_start = NULL;
18731   cp_token *initializer_token_start = NULL;
18732   int saved_pedantic;
18733   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
18734
18735   /* Check for the `__extension__' keyword.  */
18736   if (cp_parser_extension_opt (parser, &saved_pedantic))
18737     {
18738       /* Recurse.  */
18739       cp_parser_member_declaration (parser);
18740       /* Restore the old value of the PEDANTIC flag.  */
18741       pedantic = saved_pedantic;
18742
18743       return;
18744     }
18745
18746   /* Check for a template-declaration.  */
18747   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
18748     {
18749       /* An explicit specialization here is an error condition, and we
18750          expect the specialization handler to detect and report this.  */
18751       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
18752           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
18753         cp_parser_explicit_specialization (parser);
18754       else
18755         cp_parser_template_declaration (parser, /*member_p=*/true);
18756
18757       return;
18758     }
18759
18760   /* Check for a using-declaration.  */
18761   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
18762     {
18763       if (cxx_dialect < cxx0x)
18764         {
18765           /* Parse the using-declaration.  */
18766           cp_parser_using_declaration (parser,
18767                                        /*access_declaration_p=*/false);
18768           return;
18769         }
18770       else
18771         {
18772           tree decl;
18773           cp_parser_parse_tentatively (parser);
18774           decl = cp_parser_alias_declaration (parser);
18775           if (cp_parser_parse_definitely (parser))
18776             finish_member_declaration (decl);
18777           else
18778             cp_parser_using_declaration (parser,
18779                                          /*access_declaration_p=*/false);
18780           return;
18781         }
18782     }
18783
18784   /* Check for @defs.  */
18785   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
18786     {
18787       tree ivar, member;
18788       tree ivar_chains = cp_parser_objc_defs_expression (parser);
18789       ivar = ivar_chains;
18790       while (ivar)
18791         {
18792           member = ivar;
18793           ivar = TREE_CHAIN (member);
18794           TREE_CHAIN (member) = NULL_TREE;
18795           finish_member_declaration (member);
18796         }
18797       return;
18798     }
18799
18800   /* If the next token is `static_assert' we have a static assertion.  */
18801   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC_ASSERT))
18802     {
18803       cp_parser_static_assert (parser, /*member_p=*/true);
18804       return;
18805     }
18806
18807   parser->colon_corrects_to_scope_p = false;
18808
18809   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
18810     goto out;
18811
18812   /* Parse the decl-specifier-seq.  */
18813   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
18814   cp_parser_decl_specifier_seq (parser,
18815                                 CP_PARSER_FLAGS_OPTIONAL,
18816                                 &decl_specifiers,
18817                                 &declares_class_or_enum);
18818   prefix_attributes = decl_specifiers.attributes;
18819   decl_specifiers.attributes = NULL_TREE;
18820   /* Check for an invalid type-name.  */
18821   if (!decl_specifiers.any_type_specifiers_p
18822       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
18823     goto out;
18824   /* If there is no declarator, then the decl-specifier-seq should
18825      specify a type.  */
18826   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
18827     {
18828       /* If there was no decl-specifier-seq, and the next token is a
18829          `;', then we have something like:
18830
18831            struct S { ; };
18832
18833          [class.mem]
18834
18835          Each member-declaration shall declare at least one member
18836          name of the class.  */
18837       if (!decl_specifiers.any_specifiers_p)
18838         {
18839           cp_token *token = cp_lexer_peek_token (parser->lexer);
18840           if (!in_system_header_at (token->location))
18841             pedwarn (token->location, OPT_pedantic, "extra %<;%>");
18842         }
18843       else
18844         {
18845           tree type;
18846
18847           /* See if this declaration is a friend.  */
18848           friend_p = cp_parser_friend_p (&decl_specifiers);
18849           /* If there were decl-specifiers, check to see if there was
18850              a class-declaration.  */
18851           type = check_tag_decl (&decl_specifiers);
18852           /* Nested classes have already been added to the class, but
18853              a `friend' needs to be explicitly registered.  */
18854           if (friend_p)
18855             {
18856               /* If the `friend' keyword was present, the friend must
18857                  be introduced with a class-key.  */
18858                if (!declares_class_or_enum && cxx_dialect < cxx0x)
18859                  pedwarn (decl_spec_token_start->location, OPT_pedantic,
18860                           "in C++03 a class-key must be used "
18861                           "when declaring a friend");
18862                /* In this case:
18863
18864                     template <typename T> struct A {
18865                       friend struct A<T>::B;
18866                     };
18867
18868                   A<T>::B will be represented by a TYPENAME_TYPE, and
18869                   therefore not recognized by check_tag_decl.  */
18870                if (!type)
18871                  {
18872                    type = decl_specifiers.type;
18873                    if (type && TREE_CODE (type) == TYPE_DECL)
18874                      type = TREE_TYPE (type);
18875                  }
18876                if (!type || !TYPE_P (type))
18877                  error_at (decl_spec_token_start->location,
18878                            "friend declaration does not name a class or "
18879                            "function");
18880                else
18881                  make_friend_class (current_class_type, type,
18882                                     /*complain=*/true);
18883             }
18884           /* If there is no TYPE, an error message will already have
18885              been issued.  */
18886           else if (!type || type == error_mark_node)
18887             ;
18888           /* An anonymous aggregate has to be handled specially; such
18889              a declaration really declares a data member (with a
18890              particular type), as opposed to a nested class.  */
18891           else if (ANON_AGGR_TYPE_P (type))
18892             {
18893               /* Remove constructors and such from TYPE, now that we
18894                  know it is an anonymous aggregate.  */
18895               fixup_anonymous_aggr (type);
18896               /* And make the corresponding data member.  */
18897               decl = build_decl (decl_spec_token_start->location,
18898                                  FIELD_DECL, NULL_TREE, type);
18899               /* Add it to the class.  */
18900               finish_member_declaration (decl);
18901             }
18902           else
18903             cp_parser_check_access_in_redeclaration
18904                                               (TYPE_NAME (type),
18905                                                decl_spec_token_start->location);
18906         }
18907     }
18908   else
18909     {
18910       bool assume_semicolon = false;
18911
18912       /* See if these declarations will be friends.  */
18913       friend_p = cp_parser_friend_p (&decl_specifiers);
18914
18915       /* Keep going until we hit the `;' at the end of the
18916          declaration.  */
18917       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18918         {
18919           tree attributes = NULL_TREE;
18920           tree first_attribute;
18921
18922           /* Peek at the next token.  */
18923           token = cp_lexer_peek_token (parser->lexer);
18924
18925           /* Check for a bitfield declaration.  */
18926           if (token->type == CPP_COLON
18927               || (token->type == CPP_NAME
18928                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
18929                   == CPP_COLON))
18930             {
18931               tree identifier;
18932               tree width;
18933
18934               /* Get the name of the bitfield.  Note that we cannot just
18935                  check TOKEN here because it may have been invalidated by
18936                  the call to cp_lexer_peek_nth_token above.  */
18937               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
18938                 identifier = cp_parser_identifier (parser);
18939               else
18940                 identifier = NULL_TREE;
18941
18942               /* Consume the `:' token.  */
18943               cp_lexer_consume_token (parser->lexer);
18944               /* Get the width of the bitfield.  */
18945               width
18946                 = cp_parser_constant_expression (parser,
18947                                                  /*allow_non_constant=*/false,
18948                                                  NULL);
18949
18950               /* Look for attributes that apply to the bitfield.  */
18951               attributes = cp_parser_attributes_opt (parser);
18952               /* Remember which attributes are prefix attributes and
18953                  which are not.  */
18954               first_attribute = attributes;
18955               /* Combine the attributes.  */
18956               attributes = chainon (prefix_attributes, attributes);
18957
18958               /* Create the bitfield declaration.  */
18959               decl = grokbitfield (identifier
18960                                    ? make_id_declarator (NULL_TREE,
18961                                                          identifier,
18962                                                          sfk_none)
18963                                    : NULL,
18964                                    &decl_specifiers,
18965                                    width,
18966                                    attributes);
18967             }
18968           else
18969             {
18970               cp_declarator *declarator;
18971               tree initializer;
18972               tree asm_specification;
18973               int ctor_dtor_or_conv_p;
18974
18975               /* Parse the declarator.  */
18976               declarator
18977                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
18978                                         &ctor_dtor_or_conv_p,
18979                                         /*parenthesized_p=*/NULL,
18980                                         /*member_p=*/true);
18981
18982               /* If something went wrong parsing the declarator, make sure
18983                  that we at least consume some tokens.  */
18984               if (declarator == cp_error_declarator)
18985                 {
18986                   /* Skip to the end of the statement.  */
18987                   cp_parser_skip_to_end_of_statement (parser);
18988                   /* If the next token is not a semicolon, that is
18989                      probably because we just skipped over the body of
18990                      a function.  So, we consume a semicolon if
18991                      present, but do not issue an error message if it
18992                      is not present.  */
18993                   if (cp_lexer_next_token_is (parser->lexer,
18994                                               CPP_SEMICOLON))
18995                     cp_lexer_consume_token (parser->lexer);
18996                   goto out;
18997                 }
18998
18999               if (declares_class_or_enum & 2)
19000                 cp_parser_check_for_definition_in_return_type
19001                                             (declarator, decl_specifiers.type,
19002                                              decl_specifiers.type_location);
19003
19004               /* Look for an asm-specification.  */
19005               asm_specification = cp_parser_asm_specification_opt (parser);
19006               /* Look for attributes that apply to the declaration.  */
19007               attributes = cp_parser_attributes_opt (parser);
19008               /* Remember which attributes are prefix attributes and
19009                  which are not.  */
19010               first_attribute = attributes;
19011               /* Combine the attributes.  */
19012               attributes = chainon (prefix_attributes, attributes);
19013
19014               /* If it's an `=', then we have a constant-initializer or a
19015                  pure-specifier.  It is not correct to parse the
19016                  initializer before registering the member declaration
19017                  since the member declaration should be in scope while
19018                  its initializer is processed.  However, the rest of the
19019                  front end does not yet provide an interface that allows
19020                  us to handle this correctly.  */
19021               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
19022                 {
19023                   /* In [class.mem]:
19024
19025                      A pure-specifier shall be used only in the declaration of
19026                      a virtual function.
19027
19028                      A member-declarator can contain a constant-initializer
19029                      only if it declares a static member of integral or
19030                      enumeration type.
19031
19032                      Therefore, if the DECLARATOR is for a function, we look
19033                      for a pure-specifier; otherwise, we look for a
19034                      constant-initializer.  When we call `grokfield', it will
19035                      perform more stringent semantics checks.  */
19036                   initializer_token_start = cp_lexer_peek_token (parser->lexer);
19037                   if (function_declarator_p (declarator)
19038                       || (decl_specifiers.type
19039                           && TREE_CODE (decl_specifiers.type) == TYPE_DECL
19040                           && (TREE_CODE (TREE_TYPE (decl_specifiers.type))
19041                               == FUNCTION_TYPE)))
19042                     initializer = cp_parser_pure_specifier (parser);
19043                   else if (decl_specifiers.storage_class != sc_static)
19044                     initializer = cp_parser_save_nsdmi (parser);
19045                   else if (cxx_dialect >= cxx0x)
19046                     {
19047                       bool nonconst;
19048                       /* Don't require a constant rvalue in C++11, since we
19049                          might want a reference constant.  We'll enforce
19050                          constancy later.  */
19051                       cp_lexer_consume_token (parser->lexer);
19052                       /* Parse the initializer.  */
19053                       initializer = cp_parser_initializer_clause (parser,
19054                                                                   &nonconst);
19055                     }
19056                   else
19057                     /* Parse the initializer.  */
19058                     initializer = cp_parser_constant_initializer (parser);
19059                 }
19060               else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)
19061                        && !function_declarator_p (declarator))
19062                 {
19063                   bool x;
19064                   if (decl_specifiers.storage_class != sc_static)
19065                     initializer = cp_parser_save_nsdmi (parser);
19066                   else
19067                     initializer = cp_parser_initializer (parser, &x, &x);
19068                 }
19069               /* Otherwise, there is no initializer.  */
19070               else
19071                 initializer = NULL_TREE;
19072
19073               /* See if we are probably looking at a function
19074                  definition.  We are certainly not looking at a
19075                  member-declarator.  Calling `grokfield' has
19076                  side-effects, so we must not do it unless we are sure
19077                  that we are looking at a member-declarator.  */
19078               if (cp_parser_token_starts_function_definition_p
19079                   (cp_lexer_peek_token (parser->lexer)))
19080                 {
19081                   /* The grammar does not allow a pure-specifier to be
19082                      used when a member function is defined.  (It is
19083                      possible that this fact is an oversight in the
19084                      standard, since a pure function may be defined
19085                      outside of the class-specifier.  */
19086                   if (initializer)
19087                     error_at (initializer_token_start->location,
19088                               "pure-specifier on function-definition");
19089                   decl = cp_parser_save_member_function_body (parser,
19090                                                               &decl_specifiers,
19091                                                               declarator,
19092                                                               attributes);
19093                   /* If the member was not a friend, declare it here.  */
19094                   if (!friend_p)
19095                     finish_member_declaration (decl);
19096                   /* Peek at the next token.  */
19097                   token = cp_lexer_peek_token (parser->lexer);
19098                   /* If the next token is a semicolon, consume it.  */
19099                   if (token->type == CPP_SEMICOLON)
19100                     cp_lexer_consume_token (parser->lexer);
19101                   goto out;
19102                 }
19103               else
19104                 if (declarator->kind == cdk_function)
19105                   declarator->id_loc = token->location;
19106                 /* Create the declaration.  */
19107                 decl = grokfield (declarator, &decl_specifiers,
19108                                   initializer, /*init_const_expr_p=*/true,
19109                                   asm_specification,
19110                                   attributes);
19111             }
19112
19113           /* Reset PREFIX_ATTRIBUTES.  */
19114           while (attributes && TREE_CHAIN (attributes) != first_attribute)
19115             attributes = TREE_CHAIN (attributes);
19116           if (attributes)
19117             TREE_CHAIN (attributes) = NULL_TREE;
19118
19119           /* If there is any qualification still in effect, clear it
19120              now; we will be starting fresh with the next declarator.  */
19121           parser->scope = NULL_TREE;
19122           parser->qualifying_scope = NULL_TREE;
19123           parser->object_scope = NULL_TREE;
19124           /* If it's a `,', then there are more declarators.  */
19125           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
19126             cp_lexer_consume_token (parser->lexer);
19127           /* If the next token isn't a `;', then we have a parse error.  */
19128           else if (cp_lexer_next_token_is_not (parser->lexer,
19129                                                CPP_SEMICOLON))
19130             {
19131               /* The next token might be a ways away from where the
19132                  actual semicolon is missing.  Find the previous token
19133                  and use that for our error position.  */
19134               cp_token *token = cp_lexer_previous_token (parser->lexer);
19135               error_at (token->location,
19136                         "expected %<;%> at end of member declaration");
19137
19138               /* Assume that the user meant to provide a semicolon.  If
19139                  we were to cp_parser_skip_to_end_of_statement, we might
19140                  skip to a semicolon inside a member function definition
19141                  and issue nonsensical error messages.  */
19142               assume_semicolon = true;
19143             }
19144
19145           if (decl)
19146             {
19147               /* Add DECL to the list of members.  */
19148               if (!friend_p)
19149                 finish_member_declaration (decl);
19150
19151               if (TREE_CODE (decl) == FUNCTION_DECL)
19152                 cp_parser_save_default_args (parser, decl);
19153               else if (TREE_CODE (decl) == FIELD_DECL
19154                        && !DECL_C_BIT_FIELD (decl)
19155                        && DECL_INITIAL (decl))
19156                 /* Add DECL to the queue of NSDMI to be parsed later.  */
19157                 VEC_safe_push (tree, gc, unparsed_nsdmis, decl);
19158             }
19159
19160           if (assume_semicolon)
19161             goto out;
19162         }
19163     }
19164
19165   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
19166  out:
19167   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
19168 }
19169
19170 /* Parse a pure-specifier.
19171
19172    pure-specifier:
19173      = 0
19174
19175    Returns INTEGER_ZERO_NODE if a pure specifier is found.
19176    Otherwise, ERROR_MARK_NODE is returned.  */
19177
19178 static tree
19179 cp_parser_pure_specifier (cp_parser* parser)
19180 {
19181   cp_token *token;
19182
19183   /* Look for the `=' token.  */
19184   if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
19185     return error_mark_node;
19186   /* Look for the `0' token.  */
19187   token = cp_lexer_peek_token (parser->lexer);
19188
19189   if (token->type == CPP_EOF
19190       || token->type == CPP_PRAGMA_EOL)
19191     return error_mark_node;
19192
19193   cp_lexer_consume_token (parser->lexer);
19194
19195   /* Accept = default or = delete in c++0x mode.  */
19196   if (token->keyword == RID_DEFAULT
19197       || token->keyword == RID_DELETE)
19198     {
19199       maybe_warn_cpp0x (CPP0X_DEFAULTED_DELETED);
19200       return token->u.value;
19201     }
19202
19203   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
19204   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
19205     {
19206       cp_parser_error (parser,
19207                        "invalid pure specifier (only %<= 0%> is allowed)");
19208       cp_parser_skip_to_end_of_statement (parser);
19209       return error_mark_node;
19210     }
19211   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
19212     {
19213       error_at (token->location, "templates may not be %<virtual%>");
19214       return error_mark_node;
19215     }
19216
19217   return integer_zero_node;
19218 }
19219
19220 /* Parse a constant-initializer.
19221
19222    constant-initializer:
19223      = constant-expression
19224
19225    Returns a representation of the constant-expression.  */
19226
19227 static tree
19228 cp_parser_constant_initializer (cp_parser* parser)
19229 {
19230   /* Look for the `=' token.  */
19231   if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
19232     return error_mark_node;
19233
19234   /* It is invalid to write:
19235
19236        struct S { static const int i = { 7 }; };
19237
19238      */
19239   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
19240     {
19241       cp_parser_error (parser,
19242                        "a brace-enclosed initializer is not allowed here");
19243       /* Consume the opening brace.  */
19244       cp_lexer_consume_token (parser->lexer);
19245       /* Skip the initializer.  */
19246       cp_parser_skip_to_closing_brace (parser);
19247       /* Look for the trailing `}'.  */
19248       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
19249
19250       return error_mark_node;
19251     }
19252
19253   return cp_parser_constant_expression (parser,
19254                                         /*allow_non_constant=*/false,
19255                                         NULL);
19256 }
19257
19258 /* Derived classes [gram.class.derived] */
19259
19260 /* Parse a base-clause.
19261
19262    base-clause:
19263      : base-specifier-list
19264
19265    base-specifier-list:
19266      base-specifier ... [opt]
19267      base-specifier-list , base-specifier ... [opt]
19268
19269    Returns a TREE_LIST representing the base-classes, in the order in
19270    which they were declared.  The representation of each node is as
19271    described by cp_parser_base_specifier.
19272
19273    In the case that no bases are specified, this function will return
19274    NULL_TREE, not ERROR_MARK_NODE.  */
19275
19276 static tree
19277 cp_parser_base_clause (cp_parser* parser)
19278 {
19279   tree bases = NULL_TREE;
19280
19281   /* Look for the `:' that begins the list.  */
19282   cp_parser_require (parser, CPP_COLON, RT_COLON);
19283
19284   /* Scan the base-specifier-list.  */
19285   while (true)
19286     {
19287       cp_token *token;
19288       tree base;
19289       bool pack_expansion_p = false;
19290
19291       /* Look for the base-specifier.  */
19292       base = cp_parser_base_specifier (parser);
19293       /* Look for the (optional) ellipsis. */
19294       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
19295         {
19296           /* Consume the `...'. */
19297           cp_lexer_consume_token (parser->lexer);
19298
19299           pack_expansion_p = true;
19300         }
19301
19302       /* Add BASE to the front of the list.  */
19303       if (base && base != error_mark_node)
19304         {
19305           if (pack_expansion_p)
19306             /* Make this a pack expansion type. */
19307             TREE_VALUE (base) = make_pack_expansion (TREE_VALUE (base));
19308
19309           if (!check_for_bare_parameter_packs (TREE_VALUE (base)))
19310             {
19311               TREE_CHAIN (base) = bases;
19312               bases = base;
19313             }
19314         }
19315       /* Peek at the next token.  */
19316       token = cp_lexer_peek_token (parser->lexer);
19317       /* If it's not a comma, then the list is complete.  */
19318       if (token->type != CPP_COMMA)
19319         break;
19320       /* Consume the `,'.  */
19321       cp_lexer_consume_token (parser->lexer);
19322     }
19323
19324   /* PARSER->SCOPE may still be non-NULL at this point, if the last
19325      base class had a qualified name.  However, the next name that
19326      appears is certainly not qualified.  */
19327   parser->scope = NULL_TREE;
19328   parser->qualifying_scope = NULL_TREE;
19329   parser->object_scope = NULL_TREE;
19330
19331   return nreverse (bases);
19332 }
19333
19334 /* Parse a base-specifier.
19335
19336    base-specifier:
19337      :: [opt] nested-name-specifier [opt] class-name
19338      virtual access-specifier [opt] :: [opt] nested-name-specifier
19339        [opt] class-name
19340      access-specifier virtual [opt] :: [opt] nested-name-specifier
19341        [opt] class-name
19342
19343    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
19344    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
19345    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
19346    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
19347
19348 static tree
19349 cp_parser_base_specifier (cp_parser* parser)
19350 {
19351   cp_token *token;
19352   bool done = false;
19353   bool virtual_p = false;
19354   bool duplicate_virtual_error_issued_p = false;
19355   bool duplicate_access_error_issued_p = false;
19356   bool class_scope_p, template_p;
19357   tree access = access_default_node;
19358   tree type;
19359
19360   /* Process the optional `virtual' and `access-specifier'.  */
19361   while (!done)
19362     {
19363       /* Peek at the next token.  */
19364       token = cp_lexer_peek_token (parser->lexer);
19365       /* Process `virtual'.  */
19366       switch (token->keyword)
19367         {
19368         case RID_VIRTUAL:
19369           /* If `virtual' appears more than once, issue an error.  */
19370           if (virtual_p && !duplicate_virtual_error_issued_p)
19371             {
19372               cp_parser_error (parser,
19373                                "%<virtual%> specified more than once in base-specified");
19374               duplicate_virtual_error_issued_p = true;
19375             }
19376
19377           virtual_p = true;
19378
19379           /* Consume the `virtual' token.  */
19380           cp_lexer_consume_token (parser->lexer);
19381
19382           break;
19383
19384         case RID_PUBLIC:
19385         case RID_PROTECTED:
19386         case RID_PRIVATE:
19387           /* If more than one access specifier appears, issue an
19388              error.  */
19389           if (access != access_default_node
19390               && !duplicate_access_error_issued_p)
19391             {
19392               cp_parser_error (parser,
19393                                "more than one access specifier in base-specified");
19394               duplicate_access_error_issued_p = true;
19395             }
19396
19397           access = ridpointers[(int) token->keyword];
19398
19399           /* Consume the access-specifier.  */
19400           cp_lexer_consume_token (parser->lexer);
19401
19402           break;
19403
19404         default:
19405           done = true;
19406           break;
19407         }
19408     }
19409   /* It is not uncommon to see programs mechanically, erroneously, use
19410      the 'typename' keyword to denote (dependent) qualified types
19411      as base classes.  */
19412   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
19413     {
19414       token = cp_lexer_peek_token (parser->lexer);
19415       if (!processing_template_decl)
19416         error_at (token->location,
19417                   "keyword %<typename%> not allowed outside of templates");
19418       else
19419         error_at (token->location,
19420                   "keyword %<typename%> not allowed in this context "
19421                   "(the base class is implicitly a type)");
19422       cp_lexer_consume_token (parser->lexer);
19423     }
19424
19425   /* Look for the optional `::' operator.  */
19426   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
19427   /* Look for the nested-name-specifier.  The simplest way to
19428      implement:
19429
19430        [temp.res]
19431
19432        The keyword `typename' is not permitted in a base-specifier or
19433        mem-initializer; in these contexts a qualified name that
19434        depends on a template-parameter is implicitly assumed to be a
19435        type name.
19436
19437      is to pretend that we have seen the `typename' keyword at this
19438      point.  */
19439   cp_parser_nested_name_specifier_opt (parser,
19440                                        /*typename_keyword_p=*/true,
19441                                        /*check_dependency_p=*/true,
19442                                        typename_type,
19443                                        /*is_declaration=*/true);
19444   /* If the base class is given by a qualified name, assume that names
19445      we see are type names or templates, as appropriate.  */
19446   class_scope_p = (parser->scope && TYPE_P (parser->scope));
19447   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
19448
19449   if (!parser->scope
19450       && cp_lexer_next_token_is_decltype (parser->lexer))
19451     /* DR 950 allows decltype as a base-specifier.  */
19452     type = cp_parser_decltype (parser);
19453   else
19454     {
19455       /* Otherwise, look for the class-name.  */
19456       type = cp_parser_class_name (parser,
19457                                    class_scope_p,
19458                                    template_p,
19459                                    typename_type,
19460                                    /*check_dependency_p=*/true,
19461                                    /*class_head_p=*/false,
19462                                    /*is_declaration=*/true);
19463       type = TREE_TYPE (type);
19464     }
19465
19466   if (type == error_mark_node)
19467     return error_mark_node;
19468
19469   return finish_base_specifier (type, access, virtual_p);
19470 }
19471
19472 /* Exception handling [gram.exception] */
19473
19474 /* Parse an (optional) exception-specification.
19475
19476    exception-specification:
19477      throw ( type-id-list [opt] )
19478
19479    Returns a TREE_LIST representing the exception-specification.  The
19480    TREE_VALUE of each node is a type.  */
19481
19482 static tree
19483 cp_parser_exception_specification_opt (cp_parser* parser)
19484 {
19485   cp_token *token;
19486   tree type_id_list;
19487   const char *saved_message;
19488
19489   /* Peek at the next token.  */
19490   token = cp_lexer_peek_token (parser->lexer);
19491
19492   /* Is it a noexcept-specification?  */
19493   if (cp_parser_is_keyword (token, RID_NOEXCEPT))
19494     {
19495       tree expr;
19496       cp_lexer_consume_token (parser->lexer);
19497
19498       if (cp_lexer_peek_token (parser->lexer)->type == CPP_OPEN_PAREN)
19499         {
19500           cp_lexer_consume_token (parser->lexer);
19501
19502           /* Types may not be defined in an exception-specification.  */
19503           saved_message = parser->type_definition_forbidden_message;
19504           parser->type_definition_forbidden_message
19505             = G_("types may not be defined in an exception-specification");
19506
19507           expr = cp_parser_constant_expression (parser, false, NULL);
19508
19509           /* Restore the saved message.  */
19510           parser->type_definition_forbidden_message = saved_message;
19511
19512           cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19513         }
19514       else
19515         expr = boolean_true_node;
19516
19517       return build_noexcept_spec (expr, tf_warning_or_error);
19518     }
19519
19520   /* If it's not `throw', then there's no exception-specification.  */
19521   if (!cp_parser_is_keyword (token, RID_THROW))
19522     return NULL_TREE;
19523
19524 #if 0
19525   /* Enable this once a lot of code has transitioned to noexcept?  */
19526   if (cxx_dialect == cxx0x && !in_system_header)
19527     warning (OPT_Wdeprecated, "dynamic exception specifications are "
19528              "deprecated in C++0x; use %<noexcept%> instead");
19529 #endif
19530
19531   /* Consume the `throw'.  */
19532   cp_lexer_consume_token (parser->lexer);
19533
19534   /* Look for the `('.  */
19535   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19536
19537   /* Peek at the next token.  */
19538   token = cp_lexer_peek_token (parser->lexer);
19539   /* If it's not a `)', then there is a type-id-list.  */
19540   if (token->type != CPP_CLOSE_PAREN)
19541     {
19542       /* Types may not be defined in an exception-specification.  */
19543       saved_message = parser->type_definition_forbidden_message;
19544       parser->type_definition_forbidden_message
19545         = G_("types may not be defined in an exception-specification");
19546       /* Parse the type-id-list.  */
19547       type_id_list = cp_parser_type_id_list (parser);
19548       /* Restore the saved message.  */
19549       parser->type_definition_forbidden_message = saved_message;
19550     }
19551   else
19552     type_id_list = empty_except_spec;
19553
19554   /* Look for the `)'.  */
19555   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19556
19557   return type_id_list;
19558 }
19559
19560 /* Parse an (optional) type-id-list.
19561
19562    type-id-list:
19563      type-id ... [opt]
19564      type-id-list , type-id ... [opt]
19565
19566    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
19567    in the order that the types were presented.  */
19568
19569 static tree
19570 cp_parser_type_id_list (cp_parser* parser)
19571 {
19572   tree types = NULL_TREE;
19573
19574   while (true)
19575     {
19576       cp_token *token;
19577       tree type;
19578
19579       /* Get the next type-id.  */
19580       type = cp_parser_type_id (parser);
19581       /* Parse the optional ellipsis. */
19582       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
19583         {
19584           /* Consume the `...'. */
19585           cp_lexer_consume_token (parser->lexer);
19586
19587           /* Turn the type into a pack expansion expression. */
19588           type = make_pack_expansion (type);
19589         }
19590       /* Add it to the list.  */
19591       types = add_exception_specifier (types, type, /*complain=*/1);
19592       /* Peek at the next token.  */
19593       token = cp_lexer_peek_token (parser->lexer);
19594       /* If it is not a `,', we are done.  */
19595       if (token->type != CPP_COMMA)
19596         break;
19597       /* Consume the `,'.  */
19598       cp_lexer_consume_token (parser->lexer);
19599     }
19600
19601   return nreverse (types);
19602 }
19603
19604 /* Parse a try-block.
19605
19606    try-block:
19607      try compound-statement handler-seq  */
19608
19609 static tree
19610 cp_parser_try_block (cp_parser* parser)
19611 {
19612   tree try_block;
19613
19614   cp_parser_require_keyword (parser, RID_TRY, RT_TRY);
19615   try_block = begin_try_block ();
19616   cp_parser_compound_statement (parser, NULL, true, false);
19617   finish_try_block (try_block);
19618   cp_parser_handler_seq (parser);
19619   finish_handler_sequence (try_block);
19620
19621   return try_block;
19622 }
19623
19624 /* Parse a function-try-block.
19625
19626    function-try-block:
19627      try ctor-initializer [opt] function-body handler-seq  */
19628
19629 static bool
19630 cp_parser_function_try_block (cp_parser* parser)
19631 {
19632   tree compound_stmt;
19633   tree try_block;
19634   bool ctor_initializer_p;
19635
19636   /* Look for the `try' keyword.  */
19637   if (!cp_parser_require_keyword (parser, RID_TRY, RT_TRY))
19638     return false;
19639   /* Let the rest of the front end know where we are.  */
19640   try_block = begin_function_try_block (&compound_stmt);
19641   /* Parse the function-body.  */
19642   ctor_initializer_p
19643     = cp_parser_ctor_initializer_opt_and_function_body (parser);
19644   /* We're done with the `try' part.  */
19645   finish_function_try_block (try_block);
19646   /* Parse the handlers.  */
19647   cp_parser_handler_seq (parser);
19648   /* We're done with the handlers.  */
19649   finish_function_handler_sequence (try_block, compound_stmt);
19650
19651   return ctor_initializer_p;
19652 }
19653
19654 /* Parse a handler-seq.
19655
19656    handler-seq:
19657      handler handler-seq [opt]  */
19658
19659 static void
19660 cp_parser_handler_seq (cp_parser* parser)
19661 {
19662   while (true)
19663     {
19664       cp_token *token;
19665
19666       /* Parse the handler.  */
19667       cp_parser_handler (parser);
19668       /* Peek at the next token.  */
19669       token = cp_lexer_peek_token (parser->lexer);
19670       /* If it's not `catch' then there are no more handlers.  */
19671       if (!cp_parser_is_keyword (token, RID_CATCH))
19672         break;
19673     }
19674 }
19675
19676 /* Parse a handler.
19677
19678    handler:
19679      catch ( exception-declaration ) compound-statement  */
19680
19681 static void
19682 cp_parser_handler (cp_parser* parser)
19683 {
19684   tree handler;
19685   tree declaration;
19686
19687   cp_parser_require_keyword (parser, RID_CATCH, RT_CATCH);
19688   handler = begin_handler ();
19689   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19690   declaration = cp_parser_exception_declaration (parser);
19691   finish_handler_parms (declaration, handler);
19692   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19693   cp_parser_compound_statement (parser, NULL, false, false);
19694   finish_handler (handler);
19695 }
19696
19697 /* Parse an exception-declaration.
19698
19699    exception-declaration:
19700      type-specifier-seq declarator
19701      type-specifier-seq abstract-declarator
19702      type-specifier-seq
19703      ...
19704
19705    Returns a VAR_DECL for the declaration, or NULL_TREE if the
19706    ellipsis variant is used.  */
19707
19708 static tree
19709 cp_parser_exception_declaration (cp_parser* parser)
19710 {
19711   cp_decl_specifier_seq type_specifiers;
19712   cp_declarator *declarator;
19713   const char *saved_message;
19714
19715   /* If it's an ellipsis, it's easy to handle.  */
19716   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
19717     {
19718       /* Consume the `...' token.  */
19719       cp_lexer_consume_token (parser->lexer);
19720       return NULL_TREE;
19721     }
19722
19723   /* Types may not be defined in exception-declarations.  */
19724   saved_message = parser->type_definition_forbidden_message;
19725   parser->type_definition_forbidden_message
19726     = G_("types may not be defined in exception-declarations");
19727
19728   /* Parse the type-specifier-seq.  */
19729   cp_parser_type_specifier_seq (parser, /*is_declaration=*/true,
19730                                 /*is_trailing_return=*/false,
19731                                 &type_specifiers);
19732   /* If it's a `)', then there is no declarator.  */
19733   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
19734     declarator = NULL;
19735   else
19736     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
19737                                        /*ctor_dtor_or_conv_p=*/NULL,
19738                                        /*parenthesized_p=*/NULL,
19739                                        /*member_p=*/false);
19740
19741   /* Restore the saved message.  */
19742   parser->type_definition_forbidden_message = saved_message;
19743
19744   if (!type_specifiers.any_specifiers_p)
19745     return error_mark_node;
19746
19747   return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
19748 }
19749
19750 /* Parse a throw-expression.
19751
19752    throw-expression:
19753      throw assignment-expression [opt]
19754
19755    Returns a THROW_EXPR representing the throw-expression.  */
19756
19757 static tree
19758 cp_parser_throw_expression (cp_parser* parser)
19759 {
19760   tree expression;
19761   cp_token* token;
19762
19763   cp_parser_require_keyword (parser, RID_THROW, RT_THROW);
19764   token = cp_lexer_peek_token (parser->lexer);
19765   /* Figure out whether or not there is an assignment-expression
19766      following the "throw" keyword.  */
19767   if (token->type == CPP_COMMA
19768       || token->type == CPP_SEMICOLON
19769       || token->type == CPP_CLOSE_PAREN
19770       || token->type == CPP_CLOSE_SQUARE
19771       || token->type == CPP_CLOSE_BRACE
19772       || token->type == CPP_COLON)
19773     expression = NULL_TREE;
19774   else
19775     expression = cp_parser_assignment_expression (parser,
19776                                                   /*cast_p=*/false, NULL);
19777
19778   return build_throw (expression);
19779 }
19780
19781 /* GNU Extensions */
19782
19783 /* Parse an (optional) asm-specification.
19784
19785    asm-specification:
19786      asm ( string-literal )
19787
19788    If the asm-specification is present, returns a STRING_CST
19789    corresponding to the string-literal.  Otherwise, returns
19790    NULL_TREE.  */
19791
19792 static tree
19793 cp_parser_asm_specification_opt (cp_parser* parser)
19794 {
19795   cp_token *token;
19796   tree asm_specification;
19797
19798   /* Peek at the next token.  */
19799   token = cp_lexer_peek_token (parser->lexer);
19800   /* If the next token isn't the `asm' keyword, then there's no
19801      asm-specification.  */
19802   if (!cp_parser_is_keyword (token, RID_ASM))
19803     return NULL_TREE;
19804
19805   /* Consume the `asm' token.  */
19806   cp_lexer_consume_token (parser->lexer);
19807   /* Look for the `('.  */
19808   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19809
19810   /* Look for the string-literal.  */
19811   asm_specification = cp_parser_string_literal (parser, false, false);
19812
19813   /* Look for the `)'.  */
19814   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19815
19816   return asm_specification;
19817 }
19818
19819 /* Parse an asm-operand-list.
19820
19821    asm-operand-list:
19822      asm-operand
19823      asm-operand-list , asm-operand
19824
19825    asm-operand:
19826      string-literal ( expression )
19827      [ string-literal ] string-literal ( expression )
19828
19829    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
19830    each node is the expression.  The TREE_PURPOSE is itself a
19831    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
19832    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
19833    is a STRING_CST for the string literal before the parenthesis. Returns
19834    ERROR_MARK_NODE if any of the operands are invalid.  */
19835
19836 static tree
19837 cp_parser_asm_operand_list (cp_parser* parser)
19838 {
19839   tree asm_operands = NULL_TREE;
19840   bool invalid_operands = false;
19841
19842   while (true)
19843     {
19844       tree string_literal;
19845       tree expression;
19846       tree name;
19847
19848       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
19849         {
19850           /* Consume the `[' token.  */
19851           cp_lexer_consume_token (parser->lexer);
19852           /* Read the operand name.  */
19853           name = cp_parser_identifier (parser);
19854           if (name != error_mark_node)
19855             name = build_string (IDENTIFIER_LENGTH (name),
19856                                  IDENTIFIER_POINTER (name));
19857           /* Look for the closing `]'.  */
19858           cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
19859         }
19860       else
19861         name = NULL_TREE;
19862       /* Look for the string-literal.  */
19863       string_literal = cp_parser_string_literal (parser, false, false);
19864
19865       /* Look for the `('.  */
19866       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19867       /* Parse the expression.  */
19868       expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
19869       /* Look for the `)'.  */
19870       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19871
19872       if (name == error_mark_node 
19873           || string_literal == error_mark_node 
19874           || expression == error_mark_node)
19875         invalid_operands = true;
19876
19877       /* Add this operand to the list.  */
19878       asm_operands = tree_cons (build_tree_list (name, string_literal),
19879                                 expression,
19880                                 asm_operands);
19881       /* If the next token is not a `,', there are no more
19882          operands.  */
19883       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
19884         break;
19885       /* Consume the `,'.  */
19886       cp_lexer_consume_token (parser->lexer);
19887     }
19888
19889   return invalid_operands ? error_mark_node : nreverse (asm_operands);
19890 }
19891
19892 /* Parse an asm-clobber-list.
19893
19894    asm-clobber-list:
19895      string-literal
19896      asm-clobber-list , string-literal
19897
19898    Returns a TREE_LIST, indicating the clobbers in the order that they
19899    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
19900
19901 static tree
19902 cp_parser_asm_clobber_list (cp_parser* parser)
19903 {
19904   tree clobbers = NULL_TREE;
19905
19906   while (true)
19907     {
19908       tree string_literal;
19909
19910       /* Look for the string literal.  */
19911       string_literal = cp_parser_string_literal (parser, false, false);
19912       /* Add it to the list.  */
19913       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
19914       /* If the next token is not a `,', then the list is
19915          complete.  */
19916       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
19917         break;
19918       /* Consume the `,' token.  */
19919       cp_lexer_consume_token (parser->lexer);
19920     }
19921
19922   return clobbers;
19923 }
19924
19925 /* Parse an asm-label-list.
19926
19927    asm-label-list:
19928      identifier
19929      asm-label-list , identifier
19930
19931    Returns a TREE_LIST, indicating the labels in the order that they
19932    appeared.  The TREE_VALUE of each node is a label.  */
19933
19934 static tree
19935 cp_parser_asm_label_list (cp_parser* parser)
19936 {
19937   tree labels = NULL_TREE;
19938
19939   while (true)
19940     {
19941       tree identifier, label, name;
19942
19943       /* Look for the identifier.  */
19944       identifier = cp_parser_identifier (parser);
19945       if (!error_operand_p (identifier))
19946         {
19947           label = lookup_label (identifier);
19948           if (TREE_CODE (label) == LABEL_DECL)
19949             {
19950               TREE_USED (label) = 1;
19951               check_goto (label);
19952               name = build_string (IDENTIFIER_LENGTH (identifier),
19953                                    IDENTIFIER_POINTER (identifier));
19954               labels = tree_cons (name, label, labels);
19955             }
19956         }
19957       /* If the next token is not a `,', then the list is
19958          complete.  */
19959       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
19960         break;
19961       /* Consume the `,' token.  */
19962       cp_lexer_consume_token (parser->lexer);
19963     }
19964
19965   return nreverse (labels);
19966 }
19967
19968 /* Parse an (optional) series of attributes.
19969
19970    attributes:
19971      attributes attribute
19972
19973    attribute:
19974      __attribute__ (( attribute-list [opt] ))
19975
19976    The return value is as for cp_parser_attribute_list.  */
19977
19978 static tree
19979 cp_parser_attributes_opt (cp_parser* parser)
19980 {
19981   tree attributes = NULL_TREE;
19982
19983   while (true)
19984     {
19985       cp_token *token;
19986       tree attribute_list;
19987
19988       /* Peek at the next token.  */
19989       token = cp_lexer_peek_token (parser->lexer);
19990       /* If it's not `__attribute__', then we're done.  */
19991       if (token->keyword != RID_ATTRIBUTE)
19992         break;
19993
19994       /* Consume the `__attribute__' keyword.  */
19995       cp_lexer_consume_token (parser->lexer);
19996       /* Look for the two `(' tokens.  */
19997       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19998       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19999
20000       /* Peek at the next token.  */
20001       token = cp_lexer_peek_token (parser->lexer);
20002       if (token->type != CPP_CLOSE_PAREN)
20003         /* Parse the attribute-list.  */
20004         attribute_list = cp_parser_attribute_list (parser);
20005       else
20006         /* If the next token is a `)', then there is no attribute
20007            list.  */
20008         attribute_list = NULL;
20009
20010       /* Look for the two `)' tokens.  */
20011       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
20012       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
20013
20014       /* Add these new attributes to the list.  */
20015       attributes = chainon (attributes, attribute_list);
20016     }
20017
20018   return attributes;
20019 }
20020
20021 /* Parse an attribute-list.
20022
20023    attribute-list:
20024      attribute
20025      attribute-list , attribute
20026
20027    attribute:
20028      identifier
20029      identifier ( identifier )
20030      identifier ( identifier , expression-list )
20031      identifier ( expression-list )
20032
20033    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
20034    to an attribute.  The TREE_PURPOSE of each node is the identifier
20035    indicating which attribute is in use.  The TREE_VALUE represents
20036    the arguments, if any.  */
20037
20038 static tree
20039 cp_parser_attribute_list (cp_parser* parser)
20040 {
20041   tree attribute_list = NULL_TREE;
20042   bool save_translate_strings_p = parser->translate_strings_p;
20043
20044   parser->translate_strings_p = false;
20045   while (true)
20046     {
20047       cp_token *token;
20048       tree identifier;
20049       tree attribute;
20050
20051       /* Look for the identifier.  We also allow keywords here; for
20052          example `__attribute__ ((const))' is legal.  */
20053       token = cp_lexer_peek_token (parser->lexer);
20054       if (token->type == CPP_NAME
20055           || token->type == CPP_KEYWORD)
20056         {
20057           tree arguments = NULL_TREE;
20058
20059           /* Consume the token.  */
20060           token = cp_lexer_consume_token (parser->lexer);
20061
20062           /* Save away the identifier that indicates which attribute
20063              this is.  */
20064           identifier = (token->type == CPP_KEYWORD) 
20065             /* For keywords, use the canonical spelling, not the
20066                parsed identifier.  */
20067             ? ridpointers[(int) token->keyword]
20068             : token->u.value;
20069           
20070           attribute = build_tree_list (identifier, NULL_TREE);
20071
20072           /* Peek at the next token.  */
20073           token = cp_lexer_peek_token (parser->lexer);
20074           /* If it's an `(', then parse the attribute arguments.  */
20075           if (token->type == CPP_OPEN_PAREN)
20076             {
20077               VEC(tree,gc) *vec;
20078               int attr_flag = (attribute_takes_identifier_p (identifier)
20079                                ? id_attr : normal_attr);
20080               vec = cp_parser_parenthesized_expression_list
20081                     (parser, attr_flag, /*cast_p=*/false,
20082                      /*allow_expansion_p=*/false,
20083                      /*non_constant_p=*/NULL);
20084               if (vec == NULL)
20085                 arguments = error_mark_node;
20086               else
20087                 {
20088                   arguments = build_tree_list_vec (vec);
20089                   release_tree_vector (vec);
20090                 }
20091               /* Save the arguments away.  */
20092               TREE_VALUE (attribute) = arguments;
20093             }
20094
20095           if (arguments != error_mark_node)
20096             {
20097               /* Add this attribute to the list.  */
20098               TREE_CHAIN (attribute) = attribute_list;
20099               attribute_list = attribute;
20100             }
20101
20102           token = cp_lexer_peek_token (parser->lexer);
20103         }
20104       /* Now, look for more attributes.  If the next token isn't a
20105          `,', we're done.  */
20106       if (token->type != CPP_COMMA)
20107         break;
20108
20109       /* Consume the comma and keep going.  */
20110       cp_lexer_consume_token (parser->lexer);
20111     }
20112   parser->translate_strings_p = save_translate_strings_p;
20113
20114   /* We built up the list in reverse order.  */
20115   return nreverse (attribute_list);
20116 }
20117
20118 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
20119    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
20120    current value of the PEDANTIC flag, regardless of whether or not
20121    the `__extension__' keyword is present.  The caller is responsible
20122    for restoring the value of the PEDANTIC flag.  */
20123
20124 static bool
20125 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
20126 {
20127   /* Save the old value of the PEDANTIC flag.  */
20128   *saved_pedantic = pedantic;
20129
20130   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
20131     {
20132       /* Consume the `__extension__' token.  */
20133       cp_lexer_consume_token (parser->lexer);
20134       /* We're not being pedantic while the `__extension__' keyword is
20135          in effect.  */
20136       pedantic = 0;
20137
20138       return true;
20139     }
20140
20141   return false;
20142 }
20143
20144 /* Parse a label declaration.
20145
20146    label-declaration:
20147      __label__ label-declarator-seq ;
20148
20149    label-declarator-seq:
20150      identifier , label-declarator-seq
20151      identifier  */
20152
20153 static void
20154 cp_parser_label_declaration (cp_parser* parser)
20155 {
20156   /* Look for the `__label__' keyword.  */
20157   cp_parser_require_keyword (parser, RID_LABEL, RT_LABEL);
20158
20159   while (true)
20160     {
20161       tree identifier;
20162
20163       /* Look for an identifier.  */
20164       identifier = cp_parser_identifier (parser);
20165       /* If we failed, stop.  */
20166       if (identifier == error_mark_node)
20167         break;
20168       /* Declare it as a label.  */
20169       finish_label_decl (identifier);
20170       /* If the next token is a `;', stop.  */
20171       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
20172         break;
20173       /* Look for the `,' separating the label declarations.  */
20174       cp_parser_require (parser, CPP_COMMA, RT_COMMA);
20175     }
20176
20177   /* Look for the final `;'.  */
20178   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
20179 }
20180
20181 /* Support Functions */
20182
20183 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
20184    NAME should have one of the representations used for an
20185    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
20186    is returned.  If PARSER->SCOPE is a dependent type, then a
20187    SCOPE_REF is returned.
20188
20189    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
20190    returned; the name was already resolved when the TEMPLATE_ID_EXPR
20191    was formed.  Abstractly, such entities should not be passed to this
20192    function, because they do not need to be looked up, but it is
20193    simpler to check for this special case here, rather than at the
20194    call-sites.
20195
20196    In cases not explicitly covered above, this function returns a
20197    DECL, OVERLOAD, or baselink representing the result of the lookup.
20198    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
20199    is returned.
20200
20201    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
20202    (e.g., "struct") that was used.  In that case bindings that do not
20203    refer to types are ignored.
20204
20205    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
20206    ignored.
20207
20208    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
20209    are ignored.
20210
20211    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
20212    types.
20213
20214    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
20215    TREE_LIST of candidates if name-lookup results in an ambiguity, and
20216    NULL_TREE otherwise.  */
20217
20218 static tree
20219 cp_parser_lookup_name (cp_parser *parser, tree name,
20220                        enum tag_types tag_type,
20221                        bool is_template,
20222                        bool is_namespace,
20223                        bool check_dependency,
20224                        tree *ambiguous_decls,
20225                        location_t name_location)
20226 {
20227   int flags = 0;
20228   tree decl;
20229   tree object_type = parser->context->object_type;
20230
20231   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
20232     flags |= LOOKUP_COMPLAIN;
20233
20234   /* Assume that the lookup will be unambiguous.  */
20235   if (ambiguous_decls)
20236     *ambiguous_decls = NULL_TREE;
20237
20238   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
20239      no longer valid.  Note that if we are parsing tentatively, and
20240      the parse fails, OBJECT_TYPE will be automatically restored.  */
20241   parser->context->object_type = NULL_TREE;
20242
20243   if (name == error_mark_node)
20244     return error_mark_node;
20245
20246   /* A template-id has already been resolved; there is no lookup to
20247      do.  */
20248   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
20249     return name;
20250   if (BASELINK_P (name))
20251     {
20252       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
20253                   == TEMPLATE_ID_EXPR);
20254       return name;
20255     }
20256
20257   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
20258      it should already have been checked to make sure that the name
20259      used matches the type being destroyed.  */
20260   if (TREE_CODE (name) == BIT_NOT_EXPR)
20261     {
20262       tree type;
20263
20264       /* Figure out to which type this destructor applies.  */
20265       if (parser->scope)
20266         type = parser->scope;
20267       else if (object_type)
20268         type = object_type;
20269       else
20270         type = current_class_type;
20271       /* If that's not a class type, there is no destructor.  */
20272       if (!type || !CLASS_TYPE_P (type))
20273         return error_mark_node;
20274       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
20275         lazily_declare_fn (sfk_destructor, type);
20276       if (!CLASSTYPE_DESTRUCTORS (type))
20277           return error_mark_node;
20278       /* If it was a class type, return the destructor.  */
20279       return CLASSTYPE_DESTRUCTORS (type);
20280     }
20281
20282   /* By this point, the NAME should be an ordinary identifier.  If
20283      the id-expression was a qualified name, the qualifying scope is
20284      stored in PARSER->SCOPE at this point.  */
20285   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
20286
20287   /* Perform the lookup.  */
20288   if (parser->scope)
20289     {
20290       bool dependent_p;
20291
20292       if (parser->scope == error_mark_node)
20293         return error_mark_node;
20294
20295       /* If the SCOPE is dependent, the lookup must be deferred until
20296          the template is instantiated -- unless we are explicitly
20297          looking up names in uninstantiated templates.  Even then, we
20298          cannot look up the name if the scope is not a class type; it
20299          might, for example, be a template type parameter.  */
20300       dependent_p = (TYPE_P (parser->scope)
20301                      && dependent_scope_p (parser->scope));
20302       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
20303           && dependent_p)
20304         /* Defer lookup.  */
20305         decl = error_mark_node;
20306       else
20307         {
20308           tree pushed_scope = NULL_TREE;
20309
20310           /* If PARSER->SCOPE is a dependent type, then it must be a
20311              class type, and we must not be checking dependencies;
20312              otherwise, we would have processed this lookup above.  So
20313              that PARSER->SCOPE is not considered a dependent base by
20314              lookup_member, we must enter the scope here.  */
20315           if (dependent_p)
20316             pushed_scope = push_scope (parser->scope);
20317
20318           /* If the PARSER->SCOPE is a template specialization, it
20319              may be instantiated during name lookup.  In that case,
20320              errors may be issued.  Even if we rollback the current
20321              tentative parse, those errors are valid.  */
20322           decl = lookup_qualified_name (parser->scope, name,
20323                                         tag_type != none_type,
20324                                         /*complain=*/true);
20325
20326           /* 3.4.3.1: In a lookup in which the constructor is an acceptable
20327              lookup result and the nested-name-specifier nominates a class C:
20328                * if the name specified after the nested-name-specifier, when
20329                looked up in C, is the injected-class-name of C (Clause 9), or
20330                * if the name specified after the nested-name-specifier is the
20331                same as the identifier or the simple-template-id's template-
20332                name in the last component of the nested-name-specifier,
20333              the name is instead considered to name the constructor of
20334              class C. [ Note: for example, the constructor is not an
20335              acceptable lookup result in an elaborated-type-specifier so
20336              the constructor would not be used in place of the
20337              injected-class-name. --end note ] Such a constructor name
20338              shall be used only in the declarator-id of a declaration that
20339              names a constructor or in a using-declaration.  */
20340           if (tag_type == none_type
20341               && DECL_SELF_REFERENCE_P (decl)
20342               && same_type_p (DECL_CONTEXT (decl), parser->scope))
20343             decl = lookup_qualified_name (parser->scope, ctor_identifier,
20344                                           tag_type != none_type,
20345                                           /*complain=*/true);
20346
20347           /* If we have a single function from a using decl, pull it out.  */
20348           if (TREE_CODE (decl) == OVERLOAD
20349               && !really_overloaded_fn (decl))
20350             decl = OVL_FUNCTION (decl);
20351
20352           if (pushed_scope)
20353             pop_scope (pushed_scope);
20354         }
20355
20356       /* If the scope is a dependent type and either we deferred lookup or
20357          we did lookup but didn't find the name, rememeber the name.  */
20358       if (decl == error_mark_node && TYPE_P (parser->scope)
20359           && dependent_type_p (parser->scope))
20360         {
20361           if (tag_type)
20362             {
20363               tree type;
20364
20365               /* The resolution to Core Issue 180 says that `struct
20366                  A::B' should be considered a type-name, even if `A'
20367                  is dependent.  */
20368               type = make_typename_type (parser->scope, name, tag_type,
20369                                          /*complain=*/tf_error);
20370               decl = TYPE_NAME (type);
20371             }
20372           else if (is_template
20373                    && (cp_parser_next_token_ends_template_argument_p (parser)
20374                        || cp_lexer_next_token_is (parser->lexer,
20375                                                   CPP_CLOSE_PAREN)))
20376             decl = make_unbound_class_template (parser->scope,
20377                                                 name, NULL_TREE,
20378                                                 /*complain=*/tf_error);
20379           else
20380             decl = build_qualified_name (/*type=*/NULL_TREE,
20381                                          parser->scope, name,
20382                                          is_template);
20383         }
20384       parser->qualifying_scope = parser->scope;
20385       parser->object_scope = NULL_TREE;
20386     }
20387   else if (object_type)
20388     {
20389       tree object_decl = NULL_TREE;
20390       /* Look up the name in the scope of the OBJECT_TYPE, unless the
20391          OBJECT_TYPE is not a class.  */
20392       if (CLASS_TYPE_P (object_type))
20393         /* If the OBJECT_TYPE is a template specialization, it may
20394            be instantiated during name lookup.  In that case, errors
20395            may be issued.  Even if we rollback the current tentative
20396            parse, those errors are valid.  */
20397         object_decl = lookup_member (object_type,
20398                                      name,
20399                                      /*protect=*/0,
20400                                      tag_type != none_type);
20401       /* Look it up in the enclosing context, too.  */
20402       decl = lookup_name_real (name, tag_type != none_type,
20403                                /*nonclass=*/0,
20404                                /*block_p=*/true, is_namespace, flags);
20405       parser->object_scope = object_type;
20406       parser->qualifying_scope = NULL_TREE;
20407       if (object_decl)
20408         decl = object_decl;
20409     }
20410   else
20411     {
20412       decl = lookup_name_real (name, tag_type != none_type,
20413                                /*nonclass=*/0,
20414                                /*block_p=*/true, is_namespace, flags);
20415       parser->qualifying_scope = NULL_TREE;
20416       parser->object_scope = NULL_TREE;
20417     }
20418
20419   /* If the lookup failed, let our caller know.  */
20420   if (!decl || decl == error_mark_node)
20421     return error_mark_node;
20422
20423   /* Pull out the template from an injected-class-name (or multiple).  */
20424   if (is_template)
20425     decl = maybe_get_template_decl_from_type_decl (decl);
20426
20427   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
20428   if (TREE_CODE (decl) == TREE_LIST)
20429     {
20430       if (ambiguous_decls)
20431         *ambiguous_decls = decl;
20432       /* The error message we have to print is too complicated for
20433          cp_parser_error, so we incorporate its actions directly.  */
20434       if (!cp_parser_simulate_error (parser))
20435         {
20436           error_at (name_location, "reference to %qD is ambiguous",
20437                     name);
20438           print_candidates (decl);
20439         }
20440       return error_mark_node;
20441     }
20442
20443   gcc_assert (DECL_P (decl)
20444               || TREE_CODE (decl) == OVERLOAD
20445               || TREE_CODE (decl) == SCOPE_REF
20446               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
20447               || BASELINK_P (decl));
20448
20449   /* If we have resolved the name of a member declaration, check to
20450      see if the declaration is accessible.  When the name resolves to
20451      set of overloaded functions, accessibility is checked when
20452      overload resolution is done.
20453
20454      During an explicit instantiation, access is not checked at all,
20455      as per [temp.explicit].  */
20456   if (DECL_P (decl))
20457     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
20458
20459   maybe_record_typedef_use (decl);
20460
20461   return decl;
20462 }
20463
20464 /* Like cp_parser_lookup_name, but for use in the typical case where
20465    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
20466    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
20467
20468 static tree
20469 cp_parser_lookup_name_simple (cp_parser* parser, tree name, location_t location)
20470 {
20471   return cp_parser_lookup_name (parser, name,
20472                                 none_type,
20473                                 /*is_template=*/false,
20474                                 /*is_namespace=*/false,
20475                                 /*check_dependency=*/true,
20476                                 /*ambiguous_decls=*/NULL,
20477                                 location);
20478 }
20479
20480 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
20481    the current context, return the TYPE_DECL.  If TAG_NAME_P is
20482    true, the DECL indicates the class being defined in a class-head,
20483    or declared in an elaborated-type-specifier.
20484
20485    Otherwise, return DECL.  */
20486
20487 static tree
20488 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
20489 {
20490   /* If the TEMPLATE_DECL is being declared as part of a class-head,
20491      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
20492
20493        struct A {
20494          template <typename T> struct B;
20495        };
20496
20497        template <typename T> struct A::B {};
20498
20499      Similarly, in an elaborated-type-specifier:
20500
20501        namespace N { struct X{}; }
20502
20503        struct A {
20504          template <typename T> friend struct N::X;
20505        };
20506
20507      However, if the DECL refers to a class type, and we are in
20508      the scope of the class, then the name lookup automatically
20509      finds the TYPE_DECL created by build_self_reference rather
20510      than a TEMPLATE_DECL.  For example, in:
20511
20512        template <class T> struct S {
20513          S s;
20514        };
20515
20516      there is no need to handle such case.  */
20517
20518   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
20519     return DECL_TEMPLATE_RESULT (decl);
20520
20521   return decl;
20522 }
20523
20524 /* If too many, or too few, template-parameter lists apply to the
20525    declarator, issue an error message.  Returns TRUE if all went well,
20526    and FALSE otherwise.  */
20527
20528 static bool
20529 cp_parser_check_declarator_template_parameters (cp_parser* parser,
20530                                                 cp_declarator *declarator,
20531                                                 location_t declarator_location)
20532 {
20533   unsigned num_templates;
20534
20535   /* We haven't seen any classes that involve template parameters yet.  */
20536   num_templates = 0;
20537
20538   switch (declarator->kind)
20539     {
20540     case cdk_id:
20541       if (declarator->u.id.qualifying_scope)
20542         {
20543           tree scope;
20544
20545           scope = declarator->u.id.qualifying_scope;
20546
20547           while (scope && CLASS_TYPE_P (scope))
20548             {
20549               /* You're supposed to have one `template <...>'
20550                  for every template class, but you don't need one
20551                  for a full specialization.  For example:
20552
20553                  template <class T> struct S{};
20554                  template <> struct S<int> { void f(); };
20555                  void S<int>::f () {}
20556
20557                  is correct; there shouldn't be a `template <>' for
20558                  the definition of `S<int>::f'.  */
20559               if (!CLASSTYPE_TEMPLATE_INFO (scope))
20560                 /* If SCOPE does not have template information of any
20561                    kind, then it is not a template, nor is it nested
20562                    within a template.  */
20563                 break;
20564               if (explicit_class_specialization_p (scope))
20565                 break;
20566               if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
20567                 ++num_templates;
20568
20569               scope = TYPE_CONTEXT (scope);
20570             }
20571         }
20572       else if (TREE_CODE (declarator->u.id.unqualified_name)
20573                == TEMPLATE_ID_EXPR)
20574         /* If the DECLARATOR has the form `X<y>' then it uses one
20575            additional level of template parameters.  */
20576         ++num_templates;
20577
20578       return cp_parser_check_template_parameters 
20579         (parser, num_templates, declarator_location, declarator);
20580
20581
20582     case cdk_function:
20583     case cdk_array:
20584     case cdk_pointer:
20585     case cdk_reference:
20586     case cdk_ptrmem:
20587       return (cp_parser_check_declarator_template_parameters
20588               (parser, declarator->declarator, declarator_location));
20589
20590     case cdk_error:
20591       return true;
20592
20593     default:
20594       gcc_unreachable ();
20595     }
20596   return false;
20597 }
20598
20599 /* NUM_TEMPLATES were used in the current declaration.  If that is
20600    invalid, return FALSE and issue an error messages.  Otherwise,
20601    return TRUE.  If DECLARATOR is non-NULL, then we are checking a
20602    declarator and we can print more accurate diagnostics.  */
20603
20604 static bool
20605 cp_parser_check_template_parameters (cp_parser* parser,
20606                                      unsigned num_templates,
20607                                      location_t location,
20608                                      cp_declarator *declarator)
20609 {
20610   /* If there are the same number of template classes and parameter
20611      lists, that's OK.  */
20612   if (parser->num_template_parameter_lists == num_templates)
20613     return true;
20614   /* If there are more, but only one more, then we are referring to a
20615      member template.  That's OK too.  */
20616   if (parser->num_template_parameter_lists == num_templates + 1)
20617     return true;
20618   /* If there are more template classes than parameter lists, we have
20619      something like:
20620
20621        template <class T> void S<T>::R<T>::f ();  */
20622   if (parser->num_template_parameter_lists < num_templates)
20623     {
20624       if (declarator && !current_function_decl)
20625         error_at (location, "specializing member %<%T::%E%> "
20626                   "requires %<template<>%> syntax", 
20627                   declarator->u.id.qualifying_scope,
20628                   declarator->u.id.unqualified_name);
20629       else if (declarator)
20630         error_at (location, "invalid declaration of %<%T::%E%>",
20631                   declarator->u.id.qualifying_scope,
20632                   declarator->u.id.unqualified_name);
20633       else 
20634         error_at (location, "too few template-parameter-lists");
20635       return false;
20636     }
20637   /* Otherwise, there are too many template parameter lists.  We have
20638      something like:
20639
20640      template <class T> template <class U> void S::f();  */
20641   error_at (location, "too many template-parameter-lists");
20642   return false;
20643 }
20644
20645 /* Parse an optional `::' token indicating that the following name is
20646    from the global namespace.  If so, PARSER->SCOPE is set to the
20647    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
20648    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
20649    Returns the new value of PARSER->SCOPE, if the `::' token is
20650    present, and NULL_TREE otherwise.  */
20651
20652 static tree
20653 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
20654 {
20655   cp_token *token;
20656
20657   /* Peek at the next token.  */
20658   token = cp_lexer_peek_token (parser->lexer);
20659   /* If we're looking at a `::' token then we're starting from the
20660      global namespace, not our current location.  */
20661   if (token->type == CPP_SCOPE)
20662     {
20663       /* Consume the `::' token.  */
20664       cp_lexer_consume_token (parser->lexer);
20665       /* Set the SCOPE so that we know where to start the lookup.  */
20666       parser->scope = global_namespace;
20667       parser->qualifying_scope = global_namespace;
20668       parser->object_scope = NULL_TREE;
20669
20670       return parser->scope;
20671     }
20672   else if (!current_scope_valid_p)
20673     {
20674       parser->scope = NULL_TREE;
20675       parser->qualifying_scope = NULL_TREE;
20676       parser->object_scope = NULL_TREE;
20677     }
20678
20679   return NULL_TREE;
20680 }
20681
20682 /* Returns TRUE if the upcoming token sequence is the start of a
20683    constructor declarator.  If FRIEND_P is true, the declarator is
20684    preceded by the `friend' specifier.  */
20685
20686 static bool
20687 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
20688 {
20689   bool constructor_p;
20690   tree nested_name_specifier;
20691   cp_token *next_token;
20692
20693   /* The common case is that this is not a constructor declarator, so
20694      try to avoid doing lots of work if at all possible.  It's not
20695      valid declare a constructor at function scope.  */
20696   if (parser->in_function_body)
20697     return false;
20698   /* And only certain tokens can begin a constructor declarator.  */
20699   next_token = cp_lexer_peek_token (parser->lexer);
20700   if (next_token->type != CPP_NAME
20701       && next_token->type != CPP_SCOPE
20702       && next_token->type != CPP_NESTED_NAME_SPECIFIER
20703       && next_token->type != CPP_TEMPLATE_ID)
20704     return false;
20705
20706   /* Parse tentatively; we are going to roll back all of the tokens
20707      consumed here.  */
20708   cp_parser_parse_tentatively (parser);
20709   /* Assume that we are looking at a constructor declarator.  */
20710   constructor_p = true;
20711
20712   /* Look for the optional `::' operator.  */
20713   cp_parser_global_scope_opt (parser,
20714                               /*current_scope_valid_p=*/false);
20715   /* Look for the nested-name-specifier.  */
20716   nested_name_specifier
20717     = (cp_parser_nested_name_specifier_opt (parser,
20718                                             /*typename_keyword_p=*/false,
20719                                             /*check_dependency_p=*/false,
20720                                             /*type_p=*/false,
20721                                             /*is_declaration=*/false));
20722   /* Outside of a class-specifier, there must be a
20723      nested-name-specifier.  */
20724   if (!nested_name_specifier &&
20725       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
20726        || friend_p))
20727     constructor_p = false;
20728   else if (nested_name_specifier == error_mark_node)
20729     constructor_p = false;
20730
20731   /* If we have a class scope, this is easy; DR 147 says that S::S always
20732      names the constructor, and no other qualified name could.  */
20733   if (constructor_p && nested_name_specifier
20734       && CLASS_TYPE_P (nested_name_specifier))
20735     {
20736       tree id = cp_parser_unqualified_id (parser,
20737                                           /*template_keyword_p=*/false,
20738                                           /*check_dependency_p=*/false,
20739                                           /*declarator_p=*/true,
20740                                           /*optional_p=*/false);
20741       if (is_overloaded_fn (id))
20742         id = DECL_NAME (get_first_fn (id));
20743       if (!constructor_name_p (id, nested_name_specifier))
20744         constructor_p = false;
20745     }
20746   /* If we still think that this might be a constructor-declarator,
20747      look for a class-name.  */
20748   else if (constructor_p)
20749     {
20750       /* If we have:
20751
20752            template <typename T> struct S {
20753              S();
20754            };
20755
20756          we must recognize that the nested `S' names a class.  */
20757       tree type_decl;
20758       type_decl = cp_parser_class_name (parser,
20759                                         /*typename_keyword_p=*/false,
20760                                         /*template_keyword_p=*/false,
20761                                         none_type,
20762                                         /*check_dependency_p=*/false,
20763                                         /*class_head_p=*/false,
20764                                         /*is_declaration=*/false);
20765       /* If there was no class-name, then this is not a constructor.  */
20766       constructor_p = !cp_parser_error_occurred (parser);
20767
20768       /* If we're still considering a constructor, we have to see a `(',
20769          to begin the parameter-declaration-clause, followed by either a
20770          `)', an `...', or a decl-specifier.  We need to check for a
20771          type-specifier to avoid being fooled into thinking that:
20772
20773            S (f) (int);
20774
20775          is a constructor.  (It is actually a function named `f' that
20776          takes one parameter (of type `int') and returns a value of type
20777          `S'.  */
20778       if (constructor_p
20779           && !cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
20780         constructor_p = false;
20781
20782       if (constructor_p
20783           && cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
20784           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
20785           /* A parameter declaration begins with a decl-specifier,
20786              which is either the "attribute" keyword, a storage class
20787              specifier, or (usually) a type-specifier.  */
20788           && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
20789         {
20790           tree type;
20791           tree pushed_scope = NULL_TREE;
20792           unsigned saved_num_template_parameter_lists;
20793
20794           /* Names appearing in the type-specifier should be looked up
20795              in the scope of the class.  */
20796           if (current_class_type)
20797             type = NULL_TREE;
20798           else
20799             {
20800               type = TREE_TYPE (type_decl);
20801               if (TREE_CODE (type) == TYPENAME_TYPE)
20802                 {
20803                   type = resolve_typename_type (type,
20804                                                 /*only_current_p=*/false);
20805                   if (TREE_CODE (type) == TYPENAME_TYPE)
20806                     {
20807                       cp_parser_abort_tentative_parse (parser);
20808                       return false;
20809                     }
20810                 }
20811               pushed_scope = push_scope (type);
20812             }
20813
20814           /* Inside the constructor parameter list, surrounding
20815              template-parameter-lists do not apply.  */
20816           saved_num_template_parameter_lists
20817             = parser->num_template_parameter_lists;
20818           parser->num_template_parameter_lists = 0;
20819
20820           /* Look for the type-specifier.  */
20821           cp_parser_type_specifier (parser,
20822                                     CP_PARSER_FLAGS_NONE,
20823                                     /*decl_specs=*/NULL,
20824                                     /*is_declarator=*/true,
20825                                     /*declares_class_or_enum=*/NULL,
20826                                     /*is_cv_qualifier=*/NULL);
20827
20828           parser->num_template_parameter_lists
20829             = saved_num_template_parameter_lists;
20830
20831           /* Leave the scope of the class.  */
20832           if (pushed_scope)
20833             pop_scope (pushed_scope);
20834
20835           constructor_p = !cp_parser_error_occurred (parser);
20836         }
20837     }
20838
20839   /* We did not really want to consume any tokens.  */
20840   cp_parser_abort_tentative_parse (parser);
20841
20842   return constructor_p;
20843 }
20844
20845 /* Parse the definition of the function given by the DECL_SPECIFIERS,
20846    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
20847    they must be performed once we are in the scope of the function.
20848
20849    Returns the function defined.  */
20850
20851 static tree
20852 cp_parser_function_definition_from_specifiers_and_declarator
20853   (cp_parser* parser,
20854    cp_decl_specifier_seq *decl_specifiers,
20855    tree attributes,
20856    const cp_declarator *declarator)
20857 {
20858   tree fn;
20859   bool success_p;
20860
20861   /* Begin the function-definition.  */
20862   success_p = start_function (decl_specifiers, declarator, attributes);
20863
20864   /* The things we're about to see are not directly qualified by any
20865      template headers we've seen thus far.  */
20866   reset_specialization ();
20867
20868   /* If there were names looked up in the decl-specifier-seq that we
20869      did not check, check them now.  We must wait until we are in the
20870      scope of the function to perform the checks, since the function
20871      might be a friend.  */
20872   perform_deferred_access_checks ();
20873
20874   if (!success_p)
20875     {
20876       /* Skip the entire function.  */
20877       cp_parser_skip_to_end_of_block_or_statement (parser);
20878       fn = error_mark_node;
20879     }
20880   else if (DECL_INITIAL (current_function_decl) != error_mark_node)
20881     {
20882       /* Seen already, skip it.  An error message has already been output.  */
20883       cp_parser_skip_to_end_of_block_or_statement (parser);
20884       fn = current_function_decl;
20885       current_function_decl = NULL_TREE;
20886       /* If this is a function from a class, pop the nested class.  */
20887       if (current_class_name)
20888         pop_nested_class ();
20889     }
20890   else
20891     {
20892       timevar_id_t tv;
20893       if (DECL_DECLARED_INLINE_P (current_function_decl))
20894         tv = TV_PARSE_INLINE;
20895       else
20896         tv = TV_PARSE_FUNC;
20897       timevar_push (tv);
20898       fn = cp_parser_function_definition_after_declarator (parser,
20899                                                          /*inline_p=*/false);
20900       timevar_pop (tv);
20901     }
20902
20903   return fn;
20904 }
20905
20906 /* Parse the part of a function-definition that follows the
20907    declarator.  INLINE_P is TRUE iff this function is an inline
20908    function defined within a class-specifier.
20909
20910    Returns the function defined.  */
20911
20912 static tree
20913 cp_parser_function_definition_after_declarator (cp_parser* parser,
20914                                                 bool inline_p)
20915 {
20916   tree fn;
20917   bool ctor_initializer_p = false;
20918   bool saved_in_unbraced_linkage_specification_p;
20919   bool saved_in_function_body;
20920   unsigned saved_num_template_parameter_lists;
20921   cp_token *token;
20922
20923   saved_in_function_body = parser->in_function_body;
20924   parser->in_function_body = true;
20925   /* If the next token is `return', then the code may be trying to
20926      make use of the "named return value" extension that G++ used to
20927      support.  */
20928   token = cp_lexer_peek_token (parser->lexer);
20929   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
20930     {
20931       /* Consume the `return' keyword.  */
20932       cp_lexer_consume_token (parser->lexer);
20933       /* Look for the identifier that indicates what value is to be
20934          returned.  */
20935       cp_parser_identifier (parser);
20936       /* Issue an error message.  */
20937       error_at (token->location,
20938                 "named return values are no longer supported");
20939       /* Skip tokens until we reach the start of the function body.  */
20940       while (true)
20941         {
20942           cp_token *token = cp_lexer_peek_token (parser->lexer);
20943           if (token->type == CPP_OPEN_BRACE
20944               || token->type == CPP_EOF
20945               || token->type == CPP_PRAGMA_EOL)
20946             break;
20947           cp_lexer_consume_token (parser->lexer);
20948         }
20949     }
20950   /* The `extern' in `extern "C" void f () { ... }' does not apply to
20951      anything declared inside `f'.  */
20952   saved_in_unbraced_linkage_specification_p
20953     = parser->in_unbraced_linkage_specification_p;
20954   parser->in_unbraced_linkage_specification_p = false;
20955   /* Inside the function, surrounding template-parameter-lists do not
20956      apply.  */
20957   saved_num_template_parameter_lists
20958     = parser->num_template_parameter_lists;
20959   parser->num_template_parameter_lists = 0;
20960
20961   start_lambda_scope (current_function_decl);
20962
20963   /* If the next token is `try', `__transaction_atomic', or
20964      `__transaction_relaxed`, then we are looking at either function-try-block
20965      or function-transaction-block.  Note that all of these include the
20966      function-body.  */
20967   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRANSACTION_ATOMIC))
20968     ctor_initializer_p = cp_parser_function_transaction (parser,
20969         RID_TRANSACTION_ATOMIC);
20970   else if (cp_lexer_next_token_is_keyword (parser->lexer,
20971       RID_TRANSACTION_RELAXED))
20972     ctor_initializer_p = cp_parser_function_transaction (parser,
20973         RID_TRANSACTION_RELAXED);
20974   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
20975     ctor_initializer_p = cp_parser_function_try_block (parser);
20976   else
20977     ctor_initializer_p
20978       = cp_parser_ctor_initializer_opt_and_function_body (parser);
20979
20980   finish_lambda_scope ();
20981
20982   /* Finish the function.  */
20983   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
20984                         (inline_p ? 2 : 0));
20985   /* Generate code for it, if necessary.  */
20986   expand_or_defer_fn (fn);
20987   /* Restore the saved values.  */
20988   parser->in_unbraced_linkage_specification_p
20989     = saved_in_unbraced_linkage_specification_p;
20990   parser->num_template_parameter_lists
20991     = saved_num_template_parameter_lists;
20992   parser->in_function_body = saved_in_function_body;
20993
20994   return fn;
20995 }
20996
20997 /* Parse a template-declaration, assuming that the `export' (and
20998    `extern') keywords, if present, has already been scanned.  MEMBER_P
20999    is as for cp_parser_template_declaration.  */
21000
21001 static void
21002 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
21003 {
21004   tree decl = NULL_TREE;
21005   VEC (deferred_access_check,gc) *checks;
21006   tree parameter_list;
21007   bool friend_p = false;
21008   bool need_lang_pop;
21009   cp_token *token;
21010
21011   /* Look for the `template' keyword.  */
21012   token = cp_lexer_peek_token (parser->lexer);
21013   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE))
21014     return;
21015
21016   /* And the `<'.  */
21017   if (!cp_parser_require (parser, CPP_LESS, RT_LESS))
21018     return;
21019   if (at_class_scope_p () && current_function_decl)
21020     {
21021       /* 14.5.2.2 [temp.mem]
21022
21023          A local class shall not have member templates.  */
21024       error_at (token->location,
21025                 "invalid declaration of member template in local class");
21026       cp_parser_skip_to_end_of_block_or_statement (parser);
21027       return;
21028     }
21029   /* [temp]
21030
21031      A template ... shall not have C linkage.  */
21032   if (current_lang_name == lang_name_c)
21033     {
21034       error_at (token->location, "template with C linkage");
21035       /* Give it C++ linkage to avoid confusing other parts of the
21036          front end.  */
21037       push_lang_context (lang_name_cplusplus);
21038       need_lang_pop = true;
21039     }
21040   else
21041     need_lang_pop = false;
21042
21043   /* We cannot perform access checks on the template parameter
21044      declarations until we know what is being declared, just as we
21045      cannot check the decl-specifier list.  */
21046   push_deferring_access_checks (dk_deferred);
21047
21048   /* If the next token is `>', then we have an invalid
21049      specialization.  Rather than complain about an invalid template
21050      parameter, issue an error message here.  */
21051   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
21052     {
21053       cp_parser_error (parser, "invalid explicit specialization");
21054       begin_specialization ();
21055       parameter_list = NULL_TREE;
21056     }
21057   else
21058     {
21059       /* Parse the template parameters.  */
21060       parameter_list = cp_parser_template_parameter_list (parser);
21061       fixup_template_parms ();
21062     }
21063
21064   /* Get the deferred access checks from the parameter list.  These
21065      will be checked once we know what is being declared, as for a
21066      member template the checks must be performed in the scope of the
21067      class containing the member.  */
21068   checks = get_deferred_access_checks ();
21069
21070   /* Look for the `>'.  */
21071   cp_parser_skip_to_end_of_template_parameter_list (parser);
21072   /* We just processed one more parameter list.  */
21073   ++parser->num_template_parameter_lists;
21074   /* If the next token is `template', there are more template
21075      parameters.  */
21076   if (cp_lexer_next_token_is_keyword (parser->lexer,
21077                                       RID_TEMPLATE))
21078     cp_parser_template_declaration_after_export (parser, member_p);
21079   else if (cxx_dialect >= cxx0x
21080            && cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
21081     decl = cp_parser_alias_declaration (parser);
21082   else
21083     {
21084       /* There are no access checks when parsing a template, as we do not
21085          know if a specialization will be a friend.  */
21086       push_deferring_access_checks (dk_no_check);
21087       token = cp_lexer_peek_token (parser->lexer);
21088       decl = cp_parser_single_declaration (parser,
21089                                            checks,
21090                                            member_p,
21091                                            /*explicit_specialization_p=*/false,
21092                                            &friend_p);
21093       pop_deferring_access_checks ();
21094
21095       /* If this is a member template declaration, let the front
21096          end know.  */
21097       if (member_p && !friend_p && decl)
21098         {
21099           if (TREE_CODE (decl) == TYPE_DECL)
21100             cp_parser_check_access_in_redeclaration (decl, token->location);
21101
21102           decl = finish_member_template_decl (decl);
21103         }
21104       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
21105         make_friend_class (current_class_type, TREE_TYPE (decl),
21106                            /*complain=*/true);
21107     }
21108   /* We are done with the current parameter list.  */
21109   --parser->num_template_parameter_lists;
21110
21111   pop_deferring_access_checks ();
21112
21113   /* Finish up.  */
21114   finish_template_decl (parameter_list);
21115
21116   /* Check the template arguments for a literal operator template.  */
21117   if (decl
21118       && (TREE_CODE (decl) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (decl))
21119       && UDLIT_OPER_P (DECL_NAME (decl)))
21120     {
21121       bool ok = true;
21122       if (parameter_list == NULL_TREE)
21123         ok = false;
21124       else
21125         {
21126           int num_parms = TREE_VEC_LENGTH (parameter_list);
21127           if (num_parms != 1)
21128             ok = false;
21129           else
21130             {
21131               tree parm_list = TREE_VEC_ELT (parameter_list, 0);
21132               tree parm = INNERMOST_TEMPLATE_PARMS (parm_list);
21133               if (TREE_TYPE (parm) != char_type_node
21134                   || !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
21135                 ok = false;
21136             }
21137         }
21138       if (!ok)
21139         error ("literal operator template %qD has invalid parameter list."
21140                "  Expected non-type template argument pack <char...>",
21141                decl);
21142     }
21143   /* Register member declarations.  */
21144   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
21145     finish_member_declaration (decl);
21146   /* For the erroneous case of a template with C linkage, we pushed an
21147      implicit C++ linkage scope; exit that scope now.  */
21148   if (need_lang_pop)
21149     pop_lang_context ();
21150   /* If DECL is a function template, we must return to parse it later.
21151      (Even though there is no definition, there might be default
21152      arguments that need handling.)  */
21153   if (member_p && decl
21154       && (TREE_CODE (decl) == FUNCTION_DECL
21155           || DECL_FUNCTION_TEMPLATE_P (decl)))
21156     VEC_safe_push (tree, gc, unparsed_funs_with_definitions, decl);
21157 }
21158
21159 /* Perform the deferred access checks from a template-parameter-list.
21160    CHECKS is a TREE_LIST of access checks, as returned by
21161    get_deferred_access_checks.  */
21162
21163 static void
21164 cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
21165 {
21166   ++processing_template_parmlist;
21167   perform_access_checks (checks);
21168   --processing_template_parmlist;
21169 }
21170
21171 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
21172    `function-definition' sequence.  MEMBER_P is true, this declaration
21173    appears in a class scope.
21174
21175    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
21176    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
21177
21178 static tree
21179 cp_parser_single_declaration (cp_parser* parser,
21180                               VEC (deferred_access_check,gc)* checks,
21181                               bool member_p,
21182                               bool explicit_specialization_p,
21183                               bool* friend_p)
21184 {
21185   int declares_class_or_enum;
21186   tree decl = NULL_TREE;
21187   cp_decl_specifier_seq decl_specifiers;
21188   bool function_definition_p = false;
21189   cp_token *decl_spec_token_start;
21190
21191   /* This function is only used when processing a template
21192      declaration.  */
21193   gcc_assert (innermost_scope_kind () == sk_template_parms
21194               || innermost_scope_kind () == sk_template_spec);
21195
21196   /* Defer access checks until we know what is being declared.  */
21197   push_deferring_access_checks (dk_deferred);
21198
21199   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
21200      alternative.  */
21201   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
21202   cp_parser_decl_specifier_seq (parser,
21203                                 CP_PARSER_FLAGS_OPTIONAL,
21204                                 &decl_specifiers,
21205                                 &declares_class_or_enum);
21206   if (friend_p)
21207     *friend_p = cp_parser_friend_p (&decl_specifiers);
21208
21209   /* There are no template typedefs.  */
21210   if (decl_specifiers.specs[(int) ds_typedef])
21211     {
21212       error_at (decl_spec_token_start->location,
21213                 "template declaration of %<typedef%>");
21214       decl = error_mark_node;
21215     }
21216
21217   /* Gather up the access checks that occurred the
21218      decl-specifier-seq.  */
21219   stop_deferring_access_checks ();
21220
21221   /* Check for the declaration of a template class.  */
21222   if (declares_class_or_enum)
21223     {
21224       if (cp_parser_declares_only_class_p (parser))
21225         {
21226           decl = shadow_tag (&decl_specifiers);
21227
21228           /* In this case:
21229
21230                struct C {
21231                  friend template <typename T> struct A<T>::B;
21232                };
21233
21234              A<T>::B will be represented by a TYPENAME_TYPE, and
21235              therefore not recognized by shadow_tag.  */
21236           if (friend_p && *friend_p
21237               && !decl
21238               && decl_specifiers.type
21239               && TYPE_P (decl_specifiers.type))
21240             decl = decl_specifiers.type;
21241
21242           if (decl && decl != error_mark_node)
21243             decl = TYPE_NAME (decl);
21244           else
21245             decl = error_mark_node;
21246
21247           /* Perform access checks for template parameters.  */
21248           cp_parser_perform_template_parameter_access_checks (checks);
21249         }
21250     }
21251
21252   /* Complain about missing 'typename' or other invalid type names.  */
21253   if (!decl_specifiers.any_type_specifiers_p
21254       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
21255     {
21256       /* cp_parser_parse_and_diagnose_invalid_type_name calls
21257          cp_parser_skip_to_end_of_block_or_statement, so don't try to parse
21258          the rest of this declaration.  */
21259       decl = error_mark_node;
21260       goto out;
21261     }
21262
21263   /* If it's not a template class, try for a template function.  If
21264      the next token is a `;', then this declaration does not declare
21265      anything.  But, if there were errors in the decl-specifiers, then
21266      the error might well have come from an attempted class-specifier.
21267      In that case, there's no need to warn about a missing declarator.  */
21268   if (!decl
21269       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
21270           || decl_specifiers.type != error_mark_node))
21271     {
21272       decl = cp_parser_init_declarator (parser,
21273                                         &decl_specifiers,
21274                                         checks,
21275                                         /*function_definition_allowed_p=*/true,
21276                                         member_p,
21277                                         declares_class_or_enum,
21278                                         &function_definition_p,
21279                                         NULL);
21280
21281     /* 7.1.1-1 [dcl.stc]
21282
21283        A storage-class-specifier shall not be specified in an explicit
21284        specialization...  */
21285     if (decl
21286         && explicit_specialization_p
21287         && decl_specifiers.storage_class != sc_none)
21288       {
21289         error_at (decl_spec_token_start->location,
21290                   "explicit template specialization cannot have a storage class");
21291         decl = error_mark_node;
21292       }
21293     }
21294
21295   /* Look for a trailing `;' after the declaration.  */
21296   if (!function_definition_p
21297       && (decl == error_mark_node
21298           || !cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON)))
21299     cp_parser_skip_to_end_of_block_or_statement (parser);
21300
21301  out:
21302   pop_deferring_access_checks ();
21303
21304   /* Clear any current qualification; whatever comes next is the start
21305      of something new.  */
21306   parser->scope = NULL_TREE;
21307   parser->qualifying_scope = NULL_TREE;
21308   parser->object_scope = NULL_TREE;
21309
21310   return decl;
21311 }
21312
21313 /* Parse a cast-expression that is not the operand of a unary "&".  */
21314
21315 static tree
21316 cp_parser_simple_cast_expression (cp_parser *parser)
21317 {
21318   return cp_parser_cast_expression (parser, /*address_p=*/false,
21319                                     /*cast_p=*/false, NULL);
21320 }
21321
21322 /* Parse a functional cast to TYPE.  Returns an expression
21323    representing the cast.  */
21324
21325 static tree
21326 cp_parser_functional_cast (cp_parser* parser, tree type)
21327 {
21328   VEC(tree,gc) *vec;
21329   tree expression_list;
21330   tree cast;
21331   bool nonconst_p;
21332
21333   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
21334     {
21335       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
21336       expression_list = cp_parser_braced_list (parser, &nonconst_p);
21337       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
21338       if (TREE_CODE (type) == TYPE_DECL)
21339         type = TREE_TYPE (type);
21340       return finish_compound_literal (type, expression_list,
21341                                       tf_warning_or_error);
21342     }
21343
21344
21345   vec = cp_parser_parenthesized_expression_list (parser, non_attr,
21346                                                  /*cast_p=*/true,
21347                                                  /*allow_expansion_p=*/true,
21348                                                  /*non_constant_p=*/NULL);
21349   if (vec == NULL)
21350     expression_list = error_mark_node;
21351   else
21352     {
21353       expression_list = build_tree_list_vec (vec);
21354       release_tree_vector (vec);
21355     }
21356
21357   cast = build_functional_cast (type, expression_list,
21358                                 tf_warning_or_error);
21359   /* [expr.const]/1: In an integral constant expression "only type
21360      conversions to integral or enumeration type can be used".  */
21361   if (TREE_CODE (type) == TYPE_DECL)
21362     type = TREE_TYPE (type);
21363   if (cast != error_mark_node
21364       && !cast_valid_in_integral_constant_expression_p (type)
21365       && cp_parser_non_integral_constant_expression (parser,
21366                                                      NIC_CONSTRUCTOR))
21367     return error_mark_node;
21368   return cast;
21369 }
21370
21371 /* Save the tokens that make up the body of a member function defined
21372    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
21373    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
21374    specifiers applied to the declaration.  Returns the FUNCTION_DECL
21375    for the member function.  */
21376
21377 static tree
21378 cp_parser_save_member_function_body (cp_parser* parser,
21379                                      cp_decl_specifier_seq *decl_specifiers,
21380                                      cp_declarator *declarator,
21381                                      tree attributes)
21382 {
21383   cp_token *first;
21384   cp_token *last;
21385   tree fn;
21386
21387   /* Create the FUNCTION_DECL.  */
21388   fn = grokmethod (decl_specifiers, declarator, attributes);
21389   /* If something went badly wrong, bail out now.  */
21390   if (fn == error_mark_node)
21391     {
21392       /* If there's a function-body, skip it.  */
21393       if (cp_parser_token_starts_function_definition_p
21394           (cp_lexer_peek_token (parser->lexer)))
21395         cp_parser_skip_to_end_of_block_or_statement (parser);
21396       return error_mark_node;
21397     }
21398
21399   /* Remember it, if there default args to post process.  */
21400   cp_parser_save_default_args (parser, fn);
21401
21402   /* Save away the tokens that make up the body of the
21403      function.  */
21404   first = parser->lexer->next_token;
21405   /* We can have braced-init-list mem-initializers before the fn body.  */
21406   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
21407     {
21408       cp_lexer_consume_token (parser->lexer);
21409       while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
21410              && cp_lexer_next_token_is_not_keyword (parser->lexer, RID_TRY))
21411         {
21412           /* cache_group will stop after an un-nested { } pair, too.  */
21413           if (cp_parser_cache_group (parser, CPP_CLOSE_PAREN, /*depth=*/0))
21414             break;
21415
21416           /* variadic mem-inits have ... after the ')'.  */
21417           if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
21418             cp_lexer_consume_token (parser->lexer);
21419         }
21420     }
21421   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
21422   /* Handle function try blocks.  */
21423   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
21424     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
21425   last = parser->lexer->next_token;
21426
21427   /* Save away the inline definition; we will process it when the
21428      class is complete.  */
21429   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
21430   DECL_PENDING_INLINE_P (fn) = 1;
21431
21432   /* We need to know that this was defined in the class, so that
21433      friend templates are handled correctly.  */
21434   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
21435
21436   /* Add FN to the queue of functions to be parsed later.  */
21437   VEC_safe_push (tree, gc, unparsed_funs_with_definitions, fn);
21438
21439   return fn;
21440 }
21441
21442 /* Save the tokens that make up the in-class initializer for a non-static
21443    data member.  Returns a DEFAULT_ARG.  */
21444
21445 static tree
21446 cp_parser_save_nsdmi (cp_parser* parser)
21447 {
21448   /* Save away the tokens that make up the body of the
21449      function.  */
21450   cp_token *first = parser->lexer->next_token;
21451   cp_token *last;
21452   tree node;
21453
21454   /* Save tokens until the next comma or semicolon.  */
21455   cp_parser_cache_group (parser, CPP_COMMA, /*depth=*/0);
21456
21457   last = parser->lexer->next_token;
21458
21459   node = make_node (DEFAULT_ARG);
21460   DEFARG_TOKENS (node) = cp_token_cache_new (first, last);
21461   DEFARG_INSTANTIATIONS (node) = NULL;
21462
21463   return node;
21464 }
21465
21466
21467 /* Parse a template-argument-list, as well as the trailing ">" (but
21468    not the opening "<").  See cp_parser_template_argument_list for the
21469    return value.  */
21470
21471 static tree
21472 cp_parser_enclosed_template_argument_list (cp_parser* parser)
21473 {
21474   tree arguments;
21475   tree saved_scope;
21476   tree saved_qualifying_scope;
21477   tree saved_object_scope;
21478   bool saved_greater_than_is_operator_p;
21479   int saved_unevaluated_operand;
21480   int saved_inhibit_evaluation_warnings;
21481
21482   /* [temp.names]
21483
21484      When parsing a template-id, the first non-nested `>' is taken as
21485      the end of the template-argument-list rather than a greater-than
21486      operator.  */
21487   saved_greater_than_is_operator_p
21488     = parser->greater_than_is_operator_p;
21489   parser->greater_than_is_operator_p = false;
21490   /* Parsing the argument list may modify SCOPE, so we save it
21491      here.  */
21492   saved_scope = parser->scope;
21493   saved_qualifying_scope = parser->qualifying_scope;
21494   saved_object_scope = parser->object_scope;
21495   /* We need to evaluate the template arguments, even though this
21496      template-id may be nested within a "sizeof".  */
21497   saved_unevaluated_operand = cp_unevaluated_operand;
21498   cp_unevaluated_operand = 0;
21499   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
21500   c_inhibit_evaluation_warnings = 0;
21501   /* Parse the template-argument-list itself.  */
21502   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER)
21503       || cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
21504     arguments = NULL_TREE;
21505   else
21506     arguments = cp_parser_template_argument_list (parser);
21507   /* Look for the `>' that ends the template-argument-list. If we find
21508      a '>>' instead, it's probably just a typo.  */
21509   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
21510     {
21511       if (cxx_dialect != cxx98)
21512         {
21513           /* In C++0x, a `>>' in a template argument list or cast
21514              expression is considered to be two separate `>'
21515              tokens. So, change the current token to a `>', but don't
21516              consume it: it will be consumed later when the outer
21517              template argument list (or cast expression) is parsed.
21518              Note that this replacement of `>' for `>>' is necessary
21519              even if we are parsing tentatively: in the tentative
21520              case, after calling
21521              cp_parser_enclosed_template_argument_list we will always
21522              throw away all of the template arguments and the first
21523              closing `>', either because the template argument list
21524              was erroneous or because we are replacing those tokens
21525              with a CPP_TEMPLATE_ID token.  The second `>' (which will
21526              not have been thrown away) is needed either to close an
21527              outer template argument list or to complete a new-style
21528              cast.  */
21529           cp_token *token = cp_lexer_peek_token (parser->lexer);
21530           token->type = CPP_GREATER;
21531         }
21532       else if (!saved_greater_than_is_operator_p)
21533         {
21534           /* If we're in a nested template argument list, the '>>' has
21535             to be a typo for '> >'. We emit the error message, but we
21536             continue parsing and we push a '>' as next token, so that
21537             the argument list will be parsed correctly.  Note that the
21538             global source location is still on the token before the
21539             '>>', so we need to say explicitly where we want it.  */
21540           cp_token *token = cp_lexer_peek_token (parser->lexer);
21541           error_at (token->location, "%<>>%> should be %<> >%> "
21542                     "within a nested template argument list");
21543
21544           token->type = CPP_GREATER;
21545         }
21546       else
21547         {
21548           /* If this is not a nested template argument list, the '>>'
21549             is a typo for '>'. Emit an error message and continue.
21550             Same deal about the token location, but here we can get it
21551             right by consuming the '>>' before issuing the diagnostic.  */
21552           cp_token *token = cp_lexer_consume_token (parser->lexer);
21553           error_at (token->location,
21554                     "spurious %<>>%>, use %<>%> to terminate "
21555                     "a template argument list");
21556         }
21557     }
21558   else
21559     cp_parser_skip_to_end_of_template_parameter_list (parser);
21560   /* The `>' token might be a greater-than operator again now.  */
21561   parser->greater_than_is_operator_p
21562     = saved_greater_than_is_operator_p;
21563   /* Restore the SAVED_SCOPE.  */
21564   parser->scope = saved_scope;
21565   parser->qualifying_scope = saved_qualifying_scope;
21566   parser->object_scope = saved_object_scope;
21567   cp_unevaluated_operand = saved_unevaluated_operand;
21568   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
21569
21570   return arguments;
21571 }
21572
21573 /* MEMBER_FUNCTION is a member function, or a friend.  If default
21574    arguments, or the body of the function have not yet been parsed,
21575    parse them now.  */
21576
21577 static void
21578 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
21579 {
21580   timevar_push (TV_PARSE_INMETH);
21581   /* If this member is a template, get the underlying
21582      FUNCTION_DECL.  */
21583   if (DECL_FUNCTION_TEMPLATE_P (member_function))
21584     member_function = DECL_TEMPLATE_RESULT (member_function);
21585
21586   /* There should not be any class definitions in progress at this
21587      point; the bodies of members are only parsed outside of all class
21588      definitions.  */
21589   gcc_assert (parser->num_classes_being_defined == 0);
21590   /* While we're parsing the member functions we might encounter more
21591      classes.  We want to handle them right away, but we don't want
21592      them getting mixed up with functions that are currently in the
21593      queue.  */
21594   push_unparsed_function_queues (parser);
21595
21596   /* Make sure that any template parameters are in scope.  */
21597   maybe_begin_member_template_processing (member_function);
21598
21599   /* If the body of the function has not yet been parsed, parse it
21600      now.  */
21601   if (DECL_PENDING_INLINE_P (member_function))
21602     {
21603       tree function_scope;
21604       cp_token_cache *tokens;
21605
21606       /* The function is no longer pending; we are processing it.  */
21607       tokens = DECL_PENDING_INLINE_INFO (member_function);
21608       DECL_PENDING_INLINE_INFO (member_function) = NULL;
21609       DECL_PENDING_INLINE_P (member_function) = 0;
21610
21611       /* If this is a local class, enter the scope of the containing
21612          function.  */
21613       function_scope = current_function_decl;
21614       if (function_scope)
21615         push_function_context ();
21616
21617       /* Push the body of the function onto the lexer stack.  */
21618       cp_parser_push_lexer_for_tokens (parser, tokens);
21619
21620       /* Let the front end know that we going to be defining this
21621          function.  */
21622       start_preparsed_function (member_function, NULL_TREE,
21623                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
21624
21625       /* Don't do access checking if it is a templated function.  */
21626       if (processing_template_decl)
21627         push_deferring_access_checks (dk_no_check);
21628
21629       /* Now, parse the body of the function.  */
21630       cp_parser_function_definition_after_declarator (parser,
21631                                                       /*inline_p=*/true);
21632
21633       if (processing_template_decl)
21634         pop_deferring_access_checks ();
21635
21636       /* Leave the scope of the containing function.  */
21637       if (function_scope)
21638         pop_function_context ();
21639       cp_parser_pop_lexer (parser);
21640     }
21641
21642   /* Remove any template parameters from the symbol table.  */
21643   maybe_end_member_template_processing ();
21644
21645   /* Restore the queue.  */
21646   pop_unparsed_function_queues (parser);
21647   timevar_pop (TV_PARSE_INMETH);
21648 }
21649
21650 /* If DECL contains any default args, remember it on the unparsed
21651    functions queue.  */
21652
21653 static void
21654 cp_parser_save_default_args (cp_parser* parser, tree decl)
21655 {
21656   tree probe;
21657
21658   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
21659        probe;
21660        probe = TREE_CHAIN (probe))
21661     if (TREE_PURPOSE (probe))
21662       {
21663         cp_default_arg_entry *entry
21664           = VEC_safe_push (cp_default_arg_entry, gc,
21665                            unparsed_funs_with_default_args, NULL);
21666         entry->class_type = current_class_type;
21667         entry->decl = decl;
21668         break;
21669       }
21670 }
21671
21672 /* DEFAULT_ARG contains the saved tokens for the initializer of DECL,
21673    which is either a FIELD_DECL or PARM_DECL.  Parse it and return
21674    the result.  For a PARM_DECL, PARMTYPE is the corresponding type
21675    from the parameter-type-list.  */
21676
21677 static tree
21678 cp_parser_late_parse_one_default_arg (cp_parser *parser, tree decl,
21679                                       tree default_arg, tree parmtype)
21680 {
21681   cp_token_cache *tokens;
21682   tree parsed_arg;
21683   bool dummy;
21684
21685   /* Push the saved tokens for the default argument onto the parser's
21686      lexer stack.  */
21687   tokens = DEFARG_TOKENS (default_arg);
21688   cp_parser_push_lexer_for_tokens (parser, tokens);
21689
21690   start_lambda_scope (decl);
21691
21692   /* Parse the default argument.  */
21693   parsed_arg = cp_parser_initializer (parser, &dummy, &dummy);
21694   if (BRACE_ENCLOSED_INITIALIZER_P (parsed_arg))
21695     maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
21696
21697   finish_lambda_scope ();
21698
21699   if (!processing_template_decl)
21700     {
21701       /* In a non-template class, check conversions now.  In a template,
21702          we'll wait and instantiate these as needed.  */
21703       if (TREE_CODE (decl) == PARM_DECL)
21704         parsed_arg = check_default_argument (parmtype, parsed_arg);
21705       else
21706         {
21707           int flags = LOOKUP_IMPLICIT;
21708           if (BRACE_ENCLOSED_INITIALIZER_P (parsed_arg)
21709               && CONSTRUCTOR_IS_DIRECT_INIT (parsed_arg))
21710             flags = LOOKUP_NORMAL;
21711           parsed_arg = digest_init_flags (TREE_TYPE (decl), parsed_arg, flags);
21712         }
21713     }
21714
21715   /* If the token stream has not been completely used up, then
21716      there was extra junk after the end of the default
21717      argument.  */
21718   if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
21719     {
21720       if (TREE_CODE (decl) == PARM_DECL)
21721         cp_parser_error (parser, "expected %<,%>");
21722       else
21723         cp_parser_error (parser, "expected %<;%>");
21724     }
21725
21726   /* Revert to the main lexer.  */
21727   cp_parser_pop_lexer (parser);
21728
21729   return parsed_arg;
21730 }
21731
21732 /* FIELD is a non-static data member with an initializer which we saved for
21733    later; parse it now.  */
21734
21735 static void
21736 cp_parser_late_parsing_nsdmi (cp_parser *parser, tree field)
21737 {
21738   tree def;
21739
21740   push_unparsed_function_queues (parser);
21741   def = cp_parser_late_parse_one_default_arg (parser, field,
21742                                               DECL_INITIAL (field),
21743                                               NULL_TREE);
21744   pop_unparsed_function_queues (parser);
21745
21746   DECL_INITIAL (field) = def;
21747 }
21748
21749 /* FN is a FUNCTION_DECL which may contains a parameter with an
21750    unparsed DEFAULT_ARG.  Parse the default args now.  This function
21751    assumes that the current scope is the scope in which the default
21752    argument should be processed.  */
21753
21754 static void
21755 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
21756 {
21757   bool saved_local_variables_forbidden_p;
21758   tree parm, parmdecl;
21759
21760   /* While we're parsing the default args, we might (due to the
21761      statement expression extension) encounter more classes.  We want
21762      to handle them right away, but we don't want them getting mixed
21763      up with default args that are currently in the queue.  */
21764   push_unparsed_function_queues (parser);
21765
21766   /* Local variable names (and the `this' keyword) may not appear
21767      in a default argument.  */
21768   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
21769   parser->local_variables_forbidden_p = true;
21770
21771   push_defarg_context (fn);
21772
21773   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn)),
21774          parmdecl = DECL_ARGUMENTS (fn);
21775        parm && parm != void_list_node;
21776        parm = TREE_CHAIN (parm),
21777          parmdecl = DECL_CHAIN (parmdecl))
21778     {
21779       tree default_arg = TREE_PURPOSE (parm);
21780       tree parsed_arg;
21781       VEC(tree,gc) *insts;
21782       tree copy;
21783       unsigned ix;
21784
21785       if (!default_arg)
21786         continue;
21787
21788       if (TREE_CODE (default_arg) != DEFAULT_ARG)
21789         /* This can happen for a friend declaration for a function
21790            already declared with default arguments.  */
21791         continue;
21792
21793       parsed_arg
21794         = cp_parser_late_parse_one_default_arg (parser, parmdecl,
21795                                                 default_arg,
21796                                                 TREE_VALUE (parm));
21797       if (parsed_arg == error_mark_node)
21798         {
21799           continue;
21800         }
21801
21802       TREE_PURPOSE (parm) = parsed_arg;
21803
21804       /* Update any instantiations we've already created.  */
21805       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
21806            VEC_iterate (tree, insts, ix, copy); ix++)
21807         TREE_PURPOSE (copy) = parsed_arg;
21808     }
21809
21810   pop_defarg_context ();
21811
21812   /* Make sure no default arg is missing.  */
21813   check_default_args (fn);
21814
21815   /* Restore the state of local_variables_forbidden_p.  */
21816   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
21817
21818   /* Restore the queue.  */
21819   pop_unparsed_function_queues (parser);
21820 }
21821
21822 /* Parse the operand of `sizeof' (or a similar operator).  Returns
21823    either a TYPE or an expression, depending on the form of the
21824    input.  The KEYWORD indicates which kind of expression we have
21825    encountered.  */
21826
21827 static tree
21828 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
21829 {
21830   tree expr = NULL_TREE;
21831   const char *saved_message;
21832   char *tmp;
21833   bool saved_integral_constant_expression_p;
21834   bool saved_non_integral_constant_expression_p;
21835   bool pack_expansion_p = false;
21836
21837   /* Types cannot be defined in a `sizeof' expression.  Save away the
21838      old message.  */
21839   saved_message = parser->type_definition_forbidden_message;
21840   /* And create the new one.  */
21841   tmp = concat ("types may not be defined in %<",
21842                 IDENTIFIER_POINTER (ridpointers[keyword]),
21843                 "%> expressions", NULL);
21844   parser->type_definition_forbidden_message = tmp;
21845
21846   /* The restrictions on constant-expressions do not apply inside
21847      sizeof expressions.  */
21848   saved_integral_constant_expression_p
21849     = parser->integral_constant_expression_p;
21850   saved_non_integral_constant_expression_p
21851     = parser->non_integral_constant_expression_p;
21852   parser->integral_constant_expression_p = false;
21853
21854   /* If it's a `...', then we are computing the length of a parameter
21855      pack.  */
21856   if (keyword == RID_SIZEOF
21857       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
21858     {
21859       /* Consume the `...'.  */
21860       cp_lexer_consume_token (parser->lexer);
21861       maybe_warn_variadic_templates ();
21862
21863       /* Note that this is an expansion.  */
21864       pack_expansion_p = true;
21865     }
21866
21867   /* Do not actually evaluate the expression.  */
21868   ++cp_unevaluated_operand;
21869   ++c_inhibit_evaluation_warnings;
21870   /* If it's a `(', then we might be looking at the type-id
21871      construction.  */
21872   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
21873     {
21874       tree type;
21875       bool saved_in_type_id_in_expr_p;
21876
21877       /* We can't be sure yet whether we're looking at a type-id or an
21878          expression.  */
21879       cp_parser_parse_tentatively (parser);
21880       /* Consume the `('.  */
21881       cp_lexer_consume_token (parser->lexer);
21882       /* Parse the type-id.  */
21883       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
21884       parser->in_type_id_in_expr_p = true;
21885       type = cp_parser_type_id (parser);
21886       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
21887       /* Now, look for the trailing `)'.  */
21888       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
21889       /* If all went well, then we're done.  */
21890       if (cp_parser_parse_definitely (parser))
21891         {
21892           cp_decl_specifier_seq decl_specs;
21893
21894           /* Build a trivial decl-specifier-seq.  */
21895           clear_decl_specs (&decl_specs);
21896           decl_specs.type = type;
21897
21898           /* Call grokdeclarator to figure out what type this is.  */
21899           expr = grokdeclarator (NULL,
21900                                  &decl_specs,
21901                                  TYPENAME,
21902                                  /*initialized=*/0,
21903                                  /*attrlist=*/NULL);
21904         }
21905     }
21906
21907   /* If the type-id production did not work out, then we must be
21908      looking at the unary-expression production.  */
21909   if (!expr)
21910     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
21911                                        /*cast_p=*/false, NULL);
21912
21913   if (pack_expansion_p)
21914     /* Build a pack expansion. */
21915     expr = make_pack_expansion (expr);
21916
21917   /* Go back to evaluating expressions.  */
21918   --cp_unevaluated_operand;
21919   --c_inhibit_evaluation_warnings;
21920
21921   /* Free the message we created.  */
21922   free (tmp);
21923   /* And restore the old one.  */
21924   parser->type_definition_forbidden_message = saved_message;
21925   parser->integral_constant_expression_p
21926     = saved_integral_constant_expression_p;
21927   parser->non_integral_constant_expression_p
21928     = saved_non_integral_constant_expression_p;
21929
21930   return expr;
21931 }
21932
21933 /* If the current declaration has no declarator, return true.  */
21934
21935 static bool
21936 cp_parser_declares_only_class_p (cp_parser *parser)
21937 {
21938   /* If the next token is a `;' or a `,' then there is no
21939      declarator.  */
21940   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
21941           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
21942 }
21943
21944 /* Update the DECL_SPECS to reflect the storage class indicated by
21945    KEYWORD.  */
21946
21947 static void
21948 cp_parser_set_storage_class (cp_parser *parser,
21949                              cp_decl_specifier_seq *decl_specs,
21950                              enum rid keyword,
21951                              location_t location)
21952 {
21953   cp_storage_class storage_class;
21954
21955   if (parser->in_unbraced_linkage_specification_p)
21956     {
21957       error_at (location, "invalid use of %qD in linkage specification",
21958                 ridpointers[keyword]);
21959       return;
21960     }
21961   else if (decl_specs->storage_class != sc_none)
21962     {
21963       decl_specs->conflicting_specifiers_p = true;
21964       return;
21965     }
21966
21967   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
21968       && decl_specs->specs[(int) ds_thread])
21969     {
21970       error_at (location, "%<__thread%> before %qD", ridpointers[keyword]);
21971       decl_specs->specs[(int) ds_thread] = 0;
21972     }
21973
21974   switch (keyword)
21975     {
21976     case RID_AUTO:
21977       storage_class = sc_auto;
21978       break;
21979     case RID_REGISTER:
21980       storage_class = sc_register;
21981       break;
21982     case RID_STATIC:
21983       storage_class = sc_static;
21984       break;
21985     case RID_EXTERN:
21986       storage_class = sc_extern;
21987       break;
21988     case RID_MUTABLE:
21989       storage_class = sc_mutable;
21990       break;
21991     default:
21992       gcc_unreachable ();
21993     }
21994   decl_specs->storage_class = storage_class;
21995
21996   /* A storage class specifier cannot be applied alongside a typedef 
21997      specifier. If there is a typedef specifier present then set 
21998      conflicting_specifiers_p which will trigger an error later
21999      on in grokdeclarator. */
22000   if (decl_specs->specs[(int)ds_typedef])
22001     decl_specs->conflicting_specifiers_p = true;
22002 }
22003
22004 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If TYPE_DEFINITION_P
22005    is true, the type is a class or enum definition.  */
22006
22007 static void
22008 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
22009                               tree type_spec,
22010                               location_t location,
22011                               bool type_definition_p)
22012 {
22013   decl_specs->any_specifiers_p = true;
22014
22015   /* If the user tries to redeclare bool, char16_t, char32_t, or wchar_t
22016      (with, for example, in "typedef int wchar_t;") we remember that
22017      this is what happened.  In system headers, we ignore these
22018      declarations so that G++ can work with system headers that are not
22019      C++-safe.  */
22020   if (decl_specs->specs[(int) ds_typedef]
22021       && !type_definition_p
22022       && (type_spec == boolean_type_node
22023           || type_spec == char16_type_node
22024           || type_spec == char32_type_node
22025           || type_spec == wchar_type_node)
22026       && (decl_specs->type
22027           || decl_specs->specs[(int) ds_long]
22028           || decl_specs->specs[(int) ds_short]
22029           || decl_specs->specs[(int) ds_unsigned]
22030           || decl_specs->specs[(int) ds_signed]))
22031     {
22032       decl_specs->redefined_builtin_type = type_spec;
22033       if (!decl_specs->type)
22034         {
22035           decl_specs->type = type_spec;
22036           decl_specs->type_definition_p = false;
22037           decl_specs->type_location = location;
22038         }
22039     }
22040   else if (decl_specs->type)
22041     decl_specs->multiple_types_p = true;
22042   else
22043     {
22044       decl_specs->type = type_spec;
22045       decl_specs->type_definition_p = type_definition_p;
22046       decl_specs->redefined_builtin_type = NULL_TREE;
22047       decl_specs->type_location = location;
22048     }
22049 }
22050
22051 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
22052    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
22053
22054 static bool
22055 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
22056 {
22057   return decl_specifiers->specs[(int) ds_friend] != 0;
22058 }
22059
22060 /* Issue an error message indicating that TOKEN_DESC was expected.
22061    If KEYWORD is true, it indicated this function is called by
22062    cp_parser_require_keword and the required token can only be
22063    a indicated keyword. */
22064
22065 static void
22066 cp_parser_required_error (cp_parser *parser,
22067                           required_token token_desc,
22068                           bool keyword)
22069 {
22070   switch (token_desc)
22071     {
22072       case RT_NEW:
22073         cp_parser_error (parser, "expected %<new%>");
22074         return;
22075       case RT_DELETE:
22076         cp_parser_error (parser, "expected %<delete%>");
22077         return;
22078       case RT_RETURN:
22079         cp_parser_error (parser, "expected %<return%>");
22080         return;
22081       case RT_WHILE:
22082         cp_parser_error (parser, "expected %<while%>");
22083         return;
22084       case RT_EXTERN:
22085         cp_parser_error (parser, "expected %<extern%>");
22086         return;
22087       case RT_STATIC_ASSERT:
22088         cp_parser_error (parser, "expected %<static_assert%>");
22089         return;
22090       case RT_DECLTYPE:
22091         cp_parser_error (parser, "expected %<decltype%>");
22092         return;
22093       case RT_OPERATOR:
22094         cp_parser_error (parser, "expected %<operator%>");
22095         return;
22096       case RT_CLASS:
22097         cp_parser_error (parser, "expected %<class%>");
22098         return;
22099       case RT_TEMPLATE:
22100         cp_parser_error (parser, "expected %<template%>");
22101         return;
22102       case RT_NAMESPACE:
22103         cp_parser_error (parser, "expected %<namespace%>");
22104         return;
22105       case RT_USING:
22106         cp_parser_error (parser, "expected %<using%>");
22107         return;
22108       case RT_ASM:
22109         cp_parser_error (parser, "expected %<asm%>");
22110         return;
22111       case RT_TRY:
22112         cp_parser_error (parser, "expected %<try%>");
22113         return;
22114       case RT_CATCH:
22115         cp_parser_error (parser, "expected %<catch%>");
22116         return;
22117       case RT_THROW:
22118         cp_parser_error (parser, "expected %<throw%>");
22119         return;
22120       case RT_LABEL:
22121         cp_parser_error (parser, "expected %<__label__%>");
22122         return;
22123       case RT_AT_TRY:
22124         cp_parser_error (parser, "expected %<@try%>");
22125         return;
22126       case RT_AT_SYNCHRONIZED:
22127         cp_parser_error (parser, "expected %<@synchronized%>");
22128         return;
22129       case RT_AT_THROW:
22130         cp_parser_error (parser, "expected %<@throw%>");
22131         return;
22132       case RT_TRANSACTION_ATOMIC:
22133         cp_parser_error (parser, "expected %<__transaction_atomic%>");
22134         return;
22135       case RT_TRANSACTION_RELAXED:
22136         cp_parser_error (parser, "expected %<__transaction_relaxed%>");
22137         return;
22138       default:
22139         break;
22140     }
22141   if (!keyword)
22142     {
22143       switch (token_desc)
22144         {
22145           case RT_SEMICOLON:
22146             cp_parser_error (parser, "expected %<;%>");
22147             return;
22148           case RT_OPEN_PAREN:
22149             cp_parser_error (parser, "expected %<(%>");
22150             return;
22151           case RT_CLOSE_BRACE:
22152             cp_parser_error (parser, "expected %<}%>");
22153             return;
22154           case RT_OPEN_BRACE:
22155             cp_parser_error (parser, "expected %<{%>");
22156             return;
22157           case RT_CLOSE_SQUARE:
22158             cp_parser_error (parser, "expected %<]%>");
22159             return;
22160           case RT_OPEN_SQUARE:
22161             cp_parser_error (parser, "expected %<[%>");
22162             return;
22163           case RT_COMMA:
22164             cp_parser_error (parser, "expected %<,%>");
22165             return;
22166           case RT_SCOPE:
22167             cp_parser_error (parser, "expected %<::%>");
22168             return;
22169           case RT_LESS:
22170             cp_parser_error (parser, "expected %<<%>");
22171             return;
22172           case RT_GREATER:
22173             cp_parser_error (parser, "expected %<>%>");
22174             return;
22175           case RT_EQ:
22176             cp_parser_error (parser, "expected %<=%>");
22177             return;
22178           case RT_ELLIPSIS:
22179             cp_parser_error (parser, "expected %<...%>");
22180             return;
22181           case RT_MULT:
22182             cp_parser_error (parser, "expected %<*%>");
22183             return;
22184           case RT_COMPL:
22185             cp_parser_error (parser, "expected %<~%>");
22186             return;
22187           case RT_COLON:
22188             cp_parser_error (parser, "expected %<:%>");
22189             return;
22190           case RT_COLON_SCOPE:
22191             cp_parser_error (parser, "expected %<:%> or %<::%>");
22192             return;
22193           case RT_CLOSE_PAREN:
22194             cp_parser_error (parser, "expected %<)%>");
22195             return;
22196           case RT_COMMA_CLOSE_PAREN:
22197             cp_parser_error (parser, "expected %<,%> or %<)%>");
22198             return;
22199           case RT_PRAGMA_EOL:
22200             cp_parser_error (parser, "expected end of line");
22201             return;
22202           case RT_NAME:
22203             cp_parser_error (parser, "expected identifier");
22204             return;
22205           case RT_SELECT:
22206             cp_parser_error (parser, "expected selection-statement");
22207             return;
22208           case RT_INTERATION:
22209             cp_parser_error (parser, "expected iteration-statement");
22210             return;
22211           case RT_JUMP:
22212             cp_parser_error (parser, "expected jump-statement");
22213             return;
22214           case RT_CLASS_KEY:
22215             cp_parser_error (parser, "expected class-key");
22216             return;
22217           case RT_CLASS_TYPENAME_TEMPLATE:
22218             cp_parser_error (parser,
22219                  "expected %<class%>, %<typename%>, or %<template%>");
22220             return;
22221           default:
22222             gcc_unreachable ();
22223         }
22224     }
22225   else
22226     gcc_unreachable ();
22227 }
22228
22229
22230
22231 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
22232    issue an error message indicating that TOKEN_DESC was expected.
22233
22234    Returns the token consumed, if the token had the appropriate type.
22235    Otherwise, returns NULL.  */
22236
22237 static cp_token *
22238 cp_parser_require (cp_parser* parser,
22239                    enum cpp_ttype type,
22240                    required_token token_desc)
22241 {
22242   if (cp_lexer_next_token_is (parser->lexer, type))
22243     return cp_lexer_consume_token (parser->lexer);
22244   else
22245     {
22246       /* Output the MESSAGE -- unless we're parsing tentatively.  */
22247       if (!cp_parser_simulate_error (parser))
22248         cp_parser_required_error (parser, token_desc, /*keyword=*/false);
22249       return NULL;
22250     }
22251 }
22252
22253 /* An error message is produced if the next token is not '>'.
22254    All further tokens are skipped until the desired token is
22255    found or '{', '}', ';' or an unbalanced ')' or ']'.  */
22256
22257 static void
22258 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
22259 {
22260   /* Current level of '< ... >'.  */
22261   unsigned level = 0;
22262   /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
22263   unsigned nesting_depth = 0;
22264
22265   /* Are we ready, yet?  If not, issue error message.  */
22266   if (cp_parser_require (parser, CPP_GREATER, RT_GREATER))
22267     return;
22268
22269   /* Skip tokens until the desired token is found.  */
22270   while (true)
22271     {
22272       /* Peek at the next token.  */
22273       switch (cp_lexer_peek_token (parser->lexer)->type)
22274         {
22275         case CPP_LESS:
22276           if (!nesting_depth)
22277             ++level;
22278           break;
22279
22280         case CPP_RSHIFT:
22281           if (cxx_dialect == cxx98)
22282             /* C++0x views the `>>' operator as two `>' tokens, but
22283                C++98 does not. */
22284             break;
22285           else if (!nesting_depth && level-- == 0)
22286             {
22287               /* We've hit a `>>' where the first `>' closes the
22288                  template argument list, and the second `>' is
22289                  spurious.  Just consume the `>>' and stop; we've
22290                  already produced at least one error.  */
22291               cp_lexer_consume_token (parser->lexer);
22292               return;
22293             }
22294           /* Fall through for C++0x, so we handle the second `>' in
22295              the `>>'.  */
22296
22297         case CPP_GREATER:
22298           if (!nesting_depth && level-- == 0)
22299             {
22300               /* We've reached the token we want, consume it and stop.  */
22301               cp_lexer_consume_token (parser->lexer);
22302               return;
22303             }
22304           break;
22305
22306         case CPP_OPEN_PAREN:
22307         case CPP_OPEN_SQUARE:
22308           ++nesting_depth;
22309           break;
22310
22311         case CPP_CLOSE_PAREN:
22312         case CPP_CLOSE_SQUARE:
22313           if (nesting_depth-- == 0)
22314             return;
22315           break;
22316
22317         case CPP_EOF:
22318         case CPP_PRAGMA_EOL:
22319         case CPP_SEMICOLON:
22320         case CPP_OPEN_BRACE:
22321         case CPP_CLOSE_BRACE:
22322           /* The '>' was probably forgotten, don't look further.  */
22323           return;
22324
22325         default:
22326           break;
22327         }
22328
22329       /* Consume this token.  */
22330       cp_lexer_consume_token (parser->lexer);
22331     }
22332 }
22333
22334 /* If the next token is the indicated keyword, consume it.  Otherwise,
22335    issue an error message indicating that TOKEN_DESC was expected.
22336
22337    Returns the token consumed, if the token had the appropriate type.
22338    Otherwise, returns NULL.  */
22339
22340 static cp_token *
22341 cp_parser_require_keyword (cp_parser* parser,
22342                            enum rid keyword,
22343                            required_token token_desc)
22344 {
22345   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
22346
22347   if (token && token->keyword != keyword)
22348     {
22349       cp_parser_required_error (parser, token_desc, /*keyword=*/true); 
22350       return NULL;
22351     }
22352
22353   return token;
22354 }
22355
22356 /* Returns TRUE iff TOKEN is a token that can begin the body of a
22357    function-definition.  */
22358
22359 static bool
22360 cp_parser_token_starts_function_definition_p (cp_token* token)
22361 {
22362   return (/* An ordinary function-body begins with an `{'.  */
22363           token->type == CPP_OPEN_BRACE
22364           /* A ctor-initializer begins with a `:'.  */
22365           || token->type == CPP_COLON
22366           /* A function-try-block begins with `try'.  */
22367           || token->keyword == RID_TRY
22368           /* A function-transaction-block begins with `__transaction_atomic'
22369              or `__transaction_relaxed'.  */
22370           || token->keyword == RID_TRANSACTION_ATOMIC
22371           || token->keyword == RID_TRANSACTION_RELAXED
22372           /* The named return value extension begins with `return'.  */
22373           || token->keyword == RID_RETURN);
22374 }
22375
22376 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
22377    definition.  */
22378
22379 static bool
22380 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
22381 {
22382   cp_token *token;
22383
22384   token = cp_lexer_peek_token (parser->lexer);
22385   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
22386 }
22387
22388 /* Returns TRUE iff the next token is the "," or ">" (or `>>', in
22389    C++0x) ending a template-argument.  */
22390
22391 static bool
22392 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
22393 {
22394   cp_token *token;
22395
22396   token = cp_lexer_peek_token (parser->lexer);
22397   return (token->type == CPP_COMMA 
22398           || token->type == CPP_GREATER
22399           || token->type == CPP_ELLIPSIS
22400           || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT));
22401 }
22402
22403 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
22404    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
22405
22406 static bool
22407 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
22408                                                      size_t n)
22409 {
22410   cp_token *token;
22411
22412   token = cp_lexer_peek_nth_token (parser->lexer, n);
22413   if (token->type == CPP_LESS)
22414     return true;
22415   /* Check for the sequence `<::' in the original code. It would be lexed as
22416      `[:', where `[' is a digraph, and there is no whitespace before
22417      `:'.  */
22418   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
22419     {
22420       cp_token *token2;
22421       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
22422       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
22423         return true;
22424     }
22425   return false;
22426 }
22427
22428 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
22429    or none_type otherwise.  */
22430
22431 static enum tag_types
22432 cp_parser_token_is_class_key (cp_token* token)
22433 {
22434   switch (token->keyword)
22435     {
22436     case RID_CLASS:
22437       return class_type;
22438     case RID_STRUCT:
22439       return record_type;
22440     case RID_UNION:
22441       return union_type;
22442
22443     default:
22444       return none_type;
22445     }
22446 }
22447
22448 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
22449
22450 static void
22451 cp_parser_check_class_key (enum tag_types class_key, tree type)
22452 {
22453   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
22454     permerror (input_location, "%qs tag used in naming %q#T",
22455             class_key == union_type ? "union"
22456              : class_key == record_type ? "struct" : "class",
22457              type);
22458 }
22459
22460 /* Issue an error message if DECL is redeclared with different
22461    access than its original declaration [class.access.spec/3].
22462    This applies to nested classes and nested class templates.
22463    [class.mem/1].  */
22464
22465 static void
22466 cp_parser_check_access_in_redeclaration (tree decl, location_t location)
22467 {
22468   if (!decl || !CLASS_TYPE_P (TREE_TYPE (decl)))
22469     return;
22470
22471   if ((TREE_PRIVATE (decl)
22472        != (current_access_specifier == access_private_node))
22473       || (TREE_PROTECTED (decl)
22474           != (current_access_specifier == access_protected_node)))
22475     error_at (location, "%qD redeclared with different access", decl);
22476 }
22477
22478 /* Look for the `template' keyword, as a syntactic disambiguator.
22479    Return TRUE iff it is present, in which case it will be
22480    consumed.  */
22481
22482 static bool
22483 cp_parser_optional_template_keyword (cp_parser *parser)
22484 {
22485   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
22486     {
22487       /* The `template' keyword can only be used within templates;
22488          outside templates the parser can always figure out what is a
22489          template and what is not.  */
22490       if (!processing_template_decl)
22491         {
22492           cp_token *token = cp_lexer_peek_token (parser->lexer);
22493           error_at (token->location,
22494                     "%<template%> (as a disambiguator) is only allowed "
22495                     "within templates");
22496           /* If this part of the token stream is rescanned, the same
22497              error message would be generated.  So, we purge the token
22498              from the stream.  */
22499           cp_lexer_purge_token (parser->lexer);
22500           return false;
22501         }
22502       else
22503         {
22504           /* Consume the `template' keyword.  */
22505           cp_lexer_consume_token (parser->lexer);
22506           return true;
22507         }
22508     }
22509
22510   return false;
22511 }
22512
22513 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
22514    set PARSER->SCOPE, and perform other related actions.  */
22515
22516 static void
22517 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
22518 {
22519   int i;
22520   struct tree_check *check_value;
22521   deferred_access_check *chk;
22522   VEC (deferred_access_check,gc) *checks;
22523
22524   /* Get the stored value.  */
22525   check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
22526   /* Perform any access checks that were deferred.  */
22527   checks = check_value->checks;
22528   if (checks)
22529     {
22530       FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
22531         perform_or_defer_access_check (chk->binfo,
22532                                        chk->decl,
22533                                        chk->diag_decl);
22534     }
22535   /* Set the scope from the stored value.  */
22536   parser->scope = check_value->value;
22537   parser->qualifying_scope = check_value->qualifying_scope;
22538   parser->object_scope = NULL_TREE;
22539 }
22540
22541 /* Consume tokens up through a non-nested END token.  Returns TRUE if we
22542    encounter the end of a block before what we were looking for.  */
22543
22544 static bool
22545 cp_parser_cache_group (cp_parser *parser,
22546                        enum cpp_ttype end,
22547                        unsigned depth)
22548 {
22549   while (true)
22550     {
22551       cp_token *token = cp_lexer_peek_token (parser->lexer);
22552
22553       /* Abort a parenthesized expression if we encounter a semicolon.  */
22554       if ((end == CPP_CLOSE_PAREN || depth == 0)
22555           && token->type == CPP_SEMICOLON)
22556         return true;
22557       /* If we've reached the end of the file, stop.  */
22558       if (token->type == CPP_EOF
22559           || (end != CPP_PRAGMA_EOL
22560               && token->type == CPP_PRAGMA_EOL))
22561         return true;
22562       if (token->type == CPP_CLOSE_BRACE && depth == 0)
22563         /* We've hit the end of an enclosing block, so there's been some
22564            kind of syntax error.  */
22565         return true;
22566
22567       /* If we're caching something finished by a comma (or semicolon),
22568          such as an NSDMI, don't consume the comma.  */
22569       if (end == CPP_COMMA
22570           && (token->type == CPP_SEMICOLON || token->type == CPP_COMMA))
22571         return false;
22572
22573       /* Consume the token.  */
22574       cp_lexer_consume_token (parser->lexer);
22575       /* See if it starts a new group.  */
22576       if (token->type == CPP_OPEN_BRACE)
22577         {
22578           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
22579           /* In theory this should probably check end == '}', but
22580              cp_parser_save_member_function_body needs it to exit
22581              after either '}' or ')' when called with ')'.  */
22582           if (depth == 0)
22583             return false;
22584         }
22585       else if (token->type == CPP_OPEN_PAREN)
22586         {
22587           cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
22588           if (depth == 0 && end == CPP_CLOSE_PAREN)
22589             return false;
22590         }
22591       else if (token->type == CPP_PRAGMA)
22592         cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
22593       else if (token->type == end)
22594         return false;
22595     }
22596 }
22597
22598 /* Begin parsing tentatively.  We always save tokens while parsing
22599    tentatively so that if the tentative parsing fails we can restore the
22600    tokens.  */
22601
22602 static void
22603 cp_parser_parse_tentatively (cp_parser* parser)
22604 {
22605   /* Enter a new parsing context.  */
22606   parser->context = cp_parser_context_new (parser->context);
22607   /* Begin saving tokens.  */
22608   cp_lexer_save_tokens (parser->lexer);
22609   /* In order to avoid repetitive access control error messages,
22610      access checks are queued up until we are no longer parsing
22611      tentatively.  */
22612   push_deferring_access_checks (dk_deferred);
22613 }
22614
22615 /* Commit to the currently active tentative parse.  */
22616
22617 static void
22618 cp_parser_commit_to_tentative_parse (cp_parser* parser)
22619 {
22620   cp_parser_context *context;
22621   cp_lexer *lexer;
22622
22623   /* Mark all of the levels as committed.  */
22624   lexer = parser->lexer;
22625   for (context = parser->context; context->next; context = context->next)
22626     {
22627       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
22628         break;
22629       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
22630       while (!cp_lexer_saving_tokens (lexer))
22631         lexer = lexer->next;
22632       cp_lexer_commit_tokens (lexer);
22633     }
22634 }
22635
22636 /* Abort the currently active tentative parse.  All consumed tokens
22637    will be rolled back, and no diagnostics will be issued.  */
22638
22639 static void
22640 cp_parser_abort_tentative_parse (cp_parser* parser)
22641 {
22642   gcc_assert (parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED
22643               || errorcount > 0);
22644   cp_parser_simulate_error (parser);
22645   /* Now, pretend that we want to see if the construct was
22646      successfully parsed.  */
22647   cp_parser_parse_definitely (parser);
22648 }
22649
22650 /* Stop parsing tentatively.  If a parse error has occurred, restore the
22651    token stream.  Otherwise, commit to the tokens we have consumed.
22652    Returns true if no error occurred; false otherwise.  */
22653
22654 static bool
22655 cp_parser_parse_definitely (cp_parser* parser)
22656 {
22657   bool error_occurred;
22658   cp_parser_context *context;
22659
22660   /* Remember whether or not an error occurred, since we are about to
22661      destroy that information.  */
22662   error_occurred = cp_parser_error_occurred (parser);
22663   /* Remove the topmost context from the stack.  */
22664   context = parser->context;
22665   parser->context = context->next;
22666   /* If no parse errors occurred, commit to the tentative parse.  */
22667   if (!error_occurred)
22668     {
22669       /* Commit to the tokens read tentatively, unless that was
22670          already done.  */
22671       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
22672         cp_lexer_commit_tokens (parser->lexer);
22673
22674       pop_to_parent_deferring_access_checks ();
22675     }
22676   /* Otherwise, if errors occurred, roll back our state so that things
22677      are just as they were before we began the tentative parse.  */
22678   else
22679     {
22680       cp_lexer_rollback_tokens (parser->lexer);
22681       pop_deferring_access_checks ();
22682     }
22683   /* Add the context to the front of the free list.  */
22684   context->next = cp_parser_context_free_list;
22685   cp_parser_context_free_list = context;
22686
22687   return !error_occurred;
22688 }
22689
22690 /* Returns true if we are parsing tentatively and are not committed to
22691    this tentative parse.  */
22692
22693 static bool
22694 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
22695 {
22696   return (cp_parser_parsing_tentatively (parser)
22697           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
22698 }
22699
22700 /* Returns nonzero iff an error has occurred during the most recent
22701    tentative parse.  */
22702
22703 static bool
22704 cp_parser_error_occurred (cp_parser* parser)
22705 {
22706   return (cp_parser_parsing_tentatively (parser)
22707           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
22708 }
22709
22710 /* Returns nonzero if GNU extensions are allowed.  */
22711
22712 static bool
22713 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
22714 {
22715   return parser->allow_gnu_extensions_p;
22716 }
22717 \f
22718 /* Objective-C++ Productions */
22719
22720
22721 /* Parse an Objective-C expression, which feeds into a primary-expression
22722    above.
22723
22724    objc-expression:
22725      objc-message-expression
22726      objc-string-literal
22727      objc-encode-expression
22728      objc-protocol-expression
22729      objc-selector-expression
22730
22731   Returns a tree representation of the expression.  */
22732
22733 static tree
22734 cp_parser_objc_expression (cp_parser* parser)
22735 {
22736   /* Try to figure out what kind of declaration is present.  */
22737   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
22738
22739   switch (kwd->type)
22740     {
22741     case CPP_OPEN_SQUARE:
22742       return cp_parser_objc_message_expression (parser);
22743
22744     case CPP_OBJC_STRING:
22745       kwd = cp_lexer_consume_token (parser->lexer);
22746       return objc_build_string_object (kwd->u.value);
22747
22748     case CPP_KEYWORD:
22749       switch (kwd->keyword)
22750         {
22751         case RID_AT_ENCODE:
22752           return cp_parser_objc_encode_expression (parser);
22753
22754         case RID_AT_PROTOCOL:
22755           return cp_parser_objc_protocol_expression (parser);
22756
22757         case RID_AT_SELECTOR:
22758           return cp_parser_objc_selector_expression (parser);
22759
22760         default:
22761           break;
22762         }
22763     default:
22764       error_at (kwd->location,
22765                 "misplaced %<@%D%> Objective-C++ construct",
22766                 kwd->u.value);
22767       cp_parser_skip_to_end_of_block_or_statement (parser);
22768     }
22769
22770   return error_mark_node;
22771 }
22772
22773 /* Parse an Objective-C message expression.
22774
22775    objc-message-expression:
22776      [ objc-message-receiver objc-message-args ]
22777
22778    Returns a representation of an Objective-C message.  */
22779
22780 static tree
22781 cp_parser_objc_message_expression (cp_parser* parser)
22782 {
22783   tree receiver, messageargs;
22784
22785   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
22786   receiver = cp_parser_objc_message_receiver (parser);
22787   messageargs = cp_parser_objc_message_args (parser);
22788   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
22789
22790   return objc_build_message_expr (receiver, messageargs);
22791 }
22792
22793 /* Parse an objc-message-receiver.
22794
22795    objc-message-receiver:
22796      expression
22797      simple-type-specifier
22798
22799   Returns a representation of the type or expression.  */
22800
22801 static tree
22802 cp_parser_objc_message_receiver (cp_parser* parser)
22803 {
22804   tree rcv;
22805
22806   /* An Objective-C message receiver may be either (1) a type
22807      or (2) an expression.  */
22808   cp_parser_parse_tentatively (parser);
22809   rcv = cp_parser_expression (parser, false, NULL);
22810
22811   if (cp_parser_parse_definitely (parser))
22812     return rcv;
22813
22814   rcv = cp_parser_simple_type_specifier (parser,
22815                                          /*decl_specs=*/NULL,
22816                                          CP_PARSER_FLAGS_NONE);
22817
22818   return objc_get_class_reference (rcv);
22819 }
22820
22821 /* Parse the arguments and selectors comprising an Objective-C message.
22822
22823    objc-message-args:
22824      objc-selector
22825      objc-selector-args
22826      objc-selector-args , objc-comma-args
22827
22828    objc-selector-args:
22829      objc-selector [opt] : assignment-expression
22830      objc-selector-args objc-selector [opt] : assignment-expression
22831
22832    objc-comma-args:
22833      assignment-expression
22834      objc-comma-args , assignment-expression
22835
22836    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
22837    selector arguments and TREE_VALUE containing a list of comma
22838    arguments.  */
22839
22840 static tree
22841 cp_parser_objc_message_args (cp_parser* parser)
22842 {
22843   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
22844   bool maybe_unary_selector_p = true;
22845   cp_token *token = cp_lexer_peek_token (parser->lexer);
22846
22847   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
22848     {
22849       tree selector = NULL_TREE, arg;
22850
22851       if (token->type != CPP_COLON)
22852         selector = cp_parser_objc_selector (parser);
22853
22854       /* Detect if we have a unary selector.  */
22855       if (maybe_unary_selector_p
22856           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
22857         return build_tree_list (selector, NULL_TREE);
22858
22859       maybe_unary_selector_p = false;
22860       cp_parser_require (parser, CPP_COLON, RT_COLON);
22861       arg = cp_parser_assignment_expression (parser, false, NULL);
22862
22863       sel_args
22864         = chainon (sel_args,
22865                    build_tree_list (selector, arg));
22866
22867       token = cp_lexer_peek_token (parser->lexer);
22868     }
22869
22870   /* Handle non-selector arguments, if any. */
22871   while (token->type == CPP_COMMA)
22872     {
22873       tree arg;
22874
22875       cp_lexer_consume_token (parser->lexer);
22876       arg = cp_parser_assignment_expression (parser, false, NULL);
22877
22878       addl_args
22879         = chainon (addl_args,
22880                    build_tree_list (NULL_TREE, arg));
22881
22882       token = cp_lexer_peek_token (parser->lexer);
22883     }
22884
22885   if (sel_args == NULL_TREE && addl_args == NULL_TREE)
22886     {
22887       cp_parser_error (parser, "objective-c++ message argument(s) are expected");
22888       return build_tree_list (error_mark_node, error_mark_node);
22889     }
22890
22891   return build_tree_list (sel_args, addl_args);
22892 }
22893
22894 /* Parse an Objective-C encode expression.
22895
22896    objc-encode-expression:
22897      @encode objc-typename
22898
22899    Returns an encoded representation of the type argument.  */
22900
22901 static tree
22902 cp_parser_objc_encode_expression (cp_parser* parser)
22903 {
22904   tree type;
22905   cp_token *token;
22906
22907   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
22908   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22909   token = cp_lexer_peek_token (parser->lexer);
22910   type = complete_type (cp_parser_type_id (parser));
22911   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22912
22913   if (!type)
22914     {
22915       error_at (token->location, 
22916                 "%<@encode%> must specify a type as an argument");
22917       return error_mark_node;
22918     }
22919
22920   /* This happens if we find @encode(T) (where T is a template
22921      typename or something dependent on a template typename) when
22922      parsing a template.  In that case, we can't compile it
22923      immediately, but we rather create an AT_ENCODE_EXPR which will
22924      need to be instantiated when the template is used.
22925   */
22926   if (dependent_type_p (type))
22927     {
22928       tree value = build_min (AT_ENCODE_EXPR, size_type_node, type);
22929       TREE_READONLY (value) = 1;
22930       return value;
22931     }
22932
22933   return objc_build_encode_expr (type);
22934 }
22935
22936 /* Parse an Objective-C @defs expression.  */
22937
22938 static tree
22939 cp_parser_objc_defs_expression (cp_parser *parser)
22940 {
22941   tree name;
22942
22943   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
22944   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22945   name = cp_parser_identifier (parser);
22946   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22947
22948   return objc_get_class_ivars (name);
22949 }
22950
22951 /* Parse an Objective-C protocol expression.
22952
22953   objc-protocol-expression:
22954     @protocol ( identifier )
22955
22956   Returns a representation of the protocol expression.  */
22957
22958 static tree
22959 cp_parser_objc_protocol_expression (cp_parser* parser)
22960 {
22961   tree proto;
22962
22963   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
22964   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22965   proto = cp_parser_identifier (parser);
22966   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22967
22968   return objc_build_protocol_expr (proto);
22969 }
22970
22971 /* Parse an Objective-C selector expression.
22972
22973    objc-selector-expression:
22974      @selector ( objc-method-signature )
22975
22976    objc-method-signature:
22977      objc-selector
22978      objc-selector-seq
22979
22980    objc-selector-seq:
22981      objc-selector :
22982      objc-selector-seq objc-selector :
22983
22984   Returns a representation of the method selector.  */
22985
22986 static tree
22987 cp_parser_objc_selector_expression (cp_parser* parser)
22988 {
22989   tree sel_seq = NULL_TREE;
22990   bool maybe_unary_selector_p = true;
22991   cp_token *token;
22992   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
22993
22994   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
22995   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22996   token = cp_lexer_peek_token (parser->lexer);
22997
22998   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
22999          || token->type == CPP_SCOPE)
23000     {
23001       tree selector = NULL_TREE;
23002
23003       if (token->type != CPP_COLON
23004           || token->type == CPP_SCOPE)
23005         selector = cp_parser_objc_selector (parser);
23006
23007       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
23008           && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
23009         {
23010           /* Detect if we have a unary selector.  */
23011           if (maybe_unary_selector_p)
23012             {
23013               sel_seq = selector;
23014               goto finish_selector;
23015             }
23016           else
23017             {
23018               cp_parser_error (parser, "expected %<:%>");
23019             }
23020         }
23021       maybe_unary_selector_p = false;
23022       token = cp_lexer_consume_token (parser->lexer);
23023
23024       if (token->type == CPP_SCOPE)
23025         {
23026           sel_seq
23027             = chainon (sel_seq,
23028                        build_tree_list (selector, NULL_TREE));
23029           sel_seq
23030             = chainon (sel_seq,
23031                        build_tree_list (NULL_TREE, NULL_TREE));
23032         }
23033       else
23034         sel_seq
23035           = chainon (sel_seq,
23036                      build_tree_list (selector, NULL_TREE));
23037
23038       token = cp_lexer_peek_token (parser->lexer);
23039     }
23040
23041  finish_selector:
23042   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23043
23044   return objc_build_selector_expr (loc, sel_seq);
23045 }
23046
23047 /* Parse a list of identifiers.
23048
23049    objc-identifier-list:
23050      identifier
23051      objc-identifier-list , identifier
23052
23053    Returns a TREE_LIST of identifier nodes.  */
23054
23055 static tree
23056 cp_parser_objc_identifier_list (cp_parser* parser)
23057 {
23058   tree identifier;
23059   tree list;
23060   cp_token *sep;
23061
23062   identifier = cp_parser_identifier (parser);
23063   if (identifier == error_mark_node)
23064     return error_mark_node;      
23065
23066   list = build_tree_list (NULL_TREE, identifier);
23067   sep = cp_lexer_peek_token (parser->lexer);
23068
23069   while (sep->type == CPP_COMMA)
23070     {
23071       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
23072       identifier = cp_parser_identifier (parser);
23073       if (identifier == error_mark_node)
23074         return list;
23075
23076       list = chainon (list, build_tree_list (NULL_TREE,
23077                                              identifier));
23078       sep = cp_lexer_peek_token (parser->lexer);
23079     }
23080   
23081   return list;
23082 }
23083
23084 /* Parse an Objective-C alias declaration.
23085
23086    objc-alias-declaration:
23087      @compatibility_alias identifier identifier ;
23088
23089    This function registers the alias mapping with the Objective-C front end.
23090    It returns nothing.  */
23091
23092 static void
23093 cp_parser_objc_alias_declaration (cp_parser* parser)
23094 {
23095   tree alias, orig;
23096
23097   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
23098   alias = cp_parser_identifier (parser);
23099   orig = cp_parser_identifier (parser);
23100   objc_declare_alias (alias, orig);
23101   cp_parser_consume_semicolon_at_end_of_statement (parser);
23102 }
23103
23104 /* Parse an Objective-C class forward-declaration.
23105
23106    objc-class-declaration:
23107      @class objc-identifier-list ;
23108
23109    The function registers the forward declarations with the Objective-C
23110    front end.  It returns nothing.  */
23111
23112 static void
23113 cp_parser_objc_class_declaration (cp_parser* parser)
23114 {
23115   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
23116   while (true)
23117     {
23118       tree id;
23119       
23120       id = cp_parser_identifier (parser);
23121       if (id == error_mark_node)
23122         break;
23123       
23124       objc_declare_class (id);
23125
23126       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23127         cp_lexer_consume_token (parser->lexer);
23128       else
23129         break;
23130     }
23131   cp_parser_consume_semicolon_at_end_of_statement (parser);
23132 }
23133
23134 /* Parse a list of Objective-C protocol references.
23135
23136    objc-protocol-refs-opt:
23137      objc-protocol-refs [opt]
23138
23139    objc-protocol-refs:
23140      < objc-identifier-list >
23141
23142    Returns a TREE_LIST of identifiers, if any.  */
23143
23144 static tree
23145 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
23146 {
23147   tree protorefs = NULL_TREE;
23148
23149   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
23150     {
23151       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
23152       protorefs = cp_parser_objc_identifier_list (parser);
23153       cp_parser_require (parser, CPP_GREATER, RT_GREATER);
23154     }
23155
23156   return protorefs;
23157 }
23158
23159 /* Parse a Objective-C visibility specification.  */
23160
23161 static void
23162 cp_parser_objc_visibility_spec (cp_parser* parser)
23163 {
23164   cp_token *vis = cp_lexer_peek_token (parser->lexer);
23165
23166   switch (vis->keyword)
23167     {
23168     case RID_AT_PRIVATE:
23169       objc_set_visibility (OBJC_IVAR_VIS_PRIVATE);
23170       break;
23171     case RID_AT_PROTECTED:
23172       objc_set_visibility (OBJC_IVAR_VIS_PROTECTED);
23173       break;
23174     case RID_AT_PUBLIC:
23175       objc_set_visibility (OBJC_IVAR_VIS_PUBLIC);
23176       break;
23177     case RID_AT_PACKAGE:
23178       objc_set_visibility (OBJC_IVAR_VIS_PACKAGE);
23179       break;
23180     default:
23181       return;
23182     }
23183
23184   /* Eat '@private'/'@protected'/'@public'.  */
23185   cp_lexer_consume_token (parser->lexer);
23186 }
23187
23188 /* Parse an Objective-C method type.  Return 'true' if it is a class
23189    (+) method, and 'false' if it is an instance (-) method.  */
23190
23191 static inline bool
23192 cp_parser_objc_method_type (cp_parser* parser)
23193 {
23194   if (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS)
23195     return true;
23196   else
23197     return false;
23198 }
23199
23200 /* Parse an Objective-C protocol qualifier.  */
23201
23202 static tree
23203 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
23204 {
23205   tree quals = NULL_TREE, node;
23206   cp_token *token = cp_lexer_peek_token (parser->lexer);
23207
23208   node = token->u.value;
23209
23210   while (node && TREE_CODE (node) == IDENTIFIER_NODE
23211          && (node == ridpointers [(int) RID_IN]
23212              || node == ridpointers [(int) RID_OUT]
23213              || node == ridpointers [(int) RID_INOUT]
23214              || node == ridpointers [(int) RID_BYCOPY]
23215              || node == ridpointers [(int) RID_BYREF]
23216              || node == ridpointers [(int) RID_ONEWAY]))
23217     {
23218       quals = tree_cons (NULL_TREE, node, quals);
23219       cp_lexer_consume_token (parser->lexer);
23220       token = cp_lexer_peek_token (parser->lexer);
23221       node = token->u.value;
23222     }
23223
23224   return quals;
23225 }
23226
23227 /* Parse an Objective-C typename.  */
23228
23229 static tree
23230 cp_parser_objc_typename (cp_parser* parser)
23231 {
23232   tree type_name = NULL_TREE;
23233
23234   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
23235     {
23236       tree proto_quals, cp_type = NULL_TREE;
23237
23238       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
23239       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
23240
23241       /* An ObjC type name may consist of just protocol qualifiers, in which
23242          case the type shall default to 'id'.  */
23243       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
23244         {
23245           cp_type = cp_parser_type_id (parser);
23246           
23247           /* If the type could not be parsed, an error has already
23248              been produced.  For error recovery, behave as if it had
23249              not been specified, which will use the default type
23250              'id'.  */
23251           if (cp_type == error_mark_node)
23252             {
23253               cp_type = NULL_TREE;
23254               /* We need to skip to the closing parenthesis as
23255                  cp_parser_type_id() does not seem to do it for
23256                  us.  */
23257               cp_parser_skip_to_closing_parenthesis (parser,
23258                                                      /*recovering=*/true,
23259                                                      /*or_comma=*/false,
23260                                                      /*consume_paren=*/false);
23261             }
23262         }
23263
23264       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23265       type_name = build_tree_list (proto_quals, cp_type);
23266     }
23267
23268   return type_name;
23269 }
23270
23271 /* Check to see if TYPE refers to an Objective-C selector name.  */
23272
23273 static bool
23274 cp_parser_objc_selector_p (enum cpp_ttype type)
23275 {
23276   return (type == CPP_NAME || type == CPP_KEYWORD
23277           || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
23278           || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
23279           || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
23280           || type == CPP_XOR || type == CPP_XOR_EQ);
23281 }
23282
23283 /* Parse an Objective-C selector.  */
23284
23285 static tree
23286 cp_parser_objc_selector (cp_parser* parser)
23287 {
23288   cp_token *token = cp_lexer_consume_token (parser->lexer);
23289
23290   if (!cp_parser_objc_selector_p (token->type))
23291     {
23292       error_at (token->location, "invalid Objective-C++ selector name");
23293       return error_mark_node;
23294     }
23295
23296   /* C++ operator names are allowed to appear in ObjC selectors.  */
23297   switch (token->type)
23298     {
23299     case CPP_AND_AND: return get_identifier ("and");
23300     case CPP_AND_EQ: return get_identifier ("and_eq");
23301     case CPP_AND: return get_identifier ("bitand");
23302     case CPP_OR: return get_identifier ("bitor");
23303     case CPP_COMPL: return get_identifier ("compl");
23304     case CPP_NOT: return get_identifier ("not");
23305     case CPP_NOT_EQ: return get_identifier ("not_eq");
23306     case CPP_OR_OR: return get_identifier ("or");
23307     case CPP_OR_EQ: return get_identifier ("or_eq");
23308     case CPP_XOR: return get_identifier ("xor");
23309     case CPP_XOR_EQ: return get_identifier ("xor_eq");
23310     default: return token->u.value;
23311     }
23312 }
23313
23314 /* Parse an Objective-C params list.  */
23315
23316 static tree
23317 cp_parser_objc_method_keyword_params (cp_parser* parser, tree* attributes)
23318 {
23319   tree params = NULL_TREE;
23320   bool maybe_unary_selector_p = true;
23321   cp_token *token = cp_lexer_peek_token (parser->lexer);
23322
23323   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
23324     {
23325       tree selector = NULL_TREE, type_name, identifier;
23326       tree parm_attr = NULL_TREE;
23327
23328       if (token->keyword == RID_ATTRIBUTE)
23329         break;
23330
23331       if (token->type != CPP_COLON)
23332         selector = cp_parser_objc_selector (parser);
23333
23334       /* Detect if we have a unary selector.  */
23335       if (maybe_unary_selector_p
23336           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
23337         {
23338           params = selector; /* Might be followed by attributes.  */
23339           break;
23340         }
23341
23342       maybe_unary_selector_p = false;
23343       if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
23344         {
23345           /* Something went quite wrong.  There should be a colon
23346              here, but there is not.  Stop parsing parameters.  */
23347           break;
23348         }
23349       type_name = cp_parser_objc_typename (parser);
23350       /* New ObjC allows attributes on parameters too.  */
23351       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
23352         parm_attr = cp_parser_attributes_opt (parser);
23353       identifier = cp_parser_identifier (parser);
23354
23355       params
23356         = chainon (params,
23357                    objc_build_keyword_decl (selector,
23358                                             type_name,
23359                                             identifier,
23360                                             parm_attr));
23361
23362       token = cp_lexer_peek_token (parser->lexer);
23363     }
23364
23365   if (params == NULL_TREE)
23366     {
23367       cp_parser_error (parser, "objective-c++ method declaration is expected");
23368       return error_mark_node;
23369     }
23370
23371   /* We allow tail attributes for the method.  */
23372   if (token->keyword == RID_ATTRIBUTE)
23373     {
23374       *attributes = cp_parser_attributes_opt (parser);
23375       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
23376           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
23377         return params;
23378       cp_parser_error (parser, 
23379                        "method attributes must be specified at the end");
23380       return error_mark_node;
23381     }
23382
23383   if (params == NULL_TREE)
23384     {
23385       cp_parser_error (parser, "objective-c++ method declaration is expected");
23386       return error_mark_node;
23387     }
23388   return params;
23389 }
23390
23391 /* Parse the non-keyword Objective-C params.  */
23392
23393 static tree
23394 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp, 
23395                                        tree* attributes)
23396 {
23397   tree params = make_node (TREE_LIST);
23398   cp_token *token = cp_lexer_peek_token (parser->lexer);
23399   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
23400
23401   while (token->type == CPP_COMMA)
23402     {
23403       cp_parameter_declarator *parmdecl;
23404       tree parm;
23405
23406       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
23407       token = cp_lexer_peek_token (parser->lexer);
23408
23409       if (token->type == CPP_ELLIPSIS)
23410         {
23411           cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
23412           *ellipsisp = true;
23413           token = cp_lexer_peek_token (parser->lexer);
23414           break;
23415         }
23416
23417       /* TODO: parse attributes for tail parameters.  */
23418       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
23419       parm = grokdeclarator (parmdecl->declarator,
23420                              &parmdecl->decl_specifiers,
23421                              PARM, /*initialized=*/0,
23422                              /*attrlist=*/NULL);
23423
23424       chainon (params, build_tree_list (NULL_TREE, parm));
23425       token = cp_lexer_peek_token (parser->lexer);
23426     }
23427
23428   /* We allow tail attributes for the method.  */
23429   if (token->keyword == RID_ATTRIBUTE)
23430     {
23431       if (*attributes == NULL_TREE)
23432         {
23433           *attributes = cp_parser_attributes_opt (parser);
23434           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
23435               || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
23436             return params;
23437         }
23438       else        
23439         /* We have an error, but parse the attributes, so that we can 
23440            carry on.  */
23441         *attributes = cp_parser_attributes_opt (parser);
23442
23443       cp_parser_error (parser, 
23444                        "method attributes must be specified at the end");
23445       return error_mark_node;
23446     }
23447
23448   return params;
23449 }
23450
23451 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
23452
23453 static void
23454 cp_parser_objc_interstitial_code (cp_parser* parser)
23455 {
23456   cp_token *token = cp_lexer_peek_token (parser->lexer);
23457
23458   /* If the next token is `extern' and the following token is a string
23459      literal, then we have a linkage specification.  */
23460   if (token->keyword == RID_EXTERN
23461       && cp_parser_is_pure_string_literal
23462          (cp_lexer_peek_nth_token (parser->lexer, 2)))
23463     cp_parser_linkage_specification (parser);
23464   /* Handle #pragma, if any.  */
23465   else if (token->type == CPP_PRAGMA)
23466     cp_parser_pragma (parser, pragma_external);
23467   /* Allow stray semicolons.  */
23468   else if (token->type == CPP_SEMICOLON)
23469     cp_lexer_consume_token (parser->lexer);
23470   /* Mark methods as optional or required, when building protocols.  */
23471   else if (token->keyword == RID_AT_OPTIONAL)
23472     {
23473       cp_lexer_consume_token (parser->lexer);
23474       objc_set_method_opt (true);
23475     }
23476   else if (token->keyword == RID_AT_REQUIRED)
23477     {
23478       cp_lexer_consume_token (parser->lexer);
23479       objc_set_method_opt (false);
23480     }
23481   else if (token->keyword == RID_NAMESPACE)
23482     cp_parser_namespace_definition (parser);
23483   /* Other stray characters must generate errors.  */
23484   else if (token->type == CPP_OPEN_BRACE || token->type == CPP_CLOSE_BRACE)
23485     {
23486       cp_lexer_consume_token (parser->lexer);
23487       error ("stray %qs between Objective-C++ methods",
23488              token->type == CPP_OPEN_BRACE ? "{" : "}");
23489     }
23490   /* Finally, try to parse a block-declaration, or a function-definition.  */
23491   else
23492     cp_parser_block_declaration (parser, /*statement_p=*/false);
23493 }
23494
23495 /* Parse a method signature.  */
23496
23497 static tree
23498 cp_parser_objc_method_signature (cp_parser* parser, tree* attributes)
23499 {
23500   tree rettype, kwdparms, optparms;
23501   bool ellipsis = false;
23502   bool is_class_method;
23503
23504   is_class_method = cp_parser_objc_method_type (parser);
23505   rettype = cp_parser_objc_typename (parser);
23506   *attributes = NULL_TREE;
23507   kwdparms = cp_parser_objc_method_keyword_params (parser, attributes);
23508   if (kwdparms == error_mark_node)
23509     return error_mark_node;
23510   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis, attributes);
23511   if (optparms == error_mark_node)
23512     return error_mark_node;
23513
23514   return objc_build_method_signature (is_class_method, rettype, kwdparms, optparms, ellipsis);
23515 }
23516
23517 static bool
23518 cp_parser_objc_method_maybe_bad_prefix_attributes (cp_parser* parser)
23519 {
23520   tree tattr;  
23521   cp_lexer_save_tokens (parser->lexer);
23522   tattr = cp_parser_attributes_opt (parser);
23523   gcc_assert (tattr) ;
23524   
23525   /* If the attributes are followed by a method introducer, this is not allowed.
23526      Dump the attributes and flag the situation.  */
23527   if (cp_lexer_next_token_is (parser->lexer, CPP_PLUS)
23528       || cp_lexer_next_token_is (parser->lexer, CPP_MINUS))
23529     return true;
23530
23531   /* Otherwise, the attributes introduce some interstitial code, possibly so
23532      rewind to allow that check.  */
23533   cp_lexer_rollback_tokens (parser->lexer);
23534   return false;  
23535 }
23536
23537 /* Parse an Objective-C method prototype list.  */
23538
23539 static void
23540 cp_parser_objc_method_prototype_list (cp_parser* parser)
23541 {
23542   cp_token *token = cp_lexer_peek_token (parser->lexer);
23543
23544   while (token->keyword != RID_AT_END && token->type != CPP_EOF)
23545     {
23546       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
23547         {
23548           tree attributes, sig;
23549           bool is_class_method;
23550           if (token->type == CPP_PLUS)
23551             is_class_method = true;
23552           else
23553             is_class_method = false;
23554           sig = cp_parser_objc_method_signature (parser, &attributes);
23555           if (sig == error_mark_node)
23556             {
23557               cp_parser_skip_to_end_of_block_or_statement (parser);
23558               token = cp_lexer_peek_token (parser->lexer);
23559               continue;
23560             }
23561           objc_add_method_declaration (is_class_method, sig, attributes);
23562           cp_parser_consume_semicolon_at_end_of_statement (parser);
23563         }
23564       else if (token->keyword == RID_AT_PROPERTY)
23565         cp_parser_objc_at_property_declaration (parser);
23566       else if (token->keyword == RID_ATTRIBUTE 
23567                && cp_parser_objc_method_maybe_bad_prefix_attributes(parser))
23568         warning_at (cp_lexer_peek_token (parser->lexer)->location, 
23569                     OPT_Wattributes, 
23570                     "prefix attributes are ignored for methods");
23571       else
23572         /* Allow for interspersed non-ObjC++ code.  */
23573         cp_parser_objc_interstitial_code (parser);
23574
23575       token = cp_lexer_peek_token (parser->lexer);
23576     }
23577
23578   if (token->type != CPP_EOF)
23579     cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
23580   else
23581     cp_parser_error (parser, "expected %<@end%>");
23582
23583   objc_finish_interface ();
23584 }
23585
23586 /* Parse an Objective-C method definition list.  */
23587
23588 static void
23589 cp_parser_objc_method_definition_list (cp_parser* parser)
23590 {
23591   cp_token *token = cp_lexer_peek_token (parser->lexer);
23592
23593   while (token->keyword != RID_AT_END && token->type != CPP_EOF)
23594     {
23595       tree meth;
23596
23597       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
23598         {
23599           cp_token *ptk;
23600           tree sig, attribute;
23601           bool is_class_method;
23602           if (token->type == CPP_PLUS)
23603             is_class_method = true;
23604           else
23605             is_class_method = false;
23606           push_deferring_access_checks (dk_deferred);
23607           sig = cp_parser_objc_method_signature (parser, &attribute);
23608           if (sig == error_mark_node)
23609             {
23610               cp_parser_skip_to_end_of_block_or_statement (parser);
23611               token = cp_lexer_peek_token (parser->lexer);
23612               continue;
23613             }
23614           objc_start_method_definition (is_class_method, sig, attribute,
23615                                         NULL_TREE);
23616
23617           /* For historical reasons, we accept an optional semicolon.  */
23618           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
23619             cp_lexer_consume_token (parser->lexer);
23620
23621           ptk = cp_lexer_peek_token (parser->lexer);
23622           if (!(ptk->type == CPP_PLUS || ptk->type == CPP_MINUS 
23623                 || ptk->type == CPP_EOF || ptk->keyword == RID_AT_END))
23624             {
23625               perform_deferred_access_checks ();
23626               stop_deferring_access_checks ();
23627               meth = cp_parser_function_definition_after_declarator (parser,
23628                                                                      false);
23629               pop_deferring_access_checks ();
23630               objc_finish_method_definition (meth);
23631             }
23632         }
23633       /* The following case will be removed once @synthesize is
23634          completely implemented.  */
23635       else if (token->keyword == RID_AT_PROPERTY)
23636         cp_parser_objc_at_property_declaration (parser);
23637       else if (token->keyword == RID_AT_SYNTHESIZE)
23638         cp_parser_objc_at_synthesize_declaration (parser);
23639       else if (token->keyword == RID_AT_DYNAMIC)
23640         cp_parser_objc_at_dynamic_declaration (parser);
23641       else if (token->keyword == RID_ATTRIBUTE 
23642                && cp_parser_objc_method_maybe_bad_prefix_attributes(parser))
23643         warning_at (token->location, OPT_Wattributes,
23644                     "prefix attributes are ignored for methods");
23645       else
23646         /* Allow for interspersed non-ObjC++ code.  */
23647         cp_parser_objc_interstitial_code (parser);
23648
23649       token = cp_lexer_peek_token (parser->lexer);
23650     }
23651
23652   if (token->type != CPP_EOF)
23653     cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
23654   else
23655     cp_parser_error (parser, "expected %<@end%>");
23656
23657   objc_finish_implementation ();
23658 }
23659
23660 /* Parse Objective-C ivars.  */
23661
23662 static void
23663 cp_parser_objc_class_ivars (cp_parser* parser)
23664 {
23665   cp_token *token = cp_lexer_peek_token (parser->lexer);
23666
23667   if (token->type != CPP_OPEN_BRACE)
23668     return;     /* No ivars specified.  */
23669
23670   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
23671   token = cp_lexer_peek_token (parser->lexer);
23672
23673   while (token->type != CPP_CLOSE_BRACE 
23674         && token->keyword != RID_AT_END && token->type != CPP_EOF)
23675     {
23676       cp_decl_specifier_seq declspecs;
23677       int decl_class_or_enum_p;
23678       tree prefix_attributes;
23679
23680       cp_parser_objc_visibility_spec (parser);
23681
23682       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
23683         break;
23684
23685       cp_parser_decl_specifier_seq (parser,
23686                                     CP_PARSER_FLAGS_OPTIONAL,
23687                                     &declspecs,
23688                                     &decl_class_or_enum_p);
23689
23690       /* auto, register, static, extern, mutable.  */
23691       if (declspecs.storage_class != sc_none)
23692         {
23693           cp_parser_error (parser, "invalid type for instance variable");         
23694           declspecs.storage_class = sc_none;
23695         }
23696
23697       /* __thread.  */
23698       if (declspecs.specs[(int) ds_thread])
23699         {
23700           cp_parser_error (parser, "invalid type for instance variable");
23701           declspecs.specs[(int) ds_thread] = 0;
23702         }
23703       
23704       /* typedef.  */
23705       if (declspecs.specs[(int) ds_typedef])
23706         {
23707           cp_parser_error (parser, "invalid type for instance variable");
23708           declspecs.specs[(int) ds_typedef] = 0;
23709         }
23710
23711       prefix_attributes = declspecs.attributes;
23712       declspecs.attributes = NULL_TREE;
23713
23714       /* Keep going until we hit the `;' at the end of the
23715          declaration.  */
23716       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
23717         {
23718           tree width = NULL_TREE, attributes, first_attribute, decl;
23719           cp_declarator *declarator = NULL;
23720           int ctor_dtor_or_conv_p;
23721
23722           /* Check for a (possibly unnamed) bitfield declaration.  */
23723           token = cp_lexer_peek_token (parser->lexer);
23724           if (token->type == CPP_COLON)
23725             goto eat_colon;
23726
23727           if (token->type == CPP_NAME
23728               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
23729                   == CPP_COLON))
23730             {
23731               /* Get the name of the bitfield.  */
23732               declarator = make_id_declarator (NULL_TREE,
23733                                                cp_parser_identifier (parser),
23734                                                sfk_none);
23735
23736              eat_colon:
23737               cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
23738               /* Get the width of the bitfield.  */
23739               width
23740                 = cp_parser_constant_expression (parser,
23741                                                  /*allow_non_constant=*/false,
23742                                                  NULL);
23743             }
23744           else
23745             {
23746               /* Parse the declarator.  */
23747               declarator
23748                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
23749                                         &ctor_dtor_or_conv_p,
23750                                         /*parenthesized_p=*/NULL,
23751                                         /*member_p=*/false);
23752             }
23753
23754           /* Look for attributes that apply to the ivar.  */
23755           attributes = cp_parser_attributes_opt (parser);
23756           /* Remember which attributes are prefix attributes and
23757              which are not.  */
23758           first_attribute = attributes;
23759           /* Combine the attributes.  */
23760           attributes = chainon (prefix_attributes, attributes);
23761
23762           if (width)
23763               /* Create the bitfield declaration.  */
23764               decl = grokbitfield (declarator, &declspecs,
23765                                    width,
23766                                    attributes);
23767           else
23768             decl = grokfield (declarator, &declspecs,
23769                               NULL_TREE, /*init_const_expr_p=*/false,
23770                               NULL_TREE, attributes);
23771
23772           /* Add the instance variable.  */
23773           if (decl != error_mark_node && decl != NULL_TREE)
23774             objc_add_instance_variable (decl);
23775
23776           /* Reset PREFIX_ATTRIBUTES.  */
23777           while (attributes && TREE_CHAIN (attributes) != first_attribute)
23778             attributes = TREE_CHAIN (attributes);
23779           if (attributes)
23780             TREE_CHAIN (attributes) = NULL_TREE;
23781
23782           token = cp_lexer_peek_token (parser->lexer);
23783
23784           if (token->type == CPP_COMMA)
23785             {
23786               cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
23787               continue;
23788             }
23789           break;
23790         }
23791
23792       cp_parser_consume_semicolon_at_end_of_statement (parser);
23793       token = cp_lexer_peek_token (parser->lexer);
23794     }
23795
23796   if (token->keyword == RID_AT_END)
23797     cp_parser_error (parser, "expected %<}%>");
23798
23799   /* Do not consume the RID_AT_END, so it will be read again as terminating
23800      the @interface of @implementation.  */ 
23801   if (token->keyword != RID_AT_END && token->type != CPP_EOF)
23802     cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
23803     
23804   /* For historical reasons, we accept an optional semicolon.  */
23805   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
23806     cp_lexer_consume_token (parser->lexer);
23807 }
23808
23809 /* Parse an Objective-C protocol declaration.  */
23810
23811 static void
23812 cp_parser_objc_protocol_declaration (cp_parser* parser, tree attributes)
23813 {
23814   tree proto, protorefs;
23815   cp_token *tok;
23816
23817   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
23818   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
23819     {
23820       tok = cp_lexer_peek_token (parser->lexer);
23821       error_at (tok->location, "identifier expected after %<@protocol%>");
23822       cp_parser_consume_semicolon_at_end_of_statement (parser);
23823       return;
23824     }
23825
23826   /* See if we have a forward declaration or a definition.  */
23827   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
23828
23829   /* Try a forward declaration first.  */
23830   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
23831     {
23832       while (true)
23833         {
23834           tree id;
23835           
23836           id = cp_parser_identifier (parser);
23837           if (id == error_mark_node)
23838             break;
23839           
23840           objc_declare_protocol (id, attributes);
23841           
23842           if(cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23843             cp_lexer_consume_token (parser->lexer);
23844           else
23845             break;
23846         }
23847       cp_parser_consume_semicolon_at_end_of_statement (parser);
23848     }
23849
23850   /* Ok, we got a full-fledged definition (or at least should).  */
23851   else
23852     {
23853       proto = cp_parser_identifier (parser);
23854       protorefs = cp_parser_objc_protocol_refs_opt (parser);
23855       objc_start_protocol (proto, protorefs, attributes);
23856       cp_parser_objc_method_prototype_list (parser);
23857     }
23858 }
23859
23860 /* Parse an Objective-C superclass or category.  */
23861
23862 static void
23863 cp_parser_objc_superclass_or_category (cp_parser *parser, 
23864                                        bool iface_p,
23865                                        tree *super,
23866                                        tree *categ, bool *is_class_extension)
23867 {
23868   cp_token *next = cp_lexer_peek_token (parser->lexer);
23869
23870   *super = *categ = NULL_TREE;
23871   *is_class_extension = false;
23872   if (next->type == CPP_COLON)
23873     {
23874       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
23875       *super = cp_parser_identifier (parser);
23876     }
23877   else if (next->type == CPP_OPEN_PAREN)
23878     {
23879       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
23880
23881       /* If there is no category name, and this is an @interface, we
23882          have a class extension.  */
23883       if (iface_p && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
23884         {
23885           *categ = NULL_TREE;
23886           *is_class_extension = true;
23887         }
23888       else
23889         *categ = cp_parser_identifier (parser);
23890
23891       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23892     }
23893 }
23894
23895 /* Parse an Objective-C class interface.  */
23896
23897 static void
23898 cp_parser_objc_class_interface (cp_parser* parser, tree attributes)
23899 {
23900   tree name, super, categ, protos;
23901   bool is_class_extension;
23902
23903   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
23904   name = cp_parser_identifier (parser);
23905   if (name == error_mark_node)
23906     {
23907       /* It's hard to recover because even if valid @interface stuff
23908          is to follow, we can't compile it (or validate it) if we
23909          don't even know which class it refers to.  Let's assume this
23910          was a stray '@interface' token in the stream and skip it.
23911       */
23912       return;
23913     }
23914   cp_parser_objc_superclass_or_category (parser, true, &super, &categ,
23915                                          &is_class_extension);
23916   protos = cp_parser_objc_protocol_refs_opt (parser);
23917
23918   /* We have either a class or a category on our hands.  */
23919   if (categ || is_class_extension)
23920     objc_start_category_interface (name, categ, protos, attributes);
23921   else
23922     {
23923       objc_start_class_interface (name, super, protos, attributes);
23924       /* Handle instance variable declarations, if any.  */
23925       cp_parser_objc_class_ivars (parser);
23926       objc_continue_interface ();
23927     }
23928
23929   cp_parser_objc_method_prototype_list (parser);
23930 }
23931
23932 /* Parse an Objective-C class implementation.  */
23933
23934 static void
23935 cp_parser_objc_class_implementation (cp_parser* parser)
23936 {
23937   tree name, super, categ;
23938   bool is_class_extension;
23939
23940   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
23941   name = cp_parser_identifier (parser);
23942   if (name == error_mark_node)
23943     {
23944       /* It's hard to recover because even if valid @implementation
23945          stuff is to follow, we can't compile it (or validate it) if
23946          we don't even know which class it refers to.  Let's assume
23947          this was a stray '@implementation' token in the stream and
23948          skip it.
23949       */
23950       return;
23951     }
23952   cp_parser_objc_superclass_or_category (parser, false, &super, &categ,
23953                                          &is_class_extension);
23954
23955   /* We have either a class or a category on our hands.  */
23956   if (categ)
23957     objc_start_category_implementation (name, categ);
23958   else
23959     {
23960       objc_start_class_implementation (name, super);
23961       /* Handle instance variable declarations, if any.  */
23962       cp_parser_objc_class_ivars (parser);
23963       objc_continue_implementation ();
23964     }
23965
23966   cp_parser_objc_method_definition_list (parser);
23967 }
23968
23969 /* Consume the @end token and finish off the implementation.  */
23970
23971 static void
23972 cp_parser_objc_end_implementation (cp_parser* parser)
23973 {
23974   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
23975   objc_finish_implementation ();
23976 }
23977
23978 /* Parse an Objective-C declaration.  */
23979
23980 static void
23981 cp_parser_objc_declaration (cp_parser* parser, tree attributes)
23982 {
23983   /* Try to figure out what kind of declaration is present.  */
23984   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
23985
23986   if (attributes)
23987     switch (kwd->keyword)
23988       {
23989         case RID_AT_ALIAS:
23990         case RID_AT_CLASS:
23991         case RID_AT_END:
23992           error_at (kwd->location, "attributes may not be specified before"
23993                     " the %<@%D%> Objective-C++ keyword",
23994                     kwd->u.value);
23995           attributes = NULL;
23996           break;
23997         case RID_AT_IMPLEMENTATION:
23998           warning_at (kwd->location, OPT_Wattributes,
23999                       "prefix attributes are ignored before %<@%D%>",
24000                       kwd->u.value);
24001           attributes = NULL;
24002         default:
24003           break;
24004       }
24005
24006   switch (kwd->keyword)
24007     {
24008     case RID_AT_ALIAS:
24009       cp_parser_objc_alias_declaration (parser);
24010       break;
24011     case RID_AT_CLASS:
24012       cp_parser_objc_class_declaration (parser);
24013       break;
24014     case RID_AT_PROTOCOL:
24015       cp_parser_objc_protocol_declaration (parser, attributes);
24016       break;
24017     case RID_AT_INTERFACE:
24018       cp_parser_objc_class_interface (parser, attributes);
24019       break;
24020     case RID_AT_IMPLEMENTATION:
24021       cp_parser_objc_class_implementation (parser);
24022       break;
24023     case RID_AT_END:
24024       cp_parser_objc_end_implementation (parser);
24025       break;
24026     default:
24027       error_at (kwd->location, "misplaced %<@%D%> Objective-C++ construct",
24028                 kwd->u.value);
24029       cp_parser_skip_to_end_of_block_or_statement (parser);
24030     }
24031 }
24032
24033 /* Parse an Objective-C try-catch-finally statement.
24034
24035    objc-try-catch-finally-stmt:
24036      @try compound-statement objc-catch-clause-seq [opt]
24037        objc-finally-clause [opt]
24038
24039    objc-catch-clause-seq:
24040      objc-catch-clause objc-catch-clause-seq [opt]
24041
24042    objc-catch-clause:
24043      @catch ( objc-exception-declaration ) compound-statement
24044
24045    objc-finally-clause:
24046      @finally compound-statement
24047
24048    objc-exception-declaration:
24049      parameter-declaration
24050      '...'
24051
24052    where '...' is to be interpreted literally, that is, it means CPP_ELLIPSIS.
24053
24054    Returns NULL_TREE.
24055
24056    PS: This function is identical to c_parser_objc_try_catch_finally_statement
24057    for C.  Keep them in sync.  */   
24058
24059 static tree
24060 cp_parser_objc_try_catch_finally_statement (cp_parser *parser)
24061 {
24062   location_t location;
24063   tree stmt;
24064
24065   cp_parser_require_keyword (parser, RID_AT_TRY, RT_AT_TRY);
24066   location = cp_lexer_peek_token (parser->lexer)->location;
24067   objc_maybe_warn_exceptions (location);
24068   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
24069      node, lest it get absorbed into the surrounding block.  */
24070   stmt = push_stmt_list ();
24071   cp_parser_compound_statement (parser, NULL, false, false);
24072   objc_begin_try_stmt (location, pop_stmt_list (stmt));
24073
24074   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
24075     {
24076       cp_parameter_declarator *parm;
24077       tree parameter_declaration = error_mark_node;
24078       bool seen_open_paren = false;
24079
24080       cp_lexer_consume_token (parser->lexer);
24081       if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24082         seen_open_paren = true;
24083       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
24084         {
24085           /* We have "@catch (...)" (where the '...' are literally
24086              what is in the code).  Skip the '...'.
24087              parameter_declaration is set to NULL_TREE, and
24088              objc_being_catch_clauses() knows that that means
24089              '...'.  */
24090           cp_lexer_consume_token (parser->lexer);
24091           parameter_declaration = NULL_TREE;
24092         }
24093       else
24094         {
24095           /* We have "@catch (NSException *exception)" or something
24096              like that.  Parse the parameter declaration.  */
24097           parm = cp_parser_parameter_declaration (parser, false, NULL);
24098           if (parm == NULL)
24099             parameter_declaration = error_mark_node;
24100           else
24101             parameter_declaration = grokdeclarator (parm->declarator,
24102                                                     &parm->decl_specifiers,
24103                                                     PARM, /*initialized=*/0,
24104                                                     /*attrlist=*/NULL);
24105         }
24106       if (seen_open_paren)
24107         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
24108       else
24109         {
24110           /* If there was no open parenthesis, we are recovering from
24111              an error, and we are trying to figure out what mistake
24112              the user has made.  */
24113
24114           /* If there is an immediate closing parenthesis, the user
24115              probably forgot the opening one (ie, they typed "@catch
24116              NSException *e)".  Parse the closing parenthesis and keep
24117              going.  */
24118           if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
24119             cp_lexer_consume_token (parser->lexer);
24120           
24121           /* If these is no immediate closing parenthesis, the user
24122              probably doesn't know that parenthesis are required at
24123              all (ie, they typed "@catch NSException *e").  So, just
24124              forget about the closing parenthesis and keep going.  */
24125         }
24126       objc_begin_catch_clause (parameter_declaration);
24127       cp_parser_compound_statement (parser, NULL, false, false);
24128       objc_finish_catch_clause ();
24129     }
24130   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
24131     {
24132       cp_lexer_consume_token (parser->lexer);
24133       location = cp_lexer_peek_token (parser->lexer)->location;
24134       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
24135          node, lest it get absorbed into the surrounding block.  */
24136       stmt = push_stmt_list ();
24137       cp_parser_compound_statement (parser, NULL, false, false);
24138       objc_build_finally_clause (location, pop_stmt_list (stmt));
24139     }
24140
24141   return objc_finish_try_stmt ();
24142 }
24143
24144 /* Parse an Objective-C synchronized statement.
24145
24146    objc-synchronized-stmt:
24147      @synchronized ( expression ) compound-statement
24148
24149    Returns NULL_TREE.  */
24150
24151 static tree
24152 cp_parser_objc_synchronized_statement (cp_parser *parser)
24153 {
24154   location_t location;
24155   tree lock, stmt;
24156
24157   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, RT_AT_SYNCHRONIZED);
24158
24159   location = cp_lexer_peek_token (parser->lexer)->location;
24160   objc_maybe_warn_exceptions (location);
24161   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
24162   lock = cp_parser_expression (parser, false, NULL);
24163   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
24164
24165   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
24166      node, lest it get absorbed into the surrounding block.  */
24167   stmt = push_stmt_list ();
24168   cp_parser_compound_statement (parser, NULL, false, false);
24169
24170   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
24171 }
24172
24173 /* Parse an Objective-C throw statement.
24174
24175    objc-throw-stmt:
24176      @throw assignment-expression [opt] ;
24177
24178    Returns a constructed '@throw' statement.  */
24179
24180 static tree
24181 cp_parser_objc_throw_statement (cp_parser *parser)
24182 {
24183   tree expr = NULL_TREE;
24184   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
24185
24186   cp_parser_require_keyword (parser, RID_AT_THROW, RT_AT_THROW);
24187
24188   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
24189     expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
24190
24191   cp_parser_consume_semicolon_at_end_of_statement (parser);
24192
24193   return objc_build_throw_stmt (loc, expr);
24194 }
24195
24196 /* Parse an Objective-C statement.  */
24197
24198 static tree
24199 cp_parser_objc_statement (cp_parser * parser)
24200 {
24201   /* Try to figure out what kind of declaration is present.  */
24202   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
24203
24204   switch (kwd->keyword)
24205     {
24206     case RID_AT_TRY:
24207       return cp_parser_objc_try_catch_finally_statement (parser);
24208     case RID_AT_SYNCHRONIZED:
24209       return cp_parser_objc_synchronized_statement (parser);
24210     case RID_AT_THROW:
24211       return cp_parser_objc_throw_statement (parser);
24212     default:
24213       error_at (kwd->location, "misplaced %<@%D%> Objective-C++ construct",
24214                kwd->u.value);
24215       cp_parser_skip_to_end_of_block_or_statement (parser);
24216     }
24217
24218   return error_mark_node;
24219 }
24220
24221 /* If we are compiling ObjC++ and we see an __attribute__ we neeed to 
24222    look ahead to see if an objc keyword follows the attributes.  This
24223    is to detect the use of prefix attributes on ObjC @interface and 
24224    @protocol.  */
24225
24226 static bool
24227 cp_parser_objc_valid_prefix_attributes (cp_parser* parser, tree *attrib)
24228 {
24229   cp_lexer_save_tokens (parser->lexer);
24230   *attrib = cp_parser_attributes_opt (parser);
24231   gcc_assert (*attrib);
24232   if (OBJC_IS_AT_KEYWORD (cp_lexer_peek_token (parser->lexer)->keyword))
24233     {
24234       cp_lexer_commit_tokens (parser->lexer);
24235       return true;
24236     }
24237   cp_lexer_rollback_tokens (parser->lexer);
24238   return false;  
24239 }
24240
24241 /* This routine is a minimal replacement for
24242    c_parser_struct_declaration () used when parsing the list of
24243    types/names or ObjC++ properties.  For example, when parsing the
24244    code
24245
24246    @property (readonly) int a, b, c;
24247
24248    this function is responsible for parsing "int a, int b, int c" and
24249    returning the declarations as CHAIN of DECLs.
24250
24251    TODO: Share this code with cp_parser_objc_class_ivars.  It's very
24252    similar parsing.  */
24253 static tree
24254 cp_parser_objc_struct_declaration (cp_parser *parser)
24255 {
24256   tree decls = NULL_TREE;
24257   cp_decl_specifier_seq declspecs;
24258   int decl_class_or_enum_p;
24259   tree prefix_attributes;
24260
24261   cp_parser_decl_specifier_seq (parser,
24262                                 CP_PARSER_FLAGS_NONE,
24263                                 &declspecs,
24264                                 &decl_class_or_enum_p);
24265
24266   if (declspecs.type == error_mark_node)
24267     return error_mark_node;
24268
24269   /* auto, register, static, extern, mutable.  */
24270   if (declspecs.storage_class != sc_none)
24271     {
24272       cp_parser_error (parser, "invalid type for property");
24273       declspecs.storage_class = sc_none;
24274     }
24275   
24276   /* __thread.  */
24277   if (declspecs.specs[(int) ds_thread])
24278     {
24279       cp_parser_error (parser, "invalid type for property");
24280       declspecs.specs[(int) ds_thread] = 0;
24281     }
24282   
24283   /* typedef.  */
24284   if (declspecs.specs[(int) ds_typedef])
24285     {
24286       cp_parser_error (parser, "invalid type for property");
24287       declspecs.specs[(int) ds_typedef] = 0;
24288     }
24289
24290   prefix_attributes = declspecs.attributes;
24291   declspecs.attributes = NULL_TREE;
24292
24293   /* Keep going until we hit the `;' at the end of the declaration. */
24294   while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
24295     {
24296       tree attributes, first_attribute, decl;
24297       cp_declarator *declarator;
24298       cp_token *token;
24299
24300       /* Parse the declarator.  */
24301       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
24302                                          NULL, NULL, false);
24303
24304       /* Look for attributes that apply to the ivar.  */
24305       attributes = cp_parser_attributes_opt (parser);
24306       /* Remember which attributes are prefix attributes and
24307          which are not.  */
24308       first_attribute = attributes;
24309       /* Combine the attributes.  */
24310       attributes = chainon (prefix_attributes, attributes);
24311       
24312       decl = grokfield (declarator, &declspecs,
24313                         NULL_TREE, /*init_const_expr_p=*/false,
24314                         NULL_TREE, attributes);
24315
24316       if (decl == error_mark_node || decl == NULL_TREE)
24317         return error_mark_node;
24318       
24319       /* Reset PREFIX_ATTRIBUTES.  */
24320       while (attributes && TREE_CHAIN (attributes) != first_attribute)
24321         attributes = TREE_CHAIN (attributes);
24322       if (attributes)
24323         TREE_CHAIN (attributes) = NULL_TREE;
24324
24325       DECL_CHAIN (decl) = decls;
24326       decls = decl;
24327
24328       token = cp_lexer_peek_token (parser->lexer);
24329       if (token->type == CPP_COMMA)
24330         {
24331           cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
24332           continue;
24333         }
24334       else
24335         break;
24336     }
24337   return decls;
24338 }
24339
24340 /* Parse an Objective-C @property declaration.  The syntax is:
24341
24342    objc-property-declaration:
24343      '@property' objc-property-attributes[opt] struct-declaration ;
24344
24345    objc-property-attributes:
24346     '(' objc-property-attribute-list ')'
24347
24348    objc-property-attribute-list:
24349      objc-property-attribute
24350      objc-property-attribute-list, objc-property-attribute
24351
24352    objc-property-attribute
24353      'getter' = identifier
24354      'setter' = identifier
24355      'readonly'
24356      'readwrite'
24357      'assign'
24358      'retain'
24359      'copy'
24360      'nonatomic'
24361
24362   For example:
24363     @property NSString *name;
24364     @property (readonly) id object;
24365     @property (retain, nonatomic, getter=getTheName) id name;
24366     @property int a, b, c;
24367
24368    PS: This function is identical to
24369    c_parser_objc_at_property_declaration for C.  Keep them in sync.  */
24370 static void 
24371 cp_parser_objc_at_property_declaration (cp_parser *parser)
24372 {
24373   /* The following variables hold the attributes of the properties as
24374      parsed.  They are 'false' or 'NULL_TREE' if the attribute was not
24375      seen.  When we see an attribute, we set them to 'true' (if they
24376      are boolean properties) or to the identifier (if they have an
24377      argument, ie, for getter and setter).  Note that here we only
24378      parse the list of attributes, check the syntax and accumulate the
24379      attributes that we find.  objc_add_property_declaration() will
24380      then process the information.  */
24381   bool property_assign = false;
24382   bool property_copy = false;
24383   tree property_getter_ident = NULL_TREE;
24384   bool property_nonatomic = false;
24385   bool property_readonly = false;
24386   bool property_readwrite = false;
24387   bool property_retain = false;
24388   tree property_setter_ident = NULL_TREE;
24389
24390   /* 'properties' is the list of properties that we read.  Usually a
24391      single one, but maybe more (eg, in "@property int a, b, c;" there
24392      are three).  */
24393   tree properties;
24394   location_t loc;
24395
24396   loc = cp_lexer_peek_token (parser->lexer)->location;
24397
24398   cp_lexer_consume_token (parser->lexer);  /* Eat '@property'.  */
24399
24400   /* Parse the optional attribute list...  */
24401   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
24402     {
24403       /* Eat the '('.  */
24404       cp_lexer_consume_token (parser->lexer);
24405
24406       while (true)
24407         {
24408           bool syntax_error = false;
24409           cp_token *token = cp_lexer_peek_token (parser->lexer);
24410           enum rid keyword;
24411
24412           if (token->type != CPP_NAME)
24413             {
24414               cp_parser_error (parser, "expected identifier");
24415               break;
24416             }
24417           keyword = C_RID_CODE (token->u.value);
24418           cp_lexer_consume_token (parser->lexer);
24419           switch (keyword)
24420             {
24421             case RID_ASSIGN:    property_assign = true;    break;
24422             case RID_COPY:      property_copy = true;      break;
24423             case RID_NONATOMIC: property_nonatomic = true; break;
24424             case RID_READONLY:  property_readonly = true;  break;
24425             case RID_READWRITE: property_readwrite = true; break;
24426             case RID_RETAIN:    property_retain = true;    break;
24427
24428             case RID_GETTER:
24429             case RID_SETTER:
24430               if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
24431                 {
24432                   if (keyword == RID_GETTER)
24433                     cp_parser_error (parser,
24434                                      "missing %<=%> (after %<getter%> attribute)");
24435                   else
24436                     cp_parser_error (parser,
24437                                      "missing %<=%> (after %<setter%> attribute)");
24438                   syntax_error = true;
24439                   break;
24440                 }
24441               cp_lexer_consume_token (parser->lexer); /* eat the = */
24442               if (!cp_parser_objc_selector_p (cp_lexer_peek_token (parser->lexer)->type))
24443                 {
24444                   cp_parser_error (parser, "expected identifier");
24445                   syntax_error = true;
24446                   break;
24447                 }
24448               if (keyword == RID_SETTER)
24449                 {
24450                   if (property_setter_ident != NULL_TREE)
24451                     {
24452                       cp_parser_error (parser, "the %<setter%> attribute may only be specified once");
24453                       cp_lexer_consume_token (parser->lexer);
24454                     }
24455                   else
24456                     property_setter_ident = cp_parser_objc_selector (parser);
24457                   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
24458                     cp_parser_error (parser, "setter name must terminate with %<:%>");
24459                   else
24460                     cp_lexer_consume_token (parser->lexer);
24461                 }
24462               else
24463                 {
24464                   if (property_getter_ident != NULL_TREE)
24465                     {
24466                       cp_parser_error (parser, "the %<getter%> attribute may only be specified once");
24467                       cp_lexer_consume_token (parser->lexer);
24468                     }
24469                   else
24470                     property_getter_ident = cp_parser_objc_selector (parser);
24471                 }
24472               break;
24473             default:
24474               cp_parser_error (parser, "unknown property attribute");
24475               syntax_error = true;
24476               break;
24477             }
24478
24479           if (syntax_error)
24480             break;
24481
24482           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24483             cp_lexer_consume_token (parser->lexer);
24484           else
24485             break;
24486         }
24487
24488       /* FIXME: "@property (setter, assign);" will generate a spurious
24489          "error: expected â€˜)’ before â€˜,’ token".  This is because
24490          cp_parser_require, unlike the C counterpart, will produce an
24491          error even if we are in error recovery.  */
24492       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24493         {
24494           cp_parser_skip_to_closing_parenthesis (parser,
24495                                                  /*recovering=*/true,
24496                                                  /*or_comma=*/false,
24497                                                  /*consume_paren=*/true);
24498         }
24499     }
24500
24501   /* ... and the property declaration(s).  */
24502   properties = cp_parser_objc_struct_declaration (parser);
24503
24504   if (properties == error_mark_node)
24505     {
24506       cp_parser_skip_to_end_of_statement (parser);
24507       /* If the next token is now a `;', consume it.  */
24508       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
24509         cp_lexer_consume_token (parser->lexer);
24510       return;
24511     }
24512
24513   if (properties == NULL_TREE)
24514     cp_parser_error (parser, "expected identifier");
24515   else
24516     {
24517       /* Comma-separated properties are chained together in
24518          reverse order; add them one by one.  */
24519       properties = nreverse (properties);
24520       
24521       for (; properties; properties = TREE_CHAIN (properties))
24522         objc_add_property_declaration (loc, copy_node (properties),
24523                                        property_readonly, property_readwrite,
24524                                        property_assign, property_retain,
24525                                        property_copy, property_nonatomic,
24526                                        property_getter_ident, property_setter_ident);
24527     }
24528   
24529   cp_parser_consume_semicolon_at_end_of_statement (parser);
24530 }
24531
24532 /* Parse an Objective-C++ @synthesize declaration.  The syntax is:
24533
24534    objc-synthesize-declaration:
24535      @synthesize objc-synthesize-identifier-list ;
24536
24537    objc-synthesize-identifier-list:
24538      objc-synthesize-identifier
24539      objc-synthesize-identifier-list, objc-synthesize-identifier
24540
24541    objc-synthesize-identifier
24542      identifier
24543      identifier = identifier
24544
24545   For example:
24546     @synthesize MyProperty;
24547     @synthesize OneProperty, AnotherProperty=MyIvar, YetAnotherProperty;
24548
24549   PS: This function is identical to c_parser_objc_at_synthesize_declaration
24550   for C.  Keep them in sync.
24551 */
24552 static void 
24553 cp_parser_objc_at_synthesize_declaration (cp_parser *parser)
24554 {
24555   tree list = NULL_TREE;
24556   location_t loc;
24557   loc = cp_lexer_peek_token (parser->lexer)->location;
24558
24559   cp_lexer_consume_token (parser->lexer);  /* Eat '@synthesize'.  */
24560   while (true)
24561     {
24562       tree property, ivar;
24563       property = cp_parser_identifier (parser);
24564       if (property == error_mark_node)
24565         {
24566           cp_parser_consume_semicolon_at_end_of_statement (parser);
24567           return;
24568         }
24569       if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
24570         {
24571           cp_lexer_consume_token (parser->lexer);
24572           ivar = cp_parser_identifier (parser);
24573           if (ivar == error_mark_node)
24574             {
24575               cp_parser_consume_semicolon_at_end_of_statement (parser);
24576               return;
24577             }
24578         }
24579       else
24580         ivar = NULL_TREE;
24581       list = chainon (list, build_tree_list (ivar, property));
24582       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24583         cp_lexer_consume_token (parser->lexer);
24584       else
24585         break;
24586     }
24587   cp_parser_consume_semicolon_at_end_of_statement (parser);
24588   objc_add_synthesize_declaration (loc, list);
24589 }
24590
24591 /* Parse an Objective-C++ @dynamic declaration.  The syntax is:
24592
24593    objc-dynamic-declaration:
24594      @dynamic identifier-list ;
24595
24596    For example:
24597      @dynamic MyProperty;
24598      @dynamic MyProperty, AnotherProperty;
24599
24600   PS: This function is identical to c_parser_objc_at_dynamic_declaration
24601   for C.  Keep them in sync.
24602 */
24603 static void 
24604 cp_parser_objc_at_dynamic_declaration (cp_parser *parser)
24605 {
24606   tree list = NULL_TREE;
24607   location_t loc;
24608   loc = cp_lexer_peek_token (parser->lexer)->location;
24609
24610   cp_lexer_consume_token (parser->lexer);  /* Eat '@dynamic'.  */
24611   while (true)
24612     {
24613       tree property;
24614       property = cp_parser_identifier (parser);
24615       if (property == error_mark_node)
24616         {
24617           cp_parser_consume_semicolon_at_end_of_statement (parser);
24618           return;
24619         }
24620       list = chainon (list, build_tree_list (NULL, property));
24621       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24622         cp_lexer_consume_token (parser->lexer);
24623       else
24624         break;
24625     }
24626   cp_parser_consume_semicolon_at_end_of_statement (parser);
24627   objc_add_dynamic_declaration (loc, list);
24628 }
24629
24630 \f
24631 /* OpenMP 2.5 parsing routines.  */
24632
24633 /* Returns name of the next clause.
24634    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
24635    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
24636    returned and the token is consumed.  */
24637
24638 static pragma_omp_clause
24639 cp_parser_omp_clause_name (cp_parser *parser)
24640 {
24641   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
24642
24643   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
24644     result = PRAGMA_OMP_CLAUSE_IF;
24645   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
24646     result = PRAGMA_OMP_CLAUSE_DEFAULT;
24647   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
24648     result = PRAGMA_OMP_CLAUSE_PRIVATE;
24649   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
24650     {
24651       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
24652       const char *p = IDENTIFIER_POINTER (id);
24653
24654       switch (p[0])
24655         {
24656         case 'c':
24657           if (!strcmp ("collapse", p))
24658             result = PRAGMA_OMP_CLAUSE_COLLAPSE;
24659           else if (!strcmp ("copyin", p))
24660             result = PRAGMA_OMP_CLAUSE_COPYIN;
24661           else if (!strcmp ("copyprivate", p))
24662             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
24663           break;
24664         case 'f':
24665           if (!strcmp ("final", p))
24666             result = PRAGMA_OMP_CLAUSE_FINAL;
24667           else if (!strcmp ("firstprivate", p))
24668             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
24669           break;
24670         case 'l':
24671           if (!strcmp ("lastprivate", p))
24672             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
24673           break;
24674         case 'm':
24675           if (!strcmp ("mergeable", p))
24676             result = PRAGMA_OMP_CLAUSE_MERGEABLE;
24677           break;
24678         case 'n':
24679           if (!strcmp ("nowait", p))
24680             result = PRAGMA_OMP_CLAUSE_NOWAIT;
24681           else if (!strcmp ("num_threads", p))
24682             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
24683           break;
24684         case 'o':
24685           if (!strcmp ("ordered", p))
24686             result = PRAGMA_OMP_CLAUSE_ORDERED;
24687           break;
24688         case 'r':
24689           if (!strcmp ("reduction", p))
24690             result = PRAGMA_OMP_CLAUSE_REDUCTION;
24691           break;
24692         case 's':
24693           if (!strcmp ("schedule", p))
24694             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
24695           else if (!strcmp ("shared", p))
24696             result = PRAGMA_OMP_CLAUSE_SHARED;
24697           break;
24698         case 'u':
24699           if (!strcmp ("untied", p))
24700             result = PRAGMA_OMP_CLAUSE_UNTIED;
24701           break;
24702         }
24703     }
24704
24705   if (result != PRAGMA_OMP_CLAUSE_NONE)
24706     cp_lexer_consume_token (parser->lexer);
24707
24708   return result;
24709 }
24710
24711 /* Validate that a clause of the given type does not already exist.  */
24712
24713 static void
24714 check_no_duplicate_clause (tree clauses, enum omp_clause_code code,
24715                            const char *name, location_t location)
24716 {
24717   tree c;
24718
24719   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
24720     if (OMP_CLAUSE_CODE (c) == code)
24721       {
24722         error_at (location, "too many %qs clauses", name);
24723         break;
24724       }
24725 }
24726
24727 /* OpenMP 2.5:
24728    variable-list:
24729      identifier
24730      variable-list , identifier
24731
24732    In addition, we match a closing parenthesis.  An opening parenthesis
24733    will have been consumed by the caller.
24734
24735    If KIND is nonzero, create the appropriate node and install the decl
24736    in OMP_CLAUSE_DECL and add the node to the head of the list.
24737
24738    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
24739    return the list created.  */
24740
24741 static tree
24742 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
24743                                 tree list)
24744 {
24745   cp_token *token;
24746   while (1)
24747     {
24748       tree name, decl;
24749
24750       token = cp_lexer_peek_token (parser->lexer);
24751       name = cp_parser_id_expression (parser, /*template_p=*/false,
24752                                       /*check_dependency_p=*/true,
24753                                       /*template_p=*/NULL,
24754                                       /*declarator_p=*/false,
24755                                       /*optional_p=*/false);
24756       if (name == error_mark_node)
24757         goto skip_comma;
24758
24759       decl = cp_parser_lookup_name_simple (parser, name, token->location);
24760       if (decl == error_mark_node)
24761         cp_parser_name_lookup_error (parser, name, decl, NLE_NULL,
24762                                      token->location);
24763       else if (kind != 0)
24764         {
24765           tree u = build_omp_clause (token->location, kind);
24766           OMP_CLAUSE_DECL (u) = decl;
24767           OMP_CLAUSE_CHAIN (u) = list;
24768           list = u;
24769         }
24770       else
24771         list = tree_cons (decl, NULL_TREE, list);
24772
24773     get_comma:
24774       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
24775         break;
24776       cp_lexer_consume_token (parser->lexer);
24777     }
24778
24779   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24780     {
24781       int ending;
24782
24783       /* Try to resync to an unnested comma.  Copied from
24784          cp_parser_parenthesized_expression_list.  */
24785     skip_comma:
24786       ending = cp_parser_skip_to_closing_parenthesis (parser,
24787                                                       /*recovering=*/true,
24788                                                       /*or_comma=*/true,
24789                                                       /*consume_paren=*/true);
24790       if (ending < 0)
24791         goto get_comma;
24792     }
24793
24794   return list;
24795 }
24796
24797 /* Similarly, but expect leading and trailing parenthesis.  This is a very
24798    common case for omp clauses.  */
24799
24800 static tree
24801 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
24802 {
24803   if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24804     return cp_parser_omp_var_list_no_open (parser, kind, list);
24805   return list;
24806 }
24807
24808 /* OpenMP 3.0:
24809    collapse ( constant-expression ) */
24810
24811 static tree
24812 cp_parser_omp_clause_collapse (cp_parser *parser, tree list, location_t location)
24813 {
24814   tree c, num;
24815   location_t loc;
24816   HOST_WIDE_INT n;
24817
24818   loc = cp_lexer_peek_token (parser->lexer)->location;
24819   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24820     return list;
24821
24822   num = cp_parser_constant_expression (parser, false, NULL);
24823
24824   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24825     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24826                                            /*or_comma=*/false,
24827                                            /*consume_paren=*/true);
24828
24829   if (num == error_mark_node)
24830     return list;
24831   num = fold_non_dependent_expr (num);
24832   if (!INTEGRAL_TYPE_P (TREE_TYPE (num))
24833       || !host_integerp (num, 0)
24834       || (n = tree_low_cst (num, 0)) <= 0
24835       || (int) n != n)
24836     {
24837       error_at (loc, "collapse argument needs positive constant integer expression");
24838       return list;
24839     }
24840
24841   check_no_duplicate_clause (list, OMP_CLAUSE_COLLAPSE, "collapse", location);
24842   c = build_omp_clause (loc, OMP_CLAUSE_COLLAPSE);
24843   OMP_CLAUSE_CHAIN (c) = list;
24844   OMP_CLAUSE_COLLAPSE_EXPR (c) = num;
24845
24846   return c;
24847 }
24848
24849 /* OpenMP 2.5:
24850    default ( shared | none ) */
24851
24852 static tree
24853 cp_parser_omp_clause_default (cp_parser *parser, tree list, location_t location)
24854 {
24855   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
24856   tree c;
24857
24858   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24859     return list;
24860   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
24861     {
24862       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
24863       const char *p = IDENTIFIER_POINTER (id);
24864
24865       switch (p[0])
24866         {
24867         case 'n':
24868           if (strcmp ("none", p) != 0)
24869             goto invalid_kind;
24870           kind = OMP_CLAUSE_DEFAULT_NONE;
24871           break;
24872
24873         case 's':
24874           if (strcmp ("shared", p) != 0)
24875             goto invalid_kind;
24876           kind = OMP_CLAUSE_DEFAULT_SHARED;
24877           break;
24878
24879         default:
24880           goto invalid_kind;
24881         }
24882
24883       cp_lexer_consume_token (parser->lexer);
24884     }
24885   else
24886     {
24887     invalid_kind:
24888       cp_parser_error (parser, "expected %<none%> or %<shared%>");
24889     }
24890
24891   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24892     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24893                                            /*or_comma=*/false,
24894                                            /*consume_paren=*/true);
24895
24896   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
24897     return list;
24898
24899   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default", location);
24900   c = build_omp_clause (location, OMP_CLAUSE_DEFAULT);
24901   OMP_CLAUSE_CHAIN (c) = list;
24902   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
24903
24904   return c;
24905 }
24906
24907 /* OpenMP 3.1:
24908    final ( expression ) */
24909
24910 static tree
24911 cp_parser_omp_clause_final (cp_parser *parser, tree list, location_t location)
24912 {
24913   tree t, c;
24914
24915   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24916     return list;
24917
24918   t = cp_parser_condition (parser);
24919
24920   if (t == error_mark_node
24921       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24922     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24923                                            /*or_comma=*/false,
24924                                            /*consume_paren=*/true);
24925
24926   check_no_duplicate_clause (list, OMP_CLAUSE_FINAL, "final", location);
24927
24928   c = build_omp_clause (location, OMP_CLAUSE_FINAL);
24929   OMP_CLAUSE_FINAL_EXPR (c) = t;
24930   OMP_CLAUSE_CHAIN (c) = list;
24931
24932   return c;
24933 }
24934
24935 /* OpenMP 2.5:
24936    if ( expression ) */
24937
24938 static tree
24939 cp_parser_omp_clause_if (cp_parser *parser, tree list, location_t location)
24940 {
24941   tree t, c;
24942
24943   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24944     return list;
24945
24946   t = cp_parser_condition (parser);
24947
24948   if (t == error_mark_node
24949       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24950     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24951                                            /*or_comma=*/false,
24952                                            /*consume_paren=*/true);
24953
24954   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if", location);
24955
24956   c = build_omp_clause (location, OMP_CLAUSE_IF);
24957   OMP_CLAUSE_IF_EXPR (c) = t;
24958   OMP_CLAUSE_CHAIN (c) = list;
24959
24960   return c;
24961 }
24962
24963 /* OpenMP 3.1:
24964    mergeable */
24965
24966 static tree
24967 cp_parser_omp_clause_mergeable (cp_parser *parser ATTRIBUTE_UNUSED,
24968                                 tree list, location_t location)
24969 {
24970   tree c;
24971
24972   check_no_duplicate_clause (list, OMP_CLAUSE_MERGEABLE, "mergeable",
24973                              location);
24974
24975   c = build_omp_clause (location, OMP_CLAUSE_MERGEABLE);
24976   OMP_CLAUSE_CHAIN (c) = list;
24977   return c;
24978 }
24979
24980 /* OpenMP 2.5:
24981    nowait */
24982
24983 static tree
24984 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED,
24985                              tree list, location_t location)
24986 {
24987   tree c;
24988
24989   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait", location);
24990
24991   c = build_omp_clause (location, OMP_CLAUSE_NOWAIT);
24992   OMP_CLAUSE_CHAIN (c) = list;
24993   return c;
24994 }
24995
24996 /* OpenMP 2.5:
24997    num_threads ( expression ) */
24998
24999 static tree
25000 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list,
25001                                   location_t location)
25002 {
25003   tree t, c;
25004
25005   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25006     return list;
25007
25008   t = cp_parser_expression (parser, false, NULL);
25009
25010   if (t == error_mark_node
25011       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25012     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25013                                            /*or_comma=*/false,
25014                                            /*consume_paren=*/true);
25015
25016   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS,
25017                              "num_threads", location);
25018
25019   c = build_omp_clause (location, OMP_CLAUSE_NUM_THREADS);
25020   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
25021   OMP_CLAUSE_CHAIN (c) = list;
25022
25023   return c;
25024 }
25025
25026 /* OpenMP 2.5:
25027    ordered */
25028
25029 static tree
25030 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED,
25031                               tree list, location_t location)
25032 {
25033   tree c;
25034
25035   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED,
25036                              "ordered", location);
25037
25038   c = build_omp_clause (location, OMP_CLAUSE_ORDERED);
25039   OMP_CLAUSE_CHAIN (c) = list;
25040   return c;
25041 }
25042
25043 /* OpenMP 2.5:
25044    reduction ( reduction-operator : variable-list )
25045
25046    reduction-operator:
25047      One of: + * - & ^ | && ||
25048
25049    OpenMP 3.1:
25050
25051    reduction-operator:
25052      One of: + * - & ^ | && || min max  */
25053
25054 static tree
25055 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
25056 {
25057   enum tree_code code;
25058   tree nlist, c;
25059
25060   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25061     return list;
25062
25063   switch (cp_lexer_peek_token (parser->lexer)->type)
25064     {
25065     case CPP_PLUS:
25066       code = PLUS_EXPR;
25067       break;
25068     case CPP_MULT:
25069       code = MULT_EXPR;
25070       break;
25071     case CPP_MINUS:
25072       code = MINUS_EXPR;
25073       break;
25074     case CPP_AND:
25075       code = BIT_AND_EXPR;
25076       break;
25077     case CPP_XOR:
25078       code = BIT_XOR_EXPR;
25079       break;
25080     case CPP_OR:
25081       code = BIT_IOR_EXPR;
25082       break;
25083     case CPP_AND_AND:
25084       code = TRUTH_ANDIF_EXPR;
25085       break;
25086     case CPP_OR_OR:
25087       code = TRUTH_ORIF_EXPR;
25088       break;
25089     case CPP_NAME:
25090       {
25091         tree id = cp_lexer_peek_token (parser->lexer)->u.value;
25092         const char *p = IDENTIFIER_POINTER (id);
25093
25094         if (strcmp (p, "min") == 0)
25095           {
25096             code = MIN_EXPR;
25097             break;
25098           }
25099         if (strcmp (p, "max") == 0)
25100           {
25101             code = MAX_EXPR;
25102             break;
25103           }
25104       }
25105       /* FALLTHROUGH */
25106     default:
25107       cp_parser_error (parser, "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, "
25108                                "%<|%>, %<&&%>, %<||%>, %<min%> or %<max%>");
25109     resync_fail:
25110       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25111                                              /*or_comma=*/false,
25112                                              /*consume_paren=*/true);
25113       return list;
25114     }
25115   cp_lexer_consume_token (parser->lexer);
25116
25117   if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
25118     goto resync_fail;
25119
25120   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
25121   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
25122     OMP_CLAUSE_REDUCTION_CODE (c) = code;
25123
25124   return nlist;
25125 }
25126
25127 /* OpenMP 2.5:
25128    schedule ( schedule-kind )
25129    schedule ( schedule-kind , expression )
25130
25131    schedule-kind:
25132      static | dynamic | guided | runtime | auto  */
25133
25134 static tree
25135 cp_parser_omp_clause_schedule (cp_parser *parser, tree list, location_t location)
25136 {
25137   tree c, t;
25138
25139   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25140     return list;
25141
25142   c = build_omp_clause (location, OMP_CLAUSE_SCHEDULE);
25143
25144   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
25145     {
25146       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
25147       const char *p = IDENTIFIER_POINTER (id);
25148
25149       switch (p[0])
25150         {
25151         case 'd':
25152           if (strcmp ("dynamic", p) != 0)
25153             goto invalid_kind;
25154           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
25155           break;
25156
25157         case 'g':
25158           if (strcmp ("guided", p) != 0)
25159             goto invalid_kind;
25160           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
25161           break;
25162
25163         case 'r':
25164           if (strcmp ("runtime", p) != 0)
25165             goto invalid_kind;
25166           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
25167           break;
25168
25169         default:
25170           goto invalid_kind;
25171         }
25172     }
25173   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
25174     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
25175   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AUTO))
25176     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_AUTO;
25177   else
25178     goto invalid_kind;
25179   cp_lexer_consume_token (parser->lexer);
25180
25181   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
25182     {
25183       cp_token *token;
25184       cp_lexer_consume_token (parser->lexer);
25185
25186       token = cp_lexer_peek_token (parser->lexer);
25187       t = cp_parser_assignment_expression (parser, false, NULL);
25188
25189       if (t == error_mark_node)
25190         goto resync_fail;
25191       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
25192         error_at (token->location, "schedule %<runtime%> does not take "
25193                   "a %<chunk_size%> parameter");
25194       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_AUTO)
25195         error_at (token->location, "schedule %<auto%> does not take "
25196                   "a %<chunk_size%> parameter");
25197       else
25198         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
25199
25200       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25201         goto resync_fail;
25202     }
25203   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_COMMA_CLOSE_PAREN))
25204     goto resync_fail;
25205
25206   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule", location);
25207   OMP_CLAUSE_CHAIN (c) = list;
25208   return c;
25209
25210  invalid_kind:
25211   cp_parser_error (parser, "invalid schedule kind");
25212  resync_fail:
25213   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25214                                          /*or_comma=*/false,
25215                                          /*consume_paren=*/true);
25216   return list;
25217 }
25218
25219 /* OpenMP 3.0:
25220    untied */
25221
25222 static tree
25223 cp_parser_omp_clause_untied (cp_parser *parser ATTRIBUTE_UNUSED,
25224                              tree list, location_t location)
25225 {
25226   tree c;
25227
25228   check_no_duplicate_clause (list, OMP_CLAUSE_UNTIED, "untied", location);
25229
25230   c = build_omp_clause (location, OMP_CLAUSE_UNTIED);
25231   OMP_CLAUSE_CHAIN (c) = list;
25232   return c;
25233 }
25234
25235 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
25236    is a bitmask in MASK.  Return the list of clauses found; the result
25237    of clause default goes in *pdefault.  */
25238
25239 static tree
25240 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
25241                            const char *where, cp_token *pragma_tok)
25242 {
25243   tree clauses = NULL;
25244   bool first = true;
25245   cp_token *token = NULL;
25246
25247   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
25248     {
25249       pragma_omp_clause c_kind;
25250       const char *c_name;
25251       tree prev = clauses;
25252
25253       if (!first && cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
25254         cp_lexer_consume_token (parser->lexer);
25255
25256       token = cp_lexer_peek_token (parser->lexer);
25257       c_kind = cp_parser_omp_clause_name (parser);
25258       first = false;
25259
25260       switch (c_kind)
25261         {
25262         case PRAGMA_OMP_CLAUSE_COLLAPSE:
25263           clauses = cp_parser_omp_clause_collapse (parser, clauses,
25264                                                    token->location);
25265           c_name = "collapse";
25266           break;
25267         case PRAGMA_OMP_CLAUSE_COPYIN:
25268           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
25269           c_name = "copyin";
25270           break;
25271         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
25272           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
25273                                             clauses);
25274           c_name = "copyprivate";
25275           break;
25276         case PRAGMA_OMP_CLAUSE_DEFAULT:
25277           clauses = cp_parser_omp_clause_default (parser, clauses,
25278                                                   token->location);
25279           c_name = "default";
25280           break;
25281         case PRAGMA_OMP_CLAUSE_FINAL:
25282           clauses = cp_parser_omp_clause_final (parser, clauses, token->location);
25283           c_name = "final";
25284           break;
25285         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
25286           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
25287                                             clauses);
25288           c_name = "firstprivate";
25289           break;
25290         case PRAGMA_OMP_CLAUSE_IF:
25291           clauses = cp_parser_omp_clause_if (parser, clauses, token->location);
25292           c_name = "if";
25293           break;
25294         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
25295           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
25296                                             clauses);
25297           c_name = "lastprivate";
25298           break;
25299         case PRAGMA_OMP_CLAUSE_MERGEABLE:
25300           clauses = cp_parser_omp_clause_mergeable (parser, clauses,
25301                                                     token->location);
25302           c_name = "mergeable";
25303           break;
25304         case PRAGMA_OMP_CLAUSE_NOWAIT:
25305           clauses = cp_parser_omp_clause_nowait (parser, clauses, token->location);
25306           c_name = "nowait";
25307           break;
25308         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
25309           clauses = cp_parser_omp_clause_num_threads (parser, clauses,
25310                                                       token->location);
25311           c_name = "num_threads";
25312           break;
25313         case PRAGMA_OMP_CLAUSE_ORDERED:
25314           clauses = cp_parser_omp_clause_ordered (parser, clauses,
25315                                                   token->location);
25316           c_name = "ordered";
25317           break;
25318         case PRAGMA_OMP_CLAUSE_PRIVATE:
25319           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
25320                                             clauses);
25321           c_name = "private";
25322           break;
25323         case PRAGMA_OMP_CLAUSE_REDUCTION:
25324           clauses = cp_parser_omp_clause_reduction (parser, clauses);
25325           c_name = "reduction";
25326           break;
25327         case PRAGMA_OMP_CLAUSE_SCHEDULE:
25328           clauses = cp_parser_omp_clause_schedule (parser, clauses,
25329                                                    token->location);
25330           c_name = "schedule";
25331           break;
25332         case PRAGMA_OMP_CLAUSE_SHARED:
25333           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
25334                                             clauses);
25335           c_name = "shared";
25336           break;
25337         case PRAGMA_OMP_CLAUSE_UNTIED:
25338           clauses = cp_parser_omp_clause_untied (parser, clauses,
25339                                                  token->location);
25340           c_name = "nowait";
25341           break;
25342         default:
25343           cp_parser_error (parser, "expected %<#pragma omp%> clause");
25344           goto saw_error;
25345         }
25346
25347       if (((mask >> c_kind) & 1) == 0)
25348         {
25349           /* Remove the invalid clause(s) from the list to avoid
25350              confusing the rest of the compiler.  */
25351           clauses = prev;
25352           error_at (token->location, "%qs is not valid for %qs", c_name, where);
25353         }
25354     }
25355  saw_error:
25356   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
25357   return finish_omp_clauses (clauses);
25358 }
25359
25360 /* OpenMP 2.5:
25361    structured-block:
25362      statement
25363
25364    In practice, we're also interested in adding the statement to an
25365    outer node.  So it is convenient if we work around the fact that
25366    cp_parser_statement calls add_stmt.  */
25367
25368 static unsigned
25369 cp_parser_begin_omp_structured_block (cp_parser *parser)
25370 {
25371   unsigned save = parser->in_statement;
25372
25373   /* Only move the values to IN_OMP_BLOCK if they weren't false.
25374      This preserves the "not within loop or switch" style error messages
25375      for nonsense cases like
25376         void foo() {
25377         #pragma omp single
25378           break;
25379         }
25380   */
25381   if (parser->in_statement)
25382     parser->in_statement = IN_OMP_BLOCK;
25383
25384   return save;
25385 }
25386
25387 static void
25388 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
25389 {
25390   parser->in_statement = save;
25391 }
25392
25393 static tree
25394 cp_parser_omp_structured_block (cp_parser *parser)
25395 {
25396   tree stmt = begin_omp_structured_block ();
25397   unsigned int save = cp_parser_begin_omp_structured_block (parser);
25398
25399   cp_parser_statement (parser, NULL_TREE, false, NULL);
25400
25401   cp_parser_end_omp_structured_block (parser, save);
25402   return finish_omp_structured_block (stmt);
25403 }
25404
25405 /* OpenMP 2.5:
25406    # pragma omp atomic new-line
25407      expression-stmt
25408
25409    expression-stmt:
25410      x binop= expr | x++ | ++x | x-- | --x
25411    binop:
25412      +, *, -, /, &, ^, |, <<, >>
25413
25414   where x is an lvalue expression with scalar type.
25415
25416    OpenMP 3.1:
25417    # pragma omp atomic new-line
25418      update-stmt
25419
25420    # pragma omp atomic read new-line
25421      read-stmt
25422
25423    # pragma omp atomic write new-line
25424      write-stmt
25425
25426    # pragma omp atomic update new-line
25427      update-stmt
25428
25429    # pragma omp atomic capture new-line
25430      capture-stmt
25431
25432    # pragma omp atomic capture new-line
25433      capture-block
25434
25435    read-stmt:
25436      v = x
25437    write-stmt:
25438      x = expr
25439    update-stmt:
25440      expression-stmt | x = x binop expr
25441    capture-stmt:
25442      v = x binop= expr | v = x++ | v = ++x | v = x-- | v = --x
25443    capture-block:
25444      { v = x; update-stmt; } | { update-stmt; v = x; }
25445
25446   where x and v are lvalue expressions with scalar type.  */
25447
25448 static void
25449 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
25450 {
25451   tree lhs = NULL_TREE, rhs = NULL_TREE, v = NULL_TREE, lhs1 = NULL_TREE;
25452   tree rhs1 = NULL_TREE, orig_lhs;
25453   enum tree_code code = OMP_ATOMIC, opcode = NOP_EXPR;
25454   bool structured_block = false;
25455
25456   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
25457     {
25458       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
25459       const char *p = IDENTIFIER_POINTER (id);
25460
25461       if (!strcmp (p, "read"))
25462         code = OMP_ATOMIC_READ;
25463       else if (!strcmp (p, "write"))
25464         code = NOP_EXPR;
25465       else if (!strcmp (p, "update"))
25466         code = OMP_ATOMIC;
25467       else if (!strcmp (p, "capture"))
25468         code = OMP_ATOMIC_CAPTURE_NEW;
25469       else
25470         p = NULL;
25471       if (p)
25472         cp_lexer_consume_token (parser->lexer);
25473     }
25474   cp_parser_require_pragma_eol (parser, pragma_tok);
25475
25476   switch (code)
25477     {
25478     case OMP_ATOMIC_READ:
25479     case NOP_EXPR: /* atomic write */
25480       v = cp_parser_unary_expression (parser, /*address_p=*/false,
25481                                       /*cast_p=*/false, NULL);
25482       if (v == error_mark_node)
25483         goto saw_error;
25484       if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
25485         goto saw_error;
25486       if (code == NOP_EXPR)
25487         lhs = cp_parser_expression (parser, /*cast_p=*/false, NULL);
25488       else
25489         lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
25490                                           /*cast_p=*/false, NULL);
25491       if (lhs == error_mark_node)
25492         goto saw_error;
25493       if (code == NOP_EXPR)
25494         {
25495           /* atomic write is represented by OMP_ATOMIC with NOP_EXPR
25496              opcode.  */
25497           code = OMP_ATOMIC;
25498           rhs = lhs;
25499           lhs = v;
25500           v = NULL_TREE;
25501         }
25502       goto done;
25503     case OMP_ATOMIC_CAPTURE_NEW:
25504       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
25505         {
25506           cp_lexer_consume_token (parser->lexer);
25507           structured_block = true;
25508         }
25509       else
25510         {
25511           v = cp_parser_unary_expression (parser, /*address_p=*/false,
25512                                           /*cast_p=*/false, NULL);
25513           if (v == error_mark_node)
25514             goto saw_error;
25515           if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
25516             goto saw_error;
25517         }
25518     default:
25519       break;
25520     }
25521
25522 restart:
25523   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
25524                                     /*cast_p=*/false, NULL);
25525   orig_lhs = lhs;
25526   switch (TREE_CODE (lhs))
25527     {
25528     case ERROR_MARK:
25529       goto saw_error;
25530
25531     case POSTINCREMENT_EXPR:
25532       if (code == OMP_ATOMIC_CAPTURE_NEW && !structured_block)
25533         code = OMP_ATOMIC_CAPTURE_OLD;
25534       /* FALLTHROUGH */
25535     case PREINCREMENT_EXPR:
25536       lhs = TREE_OPERAND (lhs, 0);
25537       opcode = PLUS_EXPR;
25538       rhs = integer_one_node;
25539       break;
25540
25541     case POSTDECREMENT_EXPR:
25542       if (code == OMP_ATOMIC_CAPTURE_NEW && !structured_block)
25543         code = OMP_ATOMIC_CAPTURE_OLD;
25544       /* FALLTHROUGH */
25545     case PREDECREMENT_EXPR:
25546       lhs = TREE_OPERAND (lhs, 0);
25547       opcode = MINUS_EXPR;
25548       rhs = integer_one_node;
25549       break;
25550
25551     case COMPOUND_EXPR:
25552       if (TREE_CODE (TREE_OPERAND (lhs, 0)) == SAVE_EXPR
25553          && TREE_CODE (TREE_OPERAND (lhs, 1)) == COMPOUND_EXPR
25554          && TREE_CODE (TREE_OPERAND (TREE_OPERAND (lhs, 1), 0)) == MODIFY_EXPR
25555          && TREE_OPERAND (TREE_OPERAND (lhs, 1), 1) == TREE_OPERAND (lhs, 0)
25556          && TREE_CODE (TREE_TYPE (TREE_OPERAND (TREE_OPERAND
25557                                              (TREE_OPERAND (lhs, 1), 0), 0)))
25558             == BOOLEAN_TYPE)
25559        /* Undo effects of boolean_increment for post {in,de}crement.  */
25560        lhs = TREE_OPERAND (TREE_OPERAND (lhs, 1), 0);
25561       /* FALLTHRU */
25562     case MODIFY_EXPR:
25563       if (TREE_CODE (lhs) == MODIFY_EXPR
25564          && TREE_CODE (TREE_TYPE (TREE_OPERAND (lhs, 0))) == BOOLEAN_TYPE)
25565         {
25566           /* Undo effects of boolean_increment.  */
25567           if (integer_onep (TREE_OPERAND (lhs, 1)))
25568             {
25569               /* This is pre or post increment.  */
25570               rhs = TREE_OPERAND (lhs, 1);
25571               lhs = TREE_OPERAND (lhs, 0);
25572               opcode = NOP_EXPR;
25573               if (code == OMP_ATOMIC_CAPTURE_NEW
25574                   && !structured_block
25575                   && TREE_CODE (orig_lhs) == COMPOUND_EXPR)
25576                 code = OMP_ATOMIC_CAPTURE_OLD;
25577               break;
25578             }
25579         }
25580       /* FALLTHRU */
25581     default:
25582       switch (cp_lexer_peek_token (parser->lexer)->type)
25583         {
25584         case CPP_MULT_EQ:
25585           opcode = MULT_EXPR;
25586           break;
25587         case CPP_DIV_EQ:
25588           opcode = TRUNC_DIV_EXPR;
25589           break;
25590         case CPP_PLUS_EQ:
25591           opcode = PLUS_EXPR;
25592           break;
25593         case CPP_MINUS_EQ:
25594           opcode = MINUS_EXPR;
25595           break;
25596         case CPP_LSHIFT_EQ:
25597           opcode = LSHIFT_EXPR;
25598           break;
25599         case CPP_RSHIFT_EQ:
25600           opcode = RSHIFT_EXPR;
25601           break;
25602         case CPP_AND_EQ:
25603           opcode = BIT_AND_EXPR;
25604           break;
25605         case CPP_OR_EQ:
25606           opcode = BIT_IOR_EXPR;
25607           break;
25608         case CPP_XOR_EQ:
25609           opcode = BIT_XOR_EXPR;
25610           break;
25611         case CPP_EQ:
25612           if (structured_block || code == OMP_ATOMIC)
25613             {
25614               enum cp_parser_prec oprec;
25615               cp_token *token;
25616               cp_lexer_consume_token (parser->lexer);
25617               rhs1 = cp_parser_unary_expression (parser, /*address_p=*/false,
25618                                                  /*cast_p=*/false, NULL);
25619               if (rhs1 == error_mark_node)
25620                 goto saw_error;
25621               token = cp_lexer_peek_token (parser->lexer);
25622               switch (token->type)
25623                 {
25624                 case CPP_SEMICOLON:
25625                   if (code == OMP_ATOMIC_CAPTURE_NEW)
25626                     {
25627                       code = OMP_ATOMIC_CAPTURE_OLD;
25628                       v = lhs;
25629                       lhs = NULL_TREE;
25630                       lhs1 = rhs1;
25631                       rhs1 = NULL_TREE;
25632                       cp_lexer_consume_token (parser->lexer);
25633                       goto restart;
25634                     }
25635                   cp_parser_error (parser,
25636                                    "invalid form of %<#pragma omp atomic%>");
25637                   goto saw_error;
25638                 case CPP_MULT:
25639                   opcode = MULT_EXPR;
25640                   break;
25641                 case CPP_DIV:
25642                   opcode = TRUNC_DIV_EXPR;
25643                   break;
25644                 case CPP_PLUS:
25645                   opcode = PLUS_EXPR;
25646                   break;
25647                 case CPP_MINUS:
25648                   opcode = MINUS_EXPR;
25649                   break;
25650                 case CPP_LSHIFT:
25651                   opcode = LSHIFT_EXPR;
25652                   break;
25653                 case CPP_RSHIFT:
25654                   opcode = RSHIFT_EXPR;
25655                   break;
25656                 case CPP_AND:
25657                   opcode = BIT_AND_EXPR;
25658                   break;
25659                 case CPP_OR:
25660                   opcode = BIT_IOR_EXPR;
25661                   break;
25662                 case CPP_XOR:
25663                   opcode = BIT_XOR_EXPR;
25664                   break;
25665                 default:
25666                   cp_parser_error (parser,
25667                                    "invalid operator for %<#pragma omp atomic%>");
25668                   goto saw_error;
25669                 }
25670               oprec = TOKEN_PRECEDENCE (token);
25671               gcc_assert (oprec != PREC_NOT_OPERATOR);
25672               if (commutative_tree_code (opcode))
25673                 oprec = (enum cp_parser_prec) (oprec - 1);
25674               cp_lexer_consume_token (parser->lexer);
25675               rhs = cp_parser_binary_expression (parser, false, false,
25676                                                  oprec, NULL);
25677               if (rhs == error_mark_node)
25678                 goto saw_error;
25679               goto stmt_done;
25680             }
25681           /* FALLTHROUGH */
25682         default:
25683           cp_parser_error (parser,
25684                            "invalid operator for %<#pragma omp atomic%>");
25685           goto saw_error;
25686         }
25687       cp_lexer_consume_token (parser->lexer);
25688
25689       rhs = cp_parser_expression (parser, false, NULL);
25690       if (rhs == error_mark_node)
25691         goto saw_error;
25692       break;
25693     }
25694 stmt_done:
25695   if (structured_block && code == OMP_ATOMIC_CAPTURE_NEW)
25696     {
25697       if (!cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON))
25698         goto saw_error;
25699       v = cp_parser_unary_expression (parser, /*address_p=*/false,
25700                                       /*cast_p=*/false, NULL);
25701       if (v == error_mark_node)
25702         goto saw_error;
25703       if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
25704         goto saw_error;
25705       lhs1 = cp_parser_unary_expression (parser, /*address_p=*/false,
25706                                          /*cast_p=*/false, NULL);
25707       if (lhs1 == error_mark_node)
25708         goto saw_error;
25709     }
25710   if (structured_block)
25711     {
25712       cp_parser_consume_semicolon_at_end_of_statement (parser);
25713       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
25714     }
25715 done:
25716   finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
25717   if (!structured_block)
25718     cp_parser_consume_semicolon_at_end_of_statement (parser);
25719   return;
25720
25721  saw_error:
25722   cp_parser_skip_to_end_of_block_or_statement (parser);
25723   if (structured_block)
25724     {
25725       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
25726         cp_lexer_consume_token (parser->lexer);
25727       else if (code == OMP_ATOMIC_CAPTURE_NEW)
25728         {
25729           cp_parser_skip_to_end_of_block_or_statement (parser);
25730           if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
25731             cp_lexer_consume_token (parser->lexer);
25732         }
25733     }
25734 }
25735
25736
25737 /* OpenMP 2.5:
25738    # pragma omp barrier new-line  */
25739
25740 static void
25741 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
25742 {
25743   cp_parser_require_pragma_eol (parser, pragma_tok);
25744   finish_omp_barrier ();
25745 }
25746
25747 /* OpenMP 2.5:
25748    # pragma omp critical [(name)] new-line
25749      structured-block  */
25750
25751 static tree
25752 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
25753 {
25754   tree stmt, name = NULL;
25755
25756   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
25757     {
25758       cp_lexer_consume_token (parser->lexer);
25759
25760       name = cp_parser_identifier (parser);
25761
25762       if (name == error_mark_node
25763           || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25764         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25765                                                /*or_comma=*/false,
25766                                                /*consume_paren=*/true);
25767       if (name == error_mark_node)
25768         name = NULL;
25769     }
25770   cp_parser_require_pragma_eol (parser, pragma_tok);
25771
25772   stmt = cp_parser_omp_structured_block (parser);
25773   return c_finish_omp_critical (input_location, stmt, name);
25774 }
25775
25776 /* OpenMP 2.5:
25777    # pragma omp flush flush-vars[opt] new-line
25778
25779    flush-vars:
25780      ( variable-list ) */
25781
25782 static void
25783 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
25784 {
25785   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
25786     (void) cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
25787   cp_parser_require_pragma_eol (parser, pragma_tok);
25788
25789   finish_omp_flush ();
25790 }
25791
25792 /* Helper function, to parse omp for increment expression.  */
25793
25794 static tree
25795 cp_parser_omp_for_cond (cp_parser *parser, tree decl)
25796 {
25797   tree cond = cp_parser_binary_expression (parser, false, true,
25798                                            PREC_NOT_OPERATOR, NULL);
25799   if (cond == error_mark_node
25800       || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
25801     {
25802       cp_parser_skip_to_end_of_statement (parser);
25803       return error_mark_node;
25804     }
25805
25806   switch (TREE_CODE (cond))
25807     {
25808     case GT_EXPR:
25809     case GE_EXPR:
25810     case LT_EXPR:
25811     case LE_EXPR:
25812       break;
25813     default:
25814       return error_mark_node;
25815     }
25816
25817   /* If decl is an iterator, preserve LHS and RHS of the relational
25818      expr until finish_omp_for.  */
25819   if (decl
25820       && (type_dependent_expression_p (decl)
25821           || CLASS_TYPE_P (TREE_TYPE (decl))))
25822     return cond;
25823
25824   return build_x_binary_op (TREE_CODE (cond),
25825                             TREE_OPERAND (cond, 0), ERROR_MARK,
25826                             TREE_OPERAND (cond, 1), ERROR_MARK,
25827                             /*overload=*/NULL, tf_warning_or_error);
25828 }
25829
25830 /* Helper function, to parse omp for increment expression.  */
25831
25832 static tree
25833 cp_parser_omp_for_incr (cp_parser *parser, tree decl)
25834 {
25835   cp_token *token = cp_lexer_peek_token (parser->lexer);
25836   enum tree_code op;
25837   tree lhs, rhs;
25838   cp_id_kind idk;
25839   bool decl_first;
25840
25841   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
25842     {
25843       op = (token->type == CPP_PLUS_PLUS
25844             ? PREINCREMENT_EXPR : PREDECREMENT_EXPR);
25845       cp_lexer_consume_token (parser->lexer);
25846       lhs = cp_parser_cast_expression (parser, false, false, NULL);
25847       if (lhs != decl)
25848         return error_mark_node;
25849       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
25850     }
25851
25852   lhs = cp_parser_primary_expression (parser, false, false, false, &idk);
25853   if (lhs != decl)
25854     return error_mark_node;
25855
25856   token = cp_lexer_peek_token (parser->lexer);
25857   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
25858     {
25859       op = (token->type == CPP_PLUS_PLUS
25860             ? POSTINCREMENT_EXPR : POSTDECREMENT_EXPR);
25861       cp_lexer_consume_token (parser->lexer);
25862       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
25863     }
25864
25865   op = cp_parser_assignment_operator_opt (parser);
25866   if (op == ERROR_MARK)
25867     return error_mark_node;
25868
25869   if (op != NOP_EXPR)
25870     {
25871       rhs = cp_parser_assignment_expression (parser, false, NULL);
25872       rhs = build2 (op, TREE_TYPE (decl), decl, rhs);
25873       return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
25874     }
25875
25876   lhs = cp_parser_binary_expression (parser, false, false,
25877                                      PREC_ADDITIVE_EXPRESSION, NULL);
25878   token = cp_lexer_peek_token (parser->lexer);
25879   decl_first = lhs == decl;
25880   if (decl_first)
25881     lhs = NULL_TREE;
25882   if (token->type != CPP_PLUS
25883       && token->type != CPP_MINUS)
25884     return error_mark_node;
25885
25886   do
25887     {
25888       op = token->type == CPP_PLUS ? PLUS_EXPR : MINUS_EXPR;
25889       cp_lexer_consume_token (parser->lexer);
25890       rhs = cp_parser_binary_expression (parser, false, false,
25891                                          PREC_ADDITIVE_EXPRESSION, NULL);
25892       token = cp_lexer_peek_token (parser->lexer);
25893       if (token->type == CPP_PLUS || token->type == CPP_MINUS || decl_first)
25894         {
25895           if (lhs == NULL_TREE)
25896             {
25897               if (op == PLUS_EXPR)
25898                 lhs = rhs;
25899               else
25900                 lhs = build_x_unary_op (NEGATE_EXPR, rhs, tf_warning_or_error);
25901             }
25902           else
25903             lhs = build_x_binary_op (op, lhs, ERROR_MARK, rhs, ERROR_MARK,
25904                                      NULL, tf_warning_or_error);
25905         }
25906     }
25907   while (token->type == CPP_PLUS || token->type == CPP_MINUS);
25908
25909   if (!decl_first)
25910     {
25911       if (rhs != decl || op == MINUS_EXPR)
25912         return error_mark_node;
25913       rhs = build2 (op, TREE_TYPE (decl), lhs, decl);
25914     }
25915   else
25916     rhs = build2 (PLUS_EXPR, TREE_TYPE (decl), decl, lhs);
25917
25918   return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
25919 }
25920
25921 /* Parse the restricted form of the for statement allowed by OpenMP.  */
25922
25923 static tree
25924 cp_parser_omp_for_loop (cp_parser *parser, tree clauses, tree *par_clauses)
25925 {
25926   tree init, cond, incr, body, decl, pre_body = NULL_TREE, ret;
25927   tree real_decl, initv, condv, incrv, declv;
25928   tree this_pre_body, cl;
25929   location_t loc_first;
25930   bool collapse_err = false;
25931   int i, collapse = 1, nbraces = 0;
25932   VEC(tree,gc) *for_block = make_tree_vector ();
25933
25934   for (cl = clauses; cl; cl = OMP_CLAUSE_CHAIN (cl))
25935     if (OMP_CLAUSE_CODE (cl) == OMP_CLAUSE_COLLAPSE)
25936       collapse = tree_low_cst (OMP_CLAUSE_COLLAPSE_EXPR (cl), 0);
25937
25938   gcc_assert (collapse >= 1);
25939
25940   declv = make_tree_vec (collapse);
25941   initv = make_tree_vec (collapse);
25942   condv = make_tree_vec (collapse);
25943   incrv = make_tree_vec (collapse);
25944
25945   loc_first = cp_lexer_peek_token (parser->lexer)->location;
25946
25947   for (i = 0; i < collapse; i++)
25948     {
25949       int bracecount = 0;
25950       bool add_private_clause = false;
25951       location_t loc;
25952
25953       if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
25954         {
25955           cp_parser_error (parser, "for statement expected");
25956           return NULL;
25957         }
25958       loc = cp_lexer_consume_token (parser->lexer)->location;
25959
25960       if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25961         return NULL;
25962
25963       init = decl = real_decl = NULL;
25964       this_pre_body = push_stmt_list ();
25965       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
25966         {
25967           /* See 2.5.1 (in OpenMP 3.0, similar wording is in 2.5 standard too):
25968
25969              init-expr:
25970                        var = lb
25971                        integer-type var = lb
25972                        random-access-iterator-type var = lb
25973                        pointer-type var = lb
25974           */
25975           cp_decl_specifier_seq type_specifiers;
25976
25977           /* First, try to parse as an initialized declaration.  See
25978              cp_parser_condition, from whence the bulk of this is copied.  */
25979
25980           cp_parser_parse_tentatively (parser);
25981           cp_parser_type_specifier_seq (parser, /*is_declaration=*/true,
25982                                         /*is_trailing_return=*/false,
25983                                         &type_specifiers);
25984           if (cp_parser_parse_definitely (parser))
25985             {
25986               /* If parsing a type specifier seq succeeded, then this
25987                  MUST be a initialized declaration.  */
25988               tree asm_specification, attributes;
25989               cp_declarator *declarator;
25990
25991               declarator = cp_parser_declarator (parser,
25992                                                  CP_PARSER_DECLARATOR_NAMED,
25993                                                  /*ctor_dtor_or_conv_p=*/NULL,
25994                                                  /*parenthesized_p=*/NULL,
25995                                                  /*member_p=*/false);
25996               attributes = cp_parser_attributes_opt (parser);
25997               asm_specification = cp_parser_asm_specification_opt (parser);
25998
25999               if (declarator == cp_error_declarator) 
26000                 cp_parser_skip_to_end_of_statement (parser);
26001
26002               else 
26003                 {
26004                   tree pushed_scope, auto_node;
26005
26006                   decl = start_decl (declarator, &type_specifiers,
26007                                      SD_INITIALIZED, attributes,
26008                                      /*prefix_attributes=*/NULL_TREE,
26009                                      &pushed_scope);
26010
26011                   auto_node = type_uses_auto (TREE_TYPE (decl));
26012                   if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
26013                     {
26014                       if (cp_lexer_next_token_is (parser->lexer, 
26015                                                   CPP_OPEN_PAREN))
26016                         error ("parenthesized initialization is not allowed in "
26017                                "OpenMP %<for%> loop");
26018                       else
26019                         /* Trigger an error.  */
26020                         cp_parser_require (parser, CPP_EQ, RT_EQ);
26021
26022                       init = error_mark_node;
26023                       cp_parser_skip_to_end_of_statement (parser);
26024                     }
26025                   else if (CLASS_TYPE_P (TREE_TYPE (decl))
26026                            || type_dependent_expression_p (decl)
26027                            || auto_node)
26028                     {
26029                       bool is_direct_init, is_non_constant_init;
26030
26031                       init = cp_parser_initializer (parser,
26032                                                     &is_direct_init,
26033                                                     &is_non_constant_init);
26034
26035                       if (auto_node)
26036                         {
26037                           TREE_TYPE (decl)
26038                             = do_auto_deduction (TREE_TYPE (decl), init,
26039                                                  auto_node);
26040
26041                           if (!CLASS_TYPE_P (TREE_TYPE (decl))
26042                               && !type_dependent_expression_p (decl))
26043                             goto non_class;
26044                         }
26045                       
26046                       cp_finish_decl (decl, init, !is_non_constant_init,
26047                                       asm_specification,
26048                                       LOOKUP_ONLYCONVERTING);
26049                       if (CLASS_TYPE_P (TREE_TYPE (decl)))
26050                         {
26051                           VEC_safe_push (tree, gc, for_block, this_pre_body);
26052                           init = NULL_TREE;
26053                         }
26054                       else
26055                         init = pop_stmt_list (this_pre_body);
26056                       this_pre_body = NULL_TREE;
26057                     }
26058                   else
26059                     {
26060                       /* Consume '='.  */
26061                       cp_lexer_consume_token (parser->lexer);
26062                       init = cp_parser_assignment_expression (parser, false, NULL);
26063
26064                     non_class:
26065                       if (TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
26066                         init = error_mark_node;
26067                       else
26068                         cp_finish_decl (decl, NULL_TREE,
26069                                         /*init_const_expr_p=*/false,
26070                                         asm_specification,
26071                                         LOOKUP_ONLYCONVERTING);
26072                     }
26073
26074                   if (pushed_scope)
26075                     pop_scope (pushed_scope);
26076                 }
26077             }
26078           else 
26079             {
26080               cp_id_kind idk;
26081               /* If parsing a type specifier sequence failed, then
26082                  this MUST be a simple expression.  */
26083               cp_parser_parse_tentatively (parser);
26084               decl = cp_parser_primary_expression (parser, false, false,
26085                                                    false, &idk);
26086               if (!cp_parser_error_occurred (parser)
26087                   && decl
26088                   && DECL_P (decl)
26089                   && CLASS_TYPE_P (TREE_TYPE (decl)))
26090                 {
26091                   tree rhs;
26092
26093                   cp_parser_parse_definitely (parser);
26094                   cp_parser_require (parser, CPP_EQ, RT_EQ);
26095                   rhs = cp_parser_assignment_expression (parser, false, NULL);
26096                   finish_expr_stmt (build_x_modify_expr (decl, NOP_EXPR,
26097                                                          rhs,
26098                                                          tf_warning_or_error));
26099                   add_private_clause = true;
26100                 }
26101               else
26102                 {
26103                   decl = NULL;
26104                   cp_parser_abort_tentative_parse (parser);
26105                   init = cp_parser_expression (parser, false, NULL);
26106                   if (init)
26107                     {
26108                       if (TREE_CODE (init) == MODIFY_EXPR
26109                           || TREE_CODE (init) == MODOP_EXPR)
26110                         real_decl = TREE_OPERAND (init, 0);
26111                     }
26112                 }
26113             }
26114         }
26115       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
26116       if (this_pre_body)
26117         {
26118           this_pre_body = pop_stmt_list (this_pre_body);
26119           if (pre_body)
26120             {
26121               tree t = pre_body;
26122               pre_body = push_stmt_list ();
26123               add_stmt (t);
26124               add_stmt (this_pre_body);
26125               pre_body = pop_stmt_list (pre_body);
26126             }
26127           else
26128             pre_body = this_pre_body;
26129         }
26130
26131       if (decl)
26132         real_decl = decl;
26133       if (par_clauses != NULL && real_decl != NULL_TREE)
26134         {
26135           tree *c;
26136           for (c = par_clauses; *c ; )
26137             if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_FIRSTPRIVATE
26138                 && OMP_CLAUSE_DECL (*c) == real_decl)
26139               {
26140                 error_at (loc, "iteration variable %qD"
26141                           " should not be firstprivate", real_decl);
26142                 *c = OMP_CLAUSE_CHAIN (*c);
26143               }
26144             else if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_LASTPRIVATE
26145                      && OMP_CLAUSE_DECL (*c) == real_decl)
26146               {
26147                 /* Add lastprivate (decl) clause to OMP_FOR_CLAUSES,
26148                    change it to shared (decl) in OMP_PARALLEL_CLAUSES.  */
26149                 tree l = build_omp_clause (loc, OMP_CLAUSE_LASTPRIVATE);
26150                 OMP_CLAUSE_DECL (l) = real_decl;
26151                 OMP_CLAUSE_CHAIN (l) = clauses;
26152                 CP_OMP_CLAUSE_INFO (l) = CP_OMP_CLAUSE_INFO (*c);
26153                 clauses = l;
26154                 OMP_CLAUSE_SET_CODE (*c, OMP_CLAUSE_SHARED);
26155                 CP_OMP_CLAUSE_INFO (*c) = NULL;
26156                 add_private_clause = false;
26157               }
26158             else
26159               {
26160                 if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_PRIVATE
26161                     && OMP_CLAUSE_DECL (*c) == real_decl)
26162                   add_private_clause = false;
26163                 c = &OMP_CLAUSE_CHAIN (*c);
26164               }
26165         }
26166
26167       if (add_private_clause)
26168         {
26169           tree c;
26170           for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
26171             {
26172               if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
26173                    || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
26174                   && OMP_CLAUSE_DECL (c) == decl)
26175                 break;
26176               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
26177                        && OMP_CLAUSE_DECL (c) == decl)
26178                 error_at (loc, "iteration variable %qD "
26179                           "should not be firstprivate",
26180                           decl);
26181               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
26182                        && OMP_CLAUSE_DECL (c) == decl)
26183                 error_at (loc, "iteration variable %qD should not be reduction",
26184                           decl);
26185             }
26186           if (c == NULL)
26187             {
26188               c = build_omp_clause (loc, OMP_CLAUSE_PRIVATE);
26189               OMP_CLAUSE_DECL (c) = decl;
26190               c = finish_omp_clauses (c);
26191               if (c)
26192                 {
26193                   OMP_CLAUSE_CHAIN (c) = clauses;
26194                   clauses = c;
26195                 }
26196             }
26197         }
26198
26199       cond = NULL;
26200       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
26201         cond = cp_parser_omp_for_cond (parser, decl);
26202       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
26203
26204       incr = NULL;
26205       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
26206         {
26207           /* If decl is an iterator, preserve the operator on decl
26208              until finish_omp_for.  */
26209           if (decl
26210               && ((type_dependent_expression_p (decl)
26211                    && !POINTER_TYPE_P (TREE_TYPE (decl)))
26212                   || CLASS_TYPE_P (TREE_TYPE (decl))))
26213             incr = cp_parser_omp_for_incr (parser, decl);
26214           else
26215             incr = cp_parser_expression (parser, false, NULL);
26216         }
26217
26218       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
26219         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
26220                                                /*or_comma=*/false,
26221                                                /*consume_paren=*/true);
26222
26223       TREE_VEC_ELT (declv, i) = decl;
26224       TREE_VEC_ELT (initv, i) = init;
26225       TREE_VEC_ELT (condv, i) = cond;
26226       TREE_VEC_ELT (incrv, i) = incr;
26227
26228       if (i == collapse - 1)
26229         break;
26230
26231       /* FIXME: OpenMP 3.0 draft isn't very clear on what exactly is allowed
26232          in between the collapsed for loops to be still considered perfectly
26233          nested.  Hopefully the final version clarifies this.
26234          For now handle (multiple) {'s and empty statements.  */
26235       cp_parser_parse_tentatively (parser);
26236       do
26237         {
26238           if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
26239             break;
26240           else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
26241             {
26242               cp_lexer_consume_token (parser->lexer);
26243               bracecount++;
26244             }
26245           else if (bracecount
26246                    && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
26247             cp_lexer_consume_token (parser->lexer);
26248           else
26249             {
26250               loc = cp_lexer_peek_token (parser->lexer)->location;
26251               error_at (loc, "not enough collapsed for loops");
26252               collapse_err = true;
26253               cp_parser_abort_tentative_parse (parser);
26254               declv = NULL_TREE;
26255               break;
26256             }
26257         }
26258       while (1);
26259
26260       if (declv)
26261         {
26262           cp_parser_parse_definitely (parser);
26263           nbraces += bracecount;
26264         }
26265     }
26266
26267   /* Note that we saved the original contents of this flag when we entered
26268      the structured block, and so we don't need to re-save it here.  */
26269   parser->in_statement = IN_OMP_FOR;
26270
26271   /* Note that the grammar doesn't call for a structured block here,
26272      though the loop as a whole is a structured block.  */
26273   body = push_stmt_list ();
26274   cp_parser_statement (parser, NULL_TREE, false, NULL);
26275   body = pop_stmt_list (body);
26276
26277   if (declv == NULL_TREE)
26278     ret = NULL_TREE;
26279   else
26280     ret = finish_omp_for (loc_first, declv, initv, condv, incrv, body,
26281                           pre_body, clauses);
26282
26283   while (nbraces)
26284     {
26285       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
26286         {
26287           cp_lexer_consume_token (parser->lexer);
26288           nbraces--;
26289         }
26290       else if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
26291         cp_lexer_consume_token (parser->lexer);
26292       else
26293         {
26294           if (!collapse_err)
26295             {
26296               error_at (cp_lexer_peek_token (parser->lexer)->location,
26297                         "collapsed loops not perfectly nested");
26298             }
26299           collapse_err = true;
26300           cp_parser_statement_seq_opt (parser, NULL);
26301           if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
26302             break;
26303         }
26304     }
26305
26306   while (!VEC_empty (tree, for_block))
26307     add_stmt (pop_stmt_list (VEC_pop (tree, for_block)));
26308   release_tree_vector (for_block);
26309
26310   return ret;
26311 }
26312
26313 /* OpenMP 2.5:
26314    #pragma omp for for-clause[optseq] new-line
26315      for-loop  */
26316
26317 #define OMP_FOR_CLAUSE_MASK                             \
26318         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26319         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26320         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
26321         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
26322         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
26323         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
26324         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT)              \
26325         | (1u << PRAGMA_OMP_CLAUSE_COLLAPSE))
26326
26327 static tree
26328 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
26329 {
26330   tree clauses, sb, ret;
26331   unsigned int save;
26332
26333   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
26334                                        "#pragma omp for", pragma_tok);
26335
26336   sb = begin_omp_structured_block ();
26337   save = cp_parser_begin_omp_structured_block (parser);
26338
26339   ret = cp_parser_omp_for_loop (parser, clauses, NULL);
26340
26341   cp_parser_end_omp_structured_block (parser, save);
26342   add_stmt (finish_omp_structured_block (sb));
26343
26344   return ret;
26345 }
26346
26347 /* OpenMP 2.5:
26348    # pragma omp master new-line
26349      structured-block  */
26350
26351 static tree
26352 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
26353 {
26354   cp_parser_require_pragma_eol (parser, pragma_tok);
26355   return c_finish_omp_master (input_location,
26356                               cp_parser_omp_structured_block (parser));
26357 }
26358
26359 /* OpenMP 2.5:
26360    # pragma omp ordered new-line
26361      structured-block  */
26362
26363 static tree
26364 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
26365 {
26366   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
26367   cp_parser_require_pragma_eol (parser, pragma_tok);
26368   return c_finish_omp_ordered (loc, cp_parser_omp_structured_block (parser));
26369 }
26370
26371 /* OpenMP 2.5:
26372
26373    section-scope:
26374      { section-sequence }
26375
26376    section-sequence:
26377      section-directive[opt] structured-block
26378      section-sequence section-directive structured-block  */
26379
26380 static tree
26381 cp_parser_omp_sections_scope (cp_parser *parser)
26382 {
26383   tree stmt, substmt;
26384   bool error_suppress = false;
26385   cp_token *tok;
26386
26387   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
26388     return NULL_TREE;
26389
26390   stmt = push_stmt_list ();
26391
26392   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
26393     {
26394       unsigned save;
26395
26396       substmt = begin_omp_structured_block ();
26397       save = cp_parser_begin_omp_structured_block (parser);
26398
26399       while (1)
26400         {
26401           cp_parser_statement (parser, NULL_TREE, false, NULL);
26402
26403           tok = cp_lexer_peek_token (parser->lexer);
26404           if (tok->pragma_kind == PRAGMA_OMP_SECTION)
26405             break;
26406           if (tok->type == CPP_CLOSE_BRACE)
26407             break;
26408           if (tok->type == CPP_EOF)
26409             break;
26410         }
26411
26412       cp_parser_end_omp_structured_block (parser, save);
26413       substmt = finish_omp_structured_block (substmt);
26414       substmt = build1 (OMP_SECTION, void_type_node, substmt);
26415       add_stmt (substmt);
26416     }
26417
26418   while (1)
26419     {
26420       tok = cp_lexer_peek_token (parser->lexer);
26421       if (tok->type == CPP_CLOSE_BRACE)
26422         break;
26423       if (tok->type == CPP_EOF)
26424         break;
26425
26426       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
26427         {
26428           cp_lexer_consume_token (parser->lexer);
26429           cp_parser_require_pragma_eol (parser, tok);
26430           error_suppress = false;
26431         }
26432       else if (!error_suppress)
26433         {
26434           cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
26435           error_suppress = true;
26436         }
26437
26438       substmt = cp_parser_omp_structured_block (parser);
26439       substmt = build1 (OMP_SECTION, void_type_node, substmt);
26440       add_stmt (substmt);
26441     }
26442   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
26443
26444   substmt = pop_stmt_list (stmt);
26445
26446   stmt = make_node (OMP_SECTIONS);
26447   TREE_TYPE (stmt) = void_type_node;
26448   OMP_SECTIONS_BODY (stmt) = substmt;
26449
26450   add_stmt (stmt);
26451   return stmt;
26452 }
26453
26454 /* OpenMP 2.5:
26455    # pragma omp sections sections-clause[optseq] newline
26456      sections-scope  */
26457
26458 #define OMP_SECTIONS_CLAUSE_MASK                        \
26459         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26460         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26461         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
26462         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
26463         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
26464
26465 static tree
26466 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
26467 {
26468   tree clauses, ret;
26469
26470   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
26471                                        "#pragma omp sections", pragma_tok);
26472
26473   ret = cp_parser_omp_sections_scope (parser);
26474   if (ret)
26475     OMP_SECTIONS_CLAUSES (ret) = clauses;
26476
26477   return ret;
26478 }
26479
26480 /* OpenMP 2.5:
26481    # pragma parallel parallel-clause new-line
26482    # pragma parallel for parallel-for-clause new-line
26483    # pragma parallel sections parallel-sections-clause new-line  */
26484
26485 #define OMP_PARALLEL_CLAUSE_MASK                        \
26486         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
26487         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26488         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26489         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
26490         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
26491         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
26492         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
26493         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
26494
26495 static tree
26496 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
26497 {
26498   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
26499   const char *p_name = "#pragma omp parallel";
26500   tree stmt, clauses, par_clause, ws_clause, block;
26501   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
26502   unsigned int save;
26503   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
26504
26505   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
26506     {
26507       cp_lexer_consume_token (parser->lexer);
26508       p_kind = PRAGMA_OMP_PARALLEL_FOR;
26509       p_name = "#pragma omp parallel for";
26510       mask |= OMP_FOR_CLAUSE_MASK;
26511       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
26512     }
26513   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
26514     {
26515       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
26516       const char *p = IDENTIFIER_POINTER (id);
26517       if (strcmp (p, "sections") == 0)
26518         {
26519           cp_lexer_consume_token (parser->lexer);
26520           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
26521           p_name = "#pragma omp parallel sections";
26522           mask |= OMP_SECTIONS_CLAUSE_MASK;
26523           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
26524         }
26525     }
26526
26527   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
26528   block = begin_omp_parallel ();
26529   save = cp_parser_begin_omp_structured_block (parser);
26530
26531   switch (p_kind)
26532     {
26533     case PRAGMA_OMP_PARALLEL:
26534       cp_parser_statement (parser, NULL_TREE, false, NULL);
26535       par_clause = clauses;
26536       break;
26537
26538     case PRAGMA_OMP_PARALLEL_FOR:
26539       c_split_parallel_clauses (loc, clauses, &par_clause, &ws_clause);
26540       cp_parser_omp_for_loop (parser, ws_clause, &par_clause);
26541       break;
26542
26543     case PRAGMA_OMP_PARALLEL_SECTIONS:
26544       c_split_parallel_clauses (loc, clauses, &par_clause, &ws_clause);
26545       stmt = cp_parser_omp_sections_scope (parser);
26546       if (stmt)
26547         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
26548       break;
26549
26550     default:
26551       gcc_unreachable ();
26552     }
26553
26554   cp_parser_end_omp_structured_block (parser, save);
26555   stmt = finish_omp_parallel (par_clause, block);
26556   if (p_kind != PRAGMA_OMP_PARALLEL)
26557     OMP_PARALLEL_COMBINED (stmt) = 1;
26558   return stmt;
26559 }
26560
26561 /* OpenMP 2.5:
26562    # pragma omp single single-clause[optseq] new-line
26563      structured-block  */
26564
26565 #define OMP_SINGLE_CLAUSE_MASK                          \
26566         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26567         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26568         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
26569         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
26570
26571 static tree
26572 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
26573 {
26574   tree stmt = make_node (OMP_SINGLE);
26575   TREE_TYPE (stmt) = void_type_node;
26576
26577   OMP_SINGLE_CLAUSES (stmt)
26578     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
26579                                  "#pragma omp single", pragma_tok);
26580   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
26581
26582   return add_stmt (stmt);
26583 }
26584
26585 /* OpenMP 3.0:
26586    # pragma omp task task-clause[optseq] new-line
26587      structured-block  */
26588
26589 #define OMP_TASK_CLAUSE_MASK                            \
26590         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
26591         | (1u << PRAGMA_OMP_CLAUSE_UNTIED)              \
26592         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
26593         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26594         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26595         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
26596         | (1u << PRAGMA_OMP_CLAUSE_FINAL)               \
26597         | (1u << PRAGMA_OMP_CLAUSE_MERGEABLE))
26598
26599 static tree
26600 cp_parser_omp_task (cp_parser *parser, cp_token *pragma_tok)
26601 {
26602   tree clauses, block;
26603   unsigned int save;
26604
26605   clauses = cp_parser_omp_all_clauses (parser, OMP_TASK_CLAUSE_MASK,
26606                                        "#pragma omp task", pragma_tok);
26607   block = begin_omp_task ();
26608   save = cp_parser_begin_omp_structured_block (parser);
26609   cp_parser_statement (parser, NULL_TREE, false, NULL);
26610   cp_parser_end_omp_structured_block (parser, save);
26611   return finish_omp_task (clauses, block);
26612 }
26613
26614 /* OpenMP 3.0:
26615    # pragma omp taskwait new-line  */
26616
26617 static void
26618 cp_parser_omp_taskwait (cp_parser *parser, cp_token *pragma_tok)
26619 {
26620   cp_parser_require_pragma_eol (parser, pragma_tok);
26621   finish_omp_taskwait ();
26622 }
26623
26624 /* OpenMP 3.1:
26625    # pragma omp taskyield new-line  */
26626
26627 static void
26628 cp_parser_omp_taskyield (cp_parser *parser, cp_token *pragma_tok)
26629 {
26630   cp_parser_require_pragma_eol (parser, pragma_tok);
26631   finish_omp_taskyield ();
26632 }
26633
26634 /* OpenMP 2.5:
26635    # pragma omp threadprivate (variable-list) */
26636
26637 static void
26638 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
26639 {
26640   tree vars;
26641
26642   vars = cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
26643   cp_parser_require_pragma_eol (parser, pragma_tok);
26644
26645   finish_omp_threadprivate (vars);
26646 }
26647
26648 /* Main entry point to OpenMP statement pragmas.  */
26649
26650 static void
26651 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
26652 {
26653   tree stmt;
26654
26655   switch (pragma_tok->pragma_kind)
26656     {
26657     case PRAGMA_OMP_ATOMIC:
26658       cp_parser_omp_atomic (parser, pragma_tok);
26659       return;
26660     case PRAGMA_OMP_CRITICAL:
26661       stmt = cp_parser_omp_critical (parser, pragma_tok);
26662       break;
26663     case PRAGMA_OMP_FOR:
26664       stmt = cp_parser_omp_for (parser, pragma_tok);
26665       break;
26666     case PRAGMA_OMP_MASTER:
26667       stmt = cp_parser_omp_master (parser, pragma_tok);
26668       break;
26669     case PRAGMA_OMP_ORDERED:
26670       stmt = cp_parser_omp_ordered (parser, pragma_tok);
26671       break;
26672     case PRAGMA_OMP_PARALLEL:
26673       stmt = cp_parser_omp_parallel (parser, pragma_tok);
26674       break;
26675     case PRAGMA_OMP_SECTIONS:
26676       stmt = cp_parser_omp_sections (parser, pragma_tok);
26677       break;
26678     case PRAGMA_OMP_SINGLE:
26679       stmt = cp_parser_omp_single (parser, pragma_tok);
26680       break;
26681     case PRAGMA_OMP_TASK:
26682       stmt = cp_parser_omp_task (parser, pragma_tok);
26683       break;
26684     default:
26685       gcc_unreachable ();
26686     }
26687
26688   if (stmt)
26689     SET_EXPR_LOCATION (stmt, pragma_tok->location);
26690 }
26691 \f
26692 /* Transactional Memory parsing routines.  */
26693
26694 /* Parse a transaction attribute.
26695
26696    txn-attribute:
26697         attribute
26698         [ [ identifier ] ]
26699
26700    ??? Simplify this when C++0x bracket attributes are
26701    implemented properly.  */
26702
26703 static tree
26704 cp_parser_txn_attribute_opt (cp_parser *parser)
26705 {
26706   cp_token *token;
26707   tree attr_name, attr = NULL;
26708
26709   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
26710     return cp_parser_attributes_opt (parser);
26711
26712   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
26713     return NULL_TREE;
26714   cp_lexer_consume_token (parser->lexer);
26715   if (!cp_parser_require (parser, CPP_OPEN_SQUARE, RT_OPEN_SQUARE))
26716     goto error1;
26717
26718   token = cp_lexer_peek_token (parser->lexer);
26719   if (token->type == CPP_NAME || token->type == CPP_KEYWORD)
26720     {
26721       token = cp_lexer_consume_token (parser->lexer);
26722
26723       attr_name = (token->type == CPP_KEYWORD
26724                    /* For keywords, use the canonical spelling,
26725                       not the parsed identifier.  */
26726                    ? ridpointers[(int) token->keyword]
26727                    : token->u.value);
26728       attr = build_tree_list (attr_name, NULL_TREE);
26729     }
26730   else
26731     cp_parser_error (parser, "expected identifier");
26732
26733   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
26734  error1:
26735   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
26736   return attr;
26737 }
26738
26739 /* Parse a __transaction_atomic or __transaction_relaxed statement.
26740
26741    transaction-statement:
26742      __transaction_atomic txn-attribute[opt] txn-exception-spec[opt]
26743        compound-statement
26744      __transaction_relaxed txn-exception-spec[opt] compound-statement
26745
26746    ??? The exception specification is not yet implemented.
26747 */
26748
26749 static tree
26750 cp_parser_transaction (cp_parser *parser, enum rid keyword)
26751 {
26752   unsigned char old_in = parser->in_transaction;
26753   unsigned char this_in = 1, new_in;
26754   cp_token *token;
26755   tree stmt, attrs;
26756
26757   gcc_assert (keyword == RID_TRANSACTION_ATOMIC
26758       || keyword == RID_TRANSACTION_RELAXED);
26759   token = cp_parser_require_keyword (parser, keyword,
26760       (keyword == RID_TRANSACTION_ATOMIC ? RT_TRANSACTION_ATOMIC
26761           : RT_TRANSACTION_RELAXED));
26762   gcc_assert (token != NULL);
26763
26764   if (keyword == RID_TRANSACTION_RELAXED)
26765     this_in |= TM_STMT_ATTR_RELAXED;
26766   else
26767     {
26768       attrs = cp_parser_txn_attribute_opt (parser);
26769       if (attrs)
26770         this_in |= parse_tm_stmt_attr (attrs, TM_STMT_ATTR_OUTER);
26771     }
26772
26773   /* Keep track if we're in the lexical scope of an outer transaction.  */
26774   new_in = this_in | (old_in & TM_STMT_ATTR_OUTER);
26775
26776   stmt = begin_transaction_stmt (token->location, NULL, this_in);
26777
26778   parser->in_transaction = new_in;
26779   cp_parser_compound_statement (parser, NULL, false, false);
26780   parser->in_transaction = old_in;
26781
26782   finish_transaction_stmt (stmt, NULL, this_in);
26783
26784   return stmt;
26785 }
26786
26787 /* Parse a __transaction_atomic or __transaction_relaxed expression.
26788
26789    transaction-expression:
26790      __transaction_atomic txn-exception-spec[opt] ( expression )
26791      __transaction_relaxed txn-exception-spec[opt] ( expression )
26792
26793    ??? The exception specification is not yet implemented.
26794 */
26795
26796 static tree
26797 cp_parser_transaction_expression (cp_parser *parser, enum rid keyword)
26798 {
26799   unsigned char old_in = parser->in_transaction;
26800   unsigned char this_in = 1;
26801   cp_token *token;
26802   tree ret;
26803
26804   gcc_assert (keyword == RID_TRANSACTION_ATOMIC
26805       || keyword == RID_TRANSACTION_RELAXED);
26806
26807   if (!flag_tm)
26808     error (keyword == RID_TRANSACTION_RELAXED
26809            ? G_("%<__transaction_relaxed%> without transactional memory "
26810                 "support enabled")
26811            : G_("%<__transaction_atomic%> without transactional memory "
26812                 "support enabled"));
26813
26814   token = cp_parser_require_keyword (parser, keyword,
26815       (keyword == RID_TRANSACTION_ATOMIC ? RT_TRANSACTION_ATOMIC
26816           : RT_TRANSACTION_RELAXED));
26817   gcc_assert (token != NULL);
26818
26819   if (keyword == RID_TRANSACTION_RELAXED)
26820     this_in |= TM_STMT_ATTR_RELAXED;
26821
26822   parser->in_transaction = this_in;
26823   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
26824     {
26825       tree expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
26826       ret = build_transaction_expr (token->location, expr, this_in);
26827     }
26828   else
26829     {
26830       cp_parser_error (parser, "expected %<(%>");
26831       ret = error_mark_node;
26832     }
26833   parser->in_transaction = old_in;
26834
26835   if (cp_parser_non_integral_constant_expression (parser, NIC_TRANSACTION))
26836     return error_mark_node;
26837
26838   return (flag_tm ? ret : error_mark_node);
26839 }
26840
26841 /* Parse a function-transaction-block.
26842
26843    function-transaction-block:
26844      __transaction_atomic txn-attribute[opt] ctor-initializer[opt]
26845          function-body
26846      __transaction_atomic txn-attribute[opt] function-try-block
26847      __transaction_relaxed ctor-initializer[opt] function-body
26848      __transaction_relaxed function-try-block
26849 */
26850
26851 static bool
26852 cp_parser_function_transaction (cp_parser *parser, enum rid keyword)
26853 {
26854   unsigned char old_in = parser->in_transaction;
26855   unsigned char new_in = 1;
26856   tree compound_stmt, stmt, attrs;
26857   bool ctor_initializer_p;
26858   cp_token *token;
26859
26860   gcc_assert (keyword == RID_TRANSACTION_ATOMIC
26861       || keyword == RID_TRANSACTION_RELAXED);
26862   token = cp_parser_require_keyword (parser, keyword,
26863       (keyword == RID_TRANSACTION_ATOMIC ? RT_TRANSACTION_ATOMIC
26864           : RT_TRANSACTION_RELAXED));
26865   gcc_assert (token != NULL);
26866
26867   if (keyword == RID_TRANSACTION_RELAXED)
26868     new_in |= TM_STMT_ATTR_RELAXED;
26869   else
26870     {
26871       attrs = cp_parser_txn_attribute_opt (parser);
26872       if (attrs)
26873         new_in |= parse_tm_stmt_attr (attrs, TM_STMT_ATTR_OUTER);
26874     }
26875
26876   stmt = begin_transaction_stmt (token->location, &compound_stmt, new_in);
26877
26878   parser->in_transaction = new_in;
26879
26880   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
26881     ctor_initializer_p = cp_parser_function_try_block (parser);
26882   else
26883     ctor_initializer_p
26884       = cp_parser_ctor_initializer_opt_and_function_body (parser);
26885
26886   parser->in_transaction = old_in;
26887
26888   finish_transaction_stmt (stmt, compound_stmt, new_in);
26889
26890   return ctor_initializer_p;
26891 }
26892
26893 /* Parse a __transaction_cancel statement.
26894
26895    cancel-statement:
26896      __transaction_cancel txn-attribute[opt] ;
26897      __transaction_cancel txn-attribute[opt] throw-expression ;
26898
26899    ??? Cancel and throw is not yet implemented.  */
26900
26901 static tree
26902 cp_parser_transaction_cancel (cp_parser *parser)
26903 {
26904   cp_token *token;
26905   bool is_outer = false;
26906   tree stmt, attrs;
26907
26908   token = cp_parser_require_keyword (parser, RID_TRANSACTION_CANCEL,
26909                                      RT_TRANSACTION_CANCEL);
26910   gcc_assert (token != NULL);
26911
26912   attrs = cp_parser_txn_attribute_opt (parser);
26913   if (attrs)
26914     is_outer = (parse_tm_stmt_attr (attrs, TM_STMT_ATTR_OUTER) != 0);
26915
26916   /* ??? Parse cancel-and-throw here.  */
26917
26918   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
26919
26920   if (!flag_tm)
26921     {
26922       error_at (token->location, "%<__transaction_cancel%> without "
26923                 "transactional memory support enabled");
26924       return error_mark_node;
26925     }
26926   else if (parser->in_transaction & TM_STMT_ATTR_RELAXED)
26927     {
26928       error_at (token->location, "%<__transaction_cancel%> within a "
26929                 "%<__transaction_relaxed%>");
26930       return error_mark_node;
26931     }
26932   else if (is_outer)
26933     {
26934       if ((parser->in_transaction & TM_STMT_ATTR_OUTER) == 0
26935           && !is_tm_may_cancel_outer (current_function_decl))
26936         {
26937           error_at (token->location, "outer %<__transaction_cancel%> not "
26938                     "within outer %<__transaction_atomic%>");
26939           error_at (token->location,
26940                     "  or a %<transaction_may_cancel_outer%> function");
26941           return error_mark_node;
26942         }
26943     }
26944   else if (parser->in_transaction == 0)
26945     {
26946       error_at (token->location, "%<__transaction_cancel%> not within "
26947                 "%<__transaction_atomic%>");
26948       return error_mark_node;
26949     }
26950
26951   stmt = build_tm_abort_call (token->location, is_outer);
26952   add_stmt (stmt);
26953   finish_stmt ();
26954
26955   return stmt;
26956 }
26957 \f
26958 /* The parser.  */
26959
26960 static GTY (()) cp_parser *the_parser;
26961
26962 \f
26963 /* Special handling for the first token or line in the file.  The first
26964    thing in the file might be #pragma GCC pch_preprocess, which loads a
26965    PCH file, which is a GC collection point.  So we need to handle this
26966    first pragma without benefit of an existing lexer structure.
26967
26968    Always returns one token to the caller in *FIRST_TOKEN.  This is
26969    either the true first token of the file, or the first token after
26970    the initial pragma.  */
26971
26972 static void
26973 cp_parser_initial_pragma (cp_token *first_token)
26974 {
26975   tree name = NULL;
26976
26977   cp_lexer_get_preprocessor_token (NULL, first_token);
26978   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
26979     return;
26980
26981   cp_lexer_get_preprocessor_token (NULL, first_token);
26982   if (first_token->type == CPP_STRING)
26983     {
26984       name = first_token->u.value;
26985
26986       cp_lexer_get_preprocessor_token (NULL, first_token);
26987       if (first_token->type != CPP_PRAGMA_EOL)
26988         error_at (first_token->location,
26989                   "junk at end of %<#pragma GCC pch_preprocess%>");
26990     }
26991   else
26992     error_at (first_token->location, "expected string literal");
26993
26994   /* Skip to the end of the pragma.  */
26995   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
26996     cp_lexer_get_preprocessor_token (NULL, first_token);
26997
26998   /* Now actually load the PCH file.  */
26999   if (name)
27000     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
27001
27002   /* Read one more token to return to our caller.  We have to do this
27003      after reading the PCH file in, since its pointers have to be
27004      live.  */
27005   cp_lexer_get_preprocessor_token (NULL, first_token);
27006 }
27007
27008 /* Normal parsing of a pragma token.  Here we can (and must) use the
27009    regular lexer.  */
27010
27011 static bool
27012 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
27013 {
27014   cp_token *pragma_tok;
27015   unsigned int id;
27016
27017   pragma_tok = cp_lexer_consume_token (parser->lexer);
27018   gcc_assert (pragma_tok->type == CPP_PRAGMA);
27019   parser->lexer->in_pragma = true;
27020
27021   id = pragma_tok->pragma_kind;
27022   switch (id)
27023     {
27024     case PRAGMA_GCC_PCH_PREPROCESS:
27025       error_at (pragma_tok->location,
27026                 "%<#pragma GCC pch_preprocess%> must be first");
27027       break;
27028
27029     case PRAGMA_OMP_BARRIER:
27030       switch (context)
27031         {
27032         case pragma_compound:
27033           cp_parser_omp_barrier (parser, pragma_tok);
27034           return false;
27035         case pragma_stmt:
27036           error_at (pragma_tok->location, "%<#pragma omp barrier%> may only be "
27037                     "used in compound statements");
27038           break;
27039         default:
27040           goto bad_stmt;
27041         }
27042       break;
27043
27044     case PRAGMA_OMP_FLUSH:
27045       switch (context)
27046         {
27047         case pragma_compound:
27048           cp_parser_omp_flush (parser, pragma_tok);
27049           return false;
27050         case pragma_stmt:
27051           error_at (pragma_tok->location, "%<#pragma omp flush%> may only be "
27052                     "used in compound statements");
27053           break;
27054         default:
27055           goto bad_stmt;
27056         }
27057       break;
27058
27059     case PRAGMA_OMP_TASKWAIT:
27060       switch (context)
27061         {
27062         case pragma_compound:
27063           cp_parser_omp_taskwait (parser, pragma_tok);
27064           return false;
27065         case pragma_stmt:
27066           error_at (pragma_tok->location,
27067                     "%<#pragma omp taskwait%> may only be "
27068                     "used in compound statements");
27069           break;
27070         default:
27071           goto bad_stmt;
27072         }
27073       break;
27074
27075     case PRAGMA_OMP_TASKYIELD:
27076       switch (context)
27077         {
27078         case pragma_compound:
27079           cp_parser_omp_taskyield (parser, pragma_tok);
27080           return false;
27081         case pragma_stmt:
27082           error_at (pragma_tok->location,
27083                     "%<#pragma omp taskyield%> may only be "
27084                     "used in compound statements");
27085           break;
27086         default:
27087           goto bad_stmt;
27088         }
27089       break;
27090
27091     case PRAGMA_OMP_THREADPRIVATE:
27092       cp_parser_omp_threadprivate (parser, pragma_tok);
27093       return false;
27094
27095     case PRAGMA_OMP_ATOMIC:
27096     case PRAGMA_OMP_CRITICAL:
27097     case PRAGMA_OMP_FOR:
27098     case PRAGMA_OMP_MASTER:
27099     case PRAGMA_OMP_ORDERED:
27100     case PRAGMA_OMP_PARALLEL:
27101     case PRAGMA_OMP_SECTIONS:
27102     case PRAGMA_OMP_SINGLE:
27103     case PRAGMA_OMP_TASK:
27104       if (context == pragma_external)
27105         goto bad_stmt;
27106       cp_parser_omp_construct (parser, pragma_tok);
27107       return true;
27108
27109     case PRAGMA_OMP_SECTION:
27110       error_at (pragma_tok->location, 
27111                 "%<#pragma omp section%> may only be used in "
27112                 "%<#pragma omp sections%> construct");
27113       break;
27114
27115     default:
27116       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
27117       c_invoke_pragma_handler (id);
27118       break;
27119
27120     bad_stmt:
27121       cp_parser_error (parser, "expected declaration specifiers");
27122       break;
27123     }
27124
27125   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
27126   return false;
27127 }
27128
27129 /* The interface the pragma parsers have to the lexer.  */
27130
27131 enum cpp_ttype
27132 pragma_lex (tree *value)
27133 {
27134   cp_token *tok;
27135   enum cpp_ttype ret;
27136
27137   tok = cp_lexer_peek_token (the_parser->lexer);
27138
27139   ret = tok->type;
27140   *value = tok->u.value;
27141
27142   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
27143     ret = CPP_EOF;
27144   else if (ret == CPP_STRING)
27145     *value = cp_parser_string_literal (the_parser, false, false);
27146   else
27147     {
27148       cp_lexer_consume_token (the_parser->lexer);
27149       if (ret == CPP_KEYWORD)
27150         ret = CPP_NAME;
27151     }
27152
27153   return ret;
27154 }
27155
27156 \f
27157 /* External interface.  */
27158
27159 /* Parse one entire translation unit.  */
27160
27161 void
27162 c_parse_file (void)
27163 {
27164   static bool already_called = false;
27165
27166   if (already_called)
27167     {
27168       sorry ("inter-module optimizations not implemented for C++");
27169       return;
27170     }
27171   already_called = true;
27172
27173   the_parser = cp_parser_new ();
27174   push_deferring_access_checks (flag_access_control
27175                                 ? dk_no_deferred : dk_no_check);
27176   cp_parser_translation_unit (the_parser);
27177   the_parser = NULL;
27178 }
27179
27180 #include "gt-cp-parser.h"