OSDN Git Service

12f3c4011facacb698002b3beb072076ebbcf54b
[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
14936   /* Look for the `using' keyword.  */
14937   cp_parser_require_keyword (parser, RID_USING, RT_USING);
14938   id_location = cp_lexer_peek_token (parser->lexer)->location;
14939   id = cp_parser_identifier (parser);
14940   attributes = cp_parser_attributes_opt (parser);
14941   cp_parser_require (parser, CPP_EQ, RT_EQ);
14942
14943   type = cp_parser_type_id (parser);
14944
14945   /* A typedef-name can also be introduced by an alias-declaration. The
14946      identifier following the using keyword becomes a typedef-name. It has
14947      the same semantics as if it were introduced by the typedef
14948      specifier. In particular, it does not define a new type and it shall
14949      not appear in the type-id.  */
14950
14951   clear_decl_specs (&decl_specs);
14952   decl_specs.type = type;
14953   decl_specs.attributes = attributes;
14954   ++decl_specs.specs[(int) ds_typedef];
14955   ++decl_specs.specs[(int) ds_alias];
14956
14957   declarator = make_id_declarator (NULL_TREE, id, sfk_none);
14958   declarator->id_loc = id_location;
14959
14960   if (at_class_scope_p ())
14961     decl = grokfield (declarator, &decl_specs, NULL_TREE, false,
14962                       NULL_TREE, attributes);
14963   else
14964     decl = start_decl (declarator, &decl_specs, 0,
14965                        attributes, NULL_TREE, &pushed_scope);
14966   if (decl == error_mark_node)
14967     return decl;
14968
14969   cp_finish_decl (decl, NULL_TREE, 0, NULL_TREE, 0);
14970
14971   if (pushed_scope)
14972     pop_scope (pushed_scope);
14973
14974   /* If decl is a template, return its TEMPLATE_DECL so that it gets
14975      added into the symbol table; otherwise, return the TYPE_DECL.  */
14976   if (DECL_LANG_SPECIFIC (decl)
14977       && DECL_TEMPLATE_INFO (decl)
14978       && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
14979     decl = DECL_TI_TEMPLATE (decl);
14980   return decl;
14981 }
14982
14983 /* Parse a using-directive.
14984
14985    using-directive:
14986      using namespace :: [opt] nested-name-specifier [opt]
14987        namespace-name ;  */
14988
14989 static void
14990 cp_parser_using_directive (cp_parser* parser)
14991 {
14992   tree namespace_decl;
14993   tree attribs;
14994
14995   /* Look for the `using' keyword.  */
14996   cp_parser_require_keyword (parser, RID_USING, RT_USING);
14997   /* And the `namespace' keyword.  */
14998   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
14999   /* Look for the optional `::' operator.  */
15000   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
15001   /* And the optional nested-name-specifier.  */
15002   cp_parser_nested_name_specifier_opt (parser,
15003                                        /*typename_keyword_p=*/false,
15004                                        /*check_dependency_p=*/true,
15005                                        /*type_p=*/false,
15006                                        /*is_declaration=*/true);
15007   /* Get the namespace being used.  */
15008   namespace_decl = cp_parser_namespace_name (parser);
15009   /* And any specified attributes.  */
15010   attribs = cp_parser_attributes_opt (parser);
15011   /* Update the symbol table.  */
15012   parse_using_directive (namespace_decl, attribs);
15013   /* Look for the final `;'.  */
15014   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
15015 }
15016
15017 /* Parse an asm-definition.
15018
15019    asm-definition:
15020      asm ( string-literal ) ;
15021
15022    GNU Extension:
15023
15024    asm-definition:
15025      asm volatile [opt] ( string-literal ) ;
15026      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
15027      asm volatile [opt] ( string-literal : asm-operand-list [opt]
15028                           : asm-operand-list [opt] ) ;
15029      asm volatile [opt] ( string-literal : asm-operand-list [opt]
15030                           : asm-operand-list [opt]
15031                           : asm-clobber-list [opt] ) ;
15032      asm volatile [opt] goto ( string-literal : : asm-operand-list [opt]
15033                                : asm-clobber-list [opt]
15034                                : asm-goto-list ) ;  */
15035
15036 static void
15037 cp_parser_asm_definition (cp_parser* parser)
15038 {
15039   tree string;
15040   tree outputs = NULL_TREE;
15041   tree inputs = NULL_TREE;
15042   tree clobbers = NULL_TREE;
15043   tree labels = NULL_TREE;
15044   tree asm_stmt;
15045   bool volatile_p = false;
15046   bool extended_p = false;
15047   bool invalid_inputs_p = false;
15048   bool invalid_outputs_p = false;
15049   bool goto_p = false;
15050   required_token missing = RT_NONE;
15051
15052   /* Look for the `asm' keyword.  */
15053   cp_parser_require_keyword (parser, RID_ASM, RT_ASM);
15054   /* See if the next token is `volatile'.  */
15055   if (cp_parser_allow_gnu_extensions_p (parser)
15056       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
15057     {
15058       /* Remember that we saw the `volatile' keyword.  */
15059       volatile_p = true;
15060       /* Consume the token.  */
15061       cp_lexer_consume_token (parser->lexer);
15062     }
15063   if (cp_parser_allow_gnu_extensions_p (parser)
15064       && parser->in_function_body
15065       && cp_lexer_next_token_is_keyword (parser->lexer, RID_GOTO))
15066     {
15067       /* Remember that we saw the `goto' keyword.  */
15068       goto_p = true;
15069       /* Consume the token.  */
15070       cp_lexer_consume_token (parser->lexer);
15071     }
15072   /* Look for the opening `('.  */
15073   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
15074     return;
15075   /* Look for the string.  */
15076   string = cp_parser_string_literal (parser, false, false);
15077   if (string == error_mark_node)
15078     {
15079       cp_parser_skip_to_closing_parenthesis (parser, true, false,
15080                                              /*consume_paren=*/true);
15081       return;
15082     }
15083
15084   /* If we're allowing GNU extensions, check for the extended assembly
15085      syntax.  Unfortunately, the `:' tokens need not be separated by
15086      a space in C, and so, for compatibility, we tolerate that here
15087      too.  Doing that means that we have to treat the `::' operator as
15088      two `:' tokens.  */
15089   if (cp_parser_allow_gnu_extensions_p (parser)
15090       && parser->in_function_body
15091       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
15092           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
15093     {
15094       bool inputs_p = false;
15095       bool clobbers_p = false;
15096       bool labels_p = false;
15097
15098       /* The extended syntax was used.  */
15099       extended_p = true;
15100
15101       /* Look for outputs.  */
15102       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
15103         {
15104           /* Consume the `:'.  */
15105           cp_lexer_consume_token (parser->lexer);
15106           /* Parse the output-operands.  */
15107           if (cp_lexer_next_token_is_not (parser->lexer,
15108                                           CPP_COLON)
15109               && cp_lexer_next_token_is_not (parser->lexer,
15110                                              CPP_SCOPE)
15111               && cp_lexer_next_token_is_not (parser->lexer,
15112                                              CPP_CLOSE_PAREN)
15113               && !goto_p)
15114             outputs = cp_parser_asm_operand_list (parser);
15115
15116             if (outputs == error_mark_node)
15117               invalid_outputs_p = true;
15118         }
15119       /* If the next token is `::', there are no outputs, and the
15120          next token is the beginning of the inputs.  */
15121       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
15122         /* The inputs are coming next.  */
15123         inputs_p = true;
15124
15125       /* Look for inputs.  */
15126       if (inputs_p
15127           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
15128         {
15129           /* Consume the `:' or `::'.  */
15130           cp_lexer_consume_token (parser->lexer);
15131           /* Parse the output-operands.  */
15132           if (cp_lexer_next_token_is_not (parser->lexer,
15133                                           CPP_COLON)
15134               && cp_lexer_next_token_is_not (parser->lexer,
15135                                              CPP_SCOPE)
15136               && cp_lexer_next_token_is_not (parser->lexer,
15137                                              CPP_CLOSE_PAREN))
15138             inputs = cp_parser_asm_operand_list (parser);
15139
15140             if (inputs == error_mark_node)
15141               invalid_inputs_p = true;
15142         }
15143       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
15144         /* The clobbers are coming next.  */
15145         clobbers_p = true;
15146
15147       /* Look for clobbers.  */
15148       if (clobbers_p
15149           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
15150         {
15151           clobbers_p = true;
15152           /* Consume the `:' or `::'.  */
15153           cp_lexer_consume_token (parser->lexer);
15154           /* Parse the clobbers.  */
15155           if (cp_lexer_next_token_is_not (parser->lexer,
15156                                           CPP_COLON)
15157               && cp_lexer_next_token_is_not (parser->lexer,
15158                                              CPP_CLOSE_PAREN))
15159             clobbers = cp_parser_asm_clobber_list (parser);
15160         }
15161       else if (goto_p
15162                && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
15163         /* The labels are coming next.  */
15164         labels_p = true;
15165
15166       /* Look for labels.  */
15167       if (labels_p
15168           || (goto_p && cp_lexer_next_token_is (parser->lexer, CPP_COLON)))
15169         {
15170           labels_p = true;
15171           /* Consume the `:' or `::'.  */
15172           cp_lexer_consume_token (parser->lexer);
15173           /* Parse the labels.  */
15174           labels = cp_parser_asm_label_list (parser);
15175         }
15176
15177       if (goto_p && !labels_p)
15178         missing = clobbers_p ? RT_COLON : RT_COLON_SCOPE;
15179     }
15180   else if (goto_p)
15181     missing = RT_COLON_SCOPE;
15182
15183   /* Look for the closing `)'.  */
15184   if (!cp_parser_require (parser, missing ? CPP_COLON : CPP_CLOSE_PAREN,
15185                           missing ? missing : RT_CLOSE_PAREN))
15186     cp_parser_skip_to_closing_parenthesis (parser, true, false,
15187                                            /*consume_paren=*/true);
15188   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
15189
15190   if (!invalid_inputs_p && !invalid_outputs_p)
15191     {
15192       /* Create the ASM_EXPR.  */
15193       if (parser->in_function_body)
15194         {
15195           asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
15196                                       inputs, clobbers, labels);
15197           /* If the extended syntax was not used, mark the ASM_EXPR.  */
15198           if (!extended_p)
15199             {
15200               tree temp = asm_stmt;
15201               if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
15202                 temp = TREE_OPERAND (temp, 0);
15203
15204               ASM_INPUT_P (temp) = 1;
15205             }
15206         }
15207       else
15208         cgraph_add_asm_node (string);
15209     }
15210 }
15211
15212 /* Declarators [gram.dcl.decl] */
15213
15214 /* Parse an init-declarator.
15215
15216    init-declarator:
15217      declarator initializer [opt]
15218
15219    GNU Extension:
15220
15221    init-declarator:
15222      declarator asm-specification [opt] attributes [opt] initializer [opt]
15223
15224    function-definition:
15225      decl-specifier-seq [opt] declarator ctor-initializer [opt]
15226        function-body
15227      decl-specifier-seq [opt] declarator function-try-block
15228
15229    GNU Extension:
15230
15231    function-definition:
15232      __extension__ function-definition
15233
15234    TM Extension:
15235
15236    function-definition:
15237      decl-specifier-seq [opt] declarator function-transaction-block
15238
15239    The DECL_SPECIFIERS apply to this declarator.  Returns a
15240    representation of the entity declared.  If MEMBER_P is TRUE, then
15241    this declarator appears in a class scope.  The new DECL created by
15242    this declarator is returned.
15243
15244    The CHECKS are access checks that should be performed once we know
15245    what entity is being declared (and, therefore, what classes have
15246    befriended it).
15247
15248    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
15249    for a function-definition here as well.  If the declarator is a
15250    declarator for a function-definition, *FUNCTION_DEFINITION_P will
15251    be TRUE upon return.  By that point, the function-definition will
15252    have been completely parsed.
15253
15254    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
15255    is FALSE.
15256
15257    If MAYBE_RANGE_FOR_DECL is not NULL, the pointed tree will be set to the
15258    parsed declaration if it is an uninitialized single declarator not followed
15259    by a `;', or to error_mark_node otherwise. Either way, the trailing `;',
15260    if present, will not be consumed.  If returned, this declarator will be
15261    created with SD_INITIALIZED but will not call cp_finish_decl.  */
15262
15263 static tree
15264 cp_parser_init_declarator (cp_parser* parser,
15265                            cp_decl_specifier_seq *decl_specifiers,
15266                            VEC (deferred_access_check,gc)* checks,
15267                            bool function_definition_allowed_p,
15268                            bool member_p,
15269                            int declares_class_or_enum,
15270                            bool* function_definition_p,
15271                            tree* maybe_range_for_decl)
15272 {
15273   cp_token *token = NULL, *asm_spec_start_token = NULL,
15274            *attributes_start_token = NULL;
15275   cp_declarator *declarator;
15276   tree prefix_attributes;
15277   tree attributes;
15278   tree asm_specification;
15279   tree initializer;
15280   tree decl = NULL_TREE;
15281   tree scope;
15282   int is_initialized;
15283   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
15284      initialized with "= ..", CPP_OPEN_PAREN if initialized with
15285      "(...)".  */
15286   enum cpp_ttype initialization_kind;
15287   bool is_direct_init = false;
15288   bool is_non_constant_init;
15289   int ctor_dtor_or_conv_p;
15290   bool friend_p;
15291   tree pushed_scope = NULL_TREE;
15292   bool range_for_decl_p = false;
15293
15294   /* Gather the attributes that were provided with the
15295      decl-specifiers.  */
15296   prefix_attributes = decl_specifiers->attributes;
15297
15298   /* Assume that this is not the declarator for a function
15299      definition.  */
15300   if (function_definition_p)
15301     *function_definition_p = false;
15302
15303   /* Defer access checks while parsing the declarator; we cannot know
15304      what names are accessible until we know what is being
15305      declared.  */
15306   resume_deferring_access_checks ();
15307
15308   /* Parse the declarator.  */
15309   token = cp_lexer_peek_token (parser->lexer);
15310   declarator
15311     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
15312                             &ctor_dtor_or_conv_p,
15313                             /*parenthesized_p=*/NULL,
15314                             member_p);
15315   /* Gather up the deferred checks.  */
15316   stop_deferring_access_checks ();
15317
15318   /* If the DECLARATOR was erroneous, there's no need to go
15319      further.  */
15320   if (declarator == cp_error_declarator)
15321     return error_mark_node;
15322
15323   /* Check that the number of template-parameter-lists is OK.  */
15324   if (!cp_parser_check_declarator_template_parameters (parser, declarator,
15325                                                        token->location))
15326     return error_mark_node;
15327
15328   if (declares_class_or_enum & 2)
15329     cp_parser_check_for_definition_in_return_type (declarator,
15330                                                    decl_specifiers->type,
15331                                                    decl_specifiers->type_location);
15332
15333   /* Figure out what scope the entity declared by the DECLARATOR is
15334      located in.  `grokdeclarator' sometimes changes the scope, so
15335      we compute it now.  */
15336   scope = get_scope_of_declarator (declarator);
15337
15338   /* Perform any lookups in the declared type which were thought to be
15339      dependent, but are not in the scope of the declarator.  */
15340   decl_specifiers->type
15341     = maybe_update_decl_type (decl_specifiers->type, scope);
15342
15343   /* If we're allowing GNU extensions, look for an asm-specification
15344      and attributes.  */
15345   if (cp_parser_allow_gnu_extensions_p (parser))
15346     {
15347       /* Look for an asm-specification.  */
15348       asm_spec_start_token = cp_lexer_peek_token (parser->lexer);
15349       asm_specification = cp_parser_asm_specification_opt (parser);
15350       /* And attributes.  */
15351       attributes_start_token = cp_lexer_peek_token (parser->lexer);
15352       attributes = cp_parser_attributes_opt (parser);
15353     }
15354   else
15355     {
15356       asm_specification = NULL_TREE;
15357       attributes = NULL_TREE;
15358     }
15359
15360   /* Peek at the next token.  */
15361   token = cp_lexer_peek_token (parser->lexer);
15362   /* Check to see if the token indicates the start of a
15363      function-definition.  */
15364   if (function_declarator_p (declarator)
15365       && cp_parser_token_starts_function_definition_p (token))
15366     {
15367       if (!function_definition_allowed_p)
15368         {
15369           /* If a function-definition should not appear here, issue an
15370              error message.  */
15371           cp_parser_error (parser,
15372                            "a function-definition is not allowed here");
15373           return error_mark_node;
15374         }
15375       else
15376         {
15377           location_t func_brace_location
15378             = cp_lexer_peek_token (parser->lexer)->location;
15379
15380           /* Neither attributes nor an asm-specification are allowed
15381              on a function-definition.  */
15382           if (asm_specification)
15383             error_at (asm_spec_start_token->location,
15384                       "an asm-specification is not allowed "
15385                       "on a function-definition");
15386           if (attributes)
15387             error_at (attributes_start_token->location,
15388                       "attributes are not allowed on a function-definition");
15389           /* This is a function-definition.  */
15390           *function_definition_p = true;
15391
15392           /* Parse the function definition.  */
15393           if (member_p)
15394             decl = cp_parser_save_member_function_body (parser,
15395                                                         decl_specifiers,
15396                                                         declarator,
15397                                                         prefix_attributes);
15398           else
15399             decl
15400               = (cp_parser_function_definition_from_specifiers_and_declarator
15401                  (parser, decl_specifiers, prefix_attributes, declarator));
15402
15403           if (decl != error_mark_node && DECL_STRUCT_FUNCTION (decl))
15404             {
15405               /* This is where the prologue starts...  */
15406               DECL_STRUCT_FUNCTION (decl)->function_start_locus
15407                 = func_brace_location;
15408             }
15409
15410           return decl;
15411         }
15412     }
15413
15414   /* [dcl.dcl]
15415
15416      Only in function declarations for constructors, destructors, and
15417      type conversions can the decl-specifier-seq be omitted.
15418
15419      We explicitly postpone this check past the point where we handle
15420      function-definitions because we tolerate function-definitions
15421      that are missing their return types in some modes.  */
15422   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
15423     {
15424       cp_parser_error (parser,
15425                        "expected constructor, destructor, or type conversion");
15426       return error_mark_node;
15427     }
15428
15429   /* An `=' or an `(', or an '{' in C++0x, indicates an initializer.  */
15430   if (token->type == CPP_EQ
15431       || token->type == CPP_OPEN_PAREN
15432       || token->type == CPP_OPEN_BRACE)
15433     {
15434       is_initialized = SD_INITIALIZED;
15435       initialization_kind = token->type;
15436       if (maybe_range_for_decl)
15437         *maybe_range_for_decl = error_mark_node;
15438
15439       if (token->type == CPP_EQ
15440           && function_declarator_p (declarator))
15441         {
15442           cp_token *t2 = cp_lexer_peek_nth_token (parser->lexer, 2);
15443           if (t2->keyword == RID_DEFAULT)
15444             is_initialized = SD_DEFAULTED;
15445           else if (t2->keyword == RID_DELETE)
15446             is_initialized = SD_DELETED;
15447         }
15448     }
15449   else
15450     {
15451       /* If the init-declarator isn't initialized and isn't followed by a
15452          `,' or `;', it's not a valid init-declarator.  */
15453       if (token->type != CPP_COMMA
15454           && token->type != CPP_SEMICOLON)
15455         {
15456           if (maybe_range_for_decl && *maybe_range_for_decl != error_mark_node)
15457             range_for_decl_p = true;
15458           else
15459             {
15460               cp_parser_error (parser, "expected initializer");
15461               return error_mark_node;
15462             }
15463         }
15464       is_initialized = SD_UNINITIALIZED;
15465       initialization_kind = CPP_EOF;
15466     }
15467
15468   /* Because start_decl has side-effects, we should only call it if we
15469      know we're going ahead.  By this point, we know that we cannot
15470      possibly be looking at any other construct.  */
15471   cp_parser_commit_to_tentative_parse (parser);
15472
15473   /* If the decl specifiers were bad, issue an error now that we're
15474      sure this was intended to be a declarator.  Then continue
15475      declaring the variable(s), as int, to try to cut down on further
15476      errors.  */
15477   if (decl_specifiers->any_specifiers_p
15478       && decl_specifiers->type == error_mark_node)
15479     {
15480       cp_parser_error (parser, "invalid type in declaration");
15481       decl_specifiers->type = integer_type_node;
15482     }
15483
15484   /* Check to see whether or not this declaration is a friend.  */
15485   friend_p = cp_parser_friend_p (decl_specifiers);
15486
15487   /* Enter the newly declared entry in the symbol table.  If we're
15488      processing a declaration in a class-specifier, we wait until
15489      after processing the initializer.  */
15490   if (!member_p)
15491     {
15492       if (parser->in_unbraced_linkage_specification_p)
15493         decl_specifiers->storage_class = sc_extern;
15494       decl = start_decl (declarator, decl_specifiers,
15495                          range_for_decl_p? SD_INITIALIZED : is_initialized,
15496                          attributes, prefix_attributes,
15497                          &pushed_scope);
15498       /* Adjust location of decl if declarator->id_loc is more appropriate:
15499          set, and decl wasn't merged with another decl, in which case its
15500          location would be different from input_location, and more accurate.  */
15501       if (DECL_P (decl)
15502           && declarator->id_loc != UNKNOWN_LOCATION
15503           && DECL_SOURCE_LOCATION (decl) == input_location)
15504         DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
15505     }
15506   else if (scope)
15507     /* Enter the SCOPE.  That way unqualified names appearing in the
15508        initializer will be looked up in SCOPE.  */
15509     pushed_scope = push_scope (scope);
15510
15511   /* Perform deferred access control checks, now that we know in which
15512      SCOPE the declared entity resides.  */
15513   if (!member_p && decl)
15514     {
15515       tree saved_current_function_decl = NULL_TREE;
15516
15517       /* If the entity being declared is a function, pretend that we
15518          are in its scope.  If it is a `friend', it may have access to
15519          things that would not otherwise be accessible.  */
15520       if (TREE_CODE (decl) == FUNCTION_DECL)
15521         {
15522           saved_current_function_decl = current_function_decl;
15523           current_function_decl = decl;
15524         }
15525
15526       /* Perform access checks for template parameters.  */
15527       cp_parser_perform_template_parameter_access_checks (checks);
15528
15529       /* Perform the access control checks for the declarator and the
15530          decl-specifiers.  */
15531       perform_deferred_access_checks ();
15532
15533       /* Restore the saved value.  */
15534       if (TREE_CODE (decl) == FUNCTION_DECL)
15535         current_function_decl = saved_current_function_decl;
15536     }
15537
15538   /* Parse the initializer.  */
15539   initializer = NULL_TREE;
15540   is_direct_init = false;
15541   is_non_constant_init = true;
15542   if (is_initialized)
15543     {
15544       if (function_declarator_p (declarator))
15545         {
15546           cp_token *initializer_start_token = cp_lexer_peek_token (parser->lexer);
15547            if (initialization_kind == CPP_EQ)
15548              initializer = cp_parser_pure_specifier (parser);
15549            else
15550              {
15551                /* If the declaration was erroneous, we don't really
15552                   know what the user intended, so just silently
15553                   consume the initializer.  */
15554                if (decl != error_mark_node)
15555                  error_at (initializer_start_token->location,
15556                            "initializer provided for function");
15557                cp_parser_skip_to_closing_parenthesis (parser,
15558                                                       /*recovering=*/true,
15559                                                       /*or_comma=*/false,
15560                                                       /*consume_paren=*/true);
15561              }
15562         }
15563       else
15564         {
15565           /* We want to record the extra mangling scope for in-class
15566              initializers of class members and initializers of static data
15567              member templates.  The former is a C++0x feature which isn't
15568              implemented yet, and I expect it will involve deferring
15569              parsing of the initializer until end of class as with default
15570              arguments.  So right here we only handle the latter.  */
15571           if (!member_p && processing_template_decl)
15572             start_lambda_scope (decl);
15573           initializer = cp_parser_initializer (parser,
15574                                                &is_direct_init,
15575                                                &is_non_constant_init);
15576           if (!member_p && processing_template_decl)
15577             finish_lambda_scope ();
15578         }
15579     }
15580
15581   /* The old parser allows attributes to appear after a parenthesized
15582      initializer.  Mark Mitchell proposed removing this functionality
15583      on the GCC mailing lists on 2002-08-13.  This parser accepts the
15584      attributes -- but ignores them.  */
15585   if (cp_parser_allow_gnu_extensions_p (parser)
15586       && initialization_kind == CPP_OPEN_PAREN)
15587     if (cp_parser_attributes_opt (parser))
15588       warning (OPT_Wattributes,
15589                "attributes after parenthesized initializer ignored");
15590
15591   /* For an in-class declaration, use `grokfield' to create the
15592      declaration.  */
15593   if (member_p)
15594     {
15595       if (pushed_scope)
15596         {
15597           pop_scope (pushed_scope);
15598           pushed_scope = NULL_TREE;
15599         }
15600       decl = grokfield (declarator, decl_specifiers,
15601                         initializer, !is_non_constant_init,
15602                         /*asmspec=*/NULL_TREE,
15603                         prefix_attributes);
15604       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
15605         cp_parser_save_default_args (parser, decl);
15606     }
15607
15608   /* Finish processing the declaration.  But, skip member
15609      declarations.  */
15610   if (!member_p && decl && decl != error_mark_node && !range_for_decl_p)
15611     {
15612       cp_finish_decl (decl,
15613                       initializer, !is_non_constant_init,
15614                       asm_specification,
15615                       /* If the initializer is in parentheses, then this is
15616                          a direct-initialization, which means that an
15617                          `explicit' constructor is OK.  Otherwise, an
15618                          `explicit' constructor cannot be used.  */
15619                       ((is_direct_init || !is_initialized)
15620                        ? LOOKUP_NORMAL : LOOKUP_IMPLICIT));
15621     }
15622   else if ((cxx_dialect != cxx98) && friend_p
15623            && decl && TREE_CODE (decl) == FUNCTION_DECL)
15624     /* Core issue #226 (C++0x only): A default template-argument
15625        shall not be specified in a friend class template
15626        declaration. */
15627     check_default_tmpl_args (decl, current_template_parms, /*is_primary=*/1, 
15628                              /*is_partial=*/0, /*is_friend_decl=*/1);
15629
15630   if (!friend_p && pushed_scope)
15631     pop_scope (pushed_scope);
15632
15633   return decl;
15634 }
15635
15636 /* Parse a declarator.
15637
15638    declarator:
15639      direct-declarator
15640      ptr-operator declarator
15641
15642    abstract-declarator:
15643      ptr-operator abstract-declarator [opt]
15644      direct-abstract-declarator
15645
15646    GNU Extensions:
15647
15648    declarator:
15649      attributes [opt] direct-declarator
15650      attributes [opt] ptr-operator declarator
15651
15652    abstract-declarator:
15653      attributes [opt] ptr-operator abstract-declarator [opt]
15654      attributes [opt] direct-abstract-declarator
15655
15656    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
15657    detect constructor, destructor or conversion operators. It is set
15658    to -1 if the declarator is a name, and +1 if it is a
15659    function. Otherwise it is set to zero. Usually you just want to
15660    test for >0, but internally the negative value is used.
15661
15662    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
15663    a decl-specifier-seq unless it declares a constructor, destructor,
15664    or conversion.  It might seem that we could check this condition in
15665    semantic analysis, rather than parsing, but that makes it difficult
15666    to handle something like `f()'.  We want to notice that there are
15667    no decl-specifiers, and therefore realize that this is an
15668    expression, not a declaration.)
15669
15670    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
15671    the declarator is a direct-declarator of the form "(...)".
15672
15673    MEMBER_P is true iff this declarator is a member-declarator.  */
15674
15675 static cp_declarator *
15676 cp_parser_declarator (cp_parser* parser,
15677                       cp_parser_declarator_kind dcl_kind,
15678                       int* ctor_dtor_or_conv_p,
15679                       bool* parenthesized_p,
15680                       bool member_p)
15681 {
15682   cp_declarator *declarator;
15683   enum tree_code code;
15684   cp_cv_quals cv_quals;
15685   tree class_type;
15686   tree attributes = NULL_TREE;
15687
15688   /* Assume this is not a constructor, destructor, or type-conversion
15689      operator.  */
15690   if (ctor_dtor_or_conv_p)
15691     *ctor_dtor_or_conv_p = 0;
15692
15693   if (cp_parser_allow_gnu_extensions_p (parser))
15694     attributes = cp_parser_attributes_opt (parser);
15695
15696   /* Check for the ptr-operator production.  */
15697   cp_parser_parse_tentatively (parser);
15698   /* Parse the ptr-operator.  */
15699   code = cp_parser_ptr_operator (parser,
15700                                  &class_type,
15701                                  &cv_quals);
15702   /* If that worked, then we have a ptr-operator.  */
15703   if (cp_parser_parse_definitely (parser))
15704     {
15705       /* If a ptr-operator was found, then this declarator was not
15706          parenthesized.  */
15707       if (parenthesized_p)
15708         *parenthesized_p = true;
15709       /* The dependent declarator is optional if we are parsing an
15710          abstract-declarator.  */
15711       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
15712         cp_parser_parse_tentatively (parser);
15713
15714       /* Parse the dependent declarator.  */
15715       declarator = cp_parser_declarator (parser, dcl_kind,
15716                                          /*ctor_dtor_or_conv_p=*/NULL,
15717                                          /*parenthesized_p=*/NULL,
15718                                          /*member_p=*/false);
15719
15720       /* If we are parsing an abstract-declarator, we must handle the
15721          case where the dependent declarator is absent.  */
15722       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
15723           && !cp_parser_parse_definitely (parser))
15724         declarator = NULL;
15725
15726       declarator = cp_parser_make_indirect_declarator
15727         (code, class_type, cv_quals, declarator);
15728     }
15729   /* Everything else is a direct-declarator.  */
15730   else
15731     {
15732       if (parenthesized_p)
15733         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
15734                                                    CPP_OPEN_PAREN);
15735       declarator = cp_parser_direct_declarator (parser, dcl_kind,
15736                                                 ctor_dtor_or_conv_p,
15737                                                 member_p);
15738     }
15739
15740   if (attributes && declarator && declarator != cp_error_declarator)
15741     declarator->attributes = attributes;
15742
15743   return declarator;
15744 }
15745
15746 /* Parse a direct-declarator or direct-abstract-declarator.
15747
15748    direct-declarator:
15749      declarator-id
15750      direct-declarator ( parameter-declaration-clause )
15751        cv-qualifier-seq [opt]
15752        exception-specification [opt]
15753      direct-declarator [ constant-expression [opt] ]
15754      ( declarator )
15755
15756    direct-abstract-declarator:
15757      direct-abstract-declarator [opt]
15758        ( parameter-declaration-clause )
15759        cv-qualifier-seq [opt]
15760        exception-specification [opt]
15761      direct-abstract-declarator [opt] [ constant-expression [opt] ]
15762      ( abstract-declarator )
15763
15764    Returns a representation of the declarator.  DCL_KIND is
15765    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
15766    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
15767    we are parsing a direct-declarator.  It is
15768    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
15769    of ambiguity we prefer an abstract declarator, as per
15770    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
15771    cp_parser_declarator.  */
15772
15773 static cp_declarator *
15774 cp_parser_direct_declarator (cp_parser* parser,
15775                              cp_parser_declarator_kind dcl_kind,
15776                              int* ctor_dtor_or_conv_p,
15777                              bool member_p)
15778 {
15779   cp_token *token;
15780   cp_declarator *declarator = NULL;
15781   tree scope = NULL_TREE;
15782   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
15783   bool saved_in_declarator_p = parser->in_declarator_p;
15784   bool first = true;
15785   tree pushed_scope = NULL_TREE;
15786
15787   while (true)
15788     {
15789       /* Peek at the next token.  */
15790       token = cp_lexer_peek_token (parser->lexer);
15791       if (token->type == CPP_OPEN_PAREN)
15792         {
15793           /* This is either a parameter-declaration-clause, or a
15794              parenthesized declarator. When we know we are parsing a
15795              named declarator, it must be a parenthesized declarator
15796              if FIRST is true. For instance, `(int)' is a
15797              parameter-declaration-clause, with an omitted
15798              direct-abstract-declarator. But `((*))', is a
15799              parenthesized abstract declarator. Finally, when T is a
15800              template parameter `(T)' is a
15801              parameter-declaration-clause, and not a parenthesized
15802              named declarator.
15803
15804              We first try and parse a parameter-declaration-clause,
15805              and then try a nested declarator (if FIRST is true).
15806
15807              It is not an error for it not to be a
15808              parameter-declaration-clause, even when FIRST is
15809              false. Consider,
15810
15811                int i (int);
15812                int i (3);
15813
15814              The first is the declaration of a function while the
15815              second is the definition of a variable, including its
15816              initializer.
15817
15818              Having seen only the parenthesis, we cannot know which of
15819              these two alternatives should be selected.  Even more
15820              complex are examples like:
15821
15822                int i (int (a));
15823                int i (int (3));
15824
15825              The former is a function-declaration; the latter is a
15826              variable initialization.
15827
15828              Thus again, we try a parameter-declaration-clause, and if
15829              that fails, we back out and return.  */
15830
15831           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
15832             {
15833               tree params;
15834               unsigned saved_num_template_parameter_lists;
15835               bool is_declarator = false;
15836               tree t;
15837
15838               /* In a member-declarator, the only valid interpretation
15839                  of a parenthesis is the start of a
15840                  parameter-declaration-clause.  (It is invalid to
15841                  initialize a static data member with a parenthesized
15842                  initializer; only the "=" form of initialization is
15843                  permitted.)  */
15844               if (!member_p)
15845                 cp_parser_parse_tentatively (parser);
15846
15847               /* Consume the `('.  */
15848               cp_lexer_consume_token (parser->lexer);
15849               if (first)
15850                 {
15851                   /* If this is going to be an abstract declarator, we're
15852                      in a declarator and we can't have default args.  */
15853                   parser->default_arg_ok_p = false;
15854                   parser->in_declarator_p = true;
15855                 }
15856
15857               /* Inside the function parameter list, surrounding
15858                  template-parameter-lists do not apply.  */
15859               saved_num_template_parameter_lists
15860                 = parser->num_template_parameter_lists;
15861               parser->num_template_parameter_lists = 0;
15862
15863               begin_scope (sk_function_parms, NULL_TREE);
15864
15865               /* Parse the parameter-declaration-clause.  */
15866               params = cp_parser_parameter_declaration_clause (parser);
15867
15868               parser->num_template_parameter_lists
15869                 = saved_num_template_parameter_lists;
15870
15871               /* Consume the `)'.  */
15872               cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
15873
15874               /* If all went well, parse the cv-qualifier-seq and the
15875                  exception-specification.  */
15876               if (member_p || cp_parser_parse_definitely (parser))
15877                 {
15878                   cp_cv_quals cv_quals;
15879                   cp_virt_specifiers virt_specifiers;
15880                   tree exception_specification;
15881                   tree late_return;
15882
15883                   is_declarator = true;
15884
15885                   if (ctor_dtor_or_conv_p)
15886                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
15887                   first = false;
15888
15889                   /* Parse the cv-qualifier-seq.  */
15890                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
15891                   /* And the exception-specification.  */
15892                   exception_specification
15893                     = cp_parser_exception_specification_opt (parser);
15894                   /* Parse the virt-specifier-seq.  */
15895                   virt_specifiers = cp_parser_virt_specifier_seq_opt (parser);
15896
15897                   late_return = (cp_parser_late_return_type_opt
15898                                  (parser, member_p ? cv_quals : -1));
15899
15900                   /* Create the function-declarator.  */
15901                   declarator = make_call_declarator (declarator,
15902                                                      params,
15903                                                      cv_quals,
15904                                                      virt_specifiers,
15905                                                      exception_specification,
15906                                                      late_return);
15907                   /* Any subsequent parameter lists are to do with
15908                      return type, so are not those of the declared
15909                      function.  */
15910                   parser->default_arg_ok_p = false;
15911                 }
15912
15913               /* Remove the function parms from scope.  */
15914               for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
15915                 pop_binding (DECL_NAME (t), t);
15916               leave_scope();
15917
15918               if (is_declarator)
15919                 /* Repeat the main loop.  */
15920                 continue;
15921             }
15922
15923           /* If this is the first, we can try a parenthesized
15924              declarator.  */
15925           if (first)
15926             {
15927               bool saved_in_type_id_in_expr_p;
15928
15929               parser->default_arg_ok_p = saved_default_arg_ok_p;
15930               parser->in_declarator_p = saved_in_declarator_p;
15931
15932               /* Consume the `('.  */
15933               cp_lexer_consume_token (parser->lexer);
15934               /* Parse the nested declarator.  */
15935               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
15936               parser->in_type_id_in_expr_p = true;
15937               declarator
15938                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
15939                                         /*parenthesized_p=*/NULL,
15940                                         member_p);
15941               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
15942               first = false;
15943               /* Expect a `)'.  */
15944               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
15945                 declarator = cp_error_declarator;
15946               if (declarator == cp_error_declarator)
15947                 break;
15948
15949               goto handle_declarator;
15950             }
15951           /* Otherwise, we must be done.  */
15952           else
15953             break;
15954         }
15955       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
15956                && token->type == CPP_OPEN_SQUARE)
15957         {
15958           /* Parse an array-declarator.  */
15959           tree bounds;
15960
15961           if (ctor_dtor_or_conv_p)
15962             *ctor_dtor_or_conv_p = 0;
15963
15964           first = false;
15965           parser->default_arg_ok_p = false;
15966           parser->in_declarator_p = true;
15967           /* Consume the `['.  */
15968           cp_lexer_consume_token (parser->lexer);
15969           /* Peek at the next token.  */
15970           token = cp_lexer_peek_token (parser->lexer);
15971           /* If the next token is `]', then there is no
15972              constant-expression.  */
15973           if (token->type != CPP_CLOSE_SQUARE)
15974             {
15975               bool non_constant_p;
15976
15977               bounds
15978                 = cp_parser_constant_expression (parser,
15979                                                  /*allow_non_constant=*/true,
15980                                                  &non_constant_p);
15981               if (!non_constant_p)
15982                 /* OK */;
15983               /* Normally, the array bound must be an integral constant
15984                  expression.  However, as an extension, we allow VLAs
15985                  in function scopes as long as they aren't part of a
15986                  parameter declaration.  */
15987               else if (!parser->in_function_body
15988                        || current_binding_level->kind == sk_function_parms)
15989                 {
15990                   cp_parser_error (parser,
15991                                    "array bound is not an integer constant");
15992                   bounds = error_mark_node;
15993                 }
15994               else if (processing_template_decl && !error_operand_p (bounds))
15995                 {
15996                   /* Remember this wasn't a constant-expression.  */
15997                   bounds = build_nop (TREE_TYPE (bounds), bounds);
15998                   TREE_SIDE_EFFECTS (bounds) = 1;
15999                 }
16000             }
16001           else
16002             bounds = NULL_TREE;
16003           /* Look for the closing `]'.  */
16004           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE))
16005             {
16006               declarator = cp_error_declarator;
16007               break;
16008             }
16009
16010           declarator = make_array_declarator (declarator, bounds);
16011         }
16012       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
16013         {
16014           {
16015             tree qualifying_scope;
16016             tree unqualified_name;
16017             special_function_kind sfk;
16018             bool abstract_ok;
16019             bool pack_expansion_p = false;
16020             cp_token *declarator_id_start_token;
16021
16022             /* Parse a declarator-id */
16023             abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
16024             if (abstract_ok)
16025               {
16026                 cp_parser_parse_tentatively (parser);
16027
16028                 /* If we see an ellipsis, we should be looking at a
16029                    parameter pack. */
16030                 if (token->type == CPP_ELLIPSIS)
16031                   {
16032                     /* Consume the `...' */
16033                     cp_lexer_consume_token (parser->lexer);
16034
16035                     pack_expansion_p = true;
16036                   }
16037               }
16038
16039             declarator_id_start_token = cp_lexer_peek_token (parser->lexer);
16040             unqualified_name
16041               = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
16042             qualifying_scope = parser->scope;
16043             if (abstract_ok)
16044               {
16045                 bool okay = false;
16046
16047                 if (!unqualified_name && pack_expansion_p)
16048                   {
16049                     /* Check whether an error occurred. */
16050                     okay = !cp_parser_error_occurred (parser);
16051
16052                     /* We already consumed the ellipsis to mark a
16053                        parameter pack, but we have no way to report it,
16054                        so abort the tentative parse. We will be exiting
16055                        immediately anyway. */
16056                     cp_parser_abort_tentative_parse (parser);
16057                   }
16058                 else
16059                   okay = cp_parser_parse_definitely (parser);
16060
16061                 if (!okay)
16062                   unqualified_name = error_mark_node;
16063                 else if (unqualified_name
16064                          && (qualifying_scope
16065                              || (TREE_CODE (unqualified_name)
16066                                  != IDENTIFIER_NODE)))
16067                   {
16068                     cp_parser_error (parser, "expected unqualified-id");
16069                     unqualified_name = error_mark_node;
16070                   }
16071               }
16072
16073             if (!unqualified_name)
16074               return NULL;
16075             if (unqualified_name == error_mark_node)
16076               {
16077                 declarator = cp_error_declarator;
16078                 pack_expansion_p = false;
16079                 declarator->parameter_pack_p = false;
16080                 break;
16081               }
16082
16083             if (qualifying_scope && at_namespace_scope_p ()
16084                 && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
16085               {
16086                 /* In the declaration of a member of a template class
16087                    outside of the class itself, the SCOPE will sometimes
16088                    be a TYPENAME_TYPE.  For example, given:
16089
16090                    template <typename T>
16091                    int S<T>::R::i = 3;
16092
16093                    the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
16094                    this context, we must resolve S<T>::R to an ordinary
16095                    type, rather than a typename type.
16096
16097                    The reason we normally avoid resolving TYPENAME_TYPEs
16098                    is that a specialization of `S' might render
16099                    `S<T>::R' not a type.  However, if `S' is
16100                    specialized, then this `i' will not be used, so there
16101                    is no harm in resolving the types here.  */
16102                 tree type;
16103
16104                 /* Resolve the TYPENAME_TYPE.  */
16105                 type = resolve_typename_type (qualifying_scope,
16106                                               /*only_current_p=*/false);
16107                 /* If that failed, the declarator is invalid.  */
16108                 if (TREE_CODE (type) == TYPENAME_TYPE)
16109                   {
16110                     if (typedef_variant_p (type))
16111                       error_at (declarator_id_start_token->location,
16112                                 "cannot define member of dependent typedef "
16113                                 "%qT", type);
16114                     else
16115                       error_at (declarator_id_start_token->location,
16116                                 "%<%T::%E%> is not a type",
16117                                 TYPE_CONTEXT (qualifying_scope),
16118                                 TYPE_IDENTIFIER (qualifying_scope));
16119                   }
16120                 qualifying_scope = type;
16121               }
16122
16123             sfk = sfk_none;
16124
16125             if (unqualified_name)
16126               {
16127                 tree class_type;
16128
16129                 if (qualifying_scope
16130                     && CLASS_TYPE_P (qualifying_scope))
16131                   class_type = qualifying_scope;
16132                 else
16133                   class_type = current_class_type;
16134
16135                 if (TREE_CODE (unqualified_name) == TYPE_DECL)
16136                   {
16137                     tree name_type = TREE_TYPE (unqualified_name);
16138                     if (class_type && same_type_p (name_type, class_type))
16139                       {
16140                         if (qualifying_scope
16141                             && CLASSTYPE_USE_TEMPLATE (name_type))
16142                           {
16143                             error_at (declarator_id_start_token->location,
16144                                       "invalid use of constructor as a template");
16145                             inform (declarator_id_start_token->location,
16146                                     "use %<%T::%D%> instead of %<%T::%D%> to "
16147                                     "name the constructor in a qualified name",
16148                                     class_type,
16149                                     DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
16150                                     class_type, name_type);
16151                             declarator = cp_error_declarator;
16152                             break;
16153                           }
16154                         else
16155                           unqualified_name = constructor_name (class_type);
16156                       }
16157                     else
16158                       {
16159                         /* We do not attempt to print the declarator
16160                            here because we do not have enough
16161                            information about its original syntactic
16162                            form.  */
16163                         cp_parser_error (parser, "invalid declarator");
16164                         declarator = cp_error_declarator;
16165                         break;
16166                       }
16167                   }
16168
16169                 if (class_type)
16170                   {
16171                     if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
16172                       sfk = sfk_destructor;
16173                     else if (IDENTIFIER_TYPENAME_P (unqualified_name))
16174                       sfk = sfk_conversion;
16175                     else if (/* There's no way to declare a constructor
16176                                 for an anonymous type, even if the type
16177                                 got a name for linkage purposes.  */
16178                              !TYPE_WAS_ANONYMOUS (class_type)
16179                              && constructor_name_p (unqualified_name,
16180                                                     class_type))
16181                       {
16182                         unqualified_name = constructor_name (class_type);
16183                         sfk = sfk_constructor;
16184                       }
16185                     else if (is_overloaded_fn (unqualified_name)
16186                              && DECL_CONSTRUCTOR_P (get_first_fn
16187                                                     (unqualified_name)))
16188                       sfk = sfk_constructor;
16189
16190                     if (ctor_dtor_or_conv_p && sfk != sfk_none)
16191                       *ctor_dtor_or_conv_p = -1;
16192                   }
16193               }
16194             declarator = make_id_declarator (qualifying_scope,
16195                                              unqualified_name,
16196                                              sfk);
16197             declarator->id_loc = token->location;
16198             declarator->parameter_pack_p = pack_expansion_p;
16199
16200             if (pack_expansion_p)
16201               maybe_warn_variadic_templates ();
16202           }
16203
16204         handle_declarator:;
16205           scope = get_scope_of_declarator (declarator);
16206           if (scope)
16207             /* Any names that appear after the declarator-id for a
16208                member are looked up in the containing scope.  */
16209             pushed_scope = push_scope (scope);
16210           parser->in_declarator_p = true;
16211           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
16212               || (declarator && declarator->kind == cdk_id))
16213             /* Default args are only allowed on function
16214                declarations.  */
16215             parser->default_arg_ok_p = saved_default_arg_ok_p;
16216           else
16217             parser->default_arg_ok_p = false;
16218
16219           first = false;
16220         }
16221       /* We're done.  */
16222       else
16223         break;
16224     }
16225
16226   /* For an abstract declarator, we might wind up with nothing at this
16227      point.  That's an error; the declarator is not optional.  */
16228   if (!declarator)
16229     cp_parser_error (parser, "expected declarator");
16230
16231   /* If we entered a scope, we must exit it now.  */
16232   if (pushed_scope)
16233     pop_scope (pushed_scope);
16234
16235   parser->default_arg_ok_p = saved_default_arg_ok_p;
16236   parser->in_declarator_p = saved_in_declarator_p;
16237
16238   return declarator;
16239 }
16240
16241 /* Parse a ptr-operator.
16242
16243    ptr-operator:
16244      * cv-qualifier-seq [opt]
16245      &
16246      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
16247
16248    GNU Extension:
16249
16250    ptr-operator:
16251      & cv-qualifier-seq [opt]
16252
16253    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
16254    Returns ADDR_EXPR if a reference was used, or NON_LVALUE_EXPR for
16255    an rvalue reference. In the case of a pointer-to-member, *TYPE is
16256    filled in with the TYPE containing the member.  *CV_QUALS is
16257    filled in with the cv-qualifier-seq, or TYPE_UNQUALIFIED, if there
16258    are no cv-qualifiers.  Returns ERROR_MARK if an error occurred.
16259    Note that the tree codes returned by this function have nothing
16260    to do with the types of trees that will be eventually be created
16261    to represent the pointer or reference type being parsed. They are
16262    just constants with suggestive names. */
16263 static enum tree_code
16264 cp_parser_ptr_operator (cp_parser* parser,
16265                         tree* type,
16266                         cp_cv_quals *cv_quals)
16267 {
16268   enum tree_code code = ERROR_MARK;
16269   cp_token *token;
16270
16271   /* Assume that it's not a pointer-to-member.  */
16272   *type = NULL_TREE;
16273   /* And that there are no cv-qualifiers.  */
16274   *cv_quals = TYPE_UNQUALIFIED;
16275
16276   /* Peek at the next token.  */
16277   token = cp_lexer_peek_token (parser->lexer);
16278
16279   /* If it's a `*', `&' or `&&' we have a pointer or reference.  */
16280   if (token->type == CPP_MULT)
16281     code = INDIRECT_REF;
16282   else if (token->type == CPP_AND)
16283     code = ADDR_EXPR;
16284   else if ((cxx_dialect != cxx98) &&
16285            token->type == CPP_AND_AND) /* C++0x only */
16286     code = NON_LVALUE_EXPR;
16287
16288   if (code != ERROR_MARK)
16289     {
16290       /* Consume the `*', `&' or `&&'.  */
16291       cp_lexer_consume_token (parser->lexer);
16292
16293       /* A `*' can be followed by a cv-qualifier-seq, and so can a
16294          `&', if we are allowing GNU extensions.  (The only qualifier
16295          that can legally appear after `&' is `restrict', but that is
16296          enforced during semantic analysis.  */
16297       if (code == INDIRECT_REF
16298           || cp_parser_allow_gnu_extensions_p (parser))
16299         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
16300     }
16301   else
16302     {
16303       /* Try the pointer-to-member case.  */
16304       cp_parser_parse_tentatively (parser);
16305       /* Look for the optional `::' operator.  */
16306       cp_parser_global_scope_opt (parser,
16307                                   /*current_scope_valid_p=*/false);
16308       /* Look for the nested-name specifier.  */
16309       token = cp_lexer_peek_token (parser->lexer);
16310       cp_parser_nested_name_specifier (parser,
16311                                        /*typename_keyword_p=*/false,
16312                                        /*check_dependency_p=*/true,
16313                                        /*type_p=*/false,
16314                                        /*is_declaration=*/false);
16315       /* If we found it, and the next token is a `*', then we are
16316          indeed looking at a pointer-to-member operator.  */
16317       if (!cp_parser_error_occurred (parser)
16318           && cp_parser_require (parser, CPP_MULT, RT_MULT))
16319         {
16320           /* Indicate that the `*' operator was used.  */
16321           code = INDIRECT_REF;
16322
16323           if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
16324             error_at (token->location, "%qD is a namespace", parser->scope);
16325           else
16326             {
16327               /* The type of which the member is a member is given by the
16328                  current SCOPE.  */
16329               *type = parser->scope;
16330               /* The next name will not be qualified.  */
16331               parser->scope = NULL_TREE;
16332               parser->qualifying_scope = NULL_TREE;
16333               parser->object_scope = NULL_TREE;
16334               /* Look for the optional cv-qualifier-seq.  */
16335               *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
16336             }
16337         }
16338       /* If that didn't work we don't have a ptr-operator.  */
16339       if (!cp_parser_parse_definitely (parser))
16340         cp_parser_error (parser, "expected ptr-operator");
16341     }
16342
16343   return code;
16344 }
16345
16346 /* Parse an (optional) cv-qualifier-seq.
16347
16348    cv-qualifier-seq:
16349      cv-qualifier cv-qualifier-seq [opt]
16350
16351    cv-qualifier:
16352      const
16353      volatile
16354
16355    GNU Extension:
16356
16357    cv-qualifier:
16358      __restrict__
16359
16360    Returns a bitmask representing the cv-qualifiers.  */
16361
16362 static cp_cv_quals
16363 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
16364 {
16365   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
16366
16367   while (true)
16368     {
16369       cp_token *token;
16370       cp_cv_quals cv_qualifier;
16371
16372       /* Peek at the next token.  */
16373       token = cp_lexer_peek_token (parser->lexer);
16374       /* See if it's a cv-qualifier.  */
16375       switch (token->keyword)
16376         {
16377         case RID_CONST:
16378           cv_qualifier = TYPE_QUAL_CONST;
16379           break;
16380
16381         case RID_VOLATILE:
16382           cv_qualifier = TYPE_QUAL_VOLATILE;
16383           break;
16384
16385         case RID_RESTRICT:
16386           cv_qualifier = TYPE_QUAL_RESTRICT;
16387           break;
16388
16389         default:
16390           cv_qualifier = TYPE_UNQUALIFIED;
16391           break;
16392         }
16393
16394       if (!cv_qualifier)
16395         break;
16396
16397       if (cv_quals & cv_qualifier)
16398         {
16399           error_at (token->location, "duplicate cv-qualifier");
16400           cp_lexer_purge_token (parser->lexer);
16401         }
16402       else
16403         {
16404           cp_lexer_consume_token (parser->lexer);
16405           cv_quals |= cv_qualifier;
16406         }
16407     }
16408
16409   return cv_quals;
16410 }
16411
16412 /* Parse an (optional) virt-specifier-seq.
16413
16414    virt-specifier-seq:
16415      virt-specifier virt-specifier-seq [opt]
16416
16417    virt-specifier:
16418      override
16419      final
16420
16421    Returns a bitmask representing the virt-specifiers.  */
16422
16423 static cp_virt_specifiers
16424 cp_parser_virt_specifier_seq_opt (cp_parser* parser)
16425 {
16426   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
16427
16428   while (true)
16429     {
16430       cp_token *token;
16431       cp_virt_specifiers virt_specifier;
16432
16433       /* Peek at the next token.  */
16434       token = cp_lexer_peek_token (parser->lexer);
16435       /* See if it's a virt-specifier-qualifier.  */
16436       if (token->type != CPP_NAME)
16437         break;
16438       if (!strcmp (IDENTIFIER_POINTER(token->u.value), "override"))
16439         {
16440           maybe_warn_cpp0x (CPP0X_OVERRIDE_CONTROLS);
16441           virt_specifier = VIRT_SPEC_OVERRIDE;
16442         }
16443       else if (!strcmp (IDENTIFIER_POINTER(token->u.value), "final"))
16444         {
16445           maybe_warn_cpp0x (CPP0X_OVERRIDE_CONTROLS);
16446           virt_specifier = VIRT_SPEC_FINAL;
16447         }
16448       else if (!strcmp (IDENTIFIER_POINTER(token->u.value), "__final"))
16449         {
16450           virt_specifier = VIRT_SPEC_FINAL;
16451         }
16452       else
16453         break;
16454
16455       if (virt_specifiers & virt_specifier)
16456         {
16457           error_at (token->location, "duplicate virt-specifier");
16458           cp_lexer_purge_token (parser->lexer);
16459         }
16460       else
16461         {
16462           cp_lexer_consume_token (parser->lexer);
16463           virt_specifiers |= virt_specifier;
16464         }
16465     }
16466   return virt_specifiers;
16467 }
16468
16469 /* Used by handling of trailing-return-types and NSDMI, in which 'this'
16470    is in scope even though it isn't real.  */
16471
16472 static void
16473 inject_this_parameter (tree ctype, cp_cv_quals quals)
16474 {
16475   tree this_parm;
16476
16477   if (current_class_ptr)
16478     {
16479       /* We don't clear this between NSDMIs.  Is it already what we want?  */
16480       tree type = TREE_TYPE (TREE_TYPE (current_class_ptr));
16481       if (same_type_ignoring_top_level_qualifiers_p (ctype, type)
16482           && cp_type_quals (type) == quals)
16483         return;
16484     }
16485
16486   this_parm = build_this_parm (ctype, quals);
16487   /* Clear this first to avoid shortcut in cp_build_indirect_ref.  */
16488   current_class_ptr = NULL_TREE;
16489   current_class_ref
16490     = cp_build_indirect_ref (this_parm, RO_NULL, tf_warning_or_error);
16491   current_class_ptr = this_parm;
16492 }
16493
16494 /* Parse a late-specified return type, if any.  This is not a separate
16495    non-terminal, but part of a function declarator, which looks like
16496
16497    -> trailing-type-specifier-seq abstract-declarator(opt)
16498
16499    Returns the type indicated by the type-id.
16500
16501    QUALS is either a bitmask of cv_qualifiers or -1 for a non-member
16502    function.  */
16503
16504 static tree
16505 cp_parser_late_return_type_opt (cp_parser* parser, cp_cv_quals quals)
16506 {
16507   cp_token *token;
16508   tree type;
16509
16510   /* Peek at the next token.  */
16511   token = cp_lexer_peek_token (parser->lexer);
16512   /* A late-specified return type is indicated by an initial '->'. */
16513   if (token->type != CPP_DEREF)
16514     return NULL_TREE;
16515
16516   /* Consume the ->.  */
16517   cp_lexer_consume_token (parser->lexer);
16518
16519   if (quals >= 0)
16520     {
16521       /* DR 1207: 'this' is in scope in the trailing return type.  */
16522       gcc_assert (current_class_ptr == NULL_TREE);
16523       inject_this_parameter (current_class_type, quals);
16524     }
16525
16526   type = cp_parser_trailing_type_id (parser);
16527
16528   if (quals >= 0)
16529     current_class_ptr = current_class_ref = NULL_TREE;
16530
16531   return type;
16532 }
16533
16534 /* Parse a declarator-id.
16535
16536    declarator-id:
16537      id-expression
16538      :: [opt] nested-name-specifier [opt] type-name
16539
16540    In the `id-expression' case, the value returned is as for
16541    cp_parser_id_expression if the id-expression was an unqualified-id.
16542    If the id-expression was a qualified-id, then a SCOPE_REF is
16543    returned.  The first operand is the scope (either a NAMESPACE_DECL
16544    or TREE_TYPE), but the second is still just a representation of an
16545    unqualified-id.  */
16546
16547 static tree
16548 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
16549 {
16550   tree id;
16551   /* The expression must be an id-expression.  Assume that qualified
16552      names are the names of types so that:
16553
16554        template <class T>
16555        int S<T>::R::i = 3;
16556
16557      will work; we must treat `S<T>::R' as the name of a type.
16558      Similarly, assume that qualified names are templates, where
16559      required, so that:
16560
16561        template <class T>
16562        int S<T>::R<T>::i = 3;
16563
16564      will work, too.  */
16565   id = cp_parser_id_expression (parser,
16566                                 /*template_keyword_p=*/false,
16567                                 /*check_dependency_p=*/false,
16568                                 /*template_p=*/NULL,
16569                                 /*declarator_p=*/true,
16570                                 optional_p);
16571   if (id && BASELINK_P (id))
16572     id = BASELINK_FUNCTIONS (id);
16573   return id;
16574 }
16575
16576 /* Parse a type-id.
16577
16578    type-id:
16579      type-specifier-seq abstract-declarator [opt]
16580
16581    Returns the TYPE specified.  */
16582
16583 static tree
16584 cp_parser_type_id_1 (cp_parser* parser, bool is_template_arg,
16585                      bool is_trailing_return)
16586 {
16587   cp_decl_specifier_seq type_specifier_seq;
16588   cp_declarator *abstract_declarator;
16589
16590   /* Parse the type-specifier-seq.  */
16591   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
16592                                 is_trailing_return,
16593                                 &type_specifier_seq);
16594   if (type_specifier_seq.type == error_mark_node)
16595     return error_mark_node;
16596
16597   /* There might or might not be an abstract declarator.  */
16598   cp_parser_parse_tentatively (parser);
16599   /* Look for the declarator.  */
16600   abstract_declarator
16601     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
16602                             /*parenthesized_p=*/NULL,
16603                             /*member_p=*/false);
16604   /* Check to see if there really was a declarator.  */
16605   if (!cp_parser_parse_definitely (parser))
16606     abstract_declarator = NULL;
16607
16608   if (type_specifier_seq.type
16609       && type_uses_auto (type_specifier_seq.type))
16610     {
16611       /* A type-id with type 'auto' is only ok if the abstract declarator
16612          is a function declarator with a late-specified return type.  */
16613       if (abstract_declarator
16614           && abstract_declarator->kind == cdk_function
16615           && abstract_declarator->u.function.late_return_type)
16616         /* OK */;
16617       else
16618         {
16619           error ("invalid use of %<auto%>");
16620           return error_mark_node;
16621         }
16622     }
16623   
16624   return groktypename (&type_specifier_seq, abstract_declarator,
16625                        is_template_arg);
16626 }
16627
16628 static tree cp_parser_type_id (cp_parser *parser)
16629 {
16630   return cp_parser_type_id_1 (parser, false, false);
16631 }
16632
16633 static tree cp_parser_template_type_arg (cp_parser *parser)
16634 {
16635   tree r;
16636   const char *saved_message = parser->type_definition_forbidden_message;
16637   parser->type_definition_forbidden_message
16638     = G_("types may not be defined in template arguments");
16639   r = cp_parser_type_id_1 (parser, true, false);
16640   parser->type_definition_forbidden_message = saved_message;
16641   return r;
16642 }
16643
16644 static tree cp_parser_trailing_type_id (cp_parser *parser)
16645 {
16646   return cp_parser_type_id_1 (parser, false, true);
16647 }
16648
16649 /* Parse a type-specifier-seq.
16650
16651    type-specifier-seq:
16652      type-specifier type-specifier-seq [opt]
16653
16654    GNU extension:
16655
16656    type-specifier-seq:
16657      attributes type-specifier-seq [opt]
16658
16659    If IS_DECLARATION is true, we are at the start of a "condition" or
16660    exception-declaration, so we might be followed by a declarator-id.
16661
16662    If IS_TRAILING_RETURN is true, we are in a trailing-return-type,
16663    i.e. we've just seen "->".
16664
16665    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
16666
16667 static void
16668 cp_parser_type_specifier_seq (cp_parser* parser,
16669                               bool is_declaration,
16670                               bool is_trailing_return,
16671                               cp_decl_specifier_seq *type_specifier_seq)
16672 {
16673   bool seen_type_specifier = false;
16674   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
16675   cp_token *start_token = NULL;
16676
16677   /* Clear the TYPE_SPECIFIER_SEQ.  */
16678   clear_decl_specs (type_specifier_seq);
16679
16680   /* In the context of a trailing return type, enum E { } is an
16681      elaborated-type-specifier followed by a function-body, not an
16682      enum-specifier.  */
16683   if (is_trailing_return)
16684     flags |= CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS;
16685
16686   /* Parse the type-specifiers and attributes.  */
16687   while (true)
16688     {
16689       tree type_specifier;
16690       bool is_cv_qualifier;
16691
16692       /* Check for attributes first.  */
16693       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
16694         {
16695           type_specifier_seq->attributes =
16696             chainon (type_specifier_seq->attributes,
16697                      cp_parser_attributes_opt (parser));
16698           continue;
16699         }
16700
16701       /* record the token of the beginning of the type specifier seq,
16702          for error reporting purposes*/
16703      if (!start_token)
16704        start_token = cp_lexer_peek_token (parser->lexer);
16705
16706       /* Look for the type-specifier.  */
16707       type_specifier = cp_parser_type_specifier (parser,
16708                                                  flags,
16709                                                  type_specifier_seq,
16710                                                  /*is_declaration=*/false,
16711                                                  NULL,
16712                                                  &is_cv_qualifier);
16713       if (!type_specifier)
16714         {
16715           /* If the first type-specifier could not be found, this is not a
16716              type-specifier-seq at all.  */
16717           if (!seen_type_specifier)
16718             {
16719               cp_parser_error (parser, "expected type-specifier");
16720               type_specifier_seq->type = error_mark_node;
16721               return;
16722             }
16723           /* If subsequent type-specifiers could not be found, the
16724              type-specifier-seq is complete.  */
16725           break;
16726         }
16727
16728       seen_type_specifier = true;
16729       /* The standard says that a condition can be:
16730
16731             type-specifier-seq declarator = assignment-expression
16732
16733          However, given:
16734
16735            struct S {};
16736            if (int S = ...)
16737
16738          we should treat the "S" as a declarator, not as a
16739          type-specifier.  The standard doesn't say that explicitly for
16740          type-specifier-seq, but it does say that for
16741          decl-specifier-seq in an ordinary declaration.  Perhaps it
16742          would be clearer just to allow a decl-specifier-seq here, and
16743          then add a semantic restriction that if any decl-specifiers
16744          that are not type-specifiers appear, the program is invalid.  */
16745       if (is_declaration && !is_cv_qualifier)
16746         flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
16747     }
16748
16749   cp_parser_check_decl_spec (type_specifier_seq, start_token->location);
16750 }
16751
16752 /* Parse a parameter-declaration-clause.
16753
16754    parameter-declaration-clause:
16755      parameter-declaration-list [opt] ... [opt]
16756      parameter-declaration-list , ...
16757
16758    Returns a representation for the parameter declarations.  A return
16759    value of NULL indicates a parameter-declaration-clause consisting
16760    only of an ellipsis.  */
16761
16762 static tree
16763 cp_parser_parameter_declaration_clause (cp_parser* parser)
16764 {
16765   tree parameters;
16766   cp_token *token;
16767   bool ellipsis_p;
16768   bool is_error;
16769
16770   /* Peek at the next token.  */
16771   token = cp_lexer_peek_token (parser->lexer);
16772   /* Check for trivial parameter-declaration-clauses.  */
16773   if (token->type == CPP_ELLIPSIS)
16774     {
16775       /* Consume the `...' token.  */
16776       cp_lexer_consume_token (parser->lexer);
16777       return NULL_TREE;
16778     }
16779   else if (token->type == CPP_CLOSE_PAREN)
16780     /* There are no parameters.  */
16781     {
16782 #ifndef NO_IMPLICIT_EXTERN_C
16783       if (in_system_header && current_class_type == NULL
16784           && current_lang_name == lang_name_c)
16785         return NULL_TREE;
16786       else
16787 #endif
16788         return void_list_node;
16789     }
16790   /* Check for `(void)', too, which is a special case.  */
16791   else if (token->keyword == RID_VOID
16792            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
16793                == CPP_CLOSE_PAREN))
16794     {
16795       /* Consume the `void' token.  */
16796       cp_lexer_consume_token (parser->lexer);
16797       /* There are no parameters.  */
16798       return void_list_node;
16799     }
16800
16801   /* Parse the parameter-declaration-list.  */
16802   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
16803   /* If a parse error occurred while parsing the
16804      parameter-declaration-list, then the entire
16805      parameter-declaration-clause is erroneous.  */
16806   if (is_error)
16807     return NULL;
16808
16809   /* Peek at the next token.  */
16810   token = cp_lexer_peek_token (parser->lexer);
16811   /* If it's a `,', the clause should terminate with an ellipsis.  */
16812   if (token->type == CPP_COMMA)
16813     {
16814       /* Consume the `,'.  */
16815       cp_lexer_consume_token (parser->lexer);
16816       /* Expect an ellipsis.  */
16817       ellipsis_p
16818         = (cp_parser_require (parser, CPP_ELLIPSIS, RT_ELLIPSIS) != NULL);
16819     }
16820   /* It might also be `...' if the optional trailing `,' was
16821      omitted.  */
16822   else if (token->type == CPP_ELLIPSIS)
16823     {
16824       /* Consume the `...' token.  */
16825       cp_lexer_consume_token (parser->lexer);
16826       /* And remember that we saw it.  */
16827       ellipsis_p = true;
16828     }
16829   else
16830     ellipsis_p = false;
16831
16832   /* Finish the parameter list.  */
16833   if (!ellipsis_p)
16834     parameters = chainon (parameters, void_list_node);
16835
16836   return parameters;
16837 }
16838
16839 /* Parse a parameter-declaration-list.
16840
16841    parameter-declaration-list:
16842      parameter-declaration
16843      parameter-declaration-list , parameter-declaration
16844
16845    Returns a representation of the parameter-declaration-list, as for
16846    cp_parser_parameter_declaration_clause.  However, the
16847    `void_list_node' is never appended to the list.  Upon return,
16848    *IS_ERROR will be true iff an error occurred.  */
16849
16850 static tree
16851 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
16852 {
16853   tree parameters = NULL_TREE;
16854   tree *tail = &parameters; 
16855   bool saved_in_unbraced_linkage_specification_p;
16856   int index = 0;
16857
16858   /* Assume all will go well.  */
16859   *is_error = false;
16860   /* The special considerations that apply to a function within an
16861      unbraced linkage specifications do not apply to the parameters
16862      to the function.  */
16863   saved_in_unbraced_linkage_specification_p 
16864     = parser->in_unbraced_linkage_specification_p;
16865   parser->in_unbraced_linkage_specification_p = false;
16866
16867   /* Look for more parameters.  */
16868   while (true)
16869     {
16870       cp_parameter_declarator *parameter;
16871       tree decl = error_mark_node;
16872       bool parenthesized_p = false;
16873       /* Parse the parameter.  */
16874       parameter
16875         = cp_parser_parameter_declaration (parser,
16876                                            /*template_parm_p=*/false,
16877                                            &parenthesized_p);
16878
16879       /* We don't know yet if the enclosing context is deprecated, so wait
16880          and warn in grokparms if appropriate.  */
16881       deprecated_state = DEPRECATED_SUPPRESS;
16882
16883       if (parameter)
16884         decl = grokdeclarator (parameter->declarator,
16885                                &parameter->decl_specifiers,
16886                                PARM,
16887                                parameter->default_argument != NULL_TREE,
16888                                &parameter->decl_specifiers.attributes);
16889
16890       deprecated_state = DEPRECATED_NORMAL;
16891
16892       /* If a parse error occurred parsing the parameter declaration,
16893          then the entire parameter-declaration-list is erroneous.  */
16894       if (decl == error_mark_node)
16895         {
16896           *is_error = true;
16897           parameters = error_mark_node;
16898           break;
16899         }
16900
16901       if (parameter->decl_specifiers.attributes)
16902         cplus_decl_attributes (&decl,
16903                                parameter->decl_specifiers.attributes,
16904                                0);
16905       if (DECL_NAME (decl))
16906         decl = pushdecl (decl);
16907
16908       if (decl != error_mark_node)
16909         {
16910           retrofit_lang_decl (decl);
16911           DECL_PARM_INDEX (decl) = ++index;
16912           DECL_PARM_LEVEL (decl) = function_parm_depth ();
16913         }
16914
16915       /* Add the new parameter to the list.  */
16916       *tail = build_tree_list (parameter->default_argument, decl);
16917       tail = &TREE_CHAIN (*tail);
16918
16919       /* Peek at the next token.  */
16920       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
16921           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
16922           /* These are for Objective-C++ */
16923           || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
16924           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
16925         /* The parameter-declaration-list is complete.  */
16926         break;
16927       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
16928         {
16929           cp_token *token;
16930
16931           /* Peek at the next token.  */
16932           token = cp_lexer_peek_nth_token (parser->lexer, 2);
16933           /* If it's an ellipsis, then the list is complete.  */
16934           if (token->type == CPP_ELLIPSIS)
16935             break;
16936           /* Otherwise, there must be more parameters.  Consume the
16937              `,'.  */
16938           cp_lexer_consume_token (parser->lexer);
16939           /* When parsing something like:
16940
16941                 int i(float f, double d)
16942
16943              we can tell after seeing the declaration for "f" that we
16944              are not looking at an initialization of a variable "i",
16945              but rather at the declaration of a function "i".
16946
16947              Due to the fact that the parsing of template arguments
16948              (as specified to a template-id) requires backtracking we
16949              cannot use this technique when inside a template argument
16950              list.  */
16951           if (!parser->in_template_argument_list_p
16952               && !parser->in_type_id_in_expr_p
16953               && cp_parser_uncommitted_to_tentative_parse_p (parser)
16954               /* However, a parameter-declaration of the form
16955                  "foat(f)" (which is a valid declaration of a
16956                  parameter "f") can also be interpreted as an
16957                  expression (the conversion of "f" to "float").  */
16958               && !parenthesized_p)
16959             cp_parser_commit_to_tentative_parse (parser);
16960         }
16961       else
16962         {
16963           cp_parser_error (parser, "expected %<,%> or %<...%>");
16964           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
16965             cp_parser_skip_to_closing_parenthesis (parser,
16966                                                    /*recovering=*/true,
16967                                                    /*or_comma=*/false,
16968                                                    /*consume_paren=*/false);
16969           break;
16970         }
16971     }
16972
16973   parser->in_unbraced_linkage_specification_p
16974     = saved_in_unbraced_linkage_specification_p;
16975
16976   return parameters;
16977 }
16978
16979 /* Parse a parameter declaration.
16980
16981    parameter-declaration:
16982      decl-specifier-seq ... [opt] declarator
16983      decl-specifier-seq declarator = assignment-expression
16984      decl-specifier-seq ... [opt] abstract-declarator [opt]
16985      decl-specifier-seq abstract-declarator [opt] = assignment-expression
16986
16987    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
16988    declares a template parameter.  (In that case, a non-nested `>'
16989    token encountered during the parsing of the assignment-expression
16990    is not interpreted as a greater-than operator.)
16991
16992    Returns a representation of the parameter, or NULL if an error
16993    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
16994    true iff the declarator is of the form "(p)".  */
16995
16996 static cp_parameter_declarator *
16997 cp_parser_parameter_declaration (cp_parser *parser,
16998                                  bool template_parm_p,
16999                                  bool *parenthesized_p)
17000 {
17001   int declares_class_or_enum;
17002   cp_decl_specifier_seq decl_specifiers;
17003   cp_declarator *declarator;
17004   tree default_argument;
17005   cp_token *token = NULL, *declarator_token_start = NULL;
17006   const char *saved_message;
17007
17008   /* In a template parameter, `>' is not an operator.
17009
17010      [temp.param]
17011
17012      When parsing a default template-argument for a non-type
17013      template-parameter, the first non-nested `>' is taken as the end
17014      of the template parameter-list rather than a greater-than
17015      operator.  */
17016
17017   /* Type definitions may not appear in parameter types.  */
17018   saved_message = parser->type_definition_forbidden_message;
17019   parser->type_definition_forbidden_message
17020     = G_("types may not be defined in parameter types");
17021
17022   /* Parse the declaration-specifiers.  */
17023   cp_parser_decl_specifier_seq (parser,
17024                                 CP_PARSER_FLAGS_NONE,
17025                                 &decl_specifiers,
17026                                 &declares_class_or_enum);
17027
17028   /* Complain about missing 'typename' or other invalid type names.  */
17029   if (!decl_specifiers.any_type_specifiers_p)
17030     cp_parser_parse_and_diagnose_invalid_type_name (parser);
17031
17032   /* If an error occurred, there's no reason to attempt to parse the
17033      rest of the declaration.  */
17034   if (cp_parser_error_occurred (parser))
17035     {
17036       parser->type_definition_forbidden_message = saved_message;
17037       return NULL;
17038     }
17039
17040   /* Peek at the next token.  */
17041   token = cp_lexer_peek_token (parser->lexer);
17042
17043   /* If the next token is a `)', `,', `=', `>', or `...', then there
17044      is no declarator. However, when variadic templates are enabled,
17045      there may be a declarator following `...'.  */
17046   if (token->type == CPP_CLOSE_PAREN
17047       || token->type == CPP_COMMA
17048       || token->type == CPP_EQ
17049       || token->type == CPP_GREATER)
17050     {
17051       declarator = NULL;
17052       if (parenthesized_p)
17053         *parenthesized_p = false;
17054     }
17055   /* Otherwise, there should be a declarator.  */
17056   else
17057     {
17058       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
17059       parser->default_arg_ok_p = false;
17060
17061       /* After seeing a decl-specifier-seq, if the next token is not a
17062          "(", there is no possibility that the code is a valid
17063          expression.  Therefore, if parsing tentatively, we commit at
17064          this point.  */
17065       if (!parser->in_template_argument_list_p
17066           /* In an expression context, having seen:
17067
17068                (int((char ...
17069
17070              we cannot be sure whether we are looking at a
17071              function-type (taking a "char" as a parameter) or a cast
17072              of some object of type "char" to "int".  */
17073           && !parser->in_type_id_in_expr_p
17074           && cp_parser_uncommitted_to_tentative_parse_p (parser)
17075           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
17076           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
17077         cp_parser_commit_to_tentative_parse (parser);
17078       /* Parse the declarator.  */
17079       declarator_token_start = token;
17080       declarator = cp_parser_declarator (parser,
17081                                          CP_PARSER_DECLARATOR_EITHER,
17082                                          /*ctor_dtor_or_conv_p=*/NULL,
17083                                          parenthesized_p,
17084                                          /*member_p=*/false);
17085       parser->default_arg_ok_p = saved_default_arg_ok_p;
17086       /* After the declarator, allow more attributes.  */
17087       decl_specifiers.attributes
17088         = chainon (decl_specifiers.attributes,
17089                    cp_parser_attributes_opt (parser));
17090     }
17091
17092   /* If the next token is an ellipsis, and we have not seen a
17093      declarator name, and the type of the declarator contains parameter
17094      packs but it is not a TYPE_PACK_EXPANSION, then we actually have
17095      a parameter pack expansion expression. Otherwise, leave the
17096      ellipsis for a C-style variadic function. */
17097   token = cp_lexer_peek_token (parser->lexer);
17098   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
17099     {
17100       tree type = decl_specifiers.type;
17101
17102       if (type && DECL_P (type))
17103         type = TREE_TYPE (type);
17104
17105       if (type
17106           && TREE_CODE (type) != TYPE_PACK_EXPANSION
17107           && declarator_can_be_parameter_pack (declarator)
17108           && (!declarator || !declarator->parameter_pack_p)
17109           && uses_parameter_packs (type))
17110         {
17111           /* Consume the `...'. */
17112           cp_lexer_consume_token (parser->lexer);
17113           maybe_warn_variadic_templates ();
17114           
17115           /* Build a pack expansion type */
17116           if (declarator)
17117             declarator->parameter_pack_p = true;
17118           else
17119             decl_specifiers.type = make_pack_expansion (type);
17120         }
17121     }
17122
17123   /* The restriction on defining new types applies only to the type
17124      of the parameter, not to the default argument.  */
17125   parser->type_definition_forbidden_message = saved_message;
17126
17127   /* If the next token is `=', then process a default argument.  */
17128   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
17129     {
17130       /* If we are defining a class, then the tokens that make up the
17131          default argument must be saved and processed later.  */
17132       if (!template_parm_p && at_class_scope_p ()
17133           && TYPE_BEING_DEFINED (current_class_type)
17134           && !LAMBDA_TYPE_P (current_class_type))
17135         {
17136           unsigned depth = 0;
17137           int maybe_template_id = 0;
17138           cp_token *first_token;
17139           cp_token *token;
17140
17141           /* Add tokens until we have processed the entire default
17142              argument.  We add the range [first_token, token).  */
17143           first_token = cp_lexer_peek_token (parser->lexer);
17144           while (true)
17145             {
17146               bool done = false;
17147
17148               /* Peek at the next token.  */
17149               token = cp_lexer_peek_token (parser->lexer);
17150               /* What we do depends on what token we have.  */
17151               switch (token->type)
17152                 {
17153                   /* In valid code, a default argument must be
17154                      immediately followed by a `,' `)', or `...'.  */
17155                 case CPP_COMMA:
17156                   if (depth == 0 && maybe_template_id)
17157                     {
17158                       /* If we've seen a '<', we might be in a
17159                          template-argument-list.  Until Core issue 325 is
17160                          resolved, we don't know how this situation ought
17161                          to be handled, so try to DTRT.  We check whether
17162                          what comes after the comma is a valid parameter
17163                          declaration list.  If it is, then the comma ends
17164                          the default argument; otherwise the default
17165                          argument continues.  */
17166                       bool error = false;
17167                       tree t;
17168
17169                       /* Set ITALP so cp_parser_parameter_declaration_list
17170                          doesn't decide to commit to this parse.  */
17171                       bool saved_italp = parser->in_template_argument_list_p;
17172                       parser->in_template_argument_list_p = true;
17173
17174                       cp_parser_parse_tentatively (parser);
17175                       cp_lexer_consume_token (parser->lexer);
17176                       begin_scope (sk_function_parms, NULL_TREE);
17177                       cp_parser_parameter_declaration_list (parser, &error);
17178                       for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
17179                         pop_binding (DECL_NAME (t), t);
17180                       leave_scope ();
17181                       if (!cp_parser_error_occurred (parser) && !error)
17182                         done = true;
17183                       cp_parser_abort_tentative_parse (parser);
17184
17185                       parser->in_template_argument_list_p = saved_italp;
17186                       break;
17187                     }
17188                 case CPP_CLOSE_PAREN:
17189                 case CPP_ELLIPSIS:
17190                   /* If we run into a non-nested `;', `}', or `]',
17191                      then the code is invalid -- but the default
17192                      argument is certainly over.  */
17193                 case CPP_SEMICOLON:
17194                 case CPP_CLOSE_BRACE:
17195                 case CPP_CLOSE_SQUARE:
17196                   if (depth == 0)
17197                     done = true;
17198                   /* Update DEPTH, if necessary.  */
17199                   else if (token->type == CPP_CLOSE_PAREN
17200                            || token->type == CPP_CLOSE_BRACE
17201                            || token->type == CPP_CLOSE_SQUARE)
17202                     --depth;
17203                   break;
17204
17205                 case CPP_OPEN_PAREN:
17206                 case CPP_OPEN_SQUARE:
17207                 case CPP_OPEN_BRACE:
17208                   ++depth;
17209                   break;
17210
17211                 case CPP_LESS:
17212                   if (depth == 0)
17213                     /* This might be the comparison operator, or it might
17214                        start a template argument list.  */
17215                     ++maybe_template_id;
17216                   break;
17217
17218                 case CPP_RSHIFT:
17219                   if (cxx_dialect == cxx98)
17220                     break;
17221                   /* Fall through for C++0x, which treats the `>>'
17222                      operator like two `>' tokens in certain
17223                      cases.  */
17224
17225                 case CPP_GREATER:
17226                   if (depth == 0)
17227                     {
17228                       /* This might be an operator, or it might close a
17229                          template argument list.  But if a previous '<'
17230                          started a template argument list, this will have
17231                          closed it, so we can't be in one anymore.  */
17232                       maybe_template_id -= 1 + (token->type == CPP_RSHIFT);
17233                       if (maybe_template_id < 0)
17234                         maybe_template_id = 0;
17235                     }
17236                   break;
17237
17238                   /* If we run out of tokens, issue an error message.  */
17239                 case CPP_EOF:
17240                 case CPP_PRAGMA_EOL:
17241                   error_at (token->location, "file ends in default argument");
17242                   done = true;
17243                   break;
17244
17245                 case CPP_NAME:
17246                 case CPP_SCOPE:
17247                   /* In these cases, we should look for template-ids.
17248                      For example, if the default argument is
17249                      `X<int, double>()', we need to do name lookup to
17250                      figure out whether or not `X' is a template; if
17251                      so, the `,' does not end the default argument.
17252
17253                      That is not yet done.  */
17254                   break;
17255
17256                 default:
17257                   break;
17258                 }
17259
17260               /* If we've reached the end, stop.  */
17261               if (done)
17262                 break;
17263
17264               /* Add the token to the token block.  */
17265               token = cp_lexer_consume_token (parser->lexer);
17266             }
17267
17268           /* Create a DEFAULT_ARG to represent the unparsed default
17269              argument.  */
17270           default_argument = make_node (DEFAULT_ARG);
17271           DEFARG_TOKENS (default_argument)
17272             = cp_token_cache_new (first_token, token);
17273           DEFARG_INSTANTIATIONS (default_argument) = NULL;
17274         }
17275       /* Outside of a class definition, we can just parse the
17276          assignment-expression.  */
17277       else
17278         {
17279           token = cp_lexer_peek_token (parser->lexer);
17280           default_argument 
17281             = cp_parser_default_argument (parser, template_parm_p);
17282         }
17283
17284       if (!parser->default_arg_ok_p)
17285         {
17286           if (flag_permissive)
17287             warning (0, "deprecated use of default argument for parameter of non-function");
17288           else
17289             {
17290               error_at (token->location,
17291                         "default arguments are only "
17292                         "permitted for function parameters");
17293               default_argument = NULL_TREE;
17294             }
17295         }
17296       else if ((declarator && declarator->parameter_pack_p)
17297                || (decl_specifiers.type
17298                    && PACK_EXPANSION_P (decl_specifiers.type)))
17299         {
17300           /* Find the name of the parameter pack.  */     
17301           cp_declarator *id_declarator = declarator;
17302           while (id_declarator && id_declarator->kind != cdk_id)
17303             id_declarator = id_declarator->declarator;
17304           
17305           if (id_declarator && id_declarator->kind == cdk_id)
17306             error_at (declarator_token_start->location,
17307                       template_parm_p
17308                       ? G_("template parameter pack %qD "
17309                            "cannot have a default argument")
17310                       : G_("parameter pack %qD cannot have "
17311                            "a default argument"),
17312                       id_declarator->u.id.unqualified_name);
17313           else
17314             error_at (declarator_token_start->location,
17315                       template_parm_p
17316                       ? G_("template parameter pack cannot have "
17317                            "a default argument")
17318                       : G_("parameter pack cannot have a "
17319                            "default argument"));
17320
17321           default_argument = NULL_TREE;
17322         }
17323     }
17324   else
17325     default_argument = NULL_TREE;
17326
17327   return make_parameter_declarator (&decl_specifiers,
17328                                     declarator,
17329                                     default_argument);
17330 }
17331
17332 /* Parse a default argument and return it.
17333
17334    TEMPLATE_PARM_P is true if this is a default argument for a
17335    non-type template parameter.  */
17336 static tree
17337 cp_parser_default_argument (cp_parser *parser, bool template_parm_p)
17338 {
17339   tree default_argument = NULL_TREE;
17340   bool saved_greater_than_is_operator_p;
17341   bool saved_local_variables_forbidden_p;
17342   bool non_constant_p, is_direct_init;
17343
17344   /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
17345      set correctly.  */
17346   saved_greater_than_is_operator_p = parser->greater_than_is_operator_p;
17347   parser->greater_than_is_operator_p = !template_parm_p;
17348   /* Local variable names (and the `this' keyword) may not
17349      appear in a default argument.  */
17350   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
17351   parser->local_variables_forbidden_p = true;
17352   /* Parse the assignment-expression.  */
17353   if (template_parm_p)
17354     push_deferring_access_checks (dk_no_deferred);
17355   default_argument
17356     = cp_parser_initializer (parser, &is_direct_init, &non_constant_p);
17357   if (BRACE_ENCLOSED_INITIALIZER_P (default_argument))
17358     maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
17359   if (template_parm_p)
17360     pop_deferring_access_checks ();
17361   parser->greater_than_is_operator_p = saved_greater_than_is_operator_p;
17362   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
17363
17364   return default_argument;
17365 }
17366
17367 /* Parse a function-body.
17368
17369    function-body:
17370      compound_statement  */
17371
17372 static void
17373 cp_parser_function_body (cp_parser *parser)
17374 {
17375   cp_parser_compound_statement (parser, NULL, false, true);
17376 }
17377
17378 /* Parse a ctor-initializer-opt followed by a function-body.  Return
17379    true if a ctor-initializer was present.  */
17380
17381 static bool
17382 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
17383 {
17384   tree body, list;
17385   bool ctor_initializer_p;
17386   const bool check_body_p =
17387      DECL_CONSTRUCTOR_P (current_function_decl)
17388      && DECL_DECLARED_CONSTEXPR_P (current_function_decl);
17389   tree last = NULL;
17390
17391   /* Begin the function body.  */
17392   body = begin_function_body ();
17393   /* Parse the optional ctor-initializer.  */
17394   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
17395
17396   /* If we're parsing a constexpr constructor definition, we need
17397      to check that the constructor body is indeed empty.  However,
17398      before we get to cp_parser_function_body lot of junk has been
17399      generated, so we can't just check that we have an empty block.
17400      Rather we take a snapshot of the outermost block, and check whether
17401      cp_parser_function_body changed its state.  */
17402   if (check_body_p)
17403     {
17404       list = body;
17405       if (TREE_CODE (list) == BIND_EXPR)
17406         list = BIND_EXPR_BODY (list);
17407       if (TREE_CODE (list) == STATEMENT_LIST
17408           && STATEMENT_LIST_TAIL (list) != NULL)
17409         last = STATEMENT_LIST_TAIL (list)->stmt;
17410     }
17411   /* Parse the function-body.  */
17412   cp_parser_function_body (parser);
17413   if (check_body_p)
17414     check_constexpr_ctor_body (last, list);
17415   /* Finish the function body.  */
17416   finish_function_body (body);
17417
17418   return ctor_initializer_p;
17419 }
17420
17421 /* Parse an initializer.
17422
17423    initializer:
17424      = initializer-clause
17425      ( expression-list )
17426
17427    Returns an expression representing the initializer.  If no
17428    initializer is present, NULL_TREE is returned.
17429
17430    *IS_DIRECT_INIT is set to FALSE if the `= initializer-clause'
17431    production is used, and TRUE otherwise.  *IS_DIRECT_INIT is
17432    set to TRUE if there is no initializer present.  If there is an
17433    initializer, and it is not a constant-expression, *NON_CONSTANT_P
17434    is set to true; otherwise it is set to false.  */
17435
17436 static tree
17437 cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
17438                        bool* non_constant_p)
17439 {
17440   cp_token *token;
17441   tree init;
17442
17443   /* Peek at the next token.  */
17444   token = cp_lexer_peek_token (parser->lexer);
17445
17446   /* Let our caller know whether or not this initializer was
17447      parenthesized.  */
17448   *is_direct_init = (token->type != CPP_EQ);
17449   /* Assume that the initializer is constant.  */
17450   *non_constant_p = false;
17451
17452   if (token->type == CPP_EQ)
17453     {
17454       /* Consume the `='.  */
17455       cp_lexer_consume_token (parser->lexer);
17456       /* Parse the initializer-clause.  */
17457       init = cp_parser_initializer_clause (parser, non_constant_p);
17458     }
17459   else if (token->type == CPP_OPEN_PAREN)
17460     {
17461       VEC(tree,gc) *vec;
17462       vec = cp_parser_parenthesized_expression_list (parser, non_attr,
17463                                                      /*cast_p=*/false,
17464                                                      /*allow_expansion_p=*/true,
17465                                                      non_constant_p);
17466       if (vec == NULL)
17467         return error_mark_node;
17468       init = build_tree_list_vec (vec);
17469       release_tree_vector (vec);
17470     }
17471   else if (token->type == CPP_OPEN_BRACE)
17472     {
17473       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
17474       init = cp_parser_braced_list (parser, non_constant_p);
17475       CONSTRUCTOR_IS_DIRECT_INIT (init) = 1;
17476     }
17477   else
17478     {
17479       /* Anything else is an error.  */
17480       cp_parser_error (parser, "expected initializer");
17481       init = error_mark_node;
17482     }
17483
17484   return init;
17485 }
17486
17487 /* Parse an initializer-clause.
17488
17489    initializer-clause:
17490      assignment-expression
17491      braced-init-list
17492
17493    Returns an expression representing the initializer.
17494
17495    If the `assignment-expression' production is used the value
17496    returned is simply a representation for the expression.
17497
17498    Otherwise, calls cp_parser_braced_list.  */
17499
17500 static tree
17501 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
17502 {
17503   tree initializer;
17504
17505   /* Assume the expression is constant.  */
17506   *non_constant_p = false;
17507
17508   /* If it is not a `{', then we are looking at an
17509      assignment-expression.  */
17510   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
17511     {
17512       initializer
17513         = cp_parser_constant_expression (parser,
17514                                         /*allow_non_constant_p=*/true,
17515                                         non_constant_p);
17516     }
17517   else
17518     initializer = cp_parser_braced_list (parser, non_constant_p);
17519
17520   return initializer;
17521 }
17522
17523 /* Parse a brace-enclosed initializer list.
17524
17525    braced-init-list:
17526      { initializer-list , [opt] }
17527      { }
17528
17529    Returns a CONSTRUCTOR.  The CONSTRUCTOR_ELTS will be
17530    the elements of the initializer-list (or NULL, if the last
17531    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
17532    NULL_TREE.  There is no way to detect whether or not the optional
17533    trailing `,' was provided.  NON_CONSTANT_P is as for
17534    cp_parser_initializer.  */     
17535
17536 static tree
17537 cp_parser_braced_list (cp_parser* parser, bool* non_constant_p)
17538 {
17539   tree initializer;
17540
17541   /* Consume the `{' token.  */
17542   cp_lexer_consume_token (parser->lexer);
17543   /* Create a CONSTRUCTOR to represent the braced-initializer.  */
17544   initializer = make_node (CONSTRUCTOR);
17545   /* If it's not a `}', then there is a non-trivial initializer.  */
17546   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
17547     {
17548       /* Parse the initializer list.  */
17549       CONSTRUCTOR_ELTS (initializer)
17550         = cp_parser_initializer_list (parser, non_constant_p);
17551       /* A trailing `,' token is allowed.  */
17552       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
17553         cp_lexer_consume_token (parser->lexer);
17554     }
17555   /* Now, there should be a trailing `}'.  */
17556   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
17557   TREE_TYPE (initializer) = init_list_type_node;
17558   return initializer;
17559 }
17560
17561 /* Parse an initializer-list.
17562
17563    initializer-list:
17564      initializer-clause ... [opt]
17565      initializer-list , initializer-clause ... [opt]
17566
17567    GNU Extension:
17568
17569    initializer-list:
17570      designation initializer-clause ...[opt]
17571      initializer-list , designation initializer-clause ...[opt]
17572
17573    designation:
17574      . identifier =
17575      identifier :
17576      [ constant-expression ] =
17577
17578    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
17579    for the initializer.  If the INDEX of the elt is non-NULL, it is the
17580    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
17581    as for cp_parser_initializer.  */
17582
17583 static VEC(constructor_elt,gc) *
17584 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
17585 {
17586   VEC(constructor_elt,gc) *v = NULL;
17587
17588   /* Assume all of the expressions are constant.  */
17589   *non_constant_p = false;
17590
17591   /* Parse the rest of the list.  */
17592   while (true)
17593     {
17594       cp_token *token;
17595       tree designator;
17596       tree initializer;
17597       bool clause_non_constant_p;
17598
17599       /* If the next token is an identifier and the following one is a
17600          colon, we are looking at the GNU designated-initializer
17601          syntax.  */
17602       if (cp_parser_allow_gnu_extensions_p (parser)
17603           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
17604           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
17605         {
17606           /* Warn the user that they are using an extension.  */
17607           pedwarn (input_location, OPT_pedantic, 
17608                    "ISO C++ does not allow designated initializers");
17609           /* Consume the identifier.  */
17610           designator = cp_lexer_consume_token (parser->lexer)->u.value;
17611           /* Consume the `:'.  */
17612           cp_lexer_consume_token (parser->lexer);
17613         }
17614       /* Also handle the C99 syntax, '. id ='.  */
17615       else if (cp_parser_allow_gnu_extensions_p (parser)
17616                && cp_lexer_next_token_is (parser->lexer, CPP_DOT)
17617                && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME
17618                && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_EQ)
17619         {
17620           /* Warn the user that they are using an extension.  */
17621           pedwarn (input_location, OPT_pedantic,
17622                    "ISO C++ does not allow C99 designated initializers");
17623           /* Consume the `.'.  */
17624           cp_lexer_consume_token (parser->lexer);
17625           /* Consume the identifier.  */
17626           designator = cp_lexer_consume_token (parser->lexer)->u.value;
17627           /* Consume the `='.  */
17628           cp_lexer_consume_token (parser->lexer);
17629         }
17630       /* Also handle C99 array designators, '[ const ] ='.  */
17631       else if (cp_parser_allow_gnu_extensions_p (parser)
17632                && !c_dialect_objc ()
17633                && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
17634         {
17635           /* In C++11, [ could start a lambda-introducer.  */
17636           cp_parser_parse_tentatively (parser);
17637           cp_lexer_consume_token (parser->lexer);
17638           designator = cp_parser_constant_expression (parser, false, NULL);
17639           cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
17640           cp_parser_require (parser, CPP_EQ, RT_EQ);
17641           cp_parser_parse_definitely (parser);
17642         }
17643       else
17644         designator = NULL_TREE;
17645
17646       /* Parse the initializer.  */
17647       initializer = cp_parser_initializer_clause (parser,
17648                                                   &clause_non_constant_p);
17649       /* If any clause is non-constant, so is the entire initializer.  */
17650       if (clause_non_constant_p)
17651         *non_constant_p = true;
17652
17653       /* If we have an ellipsis, this is an initializer pack
17654          expansion.  */
17655       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
17656         {
17657           /* Consume the `...'.  */
17658           cp_lexer_consume_token (parser->lexer);
17659
17660           /* Turn the initializer into an initializer expansion.  */
17661           initializer = make_pack_expansion (initializer);
17662         }
17663
17664       /* Add it to the vector.  */
17665       CONSTRUCTOR_APPEND_ELT (v, designator, initializer);
17666
17667       /* If the next token is not a comma, we have reached the end of
17668          the list.  */
17669       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
17670         break;
17671
17672       /* Peek at the next token.  */
17673       token = cp_lexer_peek_nth_token (parser->lexer, 2);
17674       /* If the next token is a `}', then we're still done.  An
17675          initializer-clause can have a trailing `,' after the
17676          initializer-list and before the closing `}'.  */
17677       if (token->type == CPP_CLOSE_BRACE)
17678         break;
17679
17680       /* Consume the `,' token.  */
17681       cp_lexer_consume_token (parser->lexer);
17682     }
17683
17684   return v;
17685 }
17686
17687 /* Classes [gram.class] */
17688
17689 /* Parse a class-name.
17690
17691    class-name:
17692      identifier
17693      template-id
17694
17695    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
17696    to indicate that names looked up in dependent types should be
17697    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
17698    keyword has been used to indicate that the name that appears next
17699    is a template.  TAG_TYPE indicates the explicit tag given before
17700    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
17701    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
17702    is the class being defined in a class-head.
17703
17704    Returns the TYPE_DECL representing the class.  */
17705
17706 static tree
17707 cp_parser_class_name (cp_parser *parser,
17708                       bool typename_keyword_p,
17709                       bool template_keyword_p,
17710                       enum tag_types tag_type,
17711                       bool check_dependency_p,
17712                       bool class_head_p,
17713                       bool is_declaration)
17714 {
17715   tree decl;
17716   tree scope;
17717   bool typename_p;
17718   cp_token *token;
17719   tree identifier = NULL_TREE;
17720
17721   /* All class-names start with an identifier.  */
17722   token = cp_lexer_peek_token (parser->lexer);
17723   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
17724     {
17725       cp_parser_error (parser, "expected class-name");
17726       return error_mark_node;
17727     }
17728
17729   /* PARSER->SCOPE can be cleared when parsing the template-arguments
17730      to a template-id, so we save it here.  */
17731   scope = parser->scope;
17732   if (scope == error_mark_node)
17733     return error_mark_node;
17734
17735   /* Any name names a type if we're following the `typename' keyword
17736      in a qualified name where the enclosing scope is type-dependent.  */
17737   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
17738                 && dependent_type_p (scope));
17739   /* Handle the common case (an identifier, but not a template-id)
17740      efficiently.  */
17741   if (token->type == CPP_NAME
17742       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
17743     {
17744       cp_token *identifier_token;
17745       bool ambiguous_p;
17746
17747       /* Look for the identifier.  */
17748       identifier_token = cp_lexer_peek_token (parser->lexer);
17749       ambiguous_p = identifier_token->ambiguous_p;
17750       identifier = cp_parser_identifier (parser);
17751       /* If the next token isn't an identifier, we are certainly not
17752          looking at a class-name.  */
17753       if (identifier == error_mark_node)
17754         decl = error_mark_node;
17755       /* If we know this is a type-name, there's no need to look it
17756          up.  */
17757       else if (typename_p)
17758         decl = identifier;
17759       else
17760         {
17761           tree ambiguous_decls;
17762           /* If we already know that this lookup is ambiguous, then
17763              we've already issued an error message; there's no reason
17764              to check again.  */
17765           if (ambiguous_p)
17766             {
17767               cp_parser_simulate_error (parser);
17768               return error_mark_node;
17769             }
17770           /* If the next token is a `::', then the name must be a type
17771              name.
17772
17773              [basic.lookup.qual]
17774
17775              During the lookup for a name preceding the :: scope
17776              resolution operator, object, function, and enumerator
17777              names are ignored.  */
17778           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
17779             tag_type = typename_type;
17780           /* Look up the name.  */
17781           decl = cp_parser_lookup_name (parser, identifier,
17782                                         tag_type,
17783                                         /*is_template=*/false,
17784                                         /*is_namespace=*/false,
17785                                         check_dependency_p,
17786                                         &ambiguous_decls,
17787                                         identifier_token->location);
17788           if (ambiguous_decls)
17789             {
17790               if (cp_parser_parsing_tentatively (parser))
17791                 cp_parser_simulate_error (parser);
17792               return error_mark_node;
17793             }
17794         }
17795     }
17796   else
17797     {
17798       /* Try a template-id.  */
17799       decl = cp_parser_template_id (parser, template_keyword_p,
17800                                     check_dependency_p,
17801                                     is_declaration);
17802       if (decl == error_mark_node)
17803         return error_mark_node;
17804     }
17805
17806   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
17807
17808   /* If this is a typename, create a TYPENAME_TYPE.  */
17809   if (typename_p && decl != error_mark_node)
17810     {
17811       decl = make_typename_type (scope, decl, typename_type,
17812                                  /*complain=*/tf_error);
17813       if (decl != error_mark_node)
17814         decl = TYPE_NAME (decl);
17815     }
17816
17817   /* Check to see that it is really the name of a class.  */
17818   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
17819       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
17820       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
17821     /* Situations like this:
17822
17823          template <typename T> struct A {
17824            typename T::template X<int>::I i;
17825          };
17826
17827        are problematic.  Is `T::template X<int>' a class-name?  The
17828        standard does not seem to be definitive, but there is no other
17829        valid interpretation of the following `::'.  Therefore, those
17830        names are considered class-names.  */
17831     {
17832       decl = make_typename_type (scope, decl, tag_type, tf_error);
17833       if (decl != error_mark_node)
17834         decl = TYPE_NAME (decl);
17835     }
17836   else if (TREE_CODE (decl) != TYPE_DECL
17837            || TREE_TYPE (decl) == error_mark_node
17838            || !MAYBE_CLASS_TYPE_P (TREE_TYPE (decl))
17839            /* In Objective-C 2.0, a classname followed by '.' starts a
17840               dot-syntax expression, and it's not a type-name.  */
17841            || (c_dialect_objc ()
17842                && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT 
17843                && objc_is_class_name (decl)))
17844     decl = error_mark_node;
17845
17846   if (decl == error_mark_node)
17847     cp_parser_error (parser, "expected class-name");
17848   else if (identifier && !parser->scope)
17849     maybe_note_name_used_in_class (identifier, decl);
17850
17851   return decl;
17852 }
17853
17854 /* Parse a class-specifier.
17855
17856    class-specifier:
17857      class-head { member-specification [opt] }
17858
17859    Returns the TREE_TYPE representing the class.  */
17860
17861 static tree
17862 cp_parser_class_specifier_1 (cp_parser* parser)
17863 {
17864   tree type;
17865   tree attributes = NULL_TREE;
17866   bool nested_name_specifier_p;
17867   unsigned saved_num_template_parameter_lists;
17868   bool saved_in_function_body;
17869   unsigned char in_statement;
17870   bool in_switch_statement_p;
17871   bool saved_in_unbraced_linkage_specification_p;
17872   tree old_scope = NULL_TREE;
17873   tree scope = NULL_TREE;
17874   tree bases;
17875   cp_token *closing_brace;
17876
17877   push_deferring_access_checks (dk_no_deferred);
17878
17879   /* Parse the class-head.  */
17880   type = cp_parser_class_head (parser,
17881                                &nested_name_specifier_p,
17882                                &attributes,
17883                                &bases);
17884   /* If the class-head was a semantic disaster, skip the entire body
17885      of the class.  */
17886   if (!type)
17887     {
17888       cp_parser_skip_to_end_of_block_or_statement (parser);
17889       pop_deferring_access_checks ();
17890       return error_mark_node;
17891     }
17892
17893   /* Look for the `{'.  */
17894   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
17895     {
17896       pop_deferring_access_checks ();
17897       return error_mark_node;
17898     }
17899
17900   /* Process the base classes. If they're invalid, skip the 
17901      entire class body.  */
17902   if (!xref_basetypes (type, bases))
17903     {
17904       /* Consuming the closing brace yields better error messages
17905          later on.  */
17906       if (cp_parser_skip_to_closing_brace (parser))
17907         cp_lexer_consume_token (parser->lexer);
17908       pop_deferring_access_checks ();
17909       return error_mark_node;
17910     }
17911
17912   /* Issue an error message if type-definitions are forbidden here.  */
17913   cp_parser_check_type_definition (parser);
17914   /* Remember that we are defining one more class.  */
17915   ++parser->num_classes_being_defined;
17916   /* Inside the class, surrounding template-parameter-lists do not
17917      apply.  */
17918   saved_num_template_parameter_lists
17919     = parser->num_template_parameter_lists;
17920   parser->num_template_parameter_lists = 0;
17921   /* We are not in a function body.  */
17922   saved_in_function_body = parser->in_function_body;
17923   parser->in_function_body = false;
17924   /* Or in a loop.  */
17925   in_statement = parser->in_statement;
17926   parser->in_statement = 0;
17927   /* Or in a switch.  */
17928   in_switch_statement_p = parser->in_switch_statement_p;
17929   parser->in_switch_statement_p = false;
17930   /* We are not immediately inside an extern "lang" block.  */
17931   saved_in_unbraced_linkage_specification_p
17932     = parser->in_unbraced_linkage_specification_p;
17933   parser->in_unbraced_linkage_specification_p = false;
17934
17935   /* Start the class.  */
17936   if (nested_name_specifier_p)
17937     {
17938       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
17939       old_scope = push_inner_scope (scope);
17940     }
17941   type = begin_class_definition (type, attributes);
17942
17943   if (type == error_mark_node)
17944     /* If the type is erroneous, skip the entire body of the class.  */
17945     cp_parser_skip_to_closing_brace (parser);
17946   else
17947     /* Parse the member-specification.  */
17948     cp_parser_member_specification_opt (parser);
17949
17950   /* Look for the trailing `}'.  */
17951   closing_brace = cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
17952   /* Look for trailing attributes to apply to this class.  */
17953   if (cp_parser_allow_gnu_extensions_p (parser))
17954     attributes = cp_parser_attributes_opt (parser);
17955   if (type != error_mark_node)
17956     type = finish_struct (type, attributes);
17957   if (nested_name_specifier_p)
17958     pop_inner_scope (old_scope, scope);
17959
17960   /* We've finished a type definition.  Check for the common syntax
17961      error of forgetting a semicolon after the definition.  We need to
17962      be careful, as we can't just check for not-a-semicolon and be done
17963      with it; the user might have typed:
17964
17965      class X { } c = ...;
17966      class X { } *p = ...;
17967
17968      and so forth.  Instead, enumerate all the possible tokens that
17969      might follow this production; if we don't see one of them, then
17970      complain and silently insert the semicolon.  */
17971   {
17972     cp_token *token = cp_lexer_peek_token (parser->lexer);
17973     bool want_semicolon = true;
17974
17975     switch (token->type)
17976       {
17977       case CPP_NAME:
17978       case CPP_SEMICOLON:
17979       case CPP_MULT:
17980       case CPP_AND:
17981       case CPP_OPEN_PAREN:
17982       case CPP_CLOSE_PAREN:
17983       case CPP_COMMA:
17984         want_semicolon = false;
17985         break;
17986
17987         /* While it's legal for type qualifiers and storage class
17988            specifiers to follow type definitions in the grammar, only
17989            compiler testsuites contain code like that.  Assume that if
17990            we see such code, then what we're really seeing is a case
17991            like:
17992
17993            class X { }
17994            const <type> var = ...;
17995
17996            or
17997
17998            class Y { }
17999            static <type> func (...) ...
18000
18001            i.e. the qualifier or specifier applies to the next
18002            declaration.  To do so, however, we need to look ahead one
18003            more token to see if *that* token is a type specifier.
18004
18005            This code could be improved to handle:
18006
18007            class Z { }
18008            static const <type> var = ...;  */
18009       case CPP_KEYWORD:
18010         if (keyword_is_decl_specifier (token->keyword))
18011           {
18012             cp_token *lookahead = cp_lexer_peek_nth_token (parser->lexer, 2);
18013
18014             /* Handling user-defined types here would be nice, but very
18015                tricky.  */
18016             want_semicolon
18017               = (lookahead->type == CPP_KEYWORD
18018                  && keyword_begins_type_specifier (lookahead->keyword));
18019           }
18020         break;
18021       default:
18022         break;
18023       }
18024
18025     /* If we don't have a type, then something is very wrong and we
18026        shouldn't try to do anything clever.  Likewise for not seeing the
18027        closing brace.  */
18028     if (closing_brace && TYPE_P (type) && want_semicolon)
18029       {
18030         cp_token_position prev
18031           = cp_lexer_previous_token_position (parser->lexer);
18032         cp_token *prev_token = cp_lexer_token_at (parser->lexer, prev);
18033         location_t loc = prev_token->location;
18034
18035         if (CLASSTYPE_DECLARED_CLASS (type))
18036           error_at (loc, "expected %<;%> after class definition");
18037         else if (TREE_CODE (type) == RECORD_TYPE)
18038           error_at (loc, "expected %<;%> after struct definition");
18039         else if (TREE_CODE (type) == UNION_TYPE)
18040           error_at (loc, "expected %<;%> after union definition");
18041         else
18042           gcc_unreachable ();
18043
18044         /* Unget one token and smash it to look as though we encountered
18045            a semicolon in the input stream.  */
18046         cp_lexer_set_token_position (parser->lexer, prev);
18047         token = cp_lexer_peek_token (parser->lexer);
18048         token->type = CPP_SEMICOLON;
18049         token->keyword = RID_MAX;
18050       }
18051   }
18052
18053   /* If this class is not itself within the scope of another class,
18054      then we need to parse the bodies of all of the queued function
18055      definitions.  Note that the queued functions defined in a class
18056      are not always processed immediately following the
18057      class-specifier for that class.  Consider:
18058
18059        struct A {
18060          struct B { void f() { sizeof (A); } };
18061        };
18062
18063      If `f' were processed before the processing of `A' were
18064      completed, there would be no way to compute the size of `A'.
18065      Note that the nesting we are interested in here is lexical --
18066      not the semantic nesting given by TYPE_CONTEXT.  In particular,
18067      for:
18068
18069        struct A { struct B; };
18070        struct A::B { void f() { } };
18071
18072      there is no need to delay the parsing of `A::B::f'.  */
18073   if (--parser->num_classes_being_defined == 0)
18074     {
18075       tree decl;
18076       tree class_type = NULL_TREE;
18077       tree pushed_scope = NULL_TREE;
18078       unsigned ix;
18079       cp_default_arg_entry *e;
18080       tree save_ccp, save_ccr;
18081
18082       /* In a first pass, parse default arguments to the functions.
18083          Then, in a second pass, parse the bodies of the functions.
18084          This two-phased approach handles cases like:
18085
18086             struct S {
18087               void f() { g(); }
18088               void g(int i = 3);
18089             };
18090
18091          */
18092       FOR_EACH_VEC_ELT (cp_default_arg_entry, unparsed_funs_with_default_args,
18093                         ix, e)
18094         {
18095           decl = e->decl;
18096           /* If there are default arguments that have not yet been processed,
18097              take care of them now.  */
18098           if (class_type != e->class_type)
18099             {
18100               if (pushed_scope)
18101                 pop_scope (pushed_scope);
18102               class_type = e->class_type;
18103               pushed_scope = push_scope (class_type);
18104             }
18105           /* Make sure that any template parameters are in scope.  */
18106           maybe_begin_member_template_processing (decl);
18107           /* Parse the default argument expressions.  */
18108           cp_parser_late_parsing_default_args (parser, decl);
18109           /* Remove any template parameters from the symbol table.  */
18110           maybe_end_member_template_processing ();
18111         }
18112       VEC_truncate (cp_default_arg_entry, unparsed_funs_with_default_args, 0);
18113       /* Now parse any NSDMIs.  */
18114       save_ccp = current_class_ptr;
18115       save_ccr = current_class_ref;
18116       FOR_EACH_VEC_ELT (tree, unparsed_nsdmis, ix, decl)
18117         {
18118           if (class_type != DECL_CONTEXT (decl))
18119             {
18120               if (pushed_scope)
18121                 pop_scope (pushed_scope);
18122               class_type = DECL_CONTEXT (decl);
18123               pushed_scope = push_scope (class_type);
18124             }
18125           inject_this_parameter (class_type, TYPE_UNQUALIFIED);
18126           cp_parser_late_parsing_nsdmi (parser, decl);
18127         }
18128       VEC_truncate (tree, unparsed_nsdmis, 0);
18129       current_class_ptr = save_ccp;
18130       current_class_ref = save_ccr;
18131       if (pushed_scope)
18132         pop_scope (pushed_scope);
18133       /* Now parse the body of the functions.  */
18134       FOR_EACH_VEC_ELT (tree, unparsed_funs_with_definitions, ix, decl)
18135         cp_parser_late_parsing_for_member (parser, decl);
18136       VEC_truncate (tree, unparsed_funs_with_definitions, 0);
18137     }
18138
18139   /* Put back any saved access checks.  */
18140   pop_deferring_access_checks ();
18141
18142   /* Restore saved state.  */
18143   parser->in_switch_statement_p = in_switch_statement_p;
18144   parser->in_statement = in_statement;
18145   parser->in_function_body = saved_in_function_body;
18146   parser->num_template_parameter_lists
18147     = saved_num_template_parameter_lists;
18148   parser->in_unbraced_linkage_specification_p
18149     = saved_in_unbraced_linkage_specification_p;
18150
18151   return type;
18152 }
18153
18154 static tree
18155 cp_parser_class_specifier (cp_parser* parser)
18156 {
18157   tree ret;
18158   timevar_push (TV_PARSE_STRUCT);
18159   ret = cp_parser_class_specifier_1 (parser);
18160   timevar_pop (TV_PARSE_STRUCT);
18161   return ret;
18162 }
18163
18164 /* Parse a class-head.
18165
18166    class-head:
18167      class-key identifier [opt] base-clause [opt]
18168      class-key nested-name-specifier identifier class-virt-specifier [opt] base-clause [opt]
18169      class-key nested-name-specifier [opt] template-id
18170        base-clause [opt]
18171
18172    class-virt-specifier:
18173      final
18174
18175    GNU Extensions:
18176      class-key attributes identifier [opt] base-clause [opt]
18177      class-key attributes nested-name-specifier identifier base-clause [opt]
18178      class-key attributes nested-name-specifier [opt] template-id
18179        base-clause [opt]
18180
18181    Upon return BASES is initialized to the list of base classes (or
18182    NULL, if there are none) in the same form returned by
18183    cp_parser_base_clause.
18184
18185    Returns the TYPE of the indicated class.  Sets
18186    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
18187    involving a nested-name-specifier was used, and FALSE otherwise.
18188
18189    Returns error_mark_node if this is not a class-head.
18190
18191    Returns NULL_TREE if the class-head is syntactically valid, but
18192    semantically invalid in a way that means we should skip the entire
18193    body of the class.  */
18194
18195 static tree
18196 cp_parser_class_head (cp_parser* parser,
18197                       bool* nested_name_specifier_p,
18198                       tree *attributes_p,
18199                       tree *bases)
18200 {
18201   tree nested_name_specifier;
18202   enum tag_types class_key;
18203   tree id = NULL_TREE;
18204   tree type = NULL_TREE;
18205   tree attributes;
18206   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
18207   bool template_id_p = false;
18208   bool qualified_p = false;
18209   bool invalid_nested_name_p = false;
18210   bool invalid_explicit_specialization_p = false;
18211   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
18212   tree pushed_scope = NULL_TREE;
18213   unsigned num_templates;
18214   cp_token *type_start_token = NULL, *nested_name_specifier_token_start = NULL;
18215   /* Assume no nested-name-specifier will be present.  */
18216   *nested_name_specifier_p = false;
18217   /* Assume no template parameter lists will be used in defining the
18218      type.  */
18219   num_templates = 0;
18220   parser->colon_corrects_to_scope_p = false;
18221
18222   *bases = NULL_TREE;
18223
18224   /* Look for the class-key.  */
18225   class_key = cp_parser_class_key (parser);
18226   if (class_key == none_type)
18227     return error_mark_node;
18228
18229   /* Parse the attributes.  */
18230   attributes = cp_parser_attributes_opt (parser);
18231
18232   /* If the next token is `::', that is invalid -- but sometimes
18233      people do try to write:
18234
18235        struct ::S {};
18236
18237      Handle this gracefully by accepting the extra qualifier, and then
18238      issuing an error about it later if this really is a
18239      class-head.  If it turns out just to be an elaborated type
18240      specifier, remain silent.  */
18241   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
18242     qualified_p = true;
18243
18244   push_deferring_access_checks (dk_no_check);
18245
18246   /* Determine the name of the class.  Begin by looking for an
18247      optional nested-name-specifier.  */
18248   nested_name_specifier_token_start = cp_lexer_peek_token (parser->lexer);
18249   nested_name_specifier
18250     = cp_parser_nested_name_specifier_opt (parser,
18251                                            /*typename_keyword_p=*/false,
18252                                            /*check_dependency_p=*/false,
18253                                            /*type_p=*/false,
18254                                            /*is_declaration=*/false);
18255   /* If there was a nested-name-specifier, then there *must* be an
18256      identifier.  */
18257   if (nested_name_specifier)
18258     {
18259       type_start_token = cp_lexer_peek_token (parser->lexer);
18260       /* Although the grammar says `identifier', it really means
18261          `class-name' or `template-name'.  You are only allowed to
18262          define a class that has already been declared with this
18263          syntax.
18264
18265          The proposed resolution for Core Issue 180 says that wherever
18266          you see `class T::X' you should treat `X' as a type-name.
18267
18268          It is OK to define an inaccessible class; for example:
18269
18270            class A { class B; };
18271            class A::B {};
18272
18273          We do not know if we will see a class-name, or a
18274          template-name.  We look for a class-name first, in case the
18275          class-name is a template-id; if we looked for the
18276          template-name first we would stop after the template-name.  */
18277       cp_parser_parse_tentatively (parser);
18278       type = cp_parser_class_name (parser,
18279                                    /*typename_keyword_p=*/false,
18280                                    /*template_keyword_p=*/false,
18281                                    class_type,
18282                                    /*check_dependency_p=*/false,
18283                                    /*class_head_p=*/true,
18284                                    /*is_declaration=*/false);
18285       /* If that didn't work, ignore the nested-name-specifier.  */
18286       if (!cp_parser_parse_definitely (parser))
18287         {
18288           invalid_nested_name_p = true;
18289           type_start_token = cp_lexer_peek_token (parser->lexer);
18290           id = cp_parser_identifier (parser);
18291           if (id == error_mark_node)
18292             id = NULL_TREE;
18293         }
18294       /* If we could not find a corresponding TYPE, treat this
18295          declaration like an unqualified declaration.  */
18296       if (type == error_mark_node)
18297         nested_name_specifier = NULL_TREE;
18298       /* Otherwise, count the number of templates used in TYPE and its
18299          containing scopes.  */
18300       else
18301         {
18302           tree scope;
18303
18304           for (scope = TREE_TYPE (type);
18305                scope && TREE_CODE (scope) != NAMESPACE_DECL;
18306                scope = (TYPE_P (scope)
18307                         ? TYPE_CONTEXT (scope)
18308                         : DECL_CONTEXT (scope)))
18309             if (TYPE_P (scope)
18310                 && CLASS_TYPE_P (scope)
18311                 && CLASSTYPE_TEMPLATE_INFO (scope)
18312                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
18313                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
18314               ++num_templates;
18315         }
18316     }
18317   /* Otherwise, the identifier is optional.  */
18318   else
18319     {
18320       /* We don't know whether what comes next is a template-id,
18321          an identifier, or nothing at all.  */
18322       cp_parser_parse_tentatively (parser);
18323       /* Check for a template-id.  */
18324       type_start_token = cp_lexer_peek_token (parser->lexer);
18325       id = cp_parser_template_id (parser,
18326                                   /*template_keyword_p=*/false,
18327                                   /*check_dependency_p=*/true,
18328                                   /*is_declaration=*/true);
18329       /* If that didn't work, it could still be an identifier.  */
18330       if (!cp_parser_parse_definitely (parser))
18331         {
18332           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18333             {
18334               type_start_token = cp_lexer_peek_token (parser->lexer);
18335               id = cp_parser_identifier (parser);
18336             }
18337           else
18338             id = NULL_TREE;
18339         }
18340       else
18341         {
18342           template_id_p = true;
18343           ++num_templates;
18344         }
18345     }
18346
18347   pop_deferring_access_checks ();
18348
18349   if (id)
18350     {
18351       cp_parser_check_for_invalid_template_id (parser, id,
18352                                                type_start_token->location);
18353     }
18354   virt_specifiers = cp_parser_virt_specifier_seq_opt (parser);
18355
18356   /* If it's not a `:' or a `{' then we can't really be looking at a
18357      class-head, since a class-head only appears as part of a
18358      class-specifier.  We have to detect this situation before calling
18359      xref_tag, since that has irreversible side-effects.  */
18360   if (!cp_parser_next_token_starts_class_definition_p (parser))
18361     {
18362       cp_parser_error (parser, "expected %<{%> or %<:%>");
18363       type = error_mark_node;
18364       goto out;
18365     }
18366
18367   /* At this point, we're going ahead with the class-specifier, even
18368      if some other problem occurs.  */
18369   cp_parser_commit_to_tentative_parse (parser);
18370   if (virt_specifiers & VIRT_SPEC_OVERRIDE)
18371     {
18372       cp_parser_error (parser,
18373                        "cannot specify %<override%> for a class");
18374       type = error_mark_node;
18375       goto out;
18376     }
18377   /* Issue the error about the overly-qualified name now.  */
18378   if (qualified_p)
18379     {
18380       cp_parser_error (parser,
18381                        "global qualification of class name is invalid");
18382       type = error_mark_node;
18383       goto out;
18384     }
18385   else if (invalid_nested_name_p)
18386     {
18387       cp_parser_error (parser,
18388                        "qualified name does not name a class");
18389       type = error_mark_node;
18390       goto out;
18391     }
18392   else if (nested_name_specifier)
18393     {
18394       tree scope;
18395
18396       /* Reject typedef-names in class heads.  */
18397       if (!DECL_IMPLICIT_TYPEDEF_P (type))
18398         {
18399           error_at (type_start_token->location,
18400                     "invalid class name in declaration of %qD",
18401                     type);
18402           type = NULL_TREE;
18403           goto done;
18404         }
18405
18406       /* Figure out in what scope the declaration is being placed.  */
18407       scope = current_scope ();
18408       /* If that scope does not contain the scope in which the
18409          class was originally declared, the program is invalid.  */
18410       if (scope && !is_ancestor (scope, nested_name_specifier))
18411         {
18412           if (at_namespace_scope_p ())
18413             error_at (type_start_token->location,
18414                       "declaration of %qD in namespace %qD which does not "
18415                       "enclose %qD",
18416                       type, scope, nested_name_specifier);
18417           else
18418             error_at (type_start_token->location,
18419                       "declaration of %qD in %qD which does not enclose %qD",
18420                       type, scope, nested_name_specifier);
18421           type = NULL_TREE;
18422           goto done;
18423         }
18424       /* [dcl.meaning]
18425
18426          A declarator-id shall not be qualified except for the
18427          definition of a ... nested class outside of its class
18428          ... [or] the definition or explicit instantiation of a
18429          class member of a namespace outside of its namespace.  */
18430       if (scope == nested_name_specifier)
18431         {
18432           permerror (nested_name_specifier_token_start->location,
18433                      "extra qualification not allowed");
18434           nested_name_specifier = NULL_TREE;
18435           num_templates = 0;
18436         }
18437     }
18438   /* An explicit-specialization must be preceded by "template <>".  If
18439      it is not, try to recover gracefully.  */
18440   if (at_namespace_scope_p ()
18441       && parser->num_template_parameter_lists == 0
18442       && template_id_p)
18443     {
18444       error_at (type_start_token->location,
18445                 "an explicit specialization must be preceded by %<template <>%>");
18446       invalid_explicit_specialization_p = true;
18447       /* Take the same action that would have been taken by
18448          cp_parser_explicit_specialization.  */
18449       ++parser->num_template_parameter_lists;
18450       begin_specialization ();
18451     }
18452   /* There must be no "return" statements between this point and the
18453      end of this function; set "type "to the correct return value and
18454      use "goto done;" to return.  */
18455   /* Make sure that the right number of template parameters were
18456      present.  */
18457   if (!cp_parser_check_template_parameters (parser, num_templates,
18458                                             type_start_token->location,
18459                                             /*declarator=*/NULL))
18460     {
18461       /* If something went wrong, there is no point in even trying to
18462          process the class-definition.  */
18463       type = NULL_TREE;
18464       goto done;
18465     }
18466
18467   /* Look up the type.  */
18468   if (template_id_p)
18469     {
18470       if (TREE_CODE (id) == TEMPLATE_ID_EXPR
18471           && (DECL_FUNCTION_TEMPLATE_P (TREE_OPERAND (id, 0))
18472               || TREE_CODE (TREE_OPERAND (id, 0)) == OVERLOAD))
18473         {
18474           error_at (type_start_token->location,
18475                     "function template %qD redeclared as a class template", id);
18476           type = error_mark_node;
18477         }
18478       else
18479         {
18480           type = TREE_TYPE (id);
18481           type = maybe_process_partial_specialization (type);
18482         }
18483       if (nested_name_specifier)
18484         pushed_scope = push_scope (nested_name_specifier);
18485     }
18486   else if (nested_name_specifier)
18487     {
18488       tree class_type;
18489
18490       /* Given:
18491
18492             template <typename T> struct S { struct T };
18493             template <typename T> struct S<T>::T { };
18494
18495          we will get a TYPENAME_TYPE when processing the definition of
18496          `S::T'.  We need to resolve it to the actual type before we
18497          try to define it.  */
18498       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
18499         {
18500           class_type = resolve_typename_type (TREE_TYPE (type),
18501                                               /*only_current_p=*/false);
18502           if (TREE_CODE (class_type) != TYPENAME_TYPE)
18503             type = TYPE_NAME (class_type);
18504           else
18505             {
18506               cp_parser_error (parser, "could not resolve typename type");
18507               type = error_mark_node;
18508             }
18509         }
18510
18511       if (maybe_process_partial_specialization (TREE_TYPE (type))
18512           == error_mark_node)
18513         {
18514           type = NULL_TREE;
18515           goto done;
18516         }
18517
18518       class_type = current_class_type;
18519       /* Enter the scope indicated by the nested-name-specifier.  */
18520       pushed_scope = push_scope (nested_name_specifier);
18521       /* Get the canonical version of this type.  */
18522       type = TYPE_MAIN_DECL (TREE_TYPE (type));
18523       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
18524           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
18525         {
18526           type = push_template_decl (type);
18527           if (type == error_mark_node)
18528             {
18529               type = NULL_TREE;
18530               goto done;
18531             }
18532         }
18533
18534       type = TREE_TYPE (type);
18535       *nested_name_specifier_p = true;
18536     }
18537   else      /* The name is not a nested name.  */
18538     {
18539       /* If the class was unnamed, create a dummy name.  */
18540       if (!id)
18541         id = make_anon_name ();
18542       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
18543                        parser->num_template_parameter_lists);
18544     }
18545
18546   /* Indicate whether this class was declared as a `class' or as a
18547      `struct'.  */
18548   if (TREE_CODE (type) == RECORD_TYPE)
18549     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
18550   cp_parser_check_class_key (class_key, type);
18551
18552   /* If this type was already complete, and we see another definition,
18553      that's an error.  */
18554   if (type != error_mark_node && COMPLETE_TYPE_P (type))
18555     {
18556       error_at (type_start_token->location, "redefinition of %q#T",
18557                 type);
18558       error_at (type_start_token->location, "previous definition of %q+#T",
18559                 type);
18560       type = NULL_TREE;
18561       goto done;
18562     }
18563   else if (type == error_mark_node)
18564     type = NULL_TREE;
18565
18566   /* We will have entered the scope containing the class; the names of
18567      base classes should be looked up in that context.  For example:
18568
18569        struct A { struct B {}; struct C; };
18570        struct A::C : B {};
18571
18572      is valid.  */
18573
18574   /* Get the list of base-classes, if there is one.  */
18575   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
18576     *bases = cp_parser_base_clause (parser);
18577
18578  done:
18579   /* Leave the scope given by the nested-name-specifier.  We will
18580      enter the class scope itself while processing the members.  */
18581   if (pushed_scope)
18582     pop_scope (pushed_scope);
18583
18584   if (invalid_explicit_specialization_p)
18585     {
18586       end_specialization ();
18587       --parser->num_template_parameter_lists;
18588     }
18589
18590   if (type)
18591     DECL_SOURCE_LOCATION (TYPE_NAME (type)) = type_start_token->location;
18592   *attributes_p = attributes;
18593   if (type && (virt_specifiers & VIRT_SPEC_FINAL))
18594     CLASSTYPE_FINAL (type) = 1;
18595  out:
18596   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
18597   return type;
18598 }
18599
18600 /* Parse a class-key.
18601
18602    class-key:
18603      class
18604      struct
18605      union
18606
18607    Returns the kind of class-key specified, or none_type to indicate
18608    error.  */
18609
18610 static enum tag_types
18611 cp_parser_class_key (cp_parser* parser)
18612 {
18613   cp_token *token;
18614   enum tag_types tag_type;
18615
18616   /* Look for the class-key.  */
18617   token = cp_parser_require (parser, CPP_KEYWORD, RT_CLASS_KEY);
18618   if (!token)
18619     return none_type;
18620
18621   /* Check to see if the TOKEN is a class-key.  */
18622   tag_type = cp_parser_token_is_class_key (token);
18623   if (!tag_type)
18624     cp_parser_error (parser, "expected class-key");
18625   return tag_type;
18626 }
18627
18628 /* Parse an (optional) member-specification.
18629
18630    member-specification:
18631      member-declaration member-specification [opt]
18632      access-specifier : member-specification [opt]  */
18633
18634 static void
18635 cp_parser_member_specification_opt (cp_parser* parser)
18636 {
18637   while (true)
18638     {
18639       cp_token *token;
18640       enum rid keyword;
18641
18642       /* Peek at the next token.  */
18643       token = cp_lexer_peek_token (parser->lexer);
18644       /* If it's a `}', or EOF then we've seen all the members.  */
18645       if (token->type == CPP_CLOSE_BRACE
18646           || token->type == CPP_EOF
18647           || token->type == CPP_PRAGMA_EOL)
18648         break;
18649
18650       /* See if this token is a keyword.  */
18651       keyword = token->keyword;
18652       switch (keyword)
18653         {
18654         case RID_PUBLIC:
18655         case RID_PROTECTED:
18656         case RID_PRIVATE:
18657           /* Consume the access-specifier.  */
18658           cp_lexer_consume_token (parser->lexer);
18659           /* Remember which access-specifier is active.  */
18660           current_access_specifier = token->u.value;
18661           /* Look for the `:'.  */
18662           cp_parser_require (parser, CPP_COLON, RT_COLON);
18663           break;
18664
18665         default:
18666           /* Accept #pragmas at class scope.  */
18667           if (token->type == CPP_PRAGMA)
18668             {
18669               cp_parser_pragma (parser, pragma_external);
18670               break;
18671             }
18672
18673           /* Otherwise, the next construction must be a
18674              member-declaration.  */
18675           cp_parser_member_declaration (parser);
18676         }
18677     }
18678 }
18679
18680 /* Parse a member-declaration.
18681
18682    member-declaration:
18683      decl-specifier-seq [opt] member-declarator-list [opt] ;
18684      function-definition ; [opt]
18685      :: [opt] nested-name-specifier template [opt] unqualified-id ;
18686      using-declaration
18687      template-declaration
18688      alias-declaration
18689
18690    member-declarator-list:
18691      member-declarator
18692      member-declarator-list , member-declarator
18693
18694    member-declarator:
18695      declarator pure-specifier [opt]
18696      declarator constant-initializer [opt]
18697      identifier [opt] : constant-expression
18698
18699    GNU Extensions:
18700
18701    member-declaration:
18702      __extension__ member-declaration
18703
18704    member-declarator:
18705      declarator attributes [opt] pure-specifier [opt]
18706      declarator attributes [opt] constant-initializer [opt]
18707      identifier [opt] attributes [opt] : constant-expression  
18708
18709    C++0x Extensions:
18710
18711    member-declaration:
18712      static_assert-declaration  */
18713
18714 static void
18715 cp_parser_member_declaration (cp_parser* parser)
18716 {
18717   cp_decl_specifier_seq decl_specifiers;
18718   tree prefix_attributes;
18719   tree decl;
18720   int declares_class_or_enum;
18721   bool friend_p;
18722   cp_token *token = NULL;
18723   cp_token *decl_spec_token_start = NULL;
18724   cp_token *initializer_token_start = NULL;
18725   int saved_pedantic;
18726   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
18727
18728   /* Check for the `__extension__' keyword.  */
18729   if (cp_parser_extension_opt (parser, &saved_pedantic))
18730     {
18731       /* Recurse.  */
18732       cp_parser_member_declaration (parser);
18733       /* Restore the old value of the PEDANTIC flag.  */
18734       pedantic = saved_pedantic;
18735
18736       return;
18737     }
18738
18739   /* Check for a template-declaration.  */
18740   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
18741     {
18742       /* An explicit specialization here is an error condition, and we
18743          expect the specialization handler to detect and report this.  */
18744       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
18745           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
18746         cp_parser_explicit_specialization (parser);
18747       else
18748         cp_parser_template_declaration (parser, /*member_p=*/true);
18749
18750       return;
18751     }
18752
18753   /* Check for a using-declaration.  */
18754   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
18755     {
18756       if (cxx_dialect < cxx0x)
18757         {
18758           /* Parse the using-declaration.  */
18759           cp_parser_using_declaration (parser,
18760                                        /*access_declaration_p=*/false);
18761           return;
18762         }
18763       else
18764         {
18765           tree decl;
18766           cp_parser_parse_tentatively (parser);
18767           decl = cp_parser_alias_declaration (parser);
18768           if (cp_parser_parse_definitely (parser))
18769             finish_member_declaration (decl);
18770           else
18771             cp_parser_using_declaration (parser,
18772                                          /*access_declaration_p=*/false);
18773           return;
18774         }
18775     }
18776
18777   /* Check for @defs.  */
18778   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
18779     {
18780       tree ivar, member;
18781       tree ivar_chains = cp_parser_objc_defs_expression (parser);
18782       ivar = ivar_chains;
18783       while (ivar)
18784         {
18785           member = ivar;
18786           ivar = TREE_CHAIN (member);
18787           TREE_CHAIN (member) = NULL_TREE;
18788           finish_member_declaration (member);
18789         }
18790       return;
18791     }
18792
18793   /* If the next token is `static_assert' we have a static assertion.  */
18794   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC_ASSERT))
18795     {
18796       cp_parser_static_assert (parser, /*member_p=*/true);
18797       return;
18798     }
18799
18800   parser->colon_corrects_to_scope_p = false;
18801
18802   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
18803     goto out;
18804
18805   /* Parse the decl-specifier-seq.  */
18806   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
18807   cp_parser_decl_specifier_seq (parser,
18808                                 CP_PARSER_FLAGS_OPTIONAL,
18809                                 &decl_specifiers,
18810                                 &declares_class_or_enum);
18811   prefix_attributes = decl_specifiers.attributes;
18812   decl_specifiers.attributes = NULL_TREE;
18813   /* Check for an invalid type-name.  */
18814   if (!decl_specifiers.any_type_specifiers_p
18815       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
18816     goto out;
18817   /* If there is no declarator, then the decl-specifier-seq should
18818      specify a type.  */
18819   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
18820     {
18821       /* If there was no decl-specifier-seq, and the next token is a
18822          `;', then we have something like:
18823
18824            struct S { ; };
18825
18826          [class.mem]
18827
18828          Each member-declaration shall declare at least one member
18829          name of the class.  */
18830       if (!decl_specifiers.any_specifiers_p)
18831         {
18832           cp_token *token = cp_lexer_peek_token (parser->lexer);
18833           if (!in_system_header_at (token->location))
18834             pedwarn (token->location, OPT_pedantic, "extra %<;%>");
18835         }
18836       else
18837         {
18838           tree type;
18839
18840           /* See if this declaration is a friend.  */
18841           friend_p = cp_parser_friend_p (&decl_specifiers);
18842           /* If there were decl-specifiers, check to see if there was
18843              a class-declaration.  */
18844           type = check_tag_decl (&decl_specifiers);
18845           /* Nested classes have already been added to the class, but
18846              a `friend' needs to be explicitly registered.  */
18847           if (friend_p)
18848             {
18849               /* If the `friend' keyword was present, the friend must
18850                  be introduced with a class-key.  */
18851                if (!declares_class_or_enum && cxx_dialect < cxx0x)
18852                  pedwarn (decl_spec_token_start->location, OPT_pedantic,
18853                           "in C++03 a class-key must be used "
18854                           "when declaring a friend");
18855                /* In this case:
18856
18857                     template <typename T> struct A {
18858                       friend struct A<T>::B;
18859                     };
18860
18861                   A<T>::B will be represented by a TYPENAME_TYPE, and
18862                   therefore not recognized by check_tag_decl.  */
18863                if (!type)
18864                  {
18865                    type = decl_specifiers.type;
18866                    if (type && TREE_CODE (type) == TYPE_DECL)
18867                      type = TREE_TYPE (type);
18868                  }
18869                if (!type || !TYPE_P (type))
18870                  error_at (decl_spec_token_start->location,
18871                            "friend declaration does not name a class or "
18872                            "function");
18873                else
18874                  make_friend_class (current_class_type, type,
18875                                     /*complain=*/true);
18876             }
18877           /* If there is no TYPE, an error message will already have
18878              been issued.  */
18879           else if (!type || type == error_mark_node)
18880             ;
18881           /* An anonymous aggregate has to be handled specially; such
18882              a declaration really declares a data member (with a
18883              particular type), as opposed to a nested class.  */
18884           else if (ANON_AGGR_TYPE_P (type))
18885             {
18886               /* Remove constructors and such from TYPE, now that we
18887                  know it is an anonymous aggregate.  */
18888               fixup_anonymous_aggr (type);
18889               /* And make the corresponding data member.  */
18890               decl = build_decl (decl_spec_token_start->location,
18891                                  FIELD_DECL, NULL_TREE, type);
18892               /* Add it to the class.  */
18893               finish_member_declaration (decl);
18894             }
18895           else
18896             cp_parser_check_access_in_redeclaration
18897                                               (TYPE_NAME (type),
18898                                                decl_spec_token_start->location);
18899         }
18900     }
18901   else
18902     {
18903       bool assume_semicolon = false;
18904
18905       /* See if these declarations will be friends.  */
18906       friend_p = cp_parser_friend_p (&decl_specifiers);
18907
18908       /* Keep going until we hit the `;' at the end of the
18909          declaration.  */
18910       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18911         {
18912           tree attributes = NULL_TREE;
18913           tree first_attribute;
18914
18915           /* Peek at the next token.  */
18916           token = cp_lexer_peek_token (parser->lexer);
18917
18918           /* Check for a bitfield declaration.  */
18919           if (token->type == CPP_COLON
18920               || (token->type == CPP_NAME
18921                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
18922                   == CPP_COLON))
18923             {
18924               tree identifier;
18925               tree width;
18926
18927               /* Get the name of the bitfield.  Note that we cannot just
18928                  check TOKEN here because it may have been invalidated by
18929                  the call to cp_lexer_peek_nth_token above.  */
18930               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
18931                 identifier = cp_parser_identifier (parser);
18932               else
18933                 identifier = NULL_TREE;
18934
18935               /* Consume the `:' token.  */
18936               cp_lexer_consume_token (parser->lexer);
18937               /* Get the width of the bitfield.  */
18938               width
18939                 = cp_parser_constant_expression (parser,
18940                                                  /*allow_non_constant=*/false,
18941                                                  NULL);
18942
18943               /* Look for attributes that apply to the bitfield.  */
18944               attributes = cp_parser_attributes_opt (parser);
18945               /* Remember which attributes are prefix attributes and
18946                  which are not.  */
18947               first_attribute = attributes;
18948               /* Combine the attributes.  */
18949               attributes = chainon (prefix_attributes, attributes);
18950
18951               /* Create the bitfield declaration.  */
18952               decl = grokbitfield (identifier
18953                                    ? make_id_declarator (NULL_TREE,
18954                                                          identifier,
18955                                                          sfk_none)
18956                                    : NULL,
18957                                    &decl_specifiers,
18958                                    width,
18959                                    attributes);
18960             }
18961           else
18962             {
18963               cp_declarator *declarator;
18964               tree initializer;
18965               tree asm_specification;
18966               int ctor_dtor_or_conv_p;
18967
18968               /* Parse the declarator.  */
18969               declarator
18970                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
18971                                         &ctor_dtor_or_conv_p,
18972                                         /*parenthesized_p=*/NULL,
18973                                         /*member_p=*/true);
18974
18975               /* If something went wrong parsing the declarator, make sure
18976                  that we at least consume some tokens.  */
18977               if (declarator == cp_error_declarator)
18978                 {
18979                   /* Skip to the end of the statement.  */
18980                   cp_parser_skip_to_end_of_statement (parser);
18981                   /* If the next token is not a semicolon, that is
18982                      probably because we just skipped over the body of
18983                      a function.  So, we consume a semicolon if
18984                      present, but do not issue an error message if it
18985                      is not present.  */
18986                   if (cp_lexer_next_token_is (parser->lexer,
18987                                               CPP_SEMICOLON))
18988                     cp_lexer_consume_token (parser->lexer);
18989                   goto out;
18990                 }
18991
18992               if (declares_class_or_enum & 2)
18993                 cp_parser_check_for_definition_in_return_type
18994                                             (declarator, decl_specifiers.type,
18995                                              decl_specifiers.type_location);
18996
18997               /* Look for an asm-specification.  */
18998               asm_specification = cp_parser_asm_specification_opt (parser);
18999               /* Look for attributes that apply to the declaration.  */
19000               attributes = cp_parser_attributes_opt (parser);
19001               /* Remember which attributes are prefix attributes and
19002                  which are not.  */
19003               first_attribute = attributes;
19004               /* Combine the attributes.  */
19005               attributes = chainon (prefix_attributes, attributes);
19006
19007               /* If it's an `=', then we have a constant-initializer or a
19008                  pure-specifier.  It is not correct to parse the
19009                  initializer before registering the member declaration
19010                  since the member declaration should be in scope while
19011                  its initializer is processed.  However, the rest of the
19012                  front end does not yet provide an interface that allows
19013                  us to handle this correctly.  */
19014               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
19015                 {
19016                   /* In [class.mem]:
19017
19018                      A pure-specifier shall be used only in the declaration of
19019                      a virtual function.
19020
19021                      A member-declarator can contain a constant-initializer
19022                      only if it declares a static member of integral or
19023                      enumeration type.
19024
19025                      Therefore, if the DECLARATOR is for a function, we look
19026                      for a pure-specifier; otherwise, we look for a
19027                      constant-initializer.  When we call `grokfield', it will
19028                      perform more stringent semantics checks.  */
19029                   initializer_token_start = cp_lexer_peek_token (parser->lexer);
19030                   if (function_declarator_p (declarator)
19031                       || (decl_specifiers.type
19032                           && TREE_CODE (decl_specifiers.type) == TYPE_DECL
19033                           && (TREE_CODE (TREE_TYPE (decl_specifiers.type))
19034                               == FUNCTION_TYPE)))
19035                     initializer = cp_parser_pure_specifier (parser);
19036                   else if (decl_specifiers.storage_class != sc_static)
19037                     initializer = cp_parser_save_nsdmi (parser);
19038                   else if (cxx_dialect >= cxx0x)
19039                     {
19040                       bool nonconst;
19041                       /* Don't require a constant rvalue in C++11, since we
19042                          might want a reference constant.  We'll enforce
19043                          constancy later.  */
19044                       cp_lexer_consume_token (parser->lexer);
19045                       /* Parse the initializer.  */
19046                       initializer = cp_parser_initializer_clause (parser,
19047                                                                   &nonconst);
19048                     }
19049                   else
19050                     /* Parse the initializer.  */
19051                     initializer = cp_parser_constant_initializer (parser);
19052                 }
19053               else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)
19054                        && !function_declarator_p (declarator))
19055                 {
19056                   bool x;
19057                   if (decl_specifiers.storage_class != sc_static)
19058                     initializer = cp_parser_save_nsdmi (parser);
19059                   else
19060                     initializer = cp_parser_initializer (parser, &x, &x);
19061                 }
19062               /* Otherwise, there is no initializer.  */
19063               else
19064                 initializer = NULL_TREE;
19065
19066               /* See if we are probably looking at a function
19067                  definition.  We are certainly not looking at a
19068                  member-declarator.  Calling `grokfield' has
19069                  side-effects, so we must not do it unless we are sure
19070                  that we are looking at a member-declarator.  */
19071               if (cp_parser_token_starts_function_definition_p
19072                   (cp_lexer_peek_token (parser->lexer)))
19073                 {
19074                   /* The grammar does not allow a pure-specifier to be
19075                      used when a member function is defined.  (It is
19076                      possible that this fact is an oversight in the
19077                      standard, since a pure function may be defined
19078                      outside of the class-specifier.  */
19079                   if (initializer)
19080                     error_at (initializer_token_start->location,
19081                               "pure-specifier on function-definition");
19082                   decl = cp_parser_save_member_function_body (parser,
19083                                                               &decl_specifiers,
19084                                                               declarator,
19085                                                               attributes);
19086                   /* If the member was not a friend, declare it here.  */
19087                   if (!friend_p)
19088                     finish_member_declaration (decl);
19089                   /* Peek at the next token.  */
19090                   token = cp_lexer_peek_token (parser->lexer);
19091                   /* If the next token is a semicolon, consume it.  */
19092                   if (token->type == CPP_SEMICOLON)
19093                     cp_lexer_consume_token (parser->lexer);
19094                   goto out;
19095                 }
19096               else
19097                 if (declarator->kind == cdk_function)
19098                   declarator->id_loc = token->location;
19099                 /* Create the declaration.  */
19100                 decl = grokfield (declarator, &decl_specifiers,
19101                                   initializer, /*init_const_expr_p=*/true,
19102                                   asm_specification,
19103                                   attributes);
19104             }
19105
19106           /* Reset PREFIX_ATTRIBUTES.  */
19107           while (attributes && TREE_CHAIN (attributes) != first_attribute)
19108             attributes = TREE_CHAIN (attributes);
19109           if (attributes)
19110             TREE_CHAIN (attributes) = NULL_TREE;
19111
19112           /* If there is any qualification still in effect, clear it
19113              now; we will be starting fresh with the next declarator.  */
19114           parser->scope = NULL_TREE;
19115           parser->qualifying_scope = NULL_TREE;
19116           parser->object_scope = NULL_TREE;
19117           /* If it's a `,', then there are more declarators.  */
19118           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
19119             cp_lexer_consume_token (parser->lexer);
19120           /* If the next token isn't a `;', then we have a parse error.  */
19121           else if (cp_lexer_next_token_is_not (parser->lexer,
19122                                                CPP_SEMICOLON))
19123             {
19124               /* The next token might be a ways away from where the
19125                  actual semicolon is missing.  Find the previous token
19126                  and use that for our error position.  */
19127               cp_token *token = cp_lexer_previous_token (parser->lexer);
19128               error_at (token->location,
19129                         "expected %<;%> at end of member declaration");
19130
19131               /* Assume that the user meant to provide a semicolon.  If
19132                  we were to cp_parser_skip_to_end_of_statement, we might
19133                  skip to a semicolon inside a member function definition
19134                  and issue nonsensical error messages.  */
19135               assume_semicolon = true;
19136             }
19137
19138           if (decl)
19139             {
19140               /* Add DECL to the list of members.  */
19141               if (!friend_p)
19142                 finish_member_declaration (decl);
19143
19144               if (TREE_CODE (decl) == FUNCTION_DECL)
19145                 cp_parser_save_default_args (parser, decl);
19146               else if (TREE_CODE (decl) == FIELD_DECL
19147                        && !DECL_C_BIT_FIELD (decl)
19148                        && DECL_INITIAL (decl))
19149                 /* Add DECL to the queue of NSDMI to be parsed later.  */
19150                 VEC_safe_push (tree, gc, unparsed_nsdmis, decl);
19151             }
19152
19153           if (assume_semicolon)
19154             goto out;
19155         }
19156     }
19157
19158   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
19159  out:
19160   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
19161 }
19162
19163 /* Parse a pure-specifier.
19164
19165    pure-specifier:
19166      = 0
19167
19168    Returns INTEGER_ZERO_NODE if a pure specifier is found.
19169    Otherwise, ERROR_MARK_NODE is returned.  */
19170
19171 static tree
19172 cp_parser_pure_specifier (cp_parser* parser)
19173 {
19174   cp_token *token;
19175
19176   /* Look for the `=' token.  */
19177   if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
19178     return error_mark_node;
19179   /* Look for the `0' token.  */
19180   token = cp_lexer_peek_token (parser->lexer);
19181
19182   if (token->type == CPP_EOF
19183       || token->type == CPP_PRAGMA_EOL)
19184     return error_mark_node;
19185
19186   cp_lexer_consume_token (parser->lexer);
19187
19188   /* Accept = default or = delete in c++0x mode.  */
19189   if (token->keyword == RID_DEFAULT
19190       || token->keyword == RID_DELETE)
19191     {
19192       maybe_warn_cpp0x (CPP0X_DEFAULTED_DELETED);
19193       return token->u.value;
19194     }
19195
19196   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
19197   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
19198     {
19199       cp_parser_error (parser,
19200                        "invalid pure specifier (only %<= 0%> is allowed)");
19201       cp_parser_skip_to_end_of_statement (parser);
19202       return error_mark_node;
19203     }
19204   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
19205     {
19206       error_at (token->location, "templates may not be %<virtual%>");
19207       return error_mark_node;
19208     }
19209
19210   return integer_zero_node;
19211 }
19212
19213 /* Parse a constant-initializer.
19214
19215    constant-initializer:
19216      = constant-expression
19217
19218    Returns a representation of the constant-expression.  */
19219
19220 static tree
19221 cp_parser_constant_initializer (cp_parser* parser)
19222 {
19223   /* Look for the `=' token.  */
19224   if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
19225     return error_mark_node;
19226
19227   /* It is invalid to write:
19228
19229        struct S { static const int i = { 7 }; };
19230
19231      */
19232   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
19233     {
19234       cp_parser_error (parser,
19235                        "a brace-enclosed initializer is not allowed here");
19236       /* Consume the opening brace.  */
19237       cp_lexer_consume_token (parser->lexer);
19238       /* Skip the initializer.  */
19239       cp_parser_skip_to_closing_brace (parser);
19240       /* Look for the trailing `}'.  */
19241       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
19242
19243       return error_mark_node;
19244     }
19245
19246   return cp_parser_constant_expression (parser,
19247                                         /*allow_non_constant=*/false,
19248                                         NULL);
19249 }
19250
19251 /* Derived classes [gram.class.derived] */
19252
19253 /* Parse a base-clause.
19254
19255    base-clause:
19256      : base-specifier-list
19257
19258    base-specifier-list:
19259      base-specifier ... [opt]
19260      base-specifier-list , base-specifier ... [opt]
19261
19262    Returns a TREE_LIST representing the base-classes, in the order in
19263    which they were declared.  The representation of each node is as
19264    described by cp_parser_base_specifier.
19265
19266    In the case that no bases are specified, this function will return
19267    NULL_TREE, not ERROR_MARK_NODE.  */
19268
19269 static tree
19270 cp_parser_base_clause (cp_parser* parser)
19271 {
19272   tree bases = NULL_TREE;
19273
19274   /* Look for the `:' that begins the list.  */
19275   cp_parser_require (parser, CPP_COLON, RT_COLON);
19276
19277   /* Scan the base-specifier-list.  */
19278   while (true)
19279     {
19280       cp_token *token;
19281       tree base;
19282       bool pack_expansion_p = false;
19283
19284       /* Look for the base-specifier.  */
19285       base = cp_parser_base_specifier (parser);
19286       /* Look for the (optional) ellipsis. */
19287       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
19288         {
19289           /* Consume the `...'. */
19290           cp_lexer_consume_token (parser->lexer);
19291
19292           pack_expansion_p = true;
19293         }
19294
19295       /* Add BASE to the front of the list.  */
19296       if (base && base != error_mark_node)
19297         {
19298           if (pack_expansion_p)
19299             /* Make this a pack expansion type. */
19300             TREE_VALUE (base) = make_pack_expansion (TREE_VALUE (base));
19301
19302           if (!check_for_bare_parameter_packs (TREE_VALUE (base)))
19303             {
19304               TREE_CHAIN (base) = bases;
19305               bases = base;
19306             }
19307         }
19308       /* Peek at the next token.  */
19309       token = cp_lexer_peek_token (parser->lexer);
19310       /* If it's not a comma, then the list is complete.  */
19311       if (token->type != CPP_COMMA)
19312         break;
19313       /* Consume the `,'.  */
19314       cp_lexer_consume_token (parser->lexer);
19315     }
19316
19317   /* PARSER->SCOPE may still be non-NULL at this point, if the last
19318      base class had a qualified name.  However, the next name that
19319      appears is certainly not qualified.  */
19320   parser->scope = NULL_TREE;
19321   parser->qualifying_scope = NULL_TREE;
19322   parser->object_scope = NULL_TREE;
19323
19324   return nreverse (bases);
19325 }
19326
19327 /* Parse a base-specifier.
19328
19329    base-specifier:
19330      :: [opt] nested-name-specifier [opt] class-name
19331      virtual access-specifier [opt] :: [opt] nested-name-specifier
19332        [opt] class-name
19333      access-specifier virtual [opt] :: [opt] nested-name-specifier
19334        [opt] class-name
19335
19336    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
19337    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
19338    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
19339    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
19340
19341 static tree
19342 cp_parser_base_specifier (cp_parser* parser)
19343 {
19344   cp_token *token;
19345   bool done = false;
19346   bool virtual_p = false;
19347   bool duplicate_virtual_error_issued_p = false;
19348   bool duplicate_access_error_issued_p = false;
19349   bool class_scope_p, template_p;
19350   tree access = access_default_node;
19351   tree type;
19352
19353   /* Process the optional `virtual' and `access-specifier'.  */
19354   while (!done)
19355     {
19356       /* Peek at the next token.  */
19357       token = cp_lexer_peek_token (parser->lexer);
19358       /* Process `virtual'.  */
19359       switch (token->keyword)
19360         {
19361         case RID_VIRTUAL:
19362           /* If `virtual' appears more than once, issue an error.  */
19363           if (virtual_p && !duplicate_virtual_error_issued_p)
19364             {
19365               cp_parser_error (parser,
19366                                "%<virtual%> specified more than once in base-specified");
19367               duplicate_virtual_error_issued_p = true;
19368             }
19369
19370           virtual_p = true;
19371
19372           /* Consume the `virtual' token.  */
19373           cp_lexer_consume_token (parser->lexer);
19374
19375           break;
19376
19377         case RID_PUBLIC:
19378         case RID_PROTECTED:
19379         case RID_PRIVATE:
19380           /* If more than one access specifier appears, issue an
19381              error.  */
19382           if (access != access_default_node
19383               && !duplicate_access_error_issued_p)
19384             {
19385               cp_parser_error (parser,
19386                                "more than one access specifier in base-specified");
19387               duplicate_access_error_issued_p = true;
19388             }
19389
19390           access = ridpointers[(int) token->keyword];
19391
19392           /* Consume the access-specifier.  */
19393           cp_lexer_consume_token (parser->lexer);
19394
19395           break;
19396
19397         default:
19398           done = true;
19399           break;
19400         }
19401     }
19402   /* It is not uncommon to see programs mechanically, erroneously, use
19403      the 'typename' keyword to denote (dependent) qualified types
19404      as base classes.  */
19405   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
19406     {
19407       token = cp_lexer_peek_token (parser->lexer);
19408       if (!processing_template_decl)
19409         error_at (token->location,
19410                   "keyword %<typename%> not allowed outside of templates");
19411       else
19412         error_at (token->location,
19413                   "keyword %<typename%> not allowed in this context "
19414                   "(the base class is implicitly a type)");
19415       cp_lexer_consume_token (parser->lexer);
19416     }
19417
19418   /* Look for the optional `::' operator.  */
19419   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
19420   /* Look for the nested-name-specifier.  The simplest way to
19421      implement:
19422
19423        [temp.res]
19424
19425        The keyword `typename' is not permitted in a base-specifier or
19426        mem-initializer; in these contexts a qualified name that
19427        depends on a template-parameter is implicitly assumed to be a
19428        type name.
19429
19430      is to pretend that we have seen the `typename' keyword at this
19431      point.  */
19432   cp_parser_nested_name_specifier_opt (parser,
19433                                        /*typename_keyword_p=*/true,
19434                                        /*check_dependency_p=*/true,
19435                                        typename_type,
19436                                        /*is_declaration=*/true);
19437   /* If the base class is given by a qualified name, assume that names
19438      we see are type names or templates, as appropriate.  */
19439   class_scope_p = (parser->scope && TYPE_P (parser->scope));
19440   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
19441
19442   if (!parser->scope
19443       && cp_lexer_next_token_is_decltype (parser->lexer))
19444     /* DR 950 allows decltype as a base-specifier.  */
19445     type = cp_parser_decltype (parser);
19446   else
19447     {
19448       /* Otherwise, look for the class-name.  */
19449       type = cp_parser_class_name (parser,
19450                                    class_scope_p,
19451                                    template_p,
19452                                    typename_type,
19453                                    /*check_dependency_p=*/true,
19454                                    /*class_head_p=*/false,
19455                                    /*is_declaration=*/true);
19456       type = TREE_TYPE (type);
19457     }
19458
19459   if (type == error_mark_node)
19460     return error_mark_node;
19461
19462   return finish_base_specifier (type, access, virtual_p);
19463 }
19464
19465 /* Exception handling [gram.exception] */
19466
19467 /* Parse an (optional) exception-specification.
19468
19469    exception-specification:
19470      throw ( type-id-list [opt] )
19471
19472    Returns a TREE_LIST representing the exception-specification.  The
19473    TREE_VALUE of each node is a type.  */
19474
19475 static tree
19476 cp_parser_exception_specification_opt (cp_parser* parser)
19477 {
19478   cp_token *token;
19479   tree type_id_list;
19480   const char *saved_message;
19481
19482   /* Peek at the next token.  */
19483   token = cp_lexer_peek_token (parser->lexer);
19484
19485   /* Is it a noexcept-specification?  */
19486   if (cp_parser_is_keyword (token, RID_NOEXCEPT))
19487     {
19488       tree expr;
19489       cp_lexer_consume_token (parser->lexer);
19490
19491       if (cp_lexer_peek_token (parser->lexer)->type == CPP_OPEN_PAREN)
19492         {
19493           cp_lexer_consume_token (parser->lexer);
19494
19495           /* Types may not be defined in an exception-specification.  */
19496           saved_message = parser->type_definition_forbidden_message;
19497           parser->type_definition_forbidden_message
19498             = G_("types may not be defined in an exception-specification");
19499
19500           expr = cp_parser_constant_expression (parser, false, NULL);
19501
19502           /* Restore the saved message.  */
19503           parser->type_definition_forbidden_message = saved_message;
19504
19505           cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19506         }
19507       else
19508         expr = boolean_true_node;
19509
19510       return build_noexcept_spec (expr, tf_warning_or_error);
19511     }
19512
19513   /* If it's not `throw', then there's no exception-specification.  */
19514   if (!cp_parser_is_keyword (token, RID_THROW))
19515     return NULL_TREE;
19516
19517 #if 0
19518   /* Enable this once a lot of code has transitioned to noexcept?  */
19519   if (cxx_dialect == cxx0x && !in_system_header)
19520     warning (OPT_Wdeprecated, "dynamic exception specifications are "
19521              "deprecated in C++0x; use %<noexcept%> instead");
19522 #endif
19523
19524   /* Consume the `throw'.  */
19525   cp_lexer_consume_token (parser->lexer);
19526
19527   /* Look for the `('.  */
19528   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19529
19530   /* Peek at the next token.  */
19531   token = cp_lexer_peek_token (parser->lexer);
19532   /* If it's not a `)', then there is a type-id-list.  */
19533   if (token->type != CPP_CLOSE_PAREN)
19534     {
19535       /* Types may not be defined in an exception-specification.  */
19536       saved_message = parser->type_definition_forbidden_message;
19537       parser->type_definition_forbidden_message
19538         = G_("types may not be defined in an exception-specification");
19539       /* Parse the type-id-list.  */
19540       type_id_list = cp_parser_type_id_list (parser);
19541       /* Restore the saved message.  */
19542       parser->type_definition_forbidden_message = saved_message;
19543     }
19544   else
19545     type_id_list = empty_except_spec;
19546
19547   /* Look for the `)'.  */
19548   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19549
19550   return type_id_list;
19551 }
19552
19553 /* Parse an (optional) type-id-list.
19554
19555    type-id-list:
19556      type-id ... [opt]
19557      type-id-list , type-id ... [opt]
19558
19559    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
19560    in the order that the types were presented.  */
19561
19562 static tree
19563 cp_parser_type_id_list (cp_parser* parser)
19564 {
19565   tree types = NULL_TREE;
19566
19567   while (true)
19568     {
19569       cp_token *token;
19570       tree type;
19571
19572       /* Get the next type-id.  */
19573       type = cp_parser_type_id (parser);
19574       /* Parse the optional ellipsis. */
19575       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
19576         {
19577           /* Consume the `...'. */
19578           cp_lexer_consume_token (parser->lexer);
19579
19580           /* Turn the type into a pack expansion expression. */
19581           type = make_pack_expansion (type);
19582         }
19583       /* Add it to the list.  */
19584       types = add_exception_specifier (types, type, /*complain=*/1);
19585       /* Peek at the next token.  */
19586       token = cp_lexer_peek_token (parser->lexer);
19587       /* If it is not a `,', we are done.  */
19588       if (token->type != CPP_COMMA)
19589         break;
19590       /* Consume the `,'.  */
19591       cp_lexer_consume_token (parser->lexer);
19592     }
19593
19594   return nreverse (types);
19595 }
19596
19597 /* Parse a try-block.
19598
19599    try-block:
19600      try compound-statement handler-seq  */
19601
19602 static tree
19603 cp_parser_try_block (cp_parser* parser)
19604 {
19605   tree try_block;
19606
19607   cp_parser_require_keyword (parser, RID_TRY, RT_TRY);
19608   try_block = begin_try_block ();
19609   cp_parser_compound_statement (parser, NULL, true, false);
19610   finish_try_block (try_block);
19611   cp_parser_handler_seq (parser);
19612   finish_handler_sequence (try_block);
19613
19614   return try_block;
19615 }
19616
19617 /* Parse a function-try-block.
19618
19619    function-try-block:
19620      try ctor-initializer [opt] function-body handler-seq  */
19621
19622 static bool
19623 cp_parser_function_try_block (cp_parser* parser)
19624 {
19625   tree compound_stmt;
19626   tree try_block;
19627   bool ctor_initializer_p;
19628
19629   /* Look for the `try' keyword.  */
19630   if (!cp_parser_require_keyword (parser, RID_TRY, RT_TRY))
19631     return false;
19632   /* Let the rest of the front end know where we are.  */
19633   try_block = begin_function_try_block (&compound_stmt);
19634   /* Parse the function-body.  */
19635   ctor_initializer_p
19636     = cp_parser_ctor_initializer_opt_and_function_body (parser);
19637   /* We're done with the `try' part.  */
19638   finish_function_try_block (try_block);
19639   /* Parse the handlers.  */
19640   cp_parser_handler_seq (parser);
19641   /* We're done with the handlers.  */
19642   finish_function_handler_sequence (try_block, compound_stmt);
19643
19644   return ctor_initializer_p;
19645 }
19646
19647 /* Parse a handler-seq.
19648
19649    handler-seq:
19650      handler handler-seq [opt]  */
19651
19652 static void
19653 cp_parser_handler_seq (cp_parser* parser)
19654 {
19655   while (true)
19656     {
19657       cp_token *token;
19658
19659       /* Parse the handler.  */
19660       cp_parser_handler (parser);
19661       /* Peek at the next token.  */
19662       token = cp_lexer_peek_token (parser->lexer);
19663       /* If it's not `catch' then there are no more handlers.  */
19664       if (!cp_parser_is_keyword (token, RID_CATCH))
19665         break;
19666     }
19667 }
19668
19669 /* Parse a handler.
19670
19671    handler:
19672      catch ( exception-declaration ) compound-statement  */
19673
19674 static void
19675 cp_parser_handler (cp_parser* parser)
19676 {
19677   tree handler;
19678   tree declaration;
19679
19680   cp_parser_require_keyword (parser, RID_CATCH, RT_CATCH);
19681   handler = begin_handler ();
19682   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19683   declaration = cp_parser_exception_declaration (parser);
19684   finish_handler_parms (declaration, handler);
19685   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19686   cp_parser_compound_statement (parser, NULL, false, false);
19687   finish_handler (handler);
19688 }
19689
19690 /* Parse an exception-declaration.
19691
19692    exception-declaration:
19693      type-specifier-seq declarator
19694      type-specifier-seq abstract-declarator
19695      type-specifier-seq
19696      ...
19697
19698    Returns a VAR_DECL for the declaration, or NULL_TREE if the
19699    ellipsis variant is used.  */
19700
19701 static tree
19702 cp_parser_exception_declaration (cp_parser* parser)
19703 {
19704   cp_decl_specifier_seq type_specifiers;
19705   cp_declarator *declarator;
19706   const char *saved_message;
19707
19708   /* If it's an ellipsis, it's easy to handle.  */
19709   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
19710     {
19711       /* Consume the `...' token.  */
19712       cp_lexer_consume_token (parser->lexer);
19713       return NULL_TREE;
19714     }
19715
19716   /* Types may not be defined in exception-declarations.  */
19717   saved_message = parser->type_definition_forbidden_message;
19718   parser->type_definition_forbidden_message
19719     = G_("types may not be defined in exception-declarations");
19720
19721   /* Parse the type-specifier-seq.  */
19722   cp_parser_type_specifier_seq (parser, /*is_declaration=*/true,
19723                                 /*is_trailing_return=*/false,
19724                                 &type_specifiers);
19725   /* If it's a `)', then there is no declarator.  */
19726   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
19727     declarator = NULL;
19728   else
19729     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
19730                                        /*ctor_dtor_or_conv_p=*/NULL,
19731                                        /*parenthesized_p=*/NULL,
19732                                        /*member_p=*/false);
19733
19734   /* Restore the saved message.  */
19735   parser->type_definition_forbidden_message = saved_message;
19736
19737   if (!type_specifiers.any_specifiers_p)
19738     return error_mark_node;
19739
19740   return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
19741 }
19742
19743 /* Parse a throw-expression.
19744
19745    throw-expression:
19746      throw assignment-expression [opt]
19747
19748    Returns a THROW_EXPR representing the throw-expression.  */
19749
19750 static tree
19751 cp_parser_throw_expression (cp_parser* parser)
19752 {
19753   tree expression;
19754   cp_token* token;
19755
19756   cp_parser_require_keyword (parser, RID_THROW, RT_THROW);
19757   token = cp_lexer_peek_token (parser->lexer);
19758   /* Figure out whether or not there is an assignment-expression
19759      following the "throw" keyword.  */
19760   if (token->type == CPP_COMMA
19761       || token->type == CPP_SEMICOLON
19762       || token->type == CPP_CLOSE_PAREN
19763       || token->type == CPP_CLOSE_SQUARE
19764       || token->type == CPP_CLOSE_BRACE
19765       || token->type == CPP_COLON)
19766     expression = NULL_TREE;
19767   else
19768     expression = cp_parser_assignment_expression (parser,
19769                                                   /*cast_p=*/false, NULL);
19770
19771   return build_throw (expression);
19772 }
19773
19774 /* GNU Extensions */
19775
19776 /* Parse an (optional) asm-specification.
19777
19778    asm-specification:
19779      asm ( string-literal )
19780
19781    If the asm-specification is present, returns a STRING_CST
19782    corresponding to the string-literal.  Otherwise, returns
19783    NULL_TREE.  */
19784
19785 static tree
19786 cp_parser_asm_specification_opt (cp_parser* parser)
19787 {
19788   cp_token *token;
19789   tree asm_specification;
19790
19791   /* Peek at the next token.  */
19792   token = cp_lexer_peek_token (parser->lexer);
19793   /* If the next token isn't the `asm' keyword, then there's no
19794      asm-specification.  */
19795   if (!cp_parser_is_keyword (token, RID_ASM))
19796     return NULL_TREE;
19797
19798   /* Consume the `asm' token.  */
19799   cp_lexer_consume_token (parser->lexer);
19800   /* Look for the `('.  */
19801   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19802
19803   /* Look for the string-literal.  */
19804   asm_specification = cp_parser_string_literal (parser, false, false);
19805
19806   /* Look for the `)'.  */
19807   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19808
19809   return asm_specification;
19810 }
19811
19812 /* Parse an asm-operand-list.
19813
19814    asm-operand-list:
19815      asm-operand
19816      asm-operand-list , asm-operand
19817
19818    asm-operand:
19819      string-literal ( expression )
19820      [ string-literal ] string-literal ( expression )
19821
19822    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
19823    each node is the expression.  The TREE_PURPOSE is itself a
19824    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
19825    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
19826    is a STRING_CST for the string literal before the parenthesis. Returns
19827    ERROR_MARK_NODE if any of the operands are invalid.  */
19828
19829 static tree
19830 cp_parser_asm_operand_list (cp_parser* parser)
19831 {
19832   tree asm_operands = NULL_TREE;
19833   bool invalid_operands = false;
19834
19835   while (true)
19836     {
19837       tree string_literal;
19838       tree expression;
19839       tree name;
19840
19841       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
19842         {
19843           /* Consume the `[' token.  */
19844           cp_lexer_consume_token (parser->lexer);
19845           /* Read the operand name.  */
19846           name = cp_parser_identifier (parser);
19847           if (name != error_mark_node)
19848             name = build_string (IDENTIFIER_LENGTH (name),
19849                                  IDENTIFIER_POINTER (name));
19850           /* Look for the closing `]'.  */
19851           cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
19852         }
19853       else
19854         name = NULL_TREE;
19855       /* Look for the string-literal.  */
19856       string_literal = cp_parser_string_literal (parser, false, false);
19857
19858       /* Look for the `('.  */
19859       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19860       /* Parse the expression.  */
19861       expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
19862       /* Look for the `)'.  */
19863       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19864
19865       if (name == error_mark_node 
19866           || string_literal == error_mark_node 
19867           || expression == error_mark_node)
19868         invalid_operands = true;
19869
19870       /* Add this operand to the list.  */
19871       asm_operands = tree_cons (build_tree_list (name, string_literal),
19872                                 expression,
19873                                 asm_operands);
19874       /* If the next token is not a `,', there are no more
19875          operands.  */
19876       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
19877         break;
19878       /* Consume the `,'.  */
19879       cp_lexer_consume_token (parser->lexer);
19880     }
19881
19882   return invalid_operands ? error_mark_node : nreverse (asm_operands);
19883 }
19884
19885 /* Parse an asm-clobber-list.
19886
19887    asm-clobber-list:
19888      string-literal
19889      asm-clobber-list , string-literal
19890
19891    Returns a TREE_LIST, indicating the clobbers in the order that they
19892    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
19893
19894 static tree
19895 cp_parser_asm_clobber_list (cp_parser* parser)
19896 {
19897   tree clobbers = NULL_TREE;
19898
19899   while (true)
19900     {
19901       tree string_literal;
19902
19903       /* Look for the string literal.  */
19904       string_literal = cp_parser_string_literal (parser, false, false);
19905       /* Add it to the list.  */
19906       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
19907       /* If the next token is not a `,', then the list is
19908          complete.  */
19909       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
19910         break;
19911       /* Consume the `,' token.  */
19912       cp_lexer_consume_token (parser->lexer);
19913     }
19914
19915   return clobbers;
19916 }
19917
19918 /* Parse an asm-label-list.
19919
19920    asm-label-list:
19921      identifier
19922      asm-label-list , identifier
19923
19924    Returns a TREE_LIST, indicating the labels in the order that they
19925    appeared.  The TREE_VALUE of each node is a label.  */
19926
19927 static tree
19928 cp_parser_asm_label_list (cp_parser* parser)
19929 {
19930   tree labels = NULL_TREE;
19931
19932   while (true)
19933     {
19934       tree identifier, label, name;
19935
19936       /* Look for the identifier.  */
19937       identifier = cp_parser_identifier (parser);
19938       if (!error_operand_p (identifier))
19939         {
19940           label = lookup_label (identifier);
19941           if (TREE_CODE (label) == LABEL_DECL)
19942             {
19943               TREE_USED (label) = 1;
19944               check_goto (label);
19945               name = build_string (IDENTIFIER_LENGTH (identifier),
19946                                    IDENTIFIER_POINTER (identifier));
19947               labels = tree_cons (name, label, labels);
19948             }
19949         }
19950       /* If the next token is not a `,', then the list is
19951          complete.  */
19952       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
19953         break;
19954       /* Consume the `,' token.  */
19955       cp_lexer_consume_token (parser->lexer);
19956     }
19957
19958   return nreverse (labels);
19959 }
19960
19961 /* Parse an (optional) series of attributes.
19962
19963    attributes:
19964      attributes attribute
19965
19966    attribute:
19967      __attribute__ (( attribute-list [opt] ))
19968
19969    The return value is as for cp_parser_attribute_list.  */
19970
19971 static tree
19972 cp_parser_attributes_opt (cp_parser* parser)
19973 {
19974   tree attributes = NULL_TREE;
19975
19976   while (true)
19977     {
19978       cp_token *token;
19979       tree attribute_list;
19980
19981       /* Peek at the next token.  */
19982       token = cp_lexer_peek_token (parser->lexer);
19983       /* If it's not `__attribute__', then we're done.  */
19984       if (token->keyword != RID_ATTRIBUTE)
19985         break;
19986
19987       /* Consume the `__attribute__' keyword.  */
19988       cp_lexer_consume_token (parser->lexer);
19989       /* Look for the two `(' tokens.  */
19990       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19991       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19992
19993       /* Peek at the next token.  */
19994       token = cp_lexer_peek_token (parser->lexer);
19995       if (token->type != CPP_CLOSE_PAREN)
19996         /* Parse the attribute-list.  */
19997         attribute_list = cp_parser_attribute_list (parser);
19998       else
19999         /* If the next token is a `)', then there is no attribute
20000            list.  */
20001         attribute_list = NULL;
20002
20003       /* Look for the two `)' tokens.  */
20004       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
20005       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
20006
20007       /* Add these new attributes to the list.  */
20008       attributes = chainon (attributes, attribute_list);
20009     }
20010
20011   return attributes;
20012 }
20013
20014 /* Parse an attribute-list.
20015
20016    attribute-list:
20017      attribute
20018      attribute-list , attribute
20019
20020    attribute:
20021      identifier
20022      identifier ( identifier )
20023      identifier ( identifier , expression-list )
20024      identifier ( expression-list )
20025
20026    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
20027    to an attribute.  The TREE_PURPOSE of each node is the identifier
20028    indicating which attribute is in use.  The TREE_VALUE represents
20029    the arguments, if any.  */
20030
20031 static tree
20032 cp_parser_attribute_list (cp_parser* parser)
20033 {
20034   tree attribute_list = NULL_TREE;
20035   bool save_translate_strings_p = parser->translate_strings_p;
20036
20037   parser->translate_strings_p = false;
20038   while (true)
20039     {
20040       cp_token *token;
20041       tree identifier;
20042       tree attribute;
20043
20044       /* Look for the identifier.  We also allow keywords here; for
20045          example `__attribute__ ((const))' is legal.  */
20046       token = cp_lexer_peek_token (parser->lexer);
20047       if (token->type == CPP_NAME
20048           || token->type == CPP_KEYWORD)
20049         {
20050           tree arguments = NULL_TREE;
20051
20052           /* Consume the token.  */
20053           token = cp_lexer_consume_token (parser->lexer);
20054
20055           /* Save away the identifier that indicates which attribute
20056              this is.  */
20057           identifier = (token->type == CPP_KEYWORD) 
20058             /* For keywords, use the canonical spelling, not the
20059                parsed identifier.  */
20060             ? ridpointers[(int) token->keyword]
20061             : token->u.value;
20062           
20063           attribute = build_tree_list (identifier, NULL_TREE);
20064
20065           /* Peek at the next token.  */
20066           token = cp_lexer_peek_token (parser->lexer);
20067           /* If it's an `(', then parse the attribute arguments.  */
20068           if (token->type == CPP_OPEN_PAREN)
20069             {
20070               VEC(tree,gc) *vec;
20071               int attr_flag = (attribute_takes_identifier_p (identifier)
20072                                ? id_attr : normal_attr);
20073               vec = cp_parser_parenthesized_expression_list
20074                     (parser, attr_flag, /*cast_p=*/false,
20075                      /*allow_expansion_p=*/false,
20076                      /*non_constant_p=*/NULL);
20077               if (vec == NULL)
20078                 arguments = error_mark_node;
20079               else
20080                 {
20081                   arguments = build_tree_list_vec (vec);
20082                   release_tree_vector (vec);
20083                 }
20084               /* Save the arguments away.  */
20085               TREE_VALUE (attribute) = arguments;
20086             }
20087
20088           if (arguments != error_mark_node)
20089             {
20090               /* Add this attribute to the list.  */
20091               TREE_CHAIN (attribute) = attribute_list;
20092               attribute_list = attribute;
20093             }
20094
20095           token = cp_lexer_peek_token (parser->lexer);
20096         }
20097       /* Now, look for more attributes.  If the next token isn't a
20098          `,', we're done.  */
20099       if (token->type != CPP_COMMA)
20100         break;
20101
20102       /* Consume the comma and keep going.  */
20103       cp_lexer_consume_token (parser->lexer);
20104     }
20105   parser->translate_strings_p = save_translate_strings_p;
20106
20107   /* We built up the list in reverse order.  */
20108   return nreverse (attribute_list);
20109 }
20110
20111 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
20112    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
20113    current value of the PEDANTIC flag, regardless of whether or not
20114    the `__extension__' keyword is present.  The caller is responsible
20115    for restoring the value of the PEDANTIC flag.  */
20116
20117 static bool
20118 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
20119 {
20120   /* Save the old value of the PEDANTIC flag.  */
20121   *saved_pedantic = pedantic;
20122
20123   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
20124     {
20125       /* Consume the `__extension__' token.  */
20126       cp_lexer_consume_token (parser->lexer);
20127       /* We're not being pedantic while the `__extension__' keyword is
20128          in effect.  */
20129       pedantic = 0;
20130
20131       return true;
20132     }
20133
20134   return false;
20135 }
20136
20137 /* Parse a label declaration.
20138
20139    label-declaration:
20140      __label__ label-declarator-seq ;
20141
20142    label-declarator-seq:
20143      identifier , label-declarator-seq
20144      identifier  */
20145
20146 static void
20147 cp_parser_label_declaration (cp_parser* parser)
20148 {
20149   /* Look for the `__label__' keyword.  */
20150   cp_parser_require_keyword (parser, RID_LABEL, RT_LABEL);
20151
20152   while (true)
20153     {
20154       tree identifier;
20155
20156       /* Look for an identifier.  */
20157       identifier = cp_parser_identifier (parser);
20158       /* If we failed, stop.  */
20159       if (identifier == error_mark_node)
20160         break;
20161       /* Declare it as a label.  */
20162       finish_label_decl (identifier);
20163       /* If the next token is a `;', stop.  */
20164       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
20165         break;
20166       /* Look for the `,' separating the label declarations.  */
20167       cp_parser_require (parser, CPP_COMMA, RT_COMMA);
20168     }
20169
20170   /* Look for the final `;'.  */
20171   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
20172 }
20173
20174 /* Support Functions */
20175
20176 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
20177    NAME should have one of the representations used for an
20178    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
20179    is returned.  If PARSER->SCOPE is a dependent type, then a
20180    SCOPE_REF is returned.
20181
20182    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
20183    returned; the name was already resolved when the TEMPLATE_ID_EXPR
20184    was formed.  Abstractly, such entities should not be passed to this
20185    function, because they do not need to be looked up, but it is
20186    simpler to check for this special case here, rather than at the
20187    call-sites.
20188
20189    In cases not explicitly covered above, this function returns a
20190    DECL, OVERLOAD, or baselink representing the result of the lookup.
20191    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
20192    is returned.
20193
20194    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
20195    (e.g., "struct") that was used.  In that case bindings that do not
20196    refer to types are ignored.
20197
20198    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
20199    ignored.
20200
20201    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
20202    are ignored.
20203
20204    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
20205    types.
20206
20207    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
20208    TREE_LIST of candidates if name-lookup results in an ambiguity, and
20209    NULL_TREE otherwise.  */
20210
20211 static tree
20212 cp_parser_lookup_name (cp_parser *parser, tree name,
20213                        enum tag_types tag_type,
20214                        bool is_template,
20215                        bool is_namespace,
20216                        bool check_dependency,
20217                        tree *ambiguous_decls,
20218                        location_t name_location)
20219 {
20220   int flags = 0;
20221   tree decl;
20222   tree object_type = parser->context->object_type;
20223
20224   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
20225     flags |= LOOKUP_COMPLAIN;
20226
20227   /* Assume that the lookup will be unambiguous.  */
20228   if (ambiguous_decls)
20229     *ambiguous_decls = NULL_TREE;
20230
20231   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
20232      no longer valid.  Note that if we are parsing tentatively, and
20233      the parse fails, OBJECT_TYPE will be automatically restored.  */
20234   parser->context->object_type = NULL_TREE;
20235
20236   if (name == error_mark_node)
20237     return error_mark_node;
20238
20239   /* A template-id has already been resolved; there is no lookup to
20240      do.  */
20241   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
20242     return name;
20243   if (BASELINK_P (name))
20244     {
20245       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
20246                   == TEMPLATE_ID_EXPR);
20247       return name;
20248     }
20249
20250   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
20251      it should already have been checked to make sure that the name
20252      used matches the type being destroyed.  */
20253   if (TREE_CODE (name) == BIT_NOT_EXPR)
20254     {
20255       tree type;
20256
20257       /* Figure out to which type this destructor applies.  */
20258       if (parser->scope)
20259         type = parser->scope;
20260       else if (object_type)
20261         type = object_type;
20262       else
20263         type = current_class_type;
20264       /* If that's not a class type, there is no destructor.  */
20265       if (!type || !CLASS_TYPE_P (type))
20266         return error_mark_node;
20267       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
20268         lazily_declare_fn (sfk_destructor, type);
20269       if (!CLASSTYPE_DESTRUCTORS (type))
20270           return error_mark_node;
20271       /* If it was a class type, return the destructor.  */
20272       return CLASSTYPE_DESTRUCTORS (type);
20273     }
20274
20275   /* By this point, the NAME should be an ordinary identifier.  If
20276      the id-expression was a qualified name, the qualifying scope is
20277      stored in PARSER->SCOPE at this point.  */
20278   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
20279
20280   /* Perform the lookup.  */
20281   if (parser->scope)
20282     {
20283       bool dependent_p;
20284
20285       if (parser->scope == error_mark_node)
20286         return error_mark_node;
20287
20288       /* If the SCOPE is dependent, the lookup must be deferred until
20289          the template is instantiated -- unless we are explicitly
20290          looking up names in uninstantiated templates.  Even then, we
20291          cannot look up the name if the scope is not a class type; it
20292          might, for example, be a template type parameter.  */
20293       dependent_p = (TYPE_P (parser->scope)
20294                      && dependent_scope_p (parser->scope));
20295       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
20296           && dependent_p)
20297         /* Defer lookup.  */
20298         decl = error_mark_node;
20299       else
20300         {
20301           tree pushed_scope = NULL_TREE;
20302
20303           /* If PARSER->SCOPE is a dependent type, then it must be a
20304              class type, and we must not be checking dependencies;
20305              otherwise, we would have processed this lookup above.  So
20306              that PARSER->SCOPE is not considered a dependent base by
20307              lookup_member, we must enter the scope here.  */
20308           if (dependent_p)
20309             pushed_scope = push_scope (parser->scope);
20310
20311           /* If the PARSER->SCOPE is a template specialization, it
20312              may be instantiated during name lookup.  In that case,
20313              errors may be issued.  Even if we rollback the current
20314              tentative parse, those errors are valid.  */
20315           decl = lookup_qualified_name (parser->scope, name,
20316                                         tag_type != none_type,
20317                                         /*complain=*/true);
20318
20319           /* 3.4.3.1: In a lookup in which the constructor is an acceptable
20320              lookup result and the nested-name-specifier nominates a class C:
20321                * if the name specified after the nested-name-specifier, when
20322                looked up in C, is the injected-class-name of C (Clause 9), or
20323                * if the name specified after the nested-name-specifier is the
20324                same as the identifier or the simple-template-id's template-
20325                name in the last component of the nested-name-specifier,
20326              the name is instead considered to name the constructor of
20327              class C. [ Note: for example, the constructor is not an
20328              acceptable lookup result in an elaborated-type-specifier so
20329              the constructor would not be used in place of the
20330              injected-class-name. --end note ] Such a constructor name
20331              shall be used only in the declarator-id of a declaration that
20332              names a constructor or in a using-declaration.  */
20333           if (tag_type == none_type
20334               && DECL_SELF_REFERENCE_P (decl)
20335               && same_type_p (DECL_CONTEXT (decl), parser->scope))
20336             decl = lookup_qualified_name (parser->scope, ctor_identifier,
20337                                           tag_type != none_type,
20338                                           /*complain=*/true);
20339
20340           /* If we have a single function from a using decl, pull it out.  */
20341           if (TREE_CODE (decl) == OVERLOAD
20342               && !really_overloaded_fn (decl))
20343             decl = OVL_FUNCTION (decl);
20344
20345           if (pushed_scope)
20346             pop_scope (pushed_scope);
20347         }
20348
20349       /* If the scope is a dependent type and either we deferred lookup or
20350          we did lookup but didn't find the name, rememeber the name.  */
20351       if (decl == error_mark_node && TYPE_P (parser->scope)
20352           && dependent_type_p (parser->scope))
20353         {
20354           if (tag_type)
20355             {
20356               tree type;
20357
20358               /* The resolution to Core Issue 180 says that `struct
20359                  A::B' should be considered a type-name, even if `A'
20360                  is dependent.  */
20361               type = make_typename_type (parser->scope, name, tag_type,
20362                                          /*complain=*/tf_error);
20363               decl = TYPE_NAME (type);
20364             }
20365           else if (is_template
20366                    && (cp_parser_next_token_ends_template_argument_p (parser)
20367                        || cp_lexer_next_token_is (parser->lexer,
20368                                                   CPP_CLOSE_PAREN)))
20369             decl = make_unbound_class_template (parser->scope,
20370                                                 name, NULL_TREE,
20371                                                 /*complain=*/tf_error);
20372           else
20373             decl = build_qualified_name (/*type=*/NULL_TREE,
20374                                          parser->scope, name,
20375                                          is_template);
20376         }
20377       parser->qualifying_scope = parser->scope;
20378       parser->object_scope = NULL_TREE;
20379     }
20380   else if (object_type)
20381     {
20382       tree object_decl = NULL_TREE;
20383       /* Look up the name in the scope of the OBJECT_TYPE, unless the
20384          OBJECT_TYPE is not a class.  */
20385       if (CLASS_TYPE_P (object_type))
20386         /* If the OBJECT_TYPE is a template specialization, it may
20387            be instantiated during name lookup.  In that case, errors
20388            may be issued.  Even if we rollback the current tentative
20389            parse, those errors are valid.  */
20390         object_decl = lookup_member (object_type,
20391                                      name,
20392                                      /*protect=*/0,
20393                                      tag_type != none_type);
20394       /* Look it up in the enclosing context, too.  */
20395       decl = lookup_name_real (name, tag_type != none_type,
20396                                /*nonclass=*/0,
20397                                /*block_p=*/true, is_namespace, flags);
20398       parser->object_scope = object_type;
20399       parser->qualifying_scope = NULL_TREE;
20400       if (object_decl)
20401         decl = object_decl;
20402     }
20403   else
20404     {
20405       decl = lookup_name_real (name, tag_type != none_type,
20406                                /*nonclass=*/0,
20407                                /*block_p=*/true, is_namespace, flags);
20408       parser->qualifying_scope = NULL_TREE;
20409       parser->object_scope = NULL_TREE;
20410     }
20411
20412   /* If the lookup failed, let our caller know.  */
20413   if (!decl || decl == error_mark_node)
20414     return error_mark_node;
20415
20416   /* Pull out the template from an injected-class-name (or multiple).  */
20417   if (is_template)
20418     decl = maybe_get_template_decl_from_type_decl (decl);
20419
20420   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
20421   if (TREE_CODE (decl) == TREE_LIST)
20422     {
20423       if (ambiguous_decls)
20424         *ambiguous_decls = decl;
20425       /* The error message we have to print is too complicated for
20426          cp_parser_error, so we incorporate its actions directly.  */
20427       if (!cp_parser_simulate_error (parser))
20428         {
20429           error_at (name_location, "reference to %qD is ambiguous",
20430                     name);
20431           print_candidates (decl);
20432         }
20433       return error_mark_node;
20434     }
20435
20436   gcc_assert (DECL_P (decl)
20437               || TREE_CODE (decl) == OVERLOAD
20438               || TREE_CODE (decl) == SCOPE_REF
20439               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
20440               || BASELINK_P (decl));
20441
20442   /* If we have resolved the name of a member declaration, check to
20443      see if the declaration is accessible.  When the name resolves to
20444      set of overloaded functions, accessibility is checked when
20445      overload resolution is done.
20446
20447      During an explicit instantiation, access is not checked at all,
20448      as per [temp.explicit].  */
20449   if (DECL_P (decl))
20450     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
20451
20452   maybe_record_typedef_use (decl);
20453
20454   return decl;
20455 }
20456
20457 /* Like cp_parser_lookup_name, but for use in the typical case where
20458    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
20459    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
20460
20461 static tree
20462 cp_parser_lookup_name_simple (cp_parser* parser, tree name, location_t location)
20463 {
20464   return cp_parser_lookup_name (parser, name,
20465                                 none_type,
20466                                 /*is_template=*/false,
20467                                 /*is_namespace=*/false,
20468                                 /*check_dependency=*/true,
20469                                 /*ambiguous_decls=*/NULL,
20470                                 location);
20471 }
20472
20473 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
20474    the current context, return the TYPE_DECL.  If TAG_NAME_P is
20475    true, the DECL indicates the class being defined in a class-head,
20476    or declared in an elaborated-type-specifier.
20477
20478    Otherwise, return DECL.  */
20479
20480 static tree
20481 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
20482 {
20483   /* If the TEMPLATE_DECL is being declared as part of a class-head,
20484      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
20485
20486        struct A {
20487          template <typename T> struct B;
20488        };
20489
20490        template <typename T> struct A::B {};
20491
20492      Similarly, in an elaborated-type-specifier:
20493
20494        namespace N { struct X{}; }
20495
20496        struct A {
20497          template <typename T> friend struct N::X;
20498        };
20499
20500      However, if the DECL refers to a class type, and we are in
20501      the scope of the class, then the name lookup automatically
20502      finds the TYPE_DECL created by build_self_reference rather
20503      than a TEMPLATE_DECL.  For example, in:
20504
20505        template <class T> struct S {
20506          S s;
20507        };
20508
20509      there is no need to handle such case.  */
20510
20511   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
20512     return DECL_TEMPLATE_RESULT (decl);
20513
20514   return decl;
20515 }
20516
20517 /* If too many, or too few, template-parameter lists apply to the
20518    declarator, issue an error message.  Returns TRUE if all went well,
20519    and FALSE otherwise.  */
20520
20521 static bool
20522 cp_parser_check_declarator_template_parameters (cp_parser* parser,
20523                                                 cp_declarator *declarator,
20524                                                 location_t declarator_location)
20525 {
20526   unsigned num_templates;
20527
20528   /* We haven't seen any classes that involve template parameters yet.  */
20529   num_templates = 0;
20530
20531   switch (declarator->kind)
20532     {
20533     case cdk_id:
20534       if (declarator->u.id.qualifying_scope)
20535         {
20536           tree scope;
20537
20538           scope = declarator->u.id.qualifying_scope;
20539
20540           while (scope && CLASS_TYPE_P (scope))
20541             {
20542               /* You're supposed to have one `template <...>'
20543                  for every template class, but you don't need one
20544                  for a full specialization.  For example:
20545
20546                  template <class T> struct S{};
20547                  template <> struct S<int> { void f(); };
20548                  void S<int>::f () {}
20549
20550                  is correct; there shouldn't be a `template <>' for
20551                  the definition of `S<int>::f'.  */
20552               if (!CLASSTYPE_TEMPLATE_INFO (scope))
20553                 /* If SCOPE does not have template information of any
20554                    kind, then it is not a template, nor is it nested
20555                    within a template.  */
20556                 break;
20557               if (explicit_class_specialization_p (scope))
20558                 break;
20559               if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
20560                 ++num_templates;
20561
20562               scope = TYPE_CONTEXT (scope);
20563             }
20564         }
20565       else if (TREE_CODE (declarator->u.id.unqualified_name)
20566                == TEMPLATE_ID_EXPR)
20567         /* If the DECLARATOR has the form `X<y>' then it uses one
20568            additional level of template parameters.  */
20569         ++num_templates;
20570
20571       return cp_parser_check_template_parameters 
20572         (parser, num_templates, declarator_location, declarator);
20573
20574
20575     case cdk_function:
20576     case cdk_array:
20577     case cdk_pointer:
20578     case cdk_reference:
20579     case cdk_ptrmem:
20580       return (cp_parser_check_declarator_template_parameters
20581               (parser, declarator->declarator, declarator_location));
20582
20583     case cdk_error:
20584       return true;
20585
20586     default:
20587       gcc_unreachable ();
20588     }
20589   return false;
20590 }
20591
20592 /* NUM_TEMPLATES were used in the current declaration.  If that is
20593    invalid, return FALSE and issue an error messages.  Otherwise,
20594    return TRUE.  If DECLARATOR is non-NULL, then we are checking a
20595    declarator and we can print more accurate diagnostics.  */
20596
20597 static bool
20598 cp_parser_check_template_parameters (cp_parser* parser,
20599                                      unsigned num_templates,
20600                                      location_t location,
20601                                      cp_declarator *declarator)
20602 {
20603   /* If there are the same number of template classes and parameter
20604      lists, that's OK.  */
20605   if (parser->num_template_parameter_lists == num_templates)
20606     return true;
20607   /* If there are more, but only one more, then we are referring to a
20608      member template.  That's OK too.  */
20609   if (parser->num_template_parameter_lists == num_templates + 1)
20610     return true;
20611   /* If there are more template classes than parameter lists, we have
20612      something like:
20613
20614        template <class T> void S<T>::R<T>::f ();  */
20615   if (parser->num_template_parameter_lists < num_templates)
20616     {
20617       if (declarator && !current_function_decl)
20618         error_at (location, "specializing member %<%T::%E%> "
20619                   "requires %<template<>%> syntax", 
20620                   declarator->u.id.qualifying_scope,
20621                   declarator->u.id.unqualified_name);
20622       else if (declarator)
20623         error_at (location, "invalid declaration of %<%T::%E%>",
20624                   declarator->u.id.qualifying_scope,
20625                   declarator->u.id.unqualified_name);
20626       else 
20627         error_at (location, "too few template-parameter-lists");
20628       return false;
20629     }
20630   /* Otherwise, there are too many template parameter lists.  We have
20631      something like:
20632
20633      template <class T> template <class U> void S::f();  */
20634   error_at (location, "too many template-parameter-lists");
20635   return false;
20636 }
20637
20638 /* Parse an optional `::' token indicating that the following name is
20639    from the global namespace.  If so, PARSER->SCOPE is set to the
20640    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
20641    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
20642    Returns the new value of PARSER->SCOPE, if the `::' token is
20643    present, and NULL_TREE otherwise.  */
20644
20645 static tree
20646 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
20647 {
20648   cp_token *token;
20649
20650   /* Peek at the next token.  */
20651   token = cp_lexer_peek_token (parser->lexer);
20652   /* If we're looking at a `::' token then we're starting from the
20653      global namespace, not our current location.  */
20654   if (token->type == CPP_SCOPE)
20655     {
20656       /* Consume the `::' token.  */
20657       cp_lexer_consume_token (parser->lexer);
20658       /* Set the SCOPE so that we know where to start the lookup.  */
20659       parser->scope = global_namespace;
20660       parser->qualifying_scope = global_namespace;
20661       parser->object_scope = NULL_TREE;
20662
20663       return parser->scope;
20664     }
20665   else if (!current_scope_valid_p)
20666     {
20667       parser->scope = NULL_TREE;
20668       parser->qualifying_scope = NULL_TREE;
20669       parser->object_scope = NULL_TREE;
20670     }
20671
20672   return NULL_TREE;
20673 }
20674
20675 /* Returns TRUE if the upcoming token sequence is the start of a
20676    constructor declarator.  If FRIEND_P is true, the declarator is
20677    preceded by the `friend' specifier.  */
20678
20679 static bool
20680 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
20681 {
20682   bool constructor_p;
20683   tree nested_name_specifier;
20684   cp_token *next_token;
20685
20686   /* The common case is that this is not a constructor declarator, so
20687      try to avoid doing lots of work if at all possible.  It's not
20688      valid declare a constructor at function scope.  */
20689   if (parser->in_function_body)
20690     return false;
20691   /* And only certain tokens can begin a constructor declarator.  */
20692   next_token = cp_lexer_peek_token (parser->lexer);
20693   if (next_token->type != CPP_NAME
20694       && next_token->type != CPP_SCOPE
20695       && next_token->type != CPP_NESTED_NAME_SPECIFIER
20696       && next_token->type != CPP_TEMPLATE_ID)
20697     return false;
20698
20699   /* Parse tentatively; we are going to roll back all of the tokens
20700      consumed here.  */
20701   cp_parser_parse_tentatively (parser);
20702   /* Assume that we are looking at a constructor declarator.  */
20703   constructor_p = true;
20704
20705   /* Look for the optional `::' operator.  */
20706   cp_parser_global_scope_opt (parser,
20707                               /*current_scope_valid_p=*/false);
20708   /* Look for the nested-name-specifier.  */
20709   nested_name_specifier
20710     = (cp_parser_nested_name_specifier_opt (parser,
20711                                             /*typename_keyword_p=*/false,
20712                                             /*check_dependency_p=*/false,
20713                                             /*type_p=*/false,
20714                                             /*is_declaration=*/false));
20715   /* Outside of a class-specifier, there must be a
20716      nested-name-specifier.  */
20717   if (!nested_name_specifier &&
20718       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
20719        || friend_p))
20720     constructor_p = false;
20721   else if (nested_name_specifier == error_mark_node)
20722     constructor_p = false;
20723
20724   /* If we have a class scope, this is easy; DR 147 says that S::S always
20725      names the constructor, and no other qualified name could.  */
20726   if (constructor_p && nested_name_specifier
20727       && CLASS_TYPE_P (nested_name_specifier))
20728     {
20729       tree id = cp_parser_unqualified_id (parser,
20730                                           /*template_keyword_p=*/false,
20731                                           /*check_dependency_p=*/false,
20732                                           /*declarator_p=*/true,
20733                                           /*optional_p=*/false);
20734       if (is_overloaded_fn (id))
20735         id = DECL_NAME (get_first_fn (id));
20736       if (!constructor_name_p (id, nested_name_specifier))
20737         constructor_p = false;
20738     }
20739   /* If we still think that this might be a constructor-declarator,
20740      look for a class-name.  */
20741   else if (constructor_p)
20742     {
20743       /* If we have:
20744
20745            template <typename T> struct S {
20746              S();
20747            };
20748
20749          we must recognize that the nested `S' names a class.  */
20750       tree type_decl;
20751       type_decl = cp_parser_class_name (parser,
20752                                         /*typename_keyword_p=*/false,
20753                                         /*template_keyword_p=*/false,
20754                                         none_type,
20755                                         /*check_dependency_p=*/false,
20756                                         /*class_head_p=*/false,
20757                                         /*is_declaration=*/false);
20758       /* If there was no class-name, then this is not a constructor.  */
20759       constructor_p = !cp_parser_error_occurred (parser);
20760
20761       /* If we're still considering a constructor, we have to see a `(',
20762          to begin the parameter-declaration-clause, followed by either a
20763          `)', an `...', or a decl-specifier.  We need to check for a
20764          type-specifier to avoid being fooled into thinking that:
20765
20766            S (f) (int);
20767
20768          is a constructor.  (It is actually a function named `f' that
20769          takes one parameter (of type `int') and returns a value of type
20770          `S'.  */
20771       if (constructor_p
20772           && !cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
20773         constructor_p = false;
20774
20775       if (constructor_p
20776           && cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
20777           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
20778           /* A parameter declaration begins with a decl-specifier,
20779              which is either the "attribute" keyword, a storage class
20780              specifier, or (usually) a type-specifier.  */
20781           && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
20782         {
20783           tree type;
20784           tree pushed_scope = NULL_TREE;
20785           unsigned saved_num_template_parameter_lists;
20786
20787           /* Names appearing in the type-specifier should be looked up
20788              in the scope of the class.  */
20789           if (current_class_type)
20790             type = NULL_TREE;
20791           else
20792             {
20793               type = TREE_TYPE (type_decl);
20794               if (TREE_CODE (type) == TYPENAME_TYPE)
20795                 {
20796                   type = resolve_typename_type (type,
20797                                                 /*only_current_p=*/false);
20798                   if (TREE_CODE (type) == TYPENAME_TYPE)
20799                     {
20800                       cp_parser_abort_tentative_parse (parser);
20801                       return false;
20802                     }
20803                 }
20804               pushed_scope = push_scope (type);
20805             }
20806
20807           /* Inside the constructor parameter list, surrounding
20808              template-parameter-lists do not apply.  */
20809           saved_num_template_parameter_lists
20810             = parser->num_template_parameter_lists;
20811           parser->num_template_parameter_lists = 0;
20812
20813           /* Look for the type-specifier.  */
20814           cp_parser_type_specifier (parser,
20815                                     CP_PARSER_FLAGS_NONE,
20816                                     /*decl_specs=*/NULL,
20817                                     /*is_declarator=*/true,
20818                                     /*declares_class_or_enum=*/NULL,
20819                                     /*is_cv_qualifier=*/NULL);
20820
20821           parser->num_template_parameter_lists
20822             = saved_num_template_parameter_lists;
20823
20824           /* Leave the scope of the class.  */
20825           if (pushed_scope)
20826             pop_scope (pushed_scope);
20827
20828           constructor_p = !cp_parser_error_occurred (parser);
20829         }
20830     }
20831
20832   /* We did not really want to consume any tokens.  */
20833   cp_parser_abort_tentative_parse (parser);
20834
20835   return constructor_p;
20836 }
20837
20838 /* Parse the definition of the function given by the DECL_SPECIFIERS,
20839    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
20840    they must be performed once we are in the scope of the function.
20841
20842    Returns the function defined.  */
20843
20844 static tree
20845 cp_parser_function_definition_from_specifiers_and_declarator
20846   (cp_parser* parser,
20847    cp_decl_specifier_seq *decl_specifiers,
20848    tree attributes,
20849    const cp_declarator *declarator)
20850 {
20851   tree fn;
20852   bool success_p;
20853
20854   /* Begin the function-definition.  */
20855   success_p = start_function (decl_specifiers, declarator, attributes);
20856
20857   /* The things we're about to see are not directly qualified by any
20858      template headers we've seen thus far.  */
20859   reset_specialization ();
20860
20861   /* If there were names looked up in the decl-specifier-seq that we
20862      did not check, check them now.  We must wait until we are in the
20863      scope of the function to perform the checks, since the function
20864      might be a friend.  */
20865   perform_deferred_access_checks ();
20866
20867   if (!success_p)
20868     {
20869       /* Skip the entire function.  */
20870       cp_parser_skip_to_end_of_block_or_statement (parser);
20871       fn = error_mark_node;
20872     }
20873   else if (DECL_INITIAL (current_function_decl) != error_mark_node)
20874     {
20875       /* Seen already, skip it.  An error message has already been output.  */
20876       cp_parser_skip_to_end_of_block_or_statement (parser);
20877       fn = current_function_decl;
20878       current_function_decl = NULL_TREE;
20879       /* If this is a function from a class, pop the nested class.  */
20880       if (current_class_name)
20881         pop_nested_class ();
20882     }
20883   else
20884     {
20885       timevar_id_t tv;
20886       if (DECL_DECLARED_INLINE_P (current_function_decl))
20887         tv = TV_PARSE_INLINE;
20888       else
20889         tv = TV_PARSE_FUNC;
20890       timevar_push (tv);
20891       fn = cp_parser_function_definition_after_declarator (parser,
20892                                                          /*inline_p=*/false);
20893       timevar_pop (tv);
20894     }
20895
20896   return fn;
20897 }
20898
20899 /* Parse the part of a function-definition that follows the
20900    declarator.  INLINE_P is TRUE iff this function is an inline
20901    function defined within a class-specifier.
20902
20903    Returns the function defined.  */
20904
20905 static tree
20906 cp_parser_function_definition_after_declarator (cp_parser* parser,
20907                                                 bool inline_p)
20908 {
20909   tree fn;
20910   bool ctor_initializer_p = false;
20911   bool saved_in_unbraced_linkage_specification_p;
20912   bool saved_in_function_body;
20913   unsigned saved_num_template_parameter_lists;
20914   cp_token *token;
20915
20916   saved_in_function_body = parser->in_function_body;
20917   parser->in_function_body = true;
20918   /* If the next token is `return', then the code may be trying to
20919      make use of the "named return value" extension that G++ used to
20920      support.  */
20921   token = cp_lexer_peek_token (parser->lexer);
20922   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
20923     {
20924       /* Consume the `return' keyword.  */
20925       cp_lexer_consume_token (parser->lexer);
20926       /* Look for the identifier that indicates what value is to be
20927          returned.  */
20928       cp_parser_identifier (parser);
20929       /* Issue an error message.  */
20930       error_at (token->location,
20931                 "named return values are no longer supported");
20932       /* Skip tokens until we reach the start of the function body.  */
20933       while (true)
20934         {
20935           cp_token *token = cp_lexer_peek_token (parser->lexer);
20936           if (token->type == CPP_OPEN_BRACE
20937               || token->type == CPP_EOF
20938               || token->type == CPP_PRAGMA_EOL)
20939             break;
20940           cp_lexer_consume_token (parser->lexer);
20941         }
20942     }
20943   /* The `extern' in `extern "C" void f () { ... }' does not apply to
20944      anything declared inside `f'.  */
20945   saved_in_unbraced_linkage_specification_p
20946     = parser->in_unbraced_linkage_specification_p;
20947   parser->in_unbraced_linkage_specification_p = false;
20948   /* Inside the function, surrounding template-parameter-lists do not
20949      apply.  */
20950   saved_num_template_parameter_lists
20951     = parser->num_template_parameter_lists;
20952   parser->num_template_parameter_lists = 0;
20953
20954   start_lambda_scope (current_function_decl);
20955
20956   /* If the next token is `try', `__transaction_atomic', or
20957      `__transaction_relaxed`, then we are looking at either function-try-block
20958      or function-transaction-block.  Note that all of these include the
20959      function-body.  */
20960   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRANSACTION_ATOMIC))
20961     ctor_initializer_p = cp_parser_function_transaction (parser,
20962         RID_TRANSACTION_ATOMIC);
20963   else if (cp_lexer_next_token_is_keyword (parser->lexer,
20964       RID_TRANSACTION_RELAXED))
20965     ctor_initializer_p = cp_parser_function_transaction (parser,
20966         RID_TRANSACTION_RELAXED);
20967   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
20968     ctor_initializer_p = cp_parser_function_try_block (parser);
20969   else
20970     ctor_initializer_p
20971       = cp_parser_ctor_initializer_opt_and_function_body (parser);
20972
20973   finish_lambda_scope ();
20974
20975   /* Finish the function.  */
20976   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
20977                         (inline_p ? 2 : 0));
20978   /* Generate code for it, if necessary.  */
20979   expand_or_defer_fn (fn);
20980   /* Restore the saved values.  */
20981   parser->in_unbraced_linkage_specification_p
20982     = saved_in_unbraced_linkage_specification_p;
20983   parser->num_template_parameter_lists
20984     = saved_num_template_parameter_lists;
20985   parser->in_function_body = saved_in_function_body;
20986
20987   return fn;
20988 }
20989
20990 /* Parse a template-declaration, assuming that the `export' (and
20991    `extern') keywords, if present, has already been scanned.  MEMBER_P
20992    is as for cp_parser_template_declaration.  */
20993
20994 static void
20995 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
20996 {
20997   tree decl = NULL_TREE;
20998   VEC (deferred_access_check,gc) *checks;
20999   tree parameter_list;
21000   bool friend_p = false;
21001   bool need_lang_pop;
21002   cp_token *token;
21003
21004   /* Look for the `template' keyword.  */
21005   token = cp_lexer_peek_token (parser->lexer);
21006   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE))
21007     return;
21008
21009   /* And the `<'.  */
21010   if (!cp_parser_require (parser, CPP_LESS, RT_LESS))
21011     return;
21012   if (at_class_scope_p () && current_function_decl)
21013     {
21014       /* 14.5.2.2 [temp.mem]
21015
21016          A local class shall not have member templates.  */
21017       error_at (token->location,
21018                 "invalid declaration of member template in local class");
21019       cp_parser_skip_to_end_of_block_or_statement (parser);
21020       return;
21021     }
21022   /* [temp]
21023
21024      A template ... shall not have C linkage.  */
21025   if (current_lang_name == lang_name_c)
21026     {
21027       error_at (token->location, "template with C linkage");
21028       /* Give it C++ linkage to avoid confusing other parts of the
21029          front end.  */
21030       push_lang_context (lang_name_cplusplus);
21031       need_lang_pop = true;
21032     }
21033   else
21034     need_lang_pop = false;
21035
21036   /* We cannot perform access checks on the template parameter
21037      declarations until we know what is being declared, just as we
21038      cannot check the decl-specifier list.  */
21039   push_deferring_access_checks (dk_deferred);
21040
21041   /* If the next token is `>', then we have an invalid
21042      specialization.  Rather than complain about an invalid template
21043      parameter, issue an error message here.  */
21044   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
21045     {
21046       cp_parser_error (parser, "invalid explicit specialization");
21047       begin_specialization ();
21048       parameter_list = NULL_TREE;
21049     }
21050   else
21051     {
21052       /* Parse the template parameters.  */
21053       parameter_list = cp_parser_template_parameter_list (parser);
21054       fixup_template_parms ();
21055     }
21056
21057   /* Get the deferred access checks from the parameter list.  These
21058      will be checked once we know what is being declared, as for a
21059      member template the checks must be performed in the scope of the
21060      class containing the member.  */
21061   checks = get_deferred_access_checks ();
21062
21063   /* Look for the `>'.  */
21064   cp_parser_skip_to_end_of_template_parameter_list (parser);
21065   /* We just processed one more parameter list.  */
21066   ++parser->num_template_parameter_lists;
21067   /* If the next token is `template', there are more template
21068      parameters.  */
21069   if (cp_lexer_next_token_is_keyword (parser->lexer,
21070                                       RID_TEMPLATE))
21071     cp_parser_template_declaration_after_export (parser, member_p);
21072   else if (cxx_dialect >= cxx0x
21073            && cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
21074     decl = cp_parser_alias_declaration (parser);
21075   else
21076     {
21077       /* There are no access checks when parsing a template, as we do not
21078          know if a specialization will be a friend.  */
21079       push_deferring_access_checks (dk_no_check);
21080       token = cp_lexer_peek_token (parser->lexer);
21081       decl = cp_parser_single_declaration (parser,
21082                                            checks,
21083                                            member_p,
21084                                            /*explicit_specialization_p=*/false,
21085                                            &friend_p);
21086       pop_deferring_access_checks ();
21087
21088       /* If this is a member template declaration, let the front
21089          end know.  */
21090       if (member_p && !friend_p && decl)
21091         {
21092           if (TREE_CODE (decl) == TYPE_DECL)
21093             cp_parser_check_access_in_redeclaration (decl, token->location);
21094
21095           decl = finish_member_template_decl (decl);
21096         }
21097       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
21098         make_friend_class (current_class_type, TREE_TYPE (decl),
21099                            /*complain=*/true);
21100     }
21101   /* We are done with the current parameter list.  */
21102   --parser->num_template_parameter_lists;
21103
21104   pop_deferring_access_checks ();
21105
21106   /* Finish up.  */
21107   finish_template_decl (parameter_list);
21108
21109   /* Check the template arguments for a literal operator template.  */
21110   if (decl
21111       && (TREE_CODE (decl) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (decl))
21112       && UDLIT_OPER_P (DECL_NAME (decl)))
21113     {
21114       bool ok = true;
21115       if (parameter_list == NULL_TREE)
21116         ok = false;
21117       else
21118         {
21119           int num_parms = TREE_VEC_LENGTH (parameter_list);
21120           if (num_parms != 1)
21121             ok = false;
21122           else
21123             {
21124               tree parm_list = TREE_VEC_ELT (parameter_list, 0);
21125               tree parm = INNERMOST_TEMPLATE_PARMS (parm_list);
21126               if (TREE_TYPE (parm) != char_type_node
21127                   || !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
21128                 ok = false;
21129             }
21130         }
21131       if (!ok)
21132         error ("literal operator template %qD has invalid parameter list."
21133                "  Expected non-type template argument pack <char...>",
21134                decl);
21135     }
21136   /* Register member declarations.  */
21137   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
21138     finish_member_declaration (decl);
21139   /* For the erroneous case of a template with C linkage, we pushed an
21140      implicit C++ linkage scope; exit that scope now.  */
21141   if (need_lang_pop)
21142     pop_lang_context ();
21143   /* If DECL is a function template, we must return to parse it later.
21144      (Even though there is no definition, there might be default
21145      arguments that need handling.)  */
21146   if (member_p && decl
21147       && (TREE_CODE (decl) == FUNCTION_DECL
21148           || DECL_FUNCTION_TEMPLATE_P (decl)))
21149     VEC_safe_push (tree, gc, unparsed_funs_with_definitions, decl);
21150 }
21151
21152 /* Perform the deferred access checks from a template-parameter-list.
21153    CHECKS is a TREE_LIST of access checks, as returned by
21154    get_deferred_access_checks.  */
21155
21156 static void
21157 cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
21158 {
21159   ++processing_template_parmlist;
21160   perform_access_checks (checks);
21161   --processing_template_parmlist;
21162 }
21163
21164 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
21165    `function-definition' sequence.  MEMBER_P is true, this declaration
21166    appears in a class scope.
21167
21168    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
21169    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
21170
21171 static tree
21172 cp_parser_single_declaration (cp_parser* parser,
21173                               VEC (deferred_access_check,gc)* checks,
21174                               bool member_p,
21175                               bool explicit_specialization_p,
21176                               bool* friend_p)
21177 {
21178   int declares_class_or_enum;
21179   tree decl = NULL_TREE;
21180   cp_decl_specifier_seq decl_specifiers;
21181   bool function_definition_p = false;
21182   cp_token *decl_spec_token_start;
21183
21184   /* This function is only used when processing a template
21185      declaration.  */
21186   gcc_assert (innermost_scope_kind () == sk_template_parms
21187               || innermost_scope_kind () == sk_template_spec);
21188
21189   /* Defer access checks until we know what is being declared.  */
21190   push_deferring_access_checks (dk_deferred);
21191
21192   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
21193      alternative.  */
21194   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
21195   cp_parser_decl_specifier_seq (parser,
21196                                 CP_PARSER_FLAGS_OPTIONAL,
21197                                 &decl_specifiers,
21198                                 &declares_class_or_enum);
21199   if (friend_p)
21200     *friend_p = cp_parser_friend_p (&decl_specifiers);
21201
21202   /* There are no template typedefs.  */
21203   if (decl_specifiers.specs[(int) ds_typedef])
21204     {
21205       error_at (decl_spec_token_start->location,
21206                 "template declaration of %<typedef%>");
21207       decl = error_mark_node;
21208     }
21209
21210   /* Gather up the access checks that occurred the
21211      decl-specifier-seq.  */
21212   stop_deferring_access_checks ();
21213
21214   /* Check for the declaration of a template class.  */
21215   if (declares_class_or_enum)
21216     {
21217       if (cp_parser_declares_only_class_p (parser))
21218         {
21219           decl = shadow_tag (&decl_specifiers);
21220
21221           /* In this case:
21222
21223                struct C {
21224                  friend template <typename T> struct A<T>::B;
21225                };
21226
21227              A<T>::B will be represented by a TYPENAME_TYPE, and
21228              therefore not recognized by shadow_tag.  */
21229           if (friend_p && *friend_p
21230               && !decl
21231               && decl_specifiers.type
21232               && TYPE_P (decl_specifiers.type))
21233             decl = decl_specifiers.type;
21234
21235           if (decl && decl != error_mark_node)
21236             decl = TYPE_NAME (decl);
21237           else
21238             decl = error_mark_node;
21239
21240           /* Perform access checks for template parameters.  */
21241           cp_parser_perform_template_parameter_access_checks (checks);
21242         }
21243     }
21244
21245   /* Complain about missing 'typename' or other invalid type names.  */
21246   if (!decl_specifiers.any_type_specifiers_p
21247       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
21248     {
21249       /* cp_parser_parse_and_diagnose_invalid_type_name calls
21250          cp_parser_skip_to_end_of_block_or_statement, so don't try to parse
21251          the rest of this declaration.  */
21252       decl = error_mark_node;
21253       goto out;
21254     }
21255
21256   /* If it's not a template class, try for a template function.  If
21257      the next token is a `;', then this declaration does not declare
21258      anything.  But, if there were errors in the decl-specifiers, then
21259      the error might well have come from an attempted class-specifier.
21260      In that case, there's no need to warn about a missing declarator.  */
21261   if (!decl
21262       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
21263           || decl_specifiers.type != error_mark_node))
21264     {
21265       decl = cp_parser_init_declarator (parser,
21266                                         &decl_specifiers,
21267                                         checks,
21268                                         /*function_definition_allowed_p=*/true,
21269                                         member_p,
21270                                         declares_class_or_enum,
21271                                         &function_definition_p,
21272                                         NULL);
21273
21274     /* 7.1.1-1 [dcl.stc]
21275
21276        A storage-class-specifier shall not be specified in an explicit
21277        specialization...  */
21278     if (decl
21279         && explicit_specialization_p
21280         && decl_specifiers.storage_class != sc_none)
21281       {
21282         error_at (decl_spec_token_start->location,
21283                   "explicit template specialization cannot have a storage class");
21284         decl = error_mark_node;
21285       }
21286     }
21287
21288   /* Look for a trailing `;' after the declaration.  */
21289   if (!function_definition_p
21290       && (decl == error_mark_node
21291           || !cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON)))
21292     cp_parser_skip_to_end_of_block_or_statement (parser);
21293
21294  out:
21295   pop_deferring_access_checks ();
21296
21297   /* Clear any current qualification; whatever comes next is the start
21298      of something new.  */
21299   parser->scope = NULL_TREE;
21300   parser->qualifying_scope = NULL_TREE;
21301   parser->object_scope = NULL_TREE;
21302
21303   return decl;
21304 }
21305
21306 /* Parse a cast-expression that is not the operand of a unary "&".  */
21307
21308 static tree
21309 cp_parser_simple_cast_expression (cp_parser *parser)
21310 {
21311   return cp_parser_cast_expression (parser, /*address_p=*/false,
21312                                     /*cast_p=*/false, NULL);
21313 }
21314
21315 /* Parse a functional cast to TYPE.  Returns an expression
21316    representing the cast.  */
21317
21318 static tree
21319 cp_parser_functional_cast (cp_parser* parser, tree type)
21320 {
21321   VEC(tree,gc) *vec;
21322   tree expression_list;
21323   tree cast;
21324   bool nonconst_p;
21325
21326   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
21327     {
21328       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
21329       expression_list = cp_parser_braced_list (parser, &nonconst_p);
21330       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
21331       if (TREE_CODE (type) == TYPE_DECL)
21332         type = TREE_TYPE (type);
21333       return finish_compound_literal (type, expression_list,
21334                                       tf_warning_or_error);
21335     }
21336
21337
21338   vec = cp_parser_parenthesized_expression_list (parser, non_attr,
21339                                                  /*cast_p=*/true,
21340                                                  /*allow_expansion_p=*/true,
21341                                                  /*non_constant_p=*/NULL);
21342   if (vec == NULL)
21343     expression_list = error_mark_node;
21344   else
21345     {
21346       expression_list = build_tree_list_vec (vec);
21347       release_tree_vector (vec);
21348     }
21349
21350   cast = build_functional_cast (type, expression_list,
21351                                 tf_warning_or_error);
21352   /* [expr.const]/1: In an integral constant expression "only type
21353      conversions to integral or enumeration type can be used".  */
21354   if (TREE_CODE (type) == TYPE_DECL)
21355     type = TREE_TYPE (type);
21356   if (cast != error_mark_node
21357       && !cast_valid_in_integral_constant_expression_p (type)
21358       && cp_parser_non_integral_constant_expression (parser,
21359                                                      NIC_CONSTRUCTOR))
21360     return error_mark_node;
21361   return cast;
21362 }
21363
21364 /* Save the tokens that make up the body of a member function defined
21365    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
21366    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
21367    specifiers applied to the declaration.  Returns the FUNCTION_DECL
21368    for the member function.  */
21369
21370 static tree
21371 cp_parser_save_member_function_body (cp_parser* parser,
21372                                      cp_decl_specifier_seq *decl_specifiers,
21373                                      cp_declarator *declarator,
21374                                      tree attributes)
21375 {
21376   cp_token *first;
21377   cp_token *last;
21378   tree fn;
21379
21380   /* Create the FUNCTION_DECL.  */
21381   fn = grokmethod (decl_specifiers, declarator, attributes);
21382   /* If something went badly wrong, bail out now.  */
21383   if (fn == error_mark_node)
21384     {
21385       /* If there's a function-body, skip it.  */
21386       if (cp_parser_token_starts_function_definition_p
21387           (cp_lexer_peek_token (parser->lexer)))
21388         cp_parser_skip_to_end_of_block_or_statement (parser);
21389       return error_mark_node;
21390     }
21391
21392   /* Remember it, if there default args to post process.  */
21393   cp_parser_save_default_args (parser, fn);
21394
21395   /* Save away the tokens that make up the body of the
21396      function.  */
21397   first = parser->lexer->next_token;
21398   /* We can have braced-init-list mem-initializers before the fn body.  */
21399   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
21400     {
21401       cp_lexer_consume_token (parser->lexer);
21402       while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
21403              && cp_lexer_next_token_is_not_keyword (parser->lexer, RID_TRY))
21404         {
21405           /* cache_group will stop after an un-nested { } pair, too.  */
21406           if (cp_parser_cache_group (parser, CPP_CLOSE_PAREN, /*depth=*/0))
21407             break;
21408
21409           /* variadic mem-inits have ... after the ')'.  */
21410           if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
21411             cp_lexer_consume_token (parser->lexer);
21412         }
21413     }
21414   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
21415   /* Handle function try blocks.  */
21416   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
21417     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
21418   last = parser->lexer->next_token;
21419
21420   /* Save away the inline definition; we will process it when the
21421      class is complete.  */
21422   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
21423   DECL_PENDING_INLINE_P (fn) = 1;
21424
21425   /* We need to know that this was defined in the class, so that
21426      friend templates are handled correctly.  */
21427   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
21428
21429   /* Add FN to the queue of functions to be parsed later.  */
21430   VEC_safe_push (tree, gc, unparsed_funs_with_definitions, fn);
21431
21432   return fn;
21433 }
21434
21435 /* Save the tokens that make up the in-class initializer for a non-static
21436    data member.  Returns a DEFAULT_ARG.  */
21437
21438 static tree
21439 cp_parser_save_nsdmi (cp_parser* parser)
21440 {
21441   /* Save away the tokens that make up the body of the
21442      function.  */
21443   cp_token *first = parser->lexer->next_token;
21444   cp_token *last;
21445   tree node;
21446
21447   /* Save tokens until the next comma or semicolon.  */
21448   cp_parser_cache_group (parser, CPP_COMMA, /*depth=*/0);
21449
21450   last = parser->lexer->next_token;
21451
21452   node = make_node (DEFAULT_ARG);
21453   DEFARG_TOKENS (node) = cp_token_cache_new (first, last);
21454   DEFARG_INSTANTIATIONS (node) = NULL;
21455
21456   return node;
21457 }
21458
21459
21460 /* Parse a template-argument-list, as well as the trailing ">" (but
21461    not the opening "<").  See cp_parser_template_argument_list for the
21462    return value.  */
21463
21464 static tree
21465 cp_parser_enclosed_template_argument_list (cp_parser* parser)
21466 {
21467   tree arguments;
21468   tree saved_scope;
21469   tree saved_qualifying_scope;
21470   tree saved_object_scope;
21471   bool saved_greater_than_is_operator_p;
21472   int saved_unevaluated_operand;
21473   int saved_inhibit_evaluation_warnings;
21474
21475   /* [temp.names]
21476
21477      When parsing a template-id, the first non-nested `>' is taken as
21478      the end of the template-argument-list rather than a greater-than
21479      operator.  */
21480   saved_greater_than_is_operator_p
21481     = parser->greater_than_is_operator_p;
21482   parser->greater_than_is_operator_p = false;
21483   /* Parsing the argument list may modify SCOPE, so we save it
21484      here.  */
21485   saved_scope = parser->scope;
21486   saved_qualifying_scope = parser->qualifying_scope;
21487   saved_object_scope = parser->object_scope;
21488   /* We need to evaluate the template arguments, even though this
21489      template-id may be nested within a "sizeof".  */
21490   saved_unevaluated_operand = cp_unevaluated_operand;
21491   cp_unevaluated_operand = 0;
21492   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
21493   c_inhibit_evaluation_warnings = 0;
21494   /* Parse the template-argument-list itself.  */
21495   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER)
21496       || cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
21497     arguments = NULL_TREE;
21498   else
21499     arguments = cp_parser_template_argument_list (parser);
21500   /* Look for the `>' that ends the template-argument-list. If we find
21501      a '>>' instead, it's probably just a typo.  */
21502   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
21503     {
21504       if (cxx_dialect != cxx98)
21505         {
21506           /* In C++0x, a `>>' in a template argument list or cast
21507              expression is considered to be two separate `>'
21508              tokens. So, change the current token to a `>', but don't
21509              consume it: it will be consumed later when the outer
21510              template argument list (or cast expression) is parsed.
21511              Note that this replacement of `>' for `>>' is necessary
21512              even if we are parsing tentatively: in the tentative
21513              case, after calling
21514              cp_parser_enclosed_template_argument_list we will always
21515              throw away all of the template arguments and the first
21516              closing `>', either because the template argument list
21517              was erroneous or because we are replacing those tokens
21518              with a CPP_TEMPLATE_ID token.  The second `>' (which will
21519              not have been thrown away) is needed either to close an
21520              outer template argument list or to complete a new-style
21521              cast.  */
21522           cp_token *token = cp_lexer_peek_token (parser->lexer);
21523           token->type = CPP_GREATER;
21524         }
21525       else if (!saved_greater_than_is_operator_p)
21526         {
21527           /* If we're in a nested template argument list, the '>>' has
21528             to be a typo for '> >'. We emit the error message, but we
21529             continue parsing and we push a '>' as next token, so that
21530             the argument list will be parsed correctly.  Note that the
21531             global source location is still on the token before the
21532             '>>', so we need to say explicitly where we want it.  */
21533           cp_token *token = cp_lexer_peek_token (parser->lexer);
21534           error_at (token->location, "%<>>%> should be %<> >%> "
21535                     "within a nested template argument list");
21536
21537           token->type = CPP_GREATER;
21538         }
21539       else
21540         {
21541           /* If this is not a nested template argument list, the '>>'
21542             is a typo for '>'. Emit an error message and continue.
21543             Same deal about the token location, but here we can get it
21544             right by consuming the '>>' before issuing the diagnostic.  */
21545           cp_token *token = cp_lexer_consume_token (parser->lexer);
21546           error_at (token->location,
21547                     "spurious %<>>%>, use %<>%> to terminate "
21548                     "a template argument list");
21549         }
21550     }
21551   else
21552     cp_parser_skip_to_end_of_template_parameter_list (parser);
21553   /* The `>' token might be a greater-than operator again now.  */
21554   parser->greater_than_is_operator_p
21555     = saved_greater_than_is_operator_p;
21556   /* Restore the SAVED_SCOPE.  */
21557   parser->scope = saved_scope;
21558   parser->qualifying_scope = saved_qualifying_scope;
21559   parser->object_scope = saved_object_scope;
21560   cp_unevaluated_operand = saved_unevaluated_operand;
21561   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
21562
21563   return arguments;
21564 }
21565
21566 /* MEMBER_FUNCTION is a member function, or a friend.  If default
21567    arguments, or the body of the function have not yet been parsed,
21568    parse them now.  */
21569
21570 static void
21571 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
21572 {
21573   timevar_push (TV_PARSE_INMETH);
21574   /* If this member is a template, get the underlying
21575      FUNCTION_DECL.  */
21576   if (DECL_FUNCTION_TEMPLATE_P (member_function))
21577     member_function = DECL_TEMPLATE_RESULT (member_function);
21578
21579   /* There should not be any class definitions in progress at this
21580      point; the bodies of members are only parsed outside of all class
21581      definitions.  */
21582   gcc_assert (parser->num_classes_being_defined == 0);
21583   /* While we're parsing the member functions we might encounter more
21584      classes.  We want to handle them right away, but we don't want
21585      them getting mixed up with functions that are currently in the
21586      queue.  */
21587   push_unparsed_function_queues (parser);
21588
21589   /* Make sure that any template parameters are in scope.  */
21590   maybe_begin_member_template_processing (member_function);
21591
21592   /* If the body of the function has not yet been parsed, parse it
21593      now.  */
21594   if (DECL_PENDING_INLINE_P (member_function))
21595     {
21596       tree function_scope;
21597       cp_token_cache *tokens;
21598
21599       /* The function is no longer pending; we are processing it.  */
21600       tokens = DECL_PENDING_INLINE_INFO (member_function);
21601       DECL_PENDING_INLINE_INFO (member_function) = NULL;
21602       DECL_PENDING_INLINE_P (member_function) = 0;
21603
21604       /* If this is a local class, enter the scope of the containing
21605          function.  */
21606       function_scope = current_function_decl;
21607       if (function_scope)
21608         push_function_context ();
21609
21610       /* Push the body of the function onto the lexer stack.  */
21611       cp_parser_push_lexer_for_tokens (parser, tokens);
21612
21613       /* Let the front end know that we going to be defining this
21614          function.  */
21615       start_preparsed_function (member_function, NULL_TREE,
21616                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
21617
21618       /* Don't do access checking if it is a templated function.  */
21619       if (processing_template_decl)
21620         push_deferring_access_checks (dk_no_check);
21621
21622       /* Now, parse the body of the function.  */
21623       cp_parser_function_definition_after_declarator (parser,
21624                                                       /*inline_p=*/true);
21625
21626       if (processing_template_decl)
21627         pop_deferring_access_checks ();
21628
21629       /* Leave the scope of the containing function.  */
21630       if (function_scope)
21631         pop_function_context ();
21632       cp_parser_pop_lexer (parser);
21633     }
21634
21635   /* Remove any template parameters from the symbol table.  */
21636   maybe_end_member_template_processing ();
21637
21638   /* Restore the queue.  */
21639   pop_unparsed_function_queues (parser);
21640   timevar_pop (TV_PARSE_INMETH);
21641 }
21642
21643 /* If DECL contains any default args, remember it on the unparsed
21644    functions queue.  */
21645
21646 static void
21647 cp_parser_save_default_args (cp_parser* parser, tree decl)
21648 {
21649   tree probe;
21650
21651   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
21652        probe;
21653        probe = TREE_CHAIN (probe))
21654     if (TREE_PURPOSE (probe))
21655       {
21656         cp_default_arg_entry *entry
21657           = VEC_safe_push (cp_default_arg_entry, gc,
21658                            unparsed_funs_with_default_args, NULL);
21659         entry->class_type = current_class_type;
21660         entry->decl = decl;
21661         break;
21662       }
21663 }
21664
21665 /* DEFAULT_ARG contains the saved tokens for the initializer of DECL,
21666    which is either a FIELD_DECL or PARM_DECL.  Parse it and return
21667    the result.  For a PARM_DECL, PARMTYPE is the corresponding type
21668    from the parameter-type-list.  */
21669
21670 static tree
21671 cp_parser_late_parse_one_default_arg (cp_parser *parser, tree decl,
21672                                       tree default_arg, tree parmtype)
21673 {
21674   cp_token_cache *tokens;
21675   tree parsed_arg;
21676   bool dummy;
21677
21678   /* Push the saved tokens for the default argument onto the parser's
21679      lexer stack.  */
21680   tokens = DEFARG_TOKENS (default_arg);
21681   cp_parser_push_lexer_for_tokens (parser, tokens);
21682
21683   start_lambda_scope (decl);
21684
21685   /* Parse the default argument.  */
21686   parsed_arg = cp_parser_initializer (parser, &dummy, &dummy);
21687   if (BRACE_ENCLOSED_INITIALIZER_P (parsed_arg))
21688     maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
21689
21690   finish_lambda_scope ();
21691
21692   if (!processing_template_decl)
21693     {
21694       /* In a non-template class, check conversions now.  In a template,
21695          we'll wait and instantiate these as needed.  */
21696       if (TREE_CODE (decl) == PARM_DECL)
21697         parsed_arg = check_default_argument (parmtype, parsed_arg);
21698       else
21699         {
21700           int flags = LOOKUP_IMPLICIT;
21701           if (BRACE_ENCLOSED_INITIALIZER_P (parsed_arg)
21702               && CONSTRUCTOR_IS_DIRECT_INIT (parsed_arg))
21703             flags = LOOKUP_NORMAL;
21704           parsed_arg = digest_init_flags (TREE_TYPE (decl), parsed_arg, flags);
21705         }
21706     }
21707
21708   /* If the token stream has not been completely used up, then
21709      there was extra junk after the end of the default
21710      argument.  */
21711   if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
21712     {
21713       if (TREE_CODE (decl) == PARM_DECL)
21714         cp_parser_error (parser, "expected %<,%>");
21715       else
21716         cp_parser_error (parser, "expected %<;%>");
21717     }
21718
21719   /* Revert to the main lexer.  */
21720   cp_parser_pop_lexer (parser);
21721
21722   return parsed_arg;
21723 }
21724
21725 /* FIELD is a non-static data member with an initializer which we saved for
21726    later; parse it now.  */
21727
21728 static void
21729 cp_parser_late_parsing_nsdmi (cp_parser *parser, tree field)
21730 {
21731   tree def;
21732
21733   push_unparsed_function_queues (parser);
21734   def = cp_parser_late_parse_one_default_arg (parser, field,
21735                                               DECL_INITIAL (field),
21736                                               NULL_TREE);
21737   pop_unparsed_function_queues (parser);
21738
21739   DECL_INITIAL (field) = def;
21740 }
21741
21742 /* FN is a FUNCTION_DECL which may contains a parameter with an
21743    unparsed DEFAULT_ARG.  Parse the default args now.  This function
21744    assumes that the current scope is the scope in which the default
21745    argument should be processed.  */
21746
21747 static void
21748 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
21749 {
21750   bool saved_local_variables_forbidden_p;
21751   tree parm, parmdecl;
21752
21753   /* While we're parsing the default args, we might (due to the
21754      statement expression extension) encounter more classes.  We want
21755      to handle them right away, but we don't want them getting mixed
21756      up with default args that are currently in the queue.  */
21757   push_unparsed_function_queues (parser);
21758
21759   /* Local variable names (and the `this' keyword) may not appear
21760      in a default argument.  */
21761   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
21762   parser->local_variables_forbidden_p = true;
21763
21764   push_defarg_context (fn);
21765
21766   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn)),
21767          parmdecl = DECL_ARGUMENTS (fn);
21768        parm && parm != void_list_node;
21769        parm = TREE_CHAIN (parm),
21770          parmdecl = DECL_CHAIN (parmdecl))
21771     {
21772       tree default_arg = TREE_PURPOSE (parm);
21773       tree parsed_arg;
21774       VEC(tree,gc) *insts;
21775       tree copy;
21776       unsigned ix;
21777
21778       if (!default_arg)
21779         continue;
21780
21781       if (TREE_CODE (default_arg) != DEFAULT_ARG)
21782         /* This can happen for a friend declaration for a function
21783            already declared with default arguments.  */
21784         continue;
21785
21786       parsed_arg
21787         = cp_parser_late_parse_one_default_arg (parser, parmdecl,
21788                                                 default_arg,
21789                                                 TREE_VALUE (parm));
21790       if (parsed_arg == error_mark_node)
21791         {
21792           continue;
21793         }
21794
21795       TREE_PURPOSE (parm) = parsed_arg;
21796
21797       /* Update any instantiations we've already created.  */
21798       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
21799            VEC_iterate (tree, insts, ix, copy); ix++)
21800         TREE_PURPOSE (copy) = parsed_arg;
21801     }
21802
21803   pop_defarg_context ();
21804
21805   /* Make sure no default arg is missing.  */
21806   check_default_args (fn);
21807
21808   /* Restore the state of local_variables_forbidden_p.  */
21809   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
21810
21811   /* Restore the queue.  */
21812   pop_unparsed_function_queues (parser);
21813 }
21814
21815 /* Parse the operand of `sizeof' (or a similar operator).  Returns
21816    either a TYPE or an expression, depending on the form of the
21817    input.  The KEYWORD indicates which kind of expression we have
21818    encountered.  */
21819
21820 static tree
21821 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
21822 {
21823   tree expr = NULL_TREE;
21824   const char *saved_message;
21825   char *tmp;
21826   bool saved_integral_constant_expression_p;
21827   bool saved_non_integral_constant_expression_p;
21828   bool pack_expansion_p = false;
21829
21830   /* Types cannot be defined in a `sizeof' expression.  Save away the
21831      old message.  */
21832   saved_message = parser->type_definition_forbidden_message;
21833   /* And create the new one.  */
21834   tmp = concat ("types may not be defined in %<",
21835                 IDENTIFIER_POINTER (ridpointers[keyword]),
21836                 "%> expressions", NULL);
21837   parser->type_definition_forbidden_message = tmp;
21838
21839   /* The restrictions on constant-expressions do not apply inside
21840      sizeof expressions.  */
21841   saved_integral_constant_expression_p
21842     = parser->integral_constant_expression_p;
21843   saved_non_integral_constant_expression_p
21844     = parser->non_integral_constant_expression_p;
21845   parser->integral_constant_expression_p = false;
21846
21847   /* If it's a `...', then we are computing the length of a parameter
21848      pack.  */
21849   if (keyword == RID_SIZEOF
21850       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
21851     {
21852       /* Consume the `...'.  */
21853       cp_lexer_consume_token (parser->lexer);
21854       maybe_warn_variadic_templates ();
21855
21856       /* Note that this is an expansion.  */
21857       pack_expansion_p = true;
21858     }
21859
21860   /* Do not actually evaluate the expression.  */
21861   ++cp_unevaluated_operand;
21862   ++c_inhibit_evaluation_warnings;
21863   /* If it's a `(', then we might be looking at the type-id
21864      construction.  */
21865   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
21866     {
21867       tree type;
21868       bool saved_in_type_id_in_expr_p;
21869
21870       /* We can't be sure yet whether we're looking at a type-id or an
21871          expression.  */
21872       cp_parser_parse_tentatively (parser);
21873       /* Consume the `('.  */
21874       cp_lexer_consume_token (parser->lexer);
21875       /* Parse the type-id.  */
21876       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
21877       parser->in_type_id_in_expr_p = true;
21878       type = cp_parser_type_id (parser);
21879       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
21880       /* Now, look for the trailing `)'.  */
21881       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
21882       /* If all went well, then we're done.  */
21883       if (cp_parser_parse_definitely (parser))
21884         {
21885           cp_decl_specifier_seq decl_specs;
21886
21887           /* Build a trivial decl-specifier-seq.  */
21888           clear_decl_specs (&decl_specs);
21889           decl_specs.type = type;
21890
21891           /* Call grokdeclarator to figure out what type this is.  */
21892           expr = grokdeclarator (NULL,
21893                                  &decl_specs,
21894                                  TYPENAME,
21895                                  /*initialized=*/0,
21896                                  /*attrlist=*/NULL);
21897         }
21898     }
21899
21900   /* If the type-id production did not work out, then we must be
21901      looking at the unary-expression production.  */
21902   if (!expr)
21903     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
21904                                        /*cast_p=*/false, NULL);
21905
21906   if (pack_expansion_p)
21907     /* Build a pack expansion. */
21908     expr = make_pack_expansion (expr);
21909
21910   /* Go back to evaluating expressions.  */
21911   --cp_unevaluated_operand;
21912   --c_inhibit_evaluation_warnings;
21913
21914   /* Free the message we created.  */
21915   free (tmp);
21916   /* And restore the old one.  */
21917   parser->type_definition_forbidden_message = saved_message;
21918   parser->integral_constant_expression_p
21919     = saved_integral_constant_expression_p;
21920   parser->non_integral_constant_expression_p
21921     = saved_non_integral_constant_expression_p;
21922
21923   return expr;
21924 }
21925
21926 /* If the current declaration has no declarator, return true.  */
21927
21928 static bool
21929 cp_parser_declares_only_class_p (cp_parser *parser)
21930 {
21931   /* If the next token is a `;' or a `,' then there is no
21932      declarator.  */
21933   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
21934           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
21935 }
21936
21937 /* Update the DECL_SPECS to reflect the storage class indicated by
21938    KEYWORD.  */
21939
21940 static void
21941 cp_parser_set_storage_class (cp_parser *parser,
21942                              cp_decl_specifier_seq *decl_specs,
21943                              enum rid keyword,
21944                              location_t location)
21945 {
21946   cp_storage_class storage_class;
21947
21948   if (parser->in_unbraced_linkage_specification_p)
21949     {
21950       error_at (location, "invalid use of %qD in linkage specification",
21951                 ridpointers[keyword]);
21952       return;
21953     }
21954   else if (decl_specs->storage_class != sc_none)
21955     {
21956       decl_specs->conflicting_specifiers_p = true;
21957       return;
21958     }
21959
21960   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
21961       && decl_specs->specs[(int) ds_thread])
21962     {
21963       error_at (location, "%<__thread%> before %qD", ridpointers[keyword]);
21964       decl_specs->specs[(int) ds_thread] = 0;
21965     }
21966
21967   switch (keyword)
21968     {
21969     case RID_AUTO:
21970       storage_class = sc_auto;
21971       break;
21972     case RID_REGISTER:
21973       storage_class = sc_register;
21974       break;
21975     case RID_STATIC:
21976       storage_class = sc_static;
21977       break;
21978     case RID_EXTERN:
21979       storage_class = sc_extern;
21980       break;
21981     case RID_MUTABLE:
21982       storage_class = sc_mutable;
21983       break;
21984     default:
21985       gcc_unreachable ();
21986     }
21987   decl_specs->storage_class = storage_class;
21988
21989   /* A storage class specifier cannot be applied alongside a typedef 
21990      specifier. If there is a typedef specifier present then set 
21991      conflicting_specifiers_p which will trigger an error later
21992      on in grokdeclarator. */
21993   if (decl_specs->specs[(int)ds_typedef])
21994     decl_specs->conflicting_specifiers_p = true;
21995 }
21996
21997 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If TYPE_DEFINITION_P
21998    is true, the type is a class or enum definition.  */
21999
22000 static void
22001 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
22002                               tree type_spec,
22003                               location_t location,
22004                               bool type_definition_p)
22005 {
22006   decl_specs->any_specifiers_p = true;
22007
22008   /* If the user tries to redeclare bool, char16_t, char32_t, or wchar_t
22009      (with, for example, in "typedef int wchar_t;") we remember that
22010      this is what happened.  In system headers, we ignore these
22011      declarations so that G++ can work with system headers that are not
22012      C++-safe.  */
22013   if (decl_specs->specs[(int) ds_typedef]
22014       && !type_definition_p
22015       && (type_spec == boolean_type_node
22016           || type_spec == char16_type_node
22017           || type_spec == char32_type_node
22018           || type_spec == wchar_type_node)
22019       && (decl_specs->type
22020           || decl_specs->specs[(int) ds_long]
22021           || decl_specs->specs[(int) ds_short]
22022           || decl_specs->specs[(int) ds_unsigned]
22023           || decl_specs->specs[(int) ds_signed]))
22024     {
22025       decl_specs->redefined_builtin_type = type_spec;
22026       if (!decl_specs->type)
22027         {
22028           decl_specs->type = type_spec;
22029           decl_specs->type_definition_p = false;
22030           decl_specs->type_location = location;
22031         }
22032     }
22033   else if (decl_specs->type)
22034     decl_specs->multiple_types_p = true;
22035   else
22036     {
22037       decl_specs->type = type_spec;
22038       decl_specs->type_definition_p = type_definition_p;
22039       decl_specs->redefined_builtin_type = NULL_TREE;
22040       decl_specs->type_location = location;
22041     }
22042 }
22043
22044 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
22045    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
22046
22047 static bool
22048 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
22049 {
22050   return decl_specifiers->specs[(int) ds_friend] != 0;
22051 }
22052
22053 /* Issue an error message indicating that TOKEN_DESC was expected.
22054    If KEYWORD is true, it indicated this function is called by
22055    cp_parser_require_keword and the required token can only be
22056    a indicated keyword. */
22057
22058 static void
22059 cp_parser_required_error (cp_parser *parser,
22060                           required_token token_desc,
22061                           bool keyword)
22062 {
22063   switch (token_desc)
22064     {
22065       case RT_NEW:
22066         cp_parser_error (parser, "expected %<new%>");
22067         return;
22068       case RT_DELETE:
22069         cp_parser_error (parser, "expected %<delete%>");
22070         return;
22071       case RT_RETURN:
22072         cp_parser_error (parser, "expected %<return%>");
22073         return;
22074       case RT_WHILE:
22075         cp_parser_error (parser, "expected %<while%>");
22076         return;
22077       case RT_EXTERN:
22078         cp_parser_error (parser, "expected %<extern%>");
22079         return;
22080       case RT_STATIC_ASSERT:
22081         cp_parser_error (parser, "expected %<static_assert%>");
22082         return;
22083       case RT_DECLTYPE:
22084         cp_parser_error (parser, "expected %<decltype%>");
22085         return;
22086       case RT_OPERATOR:
22087         cp_parser_error (parser, "expected %<operator%>");
22088         return;
22089       case RT_CLASS:
22090         cp_parser_error (parser, "expected %<class%>");
22091         return;
22092       case RT_TEMPLATE:
22093         cp_parser_error (parser, "expected %<template%>");
22094         return;
22095       case RT_NAMESPACE:
22096         cp_parser_error (parser, "expected %<namespace%>");
22097         return;
22098       case RT_USING:
22099         cp_parser_error (parser, "expected %<using%>");
22100         return;
22101       case RT_ASM:
22102         cp_parser_error (parser, "expected %<asm%>");
22103         return;
22104       case RT_TRY:
22105         cp_parser_error (parser, "expected %<try%>");
22106         return;
22107       case RT_CATCH:
22108         cp_parser_error (parser, "expected %<catch%>");
22109         return;
22110       case RT_THROW:
22111         cp_parser_error (parser, "expected %<throw%>");
22112         return;
22113       case RT_LABEL:
22114         cp_parser_error (parser, "expected %<__label__%>");
22115         return;
22116       case RT_AT_TRY:
22117         cp_parser_error (parser, "expected %<@try%>");
22118         return;
22119       case RT_AT_SYNCHRONIZED:
22120         cp_parser_error (parser, "expected %<@synchronized%>");
22121         return;
22122       case RT_AT_THROW:
22123         cp_parser_error (parser, "expected %<@throw%>");
22124         return;
22125       case RT_TRANSACTION_ATOMIC:
22126         cp_parser_error (parser, "expected %<__transaction_atomic%>");
22127         return;
22128       case RT_TRANSACTION_RELAXED:
22129         cp_parser_error (parser, "expected %<__transaction_relaxed%>");
22130         return;
22131       default:
22132         break;
22133     }
22134   if (!keyword)
22135     {
22136       switch (token_desc)
22137         {
22138           case RT_SEMICOLON:
22139             cp_parser_error (parser, "expected %<;%>");
22140             return;
22141           case RT_OPEN_PAREN:
22142             cp_parser_error (parser, "expected %<(%>");
22143             return;
22144           case RT_CLOSE_BRACE:
22145             cp_parser_error (parser, "expected %<}%>");
22146             return;
22147           case RT_OPEN_BRACE:
22148             cp_parser_error (parser, "expected %<{%>");
22149             return;
22150           case RT_CLOSE_SQUARE:
22151             cp_parser_error (parser, "expected %<]%>");
22152             return;
22153           case RT_OPEN_SQUARE:
22154             cp_parser_error (parser, "expected %<[%>");
22155             return;
22156           case RT_COMMA:
22157             cp_parser_error (parser, "expected %<,%>");
22158             return;
22159           case RT_SCOPE:
22160             cp_parser_error (parser, "expected %<::%>");
22161             return;
22162           case RT_LESS:
22163             cp_parser_error (parser, "expected %<<%>");
22164             return;
22165           case RT_GREATER:
22166             cp_parser_error (parser, "expected %<>%>");
22167             return;
22168           case RT_EQ:
22169             cp_parser_error (parser, "expected %<=%>");
22170             return;
22171           case RT_ELLIPSIS:
22172             cp_parser_error (parser, "expected %<...%>");
22173             return;
22174           case RT_MULT:
22175             cp_parser_error (parser, "expected %<*%>");
22176             return;
22177           case RT_COMPL:
22178             cp_parser_error (parser, "expected %<~%>");
22179             return;
22180           case RT_COLON:
22181             cp_parser_error (parser, "expected %<:%>");
22182             return;
22183           case RT_COLON_SCOPE:
22184             cp_parser_error (parser, "expected %<:%> or %<::%>");
22185             return;
22186           case RT_CLOSE_PAREN:
22187             cp_parser_error (parser, "expected %<)%>");
22188             return;
22189           case RT_COMMA_CLOSE_PAREN:
22190             cp_parser_error (parser, "expected %<,%> or %<)%>");
22191             return;
22192           case RT_PRAGMA_EOL:
22193             cp_parser_error (parser, "expected end of line");
22194             return;
22195           case RT_NAME:
22196             cp_parser_error (parser, "expected identifier");
22197             return;
22198           case RT_SELECT:
22199             cp_parser_error (parser, "expected selection-statement");
22200             return;
22201           case RT_INTERATION:
22202             cp_parser_error (parser, "expected iteration-statement");
22203             return;
22204           case RT_JUMP:
22205             cp_parser_error (parser, "expected jump-statement");
22206             return;
22207           case RT_CLASS_KEY:
22208             cp_parser_error (parser, "expected class-key");
22209             return;
22210           case RT_CLASS_TYPENAME_TEMPLATE:
22211             cp_parser_error (parser,
22212                  "expected %<class%>, %<typename%>, or %<template%>");
22213             return;
22214           default:
22215             gcc_unreachable ();
22216         }
22217     }
22218   else
22219     gcc_unreachable ();
22220 }
22221
22222
22223
22224 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
22225    issue an error message indicating that TOKEN_DESC was expected.
22226
22227    Returns the token consumed, if the token had the appropriate type.
22228    Otherwise, returns NULL.  */
22229
22230 static cp_token *
22231 cp_parser_require (cp_parser* parser,
22232                    enum cpp_ttype type,
22233                    required_token token_desc)
22234 {
22235   if (cp_lexer_next_token_is (parser->lexer, type))
22236     return cp_lexer_consume_token (parser->lexer);
22237   else
22238     {
22239       /* Output the MESSAGE -- unless we're parsing tentatively.  */
22240       if (!cp_parser_simulate_error (parser))
22241         cp_parser_required_error (parser, token_desc, /*keyword=*/false);
22242       return NULL;
22243     }
22244 }
22245
22246 /* An error message is produced if the next token is not '>'.
22247    All further tokens are skipped until the desired token is
22248    found or '{', '}', ';' or an unbalanced ')' or ']'.  */
22249
22250 static void
22251 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
22252 {
22253   /* Current level of '< ... >'.  */
22254   unsigned level = 0;
22255   /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
22256   unsigned nesting_depth = 0;
22257
22258   /* Are we ready, yet?  If not, issue error message.  */
22259   if (cp_parser_require (parser, CPP_GREATER, RT_GREATER))
22260     return;
22261
22262   /* Skip tokens until the desired token is found.  */
22263   while (true)
22264     {
22265       /* Peek at the next token.  */
22266       switch (cp_lexer_peek_token (parser->lexer)->type)
22267         {
22268         case CPP_LESS:
22269           if (!nesting_depth)
22270             ++level;
22271           break;
22272
22273         case CPP_RSHIFT:
22274           if (cxx_dialect == cxx98)
22275             /* C++0x views the `>>' operator as two `>' tokens, but
22276                C++98 does not. */
22277             break;
22278           else if (!nesting_depth && level-- == 0)
22279             {
22280               /* We've hit a `>>' where the first `>' closes the
22281                  template argument list, and the second `>' is
22282                  spurious.  Just consume the `>>' and stop; we've
22283                  already produced at least one error.  */
22284               cp_lexer_consume_token (parser->lexer);
22285               return;
22286             }
22287           /* Fall through for C++0x, so we handle the second `>' in
22288              the `>>'.  */
22289
22290         case CPP_GREATER:
22291           if (!nesting_depth && level-- == 0)
22292             {
22293               /* We've reached the token we want, consume it and stop.  */
22294               cp_lexer_consume_token (parser->lexer);
22295               return;
22296             }
22297           break;
22298
22299         case CPP_OPEN_PAREN:
22300         case CPP_OPEN_SQUARE:
22301           ++nesting_depth;
22302           break;
22303
22304         case CPP_CLOSE_PAREN:
22305         case CPP_CLOSE_SQUARE:
22306           if (nesting_depth-- == 0)
22307             return;
22308           break;
22309
22310         case CPP_EOF:
22311         case CPP_PRAGMA_EOL:
22312         case CPP_SEMICOLON:
22313         case CPP_OPEN_BRACE:
22314         case CPP_CLOSE_BRACE:
22315           /* The '>' was probably forgotten, don't look further.  */
22316           return;
22317
22318         default:
22319           break;
22320         }
22321
22322       /* Consume this token.  */
22323       cp_lexer_consume_token (parser->lexer);
22324     }
22325 }
22326
22327 /* If the next token is the indicated keyword, consume it.  Otherwise,
22328    issue an error message indicating that TOKEN_DESC was expected.
22329
22330    Returns the token consumed, if the token had the appropriate type.
22331    Otherwise, returns NULL.  */
22332
22333 static cp_token *
22334 cp_parser_require_keyword (cp_parser* parser,
22335                            enum rid keyword,
22336                            required_token token_desc)
22337 {
22338   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
22339
22340   if (token && token->keyword != keyword)
22341     {
22342       cp_parser_required_error (parser, token_desc, /*keyword=*/true); 
22343       return NULL;
22344     }
22345
22346   return token;
22347 }
22348
22349 /* Returns TRUE iff TOKEN is a token that can begin the body of a
22350    function-definition.  */
22351
22352 static bool
22353 cp_parser_token_starts_function_definition_p (cp_token* token)
22354 {
22355   return (/* An ordinary function-body begins with an `{'.  */
22356           token->type == CPP_OPEN_BRACE
22357           /* A ctor-initializer begins with a `:'.  */
22358           || token->type == CPP_COLON
22359           /* A function-try-block begins with `try'.  */
22360           || token->keyword == RID_TRY
22361           /* A function-transaction-block begins with `__transaction_atomic'
22362              or `__transaction_relaxed'.  */
22363           || token->keyword == RID_TRANSACTION_ATOMIC
22364           || token->keyword == RID_TRANSACTION_RELAXED
22365           /* The named return value extension begins with `return'.  */
22366           || token->keyword == RID_RETURN);
22367 }
22368
22369 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
22370    definition.  */
22371
22372 static bool
22373 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
22374 {
22375   cp_token *token;
22376
22377   token = cp_lexer_peek_token (parser->lexer);
22378   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
22379 }
22380
22381 /* Returns TRUE iff the next token is the "," or ">" (or `>>', in
22382    C++0x) ending a template-argument.  */
22383
22384 static bool
22385 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
22386 {
22387   cp_token *token;
22388
22389   token = cp_lexer_peek_token (parser->lexer);
22390   return (token->type == CPP_COMMA 
22391           || token->type == CPP_GREATER
22392           || token->type == CPP_ELLIPSIS
22393           || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT));
22394 }
22395
22396 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
22397    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
22398
22399 static bool
22400 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
22401                                                      size_t n)
22402 {
22403   cp_token *token;
22404
22405   token = cp_lexer_peek_nth_token (parser->lexer, n);
22406   if (token->type == CPP_LESS)
22407     return true;
22408   /* Check for the sequence `<::' in the original code. It would be lexed as
22409      `[:', where `[' is a digraph, and there is no whitespace before
22410      `:'.  */
22411   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
22412     {
22413       cp_token *token2;
22414       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
22415       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
22416         return true;
22417     }
22418   return false;
22419 }
22420
22421 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
22422    or none_type otherwise.  */
22423
22424 static enum tag_types
22425 cp_parser_token_is_class_key (cp_token* token)
22426 {
22427   switch (token->keyword)
22428     {
22429     case RID_CLASS:
22430       return class_type;
22431     case RID_STRUCT:
22432       return record_type;
22433     case RID_UNION:
22434       return union_type;
22435
22436     default:
22437       return none_type;
22438     }
22439 }
22440
22441 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
22442
22443 static void
22444 cp_parser_check_class_key (enum tag_types class_key, tree type)
22445 {
22446   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
22447     permerror (input_location, "%qs tag used in naming %q#T",
22448             class_key == union_type ? "union"
22449              : class_key == record_type ? "struct" : "class",
22450              type);
22451 }
22452
22453 /* Issue an error message if DECL is redeclared with different
22454    access than its original declaration [class.access.spec/3].
22455    This applies to nested classes and nested class templates.
22456    [class.mem/1].  */
22457
22458 static void
22459 cp_parser_check_access_in_redeclaration (tree decl, location_t location)
22460 {
22461   if (!decl || !CLASS_TYPE_P (TREE_TYPE (decl)))
22462     return;
22463
22464   if ((TREE_PRIVATE (decl)
22465        != (current_access_specifier == access_private_node))
22466       || (TREE_PROTECTED (decl)
22467           != (current_access_specifier == access_protected_node)))
22468     error_at (location, "%qD redeclared with different access", decl);
22469 }
22470
22471 /* Look for the `template' keyword, as a syntactic disambiguator.
22472    Return TRUE iff it is present, in which case it will be
22473    consumed.  */
22474
22475 static bool
22476 cp_parser_optional_template_keyword (cp_parser *parser)
22477 {
22478   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
22479     {
22480       /* The `template' keyword can only be used within templates;
22481          outside templates the parser can always figure out what is a
22482          template and what is not.  */
22483       if (!processing_template_decl)
22484         {
22485           cp_token *token = cp_lexer_peek_token (parser->lexer);
22486           error_at (token->location,
22487                     "%<template%> (as a disambiguator) is only allowed "
22488                     "within templates");
22489           /* If this part of the token stream is rescanned, the same
22490              error message would be generated.  So, we purge the token
22491              from the stream.  */
22492           cp_lexer_purge_token (parser->lexer);
22493           return false;
22494         }
22495       else
22496         {
22497           /* Consume the `template' keyword.  */
22498           cp_lexer_consume_token (parser->lexer);
22499           return true;
22500         }
22501     }
22502
22503   return false;
22504 }
22505
22506 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
22507    set PARSER->SCOPE, and perform other related actions.  */
22508
22509 static void
22510 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
22511 {
22512   int i;
22513   struct tree_check *check_value;
22514   deferred_access_check *chk;
22515   VEC (deferred_access_check,gc) *checks;
22516
22517   /* Get the stored value.  */
22518   check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
22519   /* Perform any access checks that were deferred.  */
22520   checks = check_value->checks;
22521   if (checks)
22522     {
22523       FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
22524         perform_or_defer_access_check (chk->binfo,
22525                                        chk->decl,
22526                                        chk->diag_decl);
22527     }
22528   /* Set the scope from the stored value.  */
22529   parser->scope = check_value->value;
22530   parser->qualifying_scope = check_value->qualifying_scope;
22531   parser->object_scope = NULL_TREE;
22532 }
22533
22534 /* Consume tokens up through a non-nested END token.  Returns TRUE if we
22535    encounter the end of a block before what we were looking for.  */
22536
22537 static bool
22538 cp_parser_cache_group (cp_parser *parser,
22539                        enum cpp_ttype end,
22540                        unsigned depth)
22541 {
22542   while (true)
22543     {
22544       cp_token *token = cp_lexer_peek_token (parser->lexer);
22545
22546       /* Abort a parenthesized expression if we encounter a semicolon.  */
22547       if ((end == CPP_CLOSE_PAREN || depth == 0)
22548           && token->type == CPP_SEMICOLON)
22549         return true;
22550       /* If we've reached the end of the file, stop.  */
22551       if (token->type == CPP_EOF
22552           || (end != CPP_PRAGMA_EOL
22553               && token->type == CPP_PRAGMA_EOL))
22554         return true;
22555       if (token->type == CPP_CLOSE_BRACE && depth == 0)
22556         /* We've hit the end of an enclosing block, so there's been some
22557            kind of syntax error.  */
22558         return true;
22559
22560       /* If we're caching something finished by a comma (or semicolon),
22561          such as an NSDMI, don't consume the comma.  */
22562       if (end == CPP_COMMA
22563           && (token->type == CPP_SEMICOLON || token->type == CPP_COMMA))
22564         return false;
22565
22566       /* Consume the token.  */
22567       cp_lexer_consume_token (parser->lexer);
22568       /* See if it starts a new group.  */
22569       if (token->type == CPP_OPEN_BRACE)
22570         {
22571           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
22572           /* In theory this should probably check end == '}', but
22573              cp_parser_save_member_function_body needs it to exit
22574              after either '}' or ')' when called with ')'.  */
22575           if (depth == 0)
22576             return false;
22577         }
22578       else if (token->type == CPP_OPEN_PAREN)
22579         {
22580           cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
22581           if (depth == 0 && end == CPP_CLOSE_PAREN)
22582             return false;
22583         }
22584       else if (token->type == CPP_PRAGMA)
22585         cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
22586       else if (token->type == end)
22587         return false;
22588     }
22589 }
22590
22591 /* Begin parsing tentatively.  We always save tokens while parsing
22592    tentatively so that if the tentative parsing fails we can restore the
22593    tokens.  */
22594
22595 static void
22596 cp_parser_parse_tentatively (cp_parser* parser)
22597 {
22598   /* Enter a new parsing context.  */
22599   parser->context = cp_parser_context_new (parser->context);
22600   /* Begin saving tokens.  */
22601   cp_lexer_save_tokens (parser->lexer);
22602   /* In order to avoid repetitive access control error messages,
22603      access checks are queued up until we are no longer parsing
22604      tentatively.  */
22605   push_deferring_access_checks (dk_deferred);
22606 }
22607
22608 /* Commit to the currently active tentative parse.  */
22609
22610 static void
22611 cp_parser_commit_to_tentative_parse (cp_parser* parser)
22612 {
22613   cp_parser_context *context;
22614   cp_lexer *lexer;
22615
22616   /* Mark all of the levels as committed.  */
22617   lexer = parser->lexer;
22618   for (context = parser->context; context->next; context = context->next)
22619     {
22620       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
22621         break;
22622       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
22623       while (!cp_lexer_saving_tokens (lexer))
22624         lexer = lexer->next;
22625       cp_lexer_commit_tokens (lexer);
22626     }
22627 }
22628
22629 /* Abort the currently active tentative parse.  All consumed tokens
22630    will be rolled back, and no diagnostics will be issued.  */
22631
22632 static void
22633 cp_parser_abort_tentative_parse (cp_parser* parser)
22634 {
22635   gcc_assert (parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED
22636               || errorcount > 0);
22637   cp_parser_simulate_error (parser);
22638   /* Now, pretend that we want to see if the construct was
22639      successfully parsed.  */
22640   cp_parser_parse_definitely (parser);
22641 }
22642
22643 /* Stop parsing tentatively.  If a parse error has occurred, restore the
22644    token stream.  Otherwise, commit to the tokens we have consumed.
22645    Returns true if no error occurred; false otherwise.  */
22646
22647 static bool
22648 cp_parser_parse_definitely (cp_parser* parser)
22649 {
22650   bool error_occurred;
22651   cp_parser_context *context;
22652
22653   /* Remember whether or not an error occurred, since we are about to
22654      destroy that information.  */
22655   error_occurred = cp_parser_error_occurred (parser);
22656   /* Remove the topmost context from the stack.  */
22657   context = parser->context;
22658   parser->context = context->next;
22659   /* If no parse errors occurred, commit to the tentative parse.  */
22660   if (!error_occurred)
22661     {
22662       /* Commit to the tokens read tentatively, unless that was
22663          already done.  */
22664       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
22665         cp_lexer_commit_tokens (parser->lexer);
22666
22667       pop_to_parent_deferring_access_checks ();
22668     }
22669   /* Otherwise, if errors occurred, roll back our state so that things
22670      are just as they were before we began the tentative parse.  */
22671   else
22672     {
22673       cp_lexer_rollback_tokens (parser->lexer);
22674       pop_deferring_access_checks ();
22675     }
22676   /* Add the context to the front of the free list.  */
22677   context->next = cp_parser_context_free_list;
22678   cp_parser_context_free_list = context;
22679
22680   return !error_occurred;
22681 }
22682
22683 /* Returns true if we are parsing tentatively and are not committed to
22684    this tentative parse.  */
22685
22686 static bool
22687 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
22688 {
22689   return (cp_parser_parsing_tentatively (parser)
22690           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
22691 }
22692
22693 /* Returns nonzero iff an error has occurred during the most recent
22694    tentative parse.  */
22695
22696 static bool
22697 cp_parser_error_occurred (cp_parser* parser)
22698 {
22699   return (cp_parser_parsing_tentatively (parser)
22700           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
22701 }
22702
22703 /* Returns nonzero if GNU extensions are allowed.  */
22704
22705 static bool
22706 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
22707 {
22708   return parser->allow_gnu_extensions_p;
22709 }
22710 \f
22711 /* Objective-C++ Productions */
22712
22713
22714 /* Parse an Objective-C expression, which feeds into a primary-expression
22715    above.
22716
22717    objc-expression:
22718      objc-message-expression
22719      objc-string-literal
22720      objc-encode-expression
22721      objc-protocol-expression
22722      objc-selector-expression
22723
22724   Returns a tree representation of the expression.  */
22725
22726 static tree
22727 cp_parser_objc_expression (cp_parser* parser)
22728 {
22729   /* Try to figure out what kind of declaration is present.  */
22730   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
22731
22732   switch (kwd->type)
22733     {
22734     case CPP_OPEN_SQUARE:
22735       return cp_parser_objc_message_expression (parser);
22736
22737     case CPP_OBJC_STRING:
22738       kwd = cp_lexer_consume_token (parser->lexer);
22739       return objc_build_string_object (kwd->u.value);
22740
22741     case CPP_KEYWORD:
22742       switch (kwd->keyword)
22743         {
22744         case RID_AT_ENCODE:
22745           return cp_parser_objc_encode_expression (parser);
22746
22747         case RID_AT_PROTOCOL:
22748           return cp_parser_objc_protocol_expression (parser);
22749
22750         case RID_AT_SELECTOR:
22751           return cp_parser_objc_selector_expression (parser);
22752
22753         default:
22754           break;
22755         }
22756     default:
22757       error_at (kwd->location,
22758                 "misplaced %<@%D%> Objective-C++ construct",
22759                 kwd->u.value);
22760       cp_parser_skip_to_end_of_block_or_statement (parser);
22761     }
22762
22763   return error_mark_node;
22764 }
22765
22766 /* Parse an Objective-C message expression.
22767
22768    objc-message-expression:
22769      [ objc-message-receiver objc-message-args ]
22770
22771    Returns a representation of an Objective-C message.  */
22772
22773 static tree
22774 cp_parser_objc_message_expression (cp_parser* parser)
22775 {
22776   tree receiver, messageargs;
22777
22778   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
22779   receiver = cp_parser_objc_message_receiver (parser);
22780   messageargs = cp_parser_objc_message_args (parser);
22781   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
22782
22783   return objc_build_message_expr (receiver, messageargs);
22784 }
22785
22786 /* Parse an objc-message-receiver.
22787
22788    objc-message-receiver:
22789      expression
22790      simple-type-specifier
22791
22792   Returns a representation of the type or expression.  */
22793
22794 static tree
22795 cp_parser_objc_message_receiver (cp_parser* parser)
22796 {
22797   tree rcv;
22798
22799   /* An Objective-C message receiver may be either (1) a type
22800      or (2) an expression.  */
22801   cp_parser_parse_tentatively (parser);
22802   rcv = cp_parser_expression (parser, false, NULL);
22803
22804   if (cp_parser_parse_definitely (parser))
22805     return rcv;
22806
22807   rcv = cp_parser_simple_type_specifier (parser,
22808                                          /*decl_specs=*/NULL,
22809                                          CP_PARSER_FLAGS_NONE);
22810
22811   return objc_get_class_reference (rcv);
22812 }
22813
22814 /* Parse the arguments and selectors comprising an Objective-C message.
22815
22816    objc-message-args:
22817      objc-selector
22818      objc-selector-args
22819      objc-selector-args , objc-comma-args
22820
22821    objc-selector-args:
22822      objc-selector [opt] : assignment-expression
22823      objc-selector-args objc-selector [opt] : assignment-expression
22824
22825    objc-comma-args:
22826      assignment-expression
22827      objc-comma-args , assignment-expression
22828
22829    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
22830    selector arguments and TREE_VALUE containing a list of comma
22831    arguments.  */
22832
22833 static tree
22834 cp_parser_objc_message_args (cp_parser* parser)
22835 {
22836   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
22837   bool maybe_unary_selector_p = true;
22838   cp_token *token = cp_lexer_peek_token (parser->lexer);
22839
22840   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
22841     {
22842       tree selector = NULL_TREE, arg;
22843
22844       if (token->type != CPP_COLON)
22845         selector = cp_parser_objc_selector (parser);
22846
22847       /* Detect if we have a unary selector.  */
22848       if (maybe_unary_selector_p
22849           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
22850         return build_tree_list (selector, NULL_TREE);
22851
22852       maybe_unary_selector_p = false;
22853       cp_parser_require (parser, CPP_COLON, RT_COLON);
22854       arg = cp_parser_assignment_expression (parser, false, NULL);
22855
22856       sel_args
22857         = chainon (sel_args,
22858                    build_tree_list (selector, arg));
22859
22860       token = cp_lexer_peek_token (parser->lexer);
22861     }
22862
22863   /* Handle non-selector arguments, if any. */
22864   while (token->type == CPP_COMMA)
22865     {
22866       tree arg;
22867
22868       cp_lexer_consume_token (parser->lexer);
22869       arg = cp_parser_assignment_expression (parser, false, NULL);
22870
22871       addl_args
22872         = chainon (addl_args,
22873                    build_tree_list (NULL_TREE, arg));
22874
22875       token = cp_lexer_peek_token (parser->lexer);
22876     }
22877
22878   if (sel_args == NULL_TREE && addl_args == NULL_TREE)
22879     {
22880       cp_parser_error (parser, "objective-c++ message argument(s) are expected");
22881       return build_tree_list (error_mark_node, error_mark_node);
22882     }
22883
22884   return build_tree_list (sel_args, addl_args);
22885 }
22886
22887 /* Parse an Objective-C encode expression.
22888
22889    objc-encode-expression:
22890      @encode objc-typename
22891
22892    Returns an encoded representation of the type argument.  */
22893
22894 static tree
22895 cp_parser_objc_encode_expression (cp_parser* parser)
22896 {
22897   tree type;
22898   cp_token *token;
22899
22900   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
22901   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22902   token = cp_lexer_peek_token (parser->lexer);
22903   type = complete_type (cp_parser_type_id (parser));
22904   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22905
22906   if (!type)
22907     {
22908       error_at (token->location, 
22909                 "%<@encode%> must specify a type as an argument");
22910       return error_mark_node;
22911     }
22912
22913   /* This happens if we find @encode(T) (where T is a template
22914      typename or something dependent on a template typename) when
22915      parsing a template.  In that case, we can't compile it
22916      immediately, but we rather create an AT_ENCODE_EXPR which will
22917      need to be instantiated when the template is used.
22918   */
22919   if (dependent_type_p (type))
22920     {
22921       tree value = build_min (AT_ENCODE_EXPR, size_type_node, type);
22922       TREE_READONLY (value) = 1;
22923       return value;
22924     }
22925
22926   return objc_build_encode_expr (type);
22927 }
22928
22929 /* Parse an Objective-C @defs expression.  */
22930
22931 static tree
22932 cp_parser_objc_defs_expression (cp_parser *parser)
22933 {
22934   tree name;
22935
22936   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
22937   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22938   name = cp_parser_identifier (parser);
22939   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22940
22941   return objc_get_class_ivars (name);
22942 }
22943
22944 /* Parse an Objective-C protocol expression.
22945
22946   objc-protocol-expression:
22947     @protocol ( identifier )
22948
22949   Returns a representation of the protocol expression.  */
22950
22951 static tree
22952 cp_parser_objc_protocol_expression (cp_parser* parser)
22953 {
22954   tree proto;
22955
22956   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
22957   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22958   proto = cp_parser_identifier (parser);
22959   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22960
22961   return objc_build_protocol_expr (proto);
22962 }
22963
22964 /* Parse an Objective-C selector expression.
22965
22966    objc-selector-expression:
22967      @selector ( objc-method-signature )
22968
22969    objc-method-signature:
22970      objc-selector
22971      objc-selector-seq
22972
22973    objc-selector-seq:
22974      objc-selector :
22975      objc-selector-seq objc-selector :
22976
22977   Returns a representation of the method selector.  */
22978
22979 static tree
22980 cp_parser_objc_selector_expression (cp_parser* parser)
22981 {
22982   tree sel_seq = NULL_TREE;
22983   bool maybe_unary_selector_p = true;
22984   cp_token *token;
22985   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
22986
22987   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
22988   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22989   token = cp_lexer_peek_token (parser->lexer);
22990
22991   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
22992          || token->type == CPP_SCOPE)
22993     {
22994       tree selector = NULL_TREE;
22995
22996       if (token->type != CPP_COLON
22997           || token->type == CPP_SCOPE)
22998         selector = cp_parser_objc_selector (parser);
22999
23000       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
23001           && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
23002         {
23003           /* Detect if we have a unary selector.  */
23004           if (maybe_unary_selector_p)
23005             {
23006               sel_seq = selector;
23007               goto finish_selector;
23008             }
23009           else
23010             {
23011               cp_parser_error (parser, "expected %<:%>");
23012             }
23013         }
23014       maybe_unary_selector_p = false;
23015       token = cp_lexer_consume_token (parser->lexer);
23016
23017       if (token->type == CPP_SCOPE)
23018         {
23019           sel_seq
23020             = chainon (sel_seq,
23021                        build_tree_list (selector, NULL_TREE));
23022           sel_seq
23023             = chainon (sel_seq,
23024                        build_tree_list (NULL_TREE, NULL_TREE));
23025         }
23026       else
23027         sel_seq
23028           = chainon (sel_seq,
23029                      build_tree_list (selector, NULL_TREE));
23030
23031       token = cp_lexer_peek_token (parser->lexer);
23032     }
23033
23034  finish_selector:
23035   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23036
23037   return objc_build_selector_expr (loc, sel_seq);
23038 }
23039
23040 /* Parse a list of identifiers.
23041
23042    objc-identifier-list:
23043      identifier
23044      objc-identifier-list , identifier
23045
23046    Returns a TREE_LIST of identifier nodes.  */
23047
23048 static tree
23049 cp_parser_objc_identifier_list (cp_parser* parser)
23050 {
23051   tree identifier;
23052   tree list;
23053   cp_token *sep;
23054
23055   identifier = cp_parser_identifier (parser);
23056   if (identifier == error_mark_node)
23057     return error_mark_node;      
23058
23059   list = build_tree_list (NULL_TREE, identifier);
23060   sep = cp_lexer_peek_token (parser->lexer);
23061
23062   while (sep->type == CPP_COMMA)
23063     {
23064       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
23065       identifier = cp_parser_identifier (parser);
23066       if (identifier == error_mark_node)
23067         return list;
23068
23069       list = chainon (list, build_tree_list (NULL_TREE,
23070                                              identifier));
23071       sep = cp_lexer_peek_token (parser->lexer);
23072     }
23073   
23074   return list;
23075 }
23076
23077 /* Parse an Objective-C alias declaration.
23078
23079    objc-alias-declaration:
23080      @compatibility_alias identifier identifier ;
23081
23082    This function registers the alias mapping with the Objective-C front end.
23083    It returns nothing.  */
23084
23085 static void
23086 cp_parser_objc_alias_declaration (cp_parser* parser)
23087 {
23088   tree alias, orig;
23089
23090   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
23091   alias = cp_parser_identifier (parser);
23092   orig = cp_parser_identifier (parser);
23093   objc_declare_alias (alias, orig);
23094   cp_parser_consume_semicolon_at_end_of_statement (parser);
23095 }
23096
23097 /* Parse an Objective-C class forward-declaration.
23098
23099    objc-class-declaration:
23100      @class objc-identifier-list ;
23101
23102    The function registers the forward declarations with the Objective-C
23103    front end.  It returns nothing.  */
23104
23105 static void
23106 cp_parser_objc_class_declaration (cp_parser* parser)
23107 {
23108   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
23109   while (true)
23110     {
23111       tree id;
23112       
23113       id = cp_parser_identifier (parser);
23114       if (id == error_mark_node)
23115         break;
23116       
23117       objc_declare_class (id);
23118
23119       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23120         cp_lexer_consume_token (parser->lexer);
23121       else
23122         break;
23123     }
23124   cp_parser_consume_semicolon_at_end_of_statement (parser);
23125 }
23126
23127 /* Parse a list of Objective-C protocol references.
23128
23129    objc-protocol-refs-opt:
23130      objc-protocol-refs [opt]
23131
23132    objc-protocol-refs:
23133      < objc-identifier-list >
23134
23135    Returns a TREE_LIST of identifiers, if any.  */
23136
23137 static tree
23138 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
23139 {
23140   tree protorefs = NULL_TREE;
23141
23142   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
23143     {
23144       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
23145       protorefs = cp_parser_objc_identifier_list (parser);
23146       cp_parser_require (parser, CPP_GREATER, RT_GREATER);
23147     }
23148
23149   return protorefs;
23150 }
23151
23152 /* Parse a Objective-C visibility specification.  */
23153
23154 static void
23155 cp_parser_objc_visibility_spec (cp_parser* parser)
23156 {
23157   cp_token *vis = cp_lexer_peek_token (parser->lexer);
23158
23159   switch (vis->keyword)
23160     {
23161     case RID_AT_PRIVATE:
23162       objc_set_visibility (OBJC_IVAR_VIS_PRIVATE);
23163       break;
23164     case RID_AT_PROTECTED:
23165       objc_set_visibility (OBJC_IVAR_VIS_PROTECTED);
23166       break;
23167     case RID_AT_PUBLIC:
23168       objc_set_visibility (OBJC_IVAR_VIS_PUBLIC);
23169       break;
23170     case RID_AT_PACKAGE:
23171       objc_set_visibility (OBJC_IVAR_VIS_PACKAGE);
23172       break;
23173     default:
23174       return;
23175     }
23176
23177   /* Eat '@private'/'@protected'/'@public'.  */
23178   cp_lexer_consume_token (parser->lexer);
23179 }
23180
23181 /* Parse an Objective-C method type.  Return 'true' if it is a class
23182    (+) method, and 'false' if it is an instance (-) method.  */
23183
23184 static inline bool
23185 cp_parser_objc_method_type (cp_parser* parser)
23186 {
23187   if (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS)
23188     return true;
23189   else
23190     return false;
23191 }
23192
23193 /* Parse an Objective-C protocol qualifier.  */
23194
23195 static tree
23196 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
23197 {
23198   tree quals = NULL_TREE, node;
23199   cp_token *token = cp_lexer_peek_token (parser->lexer);
23200
23201   node = token->u.value;
23202
23203   while (node && TREE_CODE (node) == IDENTIFIER_NODE
23204          && (node == ridpointers [(int) RID_IN]
23205              || node == ridpointers [(int) RID_OUT]
23206              || node == ridpointers [(int) RID_INOUT]
23207              || node == ridpointers [(int) RID_BYCOPY]
23208              || node == ridpointers [(int) RID_BYREF]
23209              || node == ridpointers [(int) RID_ONEWAY]))
23210     {
23211       quals = tree_cons (NULL_TREE, node, quals);
23212       cp_lexer_consume_token (parser->lexer);
23213       token = cp_lexer_peek_token (parser->lexer);
23214       node = token->u.value;
23215     }
23216
23217   return quals;
23218 }
23219
23220 /* Parse an Objective-C typename.  */
23221
23222 static tree
23223 cp_parser_objc_typename (cp_parser* parser)
23224 {
23225   tree type_name = NULL_TREE;
23226
23227   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
23228     {
23229       tree proto_quals, cp_type = NULL_TREE;
23230
23231       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
23232       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
23233
23234       /* An ObjC type name may consist of just protocol qualifiers, in which
23235          case the type shall default to 'id'.  */
23236       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
23237         {
23238           cp_type = cp_parser_type_id (parser);
23239           
23240           /* If the type could not be parsed, an error has already
23241              been produced.  For error recovery, behave as if it had
23242              not been specified, which will use the default type
23243              'id'.  */
23244           if (cp_type == error_mark_node)
23245             {
23246               cp_type = NULL_TREE;
23247               /* We need to skip to the closing parenthesis as
23248                  cp_parser_type_id() does not seem to do it for
23249                  us.  */
23250               cp_parser_skip_to_closing_parenthesis (parser,
23251                                                      /*recovering=*/true,
23252                                                      /*or_comma=*/false,
23253                                                      /*consume_paren=*/false);
23254             }
23255         }
23256
23257       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23258       type_name = build_tree_list (proto_quals, cp_type);
23259     }
23260
23261   return type_name;
23262 }
23263
23264 /* Check to see if TYPE refers to an Objective-C selector name.  */
23265
23266 static bool
23267 cp_parser_objc_selector_p (enum cpp_ttype type)
23268 {
23269   return (type == CPP_NAME || type == CPP_KEYWORD
23270           || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
23271           || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
23272           || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
23273           || type == CPP_XOR || type == CPP_XOR_EQ);
23274 }
23275
23276 /* Parse an Objective-C selector.  */
23277
23278 static tree
23279 cp_parser_objc_selector (cp_parser* parser)
23280 {
23281   cp_token *token = cp_lexer_consume_token (parser->lexer);
23282
23283   if (!cp_parser_objc_selector_p (token->type))
23284     {
23285       error_at (token->location, "invalid Objective-C++ selector name");
23286       return error_mark_node;
23287     }
23288
23289   /* C++ operator names are allowed to appear in ObjC selectors.  */
23290   switch (token->type)
23291     {
23292     case CPP_AND_AND: return get_identifier ("and");
23293     case CPP_AND_EQ: return get_identifier ("and_eq");
23294     case CPP_AND: return get_identifier ("bitand");
23295     case CPP_OR: return get_identifier ("bitor");
23296     case CPP_COMPL: return get_identifier ("compl");
23297     case CPP_NOT: return get_identifier ("not");
23298     case CPP_NOT_EQ: return get_identifier ("not_eq");
23299     case CPP_OR_OR: return get_identifier ("or");
23300     case CPP_OR_EQ: return get_identifier ("or_eq");
23301     case CPP_XOR: return get_identifier ("xor");
23302     case CPP_XOR_EQ: return get_identifier ("xor_eq");
23303     default: return token->u.value;
23304     }
23305 }
23306
23307 /* Parse an Objective-C params list.  */
23308
23309 static tree
23310 cp_parser_objc_method_keyword_params (cp_parser* parser, tree* attributes)
23311 {
23312   tree params = NULL_TREE;
23313   bool maybe_unary_selector_p = true;
23314   cp_token *token = cp_lexer_peek_token (parser->lexer);
23315
23316   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
23317     {
23318       tree selector = NULL_TREE, type_name, identifier;
23319       tree parm_attr = NULL_TREE;
23320
23321       if (token->keyword == RID_ATTRIBUTE)
23322         break;
23323
23324       if (token->type != CPP_COLON)
23325         selector = cp_parser_objc_selector (parser);
23326
23327       /* Detect if we have a unary selector.  */
23328       if (maybe_unary_selector_p
23329           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
23330         {
23331           params = selector; /* Might be followed by attributes.  */
23332           break;
23333         }
23334
23335       maybe_unary_selector_p = false;
23336       if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
23337         {
23338           /* Something went quite wrong.  There should be a colon
23339              here, but there is not.  Stop parsing parameters.  */
23340           break;
23341         }
23342       type_name = cp_parser_objc_typename (parser);
23343       /* New ObjC allows attributes on parameters too.  */
23344       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
23345         parm_attr = cp_parser_attributes_opt (parser);
23346       identifier = cp_parser_identifier (parser);
23347
23348       params
23349         = chainon (params,
23350                    objc_build_keyword_decl (selector,
23351                                             type_name,
23352                                             identifier,
23353                                             parm_attr));
23354
23355       token = cp_lexer_peek_token (parser->lexer);
23356     }
23357
23358   if (params == NULL_TREE)
23359     {
23360       cp_parser_error (parser, "objective-c++ method declaration is expected");
23361       return error_mark_node;
23362     }
23363
23364   /* We allow tail attributes for the method.  */
23365   if (token->keyword == RID_ATTRIBUTE)
23366     {
23367       *attributes = cp_parser_attributes_opt (parser);
23368       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
23369           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
23370         return params;
23371       cp_parser_error (parser, 
23372                        "method attributes must be specified at the end");
23373       return error_mark_node;
23374     }
23375
23376   if (params == NULL_TREE)
23377     {
23378       cp_parser_error (parser, "objective-c++ method declaration is expected");
23379       return error_mark_node;
23380     }
23381   return params;
23382 }
23383
23384 /* Parse the non-keyword Objective-C params.  */
23385
23386 static tree
23387 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp, 
23388                                        tree* attributes)
23389 {
23390   tree params = make_node (TREE_LIST);
23391   cp_token *token = cp_lexer_peek_token (parser->lexer);
23392   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
23393
23394   while (token->type == CPP_COMMA)
23395     {
23396       cp_parameter_declarator *parmdecl;
23397       tree parm;
23398
23399       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
23400       token = cp_lexer_peek_token (parser->lexer);
23401
23402       if (token->type == CPP_ELLIPSIS)
23403         {
23404           cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
23405           *ellipsisp = true;
23406           token = cp_lexer_peek_token (parser->lexer);
23407           break;
23408         }
23409
23410       /* TODO: parse attributes for tail parameters.  */
23411       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
23412       parm = grokdeclarator (parmdecl->declarator,
23413                              &parmdecl->decl_specifiers,
23414                              PARM, /*initialized=*/0,
23415                              /*attrlist=*/NULL);
23416
23417       chainon (params, build_tree_list (NULL_TREE, parm));
23418       token = cp_lexer_peek_token (parser->lexer);
23419     }
23420
23421   /* We allow tail attributes for the method.  */
23422   if (token->keyword == RID_ATTRIBUTE)
23423     {
23424       if (*attributes == NULL_TREE)
23425         {
23426           *attributes = cp_parser_attributes_opt (parser);
23427           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
23428               || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
23429             return params;
23430         }
23431       else        
23432         /* We have an error, but parse the attributes, so that we can 
23433            carry on.  */
23434         *attributes = cp_parser_attributes_opt (parser);
23435
23436       cp_parser_error (parser, 
23437                        "method attributes must be specified at the end");
23438       return error_mark_node;
23439     }
23440
23441   return params;
23442 }
23443
23444 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
23445
23446 static void
23447 cp_parser_objc_interstitial_code (cp_parser* parser)
23448 {
23449   cp_token *token = cp_lexer_peek_token (parser->lexer);
23450
23451   /* If the next token is `extern' and the following token is a string
23452      literal, then we have a linkage specification.  */
23453   if (token->keyword == RID_EXTERN
23454       && cp_parser_is_pure_string_literal
23455          (cp_lexer_peek_nth_token (parser->lexer, 2)))
23456     cp_parser_linkage_specification (parser);
23457   /* Handle #pragma, if any.  */
23458   else if (token->type == CPP_PRAGMA)
23459     cp_parser_pragma (parser, pragma_external);
23460   /* Allow stray semicolons.  */
23461   else if (token->type == CPP_SEMICOLON)
23462     cp_lexer_consume_token (parser->lexer);
23463   /* Mark methods as optional or required, when building protocols.  */
23464   else if (token->keyword == RID_AT_OPTIONAL)
23465     {
23466       cp_lexer_consume_token (parser->lexer);
23467       objc_set_method_opt (true);
23468     }
23469   else if (token->keyword == RID_AT_REQUIRED)
23470     {
23471       cp_lexer_consume_token (parser->lexer);
23472       objc_set_method_opt (false);
23473     }
23474   else if (token->keyword == RID_NAMESPACE)
23475     cp_parser_namespace_definition (parser);
23476   /* Other stray characters must generate errors.  */
23477   else if (token->type == CPP_OPEN_BRACE || token->type == CPP_CLOSE_BRACE)
23478     {
23479       cp_lexer_consume_token (parser->lexer);
23480       error ("stray %qs between Objective-C++ methods",
23481              token->type == CPP_OPEN_BRACE ? "{" : "}");
23482     }
23483   /* Finally, try to parse a block-declaration, or a function-definition.  */
23484   else
23485     cp_parser_block_declaration (parser, /*statement_p=*/false);
23486 }
23487
23488 /* Parse a method signature.  */
23489
23490 static tree
23491 cp_parser_objc_method_signature (cp_parser* parser, tree* attributes)
23492 {
23493   tree rettype, kwdparms, optparms;
23494   bool ellipsis = false;
23495   bool is_class_method;
23496
23497   is_class_method = cp_parser_objc_method_type (parser);
23498   rettype = cp_parser_objc_typename (parser);
23499   *attributes = NULL_TREE;
23500   kwdparms = cp_parser_objc_method_keyword_params (parser, attributes);
23501   if (kwdparms == error_mark_node)
23502     return error_mark_node;
23503   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis, attributes);
23504   if (optparms == error_mark_node)
23505     return error_mark_node;
23506
23507   return objc_build_method_signature (is_class_method, rettype, kwdparms, optparms, ellipsis);
23508 }
23509
23510 static bool
23511 cp_parser_objc_method_maybe_bad_prefix_attributes (cp_parser* parser)
23512 {
23513   tree tattr;  
23514   cp_lexer_save_tokens (parser->lexer);
23515   tattr = cp_parser_attributes_opt (parser);
23516   gcc_assert (tattr) ;
23517   
23518   /* If the attributes are followed by a method introducer, this is not allowed.
23519      Dump the attributes and flag the situation.  */
23520   if (cp_lexer_next_token_is (parser->lexer, CPP_PLUS)
23521       || cp_lexer_next_token_is (parser->lexer, CPP_MINUS))
23522     return true;
23523
23524   /* Otherwise, the attributes introduce some interstitial code, possibly so
23525      rewind to allow that check.  */
23526   cp_lexer_rollback_tokens (parser->lexer);
23527   return false;  
23528 }
23529
23530 /* Parse an Objective-C method prototype list.  */
23531
23532 static void
23533 cp_parser_objc_method_prototype_list (cp_parser* parser)
23534 {
23535   cp_token *token = cp_lexer_peek_token (parser->lexer);
23536
23537   while (token->keyword != RID_AT_END && token->type != CPP_EOF)
23538     {
23539       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
23540         {
23541           tree attributes, sig;
23542           bool is_class_method;
23543           if (token->type == CPP_PLUS)
23544             is_class_method = true;
23545           else
23546             is_class_method = false;
23547           sig = cp_parser_objc_method_signature (parser, &attributes);
23548           if (sig == error_mark_node)
23549             {
23550               cp_parser_skip_to_end_of_block_or_statement (parser);
23551               token = cp_lexer_peek_token (parser->lexer);
23552               continue;
23553             }
23554           objc_add_method_declaration (is_class_method, sig, attributes);
23555           cp_parser_consume_semicolon_at_end_of_statement (parser);
23556         }
23557       else if (token->keyword == RID_AT_PROPERTY)
23558         cp_parser_objc_at_property_declaration (parser);
23559       else if (token->keyword == RID_ATTRIBUTE 
23560                && cp_parser_objc_method_maybe_bad_prefix_attributes(parser))
23561         warning_at (cp_lexer_peek_token (parser->lexer)->location, 
23562                     OPT_Wattributes, 
23563                     "prefix attributes are ignored for methods");
23564       else
23565         /* Allow for interspersed non-ObjC++ code.  */
23566         cp_parser_objc_interstitial_code (parser);
23567
23568       token = cp_lexer_peek_token (parser->lexer);
23569     }
23570
23571   if (token->type != CPP_EOF)
23572     cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
23573   else
23574     cp_parser_error (parser, "expected %<@end%>");
23575
23576   objc_finish_interface ();
23577 }
23578
23579 /* Parse an Objective-C method definition list.  */
23580
23581 static void
23582 cp_parser_objc_method_definition_list (cp_parser* parser)
23583 {
23584   cp_token *token = cp_lexer_peek_token (parser->lexer);
23585
23586   while (token->keyword != RID_AT_END && token->type != CPP_EOF)
23587     {
23588       tree meth;
23589
23590       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
23591         {
23592           cp_token *ptk;
23593           tree sig, attribute;
23594           bool is_class_method;
23595           if (token->type == CPP_PLUS)
23596             is_class_method = true;
23597           else
23598             is_class_method = false;
23599           push_deferring_access_checks (dk_deferred);
23600           sig = cp_parser_objc_method_signature (parser, &attribute);
23601           if (sig == error_mark_node)
23602             {
23603               cp_parser_skip_to_end_of_block_or_statement (parser);
23604               token = cp_lexer_peek_token (parser->lexer);
23605               continue;
23606             }
23607           objc_start_method_definition (is_class_method, sig, attribute,
23608                                         NULL_TREE);
23609
23610           /* For historical reasons, we accept an optional semicolon.  */
23611           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
23612             cp_lexer_consume_token (parser->lexer);
23613
23614           ptk = cp_lexer_peek_token (parser->lexer);
23615           if (!(ptk->type == CPP_PLUS || ptk->type == CPP_MINUS 
23616                 || ptk->type == CPP_EOF || ptk->keyword == RID_AT_END))
23617             {
23618               perform_deferred_access_checks ();
23619               stop_deferring_access_checks ();
23620               meth = cp_parser_function_definition_after_declarator (parser,
23621                                                                      false);
23622               pop_deferring_access_checks ();
23623               objc_finish_method_definition (meth);
23624             }
23625         }
23626       /* The following case will be removed once @synthesize is
23627          completely implemented.  */
23628       else if (token->keyword == RID_AT_PROPERTY)
23629         cp_parser_objc_at_property_declaration (parser);
23630       else if (token->keyword == RID_AT_SYNTHESIZE)
23631         cp_parser_objc_at_synthesize_declaration (parser);
23632       else if (token->keyword == RID_AT_DYNAMIC)
23633         cp_parser_objc_at_dynamic_declaration (parser);
23634       else if (token->keyword == RID_ATTRIBUTE 
23635                && cp_parser_objc_method_maybe_bad_prefix_attributes(parser))
23636         warning_at (token->location, OPT_Wattributes,
23637                     "prefix attributes are ignored for methods");
23638       else
23639         /* Allow for interspersed non-ObjC++ code.  */
23640         cp_parser_objc_interstitial_code (parser);
23641
23642       token = cp_lexer_peek_token (parser->lexer);
23643     }
23644
23645   if (token->type != CPP_EOF)
23646     cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
23647   else
23648     cp_parser_error (parser, "expected %<@end%>");
23649
23650   objc_finish_implementation ();
23651 }
23652
23653 /* Parse Objective-C ivars.  */
23654
23655 static void
23656 cp_parser_objc_class_ivars (cp_parser* parser)
23657 {
23658   cp_token *token = cp_lexer_peek_token (parser->lexer);
23659
23660   if (token->type != CPP_OPEN_BRACE)
23661     return;     /* No ivars specified.  */
23662
23663   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
23664   token = cp_lexer_peek_token (parser->lexer);
23665
23666   while (token->type != CPP_CLOSE_BRACE 
23667         && token->keyword != RID_AT_END && token->type != CPP_EOF)
23668     {
23669       cp_decl_specifier_seq declspecs;
23670       int decl_class_or_enum_p;
23671       tree prefix_attributes;
23672
23673       cp_parser_objc_visibility_spec (parser);
23674
23675       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
23676         break;
23677
23678       cp_parser_decl_specifier_seq (parser,
23679                                     CP_PARSER_FLAGS_OPTIONAL,
23680                                     &declspecs,
23681                                     &decl_class_or_enum_p);
23682
23683       /* auto, register, static, extern, mutable.  */
23684       if (declspecs.storage_class != sc_none)
23685         {
23686           cp_parser_error (parser, "invalid type for instance variable");         
23687           declspecs.storage_class = sc_none;
23688         }
23689
23690       /* __thread.  */
23691       if (declspecs.specs[(int) ds_thread])
23692         {
23693           cp_parser_error (parser, "invalid type for instance variable");
23694           declspecs.specs[(int) ds_thread] = 0;
23695         }
23696       
23697       /* typedef.  */
23698       if (declspecs.specs[(int) ds_typedef])
23699         {
23700           cp_parser_error (parser, "invalid type for instance variable");
23701           declspecs.specs[(int) ds_typedef] = 0;
23702         }
23703
23704       prefix_attributes = declspecs.attributes;
23705       declspecs.attributes = NULL_TREE;
23706
23707       /* Keep going until we hit the `;' at the end of the
23708          declaration.  */
23709       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
23710         {
23711           tree width = NULL_TREE, attributes, first_attribute, decl;
23712           cp_declarator *declarator = NULL;
23713           int ctor_dtor_or_conv_p;
23714
23715           /* Check for a (possibly unnamed) bitfield declaration.  */
23716           token = cp_lexer_peek_token (parser->lexer);
23717           if (token->type == CPP_COLON)
23718             goto eat_colon;
23719
23720           if (token->type == CPP_NAME
23721               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
23722                   == CPP_COLON))
23723             {
23724               /* Get the name of the bitfield.  */
23725               declarator = make_id_declarator (NULL_TREE,
23726                                                cp_parser_identifier (parser),
23727                                                sfk_none);
23728
23729              eat_colon:
23730               cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
23731               /* Get the width of the bitfield.  */
23732               width
23733                 = cp_parser_constant_expression (parser,
23734                                                  /*allow_non_constant=*/false,
23735                                                  NULL);
23736             }
23737           else
23738             {
23739               /* Parse the declarator.  */
23740               declarator
23741                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
23742                                         &ctor_dtor_or_conv_p,
23743                                         /*parenthesized_p=*/NULL,
23744                                         /*member_p=*/false);
23745             }
23746
23747           /* Look for attributes that apply to the ivar.  */
23748           attributes = cp_parser_attributes_opt (parser);
23749           /* Remember which attributes are prefix attributes and
23750              which are not.  */
23751           first_attribute = attributes;
23752           /* Combine the attributes.  */
23753           attributes = chainon (prefix_attributes, attributes);
23754
23755           if (width)
23756               /* Create the bitfield declaration.  */
23757               decl = grokbitfield (declarator, &declspecs,
23758                                    width,
23759                                    attributes);
23760           else
23761             decl = grokfield (declarator, &declspecs,
23762                               NULL_TREE, /*init_const_expr_p=*/false,
23763                               NULL_TREE, attributes);
23764
23765           /* Add the instance variable.  */
23766           if (decl != error_mark_node && decl != NULL_TREE)
23767             objc_add_instance_variable (decl);
23768
23769           /* Reset PREFIX_ATTRIBUTES.  */
23770           while (attributes && TREE_CHAIN (attributes) != first_attribute)
23771             attributes = TREE_CHAIN (attributes);
23772           if (attributes)
23773             TREE_CHAIN (attributes) = NULL_TREE;
23774
23775           token = cp_lexer_peek_token (parser->lexer);
23776
23777           if (token->type == CPP_COMMA)
23778             {
23779               cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
23780               continue;
23781             }
23782           break;
23783         }
23784
23785       cp_parser_consume_semicolon_at_end_of_statement (parser);
23786       token = cp_lexer_peek_token (parser->lexer);
23787     }
23788
23789   if (token->keyword == RID_AT_END)
23790     cp_parser_error (parser, "expected %<}%>");
23791
23792   /* Do not consume the RID_AT_END, so it will be read again as terminating
23793      the @interface of @implementation.  */ 
23794   if (token->keyword != RID_AT_END && token->type != CPP_EOF)
23795     cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
23796     
23797   /* For historical reasons, we accept an optional semicolon.  */
23798   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
23799     cp_lexer_consume_token (parser->lexer);
23800 }
23801
23802 /* Parse an Objective-C protocol declaration.  */
23803
23804 static void
23805 cp_parser_objc_protocol_declaration (cp_parser* parser, tree attributes)
23806 {
23807   tree proto, protorefs;
23808   cp_token *tok;
23809
23810   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
23811   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
23812     {
23813       tok = cp_lexer_peek_token (parser->lexer);
23814       error_at (tok->location, "identifier expected after %<@protocol%>");
23815       cp_parser_consume_semicolon_at_end_of_statement (parser);
23816       return;
23817     }
23818
23819   /* See if we have a forward declaration or a definition.  */
23820   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
23821
23822   /* Try a forward declaration first.  */
23823   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
23824     {
23825       while (true)
23826         {
23827           tree id;
23828           
23829           id = cp_parser_identifier (parser);
23830           if (id == error_mark_node)
23831             break;
23832           
23833           objc_declare_protocol (id, attributes);
23834           
23835           if(cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23836             cp_lexer_consume_token (parser->lexer);
23837           else
23838             break;
23839         }
23840       cp_parser_consume_semicolon_at_end_of_statement (parser);
23841     }
23842
23843   /* Ok, we got a full-fledged definition (or at least should).  */
23844   else
23845     {
23846       proto = cp_parser_identifier (parser);
23847       protorefs = cp_parser_objc_protocol_refs_opt (parser);
23848       objc_start_protocol (proto, protorefs, attributes);
23849       cp_parser_objc_method_prototype_list (parser);
23850     }
23851 }
23852
23853 /* Parse an Objective-C superclass or category.  */
23854
23855 static void
23856 cp_parser_objc_superclass_or_category (cp_parser *parser, 
23857                                        bool iface_p,
23858                                        tree *super,
23859                                        tree *categ, bool *is_class_extension)
23860 {
23861   cp_token *next = cp_lexer_peek_token (parser->lexer);
23862
23863   *super = *categ = NULL_TREE;
23864   *is_class_extension = false;
23865   if (next->type == CPP_COLON)
23866     {
23867       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
23868       *super = cp_parser_identifier (parser);
23869     }
23870   else if (next->type == CPP_OPEN_PAREN)
23871     {
23872       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
23873
23874       /* If there is no category name, and this is an @interface, we
23875          have a class extension.  */
23876       if (iface_p && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
23877         {
23878           *categ = NULL_TREE;
23879           *is_class_extension = true;
23880         }
23881       else
23882         *categ = cp_parser_identifier (parser);
23883
23884       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23885     }
23886 }
23887
23888 /* Parse an Objective-C class interface.  */
23889
23890 static void
23891 cp_parser_objc_class_interface (cp_parser* parser, tree attributes)
23892 {
23893   tree name, super, categ, protos;
23894   bool is_class_extension;
23895
23896   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
23897   name = cp_parser_identifier (parser);
23898   if (name == error_mark_node)
23899     {
23900       /* It's hard to recover because even if valid @interface stuff
23901          is to follow, we can't compile it (or validate it) if we
23902          don't even know which class it refers to.  Let's assume this
23903          was a stray '@interface' token in the stream and skip it.
23904       */
23905       return;
23906     }
23907   cp_parser_objc_superclass_or_category (parser, true, &super, &categ,
23908                                          &is_class_extension);
23909   protos = cp_parser_objc_protocol_refs_opt (parser);
23910
23911   /* We have either a class or a category on our hands.  */
23912   if (categ || is_class_extension)
23913     objc_start_category_interface (name, categ, protos, attributes);
23914   else
23915     {
23916       objc_start_class_interface (name, super, protos, attributes);
23917       /* Handle instance variable declarations, if any.  */
23918       cp_parser_objc_class_ivars (parser);
23919       objc_continue_interface ();
23920     }
23921
23922   cp_parser_objc_method_prototype_list (parser);
23923 }
23924
23925 /* Parse an Objective-C class implementation.  */
23926
23927 static void
23928 cp_parser_objc_class_implementation (cp_parser* parser)
23929 {
23930   tree name, super, categ;
23931   bool is_class_extension;
23932
23933   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
23934   name = cp_parser_identifier (parser);
23935   if (name == error_mark_node)
23936     {
23937       /* It's hard to recover because even if valid @implementation
23938          stuff is to follow, we can't compile it (or validate it) if
23939          we don't even know which class it refers to.  Let's assume
23940          this was a stray '@implementation' token in the stream and
23941          skip it.
23942       */
23943       return;
23944     }
23945   cp_parser_objc_superclass_or_category (parser, false, &super, &categ,
23946                                          &is_class_extension);
23947
23948   /* We have either a class or a category on our hands.  */
23949   if (categ)
23950     objc_start_category_implementation (name, categ);
23951   else
23952     {
23953       objc_start_class_implementation (name, super);
23954       /* Handle instance variable declarations, if any.  */
23955       cp_parser_objc_class_ivars (parser);
23956       objc_continue_implementation ();
23957     }
23958
23959   cp_parser_objc_method_definition_list (parser);
23960 }
23961
23962 /* Consume the @end token and finish off the implementation.  */
23963
23964 static void
23965 cp_parser_objc_end_implementation (cp_parser* parser)
23966 {
23967   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
23968   objc_finish_implementation ();
23969 }
23970
23971 /* Parse an Objective-C declaration.  */
23972
23973 static void
23974 cp_parser_objc_declaration (cp_parser* parser, tree attributes)
23975 {
23976   /* Try to figure out what kind of declaration is present.  */
23977   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
23978
23979   if (attributes)
23980     switch (kwd->keyword)
23981       {
23982         case RID_AT_ALIAS:
23983         case RID_AT_CLASS:
23984         case RID_AT_END:
23985           error_at (kwd->location, "attributes may not be specified before"
23986                     " the %<@%D%> Objective-C++ keyword",
23987                     kwd->u.value);
23988           attributes = NULL;
23989           break;
23990         case RID_AT_IMPLEMENTATION:
23991           warning_at (kwd->location, OPT_Wattributes,
23992                       "prefix attributes are ignored before %<@%D%>",
23993                       kwd->u.value);
23994           attributes = NULL;
23995         default:
23996           break;
23997       }
23998
23999   switch (kwd->keyword)
24000     {
24001     case RID_AT_ALIAS:
24002       cp_parser_objc_alias_declaration (parser);
24003       break;
24004     case RID_AT_CLASS:
24005       cp_parser_objc_class_declaration (parser);
24006       break;
24007     case RID_AT_PROTOCOL:
24008       cp_parser_objc_protocol_declaration (parser, attributes);
24009       break;
24010     case RID_AT_INTERFACE:
24011       cp_parser_objc_class_interface (parser, attributes);
24012       break;
24013     case RID_AT_IMPLEMENTATION:
24014       cp_parser_objc_class_implementation (parser);
24015       break;
24016     case RID_AT_END:
24017       cp_parser_objc_end_implementation (parser);
24018       break;
24019     default:
24020       error_at (kwd->location, "misplaced %<@%D%> Objective-C++ construct",
24021                 kwd->u.value);
24022       cp_parser_skip_to_end_of_block_or_statement (parser);
24023     }
24024 }
24025
24026 /* Parse an Objective-C try-catch-finally statement.
24027
24028    objc-try-catch-finally-stmt:
24029      @try compound-statement objc-catch-clause-seq [opt]
24030        objc-finally-clause [opt]
24031
24032    objc-catch-clause-seq:
24033      objc-catch-clause objc-catch-clause-seq [opt]
24034
24035    objc-catch-clause:
24036      @catch ( objc-exception-declaration ) compound-statement
24037
24038    objc-finally-clause:
24039      @finally compound-statement
24040
24041    objc-exception-declaration:
24042      parameter-declaration
24043      '...'
24044
24045    where '...' is to be interpreted literally, that is, it means CPP_ELLIPSIS.
24046
24047    Returns NULL_TREE.
24048
24049    PS: This function is identical to c_parser_objc_try_catch_finally_statement
24050    for C.  Keep them in sync.  */   
24051
24052 static tree
24053 cp_parser_objc_try_catch_finally_statement (cp_parser *parser)
24054 {
24055   location_t location;
24056   tree stmt;
24057
24058   cp_parser_require_keyword (parser, RID_AT_TRY, RT_AT_TRY);
24059   location = cp_lexer_peek_token (parser->lexer)->location;
24060   objc_maybe_warn_exceptions (location);
24061   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
24062      node, lest it get absorbed into the surrounding block.  */
24063   stmt = push_stmt_list ();
24064   cp_parser_compound_statement (parser, NULL, false, false);
24065   objc_begin_try_stmt (location, pop_stmt_list (stmt));
24066
24067   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
24068     {
24069       cp_parameter_declarator *parm;
24070       tree parameter_declaration = error_mark_node;
24071       bool seen_open_paren = false;
24072
24073       cp_lexer_consume_token (parser->lexer);
24074       if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24075         seen_open_paren = true;
24076       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
24077         {
24078           /* We have "@catch (...)" (where the '...' are literally
24079              what is in the code).  Skip the '...'.
24080              parameter_declaration is set to NULL_TREE, and
24081              objc_being_catch_clauses() knows that that means
24082              '...'.  */
24083           cp_lexer_consume_token (parser->lexer);
24084           parameter_declaration = NULL_TREE;
24085         }
24086       else
24087         {
24088           /* We have "@catch (NSException *exception)" or something
24089              like that.  Parse the parameter declaration.  */
24090           parm = cp_parser_parameter_declaration (parser, false, NULL);
24091           if (parm == NULL)
24092             parameter_declaration = error_mark_node;
24093           else
24094             parameter_declaration = grokdeclarator (parm->declarator,
24095                                                     &parm->decl_specifiers,
24096                                                     PARM, /*initialized=*/0,
24097                                                     /*attrlist=*/NULL);
24098         }
24099       if (seen_open_paren)
24100         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
24101       else
24102         {
24103           /* If there was no open parenthesis, we are recovering from
24104              an error, and we are trying to figure out what mistake
24105              the user has made.  */
24106
24107           /* If there is an immediate closing parenthesis, the user
24108              probably forgot the opening one (ie, they typed "@catch
24109              NSException *e)".  Parse the closing parenthesis and keep
24110              going.  */
24111           if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
24112             cp_lexer_consume_token (parser->lexer);
24113           
24114           /* If these is no immediate closing parenthesis, the user
24115              probably doesn't know that parenthesis are required at
24116              all (ie, they typed "@catch NSException *e").  So, just
24117              forget about the closing parenthesis and keep going.  */
24118         }
24119       objc_begin_catch_clause (parameter_declaration);
24120       cp_parser_compound_statement (parser, NULL, false, false);
24121       objc_finish_catch_clause ();
24122     }
24123   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
24124     {
24125       cp_lexer_consume_token (parser->lexer);
24126       location = cp_lexer_peek_token (parser->lexer)->location;
24127       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
24128          node, lest it get absorbed into the surrounding block.  */
24129       stmt = push_stmt_list ();
24130       cp_parser_compound_statement (parser, NULL, false, false);
24131       objc_build_finally_clause (location, pop_stmt_list (stmt));
24132     }
24133
24134   return objc_finish_try_stmt ();
24135 }
24136
24137 /* Parse an Objective-C synchronized statement.
24138
24139    objc-synchronized-stmt:
24140      @synchronized ( expression ) compound-statement
24141
24142    Returns NULL_TREE.  */
24143
24144 static tree
24145 cp_parser_objc_synchronized_statement (cp_parser *parser)
24146 {
24147   location_t location;
24148   tree lock, stmt;
24149
24150   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, RT_AT_SYNCHRONIZED);
24151
24152   location = cp_lexer_peek_token (parser->lexer)->location;
24153   objc_maybe_warn_exceptions (location);
24154   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
24155   lock = cp_parser_expression (parser, false, NULL);
24156   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
24157
24158   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
24159      node, lest it get absorbed into the surrounding block.  */
24160   stmt = push_stmt_list ();
24161   cp_parser_compound_statement (parser, NULL, false, false);
24162
24163   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
24164 }
24165
24166 /* Parse an Objective-C throw statement.
24167
24168    objc-throw-stmt:
24169      @throw assignment-expression [opt] ;
24170
24171    Returns a constructed '@throw' statement.  */
24172
24173 static tree
24174 cp_parser_objc_throw_statement (cp_parser *parser)
24175 {
24176   tree expr = NULL_TREE;
24177   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
24178
24179   cp_parser_require_keyword (parser, RID_AT_THROW, RT_AT_THROW);
24180
24181   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
24182     expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
24183
24184   cp_parser_consume_semicolon_at_end_of_statement (parser);
24185
24186   return objc_build_throw_stmt (loc, expr);
24187 }
24188
24189 /* Parse an Objective-C statement.  */
24190
24191 static tree
24192 cp_parser_objc_statement (cp_parser * parser)
24193 {
24194   /* Try to figure out what kind of declaration is present.  */
24195   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
24196
24197   switch (kwd->keyword)
24198     {
24199     case RID_AT_TRY:
24200       return cp_parser_objc_try_catch_finally_statement (parser);
24201     case RID_AT_SYNCHRONIZED:
24202       return cp_parser_objc_synchronized_statement (parser);
24203     case RID_AT_THROW:
24204       return cp_parser_objc_throw_statement (parser);
24205     default:
24206       error_at (kwd->location, "misplaced %<@%D%> Objective-C++ construct",
24207                kwd->u.value);
24208       cp_parser_skip_to_end_of_block_or_statement (parser);
24209     }
24210
24211   return error_mark_node;
24212 }
24213
24214 /* If we are compiling ObjC++ and we see an __attribute__ we neeed to 
24215    look ahead to see if an objc keyword follows the attributes.  This
24216    is to detect the use of prefix attributes on ObjC @interface and 
24217    @protocol.  */
24218
24219 static bool
24220 cp_parser_objc_valid_prefix_attributes (cp_parser* parser, tree *attrib)
24221 {
24222   cp_lexer_save_tokens (parser->lexer);
24223   *attrib = cp_parser_attributes_opt (parser);
24224   gcc_assert (*attrib);
24225   if (OBJC_IS_AT_KEYWORD (cp_lexer_peek_token (parser->lexer)->keyword))
24226     {
24227       cp_lexer_commit_tokens (parser->lexer);
24228       return true;
24229     }
24230   cp_lexer_rollback_tokens (parser->lexer);
24231   return false;  
24232 }
24233
24234 /* This routine is a minimal replacement for
24235    c_parser_struct_declaration () used when parsing the list of
24236    types/names or ObjC++ properties.  For example, when parsing the
24237    code
24238
24239    @property (readonly) int a, b, c;
24240
24241    this function is responsible for parsing "int a, int b, int c" and
24242    returning the declarations as CHAIN of DECLs.
24243
24244    TODO: Share this code with cp_parser_objc_class_ivars.  It's very
24245    similar parsing.  */
24246 static tree
24247 cp_parser_objc_struct_declaration (cp_parser *parser)
24248 {
24249   tree decls = NULL_TREE;
24250   cp_decl_specifier_seq declspecs;
24251   int decl_class_or_enum_p;
24252   tree prefix_attributes;
24253
24254   cp_parser_decl_specifier_seq (parser,
24255                                 CP_PARSER_FLAGS_NONE,
24256                                 &declspecs,
24257                                 &decl_class_or_enum_p);
24258
24259   if (declspecs.type == error_mark_node)
24260     return error_mark_node;
24261
24262   /* auto, register, static, extern, mutable.  */
24263   if (declspecs.storage_class != sc_none)
24264     {
24265       cp_parser_error (parser, "invalid type for property");
24266       declspecs.storage_class = sc_none;
24267     }
24268   
24269   /* __thread.  */
24270   if (declspecs.specs[(int) ds_thread])
24271     {
24272       cp_parser_error (parser, "invalid type for property");
24273       declspecs.specs[(int) ds_thread] = 0;
24274     }
24275   
24276   /* typedef.  */
24277   if (declspecs.specs[(int) ds_typedef])
24278     {
24279       cp_parser_error (parser, "invalid type for property");
24280       declspecs.specs[(int) ds_typedef] = 0;
24281     }
24282
24283   prefix_attributes = declspecs.attributes;
24284   declspecs.attributes = NULL_TREE;
24285
24286   /* Keep going until we hit the `;' at the end of the declaration. */
24287   while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
24288     {
24289       tree attributes, first_attribute, decl;
24290       cp_declarator *declarator;
24291       cp_token *token;
24292
24293       /* Parse the declarator.  */
24294       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
24295                                          NULL, NULL, false);
24296
24297       /* Look for attributes that apply to the ivar.  */
24298       attributes = cp_parser_attributes_opt (parser);
24299       /* Remember which attributes are prefix attributes and
24300          which are not.  */
24301       first_attribute = attributes;
24302       /* Combine the attributes.  */
24303       attributes = chainon (prefix_attributes, attributes);
24304       
24305       decl = grokfield (declarator, &declspecs,
24306                         NULL_TREE, /*init_const_expr_p=*/false,
24307                         NULL_TREE, attributes);
24308
24309       if (decl == error_mark_node || decl == NULL_TREE)
24310         return error_mark_node;
24311       
24312       /* Reset PREFIX_ATTRIBUTES.  */
24313       while (attributes && TREE_CHAIN (attributes) != first_attribute)
24314         attributes = TREE_CHAIN (attributes);
24315       if (attributes)
24316         TREE_CHAIN (attributes) = NULL_TREE;
24317
24318       DECL_CHAIN (decl) = decls;
24319       decls = decl;
24320
24321       token = cp_lexer_peek_token (parser->lexer);
24322       if (token->type == CPP_COMMA)
24323         {
24324           cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
24325           continue;
24326         }
24327       else
24328         break;
24329     }
24330   return decls;
24331 }
24332
24333 /* Parse an Objective-C @property declaration.  The syntax is:
24334
24335    objc-property-declaration:
24336      '@property' objc-property-attributes[opt] struct-declaration ;
24337
24338    objc-property-attributes:
24339     '(' objc-property-attribute-list ')'
24340
24341    objc-property-attribute-list:
24342      objc-property-attribute
24343      objc-property-attribute-list, objc-property-attribute
24344
24345    objc-property-attribute
24346      'getter' = identifier
24347      'setter' = identifier
24348      'readonly'
24349      'readwrite'
24350      'assign'
24351      'retain'
24352      'copy'
24353      'nonatomic'
24354
24355   For example:
24356     @property NSString *name;
24357     @property (readonly) id object;
24358     @property (retain, nonatomic, getter=getTheName) id name;
24359     @property int a, b, c;
24360
24361    PS: This function is identical to
24362    c_parser_objc_at_property_declaration for C.  Keep them in sync.  */
24363 static void 
24364 cp_parser_objc_at_property_declaration (cp_parser *parser)
24365 {
24366   /* The following variables hold the attributes of the properties as
24367      parsed.  They are 'false' or 'NULL_TREE' if the attribute was not
24368      seen.  When we see an attribute, we set them to 'true' (if they
24369      are boolean properties) or to the identifier (if they have an
24370      argument, ie, for getter and setter).  Note that here we only
24371      parse the list of attributes, check the syntax and accumulate the
24372      attributes that we find.  objc_add_property_declaration() will
24373      then process the information.  */
24374   bool property_assign = false;
24375   bool property_copy = false;
24376   tree property_getter_ident = NULL_TREE;
24377   bool property_nonatomic = false;
24378   bool property_readonly = false;
24379   bool property_readwrite = false;
24380   bool property_retain = false;
24381   tree property_setter_ident = NULL_TREE;
24382
24383   /* 'properties' is the list of properties that we read.  Usually a
24384      single one, but maybe more (eg, in "@property int a, b, c;" there
24385      are three).  */
24386   tree properties;
24387   location_t loc;
24388
24389   loc = cp_lexer_peek_token (parser->lexer)->location;
24390
24391   cp_lexer_consume_token (parser->lexer);  /* Eat '@property'.  */
24392
24393   /* Parse the optional attribute list...  */
24394   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
24395     {
24396       /* Eat the '('.  */
24397       cp_lexer_consume_token (parser->lexer);
24398
24399       while (true)
24400         {
24401           bool syntax_error = false;
24402           cp_token *token = cp_lexer_peek_token (parser->lexer);
24403           enum rid keyword;
24404
24405           if (token->type != CPP_NAME)
24406             {
24407               cp_parser_error (parser, "expected identifier");
24408               break;
24409             }
24410           keyword = C_RID_CODE (token->u.value);
24411           cp_lexer_consume_token (parser->lexer);
24412           switch (keyword)
24413             {
24414             case RID_ASSIGN:    property_assign = true;    break;
24415             case RID_COPY:      property_copy = true;      break;
24416             case RID_NONATOMIC: property_nonatomic = true; break;
24417             case RID_READONLY:  property_readonly = true;  break;
24418             case RID_READWRITE: property_readwrite = true; break;
24419             case RID_RETAIN:    property_retain = true;    break;
24420
24421             case RID_GETTER:
24422             case RID_SETTER:
24423               if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
24424                 {
24425                   if (keyword == RID_GETTER)
24426                     cp_parser_error (parser,
24427                                      "missing %<=%> (after %<getter%> attribute)");
24428                   else
24429                     cp_parser_error (parser,
24430                                      "missing %<=%> (after %<setter%> attribute)");
24431                   syntax_error = true;
24432                   break;
24433                 }
24434               cp_lexer_consume_token (parser->lexer); /* eat the = */
24435               if (!cp_parser_objc_selector_p (cp_lexer_peek_token (parser->lexer)->type))
24436                 {
24437                   cp_parser_error (parser, "expected identifier");
24438                   syntax_error = true;
24439                   break;
24440                 }
24441               if (keyword == RID_SETTER)
24442                 {
24443                   if (property_setter_ident != NULL_TREE)
24444                     {
24445                       cp_parser_error (parser, "the %<setter%> attribute may only be specified once");
24446                       cp_lexer_consume_token (parser->lexer);
24447                     }
24448                   else
24449                     property_setter_ident = cp_parser_objc_selector (parser);
24450                   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
24451                     cp_parser_error (parser, "setter name must terminate with %<:%>");
24452                   else
24453                     cp_lexer_consume_token (parser->lexer);
24454                 }
24455               else
24456                 {
24457                   if (property_getter_ident != NULL_TREE)
24458                     {
24459                       cp_parser_error (parser, "the %<getter%> attribute may only be specified once");
24460                       cp_lexer_consume_token (parser->lexer);
24461                     }
24462                   else
24463                     property_getter_ident = cp_parser_objc_selector (parser);
24464                 }
24465               break;
24466             default:
24467               cp_parser_error (parser, "unknown property attribute");
24468               syntax_error = true;
24469               break;
24470             }
24471
24472           if (syntax_error)
24473             break;
24474
24475           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24476             cp_lexer_consume_token (parser->lexer);
24477           else
24478             break;
24479         }
24480
24481       /* FIXME: "@property (setter, assign);" will generate a spurious
24482          "error: expected â€˜)’ before â€˜,’ token".  This is because
24483          cp_parser_require, unlike the C counterpart, will produce an
24484          error even if we are in error recovery.  */
24485       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24486         {
24487           cp_parser_skip_to_closing_parenthesis (parser,
24488                                                  /*recovering=*/true,
24489                                                  /*or_comma=*/false,
24490                                                  /*consume_paren=*/true);
24491         }
24492     }
24493
24494   /* ... and the property declaration(s).  */
24495   properties = cp_parser_objc_struct_declaration (parser);
24496
24497   if (properties == error_mark_node)
24498     {
24499       cp_parser_skip_to_end_of_statement (parser);
24500       /* If the next token is now a `;', consume it.  */
24501       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
24502         cp_lexer_consume_token (parser->lexer);
24503       return;
24504     }
24505
24506   if (properties == NULL_TREE)
24507     cp_parser_error (parser, "expected identifier");
24508   else
24509     {
24510       /* Comma-separated properties are chained together in
24511          reverse order; add them one by one.  */
24512       properties = nreverse (properties);
24513       
24514       for (; properties; properties = TREE_CHAIN (properties))
24515         objc_add_property_declaration (loc, copy_node (properties),
24516                                        property_readonly, property_readwrite,
24517                                        property_assign, property_retain,
24518                                        property_copy, property_nonatomic,
24519                                        property_getter_ident, property_setter_ident);
24520     }
24521   
24522   cp_parser_consume_semicolon_at_end_of_statement (parser);
24523 }
24524
24525 /* Parse an Objective-C++ @synthesize declaration.  The syntax is:
24526
24527    objc-synthesize-declaration:
24528      @synthesize objc-synthesize-identifier-list ;
24529
24530    objc-synthesize-identifier-list:
24531      objc-synthesize-identifier
24532      objc-synthesize-identifier-list, objc-synthesize-identifier
24533
24534    objc-synthesize-identifier
24535      identifier
24536      identifier = identifier
24537
24538   For example:
24539     @synthesize MyProperty;
24540     @synthesize OneProperty, AnotherProperty=MyIvar, YetAnotherProperty;
24541
24542   PS: This function is identical to c_parser_objc_at_synthesize_declaration
24543   for C.  Keep them in sync.
24544 */
24545 static void 
24546 cp_parser_objc_at_synthesize_declaration (cp_parser *parser)
24547 {
24548   tree list = NULL_TREE;
24549   location_t loc;
24550   loc = cp_lexer_peek_token (parser->lexer)->location;
24551
24552   cp_lexer_consume_token (parser->lexer);  /* Eat '@synthesize'.  */
24553   while (true)
24554     {
24555       tree property, ivar;
24556       property = cp_parser_identifier (parser);
24557       if (property == error_mark_node)
24558         {
24559           cp_parser_consume_semicolon_at_end_of_statement (parser);
24560           return;
24561         }
24562       if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
24563         {
24564           cp_lexer_consume_token (parser->lexer);
24565           ivar = cp_parser_identifier (parser);
24566           if (ivar == error_mark_node)
24567             {
24568               cp_parser_consume_semicolon_at_end_of_statement (parser);
24569               return;
24570             }
24571         }
24572       else
24573         ivar = NULL_TREE;
24574       list = chainon (list, build_tree_list (ivar, property));
24575       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24576         cp_lexer_consume_token (parser->lexer);
24577       else
24578         break;
24579     }
24580   cp_parser_consume_semicolon_at_end_of_statement (parser);
24581   objc_add_synthesize_declaration (loc, list);
24582 }
24583
24584 /* Parse an Objective-C++ @dynamic declaration.  The syntax is:
24585
24586    objc-dynamic-declaration:
24587      @dynamic identifier-list ;
24588
24589    For example:
24590      @dynamic MyProperty;
24591      @dynamic MyProperty, AnotherProperty;
24592
24593   PS: This function is identical to c_parser_objc_at_dynamic_declaration
24594   for C.  Keep them in sync.
24595 */
24596 static void 
24597 cp_parser_objc_at_dynamic_declaration (cp_parser *parser)
24598 {
24599   tree list = NULL_TREE;
24600   location_t loc;
24601   loc = cp_lexer_peek_token (parser->lexer)->location;
24602
24603   cp_lexer_consume_token (parser->lexer);  /* Eat '@dynamic'.  */
24604   while (true)
24605     {
24606       tree property;
24607       property = cp_parser_identifier (parser);
24608       if (property == error_mark_node)
24609         {
24610           cp_parser_consume_semicolon_at_end_of_statement (parser);
24611           return;
24612         }
24613       list = chainon (list, build_tree_list (NULL, property));
24614       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24615         cp_lexer_consume_token (parser->lexer);
24616       else
24617         break;
24618     }
24619   cp_parser_consume_semicolon_at_end_of_statement (parser);
24620   objc_add_dynamic_declaration (loc, list);
24621 }
24622
24623 \f
24624 /* OpenMP 2.5 parsing routines.  */
24625
24626 /* Returns name of the next clause.
24627    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
24628    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
24629    returned and the token is consumed.  */
24630
24631 static pragma_omp_clause
24632 cp_parser_omp_clause_name (cp_parser *parser)
24633 {
24634   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
24635
24636   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
24637     result = PRAGMA_OMP_CLAUSE_IF;
24638   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
24639     result = PRAGMA_OMP_CLAUSE_DEFAULT;
24640   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
24641     result = PRAGMA_OMP_CLAUSE_PRIVATE;
24642   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
24643     {
24644       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
24645       const char *p = IDENTIFIER_POINTER (id);
24646
24647       switch (p[0])
24648         {
24649         case 'c':
24650           if (!strcmp ("collapse", p))
24651             result = PRAGMA_OMP_CLAUSE_COLLAPSE;
24652           else if (!strcmp ("copyin", p))
24653             result = PRAGMA_OMP_CLAUSE_COPYIN;
24654           else if (!strcmp ("copyprivate", p))
24655             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
24656           break;
24657         case 'f':
24658           if (!strcmp ("final", p))
24659             result = PRAGMA_OMP_CLAUSE_FINAL;
24660           else if (!strcmp ("firstprivate", p))
24661             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
24662           break;
24663         case 'l':
24664           if (!strcmp ("lastprivate", p))
24665             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
24666           break;
24667         case 'm':
24668           if (!strcmp ("mergeable", p))
24669             result = PRAGMA_OMP_CLAUSE_MERGEABLE;
24670           break;
24671         case 'n':
24672           if (!strcmp ("nowait", p))
24673             result = PRAGMA_OMP_CLAUSE_NOWAIT;
24674           else if (!strcmp ("num_threads", p))
24675             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
24676           break;
24677         case 'o':
24678           if (!strcmp ("ordered", p))
24679             result = PRAGMA_OMP_CLAUSE_ORDERED;
24680           break;
24681         case 'r':
24682           if (!strcmp ("reduction", p))
24683             result = PRAGMA_OMP_CLAUSE_REDUCTION;
24684           break;
24685         case 's':
24686           if (!strcmp ("schedule", p))
24687             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
24688           else if (!strcmp ("shared", p))
24689             result = PRAGMA_OMP_CLAUSE_SHARED;
24690           break;
24691         case 'u':
24692           if (!strcmp ("untied", p))
24693             result = PRAGMA_OMP_CLAUSE_UNTIED;
24694           break;
24695         }
24696     }
24697
24698   if (result != PRAGMA_OMP_CLAUSE_NONE)
24699     cp_lexer_consume_token (parser->lexer);
24700
24701   return result;
24702 }
24703
24704 /* Validate that a clause of the given type does not already exist.  */
24705
24706 static void
24707 check_no_duplicate_clause (tree clauses, enum omp_clause_code code,
24708                            const char *name, location_t location)
24709 {
24710   tree c;
24711
24712   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
24713     if (OMP_CLAUSE_CODE (c) == code)
24714       {
24715         error_at (location, "too many %qs clauses", name);
24716         break;
24717       }
24718 }
24719
24720 /* OpenMP 2.5:
24721    variable-list:
24722      identifier
24723      variable-list , identifier
24724
24725    In addition, we match a closing parenthesis.  An opening parenthesis
24726    will have been consumed by the caller.
24727
24728    If KIND is nonzero, create the appropriate node and install the decl
24729    in OMP_CLAUSE_DECL and add the node to the head of the list.
24730
24731    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
24732    return the list created.  */
24733
24734 static tree
24735 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
24736                                 tree list)
24737 {
24738   cp_token *token;
24739   while (1)
24740     {
24741       tree name, decl;
24742
24743       token = cp_lexer_peek_token (parser->lexer);
24744       name = cp_parser_id_expression (parser, /*template_p=*/false,
24745                                       /*check_dependency_p=*/true,
24746                                       /*template_p=*/NULL,
24747                                       /*declarator_p=*/false,
24748                                       /*optional_p=*/false);
24749       if (name == error_mark_node)
24750         goto skip_comma;
24751
24752       decl = cp_parser_lookup_name_simple (parser, name, token->location);
24753       if (decl == error_mark_node)
24754         cp_parser_name_lookup_error (parser, name, decl, NLE_NULL,
24755                                      token->location);
24756       else if (kind != 0)
24757         {
24758           tree u = build_omp_clause (token->location, kind);
24759           OMP_CLAUSE_DECL (u) = decl;
24760           OMP_CLAUSE_CHAIN (u) = list;
24761           list = u;
24762         }
24763       else
24764         list = tree_cons (decl, NULL_TREE, list);
24765
24766     get_comma:
24767       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
24768         break;
24769       cp_lexer_consume_token (parser->lexer);
24770     }
24771
24772   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24773     {
24774       int ending;
24775
24776       /* Try to resync to an unnested comma.  Copied from
24777          cp_parser_parenthesized_expression_list.  */
24778     skip_comma:
24779       ending = cp_parser_skip_to_closing_parenthesis (parser,
24780                                                       /*recovering=*/true,
24781                                                       /*or_comma=*/true,
24782                                                       /*consume_paren=*/true);
24783       if (ending < 0)
24784         goto get_comma;
24785     }
24786
24787   return list;
24788 }
24789
24790 /* Similarly, but expect leading and trailing parenthesis.  This is a very
24791    common case for omp clauses.  */
24792
24793 static tree
24794 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
24795 {
24796   if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24797     return cp_parser_omp_var_list_no_open (parser, kind, list);
24798   return list;
24799 }
24800
24801 /* OpenMP 3.0:
24802    collapse ( constant-expression ) */
24803
24804 static tree
24805 cp_parser_omp_clause_collapse (cp_parser *parser, tree list, location_t location)
24806 {
24807   tree c, num;
24808   location_t loc;
24809   HOST_WIDE_INT n;
24810
24811   loc = cp_lexer_peek_token (parser->lexer)->location;
24812   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24813     return list;
24814
24815   num = cp_parser_constant_expression (parser, false, NULL);
24816
24817   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24818     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24819                                            /*or_comma=*/false,
24820                                            /*consume_paren=*/true);
24821
24822   if (num == error_mark_node)
24823     return list;
24824   num = fold_non_dependent_expr (num);
24825   if (!INTEGRAL_TYPE_P (TREE_TYPE (num))
24826       || !host_integerp (num, 0)
24827       || (n = tree_low_cst (num, 0)) <= 0
24828       || (int) n != n)
24829     {
24830       error_at (loc, "collapse argument needs positive constant integer expression");
24831       return list;
24832     }
24833
24834   check_no_duplicate_clause (list, OMP_CLAUSE_COLLAPSE, "collapse", location);
24835   c = build_omp_clause (loc, OMP_CLAUSE_COLLAPSE);
24836   OMP_CLAUSE_CHAIN (c) = list;
24837   OMP_CLAUSE_COLLAPSE_EXPR (c) = num;
24838
24839   return c;
24840 }
24841
24842 /* OpenMP 2.5:
24843    default ( shared | none ) */
24844
24845 static tree
24846 cp_parser_omp_clause_default (cp_parser *parser, tree list, location_t location)
24847 {
24848   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
24849   tree c;
24850
24851   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24852     return list;
24853   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
24854     {
24855       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
24856       const char *p = IDENTIFIER_POINTER (id);
24857
24858       switch (p[0])
24859         {
24860         case 'n':
24861           if (strcmp ("none", p) != 0)
24862             goto invalid_kind;
24863           kind = OMP_CLAUSE_DEFAULT_NONE;
24864           break;
24865
24866         case 's':
24867           if (strcmp ("shared", p) != 0)
24868             goto invalid_kind;
24869           kind = OMP_CLAUSE_DEFAULT_SHARED;
24870           break;
24871
24872         default:
24873           goto invalid_kind;
24874         }
24875
24876       cp_lexer_consume_token (parser->lexer);
24877     }
24878   else
24879     {
24880     invalid_kind:
24881       cp_parser_error (parser, "expected %<none%> or %<shared%>");
24882     }
24883
24884   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24885     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24886                                            /*or_comma=*/false,
24887                                            /*consume_paren=*/true);
24888
24889   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
24890     return list;
24891
24892   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default", location);
24893   c = build_omp_clause (location, OMP_CLAUSE_DEFAULT);
24894   OMP_CLAUSE_CHAIN (c) = list;
24895   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
24896
24897   return c;
24898 }
24899
24900 /* OpenMP 3.1:
24901    final ( expression ) */
24902
24903 static tree
24904 cp_parser_omp_clause_final (cp_parser *parser, tree list, location_t location)
24905 {
24906   tree t, c;
24907
24908   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24909     return list;
24910
24911   t = cp_parser_condition (parser);
24912
24913   if (t == error_mark_node
24914       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24915     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24916                                            /*or_comma=*/false,
24917                                            /*consume_paren=*/true);
24918
24919   check_no_duplicate_clause (list, OMP_CLAUSE_FINAL, "final", location);
24920
24921   c = build_omp_clause (location, OMP_CLAUSE_FINAL);
24922   OMP_CLAUSE_FINAL_EXPR (c) = t;
24923   OMP_CLAUSE_CHAIN (c) = list;
24924
24925   return c;
24926 }
24927
24928 /* OpenMP 2.5:
24929    if ( expression ) */
24930
24931 static tree
24932 cp_parser_omp_clause_if (cp_parser *parser, tree list, location_t location)
24933 {
24934   tree t, c;
24935
24936   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24937     return list;
24938
24939   t = cp_parser_condition (parser);
24940
24941   if (t == error_mark_node
24942       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24943     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24944                                            /*or_comma=*/false,
24945                                            /*consume_paren=*/true);
24946
24947   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if", location);
24948
24949   c = build_omp_clause (location, OMP_CLAUSE_IF);
24950   OMP_CLAUSE_IF_EXPR (c) = t;
24951   OMP_CLAUSE_CHAIN (c) = list;
24952
24953   return c;
24954 }
24955
24956 /* OpenMP 3.1:
24957    mergeable */
24958
24959 static tree
24960 cp_parser_omp_clause_mergeable (cp_parser *parser ATTRIBUTE_UNUSED,
24961                                 tree list, location_t location)
24962 {
24963   tree c;
24964
24965   check_no_duplicate_clause (list, OMP_CLAUSE_MERGEABLE, "mergeable",
24966                              location);
24967
24968   c = build_omp_clause (location, OMP_CLAUSE_MERGEABLE);
24969   OMP_CLAUSE_CHAIN (c) = list;
24970   return c;
24971 }
24972
24973 /* OpenMP 2.5:
24974    nowait */
24975
24976 static tree
24977 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED,
24978                              tree list, location_t location)
24979 {
24980   tree c;
24981
24982   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait", location);
24983
24984   c = build_omp_clause (location, OMP_CLAUSE_NOWAIT);
24985   OMP_CLAUSE_CHAIN (c) = list;
24986   return c;
24987 }
24988
24989 /* OpenMP 2.5:
24990    num_threads ( expression ) */
24991
24992 static tree
24993 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list,
24994                                   location_t location)
24995 {
24996   tree t, c;
24997
24998   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24999     return list;
25000
25001   t = cp_parser_expression (parser, false, NULL);
25002
25003   if (t == error_mark_node
25004       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25005     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25006                                            /*or_comma=*/false,
25007                                            /*consume_paren=*/true);
25008
25009   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS,
25010                              "num_threads", location);
25011
25012   c = build_omp_clause (location, OMP_CLAUSE_NUM_THREADS);
25013   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
25014   OMP_CLAUSE_CHAIN (c) = list;
25015
25016   return c;
25017 }
25018
25019 /* OpenMP 2.5:
25020    ordered */
25021
25022 static tree
25023 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED,
25024                               tree list, location_t location)
25025 {
25026   tree c;
25027
25028   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED,
25029                              "ordered", location);
25030
25031   c = build_omp_clause (location, OMP_CLAUSE_ORDERED);
25032   OMP_CLAUSE_CHAIN (c) = list;
25033   return c;
25034 }
25035
25036 /* OpenMP 2.5:
25037    reduction ( reduction-operator : variable-list )
25038
25039    reduction-operator:
25040      One of: + * - & ^ | && ||
25041
25042    OpenMP 3.1:
25043
25044    reduction-operator:
25045      One of: + * - & ^ | && || min max  */
25046
25047 static tree
25048 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
25049 {
25050   enum tree_code code;
25051   tree nlist, c;
25052
25053   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25054     return list;
25055
25056   switch (cp_lexer_peek_token (parser->lexer)->type)
25057     {
25058     case CPP_PLUS:
25059       code = PLUS_EXPR;
25060       break;
25061     case CPP_MULT:
25062       code = MULT_EXPR;
25063       break;
25064     case CPP_MINUS:
25065       code = MINUS_EXPR;
25066       break;
25067     case CPP_AND:
25068       code = BIT_AND_EXPR;
25069       break;
25070     case CPP_XOR:
25071       code = BIT_XOR_EXPR;
25072       break;
25073     case CPP_OR:
25074       code = BIT_IOR_EXPR;
25075       break;
25076     case CPP_AND_AND:
25077       code = TRUTH_ANDIF_EXPR;
25078       break;
25079     case CPP_OR_OR:
25080       code = TRUTH_ORIF_EXPR;
25081       break;
25082     case CPP_NAME:
25083       {
25084         tree id = cp_lexer_peek_token (parser->lexer)->u.value;
25085         const char *p = IDENTIFIER_POINTER (id);
25086
25087         if (strcmp (p, "min") == 0)
25088           {
25089             code = MIN_EXPR;
25090             break;
25091           }
25092         if (strcmp (p, "max") == 0)
25093           {
25094             code = MAX_EXPR;
25095             break;
25096           }
25097       }
25098       /* FALLTHROUGH */
25099     default:
25100       cp_parser_error (parser, "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, "
25101                                "%<|%>, %<&&%>, %<||%>, %<min%> or %<max%>");
25102     resync_fail:
25103       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25104                                              /*or_comma=*/false,
25105                                              /*consume_paren=*/true);
25106       return list;
25107     }
25108   cp_lexer_consume_token (parser->lexer);
25109
25110   if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
25111     goto resync_fail;
25112
25113   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
25114   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
25115     OMP_CLAUSE_REDUCTION_CODE (c) = code;
25116
25117   return nlist;
25118 }
25119
25120 /* OpenMP 2.5:
25121    schedule ( schedule-kind )
25122    schedule ( schedule-kind , expression )
25123
25124    schedule-kind:
25125      static | dynamic | guided | runtime | auto  */
25126
25127 static tree
25128 cp_parser_omp_clause_schedule (cp_parser *parser, tree list, location_t location)
25129 {
25130   tree c, t;
25131
25132   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25133     return list;
25134
25135   c = build_omp_clause (location, OMP_CLAUSE_SCHEDULE);
25136
25137   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
25138     {
25139       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
25140       const char *p = IDENTIFIER_POINTER (id);
25141
25142       switch (p[0])
25143         {
25144         case 'd':
25145           if (strcmp ("dynamic", p) != 0)
25146             goto invalid_kind;
25147           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
25148           break;
25149
25150         case 'g':
25151           if (strcmp ("guided", p) != 0)
25152             goto invalid_kind;
25153           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
25154           break;
25155
25156         case 'r':
25157           if (strcmp ("runtime", p) != 0)
25158             goto invalid_kind;
25159           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
25160           break;
25161
25162         default:
25163           goto invalid_kind;
25164         }
25165     }
25166   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
25167     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
25168   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AUTO))
25169     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_AUTO;
25170   else
25171     goto invalid_kind;
25172   cp_lexer_consume_token (parser->lexer);
25173
25174   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
25175     {
25176       cp_token *token;
25177       cp_lexer_consume_token (parser->lexer);
25178
25179       token = cp_lexer_peek_token (parser->lexer);
25180       t = cp_parser_assignment_expression (parser, false, NULL);
25181
25182       if (t == error_mark_node)
25183         goto resync_fail;
25184       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
25185         error_at (token->location, "schedule %<runtime%> does not take "
25186                   "a %<chunk_size%> parameter");
25187       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_AUTO)
25188         error_at (token->location, "schedule %<auto%> does not take "
25189                   "a %<chunk_size%> parameter");
25190       else
25191         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
25192
25193       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25194         goto resync_fail;
25195     }
25196   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_COMMA_CLOSE_PAREN))
25197     goto resync_fail;
25198
25199   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule", location);
25200   OMP_CLAUSE_CHAIN (c) = list;
25201   return c;
25202
25203  invalid_kind:
25204   cp_parser_error (parser, "invalid schedule kind");
25205  resync_fail:
25206   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25207                                          /*or_comma=*/false,
25208                                          /*consume_paren=*/true);
25209   return list;
25210 }
25211
25212 /* OpenMP 3.0:
25213    untied */
25214
25215 static tree
25216 cp_parser_omp_clause_untied (cp_parser *parser ATTRIBUTE_UNUSED,
25217                              tree list, location_t location)
25218 {
25219   tree c;
25220
25221   check_no_duplicate_clause (list, OMP_CLAUSE_UNTIED, "untied", location);
25222
25223   c = build_omp_clause (location, OMP_CLAUSE_UNTIED);
25224   OMP_CLAUSE_CHAIN (c) = list;
25225   return c;
25226 }
25227
25228 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
25229    is a bitmask in MASK.  Return the list of clauses found; the result
25230    of clause default goes in *pdefault.  */
25231
25232 static tree
25233 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
25234                            const char *where, cp_token *pragma_tok)
25235 {
25236   tree clauses = NULL;
25237   bool first = true;
25238   cp_token *token = NULL;
25239
25240   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
25241     {
25242       pragma_omp_clause c_kind;
25243       const char *c_name;
25244       tree prev = clauses;
25245
25246       if (!first && cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
25247         cp_lexer_consume_token (parser->lexer);
25248
25249       token = cp_lexer_peek_token (parser->lexer);
25250       c_kind = cp_parser_omp_clause_name (parser);
25251       first = false;
25252
25253       switch (c_kind)
25254         {
25255         case PRAGMA_OMP_CLAUSE_COLLAPSE:
25256           clauses = cp_parser_omp_clause_collapse (parser, clauses,
25257                                                    token->location);
25258           c_name = "collapse";
25259           break;
25260         case PRAGMA_OMP_CLAUSE_COPYIN:
25261           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
25262           c_name = "copyin";
25263           break;
25264         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
25265           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
25266                                             clauses);
25267           c_name = "copyprivate";
25268           break;
25269         case PRAGMA_OMP_CLAUSE_DEFAULT:
25270           clauses = cp_parser_omp_clause_default (parser, clauses,
25271                                                   token->location);
25272           c_name = "default";
25273           break;
25274         case PRAGMA_OMP_CLAUSE_FINAL:
25275           clauses = cp_parser_omp_clause_final (parser, clauses, token->location);
25276           c_name = "final";
25277           break;
25278         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
25279           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
25280                                             clauses);
25281           c_name = "firstprivate";
25282           break;
25283         case PRAGMA_OMP_CLAUSE_IF:
25284           clauses = cp_parser_omp_clause_if (parser, clauses, token->location);
25285           c_name = "if";
25286           break;
25287         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
25288           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
25289                                             clauses);
25290           c_name = "lastprivate";
25291           break;
25292         case PRAGMA_OMP_CLAUSE_MERGEABLE:
25293           clauses = cp_parser_omp_clause_mergeable (parser, clauses,
25294                                                     token->location);
25295           c_name = "mergeable";
25296           break;
25297         case PRAGMA_OMP_CLAUSE_NOWAIT:
25298           clauses = cp_parser_omp_clause_nowait (parser, clauses, token->location);
25299           c_name = "nowait";
25300           break;
25301         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
25302           clauses = cp_parser_omp_clause_num_threads (parser, clauses,
25303                                                       token->location);
25304           c_name = "num_threads";
25305           break;
25306         case PRAGMA_OMP_CLAUSE_ORDERED:
25307           clauses = cp_parser_omp_clause_ordered (parser, clauses,
25308                                                   token->location);
25309           c_name = "ordered";
25310           break;
25311         case PRAGMA_OMP_CLAUSE_PRIVATE:
25312           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
25313                                             clauses);
25314           c_name = "private";
25315           break;
25316         case PRAGMA_OMP_CLAUSE_REDUCTION:
25317           clauses = cp_parser_omp_clause_reduction (parser, clauses);
25318           c_name = "reduction";
25319           break;
25320         case PRAGMA_OMP_CLAUSE_SCHEDULE:
25321           clauses = cp_parser_omp_clause_schedule (parser, clauses,
25322                                                    token->location);
25323           c_name = "schedule";
25324           break;
25325         case PRAGMA_OMP_CLAUSE_SHARED:
25326           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
25327                                             clauses);
25328           c_name = "shared";
25329           break;
25330         case PRAGMA_OMP_CLAUSE_UNTIED:
25331           clauses = cp_parser_omp_clause_untied (parser, clauses,
25332                                                  token->location);
25333           c_name = "nowait";
25334           break;
25335         default:
25336           cp_parser_error (parser, "expected %<#pragma omp%> clause");
25337           goto saw_error;
25338         }
25339
25340       if (((mask >> c_kind) & 1) == 0)
25341         {
25342           /* Remove the invalid clause(s) from the list to avoid
25343              confusing the rest of the compiler.  */
25344           clauses = prev;
25345           error_at (token->location, "%qs is not valid for %qs", c_name, where);
25346         }
25347     }
25348  saw_error:
25349   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
25350   return finish_omp_clauses (clauses);
25351 }
25352
25353 /* OpenMP 2.5:
25354    structured-block:
25355      statement
25356
25357    In practice, we're also interested in adding the statement to an
25358    outer node.  So it is convenient if we work around the fact that
25359    cp_parser_statement calls add_stmt.  */
25360
25361 static unsigned
25362 cp_parser_begin_omp_structured_block (cp_parser *parser)
25363 {
25364   unsigned save = parser->in_statement;
25365
25366   /* Only move the values to IN_OMP_BLOCK if they weren't false.
25367      This preserves the "not within loop or switch" style error messages
25368      for nonsense cases like
25369         void foo() {
25370         #pragma omp single
25371           break;
25372         }
25373   */
25374   if (parser->in_statement)
25375     parser->in_statement = IN_OMP_BLOCK;
25376
25377   return save;
25378 }
25379
25380 static void
25381 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
25382 {
25383   parser->in_statement = save;
25384 }
25385
25386 static tree
25387 cp_parser_omp_structured_block (cp_parser *parser)
25388 {
25389   tree stmt = begin_omp_structured_block ();
25390   unsigned int save = cp_parser_begin_omp_structured_block (parser);
25391
25392   cp_parser_statement (parser, NULL_TREE, false, NULL);
25393
25394   cp_parser_end_omp_structured_block (parser, save);
25395   return finish_omp_structured_block (stmt);
25396 }
25397
25398 /* OpenMP 2.5:
25399    # pragma omp atomic new-line
25400      expression-stmt
25401
25402    expression-stmt:
25403      x binop= expr | x++ | ++x | x-- | --x
25404    binop:
25405      +, *, -, /, &, ^, |, <<, >>
25406
25407   where x is an lvalue expression with scalar type.
25408
25409    OpenMP 3.1:
25410    # pragma omp atomic new-line
25411      update-stmt
25412
25413    # pragma omp atomic read new-line
25414      read-stmt
25415
25416    # pragma omp atomic write new-line
25417      write-stmt
25418
25419    # pragma omp atomic update new-line
25420      update-stmt
25421
25422    # pragma omp atomic capture new-line
25423      capture-stmt
25424
25425    # pragma omp atomic capture new-line
25426      capture-block
25427
25428    read-stmt:
25429      v = x
25430    write-stmt:
25431      x = expr
25432    update-stmt:
25433      expression-stmt | x = x binop expr
25434    capture-stmt:
25435      v = x binop= expr | v = x++ | v = ++x | v = x-- | v = --x
25436    capture-block:
25437      { v = x; update-stmt; } | { update-stmt; v = x; }
25438
25439   where x and v are lvalue expressions with scalar type.  */
25440
25441 static void
25442 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
25443 {
25444   tree lhs = NULL_TREE, rhs = NULL_TREE, v = NULL_TREE, lhs1 = NULL_TREE;
25445   tree rhs1 = NULL_TREE, orig_lhs;
25446   enum tree_code code = OMP_ATOMIC, opcode = NOP_EXPR;
25447   bool structured_block = false;
25448
25449   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
25450     {
25451       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
25452       const char *p = IDENTIFIER_POINTER (id);
25453
25454       if (!strcmp (p, "read"))
25455         code = OMP_ATOMIC_READ;
25456       else if (!strcmp (p, "write"))
25457         code = NOP_EXPR;
25458       else if (!strcmp (p, "update"))
25459         code = OMP_ATOMIC;
25460       else if (!strcmp (p, "capture"))
25461         code = OMP_ATOMIC_CAPTURE_NEW;
25462       else
25463         p = NULL;
25464       if (p)
25465         cp_lexer_consume_token (parser->lexer);
25466     }
25467   cp_parser_require_pragma_eol (parser, pragma_tok);
25468
25469   switch (code)
25470     {
25471     case OMP_ATOMIC_READ:
25472     case NOP_EXPR: /* atomic write */
25473       v = cp_parser_unary_expression (parser, /*address_p=*/false,
25474                                       /*cast_p=*/false, NULL);
25475       if (v == error_mark_node)
25476         goto saw_error;
25477       if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
25478         goto saw_error;
25479       if (code == NOP_EXPR)
25480         lhs = cp_parser_expression (parser, /*cast_p=*/false, NULL);
25481       else
25482         lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
25483                                           /*cast_p=*/false, NULL);
25484       if (lhs == error_mark_node)
25485         goto saw_error;
25486       if (code == NOP_EXPR)
25487         {
25488           /* atomic write is represented by OMP_ATOMIC with NOP_EXPR
25489              opcode.  */
25490           code = OMP_ATOMIC;
25491           rhs = lhs;
25492           lhs = v;
25493           v = NULL_TREE;
25494         }
25495       goto done;
25496     case OMP_ATOMIC_CAPTURE_NEW:
25497       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
25498         {
25499           cp_lexer_consume_token (parser->lexer);
25500           structured_block = true;
25501         }
25502       else
25503         {
25504           v = cp_parser_unary_expression (parser, /*address_p=*/false,
25505                                           /*cast_p=*/false, NULL);
25506           if (v == error_mark_node)
25507             goto saw_error;
25508           if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
25509             goto saw_error;
25510         }
25511     default:
25512       break;
25513     }
25514
25515 restart:
25516   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
25517                                     /*cast_p=*/false, NULL);
25518   orig_lhs = lhs;
25519   switch (TREE_CODE (lhs))
25520     {
25521     case ERROR_MARK:
25522       goto saw_error;
25523
25524     case POSTINCREMENT_EXPR:
25525       if (code == OMP_ATOMIC_CAPTURE_NEW && !structured_block)
25526         code = OMP_ATOMIC_CAPTURE_OLD;
25527       /* FALLTHROUGH */
25528     case PREINCREMENT_EXPR:
25529       lhs = TREE_OPERAND (lhs, 0);
25530       opcode = PLUS_EXPR;
25531       rhs = integer_one_node;
25532       break;
25533
25534     case POSTDECREMENT_EXPR:
25535       if (code == OMP_ATOMIC_CAPTURE_NEW && !structured_block)
25536         code = OMP_ATOMIC_CAPTURE_OLD;
25537       /* FALLTHROUGH */
25538     case PREDECREMENT_EXPR:
25539       lhs = TREE_OPERAND (lhs, 0);
25540       opcode = MINUS_EXPR;
25541       rhs = integer_one_node;
25542       break;
25543
25544     case COMPOUND_EXPR:
25545       if (TREE_CODE (TREE_OPERAND (lhs, 0)) == SAVE_EXPR
25546          && TREE_CODE (TREE_OPERAND (lhs, 1)) == COMPOUND_EXPR
25547          && TREE_CODE (TREE_OPERAND (TREE_OPERAND (lhs, 1), 0)) == MODIFY_EXPR
25548          && TREE_OPERAND (TREE_OPERAND (lhs, 1), 1) == TREE_OPERAND (lhs, 0)
25549          && TREE_CODE (TREE_TYPE (TREE_OPERAND (TREE_OPERAND
25550                                              (TREE_OPERAND (lhs, 1), 0), 0)))
25551             == BOOLEAN_TYPE)
25552        /* Undo effects of boolean_increment for post {in,de}crement.  */
25553        lhs = TREE_OPERAND (TREE_OPERAND (lhs, 1), 0);
25554       /* FALLTHRU */
25555     case MODIFY_EXPR:
25556       if (TREE_CODE (lhs) == MODIFY_EXPR
25557          && TREE_CODE (TREE_TYPE (TREE_OPERAND (lhs, 0))) == BOOLEAN_TYPE)
25558         {
25559           /* Undo effects of boolean_increment.  */
25560           if (integer_onep (TREE_OPERAND (lhs, 1)))
25561             {
25562               /* This is pre or post increment.  */
25563               rhs = TREE_OPERAND (lhs, 1);
25564               lhs = TREE_OPERAND (lhs, 0);
25565               opcode = NOP_EXPR;
25566               if (code == OMP_ATOMIC_CAPTURE_NEW
25567                   && !structured_block
25568                   && TREE_CODE (orig_lhs) == COMPOUND_EXPR)
25569                 code = OMP_ATOMIC_CAPTURE_OLD;
25570               break;
25571             }
25572         }
25573       /* FALLTHRU */
25574     default:
25575       switch (cp_lexer_peek_token (parser->lexer)->type)
25576         {
25577         case CPP_MULT_EQ:
25578           opcode = MULT_EXPR;
25579           break;
25580         case CPP_DIV_EQ:
25581           opcode = TRUNC_DIV_EXPR;
25582           break;
25583         case CPP_PLUS_EQ:
25584           opcode = PLUS_EXPR;
25585           break;
25586         case CPP_MINUS_EQ:
25587           opcode = MINUS_EXPR;
25588           break;
25589         case CPP_LSHIFT_EQ:
25590           opcode = LSHIFT_EXPR;
25591           break;
25592         case CPP_RSHIFT_EQ:
25593           opcode = RSHIFT_EXPR;
25594           break;
25595         case CPP_AND_EQ:
25596           opcode = BIT_AND_EXPR;
25597           break;
25598         case CPP_OR_EQ:
25599           opcode = BIT_IOR_EXPR;
25600           break;
25601         case CPP_XOR_EQ:
25602           opcode = BIT_XOR_EXPR;
25603           break;
25604         case CPP_EQ:
25605           if (structured_block || code == OMP_ATOMIC)
25606             {
25607               enum cp_parser_prec oprec;
25608               cp_token *token;
25609               cp_lexer_consume_token (parser->lexer);
25610               rhs1 = cp_parser_unary_expression (parser, /*address_p=*/false,
25611                                                  /*cast_p=*/false, NULL);
25612               if (rhs1 == error_mark_node)
25613                 goto saw_error;
25614               token = cp_lexer_peek_token (parser->lexer);
25615               switch (token->type)
25616                 {
25617                 case CPP_SEMICOLON:
25618                   if (code == OMP_ATOMIC_CAPTURE_NEW)
25619                     {
25620                       code = OMP_ATOMIC_CAPTURE_OLD;
25621                       v = lhs;
25622                       lhs = NULL_TREE;
25623                       lhs1 = rhs1;
25624                       rhs1 = NULL_TREE;
25625                       cp_lexer_consume_token (parser->lexer);
25626                       goto restart;
25627                     }
25628                   cp_parser_error (parser,
25629                                    "invalid form of %<#pragma omp atomic%>");
25630                   goto saw_error;
25631                 case CPP_MULT:
25632                   opcode = MULT_EXPR;
25633                   break;
25634                 case CPP_DIV:
25635                   opcode = TRUNC_DIV_EXPR;
25636                   break;
25637                 case CPP_PLUS:
25638                   opcode = PLUS_EXPR;
25639                   break;
25640                 case CPP_MINUS:
25641                   opcode = MINUS_EXPR;
25642                   break;
25643                 case CPP_LSHIFT:
25644                   opcode = LSHIFT_EXPR;
25645                   break;
25646                 case CPP_RSHIFT:
25647                   opcode = RSHIFT_EXPR;
25648                   break;
25649                 case CPP_AND:
25650                   opcode = BIT_AND_EXPR;
25651                   break;
25652                 case CPP_OR:
25653                   opcode = BIT_IOR_EXPR;
25654                   break;
25655                 case CPP_XOR:
25656                   opcode = BIT_XOR_EXPR;
25657                   break;
25658                 default:
25659                   cp_parser_error (parser,
25660                                    "invalid operator for %<#pragma omp atomic%>");
25661                   goto saw_error;
25662                 }
25663               oprec = TOKEN_PRECEDENCE (token);
25664               gcc_assert (oprec != PREC_NOT_OPERATOR);
25665               if (commutative_tree_code (opcode))
25666                 oprec = (enum cp_parser_prec) (oprec - 1);
25667               cp_lexer_consume_token (parser->lexer);
25668               rhs = cp_parser_binary_expression (parser, false, false,
25669                                                  oprec, NULL);
25670               if (rhs == error_mark_node)
25671                 goto saw_error;
25672               goto stmt_done;
25673             }
25674           /* FALLTHROUGH */
25675         default:
25676           cp_parser_error (parser,
25677                            "invalid operator for %<#pragma omp atomic%>");
25678           goto saw_error;
25679         }
25680       cp_lexer_consume_token (parser->lexer);
25681
25682       rhs = cp_parser_expression (parser, false, NULL);
25683       if (rhs == error_mark_node)
25684         goto saw_error;
25685       break;
25686     }
25687 stmt_done:
25688   if (structured_block && code == OMP_ATOMIC_CAPTURE_NEW)
25689     {
25690       if (!cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON))
25691         goto saw_error;
25692       v = cp_parser_unary_expression (parser, /*address_p=*/false,
25693                                       /*cast_p=*/false, NULL);
25694       if (v == error_mark_node)
25695         goto saw_error;
25696       if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
25697         goto saw_error;
25698       lhs1 = cp_parser_unary_expression (parser, /*address_p=*/false,
25699                                          /*cast_p=*/false, NULL);
25700       if (lhs1 == error_mark_node)
25701         goto saw_error;
25702     }
25703   if (structured_block)
25704     {
25705       cp_parser_consume_semicolon_at_end_of_statement (parser);
25706       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
25707     }
25708 done:
25709   finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
25710   if (!structured_block)
25711     cp_parser_consume_semicolon_at_end_of_statement (parser);
25712   return;
25713
25714  saw_error:
25715   cp_parser_skip_to_end_of_block_or_statement (parser);
25716   if (structured_block)
25717     {
25718       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
25719         cp_lexer_consume_token (parser->lexer);
25720       else if (code == OMP_ATOMIC_CAPTURE_NEW)
25721         {
25722           cp_parser_skip_to_end_of_block_or_statement (parser);
25723           if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
25724             cp_lexer_consume_token (parser->lexer);
25725         }
25726     }
25727 }
25728
25729
25730 /* OpenMP 2.5:
25731    # pragma omp barrier new-line  */
25732
25733 static void
25734 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
25735 {
25736   cp_parser_require_pragma_eol (parser, pragma_tok);
25737   finish_omp_barrier ();
25738 }
25739
25740 /* OpenMP 2.5:
25741    # pragma omp critical [(name)] new-line
25742      structured-block  */
25743
25744 static tree
25745 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
25746 {
25747   tree stmt, name = NULL;
25748
25749   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
25750     {
25751       cp_lexer_consume_token (parser->lexer);
25752
25753       name = cp_parser_identifier (parser);
25754
25755       if (name == error_mark_node
25756           || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25757         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25758                                                /*or_comma=*/false,
25759                                                /*consume_paren=*/true);
25760       if (name == error_mark_node)
25761         name = NULL;
25762     }
25763   cp_parser_require_pragma_eol (parser, pragma_tok);
25764
25765   stmt = cp_parser_omp_structured_block (parser);
25766   return c_finish_omp_critical (input_location, stmt, name);
25767 }
25768
25769 /* OpenMP 2.5:
25770    # pragma omp flush flush-vars[opt] new-line
25771
25772    flush-vars:
25773      ( variable-list ) */
25774
25775 static void
25776 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
25777 {
25778   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
25779     (void) cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
25780   cp_parser_require_pragma_eol (parser, pragma_tok);
25781
25782   finish_omp_flush ();
25783 }
25784
25785 /* Helper function, to parse omp for increment expression.  */
25786
25787 static tree
25788 cp_parser_omp_for_cond (cp_parser *parser, tree decl)
25789 {
25790   tree cond = cp_parser_binary_expression (parser, false, true,
25791                                            PREC_NOT_OPERATOR, NULL);
25792   if (cond == error_mark_node
25793       || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
25794     {
25795       cp_parser_skip_to_end_of_statement (parser);
25796       return error_mark_node;
25797     }
25798
25799   switch (TREE_CODE (cond))
25800     {
25801     case GT_EXPR:
25802     case GE_EXPR:
25803     case LT_EXPR:
25804     case LE_EXPR:
25805       break;
25806     default:
25807       return error_mark_node;
25808     }
25809
25810   /* If decl is an iterator, preserve LHS and RHS of the relational
25811      expr until finish_omp_for.  */
25812   if (decl
25813       && (type_dependent_expression_p (decl)
25814           || CLASS_TYPE_P (TREE_TYPE (decl))))
25815     return cond;
25816
25817   return build_x_binary_op (TREE_CODE (cond),
25818                             TREE_OPERAND (cond, 0), ERROR_MARK,
25819                             TREE_OPERAND (cond, 1), ERROR_MARK,
25820                             /*overload=*/NULL, tf_warning_or_error);
25821 }
25822
25823 /* Helper function, to parse omp for increment expression.  */
25824
25825 static tree
25826 cp_parser_omp_for_incr (cp_parser *parser, tree decl)
25827 {
25828   cp_token *token = cp_lexer_peek_token (parser->lexer);
25829   enum tree_code op;
25830   tree lhs, rhs;
25831   cp_id_kind idk;
25832   bool decl_first;
25833
25834   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
25835     {
25836       op = (token->type == CPP_PLUS_PLUS
25837             ? PREINCREMENT_EXPR : PREDECREMENT_EXPR);
25838       cp_lexer_consume_token (parser->lexer);
25839       lhs = cp_parser_cast_expression (parser, false, false, NULL);
25840       if (lhs != decl)
25841         return error_mark_node;
25842       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
25843     }
25844
25845   lhs = cp_parser_primary_expression (parser, false, false, false, &idk);
25846   if (lhs != decl)
25847     return error_mark_node;
25848
25849   token = cp_lexer_peek_token (parser->lexer);
25850   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
25851     {
25852       op = (token->type == CPP_PLUS_PLUS
25853             ? POSTINCREMENT_EXPR : POSTDECREMENT_EXPR);
25854       cp_lexer_consume_token (parser->lexer);
25855       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
25856     }
25857
25858   op = cp_parser_assignment_operator_opt (parser);
25859   if (op == ERROR_MARK)
25860     return error_mark_node;
25861
25862   if (op != NOP_EXPR)
25863     {
25864       rhs = cp_parser_assignment_expression (parser, false, NULL);
25865       rhs = build2 (op, TREE_TYPE (decl), decl, rhs);
25866       return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
25867     }
25868
25869   lhs = cp_parser_binary_expression (parser, false, false,
25870                                      PREC_ADDITIVE_EXPRESSION, NULL);
25871   token = cp_lexer_peek_token (parser->lexer);
25872   decl_first = lhs == decl;
25873   if (decl_first)
25874     lhs = NULL_TREE;
25875   if (token->type != CPP_PLUS
25876       && token->type != CPP_MINUS)
25877     return error_mark_node;
25878
25879   do
25880     {
25881       op = token->type == CPP_PLUS ? PLUS_EXPR : MINUS_EXPR;
25882       cp_lexer_consume_token (parser->lexer);
25883       rhs = cp_parser_binary_expression (parser, false, false,
25884                                          PREC_ADDITIVE_EXPRESSION, NULL);
25885       token = cp_lexer_peek_token (parser->lexer);
25886       if (token->type == CPP_PLUS || token->type == CPP_MINUS || decl_first)
25887         {
25888           if (lhs == NULL_TREE)
25889             {
25890               if (op == PLUS_EXPR)
25891                 lhs = rhs;
25892               else
25893                 lhs = build_x_unary_op (NEGATE_EXPR, rhs, tf_warning_or_error);
25894             }
25895           else
25896             lhs = build_x_binary_op (op, lhs, ERROR_MARK, rhs, ERROR_MARK,
25897                                      NULL, tf_warning_or_error);
25898         }
25899     }
25900   while (token->type == CPP_PLUS || token->type == CPP_MINUS);
25901
25902   if (!decl_first)
25903     {
25904       if (rhs != decl || op == MINUS_EXPR)
25905         return error_mark_node;
25906       rhs = build2 (op, TREE_TYPE (decl), lhs, decl);
25907     }
25908   else
25909     rhs = build2 (PLUS_EXPR, TREE_TYPE (decl), decl, lhs);
25910
25911   return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
25912 }
25913
25914 /* Parse the restricted form of the for statement allowed by OpenMP.  */
25915
25916 static tree
25917 cp_parser_omp_for_loop (cp_parser *parser, tree clauses, tree *par_clauses)
25918 {
25919   tree init, cond, incr, body, decl, pre_body = NULL_TREE, ret;
25920   tree real_decl, initv, condv, incrv, declv;
25921   tree this_pre_body, cl;
25922   location_t loc_first;
25923   bool collapse_err = false;
25924   int i, collapse = 1, nbraces = 0;
25925   VEC(tree,gc) *for_block = make_tree_vector ();
25926
25927   for (cl = clauses; cl; cl = OMP_CLAUSE_CHAIN (cl))
25928     if (OMP_CLAUSE_CODE (cl) == OMP_CLAUSE_COLLAPSE)
25929       collapse = tree_low_cst (OMP_CLAUSE_COLLAPSE_EXPR (cl), 0);
25930
25931   gcc_assert (collapse >= 1);
25932
25933   declv = make_tree_vec (collapse);
25934   initv = make_tree_vec (collapse);
25935   condv = make_tree_vec (collapse);
25936   incrv = make_tree_vec (collapse);
25937
25938   loc_first = cp_lexer_peek_token (parser->lexer)->location;
25939
25940   for (i = 0; i < collapse; i++)
25941     {
25942       int bracecount = 0;
25943       bool add_private_clause = false;
25944       location_t loc;
25945
25946       if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
25947         {
25948           cp_parser_error (parser, "for statement expected");
25949           return NULL;
25950         }
25951       loc = cp_lexer_consume_token (parser->lexer)->location;
25952
25953       if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25954         return NULL;
25955
25956       init = decl = real_decl = NULL;
25957       this_pre_body = push_stmt_list ();
25958       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
25959         {
25960           /* See 2.5.1 (in OpenMP 3.0, similar wording is in 2.5 standard too):
25961
25962              init-expr:
25963                        var = lb
25964                        integer-type var = lb
25965                        random-access-iterator-type var = lb
25966                        pointer-type var = lb
25967           */
25968           cp_decl_specifier_seq type_specifiers;
25969
25970           /* First, try to parse as an initialized declaration.  See
25971              cp_parser_condition, from whence the bulk of this is copied.  */
25972
25973           cp_parser_parse_tentatively (parser);
25974           cp_parser_type_specifier_seq (parser, /*is_declaration=*/true,
25975                                         /*is_trailing_return=*/false,
25976                                         &type_specifiers);
25977           if (cp_parser_parse_definitely (parser))
25978             {
25979               /* If parsing a type specifier seq succeeded, then this
25980                  MUST be a initialized declaration.  */
25981               tree asm_specification, attributes;
25982               cp_declarator *declarator;
25983
25984               declarator = cp_parser_declarator (parser,
25985                                                  CP_PARSER_DECLARATOR_NAMED,
25986                                                  /*ctor_dtor_or_conv_p=*/NULL,
25987                                                  /*parenthesized_p=*/NULL,
25988                                                  /*member_p=*/false);
25989               attributes = cp_parser_attributes_opt (parser);
25990               asm_specification = cp_parser_asm_specification_opt (parser);
25991
25992               if (declarator == cp_error_declarator) 
25993                 cp_parser_skip_to_end_of_statement (parser);
25994
25995               else 
25996                 {
25997                   tree pushed_scope, auto_node;
25998
25999                   decl = start_decl (declarator, &type_specifiers,
26000                                      SD_INITIALIZED, attributes,
26001                                      /*prefix_attributes=*/NULL_TREE,
26002                                      &pushed_scope);
26003
26004                   auto_node = type_uses_auto (TREE_TYPE (decl));
26005                   if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
26006                     {
26007                       if (cp_lexer_next_token_is (parser->lexer, 
26008                                                   CPP_OPEN_PAREN))
26009                         error ("parenthesized initialization is not allowed in "
26010                                "OpenMP %<for%> loop");
26011                       else
26012                         /* Trigger an error.  */
26013                         cp_parser_require (parser, CPP_EQ, RT_EQ);
26014
26015                       init = error_mark_node;
26016                       cp_parser_skip_to_end_of_statement (parser);
26017                     }
26018                   else if (CLASS_TYPE_P (TREE_TYPE (decl))
26019                            || type_dependent_expression_p (decl)
26020                            || auto_node)
26021                     {
26022                       bool is_direct_init, is_non_constant_init;
26023
26024                       init = cp_parser_initializer (parser,
26025                                                     &is_direct_init,
26026                                                     &is_non_constant_init);
26027
26028                       if (auto_node)
26029                         {
26030                           TREE_TYPE (decl)
26031                             = do_auto_deduction (TREE_TYPE (decl), init,
26032                                                  auto_node);
26033
26034                           if (!CLASS_TYPE_P (TREE_TYPE (decl))
26035                               && !type_dependent_expression_p (decl))
26036                             goto non_class;
26037                         }
26038                       
26039                       cp_finish_decl (decl, init, !is_non_constant_init,
26040                                       asm_specification,
26041                                       LOOKUP_ONLYCONVERTING);
26042                       if (CLASS_TYPE_P (TREE_TYPE (decl)))
26043                         {
26044                           VEC_safe_push (tree, gc, for_block, this_pre_body);
26045                           init = NULL_TREE;
26046                         }
26047                       else
26048                         init = pop_stmt_list (this_pre_body);
26049                       this_pre_body = NULL_TREE;
26050                     }
26051                   else
26052                     {
26053                       /* Consume '='.  */
26054                       cp_lexer_consume_token (parser->lexer);
26055                       init = cp_parser_assignment_expression (parser, false, NULL);
26056
26057                     non_class:
26058                       if (TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
26059                         init = error_mark_node;
26060                       else
26061                         cp_finish_decl (decl, NULL_TREE,
26062                                         /*init_const_expr_p=*/false,
26063                                         asm_specification,
26064                                         LOOKUP_ONLYCONVERTING);
26065                     }
26066
26067                   if (pushed_scope)
26068                     pop_scope (pushed_scope);
26069                 }
26070             }
26071           else 
26072             {
26073               cp_id_kind idk;
26074               /* If parsing a type specifier sequence failed, then
26075                  this MUST be a simple expression.  */
26076               cp_parser_parse_tentatively (parser);
26077               decl = cp_parser_primary_expression (parser, false, false,
26078                                                    false, &idk);
26079               if (!cp_parser_error_occurred (parser)
26080                   && decl
26081                   && DECL_P (decl)
26082                   && CLASS_TYPE_P (TREE_TYPE (decl)))
26083                 {
26084                   tree rhs;
26085
26086                   cp_parser_parse_definitely (parser);
26087                   cp_parser_require (parser, CPP_EQ, RT_EQ);
26088                   rhs = cp_parser_assignment_expression (parser, false, NULL);
26089                   finish_expr_stmt (build_x_modify_expr (decl, NOP_EXPR,
26090                                                          rhs,
26091                                                          tf_warning_or_error));
26092                   add_private_clause = true;
26093                 }
26094               else
26095                 {
26096                   decl = NULL;
26097                   cp_parser_abort_tentative_parse (parser);
26098                   init = cp_parser_expression (parser, false, NULL);
26099                   if (init)
26100                     {
26101                       if (TREE_CODE (init) == MODIFY_EXPR
26102                           || TREE_CODE (init) == MODOP_EXPR)
26103                         real_decl = TREE_OPERAND (init, 0);
26104                     }
26105                 }
26106             }
26107         }
26108       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
26109       if (this_pre_body)
26110         {
26111           this_pre_body = pop_stmt_list (this_pre_body);
26112           if (pre_body)
26113             {
26114               tree t = pre_body;
26115               pre_body = push_stmt_list ();
26116               add_stmt (t);
26117               add_stmt (this_pre_body);
26118               pre_body = pop_stmt_list (pre_body);
26119             }
26120           else
26121             pre_body = this_pre_body;
26122         }
26123
26124       if (decl)
26125         real_decl = decl;
26126       if (par_clauses != NULL && real_decl != NULL_TREE)
26127         {
26128           tree *c;
26129           for (c = par_clauses; *c ; )
26130             if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_FIRSTPRIVATE
26131                 && OMP_CLAUSE_DECL (*c) == real_decl)
26132               {
26133                 error_at (loc, "iteration variable %qD"
26134                           " should not be firstprivate", real_decl);
26135                 *c = OMP_CLAUSE_CHAIN (*c);
26136               }
26137             else if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_LASTPRIVATE
26138                      && OMP_CLAUSE_DECL (*c) == real_decl)
26139               {
26140                 /* Add lastprivate (decl) clause to OMP_FOR_CLAUSES,
26141                    change it to shared (decl) in OMP_PARALLEL_CLAUSES.  */
26142                 tree l = build_omp_clause (loc, OMP_CLAUSE_LASTPRIVATE);
26143                 OMP_CLAUSE_DECL (l) = real_decl;
26144                 OMP_CLAUSE_CHAIN (l) = clauses;
26145                 CP_OMP_CLAUSE_INFO (l) = CP_OMP_CLAUSE_INFO (*c);
26146                 clauses = l;
26147                 OMP_CLAUSE_SET_CODE (*c, OMP_CLAUSE_SHARED);
26148                 CP_OMP_CLAUSE_INFO (*c) = NULL;
26149                 add_private_clause = false;
26150               }
26151             else
26152               {
26153                 if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_PRIVATE
26154                     && OMP_CLAUSE_DECL (*c) == real_decl)
26155                   add_private_clause = false;
26156                 c = &OMP_CLAUSE_CHAIN (*c);
26157               }
26158         }
26159
26160       if (add_private_clause)
26161         {
26162           tree c;
26163           for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
26164             {
26165               if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
26166                    || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
26167                   && OMP_CLAUSE_DECL (c) == decl)
26168                 break;
26169               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
26170                        && OMP_CLAUSE_DECL (c) == decl)
26171                 error_at (loc, "iteration variable %qD "
26172                           "should not be firstprivate",
26173                           decl);
26174               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
26175                        && OMP_CLAUSE_DECL (c) == decl)
26176                 error_at (loc, "iteration variable %qD should not be reduction",
26177                           decl);
26178             }
26179           if (c == NULL)
26180             {
26181               c = build_omp_clause (loc, OMP_CLAUSE_PRIVATE);
26182               OMP_CLAUSE_DECL (c) = decl;
26183               c = finish_omp_clauses (c);
26184               if (c)
26185                 {
26186                   OMP_CLAUSE_CHAIN (c) = clauses;
26187                   clauses = c;
26188                 }
26189             }
26190         }
26191
26192       cond = NULL;
26193       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
26194         cond = cp_parser_omp_for_cond (parser, decl);
26195       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
26196
26197       incr = NULL;
26198       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
26199         {
26200           /* If decl is an iterator, preserve the operator on decl
26201              until finish_omp_for.  */
26202           if (decl
26203               && ((type_dependent_expression_p (decl)
26204                    && !POINTER_TYPE_P (TREE_TYPE (decl)))
26205                   || CLASS_TYPE_P (TREE_TYPE (decl))))
26206             incr = cp_parser_omp_for_incr (parser, decl);
26207           else
26208             incr = cp_parser_expression (parser, false, NULL);
26209         }
26210
26211       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
26212         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
26213                                                /*or_comma=*/false,
26214                                                /*consume_paren=*/true);
26215
26216       TREE_VEC_ELT (declv, i) = decl;
26217       TREE_VEC_ELT (initv, i) = init;
26218       TREE_VEC_ELT (condv, i) = cond;
26219       TREE_VEC_ELT (incrv, i) = incr;
26220
26221       if (i == collapse - 1)
26222         break;
26223
26224       /* FIXME: OpenMP 3.0 draft isn't very clear on what exactly is allowed
26225          in between the collapsed for loops to be still considered perfectly
26226          nested.  Hopefully the final version clarifies this.
26227          For now handle (multiple) {'s and empty statements.  */
26228       cp_parser_parse_tentatively (parser);
26229       do
26230         {
26231           if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
26232             break;
26233           else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
26234             {
26235               cp_lexer_consume_token (parser->lexer);
26236               bracecount++;
26237             }
26238           else if (bracecount
26239                    && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
26240             cp_lexer_consume_token (parser->lexer);
26241           else
26242             {
26243               loc = cp_lexer_peek_token (parser->lexer)->location;
26244               error_at (loc, "not enough collapsed for loops");
26245               collapse_err = true;
26246               cp_parser_abort_tentative_parse (parser);
26247               declv = NULL_TREE;
26248               break;
26249             }
26250         }
26251       while (1);
26252
26253       if (declv)
26254         {
26255           cp_parser_parse_definitely (parser);
26256           nbraces += bracecount;
26257         }
26258     }
26259
26260   /* Note that we saved the original contents of this flag when we entered
26261      the structured block, and so we don't need to re-save it here.  */
26262   parser->in_statement = IN_OMP_FOR;
26263
26264   /* Note that the grammar doesn't call for a structured block here,
26265      though the loop as a whole is a structured block.  */
26266   body = push_stmt_list ();
26267   cp_parser_statement (parser, NULL_TREE, false, NULL);
26268   body = pop_stmt_list (body);
26269
26270   if (declv == NULL_TREE)
26271     ret = NULL_TREE;
26272   else
26273     ret = finish_omp_for (loc_first, declv, initv, condv, incrv, body,
26274                           pre_body, clauses);
26275
26276   while (nbraces)
26277     {
26278       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
26279         {
26280           cp_lexer_consume_token (parser->lexer);
26281           nbraces--;
26282         }
26283       else if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
26284         cp_lexer_consume_token (parser->lexer);
26285       else
26286         {
26287           if (!collapse_err)
26288             {
26289               error_at (cp_lexer_peek_token (parser->lexer)->location,
26290                         "collapsed loops not perfectly nested");
26291             }
26292           collapse_err = true;
26293           cp_parser_statement_seq_opt (parser, NULL);
26294           if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
26295             break;
26296         }
26297     }
26298
26299   while (!VEC_empty (tree, for_block))
26300     add_stmt (pop_stmt_list (VEC_pop (tree, for_block)));
26301   release_tree_vector (for_block);
26302
26303   return ret;
26304 }
26305
26306 /* OpenMP 2.5:
26307    #pragma omp for for-clause[optseq] new-line
26308      for-loop  */
26309
26310 #define OMP_FOR_CLAUSE_MASK                             \
26311         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26312         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26313         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
26314         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
26315         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
26316         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
26317         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT)              \
26318         | (1u << PRAGMA_OMP_CLAUSE_COLLAPSE))
26319
26320 static tree
26321 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
26322 {
26323   tree clauses, sb, ret;
26324   unsigned int save;
26325
26326   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
26327                                        "#pragma omp for", pragma_tok);
26328
26329   sb = begin_omp_structured_block ();
26330   save = cp_parser_begin_omp_structured_block (parser);
26331
26332   ret = cp_parser_omp_for_loop (parser, clauses, NULL);
26333
26334   cp_parser_end_omp_structured_block (parser, save);
26335   add_stmt (finish_omp_structured_block (sb));
26336
26337   return ret;
26338 }
26339
26340 /* OpenMP 2.5:
26341    # pragma omp master new-line
26342      structured-block  */
26343
26344 static tree
26345 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
26346 {
26347   cp_parser_require_pragma_eol (parser, pragma_tok);
26348   return c_finish_omp_master (input_location,
26349                               cp_parser_omp_structured_block (parser));
26350 }
26351
26352 /* OpenMP 2.5:
26353    # pragma omp ordered new-line
26354      structured-block  */
26355
26356 static tree
26357 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
26358 {
26359   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
26360   cp_parser_require_pragma_eol (parser, pragma_tok);
26361   return c_finish_omp_ordered (loc, cp_parser_omp_structured_block (parser));
26362 }
26363
26364 /* OpenMP 2.5:
26365
26366    section-scope:
26367      { section-sequence }
26368
26369    section-sequence:
26370      section-directive[opt] structured-block
26371      section-sequence section-directive structured-block  */
26372
26373 static tree
26374 cp_parser_omp_sections_scope (cp_parser *parser)
26375 {
26376   tree stmt, substmt;
26377   bool error_suppress = false;
26378   cp_token *tok;
26379
26380   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
26381     return NULL_TREE;
26382
26383   stmt = push_stmt_list ();
26384
26385   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
26386     {
26387       unsigned save;
26388
26389       substmt = begin_omp_structured_block ();
26390       save = cp_parser_begin_omp_structured_block (parser);
26391
26392       while (1)
26393         {
26394           cp_parser_statement (parser, NULL_TREE, false, NULL);
26395
26396           tok = cp_lexer_peek_token (parser->lexer);
26397           if (tok->pragma_kind == PRAGMA_OMP_SECTION)
26398             break;
26399           if (tok->type == CPP_CLOSE_BRACE)
26400             break;
26401           if (tok->type == CPP_EOF)
26402             break;
26403         }
26404
26405       cp_parser_end_omp_structured_block (parser, save);
26406       substmt = finish_omp_structured_block (substmt);
26407       substmt = build1 (OMP_SECTION, void_type_node, substmt);
26408       add_stmt (substmt);
26409     }
26410
26411   while (1)
26412     {
26413       tok = cp_lexer_peek_token (parser->lexer);
26414       if (tok->type == CPP_CLOSE_BRACE)
26415         break;
26416       if (tok->type == CPP_EOF)
26417         break;
26418
26419       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
26420         {
26421           cp_lexer_consume_token (parser->lexer);
26422           cp_parser_require_pragma_eol (parser, tok);
26423           error_suppress = false;
26424         }
26425       else if (!error_suppress)
26426         {
26427           cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
26428           error_suppress = true;
26429         }
26430
26431       substmt = cp_parser_omp_structured_block (parser);
26432       substmt = build1 (OMP_SECTION, void_type_node, substmt);
26433       add_stmt (substmt);
26434     }
26435   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
26436
26437   substmt = pop_stmt_list (stmt);
26438
26439   stmt = make_node (OMP_SECTIONS);
26440   TREE_TYPE (stmt) = void_type_node;
26441   OMP_SECTIONS_BODY (stmt) = substmt;
26442
26443   add_stmt (stmt);
26444   return stmt;
26445 }
26446
26447 /* OpenMP 2.5:
26448    # pragma omp sections sections-clause[optseq] newline
26449      sections-scope  */
26450
26451 #define OMP_SECTIONS_CLAUSE_MASK                        \
26452         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26453         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26454         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
26455         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
26456         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
26457
26458 static tree
26459 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
26460 {
26461   tree clauses, ret;
26462
26463   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
26464                                        "#pragma omp sections", pragma_tok);
26465
26466   ret = cp_parser_omp_sections_scope (parser);
26467   if (ret)
26468     OMP_SECTIONS_CLAUSES (ret) = clauses;
26469
26470   return ret;
26471 }
26472
26473 /* OpenMP 2.5:
26474    # pragma parallel parallel-clause new-line
26475    # pragma parallel for parallel-for-clause new-line
26476    # pragma parallel sections parallel-sections-clause new-line  */
26477
26478 #define OMP_PARALLEL_CLAUSE_MASK                        \
26479         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
26480         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26481         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26482         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
26483         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
26484         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
26485         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
26486         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
26487
26488 static tree
26489 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
26490 {
26491   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
26492   const char *p_name = "#pragma omp parallel";
26493   tree stmt, clauses, par_clause, ws_clause, block;
26494   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
26495   unsigned int save;
26496   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
26497
26498   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
26499     {
26500       cp_lexer_consume_token (parser->lexer);
26501       p_kind = PRAGMA_OMP_PARALLEL_FOR;
26502       p_name = "#pragma omp parallel for";
26503       mask |= OMP_FOR_CLAUSE_MASK;
26504       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
26505     }
26506   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
26507     {
26508       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
26509       const char *p = IDENTIFIER_POINTER (id);
26510       if (strcmp (p, "sections") == 0)
26511         {
26512           cp_lexer_consume_token (parser->lexer);
26513           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
26514           p_name = "#pragma omp parallel sections";
26515           mask |= OMP_SECTIONS_CLAUSE_MASK;
26516           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
26517         }
26518     }
26519
26520   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
26521   block = begin_omp_parallel ();
26522   save = cp_parser_begin_omp_structured_block (parser);
26523
26524   switch (p_kind)
26525     {
26526     case PRAGMA_OMP_PARALLEL:
26527       cp_parser_statement (parser, NULL_TREE, false, NULL);
26528       par_clause = clauses;
26529       break;
26530
26531     case PRAGMA_OMP_PARALLEL_FOR:
26532       c_split_parallel_clauses (loc, clauses, &par_clause, &ws_clause);
26533       cp_parser_omp_for_loop (parser, ws_clause, &par_clause);
26534       break;
26535
26536     case PRAGMA_OMP_PARALLEL_SECTIONS:
26537       c_split_parallel_clauses (loc, clauses, &par_clause, &ws_clause);
26538       stmt = cp_parser_omp_sections_scope (parser);
26539       if (stmt)
26540         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
26541       break;
26542
26543     default:
26544       gcc_unreachable ();
26545     }
26546
26547   cp_parser_end_omp_structured_block (parser, save);
26548   stmt = finish_omp_parallel (par_clause, block);
26549   if (p_kind != PRAGMA_OMP_PARALLEL)
26550     OMP_PARALLEL_COMBINED (stmt) = 1;
26551   return stmt;
26552 }
26553
26554 /* OpenMP 2.5:
26555    # pragma omp single single-clause[optseq] new-line
26556      structured-block  */
26557
26558 #define OMP_SINGLE_CLAUSE_MASK                          \
26559         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26560         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26561         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
26562         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
26563
26564 static tree
26565 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
26566 {
26567   tree stmt = make_node (OMP_SINGLE);
26568   TREE_TYPE (stmt) = void_type_node;
26569
26570   OMP_SINGLE_CLAUSES (stmt)
26571     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
26572                                  "#pragma omp single", pragma_tok);
26573   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
26574
26575   return add_stmt (stmt);
26576 }
26577
26578 /* OpenMP 3.0:
26579    # pragma omp task task-clause[optseq] new-line
26580      structured-block  */
26581
26582 #define OMP_TASK_CLAUSE_MASK                            \
26583         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
26584         | (1u << PRAGMA_OMP_CLAUSE_UNTIED)              \
26585         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
26586         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26587         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26588         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
26589         | (1u << PRAGMA_OMP_CLAUSE_FINAL)               \
26590         | (1u << PRAGMA_OMP_CLAUSE_MERGEABLE))
26591
26592 static tree
26593 cp_parser_omp_task (cp_parser *parser, cp_token *pragma_tok)
26594 {
26595   tree clauses, block;
26596   unsigned int save;
26597
26598   clauses = cp_parser_omp_all_clauses (parser, OMP_TASK_CLAUSE_MASK,
26599                                        "#pragma omp task", pragma_tok);
26600   block = begin_omp_task ();
26601   save = cp_parser_begin_omp_structured_block (parser);
26602   cp_parser_statement (parser, NULL_TREE, false, NULL);
26603   cp_parser_end_omp_structured_block (parser, save);
26604   return finish_omp_task (clauses, block);
26605 }
26606
26607 /* OpenMP 3.0:
26608    # pragma omp taskwait new-line  */
26609
26610 static void
26611 cp_parser_omp_taskwait (cp_parser *parser, cp_token *pragma_tok)
26612 {
26613   cp_parser_require_pragma_eol (parser, pragma_tok);
26614   finish_omp_taskwait ();
26615 }
26616
26617 /* OpenMP 3.1:
26618    # pragma omp taskyield new-line  */
26619
26620 static void
26621 cp_parser_omp_taskyield (cp_parser *parser, cp_token *pragma_tok)
26622 {
26623   cp_parser_require_pragma_eol (parser, pragma_tok);
26624   finish_omp_taskyield ();
26625 }
26626
26627 /* OpenMP 2.5:
26628    # pragma omp threadprivate (variable-list) */
26629
26630 static void
26631 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
26632 {
26633   tree vars;
26634
26635   vars = cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
26636   cp_parser_require_pragma_eol (parser, pragma_tok);
26637
26638   finish_omp_threadprivate (vars);
26639 }
26640
26641 /* Main entry point to OpenMP statement pragmas.  */
26642
26643 static void
26644 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
26645 {
26646   tree stmt;
26647
26648   switch (pragma_tok->pragma_kind)
26649     {
26650     case PRAGMA_OMP_ATOMIC:
26651       cp_parser_omp_atomic (parser, pragma_tok);
26652       return;
26653     case PRAGMA_OMP_CRITICAL:
26654       stmt = cp_parser_omp_critical (parser, pragma_tok);
26655       break;
26656     case PRAGMA_OMP_FOR:
26657       stmt = cp_parser_omp_for (parser, pragma_tok);
26658       break;
26659     case PRAGMA_OMP_MASTER:
26660       stmt = cp_parser_omp_master (parser, pragma_tok);
26661       break;
26662     case PRAGMA_OMP_ORDERED:
26663       stmt = cp_parser_omp_ordered (parser, pragma_tok);
26664       break;
26665     case PRAGMA_OMP_PARALLEL:
26666       stmt = cp_parser_omp_parallel (parser, pragma_tok);
26667       break;
26668     case PRAGMA_OMP_SECTIONS:
26669       stmt = cp_parser_omp_sections (parser, pragma_tok);
26670       break;
26671     case PRAGMA_OMP_SINGLE:
26672       stmt = cp_parser_omp_single (parser, pragma_tok);
26673       break;
26674     case PRAGMA_OMP_TASK:
26675       stmt = cp_parser_omp_task (parser, pragma_tok);
26676       break;
26677     default:
26678       gcc_unreachable ();
26679     }
26680
26681   if (stmt)
26682     SET_EXPR_LOCATION (stmt, pragma_tok->location);
26683 }
26684 \f
26685 /* Transactional Memory parsing routines.  */
26686
26687 /* Parse a transaction attribute.
26688
26689    txn-attribute:
26690         attribute
26691         [ [ identifier ] ]
26692
26693    ??? Simplify this when C++0x bracket attributes are
26694    implemented properly.  */
26695
26696 static tree
26697 cp_parser_txn_attribute_opt (cp_parser *parser)
26698 {
26699   cp_token *token;
26700   tree attr_name, attr = NULL;
26701
26702   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
26703     return cp_parser_attributes_opt (parser);
26704
26705   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
26706     return NULL_TREE;
26707   cp_lexer_consume_token (parser->lexer);
26708   if (!cp_parser_require (parser, CPP_OPEN_SQUARE, RT_OPEN_SQUARE))
26709     goto error1;
26710
26711   token = cp_lexer_peek_token (parser->lexer);
26712   if (token->type == CPP_NAME || token->type == CPP_KEYWORD)
26713     {
26714       token = cp_lexer_consume_token (parser->lexer);
26715
26716       attr_name = (token->type == CPP_KEYWORD
26717                    /* For keywords, use the canonical spelling,
26718                       not the parsed identifier.  */
26719                    ? ridpointers[(int) token->keyword]
26720                    : token->u.value);
26721       attr = build_tree_list (attr_name, NULL_TREE);
26722     }
26723   else
26724     cp_parser_error (parser, "expected identifier");
26725
26726   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
26727  error1:
26728   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
26729   return attr;
26730 }
26731
26732 /* Parse a __transaction_atomic or __transaction_relaxed statement.
26733
26734    transaction-statement:
26735      __transaction_atomic txn-attribute[opt] txn-exception-spec[opt]
26736        compound-statement
26737      __transaction_relaxed txn-exception-spec[opt] compound-statement
26738
26739    ??? The exception specification is not yet implemented.
26740 */
26741
26742 static tree
26743 cp_parser_transaction (cp_parser *parser, enum rid keyword)
26744 {
26745   unsigned char old_in = parser->in_transaction;
26746   unsigned char this_in = 1, new_in;
26747   cp_token *token;
26748   tree stmt, attrs;
26749
26750   gcc_assert (keyword == RID_TRANSACTION_ATOMIC
26751       || keyword == RID_TRANSACTION_RELAXED);
26752   token = cp_parser_require_keyword (parser, keyword,
26753       (keyword == RID_TRANSACTION_ATOMIC ? RT_TRANSACTION_ATOMIC
26754           : RT_TRANSACTION_RELAXED));
26755   gcc_assert (token != NULL);
26756
26757   if (keyword == RID_TRANSACTION_RELAXED)
26758     this_in |= TM_STMT_ATTR_RELAXED;
26759   else
26760     {
26761       attrs = cp_parser_txn_attribute_opt (parser);
26762       if (attrs)
26763         this_in |= parse_tm_stmt_attr (attrs, TM_STMT_ATTR_OUTER);
26764     }
26765
26766   /* Keep track if we're in the lexical scope of an outer transaction.  */
26767   new_in = this_in | (old_in & TM_STMT_ATTR_OUTER);
26768
26769   stmt = begin_transaction_stmt (token->location, NULL, this_in);
26770
26771   parser->in_transaction = new_in;
26772   cp_parser_compound_statement (parser, NULL, false, false);
26773   parser->in_transaction = old_in;
26774
26775   finish_transaction_stmt (stmt, NULL, this_in);
26776
26777   return stmt;
26778 }
26779
26780 /* Parse a __transaction_atomic or __transaction_relaxed expression.
26781
26782    transaction-expression:
26783      __transaction_atomic txn-exception-spec[opt] ( expression )
26784      __transaction_relaxed txn-exception-spec[opt] ( expression )
26785
26786    ??? The exception specification is not yet implemented.
26787 */
26788
26789 static tree
26790 cp_parser_transaction_expression (cp_parser *parser, enum rid keyword)
26791 {
26792   unsigned char old_in = parser->in_transaction;
26793   unsigned char this_in = 1;
26794   cp_token *token;
26795   tree ret;
26796
26797   gcc_assert (keyword == RID_TRANSACTION_ATOMIC
26798       || keyword == RID_TRANSACTION_RELAXED);
26799
26800   if (!flag_tm)
26801     error (keyword == RID_TRANSACTION_RELAXED
26802            ? G_("%<__transaction_relaxed%> without transactional memory "
26803                 "support enabled")
26804            : G_("%<__transaction_atomic%> without transactional memory "
26805                 "support enabled"));
26806
26807   token = cp_parser_require_keyword (parser, keyword,
26808       (keyword == RID_TRANSACTION_ATOMIC ? RT_TRANSACTION_ATOMIC
26809           : RT_TRANSACTION_RELAXED));
26810   gcc_assert (token != NULL);
26811
26812   if (keyword == RID_TRANSACTION_RELAXED)
26813     this_in |= TM_STMT_ATTR_RELAXED;
26814
26815   parser->in_transaction = this_in;
26816   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
26817     {
26818       tree expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
26819       ret = build_transaction_expr (token->location, expr, this_in);
26820     }
26821   else
26822     {
26823       cp_parser_error (parser, "expected %<(%>");
26824       ret = error_mark_node;
26825     }
26826   parser->in_transaction = old_in;
26827
26828   if (cp_parser_non_integral_constant_expression (parser, NIC_TRANSACTION))
26829     return error_mark_node;
26830
26831   return (flag_tm ? ret : error_mark_node);
26832 }
26833
26834 /* Parse a function-transaction-block.
26835
26836    function-transaction-block:
26837      __transaction_atomic txn-attribute[opt] ctor-initializer[opt]
26838          function-body
26839      __transaction_atomic txn-attribute[opt] function-try-block
26840      __transaction_relaxed ctor-initializer[opt] function-body
26841      __transaction_relaxed function-try-block
26842 */
26843
26844 static bool
26845 cp_parser_function_transaction (cp_parser *parser, enum rid keyword)
26846 {
26847   unsigned char old_in = parser->in_transaction;
26848   unsigned char new_in = 1;
26849   tree compound_stmt, stmt, attrs;
26850   bool ctor_initializer_p;
26851   cp_token *token;
26852
26853   gcc_assert (keyword == RID_TRANSACTION_ATOMIC
26854       || keyword == RID_TRANSACTION_RELAXED);
26855   token = cp_parser_require_keyword (parser, keyword,
26856       (keyword == RID_TRANSACTION_ATOMIC ? RT_TRANSACTION_ATOMIC
26857           : RT_TRANSACTION_RELAXED));
26858   gcc_assert (token != NULL);
26859
26860   if (keyword == RID_TRANSACTION_RELAXED)
26861     new_in |= TM_STMT_ATTR_RELAXED;
26862   else
26863     {
26864       attrs = cp_parser_txn_attribute_opt (parser);
26865       if (attrs)
26866         new_in |= parse_tm_stmt_attr (attrs, TM_STMT_ATTR_OUTER);
26867     }
26868
26869   stmt = begin_transaction_stmt (token->location, &compound_stmt, new_in);
26870
26871   parser->in_transaction = new_in;
26872
26873   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
26874     ctor_initializer_p = cp_parser_function_try_block (parser);
26875   else
26876     ctor_initializer_p
26877       = cp_parser_ctor_initializer_opt_and_function_body (parser);
26878
26879   parser->in_transaction = old_in;
26880
26881   finish_transaction_stmt (stmt, compound_stmt, new_in);
26882
26883   return ctor_initializer_p;
26884 }
26885
26886 /* Parse a __transaction_cancel statement.
26887
26888    cancel-statement:
26889      __transaction_cancel txn-attribute[opt] ;
26890      __transaction_cancel txn-attribute[opt] throw-expression ;
26891
26892    ??? Cancel and throw is not yet implemented.  */
26893
26894 static tree
26895 cp_parser_transaction_cancel (cp_parser *parser)
26896 {
26897   cp_token *token;
26898   bool is_outer = false;
26899   tree stmt, attrs;
26900
26901   token = cp_parser_require_keyword (parser, RID_TRANSACTION_CANCEL,
26902                                      RT_TRANSACTION_CANCEL);
26903   gcc_assert (token != NULL);
26904
26905   attrs = cp_parser_txn_attribute_opt (parser);
26906   if (attrs)
26907     is_outer = (parse_tm_stmt_attr (attrs, TM_STMT_ATTR_OUTER) != 0);
26908
26909   /* ??? Parse cancel-and-throw here.  */
26910
26911   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
26912
26913   if (!flag_tm)
26914     {
26915       error_at (token->location, "%<__transaction_cancel%> without "
26916                 "transactional memory support enabled");
26917       return error_mark_node;
26918     }
26919   else if (parser->in_transaction & TM_STMT_ATTR_RELAXED)
26920     {
26921       error_at (token->location, "%<__transaction_cancel%> within a "
26922                 "%<__transaction_relaxed%>");
26923       return error_mark_node;
26924     }
26925   else if (is_outer)
26926     {
26927       if ((parser->in_transaction & TM_STMT_ATTR_OUTER) == 0
26928           && !is_tm_may_cancel_outer (current_function_decl))
26929         {
26930           error_at (token->location, "outer %<__transaction_cancel%> not "
26931                     "within outer %<__transaction_atomic%>");
26932           error_at (token->location,
26933                     "  or a %<transaction_may_cancel_outer%> function");
26934           return error_mark_node;
26935         }
26936     }
26937   else if (parser->in_transaction == 0)
26938     {
26939       error_at (token->location, "%<__transaction_cancel%> not within "
26940                 "%<__transaction_atomic%>");
26941       return error_mark_node;
26942     }
26943
26944   stmt = build_tm_abort_call (token->location, is_outer);
26945   add_stmt (stmt);
26946   finish_stmt ();
26947
26948   return stmt;
26949 }
26950 \f
26951 /* The parser.  */
26952
26953 static GTY (()) cp_parser *the_parser;
26954
26955 \f
26956 /* Special handling for the first token or line in the file.  The first
26957    thing in the file might be #pragma GCC pch_preprocess, which loads a
26958    PCH file, which is a GC collection point.  So we need to handle this
26959    first pragma without benefit of an existing lexer structure.
26960
26961    Always returns one token to the caller in *FIRST_TOKEN.  This is
26962    either the true first token of the file, or the first token after
26963    the initial pragma.  */
26964
26965 static void
26966 cp_parser_initial_pragma (cp_token *first_token)
26967 {
26968   tree name = NULL;
26969
26970   cp_lexer_get_preprocessor_token (NULL, first_token);
26971   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
26972     return;
26973
26974   cp_lexer_get_preprocessor_token (NULL, first_token);
26975   if (first_token->type == CPP_STRING)
26976     {
26977       name = first_token->u.value;
26978
26979       cp_lexer_get_preprocessor_token (NULL, first_token);
26980       if (first_token->type != CPP_PRAGMA_EOL)
26981         error_at (first_token->location,
26982                   "junk at end of %<#pragma GCC pch_preprocess%>");
26983     }
26984   else
26985     error_at (first_token->location, "expected string literal");
26986
26987   /* Skip to the end of the pragma.  */
26988   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
26989     cp_lexer_get_preprocessor_token (NULL, first_token);
26990
26991   /* Now actually load the PCH file.  */
26992   if (name)
26993     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
26994
26995   /* Read one more token to return to our caller.  We have to do this
26996      after reading the PCH file in, since its pointers have to be
26997      live.  */
26998   cp_lexer_get_preprocessor_token (NULL, first_token);
26999 }
27000
27001 /* Normal parsing of a pragma token.  Here we can (and must) use the
27002    regular lexer.  */
27003
27004 static bool
27005 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
27006 {
27007   cp_token *pragma_tok;
27008   unsigned int id;
27009
27010   pragma_tok = cp_lexer_consume_token (parser->lexer);
27011   gcc_assert (pragma_tok->type == CPP_PRAGMA);
27012   parser->lexer->in_pragma = true;
27013
27014   id = pragma_tok->pragma_kind;
27015   switch (id)
27016     {
27017     case PRAGMA_GCC_PCH_PREPROCESS:
27018       error_at (pragma_tok->location,
27019                 "%<#pragma GCC pch_preprocess%> must be first");
27020       break;
27021
27022     case PRAGMA_OMP_BARRIER:
27023       switch (context)
27024         {
27025         case pragma_compound:
27026           cp_parser_omp_barrier (parser, pragma_tok);
27027           return false;
27028         case pragma_stmt:
27029           error_at (pragma_tok->location, "%<#pragma omp barrier%> may only be "
27030                     "used in compound statements");
27031           break;
27032         default:
27033           goto bad_stmt;
27034         }
27035       break;
27036
27037     case PRAGMA_OMP_FLUSH:
27038       switch (context)
27039         {
27040         case pragma_compound:
27041           cp_parser_omp_flush (parser, pragma_tok);
27042           return false;
27043         case pragma_stmt:
27044           error_at (pragma_tok->location, "%<#pragma omp flush%> may only be "
27045                     "used in compound statements");
27046           break;
27047         default:
27048           goto bad_stmt;
27049         }
27050       break;
27051
27052     case PRAGMA_OMP_TASKWAIT:
27053       switch (context)
27054         {
27055         case pragma_compound:
27056           cp_parser_omp_taskwait (parser, pragma_tok);
27057           return false;
27058         case pragma_stmt:
27059           error_at (pragma_tok->location,
27060                     "%<#pragma omp taskwait%> may only be "
27061                     "used in compound statements");
27062           break;
27063         default:
27064           goto bad_stmt;
27065         }
27066       break;
27067
27068     case PRAGMA_OMP_TASKYIELD:
27069       switch (context)
27070         {
27071         case pragma_compound:
27072           cp_parser_omp_taskyield (parser, pragma_tok);
27073           return false;
27074         case pragma_stmt:
27075           error_at (pragma_tok->location,
27076                     "%<#pragma omp taskyield%> may only be "
27077                     "used in compound statements");
27078           break;
27079         default:
27080           goto bad_stmt;
27081         }
27082       break;
27083
27084     case PRAGMA_OMP_THREADPRIVATE:
27085       cp_parser_omp_threadprivate (parser, pragma_tok);
27086       return false;
27087
27088     case PRAGMA_OMP_ATOMIC:
27089     case PRAGMA_OMP_CRITICAL:
27090     case PRAGMA_OMP_FOR:
27091     case PRAGMA_OMP_MASTER:
27092     case PRAGMA_OMP_ORDERED:
27093     case PRAGMA_OMP_PARALLEL:
27094     case PRAGMA_OMP_SECTIONS:
27095     case PRAGMA_OMP_SINGLE:
27096     case PRAGMA_OMP_TASK:
27097       if (context == pragma_external)
27098         goto bad_stmt;
27099       cp_parser_omp_construct (parser, pragma_tok);
27100       return true;
27101
27102     case PRAGMA_OMP_SECTION:
27103       error_at (pragma_tok->location, 
27104                 "%<#pragma omp section%> may only be used in "
27105                 "%<#pragma omp sections%> construct");
27106       break;
27107
27108     default:
27109       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
27110       c_invoke_pragma_handler (id);
27111       break;
27112
27113     bad_stmt:
27114       cp_parser_error (parser, "expected declaration specifiers");
27115       break;
27116     }
27117
27118   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
27119   return false;
27120 }
27121
27122 /* The interface the pragma parsers have to the lexer.  */
27123
27124 enum cpp_ttype
27125 pragma_lex (tree *value)
27126 {
27127   cp_token *tok;
27128   enum cpp_ttype ret;
27129
27130   tok = cp_lexer_peek_token (the_parser->lexer);
27131
27132   ret = tok->type;
27133   *value = tok->u.value;
27134
27135   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
27136     ret = CPP_EOF;
27137   else if (ret == CPP_STRING)
27138     *value = cp_parser_string_literal (the_parser, false, false);
27139   else
27140     {
27141       cp_lexer_consume_token (the_parser->lexer);
27142       if (ret == CPP_KEYWORD)
27143         ret = CPP_NAME;
27144     }
27145
27146   return ret;
27147 }
27148
27149 \f
27150 /* External interface.  */
27151
27152 /* Parse one entire translation unit.  */
27153
27154 void
27155 c_parse_file (void)
27156 {
27157   static bool already_called = false;
27158
27159   if (already_called)
27160     {
27161       sorry ("inter-module optimizations not implemented for C++");
27162       return;
27163     }
27164   already_called = true;
27165
27166   the_parser = cp_parser_new ();
27167   push_deferring_access_checks (flag_access_control
27168                                 ? dk_no_deferred : dk_no_check);
27169   cp_parser_translation_unit (the_parser);
27170   the_parser = NULL;
27171 }
27172
27173 #include "gt-cp-parser.h"