OSDN Git Service

1376a3af0bdc56ca1f3cc93cfc3112a3a5927d1c
[pf3gnuchains/gcc-fork.git] / gcc / cp / parser.c
1 /* C++ Parser.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004,
3    2005, 2007, 2008, 2009, 2010, 2011  Free Software Foundation, Inc.
4    Written by Mark Mitchell <mark@codesourcery.com>.
5
6    This file is part of GCC.
7
8    GCC is free software; you can redistribute it and/or modify it
9    under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3, or (at your option)
11    any later version.
12
13    GCC is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "timevar.h"
27 #include "cpplib.h"
28 #include "tree.h"
29 #include "cp-tree.h"
30 #include "intl.h"
31 #include "c-family/c-pragma.h"
32 #include "decl.h"
33 #include "flags.h"
34 #include "diagnostic-core.h"
35 #include "output.h"
36 #include "target.h"
37 #include "cgraph.h"
38 #include "c-family/c-common.h"
39 #include "c-family/c-objc.h"
40 #include "plugin.h"
41 #include "tree-pretty-print.h"
42 #include "parser.h"
43
44 \f
45 /* The lexer.  */
46
47 /* The cp_lexer_* routines mediate between the lexer proper (in libcpp
48    and c-lex.c) and the C++ parser.  */
49
50 static cp_token eof_token =
51 {
52   CPP_EOF, RID_MAX, 0, PRAGMA_NONE, false, false, false, 0, { NULL }
53 };
54
55 /* The various kinds of non integral constant we encounter. */
56 typedef enum non_integral_constant {
57   NIC_NONE,
58   /* floating-point literal */
59   NIC_FLOAT,
60   /* %<this%> */
61   NIC_THIS,
62   /* %<__FUNCTION__%> */
63   NIC_FUNC_NAME,
64   /* %<__PRETTY_FUNCTION__%> */
65   NIC_PRETTY_FUNC,
66   /* %<__func__%> */
67   NIC_C99_FUNC,
68   /* "%<va_arg%> */
69   NIC_VA_ARG,
70   /* a cast */
71   NIC_CAST,
72   /* %<typeid%> operator */
73   NIC_TYPEID,
74   /* non-constant compound literals */
75   NIC_NCC,
76   /* a function call */
77   NIC_FUNC_CALL,
78   /* an increment */
79   NIC_INC,
80   /* an decrement */
81   NIC_DEC,
82   /* an array reference */
83   NIC_ARRAY_REF,
84   /* %<->%> */
85   NIC_ARROW,
86   /* %<.%> */
87   NIC_POINT,
88   /* the address of a label */
89   NIC_ADDR_LABEL,
90   /* %<*%> */
91   NIC_STAR,
92   /* %<&%> */
93   NIC_ADDR,
94   /* %<++%> */
95   NIC_PREINCREMENT,
96   /* %<--%> */
97   NIC_PREDECREMENT,
98   /* %<new%> */
99   NIC_NEW,
100   /* %<delete%> */
101   NIC_DEL,
102   /* calls to overloaded operators */
103   NIC_OVERLOADED,
104   /* an assignment */
105   NIC_ASSIGNMENT,
106   /* a comma operator */
107   NIC_COMMA,
108   /* a call to a constructor */
109   NIC_CONSTRUCTOR,
110   /* a transaction expression */
111   NIC_TRANSACTION
112 } non_integral_constant;
113
114 /* The various kinds of errors about name-lookup failing. */
115 typedef enum name_lookup_error {
116   /* NULL */
117   NLE_NULL,
118   /* is not a type */
119   NLE_TYPE,
120   /* is not a class or namespace */
121   NLE_CXX98,
122   /* is not a class, namespace, or enumeration */
123   NLE_NOT_CXX98
124 } name_lookup_error;
125
126 /* The various kinds of required token */
127 typedef enum required_token {
128   RT_NONE,
129   RT_SEMICOLON,  /* ';' */
130   RT_OPEN_PAREN, /* '(' */
131   RT_CLOSE_BRACE, /* '}' */
132   RT_OPEN_BRACE,  /* '{' */
133   RT_CLOSE_SQUARE, /* ']' */
134   RT_OPEN_SQUARE,  /* '[' */
135   RT_COMMA, /* ',' */
136   RT_SCOPE, /* '::' */
137   RT_LESS, /* '<' */
138   RT_GREATER, /* '>' */
139   RT_EQ, /* '=' */
140   RT_ELLIPSIS, /* '...' */
141   RT_MULT, /* '*' */
142   RT_COMPL, /* '~' */
143   RT_COLON, /* ':' */
144   RT_COLON_SCOPE, /* ':' or '::' */
145   RT_CLOSE_PAREN, /* ')' */
146   RT_COMMA_CLOSE_PAREN, /* ',' or ')' */
147   RT_PRAGMA_EOL, /* end of line */
148   RT_NAME, /* identifier */
149
150   /* The type is CPP_KEYWORD */
151   RT_NEW, /* new */
152   RT_DELETE, /* delete */
153   RT_RETURN, /* return */
154   RT_WHILE, /* while */
155   RT_EXTERN, /* extern */
156   RT_STATIC_ASSERT, /* static_assert */
157   RT_DECLTYPE, /* decltype */
158   RT_OPERATOR, /* operator */
159   RT_CLASS, /* class */
160   RT_TEMPLATE, /* template */
161   RT_NAMESPACE, /* namespace */
162   RT_USING, /* using */
163   RT_ASM, /* asm */
164   RT_TRY, /* try */
165   RT_CATCH, /* catch */
166   RT_THROW, /* throw */
167   RT_LABEL, /* __label__ */
168   RT_AT_TRY, /* @try */
169   RT_AT_SYNCHRONIZED, /* @synchronized */
170   RT_AT_THROW, /* @throw */
171
172   RT_SELECT,  /* selection-statement */
173   RT_INTERATION, /* iteration-statement */
174   RT_JUMP, /* jump-statement */
175   RT_CLASS_KEY, /* class-key */
176   RT_CLASS_TYPENAME_TEMPLATE, /* class, typename, or template */
177   RT_TRANSACTION_ATOMIC, /* __transaction_atomic */
178   RT_TRANSACTION_RELAXED, /* __transaction_relaxed */
179   RT_TRANSACTION_CANCEL /* __transaction_cancel */
180 } required_token;
181
182 /* Prototypes.  */
183
184 static cp_lexer *cp_lexer_new_main
185   (void);
186 static cp_lexer *cp_lexer_new_from_tokens
187   (cp_token_cache *tokens);
188 static void cp_lexer_destroy
189   (cp_lexer *);
190 static int cp_lexer_saving_tokens
191   (const cp_lexer *);
192 static cp_token *cp_lexer_token_at
193   (cp_lexer *, cp_token_position);
194 static void cp_lexer_get_preprocessor_token
195   (cp_lexer *, cp_token *);
196 static inline cp_token *cp_lexer_peek_token
197   (cp_lexer *);
198 static cp_token *cp_lexer_peek_nth_token
199   (cp_lexer *, size_t);
200 static inline bool cp_lexer_next_token_is
201   (cp_lexer *, enum cpp_ttype);
202 static bool cp_lexer_next_token_is_not
203   (cp_lexer *, enum cpp_ttype);
204 static bool cp_lexer_next_token_is_keyword
205   (cp_lexer *, enum rid);
206 static cp_token *cp_lexer_consume_token
207   (cp_lexer *);
208 static void cp_lexer_purge_token
209   (cp_lexer *);
210 static void cp_lexer_purge_tokens_after
211   (cp_lexer *, cp_token_position);
212 static void cp_lexer_save_tokens
213   (cp_lexer *);
214 static void cp_lexer_commit_tokens
215   (cp_lexer *);
216 static void cp_lexer_rollback_tokens
217   (cp_lexer *);
218 static void cp_lexer_print_token
219   (FILE *, cp_token *);
220 static inline bool cp_lexer_debugging_p
221   (cp_lexer *);
222 static void cp_lexer_start_debugging
223   (cp_lexer *) ATTRIBUTE_UNUSED;
224 static void cp_lexer_stop_debugging
225   (cp_lexer *) ATTRIBUTE_UNUSED;
226
227 static cp_token_cache *cp_token_cache_new
228   (cp_token *, cp_token *);
229
230 static void cp_parser_initial_pragma
231   (cp_token *);
232
233 static tree cp_literal_operator_id
234   (const char *);
235
236 /* Manifest constants.  */
237 #define CP_LEXER_BUFFER_SIZE ((256 * 1024) / sizeof (cp_token))
238 #define CP_SAVED_TOKEN_STACK 5
239
240 /* Variables.  */
241
242 /* The stream to which debugging output should be written.  */
243 static FILE *cp_lexer_debug_stream;
244
245 /* Nonzero if we are parsing an unevaluated operand: an operand to
246    sizeof, typeof, or alignof.  */
247 int cp_unevaluated_operand;
248
249 /* Dump up to NUM tokens in BUFFER to FILE starting with token
250    START_TOKEN.  If START_TOKEN is NULL, the dump starts with the
251    first token in BUFFER.  If NUM is 0, dump all the tokens.  If
252    CURR_TOKEN is set and it is one of the tokens in BUFFER, it will be
253    highlighted by surrounding it in [[ ]].  */
254
255 static void
256 cp_lexer_dump_tokens (FILE *file, VEC(cp_token,gc) *buffer,
257                       cp_token *start_token, unsigned num,
258                       cp_token *curr_token)
259 {
260   unsigned i, nprinted;
261   cp_token *token;
262   bool do_print;
263
264   fprintf (file, "%u tokens\n", VEC_length (cp_token, buffer));
265
266   if (buffer == NULL)
267     return;
268
269   if (num == 0)
270     num = VEC_length (cp_token, buffer);
271
272   if (start_token == NULL)
273     start_token = VEC_address (cp_token, buffer);
274
275   if (start_token > VEC_address (cp_token, buffer))
276     {
277       cp_lexer_print_token (file, VEC_index (cp_token, buffer, 0));
278       fprintf (file, " ... ");
279     }
280
281   do_print = false;
282   nprinted = 0;
283   for (i = 0; VEC_iterate (cp_token, buffer, i, token) && nprinted < num; i++)
284     {
285       if (token == start_token)
286         do_print = true;
287
288       if (!do_print)
289         continue;
290
291       nprinted++;
292       if (token == curr_token)
293         fprintf (file, "[[");
294
295       cp_lexer_print_token (file, token);
296
297       if (token == curr_token)
298         fprintf (file, "]]");
299
300       switch (token->type)
301         {
302           case CPP_SEMICOLON:
303           case CPP_OPEN_BRACE:
304           case CPP_CLOSE_BRACE:
305           case CPP_EOF:
306             fputc ('\n', file);
307             break;
308
309           default:
310             fputc (' ', file);
311         }
312     }
313
314   if (i == num && i < VEC_length (cp_token, buffer))
315     {
316       fprintf (file, " ... ");
317       cp_lexer_print_token (file, VEC_index (cp_token, buffer,
318                             VEC_length (cp_token, buffer) - 1));
319     }
320
321   fprintf (file, "\n");
322 }
323
324
325 /* Dump all tokens in BUFFER to stderr.  */
326
327 void
328 cp_lexer_debug_tokens (VEC(cp_token,gc) *buffer)
329 {
330   cp_lexer_dump_tokens (stderr, buffer, NULL, 0, NULL);
331 }
332
333
334 /* Dump the cp_parser tree field T to FILE if T is non-NULL.  DESC is the
335    description for T.  */
336
337 static void
338 cp_debug_print_tree_if_set (FILE *file, const char *desc, tree t)
339 {
340   if (t)
341     {
342       fprintf (file, "%s: ", desc);
343       print_node_brief (file, "", t, 0);
344     }
345 }
346
347
348 /* Dump parser context C to FILE.  */
349
350 static void
351 cp_debug_print_context (FILE *file, cp_parser_context *c)
352 {
353   const char *status_s[] = { "OK", "ERROR", "COMMITTED" };
354   fprintf (file, "{ status = %s, scope = ", status_s[c->status]);
355   print_node_brief (file, "", c->object_type, 0);
356   fprintf (file, "}\n");
357 }
358
359
360 /* Print the stack of parsing contexts to FILE starting with FIRST.  */
361
362 static void
363 cp_debug_print_context_stack (FILE *file, cp_parser_context *first)
364 {
365   unsigned i;
366   cp_parser_context *c;
367
368   fprintf (file, "Parsing context stack:\n");
369   for (i = 0, c = first; c; c = c->next, i++)
370     {
371       fprintf (file, "\t#%u: ", i);
372       cp_debug_print_context (file, c);
373     }
374 }
375
376
377 /* Print the value of FLAG to FILE.  DESC is a string describing the flag.  */
378
379 static void
380 cp_debug_print_flag (FILE *file, const char *desc, bool flag)
381 {
382   if (flag)
383     fprintf (file, "%s: true\n", desc);
384 }
385
386
387 /* Print an unparsed function entry UF to FILE.  */
388
389 static void
390 cp_debug_print_unparsed_function (FILE *file, cp_unparsed_functions_entry *uf)
391 {
392   unsigned i;
393   cp_default_arg_entry *default_arg_fn;
394   tree fn;
395
396   fprintf (file, "\tFunctions with default args:\n");
397   for (i = 0;
398        VEC_iterate (cp_default_arg_entry, uf->funs_with_default_args, i,
399                     default_arg_fn);
400        i++)
401     {
402       fprintf (file, "\t\tClass type: ");
403       print_node_brief (file, "", default_arg_fn->class_type, 0);
404       fprintf (file, "\t\tDeclaration: ");
405       print_node_brief (file, "", default_arg_fn->decl, 0);
406       fprintf (file, "\n");
407     }
408
409   fprintf (file, "\n\tFunctions with definitions that require "
410            "post-processing\n\t\t");
411   for (i = 0; VEC_iterate (tree, uf->funs_with_definitions, i, fn); i++)
412     {
413       print_node_brief (file, "", fn, 0);
414       fprintf (file, " ");
415     }
416   fprintf (file, "\n");
417
418   fprintf (file, "\n\tNon-static data members with initializers that require "
419            "post-processing\n\t\t");
420   for (i = 0; VEC_iterate (tree, uf->nsdmis, i, fn); i++)
421     {
422       print_node_brief (file, "", fn, 0);
423       fprintf (file, " ");
424     }
425   fprintf (file, "\n");
426 }
427
428
429 /* Print the stack of unparsed member functions S to FILE.  */
430
431 static void
432 cp_debug_print_unparsed_queues (FILE *file,
433                                 VEC(cp_unparsed_functions_entry, gc) *s)
434 {
435   unsigned i;
436   cp_unparsed_functions_entry *uf;
437
438   fprintf (file, "Unparsed functions\n");
439   for (i = 0; VEC_iterate (cp_unparsed_functions_entry, s, i, uf); i++)
440     {
441       fprintf (file, "#%u:\n", i);
442       cp_debug_print_unparsed_function (file, uf);
443     }
444 }
445
446
447 /* Dump the tokens in a window of size WINDOW_SIZE around the next_token for
448    the given PARSER.  If FILE is NULL, the output is printed on stderr. */
449
450 static void
451 cp_debug_parser_tokens (FILE *file, cp_parser *parser, int window_size)
452 {
453   cp_token *next_token, *first_token, *start_token;
454
455   if (file == NULL)
456     file = stderr;
457
458   next_token = parser->lexer->next_token;
459   first_token = VEC_address (cp_token, parser->lexer->buffer);
460   start_token = (next_token > first_token + window_size / 2)
461                 ? next_token - window_size / 2
462                 : first_token;
463   cp_lexer_dump_tokens (file, parser->lexer->buffer, start_token, window_size,
464                         next_token);
465 }
466
467
468 /* Dump debugging information for the given PARSER.  If FILE is NULL,
469    the output is printed on stderr.  */
470
471 void
472 cp_debug_parser (FILE *file, cp_parser *parser)
473 {
474   const size_t window_size = 20;
475   cp_token *token;
476   expanded_location eloc;
477
478   if (file == NULL)
479     file = stderr;
480
481   fprintf (file, "Parser state\n\n");
482   fprintf (file, "Number of tokens: %u\n",
483            VEC_length (cp_token, parser->lexer->buffer));
484   cp_debug_print_tree_if_set (file, "Lookup scope", parser->scope);
485   cp_debug_print_tree_if_set (file, "Object scope",
486                                      parser->object_scope);
487   cp_debug_print_tree_if_set (file, "Qualifying scope",
488                                      parser->qualifying_scope);
489   cp_debug_print_context_stack (file, parser->context);
490   cp_debug_print_flag (file, "Allow GNU extensions",
491                               parser->allow_gnu_extensions_p);
492   cp_debug_print_flag (file, "'>' token is greater-than",
493                               parser->greater_than_is_operator_p);
494   cp_debug_print_flag (file, "Default args allowed in current "
495                               "parameter list", parser->default_arg_ok_p);
496   cp_debug_print_flag (file, "Parsing integral constant-expression",
497                               parser->integral_constant_expression_p);
498   cp_debug_print_flag (file, "Allow non-constant expression in current "
499                               "constant-expression",
500                               parser->allow_non_integral_constant_expression_p);
501   cp_debug_print_flag (file, "Seen non-constant expression",
502                               parser->non_integral_constant_expression_p);
503   cp_debug_print_flag (file, "Local names and 'this' forbidden in "
504                               "current context",
505                               parser->local_variables_forbidden_p);
506   cp_debug_print_flag (file, "In unbraced linkage specification",
507                               parser->in_unbraced_linkage_specification_p);
508   cp_debug_print_flag (file, "Parsing a declarator",
509                               parser->in_declarator_p);
510   cp_debug_print_flag (file, "In template argument list",
511                               parser->in_template_argument_list_p);
512   cp_debug_print_flag (file, "Parsing an iteration statement",
513                               parser->in_statement & IN_ITERATION_STMT);
514   cp_debug_print_flag (file, "Parsing a switch statement",
515                               parser->in_statement & IN_SWITCH_STMT);
516   cp_debug_print_flag (file, "Parsing a structured OpenMP block",
517                               parser->in_statement & IN_OMP_BLOCK);
518   cp_debug_print_flag (file, "Parsing a an OpenMP loop",
519                               parser->in_statement & IN_OMP_FOR);
520   cp_debug_print_flag (file, "Parsing an if statement",
521                               parser->in_statement & IN_IF_STMT);
522   cp_debug_print_flag (file, "Parsing a type-id in an expression "
523                               "context", parser->in_type_id_in_expr_p);
524   cp_debug_print_flag (file, "Declarations are implicitly extern \"C\"",
525                               parser->implicit_extern_c);
526   cp_debug_print_flag (file, "String expressions should be translated "
527                               "to execution character set",
528                               parser->translate_strings_p);
529   cp_debug_print_flag (file, "Parsing function body outside of a "
530                               "local class", parser->in_function_body);
531   cp_debug_print_flag (file, "Auto correct a colon to a scope operator",
532                               parser->colon_corrects_to_scope_p);
533   if (parser->type_definition_forbidden_message)
534     fprintf (file, "Error message for forbidden type definitions: %s\n",
535              parser->type_definition_forbidden_message);
536   cp_debug_print_unparsed_queues (file, parser->unparsed_queues);
537   fprintf (file, "Number of class definitions in progress: %u\n",
538            parser->num_classes_being_defined);
539   fprintf (file, "Number of template parameter lists for the current "
540            "declaration: %u\n", parser->num_template_parameter_lists);
541   cp_debug_parser_tokens (file, parser, window_size);
542   token = parser->lexer->next_token;
543   fprintf (file, "Next token to parse:\n");
544   fprintf (file, "\tToken:  ");
545   cp_lexer_print_token (file, token);
546   eloc = expand_location (token->location);
547   fprintf (file, "\n\tFile:   %s\n", eloc.file);
548   fprintf (file, "\tLine:   %d\n", eloc.line);
549   fprintf (file, "\tColumn: %d\n", eloc.column);
550 }
551
552
553 /* Allocate memory for a new lexer object and return it.  */
554
555 static cp_lexer *
556 cp_lexer_alloc (void)
557 {
558   cp_lexer *lexer;
559
560   c_common_no_more_pch ();
561
562   /* Allocate the memory.  */
563   lexer = ggc_alloc_cleared_cp_lexer ();
564
565   /* Initially we are not debugging.  */
566   lexer->debugging_p = false;
567
568   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
569                                    CP_SAVED_TOKEN_STACK);
570
571   /* Create the buffer.  */
572   lexer->buffer = VEC_alloc (cp_token, gc, CP_LEXER_BUFFER_SIZE);
573
574   return lexer;
575 }
576
577
578 /* Create a new main C++ lexer, the lexer that gets tokens from the
579    preprocessor.  */
580
581 static cp_lexer *
582 cp_lexer_new_main (void)
583 {
584   cp_lexer *lexer;
585   cp_token token;
586
587   /* It's possible that parsing the first pragma will load a PCH file,
588      which is a GC collection point.  So we have to do that before
589      allocating any memory.  */
590   cp_parser_initial_pragma (&token);
591
592   lexer = cp_lexer_alloc ();
593
594   /* Put the first token in the buffer.  */
595   VEC_quick_push (cp_token, lexer->buffer, &token);
596
597   /* Get the remaining tokens from the preprocessor.  */
598   while (token.type != CPP_EOF)
599     {
600       cp_lexer_get_preprocessor_token (lexer, &token);
601       VEC_safe_push (cp_token, gc, lexer->buffer, &token);
602     }
603
604   lexer->last_token = VEC_address (cp_token, lexer->buffer)
605                       + VEC_length (cp_token, lexer->buffer)
606                       - 1;
607   lexer->next_token = VEC_length (cp_token, lexer->buffer)
608                       ? VEC_address (cp_token, lexer->buffer)
609                       : &eof_token;
610
611   /* Subsequent preprocessor diagnostics should use compiler
612      diagnostic functions to get the compiler source location.  */
613   done_lexing = true;
614
615   gcc_assert (!lexer->next_token->purged_p);
616   return lexer;
617 }
618
619 /* Create a new lexer whose token stream is primed with the tokens in
620    CACHE.  When these tokens are exhausted, no new tokens will be read.  */
621
622 static cp_lexer *
623 cp_lexer_new_from_tokens (cp_token_cache *cache)
624 {
625   cp_token *first = cache->first;
626   cp_token *last = cache->last;
627   cp_lexer *lexer = ggc_alloc_cleared_cp_lexer ();
628
629   /* We do not own the buffer.  */
630   lexer->buffer = NULL;
631   lexer->next_token = first == last ? &eof_token : first;
632   lexer->last_token = last;
633
634   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
635                                    CP_SAVED_TOKEN_STACK);
636
637   /* Initially we are not debugging.  */
638   lexer->debugging_p = false;
639
640   gcc_assert (!lexer->next_token->purged_p);
641   return lexer;
642 }
643
644 /* Frees all resources associated with LEXER.  */
645
646 static void
647 cp_lexer_destroy (cp_lexer *lexer)
648 {
649   VEC_free (cp_token, gc, lexer->buffer);
650   VEC_free (cp_token_position, heap, lexer->saved_tokens);
651   ggc_free (lexer);
652 }
653
654 /* Returns nonzero if debugging information should be output.  */
655
656 static inline bool
657 cp_lexer_debugging_p (cp_lexer *lexer)
658 {
659   return lexer->debugging_p;
660 }
661
662
663 static inline cp_token_position
664 cp_lexer_token_position (cp_lexer *lexer, bool previous_p)
665 {
666   gcc_assert (!previous_p || lexer->next_token != &eof_token);
667
668   return lexer->next_token - previous_p;
669 }
670
671 static inline cp_token *
672 cp_lexer_token_at (cp_lexer *lexer ATTRIBUTE_UNUSED, cp_token_position pos)
673 {
674   return pos;
675 }
676
677 static inline void
678 cp_lexer_set_token_position (cp_lexer *lexer, cp_token_position pos)
679 {
680   lexer->next_token = cp_lexer_token_at (lexer, pos);
681 }
682
683 static inline cp_token_position
684 cp_lexer_previous_token_position (cp_lexer *lexer)
685 {
686   if (lexer->next_token == &eof_token)
687     return lexer->last_token - 1;
688   else
689     return cp_lexer_token_position (lexer, true);
690 }
691
692 static inline cp_token *
693 cp_lexer_previous_token (cp_lexer *lexer)
694 {
695   cp_token_position tp = cp_lexer_previous_token_position (lexer);
696
697   return cp_lexer_token_at (lexer, tp);
698 }
699
700 /* nonzero if we are presently saving tokens.  */
701
702 static inline int
703 cp_lexer_saving_tokens (const cp_lexer* lexer)
704 {
705   return VEC_length (cp_token_position, lexer->saved_tokens) != 0;
706 }
707
708 /* Store the next token from the preprocessor in *TOKEN.  Return true
709    if we reach EOF.  If LEXER is NULL, assume we are handling an
710    initial #pragma pch_preprocess, and thus want the lexer to return
711    processed strings.  */
712
713 static void
714 cp_lexer_get_preprocessor_token (cp_lexer *lexer, cp_token *token)
715 {
716   static int is_extern_c = 0;
717
718    /* Get a new token from the preprocessor.  */
719   token->type
720     = c_lex_with_flags (&token->u.value, &token->location, &token->flags,
721                         lexer == NULL ? 0 : C_LEX_STRING_NO_JOIN);
722   token->keyword = RID_MAX;
723   token->pragma_kind = PRAGMA_NONE;
724   token->purged_p = false;
725
726   /* On some systems, some header files are surrounded by an
727      implicit extern "C" block.  Set a flag in the token if it
728      comes from such a header.  */
729   is_extern_c += pending_lang_change;
730   pending_lang_change = 0;
731   token->implicit_extern_c = is_extern_c > 0;
732
733   /* Check to see if this token is a keyword.  */
734   if (token->type == CPP_NAME)
735     {
736       if (C_IS_RESERVED_WORD (token->u.value))
737         {
738           /* Mark this token as a keyword.  */
739           token->type = CPP_KEYWORD;
740           /* Record which keyword.  */
741           token->keyword = C_RID_CODE (token->u.value);
742         }
743       else
744         {
745           if (warn_cxx0x_compat
746               && C_RID_CODE (token->u.value) >= RID_FIRST_CXX0X
747               && C_RID_CODE (token->u.value) <= RID_LAST_CXX0X)
748             {
749               /* Warn about the C++0x keyword (but still treat it as
750                  an identifier).  */
751               warning (OPT_Wc__0x_compat, 
752                        "identifier %qE is a keyword in C++11",
753                        token->u.value);
754
755               /* Clear out the C_RID_CODE so we don't warn about this
756                  particular identifier-turned-keyword again.  */
757               C_SET_RID_CODE (token->u.value, RID_MAX);
758             }
759
760           token->ambiguous_p = false;
761           token->keyword = RID_MAX;
762         }
763     }
764   else if (token->type == CPP_AT_NAME)
765     {
766       /* This only happens in Objective-C++; it must be a keyword.  */
767       token->type = CPP_KEYWORD;
768       switch (C_RID_CODE (token->u.value))
769         {
770           /* Replace 'class' with '@class', 'private' with '@private',
771              etc.  This prevents confusion with the C++ keyword
772              'class', and makes the tokens consistent with other
773              Objective-C 'AT' keywords.  For example '@class' is
774              reported as RID_AT_CLASS which is consistent with
775              '@synchronized', which is reported as
776              RID_AT_SYNCHRONIZED.
777           */
778         case RID_CLASS:     token->keyword = RID_AT_CLASS; break;
779         case RID_PRIVATE:   token->keyword = RID_AT_PRIVATE; break;
780         case RID_PROTECTED: token->keyword = RID_AT_PROTECTED; break;
781         case RID_PUBLIC:    token->keyword = RID_AT_PUBLIC; break;
782         case RID_THROW:     token->keyword = RID_AT_THROW; break;
783         case RID_TRY:       token->keyword = RID_AT_TRY; break;
784         case RID_CATCH:     token->keyword = RID_AT_CATCH; break;
785         default:            token->keyword = C_RID_CODE (token->u.value);
786         }
787     }
788   else if (token->type == CPP_PRAGMA)
789     {
790       /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST.  */
791       token->pragma_kind = ((enum pragma_kind)
792                             TREE_INT_CST_LOW (token->u.value));
793       token->u.value = NULL_TREE;
794     }
795 }
796
797 /* Update the globals input_location and the input file stack from TOKEN.  */
798 static inline void
799 cp_lexer_set_source_position_from_token (cp_token *token)
800 {
801   if (token->type != CPP_EOF)
802     {
803       input_location = token->location;
804     }
805 }
806
807 /* Return a pointer to the next token in the token stream, but do not
808    consume it.  */
809
810 static inline cp_token *
811 cp_lexer_peek_token (cp_lexer *lexer)
812 {
813   if (cp_lexer_debugging_p (lexer))
814     {
815       fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
816       cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
817       putc ('\n', cp_lexer_debug_stream);
818     }
819   return lexer->next_token;
820 }
821
822 /* Return true if the next token has the indicated TYPE.  */
823
824 static inline bool
825 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
826 {
827   return cp_lexer_peek_token (lexer)->type == type;
828 }
829
830 /* Return true if the next token does not have the indicated TYPE.  */
831
832 static inline bool
833 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
834 {
835   return !cp_lexer_next_token_is (lexer, type);
836 }
837
838 /* Return true if the next token is the indicated KEYWORD.  */
839
840 static inline bool
841 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
842 {
843   return cp_lexer_peek_token (lexer)->keyword == keyword;
844 }
845
846 /* Return true if the next token is not the indicated KEYWORD.  */
847
848 static inline bool
849 cp_lexer_next_token_is_not_keyword (cp_lexer* lexer, enum rid keyword)
850 {
851   return cp_lexer_peek_token (lexer)->keyword != keyword;
852 }
853
854 /* Return true if the next token is a keyword for a decl-specifier.  */
855
856 static bool
857 cp_lexer_next_token_is_decl_specifier_keyword (cp_lexer *lexer)
858 {
859   cp_token *token;
860
861   token = cp_lexer_peek_token (lexer);
862   switch (token->keyword) 
863     {
864       /* auto specifier: storage-class-specifier in C++,
865          simple-type-specifier in C++0x.  */
866     case RID_AUTO:
867       /* Storage classes.  */
868     case RID_REGISTER:
869     case RID_STATIC:
870     case RID_EXTERN:
871     case RID_MUTABLE:
872     case RID_THREAD:
873       /* Elaborated type specifiers.  */
874     case RID_ENUM:
875     case RID_CLASS:
876     case RID_STRUCT:
877     case RID_UNION:
878     case RID_TYPENAME:
879       /* Simple type specifiers.  */
880     case RID_CHAR:
881     case RID_CHAR16:
882     case RID_CHAR32:
883     case RID_WCHAR:
884     case RID_BOOL:
885     case RID_SHORT:
886     case RID_INT:
887     case RID_LONG:
888     case RID_INT128:
889     case RID_SIGNED:
890     case RID_UNSIGNED:
891     case RID_FLOAT:
892     case RID_DOUBLE:
893     case RID_VOID:
894       /* GNU extensions.  */ 
895     case RID_ATTRIBUTE:
896     case RID_TYPEOF:
897       /* C++0x extensions.  */
898     case RID_DECLTYPE:
899     case RID_UNDERLYING_TYPE:
900       return true;
901
902     default:
903       return false;
904     }
905 }
906
907 /* Returns TRUE iff the token T begins a decltype type.  */
908
909 static bool
910 token_is_decltype (cp_token *t)
911 {
912   return (t->keyword == RID_DECLTYPE
913           || t->type == CPP_DECLTYPE);
914 }
915
916 /* Returns TRUE iff the next token begins a decltype type.  */
917
918 static bool
919 cp_lexer_next_token_is_decltype (cp_lexer *lexer)
920 {
921   cp_token *t = cp_lexer_peek_token (lexer);
922   return token_is_decltype (t);
923 }
924
925 /* Return a pointer to the Nth token in the token stream.  If N is 1,
926    then this is precisely equivalent to cp_lexer_peek_token (except
927    that it is not inline).  One would like to disallow that case, but
928    there is one case (cp_parser_nth_token_starts_template_id) where
929    the caller passes a variable for N and it might be 1.  */
930
931 static cp_token *
932 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
933 {
934   cp_token *token;
935
936   /* N is 1-based, not zero-based.  */
937   gcc_assert (n > 0);
938
939   if (cp_lexer_debugging_p (lexer))
940     fprintf (cp_lexer_debug_stream,
941              "cp_lexer: peeking ahead %ld at token: ", (long)n);
942
943   --n;
944   token = lexer->next_token;
945   gcc_assert (!n || token != &eof_token);
946   while (n != 0)
947     {
948       ++token;
949       if (token == lexer->last_token)
950         {
951           token = &eof_token;
952           break;
953         }
954
955       if (!token->purged_p)
956         --n;
957     }
958
959   if (cp_lexer_debugging_p (lexer))
960     {
961       cp_lexer_print_token (cp_lexer_debug_stream, token);
962       putc ('\n', cp_lexer_debug_stream);
963     }
964
965   return token;
966 }
967
968 /* Return the next token, and advance the lexer's next_token pointer
969    to point to the next non-purged token.  */
970
971 static cp_token *
972 cp_lexer_consume_token (cp_lexer* lexer)
973 {
974   cp_token *token = lexer->next_token;
975
976   gcc_assert (token != &eof_token);
977   gcc_assert (!lexer->in_pragma || token->type != CPP_PRAGMA_EOL);
978
979   do
980     {
981       lexer->next_token++;
982       if (lexer->next_token == lexer->last_token)
983         {
984           lexer->next_token = &eof_token;
985           break;
986         }
987
988     }
989   while (lexer->next_token->purged_p);
990
991   cp_lexer_set_source_position_from_token (token);
992
993   /* Provide debugging output.  */
994   if (cp_lexer_debugging_p (lexer))
995     {
996       fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
997       cp_lexer_print_token (cp_lexer_debug_stream, token);
998       putc ('\n', cp_lexer_debug_stream);
999     }
1000
1001   return token;
1002 }
1003
1004 /* Permanently remove the next token from the token stream, and
1005    advance the next_token pointer to refer to the next non-purged
1006    token.  */
1007
1008 static void
1009 cp_lexer_purge_token (cp_lexer *lexer)
1010 {
1011   cp_token *tok = lexer->next_token;
1012
1013   gcc_assert (tok != &eof_token);
1014   tok->purged_p = true;
1015   tok->location = UNKNOWN_LOCATION;
1016   tok->u.value = NULL_TREE;
1017   tok->keyword = RID_MAX;
1018
1019   do
1020     {
1021       tok++;
1022       if (tok == lexer->last_token)
1023         {
1024           tok = &eof_token;
1025           break;
1026         }
1027     }
1028   while (tok->purged_p);
1029   lexer->next_token = tok;
1030 }
1031
1032 /* Permanently remove all tokens after TOK, up to, but not
1033    including, the token that will be returned next by
1034    cp_lexer_peek_token.  */
1035
1036 static void
1037 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
1038 {
1039   cp_token *peek = lexer->next_token;
1040
1041   if (peek == &eof_token)
1042     peek = lexer->last_token;
1043
1044   gcc_assert (tok < peek);
1045
1046   for ( tok += 1; tok != peek; tok += 1)
1047     {
1048       tok->purged_p = true;
1049       tok->location = UNKNOWN_LOCATION;
1050       tok->u.value = NULL_TREE;
1051       tok->keyword = RID_MAX;
1052     }
1053 }
1054
1055 /* Begin saving tokens.  All tokens consumed after this point will be
1056    preserved.  */
1057
1058 static void
1059 cp_lexer_save_tokens (cp_lexer* lexer)
1060 {
1061   /* Provide debugging output.  */
1062   if (cp_lexer_debugging_p (lexer))
1063     fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
1064
1065   VEC_safe_push (cp_token_position, heap,
1066                  lexer->saved_tokens, lexer->next_token);
1067 }
1068
1069 /* Commit to the portion of the token stream most recently saved.  */
1070
1071 static void
1072 cp_lexer_commit_tokens (cp_lexer* lexer)
1073 {
1074   /* Provide debugging output.  */
1075   if (cp_lexer_debugging_p (lexer))
1076     fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
1077
1078   VEC_pop (cp_token_position, lexer->saved_tokens);
1079 }
1080
1081 /* Return all tokens saved since the last call to cp_lexer_save_tokens
1082    to the token stream.  Stop saving tokens.  */
1083
1084 static void
1085 cp_lexer_rollback_tokens (cp_lexer* lexer)
1086 {
1087   /* Provide debugging output.  */
1088   if (cp_lexer_debugging_p (lexer))
1089     fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
1090
1091   lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
1092 }
1093
1094 /* Print a representation of the TOKEN on the STREAM.  */
1095
1096 static void
1097 cp_lexer_print_token (FILE * stream, cp_token *token)
1098 {
1099   /* We don't use cpp_type2name here because the parser defines
1100      a few tokens of its own.  */
1101   static const char *const token_names[] = {
1102     /* cpplib-defined token types */
1103 #define OP(e, s) #e,
1104 #define TK(e, s) #e,
1105     TTYPE_TABLE
1106 #undef OP
1107 #undef TK
1108     /* C++ parser token types - see "Manifest constants", above.  */
1109     "KEYWORD",
1110     "TEMPLATE_ID",
1111     "NESTED_NAME_SPECIFIER",
1112   };
1113
1114   /* For some tokens, print the associated data.  */
1115   switch (token->type)
1116     {
1117     case CPP_KEYWORD:
1118       /* Some keywords have a value that is not an IDENTIFIER_NODE.
1119          For example, `struct' is mapped to an INTEGER_CST.  */
1120       if (TREE_CODE (token->u.value) != IDENTIFIER_NODE)
1121         break;
1122       /* else fall through */
1123     case CPP_NAME:
1124       fputs (IDENTIFIER_POINTER (token->u.value), stream);
1125       break;
1126
1127     case CPP_STRING:
1128     case CPP_STRING16:
1129     case CPP_STRING32:
1130     case CPP_WSTRING:
1131     case CPP_UTF8STRING:
1132       fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->u.value));
1133       break;
1134
1135     case CPP_NUMBER:
1136       print_generic_expr (stream, token->u.value, 0);
1137       break;
1138
1139     default:
1140       /* If we have a name for the token, print it out.  Otherwise, we
1141          simply give the numeric code.  */
1142       if (token->type < ARRAY_SIZE(token_names))
1143         fputs (token_names[token->type], stream);
1144       else
1145         fprintf (stream, "[%d]", token->type);
1146       break;
1147     }
1148 }
1149
1150 /* Start emitting debugging information.  */
1151
1152 static void
1153 cp_lexer_start_debugging (cp_lexer* lexer)
1154 {
1155   lexer->debugging_p = true;
1156   cp_lexer_debug_stream = stderr;
1157 }
1158
1159 /* Stop emitting debugging information.  */
1160
1161 static void
1162 cp_lexer_stop_debugging (cp_lexer* lexer)
1163 {
1164   lexer->debugging_p = false;
1165   cp_lexer_debug_stream = NULL;
1166 }
1167
1168 /* Create a new cp_token_cache, representing a range of tokens.  */
1169
1170 static cp_token_cache *
1171 cp_token_cache_new (cp_token *first, cp_token *last)
1172 {
1173   cp_token_cache *cache = ggc_alloc_cp_token_cache ();
1174   cache->first = first;
1175   cache->last = last;
1176   return cache;
1177 }
1178
1179 \f
1180 /* Decl-specifiers.  */
1181
1182 /* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
1183
1184 static void
1185 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
1186 {
1187   memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
1188 }
1189
1190 /* Declarators.  */
1191
1192 /* Nothing other than the parser should be creating declarators;
1193    declarators are a semi-syntactic representation of C++ entities.
1194    Other parts of the front end that need to create entities (like
1195    VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
1196
1197 static cp_declarator *make_call_declarator
1198   (cp_declarator *, tree, cp_cv_quals, cp_virt_specifiers, tree, tree);
1199 static cp_declarator *make_array_declarator
1200   (cp_declarator *, tree);
1201 static cp_declarator *make_pointer_declarator
1202   (cp_cv_quals, cp_declarator *);
1203 static cp_declarator *make_reference_declarator
1204   (cp_cv_quals, cp_declarator *, bool);
1205 static cp_parameter_declarator *make_parameter_declarator
1206   (cp_decl_specifier_seq *, cp_declarator *, tree);
1207 static cp_declarator *make_ptrmem_declarator
1208   (cp_cv_quals, tree, cp_declarator *);
1209
1210 /* An erroneous declarator.  */
1211 static cp_declarator *cp_error_declarator;
1212
1213 /* The obstack on which declarators and related data structures are
1214    allocated.  */
1215 static struct obstack declarator_obstack;
1216
1217 /* Alloc BYTES from the declarator memory pool.  */
1218
1219 static inline void *
1220 alloc_declarator (size_t bytes)
1221 {
1222   return obstack_alloc (&declarator_obstack, bytes);
1223 }
1224
1225 /* Allocate a declarator of the indicated KIND.  Clear fields that are
1226    common to all declarators.  */
1227
1228 static cp_declarator *
1229 make_declarator (cp_declarator_kind kind)
1230 {
1231   cp_declarator *declarator;
1232
1233   declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
1234   declarator->kind = kind;
1235   declarator->attributes = NULL_TREE;
1236   declarator->declarator = NULL;
1237   declarator->parameter_pack_p = false;
1238   declarator->id_loc = UNKNOWN_LOCATION;
1239
1240   return declarator;
1241 }
1242
1243 /* Make a declarator for a generalized identifier.  If
1244    QUALIFYING_SCOPE is non-NULL, the identifier is
1245    QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
1246    UNQUALIFIED_NAME.  SFK indicates the kind of special function this
1247    is, if any.   */
1248
1249 static cp_declarator *
1250 make_id_declarator (tree qualifying_scope, tree unqualified_name,
1251                     special_function_kind sfk)
1252 {
1253   cp_declarator *declarator;
1254
1255   /* It is valid to write:
1256
1257        class C { void f(); };
1258        typedef C D;
1259        void D::f();
1260
1261      The standard is not clear about whether `typedef const C D' is
1262      legal; as of 2002-09-15 the committee is considering that
1263      question.  EDG 3.0 allows that syntax.  Therefore, we do as
1264      well.  */
1265   if (qualifying_scope && TYPE_P (qualifying_scope))
1266     qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
1267
1268   gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
1269               || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
1270               || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
1271
1272   declarator = make_declarator (cdk_id);
1273   declarator->u.id.qualifying_scope = qualifying_scope;
1274   declarator->u.id.unqualified_name = unqualified_name;
1275   declarator->u.id.sfk = sfk;
1276   
1277   return declarator;
1278 }
1279
1280 /* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
1281    of modifiers such as const or volatile to apply to the pointer
1282    type, represented as identifiers.  */
1283
1284 cp_declarator *
1285 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
1286 {
1287   cp_declarator *declarator;
1288
1289   declarator = make_declarator (cdk_pointer);
1290   declarator->declarator = target;
1291   declarator->u.pointer.qualifiers = cv_qualifiers;
1292   declarator->u.pointer.class_type = NULL_TREE;
1293   if (target)
1294     {
1295       declarator->id_loc = target->id_loc;
1296       declarator->parameter_pack_p = target->parameter_pack_p;
1297       target->parameter_pack_p = false;
1298     }
1299   else
1300     declarator->parameter_pack_p = false;
1301
1302   return declarator;
1303 }
1304
1305 /* Like make_pointer_declarator -- but for references.  */
1306
1307 cp_declarator *
1308 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target,
1309                            bool rvalue_ref)
1310 {
1311   cp_declarator *declarator;
1312
1313   declarator = make_declarator (cdk_reference);
1314   declarator->declarator = target;
1315   declarator->u.reference.qualifiers = cv_qualifiers;
1316   declarator->u.reference.rvalue_ref = rvalue_ref;
1317   if (target)
1318     {
1319       declarator->id_loc = target->id_loc;
1320       declarator->parameter_pack_p = target->parameter_pack_p;
1321       target->parameter_pack_p = false;
1322     }
1323   else
1324     declarator->parameter_pack_p = false;
1325
1326   return declarator;
1327 }
1328
1329 /* Like make_pointer_declarator -- but for a pointer to a non-static
1330    member of CLASS_TYPE.  */
1331
1332 cp_declarator *
1333 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
1334                         cp_declarator *pointee)
1335 {
1336   cp_declarator *declarator;
1337
1338   declarator = make_declarator (cdk_ptrmem);
1339   declarator->declarator = pointee;
1340   declarator->u.pointer.qualifiers = cv_qualifiers;
1341   declarator->u.pointer.class_type = class_type;
1342
1343   if (pointee)
1344     {
1345       declarator->parameter_pack_p = pointee->parameter_pack_p;
1346       pointee->parameter_pack_p = false;
1347     }
1348   else
1349     declarator->parameter_pack_p = false;
1350
1351   return declarator;
1352 }
1353
1354 /* Make a declarator for the function given by TARGET, with the
1355    indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
1356    "const"-qualified member function.  The EXCEPTION_SPECIFICATION
1357    indicates what exceptions can be thrown.  */
1358
1359 cp_declarator *
1360 make_call_declarator (cp_declarator *target,
1361                       tree parms,
1362                       cp_cv_quals cv_qualifiers,
1363                       cp_virt_specifiers virt_specifiers,
1364                       tree exception_specification,
1365                       tree late_return_type)
1366 {
1367   cp_declarator *declarator;
1368
1369   declarator = make_declarator (cdk_function);
1370   declarator->declarator = target;
1371   declarator->u.function.parameters = parms;
1372   declarator->u.function.qualifiers = cv_qualifiers;
1373   declarator->u.function.virt_specifiers = virt_specifiers;
1374   declarator->u.function.exception_specification = exception_specification;
1375   declarator->u.function.late_return_type = late_return_type;
1376   if (target)
1377     {
1378       declarator->id_loc = target->id_loc;
1379       declarator->parameter_pack_p = target->parameter_pack_p;
1380       target->parameter_pack_p = false;
1381     }
1382   else
1383     declarator->parameter_pack_p = false;
1384
1385   return declarator;
1386 }
1387
1388 /* Make a declarator for an array of BOUNDS elements, each of which is
1389    defined by ELEMENT.  */
1390
1391 cp_declarator *
1392 make_array_declarator (cp_declarator *element, tree bounds)
1393 {
1394   cp_declarator *declarator;
1395
1396   declarator = make_declarator (cdk_array);
1397   declarator->declarator = element;
1398   declarator->u.array.bounds = bounds;
1399   if (element)
1400     {
1401       declarator->id_loc = element->id_loc;
1402       declarator->parameter_pack_p = element->parameter_pack_p;
1403       element->parameter_pack_p = false;
1404     }
1405   else
1406     declarator->parameter_pack_p = false;
1407
1408   return declarator;
1409 }
1410
1411 /* Determine whether the declarator we've seen so far can be a
1412    parameter pack, when followed by an ellipsis.  */
1413 static bool 
1414 declarator_can_be_parameter_pack (cp_declarator *declarator)
1415 {
1416   /* Search for a declarator name, or any other declarator that goes
1417      after the point where the ellipsis could appear in a parameter
1418      pack. If we find any of these, then this declarator can not be
1419      made into a parameter pack.  */
1420   bool found = false;
1421   while (declarator && !found)
1422     {
1423       switch ((int)declarator->kind)
1424         {
1425         case cdk_id:
1426         case cdk_array:
1427           found = true;
1428           break;
1429
1430         case cdk_error:
1431           return true;
1432
1433         default:
1434           declarator = declarator->declarator;
1435           break;
1436         }
1437     }
1438
1439   return !found;
1440 }
1441
1442 cp_parameter_declarator *no_parameters;
1443
1444 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
1445    DECLARATOR and DEFAULT_ARGUMENT.  */
1446
1447 cp_parameter_declarator *
1448 make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
1449                            cp_declarator *declarator,
1450                            tree default_argument)
1451 {
1452   cp_parameter_declarator *parameter;
1453
1454   parameter = ((cp_parameter_declarator *)
1455                alloc_declarator (sizeof (cp_parameter_declarator)));
1456   parameter->next = NULL;
1457   if (decl_specifiers)
1458     parameter->decl_specifiers = *decl_specifiers;
1459   else
1460     clear_decl_specs (&parameter->decl_specifiers);
1461   parameter->declarator = declarator;
1462   parameter->default_argument = default_argument;
1463   parameter->ellipsis_p = false;
1464
1465   return parameter;
1466 }
1467
1468 /* Returns true iff DECLARATOR  is a declaration for a function.  */
1469
1470 static bool
1471 function_declarator_p (const cp_declarator *declarator)
1472 {
1473   while (declarator)
1474     {
1475       if (declarator->kind == cdk_function
1476           && declarator->declarator->kind == cdk_id)
1477         return true;
1478       if (declarator->kind == cdk_id
1479           || declarator->kind == cdk_error)
1480         return false;
1481       declarator = declarator->declarator;
1482     }
1483   return false;
1484 }
1485  
1486 /* The parser.  */
1487
1488 /* Overview
1489    --------
1490
1491    A cp_parser parses the token stream as specified by the C++
1492    grammar.  Its job is purely parsing, not semantic analysis.  For
1493    example, the parser breaks the token stream into declarators,
1494    expressions, statements, and other similar syntactic constructs.
1495    It does not check that the types of the expressions on either side
1496    of an assignment-statement are compatible, or that a function is
1497    not declared with a parameter of type `void'.
1498
1499    The parser invokes routines elsewhere in the compiler to perform
1500    semantic analysis and to build up the abstract syntax tree for the
1501    code processed.
1502
1503    The parser (and the template instantiation code, which is, in a
1504    way, a close relative of parsing) are the only parts of the
1505    compiler that should be calling push_scope and pop_scope, or
1506    related functions.  The parser (and template instantiation code)
1507    keeps track of what scope is presently active; everything else
1508    should simply honor that.  (The code that generates static
1509    initializers may also need to set the scope, in order to check
1510    access control correctly when emitting the initializers.)
1511
1512    Methodology
1513    -----------
1514
1515    The parser is of the standard recursive-descent variety.  Upcoming
1516    tokens in the token stream are examined in order to determine which
1517    production to use when parsing a non-terminal.  Some C++ constructs
1518    require arbitrary look ahead to disambiguate.  For example, it is
1519    impossible, in the general case, to tell whether a statement is an
1520    expression or declaration without scanning the entire statement.
1521    Therefore, the parser is capable of "parsing tentatively."  When the
1522    parser is not sure what construct comes next, it enters this mode.
1523    Then, while we attempt to parse the construct, the parser queues up
1524    error messages, rather than issuing them immediately, and saves the
1525    tokens it consumes.  If the construct is parsed successfully, the
1526    parser "commits", i.e., it issues any queued error messages and
1527    the tokens that were being preserved are permanently discarded.
1528    If, however, the construct is not parsed successfully, the parser
1529    rolls back its state completely so that it can resume parsing using
1530    a different alternative.
1531
1532    Future Improvements
1533    -------------------
1534
1535    The performance of the parser could probably be improved substantially.
1536    We could often eliminate the need to parse tentatively by looking ahead
1537    a little bit.  In some places, this approach might not entirely eliminate
1538    the need to parse tentatively, but it might still speed up the average
1539    case.  */
1540
1541 /* Flags that are passed to some parsing functions.  These values can
1542    be bitwise-ored together.  */
1543
1544 enum
1545 {
1546   /* No flags.  */
1547   CP_PARSER_FLAGS_NONE = 0x0,
1548   /* The construct is optional.  If it is not present, then no error
1549      should be issued.  */
1550   CP_PARSER_FLAGS_OPTIONAL = 0x1,
1551   /* When parsing a type-specifier, treat user-defined type-names
1552      as non-type identifiers.  */
1553   CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2,
1554   /* When parsing a type-specifier, do not try to parse a class-specifier
1555      or enum-specifier.  */
1556   CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS = 0x4,
1557   /* When parsing a decl-specifier-seq, only allow type-specifier or
1558      constexpr.  */
1559   CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR = 0x8
1560 };
1561
1562 /* This type is used for parameters and variables which hold
1563    combinations of the above flags.  */
1564 typedef int cp_parser_flags;
1565
1566 /* The different kinds of declarators we want to parse.  */
1567
1568 typedef enum cp_parser_declarator_kind
1569 {
1570   /* We want an abstract declarator.  */
1571   CP_PARSER_DECLARATOR_ABSTRACT,
1572   /* We want a named declarator.  */
1573   CP_PARSER_DECLARATOR_NAMED,
1574   /* We don't mind, but the name must be an unqualified-id.  */
1575   CP_PARSER_DECLARATOR_EITHER
1576 } cp_parser_declarator_kind;
1577
1578 /* The precedence values used to parse binary expressions.  The minimum value
1579    of PREC must be 1, because zero is reserved to quickly discriminate
1580    binary operators from other tokens.  */
1581
1582 enum cp_parser_prec
1583 {
1584   PREC_NOT_OPERATOR,
1585   PREC_LOGICAL_OR_EXPRESSION,
1586   PREC_LOGICAL_AND_EXPRESSION,
1587   PREC_INCLUSIVE_OR_EXPRESSION,
1588   PREC_EXCLUSIVE_OR_EXPRESSION,
1589   PREC_AND_EXPRESSION,
1590   PREC_EQUALITY_EXPRESSION,
1591   PREC_RELATIONAL_EXPRESSION,
1592   PREC_SHIFT_EXPRESSION,
1593   PREC_ADDITIVE_EXPRESSION,
1594   PREC_MULTIPLICATIVE_EXPRESSION,
1595   PREC_PM_EXPRESSION,
1596   NUM_PREC_VALUES = PREC_PM_EXPRESSION
1597 };
1598
1599 /* A mapping from a token type to a corresponding tree node type, with a
1600    precedence value.  */
1601
1602 typedef struct cp_parser_binary_operations_map_node
1603 {
1604   /* The token type.  */
1605   enum cpp_ttype token_type;
1606   /* The corresponding tree code.  */
1607   enum tree_code tree_type;
1608   /* The precedence of this operator.  */
1609   enum cp_parser_prec prec;
1610 } cp_parser_binary_operations_map_node;
1611
1612 typedef struct cp_parser_expression_stack_entry
1613 {
1614   /* Left hand side of the binary operation we are currently
1615      parsing.  */
1616   tree lhs;
1617   /* Original tree code for left hand side, if it was a binary
1618      expression itself (used for -Wparentheses).  */
1619   enum tree_code lhs_type;
1620   /* Tree code for the binary operation we are parsing.  */
1621   enum tree_code tree_type;
1622   /* Precedence of the binary operation we are parsing.  */
1623   enum cp_parser_prec prec;
1624 } cp_parser_expression_stack_entry;
1625
1626 /* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1627    entries because precedence levels on the stack are monotonically
1628    increasing.  */
1629 typedef struct cp_parser_expression_stack_entry
1630   cp_parser_expression_stack[NUM_PREC_VALUES];
1631
1632 /* Prototypes.  */
1633
1634 /* Constructors and destructors.  */
1635
1636 static cp_parser_context *cp_parser_context_new
1637   (cp_parser_context *);
1638
1639 /* Class variables.  */
1640
1641 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1642
1643 /* The operator-precedence table used by cp_parser_binary_expression.
1644    Transformed into an associative array (binops_by_token) by
1645    cp_parser_new.  */
1646
1647 static const cp_parser_binary_operations_map_node binops[] = {
1648   { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1649   { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1650
1651   { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1652   { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1653   { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1654
1655   { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1656   { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1657
1658   { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1659   { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1660
1661   { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1662   { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1663   { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1664   { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1665
1666   { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1667   { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1668
1669   { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1670
1671   { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1672
1673   { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1674
1675   { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1676
1677   { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1678 };
1679
1680 /* The same as binops, but initialized by cp_parser_new so that
1681    binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1682    for speed.  */
1683 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1684
1685 /* Constructors and destructors.  */
1686
1687 /* Construct a new context.  The context below this one on the stack
1688    is given by NEXT.  */
1689
1690 static cp_parser_context *
1691 cp_parser_context_new (cp_parser_context* next)
1692 {
1693   cp_parser_context *context;
1694
1695   /* Allocate the storage.  */
1696   if (cp_parser_context_free_list != NULL)
1697     {
1698       /* Pull the first entry from the free list.  */
1699       context = cp_parser_context_free_list;
1700       cp_parser_context_free_list = context->next;
1701       memset (context, 0, sizeof (*context));
1702     }
1703   else
1704     context = ggc_alloc_cleared_cp_parser_context ();
1705
1706   /* No errors have occurred yet in this context.  */
1707   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1708   /* If this is not the bottommost context, copy information that we
1709      need from the previous context.  */
1710   if (next)
1711     {
1712       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1713          expression, then we are parsing one in this context, too.  */
1714       context->object_type = next->object_type;
1715       /* Thread the stack.  */
1716       context->next = next;
1717     }
1718
1719   return context;
1720 }
1721
1722 /* Managing the unparsed function queues.  */
1723
1724 #define unparsed_funs_with_default_args \
1725   VEC_last (cp_unparsed_functions_entry, parser->unparsed_queues)->funs_with_default_args
1726 #define unparsed_funs_with_definitions \
1727   VEC_last (cp_unparsed_functions_entry, parser->unparsed_queues)->funs_with_definitions
1728 #define unparsed_nsdmis \
1729   VEC_last (cp_unparsed_functions_entry, parser->unparsed_queues)->nsdmis
1730
1731 static void
1732 push_unparsed_function_queues (cp_parser *parser)
1733 {
1734   VEC_safe_push (cp_unparsed_functions_entry, gc,
1735                  parser->unparsed_queues, NULL);
1736   unparsed_funs_with_default_args = NULL;
1737   unparsed_funs_with_definitions = make_tree_vector ();
1738   unparsed_nsdmis = NULL;
1739 }
1740
1741 static void
1742 pop_unparsed_function_queues (cp_parser *parser)
1743 {
1744   release_tree_vector (unparsed_funs_with_definitions);
1745   VEC_pop (cp_unparsed_functions_entry, parser->unparsed_queues);
1746 }
1747
1748 /* Prototypes.  */
1749
1750 /* Constructors and destructors.  */
1751
1752 static cp_parser *cp_parser_new
1753   (void);
1754
1755 /* Routines to parse various constructs.
1756
1757    Those that return `tree' will return the error_mark_node (rather
1758    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1759    Sometimes, they will return an ordinary node if error-recovery was
1760    attempted, even though a parse error occurred.  So, to check
1761    whether or not a parse error occurred, you should always use
1762    cp_parser_error_occurred.  If the construct is optional (indicated
1763    either by an `_opt' in the name of the function that does the
1764    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1765    the construct is not present.  */
1766
1767 /* Lexical conventions [gram.lex]  */
1768
1769 static tree cp_parser_identifier
1770   (cp_parser *);
1771 static tree cp_parser_string_literal
1772   (cp_parser *, bool, bool);
1773 static tree cp_parser_userdef_char_literal
1774   (cp_parser *);
1775 static tree cp_parser_userdef_string_literal
1776   (cp_token *);
1777 static tree cp_parser_userdef_numeric_literal
1778   (cp_parser *);
1779
1780 /* Basic concepts [gram.basic]  */
1781
1782 static bool cp_parser_translation_unit
1783   (cp_parser *);
1784
1785 /* Expressions [gram.expr]  */
1786
1787 static tree cp_parser_primary_expression
1788   (cp_parser *, bool, bool, bool, cp_id_kind *);
1789 static tree cp_parser_id_expression
1790   (cp_parser *, bool, bool, bool *, bool, bool);
1791 static tree cp_parser_unqualified_id
1792   (cp_parser *, bool, bool, bool, bool);
1793 static tree cp_parser_nested_name_specifier_opt
1794   (cp_parser *, bool, bool, bool, bool);
1795 static tree cp_parser_nested_name_specifier
1796   (cp_parser *, bool, bool, bool, bool);
1797 static tree cp_parser_qualifying_entity
1798   (cp_parser *, bool, bool, bool, bool, bool);
1799 static tree cp_parser_postfix_expression
1800   (cp_parser *, bool, bool, bool, cp_id_kind *);
1801 static tree cp_parser_postfix_open_square_expression
1802   (cp_parser *, tree, bool);
1803 static tree cp_parser_postfix_dot_deref_expression
1804   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *, location_t);
1805 static VEC(tree,gc) *cp_parser_parenthesized_expression_list
1806   (cp_parser *, int, bool, bool, bool *);
1807 /* Values for the second parameter of cp_parser_parenthesized_expression_list.  */
1808 enum { non_attr = 0, normal_attr = 1, id_attr = 2 };
1809 static void cp_parser_pseudo_destructor_name
1810   (cp_parser *, tree *, tree *);
1811 static tree cp_parser_unary_expression
1812   (cp_parser *, bool, bool, cp_id_kind *);
1813 static enum tree_code cp_parser_unary_operator
1814   (cp_token *);
1815 static tree cp_parser_new_expression
1816   (cp_parser *);
1817 static VEC(tree,gc) *cp_parser_new_placement
1818   (cp_parser *);
1819 static tree cp_parser_new_type_id
1820   (cp_parser *, tree *);
1821 static cp_declarator *cp_parser_new_declarator_opt
1822   (cp_parser *);
1823 static cp_declarator *cp_parser_direct_new_declarator
1824   (cp_parser *);
1825 static VEC(tree,gc) *cp_parser_new_initializer
1826   (cp_parser *);
1827 static tree cp_parser_delete_expression
1828   (cp_parser *);
1829 static tree cp_parser_cast_expression
1830   (cp_parser *, bool, bool, cp_id_kind *);
1831 static tree cp_parser_binary_expression
1832   (cp_parser *, bool, bool, enum cp_parser_prec, cp_id_kind *);
1833 static tree cp_parser_question_colon_clause
1834   (cp_parser *, tree);
1835 static tree cp_parser_assignment_expression
1836   (cp_parser *, bool, cp_id_kind *);
1837 static enum tree_code cp_parser_assignment_operator_opt
1838   (cp_parser *);
1839 static tree cp_parser_expression
1840   (cp_parser *, bool, cp_id_kind *);
1841 static tree cp_parser_constant_expression
1842   (cp_parser *, bool, bool *);
1843 static tree cp_parser_builtin_offsetof
1844   (cp_parser *);
1845 static tree cp_parser_lambda_expression
1846   (cp_parser *);
1847 static void cp_parser_lambda_introducer
1848   (cp_parser *, tree);
1849 static bool cp_parser_lambda_declarator_opt
1850   (cp_parser *, tree);
1851 static void cp_parser_lambda_body
1852   (cp_parser *, tree);
1853
1854 /* Statements [gram.stmt.stmt]  */
1855
1856 static void cp_parser_statement
1857   (cp_parser *, tree, bool, bool *);
1858 static void cp_parser_label_for_labeled_statement
1859   (cp_parser *);
1860 static tree cp_parser_expression_statement
1861   (cp_parser *, tree);
1862 static tree cp_parser_compound_statement
1863   (cp_parser *, tree, bool, bool);
1864 static void cp_parser_statement_seq_opt
1865   (cp_parser *, tree);
1866 static tree cp_parser_selection_statement
1867   (cp_parser *, bool *);
1868 static tree cp_parser_condition
1869   (cp_parser *);
1870 static tree cp_parser_iteration_statement
1871   (cp_parser *);
1872 static bool cp_parser_for_init_statement
1873   (cp_parser *, tree *decl);
1874 static tree cp_parser_for
1875   (cp_parser *);
1876 static tree cp_parser_c_for
1877   (cp_parser *, tree, tree);
1878 static tree cp_parser_range_for
1879   (cp_parser *, tree, tree, tree);
1880 static void do_range_for_auto_deduction
1881   (tree, tree);
1882 static tree cp_parser_perform_range_for_lookup
1883   (tree, tree *, tree *);
1884 static tree cp_parser_range_for_member_function
1885   (tree, tree);
1886 static tree cp_parser_jump_statement
1887   (cp_parser *);
1888 static void cp_parser_declaration_statement
1889   (cp_parser *);
1890
1891 static tree cp_parser_implicitly_scoped_statement
1892   (cp_parser *, bool *);
1893 static void cp_parser_already_scoped_statement
1894   (cp_parser *);
1895
1896 /* Declarations [gram.dcl.dcl] */
1897
1898 static void cp_parser_declaration_seq_opt
1899   (cp_parser *);
1900 static void cp_parser_declaration
1901   (cp_parser *);
1902 static void cp_parser_block_declaration
1903   (cp_parser *, bool);
1904 static void cp_parser_simple_declaration
1905   (cp_parser *, bool, tree *);
1906 static void cp_parser_decl_specifier_seq
1907   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1908 static tree cp_parser_storage_class_specifier_opt
1909   (cp_parser *);
1910 static tree cp_parser_function_specifier_opt
1911   (cp_parser *, cp_decl_specifier_seq *);
1912 static tree cp_parser_type_specifier
1913   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1914    int *, bool *);
1915 static tree cp_parser_simple_type_specifier
1916   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1917 static tree cp_parser_type_name
1918   (cp_parser *);
1919 static tree cp_parser_nonclass_name 
1920   (cp_parser* parser);
1921 static tree cp_parser_elaborated_type_specifier
1922   (cp_parser *, bool, bool);
1923 static tree cp_parser_enum_specifier
1924   (cp_parser *);
1925 static void cp_parser_enumerator_list
1926   (cp_parser *, tree);
1927 static void cp_parser_enumerator_definition
1928   (cp_parser *, tree);
1929 static tree cp_parser_namespace_name
1930   (cp_parser *);
1931 static void cp_parser_namespace_definition
1932   (cp_parser *);
1933 static void cp_parser_namespace_body
1934   (cp_parser *);
1935 static tree cp_parser_qualified_namespace_specifier
1936   (cp_parser *);
1937 static void cp_parser_namespace_alias_definition
1938   (cp_parser *);
1939 static bool cp_parser_using_declaration
1940   (cp_parser *, bool);
1941 static void cp_parser_using_directive
1942   (cp_parser *);
1943 static tree cp_parser_alias_declaration
1944   (cp_parser *);
1945 static void cp_parser_asm_definition
1946   (cp_parser *);
1947 static void cp_parser_linkage_specification
1948   (cp_parser *);
1949 static void cp_parser_static_assert
1950   (cp_parser *, bool);
1951 static tree cp_parser_decltype
1952   (cp_parser *);
1953
1954 /* Declarators [gram.dcl.decl] */
1955
1956 static tree cp_parser_init_declarator
1957   (cp_parser *, cp_decl_specifier_seq *, VEC (deferred_access_check,gc)*, bool, bool, int, bool *, tree *);
1958 static cp_declarator *cp_parser_declarator
1959   (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1960 static cp_declarator *cp_parser_direct_declarator
1961   (cp_parser *, cp_parser_declarator_kind, int *, bool);
1962 static enum tree_code cp_parser_ptr_operator
1963   (cp_parser *, tree *, cp_cv_quals *);
1964 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1965   (cp_parser *);
1966 static cp_virt_specifiers cp_parser_virt_specifier_seq_opt
1967   (cp_parser *);
1968 static tree cp_parser_late_return_type_opt
1969   (cp_parser *, cp_cv_quals);
1970 static tree cp_parser_declarator_id
1971   (cp_parser *, bool);
1972 static tree cp_parser_type_id
1973   (cp_parser *);
1974 static tree cp_parser_template_type_arg
1975   (cp_parser *);
1976 static tree cp_parser_trailing_type_id (cp_parser *);
1977 static tree cp_parser_type_id_1
1978   (cp_parser *, bool, bool);
1979 static void cp_parser_type_specifier_seq
1980   (cp_parser *, bool, bool, cp_decl_specifier_seq *);
1981 static tree cp_parser_parameter_declaration_clause
1982   (cp_parser *);
1983 static tree cp_parser_parameter_declaration_list
1984   (cp_parser *, bool *);
1985 static cp_parameter_declarator *cp_parser_parameter_declaration
1986   (cp_parser *, bool, bool *);
1987 static tree cp_parser_default_argument 
1988   (cp_parser *, bool);
1989 static void cp_parser_function_body
1990   (cp_parser *);
1991 static tree cp_parser_initializer
1992   (cp_parser *, bool *, bool *);
1993 static tree cp_parser_initializer_clause
1994   (cp_parser *, bool *);
1995 static tree cp_parser_braced_list
1996   (cp_parser*, bool*);
1997 static VEC(constructor_elt,gc) *cp_parser_initializer_list
1998   (cp_parser *, bool *);
1999
2000 static bool cp_parser_ctor_initializer_opt_and_function_body
2001   (cp_parser *);
2002
2003 /* Classes [gram.class] */
2004
2005 static tree cp_parser_class_name
2006   (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
2007 static tree cp_parser_class_specifier
2008   (cp_parser *);
2009 static tree cp_parser_class_head
2010   (cp_parser *, bool *, tree *, tree *);
2011 static enum tag_types cp_parser_class_key
2012   (cp_parser *);
2013 static void cp_parser_member_specification_opt
2014   (cp_parser *);
2015 static void cp_parser_member_declaration
2016   (cp_parser *);
2017 static tree cp_parser_pure_specifier
2018   (cp_parser *);
2019 static tree cp_parser_constant_initializer
2020   (cp_parser *);
2021
2022 /* Derived classes [gram.class.derived] */
2023
2024 static tree cp_parser_base_clause
2025   (cp_parser *);
2026 static tree cp_parser_base_specifier
2027   (cp_parser *);
2028
2029 /* Special member functions [gram.special] */
2030
2031 static tree cp_parser_conversion_function_id
2032   (cp_parser *);
2033 static tree cp_parser_conversion_type_id
2034   (cp_parser *);
2035 static cp_declarator *cp_parser_conversion_declarator_opt
2036   (cp_parser *);
2037 static bool cp_parser_ctor_initializer_opt
2038   (cp_parser *);
2039 static void cp_parser_mem_initializer_list
2040   (cp_parser *);
2041 static tree cp_parser_mem_initializer
2042   (cp_parser *);
2043 static tree cp_parser_mem_initializer_id
2044   (cp_parser *);
2045
2046 /* Overloading [gram.over] */
2047
2048 static tree cp_parser_operator_function_id
2049   (cp_parser *);
2050 static tree cp_parser_operator
2051   (cp_parser *);
2052
2053 /* Templates [gram.temp] */
2054
2055 static void cp_parser_template_declaration
2056   (cp_parser *, bool);
2057 static tree cp_parser_template_parameter_list
2058   (cp_parser *);
2059 static tree cp_parser_template_parameter
2060   (cp_parser *, bool *, bool *);
2061 static tree cp_parser_type_parameter
2062   (cp_parser *, bool *);
2063 static tree cp_parser_template_id
2064   (cp_parser *, bool, bool, bool);
2065 static tree cp_parser_template_name
2066   (cp_parser *, bool, bool, bool, bool *);
2067 static tree cp_parser_template_argument_list
2068   (cp_parser *);
2069 static tree cp_parser_template_argument
2070   (cp_parser *);
2071 static void cp_parser_explicit_instantiation
2072   (cp_parser *);
2073 static void cp_parser_explicit_specialization
2074   (cp_parser *);
2075
2076 /* Exception handling [gram.exception] */
2077
2078 static tree cp_parser_try_block
2079   (cp_parser *);
2080 static bool cp_parser_function_try_block
2081   (cp_parser *);
2082 static void cp_parser_handler_seq
2083   (cp_parser *);
2084 static void cp_parser_handler
2085   (cp_parser *);
2086 static tree cp_parser_exception_declaration
2087   (cp_parser *);
2088 static tree cp_parser_throw_expression
2089   (cp_parser *);
2090 static tree cp_parser_exception_specification_opt
2091   (cp_parser *);
2092 static tree cp_parser_type_id_list
2093   (cp_parser *);
2094
2095 /* GNU Extensions */
2096
2097 static tree cp_parser_asm_specification_opt
2098   (cp_parser *);
2099 static tree cp_parser_asm_operand_list
2100   (cp_parser *);
2101 static tree cp_parser_asm_clobber_list
2102   (cp_parser *);
2103 static tree cp_parser_asm_label_list
2104   (cp_parser *);
2105 static tree cp_parser_attributes_opt
2106   (cp_parser *);
2107 static tree cp_parser_attribute_list
2108   (cp_parser *);
2109 static bool cp_parser_extension_opt
2110   (cp_parser *, int *);
2111 static void cp_parser_label_declaration
2112   (cp_parser *);
2113
2114 /* Transactional Memory Extensions */
2115
2116 static tree cp_parser_transaction
2117   (cp_parser *, enum rid);
2118 static tree cp_parser_transaction_expression
2119   (cp_parser *, enum rid);
2120 static bool cp_parser_function_transaction
2121   (cp_parser *, enum rid);
2122 static tree cp_parser_transaction_cancel
2123   (cp_parser *);
2124
2125 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
2126 static bool cp_parser_pragma
2127   (cp_parser *, enum pragma_context);
2128
2129 /* Objective-C++ Productions */
2130
2131 static tree cp_parser_objc_message_receiver
2132   (cp_parser *);
2133 static tree cp_parser_objc_message_args
2134   (cp_parser *);
2135 static tree cp_parser_objc_message_expression
2136   (cp_parser *);
2137 static tree cp_parser_objc_encode_expression
2138   (cp_parser *);
2139 static tree cp_parser_objc_defs_expression
2140   (cp_parser *);
2141 static tree cp_parser_objc_protocol_expression
2142   (cp_parser *);
2143 static tree cp_parser_objc_selector_expression
2144   (cp_parser *);
2145 static tree cp_parser_objc_expression
2146   (cp_parser *);
2147 static bool cp_parser_objc_selector_p
2148   (enum cpp_ttype);
2149 static tree cp_parser_objc_selector
2150   (cp_parser *);
2151 static tree cp_parser_objc_protocol_refs_opt
2152   (cp_parser *);
2153 static void cp_parser_objc_declaration
2154   (cp_parser *, tree);
2155 static tree cp_parser_objc_statement
2156   (cp_parser *);
2157 static bool cp_parser_objc_valid_prefix_attributes
2158   (cp_parser *, tree *);
2159 static void cp_parser_objc_at_property_declaration 
2160   (cp_parser *) ;
2161 static void cp_parser_objc_at_synthesize_declaration 
2162   (cp_parser *) ;
2163 static void cp_parser_objc_at_dynamic_declaration
2164   (cp_parser *) ;
2165 static tree cp_parser_objc_struct_declaration
2166   (cp_parser *) ;
2167
2168 /* Utility Routines */
2169
2170 static tree cp_parser_lookup_name
2171   (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *, location_t);
2172 static tree cp_parser_lookup_name_simple
2173   (cp_parser *, tree, location_t);
2174 static tree cp_parser_maybe_treat_template_as_class
2175   (tree, bool);
2176 static bool cp_parser_check_declarator_template_parameters
2177   (cp_parser *, cp_declarator *, location_t);
2178 static bool cp_parser_check_template_parameters
2179   (cp_parser *, unsigned, location_t, cp_declarator *);
2180 static tree cp_parser_simple_cast_expression
2181   (cp_parser *);
2182 static tree cp_parser_global_scope_opt
2183   (cp_parser *, bool);
2184 static bool cp_parser_constructor_declarator_p
2185   (cp_parser *, bool);
2186 static tree cp_parser_function_definition_from_specifiers_and_declarator
2187   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
2188 static tree cp_parser_function_definition_after_declarator
2189   (cp_parser *, bool);
2190 static void cp_parser_template_declaration_after_export
2191   (cp_parser *, bool);
2192 static void cp_parser_perform_template_parameter_access_checks
2193   (VEC (deferred_access_check,gc)*);
2194 static tree cp_parser_single_declaration
2195   (cp_parser *, VEC (deferred_access_check,gc)*, bool, bool, bool *);
2196 static tree cp_parser_functional_cast
2197   (cp_parser *, tree);
2198 static tree cp_parser_save_member_function_body
2199   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
2200 static tree cp_parser_save_nsdmi
2201   (cp_parser *);
2202 static tree cp_parser_enclosed_template_argument_list
2203   (cp_parser *);
2204 static void cp_parser_save_default_args
2205   (cp_parser *, tree);
2206 static void cp_parser_late_parsing_for_member
2207   (cp_parser *, tree);
2208 static tree cp_parser_late_parse_one_default_arg
2209   (cp_parser *, tree, tree, tree);
2210 static void cp_parser_late_parsing_nsdmi
2211   (cp_parser *, tree);
2212 static void cp_parser_late_parsing_default_args
2213   (cp_parser *, tree);
2214 static tree cp_parser_sizeof_operand
2215   (cp_parser *, enum rid);
2216 static tree cp_parser_trait_expr
2217   (cp_parser *, enum rid);
2218 static bool cp_parser_declares_only_class_p
2219   (cp_parser *);
2220 static void cp_parser_set_storage_class
2221   (cp_parser *, cp_decl_specifier_seq *, enum rid, location_t);
2222 static void cp_parser_set_decl_spec_type
2223   (cp_decl_specifier_seq *, tree, location_t, bool);
2224 static bool cp_parser_friend_p
2225   (const cp_decl_specifier_seq *);
2226 static void cp_parser_required_error
2227   (cp_parser *, required_token, bool);
2228 static cp_token *cp_parser_require
2229   (cp_parser *, enum cpp_ttype, required_token);
2230 static cp_token *cp_parser_require_keyword
2231   (cp_parser *, enum rid, required_token);
2232 static bool cp_parser_token_starts_function_definition_p
2233   (cp_token *);
2234 static bool cp_parser_next_token_starts_class_definition_p
2235   (cp_parser *);
2236 static bool cp_parser_next_token_ends_template_argument_p
2237   (cp_parser *);
2238 static bool cp_parser_nth_token_starts_template_argument_list_p
2239   (cp_parser *, size_t);
2240 static enum tag_types cp_parser_token_is_class_key
2241   (cp_token *);
2242 static void cp_parser_check_class_key
2243   (enum tag_types, tree type);
2244 static void cp_parser_check_access_in_redeclaration
2245   (tree type, location_t location);
2246 static bool cp_parser_optional_template_keyword
2247   (cp_parser *);
2248 static void cp_parser_pre_parsed_nested_name_specifier
2249   (cp_parser *);
2250 static bool cp_parser_cache_group
2251   (cp_parser *, enum cpp_ttype, unsigned);
2252 static void cp_parser_parse_tentatively
2253   (cp_parser *);
2254 static void cp_parser_commit_to_tentative_parse
2255   (cp_parser *);
2256 static void cp_parser_abort_tentative_parse
2257   (cp_parser *);
2258 static bool cp_parser_parse_definitely
2259   (cp_parser *);
2260 static inline bool cp_parser_parsing_tentatively
2261   (cp_parser *);
2262 static bool cp_parser_uncommitted_to_tentative_parse_p
2263   (cp_parser *);
2264 static void cp_parser_error
2265   (cp_parser *, const char *);
2266 static void cp_parser_name_lookup_error
2267   (cp_parser *, tree, tree, name_lookup_error, location_t);
2268 static bool cp_parser_simulate_error
2269   (cp_parser *);
2270 static bool cp_parser_check_type_definition
2271   (cp_parser *);
2272 static void cp_parser_check_for_definition_in_return_type
2273   (cp_declarator *, tree, location_t type_location);
2274 static void cp_parser_check_for_invalid_template_id
2275   (cp_parser *, tree, location_t location);
2276 static bool cp_parser_non_integral_constant_expression
2277   (cp_parser *, non_integral_constant);
2278 static void cp_parser_diagnose_invalid_type_name
2279   (cp_parser *, tree, tree, location_t);
2280 static bool cp_parser_parse_and_diagnose_invalid_type_name
2281   (cp_parser *);
2282 static int cp_parser_skip_to_closing_parenthesis
2283   (cp_parser *, bool, bool, bool);
2284 static void cp_parser_skip_to_end_of_statement
2285   (cp_parser *);
2286 static void cp_parser_consume_semicolon_at_end_of_statement
2287   (cp_parser *);
2288 static void cp_parser_skip_to_end_of_block_or_statement
2289   (cp_parser *);
2290 static bool cp_parser_skip_to_closing_brace
2291   (cp_parser *);
2292 static void cp_parser_skip_to_end_of_template_parameter_list
2293   (cp_parser *);
2294 static void cp_parser_skip_to_pragma_eol
2295   (cp_parser*, cp_token *);
2296 static bool cp_parser_error_occurred
2297   (cp_parser *);
2298 static bool cp_parser_allow_gnu_extensions_p
2299   (cp_parser *);
2300 static bool cp_parser_is_pure_string_literal
2301   (cp_token *);
2302 static bool cp_parser_is_string_literal
2303   (cp_token *);
2304 static bool cp_parser_is_keyword
2305   (cp_token *, enum rid);
2306 static tree cp_parser_make_typename_type
2307   (cp_parser *, tree, tree, location_t location);
2308 static cp_declarator * cp_parser_make_indirect_declarator
2309   (enum tree_code, tree, cp_cv_quals, cp_declarator *);
2310
2311 /* Returns nonzero if we are parsing tentatively.  */
2312
2313 static inline bool
2314 cp_parser_parsing_tentatively (cp_parser* parser)
2315 {
2316   return parser->context->next != NULL;
2317 }
2318
2319 /* Returns nonzero if TOKEN is a string literal.  */
2320
2321 static bool
2322 cp_parser_is_pure_string_literal (cp_token* token)
2323 {
2324   return (token->type == CPP_STRING ||
2325           token->type == CPP_STRING16 ||
2326           token->type == CPP_STRING32 ||
2327           token->type == CPP_WSTRING ||
2328           token->type == CPP_UTF8STRING);
2329 }
2330
2331 /* Returns nonzero if TOKEN is a string literal
2332    of a user-defined string literal.  */
2333
2334 static bool
2335 cp_parser_is_string_literal (cp_token* token)
2336 {
2337   return (cp_parser_is_pure_string_literal (token) ||
2338           token->type == CPP_STRING_USERDEF ||
2339           token->type == CPP_STRING16_USERDEF ||
2340           token->type == CPP_STRING32_USERDEF ||
2341           token->type == CPP_WSTRING_USERDEF ||
2342           token->type == CPP_UTF8STRING_USERDEF);
2343 }
2344
2345 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
2346
2347 static bool
2348 cp_parser_is_keyword (cp_token* token, enum rid keyword)
2349 {
2350   return token->keyword == keyword;
2351 }
2352
2353 /* If not parsing tentatively, issue a diagnostic of the form
2354       FILE:LINE: MESSAGE before TOKEN
2355    where TOKEN is the next token in the input stream.  MESSAGE
2356    (specified by the caller) is usually of the form "expected
2357    OTHER-TOKEN".  */
2358
2359 static void
2360 cp_parser_error (cp_parser* parser, const char* gmsgid)
2361 {
2362   if (!cp_parser_simulate_error (parser))
2363     {
2364       cp_token *token = cp_lexer_peek_token (parser->lexer);
2365       /* This diagnostic makes more sense if it is tagged to the line
2366          of the token we just peeked at.  */
2367       cp_lexer_set_source_position_from_token (token);
2368
2369       if (token->type == CPP_PRAGMA)
2370         {
2371           error_at (token->location,
2372                     "%<#pragma%> is not allowed here");
2373           cp_parser_skip_to_pragma_eol (parser, token);
2374           return;
2375         }
2376
2377       c_parse_error (gmsgid,
2378                      /* Because c_parser_error does not understand
2379                         CPP_KEYWORD, keywords are treated like
2380                         identifiers.  */
2381                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
2382                      token->u.value, token->flags);
2383     }
2384 }
2385
2386 /* Issue an error about name-lookup failing.  NAME is the
2387    IDENTIFIER_NODE DECL is the result of
2388    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
2389    the thing that we hoped to find.  */
2390
2391 static void
2392 cp_parser_name_lookup_error (cp_parser* parser,
2393                              tree name,
2394                              tree decl,
2395                              name_lookup_error desired,
2396                              location_t location)
2397 {
2398   /* If name lookup completely failed, tell the user that NAME was not
2399      declared.  */
2400   if (decl == error_mark_node)
2401     {
2402       if (parser->scope && parser->scope != global_namespace)
2403         error_at (location, "%<%E::%E%> has not been declared",
2404                   parser->scope, name);
2405       else if (parser->scope == global_namespace)
2406         error_at (location, "%<::%E%> has not been declared", name);
2407       else if (parser->object_scope
2408                && !CLASS_TYPE_P (parser->object_scope))
2409         error_at (location, "request for member %qE in non-class type %qT",
2410                   name, parser->object_scope);
2411       else if (parser->object_scope)
2412         error_at (location, "%<%T::%E%> has not been declared",
2413                   parser->object_scope, name);
2414       else
2415         error_at (location, "%qE has not been declared", name);
2416     }
2417   else if (parser->scope && parser->scope != global_namespace)
2418     {
2419       switch (desired)
2420         {
2421           case NLE_TYPE:
2422             error_at (location, "%<%E::%E%> is not a type",
2423                                 parser->scope, name);
2424             break;
2425           case NLE_CXX98:
2426             error_at (location, "%<%E::%E%> is not a class or namespace",
2427                                 parser->scope, name);
2428             break;
2429           case NLE_NOT_CXX98:
2430             error_at (location,
2431                       "%<%E::%E%> is not a class, namespace, or enumeration",
2432                       parser->scope, name);
2433             break;
2434           default:
2435             gcc_unreachable ();
2436             
2437         }
2438     }
2439   else if (parser->scope == global_namespace)
2440     {
2441       switch (desired)
2442         {
2443           case NLE_TYPE:
2444             error_at (location, "%<::%E%> is not a type", name);
2445             break;
2446           case NLE_CXX98:
2447             error_at (location, "%<::%E%> is not a class or namespace", name);
2448             break;
2449           case NLE_NOT_CXX98:
2450             error_at (location,
2451                       "%<::%E%> is not a class, namespace, or enumeration",
2452                       name);
2453             break;
2454           default:
2455             gcc_unreachable ();
2456         }
2457     }
2458   else
2459     {
2460       switch (desired)
2461         {
2462           case NLE_TYPE:
2463             error_at (location, "%qE is not a type", name);
2464             break;
2465           case NLE_CXX98:
2466             error_at (location, "%qE is not a class or namespace", name);
2467             break;
2468           case NLE_NOT_CXX98:
2469             error_at (location,
2470                       "%qE is not a class, namespace, or enumeration", name);
2471             break;
2472           default:
2473             gcc_unreachable ();
2474         }
2475     }
2476 }
2477
2478 /* If we are parsing tentatively, remember that an error has occurred
2479    during this tentative parse.  Returns true if the error was
2480    simulated; false if a message should be issued by the caller.  */
2481
2482 static bool
2483 cp_parser_simulate_error (cp_parser* parser)
2484 {
2485   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2486     {
2487       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2488       return true;
2489     }
2490   return false;
2491 }
2492
2493 /* Check for repeated decl-specifiers.  */
2494
2495 static void
2496 cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs,
2497                            location_t location)
2498 {
2499   int ds;
2500
2501   for (ds = ds_first; ds != ds_last; ++ds)
2502     {
2503       unsigned count = decl_specs->specs[ds];
2504       if (count < 2)
2505         continue;
2506       /* The "long" specifier is a special case because of "long long".  */
2507       if (ds == ds_long)
2508         {
2509           if (count > 2)
2510             error_at (location, "%<long long long%> is too long for GCC");
2511           else 
2512             pedwarn_cxx98 (location, OPT_Wlong_long, 
2513                            "ISO C++ 1998 does not support %<long long%>");
2514         }
2515       else if (count > 1)
2516         {
2517           static const char *const decl_spec_names[] = {
2518             "signed",
2519             "unsigned",
2520             "short",
2521             "long",
2522             "const",
2523             "volatile",
2524             "restrict",
2525             "inline",
2526             "virtual",
2527             "explicit",
2528             "friend",
2529             "typedef",
2530             "using",
2531             "constexpr",
2532             "__complex",
2533             "__thread"
2534           };
2535           error_at (location, "duplicate %qs", decl_spec_names[ds]);
2536         }
2537     }
2538 }
2539
2540 /* This function is called when a type is defined.  If type
2541    definitions are forbidden at this point, an error message is
2542    issued.  */
2543
2544 static bool
2545 cp_parser_check_type_definition (cp_parser* parser)
2546 {
2547   /* If types are forbidden here, issue a message.  */
2548   if (parser->type_definition_forbidden_message)
2549     {
2550       /* Don't use `%s' to print the string, because quotations (`%<', `%>')
2551          in the message need to be interpreted.  */
2552       error (parser->type_definition_forbidden_message);
2553       return false;
2554     }
2555   return true;
2556 }
2557
2558 /* This function is called when the DECLARATOR is processed.  The TYPE
2559    was a type defined in the decl-specifiers.  If it is invalid to
2560    define a type in the decl-specifiers for DECLARATOR, an error is
2561    issued. TYPE_LOCATION is the location of TYPE and is used
2562    for error reporting.  */
2563
2564 static void
2565 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2566                                                tree type, location_t type_location)
2567 {
2568   /* [dcl.fct] forbids type definitions in return types.
2569      Unfortunately, it's not easy to know whether or not we are
2570      processing a return type until after the fact.  */
2571   while (declarator
2572          && (declarator->kind == cdk_pointer
2573              || declarator->kind == cdk_reference
2574              || declarator->kind == cdk_ptrmem))
2575     declarator = declarator->declarator;
2576   if (declarator
2577       && declarator->kind == cdk_function)
2578     {
2579       error_at (type_location,
2580                 "new types may not be defined in a return type");
2581       inform (type_location, 
2582               "(perhaps a semicolon is missing after the definition of %qT)",
2583               type);
2584     }
2585 }
2586
2587 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2588    "<" in any valid C++ program.  If the next token is indeed "<",
2589    issue a message warning the user about what appears to be an
2590    invalid attempt to form a template-id. LOCATION is the location
2591    of the type-specifier (TYPE) */
2592
2593 static void
2594 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2595                                          tree type, location_t location)
2596 {
2597   cp_token_position start = 0;
2598
2599   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2600     {
2601       if (TYPE_P (type))
2602         error_at (location, "%qT is not a template", type);
2603       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2604         error_at (location, "%qE is not a template", type);
2605       else
2606         error_at (location, "invalid template-id");
2607       /* Remember the location of the invalid "<".  */
2608       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2609         start = cp_lexer_token_position (parser->lexer, true);
2610       /* Consume the "<".  */
2611       cp_lexer_consume_token (parser->lexer);
2612       /* Parse the template arguments.  */
2613       cp_parser_enclosed_template_argument_list (parser);
2614       /* Permanently remove the invalid template arguments so that
2615          this error message is not issued again.  */
2616       if (start)
2617         cp_lexer_purge_tokens_after (parser->lexer, start);
2618     }
2619 }
2620
2621 /* If parsing an integral constant-expression, issue an error message
2622    about the fact that THING appeared and return true.  Otherwise,
2623    return false.  In either case, set
2624    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2625
2626 static bool
2627 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2628                                             non_integral_constant thing)
2629 {
2630   parser->non_integral_constant_expression_p = true;
2631   if (parser->integral_constant_expression_p)
2632     {
2633       if (!parser->allow_non_integral_constant_expression_p)
2634         {
2635           const char *msg = NULL;
2636           switch (thing)
2637             {
2638               case NIC_FLOAT:
2639                 error ("floating-point literal "
2640                        "cannot appear in a constant-expression");
2641                 return true;
2642               case NIC_CAST:
2643                 error ("a cast to a type other than an integral or "
2644                        "enumeration type cannot appear in a "
2645                        "constant-expression");
2646                 return true;
2647               case NIC_TYPEID:
2648                 error ("%<typeid%> operator "
2649                        "cannot appear in a constant-expression");
2650                 return true;
2651               case NIC_NCC:
2652                 error ("non-constant compound literals "
2653                        "cannot appear in a constant-expression");
2654                 return true;
2655               case NIC_FUNC_CALL:
2656                 error ("a function call "
2657                        "cannot appear in a constant-expression");
2658                 return true;
2659               case NIC_INC:
2660                 error ("an increment "
2661                        "cannot appear in a constant-expression");
2662                 return true;
2663               case NIC_DEC:
2664                 error ("an decrement "
2665                        "cannot appear in a constant-expression");
2666                 return true;
2667               case NIC_ARRAY_REF:
2668                 error ("an array reference "
2669                        "cannot appear in a constant-expression");
2670                 return true;
2671               case NIC_ADDR_LABEL:
2672                 error ("the address of a label "
2673                        "cannot appear in a constant-expression");
2674                 return true;
2675               case NIC_OVERLOADED:
2676                 error ("calls to overloaded operators "
2677                        "cannot appear in a constant-expression");
2678                 return true;
2679               case NIC_ASSIGNMENT:
2680                 error ("an assignment cannot appear in a constant-expression");
2681                 return true;
2682               case NIC_COMMA:
2683                 error ("a comma operator "
2684                        "cannot appear in a constant-expression");
2685                 return true;
2686               case NIC_CONSTRUCTOR:
2687                 error ("a call to a constructor "
2688                        "cannot appear in a constant-expression");
2689                 return true;
2690               case NIC_TRANSACTION:
2691                 error ("a transaction expression "
2692                        "cannot appear in a constant-expression");
2693                 return true;
2694               case NIC_THIS:
2695                 msg = "this";
2696                 break;
2697               case NIC_FUNC_NAME:
2698                 msg = "__FUNCTION__";
2699                 break;
2700               case NIC_PRETTY_FUNC:
2701                 msg = "__PRETTY_FUNCTION__";
2702                 break;
2703               case NIC_C99_FUNC:
2704                 msg = "__func__";
2705                 break;
2706               case NIC_VA_ARG:
2707                 msg = "va_arg";
2708                 break;
2709               case NIC_ARROW:
2710                 msg = "->";
2711                 break;
2712               case NIC_POINT:
2713                 msg = ".";
2714                 break;
2715               case NIC_STAR:
2716                 msg = "*";
2717                 break;
2718               case NIC_ADDR:
2719                 msg = "&";
2720                 break;
2721               case NIC_PREINCREMENT:
2722                 msg = "++";
2723                 break;
2724               case NIC_PREDECREMENT:
2725                 msg = "--";
2726                 break;
2727               case NIC_NEW:
2728                 msg = "new";
2729                 break;
2730               case NIC_DEL:
2731                 msg = "delete";
2732                 break;
2733               default:
2734                 gcc_unreachable ();
2735             }
2736           if (msg)
2737             error ("%qs cannot appear in a constant-expression", msg);
2738           return true;
2739         }
2740     }
2741   return false;
2742 }
2743
2744 /* Emit a diagnostic for an invalid type name.  SCOPE is the
2745    qualifying scope (or NULL, if none) for ID.  This function commits
2746    to the current active tentative parse, if any.  (Otherwise, the
2747    problematic construct might be encountered again later, resulting
2748    in duplicate error messages.) LOCATION is the location of ID.  */
2749
2750 static void
2751 cp_parser_diagnose_invalid_type_name (cp_parser *parser,
2752                                       tree scope, tree id,
2753                                       location_t location)
2754 {
2755   tree decl, old_scope;
2756   cp_parser_commit_to_tentative_parse (parser);
2757   /* Try to lookup the identifier.  */
2758   old_scope = parser->scope;
2759   parser->scope = scope;
2760   decl = cp_parser_lookup_name_simple (parser, id, location);
2761   parser->scope = old_scope;
2762   /* If the lookup found a template-name, it means that the user forgot
2763   to specify an argument list. Emit a useful error message.  */
2764   if (TREE_CODE (decl) == TEMPLATE_DECL)
2765     error_at (location,
2766               "invalid use of template-name %qE without an argument list",
2767               decl);
2768   else if (TREE_CODE (id) == BIT_NOT_EXPR)
2769     error_at (location, "invalid use of destructor %qD as a type", id);
2770   else if (TREE_CODE (decl) == TYPE_DECL)
2771     /* Something like 'unsigned A a;'  */
2772     error_at (location, "invalid combination of multiple type-specifiers");
2773   else if (!parser->scope)
2774     {
2775       /* Issue an error message.  */
2776       error_at (location, "%qE does not name a type", id);
2777       /* If we're in a template class, it's possible that the user was
2778          referring to a type from a base class.  For example:
2779
2780            template <typename T> struct A { typedef T X; };
2781            template <typename T> struct B : public A<T> { X x; };
2782
2783          The user should have said "typename A<T>::X".  */
2784       if (cxx_dialect < cxx0x && id == ridpointers[(int)RID_CONSTEXPR])
2785         inform (location, "C++11 %<constexpr%> only available with "
2786                 "-std=c++11 or -std=gnu++11");
2787       else if (processing_template_decl && current_class_type
2788                && TYPE_BINFO (current_class_type))
2789         {
2790           tree b;
2791
2792           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2793                b;
2794                b = TREE_CHAIN (b))
2795             {
2796               tree base_type = BINFO_TYPE (b);
2797               if (CLASS_TYPE_P (base_type)
2798                   && dependent_type_p (base_type))
2799                 {
2800                   tree field;
2801                   /* Go from a particular instantiation of the
2802                      template (which will have an empty TYPE_FIELDs),
2803                      to the main version.  */
2804                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2805                   for (field = TYPE_FIELDS (base_type);
2806                        field;
2807                        field = DECL_CHAIN (field))
2808                     if (TREE_CODE (field) == TYPE_DECL
2809                         && DECL_NAME (field) == id)
2810                       {
2811                         inform (location, 
2812                                 "(perhaps %<typename %T::%E%> was intended)",
2813                                 BINFO_TYPE (b), id);
2814                         break;
2815                       }
2816                   if (field)
2817                     break;
2818                 }
2819             }
2820         }
2821     }
2822   /* Here we diagnose qualified-ids where the scope is actually correct,
2823      but the identifier does not resolve to a valid type name.  */
2824   else if (parser->scope != error_mark_node)
2825     {
2826       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2827         error_at (location, "%qE in namespace %qE does not name a type",
2828                   id, parser->scope);
2829       else if (CLASS_TYPE_P (parser->scope)
2830                && constructor_name_p (id, parser->scope))
2831         {
2832           /* A<T>::A<T>() */
2833           error_at (location, "%<%T::%E%> names the constructor, not"
2834                     " the type", parser->scope, id);
2835           if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2836             error_at (location, "and %qT has no template constructors",
2837                       parser->scope);
2838         }
2839       else if (TYPE_P (parser->scope)
2840                && dependent_scope_p (parser->scope))
2841         error_at (location, "need %<typename%> before %<%T::%E%> because "
2842                   "%qT is a dependent scope",
2843                   parser->scope, id, parser->scope);
2844       else if (TYPE_P (parser->scope))
2845         error_at (location, "%qE in %q#T does not name a type",
2846                   id, parser->scope);
2847       else
2848         gcc_unreachable ();
2849     }
2850 }
2851
2852 /* Check for a common situation where a type-name should be present,
2853    but is not, and issue a sensible error message.  Returns true if an
2854    invalid type-name was detected.
2855
2856    The situation handled by this function are variable declarations of the
2857    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2858    Usually, `ID' should name a type, but if we got here it means that it
2859    does not. We try to emit the best possible error message depending on
2860    how exactly the id-expression looks like.  */
2861
2862 static bool
2863 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2864 {
2865   tree id;
2866   cp_token *token = cp_lexer_peek_token (parser->lexer);
2867
2868   /* Avoid duplicate error about ambiguous lookup.  */
2869   if (token->type == CPP_NESTED_NAME_SPECIFIER)
2870     {
2871       cp_token *next = cp_lexer_peek_nth_token (parser->lexer, 2);
2872       if (next->type == CPP_NAME && next->ambiguous_p)
2873         goto out;
2874     }
2875
2876   cp_parser_parse_tentatively (parser);
2877   id = cp_parser_id_expression (parser,
2878                                 /*template_keyword_p=*/false,
2879                                 /*check_dependency_p=*/true,
2880                                 /*template_p=*/NULL,
2881                                 /*declarator_p=*/true,
2882                                 /*optional_p=*/false);
2883   /* If the next token is a (, this is a function with no explicit return
2884      type, i.e. constructor, destructor or conversion op.  */
2885   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
2886       || TREE_CODE (id) == TYPE_DECL)
2887     {
2888       cp_parser_abort_tentative_parse (parser);
2889       return false;
2890     }
2891   if (!cp_parser_parse_definitely (parser))
2892     return false;
2893
2894   /* Emit a diagnostic for the invalid type.  */
2895   cp_parser_diagnose_invalid_type_name (parser, parser->scope,
2896                                         id, token->location);
2897  out:
2898   /* If we aren't in the middle of a declarator (i.e. in a
2899      parameter-declaration-clause), skip to the end of the declaration;
2900      there's no point in trying to process it.  */
2901   if (!parser->in_declarator_p)
2902     cp_parser_skip_to_end_of_block_or_statement (parser);
2903   return true;
2904 }
2905
2906 /* Consume tokens up to, and including, the next non-nested closing `)'.
2907    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2908    are doing error recovery. Returns -1 if OR_COMMA is true and we
2909    found an unnested comma.  */
2910
2911 static int
2912 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2913                                        bool recovering,
2914                                        bool or_comma,
2915                                        bool consume_paren)
2916 {
2917   unsigned paren_depth = 0;
2918   unsigned brace_depth = 0;
2919   unsigned square_depth = 0;
2920
2921   if (recovering && !or_comma
2922       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2923     return 0;
2924
2925   while (true)
2926     {
2927       cp_token * token = cp_lexer_peek_token (parser->lexer);
2928
2929       switch (token->type)
2930         {
2931         case CPP_EOF:
2932         case CPP_PRAGMA_EOL:
2933           /* If we've run out of tokens, then there is no closing `)'.  */
2934           return 0;
2935
2936         /* This is good for lambda expression capture-lists.  */
2937         case CPP_OPEN_SQUARE:
2938           ++square_depth;
2939           break;
2940         case CPP_CLOSE_SQUARE:
2941           if (!square_depth--)
2942             return 0;
2943           break;
2944
2945         case CPP_SEMICOLON:
2946           /* This matches the processing in skip_to_end_of_statement.  */
2947           if (!brace_depth)
2948             return 0;
2949           break;
2950
2951         case CPP_OPEN_BRACE:
2952           ++brace_depth;
2953           break;
2954         case CPP_CLOSE_BRACE:
2955           if (!brace_depth--)
2956             return 0;
2957           break;
2958
2959         case CPP_COMMA:
2960           if (recovering && or_comma && !brace_depth && !paren_depth
2961               && !square_depth)
2962             return -1;
2963           break;
2964
2965         case CPP_OPEN_PAREN:
2966           if (!brace_depth)
2967             ++paren_depth;
2968           break;
2969
2970         case CPP_CLOSE_PAREN:
2971           if (!brace_depth && !paren_depth--)
2972             {
2973               if (consume_paren)
2974                 cp_lexer_consume_token (parser->lexer);
2975               return 1;
2976             }
2977           break;
2978
2979         default:
2980           break;
2981         }
2982
2983       /* Consume the token.  */
2984       cp_lexer_consume_token (parser->lexer);
2985     }
2986 }
2987
2988 /* Consume tokens until we reach the end of the current statement.
2989    Normally, that will be just before consuming a `;'.  However, if a
2990    non-nested `}' comes first, then we stop before consuming that.  */
2991
2992 static void
2993 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2994 {
2995   unsigned nesting_depth = 0;
2996
2997   while (true)
2998     {
2999       cp_token *token = cp_lexer_peek_token (parser->lexer);
3000
3001       switch (token->type)
3002         {
3003         case CPP_EOF:
3004         case CPP_PRAGMA_EOL:
3005           /* If we've run out of tokens, stop.  */
3006           return;
3007
3008         case CPP_SEMICOLON:
3009           /* If the next token is a `;', we have reached the end of the
3010              statement.  */
3011           if (!nesting_depth)
3012             return;
3013           break;
3014
3015         case CPP_CLOSE_BRACE:
3016           /* If this is a non-nested '}', stop before consuming it.
3017              That way, when confronted with something like:
3018
3019                { 3 + }
3020
3021              we stop before consuming the closing '}', even though we
3022              have not yet reached a `;'.  */
3023           if (nesting_depth == 0)
3024             return;
3025
3026           /* If it is the closing '}' for a block that we have
3027              scanned, stop -- but only after consuming the token.
3028              That way given:
3029
3030                 void f g () { ... }
3031                 typedef int I;
3032
3033              we will stop after the body of the erroneously declared
3034              function, but before consuming the following `typedef'
3035              declaration.  */
3036           if (--nesting_depth == 0)
3037             {
3038               cp_lexer_consume_token (parser->lexer);
3039               return;
3040             }
3041
3042         case CPP_OPEN_BRACE:
3043           ++nesting_depth;
3044           break;
3045
3046         default:
3047           break;
3048         }
3049
3050       /* Consume the token.  */
3051       cp_lexer_consume_token (parser->lexer);
3052     }
3053 }
3054
3055 /* This function is called at the end of a statement or declaration.
3056    If the next token is a semicolon, it is consumed; otherwise, error
3057    recovery is attempted.  */
3058
3059 static void
3060 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
3061 {
3062   /* Look for the trailing `;'.  */
3063   if (!cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON))
3064     {
3065       /* If there is additional (erroneous) input, skip to the end of
3066          the statement.  */
3067       cp_parser_skip_to_end_of_statement (parser);
3068       /* If the next token is now a `;', consume it.  */
3069       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
3070         cp_lexer_consume_token (parser->lexer);
3071     }
3072 }
3073
3074 /* Skip tokens until we have consumed an entire block, or until we
3075    have consumed a non-nested `;'.  */
3076
3077 static void
3078 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
3079 {
3080   int nesting_depth = 0;
3081
3082   while (nesting_depth >= 0)
3083     {
3084       cp_token *token = cp_lexer_peek_token (parser->lexer);
3085
3086       switch (token->type)
3087         {
3088         case CPP_EOF:
3089         case CPP_PRAGMA_EOL:
3090           /* If we've run out of tokens, stop.  */
3091           return;
3092
3093         case CPP_SEMICOLON:
3094           /* Stop if this is an unnested ';'. */
3095           if (!nesting_depth)
3096             nesting_depth = -1;
3097           break;
3098
3099         case CPP_CLOSE_BRACE:
3100           /* Stop if this is an unnested '}', or closes the outermost
3101              nesting level.  */
3102           nesting_depth--;
3103           if (nesting_depth < 0)
3104             return;
3105           if (!nesting_depth)
3106             nesting_depth = -1;
3107           break;
3108
3109         case CPP_OPEN_BRACE:
3110           /* Nest. */
3111           nesting_depth++;
3112           break;
3113
3114         default:
3115           break;
3116         }
3117
3118       /* Consume the token.  */
3119       cp_lexer_consume_token (parser->lexer);
3120     }
3121 }
3122
3123 /* Skip tokens until a non-nested closing curly brace is the next
3124    token, or there are no more tokens. Return true in the first case,
3125    false otherwise.  */
3126
3127 static bool
3128 cp_parser_skip_to_closing_brace (cp_parser *parser)
3129 {
3130   unsigned nesting_depth = 0;
3131
3132   while (true)
3133     {
3134       cp_token *token = cp_lexer_peek_token (parser->lexer);
3135
3136       switch (token->type)
3137         {
3138         case CPP_EOF:
3139         case CPP_PRAGMA_EOL:
3140           /* If we've run out of tokens, stop.  */
3141           return false;
3142
3143         case CPP_CLOSE_BRACE:
3144           /* If the next token is a non-nested `}', then we have reached
3145              the end of the current block.  */
3146           if (nesting_depth-- == 0)
3147             return true;
3148           break;
3149
3150         case CPP_OPEN_BRACE:
3151           /* If it the next token is a `{', then we are entering a new
3152              block.  Consume the entire block.  */
3153           ++nesting_depth;
3154           break;
3155
3156         default:
3157           break;
3158         }
3159
3160       /* Consume the token.  */
3161       cp_lexer_consume_token (parser->lexer);
3162     }
3163 }
3164
3165 /* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
3166    parameter is the PRAGMA token, allowing us to purge the entire pragma
3167    sequence.  */
3168
3169 static void
3170 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
3171 {
3172   cp_token *token;
3173
3174   parser->lexer->in_pragma = false;
3175
3176   do
3177     token = cp_lexer_consume_token (parser->lexer);
3178   while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
3179
3180   /* Ensure that the pragma is not parsed again.  */
3181   cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
3182 }
3183
3184 /* Require pragma end of line, resyncing with it as necessary.  The
3185    arguments are as for cp_parser_skip_to_pragma_eol.  */
3186
3187 static void
3188 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
3189 {
3190   parser->lexer->in_pragma = false;
3191   if (!cp_parser_require (parser, CPP_PRAGMA_EOL, RT_PRAGMA_EOL))
3192     cp_parser_skip_to_pragma_eol (parser, pragma_tok);
3193 }
3194
3195 /* This is a simple wrapper around make_typename_type. When the id is
3196    an unresolved identifier node, we can provide a superior diagnostic
3197    using cp_parser_diagnose_invalid_type_name.  */
3198
3199 static tree
3200 cp_parser_make_typename_type (cp_parser *parser, tree scope,
3201                               tree id, location_t id_location)
3202 {
3203   tree result;
3204   if (TREE_CODE (id) == IDENTIFIER_NODE)
3205     {
3206       result = make_typename_type (scope, id, typename_type,
3207                                    /*complain=*/tf_none);
3208       if (result == error_mark_node)
3209         cp_parser_diagnose_invalid_type_name (parser, scope, id, id_location);
3210       return result;
3211     }
3212   return make_typename_type (scope, id, typename_type, tf_error);
3213 }
3214
3215 /* This is a wrapper around the
3216    make_{pointer,ptrmem,reference}_declarator functions that decides
3217    which one to call based on the CODE and CLASS_TYPE arguments. The
3218    CODE argument should be one of the values returned by
3219    cp_parser_ptr_operator. */
3220 static cp_declarator *
3221 cp_parser_make_indirect_declarator (enum tree_code code, tree class_type,
3222                                     cp_cv_quals cv_qualifiers,
3223                                     cp_declarator *target)
3224 {
3225   if (code == ERROR_MARK)
3226     return cp_error_declarator;
3227
3228   if (code == INDIRECT_REF)
3229     if (class_type == NULL_TREE)
3230       return make_pointer_declarator (cv_qualifiers, target);
3231     else
3232       return make_ptrmem_declarator (cv_qualifiers, class_type, target);
3233   else if (code == ADDR_EXPR && class_type == NULL_TREE)
3234     return make_reference_declarator (cv_qualifiers, target, false);
3235   else if (code == NON_LVALUE_EXPR && class_type == NULL_TREE)
3236     return make_reference_declarator (cv_qualifiers, target, true);
3237   gcc_unreachable ();
3238 }
3239
3240 /* Create a new C++ parser.  */
3241
3242 static cp_parser *
3243 cp_parser_new (void)
3244 {
3245   cp_parser *parser;
3246   cp_lexer *lexer;
3247   unsigned i;
3248
3249   /* cp_lexer_new_main is called before doing GC allocation because
3250      cp_lexer_new_main might load a PCH file.  */
3251   lexer = cp_lexer_new_main ();
3252
3253   /* Initialize the binops_by_token so that we can get the tree
3254      directly from the token.  */
3255   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
3256     binops_by_token[binops[i].token_type] = binops[i];
3257
3258   parser = ggc_alloc_cleared_cp_parser ();
3259   parser->lexer = lexer;
3260   parser->context = cp_parser_context_new (NULL);
3261
3262   /* For now, we always accept GNU extensions.  */
3263   parser->allow_gnu_extensions_p = 1;
3264
3265   /* The `>' token is a greater-than operator, not the end of a
3266      template-id.  */
3267   parser->greater_than_is_operator_p = true;
3268
3269   parser->default_arg_ok_p = true;
3270
3271   /* We are not parsing a constant-expression.  */
3272   parser->integral_constant_expression_p = false;
3273   parser->allow_non_integral_constant_expression_p = false;
3274   parser->non_integral_constant_expression_p = false;
3275
3276   /* Local variable names are not forbidden.  */
3277   parser->local_variables_forbidden_p = false;
3278
3279   /* We are not processing an `extern "C"' declaration.  */
3280   parser->in_unbraced_linkage_specification_p = false;
3281
3282   /* We are not processing a declarator.  */
3283   parser->in_declarator_p = false;
3284
3285   /* We are not processing a template-argument-list.  */
3286   parser->in_template_argument_list_p = false;
3287
3288   /* We are not in an iteration statement.  */
3289   parser->in_statement = 0;
3290
3291   /* We are not in a switch statement.  */
3292   parser->in_switch_statement_p = false;
3293
3294   /* We are not parsing a type-id inside an expression.  */
3295   parser->in_type_id_in_expr_p = false;
3296
3297   /* Declarations aren't implicitly extern "C".  */
3298   parser->implicit_extern_c = false;
3299
3300   /* String literals should be translated to the execution character set.  */
3301   parser->translate_strings_p = true;
3302
3303   /* We are not parsing a function body.  */
3304   parser->in_function_body = false;
3305
3306   /* We can correct until told otherwise.  */
3307   parser->colon_corrects_to_scope_p = true;
3308
3309   /* The unparsed function queue is empty.  */
3310   push_unparsed_function_queues (parser);
3311
3312   /* There are no classes being defined.  */
3313   parser->num_classes_being_defined = 0;
3314
3315   /* No template parameters apply.  */
3316   parser->num_template_parameter_lists = 0;
3317
3318   return parser;
3319 }
3320
3321 /* Create a cp_lexer structure which will emit the tokens in CACHE
3322    and push it onto the parser's lexer stack.  This is used for delayed
3323    parsing of in-class method bodies and default arguments, and should
3324    not be confused with tentative parsing.  */
3325 static void
3326 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
3327 {
3328   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
3329   lexer->next = parser->lexer;
3330   parser->lexer = lexer;
3331
3332   /* Move the current source position to that of the first token in the
3333      new lexer.  */
3334   cp_lexer_set_source_position_from_token (lexer->next_token);
3335 }
3336
3337 /* Pop the top lexer off the parser stack.  This is never used for the
3338    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
3339 static void
3340 cp_parser_pop_lexer (cp_parser *parser)
3341 {
3342   cp_lexer *lexer = parser->lexer;
3343   parser->lexer = lexer->next;
3344   cp_lexer_destroy (lexer);
3345
3346   /* Put the current source position back where it was before this
3347      lexer was pushed.  */
3348   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
3349 }
3350
3351 /* Lexical conventions [gram.lex]  */
3352
3353 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
3354    identifier.  */
3355
3356 static tree
3357 cp_parser_identifier (cp_parser* parser)
3358 {
3359   cp_token *token;
3360
3361   /* Look for the identifier.  */
3362   token = cp_parser_require (parser, CPP_NAME, RT_NAME);
3363   /* Return the value.  */
3364   return token ? token->u.value : error_mark_node;
3365 }
3366
3367 /* Parse a sequence of adjacent string constants.  Returns a
3368    TREE_STRING representing the combined, nul-terminated string
3369    constant.  If TRANSLATE is true, translate the string to the
3370    execution character set.  If WIDE_OK is true, a wide string is
3371    invalid here.
3372
3373    C++98 [lex.string] says that if a narrow string literal token is
3374    adjacent to a wide string literal token, the behavior is undefined.
3375    However, C99 6.4.5p4 says that this results in a wide string literal.
3376    We follow C99 here, for consistency with the C front end.
3377
3378    This code is largely lifted from lex_string() in c-lex.c.
3379
3380    FUTURE: ObjC++ will need to handle @-strings here.  */
3381 static tree
3382 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
3383 {
3384   tree value;
3385   size_t count;
3386   struct obstack str_ob;
3387   cpp_string str, istr, *strs;
3388   cp_token *tok;
3389   enum cpp_ttype type, curr_type;
3390   int have_suffix_p = 0;
3391   tree string_tree;
3392   tree suffix_id = NULL_TREE;
3393   bool curr_tok_is_userdef_p = false;
3394
3395   tok = cp_lexer_peek_token (parser->lexer);
3396   if (!cp_parser_is_string_literal (tok))
3397     {
3398       cp_parser_error (parser, "expected string-literal");
3399       return error_mark_node;
3400     }
3401
3402   if (cpp_userdef_string_p (tok->type))
3403     {
3404       string_tree = USERDEF_LITERAL_VALUE (tok->u.value);
3405       curr_type = cpp_userdef_string_remove_type (tok->type);
3406       curr_tok_is_userdef_p = true;
3407     }
3408   else
3409     {
3410       string_tree = tok->u.value;
3411       curr_type = tok->type;
3412     }
3413   type = curr_type;
3414
3415   /* Try to avoid the overhead of creating and destroying an obstack
3416      for the common case of just one string.  */
3417   if (!cp_parser_is_string_literal
3418       (cp_lexer_peek_nth_token (parser->lexer, 2)))
3419     {
3420       cp_lexer_consume_token (parser->lexer);
3421
3422       str.text = (const unsigned char *)TREE_STRING_POINTER (string_tree);
3423       str.len = TREE_STRING_LENGTH (string_tree);
3424       count = 1;
3425
3426       if (curr_tok_is_userdef_p)
3427         {
3428           suffix_id = USERDEF_LITERAL_SUFFIX_ID (tok->u.value);
3429           have_suffix_p = 1;
3430           curr_type = cpp_userdef_string_remove_type (tok->type);
3431         }
3432       else
3433         curr_type = tok->type;
3434
3435       strs = &str;
3436     }
3437   else
3438     {
3439       gcc_obstack_init (&str_ob);
3440       count = 0;
3441
3442       do
3443         {
3444           cp_lexer_consume_token (parser->lexer);
3445           count++;
3446           str.text = (const unsigned char *)TREE_STRING_POINTER (string_tree);
3447           str.len = TREE_STRING_LENGTH (string_tree);
3448
3449           if (curr_tok_is_userdef_p)
3450             {
3451               tree curr_suffix_id = USERDEF_LITERAL_SUFFIX_ID (tok->u.value);
3452               if (have_suffix_p == 0)
3453                 {
3454                   suffix_id = curr_suffix_id;
3455                   have_suffix_p = 1;
3456                 }
3457               else if (have_suffix_p == 1
3458                        && curr_suffix_id != suffix_id)
3459                 {
3460                   error ("inconsistent user-defined literal suffixes"
3461                          " %qD and %qD in string literal",
3462                          suffix_id, curr_suffix_id);
3463                   have_suffix_p = -1;
3464                 }
3465               curr_type = cpp_userdef_string_remove_type (tok->type);
3466             }
3467           else
3468             curr_type = tok->type;
3469
3470           if (type != curr_type)
3471             {
3472               if (type == CPP_STRING)
3473                 type = curr_type;
3474               else if (curr_type != CPP_STRING)
3475                 error_at (tok->location,
3476                           "unsupported non-standard concatenation "
3477                           "of string literals");
3478             }
3479
3480           obstack_grow (&str_ob, &str, sizeof (cpp_string));
3481
3482           tok = cp_lexer_peek_token (parser->lexer);
3483           if (cpp_userdef_string_p (tok->type))
3484             {
3485               string_tree = USERDEF_LITERAL_VALUE (tok->u.value);
3486               curr_type = cpp_userdef_string_remove_type (tok->type);
3487               curr_tok_is_userdef_p = true;
3488             }
3489           else
3490             {
3491               string_tree = tok->u.value;
3492               curr_type = tok->type;
3493               curr_tok_is_userdef_p = false;
3494             }
3495         }
3496       while (cp_parser_is_string_literal (tok));
3497
3498       strs = (cpp_string *) obstack_finish (&str_ob);
3499     }
3500
3501   if (type != CPP_STRING && !wide_ok)
3502     {
3503       cp_parser_error (parser, "a wide string is invalid in this context");
3504       type = CPP_STRING;
3505     }
3506
3507   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
3508       (parse_in, strs, count, &istr, type))
3509     {
3510       value = build_string (istr.len, (const char *)istr.text);
3511       free (CONST_CAST (unsigned char *, istr.text));
3512
3513       switch (type)
3514         {
3515         default:
3516         case CPP_STRING:
3517         case CPP_UTF8STRING:
3518           TREE_TYPE (value) = char_array_type_node;
3519           break;
3520         case CPP_STRING16:
3521           TREE_TYPE (value) = char16_array_type_node;
3522           break;
3523         case CPP_STRING32:
3524           TREE_TYPE (value) = char32_array_type_node;
3525           break;
3526         case CPP_WSTRING:
3527           TREE_TYPE (value) = wchar_array_type_node;
3528           break;
3529         }
3530
3531       value = fix_string_type (value);
3532
3533       if (have_suffix_p)
3534         {
3535           tree literal = build_userdef_literal (suffix_id, value, NULL_TREE);
3536           tok->u.value = literal;
3537           return cp_parser_userdef_string_literal (tok);
3538         }
3539     }
3540   else
3541     /* cpp_interpret_string has issued an error.  */
3542     value = error_mark_node;
3543
3544   if (count > 1)
3545     obstack_free (&str_ob, 0);
3546
3547   return value;
3548 }
3549
3550 /* Parse a user-defined char constant.  Returns a call to a user-defined
3551    literal operator taking the character as an argument.  */
3552
3553 static tree
3554 cp_parser_userdef_char_literal (cp_parser *parser)
3555 {
3556   cp_token *token = NULL;
3557   tree literal, suffix_id, value;
3558   tree name, decl;
3559   tree result;
3560   VEC(tree,gc) *vec;
3561
3562   token = cp_lexer_consume_token (parser->lexer);
3563   literal = token->u.value;
3564   suffix_id = USERDEF_LITERAL_SUFFIX_ID (literal);
3565   value = USERDEF_LITERAL_VALUE (literal);
3566   name = cp_literal_operator_id (IDENTIFIER_POINTER (suffix_id));
3567
3568   /* Build up a call to the user-defined operator  */
3569   /* Lookup the name we got back from the id-expression.  */
3570   vec = make_tree_vector ();
3571   VEC_safe_push (tree, gc, vec, value);
3572   decl = lookup_function_nonclass (name, vec, /*block_p=*/false);
3573   if (!decl || decl == error_mark_node)
3574     {
3575       error ("unable to find user-defined character literal operator %qD",
3576              name);
3577       release_tree_vector (vec);
3578       return error_mark_node;
3579     }
3580   result = finish_call_expr (decl, &vec, false, true, tf_warning_or_error);
3581   release_tree_vector (vec);
3582
3583   return result;
3584 }
3585
3586 /* A subroutine of cp_parser_userdef_numeric_literal to
3587    create a char... template parameter pack from a string node.  */
3588
3589 static tree
3590 make_char_string_pack (tree value)
3591 {
3592   tree charvec;
3593   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
3594   const char *str = TREE_STRING_POINTER (value);
3595   int i, len = TREE_STRING_LENGTH (value) - 1;
3596   tree argvec = make_tree_vec (1);
3597
3598   /* Fill in CHARVEC with all of the parameters.  */
3599   charvec = make_tree_vec (len);
3600   for (i = 0; i < len; ++i)
3601     TREE_VEC_ELT (charvec, i) = build_int_cst (char_type_node, str[i]);
3602
3603   /* Build the argument packs.  */
3604   SET_ARGUMENT_PACK_ARGS (argpack, charvec);
3605   TREE_TYPE (argpack) = char_type_node;
3606
3607   TREE_VEC_ELT (argvec, 0) = argpack;
3608
3609   return argvec;
3610 }
3611
3612 /* Parse a user-defined numeric constant.  returns a call to a user-defined
3613    literal operator.  */
3614
3615 static tree
3616 cp_parser_userdef_numeric_literal (cp_parser *parser)
3617 {
3618   cp_token *token = NULL;
3619   tree literal, suffix_id, value, num_string;
3620   tree name, decl;
3621   tree result = error_mark_node;
3622   VEC(tree,gc) *args;
3623
3624   token = cp_lexer_consume_token (parser->lexer);
3625   literal = token->u.value;
3626   suffix_id = USERDEF_LITERAL_SUFFIX_ID (literal);
3627   value = USERDEF_LITERAL_VALUE (literal);
3628   num_string = USERDEF_LITERAL_NUM_STRING (literal);
3629   name = cp_literal_operator_id (IDENTIFIER_POINTER (suffix_id));
3630
3631   /* Build up a call to the user-defined operator  */
3632   /* Lookup the name we got back from the id-expression.  */
3633   /* Try to find the literal operator by finishing the call expression
3634      with the numeric argument.  */
3635   args = make_tree_vector ();
3636   VEC_safe_push (tree, gc, args, value);
3637   decl = lookup_function_nonclass (name, args, /*block_p=*/false);
3638   if (decl && decl != error_mark_node)
3639     {
3640       result = finish_call_expr (decl, &args, false, true, tf_none);
3641       if (result != error_mark_node)
3642         {
3643           release_tree_vector (args);
3644           return result;
3645         }
3646     }
3647   release_tree_vector (args);
3648
3649   /* If the numeric argument didn't work, look for a raw literal
3650      operator taking a const char* argument consisting of the number
3651      in string format.  */
3652   args = make_tree_vector ();
3653   VEC_safe_push (tree, gc, args, num_string);
3654   decl = lookup_function_nonclass (name, args, /*block_p=*/false);
3655   if (decl && decl != error_mark_node)
3656     {
3657       result = finish_call_expr (decl, &args, false, true, tf_none);
3658       if (result != error_mark_node)
3659         {
3660           release_tree_vector (args);
3661           return result;
3662         }
3663     }
3664   release_tree_vector (args);
3665
3666   /* If the raw literal didn't work, look for a non-type template
3667      function with parameter pack char....  Call the function with
3668      template parameter characters representing the number.  */
3669   args = make_tree_vector ();
3670   decl = lookup_function_nonclass (name, args, /*block_p=*/false);
3671   if (decl && decl != error_mark_node)
3672     {
3673       tree tmpl_args = make_char_string_pack (num_string);
3674       decl = lookup_template_function (decl, tmpl_args);
3675       result = finish_call_expr (decl, &args, false, true, tf_none);
3676       if (result != error_mark_node)
3677         {
3678           release_tree_vector (args);
3679           return result;
3680         }
3681     }
3682   release_tree_vector (args);
3683
3684   if (result == error_mark_node)
3685     error ("unable to find user-defined numeric literal operator %qD", name);
3686
3687   return result;
3688 }
3689
3690 /* Parse a user-defined string constant.  Returns a call to a user-defined
3691    literal operator taking a character pointer and the length of the string
3692    as arguments.  */
3693
3694 static tree
3695 cp_parser_userdef_string_literal (cp_token *token)
3696 {
3697   tree literal, suffix_id, value;
3698   tree name, decl;
3699   tree result;
3700   VEC(tree,gc) *vec;
3701   int len;
3702
3703   literal = token->u.value;
3704   suffix_id = USERDEF_LITERAL_SUFFIX_ID (literal);
3705   name = cp_literal_operator_id (IDENTIFIER_POINTER (suffix_id));
3706   value = USERDEF_LITERAL_VALUE (literal);
3707   len = TREE_STRING_LENGTH (value)
3708         / TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (value)))) - 1;
3709   /* Build up a call to the user-defined operator  */
3710   /* Lookup the name we got back from the id-expression.  */
3711   vec = make_tree_vector ();
3712   VEC_safe_push (tree, gc, vec, value);
3713   VEC_safe_push (tree, gc, vec, build_int_cst (size_type_node, len));
3714   decl = lookup_function_nonclass (name, vec, /*block_p=*/false);
3715   if (!decl || decl == error_mark_node)
3716     {
3717       error ("unable to find user-defined string literal operator %qD", name);
3718       release_tree_vector (vec);
3719       return error_mark_node;
3720     }
3721   result = finish_call_expr (decl, &vec, false, true, tf_none);
3722   if (result == error_mark_node)
3723     error ("unable to find valid user-defined string literal operator %qD."
3724            "  Possible missing length argument in string literal operator.",
3725            name);
3726   release_tree_vector (vec);
3727
3728   return result;
3729 }
3730
3731
3732 /* Basic concepts [gram.basic]  */
3733
3734 /* Parse a translation-unit.
3735
3736    translation-unit:
3737      declaration-seq [opt]
3738
3739    Returns TRUE if all went well.  */
3740
3741 static bool
3742 cp_parser_translation_unit (cp_parser* parser)
3743 {
3744   /* The address of the first non-permanent object on the declarator
3745      obstack.  */
3746   static void *declarator_obstack_base;
3747
3748   bool success;
3749
3750   /* Create the declarator obstack, if necessary.  */
3751   if (!cp_error_declarator)
3752     {
3753       gcc_obstack_init (&declarator_obstack);
3754       /* Create the error declarator.  */
3755       cp_error_declarator = make_declarator (cdk_error);
3756       /* Create the empty parameter list.  */
3757       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
3758       /* Remember where the base of the declarator obstack lies.  */
3759       declarator_obstack_base = obstack_next_free (&declarator_obstack);
3760     }
3761
3762   cp_parser_declaration_seq_opt (parser);
3763
3764   /* If there are no tokens left then all went well.  */
3765   if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
3766     {
3767       /* Get rid of the token array; we don't need it any more.  */
3768       cp_lexer_destroy (parser->lexer);
3769       parser->lexer = NULL;
3770
3771       /* This file might have been a context that's implicitly extern
3772          "C".  If so, pop the lang context.  (Only relevant for PCH.) */
3773       if (parser->implicit_extern_c)
3774         {
3775           pop_lang_context ();
3776           parser->implicit_extern_c = false;
3777         }
3778
3779       /* Finish up.  */
3780       finish_translation_unit ();
3781
3782       success = true;
3783     }
3784   else
3785     {
3786       cp_parser_error (parser, "expected declaration");
3787       success = false;
3788     }
3789
3790   /* Make sure the declarator obstack was fully cleaned up.  */
3791   gcc_assert (obstack_next_free (&declarator_obstack)
3792               == declarator_obstack_base);
3793
3794   /* All went well.  */
3795   return success;
3796 }
3797
3798 /* Expressions [gram.expr] */
3799
3800 /* Parse a primary-expression.
3801
3802    primary-expression:
3803      literal
3804      this
3805      ( expression )
3806      id-expression
3807
3808    GNU Extensions:
3809
3810    primary-expression:
3811      ( compound-statement )
3812      __builtin_va_arg ( assignment-expression , type-id )
3813      __builtin_offsetof ( type-id , offsetof-expression )
3814
3815    C++ Extensions:
3816      __has_nothrow_assign ( type-id )   
3817      __has_nothrow_constructor ( type-id )
3818      __has_nothrow_copy ( type-id )
3819      __has_trivial_assign ( type-id )   
3820      __has_trivial_constructor ( type-id )
3821      __has_trivial_copy ( type-id )
3822      __has_trivial_destructor ( type-id )
3823      __has_virtual_destructor ( type-id )     
3824      __is_abstract ( type-id )
3825      __is_base_of ( type-id , type-id )
3826      __is_class ( type-id )
3827      __is_convertible_to ( type-id , type-id )     
3828      __is_empty ( type-id )
3829      __is_enum ( type-id )
3830      __is_literal_type ( type-id )
3831      __is_pod ( type-id )
3832      __is_polymorphic ( type-id )
3833      __is_std_layout ( type-id )
3834      __is_trivial ( type-id )
3835      __is_union ( type-id )
3836
3837    Objective-C++ Extension:
3838
3839    primary-expression:
3840      objc-expression
3841
3842    literal:
3843      __null
3844
3845    ADDRESS_P is true iff this expression was immediately preceded by
3846    "&" and therefore might denote a pointer-to-member.  CAST_P is true
3847    iff this expression is the target of a cast.  TEMPLATE_ARG_P is
3848    true iff this expression is a template argument.
3849
3850    Returns a representation of the expression.  Upon return, *IDK
3851    indicates what kind of id-expression (if any) was present.  */
3852
3853 static tree
3854 cp_parser_primary_expression (cp_parser *parser,
3855                               bool address_p,
3856                               bool cast_p,
3857                               bool template_arg_p,
3858                               cp_id_kind *idk)
3859 {
3860   cp_token *token = NULL;
3861
3862   /* Assume the primary expression is not an id-expression.  */
3863   *idk = CP_ID_KIND_NONE;
3864
3865   /* Peek at the next token.  */
3866   token = cp_lexer_peek_token (parser->lexer);
3867   switch (token->type)
3868     {
3869       /* literal:
3870            integer-literal
3871            character-literal
3872            floating-literal
3873            string-literal
3874            boolean-literal
3875            pointer-literal
3876            user-defined-literal  */
3877     case CPP_CHAR:
3878     case CPP_CHAR16:
3879     case CPP_CHAR32:
3880     case CPP_WCHAR:
3881     case CPP_NUMBER:
3882       if (TREE_CODE (token->u.value) == USERDEF_LITERAL)
3883         return cp_parser_userdef_numeric_literal (parser);
3884       token = cp_lexer_consume_token (parser->lexer);
3885       if (TREE_CODE (token->u.value) == FIXED_CST)
3886         {
3887           error_at (token->location,
3888                     "fixed-point types not supported in C++");
3889           return error_mark_node;
3890         }
3891       /* Floating-point literals are only allowed in an integral
3892          constant expression if they are cast to an integral or
3893          enumeration type.  */
3894       if (TREE_CODE (token->u.value) == REAL_CST
3895           && parser->integral_constant_expression_p
3896           && pedantic)
3897         {
3898           /* CAST_P will be set even in invalid code like "int(2.7 +
3899              ...)".   Therefore, we have to check that the next token
3900              is sure to end the cast.  */
3901           if (cast_p)
3902             {
3903               cp_token *next_token;
3904
3905               next_token = cp_lexer_peek_token (parser->lexer);
3906               if (/* The comma at the end of an
3907                      enumerator-definition.  */
3908                   next_token->type != CPP_COMMA
3909                   /* The curly brace at the end of an enum-specifier.  */
3910                   && next_token->type != CPP_CLOSE_BRACE
3911                   /* The end of a statement.  */
3912                   && next_token->type != CPP_SEMICOLON
3913                   /* The end of the cast-expression.  */
3914                   && next_token->type != CPP_CLOSE_PAREN
3915                   /* The end of an array bound.  */
3916                   && next_token->type != CPP_CLOSE_SQUARE
3917                   /* The closing ">" in a template-argument-list.  */
3918                   && (next_token->type != CPP_GREATER
3919                       || parser->greater_than_is_operator_p)
3920                   /* C++0x only: A ">>" treated like two ">" tokens,
3921                      in a template-argument-list.  */
3922                   && (next_token->type != CPP_RSHIFT
3923                       || (cxx_dialect == cxx98)
3924                       || parser->greater_than_is_operator_p))
3925                 cast_p = false;
3926             }
3927
3928           /* If we are within a cast, then the constraint that the
3929              cast is to an integral or enumeration type will be
3930              checked at that point.  If we are not within a cast, then
3931              this code is invalid.  */
3932           if (!cast_p)
3933             cp_parser_non_integral_constant_expression (parser, NIC_FLOAT);
3934         }
3935       return token->u.value;
3936
3937     case CPP_CHAR_USERDEF:
3938     case CPP_CHAR16_USERDEF:
3939     case CPP_CHAR32_USERDEF:
3940     case CPP_WCHAR_USERDEF:
3941       return cp_parser_userdef_char_literal (parser);
3942
3943     case CPP_STRING:
3944     case CPP_STRING16:
3945     case CPP_STRING32:
3946     case CPP_WSTRING:
3947     case CPP_UTF8STRING:
3948     case CPP_STRING_USERDEF:
3949     case CPP_STRING16_USERDEF:
3950     case CPP_STRING32_USERDEF:
3951     case CPP_WSTRING_USERDEF:
3952     case CPP_UTF8STRING_USERDEF:
3953       /* ??? Should wide strings be allowed when parser->translate_strings_p
3954          is false (i.e. in attributes)?  If not, we can kill the third
3955          argument to cp_parser_string_literal.  */
3956       return cp_parser_string_literal (parser,
3957                                        parser->translate_strings_p,
3958                                        true);
3959
3960     case CPP_OPEN_PAREN:
3961       {
3962         tree expr;
3963         bool saved_greater_than_is_operator_p;
3964
3965         /* Consume the `('.  */
3966         cp_lexer_consume_token (parser->lexer);
3967         /* Within a parenthesized expression, a `>' token is always
3968            the greater-than operator.  */
3969         saved_greater_than_is_operator_p
3970           = parser->greater_than_is_operator_p;
3971         parser->greater_than_is_operator_p = true;
3972         /* If we see `( { ' then we are looking at the beginning of
3973            a GNU statement-expression.  */
3974         if (cp_parser_allow_gnu_extensions_p (parser)
3975             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
3976           {
3977             /* Statement-expressions are not allowed by the standard.  */
3978             pedwarn (token->location, OPT_pedantic, 
3979                      "ISO C++ forbids braced-groups within expressions");
3980
3981             /* And they're not allowed outside of a function-body; you
3982                cannot, for example, write:
3983
3984                  int i = ({ int j = 3; j + 1; });
3985
3986                at class or namespace scope.  */
3987             if (!parser->in_function_body
3988                 || parser->in_template_argument_list_p)
3989               {
3990                 error_at (token->location,
3991                           "statement-expressions are not allowed outside "
3992                           "functions nor in template-argument lists");
3993                 cp_parser_skip_to_end_of_block_or_statement (parser);
3994                 expr = error_mark_node;
3995               }
3996             else
3997               {
3998                 /* Start the statement-expression.  */
3999                 expr = begin_stmt_expr ();
4000                 /* Parse the compound-statement.  */
4001                 cp_parser_compound_statement (parser, expr, false, false);
4002                 /* Finish up.  */
4003                 expr = finish_stmt_expr (expr, false);
4004               }
4005           }
4006         else
4007           {
4008             /* Parse the parenthesized expression.  */
4009             expr = cp_parser_expression (parser, cast_p, idk);
4010             /* Let the front end know that this expression was
4011                enclosed in parentheses. This matters in case, for
4012                example, the expression is of the form `A::B', since
4013                `&A::B' might be a pointer-to-member, but `&(A::B)' is
4014                not.  */
4015             finish_parenthesized_expr (expr);
4016             /* DR 705: Wrapping an unqualified name in parentheses
4017                suppresses arg-dependent lookup.  We want to pass back
4018                CP_ID_KIND_QUALIFIED for suppressing vtable lookup
4019                (c++/37862), but none of the others.  */
4020             if (*idk != CP_ID_KIND_QUALIFIED)
4021               *idk = CP_ID_KIND_NONE;
4022           }
4023         /* The `>' token might be the end of a template-id or
4024            template-parameter-list now.  */
4025         parser->greater_than_is_operator_p
4026           = saved_greater_than_is_operator_p;
4027         /* Consume the `)'.  */
4028         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
4029           cp_parser_skip_to_end_of_statement (parser);
4030
4031         return expr;
4032       }
4033
4034     case CPP_OPEN_SQUARE:
4035       if (c_dialect_objc ())
4036         /* We have an Objective-C++ message. */
4037         return cp_parser_objc_expression (parser);
4038       {
4039         tree lam = cp_parser_lambda_expression (parser);
4040         /* Don't warn about a failed tentative parse.  */
4041         if (cp_parser_error_occurred (parser))
4042           return error_mark_node;
4043         maybe_warn_cpp0x (CPP0X_LAMBDA_EXPR);
4044         return lam;
4045       }
4046
4047     case CPP_OBJC_STRING:
4048       if (c_dialect_objc ())
4049         /* We have an Objective-C++ string literal. */
4050         return cp_parser_objc_expression (parser);
4051       cp_parser_error (parser, "expected primary-expression");
4052       return error_mark_node;
4053
4054     case CPP_KEYWORD:
4055       switch (token->keyword)
4056         {
4057           /* These two are the boolean literals.  */
4058         case RID_TRUE:
4059           cp_lexer_consume_token (parser->lexer);
4060           return boolean_true_node;
4061         case RID_FALSE:
4062           cp_lexer_consume_token (parser->lexer);
4063           return boolean_false_node;
4064
4065           /* The `__null' literal.  */
4066         case RID_NULL:
4067           cp_lexer_consume_token (parser->lexer);
4068           return null_node;
4069
4070           /* The `nullptr' literal.  */
4071         case RID_NULLPTR:
4072           cp_lexer_consume_token (parser->lexer);
4073           return nullptr_node;
4074
4075           /* Recognize the `this' keyword.  */
4076         case RID_THIS:
4077           cp_lexer_consume_token (parser->lexer);
4078           if (parser->local_variables_forbidden_p)
4079             {
4080               error_at (token->location,
4081                         "%<this%> may not be used in this context");
4082               return error_mark_node;
4083             }
4084           /* Pointers cannot appear in constant-expressions.  */
4085           if (cp_parser_non_integral_constant_expression (parser, NIC_THIS))
4086             return error_mark_node;
4087           return finish_this_expr ();
4088
4089           /* The `operator' keyword can be the beginning of an
4090              id-expression.  */
4091         case RID_OPERATOR:
4092           goto id_expression;
4093
4094         case RID_FUNCTION_NAME:
4095         case RID_PRETTY_FUNCTION_NAME:
4096         case RID_C99_FUNCTION_NAME:
4097           {
4098             non_integral_constant name;
4099
4100             /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
4101                __func__ are the names of variables -- but they are
4102                treated specially.  Therefore, they are handled here,
4103                rather than relying on the generic id-expression logic
4104                below.  Grammatically, these names are id-expressions.
4105
4106                Consume the token.  */
4107             token = cp_lexer_consume_token (parser->lexer);
4108
4109             switch (token->keyword)
4110               {
4111               case RID_FUNCTION_NAME:
4112                 name = NIC_FUNC_NAME;
4113                 break;
4114               case RID_PRETTY_FUNCTION_NAME:
4115                 name = NIC_PRETTY_FUNC;
4116                 break;
4117               case RID_C99_FUNCTION_NAME:
4118                 name = NIC_C99_FUNC;
4119                 break;
4120               default:
4121                 gcc_unreachable ();
4122               }
4123
4124             if (cp_parser_non_integral_constant_expression (parser, name))
4125               return error_mark_node;
4126
4127             /* Look up the name.  */
4128             return finish_fname (token->u.value);
4129           }
4130
4131         case RID_VA_ARG:
4132           {
4133             tree expression;
4134             tree type;
4135
4136             /* The `__builtin_va_arg' construct is used to handle
4137                `va_arg'.  Consume the `__builtin_va_arg' token.  */
4138             cp_lexer_consume_token (parser->lexer);
4139             /* Look for the opening `('.  */
4140             cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
4141             /* Now, parse the assignment-expression.  */
4142             expression = cp_parser_assignment_expression (parser,
4143                                                           /*cast_p=*/false, NULL);
4144             /* Look for the `,'.  */
4145             cp_parser_require (parser, CPP_COMMA, RT_COMMA);
4146             /* Parse the type-id.  */
4147             type = cp_parser_type_id (parser);
4148             /* Look for the closing `)'.  */
4149             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
4150             /* Using `va_arg' in a constant-expression is not
4151                allowed.  */
4152             if (cp_parser_non_integral_constant_expression (parser,
4153                                                             NIC_VA_ARG))
4154               return error_mark_node;
4155             return build_x_va_arg (expression, type);
4156           }
4157
4158         case RID_OFFSETOF:
4159           return cp_parser_builtin_offsetof (parser);
4160
4161         case RID_HAS_NOTHROW_ASSIGN:
4162         case RID_HAS_NOTHROW_CONSTRUCTOR:
4163         case RID_HAS_NOTHROW_COPY:        
4164         case RID_HAS_TRIVIAL_ASSIGN:
4165         case RID_HAS_TRIVIAL_CONSTRUCTOR:
4166         case RID_HAS_TRIVIAL_COPY:        
4167         case RID_HAS_TRIVIAL_DESTRUCTOR:
4168         case RID_HAS_VIRTUAL_DESTRUCTOR:
4169         case RID_IS_ABSTRACT:
4170         case RID_IS_BASE_OF:
4171         case RID_IS_CLASS:
4172         case RID_IS_CONVERTIBLE_TO:
4173         case RID_IS_EMPTY:
4174         case RID_IS_ENUM:
4175         case RID_IS_LITERAL_TYPE:
4176         case RID_IS_POD:
4177         case RID_IS_POLYMORPHIC:
4178         case RID_IS_STD_LAYOUT:
4179         case RID_IS_TRIVIAL:
4180         case RID_IS_UNION:
4181           return cp_parser_trait_expr (parser, token->keyword);
4182
4183         /* Objective-C++ expressions.  */
4184         case RID_AT_ENCODE:
4185         case RID_AT_PROTOCOL:
4186         case RID_AT_SELECTOR:
4187           return cp_parser_objc_expression (parser);
4188
4189         case RID_TEMPLATE:
4190           if (parser->in_function_body
4191               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4192                   == CPP_LESS))
4193             {
4194               error_at (token->location,
4195                         "a template declaration cannot appear at block scope");
4196               cp_parser_skip_to_end_of_block_or_statement (parser);
4197               return error_mark_node;
4198             }
4199         default:
4200           cp_parser_error (parser, "expected primary-expression");
4201           return error_mark_node;
4202         }
4203
4204       /* An id-expression can start with either an identifier, a
4205          `::' as the beginning of a qualified-id, or the "operator"
4206          keyword.  */
4207     case CPP_NAME:
4208     case CPP_SCOPE:
4209     case CPP_TEMPLATE_ID:
4210     case CPP_NESTED_NAME_SPECIFIER:
4211       {
4212         tree id_expression;
4213         tree decl;
4214         const char *error_msg;
4215         bool template_p;
4216         bool done;
4217         cp_token *id_expr_token;
4218
4219       id_expression:
4220         /* Parse the id-expression.  */
4221         id_expression
4222           = cp_parser_id_expression (parser,
4223                                      /*template_keyword_p=*/false,
4224                                      /*check_dependency_p=*/true,
4225                                      &template_p,
4226                                      /*declarator_p=*/false,
4227                                      /*optional_p=*/false);
4228         if (id_expression == error_mark_node)
4229           return error_mark_node;
4230         id_expr_token = token;
4231         token = cp_lexer_peek_token (parser->lexer);
4232         done = (token->type != CPP_OPEN_SQUARE
4233                 && token->type != CPP_OPEN_PAREN
4234                 && token->type != CPP_DOT
4235                 && token->type != CPP_DEREF
4236                 && token->type != CPP_PLUS_PLUS
4237                 && token->type != CPP_MINUS_MINUS);
4238         /* If we have a template-id, then no further lookup is
4239            required.  If the template-id was for a template-class, we
4240            will sometimes have a TYPE_DECL at this point.  */
4241         if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
4242                  || TREE_CODE (id_expression) == TYPE_DECL)
4243           decl = id_expression;
4244         /* Look up the name.  */
4245         else
4246           {
4247             tree ambiguous_decls;
4248
4249             /* If we already know that this lookup is ambiguous, then
4250                we've already issued an error message; there's no reason
4251                to check again.  */
4252             if (id_expr_token->type == CPP_NAME
4253                 && id_expr_token->ambiguous_p)
4254               {
4255                 cp_parser_simulate_error (parser);
4256                 return error_mark_node;
4257               }
4258
4259             decl = cp_parser_lookup_name (parser, id_expression,
4260                                           none_type,
4261                                           template_p,
4262                                           /*is_namespace=*/false,
4263                                           /*check_dependency=*/true,
4264                                           &ambiguous_decls,
4265                                           id_expr_token->location);
4266             /* If the lookup was ambiguous, an error will already have
4267                been issued.  */
4268             if (ambiguous_decls)
4269               return error_mark_node;
4270
4271             /* In Objective-C++, we may have an Objective-C 2.0
4272                dot-syntax for classes here.  */
4273             if (c_dialect_objc ()
4274                 && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT
4275                 && TREE_CODE (decl) == TYPE_DECL
4276                 && objc_is_class_name (decl))
4277               {
4278                 tree component;
4279                 cp_lexer_consume_token (parser->lexer);
4280                 component = cp_parser_identifier (parser);
4281                 if (component == error_mark_node)
4282                   return error_mark_node;
4283
4284                 return objc_build_class_component_ref (id_expression, component);
4285               }
4286
4287             /* In Objective-C++, an instance variable (ivar) may be preferred
4288                to whatever cp_parser_lookup_name() found.  */
4289             decl = objc_lookup_ivar (decl, id_expression);
4290
4291             /* If name lookup gives us a SCOPE_REF, then the
4292                qualifying scope was dependent.  */
4293             if (TREE_CODE (decl) == SCOPE_REF)
4294               {
4295                 /* At this point, we do not know if DECL is a valid
4296                    integral constant expression.  We assume that it is
4297                    in fact such an expression, so that code like:
4298
4299                       template <int N> struct A {
4300                         int a[B<N>::i];
4301                       };
4302                      
4303                    is accepted.  At template-instantiation time, we
4304                    will check that B<N>::i is actually a constant.  */
4305                 return decl;
4306               }
4307             /* Check to see if DECL is a local variable in a context
4308                where that is forbidden.  */
4309             if (parser->local_variables_forbidden_p
4310                 && local_variable_p (decl))
4311               {
4312                 /* It might be that we only found DECL because we are
4313                    trying to be generous with pre-ISO scoping rules.
4314                    For example, consider:
4315
4316                      int i;
4317                      void g() {
4318                        for (int i = 0; i < 10; ++i) {}
4319                        extern void f(int j = i);
4320                      }
4321
4322                    Here, name look up will originally find the out
4323                    of scope `i'.  We need to issue a warning message,
4324                    but then use the global `i'.  */
4325                 decl = check_for_out_of_scope_variable (decl);
4326                 if (local_variable_p (decl))
4327                   {
4328                     error_at (id_expr_token->location,
4329                               "local variable %qD may not appear in this context",
4330                               decl);
4331                     return error_mark_node;
4332                   }
4333               }
4334           }
4335
4336         decl = (finish_id_expression
4337                 (id_expression, decl, parser->scope,
4338                  idk,
4339                  parser->integral_constant_expression_p,
4340                  parser->allow_non_integral_constant_expression_p,
4341                  &parser->non_integral_constant_expression_p,
4342                  template_p, done, address_p,
4343                  template_arg_p,
4344                  &error_msg,
4345                  id_expr_token->location));
4346         if (error_msg)
4347           cp_parser_error (parser, error_msg);
4348         return decl;
4349       }
4350
4351       /* Anything else is an error.  */
4352     default:
4353       cp_parser_error (parser, "expected primary-expression");
4354       return error_mark_node;
4355     }
4356 }
4357
4358 /* Parse an id-expression.
4359
4360    id-expression:
4361      unqualified-id
4362      qualified-id
4363
4364    qualified-id:
4365      :: [opt] nested-name-specifier template [opt] unqualified-id
4366      :: identifier
4367      :: operator-function-id
4368      :: template-id
4369
4370    Return a representation of the unqualified portion of the
4371    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
4372    a `::' or nested-name-specifier.
4373
4374    Often, if the id-expression was a qualified-id, the caller will
4375    want to make a SCOPE_REF to represent the qualified-id.  This
4376    function does not do this in order to avoid wastefully creating
4377    SCOPE_REFs when they are not required.
4378
4379    If TEMPLATE_KEYWORD_P is true, then we have just seen the
4380    `template' keyword.
4381
4382    If CHECK_DEPENDENCY_P is false, then names are looked up inside
4383    uninstantiated templates.
4384
4385    If *TEMPLATE_P is non-NULL, it is set to true iff the
4386    `template' keyword is used to explicitly indicate that the entity
4387    named is a template.
4388
4389    If DECLARATOR_P is true, the id-expression is appearing as part of
4390    a declarator, rather than as part of an expression.  */
4391
4392 static tree
4393 cp_parser_id_expression (cp_parser *parser,
4394                          bool template_keyword_p,
4395                          bool check_dependency_p,
4396                          bool *template_p,
4397                          bool declarator_p,
4398                          bool optional_p)
4399 {
4400   bool global_scope_p;
4401   bool nested_name_specifier_p;
4402
4403   /* Assume the `template' keyword was not used.  */
4404   if (template_p)
4405     *template_p = template_keyword_p;
4406
4407   /* Look for the optional `::' operator.  */
4408   global_scope_p
4409     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
4410        != NULL_TREE);
4411   /* Look for the optional nested-name-specifier.  */
4412   nested_name_specifier_p
4413     = (cp_parser_nested_name_specifier_opt (parser,
4414                                             /*typename_keyword_p=*/false,
4415                                             check_dependency_p,
4416                                             /*type_p=*/false,
4417                                             declarator_p)
4418        != NULL_TREE);
4419   /* If there is a nested-name-specifier, then we are looking at
4420      the first qualified-id production.  */
4421   if (nested_name_specifier_p)
4422     {
4423       tree saved_scope;
4424       tree saved_object_scope;
4425       tree saved_qualifying_scope;
4426       tree unqualified_id;
4427       bool is_template;
4428
4429       /* See if the next token is the `template' keyword.  */
4430       if (!template_p)
4431         template_p = &is_template;
4432       *template_p = cp_parser_optional_template_keyword (parser);
4433       /* Name lookup we do during the processing of the
4434          unqualified-id might obliterate SCOPE.  */
4435       saved_scope = parser->scope;
4436       saved_object_scope = parser->object_scope;
4437       saved_qualifying_scope = parser->qualifying_scope;
4438       /* Process the final unqualified-id.  */
4439       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
4440                                                  check_dependency_p,
4441                                                  declarator_p,
4442                                                  /*optional_p=*/false);
4443       /* Restore the SAVED_SCOPE for our caller.  */
4444       parser->scope = saved_scope;
4445       parser->object_scope = saved_object_scope;
4446       parser->qualifying_scope = saved_qualifying_scope;
4447
4448       return unqualified_id;
4449     }
4450   /* Otherwise, if we are in global scope, then we are looking at one
4451      of the other qualified-id productions.  */
4452   else if (global_scope_p)
4453     {
4454       cp_token *token;
4455       tree id;
4456
4457       /* Peek at the next token.  */
4458       token = cp_lexer_peek_token (parser->lexer);
4459
4460       /* If it's an identifier, and the next token is not a "<", then
4461          we can avoid the template-id case.  This is an optimization
4462          for this common case.  */
4463       if (token->type == CPP_NAME
4464           && !cp_parser_nth_token_starts_template_argument_list_p
4465                (parser, 2))
4466         return cp_parser_identifier (parser);
4467
4468       cp_parser_parse_tentatively (parser);
4469       /* Try a template-id.  */
4470       id = cp_parser_template_id (parser,
4471                                   /*template_keyword_p=*/false,
4472                                   /*check_dependency_p=*/true,
4473                                   declarator_p);
4474       /* If that worked, we're done.  */
4475       if (cp_parser_parse_definitely (parser))
4476         return id;
4477
4478       /* Peek at the next token.  (Changes in the token buffer may
4479          have invalidated the pointer obtained above.)  */
4480       token = cp_lexer_peek_token (parser->lexer);
4481
4482       switch (token->type)
4483         {
4484         case CPP_NAME:
4485           return cp_parser_identifier (parser);
4486
4487         case CPP_KEYWORD:
4488           if (token->keyword == RID_OPERATOR)
4489             return cp_parser_operator_function_id (parser);
4490           /* Fall through.  */
4491
4492         default:
4493           cp_parser_error (parser, "expected id-expression");
4494           return error_mark_node;
4495         }
4496     }
4497   else
4498     return cp_parser_unqualified_id (parser, template_keyword_p,
4499                                      /*check_dependency_p=*/true,
4500                                      declarator_p,
4501                                      optional_p);
4502 }
4503
4504 /* Parse an unqualified-id.
4505
4506    unqualified-id:
4507      identifier
4508      operator-function-id
4509      conversion-function-id
4510      ~ class-name
4511      template-id
4512
4513    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
4514    keyword, in a construct like `A::template ...'.
4515
4516    Returns a representation of unqualified-id.  For the `identifier'
4517    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
4518    production a BIT_NOT_EXPR is returned; the operand of the
4519    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
4520    other productions, see the documentation accompanying the
4521    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
4522    names are looked up in uninstantiated templates.  If DECLARATOR_P
4523    is true, the unqualified-id is appearing as part of a declarator,
4524    rather than as part of an expression.  */
4525
4526 static tree
4527 cp_parser_unqualified_id (cp_parser* parser,
4528                           bool template_keyword_p,
4529                           bool check_dependency_p,
4530                           bool declarator_p,
4531                           bool optional_p)
4532 {
4533   cp_token *token;
4534
4535   /* Peek at the next token.  */
4536   token = cp_lexer_peek_token (parser->lexer);
4537
4538   switch (token->type)
4539     {
4540     case CPP_NAME:
4541       {
4542         tree id;
4543
4544         /* We don't know yet whether or not this will be a
4545            template-id.  */
4546         cp_parser_parse_tentatively (parser);
4547         /* Try a template-id.  */
4548         id = cp_parser_template_id (parser, template_keyword_p,
4549                                     check_dependency_p,
4550                                     declarator_p);
4551         /* If it worked, we're done.  */
4552         if (cp_parser_parse_definitely (parser))
4553           return id;
4554         /* Otherwise, it's an ordinary identifier.  */
4555         return cp_parser_identifier (parser);
4556       }
4557
4558     case CPP_TEMPLATE_ID:
4559       return cp_parser_template_id (parser, template_keyword_p,
4560                                     check_dependency_p,
4561                                     declarator_p);
4562
4563     case CPP_COMPL:
4564       {
4565         tree type_decl;
4566         tree qualifying_scope;
4567         tree object_scope;
4568         tree scope;
4569         bool done;
4570
4571         /* Consume the `~' token.  */
4572         cp_lexer_consume_token (parser->lexer);
4573         /* Parse the class-name.  The standard, as written, seems to
4574            say that:
4575
4576              template <typename T> struct S { ~S (); };
4577              template <typename T> S<T>::~S() {}
4578
4579            is invalid, since `~' must be followed by a class-name, but
4580            `S<T>' is dependent, and so not known to be a class.
4581            That's not right; we need to look in uninstantiated
4582            templates.  A further complication arises from:
4583
4584              template <typename T> void f(T t) {
4585                t.T::~T();
4586              }
4587
4588            Here, it is not possible to look up `T' in the scope of `T'
4589            itself.  We must look in both the current scope, and the
4590            scope of the containing complete expression.
4591
4592            Yet another issue is:
4593
4594              struct S {
4595                int S;
4596                ~S();
4597              };
4598
4599              S::~S() {}
4600
4601            The standard does not seem to say that the `S' in `~S'
4602            should refer to the type `S' and not the data member
4603            `S::S'.  */
4604
4605         /* DR 244 says that we look up the name after the "~" in the
4606            same scope as we looked up the qualifying name.  That idea
4607            isn't fully worked out; it's more complicated than that.  */
4608         scope = parser->scope;
4609         object_scope = parser->object_scope;
4610         qualifying_scope = parser->qualifying_scope;
4611
4612         /* Check for invalid scopes.  */
4613         if (scope == error_mark_node)
4614           {
4615             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
4616               cp_lexer_consume_token (parser->lexer);
4617             return error_mark_node;
4618           }
4619         if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
4620           {
4621             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
4622               error_at (token->location,
4623                         "scope %qT before %<~%> is not a class-name",
4624                         scope);
4625             cp_parser_simulate_error (parser);
4626             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
4627               cp_lexer_consume_token (parser->lexer);
4628             return error_mark_node;
4629           }
4630         gcc_assert (!scope || TYPE_P (scope));
4631
4632         /* If the name is of the form "X::~X" it's OK even if X is a
4633            typedef.  */
4634         token = cp_lexer_peek_token (parser->lexer);
4635         if (scope
4636             && token->type == CPP_NAME
4637             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4638                 != CPP_LESS)
4639             && (token->u.value == TYPE_IDENTIFIER (scope)
4640                 || (CLASS_TYPE_P (scope)
4641                     && constructor_name_p (token->u.value, scope))))
4642           {
4643             cp_lexer_consume_token (parser->lexer);
4644             return build_nt (BIT_NOT_EXPR, scope);
4645           }
4646
4647         /* If there was an explicit qualification (S::~T), first look
4648            in the scope given by the qualification (i.e., S).
4649
4650            Note: in the calls to cp_parser_class_name below we pass
4651            typename_type so that lookup finds the injected-class-name
4652            rather than the constructor.  */
4653         done = false;
4654         type_decl = NULL_TREE;
4655         if (scope)
4656           {
4657             cp_parser_parse_tentatively (parser);
4658             type_decl = cp_parser_class_name (parser,
4659                                               /*typename_keyword_p=*/false,
4660                                               /*template_keyword_p=*/false,
4661                                               typename_type,
4662                                               /*check_dependency=*/false,
4663                                               /*class_head_p=*/false,
4664                                               declarator_p);
4665             if (cp_parser_parse_definitely (parser))
4666               done = true;
4667           }
4668         /* In "N::S::~S", look in "N" as well.  */
4669         if (!done && scope && qualifying_scope)
4670           {
4671             cp_parser_parse_tentatively (parser);
4672             parser->scope = qualifying_scope;
4673             parser->object_scope = NULL_TREE;
4674             parser->qualifying_scope = NULL_TREE;
4675             type_decl
4676               = cp_parser_class_name (parser,
4677                                       /*typename_keyword_p=*/false,
4678                                       /*template_keyword_p=*/false,
4679                                       typename_type,
4680                                       /*check_dependency=*/false,
4681                                       /*class_head_p=*/false,
4682                                       declarator_p);
4683             if (cp_parser_parse_definitely (parser))
4684               done = true;
4685           }
4686         /* In "p->S::~T", look in the scope given by "*p" as well.  */
4687         else if (!done && object_scope)
4688           {
4689             cp_parser_parse_tentatively (parser);
4690             parser->scope = object_scope;
4691             parser->object_scope = NULL_TREE;
4692             parser->qualifying_scope = NULL_TREE;
4693             type_decl
4694               = cp_parser_class_name (parser,
4695                                       /*typename_keyword_p=*/false,
4696                                       /*template_keyword_p=*/false,
4697                                       typename_type,
4698                                       /*check_dependency=*/false,
4699                                       /*class_head_p=*/false,
4700                                       declarator_p);
4701             if (cp_parser_parse_definitely (parser))
4702               done = true;
4703           }
4704         /* Look in the surrounding context.  */
4705         if (!done)
4706           {
4707             parser->scope = NULL_TREE;
4708             parser->object_scope = NULL_TREE;
4709             parser->qualifying_scope = NULL_TREE;
4710             if (processing_template_decl)
4711               cp_parser_parse_tentatively (parser);
4712             type_decl
4713               = cp_parser_class_name (parser,
4714                                       /*typename_keyword_p=*/false,
4715                                       /*template_keyword_p=*/false,
4716                                       typename_type,
4717                                       /*check_dependency=*/false,
4718                                       /*class_head_p=*/false,
4719                                       declarator_p);
4720             if (processing_template_decl
4721                 && ! cp_parser_parse_definitely (parser))
4722               {
4723                 /* We couldn't find a type with this name, so just accept
4724                    it and check for a match at instantiation time.  */
4725                 type_decl = cp_parser_identifier (parser);
4726                 if (type_decl != error_mark_node)
4727                   type_decl = build_nt (BIT_NOT_EXPR, type_decl);
4728                 return type_decl;
4729               }
4730           }
4731         /* If an error occurred, assume that the name of the
4732            destructor is the same as the name of the qualifying
4733            class.  That allows us to keep parsing after running
4734            into ill-formed destructor names.  */
4735         if (type_decl == error_mark_node && scope)
4736           return build_nt (BIT_NOT_EXPR, scope);
4737         else if (type_decl == error_mark_node)
4738           return error_mark_node;
4739
4740         /* Check that destructor name and scope match.  */
4741         if (declarator_p && scope && !check_dtor_name (scope, type_decl))
4742           {
4743             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
4744               error_at (token->location,
4745                         "declaration of %<~%T%> as member of %qT",
4746                         type_decl, scope);
4747             cp_parser_simulate_error (parser);
4748             return error_mark_node;
4749           }
4750
4751         /* [class.dtor]
4752
4753            A typedef-name that names a class shall not be used as the
4754            identifier in the declarator for a destructor declaration.  */
4755         if (declarator_p
4756             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
4757             && !DECL_SELF_REFERENCE_P (type_decl)
4758             && !cp_parser_uncommitted_to_tentative_parse_p (parser))
4759           error_at (token->location,
4760                     "typedef-name %qD used as destructor declarator",
4761                     type_decl);
4762
4763         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
4764       }
4765
4766     case CPP_KEYWORD:
4767       if (token->keyword == RID_OPERATOR)
4768         {
4769           tree id;
4770
4771           /* This could be a template-id, so we try that first.  */
4772           cp_parser_parse_tentatively (parser);
4773           /* Try a template-id.  */
4774           id = cp_parser_template_id (parser, template_keyword_p,
4775                                       /*check_dependency_p=*/true,
4776                                       declarator_p);
4777           /* If that worked, we're done.  */
4778           if (cp_parser_parse_definitely (parser))
4779             return id;
4780           /* We still don't know whether we're looking at an
4781              operator-function-id or a conversion-function-id.  */
4782           cp_parser_parse_tentatively (parser);
4783           /* Try an operator-function-id.  */
4784           id = cp_parser_operator_function_id (parser);
4785           /* If that didn't work, try a conversion-function-id.  */
4786           if (!cp_parser_parse_definitely (parser))
4787             id = cp_parser_conversion_function_id (parser);
4788           else if (UDLIT_OPER_P (id))
4789             {
4790               /* 17.6.3.3.5  */
4791               const char *name = UDLIT_OP_SUFFIX (id);
4792               if (name[0] != '_' && !in_system_header)
4793                 warning (0, "literal operator suffixes not preceded by %<_%>"
4794                             " are reserved for future standardization");
4795             }
4796
4797           return id;
4798         }
4799       /* Fall through.  */
4800
4801     default:
4802       if (optional_p)
4803         return NULL_TREE;
4804       cp_parser_error (parser, "expected unqualified-id");
4805       return error_mark_node;
4806     }
4807 }
4808
4809 /* Parse an (optional) nested-name-specifier.
4810
4811    nested-name-specifier: [C++98]
4812      class-or-namespace-name :: nested-name-specifier [opt]
4813      class-or-namespace-name :: template nested-name-specifier [opt]
4814
4815    nested-name-specifier: [C++0x]
4816      type-name ::
4817      namespace-name ::
4818      nested-name-specifier identifier ::
4819      nested-name-specifier template [opt] simple-template-id ::
4820
4821    PARSER->SCOPE should be set appropriately before this function is
4822    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
4823    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
4824    in name lookups.
4825
4826    Sets PARSER->SCOPE to the class (TYPE) or namespace
4827    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
4828    it unchanged if there is no nested-name-specifier.  Returns the new
4829    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
4830
4831    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
4832    part of a declaration and/or decl-specifier.  */
4833
4834 static tree
4835 cp_parser_nested_name_specifier_opt (cp_parser *parser,
4836                                      bool typename_keyword_p,
4837                                      bool check_dependency_p,
4838                                      bool type_p,
4839                                      bool is_declaration)
4840 {
4841   bool success = false;
4842   cp_token_position start = 0;
4843   cp_token *token;
4844
4845   /* Remember where the nested-name-specifier starts.  */
4846   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4847     {
4848       start = cp_lexer_token_position (parser->lexer, false);
4849       push_deferring_access_checks (dk_deferred);
4850     }
4851
4852   while (true)
4853     {
4854       tree new_scope;
4855       tree old_scope;
4856       tree saved_qualifying_scope;
4857       bool template_keyword_p;
4858
4859       /* Spot cases that cannot be the beginning of a
4860          nested-name-specifier.  */
4861       token = cp_lexer_peek_token (parser->lexer);
4862
4863       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
4864          the already parsed nested-name-specifier.  */
4865       if (token->type == CPP_NESTED_NAME_SPECIFIER)
4866         {
4867           /* Grab the nested-name-specifier and continue the loop.  */
4868           cp_parser_pre_parsed_nested_name_specifier (parser);
4869           /* If we originally encountered this nested-name-specifier
4870              with IS_DECLARATION set to false, we will not have
4871              resolved TYPENAME_TYPEs, so we must do so here.  */
4872           if (is_declaration
4873               && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4874             {
4875               new_scope = resolve_typename_type (parser->scope,
4876                                                  /*only_current_p=*/false);
4877               if (TREE_CODE (new_scope) != TYPENAME_TYPE)
4878                 parser->scope = new_scope;
4879             }
4880           success = true;
4881           continue;
4882         }
4883
4884       /* Spot cases that cannot be the beginning of a
4885          nested-name-specifier.  On the second and subsequent times
4886          through the loop, we look for the `template' keyword.  */
4887       if (success && token->keyword == RID_TEMPLATE)
4888         ;
4889       /* A template-id can start a nested-name-specifier.  */
4890       else if (token->type == CPP_TEMPLATE_ID)
4891         ;
4892       /* DR 743: decltype can be used in a nested-name-specifier.  */
4893       else if (token_is_decltype (token))
4894         ;
4895       else
4896         {
4897           /* If the next token is not an identifier, then it is
4898              definitely not a type-name or namespace-name.  */
4899           if (token->type != CPP_NAME)
4900             break;
4901           /* If the following token is neither a `<' (to begin a
4902              template-id), nor a `::', then we are not looking at a
4903              nested-name-specifier.  */
4904           token = cp_lexer_peek_nth_token (parser->lexer, 2);
4905
4906           if (token->type == CPP_COLON
4907               && parser->colon_corrects_to_scope_p
4908               && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_NAME)
4909             {
4910               error_at (token->location,
4911                         "found %<:%> in nested-name-specifier, expected %<::%>");
4912               token->type = CPP_SCOPE;
4913             }
4914
4915           if (token->type != CPP_SCOPE
4916               && !cp_parser_nth_token_starts_template_argument_list_p
4917                   (parser, 2))
4918             break;
4919         }
4920
4921       /* The nested-name-specifier is optional, so we parse
4922          tentatively.  */
4923       cp_parser_parse_tentatively (parser);
4924
4925       /* Look for the optional `template' keyword, if this isn't the
4926          first time through the loop.  */
4927       if (success)
4928         template_keyword_p = cp_parser_optional_template_keyword (parser);
4929       else
4930         template_keyword_p = false;
4931
4932       /* Save the old scope since the name lookup we are about to do
4933          might destroy it.  */
4934       old_scope = parser->scope;
4935       saved_qualifying_scope = parser->qualifying_scope;
4936       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
4937          look up names in "X<T>::I" in order to determine that "Y" is
4938          a template.  So, if we have a typename at this point, we make
4939          an effort to look through it.  */
4940       if (is_declaration
4941           && !typename_keyword_p
4942           && parser->scope
4943           && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4944         parser->scope = resolve_typename_type (parser->scope,
4945                                                /*only_current_p=*/false);
4946       /* Parse the qualifying entity.  */
4947       new_scope
4948         = cp_parser_qualifying_entity (parser,
4949                                        typename_keyword_p,
4950                                        template_keyword_p,
4951                                        check_dependency_p,
4952                                        type_p,
4953                                        is_declaration);
4954       /* Look for the `::' token.  */
4955       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
4956
4957       /* If we found what we wanted, we keep going; otherwise, we're
4958          done.  */
4959       if (!cp_parser_parse_definitely (parser))
4960         {
4961           bool error_p = false;
4962
4963           /* Restore the OLD_SCOPE since it was valid before the
4964              failed attempt at finding the last
4965              class-or-namespace-name.  */
4966           parser->scope = old_scope;
4967           parser->qualifying_scope = saved_qualifying_scope;
4968
4969           /* If the next token is a decltype, and the one after that is a
4970              `::', then the decltype has failed to resolve to a class or
4971              enumeration type.  Give this error even when parsing
4972              tentatively since it can't possibly be valid--and we're going
4973              to replace it with a CPP_NESTED_NAME_SPECIFIER below, so we
4974              won't get another chance.*/
4975           if (cp_lexer_next_token_is (parser->lexer, CPP_DECLTYPE)
4976               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4977                   == CPP_SCOPE))
4978             {
4979               token = cp_lexer_consume_token (parser->lexer);
4980               error_at (token->location, "decltype evaluates to %qT, "
4981                         "which is not a class or enumeration type",
4982                         token->u.value);
4983               parser->scope = error_mark_node;
4984               error_p = true;
4985               /* As below.  */
4986               success = true;
4987               cp_lexer_consume_token (parser->lexer);
4988             }
4989
4990           if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4991             break;
4992           /* If the next token is an identifier, and the one after
4993              that is a `::', then any valid interpretation would have
4994              found a class-or-namespace-name.  */
4995           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
4996                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4997                      == CPP_SCOPE)
4998                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
4999                      != CPP_COMPL))
5000             {
5001               token = cp_lexer_consume_token (parser->lexer);
5002               if (!error_p)
5003                 {
5004                   if (!token->ambiguous_p)
5005                     {
5006                       tree decl;
5007                       tree ambiguous_decls;
5008
5009                       decl = cp_parser_lookup_name (parser, token->u.value,
5010                                                     none_type,
5011                                                     /*is_template=*/false,
5012                                                     /*is_namespace=*/false,
5013                                                     /*check_dependency=*/true,
5014                                                     &ambiguous_decls,
5015                                                     token->location);
5016                       if (TREE_CODE (decl) == TEMPLATE_DECL)
5017                         error_at (token->location,
5018                                   "%qD used without template parameters",
5019                                   decl);
5020                       else if (ambiguous_decls)
5021                         {
5022                           error_at (token->location,
5023                                     "reference to %qD is ambiguous",
5024                                     token->u.value);
5025                           print_candidates (ambiguous_decls);
5026                           decl = error_mark_node;
5027                         }
5028                       else
5029                         {
5030                           if (cxx_dialect != cxx98)
5031                             cp_parser_name_lookup_error
5032                             (parser, token->u.value, decl, NLE_NOT_CXX98,
5033                              token->location);
5034                           else
5035                             cp_parser_name_lookup_error
5036                             (parser, token->u.value, decl, NLE_CXX98,
5037                              token->location);
5038                         }
5039                     }
5040                   parser->scope = error_mark_node;
5041                   error_p = true;
5042                   /* Treat this as a successful nested-name-specifier
5043                      due to:
5044
5045                      [basic.lookup.qual]
5046
5047                      If the name found is not a class-name (clause
5048                      _class_) or namespace-name (_namespace.def_), the
5049                      program is ill-formed.  */
5050                   success = true;
5051                 }
5052               cp_lexer_consume_token (parser->lexer);
5053             }
5054           break;
5055         }
5056       /* We've found one valid nested-name-specifier.  */
5057       success = true;
5058       /* Name lookup always gives us a DECL.  */
5059       if (TREE_CODE (new_scope) == TYPE_DECL)
5060         new_scope = TREE_TYPE (new_scope);
5061       /* Uses of "template" must be followed by actual templates.  */
5062       if (template_keyword_p
5063           && !(CLASS_TYPE_P (new_scope)
5064                && ((CLASSTYPE_USE_TEMPLATE (new_scope)
5065                     && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
5066                    || CLASSTYPE_IS_TEMPLATE (new_scope)))
5067           && !(TREE_CODE (new_scope) == TYPENAME_TYPE
5068                && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
5069                    == TEMPLATE_ID_EXPR)))
5070         permerror (input_location, TYPE_P (new_scope)
5071                    ? G_("%qT is not a template")
5072                    : G_("%qD is not a template"),
5073                    new_scope);
5074       /* If it is a class scope, try to complete it; we are about to
5075          be looking up names inside the class.  */
5076       if (TYPE_P (new_scope)
5077           /* Since checking types for dependency can be expensive,
5078              avoid doing it if the type is already complete.  */
5079           && !COMPLETE_TYPE_P (new_scope)
5080           /* Do not try to complete dependent types.  */
5081           && !dependent_type_p (new_scope))
5082         {
5083           new_scope = complete_type (new_scope);
5084           /* If it is a typedef to current class, use the current
5085              class instead, as the typedef won't have any names inside
5086              it yet.  */
5087           if (!COMPLETE_TYPE_P (new_scope)
5088               && currently_open_class (new_scope))
5089             new_scope = TYPE_MAIN_VARIANT (new_scope);
5090         }
5091       /* Make sure we look in the right scope the next time through
5092          the loop.  */
5093       parser->scope = new_scope;
5094     }
5095
5096   /* If parsing tentatively, replace the sequence of tokens that makes
5097      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
5098      token.  That way, should we re-parse the token stream, we will
5099      not have to repeat the effort required to do the parse, nor will
5100      we issue duplicate error messages.  */
5101   if (success && start)
5102     {
5103       cp_token *token;
5104
5105       token = cp_lexer_token_at (parser->lexer, start);
5106       /* Reset the contents of the START token.  */
5107       token->type = CPP_NESTED_NAME_SPECIFIER;
5108       /* Retrieve any deferred checks.  Do not pop this access checks yet
5109          so the memory will not be reclaimed during token replacing below.  */
5110       token->u.tree_check_value = ggc_alloc_cleared_tree_check ();
5111       token->u.tree_check_value->value = parser->scope;
5112       token->u.tree_check_value->checks = get_deferred_access_checks ();
5113       token->u.tree_check_value->qualifying_scope =
5114         parser->qualifying_scope;
5115       token->keyword = RID_MAX;
5116
5117       /* Purge all subsequent tokens.  */
5118       cp_lexer_purge_tokens_after (parser->lexer, start);
5119     }
5120
5121   if (start)
5122     pop_to_parent_deferring_access_checks ();
5123
5124   return success ? parser->scope : NULL_TREE;
5125 }
5126
5127 /* Parse a nested-name-specifier.  See
5128    cp_parser_nested_name_specifier_opt for details.  This function
5129    behaves identically, except that it will an issue an error if no
5130    nested-name-specifier is present.  */
5131
5132 static tree
5133 cp_parser_nested_name_specifier (cp_parser *parser,
5134                                  bool typename_keyword_p,
5135                                  bool check_dependency_p,
5136                                  bool type_p,
5137                                  bool is_declaration)
5138 {
5139   tree scope;
5140
5141   /* Look for the nested-name-specifier.  */
5142   scope = cp_parser_nested_name_specifier_opt (parser,
5143                                                typename_keyword_p,
5144                                                check_dependency_p,
5145                                                type_p,
5146                                                is_declaration);
5147   /* If it was not present, issue an error message.  */
5148   if (!scope)
5149     {
5150       cp_parser_error (parser, "expected nested-name-specifier");
5151       parser->scope = NULL_TREE;
5152     }
5153
5154   return scope;
5155 }
5156
5157 /* Parse the qualifying entity in a nested-name-specifier. For C++98,
5158    this is either a class-name or a namespace-name (which corresponds
5159    to the class-or-namespace-name production in the grammar). For
5160    C++0x, it can also be a type-name that refers to an enumeration
5161    type or a simple-template-id.
5162
5163    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
5164    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
5165    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
5166    TYPE_P is TRUE iff the next name should be taken as a class-name,
5167    even the same name is declared to be another entity in the same
5168    scope.
5169
5170    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
5171    specified by the class-or-namespace-name.  If neither is found the
5172    ERROR_MARK_NODE is returned.  */
5173
5174 static tree
5175 cp_parser_qualifying_entity (cp_parser *parser,
5176                              bool typename_keyword_p,
5177                              bool template_keyword_p,
5178                              bool check_dependency_p,
5179                              bool type_p,
5180                              bool is_declaration)
5181 {
5182   tree saved_scope;
5183   tree saved_qualifying_scope;
5184   tree saved_object_scope;
5185   tree scope;
5186   bool only_class_p;
5187   bool successful_parse_p;
5188
5189   /* DR 743: decltype can appear in a nested-name-specifier.  */
5190   if (cp_lexer_next_token_is_decltype (parser->lexer))
5191     {
5192       scope = cp_parser_decltype (parser);
5193       if (TREE_CODE (scope) != ENUMERAL_TYPE
5194           && !MAYBE_CLASS_TYPE_P (scope))
5195         {
5196           cp_parser_simulate_error (parser);
5197           return error_mark_node;
5198         }
5199       if (TYPE_NAME (scope))
5200         scope = TYPE_NAME (scope);
5201       return scope;
5202     }
5203
5204   /* Before we try to parse the class-name, we must save away the
5205      current PARSER->SCOPE since cp_parser_class_name will destroy
5206      it.  */
5207   saved_scope = parser->scope;
5208   saved_qualifying_scope = parser->qualifying_scope;
5209   saved_object_scope = parser->object_scope;
5210   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
5211      there is no need to look for a namespace-name.  */
5212   only_class_p = template_keyword_p 
5213     || (saved_scope && TYPE_P (saved_scope) && cxx_dialect == cxx98);
5214   if (!only_class_p)
5215     cp_parser_parse_tentatively (parser);
5216   scope = cp_parser_class_name (parser,
5217                                 typename_keyword_p,
5218                                 template_keyword_p,
5219                                 type_p ? class_type : none_type,
5220                                 check_dependency_p,
5221                                 /*class_head_p=*/false,
5222                                 is_declaration);
5223   successful_parse_p = only_class_p || cp_parser_parse_definitely (parser);
5224   /* If that didn't work and we're in C++0x mode, try for a type-name.  */
5225   if (!only_class_p 
5226       && cxx_dialect != cxx98
5227       && !successful_parse_p)
5228     {
5229       /* Restore the saved scope.  */
5230       parser->scope = saved_scope;
5231       parser->qualifying_scope = saved_qualifying_scope;
5232       parser->object_scope = saved_object_scope;
5233
5234       /* Parse tentatively.  */
5235       cp_parser_parse_tentatively (parser);
5236      
5237       /* Parse a type-name  */
5238       scope = cp_parser_type_name (parser);
5239
5240       /* "If the name found does not designate a namespace or a class,
5241          enumeration, or dependent type, the program is ill-formed."
5242
5243          We cover classes and dependent types above and namespaces below,
5244          so this code is only looking for enums.  */
5245       if (!scope || TREE_CODE (scope) != TYPE_DECL
5246           || TREE_CODE (TREE_TYPE (scope)) != ENUMERAL_TYPE)
5247         cp_parser_simulate_error (parser);
5248
5249       successful_parse_p = cp_parser_parse_definitely (parser);
5250     }
5251   /* If that didn't work, try for a namespace-name.  */
5252   if (!only_class_p && !successful_parse_p)
5253     {
5254       /* Restore the saved scope.  */
5255       parser->scope = saved_scope;
5256       parser->qualifying_scope = saved_qualifying_scope;
5257       parser->object_scope = saved_object_scope;
5258       /* If we are not looking at an identifier followed by the scope
5259          resolution operator, then this is not part of a
5260          nested-name-specifier.  (Note that this function is only used
5261          to parse the components of a nested-name-specifier.)  */
5262       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
5263           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
5264         return error_mark_node;
5265       scope = cp_parser_namespace_name (parser);
5266     }
5267
5268   return scope;
5269 }
5270
5271 /* Parse a postfix-expression.
5272
5273    postfix-expression:
5274      primary-expression
5275      postfix-expression [ expression ]
5276      postfix-expression ( expression-list [opt] )
5277      simple-type-specifier ( expression-list [opt] )
5278      typename :: [opt] nested-name-specifier identifier
5279        ( expression-list [opt] )
5280      typename :: [opt] nested-name-specifier template [opt] template-id
5281        ( expression-list [opt] )
5282      postfix-expression . template [opt] id-expression
5283      postfix-expression -> template [opt] id-expression
5284      postfix-expression . pseudo-destructor-name
5285      postfix-expression -> pseudo-destructor-name
5286      postfix-expression ++
5287      postfix-expression --
5288      dynamic_cast < type-id > ( expression )
5289      static_cast < type-id > ( expression )
5290      reinterpret_cast < type-id > ( expression )
5291      const_cast < type-id > ( expression )
5292      typeid ( expression )
5293      typeid ( type-id )
5294
5295    GNU Extension:
5296
5297    postfix-expression:
5298      ( type-id ) { initializer-list , [opt] }
5299
5300    This extension is a GNU version of the C99 compound-literal
5301    construct.  (The C99 grammar uses `type-name' instead of `type-id',
5302    but they are essentially the same concept.)
5303
5304    If ADDRESS_P is true, the postfix expression is the operand of the
5305    `&' operator.  CAST_P is true if this expression is the target of a
5306    cast.
5307
5308    If MEMBER_ACCESS_ONLY_P, we only allow postfix expressions that are
5309    class member access expressions [expr.ref].
5310
5311    Returns a representation of the expression.  */
5312
5313 static tree
5314 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
5315                               bool member_access_only_p,
5316                               cp_id_kind * pidk_return)
5317 {
5318   cp_token *token;
5319   enum rid keyword;
5320   cp_id_kind idk = CP_ID_KIND_NONE;
5321   tree postfix_expression = NULL_TREE;
5322   bool is_member_access = false;
5323
5324   /* Peek at the next token.  */
5325   token = cp_lexer_peek_token (parser->lexer);
5326   /* Some of the productions are determined by keywords.  */
5327   keyword = token->keyword;
5328   switch (keyword)
5329     {
5330     case RID_DYNCAST:
5331     case RID_STATCAST:
5332     case RID_REINTCAST:
5333     case RID_CONSTCAST:
5334       {
5335         tree type;
5336         tree expression;
5337         const char *saved_message;
5338
5339         /* All of these can be handled in the same way from the point
5340            of view of parsing.  Begin by consuming the token
5341            identifying the cast.  */
5342         cp_lexer_consume_token (parser->lexer);
5343
5344         /* New types cannot be defined in the cast.  */
5345         saved_message = parser->type_definition_forbidden_message;
5346         parser->type_definition_forbidden_message
5347           = G_("types may not be defined in casts");
5348
5349         /* Look for the opening `<'.  */
5350         cp_parser_require (parser, CPP_LESS, RT_LESS);
5351         /* Parse the type to which we are casting.  */
5352         type = cp_parser_type_id (parser);
5353         /* Look for the closing `>'.  */
5354         cp_parser_require (parser, CPP_GREATER, RT_GREATER);
5355         /* Restore the old message.  */
5356         parser->type_definition_forbidden_message = saved_message;
5357
5358         /* And the expression which is being cast.  */
5359         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
5360         expression = cp_parser_expression (parser, /*cast_p=*/true, & idk);
5361         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
5362
5363         /* Only type conversions to integral or enumeration types
5364            can be used in constant-expressions.  */
5365         if (!cast_valid_in_integral_constant_expression_p (type)
5366             && cp_parser_non_integral_constant_expression (parser, NIC_CAST))
5367           return error_mark_node;
5368
5369         switch (keyword)
5370           {
5371           case RID_DYNCAST:
5372             postfix_expression
5373               = build_dynamic_cast (type, expression, tf_warning_or_error);
5374             break;
5375           case RID_STATCAST:
5376             postfix_expression
5377               = build_static_cast (type, expression, tf_warning_or_error);
5378             break;
5379           case RID_REINTCAST:
5380             postfix_expression
5381               = build_reinterpret_cast (type, expression, 
5382                                         tf_warning_or_error);
5383             break;
5384           case RID_CONSTCAST:
5385             postfix_expression
5386               = build_const_cast (type, expression, tf_warning_or_error);
5387             break;
5388           default:
5389             gcc_unreachable ();
5390           }
5391       }
5392       break;
5393
5394     case RID_TYPEID:
5395       {
5396         tree type;
5397         const char *saved_message;
5398         bool saved_in_type_id_in_expr_p;
5399
5400         /* Consume the `typeid' token.  */
5401         cp_lexer_consume_token (parser->lexer);
5402         /* Look for the `(' token.  */
5403         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
5404         /* Types cannot be defined in a `typeid' expression.  */
5405         saved_message = parser->type_definition_forbidden_message;
5406         parser->type_definition_forbidden_message
5407           = G_("types may not be defined in a %<typeid%> expression");
5408         /* We can't be sure yet whether we're looking at a type-id or an
5409            expression.  */
5410         cp_parser_parse_tentatively (parser);
5411         /* Try a type-id first.  */
5412         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5413         parser->in_type_id_in_expr_p = true;
5414         type = cp_parser_type_id (parser);
5415         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5416         /* Look for the `)' token.  Otherwise, we can't be sure that
5417            we're not looking at an expression: consider `typeid (int
5418            (3))', for example.  */
5419         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
5420         /* If all went well, simply lookup the type-id.  */
5421         if (cp_parser_parse_definitely (parser))
5422           postfix_expression = get_typeid (type);
5423         /* Otherwise, fall back to the expression variant.  */
5424         else
5425           {
5426             tree expression;
5427
5428             /* Look for an expression.  */
5429             expression = cp_parser_expression (parser, /*cast_p=*/false, & idk);
5430             /* Compute its typeid.  */
5431             postfix_expression = build_typeid (expression);
5432             /* Look for the `)' token.  */
5433             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
5434           }
5435         /* Restore the saved message.  */
5436         parser->type_definition_forbidden_message = saved_message;
5437         /* `typeid' may not appear in an integral constant expression.  */
5438         if (cp_parser_non_integral_constant_expression (parser, NIC_TYPEID))
5439           return error_mark_node;
5440       }
5441       break;
5442
5443     case RID_TYPENAME:
5444       {
5445         tree type;
5446         /* The syntax permitted here is the same permitted for an
5447            elaborated-type-specifier.  */
5448         type = cp_parser_elaborated_type_specifier (parser,
5449                                                     /*is_friend=*/false,
5450                                                     /*is_declaration=*/false);
5451         postfix_expression = cp_parser_functional_cast (parser, type);
5452       }
5453       break;
5454
5455     default:
5456       {
5457         tree type;
5458
5459         /* If the next thing is a simple-type-specifier, we may be
5460            looking at a functional cast.  We could also be looking at
5461            an id-expression.  So, we try the functional cast, and if
5462            that doesn't work we fall back to the primary-expression.  */
5463         cp_parser_parse_tentatively (parser);
5464         /* Look for the simple-type-specifier.  */
5465         type = cp_parser_simple_type_specifier (parser,
5466                                                 /*decl_specs=*/NULL,
5467                                                 CP_PARSER_FLAGS_NONE);
5468         /* Parse the cast itself.  */
5469         if (!cp_parser_error_occurred (parser))
5470           postfix_expression
5471             = cp_parser_functional_cast (parser, type);
5472         /* If that worked, we're done.  */
5473         if (cp_parser_parse_definitely (parser))
5474           break;
5475
5476         /* If the functional-cast didn't work out, try a
5477            compound-literal.  */
5478         if (cp_parser_allow_gnu_extensions_p (parser)
5479             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5480           {
5481             VEC(constructor_elt,gc) *initializer_list = NULL;
5482             bool saved_in_type_id_in_expr_p;
5483
5484             cp_parser_parse_tentatively (parser);
5485             /* Consume the `('.  */
5486             cp_lexer_consume_token (parser->lexer);
5487             /* Parse the type.  */
5488             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5489             parser->in_type_id_in_expr_p = true;
5490             type = cp_parser_type_id (parser);
5491             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5492             /* Look for the `)'.  */
5493             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
5494             /* Look for the `{'.  */
5495             cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
5496             /* If things aren't going well, there's no need to
5497                keep going.  */
5498             if (!cp_parser_error_occurred (parser))
5499               {
5500                 bool non_constant_p;
5501                 /* Parse the initializer-list.  */
5502                 initializer_list
5503                   = cp_parser_initializer_list (parser, &non_constant_p);
5504                 /* Allow a trailing `,'.  */
5505                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
5506                   cp_lexer_consume_token (parser->lexer);
5507                 /* Look for the final `}'.  */
5508                 cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
5509               }
5510             /* If that worked, we're definitely looking at a
5511                compound-literal expression.  */
5512             if (cp_parser_parse_definitely (parser))
5513               {
5514                 /* Warn the user that a compound literal is not
5515                    allowed in standard C++.  */
5516                 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids compound-literals");
5517                 /* For simplicity, we disallow compound literals in
5518                    constant-expressions.  We could
5519                    allow compound literals of integer type, whose
5520                    initializer was a constant, in constant
5521                    expressions.  Permitting that usage, as a further
5522                    extension, would not change the meaning of any
5523                    currently accepted programs.  (Of course, as
5524                    compound literals are not part of ISO C++, the
5525                    standard has nothing to say.)  */
5526                 if (cp_parser_non_integral_constant_expression (parser,
5527                                                                 NIC_NCC))
5528                   {
5529                     postfix_expression = error_mark_node;
5530                     break;
5531                   }
5532                 /* Form the representation of the compound-literal.  */
5533                 postfix_expression
5534                   = (finish_compound_literal
5535                      (type, build_constructor (init_list_type_node,
5536                                                initializer_list),
5537                       tf_warning_or_error));
5538                 break;
5539               }
5540           }
5541
5542         /* It must be a primary-expression.  */
5543         postfix_expression
5544           = cp_parser_primary_expression (parser, address_p, cast_p,
5545                                           /*template_arg_p=*/false,
5546                                           &idk);
5547       }
5548       break;
5549     }
5550
5551   /* Keep looping until the postfix-expression is complete.  */
5552   while (true)
5553     {
5554       if (idk == CP_ID_KIND_UNQUALIFIED
5555           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
5556           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
5557         /* It is not a Koenig lookup function call.  */
5558         postfix_expression
5559           = unqualified_name_lookup_error (postfix_expression);
5560
5561       /* Peek at the next token.  */
5562       token = cp_lexer_peek_token (parser->lexer);
5563
5564       switch (token->type)
5565         {
5566         case CPP_OPEN_SQUARE:
5567           postfix_expression
5568             = cp_parser_postfix_open_square_expression (parser,
5569                                                         postfix_expression,
5570                                                         false);
5571           idk = CP_ID_KIND_NONE;
5572           is_member_access = false;
5573           break;
5574
5575         case CPP_OPEN_PAREN:
5576           /* postfix-expression ( expression-list [opt] ) */
5577           {
5578             bool koenig_p;
5579             bool is_builtin_constant_p;
5580             bool saved_integral_constant_expression_p = false;
5581             bool saved_non_integral_constant_expression_p = false;
5582             VEC(tree,gc) *args;
5583
5584             is_member_access = false;
5585
5586             is_builtin_constant_p
5587               = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
5588             if (is_builtin_constant_p)
5589               {
5590                 /* The whole point of __builtin_constant_p is to allow
5591                    non-constant expressions to appear as arguments.  */
5592                 saved_integral_constant_expression_p
5593                   = parser->integral_constant_expression_p;
5594                 saved_non_integral_constant_expression_p
5595                   = parser->non_integral_constant_expression_p;
5596                 parser->integral_constant_expression_p = false;
5597               }
5598             args = (cp_parser_parenthesized_expression_list
5599                     (parser, non_attr,
5600                      /*cast_p=*/false, /*allow_expansion_p=*/true,
5601                      /*non_constant_p=*/NULL));
5602             if (is_builtin_constant_p)
5603               {
5604                 parser->integral_constant_expression_p
5605                   = saved_integral_constant_expression_p;
5606                 parser->non_integral_constant_expression_p
5607                   = saved_non_integral_constant_expression_p;
5608               }
5609
5610             if (args == NULL)
5611               {
5612                 postfix_expression = error_mark_node;
5613                 break;
5614               }
5615
5616             /* Function calls are not permitted in
5617                constant-expressions.  */
5618             if (! builtin_valid_in_constant_expr_p (postfix_expression)
5619                 && cp_parser_non_integral_constant_expression (parser,
5620                                                                NIC_FUNC_CALL))
5621               {
5622                 postfix_expression = error_mark_node;
5623                 release_tree_vector (args);
5624                 break;
5625               }
5626
5627             koenig_p = false;
5628             if (idk == CP_ID_KIND_UNQUALIFIED
5629                 || idk == CP_ID_KIND_TEMPLATE_ID)
5630               {
5631                 if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
5632                   {
5633                     if (!VEC_empty (tree, args))
5634                       {
5635                         koenig_p = true;
5636                         if (!any_type_dependent_arguments_p (args))
5637                           postfix_expression
5638                             = perform_koenig_lookup (postfix_expression, args,
5639                                                      /*include_std=*/false,
5640                                                      tf_warning_or_error);
5641                       }
5642                     else
5643                       postfix_expression
5644                         = unqualified_fn_lookup_error (postfix_expression);
5645                   }
5646                 /* We do not perform argument-dependent lookup if
5647                    normal lookup finds a non-function, in accordance
5648                    with the expected resolution of DR 218.  */
5649                 else if (!VEC_empty (tree, args)
5650                          && is_overloaded_fn (postfix_expression))
5651                   {
5652                     tree fn = get_first_fn (postfix_expression);
5653                     fn = STRIP_TEMPLATE (fn);
5654
5655                     /* Do not do argument dependent lookup if regular
5656                        lookup finds a member function or a block-scope
5657                        function declaration.  [basic.lookup.argdep]/3  */
5658                     if (!DECL_FUNCTION_MEMBER_P (fn)
5659                         && !DECL_LOCAL_FUNCTION_P (fn))
5660                       {
5661                         koenig_p = true;
5662                         if (!any_type_dependent_arguments_p (args))
5663                           postfix_expression
5664                             = perform_koenig_lookup (postfix_expression, args,
5665                                                      /*include_std=*/false,
5666                                                      tf_warning_or_error);
5667                       }
5668                   }
5669               }
5670
5671             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
5672               {
5673                 tree instance = TREE_OPERAND (postfix_expression, 0);
5674                 tree fn = TREE_OPERAND (postfix_expression, 1);
5675
5676                 if (processing_template_decl
5677                     && (type_dependent_expression_p (instance)
5678                         || (!BASELINK_P (fn)
5679                             && TREE_CODE (fn) != FIELD_DECL)
5680                         || type_dependent_expression_p (fn)
5681                         || any_type_dependent_arguments_p (args)))
5682                   {
5683                     postfix_expression
5684                       = build_nt_call_vec (postfix_expression, args);
5685                     release_tree_vector (args);
5686                     break;
5687                   }
5688
5689                 if (BASELINK_P (fn))
5690                   {
5691                   postfix_expression
5692                     = (build_new_method_call
5693                        (instance, fn, &args, NULL_TREE,
5694                         (idk == CP_ID_KIND_QUALIFIED
5695                          ? LOOKUP_NORMAL|LOOKUP_NONVIRTUAL
5696                          : LOOKUP_NORMAL),
5697                         /*fn_p=*/NULL,
5698                         tf_warning_or_error));
5699                   }
5700                 else
5701                   postfix_expression
5702                     = finish_call_expr (postfix_expression, &args,
5703                                         /*disallow_virtual=*/false,
5704                                         /*koenig_p=*/false,
5705                                         tf_warning_or_error);
5706               }
5707             else if (TREE_CODE (postfix_expression) == OFFSET_REF
5708                      || TREE_CODE (postfix_expression) == MEMBER_REF
5709                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
5710               postfix_expression = (build_offset_ref_call_from_tree
5711                                     (postfix_expression, &args));
5712             else if (idk == CP_ID_KIND_QUALIFIED)
5713               /* A call to a static class member, or a namespace-scope
5714                  function.  */
5715               postfix_expression
5716                 = finish_call_expr (postfix_expression, &args,
5717                                     /*disallow_virtual=*/true,
5718                                     koenig_p,
5719                                     tf_warning_or_error);
5720             else
5721               /* All other function calls.  */
5722               postfix_expression
5723                 = finish_call_expr (postfix_expression, &args,
5724                                     /*disallow_virtual=*/false,
5725                                     koenig_p,
5726                                     tf_warning_or_error);
5727
5728             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
5729             idk = CP_ID_KIND_NONE;
5730
5731             release_tree_vector (args);
5732           }
5733           break;
5734
5735         case CPP_DOT:
5736         case CPP_DEREF:
5737           /* postfix-expression . template [opt] id-expression
5738              postfix-expression . pseudo-destructor-name
5739              postfix-expression -> template [opt] id-expression
5740              postfix-expression -> pseudo-destructor-name */
5741
5742           /* Consume the `.' or `->' operator.  */
5743           cp_lexer_consume_token (parser->lexer);
5744
5745           postfix_expression
5746             = cp_parser_postfix_dot_deref_expression (parser, token->type,
5747                                                       postfix_expression,
5748                                                       false, &idk,
5749                                                       token->location);
5750
5751           is_member_access = true;
5752           break;
5753
5754         case CPP_PLUS_PLUS:
5755           /* postfix-expression ++  */
5756           /* Consume the `++' token.  */
5757           cp_lexer_consume_token (parser->lexer);
5758           /* Generate a representation for the complete expression.  */
5759           postfix_expression
5760             = finish_increment_expr (postfix_expression,
5761                                      POSTINCREMENT_EXPR);
5762           /* Increments may not appear in constant-expressions.  */
5763           if (cp_parser_non_integral_constant_expression (parser, NIC_INC))
5764             postfix_expression = error_mark_node;
5765           idk = CP_ID_KIND_NONE;
5766           is_member_access = false;
5767           break;
5768
5769         case CPP_MINUS_MINUS:
5770           /* postfix-expression -- */
5771           /* Consume the `--' token.  */
5772           cp_lexer_consume_token (parser->lexer);
5773           /* Generate a representation for the complete expression.  */
5774           postfix_expression
5775             = finish_increment_expr (postfix_expression,
5776                                      POSTDECREMENT_EXPR);
5777           /* Decrements may not appear in constant-expressions.  */
5778           if (cp_parser_non_integral_constant_expression (parser, NIC_DEC))
5779             postfix_expression = error_mark_node;
5780           idk = CP_ID_KIND_NONE;
5781           is_member_access = false;
5782           break;
5783
5784         default:
5785           if (pidk_return != NULL)
5786             * pidk_return = idk;
5787           if (member_access_only_p)
5788             return is_member_access? postfix_expression : error_mark_node;
5789           else
5790             return postfix_expression;
5791         }
5792     }
5793
5794   /* We should never get here.  */
5795   gcc_unreachable ();
5796   return error_mark_node;
5797 }
5798
5799 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
5800    by cp_parser_builtin_offsetof.  We're looking for
5801
5802      postfix-expression [ expression ]
5803
5804    FOR_OFFSETOF is set if we're being called in that context, which
5805    changes how we deal with integer constant expressions.  */
5806
5807 static tree
5808 cp_parser_postfix_open_square_expression (cp_parser *parser,
5809                                           tree postfix_expression,
5810                                           bool for_offsetof)
5811 {
5812   tree index;
5813
5814   /* Consume the `[' token.  */
5815   cp_lexer_consume_token (parser->lexer);
5816
5817   /* Parse the index expression.  */
5818   /* ??? For offsetof, there is a question of what to allow here.  If
5819      offsetof is not being used in an integral constant expression context,
5820      then we *could* get the right answer by computing the value at runtime.
5821      If we are in an integral constant expression context, then we might
5822      could accept any constant expression; hard to say without analysis.
5823      Rather than open the barn door too wide right away, allow only integer
5824      constant expressions here.  */
5825   if (for_offsetof)
5826     index = cp_parser_constant_expression (parser, false, NULL);
5827   else
5828     index = cp_parser_expression (parser, /*cast_p=*/false, NULL);
5829
5830   /* Look for the closing `]'.  */
5831   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
5832
5833   /* Build the ARRAY_REF.  */
5834   postfix_expression = grok_array_decl (postfix_expression, index);
5835
5836   /* When not doing offsetof, array references are not permitted in
5837      constant-expressions.  */
5838   if (!for_offsetof
5839       && (cp_parser_non_integral_constant_expression (parser, NIC_ARRAY_REF)))
5840     postfix_expression = error_mark_node;
5841
5842   return postfix_expression;
5843 }
5844
5845 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
5846    by cp_parser_builtin_offsetof.  We're looking for
5847
5848      postfix-expression . template [opt] id-expression
5849      postfix-expression . pseudo-destructor-name
5850      postfix-expression -> template [opt] id-expression
5851      postfix-expression -> pseudo-destructor-name
5852
5853    FOR_OFFSETOF is set if we're being called in that context.  That sorta
5854    limits what of the above we'll actually accept, but nevermind.
5855    TOKEN_TYPE is the "." or "->" token, which will already have been
5856    removed from the stream.  */
5857
5858 static tree
5859 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
5860                                         enum cpp_ttype token_type,
5861                                         tree postfix_expression,
5862                                         bool for_offsetof, cp_id_kind *idk,
5863                                         location_t location)
5864 {
5865   tree name;
5866   bool dependent_p;
5867   bool pseudo_destructor_p;
5868   tree scope = NULL_TREE;
5869
5870   /* If this is a `->' operator, dereference the pointer.  */
5871   if (token_type == CPP_DEREF)
5872     postfix_expression = build_x_arrow (postfix_expression);
5873   /* Check to see whether or not the expression is type-dependent.  */
5874   dependent_p = type_dependent_expression_p (postfix_expression);
5875   /* The identifier following the `->' or `.' is not qualified.  */
5876   parser->scope = NULL_TREE;
5877   parser->qualifying_scope = NULL_TREE;
5878   parser->object_scope = NULL_TREE;
5879   *idk = CP_ID_KIND_NONE;
5880
5881   /* Enter the scope corresponding to the type of the object
5882      given by the POSTFIX_EXPRESSION.  */
5883   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
5884     {
5885       scope = TREE_TYPE (postfix_expression);
5886       /* According to the standard, no expression should ever have
5887          reference type.  Unfortunately, we do not currently match
5888          the standard in this respect in that our internal representation
5889          of an expression may have reference type even when the standard
5890          says it does not.  Therefore, we have to manually obtain the
5891          underlying type here.  */
5892       scope = non_reference (scope);
5893       /* The type of the POSTFIX_EXPRESSION must be complete.  */
5894       if (scope == unknown_type_node)
5895         {
5896           error_at (location, "%qE does not have class type",
5897                     postfix_expression);
5898           scope = NULL_TREE;
5899         }
5900       /* Unlike the object expression in other contexts, *this is not
5901          required to be of complete type for purposes of class member
5902          access (5.2.5) outside the member function body.  */
5903       else if (scope != current_class_ref
5904                && !(processing_template_decl && scope == current_class_type))
5905         scope = complete_type_or_else (scope, NULL_TREE);
5906       /* Let the name lookup machinery know that we are processing a
5907          class member access expression.  */
5908       parser->context->object_type = scope;
5909       /* If something went wrong, we want to be able to discern that case,
5910          as opposed to the case where there was no SCOPE due to the type
5911          of expression being dependent.  */
5912       if (!scope)
5913         scope = error_mark_node;
5914       /* If the SCOPE was erroneous, make the various semantic analysis
5915          functions exit quickly -- and without issuing additional error
5916          messages.  */
5917       if (scope == error_mark_node)
5918         postfix_expression = error_mark_node;
5919     }
5920
5921   /* Assume this expression is not a pseudo-destructor access.  */
5922   pseudo_destructor_p = false;
5923
5924   /* If the SCOPE is a scalar type, then, if this is a valid program,
5925      we must be looking at a pseudo-destructor-name.  If POSTFIX_EXPRESSION
5926      is type dependent, it can be pseudo-destructor-name or something else.
5927      Try to parse it as pseudo-destructor-name first.  */
5928   if ((scope && SCALAR_TYPE_P (scope)) || dependent_p)
5929     {
5930       tree s;
5931       tree type;
5932
5933       cp_parser_parse_tentatively (parser);
5934       /* Parse the pseudo-destructor-name.  */
5935       s = NULL_TREE;
5936       cp_parser_pseudo_destructor_name (parser, &s, &type);
5937       if (dependent_p
5938           && (cp_parser_error_occurred (parser)
5939               || TREE_CODE (type) != TYPE_DECL
5940               || !SCALAR_TYPE_P (TREE_TYPE (type))))
5941         cp_parser_abort_tentative_parse (parser);
5942       else if (cp_parser_parse_definitely (parser))
5943         {
5944           pseudo_destructor_p = true;
5945           postfix_expression
5946             = finish_pseudo_destructor_expr (postfix_expression,
5947                                              s, TREE_TYPE (type));
5948         }
5949     }
5950
5951   if (!pseudo_destructor_p)
5952     {
5953       /* If the SCOPE is not a scalar type, we are looking at an
5954          ordinary class member access expression, rather than a
5955          pseudo-destructor-name.  */
5956       bool template_p;
5957       cp_token *token = cp_lexer_peek_token (parser->lexer);
5958       /* Parse the id-expression.  */
5959       name = (cp_parser_id_expression
5960               (parser,
5961                cp_parser_optional_template_keyword (parser),
5962                /*check_dependency_p=*/true,
5963                &template_p,
5964                /*declarator_p=*/false,
5965                /*optional_p=*/false));
5966       /* In general, build a SCOPE_REF if the member name is qualified.
5967          However, if the name was not dependent and has already been
5968          resolved; there is no need to build the SCOPE_REF.  For example;
5969
5970              struct X { void f(); };
5971              template <typename T> void f(T* t) { t->X::f(); }
5972
5973          Even though "t" is dependent, "X::f" is not and has been resolved
5974          to a BASELINK; there is no need to include scope information.  */
5975
5976       /* But we do need to remember that there was an explicit scope for
5977          virtual function calls.  */
5978       if (parser->scope)
5979         *idk = CP_ID_KIND_QUALIFIED;
5980
5981       /* If the name is a template-id that names a type, we will get a
5982          TYPE_DECL here.  That is invalid code.  */
5983       if (TREE_CODE (name) == TYPE_DECL)
5984         {
5985           error_at (token->location, "invalid use of %qD", name);
5986           postfix_expression = error_mark_node;
5987         }
5988       else
5989         {
5990           if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
5991             {
5992               if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
5993                 {
5994                   error_at (token->location, "%<%D::%D%> is not a class member",
5995                             parser->scope, name);
5996                   postfix_expression = error_mark_node;
5997                 }
5998               else
5999                 name = build_qualified_name (/*type=*/NULL_TREE,
6000                                              parser->scope,
6001                                              name,
6002                                              template_p);
6003               parser->scope = NULL_TREE;
6004               parser->qualifying_scope = NULL_TREE;
6005               parser->object_scope = NULL_TREE;
6006             }
6007           if (scope && name && BASELINK_P (name))
6008             adjust_result_of_qualified_name_lookup
6009               (name, BINFO_TYPE (BASELINK_ACCESS_BINFO (name)), scope);
6010           postfix_expression
6011             = finish_class_member_access_expr (postfix_expression, name,
6012                                                template_p, 
6013                                                tf_warning_or_error);
6014         }
6015     }
6016
6017   /* We no longer need to look up names in the scope of the object on
6018      the left-hand side of the `.' or `->' operator.  */
6019   parser->context->object_type = NULL_TREE;
6020
6021   /* Outside of offsetof, these operators may not appear in
6022      constant-expressions.  */
6023   if (!for_offsetof
6024       && (cp_parser_non_integral_constant_expression
6025           (parser, token_type == CPP_DEREF ? NIC_ARROW : NIC_POINT)))
6026     postfix_expression = error_mark_node;
6027
6028   return postfix_expression;
6029 }
6030
6031 /* Parse a parenthesized expression-list.
6032
6033    expression-list:
6034      assignment-expression
6035      expression-list, assignment-expression
6036
6037    attribute-list:
6038      expression-list
6039      identifier
6040      identifier, expression-list
6041
6042    CAST_P is true if this expression is the target of a cast.
6043
6044    ALLOW_EXPANSION_P is true if this expression allows expansion of an
6045    argument pack.
6046
6047    Returns a vector of trees.  Each element is a representation of an
6048    assignment-expression.  NULL is returned if the ( and or ) are
6049    missing.  An empty, but allocated, vector is returned on no
6050    expressions.  The parentheses are eaten.  IS_ATTRIBUTE_LIST is id_attr
6051    if we are parsing an attribute list for an attribute that wants a
6052    plain identifier argument, normal_attr for an attribute that wants
6053    an expression, or non_attr if we aren't parsing an attribute list.  If
6054    NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P indicates whether or
6055    not all of the expressions in the list were constant.  */
6056
6057 static VEC(tree,gc) *
6058 cp_parser_parenthesized_expression_list (cp_parser* parser,
6059                                          int is_attribute_list,
6060                                          bool cast_p,
6061                                          bool allow_expansion_p,
6062                                          bool *non_constant_p)
6063 {
6064   VEC(tree,gc) *expression_list;
6065   bool fold_expr_p = is_attribute_list != non_attr;
6066   tree identifier = NULL_TREE;
6067   bool saved_greater_than_is_operator_p;
6068
6069   /* Assume all the expressions will be constant.  */
6070   if (non_constant_p)
6071     *non_constant_p = false;
6072
6073   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
6074     return NULL;
6075
6076   expression_list = make_tree_vector ();
6077
6078   /* Within a parenthesized expression, a `>' token is always
6079      the greater-than operator.  */
6080   saved_greater_than_is_operator_p
6081     = parser->greater_than_is_operator_p;
6082   parser->greater_than_is_operator_p = true;
6083
6084   /* Consume expressions until there are no more.  */
6085   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
6086     while (true)
6087       {
6088         tree expr;
6089
6090         /* At the beginning of attribute lists, check to see if the
6091            next token is an identifier.  */
6092         if (is_attribute_list == id_attr
6093             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
6094           {
6095             cp_token *token;
6096
6097             /* Consume the identifier.  */
6098             token = cp_lexer_consume_token (parser->lexer);
6099             /* Save the identifier.  */
6100             identifier = token->u.value;
6101           }
6102         else
6103           {
6104             bool expr_non_constant_p;
6105
6106             /* Parse the next assignment-expression.  */
6107             if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6108               {
6109                 /* A braced-init-list.  */
6110                 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6111                 expr = cp_parser_braced_list (parser, &expr_non_constant_p);
6112                 if (non_constant_p && expr_non_constant_p)
6113                   *non_constant_p = true;
6114               }
6115             else if (non_constant_p)
6116               {
6117                 expr = (cp_parser_constant_expression
6118                         (parser, /*allow_non_constant_p=*/true,
6119                          &expr_non_constant_p));
6120                 if (expr_non_constant_p)
6121                   *non_constant_p = true;
6122               }
6123             else
6124               expr = cp_parser_assignment_expression (parser, cast_p, NULL);
6125
6126             if (fold_expr_p)
6127               expr = fold_non_dependent_expr (expr);
6128
6129             /* If we have an ellipsis, then this is an expression
6130                expansion.  */
6131             if (allow_expansion_p
6132                 && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
6133               {
6134                 /* Consume the `...'.  */
6135                 cp_lexer_consume_token (parser->lexer);
6136
6137                 /* Build the argument pack.  */
6138                 expr = make_pack_expansion (expr);
6139               }
6140
6141              /* Add it to the list.  We add error_mark_node
6142                 expressions to the list, so that we can still tell if
6143                 the correct form for a parenthesized expression-list
6144                 is found. That gives better errors.  */
6145             VEC_safe_push (tree, gc, expression_list, expr);
6146
6147             if (expr == error_mark_node)
6148               goto skip_comma;
6149           }
6150
6151         /* After the first item, attribute lists look the same as
6152            expression lists.  */
6153         is_attribute_list = non_attr;
6154
6155       get_comma:;
6156         /* If the next token isn't a `,', then we are done.  */
6157         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
6158           break;
6159
6160         /* Otherwise, consume the `,' and keep going.  */
6161         cp_lexer_consume_token (parser->lexer);
6162       }
6163
6164   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
6165     {
6166       int ending;
6167
6168     skip_comma:;
6169       /* We try and resync to an unnested comma, as that will give the
6170          user better diagnostics.  */
6171       ending = cp_parser_skip_to_closing_parenthesis (parser,
6172                                                       /*recovering=*/true,
6173                                                       /*or_comma=*/true,
6174                                                       /*consume_paren=*/true);
6175       if (ending < 0)
6176         goto get_comma;
6177       if (!ending)
6178         {
6179           parser->greater_than_is_operator_p
6180             = saved_greater_than_is_operator_p;
6181           return NULL;
6182         }
6183     }
6184
6185   parser->greater_than_is_operator_p
6186     = saved_greater_than_is_operator_p;
6187
6188   if (identifier)
6189     VEC_safe_insert (tree, gc, expression_list, 0, identifier);
6190
6191   return expression_list;
6192 }
6193
6194 /* Parse a pseudo-destructor-name.
6195
6196    pseudo-destructor-name:
6197      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
6198      :: [opt] nested-name-specifier template template-id :: ~ type-name
6199      :: [opt] nested-name-specifier [opt] ~ type-name
6200
6201    If either of the first two productions is used, sets *SCOPE to the
6202    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
6203    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
6204    or ERROR_MARK_NODE if the parse fails.  */
6205
6206 static void
6207 cp_parser_pseudo_destructor_name (cp_parser* parser,
6208                                   tree* scope,
6209                                   tree* type)
6210 {
6211   bool nested_name_specifier_p;
6212
6213   /* Assume that things will not work out.  */
6214   *type = error_mark_node;
6215
6216   /* Look for the optional `::' operator.  */
6217   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
6218   /* Look for the optional nested-name-specifier.  */
6219   nested_name_specifier_p
6220     = (cp_parser_nested_name_specifier_opt (parser,
6221                                             /*typename_keyword_p=*/false,
6222                                             /*check_dependency_p=*/true,
6223                                             /*type_p=*/false,
6224                                             /*is_declaration=*/false)
6225        != NULL_TREE);
6226   /* Now, if we saw a nested-name-specifier, we might be doing the
6227      second production.  */
6228   if (nested_name_specifier_p
6229       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
6230     {
6231       /* Consume the `template' keyword.  */
6232       cp_lexer_consume_token (parser->lexer);
6233       /* Parse the template-id.  */
6234       cp_parser_template_id (parser,
6235                              /*template_keyword_p=*/true,
6236                              /*check_dependency_p=*/false,
6237                              /*is_declaration=*/true);
6238       /* Look for the `::' token.  */
6239       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
6240     }
6241   /* If the next token is not a `~', then there might be some
6242      additional qualification.  */
6243   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
6244     {
6245       /* At this point, we're looking for "type-name :: ~".  The type-name
6246          must not be a class-name, since this is a pseudo-destructor.  So,
6247          it must be either an enum-name, or a typedef-name -- both of which
6248          are just identifiers.  So, we peek ahead to check that the "::"
6249          and "~" tokens are present; if they are not, then we can avoid
6250          calling type_name.  */
6251       if (cp_lexer_peek_token (parser->lexer)->type != CPP_NAME
6252           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE
6253           || cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_COMPL)
6254         {
6255           cp_parser_error (parser, "non-scalar type");
6256           return;
6257         }
6258
6259       /* Look for the type-name.  */
6260       *scope = TREE_TYPE (cp_parser_nonclass_name (parser));
6261       if (*scope == error_mark_node)
6262         return;
6263
6264       /* Look for the `::' token.  */
6265       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
6266     }
6267   else
6268     *scope = NULL_TREE;
6269
6270   /* Look for the `~'.  */
6271   cp_parser_require (parser, CPP_COMPL, RT_COMPL);
6272
6273   /* Once we see the ~, this has to be a pseudo-destructor.  */
6274   if (!processing_template_decl && !cp_parser_error_occurred (parser))
6275     cp_parser_commit_to_tentative_parse (parser);
6276
6277   /* Look for the type-name again.  We are not responsible for
6278      checking that it matches the first type-name.  */
6279   *type = cp_parser_nonclass_name (parser);
6280 }
6281
6282 /* Parse a unary-expression.
6283
6284    unary-expression:
6285      postfix-expression
6286      ++ cast-expression
6287      -- cast-expression
6288      unary-operator cast-expression
6289      sizeof unary-expression
6290      sizeof ( type-id )
6291      alignof ( type-id )  [C++0x]
6292      new-expression
6293      delete-expression
6294
6295    GNU Extensions:
6296
6297    unary-expression:
6298      __extension__ cast-expression
6299      __alignof__ unary-expression
6300      __alignof__ ( type-id )
6301      alignof unary-expression  [C++0x]
6302      __real__ cast-expression
6303      __imag__ cast-expression
6304      && identifier
6305
6306    ADDRESS_P is true iff the unary-expression is appearing as the
6307    operand of the `&' operator.   CAST_P is true if this expression is
6308    the target of a cast.
6309
6310    Returns a representation of the expression.  */
6311
6312 static tree
6313 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p,
6314                             cp_id_kind * pidk)
6315 {
6316   cp_token *token;
6317   enum tree_code unary_operator;
6318
6319   /* Peek at the next token.  */
6320   token = cp_lexer_peek_token (parser->lexer);
6321   /* Some keywords give away the kind of expression.  */
6322   if (token->type == CPP_KEYWORD)
6323     {
6324       enum rid keyword = token->keyword;
6325
6326       switch (keyword)
6327         {
6328         case RID_ALIGNOF:
6329         case RID_SIZEOF:
6330           {
6331             tree operand;
6332             enum tree_code op;
6333
6334             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
6335             /* Consume the token.  */
6336             cp_lexer_consume_token (parser->lexer);
6337             /* Parse the operand.  */
6338             operand = cp_parser_sizeof_operand (parser, keyword);
6339
6340             if (TYPE_P (operand))
6341               return cxx_sizeof_or_alignof_type (operand, op, true);
6342             else
6343               {
6344                 /* ISO C++ defines alignof only with types, not with
6345                    expressions. So pedwarn if alignof is used with a non-
6346                    type expression. However, __alignof__ is ok.  */
6347                 if (!strcmp (IDENTIFIER_POINTER (token->u.value), "alignof"))
6348                   pedwarn (token->location, OPT_pedantic,
6349                            "ISO C++ does not allow %<alignof%> "
6350                            "with a non-type");
6351
6352                 return cxx_sizeof_or_alignof_expr (operand, op, true);
6353               }
6354           }
6355
6356         case RID_NEW:
6357           return cp_parser_new_expression (parser);
6358
6359         case RID_DELETE:
6360           return cp_parser_delete_expression (parser);
6361
6362         case RID_EXTENSION:
6363           {
6364             /* The saved value of the PEDANTIC flag.  */
6365             int saved_pedantic;
6366             tree expr;
6367
6368             /* Save away the PEDANTIC flag.  */
6369             cp_parser_extension_opt (parser, &saved_pedantic);
6370             /* Parse the cast-expression.  */
6371             expr = cp_parser_simple_cast_expression (parser);
6372             /* Restore the PEDANTIC flag.  */
6373             pedantic = saved_pedantic;
6374
6375             return expr;
6376           }
6377
6378         case RID_REALPART:
6379         case RID_IMAGPART:
6380           {
6381             tree expression;
6382
6383             /* Consume the `__real__' or `__imag__' token.  */
6384             cp_lexer_consume_token (parser->lexer);
6385             /* Parse the cast-expression.  */
6386             expression = cp_parser_simple_cast_expression (parser);
6387             /* Create the complete representation.  */
6388             return build_x_unary_op ((keyword == RID_REALPART
6389                                       ? REALPART_EXPR : IMAGPART_EXPR),
6390                                      expression,
6391                                      tf_warning_or_error);
6392           }
6393           break;
6394
6395         case RID_TRANSACTION_ATOMIC:
6396         case RID_TRANSACTION_RELAXED:
6397           return cp_parser_transaction_expression (parser, keyword);
6398
6399         case RID_NOEXCEPT:
6400           {
6401             tree expr;
6402             const char *saved_message;
6403             bool saved_integral_constant_expression_p;
6404             bool saved_non_integral_constant_expression_p;
6405             bool saved_greater_than_is_operator_p;
6406
6407             cp_lexer_consume_token (parser->lexer);
6408             cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
6409
6410             saved_message = parser->type_definition_forbidden_message;
6411             parser->type_definition_forbidden_message
6412               = G_("types may not be defined in %<noexcept%> expressions");
6413
6414             saved_integral_constant_expression_p
6415               = parser->integral_constant_expression_p;
6416             saved_non_integral_constant_expression_p
6417               = parser->non_integral_constant_expression_p;
6418             parser->integral_constant_expression_p = false;
6419
6420             saved_greater_than_is_operator_p
6421               = parser->greater_than_is_operator_p;
6422             parser->greater_than_is_operator_p = true;
6423
6424             ++cp_unevaluated_operand;
6425             ++c_inhibit_evaluation_warnings;
6426             expr = cp_parser_expression (parser, false, NULL);
6427             --c_inhibit_evaluation_warnings;
6428             --cp_unevaluated_operand;
6429
6430             parser->greater_than_is_operator_p
6431               = saved_greater_than_is_operator_p;
6432
6433             parser->integral_constant_expression_p
6434               = saved_integral_constant_expression_p;
6435             parser->non_integral_constant_expression_p
6436               = saved_non_integral_constant_expression_p;
6437
6438             parser->type_definition_forbidden_message = saved_message;
6439
6440             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
6441             return finish_noexcept_expr (expr, tf_warning_or_error);
6442           }
6443
6444         default:
6445           break;
6446         }
6447     }
6448
6449   /* Look for the `:: new' and `:: delete', which also signal the
6450      beginning of a new-expression, or delete-expression,
6451      respectively.  If the next token is `::', then it might be one of
6452      these.  */
6453   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
6454     {
6455       enum rid keyword;
6456
6457       /* See if the token after the `::' is one of the keywords in
6458          which we're interested.  */
6459       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
6460       /* If it's `new', we have a new-expression.  */
6461       if (keyword == RID_NEW)
6462         return cp_parser_new_expression (parser);
6463       /* Similarly, for `delete'.  */
6464       else if (keyword == RID_DELETE)
6465         return cp_parser_delete_expression (parser);
6466     }
6467
6468   /* Look for a unary operator.  */
6469   unary_operator = cp_parser_unary_operator (token);
6470   /* The `++' and `--' operators can be handled similarly, even though
6471      they are not technically unary-operators in the grammar.  */
6472   if (unary_operator == ERROR_MARK)
6473     {
6474       if (token->type == CPP_PLUS_PLUS)
6475         unary_operator = PREINCREMENT_EXPR;
6476       else if (token->type == CPP_MINUS_MINUS)
6477         unary_operator = PREDECREMENT_EXPR;
6478       /* Handle the GNU address-of-label extension.  */
6479       else if (cp_parser_allow_gnu_extensions_p (parser)
6480                && token->type == CPP_AND_AND)
6481         {
6482           tree identifier;
6483           tree expression;
6484           location_t loc = cp_lexer_peek_token (parser->lexer)->location;
6485
6486           /* Consume the '&&' token.  */
6487           cp_lexer_consume_token (parser->lexer);
6488           /* Look for the identifier.  */
6489           identifier = cp_parser_identifier (parser);
6490           /* Create an expression representing the address.  */
6491           expression = finish_label_address_expr (identifier, loc);
6492           if (cp_parser_non_integral_constant_expression (parser,
6493                                                           NIC_ADDR_LABEL))
6494             expression = error_mark_node;
6495           return expression;
6496         }
6497     }
6498   if (unary_operator != ERROR_MARK)
6499     {
6500       tree cast_expression;
6501       tree expression = error_mark_node;
6502       non_integral_constant non_constant_p = NIC_NONE;
6503
6504       /* Consume the operator token.  */
6505       token = cp_lexer_consume_token (parser->lexer);
6506       /* Parse the cast-expression.  */
6507       cast_expression
6508         = cp_parser_cast_expression (parser,
6509                                      unary_operator == ADDR_EXPR,
6510                                      /*cast_p=*/false, pidk);
6511       /* Now, build an appropriate representation.  */
6512       switch (unary_operator)
6513         {
6514         case INDIRECT_REF:
6515           non_constant_p = NIC_STAR;
6516           expression = build_x_indirect_ref (cast_expression, RO_UNARY_STAR,
6517                                              tf_warning_or_error);
6518           break;
6519
6520         case ADDR_EXPR:
6521            non_constant_p = NIC_ADDR;
6522           /* Fall through.  */
6523         case BIT_NOT_EXPR:
6524           expression = build_x_unary_op (unary_operator, cast_expression,
6525                                          tf_warning_or_error);
6526           break;
6527
6528         case PREINCREMENT_EXPR:
6529         case PREDECREMENT_EXPR:
6530           non_constant_p = unary_operator == PREINCREMENT_EXPR
6531                            ? NIC_PREINCREMENT : NIC_PREDECREMENT;
6532           /* Fall through.  */
6533         case UNARY_PLUS_EXPR:
6534         case NEGATE_EXPR:
6535         case TRUTH_NOT_EXPR:
6536           expression = finish_unary_op_expr (unary_operator, cast_expression);
6537           break;
6538
6539         default:
6540           gcc_unreachable ();
6541         }
6542
6543       if (non_constant_p != NIC_NONE
6544           && cp_parser_non_integral_constant_expression (parser,
6545                                                          non_constant_p))
6546         expression = error_mark_node;
6547
6548       return expression;
6549     }
6550
6551   return cp_parser_postfix_expression (parser, address_p, cast_p,
6552                                        /*member_access_only_p=*/false,
6553                                        pidk);
6554 }
6555
6556 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
6557    unary-operator, the corresponding tree code is returned.  */
6558
6559 static enum tree_code
6560 cp_parser_unary_operator (cp_token* token)
6561 {
6562   switch (token->type)
6563     {
6564     case CPP_MULT:
6565       return INDIRECT_REF;
6566
6567     case CPP_AND:
6568       return ADDR_EXPR;
6569
6570     case CPP_PLUS:
6571       return UNARY_PLUS_EXPR;
6572
6573     case CPP_MINUS:
6574       return NEGATE_EXPR;
6575
6576     case CPP_NOT:
6577       return TRUTH_NOT_EXPR;
6578
6579     case CPP_COMPL:
6580       return BIT_NOT_EXPR;
6581
6582     default:
6583       return ERROR_MARK;
6584     }
6585 }
6586
6587 /* Parse a new-expression.
6588
6589    new-expression:
6590      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
6591      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
6592
6593    Returns a representation of the expression.  */
6594
6595 static tree
6596 cp_parser_new_expression (cp_parser* parser)
6597 {
6598   bool global_scope_p;
6599   VEC(tree,gc) *placement;
6600   tree type;
6601   VEC(tree,gc) *initializer;
6602   tree nelts;
6603   tree ret;
6604
6605   /* Look for the optional `::' operator.  */
6606   global_scope_p
6607     = (cp_parser_global_scope_opt (parser,
6608                                    /*current_scope_valid_p=*/false)
6609        != NULL_TREE);
6610   /* Look for the `new' operator.  */
6611   cp_parser_require_keyword (parser, RID_NEW, RT_NEW);
6612   /* There's no easy way to tell a new-placement from the
6613      `( type-id )' construct.  */
6614   cp_parser_parse_tentatively (parser);
6615   /* Look for a new-placement.  */
6616   placement = cp_parser_new_placement (parser);
6617   /* If that didn't work out, there's no new-placement.  */
6618   if (!cp_parser_parse_definitely (parser))
6619     {
6620       if (placement != NULL)
6621         release_tree_vector (placement);
6622       placement = NULL;
6623     }
6624
6625   /* If the next token is a `(', then we have a parenthesized
6626      type-id.  */
6627   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
6628     {
6629       cp_token *token;
6630       /* Consume the `('.  */
6631       cp_lexer_consume_token (parser->lexer);
6632       /* Parse the type-id.  */
6633       type = cp_parser_type_id (parser);
6634       /* Look for the closing `)'.  */
6635       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
6636       token = cp_lexer_peek_token (parser->lexer);
6637       /* There should not be a direct-new-declarator in this production,
6638          but GCC used to allowed this, so we check and emit a sensible error
6639          message for this case.  */
6640       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6641         {
6642           error_at (token->location,
6643                     "array bound forbidden after parenthesized type-id");
6644           inform (token->location, 
6645                   "try removing the parentheses around the type-id");
6646           cp_parser_direct_new_declarator (parser);
6647         }
6648       nelts = NULL_TREE;
6649     }
6650   /* Otherwise, there must be a new-type-id.  */
6651   else
6652     type = cp_parser_new_type_id (parser, &nelts);
6653
6654   /* If the next token is a `(' or '{', then we have a new-initializer.  */
6655   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
6656       || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6657     initializer = cp_parser_new_initializer (parser);
6658   else
6659     initializer = NULL;
6660
6661   /* A new-expression may not appear in an integral constant
6662      expression.  */
6663   if (cp_parser_non_integral_constant_expression (parser, NIC_NEW))
6664     ret = error_mark_node;
6665   else
6666     {
6667       /* Create a representation of the new-expression.  */
6668       ret = build_new (&placement, type, nelts, &initializer, global_scope_p,
6669                        tf_warning_or_error);
6670     }
6671
6672   if (placement != NULL)
6673     release_tree_vector (placement);
6674   if (initializer != NULL)
6675     release_tree_vector (initializer);
6676
6677   return ret;
6678 }
6679
6680 /* Parse a new-placement.
6681
6682    new-placement:
6683      ( expression-list )
6684
6685    Returns the same representation as for an expression-list.  */
6686
6687 static VEC(tree,gc) *
6688 cp_parser_new_placement (cp_parser* parser)
6689 {
6690   VEC(tree,gc) *expression_list;
6691
6692   /* Parse the expression-list.  */
6693   expression_list = (cp_parser_parenthesized_expression_list
6694                      (parser, non_attr, /*cast_p=*/false,
6695                       /*allow_expansion_p=*/true,
6696                       /*non_constant_p=*/NULL));
6697
6698   return expression_list;
6699 }
6700
6701 /* Parse a new-type-id.
6702
6703    new-type-id:
6704      type-specifier-seq new-declarator [opt]
6705
6706    Returns the TYPE allocated.  If the new-type-id indicates an array
6707    type, *NELTS is set to the number of elements in the last array
6708    bound; the TYPE will not include the last array bound.  */
6709
6710 static tree
6711 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
6712 {
6713   cp_decl_specifier_seq type_specifier_seq;
6714   cp_declarator *new_declarator;
6715   cp_declarator *declarator;
6716   cp_declarator *outer_declarator;
6717   const char *saved_message;
6718   tree type;
6719
6720   /* The type-specifier sequence must not contain type definitions.
6721      (It cannot contain declarations of new types either, but if they
6722      are not definitions we will catch that because they are not
6723      complete.)  */
6724   saved_message = parser->type_definition_forbidden_message;
6725   parser->type_definition_forbidden_message
6726     = G_("types may not be defined in a new-type-id");
6727   /* Parse the type-specifier-seq.  */
6728   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
6729                                 /*is_trailing_return=*/false,
6730                                 &type_specifier_seq);
6731   /* Restore the old message.  */
6732   parser->type_definition_forbidden_message = saved_message;
6733   /* Parse the new-declarator.  */
6734   new_declarator = cp_parser_new_declarator_opt (parser);
6735
6736   /* Determine the number of elements in the last array dimension, if
6737      any.  */
6738   *nelts = NULL_TREE;
6739   /* Skip down to the last array dimension.  */
6740   declarator = new_declarator;
6741   outer_declarator = NULL;
6742   while (declarator && (declarator->kind == cdk_pointer
6743                         || declarator->kind == cdk_ptrmem))
6744     {
6745       outer_declarator = declarator;
6746       declarator = declarator->declarator;
6747     }
6748   while (declarator
6749          && declarator->kind == cdk_array
6750          && declarator->declarator
6751          && declarator->declarator->kind == cdk_array)
6752     {
6753       outer_declarator = declarator;
6754       declarator = declarator->declarator;
6755     }
6756
6757   if (declarator && declarator->kind == cdk_array)
6758     {
6759       *nelts = declarator->u.array.bounds;
6760       if (*nelts == error_mark_node)
6761         *nelts = integer_one_node;
6762
6763       if (outer_declarator)
6764         outer_declarator->declarator = declarator->declarator;
6765       else
6766         new_declarator = NULL;
6767     }
6768
6769   type = groktypename (&type_specifier_seq, new_declarator, false);
6770   return type;
6771 }
6772
6773 /* Parse an (optional) new-declarator.
6774
6775    new-declarator:
6776      ptr-operator new-declarator [opt]
6777      direct-new-declarator
6778
6779    Returns the declarator.  */
6780
6781 static cp_declarator *
6782 cp_parser_new_declarator_opt (cp_parser* parser)
6783 {
6784   enum tree_code code;
6785   tree type;
6786   cp_cv_quals cv_quals;
6787
6788   /* We don't know if there's a ptr-operator next, or not.  */
6789   cp_parser_parse_tentatively (parser);
6790   /* Look for a ptr-operator.  */
6791   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
6792   /* If that worked, look for more new-declarators.  */
6793   if (cp_parser_parse_definitely (parser))
6794     {
6795       cp_declarator *declarator;
6796
6797       /* Parse another optional declarator.  */
6798       declarator = cp_parser_new_declarator_opt (parser);
6799
6800       return cp_parser_make_indirect_declarator
6801         (code, type, cv_quals, declarator);
6802     }
6803
6804   /* If the next token is a `[', there is a direct-new-declarator.  */
6805   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6806     return cp_parser_direct_new_declarator (parser);
6807
6808   return NULL;
6809 }
6810
6811 /* Parse a direct-new-declarator.
6812
6813    direct-new-declarator:
6814      [ expression ]
6815      direct-new-declarator [constant-expression]
6816
6817    */
6818
6819 static cp_declarator *
6820 cp_parser_direct_new_declarator (cp_parser* parser)
6821 {
6822   cp_declarator *declarator = NULL;
6823
6824   while (true)
6825     {
6826       tree expression;
6827
6828       /* Look for the opening `['.  */
6829       cp_parser_require (parser, CPP_OPEN_SQUARE, RT_OPEN_SQUARE);
6830       /* The first expression is not required to be constant.  */
6831       if (!declarator)
6832         {
6833           cp_token *token = cp_lexer_peek_token (parser->lexer);
6834           expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
6835           /* The standard requires that the expression have integral
6836              type.  DR 74 adds enumeration types.  We believe that the
6837              real intent is that these expressions be handled like the
6838              expression in a `switch' condition, which also allows
6839              classes with a single conversion to integral or
6840              enumeration type.  */
6841           if (!processing_template_decl)
6842             {
6843               expression
6844                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
6845                                               expression,
6846                                               /*complain=*/true);
6847               if (!expression)
6848                 {
6849                   error_at (token->location,
6850                             "expression in new-declarator must have integral "
6851                             "or enumeration type");
6852                   expression = error_mark_node;
6853                 }
6854             }
6855         }
6856       /* But all the other expressions must be.  */
6857       else
6858         expression
6859           = cp_parser_constant_expression (parser,
6860                                            /*allow_non_constant=*/false,
6861                                            NULL);
6862       /* Look for the closing `]'.  */
6863       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
6864
6865       /* Add this bound to the declarator.  */
6866       declarator = make_array_declarator (declarator, expression);
6867
6868       /* If the next token is not a `[', then there are no more
6869          bounds.  */
6870       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
6871         break;
6872     }
6873
6874   return declarator;
6875 }
6876
6877 /* Parse a new-initializer.
6878
6879    new-initializer:
6880      ( expression-list [opt] )
6881      braced-init-list
6882
6883    Returns a representation of the expression-list.  */
6884
6885 static VEC(tree,gc) *
6886 cp_parser_new_initializer (cp_parser* parser)
6887 {
6888   VEC(tree,gc) *expression_list;
6889
6890   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6891     {
6892       tree t;
6893       bool expr_non_constant_p;
6894       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6895       t = cp_parser_braced_list (parser, &expr_non_constant_p);
6896       CONSTRUCTOR_IS_DIRECT_INIT (t) = 1;
6897       expression_list = make_tree_vector_single (t);
6898     }
6899   else
6900     expression_list = (cp_parser_parenthesized_expression_list
6901                        (parser, non_attr, /*cast_p=*/false,
6902                         /*allow_expansion_p=*/true,
6903                         /*non_constant_p=*/NULL));
6904
6905   return expression_list;
6906 }
6907
6908 /* Parse a delete-expression.
6909
6910    delete-expression:
6911      :: [opt] delete cast-expression
6912      :: [opt] delete [ ] cast-expression
6913
6914    Returns a representation of the expression.  */
6915
6916 static tree
6917 cp_parser_delete_expression (cp_parser* parser)
6918 {
6919   bool global_scope_p;
6920   bool array_p;
6921   tree expression;
6922
6923   /* Look for the optional `::' operator.  */
6924   global_scope_p
6925     = (cp_parser_global_scope_opt (parser,
6926                                    /*current_scope_valid_p=*/false)
6927        != NULL_TREE);
6928   /* Look for the `delete' keyword.  */
6929   cp_parser_require_keyword (parser, RID_DELETE, RT_DELETE);
6930   /* See if the array syntax is in use.  */
6931   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6932     {
6933       /* Consume the `[' token.  */
6934       cp_lexer_consume_token (parser->lexer);
6935       /* Look for the `]' token.  */
6936       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
6937       /* Remember that this is the `[]' construct.  */
6938       array_p = true;
6939     }
6940   else
6941     array_p = false;
6942
6943   /* Parse the cast-expression.  */
6944   expression = cp_parser_simple_cast_expression (parser);
6945
6946   /* A delete-expression may not appear in an integral constant
6947      expression.  */
6948   if (cp_parser_non_integral_constant_expression (parser, NIC_DEL))
6949     return error_mark_node;
6950
6951   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p,
6952                         tf_warning_or_error);
6953 }
6954
6955 /* Returns true if TOKEN may start a cast-expression and false
6956    otherwise.  */
6957
6958 static bool
6959 cp_parser_token_starts_cast_expression (cp_token *token)
6960 {
6961   switch (token->type)
6962     {
6963     case CPP_COMMA:
6964     case CPP_SEMICOLON:
6965     case CPP_QUERY:
6966     case CPP_COLON:
6967     case CPP_CLOSE_SQUARE:
6968     case CPP_CLOSE_PAREN:
6969     case CPP_CLOSE_BRACE:
6970     case CPP_DOT:
6971     case CPP_DOT_STAR:
6972     case CPP_DEREF:
6973     case CPP_DEREF_STAR:
6974     case CPP_DIV:
6975     case CPP_MOD:
6976     case CPP_LSHIFT:
6977     case CPP_RSHIFT:
6978     case CPP_LESS:
6979     case CPP_GREATER:
6980     case CPP_LESS_EQ:
6981     case CPP_GREATER_EQ:
6982     case CPP_EQ_EQ:
6983     case CPP_NOT_EQ:
6984     case CPP_EQ:
6985     case CPP_MULT_EQ:
6986     case CPP_DIV_EQ:
6987     case CPP_MOD_EQ:
6988     case CPP_PLUS_EQ:
6989     case CPP_MINUS_EQ:
6990     case CPP_RSHIFT_EQ:
6991     case CPP_LSHIFT_EQ:
6992     case CPP_AND_EQ:
6993     case CPP_XOR_EQ:
6994     case CPP_OR_EQ:
6995     case CPP_XOR:
6996     case CPP_OR:
6997     case CPP_OR_OR:
6998     case CPP_EOF:
6999       return false;
7000
7001       /* '[' may start a primary-expression in obj-c++.  */
7002     case CPP_OPEN_SQUARE:
7003       return c_dialect_objc ();
7004
7005     default:
7006       return true;
7007     }
7008 }
7009
7010 /* Parse a cast-expression.
7011
7012    cast-expression:
7013      unary-expression
7014      ( type-id ) cast-expression
7015
7016    ADDRESS_P is true iff the unary-expression is appearing as the
7017    operand of the `&' operator.   CAST_P is true if this expression is
7018    the target of a cast.
7019
7020    Returns a representation of the expression.  */
7021
7022 static tree
7023 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p,
7024                            cp_id_kind * pidk)
7025 {
7026   /* If it's a `(', then we might be looking at a cast.  */
7027   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
7028     {
7029       tree type = NULL_TREE;
7030       tree expr = NULL_TREE;
7031       bool compound_literal_p;
7032       const char *saved_message;
7033
7034       /* There's no way to know yet whether or not this is a cast.
7035          For example, `(int (3))' is a unary-expression, while `(int)
7036          3' is a cast.  So, we resort to parsing tentatively.  */
7037       cp_parser_parse_tentatively (parser);
7038       /* Types may not be defined in a cast.  */
7039       saved_message = parser->type_definition_forbidden_message;
7040       parser->type_definition_forbidden_message
7041         = G_("types may not be defined in casts");
7042       /* Consume the `('.  */
7043       cp_lexer_consume_token (parser->lexer);
7044       /* A very tricky bit is that `(struct S) { 3 }' is a
7045          compound-literal (which we permit in C++ as an extension).
7046          But, that construct is not a cast-expression -- it is a
7047          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
7048          is legal; if the compound-literal were a cast-expression,
7049          you'd need an extra set of parentheses.)  But, if we parse
7050          the type-id, and it happens to be a class-specifier, then we
7051          will commit to the parse at that point, because we cannot
7052          undo the action that is done when creating a new class.  So,
7053          then we cannot back up and do a postfix-expression.
7054
7055          Therefore, we scan ahead to the closing `)', and check to see
7056          if the token after the `)' is a `{'.  If so, we are not
7057          looking at a cast-expression.
7058
7059          Save tokens so that we can put them back.  */
7060       cp_lexer_save_tokens (parser->lexer);
7061       /* Skip tokens until the next token is a closing parenthesis.
7062          If we find the closing `)', and the next token is a `{', then
7063          we are looking at a compound-literal.  */
7064       compound_literal_p
7065         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
7066                                                   /*consume_paren=*/true)
7067            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
7068       /* Roll back the tokens we skipped.  */
7069       cp_lexer_rollback_tokens (parser->lexer);
7070       /* If we were looking at a compound-literal, simulate an error
7071          so that the call to cp_parser_parse_definitely below will
7072          fail.  */
7073       if (compound_literal_p)
7074         cp_parser_simulate_error (parser);
7075       else
7076         {
7077           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
7078           parser->in_type_id_in_expr_p = true;
7079           /* Look for the type-id.  */
7080           type = cp_parser_type_id (parser);
7081           /* Look for the closing `)'.  */
7082           cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7083           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
7084         }
7085
7086       /* Restore the saved message.  */
7087       parser->type_definition_forbidden_message = saved_message;
7088
7089       /* At this point this can only be either a cast or a
7090          parenthesized ctor such as `(T ())' that looks like a cast to
7091          function returning T.  */
7092       if (!cp_parser_error_occurred (parser)
7093           && cp_parser_token_starts_cast_expression (cp_lexer_peek_token
7094                                                      (parser->lexer)))
7095         {
7096           cp_parser_parse_definitely (parser);
7097           expr = cp_parser_cast_expression (parser,
7098                                             /*address_p=*/false,
7099                                             /*cast_p=*/true, pidk);
7100
7101           /* Warn about old-style casts, if so requested.  */
7102           if (warn_old_style_cast
7103               && !in_system_header
7104               && !VOID_TYPE_P (type)
7105               && current_lang_name != lang_name_c)
7106             warning (OPT_Wold_style_cast, "use of old-style cast");
7107
7108           /* Only type conversions to integral or enumeration types
7109              can be used in constant-expressions.  */
7110           if (!cast_valid_in_integral_constant_expression_p (type)
7111               && cp_parser_non_integral_constant_expression (parser,
7112                                                              NIC_CAST))
7113             return error_mark_node;
7114
7115           /* Perform the cast.  */
7116           expr = build_c_cast (input_location, type, expr);
7117           return expr;
7118         }
7119       else 
7120         cp_parser_abort_tentative_parse (parser);
7121     }
7122
7123   /* If we get here, then it's not a cast, so it must be a
7124      unary-expression.  */
7125   return cp_parser_unary_expression (parser, address_p, cast_p, pidk);
7126 }
7127
7128 /* Parse a binary expression of the general form:
7129
7130    pm-expression:
7131      cast-expression
7132      pm-expression .* cast-expression
7133      pm-expression ->* cast-expression
7134
7135    multiplicative-expression:
7136      pm-expression
7137      multiplicative-expression * pm-expression
7138      multiplicative-expression / pm-expression
7139      multiplicative-expression % pm-expression
7140
7141    additive-expression:
7142      multiplicative-expression
7143      additive-expression + multiplicative-expression
7144      additive-expression - multiplicative-expression
7145
7146    shift-expression:
7147      additive-expression
7148      shift-expression << additive-expression
7149      shift-expression >> additive-expression
7150
7151    relational-expression:
7152      shift-expression
7153      relational-expression < shift-expression
7154      relational-expression > shift-expression
7155      relational-expression <= shift-expression
7156      relational-expression >= shift-expression
7157
7158   GNU Extension:
7159
7160    relational-expression:
7161      relational-expression <? shift-expression
7162      relational-expression >? shift-expression
7163
7164    equality-expression:
7165      relational-expression
7166      equality-expression == relational-expression
7167      equality-expression != relational-expression
7168
7169    and-expression:
7170      equality-expression
7171      and-expression & equality-expression
7172
7173    exclusive-or-expression:
7174      and-expression
7175      exclusive-or-expression ^ and-expression
7176
7177    inclusive-or-expression:
7178      exclusive-or-expression
7179      inclusive-or-expression | exclusive-or-expression
7180
7181    logical-and-expression:
7182      inclusive-or-expression
7183      logical-and-expression && inclusive-or-expression
7184
7185    logical-or-expression:
7186      logical-and-expression
7187      logical-or-expression || logical-and-expression
7188
7189    All these are implemented with a single function like:
7190
7191    binary-expression:
7192      simple-cast-expression
7193      binary-expression <token> binary-expression
7194
7195    CAST_P is true if this expression is the target of a cast.
7196
7197    The binops_by_token map is used to get the tree codes for each <token> type.
7198    binary-expressions are associated according to a precedence table.  */
7199
7200 #define TOKEN_PRECEDENCE(token)                              \
7201 (((token->type == CPP_GREATER                                \
7202    || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT)) \
7203   && !parser->greater_than_is_operator_p)                    \
7204  ? PREC_NOT_OPERATOR                                         \
7205  : binops_by_token[token->type].prec)
7206
7207 static tree
7208 cp_parser_binary_expression (cp_parser* parser, bool cast_p,
7209                              bool no_toplevel_fold_p,
7210                              enum cp_parser_prec prec,
7211                              cp_id_kind * pidk)
7212 {
7213   cp_parser_expression_stack stack;
7214   cp_parser_expression_stack_entry *sp = &stack[0];
7215   tree lhs, rhs;
7216   cp_token *token;
7217   enum tree_code tree_type, lhs_type, rhs_type;
7218   enum cp_parser_prec new_prec, lookahead_prec;
7219   tree overload;
7220
7221   /* Parse the first expression.  */
7222   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p, pidk);
7223   lhs_type = ERROR_MARK;
7224
7225   for (;;)
7226     {
7227       /* Get an operator token.  */
7228       token = cp_lexer_peek_token (parser->lexer);
7229
7230       if (warn_cxx0x_compat
7231           && token->type == CPP_RSHIFT
7232           && !parser->greater_than_is_operator_p)
7233         {
7234           if (warning_at (token->location, OPT_Wc__0x_compat, 
7235                           "%<>>%> operator is treated as"
7236                           " two right angle brackets in C++11"))
7237             inform (token->location,
7238                     "suggest parentheses around %<>>%> expression");
7239         }
7240
7241       new_prec = TOKEN_PRECEDENCE (token);
7242
7243       /* Popping an entry off the stack means we completed a subexpression:
7244          - either we found a token which is not an operator (`>' where it is not
7245            an operator, or prec == PREC_NOT_OPERATOR), in which case popping
7246            will happen repeatedly;
7247          - or, we found an operator which has lower priority.  This is the case
7248            where the recursive descent *ascends*, as in `3 * 4 + 5' after
7249            parsing `3 * 4'.  */
7250       if (new_prec <= prec)
7251         {
7252           if (sp == stack)
7253             break;
7254           else
7255             goto pop;
7256         }
7257
7258      get_rhs:
7259       tree_type = binops_by_token[token->type].tree_type;
7260
7261       /* We used the operator token.  */
7262       cp_lexer_consume_token (parser->lexer);
7263
7264       /* For "false && x" or "true || x", x will never be executed;
7265          disable warnings while evaluating it.  */
7266       if (tree_type == TRUTH_ANDIF_EXPR)
7267         c_inhibit_evaluation_warnings += lhs == truthvalue_false_node;
7268       else if (tree_type == TRUTH_ORIF_EXPR)
7269         c_inhibit_evaluation_warnings += lhs == truthvalue_true_node;
7270
7271       /* Extract another operand.  It may be the RHS of this expression
7272          or the LHS of a new, higher priority expression.  */
7273       rhs = cp_parser_simple_cast_expression (parser);
7274       rhs_type = ERROR_MARK;
7275
7276       /* Get another operator token.  Look up its precedence to avoid
7277          building a useless (immediately popped) stack entry for common
7278          cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
7279       token = cp_lexer_peek_token (parser->lexer);
7280       lookahead_prec = TOKEN_PRECEDENCE (token);
7281       if (lookahead_prec > new_prec)
7282         {
7283           /* ... and prepare to parse the RHS of the new, higher priority
7284              expression.  Since precedence levels on the stack are
7285              monotonically increasing, we do not have to care about
7286              stack overflows.  */
7287           sp->prec = prec;
7288           sp->tree_type = tree_type;
7289           sp->lhs = lhs;
7290           sp->lhs_type = lhs_type;
7291           sp++;
7292           lhs = rhs;
7293           lhs_type = rhs_type;
7294           prec = new_prec;
7295           new_prec = lookahead_prec;
7296           goto get_rhs;
7297
7298          pop:
7299           lookahead_prec = new_prec;
7300           /* If the stack is not empty, we have parsed into LHS the right side
7301              (`4' in the example above) of an expression we had suspended.
7302              We can use the information on the stack to recover the LHS (`3')
7303              from the stack together with the tree code (`MULT_EXPR'), and
7304              the precedence of the higher level subexpression
7305              (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
7306              which will be used to actually build the additive expression.  */
7307           --sp;
7308           prec = sp->prec;
7309           tree_type = sp->tree_type;
7310           rhs = lhs;
7311           rhs_type = lhs_type;
7312           lhs = sp->lhs;
7313           lhs_type = sp->lhs_type;
7314         }
7315
7316       /* Undo the disabling of warnings done above.  */
7317       if (tree_type == TRUTH_ANDIF_EXPR)
7318         c_inhibit_evaluation_warnings -= lhs == truthvalue_false_node;
7319       else if (tree_type == TRUTH_ORIF_EXPR)
7320         c_inhibit_evaluation_warnings -= lhs == truthvalue_true_node;
7321
7322       overload = NULL;
7323       /* ??? Currently we pass lhs_type == ERROR_MARK and rhs_type ==
7324          ERROR_MARK for everything that is not a binary expression.
7325          This makes warn_about_parentheses miss some warnings that
7326          involve unary operators.  For unary expressions we should
7327          pass the correct tree_code unless the unary expression was
7328          surrounded by parentheses.
7329       */
7330       if (no_toplevel_fold_p
7331           && lookahead_prec <= prec
7332           && sp == stack
7333           && TREE_CODE_CLASS (tree_type) == tcc_comparison)
7334         lhs = build2 (tree_type, boolean_type_node, lhs, rhs);
7335       else
7336         lhs = build_x_binary_op (tree_type, lhs, lhs_type, rhs, rhs_type,
7337                                  &overload, tf_warning_or_error);
7338       lhs_type = tree_type;
7339
7340       /* If the binary operator required the use of an overloaded operator,
7341          then this expression cannot be an integral constant-expression.
7342          An overloaded operator can be used even if both operands are
7343          otherwise permissible in an integral constant-expression if at
7344          least one of the operands is of enumeration type.  */
7345
7346       if (overload
7347           && cp_parser_non_integral_constant_expression (parser,
7348                                                          NIC_OVERLOADED))
7349         return error_mark_node;
7350     }
7351
7352   return lhs;
7353 }
7354
7355
7356 /* Parse the `? expression : assignment-expression' part of a
7357    conditional-expression.  The LOGICAL_OR_EXPR is the
7358    logical-or-expression that started the conditional-expression.
7359    Returns a representation of the entire conditional-expression.
7360
7361    This routine is used by cp_parser_assignment_expression.
7362
7363      ? expression : assignment-expression
7364
7365    GNU Extensions:
7366
7367      ? : assignment-expression */
7368
7369 static tree
7370 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
7371 {
7372   tree expr;
7373   tree assignment_expr;
7374   struct cp_token *token;
7375
7376   /* Consume the `?' token.  */
7377   cp_lexer_consume_token (parser->lexer);
7378   token = cp_lexer_peek_token (parser->lexer);
7379   if (cp_parser_allow_gnu_extensions_p (parser)
7380       && token->type == CPP_COLON)
7381     {
7382       pedwarn (token->location, OPT_pedantic, 
7383                "ISO C++ does not allow ?: with omitted middle operand");
7384       /* Implicit true clause.  */
7385       expr = NULL_TREE;
7386       c_inhibit_evaluation_warnings += logical_or_expr == truthvalue_true_node;
7387       warn_for_omitted_condop (token->location, logical_or_expr);
7388     }
7389   else
7390     {
7391       bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
7392       parser->colon_corrects_to_scope_p = false;
7393       /* Parse the expression.  */
7394       c_inhibit_evaluation_warnings += logical_or_expr == truthvalue_false_node;
7395       expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
7396       c_inhibit_evaluation_warnings +=
7397         ((logical_or_expr == truthvalue_true_node)
7398          - (logical_or_expr == truthvalue_false_node));
7399       parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
7400     }
7401
7402   /* The next token should be a `:'.  */
7403   cp_parser_require (parser, CPP_COLON, RT_COLON);
7404   /* Parse the assignment-expression.  */
7405   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
7406   c_inhibit_evaluation_warnings -= logical_or_expr == truthvalue_true_node;
7407
7408   /* Build the conditional-expression.  */
7409   return build_x_conditional_expr (logical_or_expr,
7410                                    expr,
7411                                    assignment_expr,
7412                                    tf_warning_or_error);
7413 }
7414
7415 /* Parse an assignment-expression.
7416
7417    assignment-expression:
7418      conditional-expression
7419      logical-or-expression assignment-operator assignment_expression
7420      throw-expression
7421
7422    CAST_P is true if this expression is the target of a cast.
7423
7424    Returns a representation for the expression.  */
7425
7426 static tree
7427 cp_parser_assignment_expression (cp_parser* parser, bool cast_p,
7428                                  cp_id_kind * pidk)
7429 {
7430   tree expr;
7431
7432   /* If the next token is the `throw' keyword, then we're looking at
7433      a throw-expression.  */
7434   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
7435     expr = cp_parser_throw_expression (parser);
7436   /* Otherwise, it must be that we are looking at a
7437      logical-or-expression.  */
7438   else
7439     {
7440       /* Parse the binary expressions (logical-or-expression).  */
7441       expr = cp_parser_binary_expression (parser, cast_p, false,
7442                                           PREC_NOT_OPERATOR, pidk);
7443       /* If the next token is a `?' then we're actually looking at a
7444          conditional-expression.  */
7445       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
7446         return cp_parser_question_colon_clause (parser, expr);
7447       else
7448         {
7449           enum tree_code assignment_operator;
7450
7451           /* If it's an assignment-operator, we're using the second
7452              production.  */
7453           assignment_operator
7454             = cp_parser_assignment_operator_opt (parser);
7455           if (assignment_operator != ERROR_MARK)
7456             {
7457               bool non_constant_p;
7458
7459               /* Parse the right-hand side of the assignment.  */
7460               tree rhs = cp_parser_initializer_clause (parser, &non_constant_p);
7461
7462               if (BRACE_ENCLOSED_INITIALIZER_P (rhs))
7463                 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
7464
7465               /* An assignment may not appear in a
7466                  constant-expression.  */
7467               if (cp_parser_non_integral_constant_expression (parser,
7468                                                               NIC_ASSIGNMENT))
7469                 return error_mark_node;
7470               /* Build the assignment expression.  */
7471               expr = build_x_modify_expr (expr,
7472                                           assignment_operator,
7473                                           rhs,
7474                                           tf_warning_or_error);
7475             }
7476         }
7477     }
7478
7479   return expr;
7480 }
7481
7482 /* Parse an (optional) assignment-operator.
7483
7484    assignment-operator: one of
7485      = *= /= %= += -= >>= <<= &= ^= |=
7486
7487    GNU Extension:
7488
7489    assignment-operator: one of
7490      <?= >?=
7491
7492    If the next token is an assignment operator, the corresponding tree
7493    code is returned, and the token is consumed.  For example, for
7494    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
7495    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
7496    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
7497    operator, ERROR_MARK is returned.  */
7498
7499 static enum tree_code
7500 cp_parser_assignment_operator_opt (cp_parser* parser)
7501 {
7502   enum tree_code op;
7503   cp_token *token;
7504
7505   /* Peek at the next token.  */
7506   token = cp_lexer_peek_token (parser->lexer);
7507
7508   switch (token->type)
7509     {
7510     case CPP_EQ:
7511       op = NOP_EXPR;
7512       break;
7513
7514     case CPP_MULT_EQ:
7515       op = MULT_EXPR;
7516       break;
7517
7518     case CPP_DIV_EQ:
7519       op = TRUNC_DIV_EXPR;
7520       break;
7521
7522     case CPP_MOD_EQ:
7523       op = TRUNC_MOD_EXPR;
7524       break;
7525
7526     case CPP_PLUS_EQ:
7527       op = PLUS_EXPR;
7528       break;
7529
7530     case CPP_MINUS_EQ:
7531       op = MINUS_EXPR;
7532       break;
7533
7534     case CPP_RSHIFT_EQ:
7535       op = RSHIFT_EXPR;
7536       break;
7537
7538     case CPP_LSHIFT_EQ:
7539       op = LSHIFT_EXPR;
7540       break;
7541
7542     case CPP_AND_EQ:
7543       op = BIT_AND_EXPR;
7544       break;
7545
7546     case CPP_XOR_EQ:
7547       op = BIT_XOR_EXPR;
7548       break;
7549
7550     case CPP_OR_EQ:
7551       op = BIT_IOR_EXPR;
7552       break;
7553
7554     default:
7555       /* Nothing else is an assignment operator.  */
7556       op = ERROR_MARK;
7557     }
7558
7559   /* If it was an assignment operator, consume it.  */
7560   if (op != ERROR_MARK)
7561     cp_lexer_consume_token (parser->lexer);
7562
7563   return op;
7564 }
7565
7566 /* Parse an expression.
7567
7568    expression:
7569      assignment-expression
7570      expression , assignment-expression
7571
7572    CAST_P is true if this expression is the target of a cast.
7573
7574    Returns a representation of the expression.  */
7575
7576 static tree
7577 cp_parser_expression (cp_parser* parser, bool cast_p, cp_id_kind * pidk)
7578 {
7579   tree expression = NULL_TREE;
7580
7581   while (true)
7582     {
7583       tree assignment_expression;
7584
7585       /* Parse the next assignment-expression.  */
7586       assignment_expression
7587         = cp_parser_assignment_expression (parser, cast_p, pidk);
7588       /* If this is the first assignment-expression, we can just
7589          save it away.  */
7590       if (!expression)
7591         expression = assignment_expression;
7592       else
7593         expression = build_x_compound_expr (expression,
7594                                             assignment_expression,
7595                                             tf_warning_or_error);
7596       /* If the next token is not a comma, then we are done with the
7597          expression.  */
7598       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
7599         break;
7600       /* Consume the `,'.  */
7601       cp_lexer_consume_token (parser->lexer);
7602       /* A comma operator cannot appear in a constant-expression.  */
7603       if (cp_parser_non_integral_constant_expression (parser, NIC_COMMA))
7604         expression = error_mark_node;
7605     }
7606
7607   return expression;
7608 }
7609
7610 /* Parse a constant-expression.
7611
7612    constant-expression:
7613      conditional-expression
7614
7615   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
7616   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
7617   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
7618   is false, NON_CONSTANT_P should be NULL.  */
7619
7620 static tree
7621 cp_parser_constant_expression (cp_parser* parser,
7622                                bool allow_non_constant_p,
7623                                bool *non_constant_p)
7624 {
7625   bool saved_integral_constant_expression_p;
7626   bool saved_allow_non_integral_constant_expression_p;
7627   bool saved_non_integral_constant_expression_p;
7628   tree expression;
7629
7630   /* It might seem that we could simply parse the
7631      conditional-expression, and then check to see if it were
7632      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
7633      one that the compiler can figure out is constant, possibly after
7634      doing some simplifications or optimizations.  The standard has a
7635      precise definition of constant-expression, and we must honor
7636      that, even though it is somewhat more restrictive.
7637
7638      For example:
7639
7640        int i[(2, 3)];
7641
7642      is not a legal declaration, because `(2, 3)' is not a
7643      constant-expression.  The `,' operator is forbidden in a
7644      constant-expression.  However, GCC's constant-folding machinery
7645      will fold this operation to an INTEGER_CST for `3'.  */
7646
7647   /* Save the old settings.  */
7648   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
7649   saved_allow_non_integral_constant_expression_p
7650     = parser->allow_non_integral_constant_expression_p;
7651   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
7652   /* We are now parsing a constant-expression.  */
7653   parser->integral_constant_expression_p = true;
7654   parser->allow_non_integral_constant_expression_p
7655     = (allow_non_constant_p || cxx_dialect >= cxx0x);
7656   parser->non_integral_constant_expression_p = false;
7657   /* Although the grammar says "conditional-expression", we parse an
7658      "assignment-expression", which also permits "throw-expression"
7659      and the use of assignment operators.  In the case that
7660      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
7661      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
7662      actually essential that we look for an assignment-expression.
7663      For example, cp_parser_initializer_clauses uses this function to
7664      determine whether a particular assignment-expression is in fact
7665      constant.  */
7666   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
7667   /* Restore the old settings.  */
7668   parser->integral_constant_expression_p
7669     = saved_integral_constant_expression_p;
7670   parser->allow_non_integral_constant_expression_p
7671     = saved_allow_non_integral_constant_expression_p;
7672   if (cxx_dialect >= cxx0x)
7673     {
7674       /* Require an rvalue constant expression here; that's what our
7675          callers expect.  Reference constant expressions are handled
7676          separately in e.g. cp_parser_template_argument.  */
7677       bool is_const = potential_rvalue_constant_expression (expression);
7678       parser->non_integral_constant_expression_p = !is_const;
7679       if (!is_const && !allow_non_constant_p)
7680         require_potential_rvalue_constant_expression (expression);
7681     }
7682   if (allow_non_constant_p)
7683     *non_constant_p = parser->non_integral_constant_expression_p;
7684   parser->non_integral_constant_expression_p
7685     = saved_non_integral_constant_expression_p;
7686
7687   return expression;
7688 }
7689
7690 /* Parse __builtin_offsetof.
7691
7692    offsetof-expression:
7693      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
7694
7695    offsetof-member-designator:
7696      id-expression
7697      | offsetof-member-designator "." id-expression
7698      | offsetof-member-designator "[" expression "]"
7699      | offsetof-member-designator "->" id-expression  */
7700
7701 static tree
7702 cp_parser_builtin_offsetof (cp_parser *parser)
7703 {
7704   int save_ice_p, save_non_ice_p;
7705   tree type, expr;
7706   cp_id_kind dummy;
7707   cp_token *token;
7708
7709   /* We're about to accept non-integral-constant things, but will
7710      definitely yield an integral constant expression.  Save and
7711      restore these values around our local parsing.  */
7712   save_ice_p = parser->integral_constant_expression_p;
7713   save_non_ice_p = parser->non_integral_constant_expression_p;
7714
7715   /* Consume the "__builtin_offsetof" token.  */
7716   cp_lexer_consume_token (parser->lexer);
7717   /* Consume the opening `('.  */
7718   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
7719   /* Parse the type-id.  */
7720   type = cp_parser_type_id (parser);
7721   /* Look for the `,'.  */
7722   cp_parser_require (parser, CPP_COMMA, RT_COMMA);
7723   token = cp_lexer_peek_token (parser->lexer);
7724
7725   /* Build the (type *)null that begins the traditional offsetof macro.  */
7726   expr = build_static_cast (build_pointer_type (type), null_pointer_node,
7727                             tf_warning_or_error);
7728
7729   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
7730   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
7731                                                  true, &dummy, token->location);
7732   while (true)
7733     {
7734       token = cp_lexer_peek_token (parser->lexer);
7735       switch (token->type)
7736         {
7737         case CPP_OPEN_SQUARE:
7738           /* offsetof-member-designator "[" expression "]" */
7739           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
7740           break;
7741
7742         case CPP_DEREF:
7743           /* offsetof-member-designator "->" identifier */
7744           expr = grok_array_decl (expr, integer_zero_node);
7745           /* FALLTHRU */
7746
7747         case CPP_DOT:
7748           /* offsetof-member-designator "." identifier */
7749           cp_lexer_consume_token (parser->lexer);
7750           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT,
7751                                                          expr, true, &dummy,
7752                                                          token->location);
7753           break;
7754
7755         case CPP_CLOSE_PAREN:
7756           /* Consume the ")" token.  */
7757           cp_lexer_consume_token (parser->lexer);
7758           goto success;
7759
7760         default:
7761           /* Error.  We know the following require will fail, but
7762              that gives the proper error message.  */
7763           cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7764           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
7765           expr = error_mark_node;
7766           goto failure;
7767         }
7768     }
7769
7770  success:
7771   /* If we're processing a template, we can't finish the semantics yet.
7772      Otherwise we can fold the entire expression now.  */
7773   if (processing_template_decl)
7774     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
7775   else
7776     expr = finish_offsetof (expr);
7777
7778  failure:
7779   parser->integral_constant_expression_p = save_ice_p;
7780   parser->non_integral_constant_expression_p = save_non_ice_p;
7781
7782   return expr;
7783 }
7784
7785 /* Parse a trait expression.
7786
7787    Returns a representation of the expression, the underlying type
7788    of the type at issue when KEYWORD is RID_UNDERLYING_TYPE.  */
7789
7790 static tree
7791 cp_parser_trait_expr (cp_parser* parser, enum rid keyword)
7792 {
7793   cp_trait_kind kind;
7794   tree type1, type2 = NULL_TREE;
7795   bool binary = false;
7796   cp_decl_specifier_seq decl_specs;
7797
7798   switch (keyword)
7799     {
7800     case RID_HAS_NOTHROW_ASSIGN:
7801       kind = CPTK_HAS_NOTHROW_ASSIGN;
7802       break;
7803     case RID_HAS_NOTHROW_CONSTRUCTOR:
7804       kind = CPTK_HAS_NOTHROW_CONSTRUCTOR;
7805       break;
7806     case RID_HAS_NOTHROW_COPY:
7807       kind = CPTK_HAS_NOTHROW_COPY;
7808       break;
7809     case RID_HAS_TRIVIAL_ASSIGN:
7810       kind = CPTK_HAS_TRIVIAL_ASSIGN;
7811       break;
7812     case RID_HAS_TRIVIAL_CONSTRUCTOR:
7813       kind = CPTK_HAS_TRIVIAL_CONSTRUCTOR;
7814       break;
7815     case RID_HAS_TRIVIAL_COPY:
7816       kind = CPTK_HAS_TRIVIAL_COPY;
7817       break;
7818     case RID_HAS_TRIVIAL_DESTRUCTOR:
7819       kind = CPTK_HAS_TRIVIAL_DESTRUCTOR;
7820       break;
7821     case RID_HAS_VIRTUAL_DESTRUCTOR:
7822       kind = CPTK_HAS_VIRTUAL_DESTRUCTOR;
7823       break;
7824     case RID_IS_ABSTRACT:
7825       kind = CPTK_IS_ABSTRACT;
7826       break;
7827     case RID_IS_BASE_OF:
7828       kind = CPTK_IS_BASE_OF;
7829       binary = true;
7830       break;
7831     case RID_IS_CLASS:
7832       kind = CPTK_IS_CLASS;
7833       break;
7834     case RID_IS_CONVERTIBLE_TO:
7835       kind = CPTK_IS_CONVERTIBLE_TO;
7836       binary = true;
7837       break;
7838     case RID_IS_EMPTY:
7839       kind = CPTK_IS_EMPTY;
7840       break;
7841     case RID_IS_ENUM:
7842       kind = CPTK_IS_ENUM;
7843       break;
7844     case RID_IS_LITERAL_TYPE:
7845       kind = CPTK_IS_LITERAL_TYPE;
7846       break;
7847     case RID_IS_POD:
7848       kind = CPTK_IS_POD;
7849       break;
7850     case RID_IS_POLYMORPHIC:
7851       kind = CPTK_IS_POLYMORPHIC;
7852       break;
7853     case RID_IS_STD_LAYOUT:
7854       kind = CPTK_IS_STD_LAYOUT;
7855       break;
7856     case RID_IS_TRIVIAL:
7857       kind = CPTK_IS_TRIVIAL;
7858       break;
7859     case RID_IS_UNION:
7860       kind = CPTK_IS_UNION;
7861       break;
7862     case RID_UNDERLYING_TYPE:
7863       kind = CPTK_UNDERLYING_TYPE;
7864       break;
7865     case RID_BASES:
7866       kind = CPTK_BASES;
7867       break;
7868     case RID_DIRECT_BASES:
7869       kind = CPTK_DIRECT_BASES;
7870       break;
7871     default:
7872       gcc_unreachable ();
7873     }
7874
7875   /* Consume the token.  */
7876   cp_lexer_consume_token (parser->lexer);
7877
7878   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
7879
7880   type1 = cp_parser_type_id (parser);
7881
7882   if (type1 == error_mark_node)
7883     return error_mark_node;
7884
7885   /* Build a trivial decl-specifier-seq.  */
7886   clear_decl_specs (&decl_specs);
7887   decl_specs.type = type1;
7888
7889   /* Call grokdeclarator to figure out what type this is.  */
7890   type1 = grokdeclarator (NULL, &decl_specs, TYPENAME,
7891                           /*initialized=*/0, /*attrlist=*/NULL);
7892
7893   if (binary)
7894     {
7895       cp_parser_require (parser, CPP_COMMA, RT_COMMA);
7896  
7897       type2 = cp_parser_type_id (parser);
7898
7899       if (type2 == error_mark_node)
7900         return error_mark_node;
7901
7902       /* Build a trivial decl-specifier-seq.  */
7903       clear_decl_specs (&decl_specs);
7904       decl_specs.type = type2;
7905
7906       /* Call grokdeclarator to figure out what type this is.  */
7907       type2 = grokdeclarator (NULL, &decl_specs, TYPENAME,
7908                               /*initialized=*/0, /*attrlist=*/NULL);
7909     }
7910
7911   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7912
7913   /* Complete the trait expression, which may mean either processing
7914      the trait expr now or saving it for template instantiation.  */
7915   switch(kind)
7916     {
7917     case CPTK_UNDERLYING_TYPE:
7918       return finish_underlying_type (type1);
7919     case CPTK_BASES:
7920       return finish_bases (type1, false);
7921     case CPTK_DIRECT_BASES:
7922       return finish_bases (type1, true);
7923     default:
7924       return finish_trait_expr (kind, type1, type2);
7925     }
7926 }
7927
7928 /* Lambdas that appear in variable initializer or default argument scope
7929    get that in their mangling, so we need to record it.  We might as well
7930    use the count for function and namespace scopes as well.  */
7931 static GTY(()) tree lambda_scope;
7932 static GTY(()) int lambda_count;
7933 typedef struct GTY(()) tree_int
7934 {
7935   tree t;
7936   int i;
7937 } tree_int;
7938 DEF_VEC_O(tree_int);
7939 DEF_VEC_ALLOC_O(tree_int,gc);
7940 static GTY(()) VEC(tree_int,gc) *lambda_scope_stack;
7941
7942 static void
7943 start_lambda_scope (tree decl)
7944 {
7945   tree_int ti;
7946   gcc_assert (decl);
7947   /* Once we're inside a function, we ignore other scopes and just push
7948      the function again so that popping works properly.  */
7949   if (current_function_decl && TREE_CODE (decl) != FUNCTION_DECL)
7950     decl = current_function_decl;
7951   ti.t = lambda_scope;
7952   ti.i = lambda_count;
7953   VEC_safe_push (tree_int, gc, lambda_scope_stack, &ti);
7954   if (lambda_scope != decl)
7955     {
7956       /* Don't reset the count if we're still in the same function.  */
7957       lambda_scope = decl;
7958       lambda_count = 0;
7959     }
7960 }
7961
7962 static void
7963 record_lambda_scope (tree lambda)
7964 {
7965   LAMBDA_EXPR_EXTRA_SCOPE (lambda) = lambda_scope;
7966   LAMBDA_EXPR_DISCRIMINATOR (lambda) = lambda_count++;
7967 }
7968
7969 static void
7970 finish_lambda_scope (void)
7971 {
7972   tree_int *p = VEC_last (tree_int, lambda_scope_stack);
7973   if (lambda_scope != p->t)
7974     {
7975       lambda_scope = p->t;
7976       lambda_count = p->i;
7977     }
7978   VEC_pop (tree_int, lambda_scope_stack);
7979 }
7980
7981 /* Parse a lambda expression.
7982
7983    lambda-expression:
7984      lambda-introducer lambda-declarator [opt] compound-statement
7985
7986    Returns a representation of the expression.  */
7987
7988 static tree
7989 cp_parser_lambda_expression (cp_parser* parser)
7990 {
7991   tree lambda_expr = build_lambda_expr ();
7992   tree type;
7993   bool ok;
7994
7995   LAMBDA_EXPR_LOCATION (lambda_expr)
7996     = cp_lexer_peek_token (parser->lexer)->location;
7997
7998   if (cp_unevaluated_operand)
7999     error_at (LAMBDA_EXPR_LOCATION (lambda_expr),
8000               "lambda-expression in unevaluated context");
8001
8002   /* We may be in the middle of deferred access check.  Disable
8003      it now.  */
8004   push_deferring_access_checks (dk_no_deferred);
8005
8006   cp_parser_lambda_introducer (parser, lambda_expr);
8007
8008   type = begin_lambda_type (lambda_expr);
8009
8010   record_lambda_scope (lambda_expr);
8011
8012   /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
8013   determine_visibility (TYPE_NAME (type));
8014
8015   /* Now that we've started the type, add the capture fields for any
8016      explicit captures.  */
8017   register_capture_members (LAMBDA_EXPR_CAPTURE_LIST (lambda_expr));
8018
8019   {
8020     /* Inside the class, surrounding template-parameter-lists do not apply.  */
8021     unsigned int saved_num_template_parameter_lists
8022         = parser->num_template_parameter_lists;
8023     unsigned char in_statement = parser->in_statement;
8024     bool in_switch_statement_p = parser->in_switch_statement_p;
8025
8026     parser->num_template_parameter_lists = 0;
8027     parser->in_statement = 0;
8028     parser->in_switch_statement_p = false;
8029
8030     /* By virtue of defining a local class, a lambda expression has access to
8031        the private variables of enclosing classes.  */
8032
8033     ok = cp_parser_lambda_declarator_opt (parser, lambda_expr);
8034
8035     if (ok)
8036       cp_parser_lambda_body (parser, lambda_expr);
8037     else if (cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
8038       cp_parser_skip_to_end_of_block_or_statement (parser);
8039
8040     /* The capture list was built up in reverse order; fix that now.  */
8041     {
8042       tree newlist = NULL_TREE;
8043       tree elt, next;
8044
8045       for (elt = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
8046            elt; elt = next)
8047         {
8048           next = TREE_CHAIN (elt);
8049           TREE_CHAIN (elt) = newlist;
8050           newlist = elt;
8051         }
8052       LAMBDA_EXPR_CAPTURE_LIST (lambda_expr) = newlist;
8053     }
8054
8055     if (ok)
8056       maybe_add_lambda_conv_op (type);
8057
8058     type = finish_struct (type, /*attributes=*/NULL_TREE);
8059
8060     parser->num_template_parameter_lists = saved_num_template_parameter_lists;
8061     parser->in_statement = in_statement;
8062     parser->in_switch_statement_p = in_switch_statement_p;
8063   }
8064
8065   pop_deferring_access_checks ();
8066
8067   /* This field is only used during parsing of the lambda.  */
8068   LAMBDA_EXPR_THIS_CAPTURE (lambda_expr) = NULL_TREE;
8069
8070   /* This lambda shouldn't have any proxies left at this point.  */
8071   gcc_assert (LAMBDA_EXPR_PENDING_PROXIES (lambda_expr) == NULL);
8072   /* And now that we're done, push proxies for an enclosing lambda.  */
8073   insert_pending_capture_proxies ();
8074
8075   if (ok)
8076     return build_lambda_object (lambda_expr);
8077   else
8078     return error_mark_node;
8079 }
8080
8081 /* Parse the beginning of a lambda expression.
8082
8083    lambda-introducer:
8084      [ lambda-capture [opt] ]
8085
8086    LAMBDA_EXPR is the current representation of the lambda expression.  */
8087
8088 static void
8089 cp_parser_lambda_introducer (cp_parser* parser, tree lambda_expr)
8090 {
8091   /* Need commas after the first capture.  */
8092   bool first = true;
8093
8094   /* Eat the leading `['.  */
8095   cp_parser_require (parser, CPP_OPEN_SQUARE, RT_OPEN_SQUARE);
8096
8097   /* Record default capture mode.  "[&" "[=" "[&," "[=,"  */
8098   if (cp_lexer_next_token_is (parser->lexer, CPP_AND)
8099       && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_NAME)
8100     LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) = CPLD_REFERENCE;
8101   else if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8102     LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) = CPLD_COPY;
8103
8104   if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) != CPLD_NONE)
8105     {
8106       cp_lexer_consume_token (parser->lexer);
8107       first = false;
8108     }
8109
8110   while (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_SQUARE))
8111     {
8112       cp_token* capture_token;
8113       tree capture_id;
8114       tree capture_init_expr;
8115       cp_id_kind idk = CP_ID_KIND_NONE;
8116       bool explicit_init_p = false;
8117
8118       enum capture_kind_type
8119       {
8120         BY_COPY,
8121         BY_REFERENCE
8122       };
8123       enum capture_kind_type capture_kind = BY_COPY;
8124
8125       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
8126         {
8127           error ("expected end of capture-list");
8128           return;
8129         }
8130
8131       if (first)
8132         first = false;
8133       else
8134         cp_parser_require (parser, CPP_COMMA, RT_COMMA);
8135
8136       /* Possibly capture `this'.  */
8137       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THIS))
8138         {
8139           location_t loc = cp_lexer_peek_token (parser->lexer)->location;
8140           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) == CPLD_COPY)
8141             pedwarn (loc, 0, "explicit by-copy capture of %<this%> redundant "
8142                      "with by-copy capture default");
8143           cp_lexer_consume_token (parser->lexer);
8144           add_capture (lambda_expr,
8145                        /*id=*/this_identifier,
8146                        /*initializer=*/finish_this_expr(),
8147                        /*by_reference_p=*/false,
8148                        explicit_init_p);
8149           continue;
8150         }
8151
8152       /* Remember whether we want to capture as a reference or not.  */
8153       if (cp_lexer_next_token_is (parser->lexer, CPP_AND))
8154         {
8155           capture_kind = BY_REFERENCE;
8156           cp_lexer_consume_token (parser->lexer);
8157         }
8158
8159       /* Get the identifier.  */
8160       capture_token = cp_lexer_peek_token (parser->lexer);
8161       capture_id = cp_parser_identifier (parser);
8162
8163       if (capture_id == error_mark_node)
8164         /* Would be nice to have a cp_parser_skip_to_closing_x for general
8165            delimiters, but I modified this to stop on unnested ']' as well.  It
8166            was already changed to stop on unnested '}', so the
8167            "closing_parenthesis" name is no more misleading with my change.  */
8168         {
8169           cp_parser_skip_to_closing_parenthesis (parser,
8170                                                  /*recovering=*/true,
8171                                                  /*or_comma=*/true,
8172                                                  /*consume_paren=*/true);
8173           break;
8174         }
8175
8176       /* Find the initializer for this capture.  */
8177       if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8178         {
8179           /* An explicit expression exists.  */
8180           cp_lexer_consume_token (parser->lexer);
8181           pedwarn (input_location, OPT_pedantic,
8182                    "ISO C++ does not allow initializers "
8183                    "in lambda expression capture lists");
8184           capture_init_expr = cp_parser_assignment_expression (parser,
8185                                                                /*cast_p=*/true,
8186                                                                &idk);
8187           explicit_init_p = true;
8188         }
8189       else
8190         {
8191           const char* error_msg;
8192
8193           /* Turn the identifier into an id-expression.  */
8194           capture_init_expr
8195             = cp_parser_lookup_name
8196                 (parser,
8197                  capture_id,
8198                  none_type,
8199                  /*is_template=*/false,
8200                  /*is_namespace=*/false,
8201                  /*check_dependency=*/true,
8202                  /*ambiguous_decls=*/NULL,
8203                  capture_token->location);
8204
8205           if (capture_init_expr == error_mark_node)
8206             {
8207               unqualified_name_lookup_error (capture_id);
8208               continue;
8209             }
8210           else if (DECL_P (capture_init_expr)
8211                    && (TREE_CODE (capture_init_expr) != VAR_DECL
8212                        && TREE_CODE (capture_init_expr) != PARM_DECL))
8213             {
8214               error_at (capture_token->location,
8215                         "capture of non-variable %qD ",
8216                         capture_init_expr);
8217               inform (0, "%q+#D declared here", capture_init_expr);
8218               continue;
8219             }
8220           if (TREE_CODE (capture_init_expr) == VAR_DECL
8221               && decl_storage_duration (capture_init_expr) != dk_auto)
8222             {
8223               pedwarn (capture_token->location, 0, "capture of variable "
8224                        "%qD with non-automatic storage duration",
8225                        capture_init_expr);
8226               inform (0, "%q+#D declared here", capture_init_expr);
8227               continue;
8228             }
8229
8230           capture_init_expr
8231             = finish_id_expression
8232                 (capture_id,
8233                  capture_init_expr,
8234                  parser->scope,
8235                  &idk,
8236                  /*integral_constant_expression_p=*/false,
8237                  /*allow_non_integral_constant_expression_p=*/false,
8238                  /*non_integral_constant_expression_p=*/NULL,
8239                  /*template_p=*/false,
8240                  /*done=*/true,
8241                  /*address_p=*/false,
8242                  /*template_arg_p=*/false,
8243                  &error_msg,
8244                  capture_token->location);
8245         }
8246
8247       if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) != CPLD_NONE
8248           && !explicit_init_p)
8249         {
8250           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) == CPLD_COPY
8251               && capture_kind == BY_COPY)
8252             pedwarn (capture_token->location, 0, "explicit by-copy capture "
8253                      "of %qD redundant with by-copy capture default",
8254                      capture_id);
8255           if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) == CPLD_REFERENCE
8256               && capture_kind == BY_REFERENCE)
8257             pedwarn (capture_token->location, 0, "explicit by-reference "
8258                      "capture of %qD redundant with by-reference capture "
8259                      "default", capture_id);
8260         }
8261
8262       add_capture (lambda_expr,
8263                    capture_id,
8264                    capture_init_expr,
8265                    /*by_reference_p=*/capture_kind == BY_REFERENCE,
8266                    explicit_init_p);
8267     }
8268
8269   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
8270 }
8271
8272 /* Parse the (optional) middle of a lambda expression.
8273
8274    lambda-declarator:
8275      ( parameter-declaration-clause [opt] )
8276        attribute-specifier [opt]
8277        mutable [opt]
8278        exception-specification [opt]
8279        lambda-return-type-clause [opt]
8280
8281    LAMBDA_EXPR is the current representation of the lambda expression.  */
8282
8283 static bool
8284 cp_parser_lambda_declarator_opt (cp_parser* parser, tree lambda_expr)
8285 {
8286   /* 5.1.1.4 of the standard says:
8287        If a lambda-expression does not include a lambda-declarator, it is as if
8288        the lambda-declarator were ().
8289      This means an empty parameter list, no attributes, and no exception
8290      specification.  */
8291   tree param_list = void_list_node;
8292   tree attributes = NULL_TREE;
8293   tree exception_spec = NULL_TREE;
8294   tree t;
8295
8296   /* The lambda-declarator is optional, but must begin with an opening
8297      parenthesis if present.  */
8298   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
8299     {
8300       cp_lexer_consume_token (parser->lexer);
8301
8302       begin_scope (sk_function_parms, /*entity=*/NULL_TREE);
8303
8304       /* Parse parameters.  */
8305       param_list = cp_parser_parameter_declaration_clause (parser);
8306
8307       /* Default arguments shall not be specified in the
8308          parameter-declaration-clause of a lambda-declarator.  */
8309       for (t = param_list; t; t = TREE_CHAIN (t))
8310         if (TREE_PURPOSE (t))
8311           pedwarn (DECL_SOURCE_LOCATION (TREE_VALUE (t)), OPT_pedantic,
8312                    "default argument specified for lambda parameter");
8313
8314       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
8315
8316       attributes = cp_parser_attributes_opt (parser);
8317
8318       /* Parse optional `mutable' keyword.  */
8319       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_MUTABLE))
8320         {
8321           cp_lexer_consume_token (parser->lexer);
8322           LAMBDA_EXPR_MUTABLE_P (lambda_expr) = 1;
8323         }
8324
8325       /* Parse optional exception specification.  */
8326       exception_spec = cp_parser_exception_specification_opt (parser);
8327
8328       /* Parse optional trailing return type.  */
8329       if (cp_lexer_next_token_is (parser->lexer, CPP_DEREF))
8330         {
8331           cp_lexer_consume_token (parser->lexer);
8332           LAMBDA_EXPR_RETURN_TYPE (lambda_expr) = cp_parser_type_id (parser);
8333         }
8334
8335       /* The function parameters must be in scope all the way until after the
8336          trailing-return-type in case of decltype.  */
8337       for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
8338         pop_binding (DECL_NAME (t), t);
8339
8340       leave_scope ();
8341     }
8342
8343   /* Create the function call operator.
8344
8345      Messing with declarators like this is no uglier than building up the
8346      FUNCTION_DECL by hand, and this is less likely to get out of sync with
8347      other code.  */
8348   {
8349     cp_decl_specifier_seq return_type_specs;
8350     cp_declarator* declarator;
8351     tree fco;
8352     int quals;
8353     void *p;
8354
8355     clear_decl_specs (&return_type_specs);
8356     if (LAMBDA_EXPR_RETURN_TYPE (lambda_expr))
8357       return_type_specs.type = LAMBDA_EXPR_RETURN_TYPE (lambda_expr);
8358     else
8359       /* Maybe we will deduce the return type later, but we can use void
8360          as a placeholder return type anyways.  */
8361       return_type_specs.type = void_type_node;
8362
8363     p = obstack_alloc (&declarator_obstack, 0);
8364
8365     declarator = make_id_declarator (NULL_TREE, ansi_opname (CALL_EXPR),
8366                                      sfk_none);
8367
8368     quals = (LAMBDA_EXPR_MUTABLE_P (lambda_expr)
8369              ? TYPE_UNQUALIFIED : TYPE_QUAL_CONST);
8370     declarator = make_call_declarator (declarator, param_list, quals,
8371                                        VIRT_SPEC_UNSPECIFIED,
8372                                        exception_spec,
8373                                        /*late_return_type=*/NULL_TREE);
8374     declarator->id_loc = LAMBDA_EXPR_LOCATION (lambda_expr);
8375
8376     fco = grokmethod (&return_type_specs,
8377                       declarator,
8378                       attributes);
8379     if (fco != error_mark_node)
8380       {
8381         DECL_INITIALIZED_IN_CLASS_P (fco) = 1;
8382         DECL_ARTIFICIAL (fco) = 1;
8383         /* Give the object parameter a different name.  */
8384         DECL_NAME (DECL_ARGUMENTS (fco)) = get_identifier ("__closure");
8385       }
8386
8387     finish_member_declaration (fco);
8388
8389     obstack_free (&declarator_obstack, p);
8390
8391     return (fco != error_mark_node);
8392   }
8393 }
8394
8395 /* Parse the body of a lambda expression, which is simply
8396
8397    compound-statement
8398
8399    but which requires special handling.
8400    LAMBDA_EXPR is the current representation of the lambda expression.  */
8401
8402 static void
8403 cp_parser_lambda_body (cp_parser* parser, tree lambda_expr)
8404 {
8405   bool nested = (current_function_decl != NULL_TREE);
8406   bool local_variables_forbidden_p = parser->local_variables_forbidden_p;
8407   if (nested)
8408     push_function_context ();
8409   else
8410     /* Still increment function_depth so that we don't GC in the
8411        middle of an expression.  */
8412     ++function_depth;
8413   /* Clear this in case we're in the middle of a default argument.  */
8414   parser->local_variables_forbidden_p = false;
8415
8416   /* Finish the function call operator
8417      - class_specifier
8418      + late_parsing_for_member
8419      + function_definition_after_declarator
8420      + ctor_initializer_opt_and_function_body  */
8421   {
8422     tree fco = lambda_function (lambda_expr);
8423     tree body;
8424     bool done = false;
8425     tree compound_stmt;
8426     tree cap;
8427
8428     /* Let the front end know that we are going to be defining this
8429        function.  */
8430     start_preparsed_function (fco,
8431                               NULL_TREE,
8432                               SF_PRE_PARSED | SF_INCLASS_INLINE);
8433
8434     start_lambda_scope (fco);
8435     body = begin_function_body ();
8436
8437     if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
8438       goto out;
8439
8440     /* Push the proxies for any explicit captures.  */
8441     for (cap = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr); cap;
8442          cap = TREE_CHAIN (cap))
8443       build_capture_proxy (TREE_PURPOSE (cap));
8444
8445     compound_stmt = begin_compound_stmt (0);
8446
8447     /* 5.1.1.4 of the standard says:
8448          If a lambda-expression does not include a trailing-return-type, it
8449          is as if the trailing-return-type denotes the following type:
8450           * if the compound-statement is of the form
8451                { return attribute-specifier [opt] expression ; }
8452              the type of the returned expression after lvalue-to-rvalue
8453              conversion (_conv.lval_ 4.1), array-to-pointer conversion
8454              (_conv.array_ 4.2), and function-to-pointer conversion
8455              (_conv.func_ 4.3);
8456           * otherwise, void.  */
8457
8458     /* In a lambda that has neither a lambda-return-type-clause
8459        nor a deducible form, errors should be reported for return statements
8460        in the body.  Since we used void as the placeholder return type, parsing
8461        the body as usual will give such desired behavior.  */
8462     if (!LAMBDA_EXPR_RETURN_TYPE (lambda_expr)
8463         && cp_lexer_peek_nth_token (parser->lexer, 1)->keyword == RID_RETURN
8464         && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SEMICOLON)
8465       {
8466         tree expr = NULL_TREE;
8467         cp_id_kind idk = CP_ID_KIND_NONE;
8468
8469         /* Parse tentatively in case there's more after the initial return
8470            statement.  */
8471         cp_parser_parse_tentatively (parser);
8472
8473         cp_parser_require_keyword (parser, RID_RETURN, RT_RETURN);
8474
8475         expr = cp_parser_expression (parser, /*cast_p=*/false, &idk);
8476
8477         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
8478         cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
8479
8480         if (cp_parser_parse_definitely (parser))
8481           {
8482             apply_lambda_return_type (lambda_expr, lambda_return_type (expr));
8483
8484             /* Will get error here if type not deduced yet.  */
8485             finish_return_stmt (expr);
8486
8487             done = true;
8488           }
8489       }
8490
8491     if (!done)
8492       {
8493         if (!LAMBDA_EXPR_RETURN_TYPE (lambda_expr))
8494           LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda_expr) = true;
8495         while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
8496           cp_parser_label_declaration (parser);
8497         cp_parser_statement_seq_opt (parser, NULL_TREE);
8498         cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
8499         LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda_expr) = false;
8500       }
8501
8502     finish_compound_stmt (compound_stmt);
8503
8504   out:
8505     finish_function_body (body);
8506     finish_lambda_scope ();
8507
8508     /* Finish the function and generate code for it if necessary.  */
8509     expand_or_defer_fn (finish_function (/*inline*/2));
8510   }
8511
8512   parser->local_variables_forbidden_p = local_variables_forbidden_p;
8513   if (nested)
8514     pop_function_context();
8515   else
8516     --function_depth;
8517 }
8518
8519 /* Statements [gram.stmt.stmt]  */
8520
8521 /* Parse a statement.
8522
8523    statement:
8524      labeled-statement
8525      expression-statement
8526      compound-statement
8527      selection-statement
8528      iteration-statement
8529      jump-statement
8530      declaration-statement
8531      try-block
8532
8533   TM Extension:
8534
8535    statement:
8536      atomic-statement
8537
8538   IN_COMPOUND is true when the statement is nested inside a
8539   cp_parser_compound_statement; this matters for certain pragmas.
8540
8541   If IF_P is not NULL, *IF_P is set to indicate whether the statement
8542   is a (possibly labeled) if statement which is not enclosed in braces
8543   and has an else clause.  This is used to implement -Wparentheses.  */
8544
8545 static void
8546 cp_parser_statement (cp_parser* parser, tree in_statement_expr,
8547                      bool in_compound, bool *if_p)
8548 {
8549   tree statement;
8550   cp_token *token;
8551   location_t statement_location;
8552
8553  restart:
8554   if (if_p != NULL)
8555     *if_p = false;
8556   /* There is no statement yet.  */
8557   statement = NULL_TREE;
8558   /* Peek at the next token.  */
8559   token = cp_lexer_peek_token (parser->lexer);
8560   /* Remember the location of the first token in the statement.  */
8561   statement_location = token->location;
8562   /* If this is a keyword, then that will often determine what kind of
8563      statement we have.  */
8564   if (token->type == CPP_KEYWORD)
8565     {
8566       enum rid keyword = token->keyword;
8567
8568       switch (keyword)
8569         {
8570         case RID_CASE:
8571         case RID_DEFAULT:
8572           /* Looks like a labeled-statement with a case label.
8573              Parse the label, and then use tail recursion to parse
8574              the statement.  */
8575           cp_parser_label_for_labeled_statement (parser);
8576           goto restart;
8577
8578         case RID_IF:
8579         case RID_SWITCH:
8580           statement = cp_parser_selection_statement (parser, if_p);
8581           break;
8582
8583         case RID_WHILE:
8584         case RID_DO:
8585         case RID_FOR:
8586           statement = cp_parser_iteration_statement (parser);
8587           break;
8588
8589         case RID_BREAK:
8590         case RID_CONTINUE:
8591         case RID_RETURN:
8592         case RID_GOTO:
8593           statement = cp_parser_jump_statement (parser);
8594           break;
8595
8596           /* Objective-C++ exception-handling constructs.  */
8597         case RID_AT_TRY:
8598         case RID_AT_CATCH:
8599         case RID_AT_FINALLY:
8600         case RID_AT_SYNCHRONIZED:
8601         case RID_AT_THROW:
8602           statement = cp_parser_objc_statement (parser);
8603           break;
8604
8605         case RID_TRY:
8606           statement = cp_parser_try_block (parser);
8607           break;
8608
8609         case RID_NAMESPACE:
8610           /* This must be a namespace alias definition.  */
8611           cp_parser_declaration_statement (parser);
8612           return;
8613           
8614         case RID_TRANSACTION_ATOMIC:
8615         case RID_TRANSACTION_RELAXED:
8616           statement = cp_parser_transaction (parser, keyword);
8617           break;
8618         case RID_TRANSACTION_CANCEL:
8619           statement = cp_parser_transaction_cancel (parser);
8620           break;
8621
8622         default:
8623           /* It might be a keyword like `int' that can start a
8624              declaration-statement.  */
8625           break;
8626         }
8627     }
8628   else if (token->type == CPP_NAME)
8629     {
8630       /* If the next token is a `:', then we are looking at a
8631          labeled-statement.  */
8632       token = cp_lexer_peek_nth_token (parser->lexer, 2);
8633       if (token->type == CPP_COLON)
8634         {
8635           /* Looks like a labeled-statement with an ordinary label.
8636              Parse the label, and then use tail recursion to parse
8637              the statement.  */
8638           cp_parser_label_for_labeled_statement (parser);
8639           goto restart;
8640         }
8641     }
8642   /* Anything that starts with a `{' must be a compound-statement.  */
8643   else if (token->type == CPP_OPEN_BRACE)
8644     statement = cp_parser_compound_statement (parser, NULL, false, false);
8645   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
8646      a statement all its own.  */
8647   else if (token->type == CPP_PRAGMA)
8648     {
8649       /* Only certain OpenMP pragmas are attached to statements, and thus
8650          are considered statements themselves.  All others are not.  In
8651          the context of a compound, accept the pragma as a "statement" and
8652          return so that we can check for a close brace.  Otherwise we
8653          require a real statement and must go back and read one.  */
8654       if (in_compound)
8655         cp_parser_pragma (parser, pragma_compound);
8656       else if (!cp_parser_pragma (parser, pragma_stmt))
8657         goto restart;
8658       return;
8659     }
8660   else if (token->type == CPP_EOF)
8661     {
8662       cp_parser_error (parser, "expected statement");
8663       return;
8664     }
8665
8666   /* Everything else must be a declaration-statement or an
8667      expression-statement.  Try for the declaration-statement
8668      first, unless we are looking at a `;', in which case we know that
8669      we have an expression-statement.  */
8670   if (!statement)
8671     {
8672       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8673         {
8674           cp_parser_parse_tentatively (parser);
8675           /* Try to parse the declaration-statement.  */
8676           cp_parser_declaration_statement (parser);
8677           /* If that worked, we're done.  */
8678           if (cp_parser_parse_definitely (parser))
8679             return;
8680         }
8681       /* Look for an expression-statement instead.  */
8682       statement = cp_parser_expression_statement (parser, in_statement_expr);
8683     }
8684
8685   /* Set the line number for the statement.  */
8686   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
8687     SET_EXPR_LOCATION (statement, statement_location);
8688 }
8689
8690 /* Parse the label for a labeled-statement, i.e.
8691
8692    identifier :
8693    case constant-expression :
8694    default :
8695
8696    GNU Extension:
8697    case constant-expression ... constant-expression : statement
8698
8699    When a label is parsed without errors, the label is added to the
8700    parse tree by the finish_* functions, so this function doesn't
8701    have to return the label.  */
8702
8703 static void
8704 cp_parser_label_for_labeled_statement (cp_parser* parser)
8705 {
8706   cp_token *token;
8707   tree label = NULL_TREE;
8708   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
8709
8710   /* The next token should be an identifier.  */
8711   token = cp_lexer_peek_token (parser->lexer);
8712   if (token->type != CPP_NAME
8713       && token->type != CPP_KEYWORD)
8714     {
8715       cp_parser_error (parser, "expected labeled-statement");
8716       return;
8717     }
8718
8719   parser->colon_corrects_to_scope_p = false;
8720   switch (token->keyword)
8721     {
8722     case RID_CASE:
8723       {
8724         tree expr, expr_hi;
8725         cp_token *ellipsis;
8726
8727         /* Consume the `case' token.  */
8728         cp_lexer_consume_token (parser->lexer);
8729         /* Parse the constant-expression.  */
8730         expr = cp_parser_constant_expression (parser,
8731                                               /*allow_non_constant_p=*/false,
8732                                               NULL);
8733
8734         ellipsis = cp_lexer_peek_token (parser->lexer);
8735         if (ellipsis->type == CPP_ELLIPSIS)
8736           {
8737             /* Consume the `...' token.  */
8738             cp_lexer_consume_token (parser->lexer);
8739             expr_hi =
8740               cp_parser_constant_expression (parser,
8741                                              /*allow_non_constant_p=*/false,
8742                                              NULL);
8743             /* We don't need to emit warnings here, as the common code
8744                will do this for us.  */
8745           }
8746         else
8747           expr_hi = NULL_TREE;
8748
8749         if (parser->in_switch_statement_p)
8750           finish_case_label (token->location, expr, expr_hi);
8751         else
8752           error_at (token->location,
8753                     "case label %qE not within a switch statement",
8754                     expr);
8755       }
8756       break;
8757
8758     case RID_DEFAULT:
8759       /* Consume the `default' token.  */
8760       cp_lexer_consume_token (parser->lexer);
8761
8762       if (parser->in_switch_statement_p)
8763         finish_case_label (token->location, NULL_TREE, NULL_TREE);
8764       else
8765         error_at (token->location, "case label not within a switch statement");
8766       break;
8767
8768     default:
8769       /* Anything else must be an ordinary label.  */
8770       label = finish_label_stmt (cp_parser_identifier (parser));
8771       break;
8772     }
8773
8774   /* Require the `:' token.  */
8775   cp_parser_require (parser, CPP_COLON, RT_COLON);
8776
8777   /* An ordinary label may optionally be followed by attributes.
8778      However, this is only permitted if the attributes are then
8779      followed by a semicolon.  This is because, for backward
8780      compatibility, when parsing
8781        lab: __attribute__ ((unused)) int i;
8782      we want the attribute to attach to "i", not "lab".  */
8783   if (label != NULL_TREE
8784       && cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
8785     {
8786       tree attrs;
8787
8788       cp_parser_parse_tentatively (parser);
8789       attrs = cp_parser_attributes_opt (parser);
8790       if (attrs == NULL_TREE
8791           || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8792         cp_parser_abort_tentative_parse (parser);
8793       else if (!cp_parser_parse_definitely (parser))
8794         ;
8795       else
8796         cplus_decl_attributes (&label, attrs, 0);
8797     }
8798
8799   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
8800 }
8801
8802 /* Parse an expression-statement.
8803
8804    expression-statement:
8805      expression [opt] ;
8806
8807    Returns the new EXPR_STMT -- or NULL_TREE if the expression
8808    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
8809    indicates whether this expression-statement is part of an
8810    expression statement.  */
8811
8812 static tree
8813 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
8814 {
8815   tree statement = NULL_TREE;
8816   cp_token *token = cp_lexer_peek_token (parser->lexer);
8817
8818   /* If the next token is a ';', then there is no expression
8819      statement.  */
8820   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8821     statement = cp_parser_expression (parser, /*cast_p=*/false, NULL);
8822
8823   /* Give a helpful message for "A<T>::type t;" and the like.  */
8824   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
8825       && !cp_parser_uncommitted_to_tentative_parse_p (parser))
8826     {
8827       if (TREE_CODE (statement) == SCOPE_REF)
8828         error_at (token->location, "need %<typename%> before %qE because "
8829                   "%qT is a dependent scope",
8830                   statement, TREE_OPERAND (statement, 0));
8831       else if (is_overloaded_fn (statement)
8832                && DECL_CONSTRUCTOR_P (get_first_fn (statement)))
8833         {
8834           /* A::A a; */
8835           tree fn = get_first_fn (statement);
8836           error_at (token->location,
8837                     "%<%T::%D%> names the constructor, not the type",
8838                     DECL_CONTEXT (fn), DECL_NAME (fn));
8839         }
8840     }
8841
8842   /* Consume the final `;'.  */
8843   cp_parser_consume_semicolon_at_end_of_statement (parser);
8844
8845   if (in_statement_expr
8846       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
8847     /* This is the final expression statement of a statement
8848        expression.  */
8849     statement = finish_stmt_expr_expr (statement, in_statement_expr);
8850   else if (statement)
8851     statement = finish_expr_stmt (statement);
8852   else
8853     finish_stmt ();
8854
8855   return statement;
8856 }
8857
8858 /* Parse a compound-statement.
8859
8860    compound-statement:
8861      { statement-seq [opt] }
8862
8863    GNU extension:
8864
8865    compound-statement:
8866      { label-declaration-seq [opt] statement-seq [opt] }
8867
8868    label-declaration-seq:
8869      label-declaration
8870      label-declaration-seq label-declaration
8871
8872    Returns a tree representing the statement.  */
8873
8874 static tree
8875 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
8876                               bool in_try, bool function_body)
8877 {
8878   tree compound_stmt;
8879
8880   /* Consume the `{'.  */
8881   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
8882     return error_mark_node;
8883   if (DECL_DECLARED_CONSTEXPR_P (current_function_decl)
8884       && !function_body)
8885     pedwarn (input_location, OPT_pedantic,
8886              "compound-statement in constexpr function");
8887   /* Begin the compound-statement.  */
8888   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
8889   /* If the next keyword is `__label__' we have a label declaration.  */
8890   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
8891     cp_parser_label_declaration (parser);
8892   /* Parse an (optional) statement-seq.  */
8893   cp_parser_statement_seq_opt (parser, in_statement_expr);
8894   /* Finish the compound-statement.  */
8895   finish_compound_stmt (compound_stmt);
8896   /* Consume the `}'.  */
8897   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
8898
8899   return compound_stmt;
8900 }
8901
8902 /* Parse an (optional) statement-seq.
8903
8904    statement-seq:
8905      statement
8906      statement-seq [opt] statement  */
8907
8908 static void
8909 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
8910 {
8911   /* Scan statements until there aren't any more.  */
8912   while (true)
8913     {
8914       cp_token *token = cp_lexer_peek_token (parser->lexer);
8915
8916       /* If we are looking at a `}', then we have run out of
8917          statements; the same is true if we have reached the end
8918          of file, or have stumbled upon a stray '@end'.  */
8919       if (token->type == CPP_CLOSE_BRACE
8920           || token->type == CPP_EOF
8921           || token->type == CPP_PRAGMA_EOL
8922           || (token->type == CPP_KEYWORD && token->keyword == RID_AT_END))
8923         break;
8924       
8925       /* If we are in a compound statement and find 'else' then
8926          something went wrong.  */
8927       else if (token->type == CPP_KEYWORD && token->keyword == RID_ELSE)
8928         {
8929           if (parser->in_statement & IN_IF_STMT) 
8930             break;
8931           else
8932             {
8933               token = cp_lexer_consume_token (parser->lexer);
8934               error_at (token->location, "%<else%> without a previous %<if%>");
8935             }
8936         }
8937
8938       /* Parse the statement.  */
8939       cp_parser_statement (parser, in_statement_expr, true, NULL);
8940     }
8941 }
8942
8943 /* Parse a selection-statement.
8944
8945    selection-statement:
8946      if ( condition ) statement
8947      if ( condition ) statement else statement
8948      switch ( condition ) statement
8949
8950    Returns the new IF_STMT or SWITCH_STMT.
8951
8952    If IF_P is not NULL, *IF_P is set to indicate whether the statement
8953    is a (possibly labeled) if statement which is not enclosed in
8954    braces and has an else clause.  This is used to implement
8955    -Wparentheses.  */
8956
8957 static tree
8958 cp_parser_selection_statement (cp_parser* parser, bool *if_p)
8959 {
8960   cp_token *token;
8961   enum rid keyword;
8962
8963   if (if_p != NULL)
8964     *if_p = false;
8965
8966   /* Peek at the next token.  */
8967   token = cp_parser_require (parser, CPP_KEYWORD, RT_SELECT);
8968
8969   /* See what kind of keyword it is.  */
8970   keyword = token->keyword;
8971   switch (keyword)
8972     {
8973     case RID_IF:
8974     case RID_SWITCH:
8975       {
8976         tree statement;
8977         tree condition;
8978
8979         /* Look for the `('.  */
8980         if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
8981           {
8982             cp_parser_skip_to_end_of_statement (parser);
8983             return error_mark_node;
8984           }
8985
8986         /* Begin the selection-statement.  */
8987         if (keyword == RID_IF)
8988           statement = begin_if_stmt ();
8989         else
8990           statement = begin_switch_stmt ();
8991
8992         /* Parse the condition.  */
8993         condition = cp_parser_condition (parser);
8994         /* Look for the `)'.  */
8995         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
8996           cp_parser_skip_to_closing_parenthesis (parser, true, false,
8997                                                  /*consume_paren=*/true);
8998
8999         if (keyword == RID_IF)
9000           {
9001             bool nested_if;
9002             unsigned char in_statement;
9003
9004             /* Add the condition.  */
9005             finish_if_stmt_cond (condition, statement);
9006
9007             /* Parse the then-clause.  */
9008             in_statement = parser->in_statement;
9009             parser->in_statement |= IN_IF_STMT;
9010             if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9011               {
9012                 location_t loc = cp_lexer_peek_token (parser->lexer)->location;
9013                 add_stmt (build_empty_stmt (loc));
9014                 cp_lexer_consume_token (parser->lexer);
9015                 if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_ELSE))
9016                   warning_at (loc, OPT_Wempty_body, "suggest braces around "
9017                               "empty body in an %<if%> statement");
9018                 nested_if = false;
9019               }
9020             else
9021               cp_parser_implicitly_scoped_statement (parser, &nested_if);
9022             parser->in_statement = in_statement;
9023
9024             finish_then_clause (statement);
9025
9026             /* If the next token is `else', parse the else-clause.  */
9027             if (cp_lexer_next_token_is_keyword (parser->lexer,
9028                                                 RID_ELSE))
9029               {
9030                 /* Consume the `else' keyword.  */
9031                 cp_lexer_consume_token (parser->lexer);
9032                 begin_else_clause (statement);
9033                 /* Parse the else-clause.  */
9034                 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9035                   {
9036                     location_t loc;
9037                     loc = cp_lexer_peek_token (parser->lexer)->location;
9038                     warning_at (loc,
9039                                 OPT_Wempty_body, "suggest braces around "
9040                                 "empty body in an %<else%> statement");
9041                     add_stmt (build_empty_stmt (loc));
9042                     cp_lexer_consume_token (parser->lexer);
9043                   }
9044                 else
9045                   cp_parser_implicitly_scoped_statement (parser, NULL);
9046
9047                 finish_else_clause (statement);
9048
9049                 /* If we are currently parsing a then-clause, then
9050                    IF_P will not be NULL.  We set it to true to
9051                    indicate that this if statement has an else clause.
9052                    This may trigger the Wparentheses warning below
9053                    when we get back up to the parent if statement.  */
9054                 if (if_p != NULL)
9055                   *if_p = true;
9056               }
9057             else
9058               {
9059                 /* This if statement does not have an else clause.  If
9060                    NESTED_IF is true, then the then-clause is an if
9061                    statement which does have an else clause.  We warn
9062                    about the potential ambiguity.  */
9063                 if (nested_if)
9064                   warning_at (EXPR_LOCATION (statement), OPT_Wparentheses,
9065                               "suggest explicit braces to avoid ambiguous"
9066                               " %<else%>");
9067               }
9068
9069             /* Now we're all done with the if-statement.  */
9070             finish_if_stmt (statement);
9071           }
9072         else
9073           {
9074             bool in_switch_statement_p;
9075             unsigned char in_statement;
9076
9077             /* Add the condition.  */
9078             finish_switch_cond (condition, statement);
9079
9080             /* Parse the body of the switch-statement.  */
9081             in_switch_statement_p = parser->in_switch_statement_p;
9082             in_statement = parser->in_statement;
9083             parser->in_switch_statement_p = true;
9084             parser->in_statement |= IN_SWITCH_STMT;
9085             cp_parser_implicitly_scoped_statement (parser, NULL);
9086             parser->in_switch_statement_p = in_switch_statement_p;
9087             parser->in_statement = in_statement;
9088
9089             /* Now we're all done with the switch-statement.  */
9090             finish_switch_stmt (statement);
9091           }
9092
9093         return statement;
9094       }
9095       break;
9096
9097     default:
9098       cp_parser_error (parser, "expected selection-statement");
9099       return error_mark_node;
9100     }
9101 }
9102
9103 /* Parse a condition.
9104
9105    condition:
9106      expression
9107      type-specifier-seq declarator = initializer-clause
9108      type-specifier-seq declarator braced-init-list
9109
9110    GNU Extension:
9111
9112    condition:
9113      type-specifier-seq declarator asm-specification [opt]
9114        attributes [opt] = assignment-expression
9115
9116    Returns the expression that should be tested.  */
9117
9118 static tree
9119 cp_parser_condition (cp_parser* parser)
9120 {
9121   cp_decl_specifier_seq type_specifiers;
9122   const char *saved_message;
9123   int declares_class_or_enum;
9124
9125   /* Try the declaration first.  */
9126   cp_parser_parse_tentatively (parser);
9127   /* New types are not allowed in the type-specifier-seq for a
9128      condition.  */
9129   saved_message = parser->type_definition_forbidden_message;
9130   parser->type_definition_forbidden_message
9131     = G_("types may not be defined in conditions");
9132   /* Parse the type-specifier-seq.  */
9133   cp_parser_decl_specifier_seq (parser,
9134                                 CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR,
9135                                 &type_specifiers,
9136                                 &declares_class_or_enum);
9137   /* Restore the saved message.  */
9138   parser->type_definition_forbidden_message = saved_message;
9139   /* If all is well, we might be looking at a declaration.  */
9140   if (!cp_parser_error_occurred (parser))
9141     {
9142       tree decl;
9143       tree asm_specification;
9144       tree attributes;
9145       cp_declarator *declarator;
9146       tree initializer = NULL_TREE;
9147
9148       /* Parse the declarator.  */
9149       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
9150                                          /*ctor_dtor_or_conv_p=*/NULL,
9151                                          /*parenthesized_p=*/NULL,
9152                                          /*member_p=*/false);
9153       /* Parse the attributes.  */
9154       attributes = cp_parser_attributes_opt (parser);
9155       /* Parse the asm-specification.  */
9156       asm_specification = cp_parser_asm_specification_opt (parser);
9157       /* If the next token is not an `=' or '{', then we might still be
9158          looking at an expression.  For example:
9159
9160            if (A(a).x)
9161
9162          looks like a decl-specifier-seq and a declarator -- but then
9163          there is no `=', so this is an expression.  */
9164       if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
9165           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
9166         cp_parser_simulate_error (parser);
9167         
9168       /* If we did see an `=' or '{', then we are looking at a declaration
9169          for sure.  */
9170       if (cp_parser_parse_definitely (parser))
9171         {
9172           tree pushed_scope;
9173           bool non_constant_p;
9174           bool flags = LOOKUP_ONLYCONVERTING;
9175
9176           /* Create the declaration.  */
9177           decl = start_decl (declarator, &type_specifiers,
9178                              /*initialized_p=*/true,
9179                              attributes, /*prefix_attributes=*/NULL_TREE,
9180                              &pushed_scope);
9181
9182           /* Parse the initializer.  */
9183           if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9184             {
9185               initializer = cp_parser_braced_list (parser, &non_constant_p);
9186               CONSTRUCTOR_IS_DIRECT_INIT (initializer) = 1;
9187               flags = 0;
9188             }
9189           else
9190             {
9191               /* Consume the `='.  */
9192               cp_parser_require (parser, CPP_EQ, RT_EQ);
9193               initializer = cp_parser_initializer_clause (parser, &non_constant_p);
9194             }
9195           if (BRACE_ENCLOSED_INITIALIZER_P (initializer))
9196             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
9197
9198           /* Process the initializer.  */
9199           cp_finish_decl (decl,
9200                           initializer, !non_constant_p,
9201                           asm_specification,
9202                           flags);
9203
9204           if (pushed_scope)
9205             pop_scope (pushed_scope);
9206
9207           return convert_from_reference (decl);
9208         }
9209     }
9210   /* If we didn't even get past the declarator successfully, we are
9211      definitely not looking at a declaration.  */
9212   else
9213     cp_parser_abort_tentative_parse (parser);
9214
9215   /* Otherwise, we are looking at an expression.  */
9216   return cp_parser_expression (parser, /*cast_p=*/false, NULL);
9217 }
9218
9219 /* Parses a for-statement or range-for-statement until the closing ')',
9220    not included. */
9221
9222 static tree
9223 cp_parser_for (cp_parser *parser)
9224 {
9225   tree init, scope, decl;
9226   bool is_range_for;
9227
9228   /* Begin the for-statement.  */
9229   scope = begin_for_scope (&init);
9230
9231   /* Parse the initialization.  */
9232   is_range_for = cp_parser_for_init_statement (parser, &decl);
9233
9234   if (is_range_for)
9235     return cp_parser_range_for (parser, scope, init, decl);
9236   else
9237     return cp_parser_c_for (parser, scope, init);
9238 }
9239
9240 static tree
9241 cp_parser_c_for (cp_parser *parser, tree scope, tree init)
9242 {
9243   /* Normal for loop */
9244   tree condition = NULL_TREE;
9245   tree expression = NULL_TREE;
9246   tree stmt;
9247
9248   stmt = begin_for_stmt (scope, init);
9249   /* The for-init-statement has already been parsed in
9250      cp_parser_for_init_statement, so no work is needed here.  */
9251   finish_for_init_stmt (stmt);
9252
9253   /* If there's a condition, process it.  */
9254   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
9255     condition = cp_parser_condition (parser);
9256   finish_for_cond (condition, stmt);
9257   /* Look for the `;'.  */
9258   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9259
9260   /* If there's an expression, process it.  */
9261   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
9262     expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9263   finish_for_expr (expression, stmt);
9264
9265   return stmt;
9266 }
9267
9268 /* Tries to parse a range-based for-statement:
9269
9270   range-based-for:
9271     decl-specifier-seq declarator : expression
9272
9273   The decl-specifier-seq declarator and the `:' are already parsed by
9274   cp_parser_for_init_statement. If processing_template_decl it returns a
9275   newly created RANGE_FOR_STMT; if not, it is converted to a
9276   regular FOR_STMT.  */
9277
9278 static tree
9279 cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl)
9280 {
9281   tree stmt, range_expr;
9282
9283   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9284     {
9285       bool expr_non_constant_p;
9286       range_expr = cp_parser_braced_list (parser, &expr_non_constant_p);
9287     }
9288   else
9289     range_expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9290
9291   /* If in template, STMT is converted to a normal for-statement
9292      at instantiation. If not, it is done just ahead. */
9293   if (processing_template_decl)
9294     {
9295       stmt = begin_range_for_stmt (scope, init);
9296       finish_range_for_decl (stmt, range_decl, range_expr);
9297       if (!type_dependent_expression_p (range_expr)
9298           /* do_auto_deduction doesn't mess with template init-lists.  */
9299           && !BRACE_ENCLOSED_INITIALIZER_P (range_expr))
9300         do_range_for_auto_deduction (range_decl, range_expr);
9301     }
9302   else
9303     {
9304       stmt = begin_for_stmt (scope, init);
9305       stmt = cp_convert_range_for (stmt, range_decl, range_expr);
9306     }
9307   return stmt;
9308 }
9309
9310 /* Subroutine of cp_convert_range_for: given the initializer expression,
9311    builds up the range temporary.  */
9312
9313 static tree
9314 build_range_temp (tree range_expr)
9315 {
9316   tree range_type, range_temp;
9317
9318   /* Find out the type deduced by the declaration
9319      `auto &&__range = range_expr'.  */
9320   range_type = cp_build_reference_type (make_auto (), true);
9321   range_type = do_auto_deduction (range_type, range_expr,
9322                                   type_uses_auto (range_type));
9323
9324   /* Create the __range variable.  */
9325   range_temp = build_decl (input_location, VAR_DECL,
9326                            get_identifier ("__for_range"), range_type);
9327   TREE_USED (range_temp) = 1;
9328   DECL_ARTIFICIAL (range_temp) = 1;
9329
9330   return range_temp;
9331 }
9332
9333 /* Used by cp_parser_range_for in template context: we aren't going to
9334    do a full conversion yet, but we still need to resolve auto in the
9335    type of the for-range-declaration if present.  This is basically
9336    a shortcut version of cp_convert_range_for.  */
9337
9338 static void
9339 do_range_for_auto_deduction (tree decl, tree range_expr)
9340 {
9341   tree auto_node = type_uses_auto (TREE_TYPE (decl));
9342   if (auto_node)
9343     {
9344       tree begin_dummy, end_dummy, range_temp, iter_type, iter_decl;
9345       range_temp = convert_from_reference (build_range_temp (range_expr));
9346       iter_type = (cp_parser_perform_range_for_lookup
9347                    (range_temp, &begin_dummy, &end_dummy));
9348       iter_decl = build_decl (input_location, VAR_DECL, NULL_TREE, iter_type);
9349       iter_decl = build_x_indirect_ref (iter_decl, RO_NULL,
9350                                         tf_warning_or_error);
9351       TREE_TYPE (decl) = do_auto_deduction (TREE_TYPE (decl),
9352                                             iter_decl, auto_node);
9353     }
9354 }
9355
9356 /* Converts a range-based for-statement into a normal
9357    for-statement, as per the definition.
9358
9359       for (RANGE_DECL : RANGE_EXPR)
9360         BLOCK
9361
9362    should be equivalent to:
9363
9364       {
9365         auto &&__range = RANGE_EXPR;
9366         for (auto __begin = BEGIN_EXPR, end = END_EXPR;
9367               __begin != __end;
9368               ++__begin)
9369           {
9370               RANGE_DECL = *__begin;
9371               BLOCK
9372           }
9373       }
9374
9375    If RANGE_EXPR is an array:
9376         BEGIN_EXPR = __range
9377         END_EXPR = __range + ARRAY_SIZE(__range)
9378    Else if RANGE_EXPR has a member 'begin' or 'end':
9379         BEGIN_EXPR = __range.begin()
9380         END_EXPR = __range.end()
9381    Else:
9382         BEGIN_EXPR = begin(__range)
9383         END_EXPR = end(__range);
9384
9385    If __range has a member 'begin' but not 'end', or vice versa, we must
9386    still use the second alternative (it will surely fail, however).
9387    When calling begin()/end() in the third alternative we must use
9388    argument dependent lookup, but always considering 'std' as an associated
9389    namespace.  */
9390
9391 tree
9392 cp_convert_range_for (tree statement, tree range_decl, tree range_expr)
9393 {
9394   tree begin, end;
9395   tree iter_type, begin_expr, end_expr;
9396   tree condition, expression;
9397
9398   if (range_decl == error_mark_node || range_expr == error_mark_node)
9399     /* If an error happened previously do nothing or else a lot of
9400        unhelpful errors would be issued.  */
9401     begin_expr = end_expr = iter_type = error_mark_node;
9402   else
9403     {
9404       tree range_temp = build_range_temp (range_expr);
9405       pushdecl (range_temp);
9406       cp_finish_decl (range_temp, range_expr,
9407                       /*is_constant_init*/false, NULL_TREE,
9408                       LOOKUP_ONLYCONVERTING);
9409
9410       range_temp = convert_from_reference (range_temp);
9411       iter_type = cp_parser_perform_range_for_lookup (range_temp,
9412                                                       &begin_expr, &end_expr);
9413     }
9414
9415   /* The new for initialization statement.  */
9416   begin = build_decl (input_location, VAR_DECL,
9417                       get_identifier ("__for_begin"), iter_type);
9418   TREE_USED (begin) = 1;
9419   DECL_ARTIFICIAL (begin) = 1;
9420   pushdecl (begin);
9421   cp_finish_decl (begin, begin_expr,
9422                   /*is_constant_init*/false, NULL_TREE,
9423                   LOOKUP_ONLYCONVERTING);
9424
9425   end = build_decl (input_location, VAR_DECL,
9426                     get_identifier ("__for_end"), iter_type);
9427   TREE_USED (end) = 1;
9428   DECL_ARTIFICIAL (end) = 1;
9429   pushdecl (end);
9430   cp_finish_decl (end, end_expr,
9431                   /*is_constant_init*/false, NULL_TREE,
9432                   LOOKUP_ONLYCONVERTING);
9433
9434   finish_for_init_stmt (statement);
9435
9436   /* The new for condition.  */
9437   condition = build_x_binary_op (NE_EXPR,
9438                                  begin, ERROR_MARK,
9439                                  end, ERROR_MARK,
9440                                  NULL, tf_warning_or_error);
9441   finish_for_cond (condition, statement);
9442
9443   /* The new increment expression.  */
9444   expression = finish_unary_op_expr (PREINCREMENT_EXPR, begin);
9445   finish_for_expr (expression, statement);
9446
9447   /* The declaration is initialized with *__begin inside the loop body.  */
9448   cp_finish_decl (range_decl,
9449                   build_x_indirect_ref (begin, RO_NULL, tf_warning_or_error),
9450                   /*is_constant_init*/false, NULL_TREE,
9451                   LOOKUP_ONLYCONVERTING);
9452
9453   return statement;
9454 }
9455
9456 /* Solves BEGIN_EXPR and END_EXPR as described in cp_convert_range_for.
9457    We need to solve both at the same time because the method used
9458    depends on the existence of members begin or end.
9459    Returns the type deduced for the iterator expression.  */
9460
9461 static tree
9462 cp_parser_perform_range_for_lookup (tree range, tree *begin, tree *end)
9463 {
9464   if (error_operand_p (range))
9465     {
9466       *begin = *end = error_mark_node;
9467       return error_mark_node;
9468     }
9469
9470   if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (range))))
9471     {
9472       error ("range-based %<for%> expression of type %qT "
9473              "has incomplete type", TREE_TYPE (range));
9474       *begin = *end = error_mark_node;
9475       return error_mark_node;
9476     }
9477   if (TREE_CODE (TREE_TYPE (range)) == ARRAY_TYPE)
9478     {
9479       /* If RANGE is an array, we will use pointer arithmetic.  */
9480       *begin = range;
9481       *end = build_binary_op (input_location, PLUS_EXPR,
9482                               range,
9483                               array_type_nelts_top (TREE_TYPE (range)),
9484                               0);
9485       return build_pointer_type (TREE_TYPE (TREE_TYPE (range)));
9486     }
9487   else
9488     {
9489       /* If it is not an array, we must do a bit of magic.  */
9490       tree id_begin, id_end;
9491       tree member_begin, member_end;
9492
9493       *begin = *end = error_mark_node;
9494
9495       id_begin = get_identifier ("begin");
9496       id_end = get_identifier ("end");
9497       member_begin = lookup_member (TREE_TYPE (range), id_begin,
9498                                     /*protect=*/2, /*want_type=*/false);
9499       member_end = lookup_member (TREE_TYPE (range), id_end,
9500                                   /*protect=*/2, /*want_type=*/false);
9501
9502       if (member_begin != NULL_TREE || member_end != NULL_TREE)
9503         {
9504           /* Use the member functions.  */
9505           if (member_begin != NULL_TREE)
9506             *begin = cp_parser_range_for_member_function (range, id_begin);
9507           else
9508             error ("range-based %<for%> expression of type %qT has an "
9509                    "%<end%> member but not a %<begin%>", TREE_TYPE (range));
9510
9511           if (member_end != NULL_TREE)
9512             *end = cp_parser_range_for_member_function (range, id_end);
9513           else
9514             error ("range-based %<for%> expression of type %qT has a "
9515                    "%<begin%> member but not an %<end%>", TREE_TYPE (range));
9516         }
9517       else
9518         {
9519           /* Use global functions with ADL.  */
9520           VEC(tree,gc) *vec;
9521           vec = make_tree_vector ();
9522
9523           VEC_safe_push (tree, gc, vec, range);
9524
9525           member_begin = perform_koenig_lookup (id_begin, vec,
9526                                                 /*include_std=*/true,
9527                                                 tf_warning_or_error);
9528           *begin = finish_call_expr (member_begin, &vec, false, true,
9529                                      tf_warning_or_error);
9530           member_end = perform_koenig_lookup (id_end, vec,
9531                                               /*include_std=*/true,
9532                                               tf_warning_or_error);
9533           *end = finish_call_expr (member_end, &vec, false, true,
9534                                    tf_warning_or_error);
9535
9536           release_tree_vector (vec);
9537         }
9538
9539       /* Last common checks.  */
9540       if (*begin == error_mark_node || *end == error_mark_node)
9541         {
9542           /* If one of the expressions is an error do no more checks.  */
9543           *begin = *end = error_mark_node;
9544           return error_mark_node;
9545         }
9546       else
9547         {
9548           tree iter_type = cv_unqualified (TREE_TYPE (*begin));
9549           /* The unqualified type of the __begin and __end temporaries should
9550              be the same, as required by the multiple auto declaration.  */
9551           if (!same_type_p (iter_type, cv_unqualified (TREE_TYPE (*end))))
9552             error ("inconsistent begin/end types in range-based %<for%> "
9553                    "statement: %qT and %qT",
9554                    TREE_TYPE (*begin), TREE_TYPE (*end));
9555           return iter_type;
9556         }
9557     }
9558 }
9559
9560 /* Helper function for cp_parser_perform_range_for_lookup.
9561    Builds a tree for RANGE.IDENTIFIER().  */
9562
9563 static tree
9564 cp_parser_range_for_member_function (tree range, tree identifier)
9565 {
9566   tree member, res;
9567   VEC(tree,gc) *vec;
9568
9569   member = finish_class_member_access_expr (range, identifier,
9570                                             false, tf_warning_or_error);
9571   if (member == error_mark_node)
9572     return error_mark_node;
9573
9574   vec = make_tree_vector ();
9575   res = finish_call_expr (member, &vec,
9576                           /*disallow_virtual=*/false,
9577                           /*koenig_p=*/false,
9578                           tf_warning_or_error);
9579   release_tree_vector (vec);
9580   return res;
9581 }
9582
9583 /* Parse an iteration-statement.
9584
9585    iteration-statement:
9586      while ( condition ) statement
9587      do statement while ( expression ) ;
9588      for ( for-init-statement condition [opt] ; expression [opt] )
9589        statement
9590
9591    Returns the new WHILE_STMT, DO_STMT, FOR_STMT or RANGE_FOR_STMT.  */
9592
9593 static tree
9594 cp_parser_iteration_statement (cp_parser* parser)
9595 {
9596   cp_token *token;
9597   enum rid keyword;
9598   tree statement;
9599   unsigned char in_statement;
9600
9601   /* Peek at the next token.  */
9602   token = cp_parser_require (parser, CPP_KEYWORD, RT_INTERATION);
9603   if (!token)
9604     return error_mark_node;
9605
9606   /* Remember whether or not we are already within an iteration
9607      statement.  */
9608   in_statement = parser->in_statement;
9609
9610   /* See what kind of keyword it is.  */
9611   keyword = token->keyword;
9612   switch (keyword)
9613     {
9614     case RID_WHILE:
9615       {
9616         tree condition;
9617
9618         /* Begin the while-statement.  */
9619         statement = begin_while_stmt ();
9620         /* Look for the `('.  */
9621         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
9622         /* Parse the condition.  */
9623         condition = cp_parser_condition (parser);
9624         finish_while_stmt_cond (condition, statement);
9625         /* Look for the `)'.  */
9626         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
9627         /* Parse the dependent statement.  */
9628         parser->in_statement = IN_ITERATION_STMT;
9629         cp_parser_already_scoped_statement (parser);
9630         parser->in_statement = in_statement;
9631         /* We're done with the while-statement.  */
9632         finish_while_stmt (statement);
9633       }
9634       break;
9635
9636     case RID_DO:
9637       {
9638         tree expression;
9639
9640         /* Begin the do-statement.  */
9641         statement = begin_do_stmt ();
9642         /* Parse the body of the do-statement.  */
9643         parser->in_statement = IN_ITERATION_STMT;
9644         cp_parser_implicitly_scoped_statement (parser, NULL);
9645         parser->in_statement = in_statement;
9646         finish_do_body (statement);
9647         /* Look for the `while' keyword.  */
9648         cp_parser_require_keyword (parser, RID_WHILE, RT_WHILE);
9649         /* Look for the `('.  */
9650         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
9651         /* Parse the expression.  */
9652         expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9653         /* We're done with the do-statement.  */
9654         finish_do_stmt (expression, statement);
9655         /* Look for the `)'.  */
9656         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
9657         /* Look for the `;'.  */
9658         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9659       }
9660       break;
9661
9662     case RID_FOR:
9663       {
9664         /* Look for the `('.  */
9665         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
9666
9667         statement = cp_parser_for (parser);
9668
9669         /* Look for the `)'.  */
9670         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
9671
9672         /* Parse the body of the for-statement.  */
9673         parser->in_statement = IN_ITERATION_STMT;
9674         cp_parser_already_scoped_statement (parser);
9675         parser->in_statement = in_statement;
9676
9677         /* We're done with the for-statement.  */
9678         finish_for_stmt (statement);
9679       }
9680       break;
9681
9682     default:
9683       cp_parser_error (parser, "expected iteration-statement");
9684       statement = error_mark_node;
9685       break;
9686     }
9687
9688   return statement;
9689 }
9690
9691 /* Parse a for-init-statement or the declarator of a range-based-for.
9692    Returns true if a range-based-for declaration is seen.
9693
9694    for-init-statement:
9695      expression-statement
9696      simple-declaration  */
9697
9698 static bool
9699 cp_parser_for_init_statement (cp_parser* parser, tree *decl)
9700 {
9701   /* If the next token is a `;', then we have an empty
9702      expression-statement.  Grammatically, this is also a
9703      simple-declaration, but an invalid one, because it does not
9704      declare anything.  Therefore, if we did not handle this case
9705      specially, we would issue an error message about an invalid
9706      declaration.  */
9707   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
9708     {
9709       bool is_range_for = false;
9710       bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
9711
9712       parser->colon_corrects_to_scope_p = false;
9713
9714       /* We're going to speculatively look for a declaration, falling back
9715          to an expression, if necessary.  */
9716       cp_parser_parse_tentatively (parser);
9717       /* Parse the declaration.  */
9718       cp_parser_simple_declaration (parser,
9719                                     /*function_definition_allowed_p=*/false,
9720                                     decl);
9721       parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
9722       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
9723         {
9724           /* It is a range-for, consume the ':' */
9725           cp_lexer_consume_token (parser->lexer);
9726           is_range_for = true;
9727           if (cxx_dialect < cxx0x)
9728             {
9729               error_at (cp_lexer_peek_token (parser->lexer)->location,
9730                         "range-based %<for%> loops are not allowed "
9731                         "in C++98 mode");
9732               *decl = error_mark_node;
9733             }
9734         }
9735       else
9736           /* The ';' is not consumed yet because we told
9737              cp_parser_simple_declaration not to.  */
9738           cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9739
9740       if (cp_parser_parse_definitely (parser))
9741         return is_range_for;
9742       /* If the tentative parse failed, then we shall need to look for an
9743          expression-statement.  */
9744     }
9745   /* If we are here, it is an expression-statement.  */
9746   cp_parser_expression_statement (parser, NULL_TREE);
9747   return false;
9748 }
9749
9750 /* Parse a jump-statement.
9751
9752    jump-statement:
9753      break ;
9754      continue ;
9755      return expression [opt] ;
9756      return braced-init-list ;
9757      goto identifier ;
9758
9759    GNU extension:
9760
9761    jump-statement:
9762      goto * expression ;
9763
9764    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
9765
9766 static tree
9767 cp_parser_jump_statement (cp_parser* parser)
9768 {
9769   tree statement = error_mark_node;
9770   cp_token *token;
9771   enum rid keyword;
9772   unsigned char in_statement;
9773
9774   /* Peek at the next token.  */
9775   token = cp_parser_require (parser, CPP_KEYWORD, RT_JUMP);
9776   if (!token)
9777     return error_mark_node;
9778
9779   /* See what kind of keyword it is.  */
9780   keyword = token->keyword;
9781   switch (keyword)
9782     {
9783     case RID_BREAK:
9784       in_statement = parser->in_statement & ~IN_IF_STMT;      
9785       switch (in_statement)
9786         {
9787         case 0:
9788           error_at (token->location, "break statement not within loop or switch");
9789           break;
9790         default:
9791           gcc_assert ((in_statement & IN_SWITCH_STMT)
9792                       || in_statement == IN_ITERATION_STMT);
9793           statement = finish_break_stmt ();
9794           break;
9795         case IN_OMP_BLOCK:
9796           error_at (token->location, "invalid exit from OpenMP structured block");
9797           break;
9798         case IN_OMP_FOR:
9799           error_at (token->location, "break statement used with OpenMP for loop");
9800           break;
9801         }
9802       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9803       break;
9804
9805     case RID_CONTINUE:
9806       switch (parser->in_statement & ~(IN_SWITCH_STMT | IN_IF_STMT))
9807         {
9808         case 0:
9809           error_at (token->location, "continue statement not within a loop");
9810           break;
9811         case IN_ITERATION_STMT:
9812         case IN_OMP_FOR:
9813           statement = finish_continue_stmt ();
9814           break;
9815         case IN_OMP_BLOCK:
9816           error_at (token->location, "invalid exit from OpenMP structured block");
9817           break;
9818         default:
9819           gcc_unreachable ();
9820         }
9821       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9822       break;
9823
9824     case RID_RETURN:
9825       {
9826         tree expr;
9827         bool expr_non_constant_p;
9828
9829         if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9830           {
9831             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
9832             expr = cp_parser_braced_list (parser, &expr_non_constant_p);
9833           }
9834         else if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
9835           expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9836         else
9837           /* If the next token is a `;', then there is no
9838              expression.  */
9839           expr = NULL_TREE;
9840         /* Build the return-statement.  */
9841         statement = finish_return_stmt (expr);
9842         /* Look for the final `;'.  */
9843         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9844       }
9845       break;
9846
9847     case RID_GOTO:
9848       /* Create the goto-statement.  */
9849       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
9850         {
9851           /* Issue a warning about this use of a GNU extension.  */
9852           pedwarn (token->location, OPT_pedantic, "ISO C++ forbids computed gotos");
9853           /* Consume the '*' token.  */
9854           cp_lexer_consume_token (parser->lexer);
9855           /* Parse the dependent expression.  */
9856           finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false, NULL));
9857         }
9858       else
9859         finish_goto_stmt (cp_parser_identifier (parser));
9860       /* Look for the final `;'.  */
9861       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9862       break;
9863
9864     default:
9865       cp_parser_error (parser, "expected jump-statement");
9866       break;
9867     }
9868
9869   return statement;
9870 }
9871
9872 /* Parse a declaration-statement.
9873
9874    declaration-statement:
9875      block-declaration  */
9876
9877 static void
9878 cp_parser_declaration_statement (cp_parser* parser)
9879 {
9880   void *p;
9881
9882   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
9883   p = obstack_alloc (&declarator_obstack, 0);
9884
9885  /* Parse the block-declaration.  */
9886   cp_parser_block_declaration (parser, /*statement_p=*/true);
9887
9888   /* Free any declarators allocated.  */
9889   obstack_free (&declarator_obstack, p);
9890
9891   /* Finish off the statement.  */
9892   finish_stmt ();
9893 }
9894
9895 /* Some dependent statements (like `if (cond) statement'), are
9896    implicitly in their own scope.  In other words, if the statement is
9897    a single statement (as opposed to a compound-statement), it is
9898    none-the-less treated as if it were enclosed in braces.  Any
9899    declarations appearing in the dependent statement are out of scope
9900    after control passes that point.  This function parses a statement,
9901    but ensures that is in its own scope, even if it is not a
9902    compound-statement.
9903
9904    If IF_P is not NULL, *IF_P is set to indicate whether the statement
9905    is a (possibly labeled) if statement which is not enclosed in
9906    braces and has an else clause.  This is used to implement
9907    -Wparentheses.
9908
9909    Returns the new statement.  */
9910
9911 static tree
9912 cp_parser_implicitly_scoped_statement (cp_parser* parser, bool *if_p)
9913 {
9914   tree statement;
9915
9916   if (if_p != NULL)
9917     *if_p = false;
9918
9919   /* Mark if () ; with a special NOP_EXPR.  */
9920   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9921     {
9922       location_t loc = cp_lexer_peek_token (parser->lexer)->location;
9923       cp_lexer_consume_token (parser->lexer);
9924       statement = add_stmt (build_empty_stmt (loc));
9925     }
9926   /* if a compound is opened, we simply parse the statement directly.  */
9927   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9928     statement = cp_parser_compound_statement (parser, NULL, false, false);
9929   /* If the token is not a `{', then we must take special action.  */
9930   else
9931     {
9932       /* Create a compound-statement.  */
9933       statement = begin_compound_stmt (0);
9934       /* Parse the dependent-statement.  */
9935       cp_parser_statement (parser, NULL_TREE, false, if_p);
9936       /* Finish the dummy compound-statement.  */
9937       finish_compound_stmt (statement);
9938     }
9939
9940   /* Return the statement.  */
9941   return statement;
9942 }
9943
9944 /* For some dependent statements (like `while (cond) statement'), we
9945    have already created a scope.  Therefore, even if the dependent
9946    statement is a compound-statement, we do not want to create another
9947    scope.  */
9948
9949 static void
9950 cp_parser_already_scoped_statement (cp_parser* parser)
9951 {
9952   /* If the token is a `{', then we must take special action.  */
9953   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
9954     cp_parser_statement (parser, NULL_TREE, false, NULL);
9955   else
9956     {
9957       /* Avoid calling cp_parser_compound_statement, so that we
9958          don't create a new scope.  Do everything else by hand.  */
9959       cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
9960       /* If the next keyword is `__label__' we have a label declaration.  */
9961       while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
9962         cp_parser_label_declaration (parser);
9963       /* Parse an (optional) statement-seq.  */
9964       cp_parser_statement_seq_opt (parser, NULL_TREE);
9965       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
9966     }
9967 }
9968
9969 /* Declarations [gram.dcl.dcl] */
9970
9971 /* Parse an optional declaration-sequence.
9972
9973    declaration-seq:
9974      declaration
9975      declaration-seq declaration  */
9976
9977 static void
9978 cp_parser_declaration_seq_opt (cp_parser* parser)
9979 {
9980   while (true)
9981     {
9982       cp_token *token;
9983
9984       token = cp_lexer_peek_token (parser->lexer);
9985
9986       if (token->type == CPP_CLOSE_BRACE
9987           || token->type == CPP_EOF
9988           || token->type == CPP_PRAGMA_EOL)
9989         break;
9990
9991       if (token->type == CPP_SEMICOLON)
9992         {
9993           /* A declaration consisting of a single semicolon is
9994              invalid.  Allow it unless we're being pedantic.  */
9995           cp_lexer_consume_token (parser->lexer);
9996           if (!in_system_header)
9997             pedwarn (input_location, OPT_pedantic, "extra %<;%>");
9998           continue;
9999         }
10000
10001       /* If we're entering or exiting a region that's implicitly
10002          extern "C", modify the lang context appropriately.  */
10003       if (!parser->implicit_extern_c && token->implicit_extern_c)
10004         {
10005           push_lang_context (lang_name_c);
10006           parser->implicit_extern_c = true;
10007         }
10008       else if (parser->implicit_extern_c && !token->implicit_extern_c)
10009         {
10010           pop_lang_context ();
10011           parser->implicit_extern_c = false;
10012         }
10013
10014       if (token->type == CPP_PRAGMA)
10015         {
10016           /* A top-level declaration can consist solely of a #pragma.
10017              A nested declaration cannot, so this is done here and not
10018              in cp_parser_declaration.  (A #pragma at block scope is
10019              handled in cp_parser_statement.)  */
10020           cp_parser_pragma (parser, pragma_external);
10021           continue;
10022         }
10023
10024       /* Parse the declaration itself.  */
10025       cp_parser_declaration (parser);
10026     }
10027 }
10028
10029 /* Parse a declaration.
10030
10031    declaration:
10032      block-declaration
10033      function-definition
10034      template-declaration
10035      explicit-instantiation
10036      explicit-specialization
10037      linkage-specification
10038      namespace-definition
10039
10040    GNU extension:
10041
10042    declaration:
10043       __extension__ declaration */
10044
10045 static void
10046 cp_parser_declaration (cp_parser* parser)
10047 {
10048   cp_token token1;
10049   cp_token token2;
10050   int saved_pedantic;
10051   void *p;
10052   tree attributes = NULL_TREE;
10053
10054   /* Check for the `__extension__' keyword.  */
10055   if (cp_parser_extension_opt (parser, &saved_pedantic))
10056     {
10057       /* Parse the qualified declaration.  */
10058       cp_parser_declaration (parser);
10059       /* Restore the PEDANTIC flag.  */
10060       pedantic = saved_pedantic;
10061
10062       return;
10063     }
10064
10065   /* Try to figure out what kind of declaration is present.  */
10066   token1 = *cp_lexer_peek_token (parser->lexer);
10067
10068   if (token1.type != CPP_EOF)
10069     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
10070   else
10071     {
10072       token2.type = CPP_EOF;
10073       token2.keyword = RID_MAX;
10074     }
10075
10076   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
10077   p = obstack_alloc (&declarator_obstack, 0);
10078
10079   /* If the next token is `extern' and the following token is a string
10080      literal, then we have a linkage specification.  */
10081   if (token1.keyword == RID_EXTERN
10082       && cp_parser_is_pure_string_literal (&token2))
10083     cp_parser_linkage_specification (parser);
10084   /* If the next token is `template', then we have either a template
10085      declaration, an explicit instantiation, or an explicit
10086      specialization.  */
10087   else if (token1.keyword == RID_TEMPLATE)
10088     {
10089       /* `template <>' indicates a template specialization.  */
10090       if (token2.type == CPP_LESS
10091           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
10092         cp_parser_explicit_specialization (parser);
10093       /* `template <' indicates a template declaration.  */
10094       else if (token2.type == CPP_LESS)
10095         cp_parser_template_declaration (parser, /*member_p=*/false);
10096       /* Anything else must be an explicit instantiation.  */
10097       else
10098         cp_parser_explicit_instantiation (parser);
10099     }
10100   /* If the next token is `export', then we have a template
10101      declaration.  */
10102   else if (token1.keyword == RID_EXPORT)
10103     cp_parser_template_declaration (parser, /*member_p=*/false);
10104   /* If the next token is `extern', 'static' or 'inline' and the one
10105      after that is `template', we have a GNU extended explicit
10106      instantiation directive.  */
10107   else if (cp_parser_allow_gnu_extensions_p (parser)
10108            && (token1.keyword == RID_EXTERN
10109                || token1.keyword == RID_STATIC
10110                || token1.keyword == RID_INLINE)
10111            && token2.keyword == RID_TEMPLATE)
10112     cp_parser_explicit_instantiation (parser);
10113   /* If the next token is `namespace', check for a named or unnamed
10114      namespace definition.  */
10115   else if (token1.keyword == RID_NAMESPACE
10116            && (/* A named namespace definition.  */
10117                (token2.type == CPP_NAME
10118                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
10119                     != CPP_EQ))
10120                /* An unnamed namespace definition.  */
10121                || token2.type == CPP_OPEN_BRACE
10122                || token2.keyword == RID_ATTRIBUTE))
10123     cp_parser_namespace_definition (parser);
10124   /* An inline (associated) namespace definition.  */
10125   else if (token1.keyword == RID_INLINE
10126            && token2.keyword == RID_NAMESPACE)
10127     cp_parser_namespace_definition (parser);
10128   /* Objective-C++ declaration/definition.  */
10129   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
10130     cp_parser_objc_declaration (parser, NULL_TREE);
10131   else if (c_dialect_objc ()
10132            && token1.keyword == RID_ATTRIBUTE
10133            && cp_parser_objc_valid_prefix_attributes (parser, &attributes))
10134     cp_parser_objc_declaration (parser, attributes);
10135   /* We must have either a block declaration or a function
10136      definition.  */
10137   else
10138     /* Try to parse a block-declaration, or a function-definition.  */
10139     cp_parser_block_declaration (parser, /*statement_p=*/false);
10140
10141   /* Free any declarators allocated.  */
10142   obstack_free (&declarator_obstack, p);
10143 }
10144
10145 /* Parse a block-declaration.
10146
10147    block-declaration:
10148      simple-declaration
10149      asm-definition
10150      namespace-alias-definition
10151      using-declaration
10152      using-directive
10153
10154    GNU Extension:
10155
10156    block-declaration:
10157      __extension__ block-declaration
10158
10159    C++0x Extension:
10160
10161    block-declaration:
10162      static_assert-declaration
10163
10164    If STATEMENT_P is TRUE, then this block-declaration is occurring as
10165    part of a declaration-statement.  */
10166
10167 static void
10168 cp_parser_block_declaration (cp_parser *parser,
10169                              bool      statement_p)
10170 {
10171   cp_token *token1;
10172   int saved_pedantic;
10173
10174   /* Check for the `__extension__' keyword.  */
10175   if (cp_parser_extension_opt (parser, &saved_pedantic))
10176     {
10177       /* Parse the qualified declaration.  */
10178       cp_parser_block_declaration (parser, statement_p);
10179       /* Restore the PEDANTIC flag.  */
10180       pedantic = saved_pedantic;
10181
10182       return;
10183     }
10184
10185   /* Peek at the next token to figure out which kind of declaration is
10186      present.  */
10187   token1 = cp_lexer_peek_token (parser->lexer);
10188
10189   /* If the next keyword is `asm', we have an asm-definition.  */
10190   if (token1->keyword == RID_ASM)
10191     {
10192       if (statement_p)
10193         cp_parser_commit_to_tentative_parse (parser);
10194       cp_parser_asm_definition (parser);
10195     }
10196   /* If the next keyword is `namespace', we have a
10197      namespace-alias-definition.  */
10198   else if (token1->keyword == RID_NAMESPACE)
10199     cp_parser_namespace_alias_definition (parser);
10200   /* If the next keyword is `using', we have a
10201      using-declaration, a using-directive, or an alias-declaration.  */
10202   else if (token1->keyword == RID_USING)
10203     {
10204       cp_token *token2;
10205
10206       if (statement_p)
10207         cp_parser_commit_to_tentative_parse (parser);
10208       /* If the token after `using' is `namespace', then we have a
10209          using-directive.  */
10210       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
10211       if (token2->keyword == RID_NAMESPACE)
10212         cp_parser_using_directive (parser);
10213       /* If the second token after 'using' is '=', then we have an
10214          alias-declaration.  */
10215       else if (cxx_dialect >= cxx0x
10216                && token2->type == CPP_NAME
10217                && ((cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_EQ)
10218                    || (cp_lexer_peek_nth_token (parser->lexer, 3)->keyword
10219                        == RID_ATTRIBUTE)))
10220         cp_parser_alias_declaration (parser);
10221       /* Otherwise, it's a using-declaration.  */
10222       else
10223         cp_parser_using_declaration (parser,
10224                                      /*access_declaration_p=*/false);
10225     }
10226   /* If the next keyword is `__label__' we have a misplaced label
10227      declaration.  */
10228   else if (token1->keyword == RID_LABEL)
10229     {
10230       cp_lexer_consume_token (parser->lexer);
10231       error_at (token1->location, "%<__label__%> not at the beginning of a block");
10232       cp_parser_skip_to_end_of_statement (parser);
10233       /* If the next token is now a `;', consume it.  */
10234       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
10235         cp_lexer_consume_token (parser->lexer);
10236     }
10237   /* If the next token is `static_assert' we have a static assertion.  */
10238   else if (token1->keyword == RID_STATIC_ASSERT)
10239     cp_parser_static_assert (parser, /*member_p=*/false);
10240   /* Anything else must be a simple-declaration.  */
10241   else
10242     cp_parser_simple_declaration (parser, !statement_p,
10243                                   /*maybe_range_for_decl*/NULL);
10244 }
10245
10246 /* Parse a simple-declaration.
10247
10248    simple-declaration:
10249      decl-specifier-seq [opt] init-declarator-list [opt] ;
10250
10251    init-declarator-list:
10252      init-declarator
10253      init-declarator-list , init-declarator
10254
10255    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
10256    function-definition as a simple-declaration.
10257
10258    If MAYBE_RANGE_FOR_DECL is not NULL, the pointed tree will be set to the
10259    parsed declaration if it is an uninitialized single declarator not followed
10260    by a `;', or to error_mark_node otherwise. Either way, the trailing `;',
10261    if present, will not be consumed.  */
10262
10263 static void
10264 cp_parser_simple_declaration (cp_parser* parser,
10265                               bool function_definition_allowed_p,
10266                               tree *maybe_range_for_decl)
10267 {
10268   cp_decl_specifier_seq decl_specifiers;
10269   int declares_class_or_enum;
10270   bool saw_declarator;
10271
10272   if (maybe_range_for_decl)
10273     *maybe_range_for_decl = NULL_TREE;
10274
10275   /* Defer access checks until we know what is being declared; the
10276      checks for names appearing in the decl-specifier-seq should be
10277      done as if we were in the scope of the thing being declared.  */
10278   push_deferring_access_checks (dk_deferred);
10279
10280   /* Parse the decl-specifier-seq.  We have to keep track of whether
10281      or not the decl-specifier-seq declares a named class or
10282      enumeration type, since that is the only case in which the
10283      init-declarator-list is allowed to be empty.
10284
10285      [dcl.dcl]
10286
10287      In a simple-declaration, the optional init-declarator-list can be
10288      omitted only when declaring a class or enumeration, that is when
10289      the decl-specifier-seq contains either a class-specifier, an
10290      elaborated-type-specifier, or an enum-specifier.  */
10291   cp_parser_decl_specifier_seq (parser,
10292                                 CP_PARSER_FLAGS_OPTIONAL,
10293                                 &decl_specifiers,
10294                                 &declares_class_or_enum);
10295   /* We no longer need to defer access checks.  */
10296   stop_deferring_access_checks ();
10297
10298   /* In a block scope, a valid declaration must always have a
10299      decl-specifier-seq.  By not trying to parse declarators, we can
10300      resolve the declaration/expression ambiguity more quickly.  */
10301   if (!function_definition_allowed_p
10302       && !decl_specifiers.any_specifiers_p)
10303     {
10304       cp_parser_error (parser, "expected declaration");
10305       goto done;
10306     }
10307
10308   /* If the next two tokens are both identifiers, the code is
10309      erroneous. The usual cause of this situation is code like:
10310
10311        T t;
10312
10313      where "T" should name a type -- but does not.  */
10314   if (!decl_specifiers.any_type_specifiers_p
10315       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
10316     {
10317       /* If parsing tentatively, we should commit; we really are
10318          looking at a declaration.  */
10319       cp_parser_commit_to_tentative_parse (parser);
10320       /* Give up.  */
10321       goto done;
10322     }
10323
10324   /* If we have seen at least one decl-specifier, and the next token
10325      is not a parenthesis, then we must be looking at a declaration.
10326      (After "int (" we might be looking at a functional cast.)  */
10327   if (decl_specifiers.any_specifiers_p
10328       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN)
10329       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
10330       && !cp_parser_error_occurred (parser))
10331     cp_parser_commit_to_tentative_parse (parser);
10332
10333   /* Keep going until we hit the `;' at the end of the simple
10334      declaration.  */
10335   saw_declarator = false;
10336   while (cp_lexer_next_token_is_not (parser->lexer,
10337                                      CPP_SEMICOLON))
10338     {
10339       cp_token *token;
10340       bool function_definition_p;
10341       tree decl;
10342
10343       if (saw_declarator)
10344         {
10345           /* If we are processing next declarator, coma is expected */
10346           token = cp_lexer_peek_token (parser->lexer);
10347           gcc_assert (token->type == CPP_COMMA);
10348           cp_lexer_consume_token (parser->lexer);
10349           if (maybe_range_for_decl)
10350             *maybe_range_for_decl = error_mark_node;
10351         }
10352       else
10353         saw_declarator = true;
10354
10355       /* Parse the init-declarator.  */
10356       decl = cp_parser_init_declarator (parser, &decl_specifiers,
10357                                         /*checks=*/NULL,
10358                                         function_definition_allowed_p,
10359                                         /*member_p=*/false,
10360                                         declares_class_or_enum,
10361                                         &function_definition_p,
10362                                         maybe_range_for_decl);
10363       /* If an error occurred while parsing tentatively, exit quickly.
10364          (That usually happens when in the body of a function; each
10365          statement is treated as a declaration-statement until proven
10366          otherwise.)  */
10367       if (cp_parser_error_occurred (parser))
10368         goto done;
10369       /* Handle function definitions specially.  */
10370       if (function_definition_p)
10371         {
10372           /* If the next token is a `,', then we are probably
10373              processing something like:
10374
10375                void f() {}, *p;
10376
10377              which is erroneous.  */
10378           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
10379             {
10380               cp_token *token = cp_lexer_peek_token (parser->lexer);
10381               error_at (token->location,
10382                         "mixing"
10383                         " declarations and function-definitions is forbidden");
10384             }
10385           /* Otherwise, we're done with the list of declarators.  */
10386           else
10387             {
10388               pop_deferring_access_checks ();
10389               return;
10390             }
10391         }
10392       if (maybe_range_for_decl && *maybe_range_for_decl == NULL_TREE)
10393         *maybe_range_for_decl = decl;
10394       /* The next token should be either a `,' or a `;'.  */
10395       token = cp_lexer_peek_token (parser->lexer);
10396       /* If it's a `,', there are more declarators to come.  */
10397       if (token->type == CPP_COMMA)
10398         /* will be consumed next time around */;
10399       /* If it's a `;', we are done.  */
10400       else if (token->type == CPP_SEMICOLON || maybe_range_for_decl)
10401         break;
10402       /* Anything else is an error.  */
10403       else
10404         {
10405           /* If we have already issued an error message we don't need
10406              to issue another one.  */
10407           if (decl != error_mark_node
10408               || cp_parser_uncommitted_to_tentative_parse_p (parser))
10409             cp_parser_error (parser, "expected %<,%> or %<;%>");
10410           /* Skip tokens until we reach the end of the statement.  */
10411           cp_parser_skip_to_end_of_statement (parser);
10412           /* If the next token is now a `;', consume it.  */
10413           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
10414             cp_lexer_consume_token (parser->lexer);
10415           goto done;
10416         }
10417       /* After the first time around, a function-definition is not
10418          allowed -- even if it was OK at first.  For example:
10419
10420            int i, f() {}
10421
10422          is not valid.  */
10423       function_definition_allowed_p = false;
10424     }
10425
10426   /* Issue an error message if no declarators are present, and the
10427      decl-specifier-seq does not itself declare a class or
10428      enumeration.  */
10429   if (!saw_declarator)
10430     {
10431       if (cp_parser_declares_only_class_p (parser))
10432         shadow_tag (&decl_specifiers);
10433       /* Perform any deferred access checks.  */
10434       perform_deferred_access_checks ();
10435     }
10436
10437   /* Consume the `;'.  */
10438   if (!maybe_range_for_decl)
10439       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
10440
10441  done:
10442   pop_deferring_access_checks ();
10443 }
10444
10445 /* Parse a decl-specifier-seq.
10446
10447    decl-specifier-seq:
10448      decl-specifier-seq [opt] decl-specifier
10449
10450    decl-specifier:
10451      storage-class-specifier
10452      type-specifier
10453      function-specifier
10454      friend
10455      typedef
10456
10457    GNU Extension:
10458
10459    decl-specifier:
10460      attributes
10461
10462    Set *DECL_SPECS to a representation of the decl-specifier-seq.
10463
10464    The parser flags FLAGS is used to control type-specifier parsing.
10465
10466    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
10467    flags:
10468
10469      1: one of the decl-specifiers is an elaborated-type-specifier
10470         (i.e., a type declaration)
10471      2: one of the decl-specifiers is an enum-specifier or a
10472         class-specifier (i.e., a type definition)
10473
10474    */
10475
10476 static void
10477 cp_parser_decl_specifier_seq (cp_parser* parser,
10478                               cp_parser_flags flags,
10479                               cp_decl_specifier_seq *decl_specs,
10480                               int* declares_class_or_enum)
10481 {
10482   bool constructor_possible_p = !parser->in_declarator_p;
10483   cp_token *start_token = NULL;
10484
10485   /* Clear DECL_SPECS.  */
10486   clear_decl_specs (decl_specs);
10487
10488   /* Assume no class or enumeration type is declared.  */
10489   *declares_class_or_enum = 0;
10490
10491   /* Keep reading specifiers until there are no more to read.  */
10492   while (true)
10493     {
10494       bool constructor_p;
10495       bool found_decl_spec;
10496       cp_token *token;
10497
10498       /* Peek at the next token.  */
10499       token = cp_lexer_peek_token (parser->lexer);
10500
10501       /* Save the first token of the decl spec list for error
10502          reporting.  */
10503       if (!start_token)
10504         start_token = token;
10505       /* Handle attributes.  */
10506       if (token->keyword == RID_ATTRIBUTE)
10507         {
10508           /* Parse the attributes.  */
10509           decl_specs->attributes
10510             = chainon (decl_specs->attributes,
10511                        cp_parser_attributes_opt (parser));
10512           continue;
10513         }
10514       /* Assume we will find a decl-specifier keyword.  */
10515       found_decl_spec = true;
10516       /* If the next token is an appropriate keyword, we can simply
10517          add it to the list.  */
10518       switch (token->keyword)
10519         {
10520           /* decl-specifier:
10521                friend
10522                constexpr */
10523         case RID_FRIEND:
10524           if (!at_class_scope_p ())
10525             {
10526               error_at (token->location, "%<friend%> used outside of class");
10527               cp_lexer_purge_token (parser->lexer);
10528             }
10529           else
10530             {
10531               ++decl_specs->specs[(int) ds_friend];
10532               /* Consume the token.  */
10533               cp_lexer_consume_token (parser->lexer);
10534             }
10535           break;
10536
10537         case RID_CONSTEXPR:
10538           ++decl_specs->specs[(int) ds_constexpr];
10539           cp_lexer_consume_token (parser->lexer);
10540           break;
10541
10542           /* function-specifier:
10543                inline
10544                virtual
10545                explicit  */
10546         case RID_INLINE:
10547         case RID_VIRTUAL:
10548         case RID_EXPLICIT:
10549           cp_parser_function_specifier_opt (parser, decl_specs);
10550           break;
10551
10552           /* decl-specifier:
10553                typedef  */
10554         case RID_TYPEDEF:
10555           ++decl_specs->specs[(int) ds_typedef];
10556           /* Consume the token.  */
10557           cp_lexer_consume_token (parser->lexer);
10558           /* A constructor declarator cannot appear in a typedef.  */
10559           constructor_possible_p = false;
10560           /* The "typedef" keyword can only occur in a declaration; we
10561              may as well commit at this point.  */
10562           cp_parser_commit_to_tentative_parse (parser);
10563
10564           if (decl_specs->storage_class != sc_none)
10565             decl_specs->conflicting_specifiers_p = true;
10566           break;
10567
10568           /* storage-class-specifier:
10569                auto
10570                register
10571                static
10572                extern
10573                mutable
10574
10575              GNU Extension:
10576                thread  */
10577         case RID_AUTO:
10578           if (cxx_dialect == cxx98) 
10579             {
10580               /* Consume the token.  */
10581               cp_lexer_consume_token (parser->lexer);
10582
10583               /* Complain about `auto' as a storage specifier, if
10584                  we're complaining about C++0x compatibility.  */
10585               warning_at (token->location, OPT_Wc__0x_compat, "%<auto%>"
10586                           " changes meaning in C++11; please remove it");
10587
10588               /* Set the storage class anyway.  */
10589               cp_parser_set_storage_class (parser, decl_specs, RID_AUTO,
10590                                            token->location);
10591             }
10592           else
10593             /* C++0x auto type-specifier.  */
10594             found_decl_spec = false;
10595           break;
10596
10597         case RID_REGISTER:
10598         case RID_STATIC:
10599         case RID_EXTERN:
10600         case RID_MUTABLE:
10601           /* Consume the token.  */
10602           cp_lexer_consume_token (parser->lexer);
10603           cp_parser_set_storage_class (parser, decl_specs, token->keyword,
10604                                        token->location);
10605           break;
10606         case RID_THREAD:
10607           /* Consume the token.  */
10608           cp_lexer_consume_token (parser->lexer);
10609           ++decl_specs->specs[(int) ds_thread];
10610           break;
10611
10612         default:
10613           /* We did not yet find a decl-specifier yet.  */
10614           found_decl_spec = false;
10615           break;
10616         }
10617
10618       if (found_decl_spec
10619           && (flags & CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR)
10620           && token->keyword != RID_CONSTEXPR)
10621         error ("decl-specifier invalid in condition");
10622
10623       /* Constructors are a special case.  The `S' in `S()' is not a
10624          decl-specifier; it is the beginning of the declarator.  */
10625       constructor_p
10626         = (!found_decl_spec
10627            && constructor_possible_p
10628            && (cp_parser_constructor_declarator_p
10629                (parser, decl_specs->specs[(int) ds_friend] != 0)));
10630
10631       /* If we don't have a DECL_SPEC yet, then we must be looking at
10632          a type-specifier.  */
10633       if (!found_decl_spec && !constructor_p)
10634         {
10635           int decl_spec_declares_class_or_enum;
10636           bool is_cv_qualifier;
10637           tree type_spec;
10638
10639           type_spec
10640             = cp_parser_type_specifier (parser, flags,
10641                                         decl_specs,
10642                                         /*is_declaration=*/true,
10643                                         &decl_spec_declares_class_or_enum,
10644                                         &is_cv_qualifier);
10645           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
10646
10647           /* If this type-specifier referenced a user-defined type
10648              (a typedef, class-name, etc.), then we can't allow any
10649              more such type-specifiers henceforth.
10650
10651              [dcl.spec]
10652
10653              The longest sequence of decl-specifiers that could
10654              possibly be a type name is taken as the
10655              decl-specifier-seq of a declaration.  The sequence shall
10656              be self-consistent as described below.
10657
10658              [dcl.type]
10659
10660              As a general rule, at most one type-specifier is allowed
10661              in the complete decl-specifier-seq of a declaration.  The
10662              only exceptions are the following:
10663
10664              -- const or volatile can be combined with any other
10665                 type-specifier.
10666
10667              -- signed or unsigned can be combined with char, long,
10668                 short, or int.
10669
10670              -- ..
10671
10672              Example:
10673
10674                typedef char* Pc;
10675                void g (const int Pc);
10676
10677              Here, Pc is *not* part of the decl-specifier seq; it's
10678              the declarator.  Therefore, once we see a type-specifier
10679              (other than a cv-qualifier), we forbid any additional
10680              user-defined types.  We *do* still allow things like `int
10681              int' to be considered a decl-specifier-seq, and issue the
10682              error message later.  */
10683           if (type_spec && !is_cv_qualifier)
10684             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
10685           /* A constructor declarator cannot follow a type-specifier.  */
10686           if (type_spec)
10687             {
10688               constructor_possible_p = false;
10689               found_decl_spec = true;
10690               if (!is_cv_qualifier)
10691                 decl_specs->any_type_specifiers_p = true;
10692             }
10693         }
10694
10695       /* If we still do not have a DECL_SPEC, then there are no more
10696          decl-specifiers.  */
10697       if (!found_decl_spec)
10698         break;
10699
10700       decl_specs->any_specifiers_p = true;
10701       /* After we see one decl-specifier, further decl-specifiers are
10702          always optional.  */
10703       flags |= CP_PARSER_FLAGS_OPTIONAL;
10704     }
10705
10706   cp_parser_check_decl_spec (decl_specs, start_token->location);
10707
10708   /* Don't allow a friend specifier with a class definition.  */
10709   if (decl_specs->specs[(int) ds_friend] != 0
10710       && (*declares_class_or_enum & 2))
10711     error_at (start_token->location,
10712               "class definition may not be declared a friend");
10713 }
10714
10715 /* Parse an (optional) storage-class-specifier.
10716
10717    storage-class-specifier:
10718      auto
10719      register
10720      static
10721      extern
10722      mutable
10723
10724    GNU Extension:
10725
10726    storage-class-specifier:
10727      thread
10728
10729    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
10730
10731 static tree
10732 cp_parser_storage_class_specifier_opt (cp_parser* parser)
10733 {
10734   switch (cp_lexer_peek_token (parser->lexer)->keyword)
10735     {
10736     case RID_AUTO:
10737       if (cxx_dialect != cxx98)
10738         return NULL_TREE;
10739       /* Fall through for C++98.  */
10740
10741     case RID_REGISTER:
10742     case RID_STATIC:
10743     case RID_EXTERN:
10744     case RID_MUTABLE:
10745     case RID_THREAD:
10746       /* Consume the token.  */
10747       return cp_lexer_consume_token (parser->lexer)->u.value;
10748
10749     default:
10750       return NULL_TREE;
10751     }
10752 }
10753
10754 /* Parse an (optional) function-specifier.
10755
10756    function-specifier:
10757      inline
10758      virtual
10759      explicit
10760
10761    Returns an IDENTIFIER_NODE corresponding to the keyword used.
10762    Updates DECL_SPECS, if it is non-NULL.  */
10763
10764 static tree
10765 cp_parser_function_specifier_opt (cp_parser* parser,
10766                                   cp_decl_specifier_seq *decl_specs)
10767 {
10768   cp_token *token = cp_lexer_peek_token (parser->lexer);
10769   switch (token->keyword)
10770     {
10771     case RID_INLINE:
10772       if (decl_specs)
10773         ++decl_specs->specs[(int) ds_inline];
10774       break;
10775
10776     case RID_VIRTUAL:
10777       /* 14.5.2.3 [temp.mem]
10778
10779          A member function template shall not be virtual.  */
10780       if (PROCESSING_REAL_TEMPLATE_DECL_P ())
10781         error_at (token->location, "templates may not be %<virtual%>");
10782       else if (decl_specs)
10783         ++decl_specs->specs[(int) ds_virtual];
10784       break;
10785
10786     case RID_EXPLICIT:
10787       if (decl_specs)
10788         ++decl_specs->specs[(int) ds_explicit];
10789       break;
10790
10791     default:
10792       return NULL_TREE;
10793     }
10794
10795   /* Consume the token.  */
10796   return cp_lexer_consume_token (parser->lexer)->u.value;
10797 }
10798
10799 /* Parse a linkage-specification.
10800
10801    linkage-specification:
10802      extern string-literal { declaration-seq [opt] }
10803      extern string-literal declaration  */
10804
10805 static void
10806 cp_parser_linkage_specification (cp_parser* parser)
10807 {
10808   tree linkage;
10809
10810   /* Look for the `extern' keyword.  */
10811   cp_parser_require_keyword (parser, RID_EXTERN, RT_EXTERN);
10812
10813   /* Look for the string-literal.  */
10814   linkage = cp_parser_string_literal (parser, false, false);
10815
10816   /* Transform the literal into an identifier.  If the literal is a
10817      wide-character string, or contains embedded NULs, then we can't
10818      handle it as the user wants.  */
10819   if (strlen (TREE_STRING_POINTER (linkage))
10820       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
10821     {
10822       cp_parser_error (parser, "invalid linkage-specification");
10823       /* Assume C++ linkage.  */
10824       linkage = lang_name_cplusplus;
10825     }
10826   else
10827     linkage = get_identifier (TREE_STRING_POINTER (linkage));
10828
10829   /* We're now using the new linkage.  */
10830   push_lang_context (linkage);
10831
10832   /* If the next token is a `{', then we're using the first
10833      production.  */
10834   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
10835     {
10836       /* Consume the `{' token.  */
10837       cp_lexer_consume_token (parser->lexer);
10838       /* Parse the declarations.  */
10839       cp_parser_declaration_seq_opt (parser);
10840       /* Look for the closing `}'.  */
10841       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
10842     }
10843   /* Otherwise, there's just one declaration.  */
10844   else
10845     {
10846       bool saved_in_unbraced_linkage_specification_p;
10847
10848       saved_in_unbraced_linkage_specification_p
10849         = parser->in_unbraced_linkage_specification_p;
10850       parser->in_unbraced_linkage_specification_p = true;
10851       cp_parser_declaration (parser);
10852       parser->in_unbraced_linkage_specification_p
10853         = saved_in_unbraced_linkage_specification_p;
10854     }
10855
10856   /* We're done with the linkage-specification.  */
10857   pop_lang_context ();
10858 }
10859
10860 /* Parse a static_assert-declaration.
10861
10862    static_assert-declaration:
10863      static_assert ( constant-expression , string-literal ) ; 
10864
10865    If MEMBER_P, this static_assert is a class member.  */
10866
10867 static void 
10868 cp_parser_static_assert(cp_parser *parser, bool member_p)
10869 {
10870   tree condition;
10871   tree message;
10872   cp_token *token;
10873   location_t saved_loc;
10874   bool dummy;
10875
10876   /* Peek at the `static_assert' token so we can keep track of exactly
10877      where the static assertion started.  */
10878   token = cp_lexer_peek_token (parser->lexer);
10879   saved_loc = token->location;
10880
10881   /* Look for the `static_assert' keyword.  */
10882   if (!cp_parser_require_keyword (parser, RID_STATIC_ASSERT, 
10883                                   RT_STATIC_ASSERT))
10884     return;
10885
10886   /*  We know we are in a static assertion; commit to any tentative
10887       parse.  */
10888   if (cp_parser_parsing_tentatively (parser))
10889     cp_parser_commit_to_tentative_parse (parser);
10890
10891   /* Parse the `(' starting the static assertion condition.  */
10892   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
10893
10894   /* Parse the constant-expression.  Allow a non-constant expression
10895      here in order to give better diagnostics in finish_static_assert.  */
10896   condition = 
10897     cp_parser_constant_expression (parser,
10898                                    /*allow_non_constant_p=*/true,
10899                                    /*non_constant_p=*/&dummy);
10900
10901   /* Parse the separating `,'.  */
10902   cp_parser_require (parser, CPP_COMMA, RT_COMMA);
10903
10904   /* Parse the string-literal message.  */
10905   message = cp_parser_string_literal (parser, 
10906                                       /*translate=*/false,
10907                                       /*wide_ok=*/true);
10908
10909   /* A `)' completes the static assertion.  */
10910   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
10911     cp_parser_skip_to_closing_parenthesis (parser, 
10912                                            /*recovering=*/true, 
10913                                            /*or_comma=*/false,
10914                                            /*consume_paren=*/true);
10915
10916   /* A semicolon terminates the declaration.  */
10917   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
10918
10919   /* Complete the static assertion, which may mean either processing 
10920      the static assert now or saving it for template instantiation.  */
10921   finish_static_assert (condition, message, saved_loc, member_p);
10922 }
10923
10924 /* Parse a `decltype' type. Returns the type. 
10925
10926    simple-type-specifier:
10927      decltype ( expression )  */
10928
10929 static tree
10930 cp_parser_decltype (cp_parser *parser)
10931 {
10932   tree expr;
10933   bool id_expression_or_member_access_p = false;
10934   const char *saved_message;
10935   bool saved_integral_constant_expression_p;
10936   bool saved_non_integral_constant_expression_p;
10937   cp_token *id_expr_start_token;
10938   cp_token *start_token = cp_lexer_peek_token (parser->lexer);
10939
10940   if (start_token->type == CPP_DECLTYPE)
10941     {
10942       /* Already parsed.  */
10943       cp_lexer_consume_token (parser->lexer);
10944       return start_token->u.value;
10945     }
10946
10947   /* Look for the `decltype' token.  */
10948   if (!cp_parser_require_keyword (parser, RID_DECLTYPE, RT_DECLTYPE))
10949     return error_mark_node;
10950
10951   /* Types cannot be defined in a `decltype' expression.  Save away the
10952      old message.  */
10953   saved_message = parser->type_definition_forbidden_message;
10954
10955   /* And create the new one.  */
10956   parser->type_definition_forbidden_message
10957     = G_("types may not be defined in %<decltype%> expressions");
10958
10959   /* The restrictions on constant-expressions do not apply inside
10960      decltype expressions.  */
10961   saved_integral_constant_expression_p
10962     = parser->integral_constant_expression_p;
10963   saved_non_integral_constant_expression_p
10964     = parser->non_integral_constant_expression_p;
10965   parser->integral_constant_expression_p = false;
10966
10967   /* Do not actually evaluate the expression.  */
10968   ++cp_unevaluated_operand;
10969
10970   /* Do not warn about problems with the expression.  */
10971   ++c_inhibit_evaluation_warnings;
10972
10973   /* Parse the opening `('.  */
10974   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
10975     return error_mark_node;
10976   
10977   /* First, try parsing an id-expression.  */
10978   id_expr_start_token = cp_lexer_peek_token (parser->lexer);
10979   cp_parser_parse_tentatively (parser);
10980   expr = cp_parser_id_expression (parser,
10981                                   /*template_keyword_p=*/false,
10982                                   /*check_dependency_p=*/true,
10983                                   /*template_p=*/NULL,
10984                                   /*declarator_p=*/false,
10985                                   /*optional_p=*/false);
10986
10987   if (!cp_parser_error_occurred (parser) && expr != error_mark_node)
10988     {
10989       bool non_integral_constant_expression_p = false;
10990       tree id_expression = expr;
10991       cp_id_kind idk;
10992       const char *error_msg;
10993
10994       if (TREE_CODE (expr) == IDENTIFIER_NODE)
10995         /* Lookup the name we got back from the id-expression.  */
10996         expr = cp_parser_lookup_name (parser, expr,
10997                                       none_type,
10998                                       /*is_template=*/false,
10999                                       /*is_namespace=*/false,
11000                                       /*check_dependency=*/true,
11001                                       /*ambiguous_decls=*/NULL,
11002                                       id_expr_start_token->location);
11003
11004       if (expr
11005           && expr != error_mark_node
11006           && TREE_CODE (expr) != TEMPLATE_ID_EXPR
11007           && TREE_CODE (expr) != TYPE_DECL
11008           && (TREE_CODE (expr) != BIT_NOT_EXPR
11009               || !TYPE_P (TREE_OPERAND (expr, 0)))
11010           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
11011         {
11012           /* Complete lookup of the id-expression.  */
11013           expr = (finish_id_expression
11014                   (id_expression, expr, parser->scope, &idk,
11015                    /*integral_constant_expression_p=*/false,
11016                    /*allow_non_integral_constant_expression_p=*/true,
11017                    &non_integral_constant_expression_p,
11018                    /*template_p=*/false,
11019                    /*done=*/true,
11020                    /*address_p=*/false,
11021                    /*template_arg_p=*/false,
11022                    &error_msg,
11023                    id_expr_start_token->location));
11024
11025           if (expr == error_mark_node)
11026             /* We found an id-expression, but it was something that we
11027                should not have found. This is an error, not something
11028                we can recover from, so note that we found an
11029                id-expression and we'll recover as gracefully as
11030                possible.  */
11031             id_expression_or_member_access_p = true;
11032         }
11033
11034       if (expr 
11035           && expr != error_mark_node
11036           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
11037         /* We have an id-expression.  */
11038         id_expression_or_member_access_p = true;
11039     }
11040
11041   if (!id_expression_or_member_access_p)
11042     {
11043       /* Abort the id-expression parse.  */
11044       cp_parser_abort_tentative_parse (parser);
11045
11046       /* Parsing tentatively, again.  */
11047       cp_parser_parse_tentatively (parser);
11048
11049       /* Parse a class member access.  */
11050       expr = cp_parser_postfix_expression (parser, /*address_p=*/false,
11051                                            /*cast_p=*/false,
11052                                            /*member_access_only_p=*/true, NULL);
11053
11054       if (expr 
11055           && expr != error_mark_node
11056           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
11057         /* We have an id-expression.  */
11058         id_expression_or_member_access_p = true;
11059     }
11060
11061   if (id_expression_or_member_access_p)
11062     /* We have parsed the complete id-expression or member access.  */
11063     cp_parser_parse_definitely (parser);
11064   else
11065     {
11066       bool saved_greater_than_is_operator_p;
11067
11068       /* Abort our attempt to parse an id-expression or member access
11069          expression.  */
11070       cp_parser_abort_tentative_parse (parser);
11071
11072       /* Within a parenthesized expression, a `>' token is always
11073          the greater-than operator.  */
11074       saved_greater_than_is_operator_p
11075         = parser->greater_than_is_operator_p;
11076       parser->greater_than_is_operator_p = true;
11077
11078       /* Parse a full expression.  */
11079       expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
11080
11081       /* The `>' token might be the end of a template-id or
11082          template-parameter-list now.  */
11083       parser->greater_than_is_operator_p
11084         = saved_greater_than_is_operator_p;
11085     }
11086
11087   /* Go back to evaluating expressions.  */
11088   --cp_unevaluated_operand;
11089   --c_inhibit_evaluation_warnings;
11090
11091   /* Restore the old message and the integral constant expression
11092      flags.  */
11093   parser->type_definition_forbidden_message = saved_message;
11094   parser->integral_constant_expression_p
11095     = saved_integral_constant_expression_p;
11096   parser->non_integral_constant_expression_p
11097     = saved_non_integral_constant_expression_p;
11098
11099   /* Parse to the closing `)'.  */
11100   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
11101     {
11102       cp_parser_skip_to_closing_parenthesis (parser, true, false,
11103                                              /*consume_paren=*/true);
11104       return error_mark_node;
11105     }
11106
11107   expr = finish_decltype_type (expr, id_expression_or_member_access_p,
11108                                tf_warning_or_error);
11109
11110   /* Replace the decltype with a CPP_DECLTYPE so we don't need to parse
11111      it again.  */
11112   start_token->type = CPP_DECLTYPE;
11113   start_token->u.value = expr;
11114   start_token->keyword = RID_MAX;
11115   cp_lexer_purge_tokens_after (parser->lexer, start_token);
11116
11117   return expr;
11118 }
11119
11120 /* Special member functions [gram.special] */
11121
11122 /* Parse a conversion-function-id.
11123
11124    conversion-function-id:
11125      operator conversion-type-id
11126
11127    Returns an IDENTIFIER_NODE representing the operator.  */
11128
11129 static tree
11130 cp_parser_conversion_function_id (cp_parser* parser)
11131 {
11132   tree type;
11133   tree saved_scope;
11134   tree saved_qualifying_scope;
11135   tree saved_object_scope;
11136   tree pushed_scope = NULL_TREE;
11137
11138   /* Look for the `operator' token.  */
11139   if (!cp_parser_require_keyword (parser, RID_OPERATOR, RT_OPERATOR))
11140     return error_mark_node;
11141   /* When we parse the conversion-type-id, the current scope will be
11142      reset.  However, we need that information in able to look up the
11143      conversion function later, so we save it here.  */
11144   saved_scope = parser->scope;
11145   saved_qualifying_scope = parser->qualifying_scope;
11146   saved_object_scope = parser->object_scope;
11147   /* We must enter the scope of the class so that the names of
11148      entities declared within the class are available in the
11149      conversion-type-id.  For example, consider:
11150
11151        struct S {
11152          typedef int I;
11153          operator I();
11154        };
11155
11156        S::operator I() { ... }
11157
11158      In order to see that `I' is a type-name in the definition, we
11159      must be in the scope of `S'.  */
11160   if (saved_scope)
11161     pushed_scope = push_scope (saved_scope);
11162   /* Parse the conversion-type-id.  */
11163   type = cp_parser_conversion_type_id (parser);
11164   /* Leave the scope of the class, if any.  */
11165   if (pushed_scope)
11166     pop_scope (pushed_scope);
11167   /* Restore the saved scope.  */
11168   parser->scope = saved_scope;
11169   parser->qualifying_scope = saved_qualifying_scope;
11170   parser->object_scope = saved_object_scope;
11171   /* If the TYPE is invalid, indicate failure.  */
11172   if (type == error_mark_node)
11173     return error_mark_node;
11174   return mangle_conv_op_name_for_type (type);
11175 }
11176
11177 /* Parse a conversion-type-id:
11178
11179    conversion-type-id:
11180      type-specifier-seq conversion-declarator [opt]
11181
11182    Returns the TYPE specified.  */
11183
11184 static tree
11185 cp_parser_conversion_type_id (cp_parser* parser)
11186 {
11187   tree attributes;
11188   cp_decl_specifier_seq type_specifiers;
11189   cp_declarator *declarator;
11190   tree type_specified;
11191
11192   /* Parse the attributes.  */
11193   attributes = cp_parser_attributes_opt (parser);
11194   /* Parse the type-specifiers.  */
11195   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
11196                                 /*is_trailing_return=*/false,
11197                                 &type_specifiers);
11198   /* If that didn't work, stop.  */
11199   if (type_specifiers.type == error_mark_node)
11200     return error_mark_node;
11201   /* Parse the conversion-declarator.  */
11202   declarator = cp_parser_conversion_declarator_opt (parser);
11203
11204   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
11205                                     /*initialized=*/0, &attributes);
11206   if (attributes)
11207     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
11208
11209   /* Don't give this error when parsing tentatively.  This happens to
11210      work because we always parse this definitively once.  */
11211   if (! cp_parser_uncommitted_to_tentative_parse_p (parser)
11212       && type_uses_auto (type_specified))
11213     {
11214       error ("invalid use of %<auto%> in conversion operator");
11215       return error_mark_node;
11216     }
11217
11218   return type_specified;
11219 }
11220
11221 /* Parse an (optional) conversion-declarator.
11222
11223    conversion-declarator:
11224      ptr-operator conversion-declarator [opt]
11225
11226    */
11227
11228 static cp_declarator *
11229 cp_parser_conversion_declarator_opt (cp_parser* parser)
11230 {
11231   enum tree_code code;
11232   tree class_type;
11233   cp_cv_quals cv_quals;
11234
11235   /* We don't know if there's a ptr-operator next, or not.  */
11236   cp_parser_parse_tentatively (parser);
11237   /* Try the ptr-operator.  */
11238   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
11239   /* If it worked, look for more conversion-declarators.  */
11240   if (cp_parser_parse_definitely (parser))
11241     {
11242       cp_declarator *declarator;
11243
11244       /* Parse another optional declarator.  */
11245       declarator = cp_parser_conversion_declarator_opt (parser);
11246
11247       return cp_parser_make_indirect_declarator
11248         (code, class_type, cv_quals, declarator);
11249    }
11250
11251   return NULL;
11252 }
11253
11254 /* Parse an (optional) ctor-initializer.
11255
11256    ctor-initializer:
11257      : mem-initializer-list
11258
11259    Returns TRUE iff the ctor-initializer was actually present.  */
11260
11261 static bool
11262 cp_parser_ctor_initializer_opt (cp_parser* parser)
11263 {
11264   /* If the next token is not a `:', then there is no
11265      ctor-initializer.  */
11266   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
11267     {
11268       /* Do default initialization of any bases and members.  */
11269       if (DECL_CONSTRUCTOR_P (current_function_decl))
11270         finish_mem_initializers (NULL_TREE);
11271
11272       return false;
11273     }
11274
11275   /* Consume the `:' token.  */
11276   cp_lexer_consume_token (parser->lexer);
11277   /* And the mem-initializer-list.  */
11278   cp_parser_mem_initializer_list (parser);
11279
11280   return true;
11281 }
11282
11283 /* Parse a mem-initializer-list.
11284
11285    mem-initializer-list:
11286      mem-initializer ... [opt]
11287      mem-initializer ... [opt] , mem-initializer-list  */
11288
11289 static void
11290 cp_parser_mem_initializer_list (cp_parser* parser)
11291 {
11292   tree mem_initializer_list = NULL_TREE;
11293   cp_token *token = cp_lexer_peek_token (parser->lexer);
11294
11295   /* Let the semantic analysis code know that we are starting the
11296      mem-initializer-list.  */
11297   if (!DECL_CONSTRUCTOR_P (current_function_decl))
11298     error_at (token->location,
11299               "only constructors take member initializers");
11300
11301   /* Loop through the list.  */
11302   while (true)
11303     {
11304       tree mem_initializer;
11305
11306       token = cp_lexer_peek_token (parser->lexer);
11307       /* Parse the mem-initializer.  */
11308       mem_initializer = cp_parser_mem_initializer (parser);
11309       /* If the next token is a `...', we're expanding member initializers. */
11310       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
11311         {
11312           /* Consume the `...'. */
11313           cp_lexer_consume_token (parser->lexer);
11314
11315           /* The TREE_PURPOSE must be a _TYPE, because base-specifiers
11316              can be expanded but members cannot. */
11317           if (mem_initializer != error_mark_node
11318               && !TYPE_P (TREE_PURPOSE (mem_initializer)))
11319             {
11320               error_at (token->location,
11321                         "cannot expand initializer for member %<%D%>",
11322                         TREE_PURPOSE (mem_initializer));
11323               mem_initializer = error_mark_node;
11324             }
11325
11326           /* Construct the pack expansion type. */
11327           if (mem_initializer != error_mark_node)
11328             mem_initializer = make_pack_expansion (mem_initializer);
11329         }
11330       /* Add it to the list, unless it was erroneous.  */
11331       if (mem_initializer != error_mark_node)
11332         {
11333           TREE_CHAIN (mem_initializer) = mem_initializer_list;
11334           mem_initializer_list = mem_initializer;
11335         }
11336       /* If the next token is not a `,', we're done.  */
11337       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11338         break;
11339       /* Consume the `,' token.  */
11340       cp_lexer_consume_token (parser->lexer);
11341     }
11342
11343   /* Perform semantic analysis.  */
11344   if (DECL_CONSTRUCTOR_P (current_function_decl))
11345     finish_mem_initializers (mem_initializer_list);
11346 }
11347
11348 /* Parse a mem-initializer.
11349
11350    mem-initializer:
11351      mem-initializer-id ( expression-list [opt] )
11352      mem-initializer-id braced-init-list
11353
11354    GNU extension:
11355
11356    mem-initializer:
11357      ( expression-list [opt] )
11358
11359    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
11360    class) or FIELD_DECL (for a non-static data member) to initialize;
11361    the TREE_VALUE is the expression-list.  An empty initialization
11362    list is represented by void_list_node.  */
11363
11364 static tree
11365 cp_parser_mem_initializer (cp_parser* parser)
11366 {
11367   tree mem_initializer_id;
11368   tree expression_list;
11369   tree member;
11370   cp_token *token = cp_lexer_peek_token (parser->lexer);
11371
11372   /* Find out what is being initialized.  */
11373   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
11374     {
11375       permerror (token->location,
11376                  "anachronistic old-style base class initializer");
11377       mem_initializer_id = NULL_TREE;
11378     }
11379   else
11380     {
11381       mem_initializer_id = cp_parser_mem_initializer_id (parser);
11382       if (mem_initializer_id == error_mark_node)
11383         return mem_initializer_id;
11384     }
11385   member = expand_member_init (mem_initializer_id);
11386   if (member && !DECL_P (member))
11387     in_base_initializer = 1;
11388
11389   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
11390     {
11391       bool expr_non_constant_p;
11392       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
11393       expression_list = cp_parser_braced_list (parser, &expr_non_constant_p);
11394       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
11395       expression_list = build_tree_list (NULL_TREE, expression_list);
11396     }
11397   else
11398     {
11399       VEC(tree,gc)* vec;
11400       vec = cp_parser_parenthesized_expression_list (parser, non_attr,
11401                                                      /*cast_p=*/false,
11402                                                      /*allow_expansion_p=*/true,
11403                                                      /*non_constant_p=*/NULL);
11404       if (vec == NULL)
11405         return error_mark_node;
11406       expression_list = build_tree_list_vec (vec);
11407       release_tree_vector (vec);
11408     }
11409
11410   if (expression_list == error_mark_node)
11411     return error_mark_node;
11412   if (!expression_list)
11413     expression_list = void_type_node;
11414
11415   in_base_initializer = 0;
11416
11417   return member ? build_tree_list (member, expression_list) : error_mark_node;
11418 }
11419
11420 /* Parse a mem-initializer-id.
11421
11422    mem-initializer-id:
11423      :: [opt] nested-name-specifier [opt] class-name
11424      identifier
11425
11426    Returns a TYPE indicating the class to be initializer for the first
11427    production.  Returns an IDENTIFIER_NODE indicating the data member
11428    to be initialized for the second production.  */
11429
11430 static tree
11431 cp_parser_mem_initializer_id (cp_parser* parser)
11432 {
11433   bool global_scope_p;
11434   bool nested_name_specifier_p;
11435   bool template_p = false;
11436   tree id;
11437
11438   cp_token *token = cp_lexer_peek_token (parser->lexer);
11439
11440   /* `typename' is not allowed in this context ([temp.res]).  */
11441   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
11442     {
11443       error_at (token->location, 
11444                 "keyword %<typename%> not allowed in this context (a qualified "
11445                 "member initializer is implicitly a type)");
11446       cp_lexer_consume_token (parser->lexer);
11447     }
11448   /* Look for the optional `::' operator.  */
11449   global_scope_p
11450     = (cp_parser_global_scope_opt (parser,
11451                                    /*current_scope_valid_p=*/false)
11452        != NULL_TREE);
11453   /* Look for the optional nested-name-specifier.  The simplest way to
11454      implement:
11455
11456        [temp.res]
11457
11458        The keyword `typename' is not permitted in a base-specifier or
11459        mem-initializer; in these contexts a qualified name that
11460        depends on a template-parameter is implicitly assumed to be a
11461        type name.
11462
11463      is to assume that we have seen the `typename' keyword at this
11464      point.  */
11465   nested_name_specifier_p
11466     = (cp_parser_nested_name_specifier_opt (parser,
11467                                             /*typename_keyword_p=*/true,
11468                                             /*check_dependency_p=*/true,
11469                                             /*type_p=*/true,
11470                                             /*is_declaration=*/true)
11471        != NULL_TREE);
11472   if (nested_name_specifier_p)
11473     template_p = cp_parser_optional_template_keyword (parser);
11474   /* If there is a `::' operator or a nested-name-specifier, then we
11475      are definitely looking for a class-name.  */
11476   if (global_scope_p || nested_name_specifier_p)
11477     return cp_parser_class_name (parser,
11478                                  /*typename_keyword_p=*/true,
11479                                  /*template_keyword_p=*/template_p,
11480                                  typename_type,
11481                                  /*check_dependency_p=*/true,
11482                                  /*class_head_p=*/false,
11483                                  /*is_declaration=*/true);
11484   /* Otherwise, we could also be looking for an ordinary identifier.  */
11485   cp_parser_parse_tentatively (parser);
11486   /* Try a class-name.  */
11487   id = cp_parser_class_name (parser,
11488                              /*typename_keyword_p=*/true,
11489                              /*template_keyword_p=*/false,
11490                              none_type,
11491                              /*check_dependency_p=*/true,
11492                              /*class_head_p=*/false,
11493                              /*is_declaration=*/true);
11494   /* If we found one, we're done.  */
11495   if (cp_parser_parse_definitely (parser))
11496     return id;
11497   /* Otherwise, look for an ordinary identifier.  */
11498   return cp_parser_identifier (parser);
11499 }
11500
11501 /* Overloading [gram.over] */
11502
11503 /* Parse an operator-function-id.
11504
11505    operator-function-id:
11506      operator operator
11507
11508    Returns an IDENTIFIER_NODE for the operator which is a
11509    human-readable spelling of the identifier, e.g., `operator +'.  */
11510
11511 static tree
11512 cp_parser_operator_function_id (cp_parser* parser)
11513 {
11514   /* Look for the `operator' keyword.  */
11515   if (!cp_parser_require_keyword (parser, RID_OPERATOR, RT_OPERATOR))
11516     return error_mark_node;
11517   /* And then the name of the operator itself.  */
11518   return cp_parser_operator (parser);
11519 }
11520
11521 /* Return an identifier node for a user-defined literal operator.
11522    The suffix identifier is chained to the operator name identifier.  */
11523
11524 static tree
11525 cp_literal_operator_id (const char* name)
11526 {
11527   tree identifier;
11528   char *buffer = XNEWVEC (char, strlen (UDLIT_OP_ANSI_PREFIX)
11529                               + strlen (name) + 10);
11530   sprintf (buffer, UDLIT_OP_ANSI_FORMAT, name);
11531   identifier = get_identifier (buffer);
11532   /*IDENTIFIER_UDLIT_OPNAME_P (identifier) = 1; If we get a flag someday. */
11533
11534   return identifier;
11535 }
11536
11537 /* Parse an operator.
11538
11539    operator:
11540      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
11541      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
11542      || ++ -- , ->* -> () []
11543
11544    GNU Extensions:
11545
11546    operator:
11547      <? >? <?= >?=
11548
11549    Returns an IDENTIFIER_NODE for the operator which is a
11550    human-readable spelling of the identifier, e.g., `operator +'.  */
11551
11552 static tree
11553 cp_parser_operator (cp_parser* parser)
11554 {
11555   tree id = NULL_TREE;
11556   cp_token *token;
11557
11558   /* Peek at the next token.  */
11559   token = cp_lexer_peek_token (parser->lexer);
11560   /* Figure out which operator we have.  */
11561   switch (token->type)
11562     {
11563     case CPP_KEYWORD:
11564       {
11565         enum tree_code op;
11566
11567         /* The keyword should be either `new' or `delete'.  */
11568         if (token->keyword == RID_NEW)
11569           op = NEW_EXPR;
11570         else if (token->keyword == RID_DELETE)
11571           op = DELETE_EXPR;
11572         else
11573           break;
11574
11575         /* Consume the `new' or `delete' token.  */
11576         cp_lexer_consume_token (parser->lexer);
11577
11578         /* Peek at the next token.  */
11579         token = cp_lexer_peek_token (parser->lexer);
11580         /* If it's a `[' token then this is the array variant of the
11581            operator.  */
11582         if (token->type == CPP_OPEN_SQUARE)
11583           {
11584             /* Consume the `[' token.  */
11585             cp_lexer_consume_token (parser->lexer);
11586             /* Look for the `]' token.  */
11587             cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
11588             id = ansi_opname (op == NEW_EXPR
11589                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
11590           }
11591         /* Otherwise, we have the non-array variant.  */
11592         else
11593           id = ansi_opname (op);
11594
11595         return id;
11596       }
11597
11598     case CPP_PLUS:
11599       id = ansi_opname (PLUS_EXPR);
11600       break;
11601
11602     case CPP_MINUS:
11603       id = ansi_opname (MINUS_EXPR);
11604       break;
11605
11606     case CPP_MULT:
11607       id = ansi_opname (MULT_EXPR);
11608       break;
11609
11610     case CPP_DIV:
11611       id = ansi_opname (TRUNC_DIV_EXPR);
11612       break;
11613
11614     case CPP_MOD:
11615       id = ansi_opname (TRUNC_MOD_EXPR);
11616       break;
11617
11618     case CPP_XOR:
11619       id = ansi_opname (BIT_XOR_EXPR);
11620       break;
11621
11622     case CPP_AND:
11623       id = ansi_opname (BIT_AND_EXPR);
11624       break;
11625
11626     case CPP_OR:
11627       id = ansi_opname (BIT_IOR_EXPR);
11628       break;
11629
11630     case CPP_COMPL:
11631       id = ansi_opname (BIT_NOT_EXPR);
11632       break;
11633
11634     case CPP_NOT:
11635       id = ansi_opname (TRUTH_NOT_EXPR);
11636       break;
11637
11638     case CPP_EQ:
11639       id = ansi_assopname (NOP_EXPR);
11640       break;
11641
11642     case CPP_LESS:
11643       id = ansi_opname (LT_EXPR);
11644       break;
11645
11646     case CPP_GREATER:
11647       id = ansi_opname (GT_EXPR);
11648       break;
11649
11650     case CPP_PLUS_EQ:
11651       id = ansi_assopname (PLUS_EXPR);
11652       break;
11653
11654     case CPP_MINUS_EQ:
11655       id = ansi_assopname (MINUS_EXPR);
11656       break;
11657
11658     case CPP_MULT_EQ:
11659       id = ansi_assopname (MULT_EXPR);
11660       break;
11661
11662     case CPP_DIV_EQ:
11663       id = ansi_assopname (TRUNC_DIV_EXPR);
11664       break;
11665
11666     case CPP_MOD_EQ:
11667       id = ansi_assopname (TRUNC_MOD_EXPR);
11668       break;
11669
11670     case CPP_XOR_EQ:
11671       id = ansi_assopname (BIT_XOR_EXPR);
11672       break;
11673
11674     case CPP_AND_EQ:
11675       id = ansi_assopname (BIT_AND_EXPR);
11676       break;
11677
11678     case CPP_OR_EQ:
11679       id = ansi_assopname (BIT_IOR_EXPR);
11680       break;
11681
11682     case CPP_LSHIFT:
11683       id = ansi_opname (LSHIFT_EXPR);
11684       break;
11685
11686     case CPP_RSHIFT:
11687       id = ansi_opname (RSHIFT_EXPR);
11688       break;
11689
11690     case CPP_LSHIFT_EQ:
11691       id = ansi_assopname (LSHIFT_EXPR);
11692       break;
11693
11694     case CPP_RSHIFT_EQ:
11695       id = ansi_assopname (RSHIFT_EXPR);
11696       break;
11697
11698     case CPP_EQ_EQ:
11699       id = ansi_opname (EQ_EXPR);
11700       break;
11701
11702     case CPP_NOT_EQ:
11703       id = ansi_opname (NE_EXPR);
11704       break;
11705
11706     case CPP_LESS_EQ:
11707       id = ansi_opname (LE_EXPR);
11708       break;
11709
11710     case CPP_GREATER_EQ:
11711       id = ansi_opname (GE_EXPR);
11712       break;
11713
11714     case CPP_AND_AND:
11715       id = ansi_opname (TRUTH_ANDIF_EXPR);
11716       break;
11717
11718     case CPP_OR_OR:
11719       id = ansi_opname (TRUTH_ORIF_EXPR);
11720       break;
11721
11722     case CPP_PLUS_PLUS:
11723       id = ansi_opname (POSTINCREMENT_EXPR);
11724       break;
11725
11726     case CPP_MINUS_MINUS:
11727       id = ansi_opname (PREDECREMENT_EXPR);
11728       break;
11729
11730     case CPP_COMMA:
11731       id = ansi_opname (COMPOUND_EXPR);
11732       break;
11733
11734     case CPP_DEREF_STAR:
11735       id = ansi_opname (MEMBER_REF);
11736       break;
11737
11738     case CPP_DEREF:
11739       id = ansi_opname (COMPONENT_REF);
11740       break;
11741
11742     case CPP_OPEN_PAREN:
11743       /* Consume the `('.  */
11744       cp_lexer_consume_token (parser->lexer);
11745       /* Look for the matching `)'.  */
11746       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
11747       return ansi_opname (CALL_EXPR);
11748
11749     case CPP_OPEN_SQUARE:
11750       /* Consume the `['.  */
11751       cp_lexer_consume_token (parser->lexer);
11752       /* Look for the matching `]'.  */
11753       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
11754       return ansi_opname (ARRAY_REF);
11755
11756     case CPP_STRING:
11757       if (cxx_dialect == cxx98)
11758         maybe_warn_cpp0x (CPP0X_USER_DEFINED_LITERALS);
11759       if (TREE_STRING_LENGTH (token->u.value) > 2)
11760         {
11761           error ("expected empty string after %<operator%> keyword");
11762           return error_mark_node;
11763         }
11764       /* Consume the string.  */
11765       cp_lexer_consume_token (parser->lexer);
11766       /* Look for the suffix identifier.  */
11767       token = cp_lexer_peek_token (parser->lexer);
11768       if (token->type == CPP_NAME)
11769         {
11770           id = cp_parser_identifier (parser);
11771           if (id != error_mark_node)
11772             {
11773               const char *name = IDENTIFIER_POINTER (id);
11774               return cp_literal_operator_id (name);
11775             }
11776         }
11777       else
11778         {
11779           error ("expected suffix identifier");
11780           return error_mark_node;
11781         }
11782
11783     case CPP_STRING_USERDEF:
11784       error ("missing space between %<\"\"%> and suffix identifier");
11785       return error_mark_node;
11786
11787     default:
11788       /* Anything else is an error.  */
11789       break;
11790     }
11791
11792   /* If we have selected an identifier, we need to consume the
11793      operator token.  */
11794   if (id)
11795     cp_lexer_consume_token (parser->lexer);
11796   /* Otherwise, no valid operator name was present.  */
11797   else
11798     {
11799       cp_parser_error (parser, "expected operator");
11800       id = error_mark_node;
11801     }
11802
11803   return id;
11804 }
11805
11806 /* Parse a template-declaration.
11807
11808    template-declaration:
11809      export [opt] template < template-parameter-list > declaration
11810
11811    If MEMBER_P is TRUE, this template-declaration occurs within a
11812    class-specifier.
11813
11814    The grammar rule given by the standard isn't correct.  What
11815    is really meant is:
11816
11817    template-declaration:
11818      export [opt] template-parameter-list-seq
11819        decl-specifier-seq [opt] init-declarator [opt] ;
11820      export [opt] template-parameter-list-seq
11821        function-definition
11822
11823    template-parameter-list-seq:
11824      template-parameter-list-seq [opt]
11825      template < template-parameter-list >  */
11826
11827 static void
11828 cp_parser_template_declaration (cp_parser* parser, bool member_p)
11829 {
11830   /* Check for `export'.  */
11831   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
11832     {
11833       /* Consume the `export' token.  */
11834       cp_lexer_consume_token (parser->lexer);
11835       /* Warn that we do not support `export'.  */
11836       warning (0, "keyword %<export%> not implemented, and will be ignored");
11837     }
11838
11839   cp_parser_template_declaration_after_export (parser, member_p);
11840 }
11841
11842 /* Parse a template-parameter-list.
11843
11844    template-parameter-list:
11845      template-parameter
11846      template-parameter-list , template-parameter
11847
11848    Returns a TREE_LIST.  Each node represents a template parameter.
11849    The nodes are connected via their TREE_CHAINs.  */
11850
11851 static tree
11852 cp_parser_template_parameter_list (cp_parser* parser)
11853 {
11854   tree parameter_list = NULL_TREE;
11855
11856   begin_template_parm_list ();
11857
11858   /* The loop below parses the template parms.  We first need to know
11859      the total number of template parms to be able to compute proper
11860      canonical types of each dependent type. So after the loop, when
11861      we know the total number of template parms,
11862      end_template_parm_list computes the proper canonical types and
11863      fixes up the dependent types accordingly.  */
11864   while (true)
11865     {
11866       tree parameter;
11867       bool is_non_type;
11868       bool is_parameter_pack;
11869       location_t parm_loc;
11870
11871       /* Parse the template-parameter.  */
11872       parm_loc = cp_lexer_peek_token (parser->lexer)->location;
11873       parameter = cp_parser_template_parameter (parser, 
11874                                                 &is_non_type,
11875                                                 &is_parameter_pack);
11876       /* Add it to the list.  */
11877       if (parameter != error_mark_node)
11878         parameter_list = process_template_parm (parameter_list,
11879                                                 parm_loc,
11880                                                 parameter,
11881                                                 is_non_type,
11882                                                 is_parameter_pack,
11883                                                 0);
11884       else
11885        {
11886          tree err_parm = build_tree_list (parameter, parameter);
11887          parameter_list = chainon (parameter_list, err_parm);
11888        }
11889
11890       /* If the next token is not a `,', we're done.  */
11891       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11892         break;
11893       /* Otherwise, consume the `,' token.  */
11894       cp_lexer_consume_token (parser->lexer);
11895     }
11896
11897   return end_template_parm_list (parameter_list);
11898 }
11899
11900 /* Parse a template-parameter.
11901
11902    template-parameter:
11903      type-parameter
11904      parameter-declaration
11905
11906    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
11907    the parameter.  The TREE_PURPOSE is the default value, if any.
11908    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
11909    iff this parameter is a non-type parameter.  *IS_PARAMETER_PACK is
11910    set to true iff this parameter is a parameter pack. */
11911
11912 static tree
11913 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type,
11914                               bool *is_parameter_pack)
11915 {
11916   cp_token *token;
11917   cp_parameter_declarator *parameter_declarator;
11918   cp_declarator *id_declarator;
11919   tree parm;
11920
11921   /* Assume it is a type parameter or a template parameter.  */
11922   *is_non_type = false;
11923   /* Assume it not a parameter pack. */
11924   *is_parameter_pack = false;
11925   /* Peek at the next token.  */
11926   token = cp_lexer_peek_token (parser->lexer);
11927   /* If it is `class' or `template', we have a type-parameter.  */
11928   if (token->keyword == RID_TEMPLATE)
11929     return cp_parser_type_parameter (parser, is_parameter_pack);
11930   /* If it is `class' or `typename' we do not know yet whether it is a
11931      type parameter or a non-type parameter.  Consider:
11932
11933        template <typename T, typename T::X X> ...
11934
11935      or:
11936
11937        template <class C, class D*> ...
11938
11939      Here, the first parameter is a type parameter, and the second is
11940      a non-type parameter.  We can tell by looking at the token after
11941      the identifier -- if it is a `,', `=', or `>' then we have a type
11942      parameter.  */
11943   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
11944     {
11945       /* Peek at the token after `class' or `typename'.  */
11946       token = cp_lexer_peek_nth_token (parser->lexer, 2);
11947       /* If it's an ellipsis, we have a template type parameter
11948          pack. */
11949       if (token->type == CPP_ELLIPSIS)
11950         return cp_parser_type_parameter (parser, is_parameter_pack);
11951       /* If it's an identifier, skip it.  */
11952       if (token->type == CPP_NAME)
11953         token = cp_lexer_peek_nth_token (parser->lexer, 3);
11954       /* Now, see if the token looks like the end of a template
11955          parameter.  */
11956       if (token->type == CPP_COMMA
11957           || token->type == CPP_EQ
11958           || token->type == CPP_GREATER)
11959         return cp_parser_type_parameter (parser, is_parameter_pack);
11960     }
11961
11962   /* Otherwise, it is a non-type parameter.
11963
11964      [temp.param]
11965
11966      When parsing a default template-argument for a non-type
11967      template-parameter, the first non-nested `>' is taken as the end
11968      of the template parameter-list rather than a greater-than
11969      operator.  */
11970   *is_non_type = true;
11971   parameter_declarator
11972      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
11973                                         /*parenthesized_p=*/NULL);
11974
11975   /* If the parameter declaration is marked as a parameter pack, set
11976      *IS_PARAMETER_PACK to notify the caller. Also, unmark the
11977      declarator's PACK_EXPANSION_P, otherwise we'll get errors from
11978      grokdeclarator. */
11979   if (parameter_declarator
11980       && parameter_declarator->declarator
11981       && parameter_declarator->declarator->parameter_pack_p)
11982     {
11983       *is_parameter_pack = true;
11984       parameter_declarator->declarator->parameter_pack_p = false;
11985     }
11986
11987   /* If the next token is an ellipsis, and we don't already have it
11988      marked as a parameter pack, then we have a parameter pack (that
11989      has no declarator).  */
11990   if (!*is_parameter_pack
11991       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
11992       && declarator_can_be_parameter_pack (parameter_declarator->declarator))
11993     {
11994       /* Consume the `...'.  */
11995       cp_lexer_consume_token (parser->lexer);
11996       maybe_warn_variadic_templates ();
11997       
11998       *is_parameter_pack = true;
11999     }
12000   /* We might end up with a pack expansion as the type of the non-type
12001      template parameter, in which case this is a non-type template
12002      parameter pack.  */
12003   else if (parameter_declarator
12004            && parameter_declarator->decl_specifiers.type
12005            && PACK_EXPANSION_P (parameter_declarator->decl_specifiers.type))
12006     {
12007       *is_parameter_pack = true;
12008       parameter_declarator->decl_specifiers.type = 
12009         PACK_EXPANSION_PATTERN (parameter_declarator->decl_specifiers.type);
12010     }
12011
12012   if (*is_parameter_pack && cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12013     {
12014       /* Parameter packs cannot have default arguments.  However, a
12015          user may try to do so, so we'll parse them and give an
12016          appropriate diagnostic here.  */
12017
12018       cp_token *start_token = cp_lexer_peek_token (parser->lexer);
12019       
12020       /* Find the name of the parameter pack.  */     
12021       id_declarator = parameter_declarator->declarator;
12022       while (id_declarator && id_declarator->kind != cdk_id)
12023         id_declarator = id_declarator->declarator;
12024       
12025       if (id_declarator && id_declarator->kind == cdk_id)
12026         error_at (start_token->location,
12027                   "template parameter pack %qD cannot have a default argument",
12028                   id_declarator->u.id.unqualified_name);
12029       else
12030         error_at (start_token->location,
12031                   "template parameter pack cannot have a default argument");
12032       
12033       /* Parse the default argument, but throw away the result.  */
12034       cp_parser_default_argument (parser, /*template_parm_p=*/true);
12035     }
12036
12037   parm = grokdeclarator (parameter_declarator->declarator,
12038                          &parameter_declarator->decl_specifiers,
12039                          TPARM, /*initialized=*/0,
12040                          /*attrlist=*/NULL);
12041   if (parm == error_mark_node)
12042     return error_mark_node;
12043
12044   return build_tree_list (parameter_declarator->default_argument, parm);
12045 }
12046
12047 /* Parse a type-parameter.
12048
12049    type-parameter:
12050      class identifier [opt]
12051      class identifier [opt] = type-id
12052      typename identifier [opt]
12053      typename identifier [opt] = type-id
12054      template < template-parameter-list > class identifier [opt]
12055      template < template-parameter-list > class identifier [opt]
12056        = id-expression
12057
12058    GNU Extension (variadic templates):
12059
12060    type-parameter:
12061      class ... identifier [opt]
12062      typename ... identifier [opt]
12063
12064    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
12065    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
12066    the declaration of the parameter.
12067
12068    Sets *IS_PARAMETER_PACK if this is a template parameter pack. */
12069
12070 static tree
12071 cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
12072 {
12073   cp_token *token;
12074   tree parameter;
12075
12076   /* Look for a keyword to tell us what kind of parameter this is.  */
12077   token = cp_parser_require (parser, CPP_KEYWORD, RT_CLASS_TYPENAME_TEMPLATE);
12078   if (!token)
12079     return error_mark_node;
12080
12081   switch (token->keyword)
12082     {
12083     case RID_CLASS:
12084     case RID_TYPENAME:
12085       {
12086         tree identifier;
12087         tree default_argument;
12088
12089         /* If the next token is an ellipsis, we have a template
12090            argument pack. */
12091         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
12092           {
12093             /* Consume the `...' token. */
12094             cp_lexer_consume_token (parser->lexer);
12095             maybe_warn_variadic_templates ();
12096
12097             *is_parameter_pack = true;
12098           }
12099
12100         /* If the next token is an identifier, then it names the
12101            parameter.  */
12102         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12103           identifier = cp_parser_identifier (parser);
12104         else
12105           identifier = NULL_TREE;
12106
12107         /* Create the parameter.  */
12108         parameter = finish_template_type_parm (class_type_node, identifier);
12109
12110         /* If the next token is an `=', we have a default argument.  */
12111         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12112           {
12113             /* Consume the `=' token.  */
12114             cp_lexer_consume_token (parser->lexer);
12115             /* Parse the default-argument.  */
12116             push_deferring_access_checks (dk_no_deferred);
12117             default_argument = cp_parser_type_id (parser);
12118
12119             /* Template parameter packs cannot have default
12120                arguments. */
12121             if (*is_parameter_pack)
12122               {
12123                 if (identifier)
12124                   error_at (token->location,
12125                             "template parameter pack %qD cannot have a "
12126                             "default argument", identifier);
12127                 else
12128                   error_at (token->location,
12129                             "template parameter packs cannot have "
12130                             "default arguments");
12131                 default_argument = NULL_TREE;
12132               }
12133             pop_deferring_access_checks ();
12134           }
12135         else
12136           default_argument = NULL_TREE;
12137
12138         /* Create the combined representation of the parameter and the
12139            default argument.  */
12140         parameter = build_tree_list (default_argument, parameter);
12141       }
12142       break;
12143
12144     case RID_TEMPLATE:
12145       {
12146         tree identifier;
12147         tree default_argument;
12148
12149         /* Look for the `<'.  */
12150         cp_parser_require (parser, CPP_LESS, RT_LESS);
12151         /* Parse the template-parameter-list.  */
12152         cp_parser_template_parameter_list (parser);
12153         /* Look for the `>'.  */
12154         cp_parser_require (parser, CPP_GREATER, RT_GREATER);
12155         /* Look for the `class' keyword.  */
12156         cp_parser_require_keyword (parser, RID_CLASS, RT_CLASS);
12157         /* If the next token is an ellipsis, we have a template
12158            argument pack. */
12159         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
12160           {
12161             /* Consume the `...' token. */
12162             cp_lexer_consume_token (parser->lexer);
12163             maybe_warn_variadic_templates ();
12164
12165             *is_parameter_pack = true;
12166           }
12167         /* If the next token is an `=', then there is a
12168            default-argument.  If the next token is a `>', we are at
12169            the end of the parameter-list.  If the next token is a `,',
12170            then we are at the end of this parameter.  */
12171         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
12172             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
12173             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
12174           {
12175             identifier = cp_parser_identifier (parser);
12176             /* Treat invalid names as if the parameter were nameless.  */
12177             if (identifier == error_mark_node)
12178               identifier = NULL_TREE;
12179           }
12180         else
12181           identifier = NULL_TREE;
12182
12183         /* Create the template parameter.  */
12184         parameter = finish_template_template_parm (class_type_node,
12185                                                    identifier);
12186
12187         /* If the next token is an `=', then there is a
12188            default-argument.  */
12189         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12190           {
12191             bool is_template;
12192
12193             /* Consume the `='.  */
12194             cp_lexer_consume_token (parser->lexer);
12195             /* Parse the id-expression.  */
12196             push_deferring_access_checks (dk_no_deferred);
12197             /* save token before parsing the id-expression, for error
12198                reporting */
12199             token = cp_lexer_peek_token (parser->lexer);
12200             default_argument
12201               = cp_parser_id_expression (parser,
12202                                          /*template_keyword_p=*/false,
12203                                          /*check_dependency_p=*/true,
12204                                          /*template_p=*/&is_template,
12205                                          /*declarator_p=*/false,
12206                                          /*optional_p=*/false);
12207             if (TREE_CODE (default_argument) == TYPE_DECL)
12208               /* If the id-expression was a template-id that refers to
12209                  a template-class, we already have the declaration here,
12210                  so no further lookup is needed.  */
12211                  ;
12212             else
12213               /* Look up the name.  */
12214               default_argument
12215                 = cp_parser_lookup_name (parser, default_argument,
12216                                          none_type,
12217                                          /*is_template=*/is_template,
12218                                          /*is_namespace=*/false,
12219                                          /*check_dependency=*/true,
12220                                          /*ambiguous_decls=*/NULL,
12221                                          token->location);
12222             /* See if the default argument is valid.  */
12223             default_argument
12224               = check_template_template_default_arg (default_argument);
12225
12226             /* Template parameter packs cannot have default
12227                arguments. */
12228             if (*is_parameter_pack)
12229               {
12230                 if (identifier)
12231                   error_at (token->location,
12232                             "template parameter pack %qD cannot "
12233                             "have a default argument",
12234                             identifier);
12235                 else
12236                   error_at (token->location, "template parameter packs cannot "
12237                             "have default arguments");
12238                 default_argument = NULL_TREE;
12239               }
12240             pop_deferring_access_checks ();
12241           }
12242         else
12243           default_argument = NULL_TREE;
12244
12245         /* Create the combined representation of the parameter and the
12246            default argument.  */
12247         parameter = build_tree_list (default_argument, parameter);
12248       }
12249       break;
12250
12251     default:
12252       gcc_unreachable ();
12253       break;
12254     }
12255
12256   return parameter;
12257 }
12258
12259 /* Parse a template-id.
12260
12261    template-id:
12262      template-name < template-argument-list [opt] >
12263
12264    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
12265    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
12266    returned.  Otherwise, if the template-name names a function, or set
12267    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
12268    names a class, returns a TYPE_DECL for the specialization.
12269
12270    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
12271    uninstantiated templates.  */
12272
12273 static tree
12274 cp_parser_template_id (cp_parser *parser,
12275                        bool template_keyword_p,
12276                        bool check_dependency_p,
12277                        bool is_declaration)
12278 {
12279   int i;
12280   tree templ;
12281   tree arguments;
12282   tree template_id;
12283   cp_token_position start_of_id = 0;
12284   deferred_access_check *chk;
12285   VEC (deferred_access_check,gc) *access_check;
12286   cp_token *next_token = NULL, *next_token_2 = NULL;
12287   bool is_identifier;
12288
12289   /* If the next token corresponds to a template-id, there is no need
12290      to reparse it.  */
12291   next_token = cp_lexer_peek_token (parser->lexer);
12292   if (next_token->type == CPP_TEMPLATE_ID)
12293     {
12294       struct tree_check *check_value;
12295
12296       /* Get the stored value.  */
12297       check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
12298       /* Perform any access checks that were deferred.  */
12299       access_check = check_value->checks;
12300       if (access_check)
12301         {
12302           FOR_EACH_VEC_ELT (deferred_access_check, access_check, i, chk)
12303             perform_or_defer_access_check (chk->binfo,
12304                                            chk->decl,
12305                                            chk->diag_decl);
12306         }
12307       /* Return the stored value.  */
12308       return check_value->value;
12309     }
12310
12311   /* Avoid performing name lookup if there is no possibility of
12312      finding a template-id.  */
12313   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
12314       || (next_token->type == CPP_NAME
12315           && !cp_parser_nth_token_starts_template_argument_list_p
12316                (parser, 2)))
12317     {
12318       cp_parser_error (parser, "expected template-id");
12319       return error_mark_node;
12320     }
12321
12322   /* Remember where the template-id starts.  */
12323   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
12324     start_of_id = cp_lexer_token_position (parser->lexer, false);
12325
12326   push_deferring_access_checks (dk_deferred);
12327
12328   /* Parse the template-name.  */
12329   is_identifier = false;
12330   templ = cp_parser_template_name (parser, template_keyword_p,
12331                                    check_dependency_p,
12332                                    is_declaration,
12333                                    &is_identifier);
12334   if (templ == error_mark_node || is_identifier)
12335     {
12336       pop_deferring_access_checks ();
12337       return templ;
12338     }
12339
12340   /* If we find the sequence `[:' after a template-name, it's probably
12341      a digraph-typo for `< ::'. Substitute the tokens and check if we can
12342      parse correctly the argument list.  */
12343   next_token = cp_lexer_peek_token (parser->lexer);
12344   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
12345   if (next_token->type == CPP_OPEN_SQUARE
12346       && next_token->flags & DIGRAPH
12347       && next_token_2->type == CPP_COLON
12348       && !(next_token_2->flags & PREV_WHITE))
12349     {
12350       cp_parser_parse_tentatively (parser);
12351       /* Change `:' into `::'.  */
12352       next_token_2->type = CPP_SCOPE;
12353       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
12354          CPP_LESS.  */
12355       cp_lexer_consume_token (parser->lexer);
12356
12357       /* Parse the arguments.  */
12358       arguments = cp_parser_enclosed_template_argument_list (parser);
12359       if (!cp_parser_parse_definitely (parser))
12360         {
12361           /* If we couldn't parse an argument list, then we revert our changes
12362              and return simply an error. Maybe this is not a template-id
12363              after all.  */
12364           next_token_2->type = CPP_COLON;
12365           cp_parser_error (parser, "expected %<<%>");
12366           pop_deferring_access_checks ();
12367           return error_mark_node;
12368         }
12369       /* Otherwise, emit an error about the invalid digraph, but continue
12370          parsing because we got our argument list.  */
12371       if (permerror (next_token->location,
12372                      "%<<::%> cannot begin a template-argument list"))
12373         {
12374           static bool hint = false;
12375           inform (next_token->location,
12376                   "%<<:%> is an alternate spelling for %<[%>."
12377                   " Insert whitespace between %<<%> and %<::%>");
12378           if (!hint && !flag_permissive)
12379             {
12380               inform (next_token->location, "(if you use %<-fpermissive%>"
12381                       " G++ will accept your code)");
12382               hint = true;
12383             }
12384         }
12385     }
12386   else
12387     {
12388       /* Look for the `<' that starts the template-argument-list.  */
12389       if (!cp_parser_require (parser, CPP_LESS, RT_LESS))
12390         {
12391           pop_deferring_access_checks ();
12392           return error_mark_node;
12393         }
12394       /* Parse the arguments.  */
12395       arguments = cp_parser_enclosed_template_argument_list (parser);
12396     }
12397
12398   /* Build a representation of the specialization.  */
12399   if (TREE_CODE (templ) == IDENTIFIER_NODE)
12400     template_id = build_min_nt (TEMPLATE_ID_EXPR, templ, arguments);
12401   else if (DECL_TYPE_TEMPLATE_P (templ)
12402            || DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
12403     {
12404       bool entering_scope;
12405       /* In "template <typename T> ... A<T>::", A<T> is the abstract A
12406          template (rather than some instantiation thereof) only if
12407          is not nested within some other construct.  For example, in
12408          "template <typename T> void f(T) { A<T>::", A<T> is just an
12409          instantiation of A.  */
12410       entering_scope = (template_parm_scope_p ()
12411                         && cp_lexer_next_token_is (parser->lexer,
12412                                                    CPP_SCOPE));
12413       template_id
12414         = finish_template_type (templ, arguments, entering_scope);
12415     }
12416   else
12417     {
12418       /* If it's not a class-template or a template-template, it should be
12419          a function-template.  */
12420       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (templ)
12421                    || TREE_CODE (templ) == OVERLOAD
12422                    || BASELINK_P (templ)));
12423
12424       template_id = lookup_template_function (templ, arguments);
12425     }
12426
12427   /* If parsing tentatively, replace the sequence of tokens that makes
12428      up the template-id with a CPP_TEMPLATE_ID token.  That way,
12429      should we re-parse the token stream, we will not have to repeat
12430      the effort required to do the parse, nor will we issue duplicate
12431      error messages about problems during instantiation of the
12432      template.  */
12433   if (start_of_id)
12434     {
12435       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
12436
12437       /* Reset the contents of the START_OF_ID token.  */
12438       token->type = CPP_TEMPLATE_ID;
12439       /* Retrieve any deferred checks.  Do not pop this access checks yet
12440          so the memory will not be reclaimed during token replacing below.  */
12441       token->u.tree_check_value = ggc_alloc_cleared_tree_check ();
12442       token->u.tree_check_value->value = template_id;
12443       token->u.tree_check_value->checks = get_deferred_access_checks ();
12444       token->keyword = RID_MAX;
12445
12446       /* Purge all subsequent tokens.  */
12447       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
12448
12449       /* ??? Can we actually assume that, if template_id ==
12450          error_mark_node, we will have issued a diagnostic to the
12451          user, as opposed to simply marking the tentative parse as
12452          failed?  */
12453       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
12454         error_at (token->location, "parse error in template argument list");
12455     }
12456
12457   pop_deferring_access_checks ();
12458   return template_id;
12459 }
12460
12461 /* Parse a template-name.
12462
12463    template-name:
12464      identifier
12465
12466    The standard should actually say:
12467
12468    template-name:
12469      identifier
12470      operator-function-id
12471
12472    A defect report has been filed about this issue.
12473
12474    A conversion-function-id cannot be a template name because they cannot
12475    be part of a template-id. In fact, looking at this code:
12476
12477    a.operator K<int>()
12478
12479    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
12480    It is impossible to call a templated conversion-function-id with an
12481    explicit argument list, since the only allowed template parameter is
12482    the type to which it is converting.
12483
12484    If TEMPLATE_KEYWORD_P is true, then we have just seen the
12485    `template' keyword, in a construction like:
12486
12487      T::template f<3>()
12488
12489    In that case `f' is taken to be a template-name, even though there
12490    is no way of knowing for sure.
12491
12492    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
12493    name refers to a set of overloaded functions, at least one of which
12494    is a template, or an IDENTIFIER_NODE with the name of the template,
12495    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
12496    names are looked up inside uninstantiated templates.  */
12497
12498 static tree
12499 cp_parser_template_name (cp_parser* parser,
12500                          bool template_keyword_p,
12501                          bool check_dependency_p,
12502                          bool is_declaration,
12503                          bool *is_identifier)
12504 {
12505   tree identifier;
12506   tree decl;
12507   tree fns;
12508   cp_token *token = cp_lexer_peek_token (parser->lexer);
12509
12510   /* If the next token is `operator', then we have either an
12511      operator-function-id or a conversion-function-id.  */
12512   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
12513     {
12514       /* We don't know whether we're looking at an
12515          operator-function-id or a conversion-function-id.  */
12516       cp_parser_parse_tentatively (parser);
12517       /* Try an operator-function-id.  */
12518       identifier = cp_parser_operator_function_id (parser);
12519       /* If that didn't work, try a conversion-function-id.  */
12520       if (!cp_parser_parse_definitely (parser))
12521         {
12522           cp_parser_error (parser, "expected template-name");
12523           return error_mark_node;
12524         }
12525     }
12526   /* Look for the identifier.  */
12527   else
12528     identifier = cp_parser_identifier (parser);
12529
12530   /* If we didn't find an identifier, we don't have a template-id.  */
12531   if (identifier == error_mark_node)
12532     return error_mark_node;
12533
12534   /* If the name immediately followed the `template' keyword, then it
12535      is a template-name.  However, if the next token is not `<', then
12536      we do not treat it as a template-name, since it is not being used
12537      as part of a template-id.  This enables us to handle constructs
12538      like:
12539
12540        template <typename T> struct S { S(); };
12541        template <typename T> S<T>::S();
12542
12543      correctly.  We would treat `S' as a template -- if it were `S<T>'
12544      -- but we do not if there is no `<'.  */
12545
12546   if (processing_template_decl
12547       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
12548     {
12549       /* In a declaration, in a dependent context, we pretend that the
12550          "template" keyword was present in order to improve error
12551          recovery.  For example, given:
12552
12553            template <typename T> void f(T::X<int>);
12554
12555          we want to treat "X<int>" as a template-id.  */
12556       if (is_declaration
12557           && !template_keyword_p
12558           && parser->scope && TYPE_P (parser->scope)
12559           && check_dependency_p
12560           && dependent_scope_p (parser->scope)
12561           /* Do not do this for dtors (or ctors), since they never
12562              need the template keyword before their name.  */
12563           && !constructor_name_p (identifier, parser->scope))
12564         {
12565           cp_token_position start = 0;
12566
12567           /* Explain what went wrong.  */
12568           error_at (token->location, "non-template %qD used as template",
12569                     identifier);
12570           inform (token->location, "use %<%T::template %D%> to indicate that it is a template",
12571                   parser->scope, identifier);
12572           /* If parsing tentatively, find the location of the "<" token.  */
12573           if (cp_parser_simulate_error (parser))
12574             start = cp_lexer_token_position (parser->lexer, true);
12575           /* Parse the template arguments so that we can issue error
12576              messages about them.  */
12577           cp_lexer_consume_token (parser->lexer);
12578           cp_parser_enclosed_template_argument_list (parser);
12579           /* Skip tokens until we find a good place from which to
12580              continue parsing.  */
12581           cp_parser_skip_to_closing_parenthesis (parser,
12582                                                  /*recovering=*/true,
12583                                                  /*or_comma=*/true,
12584                                                  /*consume_paren=*/false);
12585           /* If parsing tentatively, permanently remove the
12586              template argument list.  That will prevent duplicate
12587              error messages from being issued about the missing
12588              "template" keyword.  */
12589           if (start)
12590             cp_lexer_purge_tokens_after (parser->lexer, start);
12591           if (is_identifier)
12592             *is_identifier = true;
12593           return identifier;
12594         }
12595
12596       /* If the "template" keyword is present, then there is generally
12597          no point in doing name-lookup, so we just return IDENTIFIER.
12598          But, if the qualifying scope is non-dependent then we can
12599          (and must) do name-lookup normally.  */
12600       if (template_keyword_p
12601           && (!parser->scope
12602               || (TYPE_P (parser->scope)
12603                   && dependent_type_p (parser->scope))))
12604         return identifier;
12605     }
12606
12607   /* Look up the name.  */
12608   decl = cp_parser_lookup_name (parser, identifier,
12609                                 none_type,
12610                                 /*is_template=*/true,
12611                                 /*is_namespace=*/false,
12612                                 check_dependency_p,
12613                                 /*ambiguous_decls=*/NULL,
12614                                 token->location);
12615
12616   /* If DECL is a template, then the name was a template-name.  */
12617   if (TREE_CODE (decl) == TEMPLATE_DECL)
12618     ;
12619   else
12620     {
12621       tree fn = NULL_TREE;
12622
12623       /* The standard does not explicitly indicate whether a name that
12624          names a set of overloaded declarations, some of which are
12625          templates, is a template-name.  However, such a name should
12626          be a template-name; otherwise, there is no way to form a
12627          template-id for the overloaded templates.  */
12628       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
12629       if (TREE_CODE (fns) == OVERLOAD)
12630         for (fn = fns; fn; fn = OVL_NEXT (fn))
12631           if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
12632             break;
12633
12634       if (!fn)
12635         {
12636           /* The name does not name a template.  */
12637           cp_parser_error (parser, "expected template-name");
12638           return error_mark_node;
12639         }
12640     }
12641
12642   /* If DECL is dependent, and refers to a function, then just return
12643      its name; we will look it up again during template instantiation.  */
12644   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
12645     {
12646       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
12647       if (TYPE_P (scope) && dependent_type_p (scope))
12648         return identifier;
12649     }
12650
12651   return decl;
12652 }
12653
12654 /* Parse a template-argument-list.
12655
12656    template-argument-list:
12657      template-argument ... [opt]
12658      template-argument-list , template-argument ... [opt]
12659
12660    Returns a TREE_VEC containing the arguments.  */
12661
12662 static tree
12663 cp_parser_template_argument_list (cp_parser* parser)
12664 {
12665   tree fixed_args[10];
12666   unsigned n_args = 0;
12667   unsigned alloced = 10;
12668   tree *arg_ary = fixed_args;
12669   tree vec;
12670   bool saved_in_template_argument_list_p;
12671   bool saved_ice_p;
12672   bool saved_non_ice_p;
12673
12674   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
12675   parser->in_template_argument_list_p = true;
12676   /* Even if the template-id appears in an integral
12677      constant-expression, the contents of the argument list do
12678      not.  */
12679   saved_ice_p = parser->integral_constant_expression_p;
12680   parser->integral_constant_expression_p = false;
12681   saved_non_ice_p = parser->non_integral_constant_expression_p;
12682   parser->non_integral_constant_expression_p = false;
12683
12684   /* Parse the arguments.  */
12685   do
12686     {
12687       tree argument;
12688
12689       if (n_args)
12690         /* Consume the comma.  */
12691         cp_lexer_consume_token (parser->lexer);
12692
12693       /* Parse the template-argument.  */
12694       argument = cp_parser_template_argument (parser);
12695
12696       /* If the next token is an ellipsis, we're expanding a template
12697          argument pack. */
12698       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
12699         {
12700           if (argument == error_mark_node)
12701             {
12702               cp_token *token = cp_lexer_peek_token (parser->lexer);
12703               error_at (token->location,
12704                         "expected parameter pack before %<...%>");
12705             }
12706           /* Consume the `...' token. */
12707           cp_lexer_consume_token (parser->lexer);
12708
12709           /* Make the argument into a TYPE_PACK_EXPANSION or
12710              EXPR_PACK_EXPANSION. */
12711           argument = make_pack_expansion (argument);
12712         }
12713
12714       if (n_args == alloced)
12715         {
12716           alloced *= 2;
12717
12718           if (arg_ary == fixed_args)
12719             {
12720               arg_ary = XNEWVEC (tree, alloced);
12721               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
12722             }
12723           else
12724             arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
12725         }
12726       arg_ary[n_args++] = argument;
12727     }
12728   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
12729
12730   vec = make_tree_vec (n_args);
12731
12732   while (n_args--)
12733     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
12734
12735   if (arg_ary != fixed_args)
12736     free (arg_ary);
12737   parser->non_integral_constant_expression_p = saved_non_ice_p;
12738   parser->integral_constant_expression_p = saved_ice_p;
12739   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
12740 #ifdef ENABLE_CHECKING
12741   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
12742 #endif
12743   return vec;
12744 }
12745
12746 /* Parse a template-argument.
12747
12748    template-argument:
12749      assignment-expression
12750      type-id
12751      id-expression
12752
12753    The representation is that of an assignment-expression, type-id, or
12754    id-expression -- except that the qualified id-expression is
12755    evaluated, so that the value returned is either a DECL or an
12756    OVERLOAD.
12757
12758    Although the standard says "assignment-expression", it forbids
12759    throw-expressions or assignments in the template argument.
12760    Therefore, we use "conditional-expression" instead.  */
12761
12762 static tree
12763 cp_parser_template_argument (cp_parser* parser)
12764 {
12765   tree argument;
12766   bool template_p;
12767   bool address_p;
12768   bool maybe_type_id = false;
12769   cp_token *token = NULL, *argument_start_token = NULL;
12770   cp_id_kind idk;
12771
12772   /* There's really no way to know what we're looking at, so we just
12773      try each alternative in order.
12774
12775        [temp.arg]
12776
12777        In a template-argument, an ambiguity between a type-id and an
12778        expression is resolved to a type-id, regardless of the form of
12779        the corresponding template-parameter.
12780
12781      Therefore, we try a type-id first.  */
12782   cp_parser_parse_tentatively (parser);
12783   argument = cp_parser_template_type_arg (parser);
12784   /* If there was no error parsing the type-id but the next token is a
12785      '>>', our behavior depends on which dialect of C++ we're
12786      parsing. In C++98, we probably found a typo for '> >'. But there
12787      are type-id which are also valid expressions. For instance:
12788
12789      struct X { int operator >> (int); };
12790      template <int V> struct Foo {};
12791      Foo<X () >> 5> r;
12792
12793      Here 'X()' is a valid type-id of a function type, but the user just
12794      wanted to write the expression "X() >> 5". Thus, we remember that we
12795      found a valid type-id, but we still try to parse the argument as an
12796      expression to see what happens. 
12797
12798      In C++0x, the '>>' will be considered two separate '>'
12799      tokens.  */
12800   if (!cp_parser_error_occurred (parser)
12801       && cxx_dialect == cxx98
12802       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
12803     {
12804       maybe_type_id = true;
12805       cp_parser_abort_tentative_parse (parser);
12806     }
12807   else
12808     {
12809       /* If the next token isn't a `,' or a `>', then this argument wasn't
12810       really finished. This means that the argument is not a valid
12811       type-id.  */
12812       if (!cp_parser_next_token_ends_template_argument_p (parser))
12813         cp_parser_error (parser, "expected template-argument");
12814       /* If that worked, we're done.  */
12815       if (cp_parser_parse_definitely (parser))
12816         return argument;
12817     }
12818   /* We're still not sure what the argument will be.  */
12819   cp_parser_parse_tentatively (parser);
12820   /* Try a template.  */
12821   argument_start_token = cp_lexer_peek_token (parser->lexer);
12822   argument = cp_parser_id_expression (parser,
12823                                       /*template_keyword_p=*/false,
12824                                       /*check_dependency_p=*/true,
12825                                       &template_p,
12826                                       /*declarator_p=*/false,
12827                                       /*optional_p=*/false);
12828   /* If the next token isn't a `,' or a `>', then this argument wasn't
12829      really finished.  */
12830   if (!cp_parser_next_token_ends_template_argument_p (parser))
12831     cp_parser_error (parser, "expected template-argument");
12832   if (!cp_parser_error_occurred (parser))
12833     {
12834       /* Figure out what is being referred to.  If the id-expression
12835          was for a class template specialization, then we will have a
12836          TYPE_DECL at this point.  There is no need to do name lookup
12837          at this point in that case.  */
12838       if (TREE_CODE (argument) != TYPE_DECL)
12839         argument = cp_parser_lookup_name (parser, argument,
12840                                           none_type,
12841                                           /*is_template=*/template_p,
12842                                           /*is_namespace=*/false,
12843                                           /*check_dependency=*/true,
12844                                           /*ambiguous_decls=*/NULL,
12845                                           argument_start_token->location);
12846       if (TREE_CODE (argument) != TEMPLATE_DECL
12847           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
12848         cp_parser_error (parser, "expected template-name");
12849     }
12850   if (cp_parser_parse_definitely (parser))
12851     return argument;
12852   /* It must be a non-type argument.  There permitted cases are given
12853      in [temp.arg.nontype]:
12854
12855      -- an integral constant-expression of integral or enumeration
12856         type; or
12857
12858      -- the name of a non-type template-parameter; or
12859
12860      -- the name of an object or function with external linkage...
12861
12862      -- the address of an object or function with external linkage...
12863
12864      -- a pointer to member...  */
12865   /* Look for a non-type template parameter.  */
12866   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12867     {
12868       cp_parser_parse_tentatively (parser);
12869       argument = cp_parser_primary_expression (parser,
12870                                                /*address_p=*/false,
12871                                                /*cast_p=*/false,
12872                                                /*template_arg_p=*/true,
12873                                                &idk);
12874       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
12875           || !cp_parser_next_token_ends_template_argument_p (parser))
12876         cp_parser_simulate_error (parser);
12877       if (cp_parser_parse_definitely (parser))
12878         return argument;
12879     }
12880
12881   /* If the next token is "&", the argument must be the address of an
12882      object or function with external linkage.  */
12883   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
12884   if (address_p)
12885     cp_lexer_consume_token (parser->lexer);
12886   /* See if we might have an id-expression.  */
12887   token = cp_lexer_peek_token (parser->lexer);
12888   if (token->type == CPP_NAME
12889       || token->keyword == RID_OPERATOR
12890       || token->type == CPP_SCOPE
12891       || token->type == CPP_TEMPLATE_ID
12892       || token->type == CPP_NESTED_NAME_SPECIFIER)
12893     {
12894       cp_parser_parse_tentatively (parser);
12895       argument = cp_parser_primary_expression (parser,
12896                                                address_p,
12897                                                /*cast_p=*/false,
12898                                                /*template_arg_p=*/true,
12899                                                &idk);
12900       if (cp_parser_error_occurred (parser)
12901           || !cp_parser_next_token_ends_template_argument_p (parser))
12902         cp_parser_abort_tentative_parse (parser);
12903       else
12904         {
12905           tree probe;
12906
12907           if (TREE_CODE (argument) == INDIRECT_REF)
12908             {
12909               gcc_assert (REFERENCE_REF_P (argument));
12910               argument = TREE_OPERAND (argument, 0);
12911             }
12912
12913           /* If we're in a template, we represent a qualified-id referring
12914              to a static data member as a SCOPE_REF even if the scope isn't
12915              dependent so that we can check access control later.  */
12916           probe = argument;
12917           if (TREE_CODE (probe) == SCOPE_REF)
12918             probe = TREE_OPERAND (probe, 1);
12919           if (TREE_CODE (probe) == VAR_DECL)
12920             {
12921               /* A variable without external linkage might still be a
12922                  valid constant-expression, so no error is issued here
12923                  if the external-linkage check fails.  */
12924               if (!address_p && !DECL_EXTERNAL_LINKAGE_P (probe))
12925                 cp_parser_simulate_error (parser);
12926             }
12927           else if (is_overloaded_fn (argument))
12928             /* All overloaded functions are allowed; if the external
12929                linkage test does not pass, an error will be issued
12930                later.  */
12931             ;
12932           else if (address_p
12933                    && (TREE_CODE (argument) == OFFSET_REF
12934                        || TREE_CODE (argument) == SCOPE_REF))
12935             /* A pointer-to-member.  */
12936             ;
12937           else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
12938             ;
12939           else
12940             cp_parser_simulate_error (parser);
12941
12942           if (cp_parser_parse_definitely (parser))
12943             {
12944               if (address_p)
12945                 argument = build_x_unary_op (ADDR_EXPR, argument,
12946                                              tf_warning_or_error);
12947               return argument;
12948             }
12949         }
12950     }
12951   /* If the argument started with "&", there are no other valid
12952      alternatives at this point.  */
12953   if (address_p)
12954     {
12955       cp_parser_error (parser, "invalid non-type template argument");
12956       return error_mark_node;
12957     }
12958
12959   /* If the argument wasn't successfully parsed as a type-id followed
12960      by '>>', the argument can only be a constant expression now.
12961      Otherwise, we try parsing the constant-expression tentatively,
12962      because the argument could really be a type-id.  */
12963   if (maybe_type_id)
12964     cp_parser_parse_tentatively (parser);
12965   argument = cp_parser_constant_expression (parser,
12966                                             /*allow_non_constant_p=*/false,
12967                                             /*non_constant_p=*/NULL);
12968   argument = fold_non_dependent_expr (argument);
12969   if (!maybe_type_id)
12970     return argument;
12971   if (!cp_parser_next_token_ends_template_argument_p (parser))
12972     cp_parser_error (parser, "expected template-argument");
12973   if (cp_parser_parse_definitely (parser))
12974     return argument;
12975   /* We did our best to parse the argument as a non type-id, but that
12976      was the only alternative that matched (albeit with a '>' after
12977      it). We can assume it's just a typo from the user, and a
12978      diagnostic will then be issued.  */
12979   return cp_parser_template_type_arg (parser);
12980 }
12981
12982 /* Parse an explicit-instantiation.
12983
12984    explicit-instantiation:
12985      template declaration
12986
12987    Although the standard says `declaration', what it really means is:
12988
12989    explicit-instantiation:
12990      template decl-specifier-seq [opt] declarator [opt] ;
12991
12992    Things like `template int S<int>::i = 5, int S<double>::j;' are not
12993    supposed to be allowed.  A defect report has been filed about this
12994    issue.
12995
12996    GNU Extension:
12997
12998    explicit-instantiation:
12999      storage-class-specifier template
13000        decl-specifier-seq [opt] declarator [opt] ;
13001      function-specifier template
13002        decl-specifier-seq [opt] declarator [opt] ;  */
13003
13004 static void
13005 cp_parser_explicit_instantiation (cp_parser* parser)
13006 {
13007   int declares_class_or_enum;
13008   cp_decl_specifier_seq decl_specifiers;
13009   tree extension_specifier = NULL_TREE;
13010
13011   timevar_push (TV_TEMPLATE_INST);
13012
13013   /* Look for an (optional) storage-class-specifier or
13014      function-specifier.  */
13015   if (cp_parser_allow_gnu_extensions_p (parser))
13016     {
13017       extension_specifier
13018         = cp_parser_storage_class_specifier_opt (parser);
13019       if (!extension_specifier)
13020         extension_specifier
13021           = cp_parser_function_specifier_opt (parser,
13022                                               /*decl_specs=*/NULL);
13023     }
13024
13025   /* Look for the `template' keyword.  */
13026   cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE);
13027   /* Let the front end know that we are processing an explicit
13028      instantiation.  */
13029   begin_explicit_instantiation ();
13030   /* [temp.explicit] says that we are supposed to ignore access
13031      control while processing explicit instantiation directives.  */
13032   push_deferring_access_checks (dk_no_check);
13033   /* Parse a decl-specifier-seq.  */
13034   cp_parser_decl_specifier_seq (parser,
13035                                 CP_PARSER_FLAGS_OPTIONAL,
13036                                 &decl_specifiers,
13037                                 &declares_class_or_enum);
13038   /* If there was exactly one decl-specifier, and it declared a class,
13039      and there's no declarator, then we have an explicit type
13040      instantiation.  */
13041   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
13042     {
13043       tree type;
13044
13045       type = check_tag_decl (&decl_specifiers);
13046       /* Turn access control back on for names used during
13047          template instantiation.  */
13048       pop_deferring_access_checks ();
13049       if (type)
13050         do_type_instantiation (type, extension_specifier,
13051                                /*complain=*/tf_error);
13052     }
13053   else
13054     {
13055       cp_declarator *declarator;
13056       tree decl;
13057
13058       /* Parse the declarator.  */
13059       declarator
13060         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
13061                                 /*ctor_dtor_or_conv_p=*/NULL,
13062                                 /*parenthesized_p=*/NULL,
13063                                 /*member_p=*/false);
13064       if (declares_class_or_enum & 2)
13065         cp_parser_check_for_definition_in_return_type (declarator,
13066                                                        decl_specifiers.type,
13067                                                        decl_specifiers.type_location);
13068       if (declarator != cp_error_declarator)
13069         {
13070           if (decl_specifiers.specs[(int)ds_inline])
13071             permerror (input_location, "explicit instantiation shall not use"
13072                        " %<inline%> specifier");
13073           if (decl_specifiers.specs[(int)ds_constexpr])
13074             permerror (input_location, "explicit instantiation shall not use"
13075                        " %<constexpr%> specifier");
13076
13077           decl = grokdeclarator (declarator, &decl_specifiers,
13078                                  NORMAL, 0, &decl_specifiers.attributes);
13079           /* Turn access control back on for names used during
13080              template instantiation.  */
13081           pop_deferring_access_checks ();
13082           /* Do the explicit instantiation.  */
13083           do_decl_instantiation (decl, extension_specifier);
13084         }
13085       else
13086         {
13087           pop_deferring_access_checks ();
13088           /* Skip the body of the explicit instantiation.  */
13089           cp_parser_skip_to_end_of_statement (parser);
13090         }
13091     }
13092   /* We're done with the instantiation.  */
13093   end_explicit_instantiation ();
13094
13095   cp_parser_consume_semicolon_at_end_of_statement (parser);
13096
13097   timevar_pop (TV_TEMPLATE_INST);
13098 }
13099
13100 /* Parse an explicit-specialization.
13101
13102    explicit-specialization:
13103      template < > declaration
13104
13105    Although the standard says `declaration', what it really means is:
13106
13107    explicit-specialization:
13108      template <> decl-specifier [opt] init-declarator [opt] ;
13109      template <> function-definition
13110      template <> explicit-specialization
13111      template <> template-declaration  */
13112
13113 static void
13114 cp_parser_explicit_specialization (cp_parser* parser)
13115 {
13116   bool need_lang_pop;
13117   cp_token *token = cp_lexer_peek_token (parser->lexer);
13118
13119   /* Look for the `template' keyword.  */
13120   cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE);
13121   /* Look for the `<'.  */
13122   cp_parser_require (parser, CPP_LESS, RT_LESS);
13123   /* Look for the `>'.  */
13124   cp_parser_require (parser, CPP_GREATER, RT_GREATER);
13125   /* We have processed another parameter list.  */
13126   ++parser->num_template_parameter_lists;
13127   /* [temp]
13128
13129      A template ... explicit specialization ... shall not have C
13130      linkage.  */
13131   if (current_lang_name == lang_name_c)
13132     {
13133       error_at (token->location, "template specialization with C linkage");
13134       /* Give it C++ linkage to avoid confusing other parts of the
13135          front end.  */
13136       push_lang_context (lang_name_cplusplus);
13137       need_lang_pop = true;
13138     }
13139   else
13140     need_lang_pop = false;
13141   /* Let the front end know that we are beginning a specialization.  */
13142   if (!begin_specialization ())
13143     {
13144       end_specialization ();
13145       return;
13146     }
13147
13148   /* If the next keyword is `template', we need to figure out whether
13149      or not we're looking a template-declaration.  */
13150   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
13151     {
13152       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
13153           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
13154         cp_parser_template_declaration_after_export (parser,
13155                                                      /*member_p=*/false);
13156       else
13157         cp_parser_explicit_specialization (parser);
13158     }
13159   else
13160     /* Parse the dependent declaration.  */
13161     cp_parser_single_declaration (parser,
13162                                   /*checks=*/NULL,
13163                                   /*member_p=*/false,
13164                                   /*explicit_specialization_p=*/true,
13165                                   /*friend_p=*/NULL);
13166   /* We're done with the specialization.  */
13167   end_specialization ();
13168   /* For the erroneous case of a template with C linkage, we pushed an
13169      implicit C++ linkage scope; exit that scope now.  */
13170   if (need_lang_pop)
13171     pop_lang_context ();
13172   /* We're done with this parameter list.  */
13173   --parser->num_template_parameter_lists;
13174 }
13175
13176 /* Parse a type-specifier.
13177
13178    type-specifier:
13179      simple-type-specifier
13180      class-specifier
13181      enum-specifier
13182      elaborated-type-specifier
13183      cv-qualifier
13184
13185    GNU Extension:
13186
13187    type-specifier:
13188      __complex__
13189
13190    Returns a representation of the type-specifier.  For a
13191    class-specifier, enum-specifier, or elaborated-type-specifier, a
13192    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
13193
13194    The parser flags FLAGS is used to control type-specifier parsing.
13195
13196    If IS_DECLARATION is TRUE, then this type-specifier is appearing
13197    in a decl-specifier-seq.
13198
13199    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
13200    class-specifier, enum-specifier, or elaborated-type-specifier, then
13201    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
13202    if a type is declared; 2 if it is defined.  Otherwise, it is set to
13203    zero.
13204
13205    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
13206    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
13207    is set to FALSE.  */
13208
13209 static tree
13210 cp_parser_type_specifier (cp_parser* parser,
13211                           cp_parser_flags flags,
13212                           cp_decl_specifier_seq *decl_specs,
13213                           bool is_declaration,
13214                           int* declares_class_or_enum,
13215                           bool* is_cv_qualifier)
13216 {
13217   tree type_spec = NULL_TREE;
13218   cp_token *token;
13219   enum rid keyword;
13220   cp_decl_spec ds = ds_last;
13221
13222   /* Assume this type-specifier does not declare a new type.  */
13223   if (declares_class_or_enum)
13224     *declares_class_or_enum = 0;
13225   /* And that it does not specify a cv-qualifier.  */
13226   if (is_cv_qualifier)
13227     *is_cv_qualifier = false;
13228   /* Peek at the next token.  */
13229   token = cp_lexer_peek_token (parser->lexer);
13230
13231   /* If we're looking at a keyword, we can use that to guide the
13232      production we choose.  */
13233   keyword = token->keyword;
13234   switch (keyword)
13235     {
13236     case RID_ENUM:
13237       if ((flags & CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS))
13238         goto elaborated_type_specifier;
13239
13240       /* Look for the enum-specifier.  */
13241       type_spec = cp_parser_enum_specifier (parser);
13242       /* If that worked, we're done.  */
13243       if (type_spec)
13244         {
13245           if (declares_class_or_enum)
13246             *declares_class_or_enum = 2;
13247           if (decl_specs)
13248             cp_parser_set_decl_spec_type (decl_specs,
13249                                           type_spec,
13250                                           token->location,
13251                                           /*type_definition_p=*/true);
13252           return type_spec;
13253         }
13254       else
13255         goto elaborated_type_specifier;
13256
13257       /* Any of these indicate either a class-specifier, or an
13258          elaborated-type-specifier.  */
13259     case RID_CLASS:
13260     case RID_STRUCT:
13261     case RID_UNION:
13262       if ((flags & CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS))
13263         goto elaborated_type_specifier;
13264
13265       /* Parse tentatively so that we can back up if we don't find a
13266          class-specifier.  */
13267       cp_parser_parse_tentatively (parser);
13268       /* Look for the class-specifier.  */
13269       type_spec = cp_parser_class_specifier (parser);
13270       invoke_plugin_callbacks (PLUGIN_FINISH_TYPE, type_spec);
13271       /* If that worked, we're done.  */
13272       if (cp_parser_parse_definitely (parser))
13273         {
13274           if (declares_class_or_enum)
13275             *declares_class_or_enum = 2;
13276           if (decl_specs)
13277             cp_parser_set_decl_spec_type (decl_specs,
13278                                           type_spec,
13279                                           token->location,
13280                                           /*type_definition_p=*/true);
13281           return type_spec;
13282         }
13283
13284       /* Fall through.  */
13285     elaborated_type_specifier:
13286       /* We're declaring (not defining) a class or enum.  */
13287       if (declares_class_or_enum)
13288         *declares_class_or_enum = 1;
13289
13290       /* Fall through.  */
13291     case RID_TYPENAME:
13292       /* Look for an elaborated-type-specifier.  */
13293       type_spec
13294         = (cp_parser_elaborated_type_specifier
13295            (parser,
13296             decl_specs && decl_specs->specs[(int) ds_friend],
13297             is_declaration));
13298       if (decl_specs)
13299         cp_parser_set_decl_spec_type (decl_specs,
13300                                       type_spec,
13301                                       token->location,
13302                                       /*type_definition_p=*/false);
13303       return type_spec;
13304
13305     case RID_CONST:
13306       ds = ds_const;
13307       if (is_cv_qualifier)
13308         *is_cv_qualifier = true;
13309       break;
13310
13311     case RID_VOLATILE:
13312       ds = ds_volatile;
13313       if (is_cv_qualifier)
13314         *is_cv_qualifier = true;
13315       break;
13316
13317     case RID_RESTRICT:
13318       ds = ds_restrict;
13319       if (is_cv_qualifier)
13320         *is_cv_qualifier = true;
13321       break;
13322
13323     case RID_COMPLEX:
13324       /* The `__complex__' keyword is a GNU extension.  */
13325       ds = ds_complex;
13326       break;
13327
13328     default:
13329       break;
13330     }
13331
13332   /* Handle simple keywords.  */
13333   if (ds != ds_last)
13334     {
13335       if (decl_specs)
13336         {
13337           ++decl_specs->specs[(int)ds];
13338           decl_specs->any_specifiers_p = true;
13339         }
13340       return cp_lexer_consume_token (parser->lexer)->u.value;
13341     }
13342
13343   /* If we do not already have a type-specifier, assume we are looking
13344      at a simple-type-specifier.  */
13345   type_spec = cp_parser_simple_type_specifier (parser,
13346                                                decl_specs,
13347                                                flags);
13348
13349   /* If we didn't find a type-specifier, and a type-specifier was not
13350      optional in this context, issue an error message.  */
13351   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
13352     {
13353       cp_parser_error (parser, "expected type specifier");
13354       return error_mark_node;
13355     }
13356
13357   return type_spec;
13358 }
13359
13360 /* Parse a simple-type-specifier.
13361
13362    simple-type-specifier:
13363      :: [opt] nested-name-specifier [opt] type-name
13364      :: [opt] nested-name-specifier template template-id
13365      char
13366      wchar_t
13367      bool
13368      short
13369      int
13370      long
13371      signed
13372      unsigned
13373      float
13374      double
13375      void
13376
13377    C++0x Extension:
13378
13379    simple-type-specifier:
13380      auto
13381      decltype ( expression )   
13382      char16_t
13383      char32_t
13384      __underlying_type ( type-id )
13385
13386    GNU Extension:
13387
13388    simple-type-specifier:
13389      __int128
13390      __typeof__ unary-expression
13391      __typeof__ ( type-id )
13392
13393    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
13394    appropriately updated.  */
13395
13396 static tree
13397 cp_parser_simple_type_specifier (cp_parser* parser,
13398                                  cp_decl_specifier_seq *decl_specs,
13399                                  cp_parser_flags flags)
13400 {
13401   tree type = NULL_TREE;
13402   cp_token *token;
13403
13404   /* Peek at the next token.  */
13405   token = cp_lexer_peek_token (parser->lexer);
13406
13407   /* If we're looking at a keyword, things are easy.  */
13408   switch (token->keyword)
13409     {
13410     case RID_CHAR:
13411       if (decl_specs)
13412         decl_specs->explicit_char_p = true;
13413       type = char_type_node;
13414       break;
13415     case RID_CHAR16:
13416       type = char16_type_node;
13417       break;
13418     case RID_CHAR32:
13419       type = char32_type_node;
13420       break;
13421     case RID_WCHAR:
13422       type = wchar_type_node;
13423       break;
13424     case RID_BOOL:
13425       type = boolean_type_node;
13426       break;
13427     case RID_SHORT:
13428       if (decl_specs)
13429         ++decl_specs->specs[(int) ds_short];
13430       type = short_integer_type_node;
13431       break;
13432     case RID_INT:
13433       if (decl_specs)
13434         decl_specs->explicit_int_p = true;
13435       type = integer_type_node;
13436       break;
13437     case RID_INT128:
13438       if (!int128_integer_type_node)
13439         break;
13440       if (decl_specs)
13441         decl_specs->explicit_int128_p = true;
13442       type = int128_integer_type_node;
13443       break;
13444     case RID_LONG:
13445       if (decl_specs)
13446         ++decl_specs->specs[(int) ds_long];
13447       type = long_integer_type_node;
13448       break;
13449     case RID_SIGNED:
13450       if (decl_specs)
13451         ++decl_specs->specs[(int) ds_signed];
13452       type = integer_type_node;
13453       break;
13454     case RID_UNSIGNED:
13455       if (decl_specs)
13456         ++decl_specs->specs[(int) ds_unsigned];
13457       type = unsigned_type_node;
13458       break;
13459     case RID_FLOAT:
13460       type = float_type_node;
13461       break;
13462     case RID_DOUBLE:
13463       type = double_type_node;
13464       break;
13465     case RID_VOID:
13466       type = void_type_node;
13467       break;
13468       
13469     case RID_AUTO:
13470       maybe_warn_cpp0x (CPP0X_AUTO);
13471       type = make_auto ();
13472       break;
13473
13474     case RID_DECLTYPE:
13475       /* Since DR 743, decltype can either be a simple-type-specifier by
13476          itself or begin a nested-name-specifier.  Parsing it will replace
13477          it with a CPP_DECLTYPE, so just rewind and let the CPP_DECLTYPE
13478          handling below decide what to do.  */
13479       cp_parser_decltype (parser);
13480       cp_lexer_set_token_position (parser->lexer, token);
13481       break;
13482
13483     case RID_TYPEOF:
13484       /* Consume the `typeof' token.  */
13485       cp_lexer_consume_token (parser->lexer);
13486       /* Parse the operand to `typeof'.  */
13487       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
13488       /* If it is not already a TYPE, take its type.  */
13489       if (!TYPE_P (type))
13490         type = finish_typeof (type);
13491
13492       if (decl_specs)
13493         cp_parser_set_decl_spec_type (decl_specs, type,
13494                                       token->location,
13495                                       /*type_definition_p=*/false);
13496
13497       return type;
13498
13499     case RID_UNDERLYING_TYPE:
13500       type = cp_parser_trait_expr (parser, RID_UNDERLYING_TYPE);
13501       if (decl_specs)
13502         cp_parser_set_decl_spec_type (decl_specs, type,
13503                                       token->location,
13504                                       /*type_definition_p=*/false);
13505
13506       return type;
13507
13508     case RID_BASES:
13509     case RID_DIRECT_BASES:
13510       type = cp_parser_trait_expr (parser, token->keyword);
13511       if (decl_specs)
13512        cp_parser_set_decl_spec_type (decl_specs, type,
13513                                      token->location,
13514                                      /*type_definition_p=*/false);
13515       return type;
13516     default:
13517       break;
13518     }
13519
13520   /* If token is an already-parsed decltype not followed by ::,
13521      it's a simple-type-specifier.  */
13522   if (token->type == CPP_DECLTYPE
13523       && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
13524     {
13525       type = token->u.value;
13526       if (decl_specs)
13527         cp_parser_set_decl_spec_type (decl_specs, type,
13528                                       token->location,
13529                                       /*type_definition_p=*/false);
13530       cp_lexer_consume_token (parser->lexer);
13531       return type;
13532     }
13533
13534   /* If the type-specifier was for a built-in type, we're done.  */
13535   if (type)
13536     {
13537       /* Record the type.  */
13538       if (decl_specs
13539           && (token->keyword != RID_SIGNED
13540               && token->keyword != RID_UNSIGNED
13541               && token->keyword != RID_SHORT
13542               && token->keyword != RID_LONG))
13543         cp_parser_set_decl_spec_type (decl_specs,
13544                                       type,
13545                                       token->location,
13546                                       /*type_definition_p=*/false);
13547       if (decl_specs)
13548         decl_specs->any_specifiers_p = true;
13549
13550       /* Consume the token.  */
13551       cp_lexer_consume_token (parser->lexer);
13552
13553       /* There is no valid C++ program where a non-template type is
13554          followed by a "<".  That usually indicates that the user thought
13555          that the type was a template.  */
13556       cp_parser_check_for_invalid_template_id (parser, type, token->location);
13557
13558       return TYPE_NAME (type);
13559     }
13560
13561   /* The type-specifier must be a user-defined type.  */
13562   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
13563     {
13564       bool qualified_p;
13565       bool global_p;
13566
13567       /* Don't gobble tokens or issue error messages if this is an
13568          optional type-specifier.  */
13569       if (flags & CP_PARSER_FLAGS_OPTIONAL)
13570         cp_parser_parse_tentatively (parser);
13571
13572       /* Look for the optional `::' operator.  */
13573       global_p
13574         = (cp_parser_global_scope_opt (parser,
13575                                        /*current_scope_valid_p=*/false)
13576            != NULL_TREE);
13577       /* Look for the nested-name specifier.  */
13578       qualified_p
13579         = (cp_parser_nested_name_specifier_opt (parser,
13580                                                 /*typename_keyword_p=*/false,
13581                                                 /*check_dependency_p=*/true,
13582                                                 /*type_p=*/false,
13583                                                 /*is_declaration=*/false)
13584            != NULL_TREE);
13585       token = cp_lexer_peek_token (parser->lexer);
13586       /* If we have seen a nested-name-specifier, and the next token
13587          is `template', then we are using the template-id production.  */
13588       if (parser->scope
13589           && cp_parser_optional_template_keyword (parser))
13590         {
13591           /* Look for the template-id.  */
13592           type = cp_parser_template_id (parser,
13593                                         /*template_keyword_p=*/true,
13594                                         /*check_dependency_p=*/true,
13595                                         /*is_declaration=*/false);
13596           /* If the template-id did not name a type, we are out of
13597              luck.  */
13598           if (TREE_CODE (type) != TYPE_DECL)
13599             {
13600               cp_parser_error (parser, "expected template-id for type");
13601               type = NULL_TREE;
13602             }
13603         }
13604       /* Otherwise, look for a type-name.  */
13605       else
13606         type = cp_parser_type_name (parser);
13607       /* Keep track of all name-lookups performed in class scopes.  */
13608       if (type
13609           && !global_p
13610           && !qualified_p
13611           && TREE_CODE (type) == TYPE_DECL
13612           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
13613         maybe_note_name_used_in_class (DECL_NAME (type), type);
13614       /* If it didn't work out, we don't have a TYPE.  */
13615       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
13616           && !cp_parser_parse_definitely (parser))
13617         type = NULL_TREE;
13618       if (type && decl_specs)
13619         cp_parser_set_decl_spec_type (decl_specs, type,
13620                                       token->location,
13621                                       /*type_definition_p=*/false);
13622     }
13623
13624   /* If we didn't get a type-name, issue an error message.  */
13625   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
13626     {
13627       cp_parser_error (parser, "expected type-name");
13628       return error_mark_node;
13629     }
13630
13631   if (type && type != error_mark_node)
13632     {
13633       /* See if TYPE is an Objective-C type, and if so, parse and
13634          accept any protocol references following it.  Do this before
13635          the cp_parser_check_for_invalid_template_id() call, because
13636          Objective-C types can be followed by '<...>' which would
13637          enclose protocol names rather than template arguments, and so
13638          everything is fine.  */
13639       if (c_dialect_objc () && !parser->scope
13640           && (objc_is_id (type) || objc_is_class_name (type)))
13641         {
13642           tree protos = cp_parser_objc_protocol_refs_opt (parser);
13643           tree qual_type = objc_get_protocol_qualified_type (type, protos);
13644
13645           /* Clobber the "unqualified" type previously entered into
13646              DECL_SPECS with the new, improved protocol-qualified version.  */
13647           if (decl_specs)
13648             decl_specs->type = qual_type;
13649
13650           return qual_type;
13651         }
13652
13653       /* There is no valid C++ program where a non-template type is
13654          followed by a "<".  That usually indicates that the user
13655          thought that the type was a template.  */
13656       cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type),
13657                                                token->location);
13658     }
13659
13660   return type;
13661 }
13662
13663 /* Parse a type-name.
13664
13665    type-name:
13666      class-name
13667      enum-name
13668      typedef-name
13669      simple-template-id [in c++0x]
13670
13671    enum-name:
13672      identifier
13673
13674    typedef-name:
13675      identifier
13676
13677    Returns a TYPE_DECL for the type.  */
13678
13679 static tree
13680 cp_parser_type_name (cp_parser* parser)
13681 {
13682   tree type_decl;
13683
13684   /* We can't know yet whether it is a class-name or not.  */
13685   cp_parser_parse_tentatively (parser);
13686   /* Try a class-name.  */
13687   type_decl = cp_parser_class_name (parser,
13688                                     /*typename_keyword_p=*/false,
13689                                     /*template_keyword_p=*/false,
13690                                     none_type,
13691                                     /*check_dependency_p=*/true,
13692                                     /*class_head_p=*/false,
13693                                     /*is_declaration=*/false);
13694   /* If it's not a class-name, keep looking.  */
13695   if (!cp_parser_parse_definitely (parser))
13696     {
13697       if (cxx_dialect < cxx0x)
13698         /* It must be a typedef-name or an enum-name.  */
13699         return cp_parser_nonclass_name (parser);
13700
13701       cp_parser_parse_tentatively (parser);
13702       /* It is either a simple-template-id representing an
13703          instantiation of an alias template...  */
13704       type_decl = cp_parser_template_id (parser,
13705                                          /*template_keyword_p=*/false,
13706                                          /*check_dependency_p=*/false,
13707                                          /*is_declaration=*/false);
13708       /* Note that this must be an instantiation of an alias template
13709          because [temp.names]/6 says:
13710          
13711              A template-id that names an alias template specialization
13712              is a type-name.
13713
13714          Whereas [temp.names]/7 says:
13715          
13716              A simple-template-id that names a class template
13717              specialization is a class-name.  */
13718       if (type_decl != NULL_TREE
13719           && TREE_CODE (type_decl) == TYPE_DECL
13720           && TYPE_DECL_ALIAS_P (type_decl))
13721         gcc_assert (DECL_TEMPLATE_INSTANTIATION (type_decl));
13722       else
13723         cp_parser_simulate_error (parser);
13724
13725       if (!cp_parser_parse_definitely (parser))
13726         /* ... Or a typedef-name or an enum-name.  */
13727         return cp_parser_nonclass_name (parser);
13728     }
13729
13730   return type_decl;
13731 }
13732
13733 /* Parse a non-class type-name, that is, either an enum-name or a typedef-name.
13734
13735    enum-name:
13736      identifier
13737
13738    typedef-name:
13739      identifier
13740
13741    Returns a TYPE_DECL for the type.  */
13742
13743 static tree
13744 cp_parser_nonclass_name (cp_parser* parser)
13745 {
13746   tree type_decl;
13747   tree identifier;
13748
13749   cp_token *token = cp_lexer_peek_token (parser->lexer);
13750   identifier = cp_parser_identifier (parser);
13751   if (identifier == error_mark_node)
13752     return error_mark_node;
13753
13754   /* Look up the type-name.  */
13755   type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
13756
13757   if (TREE_CODE (type_decl) != TYPE_DECL
13758       && (objc_is_id (identifier) || objc_is_class_name (identifier)))
13759     {
13760       /* See if this is an Objective-C type.  */
13761       tree protos = cp_parser_objc_protocol_refs_opt (parser);
13762       tree type = objc_get_protocol_qualified_type (identifier, protos);
13763       if (type)
13764         type_decl = TYPE_NAME (type);
13765     }
13766
13767   /* Issue an error if we did not find a type-name.  */
13768   if (TREE_CODE (type_decl) != TYPE_DECL
13769       /* In Objective-C, we have the complication that class names are
13770          normally type names and start declarations (eg, the
13771          "NSObject" in "NSObject *object;"), but can be used in an
13772          Objective-C 2.0 dot-syntax (as in "NSObject.version") which
13773          is an expression.  So, a classname followed by a dot is not a
13774          valid type-name.  */
13775       || (objc_is_class_name (TREE_TYPE (type_decl))
13776           && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT))
13777     {
13778       if (!cp_parser_simulate_error (parser))
13779         cp_parser_name_lookup_error (parser, identifier, type_decl,
13780                                      NLE_TYPE, token->location);
13781       return error_mark_node;
13782     }
13783   /* Remember that the name was used in the definition of the
13784      current class so that we can check later to see if the
13785      meaning would have been different after the class was
13786      entirely defined.  */
13787   else if (type_decl != error_mark_node
13788            && !parser->scope)
13789     maybe_note_name_used_in_class (identifier, type_decl);
13790   
13791   return type_decl;
13792 }
13793
13794 /* Parse an elaborated-type-specifier.  Note that the grammar given
13795    here incorporates the resolution to DR68.
13796
13797    elaborated-type-specifier:
13798      class-key :: [opt] nested-name-specifier [opt] identifier
13799      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
13800      enum-key :: [opt] nested-name-specifier [opt] identifier
13801      typename :: [opt] nested-name-specifier identifier
13802      typename :: [opt] nested-name-specifier template [opt]
13803        template-id
13804
13805    GNU extension:
13806
13807    elaborated-type-specifier:
13808      class-key attributes :: [opt] nested-name-specifier [opt] identifier
13809      class-key attributes :: [opt] nested-name-specifier [opt]
13810                template [opt] template-id
13811      enum attributes :: [opt] nested-name-specifier [opt] identifier
13812
13813    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
13814    declared `friend'.  If IS_DECLARATION is TRUE, then this
13815    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
13816    something is being declared.
13817
13818    Returns the TYPE specified.  */
13819
13820 static tree
13821 cp_parser_elaborated_type_specifier (cp_parser* parser,
13822                                      bool is_friend,
13823                                      bool is_declaration)
13824 {
13825   enum tag_types tag_type;
13826   tree identifier;
13827   tree type = NULL_TREE;
13828   tree attributes = NULL_TREE;
13829   tree globalscope;
13830   cp_token *token = NULL;
13831
13832   /* See if we're looking at the `enum' keyword.  */
13833   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
13834     {
13835       /* Consume the `enum' token.  */
13836       cp_lexer_consume_token (parser->lexer);
13837       /* Remember that it's an enumeration type.  */
13838       tag_type = enum_type;
13839       /* Issue a warning if the `struct' or `class' key (for C++0x scoped
13840          enums) is used here.  */
13841       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
13842           || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
13843         {
13844             pedwarn (input_location, 0, "elaborated-type-specifier "
13845                       "for a scoped enum must not use the %<%D%> keyword",
13846                       cp_lexer_peek_token (parser->lexer)->u.value);
13847           /* Consume the `struct' or `class' and parse it anyway.  */
13848           cp_lexer_consume_token (parser->lexer);
13849         }
13850       /* Parse the attributes.  */
13851       attributes = cp_parser_attributes_opt (parser);
13852     }
13853   /* Or, it might be `typename'.  */
13854   else if (cp_lexer_next_token_is_keyword (parser->lexer,
13855                                            RID_TYPENAME))
13856     {
13857       /* Consume the `typename' token.  */
13858       cp_lexer_consume_token (parser->lexer);
13859       /* Remember that it's a `typename' type.  */
13860       tag_type = typename_type;
13861     }
13862   /* Otherwise it must be a class-key.  */
13863   else
13864     {
13865       tag_type = cp_parser_class_key (parser);
13866       if (tag_type == none_type)
13867         return error_mark_node;
13868       /* Parse the attributes.  */
13869       attributes = cp_parser_attributes_opt (parser);
13870     }
13871
13872   /* Look for the `::' operator.  */
13873   globalscope =  cp_parser_global_scope_opt (parser,
13874                                              /*current_scope_valid_p=*/false);
13875   /* Look for the nested-name-specifier.  */
13876   if (tag_type == typename_type && !globalscope)
13877     {
13878       if (!cp_parser_nested_name_specifier (parser,
13879                                            /*typename_keyword_p=*/true,
13880                                            /*check_dependency_p=*/true,
13881                                            /*type_p=*/true,
13882                                             is_declaration))
13883         return error_mark_node;
13884     }
13885   else
13886     /* Even though `typename' is not present, the proposed resolution
13887        to Core Issue 180 says that in `class A<T>::B', `B' should be
13888        considered a type-name, even if `A<T>' is dependent.  */
13889     cp_parser_nested_name_specifier_opt (parser,
13890                                          /*typename_keyword_p=*/true,
13891                                          /*check_dependency_p=*/true,
13892                                          /*type_p=*/true,
13893                                          is_declaration);
13894  /* For everything but enumeration types, consider a template-id.
13895     For an enumeration type, consider only a plain identifier.  */
13896   if (tag_type != enum_type)
13897     {
13898       bool template_p = false;
13899       tree decl;
13900
13901       /* Allow the `template' keyword.  */
13902       template_p = cp_parser_optional_template_keyword (parser);
13903       /* If we didn't see `template', we don't know if there's a
13904          template-id or not.  */
13905       if (!template_p)
13906         cp_parser_parse_tentatively (parser);
13907       /* Parse the template-id.  */
13908       token = cp_lexer_peek_token (parser->lexer);
13909       decl = cp_parser_template_id (parser, template_p,
13910                                     /*check_dependency_p=*/true,
13911                                     is_declaration);
13912       /* If we didn't find a template-id, look for an ordinary
13913          identifier.  */
13914       if (!template_p && !cp_parser_parse_definitely (parser))
13915         ;
13916       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
13917          in effect, then we must assume that, upon instantiation, the
13918          template will correspond to a class.  */
13919       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
13920                && tag_type == typename_type)
13921         type = make_typename_type (parser->scope, decl,
13922                                    typename_type,
13923                                    /*complain=*/tf_error);
13924       /* If the `typename' keyword is in effect and DECL is not a type
13925          decl. Then type is non existant.   */
13926       else if (tag_type == typename_type && TREE_CODE (decl) != TYPE_DECL)
13927         type = NULL_TREE; 
13928       else 
13929         type = TREE_TYPE (decl);
13930     }
13931
13932   if (!type)
13933     {
13934       token = cp_lexer_peek_token (parser->lexer);
13935       identifier = cp_parser_identifier (parser);
13936
13937       if (identifier == error_mark_node)
13938         {
13939           parser->scope = NULL_TREE;
13940           return error_mark_node;
13941         }
13942
13943       /* For a `typename', we needn't call xref_tag.  */
13944       if (tag_type == typename_type
13945           && TREE_CODE (parser->scope) != NAMESPACE_DECL)
13946         return cp_parser_make_typename_type (parser, parser->scope,
13947                                              identifier,
13948                                              token->location);
13949       /* Look up a qualified name in the usual way.  */
13950       if (parser->scope)
13951         {
13952           tree decl;
13953           tree ambiguous_decls;
13954
13955           decl = cp_parser_lookup_name (parser, identifier,
13956                                         tag_type,
13957                                         /*is_template=*/false,
13958                                         /*is_namespace=*/false,
13959                                         /*check_dependency=*/true,
13960                                         &ambiguous_decls,
13961                                         token->location);
13962
13963           /* If the lookup was ambiguous, an error will already have been
13964              issued.  */
13965           if (ambiguous_decls)
13966             return error_mark_node;
13967
13968           /* If we are parsing friend declaration, DECL may be a
13969              TEMPLATE_DECL tree node here.  However, we need to check
13970              whether this TEMPLATE_DECL results in valid code.  Consider
13971              the following example:
13972
13973                namespace N {
13974                  template <class T> class C {};
13975                }
13976                class X {
13977                  template <class T> friend class N::C; // #1, valid code
13978                };
13979                template <class T> class Y {
13980                  friend class N::C;                    // #2, invalid code
13981                };
13982
13983              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
13984              name lookup of `N::C'.  We see that friend declaration must
13985              be template for the code to be valid.  Note that
13986              processing_template_decl does not work here since it is
13987              always 1 for the above two cases.  */
13988
13989           decl = (cp_parser_maybe_treat_template_as_class
13990                   (decl, /*tag_name_p=*/is_friend
13991                          && parser->num_template_parameter_lists));
13992
13993           if (TREE_CODE (decl) != TYPE_DECL)
13994             {
13995               cp_parser_diagnose_invalid_type_name (parser,
13996                                                     parser->scope,
13997                                                     identifier,
13998                                                     token->location);
13999               return error_mark_node;
14000             }
14001
14002           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
14003             {
14004               bool allow_template = (parser->num_template_parameter_lists
14005                                       || DECL_SELF_REFERENCE_P (decl));
14006               type = check_elaborated_type_specifier (tag_type, decl, 
14007                                                       allow_template);
14008
14009               if (type == error_mark_node)
14010                 return error_mark_node;
14011             }
14012
14013           /* Forward declarations of nested types, such as
14014
14015                class C1::C2;
14016                class C1::C2::C3;
14017
14018              are invalid unless all components preceding the final '::'
14019              are complete.  If all enclosing types are complete, these
14020              declarations become merely pointless.
14021
14022              Invalid forward declarations of nested types are errors
14023              caught elsewhere in parsing.  Those that are pointless arrive
14024              here.  */
14025
14026           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
14027               && !is_friend && !processing_explicit_instantiation)
14028             warning (0, "declaration %qD does not declare anything", decl);
14029
14030           type = TREE_TYPE (decl);
14031         }
14032       else
14033         {
14034           /* An elaborated-type-specifier sometimes introduces a new type and
14035              sometimes names an existing type.  Normally, the rule is that it
14036              introduces a new type only if there is not an existing type of
14037              the same name already in scope.  For example, given:
14038
14039                struct S {};
14040                void f() { struct S s; }
14041
14042              the `struct S' in the body of `f' is the same `struct S' as in
14043              the global scope; the existing definition is used.  However, if
14044              there were no global declaration, this would introduce a new
14045              local class named `S'.
14046
14047              An exception to this rule applies to the following code:
14048
14049                namespace N { struct S; }
14050
14051              Here, the elaborated-type-specifier names a new type
14052              unconditionally; even if there is already an `S' in the
14053              containing scope this declaration names a new type.
14054              This exception only applies if the elaborated-type-specifier
14055              forms the complete declaration:
14056
14057                [class.name]
14058
14059                A declaration consisting solely of `class-key identifier ;' is
14060                either a redeclaration of the name in the current scope or a
14061                forward declaration of the identifier as a class name.  It
14062                introduces the name into the current scope.
14063
14064              We are in this situation precisely when the next token is a `;'.
14065
14066              An exception to the exception is that a `friend' declaration does
14067              *not* name a new type; i.e., given:
14068
14069                struct S { friend struct T; };
14070
14071              `T' is not a new type in the scope of `S'.
14072
14073              Also, `new struct S' or `sizeof (struct S)' never results in the
14074              definition of a new type; a new type can only be declared in a
14075              declaration context.  */
14076
14077           tag_scope ts;
14078           bool template_p;
14079
14080           if (is_friend)
14081             /* Friends have special name lookup rules.  */
14082             ts = ts_within_enclosing_non_class;
14083           else if (is_declaration
14084                    && cp_lexer_next_token_is (parser->lexer,
14085                                               CPP_SEMICOLON))
14086             /* This is a `class-key identifier ;' */
14087             ts = ts_current;
14088           else
14089             ts = ts_global;
14090
14091           template_p =
14092             (parser->num_template_parameter_lists
14093              && (cp_parser_next_token_starts_class_definition_p (parser)
14094                  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
14095           /* An unqualified name was used to reference this type, so
14096              there were no qualifying templates.  */
14097           if (!cp_parser_check_template_parameters (parser,
14098                                                     /*num_templates=*/0,
14099                                                     token->location,
14100                                                     /*declarator=*/NULL))
14101             return error_mark_node;
14102           type = xref_tag (tag_type, identifier, ts, template_p);
14103         }
14104     }
14105
14106   if (type == error_mark_node)
14107     return error_mark_node;
14108
14109   /* Allow attributes on forward declarations of classes.  */
14110   if (attributes)
14111     {
14112       if (TREE_CODE (type) == TYPENAME_TYPE)
14113         warning (OPT_Wattributes,
14114                  "attributes ignored on uninstantiated type");
14115       else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
14116                && ! processing_explicit_instantiation)
14117         warning (OPT_Wattributes,
14118                  "attributes ignored on template instantiation");
14119       else if (is_declaration && cp_parser_declares_only_class_p (parser))
14120         cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
14121       else
14122         warning (OPT_Wattributes,
14123                  "attributes ignored on elaborated-type-specifier that is not a forward declaration");
14124     }
14125
14126   if (tag_type != enum_type)
14127     {
14128       /* Indicate whether this class was declared as a `class' or as a
14129          `struct'.  */
14130       if (TREE_CODE (type) == RECORD_TYPE)
14131         CLASSTYPE_DECLARED_CLASS (type) = (tag_type == class_type);
14132       cp_parser_check_class_key (tag_type, type);
14133     }
14134
14135   /* A "<" cannot follow an elaborated type specifier.  If that
14136      happens, the user was probably trying to form a template-id.  */
14137   cp_parser_check_for_invalid_template_id (parser, type, token->location);
14138
14139   return type;
14140 }
14141
14142 /* Parse an enum-specifier.
14143
14144    enum-specifier:
14145      enum-head { enumerator-list [opt] }
14146      enum-head { enumerator-list , } [C++0x]
14147
14148    enum-head:
14149      enum-key identifier [opt] enum-base [opt]
14150      enum-key nested-name-specifier identifier enum-base [opt]
14151
14152    enum-key:
14153      enum
14154      enum class   [C++0x]
14155      enum struct  [C++0x]
14156
14157    enum-base:   [C++0x]
14158      : type-specifier-seq
14159
14160    opaque-enum-specifier:
14161      enum-key identifier enum-base [opt] ;
14162
14163    GNU Extensions:
14164      enum-key attributes[opt] identifier [opt] enum-base [opt] 
14165        { enumerator-list [opt] }attributes[opt]
14166      enum-key attributes[opt] identifier [opt] enum-base [opt]
14167        { enumerator-list, }attributes[opt] [C++0x]
14168
14169    Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
14170    if the token stream isn't an enum-specifier after all.  */
14171
14172 static tree
14173 cp_parser_enum_specifier (cp_parser* parser)
14174 {
14175   tree identifier;
14176   tree type = NULL_TREE;
14177   tree prev_scope;
14178   tree nested_name_specifier = NULL_TREE;
14179   tree attributes;
14180   bool scoped_enum_p = false;
14181   bool has_underlying_type = false;
14182   bool nested_being_defined = false;
14183   bool new_value_list = false;
14184   bool is_new_type = false;
14185   bool is_anonymous = false;
14186   tree underlying_type = NULL_TREE;
14187   cp_token *type_start_token = NULL;
14188   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
14189
14190   parser->colon_corrects_to_scope_p = false;
14191
14192   /* Parse tentatively so that we can back up if we don't find a
14193      enum-specifier.  */
14194   cp_parser_parse_tentatively (parser);
14195
14196   /* Caller guarantees that the current token is 'enum', an identifier
14197      possibly follows, and the token after that is an opening brace.
14198      If we don't have an identifier, fabricate an anonymous name for
14199      the enumeration being defined.  */
14200   cp_lexer_consume_token (parser->lexer);
14201
14202   /* Parse the "class" or "struct", which indicates a scoped
14203      enumeration type in C++0x.  */
14204   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
14205       || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
14206     {
14207       if (cxx_dialect < cxx0x)
14208         maybe_warn_cpp0x (CPP0X_SCOPED_ENUMS);
14209
14210       /* Consume the `struct' or `class' token.  */
14211       cp_lexer_consume_token (parser->lexer);
14212
14213       scoped_enum_p = true;
14214     }
14215
14216   attributes = cp_parser_attributes_opt (parser);
14217
14218   /* Clear the qualification.  */
14219   parser->scope = NULL_TREE;
14220   parser->qualifying_scope = NULL_TREE;
14221   parser->object_scope = NULL_TREE;
14222
14223   /* Figure out in what scope the declaration is being placed.  */
14224   prev_scope = current_scope ();
14225
14226   type_start_token = cp_lexer_peek_token (parser->lexer);
14227
14228   push_deferring_access_checks (dk_no_check);
14229   nested_name_specifier
14230       = cp_parser_nested_name_specifier_opt (parser,
14231                                              /*typename_keyword_p=*/true,
14232                                              /*check_dependency_p=*/false,
14233                                              /*type_p=*/false,
14234                                              /*is_declaration=*/false);
14235
14236   if (nested_name_specifier)
14237     {
14238       tree name;
14239
14240       identifier = cp_parser_identifier (parser);
14241       name =  cp_parser_lookup_name (parser, identifier,
14242                                      enum_type,
14243                                      /*is_template=*/false,
14244                                      /*is_namespace=*/false,
14245                                      /*check_dependency=*/true,
14246                                      /*ambiguous_decls=*/NULL,
14247                                      input_location);
14248       if (name)
14249         {
14250           type = TREE_TYPE (name);
14251           if (TREE_CODE (type) == TYPENAME_TYPE)
14252             {
14253               /* Are template enums allowed in ISO? */
14254               if (template_parm_scope_p ())
14255                 pedwarn (type_start_token->location, OPT_pedantic,
14256                          "%qD is an enumeration template", name);
14257               /* ignore a typename reference, for it will be solved by name
14258                  in start_enum.  */
14259               type = NULL_TREE;
14260             }
14261         }
14262       else
14263         error_at (type_start_token->location,
14264                   "%qD is not an enumerator-name", identifier);
14265     }
14266   else
14267     {
14268       if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
14269         identifier = cp_parser_identifier (parser);
14270       else
14271         {
14272           identifier = make_anon_name ();
14273           is_anonymous = true;
14274         }
14275     }
14276   pop_deferring_access_checks ();
14277
14278   /* Check for the `:' that denotes a specified underlying type in C++0x.
14279      Note that a ':' could also indicate a bitfield width, however.  */
14280   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
14281     {
14282       cp_decl_specifier_seq type_specifiers;
14283
14284       /* Consume the `:'.  */
14285       cp_lexer_consume_token (parser->lexer);
14286
14287       /* Parse the type-specifier-seq.  */
14288       cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
14289                                     /*is_trailing_return=*/false,
14290                                     &type_specifiers);
14291
14292       /* At this point this is surely not elaborated type specifier.  */
14293       if (!cp_parser_parse_definitely (parser))
14294         return NULL_TREE;
14295
14296       if (cxx_dialect < cxx0x)
14297         maybe_warn_cpp0x (CPP0X_SCOPED_ENUMS);
14298
14299       has_underlying_type = true;
14300
14301       /* If that didn't work, stop.  */
14302       if (type_specifiers.type != error_mark_node)
14303         {
14304           underlying_type = grokdeclarator (NULL, &type_specifiers, TYPENAME,
14305                                             /*initialized=*/0, NULL);
14306           if (underlying_type == error_mark_node)
14307             underlying_type = NULL_TREE;
14308         }
14309     }
14310
14311   /* Look for the `{' but don't consume it yet.  */
14312   if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
14313     {
14314       if (cxx_dialect < cxx0x || (!scoped_enum_p && !underlying_type))
14315         {
14316           cp_parser_error (parser, "expected %<{%>");
14317           if (has_underlying_type)
14318             {
14319               type = NULL_TREE;
14320               goto out;
14321             }
14322         }
14323       /* An opaque-enum-specifier must have a ';' here.  */
14324       if ((scoped_enum_p || underlying_type)
14325           && cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
14326         {
14327           cp_parser_error (parser, "expected %<;%> or %<{%>");
14328           if (has_underlying_type)
14329             {
14330               type = NULL_TREE;
14331               goto out;
14332             }
14333         }
14334     }
14335
14336   if (!has_underlying_type && !cp_parser_parse_definitely (parser))
14337     return NULL_TREE;
14338
14339   if (nested_name_specifier)
14340     {
14341       if (CLASS_TYPE_P (nested_name_specifier))
14342         {
14343           nested_being_defined = TYPE_BEING_DEFINED (nested_name_specifier);
14344           TYPE_BEING_DEFINED (nested_name_specifier) = 1;
14345           push_scope (nested_name_specifier);
14346         }
14347       else if (TREE_CODE (nested_name_specifier) == NAMESPACE_DECL)
14348         {
14349           push_nested_namespace (nested_name_specifier);
14350         }
14351     }
14352
14353   /* Issue an error message if type-definitions are forbidden here.  */
14354   if (!cp_parser_check_type_definition (parser))
14355     type = error_mark_node;
14356   else
14357     /* Create the new type.  We do this before consuming the opening
14358        brace so the enum will be recorded as being on the line of its
14359        tag (or the 'enum' keyword, if there is no tag).  */
14360     type = start_enum (identifier, type, underlying_type,
14361                        scoped_enum_p, &is_new_type);
14362
14363   /* If the next token is not '{' it is an opaque-enum-specifier or an
14364      elaborated-type-specifier.  */
14365   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
14366     {
14367       timevar_push (TV_PARSE_ENUM);
14368       if (nested_name_specifier)
14369         {
14370           /* The following catches invalid code such as:
14371              enum class S<int>::E { A, B, C }; */
14372           if (!processing_specialization
14373               && CLASS_TYPE_P (nested_name_specifier)
14374               && CLASSTYPE_USE_TEMPLATE (nested_name_specifier))
14375             error_at (type_start_token->location, "cannot add an enumerator "
14376                       "list to a template instantiation");
14377
14378           /* If that scope does not contain the scope in which the
14379              class was originally declared, the program is invalid.  */
14380           if (prev_scope && !is_ancestor (prev_scope, nested_name_specifier))
14381             {
14382               if (at_namespace_scope_p ())
14383                 error_at (type_start_token->location,
14384                           "declaration of %qD in namespace %qD which does not "
14385                           "enclose %qD",
14386                           type, prev_scope, nested_name_specifier);
14387               else
14388                 error_at (type_start_token->location,
14389                           "declaration of %qD in %qD which does not enclose %qD",
14390                           type, prev_scope, nested_name_specifier);
14391               type = error_mark_node;
14392             }
14393         }
14394
14395       if (scoped_enum_p)
14396         begin_scope (sk_scoped_enum, type);
14397
14398       /* Consume the opening brace.  */
14399       cp_lexer_consume_token (parser->lexer);
14400
14401       if (type == error_mark_node)
14402         ; /* Nothing to add */
14403       else if (OPAQUE_ENUM_P (type)
14404                || (cxx_dialect > cxx98 && processing_specialization))
14405         {
14406           new_value_list = true;
14407           SET_OPAQUE_ENUM_P (type, false);
14408           DECL_SOURCE_LOCATION (TYPE_NAME (type)) = type_start_token->location;
14409         }
14410       else
14411         {
14412           error_at (type_start_token->location, "multiple definition of %q#T", type);
14413           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
14414                     "previous definition here");
14415           type = error_mark_node;
14416         }
14417
14418       if (type == error_mark_node)
14419         cp_parser_skip_to_end_of_block_or_statement (parser);
14420       /* If the next token is not '}', then there are some enumerators.  */
14421       else if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
14422         cp_parser_enumerator_list (parser, type);
14423
14424       /* Consume the final '}'.  */
14425       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
14426
14427       if (scoped_enum_p)
14428         finish_scope ();
14429       timevar_pop (TV_PARSE_ENUM);
14430     }
14431   else
14432     {
14433       /* If a ';' follows, then it is an opaque-enum-specifier
14434         and additional restrictions apply.  */
14435       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
14436         {
14437           if (is_anonymous)
14438             error_at (type_start_token->location,
14439                       "opaque-enum-specifier without name");
14440           else if (nested_name_specifier)
14441             error_at (type_start_token->location,
14442                       "opaque-enum-specifier must use a simple identifier");
14443         }
14444     }
14445
14446   /* Look for trailing attributes to apply to this enumeration, and
14447      apply them if appropriate.  */
14448   if (cp_parser_allow_gnu_extensions_p (parser))
14449     {
14450       tree trailing_attr = cp_parser_attributes_opt (parser);
14451       trailing_attr = chainon (trailing_attr, attributes);
14452       cplus_decl_attributes (&type,
14453                              trailing_attr,
14454                              (int) ATTR_FLAG_TYPE_IN_PLACE);
14455     }
14456
14457   /* Finish up the enumeration.  */
14458   if (type != error_mark_node)
14459     {
14460       if (new_value_list)
14461         finish_enum_value_list (type);
14462       if (is_new_type)
14463         finish_enum (type);
14464     }
14465
14466   if (nested_name_specifier)
14467     {
14468       if (CLASS_TYPE_P (nested_name_specifier))
14469         {
14470           TYPE_BEING_DEFINED (nested_name_specifier) = nested_being_defined;
14471           pop_scope (nested_name_specifier);
14472         }
14473       else if (TREE_CODE (nested_name_specifier) == NAMESPACE_DECL)
14474         {
14475           pop_nested_namespace (nested_name_specifier);
14476         }
14477     }
14478  out:
14479   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
14480   return type;
14481 }
14482
14483 /* Parse an enumerator-list.  The enumerators all have the indicated
14484    TYPE.
14485
14486    enumerator-list:
14487      enumerator-definition
14488      enumerator-list , enumerator-definition  */
14489
14490 static void
14491 cp_parser_enumerator_list (cp_parser* parser, tree type)
14492 {
14493   while (true)
14494     {
14495       /* Parse an enumerator-definition.  */
14496       cp_parser_enumerator_definition (parser, type);
14497
14498       /* If the next token is not a ',', we've reached the end of
14499          the list.  */
14500       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14501         break;
14502       /* Otherwise, consume the `,' and keep going.  */
14503       cp_lexer_consume_token (parser->lexer);
14504       /* If the next token is a `}', there is a trailing comma.  */
14505       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
14506         {
14507           if (cxx_dialect < cxx0x && !in_system_header)
14508             pedwarn (input_location, OPT_pedantic,
14509                      "comma at end of enumerator list");
14510           break;
14511         }
14512     }
14513 }
14514
14515 /* Parse an enumerator-definition.  The enumerator has the indicated
14516    TYPE.
14517
14518    enumerator-definition:
14519      enumerator
14520      enumerator = constant-expression
14521
14522    enumerator:
14523      identifier  */
14524
14525 static void
14526 cp_parser_enumerator_definition (cp_parser* parser, tree type)
14527 {
14528   tree identifier;
14529   tree value;
14530   location_t loc;
14531
14532   /* Save the input location because we are interested in the location
14533      of the identifier and not the location of the explicit value.  */
14534   loc = cp_lexer_peek_token (parser->lexer)->location;
14535
14536   /* Look for the identifier.  */
14537   identifier = cp_parser_identifier (parser);
14538   if (identifier == error_mark_node)
14539     return;
14540
14541   /* If the next token is an '=', then there is an explicit value.  */
14542   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
14543     {
14544       /* Consume the `=' token.  */
14545       cp_lexer_consume_token (parser->lexer);
14546       /* Parse the value.  */
14547       value = cp_parser_constant_expression (parser,
14548                                              /*allow_non_constant_p=*/false,
14549                                              NULL);
14550     }
14551   else
14552     value = NULL_TREE;
14553
14554   /* If we are processing a template, make sure the initializer of the
14555      enumerator doesn't contain any bare template parameter pack.  */
14556   if (check_for_bare_parameter_packs (value))
14557     value = error_mark_node;
14558
14559   /* integral_constant_value will pull out this expression, so make sure
14560      it's folded as appropriate.  */
14561   value = fold_non_dependent_expr (value);
14562
14563   /* Create the enumerator.  */
14564   build_enumerator (identifier, value, type, loc);
14565 }
14566
14567 /* Parse a namespace-name.
14568
14569    namespace-name:
14570      original-namespace-name
14571      namespace-alias
14572
14573    Returns the NAMESPACE_DECL for the namespace.  */
14574
14575 static tree
14576 cp_parser_namespace_name (cp_parser* parser)
14577 {
14578   tree identifier;
14579   tree namespace_decl;
14580
14581   cp_token *token = cp_lexer_peek_token (parser->lexer);
14582
14583   /* Get the name of the namespace.  */
14584   identifier = cp_parser_identifier (parser);
14585   if (identifier == error_mark_node)
14586     return error_mark_node;
14587
14588   /* Look up the identifier in the currently active scope.  Look only
14589      for namespaces, due to:
14590
14591        [basic.lookup.udir]
14592
14593        When looking up a namespace-name in a using-directive or alias
14594        definition, only namespace names are considered.
14595
14596      And:
14597
14598        [basic.lookup.qual]
14599
14600        During the lookup of a name preceding the :: scope resolution
14601        operator, object, function, and enumerator names are ignored.
14602
14603      (Note that cp_parser_qualifying_entity only calls this
14604      function if the token after the name is the scope resolution
14605      operator.)  */
14606   namespace_decl = cp_parser_lookup_name (parser, identifier,
14607                                           none_type,
14608                                           /*is_template=*/false,
14609                                           /*is_namespace=*/true,
14610                                           /*check_dependency=*/true,
14611                                           /*ambiguous_decls=*/NULL,
14612                                           token->location);
14613   /* If it's not a namespace, issue an error.  */
14614   if (namespace_decl == error_mark_node
14615       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
14616     {
14617       if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
14618         error_at (token->location, "%qD is not a namespace-name", identifier);
14619       cp_parser_error (parser, "expected namespace-name");
14620       namespace_decl = error_mark_node;
14621     }
14622
14623   return namespace_decl;
14624 }
14625
14626 /* Parse a namespace-definition.
14627
14628    namespace-definition:
14629      named-namespace-definition
14630      unnamed-namespace-definition
14631
14632    named-namespace-definition:
14633      original-namespace-definition
14634      extension-namespace-definition
14635
14636    original-namespace-definition:
14637      namespace identifier { namespace-body }
14638
14639    extension-namespace-definition:
14640      namespace original-namespace-name { namespace-body }
14641
14642    unnamed-namespace-definition:
14643      namespace { namespace-body } */
14644
14645 static void
14646 cp_parser_namespace_definition (cp_parser* parser)
14647 {
14648   tree identifier, attribs;
14649   bool has_visibility;
14650   bool is_inline;
14651
14652   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_INLINE))
14653     {
14654       maybe_warn_cpp0x (CPP0X_INLINE_NAMESPACES);
14655       is_inline = true;
14656       cp_lexer_consume_token (parser->lexer);
14657     }
14658   else
14659     is_inline = false;
14660
14661   /* Look for the `namespace' keyword.  */
14662   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
14663
14664   /* Get the name of the namespace.  We do not attempt to distinguish
14665      between an original-namespace-definition and an
14666      extension-namespace-definition at this point.  The semantic
14667      analysis routines are responsible for that.  */
14668   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
14669     identifier = cp_parser_identifier (parser);
14670   else
14671     identifier = NULL_TREE;
14672
14673   /* Parse any specified attributes.  */
14674   attribs = cp_parser_attributes_opt (parser);
14675
14676   /* Look for the `{' to start the namespace.  */
14677   cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
14678   /* Start the namespace.  */
14679   push_namespace (identifier);
14680
14681   /* "inline namespace" is equivalent to a stub namespace definition
14682      followed by a strong using directive.  */
14683   if (is_inline)
14684     {
14685       tree name_space = current_namespace;
14686       /* Set up namespace association.  */
14687       DECL_NAMESPACE_ASSOCIATIONS (name_space)
14688         = tree_cons (CP_DECL_CONTEXT (name_space), NULL_TREE,
14689                      DECL_NAMESPACE_ASSOCIATIONS (name_space));
14690       /* Import the contents of the inline namespace.  */
14691       pop_namespace ();
14692       do_using_directive (name_space);
14693       push_namespace (identifier);
14694     }
14695
14696   has_visibility = handle_namespace_attrs (current_namespace, attribs);
14697
14698   /* Parse the body of the namespace.  */
14699   cp_parser_namespace_body (parser);
14700
14701   if (has_visibility)
14702     pop_visibility (1);
14703
14704   /* Finish the namespace.  */
14705   pop_namespace ();
14706   /* Look for the final `}'.  */
14707   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
14708 }
14709
14710 /* Parse a namespace-body.
14711
14712    namespace-body:
14713      declaration-seq [opt]  */
14714
14715 static void
14716 cp_parser_namespace_body (cp_parser* parser)
14717 {
14718   cp_parser_declaration_seq_opt (parser);
14719 }
14720
14721 /* Parse a namespace-alias-definition.
14722
14723    namespace-alias-definition:
14724      namespace identifier = qualified-namespace-specifier ;  */
14725
14726 static void
14727 cp_parser_namespace_alias_definition (cp_parser* parser)
14728 {
14729   tree identifier;
14730   tree namespace_specifier;
14731
14732   cp_token *token = cp_lexer_peek_token (parser->lexer);
14733
14734   /* Look for the `namespace' keyword.  */
14735   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
14736   /* Look for the identifier.  */
14737   identifier = cp_parser_identifier (parser);
14738   if (identifier == error_mark_node)
14739     return;
14740   /* Look for the `=' token.  */
14741   if (!cp_parser_uncommitted_to_tentative_parse_p (parser)
14742       && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) 
14743     {
14744       error_at (token->location, "%<namespace%> definition is not allowed here");
14745       /* Skip the definition.  */
14746       cp_lexer_consume_token (parser->lexer);
14747       if (cp_parser_skip_to_closing_brace (parser))
14748         cp_lexer_consume_token (parser->lexer);
14749       return;
14750     }
14751   cp_parser_require (parser, CPP_EQ, RT_EQ);
14752   /* Look for the qualified-namespace-specifier.  */
14753   namespace_specifier
14754     = cp_parser_qualified_namespace_specifier (parser);
14755   /* Look for the `;' token.  */
14756   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
14757
14758   /* Register the alias in the symbol table.  */
14759   do_namespace_alias (identifier, namespace_specifier);
14760 }
14761
14762 /* Parse a qualified-namespace-specifier.
14763
14764    qualified-namespace-specifier:
14765      :: [opt] nested-name-specifier [opt] namespace-name
14766
14767    Returns a NAMESPACE_DECL corresponding to the specified
14768    namespace.  */
14769
14770 static tree
14771 cp_parser_qualified_namespace_specifier (cp_parser* parser)
14772 {
14773   /* Look for the optional `::'.  */
14774   cp_parser_global_scope_opt (parser,
14775                               /*current_scope_valid_p=*/false);
14776
14777   /* Look for the optional nested-name-specifier.  */
14778   cp_parser_nested_name_specifier_opt (parser,
14779                                        /*typename_keyword_p=*/false,
14780                                        /*check_dependency_p=*/true,
14781                                        /*type_p=*/false,
14782                                        /*is_declaration=*/true);
14783
14784   return cp_parser_namespace_name (parser);
14785 }
14786
14787 /* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
14788    access declaration.
14789
14790    using-declaration:
14791      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
14792      using :: unqualified-id ;  
14793
14794    access-declaration:
14795      qualified-id ;  
14796
14797    */
14798
14799 static bool
14800 cp_parser_using_declaration (cp_parser* parser, 
14801                              bool access_declaration_p)
14802 {
14803   cp_token *token;
14804   bool typename_p = false;
14805   bool global_scope_p;
14806   tree decl;
14807   tree identifier;
14808   tree qscope;
14809
14810   if (access_declaration_p)
14811     cp_parser_parse_tentatively (parser);
14812   else
14813     {
14814       /* Look for the `using' keyword.  */
14815       cp_parser_require_keyword (parser, RID_USING, RT_USING);
14816       
14817       /* Peek at the next token.  */
14818       token = cp_lexer_peek_token (parser->lexer);
14819       /* See if it's `typename'.  */
14820       if (token->keyword == RID_TYPENAME)
14821         {
14822           /* Remember that we've seen it.  */
14823           typename_p = true;
14824           /* Consume the `typename' token.  */
14825           cp_lexer_consume_token (parser->lexer);
14826         }
14827     }
14828
14829   /* Look for the optional global scope qualification.  */
14830   global_scope_p
14831     = (cp_parser_global_scope_opt (parser,
14832                                    /*current_scope_valid_p=*/false)
14833        != NULL_TREE);
14834
14835   /* If we saw `typename', or didn't see `::', then there must be a
14836      nested-name-specifier present.  */
14837   if (typename_p || !global_scope_p)
14838     qscope = cp_parser_nested_name_specifier (parser, typename_p,
14839                                               /*check_dependency_p=*/true,
14840                                               /*type_p=*/false,
14841                                               /*is_declaration=*/true);
14842   /* Otherwise, we could be in either of the two productions.  In that
14843      case, treat the nested-name-specifier as optional.  */
14844   else
14845     qscope = cp_parser_nested_name_specifier_opt (parser,
14846                                                   /*typename_keyword_p=*/false,
14847                                                   /*check_dependency_p=*/true,
14848                                                   /*type_p=*/false,
14849                                                   /*is_declaration=*/true);
14850   if (!qscope)
14851     qscope = global_namespace;
14852
14853   if (access_declaration_p && cp_parser_error_occurred (parser))
14854     /* Something has already gone wrong; there's no need to parse
14855        further.  Since an error has occurred, the return value of
14856        cp_parser_parse_definitely will be false, as required.  */
14857     return cp_parser_parse_definitely (parser);
14858
14859   token = cp_lexer_peek_token (parser->lexer);
14860   /* Parse the unqualified-id.  */
14861   identifier = cp_parser_unqualified_id (parser,
14862                                          /*template_keyword_p=*/false,
14863                                          /*check_dependency_p=*/true,
14864                                          /*declarator_p=*/true,
14865                                          /*optional_p=*/false);
14866
14867   if (access_declaration_p)
14868     {
14869       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
14870         cp_parser_simulate_error (parser);
14871       if (!cp_parser_parse_definitely (parser))
14872         return false;
14873     }
14874
14875   /* The function we call to handle a using-declaration is different
14876      depending on what scope we are in.  */
14877   if (qscope == error_mark_node || identifier == error_mark_node)
14878     ;
14879   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
14880            && TREE_CODE (identifier) != BIT_NOT_EXPR)
14881     /* [namespace.udecl]
14882
14883        A using declaration shall not name a template-id.  */
14884     error_at (token->location,
14885               "a template-id may not appear in a using-declaration");
14886   else
14887     {
14888       if (at_class_scope_p ())
14889         {
14890           /* Create the USING_DECL.  */
14891           decl = do_class_using_decl (parser->scope, identifier);
14892
14893           if (check_for_bare_parameter_packs (decl))
14894             return false;
14895           else
14896             /* Add it to the list of members in this class.  */
14897             finish_member_declaration (decl);
14898         }
14899       else
14900         {
14901           decl = cp_parser_lookup_name_simple (parser,
14902                                                identifier,
14903                                                token->location);
14904           if (decl == error_mark_node)
14905             cp_parser_name_lookup_error (parser, identifier,
14906                                          decl, NLE_NULL,
14907                                          token->location);
14908           else if (check_for_bare_parameter_packs (decl))
14909             return false;
14910           else if (!at_namespace_scope_p ())
14911             do_local_using_decl (decl, qscope, identifier);
14912           else
14913             do_toplevel_using_decl (decl, qscope, identifier);
14914         }
14915     }
14916
14917   /* Look for the final `;'.  */
14918   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
14919   
14920   return true;
14921 }
14922
14923 /* Parse an alias-declaration.
14924
14925    alias-declaration:
14926      using identifier attribute-specifier-seq [opt] = type-id  */
14927
14928 static tree
14929 cp_parser_alias_declaration (cp_parser* parser)
14930 {
14931   tree id, type, decl, pushed_scope = NULL_TREE, attributes;
14932   location_t id_location;
14933   cp_declarator *declarator;
14934   cp_decl_specifier_seq decl_specs;
14935   bool member_p;
14936
14937   /* Look for the `using' keyword.  */
14938   cp_parser_require_keyword (parser, RID_USING, RT_USING);
14939   id_location = cp_lexer_peek_token (parser->lexer)->location;
14940   id = cp_parser_identifier (parser);
14941   attributes = cp_parser_attributes_opt (parser);
14942   cp_parser_require (parser, CPP_EQ, RT_EQ);
14943
14944   type = cp_parser_type_id (parser);
14945   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
14946
14947   /* A typedef-name can also be introduced by an alias-declaration. The
14948      identifier following the using keyword becomes a typedef-name. It has
14949      the same semantics as if it were introduced by the typedef
14950      specifier. In particular, it does not define a new type and it shall
14951      not appear in the type-id.  */
14952
14953   clear_decl_specs (&decl_specs);
14954   decl_specs.type = type;
14955   decl_specs.attributes = attributes;
14956   ++decl_specs.specs[(int) ds_typedef];
14957   ++decl_specs.specs[(int) ds_alias];
14958
14959   declarator = make_id_declarator (NULL_TREE, id, sfk_none);
14960   declarator->id_loc = id_location;
14961
14962   member_p = at_class_scope_p ();
14963   if (member_p)
14964     decl = grokfield (declarator, &decl_specs, NULL_TREE, false,
14965                       NULL_TREE, attributes);
14966   else
14967     decl = start_decl (declarator, &decl_specs, 0,
14968                        attributes, NULL_TREE, &pushed_scope);
14969   if (decl == error_mark_node)
14970     return decl;
14971
14972   cp_finish_decl (decl, NULL_TREE, 0, NULL_TREE, 0);
14973
14974   if (pushed_scope)
14975     pop_scope (pushed_scope);
14976
14977   /* If decl is a template, return its TEMPLATE_DECL so that it gets
14978      added into the symbol table; otherwise, return the TYPE_DECL.  */
14979   if (DECL_LANG_SPECIFIC (decl)
14980       && DECL_TEMPLATE_INFO (decl)
14981       && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
14982     {
14983       decl = DECL_TI_TEMPLATE (decl);
14984       if (member_p)
14985         check_member_template (decl);
14986     }
14987
14988   return decl;
14989 }
14990
14991 /* Parse a using-directive.
14992
14993    using-directive:
14994      using namespace :: [opt] nested-name-specifier [opt]
14995        namespace-name ;  */
14996
14997 static void
14998 cp_parser_using_directive (cp_parser* parser)
14999 {
15000   tree namespace_decl;
15001   tree attribs;
15002
15003   /* Look for the `using' keyword.  */
15004   cp_parser_require_keyword (parser, RID_USING, RT_USING);
15005   /* And the `namespace' keyword.  */
15006   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
15007   /* Look for the optional `::' operator.  */
15008   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
15009   /* And the optional nested-name-specifier.  */
15010   cp_parser_nested_name_specifier_opt (parser,
15011                                        /*typename_keyword_p=*/false,
15012                                        /*check_dependency_p=*/true,
15013                                        /*type_p=*/false,
15014                                        /*is_declaration=*/true);
15015   /* Get the namespace being used.  */
15016   namespace_decl = cp_parser_namespace_name (parser);
15017   /* And any specified attributes.  */
15018   attribs = cp_parser_attributes_opt (parser);
15019   /* Update the symbol table.  */
15020   parse_using_directive (namespace_decl, attribs);
15021   /* Look for the final `;'.  */
15022   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
15023 }
15024
15025 /* Parse an asm-definition.
15026
15027    asm-definition:
15028      asm ( string-literal ) ;
15029
15030    GNU Extension:
15031
15032    asm-definition:
15033      asm volatile [opt] ( string-literal ) ;
15034      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
15035      asm volatile [opt] ( string-literal : asm-operand-list [opt]
15036                           : asm-operand-list [opt] ) ;
15037      asm volatile [opt] ( string-literal : asm-operand-list [opt]
15038                           : asm-operand-list [opt]
15039                           : asm-clobber-list [opt] ) ;
15040      asm volatile [opt] goto ( string-literal : : asm-operand-list [opt]
15041                                : asm-clobber-list [opt]
15042                                : asm-goto-list ) ;  */
15043
15044 static void
15045 cp_parser_asm_definition (cp_parser* parser)
15046 {
15047   tree string;
15048   tree outputs = NULL_TREE;
15049   tree inputs = NULL_TREE;
15050   tree clobbers = NULL_TREE;
15051   tree labels = NULL_TREE;
15052   tree asm_stmt;
15053   bool volatile_p = false;
15054   bool extended_p = false;
15055   bool invalid_inputs_p = false;
15056   bool invalid_outputs_p = false;
15057   bool goto_p = false;
15058   required_token missing = RT_NONE;
15059
15060   /* Look for the `asm' keyword.  */
15061   cp_parser_require_keyword (parser, RID_ASM, RT_ASM);
15062   /* See if the next token is `volatile'.  */
15063   if (cp_parser_allow_gnu_extensions_p (parser)
15064       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
15065     {
15066       /* Remember that we saw the `volatile' keyword.  */
15067       volatile_p = true;
15068       /* Consume the token.  */
15069       cp_lexer_consume_token (parser->lexer);
15070     }
15071   if (cp_parser_allow_gnu_extensions_p (parser)
15072       && parser->in_function_body
15073       && cp_lexer_next_token_is_keyword (parser->lexer, RID_GOTO))
15074     {
15075       /* Remember that we saw the `goto' keyword.  */
15076       goto_p = true;
15077       /* Consume the token.  */
15078       cp_lexer_consume_token (parser->lexer);
15079     }
15080   /* Look for the opening `('.  */
15081   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
15082     return;
15083   /* Look for the string.  */
15084   string = cp_parser_string_literal (parser, false, false);
15085   if (string == error_mark_node)
15086     {
15087       cp_parser_skip_to_closing_parenthesis (parser, true, false,
15088                                              /*consume_paren=*/true);
15089       return;
15090     }
15091
15092   /* If we're allowing GNU extensions, check for the extended assembly
15093      syntax.  Unfortunately, the `:' tokens need not be separated by
15094      a space in C, and so, for compatibility, we tolerate that here
15095      too.  Doing that means that we have to treat the `::' operator as
15096      two `:' tokens.  */
15097   if (cp_parser_allow_gnu_extensions_p (parser)
15098       && parser->in_function_body
15099       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
15100           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
15101     {
15102       bool inputs_p = false;
15103       bool clobbers_p = false;
15104       bool labels_p = false;
15105
15106       /* The extended syntax was used.  */
15107       extended_p = true;
15108
15109       /* Look for outputs.  */
15110       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
15111         {
15112           /* Consume the `:'.  */
15113           cp_lexer_consume_token (parser->lexer);
15114           /* Parse the output-operands.  */
15115           if (cp_lexer_next_token_is_not (parser->lexer,
15116                                           CPP_COLON)
15117               && cp_lexer_next_token_is_not (parser->lexer,
15118                                              CPP_SCOPE)
15119               && cp_lexer_next_token_is_not (parser->lexer,
15120                                              CPP_CLOSE_PAREN)
15121               && !goto_p)
15122             outputs = cp_parser_asm_operand_list (parser);
15123
15124             if (outputs == error_mark_node)
15125               invalid_outputs_p = true;
15126         }
15127       /* If the next token is `::', there are no outputs, and the
15128          next token is the beginning of the inputs.  */
15129       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
15130         /* The inputs are coming next.  */
15131         inputs_p = true;
15132
15133       /* Look for inputs.  */
15134       if (inputs_p
15135           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
15136         {
15137           /* Consume the `:' or `::'.  */
15138           cp_lexer_consume_token (parser->lexer);
15139           /* Parse the output-operands.  */
15140           if (cp_lexer_next_token_is_not (parser->lexer,
15141                                           CPP_COLON)
15142               && cp_lexer_next_token_is_not (parser->lexer,
15143                                              CPP_SCOPE)
15144               && cp_lexer_next_token_is_not (parser->lexer,
15145                                              CPP_CLOSE_PAREN))
15146             inputs = cp_parser_asm_operand_list (parser);
15147
15148             if (inputs == error_mark_node)
15149               invalid_inputs_p = true;
15150         }
15151       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
15152         /* The clobbers are coming next.  */
15153         clobbers_p = true;
15154
15155       /* Look for clobbers.  */
15156       if (clobbers_p
15157           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
15158         {
15159           clobbers_p = true;
15160           /* Consume the `:' or `::'.  */
15161           cp_lexer_consume_token (parser->lexer);
15162           /* Parse the clobbers.  */
15163           if (cp_lexer_next_token_is_not (parser->lexer,
15164                                           CPP_COLON)
15165               && cp_lexer_next_token_is_not (parser->lexer,
15166                                              CPP_CLOSE_PAREN))
15167             clobbers = cp_parser_asm_clobber_list (parser);
15168         }
15169       else if (goto_p
15170                && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
15171         /* The labels are coming next.  */
15172         labels_p = true;
15173
15174       /* Look for labels.  */
15175       if (labels_p
15176           || (goto_p && cp_lexer_next_token_is (parser->lexer, CPP_COLON)))
15177         {
15178           labels_p = true;
15179           /* Consume the `:' or `::'.  */
15180           cp_lexer_consume_token (parser->lexer);
15181           /* Parse the labels.  */
15182           labels = cp_parser_asm_label_list (parser);
15183         }
15184
15185       if (goto_p && !labels_p)
15186         missing = clobbers_p ? RT_COLON : RT_COLON_SCOPE;
15187     }
15188   else if (goto_p)
15189     missing = RT_COLON_SCOPE;
15190
15191   /* Look for the closing `)'.  */
15192   if (!cp_parser_require (parser, missing ? CPP_COLON : CPP_CLOSE_PAREN,
15193                           missing ? missing : RT_CLOSE_PAREN))
15194     cp_parser_skip_to_closing_parenthesis (parser, true, false,
15195                                            /*consume_paren=*/true);
15196   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
15197
15198   if (!invalid_inputs_p && !invalid_outputs_p)
15199     {
15200       /* Create the ASM_EXPR.  */
15201       if (parser->in_function_body)
15202         {
15203           asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
15204                                       inputs, clobbers, labels);
15205           /* If the extended syntax was not used, mark the ASM_EXPR.  */
15206           if (!extended_p)
15207             {
15208               tree temp = asm_stmt;
15209               if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
15210                 temp = TREE_OPERAND (temp, 0);
15211
15212               ASM_INPUT_P (temp) = 1;
15213             }
15214         }
15215       else
15216         cgraph_add_asm_node (string);
15217     }
15218 }
15219
15220 /* Declarators [gram.dcl.decl] */
15221
15222 /* Parse an init-declarator.
15223
15224    init-declarator:
15225      declarator initializer [opt]
15226
15227    GNU Extension:
15228
15229    init-declarator:
15230      declarator asm-specification [opt] attributes [opt] initializer [opt]
15231
15232    function-definition:
15233      decl-specifier-seq [opt] declarator ctor-initializer [opt]
15234        function-body
15235      decl-specifier-seq [opt] declarator function-try-block
15236
15237    GNU Extension:
15238
15239    function-definition:
15240      __extension__ function-definition
15241
15242    TM Extension:
15243
15244    function-definition:
15245      decl-specifier-seq [opt] declarator function-transaction-block
15246
15247    The DECL_SPECIFIERS apply to this declarator.  Returns a
15248    representation of the entity declared.  If MEMBER_P is TRUE, then
15249    this declarator appears in a class scope.  The new DECL created by
15250    this declarator is returned.
15251
15252    The CHECKS are access checks that should be performed once we know
15253    what entity is being declared (and, therefore, what classes have
15254    befriended it).
15255
15256    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
15257    for a function-definition here as well.  If the declarator is a
15258    declarator for a function-definition, *FUNCTION_DEFINITION_P will
15259    be TRUE upon return.  By that point, the function-definition will
15260    have been completely parsed.
15261
15262    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
15263    is FALSE.
15264
15265    If MAYBE_RANGE_FOR_DECL is not NULL, the pointed tree will be set to the
15266    parsed declaration if it is an uninitialized single declarator not followed
15267    by a `;', or to error_mark_node otherwise. Either way, the trailing `;',
15268    if present, will not be consumed.  If returned, this declarator will be
15269    created with SD_INITIALIZED but will not call cp_finish_decl.  */
15270
15271 static tree
15272 cp_parser_init_declarator (cp_parser* parser,
15273                            cp_decl_specifier_seq *decl_specifiers,
15274                            VEC (deferred_access_check,gc)* checks,
15275                            bool function_definition_allowed_p,
15276                            bool member_p,
15277                            int declares_class_or_enum,
15278                            bool* function_definition_p,
15279                            tree* maybe_range_for_decl)
15280 {
15281   cp_token *token = NULL, *asm_spec_start_token = NULL,
15282            *attributes_start_token = NULL;
15283   cp_declarator *declarator;
15284   tree prefix_attributes;
15285   tree attributes;
15286   tree asm_specification;
15287   tree initializer;
15288   tree decl = NULL_TREE;
15289   tree scope;
15290   int is_initialized;
15291   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
15292      initialized with "= ..", CPP_OPEN_PAREN if initialized with
15293      "(...)".  */
15294   enum cpp_ttype initialization_kind;
15295   bool is_direct_init = false;
15296   bool is_non_constant_init;
15297   int ctor_dtor_or_conv_p;
15298   bool friend_p;
15299   tree pushed_scope = NULL_TREE;
15300   bool range_for_decl_p = false;
15301
15302   /* Gather the attributes that were provided with the
15303      decl-specifiers.  */
15304   prefix_attributes = decl_specifiers->attributes;
15305
15306   /* Assume that this is not the declarator for a function
15307      definition.  */
15308   if (function_definition_p)
15309     *function_definition_p = false;
15310
15311   /* Defer access checks while parsing the declarator; we cannot know
15312      what names are accessible until we know what is being
15313      declared.  */
15314   resume_deferring_access_checks ();
15315
15316   /* Parse the declarator.  */
15317   token = cp_lexer_peek_token (parser->lexer);
15318   declarator
15319     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
15320                             &ctor_dtor_or_conv_p,
15321                             /*parenthesized_p=*/NULL,
15322                             member_p);
15323   /* Gather up the deferred checks.  */
15324   stop_deferring_access_checks ();
15325
15326   /* If the DECLARATOR was erroneous, there's no need to go
15327      further.  */
15328   if (declarator == cp_error_declarator)
15329     return error_mark_node;
15330
15331   /* Check that the number of template-parameter-lists is OK.  */
15332   if (!cp_parser_check_declarator_template_parameters (parser, declarator,
15333                                                        token->location))
15334     return error_mark_node;
15335
15336   if (declares_class_or_enum & 2)
15337     cp_parser_check_for_definition_in_return_type (declarator,
15338                                                    decl_specifiers->type,
15339                                                    decl_specifiers->type_location);
15340
15341   /* Figure out what scope the entity declared by the DECLARATOR is
15342      located in.  `grokdeclarator' sometimes changes the scope, so
15343      we compute it now.  */
15344   scope = get_scope_of_declarator (declarator);
15345
15346   /* Perform any lookups in the declared type which were thought to be
15347      dependent, but are not in the scope of the declarator.  */
15348   decl_specifiers->type
15349     = maybe_update_decl_type (decl_specifiers->type, scope);
15350
15351   /* If we're allowing GNU extensions, look for an asm-specification
15352      and attributes.  */
15353   if (cp_parser_allow_gnu_extensions_p (parser))
15354     {
15355       /* Look for an asm-specification.  */
15356       asm_spec_start_token = cp_lexer_peek_token (parser->lexer);
15357       asm_specification = cp_parser_asm_specification_opt (parser);
15358       /* And attributes.  */
15359       attributes_start_token = cp_lexer_peek_token (parser->lexer);
15360       attributes = cp_parser_attributes_opt (parser);
15361     }
15362   else
15363     {
15364       asm_specification = NULL_TREE;
15365       attributes = NULL_TREE;
15366     }
15367
15368   /* Peek at the next token.  */
15369   token = cp_lexer_peek_token (parser->lexer);
15370   /* Check to see if the token indicates the start of a
15371      function-definition.  */
15372   if (function_declarator_p (declarator)
15373       && cp_parser_token_starts_function_definition_p (token))
15374     {
15375       if (!function_definition_allowed_p)
15376         {
15377           /* If a function-definition should not appear here, issue an
15378              error message.  */
15379           cp_parser_error (parser,
15380                            "a function-definition is not allowed here");
15381           return error_mark_node;
15382         }
15383       else
15384         {
15385           location_t func_brace_location
15386             = cp_lexer_peek_token (parser->lexer)->location;
15387
15388           /* Neither attributes nor an asm-specification are allowed
15389              on a function-definition.  */
15390           if (asm_specification)
15391             error_at (asm_spec_start_token->location,
15392                       "an asm-specification is not allowed "
15393                       "on a function-definition");
15394           if (attributes)
15395             error_at (attributes_start_token->location,
15396                       "attributes are not allowed on a function-definition");
15397           /* This is a function-definition.  */
15398           *function_definition_p = true;
15399
15400           /* Parse the function definition.  */
15401           if (member_p)
15402             decl = cp_parser_save_member_function_body (parser,
15403                                                         decl_specifiers,
15404                                                         declarator,
15405                                                         prefix_attributes);
15406           else
15407             decl
15408               = (cp_parser_function_definition_from_specifiers_and_declarator
15409                  (parser, decl_specifiers, prefix_attributes, declarator));
15410
15411           if (decl != error_mark_node && DECL_STRUCT_FUNCTION (decl))
15412             {
15413               /* This is where the prologue starts...  */
15414               DECL_STRUCT_FUNCTION (decl)->function_start_locus
15415                 = func_brace_location;
15416             }
15417
15418           return decl;
15419         }
15420     }
15421
15422   /* [dcl.dcl]
15423
15424      Only in function declarations for constructors, destructors, and
15425      type conversions can the decl-specifier-seq be omitted.
15426
15427      We explicitly postpone this check past the point where we handle
15428      function-definitions because we tolerate function-definitions
15429      that are missing their return types in some modes.  */
15430   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
15431     {
15432       cp_parser_error (parser,
15433                        "expected constructor, destructor, or type conversion");
15434       return error_mark_node;
15435     }
15436
15437   /* An `=' or an `(', or an '{' in C++0x, indicates an initializer.  */
15438   if (token->type == CPP_EQ
15439       || token->type == CPP_OPEN_PAREN
15440       || token->type == CPP_OPEN_BRACE)
15441     {
15442       is_initialized = SD_INITIALIZED;
15443       initialization_kind = token->type;
15444       if (maybe_range_for_decl)
15445         *maybe_range_for_decl = error_mark_node;
15446
15447       if (token->type == CPP_EQ
15448           && function_declarator_p (declarator))
15449         {
15450           cp_token *t2 = cp_lexer_peek_nth_token (parser->lexer, 2);
15451           if (t2->keyword == RID_DEFAULT)
15452             is_initialized = SD_DEFAULTED;
15453           else if (t2->keyword == RID_DELETE)
15454             is_initialized = SD_DELETED;
15455         }
15456     }
15457   else
15458     {
15459       /* If the init-declarator isn't initialized and isn't followed by a
15460          `,' or `;', it's not a valid init-declarator.  */
15461       if (token->type != CPP_COMMA
15462           && token->type != CPP_SEMICOLON)
15463         {
15464           if (maybe_range_for_decl && *maybe_range_for_decl != error_mark_node)
15465             range_for_decl_p = true;
15466           else
15467             {
15468               cp_parser_error (parser, "expected initializer");
15469               return error_mark_node;
15470             }
15471         }
15472       is_initialized = SD_UNINITIALIZED;
15473       initialization_kind = CPP_EOF;
15474     }
15475
15476   /* Because start_decl has side-effects, we should only call it if we
15477      know we're going ahead.  By this point, we know that we cannot
15478      possibly be looking at any other construct.  */
15479   cp_parser_commit_to_tentative_parse (parser);
15480
15481   /* If the decl specifiers were bad, issue an error now that we're
15482      sure this was intended to be a declarator.  Then continue
15483      declaring the variable(s), as int, to try to cut down on further
15484      errors.  */
15485   if (decl_specifiers->any_specifiers_p
15486       && decl_specifiers->type == error_mark_node)
15487     {
15488       cp_parser_error (parser, "invalid type in declaration");
15489       decl_specifiers->type = integer_type_node;
15490     }
15491
15492   /* Check to see whether or not this declaration is a friend.  */
15493   friend_p = cp_parser_friend_p (decl_specifiers);
15494
15495   /* Enter the newly declared entry in the symbol table.  If we're
15496      processing a declaration in a class-specifier, we wait until
15497      after processing the initializer.  */
15498   if (!member_p)
15499     {
15500       if (parser->in_unbraced_linkage_specification_p)
15501         decl_specifiers->storage_class = sc_extern;
15502       decl = start_decl (declarator, decl_specifiers,
15503                          range_for_decl_p? SD_INITIALIZED : is_initialized,
15504                          attributes, prefix_attributes,
15505                          &pushed_scope);
15506       /* Adjust location of decl if declarator->id_loc is more appropriate:
15507          set, and decl wasn't merged with another decl, in which case its
15508          location would be different from input_location, and more accurate.  */
15509       if (DECL_P (decl)
15510           && declarator->id_loc != UNKNOWN_LOCATION
15511           && DECL_SOURCE_LOCATION (decl) == input_location)
15512         DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
15513     }
15514   else if (scope)
15515     /* Enter the SCOPE.  That way unqualified names appearing in the
15516        initializer will be looked up in SCOPE.  */
15517     pushed_scope = push_scope (scope);
15518
15519   /* Perform deferred access control checks, now that we know in which
15520      SCOPE the declared entity resides.  */
15521   if (!member_p && decl)
15522     {
15523       tree saved_current_function_decl = NULL_TREE;
15524
15525       /* If the entity being declared is a function, pretend that we
15526          are in its scope.  If it is a `friend', it may have access to
15527          things that would not otherwise be accessible.  */
15528       if (TREE_CODE (decl) == FUNCTION_DECL)
15529         {
15530           saved_current_function_decl = current_function_decl;
15531           current_function_decl = decl;
15532         }
15533
15534       /* Perform access checks for template parameters.  */
15535       cp_parser_perform_template_parameter_access_checks (checks);
15536
15537       /* Perform the access control checks for the declarator and the
15538          decl-specifiers.  */
15539       perform_deferred_access_checks ();
15540
15541       /* Restore the saved value.  */
15542       if (TREE_CODE (decl) == FUNCTION_DECL)
15543         current_function_decl = saved_current_function_decl;
15544     }
15545
15546   /* Parse the initializer.  */
15547   initializer = NULL_TREE;
15548   is_direct_init = false;
15549   is_non_constant_init = true;
15550   if (is_initialized)
15551     {
15552       if (function_declarator_p (declarator))
15553         {
15554           cp_token *initializer_start_token = cp_lexer_peek_token (parser->lexer);
15555            if (initialization_kind == CPP_EQ)
15556              initializer = cp_parser_pure_specifier (parser);
15557            else
15558              {
15559                /* If the declaration was erroneous, we don't really
15560                   know what the user intended, so just silently
15561                   consume the initializer.  */
15562                if (decl != error_mark_node)
15563                  error_at (initializer_start_token->location,
15564                            "initializer provided for function");
15565                cp_parser_skip_to_closing_parenthesis (parser,
15566                                                       /*recovering=*/true,
15567                                                       /*or_comma=*/false,
15568                                                       /*consume_paren=*/true);
15569              }
15570         }
15571       else
15572         {
15573           /* We want to record the extra mangling scope for in-class
15574              initializers of class members and initializers of static data
15575              member templates.  The former is a C++0x feature which isn't
15576              implemented yet, and I expect it will involve deferring
15577              parsing of the initializer until end of class as with default
15578              arguments.  So right here we only handle the latter.  */
15579           if (!member_p && processing_template_decl)
15580             start_lambda_scope (decl);
15581           initializer = cp_parser_initializer (parser,
15582                                                &is_direct_init,
15583                                                &is_non_constant_init);
15584           if (!member_p && processing_template_decl)
15585             finish_lambda_scope ();
15586         }
15587     }
15588
15589   /* The old parser allows attributes to appear after a parenthesized
15590      initializer.  Mark Mitchell proposed removing this functionality
15591      on the GCC mailing lists on 2002-08-13.  This parser accepts the
15592      attributes -- but ignores them.  */
15593   if (cp_parser_allow_gnu_extensions_p (parser)
15594       && initialization_kind == CPP_OPEN_PAREN)
15595     if (cp_parser_attributes_opt (parser))
15596       warning (OPT_Wattributes,
15597                "attributes after parenthesized initializer ignored");
15598
15599   /* For an in-class declaration, use `grokfield' to create the
15600      declaration.  */
15601   if (member_p)
15602     {
15603       if (pushed_scope)
15604         {
15605           pop_scope (pushed_scope);
15606           pushed_scope = NULL_TREE;
15607         }
15608       decl = grokfield (declarator, decl_specifiers,
15609                         initializer, !is_non_constant_init,
15610                         /*asmspec=*/NULL_TREE,
15611                         prefix_attributes);
15612       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
15613         cp_parser_save_default_args (parser, decl);
15614     }
15615
15616   /* Finish processing the declaration.  But, skip member
15617      declarations.  */
15618   if (!member_p && decl && decl != error_mark_node && !range_for_decl_p)
15619     {
15620       cp_finish_decl (decl,
15621                       initializer, !is_non_constant_init,
15622                       asm_specification,
15623                       /* If the initializer is in parentheses, then this is
15624                          a direct-initialization, which means that an
15625                          `explicit' constructor is OK.  Otherwise, an
15626                          `explicit' constructor cannot be used.  */
15627                       ((is_direct_init || !is_initialized)
15628                        ? LOOKUP_NORMAL : LOOKUP_IMPLICIT));
15629     }
15630   else if ((cxx_dialect != cxx98) && friend_p
15631            && decl && TREE_CODE (decl) == FUNCTION_DECL)
15632     /* Core issue #226 (C++0x only): A default template-argument
15633        shall not be specified in a friend class template
15634        declaration. */
15635     check_default_tmpl_args (decl, current_template_parms, /*is_primary=*/1, 
15636                              /*is_partial=*/0, /*is_friend_decl=*/1);
15637
15638   if (!friend_p && pushed_scope)
15639     pop_scope (pushed_scope);
15640
15641   return decl;
15642 }
15643
15644 /* Parse a declarator.
15645
15646    declarator:
15647      direct-declarator
15648      ptr-operator declarator
15649
15650    abstract-declarator:
15651      ptr-operator abstract-declarator [opt]
15652      direct-abstract-declarator
15653
15654    GNU Extensions:
15655
15656    declarator:
15657      attributes [opt] direct-declarator
15658      attributes [opt] ptr-operator declarator
15659
15660    abstract-declarator:
15661      attributes [opt] ptr-operator abstract-declarator [opt]
15662      attributes [opt] direct-abstract-declarator
15663
15664    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
15665    detect constructor, destructor or conversion operators. It is set
15666    to -1 if the declarator is a name, and +1 if it is a
15667    function. Otherwise it is set to zero. Usually you just want to
15668    test for >0, but internally the negative value is used.
15669
15670    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
15671    a decl-specifier-seq unless it declares a constructor, destructor,
15672    or conversion.  It might seem that we could check this condition in
15673    semantic analysis, rather than parsing, but that makes it difficult
15674    to handle something like `f()'.  We want to notice that there are
15675    no decl-specifiers, and therefore realize that this is an
15676    expression, not a declaration.)
15677
15678    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
15679    the declarator is a direct-declarator of the form "(...)".
15680
15681    MEMBER_P is true iff this declarator is a member-declarator.  */
15682
15683 static cp_declarator *
15684 cp_parser_declarator (cp_parser* parser,
15685                       cp_parser_declarator_kind dcl_kind,
15686                       int* ctor_dtor_or_conv_p,
15687                       bool* parenthesized_p,
15688                       bool member_p)
15689 {
15690   cp_declarator *declarator;
15691   enum tree_code code;
15692   cp_cv_quals cv_quals;
15693   tree class_type;
15694   tree attributes = NULL_TREE;
15695
15696   /* Assume this is not a constructor, destructor, or type-conversion
15697      operator.  */
15698   if (ctor_dtor_or_conv_p)
15699     *ctor_dtor_or_conv_p = 0;
15700
15701   if (cp_parser_allow_gnu_extensions_p (parser))
15702     attributes = cp_parser_attributes_opt (parser);
15703
15704   /* Check for the ptr-operator production.  */
15705   cp_parser_parse_tentatively (parser);
15706   /* Parse the ptr-operator.  */
15707   code = cp_parser_ptr_operator (parser,
15708                                  &class_type,
15709                                  &cv_quals);
15710   /* If that worked, then we have a ptr-operator.  */
15711   if (cp_parser_parse_definitely (parser))
15712     {
15713       /* If a ptr-operator was found, then this declarator was not
15714          parenthesized.  */
15715       if (parenthesized_p)
15716         *parenthesized_p = true;
15717       /* The dependent declarator is optional if we are parsing an
15718          abstract-declarator.  */
15719       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
15720         cp_parser_parse_tentatively (parser);
15721
15722       /* Parse the dependent declarator.  */
15723       declarator = cp_parser_declarator (parser, dcl_kind,
15724                                          /*ctor_dtor_or_conv_p=*/NULL,
15725                                          /*parenthesized_p=*/NULL,
15726                                          /*member_p=*/false);
15727
15728       /* If we are parsing an abstract-declarator, we must handle the
15729          case where the dependent declarator is absent.  */
15730       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
15731           && !cp_parser_parse_definitely (parser))
15732         declarator = NULL;
15733
15734       declarator = cp_parser_make_indirect_declarator
15735         (code, class_type, cv_quals, declarator);
15736     }
15737   /* Everything else is a direct-declarator.  */
15738   else
15739     {
15740       if (parenthesized_p)
15741         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
15742                                                    CPP_OPEN_PAREN);
15743       declarator = cp_parser_direct_declarator (parser, dcl_kind,
15744                                                 ctor_dtor_or_conv_p,
15745                                                 member_p);
15746     }
15747
15748   if (attributes && declarator && declarator != cp_error_declarator)
15749     declarator->attributes = attributes;
15750
15751   return declarator;
15752 }
15753
15754 /* Parse a direct-declarator or direct-abstract-declarator.
15755
15756    direct-declarator:
15757      declarator-id
15758      direct-declarator ( parameter-declaration-clause )
15759        cv-qualifier-seq [opt]
15760        exception-specification [opt]
15761      direct-declarator [ constant-expression [opt] ]
15762      ( declarator )
15763
15764    direct-abstract-declarator:
15765      direct-abstract-declarator [opt]
15766        ( parameter-declaration-clause )
15767        cv-qualifier-seq [opt]
15768        exception-specification [opt]
15769      direct-abstract-declarator [opt] [ constant-expression [opt] ]
15770      ( abstract-declarator )
15771
15772    Returns a representation of the declarator.  DCL_KIND is
15773    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
15774    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
15775    we are parsing a direct-declarator.  It is
15776    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
15777    of ambiguity we prefer an abstract declarator, as per
15778    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
15779    cp_parser_declarator.  */
15780
15781 static cp_declarator *
15782 cp_parser_direct_declarator (cp_parser* parser,
15783                              cp_parser_declarator_kind dcl_kind,
15784                              int* ctor_dtor_or_conv_p,
15785                              bool member_p)
15786 {
15787   cp_token *token;
15788   cp_declarator *declarator = NULL;
15789   tree scope = NULL_TREE;
15790   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
15791   bool saved_in_declarator_p = parser->in_declarator_p;
15792   bool first = true;
15793   tree pushed_scope = NULL_TREE;
15794
15795   while (true)
15796     {
15797       /* Peek at the next token.  */
15798       token = cp_lexer_peek_token (parser->lexer);
15799       if (token->type == CPP_OPEN_PAREN)
15800         {
15801           /* This is either a parameter-declaration-clause, or a
15802              parenthesized declarator. When we know we are parsing a
15803              named declarator, it must be a parenthesized declarator
15804              if FIRST is true. For instance, `(int)' is a
15805              parameter-declaration-clause, with an omitted
15806              direct-abstract-declarator. But `((*))', is a
15807              parenthesized abstract declarator. Finally, when T is a
15808              template parameter `(T)' is a
15809              parameter-declaration-clause, and not a parenthesized
15810              named declarator.
15811
15812              We first try and parse a parameter-declaration-clause,
15813              and then try a nested declarator (if FIRST is true).
15814
15815              It is not an error for it not to be a
15816              parameter-declaration-clause, even when FIRST is
15817              false. Consider,
15818
15819                int i (int);
15820                int i (3);
15821
15822              The first is the declaration of a function while the
15823              second is the definition of a variable, including its
15824              initializer.
15825
15826              Having seen only the parenthesis, we cannot know which of
15827              these two alternatives should be selected.  Even more
15828              complex are examples like:
15829
15830                int i (int (a));
15831                int i (int (3));
15832
15833              The former is a function-declaration; the latter is a
15834              variable initialization.
15835
15836              Thus again, we try a parameter-declaration-clause, and if
15837              that fails, we back out and return.  */
15838
15839           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
15840             {
15841               tree params;
15842               unsigned saved_num_template_parameter_lists;
15843               bool is_declarator = false;
15844               tree t;
15845
15846               /* In a member-declarator, the only valid interpretation
15847                  of a parenthesis is the start of a
15848                  parameter-declaration-clause.  (It is invalid to
15849                  initialize a static data member with a parenthesized
15850                  initializer; only the "=" form of initialization is
15851                  permitted.)  */
15852               if (!member_p)
15853                 cp_parser_parse_tentatively (parser);
15854
15855               /* Consume the `('.  */
15856               cp_lexer_consume_token (parser->lexer);
15857               if (first)
15858                 {
15859                   /* If this is going to be an abstract declarator, we're
15860                      in a declarator and we can't have default args.  */
15861                   parser->default_arg_ok_p = false;
15862                   parser->in_declarator_p = true;
15863                 }
15864
15865               /* Inside the function parameter list, surrounding
15866                  template-parameter-lists do not apply.  */
15867               saved_num_template_parameter_lists
15868                 = parser->num_template_parameter_lists;
15869               parser->num_template_parameter_lists = 0;
15870
15871               begin_scope (sk_function_parms, NULL_TREE);
15872
15873               /* Parse the parameter-declaration-clause.  */
15874               params = cp_parser_parameter_declaration_clause (parser);
15875
15876               parser->num_template_parameter_lists
15877                 = saved_num_template_parameter_lists;
15878
15879               /* Consume the `)'.  */
15880               cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
15881
15882               /* If all went well, parse the cv-qualifier-seq and the
15883                  exception-specification.  */
15884               if (member_p || cp_parser_parse_definitely (parser))
15885                 {
15886                   cp_cv_quals cv_quals;
15887                   cp_virt_specifiers virt_specifiers;
15888                   tree exception_specification;
15889                   tree late_return;
15890
15891                   is_declarator = true;
15892
15893                   if (ctor_dtor_or_conv_p)
15894                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
15895                   first = false;
15896
15897                   /* Parse the cv-qualifier-seq.  */
15898                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
15899                   /* And the exception-specification.  */
15900                   exception_specification
15901                     = cp_parser_exception_specification_opt (parser);
15902                   /* Parse the virt-specifier-seq.  */
15903                   virt_specifiers = cp_parser_virt_specifier_seq_opt (parser);
15904
15905                   late_return = (cp_parser_late_return_type_opt
15906                                  (parser, member_p ? cv_quals : -1));
15907
15908                   /* Create the function-declarator.  */
15909                   declarator = make_call_declarator (declarator,
15910                                                      params,
15911                                                      cv_quals,
15912                                                      virt_specifiers,
15913                                                      exception_specification,
15914                                                      late_return);
15915                   /* Any subsequent parameter lists are to do with
15916                      return type, so are not those of the declared
15917                      function.  */
15918                   parser->default_arg_ok_p = false;
15919                 }
15920
15921               /* Remove the function parms from scope.  */
15922               for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
15923                 pop_binding (DECL_NAME (t), t);
15924               leave_scope();
15925
15926               if (is_declarator)
15927                 /* Repeat the main loop.  */
15928                 continue;
15929             }
15930
15931           /* If this is the first, we can try a parenthesized
15932              declarator.  */
15933           if (first)
15934             {
15935               bool saved_in_type_id_in_expr_p;
15936
15937               parser->default_arg_ok_p = saved_default_arg_ok_p;
15938               parser->in_declarator_p = saved_in_declarator_p;
15939
15940               /* Consume the `('.  */
15941               cp_lexer_consume_token (parser->lexer);
15942               /* Parse the nested declarator.  */
15943               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
15944               parser->in_type_id_in_expr_p = true;
15945               declarator
15946                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
15947                                         /*parenthesized_p=*/NULL,
15948                                         member_p);
15949               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
15950               first = false;
15951               /* Expect a `)'.  */
15952               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
15953                 declarator = cp_error_declarator;
15954               if (declarator == cp_error_declarator)
15955                 break;
15956
15957               goto handle_declarator;
15958             }
15959           /* Otherwise, we must be done.  */
15960           else
15961             break;
15962         }
15963       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
15964                && token->type == CPP_OPEN_SQUARE)
15965         {
15966           /* Parse an array-declarator.  */
15967           tree bounds;
15968
15969           if (ctor_dtor_or_conv_p)
15970             *ctor_dtor_or_conv_p = 0;
15971
15972           first = false;
15973           parser->default_arg_ok_p = false;
15974           parser->in_declarator_p = true;
15975           /* Consume the `['.  */
15976           cp_lexer_consume_token (parser->lexer);
15977           /* Peek at the next token.  */
15978           token = cp_lexer_peek_token (parser->lexer);
15979           /* If the next token is `]', then there is no
15980              constant-expression.  */
15981           if (token->type != CPP_CLOSE_SQUARE)
15982             {
15983               bool non_constant_p;
15984
15985               bounds
15986                 = cp_parser_constant_expression (parser,
15987                                                  /*allow_non_constant=*/true,
15988                                                  &non_constant_p);
15989               if (!non_constant_p)
15990                 /* OK */;
15991               /* Normally, the array bound must be an integral constant
15992                  expression.  However, as an extension, we allow VLAs
15993                  in function scopes as long as they aren't part of a
15994                  parameter declaration.  */
15995               else if (!parser->in_function_body
15996                        || current_binding_level->kind == sk_function_parms)
15997                 {
15998                   cp_parser_error (parser,
15999                                    "array bound is not an integer constant");
16000                   bounds = error_mark_node;
16001                 }
16002               else if (processing_template_decl && !error_operand_p (bounds))
16003                 {
16004                   /* Remember this wasn't a constant-expression.  */
16005                   bounds = build_nop (TREE_TYPE (bounds), bounds);
16006                   TREE_SIDE_EFFECTS (bounds) = 1;
16007                 }
16008             }
16009           else
16010             bounds = NULL_TREE;
16011           /* Look for the closing `]'.  */
16012           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE))
16013             {
16014               declarator = cp_error_declarator;
16015               break;
16016             }
16017
16018           declarator = make_array_declarator (declarator, bounds);
16019         }
16020       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
16021         {
16022           {
16023             tree qualifying_scope;
16024             tree unqualified_name;
16025             special_function_kind sfk;
16026             bool abstract_ok;
16027             bool pack_expansion_p = false;
16028             cp_token *declarator_id_start_token;
16029
16030             /* Parse a declarator-id */
16031             abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
16032             if (abstract_ok)
16033               {
16034                 cp_parser_parse_tentatively (parser);
16035
16036                 /* If we see an ellipsis, we should be looking at a
16037                    parameter pack. */
16038                 if (token->type == CPP_ELLIPSIS)
16039                   {
16040                     /* Consume the `...' */
16041                     cp_lexer_consume_token (parser->lexer);
16042
16043                     pack_expansion_p = true;
16044                   }
16045               }
16046
16047             declarator_id_start_token = cp_lexer_peek_token (parser->lexer);
16048             unqualified_name
16049               = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
16050             qualifying_scope = parser->scope;
16051             if (abstract_ok)
16052               {
16053                 bool okay = false;
16054
16055                 if (!unqualified_name && pack_expansion_p)
16056                   {
16057                     /* Check whether an error occurred. */
16058                     okay = !cp_parser_error_occurred (parser);
16059
16060                     /* We already consumed the ellipsis to mark a
16061                        parameter pack, but we have no way to report it,
16062                        so abort the tentative parse. We will be exiting
16063                        immediately anyway. */
16064                     cp_parser_abort_tentative_parse (parser);
16065                   }
16066                 else
16067                   okay = cp_parser_parse_definitely (parser);
16068
16069                 if (!okay)
16070                   unqualified_name = error_mark_node;
16071                 else if (unqualified_name
16072                          && (qualifying_scope
16073                              || (TREE_CODE (unqualified_name)
16074                                  != IDENTIFIER_NODE)))
16075                   {
16076                     cp_parser_error (parser, "expected unqualified-id");
16077                     unqualified_name = error_mark_node;
16078                   }
16079               }
16080
16081             if (!unqualified_name)
16082               return NULL;
16083             if (unqualified_name == error_mark_node)
16084               {
16085                 declarator = cp_error_declarator;
16086                 pack_expansion_p = false;
16087                 declarator->parameter_pack_p = false;
16088                 break;
16089               }
16090
16091             if (qualifying_scope && at_namespace_scope_p ()
16092                 && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
16093               {
16094                 /* In the declaration of a member of a template class
16095                    outside of the class itself, the SCOPE will sometimes
16096                    be a TYPENAME_TYPE.  For example, given:
16097
16098                    template <typename T>
16099                    int S<T>::R::i = 3;
16100
16101                    the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
16102                    this context, we must resolve S<T>::R to an ordinary
16103                    type, rather than a typename type.
16104
16105                    The reason we normally avoid resolving TYPENAME_TYPEs
16106                    is that a specialization of `S' might render
16107                    `S<T>::R' not a type.  However, if `S' is
16108                    specialized, then this `i' will not be used, so there
16109                    is no harm in resolving the types here.  */
16110                 tree type;
16111
16112                 /* Resolve the TYPENAME_TYPE.  */
16113                 type = resolve_typename_type (qualifying_scope,
16114                                               /*only_current_p=*/false);
16115                 /* If that failed, the declarator is invalid.  */
16116                 if (TREE_CODE (type) == TYPENAME_TYPE)
16117                   {
16118                     if (typedef_variant_p (type))
16119                       error_at (declarator_id_start_token->location,
16120                                 "cannot define member of dependent typedef "
16121                                 "%qT", type);
16122                     else
16123                       error_at (declarator_id_start_token->location,
16124                                 "%<%T::%E%> is not a type",
16125                                 TYPE_CONTEXT (qualifying_scope),
16126                                 TYPE_IDENTIFIER (qualifying_scope));
16127                   }
16128                 qualifying_scope = type;
16129               }
16130
16131             sfk = sfk_none;
16132
16133             if (unqualified_name)
16134               {
16135                 tree class_type;
16136
16137                 if (qualifying_scope
16138                     && CLASS_TYPE_P (qualifying_scope))
16139                   class_type = qualifying_scope;
16140                 else
16141                   class_type = current_class_type;
16142
16143                 if (TREE_CODE (unqualified_name) == TYPE_DECL)
16144                   {
16145                     tree name_type = TREE_TYPE (unqualified_name);
16146                     if (class_type && same_type_p (name_type, class_type))
16147                       {
16148                         if (qualifying_scope
16149                             && CLASSTYPE_USE_TEMPLATE (name_type))
16150                           {
16151                             error_at (declarator_id_start_token->location,
16152                                       "invalid use of constructor as a template");
16153                             inform (declarator_id_start_token->location,
16154                                     "use %<%T::%D%> instead of %<%T::%D%> to "
16155                                     "name the constructor in a qualified name",
16156                                     class_type,
16157                                     DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
16158                                     class_type, name_type);
16159                             declarator = cp_error_declarator;
16160                             break;
16161                           }
16162                         else
16163                           unqualified_name = constructor_name (class_type);
16164                       }
16165                     else
16166                       {
16167                         /* We do not attempt to print the declarator
16168                            here because we do not have enough
16169                            information about its original syntactic
16170                            form.  */
16171                         cp_parser_error (parser, "invalid declarator");
16172                         declarator = cp_error_declarator;
16173                         break;
16174                       }
16175                   }
16176
16177                 if (class_type)
16178                   {
16179                     if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
16180                       sfk = sfk_destructor;
16181                     else if (IDENTIFIER_TYPENAME_P (unqualified_name))
16182                       sfk = sfk_conversion;
16183                     else if (/* There's no way to declare a constructor
16184                                 for an anonymous type, even if the type
16185                                 got a name for linkage purposes.  */
16186                              !TYPE_WAS_ANONYMOUS (class_type)
16187                              && constructor_name_p (unqualified_name,
16188                                                     class_type))
16189                       {
16190                         unqualified_name = constructor_name (class_type);
16191                         sfk = sfk_constructor;
16192                       }
16193                     else if (is_overloaded_fn (unqualified_name)
16194                              && DECL_CONSTRUCTOR_P (get_first_fn
16195                                                     (unqualified_name)))
16196                       sfk = sfk_constructor;
16197
16198                     if (ctor_dtor_or_conv_p && sfk != sfk_none)
16199                       *ctor_dtor_or_conv_p = -1;
16200                   }
16201               }
16202             declarator = make_id_declarator (qualifying_scope,
16203                                              unqualified_name,
16204                                              sfk);
16205             declarator->id_loc = token->location;
16206             declarator->parameter_pack_p = pack_expansion_p;
16207
16208             if (pack_expansion_p)
16209               maybe_warn_variadic_templates ();
16210           }
16211
16212         handle_declarator:;
16213           scope = get_scope_of_declarator (declarator);
16214           if (scope)
16215             /* Any names that appear after the declarator-id for a
16216                member are looked up in the containing scope.  */
16217             pushed_scope = push_scope (scope);
16218           parser->in_declarator_p = true;
16219           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
16220               || (declarator && declarator->kind == cdk_id))
16221             /* Default args are only allowed on function
16222                declarations.  */
16223             parser->default_arg_ok_p = saved_default_arg_ok_p;
16224           else
16225             parser->default_arg_ok_p = false;
16226
16227           first = false;
16228         }
16229       /* We're done.  */
16230       else
16231         break;
16232     }
16233
16234   /* For an abstract declarator, we might wind up with nothing at this
16235      point.  That's an error; the declarator is not optional.  */
16236   if (!declarator)
16237     cp_parser_error (parser, "expected declarator");
16238
16239   /* If we entered a scope, we must exit it now.  */
16240   if (pushed_scope)
16241     pop_scope (pushed_scope);
16242
16243   parser->default_arg_ok_p = saved_default_arg_ok_p;
16244   parser->in_declarator_p = saved_in_declarator_p;
16245
16246   return declarator;
16247 }
16248
16249 /* Parse a ptr-operator.
16250
16251    ptr-operator:
16252      * cv-qualifier-seq [opt]
16253      &
16254      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
16255
16256    GNU Extension:
16257
16258    ptr-operator:
16259      & cv-qualifier-seq [opt]
16260
16261    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
16262    Returns ADDR_EXPR if a reference was used, or NON_LVALUE_EXPR for
16263    an rvalue reference. In the case of a pointer-to-member, *TYPE is
16264    filled in with the TYPE containing the member.  *CV_QUALS is
16265    filled in with the cv-qualifier-seq, or TYPE_UNQUALIFIED, if there
16266    are no cv-qualifiers.  Returns ERROR_MARK if an error occurred.
16267    Note that the tree codes returned by this function have nothing
16268    to do with the types of trees that will be eventually be created
16269    to represent the pointer or reference type being parsed. They are
16270    just constants with suggestive names. */
16271 static enum tree_code
16272 cp_parser_ptr_operator (cp_parser* parser,
16273                         tree* type,
16274                         cp_cv_quals *cv_quals)
16275 {
16276   enum tree_code code = ERROR_MARK;
16277   cp_token *token;
16278
16279   /* Assume that it's not a pointer-to-member.  */
16280   *type = NULL_TREE;
16281   /* And that there are no cv-qualifiers.  */
16282   *cv_quals = TYPE_UNQUALIFIED;
16283
16284   /* Peek at the next token.  */
16285   token = cp_lexer_peek_token (parser->lexer);
16286
16287   /* If it's a `*', `&' or `&&' we have a pointer or reference.  */
16288   if (token->type == CPP_MULT)
16289     code = INDIRECT_REF;
16290   else if (token->type == CPP_AND)
16291     code = ADDR_EXPR;
16292   else if ((cxx_dialect != cxx98) &&
16293            token->type == CPP_AND_AND) /* C++0x only */
16294     code = NON_LVALUE_EXPR;
16295
16296   if (code != ERROR_MARK)
16297     {
16298       /* Consume the `*', `&' or `&&'.  */
16299       cp_lexer_consume_token (parser->lexer);
16300
16301       /* A `*' can be followed by a cv-qualifier-seq, and so can a
16302          `&', if we are allowing GNU extensions.  (The only qualifier
16303          that can legally appear after `&' is `restrict', but that is
16304          enforced during semantic analysis.  */
16305       if (code == INDIRECT_REF
16306           || cp_parser_allow_gnu_extensions_p (parser))
16307         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
16308     }
16309   else
16310     {
16311       /* Try the pointer-to-member case.  */
16312       cp_parser_parse_tentatively (parser);
16313       /* Look for the optional `::' operator.  */
16314       cp_parser_global_scope_opt (parser,
16315                                   /*current_scope_valid_p=*/false);
16316       /* Look for the nested-name specifier.  */
16317       token = cp_lexer_peek_token (parser->lexer);
16318       cp_parser_nested_name_specifier (parser,
16319                                        /*typename_keyword_p=*/false,
16320                                        /*check_dependency_p=*/true,
16321                                        /*type_p=*/false,
16322                                        /*is_declaration=*/false);
16323       /* If we found it, and the next token is a `*', then we are
16324          indeed looking at a pointer-to-member operator.  */
16325       if (!cp_parser_error_occurred (parser)
16326           && cp_parser_require (parser, CPP_MULT, RT_MULT))
16327         {
16328           /* Indicate that the `*' operator was used.  */
16329           code = INDIRECT_REF;
16330
16331           if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
16332             error_at (token->location, "%qD is a namespace", parser->scope);
16333           else
16334             {
16335               /* The type of which the member is a member is given by the
16336                  current SCOPE.  */
16337               *type = parser->scope;
16338               /* The next name will not be qualified.  */
16339               parser->scope = NULL_TREE;
16340               parser->qualifying_scope = NULL_TREE;
16341               parser->object_scope = NULL_TREE;
16342               /* Look for the optional cv-qualifier-seq.  */
16343               *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
16344             }
16345         }
16346       /* If that didn't work we don't have a ptr-operator.  */
16347       if (!cp_parser_parse_definitely (parser))
16348         cp_parser_error (parser, "expected ptr-operator");
16349     }
16350
16351   return code;
16352 }
16353
16354 /* Parse an (optional) cv-qualifier-seq.
16355
16356    cv-qualifier-seq:
16357      cv-qualifier cv-qualifier-seq [opt]
16358
16359    cv-qualifier:
16360      const
16361      volatile
16362
16363    GNU Extension:
16364
16365    cv-qualifier:
16366      __restrict__
16367
16368    Returns a bitmask representing the cv-qualifiers.  */
16369
16370 static cp_cv_quals
16371 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
16372 {
16373   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
16374
16375   while (true)
16376     {
16377       cp_token *token;
16378       cp_cv_quals cv_qualifier;
16379
16380       /* Peek at the next token.  */
16381       token = cp_lexer_peek_token (parser->lexer);
16382       /* See if it's a cv-qualifier.  */
16383       switch (token->keyword)
16384         {
16385         case RID_CONST:
16386           cv_qualifier = TYPE_QUAL_CONST;
16387           break;
16388
16389         case RID_VOLATILE:
16390           cv_qualifier = TYPE_QUAL_VOLATILE;
16391           break;
16392
16393         case RID_RESTRICT:
16394           cv_qualifier = TYPE_QUAL_RESTRICT;
16395           break;
16396
16397         default:
16398           cv_qualifier = TYPE_UNQUALIFIED;
16399           break;
16400         }
16401
16402       if (!cv_qualifier)
16403         break;
16404
16405       if (cv_quals & cv_qualifier)
16406         {
16407           error_at (token->location, "duplicate cv-qualifier");
16408           cp_lexer_purge_token (parser->lexer);
16409         }
16410       else
16411         {
16412           cp_lexer_consume_token (parser->lexer);
16413           cv_quals |= cv_qualifier;
16414         }
16415     }
16416
16417   return cv_quals;
16418 }
16419
16420 /* Parse an (optional) virt-specifier-seq.
16421
16422    virt-specifier-seq:
16423      virt-specifier virt-specifier-seq [opt]
16424
16425    virt-specifier:
16426      override
16427      final
16428
16429    Returns a bitmask representing the virt-specifiers.  */
16430
16431 static cp_virt_specifiers
16432 cp_parser_virt_specifier_seq_opt (cp_parser* parser)
16433 {
16434   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
16435
16436   while (true)
16437     {
16438       cp_token *token;
16439       cp_virt_specifiers virt_specifier;
16440
16441       /* Peek at the next token.  */
16442       token = cp_lexer_peek_token (parser->lexer);
16443       /* See if it's a virt-specifier-qualifier.  */
16444       if (token->type != CPP_NAME)
16445         break;
16446       if (!strcmp (IDENTIFIER_POINTER(token->u.value), "override"))
16447         {
16448           maybe_warn_cpp0x (CPP0X_OVERRIDE_CONTROLS);
16449           virt_specifier = VIRT_SPEC_OVERRIDE;
16450         }
16451       else if (!strcmp (IDENTIFIER_POINTER(token->u.value), "final"))
16452         {
16453           maybe_warn_cpp0x (CPP0X_OVERRIDE_CONTROLS);
16454           virt_specifier = VIRT_SPEC_FINAL;
16455         }
16456       else if (!strcmp (IDENTIFIER_POINTER(token->u.value), "__final"))
16457         {
16458           virt_specifier = VIRT_SPEC_FINAL;
16459         }
16460       else
16461         break;
16462
16463       if (virt_specifiers & virt_specifier)
16464         {
16465           error_at (token->location, "duplicate virt-specifier");
16466           cp_lexer_purge_token (parser->lexer);
16467         }
16468       else
16469         {
16470           cp_lexer_consume_token (parser->lexer);
16471           virt_specifiers |= virt_specifier;
16472         }
16473     }
16474   return virt_specifiers;
16475 }
16476
16477 /* Used by handling of trailing-return-types and NSDMI, in which 'this'
16478    is in scope even though it isn't real.  */
16479
16480 static void
16481 inject_this_parameter (tree ctype, cp_cv_quals quals)
16482 {
16483   tree this_parm;
16484
16485   if (current_class_ptr)
16486     {
16487       /* We don't clear this between NSDMIs.  Is it already what we want?  */
16488       tree type = TREE_TYPE (TREE_TYPE (current_class_ptr));
16489       if (same_type_ignoring_top_level_qualifiers_p (ctype, type)
16490           && cp_type_quals (type) == quals)
16491         return;
16492     }
16493
16494   this_parm = build_this_parm (ctype, quals);
16495   /* Clear this first to avoid shortcut in cp_build_indirect_ref.  */
16496   current_class_ptr = NULL_TREE;
16497   current_class_ref
16498     = cp_build_indirect_ref (this_parm, RO_NULL, tf_warning_or_error);
16499   current_class_ptr = this_parm;
16500 }
16501
16502 /* Parse a late-specified return type, if any.  This is not a separate
16503    non-terminal, but part of a function declarator, which looks like
16504
16505    -> trailing-type-specifier-seq abstract-declarator(opt)
16506
16507    Returns the type indicated by the type-id.
16508
16509    QUALS is either a bitmask of cv_qualifiers or -1 for a non-member
16510    function.  */
16511
16512 static tree
16513 cp_parser_late_return_type_opt (cp_parser* parser, cp_cv_quals quals)
16514 {
16515   cp_token *token;
16516   tree type;
16517
16518   /* Peek at the next token.  */
16519   token = cp_lexer_peek_token (parser->lexer);
16520   /* A late-specified return type is indicated by an initial '->'. */
16521   if (token->type != CPP_DEREF)
16522     return NULL_TREE;
16523
16524   /* Consume the ->.  */
16525   cp_lexer_consume_token (parser->lexer);
16526
16527   if (quals >= 0)
16528     {
16529       /* DR 1207: 'this' is in scope in the trailing return type.  */
16530       gcc_assert (current_class_ptr == NULL_TREE);
16531       inject_this_parameter (current_class_type, quals);
16532     }
16533
16534   type = cp_parser_trailing_type_id (parser);
16535
16536   if (quals >= 0)
16537     current_class_ptr = current_class_ref = NULL_TREE;
16538
16539   return type;
16540 }
16541
16542 /* Parse a declarator-id.
16543
16544    declarator-id:
16545      id-expression
16546      :: [opt] nested-name-specifier [opt] type-name
16547
16548    In the `id-expression' case, the value returned is as for
16549    cp_parser_id_expression if the id-expression was an unqualified-id.
16550    If the id-expression was a qualified-id, then a SCOPE_REF is
16551    returned.  The first operand is the scope (either a NAMESPACE_DECL
16552    or TREE_TYPE), but the second is still just a representation of an
16553    unqualified-id.  */
16554
16555 static tree
16556 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
16557 {
16558   tree id;
16559   /* The expression must be an id-expression.  Assume that qualified
16560      names are the names of types so that:
16561
16562        template <class T>
16563        int S<T>::R::i = 3;
16564
16565      will work; we must treat `S<T>::R' as the name of a type.
16566      Similarly, assume that qualified names are templates, where
16567      required, so that:
16568
16569        template <class T>
16570        int S<T>::R<T>::i = 3;
16571
16572      will work, too.  */
16573   id = cp_parser_id_expression (parser,
16574                                 /*template_keyword_p=*/false,
16575                                 /*check_dependency_p=*/false,
16576                                 /*template_p=*/NULL,
16577                                 /*declarator_p=*/true,
16578                                 optional_p);
16579   if (id && BASELINK_P (id))
16580     id = BASELINK_FUNCTIONS (id);
16581   return id;
16582 }
16583
16584 /* Parse a type-id.
16585
16586    type-id:
16587      type-specifier-seq abstract-declarator [opt]
16588
16589    Returns the TYPE specified.  */
16590
16591 static tree
16592 cp_parser_type_id_1 (cp_parser* parser, bool is_template_arg,
16593                      bool is_trailing_return)
16594 {
16595   cp_decl_specifier_seq type_specifier_seq;
16596   cp_declarator *abstract_declarator;
16597
16598   /* Parse the type-specifier-seq.  */
16599   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
16600                                 is_trailing_return,
16601                                 &type_specifier_seq);
16602   if (type_specifier_seq.type == error_mark_node)
16603     return error_mark_node;
16604
16605   /* There might or might not be an abstract declarator.  */
16606   cp_parser_parse_tentatively (parser);
16607   /* Look for the declarator.  */
16608   abstract_declarator
16609     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
16610                             /*parenthesized_p=*/NULL,
16611                             /*member_p=*/false);
16612   /* Check to see if there really was a declarator.  */
16613   if (!cp_parser_parse_definitely (parser))
16614     abstract_declarator = NULL;
16615
16616   if (type_specifier_seq.type
16617       && type_uses_auto (type_specifier_seq.type))
16618     {
16619       /* A type-id with type 'auto' is only ok if the abstract declarator
16620          is a function declarator with a late-specified return type.  */
16621       if (abstract_declarator
16622           && abstract_declarator->kind == cdk_function
16623           && abstract_declarator->u.function.late_return_type)
16624         /* OK */;
16625       else
16626         {
16627           error ("invalid use of %<auto%>");
16628           return error_mark_node;
16629         }
16630     }
16631   
16632   return groktypename (&type_specifier_seq, abstract_declarator,
16633                        is_template_arg);
16634 }
16635
16636 static tree cp_parser_type_id (cp_parser *parser)
16637 {
16638   return cp_parser_type_id_1 (parser, false, false);
16639 }
16640
16641 static tree cp_parser_template_type_arg (cp_parser *parser)
16642 {
16643   tree r;
16644   const char *saved_message = parser->type_definition_forbidden_message;
16645   parser->type_definition_forbidden_message
16646     = G_("types may not be defined in template arguments");
16647   r = cp_parser_type_id_1 (parser, true, false);
16648   parser->type_definition_forbidden_message = saved_message;
16649   return r;
16650 }
16651
16652 static tree cp_parser_trailing_type_id (cp_parser *parser)
16653 {
16654   return cp_parser_type_id_1 (parser, false, true);
16655 }
16656
16657 /* Parse a type-specifier-seq.
16658
16659    type-specifier-seq:
16660      type-specifier type-specifier-seq [opt]
16661
16662    GNU extension:
16663
16664    type-specifier-seq:
16665      attributes type-specifier-seq [opt]
16666
16667    If IS_DECLARATION is true, we are at the start of a "condition" or
16668    exception-declaration, so we might be followed by a declarator-id.
16669
16670    If IS_TRAILING_RETURN is true, we are in a trailing-return-type,
16671    i.e. we've just seen "->".
16672
16673    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
16674
16675 static void
16676 cp_parser_type_specifier_seq (cp_parser* parser,
16677                               bool is_declaration,
16678                               bool is_trailing_return,
16679                               cp_decl_specifier_seq *type_specifier_seq)
16680 {
16681   bool seen_type_specifier = false;
16682   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
16683   cp_token *start_token = NULL;
16684
16685   /* Clear the TYPE_SPECIFIER_SEQ.  */
16686   clear_decl_specs (type_specifier_seq);
16687
16688   /* In the context of a trailing return type, enum E { } is an
16689      elaborated-type-specifier followed by a function-body, not an
16690      enum-specifier.  */
16691   if (is_trailing_return)
16692     flags |= CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS;
16693
16694   /* Parse the type-specifiers and attributes.  */
16695   while (true)
16696     {
16697       tree type_specifier;
16698       bool is_cv_qualifier;
16699
16700       /* Check for attributes first.  */
16701       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
16702         {
16703           type_specifier_seq->attributes =
16704             chainon (type_specifier_seq->attributes,
16705                      cp_parser_attributes_opt (parser));
16706           continue;
16707         }
16708
16709       /* record the token of the beginning of the type specifier seq,
16710          for error reporting purposes*/
16711      if (!start_token)
16712        start_token = cp_lexer_peek_token (parser->lexer);
16713
16714       /* Look for the type-specifier.  */
16715       type_specifier = cp_parser_type_specifier (parser,
16716                                                  flags,
16717                                                  type_specifier_seq,
16718                                                  /*is_declaration=*/false,
16719                                                  NULL,
16720                                                  &is_cv_qualifier);
16721       if (!type_specifier)
16722         {
16723           /* If the first type-specifier could not be found, this is not a
16724              type-specifier-seq at all.  */
16725           if (!seen_type_specifier)
16726             {
16727               cp_parser_error (parser, "expected type-specifier");
16728               type_specifier_seq->type = error_mark_node;
16729               return;
16730             }
16731           /* If subsequent type-specifiers could not be found, the
16732              type-specifier-seq is complete.  */
16733           break;
16734         }
16735
16736       seen_type_specifier = true;
16737       /* The standard says that a condition can be:
16738
16739             type-specifier-seq declarator = assignment-expression
16740
16741          However, given:
16742
16743            struct S {};
16744            if (int S = ...)
16745
16746          we should treat the "S" as a declarator, not as a
16747          type-specifier.  The standard doesn't say that explicitly for
16748          type-specifier-seq, but it does say that for
16749          decl-specifier-seq in an ordinary declaration.  Perhaps it
16750          would be clearer just to allow a decl-specifier-seq here, and
16751          then add a semantic restriction that if any decl-specifiers
16752          that are not type-specifiers appear, the program is invalid.  */
16753       if (is_declaration && !is_cv_qualifier)
16754         flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
16755     }
16756
16757   cp_parser_check_decl_spec (type_specifier_seq, start_token->location);
16758 }
16759
16760 /* Parse a parameter-declaration-clause.
16761
16762    parameter-declaration-clause:
16763      parameter-declaration-list [opt] ... [opt]
16764      parameter-declaration-list , ...
16765
16766    Returns a representation for the parameter declarations.  A return
16767    value of NULL indicates a parameter-declaration-clause consisting
16768    only of an ellipsis.  */
16769
16770 static tree
16771 cp_parser_parameter_declaration_clause (cp_parser* parser)
16772 {
16773   tree parameters;
16774   cp_token *token;
16775   bool ellipsis_p;
16776   bool is_error;
16777
16778   /* Peek at the next token.  */
16779   token = cp_lexer_peek_token (parser->lexer);
16780   /* Check for trivial parameter-declaration-clauses.  */
16781   if (token->type == CPP_ELLIPSIS)
16782     {
16783       /* Consume the `...' token.  */
16784       cp_lexer_consume_token (parser->lexer);
16785       return NULL_TREE;
16786     }
16787   else if (token->type == CPP_CLOSE_PAREN)
16788     /* There are no parameters.  */
16789     {
16790 #ifndef NO_IMPLICIT_EXTERN_C
16791       if (in_system_header && current_class_type == NULL
16792           && current_lang_name == lang_name_c)
16793         return NULL_TREE;
16794       else
16795 #endif
16796         return void_list_node;
16797     }
16798   /* Check for `(void)', too, which is a special case.  */
16799   else if (token->keyword == RID_VOID
16800            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
16801                == CPP_CLOSE_PAREN))
16802     {
16803       /* Consume the `void' token.  */
16804       cp_lexer_consume_token (parser->lexer);
16805       /* There are no parameters.  */
16806       return void_list_node;
16807     }
16808
16809   /* Parse the parameter-declaration-list.  */
16810   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
16811   /* If a parse error occurred while parsing the
16812      parameter-declaration-list, then the entire
16813      parameter-declaration-clause is erroneous.  */
16814   if (is_error)
16815     return NULL;
16816
16817   /* Peek at the next token.  */
16818   token = cp_lexer_peek_token (parser->lexer);
16819   /* If it's a `,', the clause should terminate with an ellipsis.  */
16820   if (token->type == CPP_COMMA)
16821     {
16822       /* Consume the `,'.  */
16823       cp_lexer_consume_token (parser->lexer);
16824       /* Expect an ellipsis.  */
16825       ellipsis_p
16826         = (cp_parser_require (parser, CPP_ELLIPSIS, RT_ELLIPSIS) != NULL);
16827     }
16828   /* It might also be `...' if the optional trailing `,' was
16829      omitted.  */
16830   else if (token->type == CPP_ELLIPSIS)
16831     {
16832       /* Consume the `...' token.  */
16833       cp_lexer_consume_token (parser->lexer);
16834       /* And remember that we saw it.  */
16835       ellipsis_p = true;
16836     }
16837   else
16838     ellipsis_p = false;
16839
16840   /* Finish the parameter list.  */
16841   if (!ellipsis_p)
16842     parameters = chainon (parameters, void_list_node);
16843
16844   return parameters;
16845 }
16846
16847 /* Parse a parameter-declaration-list.
16848
16849    parameter-declaration-list:
16850      parameter-declaration
16851      parameter-declaration-list , parameter-declaration
16852
16853    Returns a representation of the parameter-declaration-list, as for
16854    cp_parser_parameter_declaration_clause.  However, the
16855    `void_list_node' is never appended to the list.  Upon return,
16856    *IS_ERROR will be true iff an error occurred.  */
16857
16858 static tree
16859 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
16860 {
16861   tree parameters = NULL_TREE;
16862   tree *tail = &parameters; 
16863   bool saved_in_unbraced_linkage_specification_p;
16864   int index = 0;
16865
16866   /* Assume all will go well.  */
16867   *is_error = false;
16868   /* The special considerations that apply to a function within an
16869      unbraced linkage specifications do not apply to the parameters
16870      to the function.  */
16871   saved_in_unbraced_linkage_specification_p 
16872     = parser->in_unbraced_linkage_specification_p;
16873   parser->in_unbraced_linkage_specification_p = false;
16874
16875   /* Look for more parameters.  */
16876   while (true)
16877     {
16878       cp_parameter_declarator *parameter;
16879       tree decl = error_mark_node;
16880       bool parenthesized_p = false;
16881       /* Parse the parameter.  */
16882       parameter
16883         = cp_parser_parameter_declaration (parser,
16884                                            /*template_parm_p=*/false,
16885                                            &parenthesized_p);
16886
16887       /* We don't know yet if the enclosing context is deprecated, so wait
16888          and warn in grokparms if appropriate.  */
16889       deprecated_state = DEPRECATED_SUPPRESS;
16890
16891       if (parameter)
16892         decl = grokdeclarator (parameter->declarator,
16893                                &parameter->decl_specifiers,
16894                                PARM,
16895                                parameter->default_argument != NULL_TREE,
16896                                &parameter->decl_specifiers.attributes);
16897
16898       deprecated_state = DEPRECATED_NORMAL;
16899
16900       /* If a parse error occurred parsing the parameter declaration,
16901          then the entire parameter-declaration-list is erroneous.  */
16902       if (decl == error_mark_node)
16903         {
16904           *is_error = true;
16905           parameters = error_mark_node;
16906           break;
16907         }
16908
16909       if (parameter->decl_specifiers.attributes)
16910         cplus_decl_attributes (&decl,
16911                                parameter->decl_specifiers.attributes,
16912                                0);
16913       if (DECL_NAME (decl))
16914         decl = pushdecl (decl);
16915
16916       if (decl != error_mark_node)
16917         {
16918           retrofit_lang_decl (decl);
16919           DECL_PARM_INDEX (decl) = ++index;
16920           DECL_PARM_LEVEL (decl) = function_parm_depth ();
16921         }
16922
16923       /* Add the new parameter to the list.  */
16924       *tail = build_tree_list (parameter->default_argument, decl);
16925       tail = &TREE_CHAIN (*tail);
16926
16927       /* Peek at the next token.  */
16928       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
16929           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
16930           /* These are for Objective-C++ */
16931           || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
16932           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
16933         /* The parameter-declaration-list is complete.  */
16934         break;
16935       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
16936         {
16937           cp_token *token;
16938
16939           /* Peek at the next token.  */
16940           token = cp_lexer_peek_nth_token (parser->lexer, 2);
16941           /* If it's an ellipsis, then the list is complete.  */
16942           if (token->type == CPP_ELLIPSIS)
16943             break;
16944           /* Otherwise, there must be more parameters.  Consume the
16945              `,'.  */
16946           cp_lexer_consume_token (parser->lexer);
16947           /* When parsing something like:
16948
16949                 int i(float f, double d)
16950
16951              we can tell after seeing the declaration for "f" that we
16952              are not looking at an initialization of a variable "i",
16953              but rather at the declaration of a function "i".
16954
16955              Due to the fact that the parsing of template arguments
16956              (as specified to a template-id) requires backtracking we
16957              cannot use this technique when inside a template argument
16958              list.  */
16959           if (!parser->in_template_argument_list_p
16960               && !parser->in_type_id_in_expr_p
16961               && cp_parser_uncommitted_to_tentative_parse_p (parser)
16962               /* However, a parameter-declaration of the form
16963                  "foat(f)" (which is a valid declaration of a
16964                  parameter "f") can also be interpreted as an
16965                  expression (the conversion of "f" to "float").  */
16966               && !parenthesized_p)
16967             cp_parser_commit_to_tentative_parse (parser);
16968         }
16969       else
16970         {
16971           cp_parser_error (parser, "expected %<,%> or %<...%>");
16972           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
16973             cp_parser_skip_to_closing_parenthesis (parser,
16974                                                    /*recovering=*/true,
16975                                                    /*or_comma=*/false,
16976                                                    /*consume_paren=*/false);
16977           break;
16978         }
16979     }
16980
16981   parser->in_unbraced_linkage_specification_p
16982     = saved_in_unbraced_linkage_specification_p;
16983
16984   return parameters;
16985 }
16986
16987 /* Parse a parameter declaration.
16988
16989    parameter-declaration:
16990      decl-specifier-seq ... [opt] declarator
16991      decl-specifier-seq declarator = assignment-expression
16992      decl-specifier-seq ... [opt] abstract-declarator [opt]
16993      decl-specifier-seq abstract-declarator [opt] = assignment-expression
16994
16995    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
16996    declares a template parameter.  (In that case, a non-nested `>'
16997    token encountered during the parsing of the assignment-expression
16998    is not interpreted as a greater-than operator.)
16999
17000    Returns a representation of the parameter, or NULL if an error
17001    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
17002    true iff the declarator is of the form "(p)".  */
17003
17004 static cp_parameter_declarator *
17005 cp_parser_parameter_declaration (cp_parser *parser,
17006                                  bool template_parm_p,
17007                                  bool *parenthesized_p)
17008 {
17009   int declares_class_or_enum;
17010   cp_decl_specifier_seq decl_specifiers;
17011   cp_declarator *declarator;
17012   tree default_argument;
17013   cp_token *token = NULL, *declarator_token_start = NULL;
17014   const char *saved_message;
17015
17016   /* In a template parameter, `>' is not an operator.
17017
17018      [temp.param]
17019
17020      When parsing a default template-argument for a non-type
17021      template-parameter, the first non-nested `>' is taken as the end
17022      of the template parameter-list rather than a greater-than
17023      operator.  */
17024
17025   /* Type definitions may not appear in parameter types.  */
17026   saved_message = parser->type_definition_forbidden_message;
17027   parser->type_definition_forbidden_message
17028     = G_("types may not be defined in parameter types");
17029
17030   /* Parse the declaration-specifiers.  */
17031   cp_parser_decl_specifier_seq (parser,
17032                                 CP_PARSER_FLAGS_NONE,
17033                                 &decl_specifiers,
17034                                 &declares_class_or_enum);
17035
17036   /* Complain about missing 'typename' or other invalid type names.  */
17037   if (!decl_specifiers.any_type_specifiers_p)
17038     cp_parser_parse_and_diagnose_invalid_type_name (parser);
17039
17040   /* If an error occurred, there's no reason to attempt to parse the
17041      rest of the declaration.  */
17042   if (cp_parser_error_occurred (parser))
17043     {
17044       parser->type_definition_forbidden_message = saved_message;
17045       return NULL;
17046     }
17047
17048   /* Peek at the next token.  */
17049   token = cp_lexer_peek_token (parser->lexer);
17050
17051   /* If the next token is a `)', `,', `=', `>', or `...', then there
17052      is no declarator. However, when variadic templates are enabled,
17053      there may be a declarator following `...'.  */
17054   if (token->type == CPP_CLOSE_PAREN
17055       || token->type == CPP_COMMA
17056       || token->type == CPP_EQ
17057       || token->type == CPP_GREATER)
17058     {
17059       declarator = NULL;
17060       if (parenthesized_p)
17061         *parenthesized_p = false;
17062     }
17063   /* Otherwise, there should be a declarator.  */
17064   else
17065     {
17066       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
17067       parser->default_arg_ok_p = false;
17068
17069       /* After seeing a decl-specifier-seq, if the next token is not a
17070          "(", there is no possibility that the code is a valid
17071          expression.  Therefore, if parsing tentatively, we commit at
17072          this point.  */
17073       if (!parser->in_template_argument_list_p
17074           /* In an expression context, having seen:
17075
17076                (int((char ...
17077
17078              we cannot be sure whether we are looking at a
17079              function-type (taking a "char" as a parameter) or a cast
17080              of some object of type "char" to "int".  */
17081           && !parser->in_type_id_in_expr_p
17082           && cp_parser_uncommitted_to_tentative_parse_p (parser)
17083           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
17084           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
17085         cp_parser_commit_to_tentative_parse (parser);
17086       /* Parse the declarator.  */
17087       declarator_token_start = token;
17088       declarator = cp_parser_declarator (parser,
17089                                          CP_PARSER_DECLARATOR_EITHER,
17090                                          /*ctor_dtor_or_conv_p=*/NULL,
17091                                          parenthesized_p,
17092                                          /*member_p=*/false);
17093       parser->default_arg_ok_p = saved_default_arg_ok_p;
17094       /* After the declarator, allow more attributes.  */
17095       decl_specifiers.attributes
17096         = chainon (decl_specifiers.attributes,
17097                    cp_parser_attributes_opt (parser));
17098     }
17099
17100   /* If the next token is an ellipsis, and we have not seen a
17101      declarator name, and the type of the declarator contains parameter
17102      packs but it is not a TYPE_PACK_EXPANSION, then we actually have
17103      a parameter pack expansion expression. Otherwise, leave the
17104      ellipsis for a C-style variadic function. */
17105   token = cp_lexer_peek_token (parser->lexer);
17106   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
17107     {
17108       tree type = decl_specifiers.type;
17109
17110       if (type && DECL_P (type))
17111         type = TREE_TYPE (type);
17112
17113       if (type
17114           && TREE_CODE (type) != TYPE_PACK_EXPANSION
17115           && declarator_can_be_parameter_pack (declarator)
17116           && (!declarator || !declarator->parameter_pack_p)
17117           && uses_parameter_packs (type))
17118         {
17119           /* Consume the `...'. */
17120           cp_lexer_consume_token (parser->lexer);
17121           maybe_warn_variadic_templates ();
17122           
17123           /* Build a pack expansion type */
17124           if (declarator)
17125             declarator->parameter_pack_p = true;
17126           else
17127             decl_specifiers.type = make_pack_expansion (type);
17128         }
17129     }
17130
17131   /* The restriction on defining new types applies only to the type
17132      of the parameter, not to the default argument.  */
17133   parser->type_definition_forbidden_message = saved_message;
17134
17135   /* If the next token is `=', then process a default argument.  */
17136   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
17137     {
17138       /* If we are defining a class, then the tokens that make up the
17139          default argument must be saved and processed later.  */
17140       if (!template_parm_p && at_class_scope_p ()
17141           && TYPE_BEING_DEFINED (current_class_type)
17142           && !LAMBDA_TYPE_P (current_class_type))
17143         {
17144           unsigned depth = 0;
17145           int maybe_template_id = 0;
17146           cp_token *first_token;
17147           cp_token *token;
17148
17149           /* Add tokens until we have processed the entire default
17150              argument.  We add the range [first_token, token).  */
17151           first_token = cp_lexer_peek_token (parser->lexer);
17152           while (true)
17153             {
17154               bool done = false;
17155
17156               /* Peek at the next token.  */
17157               token = cp_lexer_peek_token (parser->lexer);
17158               /* What we do depends on what token we have.  */
17159               switch (token->type)
17160                 {
17161                   /* In valid code, a default argument must be
17162                      immediately followed by a `,' `)', or `...'.  */
17163                 case CPP_COMMA:
17164                   if (depth == 0 && maybe_template_id)
17165                     {
17166                       /* If we've seen a '<', we might be in a
17167                          template-argument-list.  Until Core issue 325 is
17168                          resolved, we don't know how this situation ought
17169                          to be handled, so try to DTRT.  We check whether
17170                          what comes after the comma is a valid parameter
17171                          declaration list.  If it is, then the comma ends
17172                          the default argument; otherwise the default
17173                          argument continues.  */
17174                       bool error = false;
17175                       tree t;
17176
17177                       /* Set ITALP so cp_parser_parameter_declaration_list
17178                          doesn't decide to commit to this parse.  */
17179                       bool saved_italp = parser->in_template_argument_list_p;
17180                       parser->in_template_argument_list_p = true;
17181
17182                       cp_parser_parse_tentatively (parser);
17183                       cp_lexer_consume_token (parser->lexer);
17184                       begin_scope (sk_function_parms, NULL_TREE);
17185                       cp_parser_parameter_declaration_list (parser, &error);
17186                       for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
17187                         pop_binding (DECL_NAME (t), t);
17188                       leave_scope ();
17189                       if (!cp_parser_error_occurred (parser) && !error)
17190                         done = true;
17191                       cp_parser_abort_tentative_parse (parser);
17192
17193                       parser->in_template_argument_list_p = saved_italp;
17194                       break;
17195                     }
17196                 case CPP_CLOSE_PAREN:
17197                 case CPP_ELLIPSIS:
17198                   /* If we run into a non-nested `;', `}', or `]',
17199                      then the code is invalid -- but the default
17200                      argument is certainly over.  */
17201                 case CPP_SEMICOLON:
17202                 case CPP_CLOSE_BRACE:
17203                 case CPP_CLOSE_SQUARE:
17204                   if (depth == 0)
17205                     done = true;
17206                   /* Update DEPTH, if necessary.  */
17207                   else if (token->type == CPP_CLOSE_PAREN
17208                            || token->type == CPP_CLOSE_BRACE
17209                            || token->type == CPP_CLOSE_SQUARE)
17210                     --depth;
17211                   break;
17212
17213                 case CPP_OPEN_PAREN:
17214                 case CPP_OPEN_SQUARE:
17215                 case CPP_OPEN_BRACE:
17216                   ++depth;
17217                   break;
17218
17219                 case CPP_LESS:
17220                   if (depth == 0)
17221                     /* This might be the comparison operator, or it might
17222                        start a template argument list.  */
17223                     ++maybe_template_id;
17224                   break;
17225
17226                 case CPP_RSHIFT:
17227                   if (cxx_dialect == cxx98)
17228                     break;
17229                   /* Fall through for C++0x, which treats the `>>'
17230                      operator like two `>' tokens in certain
17231                      cases.  */
17232
17233                 case CPP_GREATER:
17234                   if (depth == 0)
17235                     {
17236                       /* This might be an operator, or it might close a
17237                          template argument list.  But if a previous '<'
17238                          started a template argument list, this will have
17239                          closed it, so we can't be in one anymore.  */
17240                       maybe_template_id -= 1 + (token->type == CPP_RSHIFT);
17241                       if (maybe_template_id < 0)
17242                         maybe_template_id = 0;
17243                     }
17244                   break;
17245
17246                   /* If we run out of tokens, issue an error message.  */
17247                 case CPP_EOF:
17248                 case CPP_PRAGMA_EOL:
17249                   error_at (token->location, "file ends in default argument");
17250                   done = true;
17251                   break;
17252
17253                 case CPP_NAME:
17254                 case CPP_SCOPE:
17255                   /* In these cases, we should look for template-ids.
17256                      For example, if the default argument is
17257                      `X<int, double>()', we need to do name lookup to
17258                      figure out whether or not `X' is a template; if
17259                      so, the `,' does not end the default argument.
17260
17261                      That is not yet done.  */
17262                   break;
17263
17264                 default:
17265                   break;
17266                 }
17267
17268               /* If we've reached the end, stop.  */
17269               if (done)
17270                 break;
17271
17272               /* Add the token to the token block.  */
17273               token = cp_lexer_consume_token (parser->lexer);
17274             }
17275
17276           /* Create a DEFAULT_ARG to represent the unparsed default
17277              argument.  */
17278           default_argument = make_node (DEFAULT_ARG);
17279           DEFARG_TOKENS (default_argument)
17280             = cp_token_cache_new (first_token, token);
17281           DEFARG_INSTANTIATIONS (default_argument) = NULL;
17282         }
17283       /* Outside of a class definition, we can just parse the
17284          assignment-expression.  */
17285       else
17286         {
17287           token = cp_lexer_peek_token (parser->lexer);
17288           default_argument 
17289             = cp_parser_default_argument (parser, template_parm_p);
17290         }
17291
17292       if (!parser->default_arg_ok_p)
17293         {
17294           if (flag_permissive)
17295             warning (0, "deprecated use of default argument for parameter of non-function");
17296           else
17297             {
17298               error_at (token->location,
17299                         "default arguments are only "
17300                         "permitted for function parameters");
17301               default_argument = NULL_TREE;
17302             }
17303         }
17304       else if ((declarator && declarator->parameter_pack_p)
17305                || (decl_specifiers.type
17306                    && PACK_EXPANSION_P (decl_specifiers.type)))
17307         {
17308           /* Find the name of the parameter pack.  */     
17309           cp_declarator *id_declarator = declarator;
17310           while (id_declarator && id_declarator->kind != cdk_id)
17311             id_declarator = id_declarator->declarator;
17312           
17313           if (id_declarator && id_declarator->kind == cdk_id)
17314             error_at (declarator_token_start->location,
17315                       template_parm_p
17316                       ? G_("template parameter pack %qD "
17317                            "cannot have a default argument")
17318                       : G_("parameter pack %qD cannot have "
17319                            "a default argument"),
17320                       id_declarator->u.id.unqualified_name);
17321           else
17322             error_at (declarator_token_start->location,
17323                       template_parm_p
17324                       ? G_("template parameter pack cannot have "
17325                            "a default argument")
17326                       : G_("parameter pack cannot have a "
17327                            "default argument"));
17328
17329           default_argument = NULL_TREE;
17330         }
17331     }
17332   else
17333     default_argument = NULL_TREE;
17334
17335   return make_parameter_declarator (&decl_specifiers,
17336                                     declarator,
17337                                     default_argument);
17338 }
17339
17340 /* Parse a default argument and return it.
17341
17342    TEMPLATE_PARM_P is true if this is a default argument for a
17343    non-type template parameter.  */
17344 static tree
17345 cp_parser_default_argument (cp_parser *parser, bool template_parm_p)
17346 {
17347   tree default_argument = NULL_TREE;
17348   bool saved_greater_than_is_operator_p;
17349   bool saved_local_variables_forbidden_p;
17350   bool non_constant_p, is_direct_init;
17351
17352   /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
17353      set correctly.  */
17354   saved_greater_than_is_operator_p = parser->greater_than_is_operator_p;
17355   parser->greater_than_is_operator_p = !template_parm_p;
17356   /* Local variable names (and the `this' keyword) may not
17357      appear in a default argument.  */
17358   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
17359   parser->local_variables_forbidden_p = true;
17360   /* Parse the assignment-expression.  */
17361   if (template_parm_p)
17362     push_deferring_access_checks (dk_no_deferred);
17363   default_argument
17364     = cp_parser_initializer (parser, &is_direct_init, &non_constant_p);
17365   if (BRACE_ENCLOSED_INITIALIZER_P (default_argument))
17366     maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
17367   if (template_parm_p)
17368     pop_deferring_access_checks ();
17369   parser->greater_than_is_operator_p = saved_greater_than_is_operator_p;
17370   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
17371
17372   return default_argument;
17373 }
17374
17375 /* Parse a function-body.
17376
17377    function-body:
17378      compound_statement  */
17379
17380 static void
17381 cp_parser_function_body (cp_parser *parser)
17382 {
17383   cp_parser_compound_statement (parser, NULL, false, true);
17384 }
17385
17386 /* Parse a ctor-initializer-opt followed by a function-body.  Return
17387    true if a ctor-initializer was present.  */
17388
17389 static bool
17390 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
17391 {
17392   tree body, list;
17393   bool ctor_initializer_p;
17394   const bool check_body_p =
17395      DECL_CONSTRUCTOR_P (current_function_decl)
17396      && DECL_DECLARED_CONSTEXPR_P (current_function_decl);
17397   tree last = NULL;
17398
17399   /* Begin the function body.  */
17400   body = begin_function_body ();
17401   /* Parse the optional ctor-initializer.  */
17402   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
17403
17404   /* If we're parsing a constexpr constructor definition, we need
17405      to check that the constructor body is indeed empty.  However,
17406      before we get to cp_parser_function_body lot of junk has been
17407      generated, so we can't just check that we have an empty block.
17408      Rather we take a snapshot of the outermost block, and check whether
17409      cp_parser_function_body changed its state.  */
17410   if (check_body_p)
17411     {
17412       list = body;
17413       if (TREE_CODE (list) == BIND_EXPR)
17414         list = BIND_EXPR_BODY (list);
17415       if (TREE_CODE (list) == STATEMENT_LIST
17416           && STATEMENT_LIST_TAIL (list) != NULL)
17417         last = STATEMENT_LIST_TAIL (list)->stmt;
17418     }
17419   /* Parse the function-body.  */
17420   cp_parser_function_body (parser);
17421   if (check_body_p)
17422     check_constexpr_ctor_body (last, list);
17423   /* Finish the function body.  */
17424   finish_function_body (body);
17425
17426   return ctor_initializer_p;
17427 }
17428
17429 /* Parse an initializer.
17430
17431    initializer:
17432      = initializer-clause
17433      ( expression-list )
17434
17435    Returns an expression representing the initializer.  If no
17436    initializer is present, NULL_TREE is returned.
17437
17438    *IS_DIRECT_INIT is set to FALSE if the `= initializer-clause'
17439    production is used, and TRUE otherwise.  *IS_DIRECT_INIT is
17440    set to TRUE if there is no initializer present.  If there is an
17441    initializer, and it is not a constant-expression, *NON_CONSTANT_P
17442    is set to true; otherwise it is set to false.  */
17443
17444 static tree
17445 cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
17446                        bool* non_constant_p)
17447 {
17448   cp_token *token;
17449   tree init;
17450
17451   /* Peek at the next token.  */
17452   token = cp_lexer_peek_token (parser->lexer);
17453
17454   /* Let our caller know whether or not this initializer was
17455      parenthesized.  */
17456   *is_direct_init = (token->type != CPP_EQ);
17457   /* Assume that the initializer is constant.  */
17458   *non_constant_p = false;
17459
17460   if (token->type == CPP_EQ)
17461     {
17462       /* Consume the `='.  */
17463       cp_lexer_consume_token (parser->lexer);
17464       /* Parse the initializer-clause.  */
17465       init = cp_parser_initializer_clause (parser, non_constant_p);
17466     }
17467   else if (token->type == CPP_OPEN_PAREN)
17468     {
17469       VEC(tree,gc) *vec;
17470       vec = cp_parser_parenthesized_expression_list (parser, non_attr,
17471                                                      /*cast_p=*/false,
17472                                                      /*allow_expansion_p=*/true,
17473                                                      non_constant_p);
17474       if (vec == NULL)
17475         return error_mark_node;
17476       init = build_tree_list_vec (vec);
17477       release_tree_vector (vec);
17478     }
17479   else if (token->type == CPP_OPEN_BRACE)
17480     {
17481       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
17482       init = cp_parser_braced_list (parser, non_constant_p);
17483       CONSTRUCTOR_IS_DIRECT_INIT (init) = 1;
17484     }
17485   else
17486     {
17487       /* Anything else is an error.  */
17488       cp_parser_error (parser, "expected initializer");
17489       init = error_mark_node;
17490     }
17491
17492   return init;
17493 }
17494
17495 /* Parse an initializer-clause.
17496
17497    initializer-clause:
17498      assignment-expression
17499      braced-init-list
17500
17501    Returns an expression representing the initializer.
17502
17503    If the `assignment-expression' production is used the value
17504    returned is simply a representation for the expression.
17505
17506    Otherwise, calls cp_parser_braced_list.  */
17507
17508 static tree
17509 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
17510 {
17511   tree initializer;
17512
17513   /* Assume the expression is constant.  */
17514   *non_constant_p = false;
17515
17516   /* If it is not a `{', then we are looking at an
17517      assignment-expression.  */
17518   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
17519     {
17520       initializer
17521         = cp_parser_constant_expression (parser,
17522                                         /*allow_non_constant_p=*/true,
17523                                         non_constant_p);
17524     }
17525   else
17526     initializer = cp_parser_braced_list (parser, non_constant_p);
17527
17528   return initializer;
17529 }
17530
17531 /* Parse a brace-enclosed initializer list.
17532
17533    braced-init-list:
17534      { initializer-list , [opt] }
17535      { }
17536
17537    Returns a CONSTRUCTOR.  The CONSTRUCTOR_ELTS will be
17538    the elements of the initializer-list (or NULL, if the last
17539    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
17540    NULL_TREE.  There is no way to detect whether or not the optional
17541    trailing `,' was provided.  NON_CONSTANT_P is as for
17542    cp_parser_initializer.  */     
17543
17544 static tree
17545 cp_parser_braced_list (cp_parser* parser, bool* non_constant_p)
17546 {
17547   tree initializer;
17548
17549   /* Consume the `{' token.  */
17550   cp_lexer_consume_token (parser->lexer);
17551   /* Create a CONSTRUCTOR to represent the braced-initializer.  */
17552   initializer = make_node (CONSTRUCTOR);
17553   /* If it's not a `}', then there is a non-trivial initializer.  */
17554   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
17555     {
17556       /* Parse the initializer list.  */
17557       CONSTRUCTOR_ELTS (initializer)
17558         = cp_parser_initializer_list (parser, non_constant_p);
17559       /* A trailing `,' token is allowed.  */
17560       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
17561         cp_lexer_consume_token (parser->lexer);
17562     }
17563   /* Now, there should be a trailing `}'.  */
17564   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
17565   TREE_TYPE (initializer) = init_list_type_node;
17566   return initializer;
17567 }
17568
17569 /* Parse an initializer-list.
17570
17571    initializer-list:
17572      initializer-clause ... [opt]
17573      initializer-list , initializer-clause ... [opt]
17574
17575    GNU Extension:
17576
17577    initializer-list:
17578      designation initializer-clause ...[opt]
17579      initializer-list , designation initializer-clause ...[opt]
17580
17581    designation:
17582      . identifier =
17583      identifier :
17584      [ constant-expression ] =
17585
17586    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
17587    for the initializer.  If the INDEX of the elt is non-NULL, it is the
17588    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
17589    as for cp_parser_initializer.  */
17590
17591 static VEC(constructor_elt,gc) *
17592 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
17593 {
17594   VEC(constructor_elt,gc) *v = NULL;
17595
17596   /* Assume all of the expressions are constant.  */
17597   *non_constant_p = false;
17598
17599   /* Parse the rest of the list.  */
17600   while (true)
17601     {
17602       cp_token *token;
17603       tree designator;
17604       tree initializer;
17605       bool clause_non_constant_p;
17606
17607       /* If the next token is an identifier and the following one is a
17608          colon, we are looking at the GNU designated-initializer
17609          syntax.  */
17610       if (cp_parser_allow_gnu_extensions_p (parser)
17611           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
17612           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
17613         {
17614           /* Warn the user that they are using an extension.  */
17615           pedwarn (input_location, OPT_pedantic, 
17616                    "ISO C++ does not allow designated initializers");
17617           /* Consume the identifier.  */
17618           designator = cp_lexer_consume_token (parser->lexer)->u.value;
17619           /* Consume the `:'.  */
17620           cp_lexer_consume_token (parser->lexer);
17621         }
17622       /* Also handle the C99 syntax, '. id ='.  */
17623       else if (cp_parser_allow_gnu_extensions_p (parser)
17624                && cp_lexer_next_token_is (parser->lexer, CPP_DOT)
17625                && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME
17626                && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_EQ)
17627         {
17628           /* Warn the user that they are using an extension.  */
17629           pedwarn (input_location, OPT_pedantic,
17630                    "ISO C++ does not allow C99 designated initializers");
17631           /* Consume the `.'.  */
17632           cp_lexer_consume_token (parser->lexer);
17633           /* Consume the identifier.  */
17634           designator = cp_lexer_consume_token (parser->lexer)->u.value;
17635           /* Consume the `='.  */
17636           cp_lexer_consume_token (parser->lexer);
17637         }
17638       /* Also handle C99 array designators, '[ const ] ='.  */
17639       else if (cp_parser_allow_gnu_extensions_p (parser)
17640                && !c_dialect_objc ()
17641                && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
17642         {
17643           /* In C++11, [ could start a lambda-introducer.  */
17644           cp_parser_parse_tentatively (parser);
17645           cp_lexer_consume_token (parser->lexer);
17646           designator = cp_parser_constant_expression (parser, false, NULL);
17647           cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
17648           cp_parser_require (parser, CPP_EQ, RT_EQ);
17649           cp_parser_parse_definitely (parser);
17650         }
17651       else
17652         designator = NULL_TREE;
17653
17654       /* Parse the initializer.  */
17655       initializer = cp_parser_initializer_clause (parser,
17656                                                   &clause_non_constant_p);
17657       /* If any clause is non-constant, so is the entire initializer.  */
17658       if (clause_non_constant_p)
17659         *non_constant_p = true;
17660
17661       /* If we have an ellipsis, this is an initializer pack
17662          expansion.  */
17663       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
17664         {
17665           /* Consume the `...'.  */
17666           cp_lexer_consume_token (parser->lexer);
17667
17668           /* Turn the initializer into an initializer expansion.  */
17669           initializer = make_pack_expansion (initializer);
17670         }
17671
17672       /* Add it to the vector.  */
17673       CONSTRUCTOR_APPEND_ELT (v, designator, initializer);
17674
17675       /* If the next token is not a comma, we have reached the end of
17676          the list.  */
17677       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
17678         break;
17679
17680       /* Peek at the next token.  */
17681       token = cp_lexer_peek_nth_token (parser->lexer, 2);
17682       /* If the next token is a `}', then we're still done.  An
17683          initializer-clause can have a trailing `,' after the
17684          initializer-list and before the closing `}'.  */
17685       if (token->type == CPP_CLOSE_BRACE)
17686         break;
17687
17688       /* Consume the `,' token.  */
17689       cp_lexer_consume_token (parser->lexer);
17690     }
17691
17692   return v;
17693 }
17694
17695 /* Classes [gram.class] */
17696
17697 /* Parse a class-name.
17698
17699    class-name:
17700      identifier
17701      template-id
17702
17703    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
17704    to indicate that names looked up in dependent types should be
17705    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
17706    keyword has been used to indicate that the name that appears next
17707    is a template.  TAG_TYPE indicates the explicit tag given before
17708    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
17709    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
17710    is the class being defined in a class-head.
17711
17712    Returns the TYPE_DECL representing the class.  */
17713
17714 static tree
17715 cp_parser_class_name (cp_parser *parser,
17716                       bool typename_keyword_p,
17717                       bool template_keyword_p,
17718                       enum tag_types tag_type,
17719                       bool check_dependency_p,
17720                       bool class_head_p,
17721                       bool is_declaration)
17722 {
17723   tree decl;
17724   tree scope;
17725   bool typename_p;
17726   cp_token *token;
17727   tree identifier = NULL_TREE;
17728
17729   /* All class-names start with an identifier.  */
17730   token = cp_lexer_peek_token (parser->lexer);
17731   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
17732     {
17733       cp_parser_error (parser, "expected class-name");
17734       return error_mark_node;
17735     }
17736
17737   /* PARSER->SCOPE can be cleared when parsing the template-arguments
17738      to a template-id, so we save it here.  */
17739   scope = parser->scope;
17740   if (scope == error_mark_node)
17741     return error_mark_node;
17742
17743   /* Any name names a type if we're following the `typename' keyword
17744      in a qualified name where the enclosing scope is type-dependent.  */
17745   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
17746                 && dependent_type_p (scope));
17747   /* Handle the common case (an identifier, but not a template-id)
17748      efficiently.  */
17749   if (token->type == CPP_NAME
17750       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
17751     {
17752       cp_token *identifier_token;
17753       bool ambiguous_p;
17754
17755       /* Look for the identifier.  */
17756       identifier_token = cp_lexer_peek_token (parser->lexer);
17757       ambiguous_p = identifier_token->ambiguous_p;
17758       identifier = cp_parser_identifier (parser);
17759       /* If the next token isn't an identifier, we are certainly not
17760          looking at a class-name.  */
17761       if (identifier == error_mark_node)
17762         decl = error_mark_node;
17763       /* If we know this is a type-name, there's no need to look it
17764          up.  */
17765       else if (typename_p)
17766         decl = identifier;
17767       else
17768         {
17769           tree ambiguous_decls;
17770           /* If we already know that this lookup is ambiguous, then
17771              we've already issued an error message; there's no reason
17772              to check again.  */
17773           if (ambiguous_p)
17774             {
17775               cp_parser_simulate_error (parser);
17776               return error_mark_node;
17777             }
17778           /* If the next token is a `::', then the name must be a type
17779              name.
17780
17781              [basic.lookup.qual]
17782
17783              During the lookup for a name preceding the :: scope
17784              resolution operator, object, function, and enumerator
17785              names are ignored.  */
17786           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
17787             tag_type = typename_type;
17788           /* Look up the name.  */
17789           decl = cp_parser_lookup_name (parser, identifier,
17790                                         tag_type,
17791                                         /*is_template=*/false,
17792                                         /*is_namespace=*/false,
17793                                         check_dependency_p,
17794                                         &ambiguous_decls,
17795                                         identifier_token->location);
17796           if (ambiguous_decls)
17797             {
17798               if (cp_parser_parsing_tentatively (parser))
17799                 cp_parser_simulate_error (parser);
17800               return error_mark_node;
17801             }
17802         }
17803     }
17804   else
17805     {
17806       /* Try a template-id.  */
17807       decl = cp_parser_template_id (parser, template_keyword_p,
17808                                     check_dependency_p,
17809                                     is_declaration);
17810       if (decl == error_mark_node)
17811         return error_mark_node;
17812     }
17813
17814   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
17815
17816   /* If this is a typename, create a TYPENAME_TYPE.  */
17817   if (typename_p && decl != error_mark_node)
17818     {
17819       decl = make_typename_type (scope, decl, typename_type,
17820                                  /*complain=*/tf_error);
17821       if (decl != error_mark_node)
17822         decl = TYPE_NAME (decl);
17823     }
17824
17825   /* Check to see that it is really the name of a class.  */
17826   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
17827       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
17828       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
17829     /* Situations like this:
17830
17831          template <typename T> struct A {
17832            typename T::template X<int>::I i;
17833          };
17834
17835        are problematic.  Is `T::template X<int>' a class-name?  The
17836        standard does not seem to be definitive, but there is no other
17837        valid interpretation of the following `::'.  Therefore, those
17838        names are considered class-names.  */
17839     {
17840       decl = make_typename_type (scope, decl, tag_type, tf_error);
17841       if (decl != error_mark_node)
17842         decl = TYPE_NAME (decl);
17843     }
17844   else if (TREE_CODE (decl) != TYPE_DECL
17845            || TREE_TYPE (decl) == error_mark_node
17846            || !MAYBE_CLASS_TYPE_P (TREE_TYPE (decl))
17847            /* In Objective-C 2.0, a classname followed by '.' starts a
17848               dot-syntax expression, and it's not a type-name.  */
17849            || (c_dialect_objc ()
17850                && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT 
17851                && objc_is_class_name (decl)))
17852     decl = error_mark_node;
17853
17854   if (decl == error_mark_node)
17855     cp_parser_error (parser, "expected class-name");
17856   else if (identifier && !parser->scope)
17857     maybe_note_name_used_in_class (identifier, decl);
17858
17859   return decl;
17860 }
17861
17862 /* Parse a class-specifier.
17863
17864    class-specifier:
17865      class-head { member-specification [opt] }
17866
17867    Returns the TREE_TYPE representing the class.  */
17868
17869 static tree
17870 cp_parser_class_specifier_1 (cp_parser* parser)
17871 {
17872   tree type;
17873   tree attributes = NULL_TREE;
17874   bool nested_name_specifier_p;
17875   unsigned saved_num_template_parameter_lists;
17876   bool saved_in_function_body;
17877   unsigned char in_statement;
17878   bool in_switch_statement_p;
17879   bool saved_in_unbraced_linkage_specification_p;
17880   tree old_scope = NULL_TREE;
17881   tree scope = NULL_TREE;
17882   tree bases;
17883   cp_token *closing_brace;
17884
17885   push_deferring_access_checks (dk_no_deferred);
17886
17887   /* Parse the class-head.  */
17888   type = cp_parser_class_head (parser,
17889                                &nested_name_specifier_p,
17890                                &attributes,
17891                                &bases);
17892   /* If the class-head was a semantic disaster, skip the entire body
17893      of the class.  */
17894   if (!type)
17895     {
17896       cp_parser_skip_to_end_of_block_or_statement (parser);
17897       pop_deferring_access_checks ();
17898       return error_mark_node;
17899     }
17900
17901   /* Look for the `{'.  */
17902   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
17903     {
17904       pop_deferring_access_checks ();
17905       return error_mark_node;
17906     }
17907
17908   /* Process the base classes. If they're invalid, skip the 
17909      entire class body.  */
17910   if (!xref_basetypes (type, bases))
17911     {
17912       /* Consuming the closing brace yields better error messages
17913          later on.  */
17914       if (cp_parser_skip_to_closing_brace (parser))
17915         cp_lexer_consume_token (parser->lexer);
17916       pop_deferring_access_checks ();
17917       return error_mark_node;
17918     }
17919
17920   /* Issue an error message if type-definitions are forbidden here.  */
17921   cp_parser_check_type_definition (parser);
17922   /* Remember that we are defining one more class.  */
17923   ++parser->num_classes_being_defined;
17924   /* Inside the class, surrounding template-parameter-lists do not
17925      apply.  */
17926   saved_num_template_parameter_lists
17927     = parser->num_template_parameter_lists;
17928   parser->num_template_parameter_lists = 0;
17929   /* We are not in a function body.  */
17930   saved_in_function_body = parser->in_function_body;
17931   parser->in_function_body = false;
17932   /* Or in a loop.  */
17933   in_statement = parser->in_statement;
17934   parser->in_statement = 0;
17935   /* Or in a switch.  */
17936   in_switch_statement_p = parser->in_switch_statement_p;
17937   parser->in_switch_statement_p = false;
17938   /* We are not immediately inside an extern "lang" block.  */
17939   saved_in_unbraced_linkage_specification_p
17940     = parser->in_unbraced_linkage_specification_p;
17941   parser->in_unbraced_linkage_specification_p = false;
17942
17943   /* Start the class.  */
17944   if (nested_name_specifier_p)
17945     {
17946       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
17947       old_scope = push_inner_scope (scope);
17948     }
17949   type = begin_class_definition (type, attributes);
17950
17951   if (type == error_mark_node)
17952     /* If the type is erroneous, skip the entire body of the class.  */
17953     cp_parser_skip_to_closing_brace (parser);
17954   else
17955     /* Parse the member-specification.  */
17956     cp_parser_member_specification_opt (parser);
17957
17958   /* Look for the trailing `}'.  */
17959   closing_brace = cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
17960   /* Look for trailing attributes to apply to this class.  */
17961   if (cp_parser_allow_gnu_extensions_p (parser))
17962     attributes = cp_parser_attributes_opt (parser);
17963   if (type != error_mark_node)
17964     type = finish_struct (type, attributes);
17965   if (nested_name_specifier_p)
17966     pop_inner_scope (old_scope, scope);
17967
17968   /* We've finished a type definition.  Check for the common syntax
17969      error of forgetting a semicolon after the definition.  We need to
17970      be careful, as we can't just check for not-a-semicolon and be done
17971      with it; the user might have typed:
17972
17973      class X { } c = ...;
17974      class X { } *p = ...;
17975
17976      and so forth.  Instead, enumerate all the possible tokens that
17977      might follow this production; if we don't see one of them, then
17978      complain and silently insert the semicolon.  */
17979   {
17980     cp_token *token = cp_lexer_peek_token (parser->lexer);
17981     bool want_semicolon = true;
17982
17983     switch (token->type)
17984       {
17985       case CPP_NAME:
17986       case CPP_SEMICOLON:
17987       case CPP_MULT:
17988       case CPP_AND:
17989       case CPP_OPEN_PAREN:
17990       case CPP_CLOSE_PAREN:
17991       case CPP_COMMA:
17992         want_semicolon = false;
17993         break;
17994
17995         /* While it's legal for type qualifiers and storage class
17996            specifiers to follow type definitions in the grammar, only
17997            compiler testsuites contain code like that.  Assume that if
17998            we see such code, then what we're really seeing is a case
17999            like:
18000
18001            class X { }
18002            const <type> var = ...;
18003
18004            or
18005
18006            class Y { }
18007            static <type> func (...) ...
18008
18009            i.e. the qualifier or specifier applies to the next
18010            declaration.  To do so, however, we need to look ahead one
18011            more token to see if *that* token is a type specifier.
18012
18013            This code could be improved to handle:
18014
18015            class Z { }
18016            static const <type> var = ...;  */
18017       case CPP_KEYWORD:
18018         if (keyword_is_decl_specifier (token->keyword))
18019           {
18020             cp_token *lookahead = cp_lexer_peek_nth_token (parser->lexer, 2);
18021
18022             /* Handling user-defined types here would be nice, but very
18023                tricky.  */
18024             want_semicolon
18025               = (lookahead->type == CPP_KEYWORD
18026                  && keyword_begins_type_specifier (lookahead->keyword));
18027           }
18028         break;
18029       default:
18030         break;
18031       }
18032
18033     /* If we don't have a type, then something is very wrong and we
18034        shouldn't try to do anything clever.  Likewise for not seeing the
18035        closing brace.  */
18036     if (closing_brace && TYPE_P (type) && want_semicolon)
18037       {
18038         cp_token_position prev
18039           = cp_lexer_previous_token_position (parser->lexer);
18040         cp_token *prev_token = cp_lexer_token_at (parser->lexer, prev);
18041         location_t loc = prev_token->location;
18042
18043         if (CLASSTYPE_DECLARED_CLASS (type))
18044           error_at (loc, "expected %<;%> after class definition");
18045         else if (TREE_CODE (type) == RECORD_TYPE)
18046           error_at (loc, "expected %<;%> after struct definition");
18047         else if (TREE_CODE (type) == UNION_TYPE)
18048           error_at (loc, "expected %<;%> after union definition");
18049         else
18050           gcc_unreachable ();
18051
18052         /* Unget one token and smash it to look as though we encountered
18053            a semicolon in the input stream.  */
18054         cp_lexer_set_token_position (parser->lexer, prev);
18055         token = cp_lexer_peek_token (parser->lexer);
18056         token->type = CPP_SEMICOLON;
18057         token->keyword = RID_MAX;
18058       }
18059   }
18060
18061   /* If this class is not itself within the scope of another class,
18062      then we need to parse the bodies of all of the queued function
18063      definitions.  Note that the queued functions defined in a class
18064      are not always processed immediately following the
18065      class-specifier for that class.  Consider:
18066
18067        struct A {
18068          struct B { void f() { sizeof (A); } };
18069        };
18070
18071      If `f' were processed before the processing of `A' were
18072      completed, there would be no way to compute the size of `A'.
18073      Note that the nesting we are interested in here is lexical --
18074      not the semantic nesting given by TYPE_CONTEXT.  In particular,
18075      for:
18076
18077        struct A { struct B; };
18078        struct A::B { void f() { } };
18079
18080      there is no need to delay the parsing of `A::B::f'.  */
18081   if (--parser->num_classes_being_defined == 0)
18082     {
18083       tree decl;
18084       tree class_type = NULL_TREE;
18085       tree pushed_scope = NULL_TREE;
18086       unsigned ix;
18087       cp_default_arg_entry *e;
18088       tree save_ccp, save_ccr;
18089
18090       /* In a first pass, parse default arguments to the functions.
18091          Then, in a second pass, parse the bodies of the functions.
18092          This two-phased approach handles cases like:
18093
18094             struct S {
18095               void f() { g(); }
18096               void g(int i = 3);
18097             };
18098
18099          */
18100       FOR_EACH_VEC_ELT (cp_default_arg_entry, unparsed_funs_with_default_args,
18101                         ix, e)
18102         {
18103           decl = e->decl;
18104           /* If there are default arguments that have not yet been processed,
18105              take care of them now.  */
18106           if (class_type != e->class_type)
18107             {
18108               if (pushed_scope)
18109                 pop_scope (pushed_scope);
18110               class_type = e->class_type;
18111               pushed_scope = push_scope (class_type);
18112             }
18113           /* Make sure that any template parameters are in scope.  */
18114           maybe_begin_member_template_processing (decl);
18115           /* Parse the default argument expressions.  */
18116           cp_parser_late_parsing_default_args (parser, decl);
18117           /* Remove any template parameters from the symbol table.  */
18118           maybe_end_member_template_processing ();
18119         }
18120       VEC_truncate (cp_default_arg_entry, unparsed_funs_with_default_args, 0);
18121       /* Now parse any NSDMIs.  */
18122       save_ccp = current_class_ptr;
18123       save_ccr = current_class_ref;
18124       FOR_EACH_VEC_ELT (tree, unparsed_nsdmis, ix, decl)
18125         {
18126           if (class_type != DECL_CONTEXT (decl))
18127             {
18128               if (pushed_scope)
18129                 pop_scope (pushed_scope);
18130               class_type = DECL_CONTEXT (decl);
18131               pushed_scope = push_scope (class_type);
18132             }
18133           inject_this_parameter (class_type, TYPE_UNQUALIFIED);
18134           cp_parser_late_parsing_nsdmi (parser, decl);
18135         }
18136       VEC_truncate (tree, unparsed_nsdmis, 0);
18137       current_class_ptr = save_ccp;
18138       current_class_ref = save_ccr;
18139       if (pushed_scope)
18140         pop_scope (pushed_scope);
18141       /* Now parse the body of the functions.  */
18142       FOR_EACH_VEC_ELT (tree, unparsed_funs_with_definitions, ix, decl)
18143         cp_parser_late_parsing_for_member (parser, decl);
18144       VEC_truncate (tree, unparsed_funs_with_definitions, 0);
18145     }
18146
18147   /* Put back any saved access checks.  */
18148   pop_deferring_access_checks ();
18149
18150   /* Restore saved state.  */
18151   parser->in_switch_statement_p = in_switch_statement_p;
18152   parser->in_statement = in_statement;
18153   parser->in_function_body = saved_in_function_body;
18154   parser->num_template_parameter_lists
18155     = saved_num_template_parameter_lists;
18156   parser->in_unbraced_linkage_specification_p
18157     = saved_in_unbraced_linkage_specification_p;
18158
18159   return type;
18160 }
18161
18162 static tree
18163 cp_parser_class_specifier (cp_parser* parser)
18164 {
18165   tree ret;
18166   timevar_push (TV_PARSE_STRUCT);
18167   ret = cp_parser_class_specifier_1 (parser);
18168   timevar_pop (TV_PARSE_STRUCT);
18169   return ret;
18170 }
18171
18172 /* Parse a class-head.
18173
18174    class-head:
18175      class-key identifier [opt] base-clause [opt]
18176      class-key nested-name-specifier identifier class-virt-specifier [opt] base-clause [opt]
18177      class-key nested-name-specifier [opt] template-id
18178        base-clause [opt]
18179
18180    class-virt-specifier:
18181      final
18182
18183    GNU Extensions:
18184      class-key attributes identifier [opt] base-clause [opt]
18185      class-key attributes nested-name-specifier identifier base-clause [opt]
18186      class-key attributes nested-name-specifier [opt] template-id
18187        base-clause [opt]
18188
18189    Upon return BASES is initialized to the list of base classes (or
18190    NULL, if there are none) in the same form returned by
18191    cp_parser_base_clause.
18192
18193    Returns the TYPE of the indicated class.  Sets
18194    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
18195    involving a nested-name-specifier was used, and FALSE otherwise.
18196
18197    Returns error_mark_node if this is not a class-head.
18198
18199    Returns NULL_TREE if the class-head is syntactically valid, but
18200    semantically invalid in a way that means we should skip the entire
18201    body of the class.  */
18202
18203 static tree
18204 cp_parser_class_head (cp_parser* parser,
18205                       bool* nested_name_specifier_p,
18206                       tree *attributes_p,
18207                       tree *bases)
18208 {
18209   tree nested_name_specifier;
18210   enum tag_types class_key;
18211   tree id = NULL_TREE;
18212   tree type = NULL_TREE;
18213   tree attributes;
18214   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
18215   bool template_id_p = false;
18216   bool qualified_p = false;
18217   bool invalid_nested_name_p = false;
18218   bool invalid_explicit_specialization_p = false;
18219   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
18220   tree pushed_scope = NULL_TREE;
18221   unsigned num_templates;
18222   cp_token *type_start_token = NULL, *nested_name_specifier_token_start = NULL;
18223   /* Assume no nested-name-specifier will be present.  */
18224   *nested_name_specifier_p = false;
18225   /* Assume no template parameter lists will be used in defining the
18226      type.  */
18227   num_templates = 0;
18228   parser->colon_corrects_to_scope_p = false;
18229
18230   *bases = NULL_TREE;
18231
18232   /* Look for the class-key.  */
18233   class_key = cp_parser_class_key (parser);
18234   if (class_key == none_type)
18235     return error_mark_node;
18236
18237   /* Parse the attributes.  */
18238   attributes = cp_parser_attributes_opt (parser);
18239
18240   /* If the next token is `::', that is invalid -- but sometimes
18241      people do try to write:
18242
18243        struct ::S {};
18244
18245      Handle this gracefully by accepting the extra qualifier, and then
18246      issuing an error about it later if this really is a
18247      class-head.  If it turns out just to be an elaborated type
18248      specifier, remain silent.  */
18249   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
18250     qualified_p = true;
18251
18252   push_deferring_access_checks (dk_no_check);
18253
18254   /* Determine the name of the class.  Begin by looking for an
18255      optional nested-name-specifier.  */
18256   nested_name_specifier_token_start = cp_lexer_peek_token (parser->lexer);
18257   nested_name_specifier
18258     = cp_parser_nested_name_specifier_opt (parser,
18259                                            /*typename_keyword_p=*/false,
18260                                            /*check_dependency_p=*/false,
18261                                            /*type_p=*/false,
18262                                            /*is_declaration=*/false);
18263   /* If there was a nested-name-specifier, then there *must* be an
18264      identifier.  */
18265   if (nested_name_specifier)
18266     {
18267       type_start_token = cp_lexer_peek_token (parser->lexer);
18268       /* Although the grammar says `identifier', it really means
18269          `class-name' or `template-name'.  You are only allowed to
18270          define a class that has already been declared with this
18271          syntax.
18272
18273          The proposed resolution for Core Issue 180 says that wherever
18274          you see `class T::X' you should treat `X' as a type-name.
18275
18276          It is OK to define an inaccessible class; for example:
18277
18278            class A { class B; };
18279            class A::B {};
18280
18281          We do not know if we will see a class-name, or a
18282          template-name.  We look for a class-name first, in case the
18283          class-name is a template-id; if we looked for the
18284          template-name first we would stop after the template-name.  */
18285       cp_parser_parse_tentatively (parser);
18286       type = cp_parser_class_name (parser,
18287                                    /*typename_keyword_p=*/false,
18288                                    /*template_keyword_p=*/false,
18289                                    class_type,
18290                                    /*check_dependency_p=*/false,
18291                                    /*class_head_p=*/true,
18292                                    /*is_declaration=*/false);
18293       /* If that didn't work, ignore the nested-name-specifier.  */
18294       if (!cp_parser_parse_definitely (parser))
18295         {
18296           invalid_nested_name_p = true;
18297           type_start_token = cp_lexer_peek_token (parser->lexer);
18298           id = cp_parser_identifier (parser);
18299           if (id == error_mark_node)
18300             id = NULL_TREE;
18301         }
18302       /* If we could not find a corresponding TYPE, treat this
18303          declaration like an unqualified declaration.  */
18304       if (type == error_mark_node)
18305         nested_name_specifier = NULL_TREE;
18306       /* Otherwise, count the number of templates used in TYPE and its
18307          containing scopes.  */
18308       else
18309         {
18310           tree scope;
18311
18312           for (scope = TREE_TYPE (type);
18313                scope && TREE_CODE (scope) != NAMESPACE_DECL;
18314                scope = (TYPE_P (scope)
18315                         ? TYPE_CONTEXT (scope)
18316                         : DECL_CONTEXT (scope)))
18317             if (TYPE_P (scope)
18318                 && CLASS_TYPE_P (scope)
18319                 && CLASSTYPE_TEMPLATE_INFO (scope)
18320                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
18321                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
18322               ++num_templates;
18323         }
18324     }
18325   /* Otherwise, the identifier is optional.  */
18326   else
18327     {
18328       /* We don't know whether what comes next is a template-id,
18329          an identifier, or nothing at all.  */
18330       cp_parser_parse_tentatively (parser);
18331       /* Check for a template-id.  */
18332       type_start_token = cp_lexer_peek_token (parser->lexer);
18333       id = cp_parser_template_id (parser,
18334                                   /*template_keyword_p=*/false,
18335                                   /*check_dependency_p=*/true,
18336                                   /*is_declaration=*/true);
18337       /* If that didn't work, it could still be an identifier.  */
18338       if (!cp_parser_parse_definitely (parser))
18339         {
18340           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18341             {
18342               type_start_token = cp_lexer_peek_token (parser->lexer);
18343               id = cp_parser_identifier (parser);
18344             }
18345           else
18346             id = NULL_TREE;
18347         }
18348       else
18349         {
18350           template_id_p = true;
18351           ++num_templates;
18352         }
18353     }
18354
18355   pop_deferring_access_checks ();
18356
18357   if (id)
18358     {
18359       cp_parser_check_for_invalid_template_id (parser, id,
18360                                                type_start_token->location);
18361     }
18362   virt_specifiers = cp_parser_virt_specifier_seq_opt (parser);
18363
18364   /* If it's not a `:' or a `{' then we can't really be looking at a
18365      class-head, since a class-head only appears as part of a
18366      class-specifier.  We have to detect this situation before calling
18367      xref_tag, since that has irreversible side-effects.  */
18368   if (!cp_parser_next_token_starts_class_definition_p (parser))
18369     {
18370       cp_parser_error (parser, "expected %<{%> or %<:%>");
18371       type = error_mark_node;
18372       goto out;
18373     }
18374
18375   /* At this point, we're going ahead with the class-specifier, even
18376      if some other problem occurs.  */
18377   cp_parser_commit_to_tentative_parse (parser);
18378   if (virt_specifiers & VIRT_SPEC_OVERRIDE)
18379     {
18380       cp_parser_error (parser,
18381                        "cannot specify %<override%> for a class");
18382       type = error_mark_node;
18383       goto out;
18384     }
18385   /* Issue the error about the overly-qualified name now.  */
18386   if (qualified_p)
18387     {
18388       cp_parser_error (parser,
18389                        "global qualification of class name is invalid");
18390       type = error_mark_node;
18391       goto out;
18392     }
18393   else if (invalid_nested_name_p)
18394     {
18395       cp_parser_error (parser,
18396                        "qualified name does not name a class");
18397       type = error_mark_node;
18398       goto out;
18399     }
18400   else if (nested_name_specifier)
18401     {
18402       tree scope;
18403
18404       /* Reject typedef-names in class heads.  */
18405       if (!DECL_IMPLICIT_TYPEDEF_P (type))
18406         {
18407           error_at (type_start_token->location,
18408                     "invalid class name in declaration of %qD",
18409                     type);
18410           type = NULL_TREE;
18411           goto done;
18412         }
18413
18414       /* Figure out in what scope the declaration is being placed.  */
18415       scope = current_scope ();
18416       /* If that scope does not contain the scope in which the
18417          class was originally declared, the program is invalid.  */
18418       if (scope && !is_ancestor (scope, nested_name_specifier))
18419         {
18420           if (at_namespace_scope_p ())
18421             error_at (type_start_token->location,
18422                       "declaration of %qD in namespace %qD which does not "
18423                       "enclose %qD",
18424                       type, scope, nested_name_specifier);
18425           else
18426             error_at (type_start_token->location,
18427                       "declaration of %qD in %qD which does not enclose %qD",
18428                       type, scope, nested_name_specifier);
18429           type = NULL_TREE;
18430           goto done;
18431         }
18432       /* [dcl.meaning]
18433
18434          A declarator-id shall not be qualified except for the
18435          definition of a ... nested class outside of its class
18436          ... [or] the definition or explicit instantiation of a
18437          class member of a namespace outside of its namespace.  */
18438       if (scope == nested_name_specifier)
18439         {
18440           permerror (nested_name_specifier_token_start->location,
18441                      "extra qualification not allowed");
18442           nested_name_specifier = NULL_TREE;
18443           num_templates = 0;
18444         }
18445     }
18446   /* An explicit-specialization must be preceded by "template <>".  If
18447      it is not, try to recover gracefully.  */
18448   if (at_namespace_scope_p ()
18449       && parser->num_template_parameter_lists == 0
18450       && template_id_p)
18451     {
18452       error_at (type_start_token->location,
18453                 "an explicit specialization must be preceded by %<template <>%>");
18454       invalid_explicit_specialization_p = true;
18455       /* Take the same action that would have been taken by
18456          cp_parser_explicit_specialization.  */
18457       ++parser->num_template_parameter_lists;
18458       begin_specialization ();
18459     }
18460   /* There must be no "return" statements between this point and the
18461      end of this function; set "type "to the correct return value and
18462      use "goto done;" to return.  */
18463   /* Make sure that the right number of template parameters were
18464      present.  */
18465   if (!cp_parser_check_template_parameters (parser, num_templates,
18466                                             type_start_token->location,
18467                                             /*declarator=*/NULL))
18468     {
18469       /* If something went wrong, there is no point in even trying to
18470          process the class-definition.  */
18471       type = NULL_TREE;
18472       goto done;
18473     }
18474
18475   /* Look up the type.  */
18476   if (template_id_p)
18477     {
18478       if (TREE_CODE (id) == TEMPLATE_ID_EXPR
18479           && (DECL_FUNCTION_TEMPLATE_P (TREE_OPERAND (id, 0))
18480               || TREE_CODE (TREE_OPERAND (id, 0)) == OVERLOAD))
18481         {
18482           error_at (type_start_token->location,
18483                     "function template %qD redeclared as a class template", id);
18484           type = error_mark_node;
18485         }
18486       else
18487         {
18488           type = TREE_TYPE (id);
18489           type = maybe_process_partial_specialization (type);
18490         }
18491       if (nested_name_specifier)
18492         pushed_scope = push_scope (nested_name_specifier);
18493     }
18494   else if (nested_name_specifier)
18495     {
18496       tree class_type;
18497
18498       /* Given:
18499
18500             template <typename T> struct S { struct T };
18501             template <typename T> struct S<T>::T { };
18502
18503          we will get a TYPENAME_TYPE when processing the definition of
18504          `S::T'.  We need to resolve it to the actual type before we
18505          try to define it.  */
18506       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
18507         {
18508           class_type = resolve_typename_type (TREE_TYPE (type),
18509                                               /*only_current_p=*/false);
18510           if (TREE_CODE (class_type) != TYPENAME_TYPE)
18511             type = TYPE_NAME (class_type);
18512           else
18513             {
18514               cp_parser_error (parser, "could not resolve typename type");
18515               type = error_mark_node;
18516             }
18517         }
18518
18519       if (maybe_process_partial_specialization (TREE_TYPE (type))
18520           == error_mark_node)
18521         {
18522           type = NULL_TREE;
18523           goto done;
18524         }
18525
18526       class_type = current_class_type;
18527       /* Enter the scope indicated by the nested-name-specifier.  */
18528       pushed_scope = push_scope (nested_name_specifier);
18529       /* Get the canonical version of this type.  */
18530       type = TYPE_MAIN_DECL (TREE_TYPE (type));
18531       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
18532           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
18533         {
18534           type = push_template_decl (type);
18535           if (type == error_mark_node)
18536             {
18537               type = NULL_TREE;
18538               goto done;
18539             }
18540         }
18541
18542       type = TREE_TYPE (type);
18543       *nested_name_specifier_p = true;
18544     }
18545   else      /* The name is not a nested name.  */
18546     {
18547       /* If the class was unnamed, create a dummy name.  */
18548       if (!id)
18549         id = make_anon_name ();
18550       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
18551                        parser->num_template_parameter_lists);
18552     }
18553
18554   /* Indicate whether this class was declared as a `class' or as a
18555      `struct'.  */
18556   if (TREE_CODE (type) == RECORD_TYPE)
18557     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
18558   cp_parser_check_class_key (class_key, type);
18559
18560   /* If this type was already complete, and we see another definition,
18561      that's an error.  */
18562   if (type != error_mark_node && COMPLETE_TYPE_P (type))
18563     {
18564       error_at (type_start_token->location, "redefinition of %q#T",
18565                 type);
18566       error_at (type_start_token->location, "previous definition of %q+#T",
18567                 type);
18568       type = NULL_TREE;
18569       goto done;
18570     }
18571   else if (type == error_mark_node)
18572     type = NULL_TREE;
18573
18574   /* We will have entered the scope containing the class; the names of
18575      base classes should be looked up in that context.  For example:
18576
18577        struct A { struct B {}; struct C; };
18578        struct A::C : B {};
18579
18580      is valid.  */
18581
18582   /* Get the list of base-classes, if there is one.  */
18583   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
18584     *bases = cp_parser_base_clause (parser);
18585
18586  done:
18587   /* Leave the scope given by the nested-name-specifier.  We will
18588      enter the class scope itself while processing the members.  */
18589   if (pushed_scope)
18590     pop_scope (pushed_scope);
18591
18592   if (invalid_explicit_specialization_p)
18593     {
18594       end_specialization ();
18595       --parser->num_template_parameter_lists;
18596     }
18597
18598   if (type)
18599     DECL_SOURCE_LOCATION (TYPE_NAME (type)) = type_start_token->location;
18600   *attributes_p = attributes;
18601   if (type && (virt_specifiers & VIRT_SPEC_FINAL))
18602     CLASSTYPE_FINAL (type) = 1;
18603  out:
18604   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
18605   return type;
18606 }
18607
18608 /* Parse a class-key.
18609
18610    class-key:
18611      class
18612      struct
18613      union
18614
18615    Returns the kind of class-key specified, or none_type to indicate
18616    error.  */
18617
18618 static enum tag_types
18619 cp_parser_class_key (cp_parser* parser)
18620 {
18621   cp_token *token;
18622   enum tag_types tag_type;
18623
18624   /* Look for the class-key.  */
18625   token = cp_parser_require (parser, CPP_KEYWORD, RT_CLASS_KEY);
18626   if (!token)
18627     return none_type;
18628
18629   /* Check to see if the TOKEN is a class-key.  */
18630   tag_type = cp_parser_token_is_class_key (token);
18631   if (!tag_type)
18632     cp_parser_error (parser, "expected class-key");
18633   return tag_type;
18634 }
18635
18636 /* Parse an (optional) member-specification.
18637
18638    member-specification:
18639      member-declaration member-specification [opt]
18640      access-specifier : member-specification [opt]  */
18641
18642 static void
18643 cp_parser_member_specification_opt (cp_parser* parser)
18644 {
18645   while (true)
18646     {
18647       cp_token *token;
18648       enum rid keyword;
18649
18650       /* Peek at the next token.  */
18651       token = cp_lexer_peek_token (parser->lexer);
18652       /* If it's a `}', or EOF then we've seen all the members.  */
18653       if (token->type == CPP_CLOSE_BRACE
18654           || token->type == CPP_EOF
18655           || token->type == CPP_PRAGMA_EOL)
18656         break;
18657
18658       /* See if this token is a keyword.  */
18659       keyword = token->keyword;
18660       switch (keyword)
18661         {
18662         case RID_PUBLIC:
18663         case RID_PROTECTED:
18664         case RID_PRIVATE:
18665           /* Consume the access-specifier.  */
18666           cp_lexer_consume_token (parser->lexer);
18667           /* Remember which access-specifier is active.  */
18668           current_access_specifier = token->u.value;
18669           /* Look for the `:'.  */
18670           cp_parser_require (parser, CPP_COLON, RT_COLON);
18671           break;
18672
18673         default:
18674           /* Accept #pragmas at class scope.  */
18675           if (token->type == CPP_PRAGMA)
18676             {
18677               cp_parser_pragma (parser, pragma_external);
18678               break;
18679             }
18680
18681           /* Otherwise, the next construction must be a
18682              member-declaration.  */
18683           cp_parser_member_declaration (parser);
18684         }
18685     }
18686 }
18687
18688 /* Parse a member-declaration.
18689
18690    member-declaration:
18691      decl-specifier-seq [opt] member-declarator-list [opt] ;
18692      function-definition ; [opt]
18693      :: [opt] nested-name-specifier template [opt] unqualified-id ;
18694      using-declaration
18695      template-declaration
18696      alias-declaration
18697
18698    member-declarator-list:
18699      member-declarator
18700      member-declarator-list , member-declarator
18701
18702    member-declarator:
18703      declarator pure-specifier [opt]
18704      declarator constant-initializer [opt]
18705      identifier [opt] : constant-expression
18706
18707    GNU Extensions:
18708
18709    member-declaration:
18710      __extension__ member-declaration
18711
18712    member-declarator:
18713      declarator attributes [opt] pure-specifier [opt]
18714      declarator attributes [opt] constant-initializer [opt]
18715      identifier [opt] attributes [opt] : constant-expression  
18716
18717    C++0x Extensions:
18718
18719    member-declaration:
18720      static_assert-declaration  */
18721
18722 static void
18723 cp_parser_member_declaration (cp_parser* parser)
18724 {
18725   cp_decl_specifier_seq decl_specifiers;
18726   tree prefix_attributes;
18727   tree decl;
18728   int declares_class_or_enum;
18729   bool friend_p;
18730   cp_token *token = NULL;
18731   cp_token *decl_spec_token_start = NULL;
18732   cp_token *initializer_token_start = NULL;
18733   int saved_pedantic;
18734   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
18735
18736   /* Check for the `__extension__' keyword.  */
18737   if (cp_parser_extension_opt (parser, &saved_pedantic))
18738     {
18739       /* Recurse.  */
18740       cp_parser_member_declaration (parser);
18741       /* Restore the old value of the PEDANTIC flag.  */
18742       pedantic = saved_pedantic;
18743
18744       return;
18745     }
18746
18747   /* Check for a template-declaration.  */
18748   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
18749     {
18750       /* An explicit specialization here is an error condition, and we
18751          expect the specialization handler to detect and report this.  */
18752       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
18753           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
18754         cp_parser_explicit_specialization (parser);
18755       else
18756         cp_parser_template_declaration (parser, /*member_p=*/true);
18757
18758       return;
18759     }
18760
18761   /* Check for a using-declaration.  */
18762   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
18763     {
18764       if (cxx_dialect < cxx0x)
18765         {
18766           /* Parse the using-declaration.  */
18767           cp_parser_using_declaration (parser,
18768                                        /*access_declaration_p=*/false);
18769           return;
18770         }
18771       else
18772         {
18773           tree decl;
18774           cp_parser_parse_tentatively (parser);
18775           decl = cp_parser_alias_declaration (parser);
18776           if (cp_parser_parse_definitely (parser))
18777             finish_member_declaration (decl);
18778           else
18779             cp_parser_using_declaration (parser,
18780                                          /*access_declaration_p=*/false);
18781           return;
18782         }
18783     }
18784
18785   /* Check for @defs.  */
18786   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
18787     {
18788       tree ivar, member;
18789       tree ivar_chains = cp_parser_objc_defs_expression (parser);
18790       ivar = ivar_chains;
18791       while (ivar)
18792         {
18793           member = ivar;
18794           ivar = TREE_CHAIN (member);
18795           TREE_CHAIN (member) = NULL_TREE;
18796           finish_member_declaration (member);
18797         }
18798       return;
18799     }
18800
18801   /* If the next token is `static_assert' we have a static assertion.  */
18802   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC_ASSERT))
18803     {
18804       cp_parser_static_assert (parser, /*member_p=*/true);
18805       return;
18806     }
18807
18808   parser->colon_corrects_to_scope_p = false;
18809
18810   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
18811     goto out;
18812
18813   /* Parse the decl-specifier-seq.  */
18814   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
18815   cp_parser_decl_specifier_seq (parser,
18816                                 CP_PARSER_FLAGS_OPTIONAL,
18817                                 &decl_specifiers,
18818                                 &declares_class_or_enum);
18819   prefix_attributes = decl_specifiers.attributes;
18820   decl_specifiers.attributes = NULL_TREE;
18821   /* Check for an invalid type-name.  */
18822   if (!decl_specifiers.any_type_specifiers_p
18823       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
18824     goto out;
18825   /* If there is no declarator, then the decl-specifier-seq should
18826      specify a type.  */
18827   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
18828     {
18829       /* If there was no decl-specifier-seq, and the next token is a
18830          `;', then we have something like:
18831
18832            struct S { ; };
18833
18834          [class.mem]
18835
18836          Each member-declaration shall declare at least one member
18837          name of the class.  */
18838       if (!decl_specifiers.any_specifiers_p)
18839         {
18840           cp_token *token = cp_lexer_peek_token (parser->lexer);
18841           if (!in_system_header_at (token->location))
18842             pedwarn (token->location, OPT_pedantic, "extra %<;%>");
18843         }
18844       else
18845         {
18846           tree type;
18847
18848           /* See if this declaration is a friend.  */
18849           friend_p = cp_parser_friend_p (&decl_specifiers);
18850           /* If there were decl-specifiers, check to see if there was
18851              a class-declaration.  */
18852           type = check_tag_decl (&decl_specifiers);
18853           /* Nested classes have already been added to the class, but
18854              a `friend' needs to be explicitly registered.  */
18855           if (friend_p)
18856             {
18857               /* If the `friend' keyword was present, the friend must
18858                  be introduced with a class-key.  */
18859                if (!declares_class_or_enum && cxx_dialect < cxx0x)
18860                  pedwarn (decl_spec_token_start->location, OPT_pedantic,
18861                           "in C++03 a class-key must be used "
18862                           "when declaring a friend");
18863                /* In this case:
18864
18865                     template <typename T> struct A {
18866                       friend struct A<T>::B;
18867                     };
18868
18869                   A<T>::B will be represented by a TYPENAME_TYPE, and
18870                   therefore not recognized by check_tag_decl.  */
18871                if (!type)
18872                  {
18873                    type = decl_specifiers.type;
18874                    if (type && TREE_CODE (type) == TYPE_DECL)
18875                      type = TREE_TYPE (type);
18876                  }
18877                if (!type || !TYPE_P (type))
18878                  error_at (decl_spec_token_start->location,
18879                            "friend declaration does not name a class or "
18880                            "function");
18881                else
18882                  make_friend_class (current_class_type, type,
18883                                     /*complain=*/true);
18884             }
18885           /* If there is no TYPE, an error message will already have
18886              been issued.  */
18887           else if (!type || type == error_mark_node)
18888             ;
18889           /* An anonymous aggregate has to be handled specially; such
18890              a declaration really declares a data member (with a
18891              particular type), as opposed to a nested class.  */
18892           else if (ANON_AGGR_TYPE_P (type))
18893             {
18894               /* Remove constructors and such from TYPE, now that we
18895                  know it is an anonymous aggregate.  */
18896               fixup_anonymous_aggr (type);
18897               /* And make the corresponding data member.  */
18898               decl = build_decl (decl_spec_token_start->location,
18899                                  FIELD_DECL, NULL_TREE, type);
18900               /* Add it to the class.  */
18901               finish_member_declaration (decl);
18902             }
18903           else
18904             cp_parser_check_access_in_redeclaration
18905                                               (TYPE_NAME (type),
18906                                                decl_spec_token_start->location);
18907         }
18908     }
18909   else
18910     {
18911       bool assume_semicolon = false;
18912
18913       /* See if these declarations will be friends.  */
18914       friend_p = cp_parser_friend_p (&decl_specifiers);
18915
18916       /* Keep going until we hit the `;' at the end of the
18917          declaration.  */
18918       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18919         {
18920           tree attributes = NULL_TREE;
18921           tree first_attribute;
18922
18923           /* Peek at the next token.  */
18924           token = cp_lexer_peek_token (parser->lexer);
18925
18926           /* Check for a bitfield declaration.  */
18927           if (token->type == CPP_COLON
18928               || (token->type == CPP_NAME
18929                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
18930                   == CPP_COLON))
18931             {
18932               tree identifier;
18933               tree width;
18934
18935               /* Get the name of the bitfield.  Note that we cannot just
18936                  check TOKEN here because it may have been invalidated by
18937                  the call to cp_lexer_peek_nth_token above.  */
18938               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
18939                 identifier = cp_parser_identifier (parser);
18940               else
18941                 identifier = NULL_TREE;
18942
18943               /* Consume the `:' token.  */
18944               cp_lexer_consume_token (parser->lexer);
18945               /* Get the width of the bitfield.  */
18946               width
18947                 = cp_parser_constant_expression (parser,
18948                                                  /*allow_non_constant=*/false,
18949                                                  NULL);
18950
18951               /* Look for attributes that apply to the bitfield.  */
18952               attributes = cp_parser_attributes_opt (parser);
18953               /* Remember which attributes are prefix attributes and
18954                  which are not.  */
18955               first_attribute = attributes;
18956               /* Combine the attributes.  */
18957               attributes = chainon (prefix_attributes, attributes);
18958
18959               /* Create the bitfield declaration.  */
18960               decl = grokbitfield (identifier
18961                                    ? make_id_declarator (NULL_TREE,
18962                                                          identifier,
18963                                                          sfk_none)
18964                                    : NULL,
18965                                    &decl_specifiers,
18966                                    width,
18967                                    attributes);
18968             }
18969           else
18970             {
18971               cp_declarator *declarator;
18972               tree initializer;
18973               tree asm_specification;
18974               int ctor_dtor_or_conv_p;
18975
18976               /* Parse the declarator.  */
18977               declarator
18978                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
18979                                         &ctor_dtor_or_conv_p,
18980                                         /*parenthesized_p=*/NULL,
18981                                         /*member_p=*/true);
18982
18983               /* If something went wrong parsing the declarator, make sure
18984                  that we at least consume some tokens.  */
18985               if (declarator == cp_error_declarator)
18986                 {
18987                   /* Skip to the end of the statement.  */
18988                   cp_parser_skip_to_end_of_statement (parser);
18989                   /* If the next token is not a semicolon, that is
18990                      probably because we just skipped over the body of
18991                      a function.  So, we consume a semicolon if
18992                      present, but do not issue an error message if it
18993                      is not present.  */
18994                   if (cp_lexer_next_token_is (parser->lexer,
18995                                               CPP_SEMICOLON))
18996                     cp_lexer_consume_token (parser->lexer);
18997                   goto out;
18998                 }
18999
19000               if (declares_class_or_enum & 2)
19001                 cp_parser_check_for_definition_in_return_type
19002                                             (declarator, decl_specifiers.type,
19003                                              decl_specifiers.type_location);
19004
19005               /* Look for an asm-specification.  */
19006               asm_specification = cp_parser_asm_specification_opt (parser);
19007               /* Look for attributes that apply to the declaration.  */
19008               attributes = cp_parser_attributes_opt (parser);
19009               /* Remember which attributes are prefix attributes and
19010                  which are not.  */
19011               first_attribute = attributes;
19012               /* Combine the attributes.  */
19013               attributes = chainon (prefix_attributes, attributes);
19014
19015               /* If it's an `=', then we have a constant-initializer or a
19016                  pure-specifier.  It is not correct to parse the
19017                  initializer before registering the member declaration
19018                  since the member declaration should be in scope while
19019                  its initializer is processed.  However, the rest of the
19020                  front end does not yet provide an interface that allows
19021                  us to handle this correctly.  */
19022               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
19023                 {
19024                   /* In [class.mem]:
19025
19026                      A pure-specifier shall be used only in the declaration of
19027                      a virtual function.
19028
19029                      A member-declarator can contain a constant-initializer
19030                      only if it declares a static member of integral or
19031                      enumeration type.
19032
19033                      Therefore, if the DECLARATOR is for a function, we look
19034                      for a pure-specifier; otherwise, we look for a
19035                      constant-initializer.  When we call `grokfield', it will
19036                      perform more stringent semantics checks.  */
19037                   initializer_token_start = cp_lexer_peek_token (parser->lexer);
19038                   if (function_declarator_p (declarator)
19039                       || (decl_specifiers.type
19040                           && TREE_CODE (decl_specifiers.type) == TYPE_DECL
19041                           && (TREE_CODE (TREE_TYPE (decl_specifiers.type))
19042                               == FUNCTION_TYPE)))
19043                     initializer = cp_parser_pure_specifier (parser);
19044                   else if (decl_specifiers.storage_class != sc_static)
19045                     initializer = cp_parser_save_nsdmi (parser);
19046                   else if (cxx_dialect >= cxx0x)
19047                     {
19048                       bool nonconst;
19049                       /* Don't require a constant rvalue in C++11, since we
19050                          might want a reference constant.  We'll enforce
19051                          constancy later.  */
19052                       cp_lexer_consume_token (parser->lexer);
19053                       /* Parse the initializer.  */
19054                       initializer = cp_parser_initializer_clause (parser,
19055                                                                   &nonconst);
19056                     }
19057                   else
19058                     /* Parse the initializer.  */
19059                     initializer = cp_parser_constant_initializer (parser);
19060                 }
19061               else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)
19062                        && !function_declarator_p (declarator))
19063                 {
19064                   bool x;
19065                   if (decl_specifiers.storage_class != sc_static)
19066                     initializer = cp_parser_save_nsdmi (parser);
19067                   else
19068                     initializer = cp_parser_initializer (parser, &x, &x);
19069                 }
19070               /* Otherwise, there is no initializer.  */
19071               else
19072                 initializer = NULL_TREE;
19073
19074               /* See if we are probably looking at a function
19075                  definition.  We are certainly not looking at a
19076                  member-declarator.  Calling `grokfield' has
19077                  side-effects, so we must not do it unless we are sure
19078                  that we are looking at a member-declarator.  */
19079               if (cp_parser_token_starts_function_definition_p
19080                   (cp_lexer_peek_token (parser->lexer)))
19081                 {
19082                   /* The grammar does not allow a pure-specifier to be
19083                      used when a member function is defined.  (It is
19084                      possible that this fact is an oversight in the
19085                      standard, since a pure function may be defined
19086                      outside of the class-specifier.  */
19087                   if (initializer)
19088                     error_at (initializer_token_start->location,
19089                               "pure-specifier on function-definition");
19090                   decl = cp_parser_save_member_function_body (parser,
19091                                                               &decl_specifiers,
19092                                                               declarator,
19093                                                               attributes);
19094                   /* If the member was not a friend, declare it here.  */
19095                   if (!friend_p)
19096                     finish_member_declaration (decl);
19097                   /* Peek at the next token.  */
19098                   token = cp_lexer_peek_token (parser->lexer);
19099                   /* If the next token is a semicolon, consume it.  */
19100                   if (token->type == CPP_SEMICOLON)
19101                     cp_lexer_consume_token (parser->lexer);
19102                   goto out;
19103                 }
19104               else
19105                 if (declarator->kind == cdk_function)
19106                   declarator->id_loc = token->location;
19107                 /* Create the declaration.  */
19108                 decl = grokfield (declarator, &decl_specifiers,
19109                                   initializer, /*init_const_expr_p=*/true,
19110                                   asm_specification,
19111                                   attributes);
19112             }
19113
19114           /* Reset PREFIX_ATTRIBUTES.  */
19115           while (attributes && TREE_CHAIN (attributes) != first_attribute)
19116             attributes = TREE_CHAIN (attributes);
19117           if (attributes)
19118             TREE_CHAIN (attributes) = NULL_TREE;
19119
19120           /* If there is any qualification still in effect, clear it
19121              now; we will be starting fresh with the next declarator.  */
19122           parser->scope = NULL_TREE;
19123           parser->qualifying_scope = NULL_TREE;
19124           parser->object_scope = NULL_TREE;
19125           /* If it's a `,', then there are more declarators.  */
19126           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
19127             cp_lexer_consume_token (parser->lexer);
19128           /* If the next token isn't a `;', then we have a parse error.  */
19129           else if (cp_lexer_next_token_is_not (parser->lexer,
19130                                                CPP_SEMICOLON))
19131             {
19132               /* The next token might be a ways away from where the
19133                  actual semicolon is missing.  Find the previous token
19134                  and use that for our error position.  */
19135               cp_token *token = cp_lexer_previous_token (parser->lexer);
19136               error_at (token->location,
19137                         "expected %<;%> at end of member declaration");
19138
19139               /* Assume that the user meant to provide a semicolon.  If
19140                  we were to cp_parser_skip_to_end_of_statement, we might
19141                  skip to a semicolon inside a member function definition
19142                  and issue nonsensical error messages.  */
19143               assume_semicolon = true;
19144             }
19145
19146           if (decl)
19147             {
19148               /* Add DECL to the list of members.  */
19149               if (!friend_p)
19150                 finish_member_declaration (decl);
19151
19152               if (TREE_CODE (decl) == FUNCTION_DECL)
19153                 cp_parser_save_default_args (parser, decl);
19154               else if (TREE_CODE (decl) == FIELD_DECL
19155                        && !DECL_C_BIT_FIELD (decl)
19156                        && DECL_INITIAL (decl))
19157                 /* Add DECL to the queue of NSDMI to be parsed later.  */
19158                 VEC_safe_push (tree, gc, unparsed_nsdmis, decl);
19159             }
19160
19161           if (assume_semicolon)
19162             goto out;
19163         }
19164     }
19165
19166   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
19167  out:
19168   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
19169 }
19170
19171 /* Parse a pure-specifier.
19172
19173    pure-specifier:
19174      = 0
19175
19176    Returns INTEGER_ZERO_NODE if a pure specifier is found.
19177    Otherwise, ERROR_MARK_NODE is returned.  */
19178
19179 static tree
19180 cp_parser_pure_specifier (cp_parser* parser)
19181 {
19182   cp_token *token;
19183
19184   /* Look for the `=' token.  */
19185   if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
19186     return error_mark_node;
19187   /* Look for the `0' token.  */
19188   token = cp_lexer_peek_token (parser->lexer);
19189
19190   if (token->type == CPP_EOF
19191       || token->type == CPP_PRAGMA_EOL)
19192     return error_mark_node;
19193
19194   cp_lexer_consume_token (parser->lexer);
19195
19196   /* Accept = default or = delete in c++0x mode.  */
19197   if (token->keyword == RID_DEFAULT
19198       || token->keyword == RID_DELETE)
19199     {
19200       maybe_warn_cpp0x (CPP0X_DEFAULTED_DELETED);
19201       return token->u.value;
19202     }
19203
19204   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
19205   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
19206     {
19207       cp_parser_error (parser,
19208                        "invalid pure specifier (only %<= 0%> is allowed)");
19209       cp_parser_skip_to_end_of_statement (parser);
19210       return error_mark_node;
19211     }
19212   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
19213     {
19214       error_at (token->location, "templates may not be %<virtual%>");
19215       return error_mark_node;
19216     }
19217
19218   return integer_zero_node;
19219 }
19220
19221 /* Parse a constant-initializer.
19222
19223    constant-initializer:
19224      = constant-expression
19225
19226    Returns a representation of the constant-expression.  */
19227
19228 static tree
19229 cp_parser_constant_initializer (cp_parser* parser)
19230 {
19231   /* Look for the `=' token.  */
19232   if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
19233     return error_mark_node;
19234
19235   /* It is invalid to write:
19236
19237        struct S { static const int i = { 7 }; };
19238
19239      */
19240   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
19241     {
19242       cp_parser_error (parser,
19243                        "a brace-enclosed initializer is not allowed here");
19244       /* Consume the opening brace.  */
19245       cp_lexer_consume_token (parser->lexer);
19246       /* Skip the initializer.  */
19247       cp_parser_skip_to_closing_brace (parser);
19248       /* Look for the trailing `}'.  */
19249       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
19250
19251       return error_mark_node;
19252     }
19253
19254   return cp_parser_constant_expression (parser,
19255                                         /*allow_non_constant=*/false,
19256                                         NULL);
19257 }
19258
19259 /* Derived classes [gram.class.derived] */
19260
19261 /* Parse a base-clause.
19262
19263    base-clause:
19264      : base-specifier-list
19265
19266    base-specifier-list:
19267      base-specifier ... [opt]
19268      base-specifier-list , base-specifier ... [opt]
19269
19270    Returns a TREE_LIST representing the base-classes, in the order in
19271    which they were declared.  The representation of each node is as
19272    described by cp_parser_base_specifier.
19273
19274    In the case that no bases are specified, this function will return
19275    NULL_TREE, not ERROR_MARK_NODE.  */
19276
19277 static tree
19278 cp_parser_base_clause (cp_parser* parser)
19279 {
19280   tree bases = NULL_TREE;
19281
19282   /* Look for the `:' that begins the list.  */
19283   cp_parser_require (parser, CPP_COLON, RT_COLON);
19284
19285   /* Scan the base-specifier-list.  */
19286   while (true)
19287     {
19288       cp_token *token;
19289       tree base;
19290       bool pack_expansion_p = false;
19291
19292       /* Look for the base-specifier.  */
19293       base = cp_parser_base_specifier (parser);
19294       /* Look for the (optional) ellipsis. */
19295       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
19296         {
19297           /* Consume the `...'. */
19298           cp_lexer_consume_token (parser->lexer);
19299
19300           pack_expansion_p = true;
19301         }
19302
19303       /* Add BASE to the front of the list.  */
19304       if (base && base != error_mark_node)
19305         {
19306           if (pack_expansion_p)
19307             /* Make this a pack expansion type. */
19308             TREE_VALUE (base) = make_pack_expansion (TREE_VALUE (base));
19309
19310           if (!check_for_bare_parameter_packs (TREE_VALUE (base)))
19311             {
19312               TREE_CHAIN (base) = bases;
19313               bases = base;
19314             }
19315         }
19316       /* Peek at the next token.  */
19317       token = cp_lexer_peek_token (parser->lexer);
19318       /* If it's not a comma, then the list is complete.  */
19319       if (token->type != CPP_COMMA)
19320         break;
19321       /* Consume the `,'.  */
19322       cp_lexer_consume_token (parser->lexer);
19323     }
19324
19325   /* PARSER->SCOPE may still be non-NULL at this point, if the last
19326      base class had a qualified name.  However, the next name that
19327      appears is certainly not qualified.  */
19328   parser->scope = NULL_TREE;
19329   parser->qualifying_scope = NULL_TREE;
19330   parser->object_scope = NULL_TREE;
19331
19332   return nreverse (bases);
19333 }
19334
19335 /* Parse a base-specifier.
19336
19337    base-specifier:
19338      :: [opt] nested-name-specifier [opt] class-name
19339      virtual access-specifier [opt] :: [opt] nested-name-specifier
19340        [opt] class-name
19341      access-specifier virtual [opt] :: [opt] nested-name-specifier
19342        [opt] class-name
19343
19344    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
19345    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
19346    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
19347    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
19348
19349 static tree
19350 cp_parser_base_specifier (cp_parser* parser)
19351 {
19352   cp_token *token;
19353   bool done = false;
19354   bool virtual_p = false;
19355   bool duplicate_virtual_error_issued_p = false;
19356   bool duplicate_access_error_issued_p = false;
19357   bool class_scope_p, template_p;
19358   tree access = access_default_node;
19359   tree type;
19360
19361   /* Process the optional `virtual' and `access-specifier'.  */
19362   while (!done)
19363     {
19364       /* Peek at the next token.  */
19365       token = cp_lexer_peek_token (parser->lexer);
19366       /* Process `virtual'.  */
19367       switch (token->keyword)
19368         {
19369         case RID_VIRTUAL:
19370           /* If `virtual' appears more than once, issue an error.  */
19371           if (virtual_p && !duplicate_virtual_error_issued_p)
19372             {
19373               cp_parser_error (parser,
19374                                "%<virtual%> specified more than once in base-specified");
19375               duplicate_virtual_error_issued_p = true;
19376             }
19377
19378           virtual_p = true;
19379
19380           /* Consume the `virtual' token.  */
19381           cp_lexer_consume_token (parser->lexer);
19382
19383           break;
19384
19385         case RID_PUBLIC:
19386         case RID_PROTECTED:
19387         case RID_PRIVATE:
19388           /* If more than one access specifier appears, issue an
19389              error.  */
19390           if (access != access_default_node
19391               && !duplicate_access_error_issued_p)
19392             {
19393               cp_parser_error (parser,
19394                                "more than one access specifier in base-specified");
19395               duplicate_access_error_issued_p = true;
19396             }
19397
19398           access = ridpointers[(int) token->keyword];
19399
19400           /* Consume the access-specifier.  */
19401           cp_lexer_consume_token (parser->lexer);
19402
19403           break;
19404
19405         default:
19406           done = true;
19407           break;
19408         }
19409     }
19410   /* It is not uncommon to see programs mechanically, erroneously, use
19411      the 'typename' keyword to denote (dependent) qualified types
19412      as base classes.  */
19413   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
19414     {
19415       token = cp_lexer_peek_token (parser->lexer);
19416       if (!processing_template_decl)
19417         error_at (token->location,
19418                   "keyword %<typename%> not allowed outside of templates");
19419       else
19420         error_at (token->location,
19421                   "keyword %<typename%> not allowed in this context "
19422                   "(the base class is implicitly a type)");
19423       cp_lexer_consume_token (parser->lexer);
19424     }
19425
19426   /* Look for the optional `::' operator.  */
19427   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
19428   /* Look for the nested-name-specifier.  The simplest way to
19429      implement:
19430
19431        [temp.res]
19432
19433        The keyword `typename' is not permitted in a base-specifier or
19434        mem-initializer; in these contexts a qualified name that
19435        depends on a template-parameter is implicitly assumed to be a
19436        type name.
19437
19438      is to pretend that we have seen the `typename' keyword at this
19439      point.  */
19440   cp_parser_nested_name_specifier_opt (parser,
19441                                        /*typename_keyword_p=*/true,
19442                                        /*check_dependency_p=*/true,
19443                                        typename_type,
19444                                        /*is_declaration=*/true);
19445   /* If the base class is given by a qualified name, assume that names
19446      we see are type names or templates, as appropriate.  */
19447   class_scope_p = (parser->scope && TYPE_P (parser->scope));
19448   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
19449
19450   if (!parser->scope
19451       && cp_lexer_next_token_is_decltype (parser->lexer))
19452     /* DR 950 allows decltype as a base-specifier.  */
19453     type = cp_parser_decltype (parser);
19454   else
19455     {
19456       /* Otherwise, look for the class-name.  */
19457       type = cp_parser_class_name (parser,
19458                                    class_scope_p,
19459                                    template_p,
19460                                    typename_type,
19461                                    /*check_dependency_p=*/true,
19462                                    /*class_head_p=*/false,
19463                                    /*is_declaration=*/true);
19464       type = TREE_TYPE (type);
19465     }
19466
19467   if (type == error_mark_node)
19468     return error_mark_node;
19469
19470   return finish_base_specifier (type, access, virtual_p);
19471 }
19472
19473 /* Exception handling [gram.exception] */
19474
19475 /* Parse an (optional) exception-specification.
19476
19477    exception-specification:
19478      throw ( type-id-list [opt] )
19479
19480    Returns a TREE_LIST representing the exception-specification.  The
19481    TREE_VALUE of each node is a type.  */
19482
19483 static tree
19484 cp_parser_exception_specification_opt (cp_parser* parser)
19485 {
19486   cp_token *token;
19487   tree type_id_list;
19488   const char *saved_message;
19489
19490   /* Peek at the next token.  */
19491   token = cp_lexer_peek_token (parser->lexer);
19492
19493   /* Is it a noexcept-specification?  */
19494   if (cp_parser_is_keyword (token, RID_NOEXCEPT))
19495     {
19496       tree expr;
19497       cp_lexer_consume_token (parser->lexer);
19498
19499       if (cp_lexer_peek_token (parser->lexer)->type == CPP_OPEN_PAREN)
19500         {
19501           cp_lexer_consume_token (parser->lexer);
19502
19503           /* Types may not be defined in an exception-specification.  */
19504           saved_message = parser->type_definition_forbidden_message;
19505           parser->type_definition_forbidden_message
19506             = G_("types may not be defined in an exception-specification");
19507
19508           expr = cp_parser_constant_expression (parser, false, NULL);
19509
19510           /* Restore the saved message.  */
19511           parser->type_definition_forbidden_message = saved_message;
19512
19513           cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19514         }
19515       else
19516         expr = boolean_true_node;
19517
19518       return build_noexcept_spec (expr, tf_warning_or_error);
19519     }
19520
19521   /* If it's not `throw', then there's no exception-specification.  */
19522   if (!cp_parser_is_keyword (token, RID_THROW))
19523     return NULL_TREE;
19524
19525 #if 0
19526   /* Enable this once a lot of code has transitioned to noexcept?  */
19527   if (cxx_dialect == cxx0x && !in_system_header)
19528     warning (OPT_Wdeprecated, "dynamic exception specifications are "
19529              "deprecated in C++0x; use %<noexcept%> instead");
19530 #endif
19531
19532   /* Consume the `throw'.  */
19533   cp_lexer_consume_token (parser->lexer);
19534
19535   /* Look for the `('.  */
19536   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19537
19538   /* Peek at the next token.  */
19539   token = cp_lexer_peek_token (parser->lexer);
19540   /* If it's not a `)', then there is a type-id-list.  */
19541   if (token->type != CPP_CLOSE_PAREN)
19542     {
19543       /* Types may not be defined in an exception-specification.  */
19544       saved_message = parser->type_definition_forbidden_message;
19545       parser->type_definition_forbidden_message
19546         = G_("types may not be defined in an exception-specification");
19547       /* Parse the type-id-list.  */
19548       type_id_list = cp_parser_type_id_list (parser);
19549       /* Restore the saved message.  */
19550       parser->type_definition_forbidden_message = saved_message;
19551     }
19552   else
19553     type_id_list = empty_except_spec;
19554
19555   /* Look for the `)'.  */
19556   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19557
19558   return type_id_list;
19559 }
19560
19561 /* Parse an (optional) type-id-list.
19562
19563    type-id-list:
19564      type-id ... [opt]
19565      type-id-list , type-id ... [opt]
19566
19567    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
19568    in the order that the types were presented.  */
19569
19570 static tree
19571 cp_parser_type_id_list (cp_parser* parser)
19572 {
19573   tree types = NULL_TREE;
19574
19575   while (true)
19576     {
19577       cp_token *token;
19578       tree type;
19579
19580       /* Get the next type-id.  */
19581       type = cp_parser_type_id (parser);
19582       /* Parse the optional ellipsis. */
19583       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
19584         {
19585           /* Consume the `...'. */
19586           cp_lexer_consume_token (parser->lexer);
19587
19588           /* Turn the type into a pack expansion expression. */
19589           type = make_pack_expansion (type);
19590         }
19591       /* Add it to the list.  */
19592       types = add_exception_specifier (types, type, /*complain=*/1);
19593       /* Peek at the next token.  */
19594       token = cp_lexer_peek_token (parser->lexer);
19595       /* If it is not a `,', we are done.  */
19596       if (token->type != CPP_COMMA)
19597         break;
19598       /* Consume the `,'.  */
19599       cp_lexer_consume_token (parser->lexer);
19600     }
19601
19602   return nreverse (types);
19603 }
19604
19605 /* Parse a try-block.
19606
19607    try-block:
19608      try compound-statement handler-seq  */
19609
19610 static tree
19611 cp_parser_try_block (cp_parser* parser)
19612 {
19613   tree try_block;
19614
19615   cp_parser_require_keyword (parser, RID_TRY, RT_TRY);
19616   try_block = begin_try_block ();
19617   cp_parser_compound_statement (parser, NULL, true, false);
19618   finish_try_block (try_block);
19619   cp_parser_handler_seq (parser);
19620   finish_handler_sequence (try_block);
19621
19622   return try_block;
19623 }
19624
19625 /* Parse a function-try-block.
19626
19627    function-try-block:
19628      try ctor-initializer [opt] function-body handler-seq  */
19629
19630 static bool
19631 cp_parser_function_try_block (cp_parser* parser)
19632 {
19633   tree compound_stmt;
19634   tree try_block;
19635   bool ctor_initializer_p;
19636
19637   /* Look for the `try' keyword.  */
19638   if (!cp_parser_require_keyword (parser, RID_TRY, RT_TRY))
19639     return false;
19640   /* Let the rest of the front end know where we are.  */
19641   try_block = begin_function_try_block (&compound_stmt);
19642   /* Parse the function-body.  */
19643   ctor_initializer_p
19644     = cp_parser_ctor_initializer_opt_and_function_body (parser);
19645   /* We're done with the `try' part.  */
19646   finish_function_try_block (try_block);
19647   /* Parse the handlers.  */
19648   cp_parser_handler_seq (parser);
19649   /* We're done with the handlers.  */
19650   finish_function_handler_sequence (try_block, compound_stmt);
19651
19652   return ctor_initializer_p;
19653 }
19654
19655 /* Parse a handler-seq.
19656
19657    handler-seq:
19658      handler handler-seq [opt]  */
19659
19660 static void
19661 cp_parser_handler_seq (cp_parser* parser)
19662 {
19663   while (true)
19664     {
19665       cp_token *token;
19666
19667       /* Parse the handler.  */
19668       cp_parser_handler (parser);
19669       /* Peek at the next token.  */
19670       token = cp_lexer_peek_token (parser->lexer);
19671       /* If it's not `catch' then there are no more handlers.  */
19672       if (!cp_parser_is_keyword (token, RID_CATCH))
19673         break;
19674     }
19675 }
19676
19677 /* Parse a handler.
19678
19679    handler:
19680      catch ( exception-declaration ) compound-statement  */
19681
19682 static void
19683 cp_parser_handler (cp_parser* parser)
19684 {
19685   tree handler;
19686   tree declaration;
19687
19688   cp_parser_require_keyword (parser, RID_CATCH, RT_CATCH);
19689   handler = begin_handler ();
19690   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19691   declaration = cp_parser_exception_declaration (parser);
19692   finish_handler_parms (declaration, handler);
19693   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19694   cp_parser_compound_statement (parser, NULL, false, false);
19695   finish_handler (handler);
19696 }
19697
19698 /* Parse an exception-declaration.
19699
19700    exception-declaration:
19701      type-specifier-seq declarator
19702      type-specifier-seq abstract-declarator
19703      type-specifier-seq
19704      ...
19705
19706    Returns a VAR_DECL for the declaration, or NULL_TREE if the
19707    ellipsis variant is used.  */
19708
19709 static tree
19710 cp_parser_exception_declaration (cp_parser* parser)
19711 {
19712   cp_decl_specifier_seq type_specifiers;
19713   cp_declarator *declarator;
19714   const char *saved_message;
19715
19716   /* If it's an ellipsis, it's easy to handle.  */
19717   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
19718     {
19719       /* Consume the `...' token.  */
19720       cp_lexer_consume_token (parser->lexer);
19721       return NULL_TREE;
19722     }
19723
19724   /* Types may not be defined in exception-declarations.  */
19725   saved_message = parser->type_definition_forbidden_message;
19726   parser->type_definition_forbidden_message
19727     = G_("types may not be defined in exception-declarations");
19728
19729   /* Parse the type-specifier-seq.  */
19730   cp_parser_type_specifier_seq (parser, /*is_declaration=*/true,
19731                                 /*is_trailing_return=*/false,
19732                                 &type_specifiers);
19733   /* If it's a `)', then there is no declarator.  */
19734   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
19735     declarator = NULL;
19736   else
19737     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
19738                                        /*ctor_dtor_or_conv_p=*/NULL,
19739                                        /*parenthesized_p=*/NULL,
19740                                        /*member_p=*/false);
19741
19742   /* Restore the saved message.  */
19743   parser->type_definition_forbidden_message = saved_message;
19744
19745   if (!type_specifiers.any_specifiers_p)
19746     return error_mark_node;
19747
19748   return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
19749 }
19750
19751 /* Parse a throw-expression.
19752
19753    throw-expression:
19754      throw assignment-expression [opt]
19755
19756    Returns a THROW_EXPR representing the throw-expression.  */
19757
19758 static tree
19759 cp_parser_throw_expression (cp_parser* parser)
19760 {
19761   tree expression;
19762   cp_token* token;
19763
19764   cp_parser_require_keyword (parser, RID_THROW, RT_THROW);
19765   token = cp_lexer_peek_token (parser->lexer);
19766   /* Figure out whether or not there is an assignment-expression
19767      following the "throw" keyword.  */
19768   if (token->type == CPP_COMMA
19769       || token->type == CPP_SEMICOLON
19770       || token->type == CPP_CLOSE_PAREN
19771       || token->type == CPP_CLOSE_SQUARE
19772       || token->type == CPP_CLOSE_BRACE
19773       || token->type == CPP_COLON)
19774     expression = NULL_TREE;
19775   else
19776     expression = cp_parser_assignment_expression (parser,
19777                                                   /*cast_p=*/false, NULL);
19778
19779   return build_throw (expression);
19780 }
19781
19782 /* GNU Extensions */
19783
19784 /* Parse an (optional) asm-specification.
19785
19786    asm-specification:
19787      asm ( string-literal )
19788
19789    If the asm-specification is present, returns a STRING_CST
19790    corresponding to the string-literal.  Otherwise, returns
19791    NULL_TREE.  */
19792
19793 static tree
19794 cp_parser_asm_specification_opt (cp_parser* parser)
19795 {
19796   cp_token *token;
19797   tree asm_specification;
19798
19799   /* Peek at the next token.  */
19800   token = cp_lexer_peek_token (parser->lexer);
19801   /* If the next token isn't the `asm' keyword, then there's no
19802      asm-specification.  */
19803   if (!cp_parser_is_keyword (token, RID_ASM))
19804     return NULL_TREE;
19805
19806   /* Consume the `asm' token.  */
19807   cp_lexer_consume_token (parser->lexer);
19808   /* Look for the `('.  */
19809   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19810
19811   /* Look for the string-literal.  */
19812   asm_specification = cp_parser_string_literal (parser, false, false);
19813
19814   /* Look for the `)'.  */
19815   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19816
19817   return asm_specification;
19818 }
19819
19820 /* Parse an asm-operand-list.
19821
19822    asm-operand-list:
19823      asm-operand
19824      asm-operand-list , asm-operand
19825
19826    asm-operand:
19827      string-literal ( expression )
19828      [ string-literal ] string-literal ( expression )
19829
19830    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
19831    each node is the expression.  The TREE_PURPOSE is itself a
19832    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
19833    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
19834    is a STRING_CST for the string literal before the parenthesis. Returns
19835    ERROR_MARK_NODE if any of the operands are invalid.  */
19836
19837 static tree
19838 cp_parser_asm_operand_list (cp_parser* parser)
19839 {
19840   tree asm_operands = NULL_TREE;
19841   bool invalid_operands = false;
19842
19843   while (true)
19844     {
19845       tree string_literal;
19846       tree expression;
19847       tree name;
19848
19849       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
19850         {
19851           /* Consume the `[' token.  */
19852           cp_lexer_consume_token (parser->lexer);
19853           /* Read the operand name.  */
19854           name = cp_parser_identifier (parser);
19855           if (name != error_mark_node)
19856             name = build_string (IDENTIFIER_LENGTH (name),
19857                                  IDENTIFIER_POINTER (name));
19858           /* Look for the closing `]'.  */
19859           cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
19860         }
19861       else
19862         name = NULL_TREE;
19863       /* Look for the string-literal.  */
19864       string_literal = cp_parser_string_literal (parser, false, false);
19865
19866       /* Look for the `('.  */
19867       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19868       /* Parse the expression.  */
19869       expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
19870       /* Look for the `)'.  */
19871       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
19872
19873       if (name == error_mark_node 
19874           || string_literal == error_mark_node 
19875           || expression == error_mark_node)
19876         invalid_operands = true;
19877
19878       /* Add this operand to the list.  */
19879       asm_operands = tree_cons (build_tree_list (name, string_literal),
19880                                 expression,
19881                                 asm_operands);
19882       /* If the next token is not a `,', there are no more
19883          operands.  */
19884       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
19885         break;
19886       /* Consume the `,'.  */
19887       cp_lexer_consume_token (parser->lexer);
19888     }
19889
19890   return invalid_operands ? error_mark_node : nreverse (asm_operands);
19891 }
19892
19893 /* Parse an asm-clobber-list.
19894
19895    asm-clobber-list:
19896      string-literal
19897      asm-clobber-list , string-literal
19898
19899    Returns a TREE_LIST, indicating the clobbers in the order that they
19900    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
19901
19902 static tree
19903 cp_parser_asm_clobber_list (cp_parser* parser)
19904 {
19905   tree clobbers = NULL_TREE;
19906
19907   while (true)
19908     {
19909       tree string_literal;
19910
19911       /* Look for the string literal.  */
19912       string_literal = cp_parser_string_literal (parser, false, false);
19913       /* Add it to the list.  */
19914       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
19915       /* If the next token is not a `,', then the list is
19916          complete.  */
19917       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
19918         break;
19919       /* Consume the `,' token.  */
19920       cp_lexer_consume_token (parser->lexer);
19921     }
19922
19923   return clobbers;
19924 }
19925
19926 /* Parse an asm-label-list.
19927
19928    asm-label-list:
19929      identifier
19930      asm-label-list , identifier
19931
19932    Returns a TREE_LIST, indicating the labels in the order that they
19933    appeared.  The TREE_VALUE of each node is a label.  */
19934
19935 static tree
19936 cp_parser_asm_label_list (cp_parser* parser)
19937 {
19938   tree labels = NULL_TREE;
19939
19940   while (true)
19941     {
19942       tree identifier, label, name;
19943
19944       /* Look for the identifier.  */
19945       identifier = cp_parser_identifier (parser);
19946       if (!error_operand_p (identifier))
19947         {
19948           label = lookup_label (identifier);
19949           if (TREE_CODE (label) == LABEL_DECL)
19950             {
19951               TREE_USED (label) = 1;
19952               check_goto (label);
19953               name = build_string (IDENTIFIER_LENGTH (identifier),
19954                                    IDENTIFIER_POINTER (identifier));
19955               labels = tree_cons (name, label, labels);
19956             }
19957         }
19958       /* If the next token is not a `,', then the list is
19959          complete.  */
19960       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
19961         break;
19962       /* Consume the `,' token.  */
19963       cp_lexer_consume_token (parser->lexer);
19964     }
19965
19966   return nreverse (labels);
19967 }
19968
19969 /* Parse an (optional) series of attributes.
19970
19971    attributes:
19972      attributes attribute
19973
19974    attribute:
19975      __attribute__ (( attribute-list [opt] ))
19976
19977    The return value is as for cp_parser_attribute_list.  */
19978
19979 static tree
19980 cp_parser_attributes_opt (cp_parser* parser)
19981 {
19982   tree attributes = NULL_TREE;
19983
19984   while (true)
19985     {
19986       cp_token *token;
19987       tree attribute_list;
19988
19989       /* Peek at the next token.  */
19990       token = cp_lexer_peek_token (parser->lexer);
19991       /* If it's not `__attribute__', then we're done.  */
19992       if (token->keyword != RID_ATTRIBUTE)
19993         break;
19994
19995       /* Consume the `__attribute__' keyword.  */
19996       cp_lexer_consume_token (parser->lexer);
19997       /* Look for the two `(' tokens.  */
19998       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
19999       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
20000
20001       /* Peek at the next token.  */
20002       token = cp_lexer_peek_token (parser->lexer);
20003       if (token->type != CPP_CLOSE_PAREN)
20004         /* Parse the attribute-list.  */
20005         attribute_list = cp_parser_attribute_list (parser);
20006       else
20007         /* If the next token is a `)', then there is no attribute
20008            list.  */
20009         attribute_list = NULL;
20010
20011       /* Look for the two `)' tokens.  */
20012       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
20013       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
20014
20015       /* Add these new attributes to the list.  */
20016       attributes = chainon (attributes, attribute_list);
20017     }
20018
20019   return attributes;
20020 }
20021
20022 /* Parse an attribute-list.
20023
20024    attribute-list:
20025      attribute
20026      attribute-list , attribute
20027
20028    attribute:
20029      identifier
20030      identifier ( identifier )
20031      identifier ( identifier , expression-list )
20032      identifier ( expression-list )
20033
20034    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
20035    to an attribute.  The TREE_PURPOSE of each node is the identifier
20036    indicating which attribute is in use.  The TREE_VALUE represents
20037    the arguments, if any.  */
20038
20039 static tree
20040 cp_parser_attribute_list (cp_parser* parser)
20041 {
20042   tree attribute_list = NULL_TREE;
20043   bool save_translate_strings_p = parser->translate_strings_p;
20044
20045   parser->translate_strings_p = false;
20046   while (true)
20047     {
20048       cp_token *token;
20049       tree identifier;
20050       tree attribute;
20051
20052       /* Look for the identifier.  We also allow keywords here; for
20053          example `__attribute__ ((const))' is legal.  */
20054       token = cp_lexer_peek_token (parser->lexer);
20055       if (token->type == CPP_NAME
20056           || token->type == CPP_KEYWORD)
20057         {
20058           tree arguments = NULL_TREE;
20059
20060           /* Consume the token.  */
20061           token = cp_lexer_consume_token (parser->lexer);
20062
20063           /* Save away the identifier that indicates which attribute
20064              this is.  */
20065           identifier = (token->type == CPP_KEYWORD) 
20066             /* For keywords, use the canonical spelling, not the
20067                parsed identifier.  */
20068             ? ridpointers[(int) token->keyword]
20069             : token->u.value;
20070           
20071           attribute = build_tree_list (identifier, NULL_TREE);
20072
20073           /* Peek at the next token.  */
20074           token = cp_lexer_peek_token (parser->lexer);
20075           /* If it's an `(', then parse the attribute arguments.  */
20076           if (token->type == CPP_OPEN_PAREN)
20077             {
20078               VEC(tree,gc) *vec;
20079               int attr_flag = (attribute_takes_identifier_p (identifier)
20080                                ? id_attr : normal_attr);
20081               vec = cp_parser_parenthesized_expression_list
20082                     (parser, attr_flag, /*cast_p=*/false,
20083                      /*allow_expansion_p=*/false,
20084                      /*non_constant_p=*/NULL);
20085               if (vec == NULL)
20086                 arguments = error_mark_node;
20087               else
20088                 {
20089                   arguments = build_tree_list_vec (vec);
20090                   release_tree_vector (vec);
20091                 }
20092               /* Save the arguments away.  */
20093               TREE_VALUE (attribute) = arguments;
20094             }
20095
20096           if (arguments != error_mark_node)
20097             {
20098               /* Add this attribute to the list.  */
20099               TREE_CHAIN (attribute) = attribute_list;
20100               attribute_list = attribute;
20101             }
20102
20103           token = cp_lexer_peek_token (parser->lexer);
20104         }
20105       /* Now, look for more attributes.  If the next token isn't a
20106          `,', we're done.  */
20107       if (token->type != CPP_COMMA)
20108         break;
20109
20110       /* Consume the comma and keep going.  */
20111       cp_lexer_consume_token (parser->lexer);
20112     }
20113   parser->translate_strings_p = save_translate_strings_p;
20114
20115   /* We built up the list in reverse order.  */
20116   return nreverse (attribute_list);
20117 }
20118
20119 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
20120    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
20121    current value of the PEDANTIC flag, regardless of whether or not
20122    the `__extension__' keyword is present.  The caller is responsible
20123    for restoring the value of the PEDANTIC flag.  */
20124
20125 static bool
20126 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
20127 {
20128   /* Save the old value of the PEDANTIC flag.  */
20129   *saved_pedantic = pedantic;
20130
20131   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
20132     {
20133       /* Consume the `__extension__' token.  */
20134       cp_lexer_consume_token (parser->lexer);
20135       /* We're not being pedantic while the `__extension__' keyword is
20136          in effect.  */
20137       pedantic = 0;
20138
20139       return true;
20140     }
20141
20142   return false;
20143 }
20144
20145 /* Parse a label declaration.
20146
20147    label-declaration:
20148      __label__ label-declarator-seq ;
20149
20150    label-declarator-seq:
20151      identifier , label-declarator-seq
20152      identifier  */
20153
20154 static void
20155 cp_parser_label_declaration (cp_parser* parser)
20156 {
20157   /* Look for the `__label__' keyword.  */
20158   cp_parser_require_keyword (parser, RID_LABEL, RT_LABEL);
20159
20160   while (true)
20161     {
20162       tree identifier;
20163
20164       /* Look for an identifier.  */
20165       identifier = cp_parser_identifier (parser);
20166       /* If we failed, stop.  */
20167       if (identifier == error_mark_node)
20168         break;
20169       /* Declare it as a label.  */
20170       finish_label_decl (identifier);
20171       /* If the next token is a `;', stop.  */
20172       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
20173         break;
20174       /* Look for the `,' separating the label declarations.  */
20175       cp_parser_require (parser, CPP_COMMA, RT_COMMA);
20176     }
20177
20178   /* Look for the final `;'.  */
20179   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
20180 }
20181
20182 /* Support Functions */
20183
20184 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
20185    NAME should have one of the representations used for an
20186    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
20187    is returned.  If PARSER->SCOPE is a dependent type, then a
20188    SCOPE_REF is returned.
20189
20190    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
20191    returned; the name was already resolved when the TEMPLATE_ID_EXPR
20192    was formed.  Abstractly, such entities should not be passed to this
20193    function, because they do not need to be looked up, but it is
20194    simpler to check for this special case here, rather than at the
20195    call-sites.
20196
20197    In cases not explicitly covered above, this function returns a
20198    DECL, OVERLOAD, or baselink representing the result of the lookup.
20199    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
20200    is returned.
20201
20202    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
20203    (e.g., "struct") that was used.  In that case bindings that do not
20204    refer to types are ignored.
20205
20206    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
20207    ignored.
20208
20209    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
20210    are ignored.
20211
20212    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
20213    types.
20214
20215    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
20216    TREE_LIST of candidates if name-lookup results in an ambiguity, and
20217    NULL_TREE otherwise.  */
20218
20219 static tree
20220 cp_parser_lookup_name (cp_parser *parser, tree name,
20221                        enum tag_types tag_type,
20222                        bool is_template,
20223                        bool is_namespace,
20224                        bool check_dependency,
20225                        tree *ambiguous_decls,
20226                        location_t name_location)
20227 {
20228   int flags = 0;
20229   tree decl;
20230   tree object_type = parser->context->object_type;
20231
20232   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
20233     flags |= LOOKUP_COMPLAIN;
20234
20235   /* Assume that the lookup will be unambiguous.  */
20236   if (ambiguous_decls)
20237     *ambiguous_decls = NULL_TREE;
20238
20239   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
20240      no longer valid.  Note that if we are parsing tentatively, and
20241      the parse fails, OBJECT_TYPE will be automatically restored.  */
20242   parser->context->object_type = NULL_TREE;
20243
20244   if (name == error_mark_node)
20245     return error_mark_node;
20246
20247   /* A template-id has already been resolved; there is no lookup to
20248      do.  */
20249   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
20250     return name;
20251   if (BASELINK_P (name))
20252     {
20253       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
20254                   == TEMPLATE_ID_EXPR);
20255       return name;
20256     }
20257
20258   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
20259      it should already have been checked to make sure that the name
20260      used matches the type being destroyed.  */
20261   if (TREE_CODE (name) == BIT_NOT_EXPR)
20262     {
20263       tree type;
20264
20265       /* Figure out to which type this destructor applies.  */
20266       if (parser->scope)
20267         type = parser->scope;
20268       else if (object_type)
20269         type = object_type;
20270       else
20271         type = current_class_type;
20272       /* If that's not a class type, there is no destructor.  */
20273       if (!type || !CLASS_TYPE_P (type))
20274         return error_mark_node;
20275       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
20276         lazily_declare_fn (sfk_destructor, type);
20277       if (!CLASSTYPE_DESTRUCTORS (type))
20278           return error_mark_node;
20279       /* If it was a class type, return the destructor.  */
20280       return CLASSTYPE_DESTRUCTORS (type);
20281     }
20282
20283   /* By this point, the NAME should be an ordinary identifier.  If
20284      the id-expression was a qualified name, the qualifying scope is
20285      stored in PARSER->SCOPE at this point.  */
20286   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
20287
20288   /* Perform the lookup.  */
20289   if (parser->scope)
20290     {
20291       bool dependent_p;
20292
20293       if (parser->scope == error_mark_node)
20294         return error_mark_node;
20295
20296       /* If the SCOPE is dependent, the lookup must be deferred until
20297          the template is instantiated -- unless we are explicitly
20298          looking up names in uninstantiated templates.  Even then, we
20299          cannot look up the name if the scope is not a class type; it
20300          might, for example, be a template type parameter.  */
20301       dependent_p = (TYPE_P (parser->scope)
20302                      && dependent_scope_p (parser->scope));
20303       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
20304           && dependent_p)
20305         /* Defer lookup.  */
20306         decl = error_mark_node;
20307       else
20308         {
20309           tree pushed_scope = NULL_TREE;
20310
20311           /* If PARSER->SCOPE is a dependent type, then it must be a
20312              class type, and we must not be checking dependencies;
20313              otherwise, we would have processed this lookup above.  So
20314              that PARSER->SCOPE is not considered a dependent base by
20315              lookup_member, we must enter the scope here.  */
20316           if (dependent_p)
20317             pushed_scope = push_scope (parser->scope);
20318
20319           /* If the PARSER->SCOPE is a template specialization, it
20320              may be instantiated during name lookup.  In that case,
20321              errors may be issued.  Even if we rollback the current
20322              tentative parse, those errors are valid.  */
20323           decl = lookup_qualified_name (parser->scope, name,
20324                                         tag_type != none_type,
20325                                         /*complain=*/true);
20326
20327           /* 3.4.3.1: In a lookup in which the constructor is an acceptable
20328              lookup result and the nested-name-specifier nominates a class C:
20329                * if the name specified after the nested-name-specifier, when
20330                looked up in C, is the injected-class-name of C (Clause 9), or
20331                * if the name specified after the nested-name-specifier is the
20332                same as the identifier or the simple-template-id's template-
20333                name in the last component of the nested-name-specifier,
20334              the name is instead considered to name the constructor of
20335              class C. [ Note: for example, the constructor is not an
20336              acceptable lookup result in an elaborated-type-specifier so
20337              the constructor would not be used in place of the
20338              injected-class-name. --end note ] Such a constructor name
20339              shall be used only in the declarator-id of a declaration that
20340              names a constructor or in a using-declaration.  */
20341           if (tag_type == none_type
20342               && DECL_SELF_REFERENCE_P (decl)
20343               && same_type_p (DECL_CONTEXT (decl), parser->scope))
20344             decl = lookup_qualified_name (parser->scope, ctor_identifier,
20345                                           tag_type != none_type,
20346                                           /*complain=*/true);
20347
20348           /* If we have a single function from a using decl, pull it out.  */
20349           if (TREE_CODE (decl) == OVERLOAD
20350               && !really_overloaded_fn (decl))
20351             decl = OVL_FUNCTION (decl);
20352
20353           if (pushed_scope)
20354             pop_scope (pushed_scope);
20355         }
20356
20357       /* If the scope is a dependent type and either we deferred lookup or
20358          we did lookup but didn't find the name, rememeber the name.  */
20359       if (decl == error_mark_node && TYPE_P (parser->scope)
20360           && dependent_type_p (parser->scope))
20361         {
20362           if (tag_type)
20363             {
20364               tree type;
20365
20366               /* The resolution to Core Issue 180 says that `struct
20367                  A::B' should be considered a type-name, even if `A'
20368                  is dependent.  */
20369               type = make_typename_type (parser->scope, name, tag_type,
20370                                          /*complain=*/tf_error);
20371               decl = TYPE_NAME (type);
20372             }
20373           else if (is_template
20374                    && (cp_parser_next_token_ends_template_argument_p (parser)
20375                        || cp_lexer_next_token_is (parser->lexer,
20376                                                   CPP_CLOSE_PAREN)))
20377             decl = make_unbound_class_template (parser->scope,
20378                                                 name, NULL_TREE,
20379                                                 /*complain=*/tf_error);
20380           else
20381             decl = build_qualified_name (/*type=*/NULL_TREE,
20382                                          parser->scope, name,
20383                                          is_template);
20384         }
20385       parser->qualifying_scope = parser->scope;
20386       parser->object_scope = NULL_TREE;
20387     }
20388   else if (object_type)
20389     {
20390       tree object_decl = NULL_TREE;
20391       /* Look up the name in the scope of the OBJECT_TYPE, unless the
20392          OBJECT_TYPE is not a class.  */
20393       if (CLASS_TYPE_P (object_type))
20394         /* If the OBJECT_TYPE is a template specialization, it may
20395            be instantiated during name lookup.  In that case, errors
20396            may be issued.  Even if we rollback the current tentative
20397            parse, those errors are valid.  */
20398         object_decl = lookup_member (object_type,
20399                                      name,
20400                                      /*protect=*/0,
20401                                      tag_type != none_type);
20402       /* Look it up in the enclosing context, too.  */
20403       decl = lookup_name_real (name, tag_type != none_type,
20404                                /*nonclass=*/0,
20405                                /*block_p=*/true, is_namespace, flags);
20406       parser->object_scope = object_type;
20407       parser->qualifying_scope = NULL_TREE;
20408       if (object_decl)
20409         decl = object_decl;
20410     }
20411   else
20412     {
20413       decl = lookup_name_real (name, tag_type != none_type,
20414                                /*nonclass=*/0,
20415                                /*block_p=*/true, is_namespace, flags);
20416       parser->qualifying_scope = NULL_TREE;
20417       parser->object_scope = NULL_TREE;
20418     }
20419
20420   /* If the lookup failed, let our caller know.  */
20421   if (!decl || decl == error_mark_node)
20422     return error_mark_node;
20423
20424   /* Pull out the template from an injected-class-name (or multiple).  */
20425   if (is_template)
20426     decl = maybe_get_template_decl_from_type_decl (decl);
20427
20428   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
20429   if (TREE_CODE (decl) == TREE_LIST)
20430     {
20431       if (ambiguous_decls)
20432         *ambiguous_decls = decl;
20433       /* The error message we have to print is too complicated for
20434          cp_parser_error, so we incorporate its actions directly.  */
20435       if (!cp_parser_simulate_error (parser))
20436         {
20437           error_at (name_location, "reference to %qD is ambiguous",
20438                     name);
20439           print_candidates (decl);
20440         }
20441       return error_mark_node;
20442     }
20443
20444   gcc_assert (DECL_P (decl)
20445               || TREE_CODE (decl) == OVERLOAD
20446               || TREE_CODE (decl) == SCOPE_REF
20447               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
20448               || BASELINK_P (decl));
20449
20450   /* If we have resolved the name of a member declaration, check to
20451      see if the declaration is accessible.  When the name resolves to
20452      set of overloaded functions, accessibility is checked when
20453      overload resolution is done.
20454
20455      During an explicit instantiation, access is not checked at all,
20456      as per [temp.explicit].  */
20457   if (DECL_P (decl))
20458     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
20459
20460   maybe_record_typedef_use (decl);
20461
20462   return decl;
20463 }
20464
20465 /* Like cp_parser_lookup_name, but for use in the typical case where
20466    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
20467    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
20468
20469 static tree
20470 cp_parser_lookup_name_simple (cp_parser* parser, tree name, location_t location)
20471 {
20472   return cp_parser_lookup_name (parser, name,
20473                                 none_type,
20474                                 /*is_template=*/false,
20475                                 /*is_namespace=*/false,
20476                                 /*check_dependency=*/true,
20477                                 /*ambiguous_decls=*/NULL,
20478                                 location);
20479 }
20480
20481 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
20482    the current context, return the TYPE_DECL.  If TAG_NAME_P is
20483    true, the DECL indicates the class being defined in a class-head,
20484    or declared in an elaborated-type-specifier.
20485
20486    Otherwise, return DECL.  */
20487
20488 static tree
20489 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
20490 {
20491   /* If the TEMPLATE_DECL is being declared as part of a class-head,
20492      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
20493
20494        struct A {
20495          template <typename T> struct B;
20496        };
20497
20498        template <typename T> struct A::B {};
20499
20500      Similarly, in an elaborated-type-specifier:
20501
20502        namespace N { struct X{}; }
20503
20504        struct A {
20505          template <typename T> friend struct N::X;
20506        };
20507
20508      However, if the DECL refers to a class type, and we are in
20509      the scope of the class, then the name lookup automatically
20510      finds the TYPE_DECL created by build_self_reference rather
20511      than a TEMPLATE_DECL.  For example, in:
20512
20513        template <class T> struct S {
20514          S s;
20515        };
20516
20517      there is no need to handle such case.  */
20518
20519   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
20520     return DECL_TEMPLATE_RESULT (decl);
20521
20522   return decl;
20523 }
20524
20525 /* If too many, or too few, template-parameter lists apply to the
20526    declarator, issue an error message.  Returns TRUE if all went well,
20527    and FALSE otherwise.  */
20528
20529 static bool
20530 cp_parser_check_declarator_template_parameters (cp_parser* parser,
20531                                                 cp_declarator *declarator,
20532                                                 location_t declarator_location)
20533 {
20534   unsigned num_templates;
20535
20536   /* We haven't seen any classes that involve template parameters yet.  */
20537   num_templates = 0;
20538
20539   switch (declarator->kind)
20540     {
20541     case cdk_id:
20542       if (declarator->u.id.qualifying_scope)
20543         {
20544           tree scope;
20545
20546           scope = declarator->u.id.qualifying_scope;
20547
20548           while (scope && CLASS_TYPE_P (scope))
20549             {
20550               /* You're supposed to have one `template <...>'
20551                  for every template class, but you don't need one
20552                  for a full specialization.  For example:
20553
20554                  template <class T> struct S{};
20555                  template <> struct S<int> { void f(); };
20556                  void S<int>::f () {}
20557
20558                  is correct; there shouldn't be a `template <>' for
20559                  the definition of `S<int>::f'.  */
20560               if (!CLASSTYPE_TEMPLATE_INFO (scope))
20561                 /* If SCOPE does not have template information of any
20562                    kind, then it is not a template, nor is it nested
20563                    within a template.  */
20564                 break;
20565               if (explicit_class_specialization_p (scope))
20566                 break;
20567               if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
20568                 ++num_templates;
20569
20570               scope = TYPE_CONTEXT (scope);
20571             }
20572         }
20573       else if (TREE_CODE (declarator->u.id.unqualified_name)
20574                == TEMPLATE_ID_EXPR)
20575         /* If the DECLARATOR has the form `X<y>' then it uses one
20576            additional level of template parameters.  */
20577         ++num_templates;
20578
20579       return cp_parser_check_template_parameters 
20580         (parser, num_templates, declarator_location, declarator);
20581
20582
20583     case cdk_function:
20584     case cdk_array:
20585     case cdk_pointer:
20586     case cdk_reference:
20587     case cdk_ptrmem:
20588       return (cp_parser_check_declarator_template_parameters
20589               (parser, declarator->declarator, declarator_location));
20590
20591     case cdk_error:
20592       return true;
20593
20594     default:
20595       gcc_unreachable ();
20596     }
20597   return false;
20598 }
20599
20600 /* NUM_TEMPLATES were used in the current declaration.  If that is
20601    invalid, return FALSE and issue an error messages.  Otherwise,
20602    return TRUE.  If DECLARATOR is non-NULL, then we are checking a
20603    declarator and we can print more accurate diagnostics.  */
20604
20605 static bool
20606 cp_parser_check_template_parameters (cp_parser* parser,
20607                                      unsigned num_templates,
20608                                      location_t location,
20609                                      cp_declarator *declarator)
20610 {
20611   /* If there are the same number of template classes and parameter
20612      lists, that's OK.  */
20613   if (parser->num_template_parameter_lists == num_templates)
20614     return true;
20615   /* If there are more, but only one more, then we are referring to a
20616      member template.  That's OK too.  */
20617   if (parser->num_template_parameter_lists == num_templates + 1)
20618     return true;
20619   /* If there are more template classes than parameter lists, we have
20620      something like:
20621
20622        template <class T> void S<T>::R<T>::f ();  */
20623   if (parser->num_template_parameter_lists < num_templates)
20624     {
20625       if (declarator && !current_function_decl)
20626         error_at (location, "specializing member %<%T::%E%> "
20627                   "requires %<template<>%> syntax", 
20628                   declarator->u.id.qualifying_scope,
20629                   declarator->u.id.unqualified_name);
20630       else if (declarator)
20631         error_at (location, "invalid declaration of %<%T::%E%>",
20632                   declarator->u.id.qualifying_scope,
20633                   declarator->u.id.unqualified_name);
20634       else 
20635         error_at (location, "too few template-parameter-lists");
20636       return false;
20637     }
20638   /* Otherwise, there are too many template parameter lists.  We have
20639      something like:
20640
20641      template <class T> template <class U> void S::f();  */
20642   error_at (location, "too many template-parameter-lists");
20643   return false;
20644 }
20645
20646 /* Parse an optional `::' token indicating that the following name is
20647    from the global namespace.  If so, PARSER->SCOPE is set to the
20648    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
20649    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
20650    Returns the new value of PARSER->SCOPE, if the `::' token is
20651    present, and NULL_TREE otherwise.  */
20652
20653 static tree
20654 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
20655 {
20656   cp_token *token;
20657
20658   /* Peek at the next token.  */
20659   token = cp_lexer_peek_token (parser->lexer);
20660   /* If we're looking at a `::' token then we're starting from the
20661      global namespace, not our current location.  */
20662   if (token->type == CPP_SCOPE)
20663     {
20664       /* Consume the `::' token.  */
20665       cp_lexer_consume_token (parser->lexer);
20666       /* Set the SCOPE so that we know where to start the lookup.  */
20667       parser->scope = global_namespace;
20668       parser->qualifying_scope = global_namespace;
20669       parser->object_scope = NULL_TREE;
20670
20671       return parser->scope;
20672     }
20673   else if (!current_scope_valid_p)
20674     {
20675       parser->scope = NULL_TREE;
20676       parser->qualifying_scope = NULL_TREE;
20677       parser->object_scope = NULL_TREE;
20678     }
20679
20680   return NULL_TREE;
20681 }
20682
20683 /* Returns TRUE if the upcoming token sequence is the start of a
20684    constructor declarator.  If FRIEND_P is true, the declarator is
20685    preceded by the `friend' specifier.  */
20686
20687 static bool
20688 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
20689 {
20690   bool constructor_p;
20691   tree nested_name_specifier;
20692   cp_token *next_token;
20693
20694   /* The common case is that this is not a constructor declarator, so
20695      try to avoid doing lots of work if at all possible.  It's not
20696      valid declare a constructor at function scope.  */
20697   if (parser->in_function_body)
20698     return false;
20699   /* And only certain tokens can begin a constructor declarator.  */
20700   next_token = cp_lexer_peek_token (parser->lexer);
20701   if (next_token->type != CPP_NAME
20702       && next_token->type != CPP_SCOPE
20703       && next_token->type != CPP_NESTED_NAME_SPECIFIER
20704       && next_token->type != CPP_TEMPLATE_ID)
20705     return false;
20706
20707   /* Parse tentatively; we are going to roll back all of the tokens
20708      consumed here.  */
20709   cp_parser_parse_tentatively (parser);
20710   /* Assume that we are looking at a constructor declarator.  */
20711   constructor_p = true;
20712
20713   /* Look for the optional `::' operator.  */
20714   cp_parser_global_scope_opt (parser,
20715                               /*current_scope_valid_p=*/false);
20716   /* Look for the nested-name-specifier.  */
20717   nested_name_specifier
20718     = (cp_parser_nested_name_specifier_opt (parser,
20719                                             /*typename_keyword_p=*/false,
20720                                             /*check_dependency_p=*/false,
20721                                             /*type_p=*/false,
20722                                             /*is_declaration=*/false));
20723   /* Outside of a class-specifier, there must be a
20724      nested-name-specifier.  */
20725   if (!nested_name_specifier &&
20726       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
20727        || friend_p))
20728     constructor_p = false;
20729   else if (nested_name_specifier == error_mark_node)
20730     constructor_p = false;
20731
20732   /* If we have a class scope, this is easy; DR 147 says that S::S always
20733      names the constructor, and no other qualified name could.  */
20734   if (constructor_p && nested_name_specifier
20735       && CLASS_TYPE_P (nested_name_specifier))
20736     {
20737       tree id = cp_parser_unqualified_id (parser,
20738                                           /*template_keyword_p=*/false,
20739                                           /*check_dependency_p=*/false,
20740                                           /*declarator_p=*/true,
20741                                           /*optional_p=*/false);
20742       if (is_overloaded_fn (id))
20743         id = DECL_NAME (get_first_fn (id));
20744       if (!constructor_name_p (id, nested_name_specifier))
20745         constructor_p = false;
20746     }
20747   /* If we still think that this might be a constructor-declarator,
20748      look for a class-name.  */
20749   else if (constructor_p)
20750     {
20751       /* If we have:
20752
20753            template <typename T> struct S {
20754              S();
20755            };
20756
20757          we must recognize that the nested `S' names a class.  */
20758       tree type_decl;
20759       type_decl = cp_parser_class_name (parser,
20760                                         /*typename_keyword_p=*/false,
20761                                         /*template_keyword_p=*/false,
20762                                         none_type,
20763                                         /*check_dependency_p=*/false,
20764                                         /*class_head_p=*/false,
20765                                         /*is_declaration=*/false);
20766       /* If there was no class-name, then this is not a constructor.  */
20767       constructor_p = !cp_parser_error_occurred (parser);
20768
20769       /* If we're still considering a constructor, we have to see a `(',
20770          to begin the parameter-declaration-clause, followed by either a
20771          `)', an `...', or a decl-specifier.  We need to check for a
20772          type-specifier to avoid being fooled into thinking that:
20773
20774            S (f) (int);
20775
20776          is a constructor.  (It is actually a function named `f' that
20777          takes one parameter (of type `int') and returns a value of type
20778          `S'.  */
20779       if (constructor_p
20780           && !cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
20781         constructor_p = false;
20782
20783       if (constructor_p
20784           && cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
20785           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
20786           /* A parameter declaration begins with a decl-specifier,
20787              which is either the "attribute" keyword, a storage class
20788              specifier, or (usually) a type-specifier.  */
20789           && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
20790         {
20791           tree type;
20792           tree pushed_scope = NULL_TREE;
20793           unsigned saved_num_template_parameter_lists;
20794
20795           /* Names appearing in the type-specifier should be looked up
20796              in the scope of the class.  */
20797           if (current_class_type)
20798             type = NULL_TREE;
20799           else
20800             {
20801               type = TREE_TYPE (type_decl);
20802               if (TREE_CODE (type) == TYPENAME_TYPE)
20803                 {
20804                   type = resolve_typename_type (type,
20805                                                 /*only_current_p=*/false);
20806                   if (TREE_CODE (type) == TYPENAME_TYPE)
20807                     {
20808                       cp_parser_abort_tentative_parse (parser);
20809                       return false;
20810                     }
20811                 }
20812               pushed_scope = push_scope (type);
20813             }
20814
20815           /* Inside the constructor parameter list, surrounding
20816              template-parameter-lists do not apply.  */
20817           saved_num_template_parameter_lists
20818             = parser->num_template_parameter_lists;
20819           parser->num_template_parameter_lists = 0;
20820
20821           /* Look for the type-specifier.  */
20822           cp_parser_type_specifier (parser,
20823                                     CP_PARSER_FLAGS_NONE,
20824                                     /*decl_specs=*/NULL,
20825                                     /*is_declarator=*/true,
20826                                     /*declares_class_or_enum=*/NULL,
20827                                     /*is_cv_qualifier=*/NULL);
20828
20829           parser->num_template_parameter_lists
20830             = saved_num_template_parameter_lists;
20831
20832           /* Leave the scope of the class.  */
20833           if (pushed_scope)
20834             pop_scope (pushed_scope);
20835
20836           constructor_p = !cp_parser_error_occurred (parser);
20837         }
20838     }
20839
20840   /* We did not really want to consume any tokens.  */
20841   cp_parser_abort_tentative_parse (parser);
20842
20843   return constructor_p;
20844 }
20845
20846 /* Parse the definition of the function given by the DECL_SPECIFIERS,
20847    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
20848    they must be performed once we are in the scope of the function.
20849
20850    Returns the function defined.  */
20851
20852 static tree
20853 cp_parser_function_definition_from_specifiers_and_declarator
20854   (cp_parser* parser,
20855    cp_decl_specifier_seq *decl_specifiers,
20856    tree attributes,
20857    const cp_declarator *declarator)
20858 {
20859   tree fn;
20860   bool success_p;
20861
20862   /* Begin the function-definition.  */
20863   success_p = start_function (decl_specifiers, declarator, attributes);
20864
20865   /* The things we're about to see are not directly qualified by any
20866      template headers we've seen thus far.  */
20867   reset_specialization ();
20868
20869   /* If there were names looked up in the decl-specifier-seq that we
20870      did not check, check them now.  We must wait until we are in the
20871      scope of the function to perform the checks, since the function
20872      might be a friend.  */
20873   perform_deferred_access_checks ();
20874
20875   if (!success_p)
20876     {
20877       /* Skip the entire function.  */
20878       cp_parser_skip_to_end_of_block_or_statement (parser);
20879       fn = error_mark_node;
20880     }
20881   else if (DECL_INITIAL (current_function_decl) != error_mark_node)
20882     {
20883       /* Seen already, skip it.  An error message has already been output.  */
20884       cp_parser_skip_to_end_of_block_or_statement (parser);
20885       fn = current_function_decl;
20886       current_function_decl = NULL_TREE;
20887       /* If this is a function from a class, pop the nested class.  */
20888       if (current_class_name)
20889         pop_nested_class ();
20890     }
20891   else
20892     {
20893       timevar_id_t tv;
20894       if (DECL_DECLARED_INLINE_P (current_function_decl))
20895         tv = TV_PARSE_INLINE;
20896       else
20897         tv = TV_PARSE_FUNC;
20898       timevar_push (tv);
20899       fn = cp_parser_function_definition_after_declarator (parser,
20900                                                          /*inline_p=*/false);
20901       timevar_pop (tv);
20902     }
20903
20904   return fn;
20905 }
20906
20907 /* Parse the part of a function-definition that follows the
20908    declarator.  INLINE_P is TRUE iff this function is an inline
20909    function defined within a class-specifier.
20910
20911    Returns the function defined.  */
20912
20913 static tree
20914 cp_parser_function_definition_after_declarator (cp_parser* parser,
20915                                                 bool inline_p)
20916 {
20917   tree fn;
20918   bool ctor_initializer_p = false;
20919   bool saved_in_unbraced_linkage_specification_p;
20920   bool saved_in_function_body;
20921   unsigned saved_num_template_parameter_lists;
20922   cp_token *token;
20923
20924   saved_in_function_body = parser->in_function_body;
20925   parser->in_function_body = true;
20926   /* If the next token is `return', then the code may be trying to
20927      make use of the "named return value" extension that G++ used to
20928      support.  */
20929   token = cp_lexer_peek_token (parser->lexer);
20930   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
20931     {
20932       /* Consume the `return' keyword.  */
20933       cp_lexer_consume_token (parser->lexer);
20934       /* Look for the identifier that indicates what value is to be
20935          returned.  */
20936       cp_parser_identifier (parser);
20937       /* Issue an error message.  */
20938       error_at (token->location,
20939                 "named return values are no longer supported");
20940       /* Skip tokens until we reach the start of the function body.  */
20941       while (true)
20942         {
20943           cp_token *token = cp_lexer_peek_token (parser->lexer);
20944           if (token->type == CPP_OPEN_BRACE
20945               || token->type == CPP_EOF
20946               || token->type == CPP_PRAGMA_EOL)
20947             break;
20948           cp_lexer_consume_token (parser->lexer);
20949         }
20950     }
20951   /* The `extern' in `extern "C" void f () { ... }' does not apply to
20952      anything declared inside `f'.  */
20953   saved_in_unbraced_linkage_specification_p
20954     = parser->in_unbraced_linkage_specification_p;
20955   parser->in_unbraced_linkage_specification_p = false;
20956   /* Inside the function, surrounding template-parameter-lists do not
20957      apply.  */
20958   saved_num_template_parameter_lists
20959     = parser->num_template_parameter_lists;
20960   parser->num_template_parameter_lists = 0;
20961
20962   start_lambda_scope (current_function_decl);
20963
20964   /* If the next token is `try', `__transaction_atomic', or
20965      `__transaction_relaxed`, then we are looking at either function-try-block
20966      or function-transaction-block.  Note that all of these include the
20967      function-body.  */
20968   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRANSACTION_ATOMIC))
20969     ctor_initializer_p = cp_parser_function_transaction (parser,
20970         RID_TRANSACTION_ATOMIC);
20971   else if (cp_lexer_next_token_is_keyword (parser->lexer,
20972       RID_TRANSACTION_RELAXED))
20973     ctor_initializer_p = cp_parser_function_transaction (parser,
20974         RID_TRANSACTION_RELAXED);
20975   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
20976     ctor_initializer_p = cp_parser_function_try_block (parser);
20977   else
20978     ctor_initializer_p
20979       = cp_parser_ctor_initializer_opt_and_function_body (parser);
20980
20981   finish_lambda_scope ();
20982
20983   /* Finish the function.  */
20984   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
20985                         (inline_p ? 2 : 0));
20986   /* Generate code for it, if necessary.  */
20987   expand_or_defer_fn (fn);
20988   /* Restore the saved values.  */
20989   parser->in_unbraced_linkage_specification_p
20990     = saved_in_unbraced_linkage_specification_p;
20991   parser->num_template_parameter_lists
20992     = saved_num_template_parameter_lists;
20993   parser->in_function_body = saved_in_function_body;
20994
20995   return fn;
20996 }
20997
20998 /* Parse a template-declaration, assuming that the `export' (and
20999    `extern') keywords, if present, has already been scanned.  MEMBER_P
21000    is as for cp_parser_template_declaration.  */
21001
21002 static void
21003 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
21004 {
21005   tree decl = NULL_TREE;
21006   VEC (deferred_access_check,gc) *checks;
21007   tree parameter_list;
21008   bool friend_p = false;
21009   bool need_lang_pop;
21010   cp_token *token;
21011
21012   /* Look for the `template' keyword.  */
21013   token = cp_lexer_peek_token (parser->lexer);
21014   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE))
21015     return;
21016
21017   /* And the `<'.  */
21018   if (!cp_parser_require (parser, CPP_LESS, RT_LESS))
21019     return;
21020   if (at_class_scope_p () && current_function_decl)
21021     {
21022       /* 14.5.2.2 [temp.mem]
21023
21024          A local class shall not have member templates.  */
21025       error_at (token->location,
21026                 "invalid declaration of member template in local class");
21027       cp_parser_skip_to_end_of_block_or_statement (parser);
21028       return;
21029     }
21030   /* [temp]
21031
21032      A template ... shall not have C linkage.  */
21033   if (current_lang_name == lang_name_c)
21034     {
21035       error_at (token->location, "template with C linkage");
21036       /* Give it C++ linkage to avoid confusing other parts of the
21037          front end.  */
21038       push_lang_context (lang_name_cplusplus);
21039       need_lang_pop = true;
21040     }
21041   else
21042     need_lang_pop = false;
21043
21044   /* We cannot perform access checks on the template parameter
21045      declarations until we know what is being declared, just as we
21046      cannot check the decl-specifier list.  */
21047   push_deferring_access_checks (dk_deferred);
21048
21049   /* If the next token is `>', then we have an invalid
21050      specialization.  Rather than complain about an invalid template
21051      parameter, issue an error message here.  */
21052   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
21053     {
21054       cp_parser_error (parser, "invalid explicit specialization");
21055       begin_specialization ();
21056       parameter_list = NULL_TREE;
21057     }
21058   else
21059     {
21060       /* Parse the template parameters.  */
21061       parameter_list = cp_parser_template_parameter_list (parser);
21062       fixup_template_parms ();
21063     }
21064
21065   /* Get the deferred access checks from the parameter list.  These
21066      will be checked once we know what is being declared, as for a
21067      member template the checks must be performed in the scope of the
21068      class containing the member.  */
21069   checks = get_deferred_access_checks ();
21070
21071   /* Look for the `>'.  */
21072   cp_parser_skip_to_end_of_template_parameter_list (parser);
21073   /* We just processed one more parameter list.  */
21074   ++parser->num_template_parameter_lists;
21075   /* If the next token is `template', there are more template
21076      parameters.  */
21077   if (cp_lexer_next_token_is_keyword (parser->lexer,
21078                                       RID_TEMPLATE))
21079     cp_parser_template_declaration_after_export (parser, member_p);
21080   else if (cxx_dialect >= cxx0x
21081            && cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
21082     decl = cp_parser_alias_declaration (parser);
21083   else
21084     {
21085       /* There are no access checks when parsing a template, as we do not
21086          know if a specialization will be a friend.  */
21087       push_deferring_access_checks (dk_no_check);
21088       token = cp_lexer_peek_token (parser->lexer);
21089       decl = cp_parser_single_declaration (parser,
21090                                            checks,
21091                                            member_p,
21092                                            /*explicit_specialization_p=*/false,
21093                                            &friend_p);
21094       pop_deferring_access_checks ();
21095
21096       /* If this is a member template declaration, let the front
21097          end know.  */
21098       if (member_p && !friend_p && decl)
21099         {
21100           if (TREE_CODE (decl) == TYPE_DECL)
21101             cp_parser_check_access_in_redeclaration (decl, token->location);
21102
21103           decl = finish_member_template_decl (decl);
21104         }
21105       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
21106         make_friend_class (current_class_type, TREE_TYPE (decl),
21107                            /*complain=*/true);
21108     }
21109   /* We are done with the current parameter list.  */
21110   --parser->num_template_parameter_lists;
21111
21112   pop_deferring_access_checks ();
21113
21114   /* Finish up.  */
21115   finish_template_decl (parameter_list);
21116
21117   /* Check the template arguments for a literal operator template.  */
21118   if (decl
21119       && (TREE_CODE (decl) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (decl))
21120       && UDLIT_OPER_P (DECL_NAME (decl)))
21121     {
21122       bool ok = true;
21123       if (parameter_list == NULL_TREE)
21124         ok = false;
21125       else
21126         {
21127           int num_parms = TREE_VEC_LENGTH (parameter_list);
21128           if (num_parms != 1)
21129             ok = false;
21130           else
21131             {
21132               tree parm_list = TREE_VEC_ELT (parameter_list, 0);
21133               tree parm = INNERMOST_TEMPLATE_PARMS (parm_list);
21134               if (TREE_TYPE (parm) != char_type_node
21135                   || !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
21136                 ok = false;
21137             }
21138         }
21139       if (!ok)
21140         error ("literal operator template %qD has invalid parameter list."
21141                "  Expected non-type template argument pack <char...>",
21142                decl);
21143     }
21144   /* Register member declarations.  */
21145   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
21146     finish_member_declaration (decl);
21147   /* For the erroneous case of a template with C linkage, we pushed an
21148      implicit C++ linkage scope; exit that scope now.  */
21149   if (need_lang_pop)
21150     pop_lang_context ();
21151   /* If DECL is a function template, we must return to parse it later.
21152      (Even though there is no definition, there might be default
21153      arguments that need handling.)  */
21154   if (member_p && decl
21155       && (TREE_CODE (decl) == FUNCTION_DECL
21156           || DECL_FUNCTION_TEMPLATE_P (decl)))
21157     VEC_safe_push (tree, gc, unparsed_funs_with_definitions, decl);
21158 }
21159
21160 /* Perform the deferred access checks from a template-parameter-list.
21161    CHECKS is a TREE_LIST of access checks, as returned by
21162    get_deferred_access_checks.  */
21163
21164 static void
21165 cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
21166 {
21167   ++processing_template_parmlist;
21168   perform_access_checks (checks);
21169   --processing_template_parmlist;
21170 }
21171
21172 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
21173    `function-definition' sequence.  MEMBER_P is true, this declaration
21174    appears in a class scope.
21175
21176    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
21177    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
21178
21179 static tree
21180 cp_parser_single_declaration (cp_parser* parser,
21181                               VEC (deferred_access_check,gc)* checks,
21182                               bool member_p,
21183                               bool explicit_specialization_p,
21184                               bool* friend_p)
21185 {
21186   int declares_class_or_enum;
21187   tree decl = NULL_TREE;
21188   cp_decl_specifier_seq decl_specifiers;
21189   bool function_definition_p = false;
21190   cp_token *decl_spec_token_start;
21191
21192   /* This function is only used when processing a template
21193      declaration.  */
21194   gcc_assert (innermost_scope_kind () == sk_template_parms
21195               || innermost_scope_kind () == sk_template_spec);
21196
21197   /* Defer access checks until we know what is being declared.  */
21198   push_deferring_access_checks (dk_deferred);
21199
21200   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
21201      alternative.  */
21202   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
21203   cp_parser_decl_specifier_seq (parser,
21204                                 CP_PARSER_FLAGS_OPTIONAL,
21205                                 &decl_specifiers,
21206                                 &declares_class_or_enum);
21207   if (friend_p)
21208     *friend_p = cp_parser_friend_p (&decl_specifiers);
21209
21210   /* There are no template typedefs.  */
21211   if (decl_specifiers.specs[(int) ds_typedef])
21212     {
21213       error_at (decl_spec_token_start->location,
21214                 "template declaration of %<typedef%>");
21215       decl = error_mark_node;
21216     }
21217
21218   /* Gather up the access checks that occurred the
21219      decl-specifier-seq.  */
21220   stop_deferring_access_checks ();
21221
21222   /* Check for the declaration of a template class.  */
21223   if (declares_class_or_enum)
21224     {
21225       if (cp_parser_declares_only_class_p (parser))
21226         {
21227           decl = shadow_tag (&decl_specifiers);
21228
21229           /* In this case:
21230
21231                struct C {
21232                  friend template <typename T> struct A<T>::B;
21233                };
21234
21235              A<T>::B will be represented by a TYPENAME_TYPE, and
21236              therefore not recognized by shadow_tag.  */
21237           if (friend_p && *friend_p
21238               && !decl
21239               && decl_specifiers.type
21240               && TYPE_P (decl_specifiers.type))
21241             decl = decl_specifiers.type;
21242
21243           if (decl && decl != error_mark_node)
21244             decl = TYPE_NAME (decl);
21245           else
21246             decl = error_mark_node;
21247
21248           /* Perform access checks for template parameters.  */
21249           cp_parser_perform_template_parameter_access_checks (checks);
21250         }
21251     }
21252
21253   /* Complain about missing 'typename' or other invalid type names.  */
21254   if (!decl_specifiers.any_type_specifiers_p
21255       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
21256     {
21257       /* cp_parser_parse_and_diagnose_invalid_type_name calls
21258          cp_parser_skip_to_end_of_block_or_statement, so don't try to parse
21259          the rest of this declaration.  */
21260       decl = error_mark_node;
21261       goto out;
21262     }
21263
21264   /* If it's not a template class, try for a template function.  If
21265      the next token is a `;', then this declaration does not declare
21266      anything.  But, if there were errors in the decl-specifiers, then
21267      the error might well have come from an attempted class-specifier.
21268      In that case, there's no need to warn about a missing declarator.  */
21269   if (!decl
21270       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
21271           || decl_specifiers.type != error_mark_node))
21272     {
21273       decl = cp_parser_init_declarator (parser,
21274                                         &decl_specifiers,
21275                                         checks,
21276                                         /*function_definition_allowed_p=*/true,
21277                                         member_p,
21278                                         declares_class_or_enum,
21279                                         &function_definition_p,
21280                                         NULL);
21281
21282     /* 7.1.1-1 [dcl.stc]
21283
21284        A storage-class-specifier shall not be specified in an explicit
21285        specialization...  */
21286     if (decl
21287         && explicit_specialization_p
21288         && decl_specifiers.storage_class != sc_none)
21289       {
21290         error_at (decl_spec_token_start->location,
21291                   "explicit template specialization cannot have a storage class");
21292         decl = error_mark_node;
21293       }
21294     }
21295
21296   /* Look for a trailing `;' after the declaration.  */
21297   if (!function_definition_p
21298       && (decl == error_mark_node
21299           || !cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON)))
21300     cp_parser_skip_to_end_of_block_or_statement (parser);
21301
21302  out:
21303   pop_deferring_access_checks ();
21304
21305   /* Clear any current qualification; whatever comes next is the start
21306      of something new.  */
21307   parser->scope = NULL_TREE;
21308   parser->qualifying_scope = NULL_TREE;
21309   parser->object_scope = NULL_TREE;
21310
21311   return decl;
21312 }
21313
21314 /* Parse a cast-expression that is not the operand of a unary "&".  */
21315
21316 static tree
21317 cp_parser_simple_cast_expression (cp_parser *parser)
21318 {
21319   return cp_parser_cast_expression (parser, /*address_p=*/false,
21320                                     /*cast_p=*/false, NULL);
21321 }
21322
21323 /* Parse a functional cast to TYPE.  Returns an expression
21324    representing the cast.  */
21325
21326 static tree
21327 cp_parser_functional_cast (cp_parser* parser, tree type)
21328 {
21329   VEC(tree,gc) *vec;
21330   tree expression_list;
21331   tree cast;
21332   bool nonconst_p;
21333
21334   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
21335     {
21336       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
21337       expression_list = cp_parser_braced_list (parser, &nonconst_p);
21338       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
21339       if (TREE_CODE (type) == TYPE_DECL)
21340         type = TREE_TYPE (type);
21341       return finish_compound_literal (type, expression_list,
21342                                       tf_warning_or_error);
21343     }
21344
21345
21346   vec = cp_parser_parenthesized_expression_list (parser, non_attr,
21347                                                  /*cast_p=*/true,
21348                                                  /*allow_expansion_p=*/true,
21349                                                  /*non_constant_p=*/NULL);
21350   if (vec == NULL)
21351     expression_list = error_mark_node;
21352   else
21353     {
21354       expression_list = build_tree_list_vec (vec);
21355       release_tree_vector (vec);
21356     }
21357
21358   cast = build_functional_cast (type, expression_list,
21359                                 tf_warning_or_error);
21360   /* [expr.const]/1: In an integral constant expression "only type
21361      conversions to integral or enumeration type can be used".  */
21362   if (TREE_CODE (type) == TYPE_DECL)
21363     type = TREE_TYPE (type);
21364   if (cast != error_mark_node
21365       && !cast_valid_in_integral_constant_expression_p (type)
21366       && cp_parser_non_integral_constant_expression (parser,
21367                                                      NIC_CONSTRUCTOR))
21368     return error_mark_node;
21369   return cast;
21370 }
21371
21372 /* Save the tokens that make up the body of a member function defined
21373    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
21374    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
21375    specifiers applied to the declaration.  Returns the FUNCTION_DECL
21376    for the member function.  */
21377
21378 static tree
21379 cp_parser_save_member_function_body (cp_parser* parser,
21380                                      cp_decl_specifier_seq *decl_specifiers,
21381                                      cp_declarator *declarator,
21382                                      tree attributes)
21383 {
21384   cp_token *first;
21385   cp_token *last;
21386   tree fn;
21387
21388   /* Create the FUNCTION_DECL.  */
21389   fn = grokmethod (decl_specifiers, declarator, attributes);
21390   /* If something went badly wrong, bail out now.  */
21391   if (fn == error_mark_node)
21392     {
21393       /* If there's a function-body, skip it.  */
21394       if (cp_parser_token_starts_function_definition_p
21395           (cp_lexer_peek_token (parser->lexer)))
21396         cp_parser_skip_to_end_of_block_or_statement (parser);
21397       return error_mark_node;
21398     }
21399
21400   /* Remember it, if there default args to post process.  */
21401   cp_parser_save_default_args (parser, fn);
21402
21403   /* Save away the tokens that make up the body of the
21404      function.  */
21405   first = parser->lexer->next_token;
21406   /* We can have braced-init-list mem-initializers before the fn body.  */
21407   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
21408     {
21409       cp_lexer_consume_token (parser->lexer);
21410       while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
21411              && cp_lexer_next_token_is_not_keyword (parser->lexer, RID_TRY))
21412         {
21413           /* cache_group will stop after an un-nested { } pair, too.  */
21414           if (cp_parser_cache_group (parser, CPP_CLOSE_PAREN, /*depth=*/0))
21415             break;
21416
21417           /* variadic mem-inits have ... after the ')'.  */
21418           if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
21419             cp_lexer_consume_token (parser->lexer);
21420         }
21421     }
21422   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
21423   /* Handle function try blocks.  */
21424   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
21425     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
21426   last = parser->lexer->next_token;
21427
21428   /* Save away the inline definition; we will process it when the
21429      class is complete.  */
21430   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
21431   DECL_PENDING_INLINE_P (fn) = 1;
21432
21433   /* We need to know that this was defined in the class, so that
21434      friend templates are handled correctly.  */
21435   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
21436
21437   /* Add FN to the queue of functions to be parsed later.  */
21438   VEC_safe_push (tree, gc, unparsed_funs_with_definitions, fn);
21439
21440   return fn;
21441 }
21442
21443 /* Save the tokens that make up the in-class initializer for a non-static
21444    data member.  Returns a DEFAULT_ARG.  */
21445
21446 static tree
21447 cp_parser_save_nsdmi (cp_parser* parser)
21448 {
21449   /* Save away the tokens that make up the body of the
21450      function.  */
21451   cp_token *first = parser->lexer->next_token;
21452   cp_token *last;
21453   tree node;
21454
21455   /* Save tokens until the next comma or semicolon.  */
21456   cp_parser_cache_group (parser, CPP_COMMA, /*depth=*/0);
21457
21458   last = parser->lexer->next_token;
21459
21460   node = make_node (DEFAULT_ARG);
21461   DEFARG_TOKENS (node) = cp_token_cache_new (first, last);
21462   DEFARG_INSTANTIATIONS (node) = NULL;
21463
21464   return node;
21465 }
21466
21467
21468 /* Parse a template-argument-list, as well as the trailing ">" (but
21469    not the opening "<").  See cp_parser_template_argument_list for the
21470    return value.  */
21471
21472 static tree
21473 cp_parser_enclosed_template_argument_list (cp_parser* parser)
21474 {
21475   tree arguments;
21476   tree saved_scope;
21477   tree saved_qualifying_scope;
21478   tree saved_object_scope;
21479   bool saved_greater_than_is_operator_p;
21480   int saved_unevaluated_operand;
21481   int saved_inhibit_evaluation_warnings;
21482
21483   /* [temp.names]
21484
21485      When parsing a template-id, the first non-nested `>' is taken as
21486      the end of the template-argument-list rather than a greater-than
21487      operator.  */
21488   saved_greater_than_is_operator_p
21489     = parser->greater_than_is_operator_p;
21490   parser->greater_than_is_operator_p = false;
21491   /* Parsing the argument list may modify SCOPE, so we save it
21492      here.  */
21493   saved_scope = parser->scope;
21494   saved_qualifying_scope = parser->qualifying_scope;
21495   saved_object_scope = parser->object_scope;
21496   /* We need to evaluate the template arguments, even though this
21497      template-id may be nested within a "sizeof".  */
21498   saved_unevaluated_operand = cp_unevaluated_operand;
21499   cp_unevaluated_operand = 0;
21500   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
21501   c_inhibit_evaluation_warnings = 0;
21502   /* Parse the template-argument-list itself.  */
21503   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER)
21504       || cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
21505     arguments = NULL_TREE;
21506   else
21507     arguments = cp_parser_template_argument_list (parser);
21508   /* Look for the `>' that ends the template-argument-list. If we find
21509      a '>>' instead, it's probably just a typo.  */
21510   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
21511     {
21512       if (cxx_dialect != cxx98)
21513         {
21514           /* In C++0x, a `>>' in a template argument list or cast
21515              expression is considered to be two separate `>'
21516              tokens. So, change the current token to a `>', but don't
21517              consume it: it will be consumed later when the outer
21518              template argument list (or cast expression) is parsed.
21519              Note that this replacement of `>' for `>>' is necessary
21520              even if we are parsing tentatively: in the tentative
21521              case, after calling
21522              cp_parser_enclosed_template_argument_list we will always
21523              throw away all of the template arguments and the first
21524              closing `>', either because the template argument list
21525              was erroneous or because we are replacing those tokens
21526              with a CPP_TEMPLATE_ID token.  The second `>' (which will
21527              not have been thrown away) is needed either to close an
21528              outer template argument list or to complete a new-style
21529              cast.  */
21530           cp_token *token = cp_lexer_peek_token (parser->lexer);
21531           token->type = CPP_GREATER;
21532         }
21533       else if (!saved_greater_than_is_operator_p)
21534         {
21535           /* If we're in a nested template argument list, the '>>' has
21536             to be a typo for '> >'. We emit the error message, but we
21537             continue parsing and we push a '>' as next token, so that
21538             the argument list will be parsed correctly.  Note that the
21539             global source location is still on the token before the
21540             '>>', so we need to say explicitly where we want it.  */
21541           cp_token *token = cp_lexer_peek_token (parser->lexer);
21542           error_at (token->location, "%<>>%> should be %<> >%> "
21543                     "within a nested template argument list");
21544
21545           token->type = CPP_GREATER;
21546         }
21547       else
21548         {
21549           /* If this is not a nested template argument list, the '>>'
21550             is a typo for '>'. Emit an error message and continue.
21551             Same deal about the token location, but here we can get it
21552             right by consuming the '>>' before issuing the diagnostic.  */
21553           cp_token *token = cp_lexer_consume_token (parser->lexer);
21554           error_at (token->location,
21555                     "spurious %<>>%>, use %<>%> to terminate "
21556                     "a template argument list");
21557         }
21558     }
21559   else
21560     cp_parser_skip_to_end_of_template_parameter_list (parser);
21561   /* The `>' token might be a greater-than operator again now.  */
21562   parser->greater_than_is_operator_p
21563     = saved_greater_than_is_operator_p;
21564   /* Restore the SAVED_SCOPE.  */
21565   parser->scope = saved_scope;
21566   parser->qualifying_scope = saved_qualifying_scope;
21567   parser->object_scope = saved_object_scope;
21568   cp_unevaluated_operand = saved_unevaluated_operand;
21569   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
21570
21571   return arguments;
21572 }
21573
21574 /* MEMBER_FUNCTION is a member function, or a friend.  If default
21575    arguments, or the body of the function have not yet been parsed,
21576    parse them now.  */
21577
21578 static void
21579 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
21580 {
21581   timevar_push (TV_PARSE_INMETH);
21582   /* If this member is a template, get the underlying
21583      FUNCTION_DECL.  */
21584   if (DECL_FUNCTION_TEMPLATE_P (member_function))
21585     member_function = DECL_TEMPLATE_RESULT (member_function);
21586
21587   /* There should not be any class definitions in progress at this
21588      point; the bodies of members are only parsed outside of all class
21589      definitions.  */
21590   gcc_assert (parser->num_classes_being_defined == 0);
21591   /* While we're parsing the member functions we might encounter more
21592      classes.  We want to handle them right away, but we don't want
21593      them getting mixed up with functions that are currently in the
21594      queue.  */
21595   push_unparsed_function_queues (parser);
21596
21597   /* Make sure that any template parameters are in scope.  */
21598   maybe_begin_member_template_processing (member_function);
21599
21600   /* If the body of the function has not yet been parsed, parse it
21601      now.  */
21602   if (DECL_PENDING_INLINE_P (member_function))
21603     {
21604       tree function_scope;
21605       cp_token_cache *tokens;
21606
21607       /* The function is no longer pending; we are processing it.  */
21608       tokens = DECL_PENDING_INLINE_INFO (member_function);
21609       DECL_PENDING_INLINE_INFO (member_function) = NULL;
21610       DECL_PENDING_INLINE_P (member_function) = 0;
21611
21612       /* If this is a local class, enter the scope of the containing
21613          function.  */
21614       function_scope = current_function_decl;
21615       if (function_scope)
21616         push_function_context ();
21617
21618       /* Push the body of the function onto the lexer stack.  */
21619       cp_parser_push_lexer_for_tokens (parser, tokens);
21620
21621       /* Let the front end know that we going to be defining this
21622          function.  */
21623       start_preparsed_function (member_function, NULL_TREE,
21624                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
21625
21626       /* Don't do access checking if it is a templated function.  */
21627       if (processing_template_decl)
21628         push_deferring_access_checks (dk_no_check);
21629
21630       /* Now, parse the body of the function.  */
21631       cp_parser_function_definition_after_declarator (parser,
21632                                                       /*inline_p=*/true);
21633
21634       if (processing_template_decl)
21635         pop_deferring_access_checks ();
21636
21637       /* Leave the scope of the containing function.  */
21638       if (function_scope)
21639         pop_function_context ();
21640       cp_parser_pop_lexer (parser);
21641     }
21642
21643   /* Remove any template parameters from the symbol table.  */
21644   maybe_end_member_template_processing ();
21645
21646   /* Restore the queue.  */
21647   pop_unparsed_function_queues (parser);
21648   timevar_pop (TV_PARSE_INMETH);
21649 }
21650
21651 /* If DECL contains any default args, remember it on the unparsed
21652    functions queue.  */
21653
21654 static void
21655 cp_parser_save_default_args (cp_parser* parser, tree decl)
21656 {
21657   tree probe;
21658
21659   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
21660        probe;
21661        probe = TREE_CHAIN (probe))
21662     if (TREE_PURPOSE (probe))
21663       {
21664         cp_default_arg_entry *entry
21665           = VEC_safe_push (cp_default_arg_entry, gc,
21666                            unparsed_funs_with_default_args, NULL);
21667         entry->class_type = current_class_type;
21668         entry->decl = decl;
21669         break;
21670       }
21671 }
21672
21673 /* DEFAULT_ARG contains the saved tokens for the initializer of DECL,
21674    which is either a FIELD_DECL or PARM_DECL.  Parse it and return
21675    the result.  For a PARM_DECL, PARMTYPE is the corresponding type
21676    from the parameter-type-list.  */
21677
21678 static tree
21679 cp_parser_late_parse_one_default_arg (cp_parser *parser, tree decl,
21680                                       tree default_arg, tree parmtype)
21681 {
21682   cp_token_cache *tokens;
21683   tree parsed_arg;
21684   bool dummy;
21685
21686   /* Push the saved tokens for the default argument onto the parser's
21687      lexer stack.  */
21688   tokens = DEFARG_TOKENS (default_arg);
21689   cp_parser_push_lexer_for_tokens (parser, tokens);
21690
21691   start_lambda_scope (decl);
21692
21693   /* Parse the default argument.  */
21694   parsed_arg = cp_parser_initializer (parser, &dummy, &dummy);
21695   if (BRACE_ENCLOSED_INITIALIZER_P (parsed_arg))
21696     maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
21697
21698   finish_lambda_scope ();
21699
21700   if (!processing_template_decl)
21701     {
21702       /* In a non-template class, check conversions now.  In a template,
21703          we'll wait and instantiate these as needed.  */
21704       if (TREE_CODE (decl) == PARM_DECL)
21705         parsed_arg = check_default_argument (parmtype, parsed_arg);
21706       else
21707         {
21708           int flags = LOOKUP_IMPLICIT;
21709           if (BRACE_ENCLOSED_INITIALIZER_P (parsed_arg)
21710               && CONSTRUCTOR_IS_DIRECT_INIT (parsed_arg))
21711             flags = LOOKUP_NORMAL;
21712           parsed_arg = digest_init_flags (TREE_TYPE (decl), parsed_arg, flags);
21713         }
21714     }
21715
21716   /* If the token stream has not been completely used up, then
21717      there was extra junk after the end of the default
21718      argument.  */
21719   if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
21720     {
21721       if (TREE_CODE (decl) == PARM_DECL)
21722         cp_parser_error (parser, "expected %<,%>");
21723       else
21724         cp_parser_error (parser, "expected %<;%>");
21725     }
21726
21727   /* Revert to the main lexer.  */
21728   cp_parser_pop_lexer (parser);
21729
21730   return parsed_arg;
21731 }
21732
21733 /* FIELD is a non-static data member with an initializer which we saved for
21734    later; parse it now.  */
21735
21736 static void
21737 cp_parser_late_parsing_nsdmi (cp_parser *parser, tree field)
21738 {
21739   tree def;
21740
21741   push_unparsed_function_queues (parser);
21742   def = cp_parser_late_parse_one_default_arg (parser, field,
21743                                               DECL_INITIAL (field),
21744                                               NULL_TREE);
21745   pop_unparsed_function_queues (parser);
21746
21747   DECL_INITIAL (field) = def;
21748 }
21749
21750 /* FN is a FUNCTION_DECL which may contains a parameter with an
21751    unparsed DEFAULT_ARG.  Parse the default args now.  This function
21752    assumes that the current scope is the scope in which the default
21753    argument should be processed.  */
21754
21755 static void
21756 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
21757 {
21758   bool saved_local_variables_forbidden_p;
21759   tree parm, parmdecl;
21760
21761   /* While we're parsing the default args, we might (due to the
21762      statement expression extension) encounter more classes.  We want
21763      to handle them right away, but we don't want them getting mixed
21764      up with default args that are currently in the queue.  */
21765   push_unparsed_function_queues (parser);
21766
21767   /* Local variable names (and the `this' keyword) may not appear
21768      in a default argument.  */
21769   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
21770   parser->local_variables_forbidden_p = true;
21771
21772   push_defarg_context (fn);
21773
21774   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn)),
21775          parmdecl = DECL_ARGUMENTS (fn);
21776        parm && parm != void_list_node;
21777        parm = TREE_CHAIN (parm),
21778          parmdecl = DECL_CHAIN (parmdecl))
21779     {
21780       tree default_arg = TREE_PURPOSE (parm);
21781       tree parsed_arg;
21782       VEC(tree,gc) *insts;
21783       tree copy;
21784       unsigned ix;
21785
21786       if (!default_arg)
21787         continue;
21788
21789       if (TREE_CODE (default_arg) != DEFAULT_ARG)
21790         /* This can happen for a friend declaration for a function
21791            already declared with default arguments.  */
21792         continue;
21793
21794       parsed_arg
21795         = cp_parser_late_parse_one_default_arg (parser, parmdecl,
21796                                                 default_arg,
21797                                                 TREE_VALUE (parm));
21798       if (parsed_arg == error_mark_node)
21799         {
21800           continue;
21801         }
21802
21803       TREE_PURPOSE (parm) = parsed_arg;
21804
21805       /* Update any instantiations we've already created.  */
21806       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
21807            VEC_iterate (tree, insts, ix, copy); ix++)
21808         TREE_PURPOSE (copy) = parsed_arg;
21809     }
21810
21811   pop_defarg_context ();
21812
21813   /* Make sure no default arg is missing.  */
21814   check_default_args (fn);
21815
21816   /* Restore the state of local_variables_forbidden_p.  */
21817   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
21818
21819   /* Restore the queue.  */
21820   pop_unparsed_function_queues (parser);
21821 }
21822
21823 /* Parse the operand of `sizeof' (or a similar operator).  Returns
21824    either a TYPE or an expression, depending on the form of the
21825    input.  The KEYWORD indicates which kind of expression we have
21826    encountered.  */
21827
21828 static tree
21829 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
21830 {
21831   tree expr = NULL_TREE;
21832   const char *saved_message;
21833   char *tmp;
21834   bool saved_integral_constant_expression_p;
21835   bool saved_non_integral_constant_expression_p;
21836   bool pack_expansion_p = false;
21837
21838   /* Types cannot be defined in a `sizeof' expression.  Save away the
21839      old message.  */
21840   saved_message = parser->type_definition_forbidden_message;
21841   /* And create the new one.  */
21842   tmp = concat ("types may not be defined in %<",
21843                 IDENTIFIER_POINTER (ridpointers[keyword]),
21844                 "%> expressions", NULL);
21845   parser->type_definition_forbidden_message = tmp;
21846
21847   /* The restrictions on constant-expressions do not apply inside
21848      sizeof expressions.  */
21849   saved_integral_constant_expression_p
21850     = parser->integral_constant_expression_p;
21851   saved_non_integral_constant_expression_p
21852     = parser->non_integral_constant_expression_p;
21853   parser->integral_constant_expression_p = false;
21854
21855   /* If it's a `...', then we are computing the length of a parameter
21856      pack.  */
21857   if (keyword == RID_SIZEOF
21858       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
21859     {
21860       /* Consume the `...'.  */
21861       cp_lexer_consume_token (parser->lexer);
21862       maybe_warn_variadic_templates ();
21863
21864       /* Note that this is an expansion.  */
21865       pack_expansion_p = true;
21866     }
21867
21868   /* Do not actually evaluate the expression.  */
21869   ++cp_unevaluated_operand;
21870   ++c_inhibit_evaluation_warnings;
21871   /* If it's a `(', then we might be looking at the type-id
21872      construction.  */
21873   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
21874     {
21875       tree type;
21876       bool saved_in_type_id_in_expr_p;
21877
21878       /* We can't be sure yet whether we're looking at a type-id or an
21879          expression.  */
21880       cp_parser_parse_tentatively (parser);
21881       /* Consume the `('.  */
21882       cp_lexer_consume_token (parser->lexer);
21883       /* Parse the type-id.  */
21884       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
21885       parser->in_type_id_in_expr_p = true;
21886       type = cp_parser_type_id (parser);
21887       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
21888       /* Now, look for the trailing `)'.  */
21889       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
21890       /* If all went well, then we're done.  */
21891       if (cp_parser_parse_definitely (parser))
21892         {
21893           cp_decl_specifier_seq decl_specs;
21894
21895           /* Build a trivial decl-specifier-seq.  */
21896           clear_decl_specs (&decl_specs);
21897           decl_specs.type = type;
21898
21899           /* Call grokdeclarator to figure out what type this is.  */
21900           expr = grokdeclarator (NULL,
21901                                  &decl_specs,
21902                                  TYPENAME,
21903                                  /*initialized=*/0,
21904                                  /*attrlist=*/NULL);
21905         }
21906     }
21907
21908   /* If the type-id production did not work out, then we must be
21909      looking at the unary-expression production.  */
21910   if (!expr)
21911     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
21912                                        /*cast_p=*/false, NULL);
21913
21914   if (pack_expansion_p)
21915     /* Build a pack expansion. */
21916     expr = make_pack_expansion (expr);
21917
21918   /* Go back to evaluating expressions.  */
21919   --cp_unevaluated_operand;
21920   --c_inhibit_evaluation_warnings;
21921
21922   /* Free the message we created.  */
21923   free (tmp);
21924   /* And restore the old one.  */
21925   parser->type_definition_forbidden_message = saved_message;
21926   parser->integral_constant_expression_p
21927     = saved_integral_constant_expression_p;
21928   parser->non_integral_constant_expression_p
21929     = saved_non_integral_constant_expression_p;
21930
21931   return expr;
21932 }
21933
21934 /* If the current declaration has no declarator, return true.  */
21935
21936 static bool
21937 cp_parser_declares_only_class_p (cp_parser *parser)
21938 {
21939   /* If the next token is a `;' or a `,' then there is no
21940      declarator.  */
21941   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
21942           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
21943 }
21944
21945 /* Update the DECL_SPECS to reflect the storage class indicated by
21946    KEYWORD.  */
21947
21948 static void
21949 cp_parser_set_storage_class (cp_parser *parser,
21950                              cp_decl_specifier_seq *decl_specs,
21951                              enum rid keyword,
21952                              location_t location)
21953 {
21954   cp_storage_class storage_class;
21955
21956   if (parser->in_unbraced_linkage_specification_p)
21957     {
21958       error_at (location, "invalid use of %qD in linkage specification",
21959                 ridpointers[keyword]);
21960       return;
21961     }
21962   else if (decl_specs->storage_class != sc_none)
21963     {
21964       decl_specs->conflicting_specifiers_p = true;
21965       return;
21966     }
21967
21968   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
21969       && decl_specs->specs[(int) ds_thread])
21970     {
21971       error_at (location, "%<__thread%> before %qD", ridpointers[keyword]);
21972       decl_specs->specs[(int) ds_thread] = 0;
21973     }
21974
21975   switch (keyword)
21976     {
21977     case RID_AUTO:
21978       storage_class = sc_auto;
21979       break;
21980     case RID_REGISTER:
21981       storage_class = sc_register;
21982       break;
21983     case RID_STATIC:
21984       storage_class = sc_static;
21985       break;
21986     case RID_EXTERN:
21987       storage_class = sc_extern;
21988       break;
21989     case RID_MUTABLE:
21990       storage_class = sc_mutable;
21991       break;
21992     default:
21993       gcc_unreachable ();
21994     }
21995   decl_specs->storage_class = storage_class;
21996
21997   /* A storage class specifier cannot be applied alongside a typedef 
21998      specifier. If there is a typedef specifier present then set 
21999      conflicting_specifiers_p which will trigger an error later
22000      on in grokdeclarator. */
22001   if (decl_specs->specs[(int)ds_typedef])
22002     decl_specs->conflicting_specifiers_p = true;
22003 }
22004
22005 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If TYPE_DEFINITION_P
22006    is true, the type is a class or enum definition.  */
22007
22008 static void
22009 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
22010                               tree type_spec,
22011                               location_t location,
22012                               bool type_definition_p)
22013 {
22014   decl_specs->any_specifiers_p = true;
22015
22016   /* If the user tries to redeclare bool, char16_t, char32_t, or wchar_t
22017      (with, for example, in "typedef int wchar_t;") we remember that
22018      this is what happened.  In system headers, we ignore these
22019      declarations so that G++ can work with system headers that are not
22020      C++-safe.  */
22021   if (decl_specs->specs[(int) ds_typedef]
22022       && !type_definition_p
22023       && (type_spec == boolean_type_node
22024           || type_spec == char16_type_node
22025           || type_spec == char32_type_node
22026           || type_spec == wchar_type_node)
22027       && (decl_specs->type
22028           || decl_specs->specs[(int) ds_long]
22029           || decl_specs->specs[(int) ds_short]
22030           || decl_specs->specs[(int) ds_unsigned]
22031           || decl_specs->specs[(int) ds_signed]))
22032     {
22033       decl_specs->redefined_builtin_type = type_spec;
22034       if (!decl_specs->type)
22035         {
22036           decl_specs->type = type_spec;
22037           decl_specs->type_definition_p = false;
22038           decl_specs->type_location = location;
22039         }
22040     }
22041   else if (decl_specs->type)
22042     decl_specs->multiple_types_p = true;
22043   else
22044     {
22045       decl_specs->type = type_spec;
22046       decl_specs->type_definition_p = type_definition_p;
22047       decl_specs->redefined_builtin_type = NULL_TREE;
22048       decl_specs->type_location = location;
22049     }
22050 }
22051
22052 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
22053    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
22054
22055 static bool
22056 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
22057 {
22058   return decl_specifiers->specs[(int) ds_friend] != 0;
22059 }
22060
22061 /* Issue an error message indicating that TOKEN_DESC was expected.
22062    If KEYWORD is true, it indicated this function is called by
22063    cp_parser_require_keword and the required token can only be
22064    a indicated keyword. */
22065
22066 static void
22067 cp_parser_required_error (cp_parser *parser,
22068                           required_token token_desc,
22069                           bool keyword)
22070 {
22071   switch (token_desc)
22072     {
22073       case RT_NEW:
22074         cp_parser_error (parser, "expected %<new%>");
22075         return;
22076       case RT_DELETE:
22077         cp_parser_error (parser, "expected %<delete%>");
22078         return;
22079       case RT_RETURN:
22080         cp_parser_error (parser, "expected %<return%>");
22081         return;
22082       case RT_WHILE:
22083         cp_parser_error (parser, "expected %<while%>");
22084         return;
22085       case RT_EXTERN:
22086         cp_parser_error (parser, "expected %<extern%>");
22087         return;
22088       case RT_STATIC_ASSERT:
22089         cp_parser_error (parser, "expected %<static_assert%>");
22090         return;
22091       case RT_DECLTYPE:
22092         cp_parser_error (parser, "expected %<decltype%>");
22093         return;
22094       case RT_OPERATOR:
22095         cp_parser_error (parser, "expected %<operator%>");
22096         return;
22097       case RT_CLASS:
22098         cp_parser_error (parser, "expected %<class%>");
22099         return;
22100       case RT_TEMPLATE:
22101         cp_parser_error (parser, "expected %<template%>");
22102         return;
22103       case RT_NAMESPACE:
22104         cp_parser_error (parser, "expected %<namespace%>");
22105         return;
22106       case RT_USING:
22107         cp_parser_error (parser, "expected %<using%>");
22108         return;
22109       case RT_ASM:
22110         cp_parser_error (parser, "expected %<asm%>");
22111         return;
22112       case RT_TRY:
22113         cp_parser_error (parser, "expected %<try%>");
22114         return;
22115       case RT_CATCH:
22116         cp_parser_error (parser, "expected %<catch%>");
22117         return;
22118       case RT_THROW:
22119         cp_parser_error (parser, "expected %<throw%>");
22120         return;
22121       case RT_LABEL:
22122         cp_parser_error (parser, "expected %<__label__%>");
22123         return;
22124       case RT_AT_TRY:
22125         cp_parser_error (parser, "expected %<@try%>");
22126         return;
22127       case RT_AT_SYNCHRONIZED:
22128         cp_parser_error (parser, "expected %<@synchronized%>");
22129         return;
22130       case RT_AT_THROW:
22131         cp_parser_error (parser, "expected %<@throw%>");
22132         return;
22133       case RT_TRANSACTION_ATOMIC:
22134         cp_parser_error (parser, "expected %<__transaction_atomic%>");
22135         return;
22136       case RT_TRANSACTION_RELAXED:
22137         cp_parser_error (parser, "expected %<__transaction_relaxed%>");
22138         return;
22139       default:
22140         break;
22141     }
22142   if (!keyword)
22143     {
22144       switch (token_desc)
22145         {
22146           case RT_SEMICOLON:
22147             cp_parser_error (parser, "expected %<;%>");
22148             return;
22149           case RT_OPEN_PAREN:
22150             cp_parser_error (parser, "expected %<(%>");
22151             return;
22152           case RT_CLOSE_BRACE:
22153             cp_parser_error (parser, "expected %<}%>");
22154             return;
22155           case RT_OPEN_BRACE:
22156             cp_parser_error (parser, "expected %<{%>");
22157             return;
22158           case RT_CLOSE_SQUARE:
22159             cp_parser_error (parser, "expected %<]%>");
22160             return;
22161           case RT_OPEN_SQUARE:
22162             cp_parser_error (parser, "expected %<[%>");
22163             return;
22164           case RT_COMMA:
22165             cp_parser_error (parser, "expected %<,%>");
22166             return;
22167           case RT_SCOPE:
22168             cp_parser_error (parser, "expected %<::%>");
22169             return;
22170           case RT_LESS:
22171             cp_parser_error (parser, "expected %<<%>");
22172             return;
22173           case RT_GREATER:
22174             cp_parser_error (parser, "expected %<>%>");
22175             return;
22176           case RT_EQ:
22177             cp_parser_error (parser, "expected %<=%>");
22178             return;
22179           case RT_ELLIPSIS:
22180             cp_parser_error (parser, "expected %<...%>");
22181             return;
22182           case RT_MULT:
22183             cp_parser_error (parser, "expected %<*%>");
22184             return;
22185           case RT_COMPL:
22186             cp_parser_error (parser, "expected %<~%>");
22187             return;
22188           case RT_COLON:
22189             cp_parser_error (parser, "expected %<:%>");
22190             return;
22191           case RT_COLON_SCOPE:
22192             cp_parser_error (parser, "expected %<:%> or %<::%>");
22193             return;
22194           case RT_CLOSE_PAREN:
22195             cp_parser_error (parser, "expected %<)%>");
22196             return;
22197           case RT_COMMA_CLOSE_PAREN:
22198             cp_parser_error (parser, "expected %<,%> or %<)%>");
22199             return;
22200           case RT_PRAGMA_EOL:
22201             cp_parser_error (parser, "expected end of line");
22202             return;
22203           case RT_NAME:
22204             cp_parser_error (parser, "expected identifier");
22205             return;
22206           case RT_SELECT:
22207             cp_parser_error (parser, "expected selection-statement");
22208             return;
22209           case RT_INTERATION:
22210             cp_parser_error (parser, "expected iteration-statement");
22211             return;
22212           case RT_JUMP:
22213             cp_parser_error (parser, "expected jump-statement");
22214             return;
22215           case RT_CLASS_KEY:
22216             cp_parser_error (parser, "expected class-key");
22217             return;
22218           case RT_CLASS_TYPENAME_TEMPLATE:
22219             cp_parser_error (parser,
22220                  "expected %<class%>, %<typename%>, or %<template%>");
22221             return;
22222           default:
22223             gcc_unreachable ();
22224         }
22225     }
22226   else
22227     gcc_unreachable ();
22228 }
22229
22230
22231
22232 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
22233    issue an error message indicating that TOKEN_DESC was expected.
22234
22235    Returns the token consumed, if the token had the appropriate type.
22236    Otherwise, returns NULL.  */
22237
22238 static cp_token *
22239 cp_parser_require (cp_parser* parser,
22240                    enum cpp_ttype type,
22241                    required_token token_desc)
22242 {
22243   if (cp_lexer_next_token_is (parser->lexer, type))
22244     return cp_lexer_consume_token (parser->lexer);
22245   else
22246     {
22247       /* Output the MESSAGE -- unless we're parsing tentatively.  */
22248       if (!cp_parser_simulate_error (parser))
22249         cp_parser_required_error (parser, token_desc, /*keyword=*/false);
22250       return NULL;
22251     }
22252 }
22253
22254 /* An error message is produced if the next token is not '>'.
22255    All further tokens are skipped until the desired token is
22256    found or '{', '}', ';' or an unbalanced ')' or ']'.  */
22257
22258 static void
22259 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
22260 {
22261   /* Current level of '< ... >'.  */
22262   unsigned level = 0;
22263   /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
22264   unsigned nesting_depth = 0;
22265
22266   /* Are we ready, yet?  If not, issue error message.  */
22267   if (cp_parser_require (parser, CPP_GREATER, RT_GREATER))
22268     return;
22269
22270   /* Skip tokens until the desired token is found.  */
22271   while (true)
22272     {
22273       /* Peek at the next token.  */
22274       switch (cp_lexer_peek_token (parser->lexer)->type)
22275         {
22276         case CPP_LESS:
22277           if (!nesting_depth)
22278             ++level;
22279           break;
22280
22281         case CPP_RSHIFT:
22282           if (cxx_dialect == cxx98)
22283             /* C++0x views the `>>' operator as two `>' tokens, but
22284                C++98 does not. */
22285             break;
22286           else if (!nesting_depth && level-- == 0)
22287             {
22288               /* We've hit a `>>' where the first `>' closes the
22289                  template argument list, and the second `>' is
22290                  spurious.  Just consume the `>>' and stop; we've
22291                  already produced at least one error.  */
22292               cp_lexer_consume_token (parser->lexer);
22293               return;
22294             }
22295           /* Fall through for C++0x, so we handle the second `>' in
22296              the `>>'.  */
22297
22298         case CPP_GREATER:
22299           if (!nesting_depth && level-- == 0)
22300             {
22301               /* We've reached the token we want, consume it and stop.  */
22302               cp_lexer_consume_token (parser->lexer);
22303               return;
22304             }
22305           break;
22306
22307         case CPP_OPEN_PAREN:
22308         case CPP_OPEN_SQUARE:
22309           ++nesting_depth;
22310           break;
22311
22312         case CPP_CLOSE_PAREN:
22313         case CPP_CLOSE_SQUARE:
22314           if (nesting_depth-- == 0)
22315             return;
22316           break;
22317
22318         case CPP_EOF:
22319         case CPP_PRAGMA_EOL:
22320         case CPP_SEMICOLON:
22321         case CPP_OPEN_BRACE:
22322         case CPP_CLOSE_BRACE:
22323           /* The '>' was probably forgotten, don't look further.  */
22324           return;
22325
22326         default:
22327           break;
22328         }
22329
22330       /* Consume this token.  */
22331       cp_lexer_consume_token (parser->lexer);
22332     }
22333 }
22334
22335 /* If the next token is the indicated keyword, consume it.  Otherwise,
22336    issue an error message indicating that TOKEN_DESC was expected.
22337
22338    Returns the token consumed, if the token had the appropriate type.
22339    Otherwise, returns NULL.  */
22340
22341 static cp_token *
22342 cp_parser_require_keyword (cp_parser* parser,
22343                            enum rid keyword,
22344                            required_token token_desc)
22345 {
22346   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
22347
22348   if (token && token->keyword != keyword)
22349     {
22350       cp_parser_required_error (parser, token_desc, /*keyword=*/true); 
22351       return NULL;
22352     }
22353
22354   return token;
22355 }
22356
22357 /* Returns TRUE iff TOKEN is a token that can begin the body of a
22358    function-definition.  */
22359
22360 static bool
22361 cp_parser_token_starts_function_definition_p (cp_token* token)
22362 {
22363   return (/* An ordinary function-body begins with an `{'.  */
22364           token->type == CPP_OPEN_BRACE
22365           /* A ctor-initializer begins with a `:'.  */
22366           || token->type == CPP_COLON
22367           /* A function-try-block begins with `try'.  */
22368           || token->keyword == RID_TRY
22369           /* A function-transaction-block begins with `__transaction_atomic'
22370              or `__transaction_relaxed'.  */
22371           || token->keyword == RID_TRANSACTION_ATOMIC
22372           || token->keyword == RID_TRANSACTION_RELAXED
22373           /* The named return value extension begins with `return'.  */
22374           || token->keyword == RID_RETURN);
22375 }
22376
22377 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
22378    definition.  */
22379
22380 static bool
22381 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
22382 {
22383   cp_token *token;
22384
22385   token = cp_lexer_peek_token (parser->lexer);
22386   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
22387 }
22388
22389 /* Returns TRUE iff the next token is the "," or ">" (or `>>', in
22390    C++0x) ending a template-argument.  */
22391
22392 static bool
22393 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
22394 {
22395   cp_token *token;
22396
22397   token = cp_lexer_peek_token (parser->lexer);
22398   return (token->type == CPP_COMMA 
22399           || token->type == CPP_GREATER
22400           || token->type == CPP_ELLIPSIS
22401           || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT));
22402 }
22403
22404 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
22405    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
22406
22407 static bool
22408 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
22409                                                      size_t n)
22410 {
22411   cp_token *token;
22412
22413   token = cp_lexer_peek_nth_token (parser->lexer, n);
22414   if (token->type == CPP_LESS)
22415     return true;
22416   /* Check for the sequence `<::' in the original code. It would be lexed as
22417      `[:', where `[' is a digraph, and there is no whitespace before
22418      `:'.  */
22419   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
22420     {
22421       cp_token *token2;
22422       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
22423       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
22424         return true;
22425     }
22426   return false;
22427 }
22428
22429 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
22430    or none_type otherwise.  */
22431
22432 static enum tag_types
22433 cp_parser_token_is_class_key (cp_token* token)
22434 {
22435   switch (token->keyword)
22436     {
22437     case RID_CLASS:
22438       return class_type;
22439     case RID_STRUCT:
22440       return record_type;
22441     case RID_UNION:
22442       return union_type;
22443
22444     default:
22445       return none_type;
22446     }
22447 }
22448
22449 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
22450
22451 static void
22452 cp_parser_check_class_key (enum tag_types class_key, tree type)
22453 {
22454   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
22455     permerror (input_location, "%qs tag used in naming %q#T",
22456             class_key == union_type ? "union"
22457              : class_key == record_type ? "struct" : "class",
22458              type);
22459 }
22460
22461 /* Issue an error message if DECL is redeclared with different
22462    access than its original declaration [class.access.spec/3].
22463    This applies to nested classes and nested class templates.
22464    [class.mem/1].  */
22465
22466 static void
22467 cp_parser_check_access_in_redeclaration (tree decl, location_t location)
22468 {
22469   if (!decl || !CLASS_TYPE_P (TREE_TYPE (decl)))
22470     return;
22471
22472   if ((TREE_PRIVATE (decl)
22473        != (current_access_specifier == access_private_node))
22474       || (TREE_PROTECTED (decl)
22475           != (current_access_specifier == access_protected_node)))
22476     error_at (location, "%qD redeclared with different access", decl);
22477 }
22478
22479 /* Look for the `template' keyword, as a syntactic disambiguator.
22480    Return TRUE iff it is present, in which case it will be
22481    consumed.  */
22482
22483 static bool
22484 cp_parser_optional_template_keyword (cp_parser *parser)
22485 {
22486   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
22487     {
22488       /* The `template' keyword can only be used within templates;
22489          outside templates the parser can always figure out what is a
22490          template and what is not.  */
22491       if (!processing_template_decl)
22492         {
22493           cp_token *token = cp_lexer_peek_token (parser->lexer);
22494           error_at (token->location,
22495                     "%<template%> (as a disambiguator) is only allowed "
22496                     "within templates");
22497           /* If this part of the token stream is rescanned, the same
22498              error message would be generated.  So, we purge the token
22499              from the stream.  */
22500           cp_lexer_purge_token (parser->lexer);
22501           return false;
22502         }
22503       else
22504         {
22505           /* Consume the `template' keyword.  */
22506           cp_lexer_consume_token (parser->lexer);
22507           return true;
22508         }
22509     }
22510
22511   return false;
22512 }
22513
22514 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
22515    set PARSER->SCOPE, and perform other related actions.  */
22516
22517 static void
22518 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
22519 {
22520   int i;
22521   struct tree_check *check_value;
22522   deferred_access_check *chk;
22523   VEC (deferred_access_check,gc) *checks;
22524
22525   /* Get the stored value.  */
22526   check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
22527   /* Perform any access checks that were deferred.  */
22528   checks = check_value->checks;
22529   if (checks)
22530     {
22531       FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
22532         perform_or_defer_access_check (chk->binfo,
22533                                        chk->decl,
22534                                        chk->diag_decl);
22535     }
22536   /* Set the scope from the stored value.  */
22537   parser->scope = check_value->value;
22538   parser->qualifying_scope = check_value->qualifying_scope;
22539   parser->object_scope = NULL_TREE;
22540 }
22541
22542 /* Consume tokens up through a non-nested END token.  Returns TRUE if we
22543    encounter the end of a block before what we were looking for.  */
22544
22545 static bool
22546 cp_parser_cache_group (cp_parser *parser,
22547                        enum cpp_ttype end,
22548                        unsigned depth)
22549 {
22550   while (true)
22551     {
22552       cp_token *token = cp_lexer_peek_token (parser->lexer);
22553
22554       /* Abort a parenthesized expression if we encounter a semicolon.  */
22555       if ((end == CPP_CLOSE_PAREN || depth == 0)
22556           && token->type == CPP_SEMICOLON)
22557         return true;
22558       /* If we've reached the end of the file, stop.  */
22559       if (token->type == CPP_EOF
22560           || (end != CPP_PRAGMA_EOL
22561               && token->type == CPP_PRAGMA_EOL))
22562         return true;
22563       if (token->type == CPP_CLOSE_BRACE && depth == 0)
22564         /* We've hit the end of an enclosing block, so there's been some
22565            kind of syntax error.  */
22566         return true;
22567
22568       /* If we're caching something finished by a comma (or semicolon),
22569          such as an NSDMI, don't consume the comma.  */
22570       if (end == CPP_COMMA
22571           && (token->type == CPP_SEMICOLON || token->type == CPP_COMMA))
22572         return false;
22573
22574       /* Consume the token.  */
22575       cp_lexer_consume_token (parser->lexer);
22576       /* See if it starts a new group.  */
22577       if (token->type == CPP_OPEN_BRACE)
22578         {
22579           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
22580           /* In theory this should probably check end == '}', but
22581              cp_parser_save_member_function_body needs it to exit
22582              after either '}' or ')' when called with ')'.  */
22583           if (depth == 0)
22584             return false;
22585         }
22586       else if (token->type == CPP_OPEN_PAREN)
22587         {
22588           cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
22589           if (depth == 0 && end == CPP_CLOSE_PAREN)
22590             return false;
22591         }
22592       else if (token->type == CPP_PRAGMA)
22593         cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
22594       else if (token->type == end)
22595         return false;
22596     }
22597 }
22598
22599 /* Begin parsing tentatively.  We always save tokens while parsing
22600    tentatively so that if the tentative parsing fails we can restore the
22601    tokens.  */
22602
22603 static void
22604 cp_parser_parse_tentatively (cp_parser* parser)
22605 {
22606   /* Enter a new parsing context.  */
22607   parser->context = cp_parser_context_new (parser->context);
22608   /* Begin saving tokens.  */
22609   cp_lexer_save_tokens (parser->lexer);
22610   /* In order to avoid repetitive access control error messages,
22611      access checks are queued up until we are no longer parsing
22612      tentatively.  */
22613   push_deferring_access_checks (dk_deferred);
22614 }
22615
22616 /* Commit to the currently active tentative parse.  */
22617
22618 static void
22619 cp_parser_commit_to_tentative_parse (cp_parser* parser)
22620 {
22621   cp_parser_context *context;
22622   cp_lexer *lexer;
22623
22624   /* Mark all of the levels as committed.  */
22625   lexer = parser->lexer;
22626   for (context = parser->context; context->next; context = context->next)
22627     {
22628       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
22629         break;
22630       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
22631       while (!cp_lexer_saving_tokens (lexer))
22632         lexer = lexer->next;
22633       cp_lexer_commit_tokens (lexer);
22634     }
22635 }
22636
22637 /* Abort the currently active tentative parse.  All consumed tokens
22638    will be rolled back, and no diagnostics will be issued.  */
22639
22640 static void
22641 cp_parser_abort_tentative_parse (cp_parser* parser)
22642 {
22643   gcc_assert (parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED
22644               || errorcount > 0);
22645   cp_parser_simulate_error (parser);
22646   /* Now, pretend that we want to see if the construct was
22647      successfully parsed.  */
22648   cp_parser_parse_definitely (parser);
22649 }
22650
22651 /* Stop parsing tentatively.  If a parse error has occurred, restore the
22652    token stream.  Otherwise, commit to the tokens we have consumed.
22653    Returns true if no error occurred; false otherwise.  */
22654
22655 static bool
22656 cp_parser_parse_definitely (cp_parser* parser)
22657 {
22658   bool error_occurred;
22659   cp_parser_context *context;
22660
22661   /* Remember whether or not an error occurred, since we are about to
22662      destroy that information.  */
22663   error_occurred = cp_parser_error_occurred (parser);
22664   /* Remove the topmost context from the stack.  */
22665   context = parser->context;
22666   parser->context = context->next;
22667   /* If no parse errors occurred, commit to the tentative parse.  */
22668   if (!error_occurred)
22669     {
22670       /* Commit to the tokens read tentatively, unless that was
22671          already done.  */
22672       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
22673         cp_lexer_commit_tokens (parser->lexer);
22674
22675       pop_to_parent_deferring_access_checks ();
22676     }
22677   /* Otherwise, if errors occurred, roll back our state so that things
22678      are just as they were before we began the tentative parse.  */
22679   else
22680     {
22681       cp_lexer_rollback_tokens (parser->lexer);
22682       pop_deferring_access_checks ();
22683     }
22684   /* Add the context to the front of the free list.  */
22685   context->next = cp_parser_context_free_list;
22686   cp_parser_context_free_list = context;
22687
22688   return !error_occurred;
22689 }
22690
22691 /* Returns true if we are parsing tentatively and are not committed to
22692    this tentative parse.  */
22693
22694 static bool
22695 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
22696 {
22697   return (cp_parser_parsing_tentatively (parser)
22698           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
22699 }
22700
22701 /* Returns nonzero iff an error has occurred during the most recent
22702    tentative parse.  */
22703
22704 static bool
22705 cp_parser_error_occurred (cp_parser* parser)
22706 {
22707   return (cp_parser_parsing_tentatively (parser)
22708           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
22709 }
22710
22711 /* Returns nonzero if GNU extensions are allowed.  */
22712
22713 static bool
22714 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
22715 {
22716   return parser->allow_gnu_extensions_p;
22717 }
22718 \f
22719 /* Objective-C++ Productions */
22720
22721
22722 /* Parse an Objective-C expression, which feeds into a primary-expression
22723    above.
22724
22725    objc-expression:
22726      objc-message-expression
22727      objc-string-literal
22728      objc-encode-expression
22729      objc-protocol-expression
22730      objc-selector-expression
22731
22732   Returns a tree representation of the expression.  */
22733
22734 static tree
22735 cp_parser_objc_expression (cp_parser* parser)
22736 {
22737   /* Try to figure out what kind of declaration is present.  */
22738   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
22739
22740   switch (kwd->type)
22741     {
22742     case CPP_OPEN_SQUARE:
22743       return cp_parser_objc_message_expression (parser);
22744
22745     case CPP_OBJC_STRING:
22746       kwd = cp_lexer_consume_token (parser->lexer);
22747       return objc_build_string_object (kwd->u.value);
22748
22749     case CPP_KEYWORD:
22750       switch (kwd->keyword)
22751         {
22752         case RID_AT_ENCODE:
22753           return cp_parser_objc_encode_expression (parser);
22754
22755         case RID_AT_PROTOCOL:
22756           return cp_parser_objc_protocol_expression (parser);
22757
22758         case RID_AT_SELECTOR:
22759           return cp_parser_objc_selector_expression (parser);
22760
22761         default:
22762           break;
22763         }
22764     default:
22765       error_at (kwd->location,
22766                 "misplaced %<@%D%> Objective-C++ construct",
22767                 kwd->u.value);
22768       cp_parser_skip_to_end_of_block_or_statement (parser);
22769     }
22770
22771   return error_mark_node;
22772 }
22773
22774 /* Parse an Objective-C message expression.
22775
22776    objc-message-expression:
22777      [ objc-message-receiver objc-message-args ]
22778
22779    Returns a representation of an Objective-C message.  */
22780
22781 static tree
22782 cp_parser_objc_message_expression (cp_parser* parser)
22783 {
22784   tree receiver, messageargs;
22785
22786   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
22787   receiver = cp_parser_objc_message_receiver (parser);
22788   messageargs = cp_parser_objc_message_args (parser);
22789   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
22790
22791   return objc_build_message_expr (receiver, messageargs);
22792 }
22793
22794 /* Parse an objc-message-receiver.
22795
22796    objc-message-receiver:
22797      expression
22798      simple-type-specifier
22799
22800   Returns a representation of the type or expression.  */
22801
22802 static tree
22803 cp_parser_objc_message_receiver (cp_parser* parser)
22804 {
22805   tree rcv;
22806
22807   /* An Objective-C message receiver may be either (1) a type
22808      or (2) an expression.  */
22809   cp_parser_parse_tentatively (parser);
22810   rcv = cp_parser_expression (parser, false, NULL);
22811
22812   if (cp_parser_parse_definitely (parser))
22813     return rcv;
22814
22815   rcv = cp_parser_simple_type_specifier (parser,
22816                                          /*decl_specs=*/NULL,
22817                                          CP_PARSER_FLAGS_NONE);
22818
22819   return objc_get_class_reference (rcv);
22820 }
22821
22822 /* Parse the arguments and selectors comprising an Objective-C message.
22823
22824    objc-message-args:
22825      objc-selector
22826      objc-selector-args
22827      objc-selector-args , objc-comma-args
22828
22829    objc-selector-args:
22830      objc-selector [opt] : assignment-expression
22831      objc-selector-args objc-selector [opt] : assignment-expression
22832
22833    objc-comma-args:
22834      assignment-expression
22835      objc-comma-args , assignment-expression
22836
22837    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
22838    selector arguments and TREE_VALUE containing a list of comma
22839    arguments.  */
22840
22841 static tree
22842 cp_parser_objc_message_args (cp_parser* parser)
22843 {
22844   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
22845   bool maybe_unary_selector_p = true;
22846   cp_token *token = cp_lexer_peek_token (parser->lexer);
22847
22848   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
22849     {
22850       tree selector = NULL_TREE, arg;
22851
22852       if (token->type != CPP_COLON)
22853         selector = cp_parser_objc_selector (parser);
22854
22855       /* Detect if we have a unary selector.  */
22856       if (maybe_unary_selector_p
22857           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
22858         return build_tree_list (selector, NULL_TREE);
22859
22860       maybe_unary_selector_p = false;
22861       cp_parser_require (parser, CPP_COLON, RT_COLON);
22862       arg = cp_parser_assignment_expression (parser, false, NULL);
22863
22864       sel_args
22865         = chainon (sel_args,
22866                    build_tree_list (selector, arg));
22867
22868       token = cp_lexer_peek_token (parser->lexer);
22869     }
22870
22871   /* Handle non-selector arguments, if any. */
22872   while (token->type == CPP_COMMA)
22873     {
22874       tree arg;
22875
22876       cp_lexer_consume_token (parser->lexer);
22877       arg = cp_parser_assignment_expression (parser, false, NULL);
22878
22879       addl_args
22880         = chainon (addl_args,
22881                    build_tree_list (NULL_TREE, arg));
22882
22883       token = cp_lexer_peek_token (parser->lexer);
22884     }
22885
22886   if (sel_args == NULL_TREE && addl_args == NULL_TREE)
22887     {
22888       cp_parser_error (parser, "objective-c++ message argument(s) are expected");
22889       return build_tree_list (error_mark_node, error_mark_node);
22890     }
22891
22892   return build_tree_list (sel_args, addl_args);
22893 }
22894
22895 /* Parse an Objective-C encode expression.
22896
22897    objc-encode-expression:
22898      @encode objc-typename
22899
22900    Returns an encoded representation of the type argument.  */
22901
22902 static tree
22903 cp_parser_objc_encode_expression (cp_parser* parser)
22904 {
22905   tree type;
22906   cp_token *token;
22907
22908   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
22909   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22910   token = cp_lexer_peek_token (parser->lexer);
22911   type = complete_type (cp_parser_type_id (parser));
22912   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22913
22914   if (!type)
22915     {
22916       error_at (token->location, 
22917                 "%<@encode%> must specify a type as an argument");
22918       return error_mark_node;
22919     }
22920
22921   /* This happens if we find @encode(T) (where T is a template
22922      typename or something dependent on a template typename) when
22923      parsing a template.  In that case, we can't compile it
22924      immediately, but we rather create an AT_ENCODE_EXPR which will
22925      need to be instantiated when the template is used.
22926   */
22927   if (dependent_type_p (type))
22928     {
22929       tree value = build_min (AT_ENCODE_EXPR, size_type_node, type);
22930       TREE_READONLY (value) = 1;
22931       return value;
22932     }
22933
22934   return objc_build_encode_expr (type);
22935 }
22936
22937 /* Parse an Objective-C @defs expression.  */
22938
22939 static tree
22940 cp_parser_objc_defs_expression (cp_parser *parser)
22941 {
22942   tree name;
22943
22944   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
22945   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22946   name = cp_parser_identifier (parser);
22947   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22948
22949   return objc_get_class_ivars (name);
22950 }
22951
22952 /* Parse an Objective-C protocol expression.
22953
22954   objc-protocol-expression:
22955     @protocol ( identifier )
22956
22957   Returns a representation of the protocol expression.  */
22958
22959 static tree
22960 cp_parser_objc_protocol_expression (cp_parser* parser)
22961 {
22962   tree proto;
22963
22964   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
22965   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22966   proto = cp_parser_identifier (parser);
22967   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22968
22969   return objc_build_protocol_expr (proto);
22970 }
22971
22972 /* Parse an Objective-C selector expression.
22973
22974    objc-selector-expression:
22975      @selector ( objc-method-signature )
22976
22977    objc-method-signature:
22978      objc-selector
22979      objc-selector-seq
22980
22981    objc-selector-seq:
22982      objc-selector :
22983      objc-selector-seq objc-selector :
22984
22985   Returns a representation of the method selector.  */
22986
22987 static tree
22988 cp_parser_objc_selector_expression (cp_parser* parser)
22989 {
22990   tree sel_seq = NULL_TREE;
22991   bool maybe_unary_selector_p = true;
22992   cp_token *token;
22993   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
22994
22995   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
22996   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22997   token = cp_lexer_peek_token (parser->lexer);
22998
22999   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
23000          || token->type == CPP_SCOPE)
23001     {
23002       tree selector = NULL_TREE;
23003
23004       if (token->type != CPP_COLON
23005           || token->type == CPP_SCOPE)
23006         selector = cp_parser_objc_selector (parser);
23007
23008       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
23009           && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
23010         {
23011           /* Detect if we have a unary selector.  */
23012           if (maybe_unary_selector_p)
23013             {
23014               sel_seq = selector;
23015               goto finish_selector;
23016             }
23017           else
23018             {
23019               cp_parser_error (parser, "expected %<:%>");
23020             }
23021         }
23022       maybe_unary_selector_p = false;
23023       token = cp_lexer_consume_token (parser->lexer);
23024
23025       if (token->type == CPP_SCOPE)
23026         {
23027           sel_seq
23028             = chainon (sel_seq,
23029                        build_tree_list (selector, NULL_TREE));
23030           sel_seq
23031             = chainon (sel_seq,
23032                        build_tree_list (NULL_TREE, NULL_TREE));
23033         }
23034       else
23035         sel_seq
23036           = chainon (sel_seq,
23037                      build_tree_list (selector, NULL_TREE));
23038
23039       token = cp_lexer_peek_token (parser->lexer);
23040     }
23041
23042  finish_selector:
23043   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23044
23045   return objc_build_selector_expr (loc, sel_seq);
23046 }
23047
23048 /* Parse a list of identifiers.
23049
23050    objc-identifier-list:
23051      identifier
23052      objc-identifier-list , identifier
23053
23054    Returns a TREE_LIST of identifier nodes.  */
23055
23056 static tree
23057 cp_parser_objc_identifier_list (cp_parser* parser)
23058 {
23059   tree identifier;
23060   tree list;
23061   cp_token *sep;
23062
23063   identifier = cp_parser_identifier (parser);
23064   if (identifier == error_mark_node)
23065     return error_mark_node;      
23066
23067   list = build_tree_list (NULL_TREE, identifier);
23068   sep = cp_lexer_peek_token (parser->lexer);
23069
23070   while (sep->type == CPP_COMMA)
23071     {
23072       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
23073       identifier = cp_parser_identifier (parser);
23074       if (identifier == error_mark_node)
23075         return list;
23076
23077       list = chainon (list, build_tree_list (NULL_TREE,
23078                                              identifier));
23079       sep = cp_lexer_peek_token (parser->lexer);
23080     }
23081   
23082   return list;
23083 }
23084
23085 /* Parse an Objective-C alias declaration.
23086
23087    objc-alias-declaration:
23088      @compatibility_alias identifier identifier ;
23089
23090    This function registers the alias mapping with the Objective-C front end.
23091    It returns nothing.  */
23092
23093 static void
23094 cp_parser_objc_alias_declaration (cp_parser* parser)
23095 {
23096   tree alias, orig;
23097
23098   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
23099   alias = cp_parser_identifier (parser);
23100   orig = cp_parser_identifier (parser);
23101   objc_declare_alias (alias, orig);
23102   cp_parser_consume_semicolon_at_end_of_statement (parser);
23103 }
23104
23105 /* Parse an Objective-C class forward-declaration.
23106
23107    objc-class-declaration:
23108      @class objc-identifier-list ;
23109
23110    The function registers the forward declarations with the Objective-C
23111    front end.  It returns nothing.  */
23112
23113 static void
23114 cp_parser_objc_class_declaration (cp_parser* parser)
23115 {
23116   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
23117   while (true)
23118     {
23119       tree id;
23120       
23121       id = cp_parser_identifier (parser);
23122       if (id == error_mark_node)
23123         break;
23124       
23125       objc_declare_class (id);
23126
23127       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23128         cp_lexer_consume_token (parser->lexer);
23129       else
23130         break;
23131     }
23132   cp_parser_consume_semicolon_at_end_of_statement (parser);
23133 }
23134
23135 /* Parse a list of Objective-C protocol references.
23136
23137    objc-protocol-refs-opt:
23138      objc-protocol-refs [opt]
23139
23140    objc-protocol-refs:
23141      < objc-identifier-list >
23142
23143    Returns a TREE_LIST of identifiers, if any.  */
23144
23145 static tree
23146 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
23147 {
23148   tree protorefs = NULL_TREE;
23149
23150   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
23151     {
23152       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
23153       protorefs = cp_parser_objc_identifier_list (parser);
23154       cp_parser_require (parser, CPP_GREATER, RT_GREATER);
23155     }
23156
23157   return protorefs;
23158 }
23159
23160 /* Parse a Objective-C visibility specification.  */
23161
23162 static void
23163 cp_parser_objc_visibility_spec (cp_parser* parser)
23164 {
23165   cp_token *vis = cp_lexer_peek_token (parser->lexer);
23166
23167   switch (vis->keyword)
23168     {
23169     case RID_AT_PRIVATE:
23170       objc_set_visibility (OBJC_IVAR_VIS_PRIVATE);
23171       break;
23172     case RID_AT_PROTECTED:
23173       objc_set_visibility (OBJC_IVAR_VIS_PROTECTED);
23174       break;
23175     case RID_AT_PUBLIC:
23176       objc_set_visibility (OBJC_IVAR_VIS_PUBLIC);
23177       break;
23178     case RID_AT_PACKAGE:
23179       objc_set_visibility (OBJC_IVAR_VIS_PACKAGE);
23180       break;
23181     default:
23182       return;
23183     }
23184
23185   /* Eat '@private'/'@protected'/'@public'.  */
23186   cp_lexer_consume_token (parser->lexer);
23187 }
23188
23189 /* Parse an Objective-C method type.  Return 'true' if it is a class
23190    (+) method, and 'false' if it is an instance (-) method.  */
23191
23192 static inline bool
23193 cp_parser_objc_method_type (cp_parser* parser)
23194 {
23195   if (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS)
23196     return true;
23197   else
23198     return false;
23199 }
23200
23201 /* Parse an Objective-C protocol qualifier.  */
23202
23203 static tree
23204 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
23205 {
23206   tree quals = NULL_TREE, node;
23207   cp_token *token = cp_lexer_peek_token (parser->lexer);
23208
23209   node = token->u.value;
23210
23211   while (node && TREE_CODE (node) == IDENTIFIER_NODE
23212          && (node == ridpointers [(int) RID_IN]
23213              || node == ridpointers [(int) RID_OUT]
23214              || node == ridpointers [(int) RID_INOUT]
23215              || node == ridpointers [(int) RID_BYCOPY]
23216              || node == ridpointers [(int) RID_BYREF]
23217              || node == ridpointers [(int) RID_ONEWAY]))
23218     {
23219       quals = tree_cons (NULL_TREE, node, quals);
23220       cp_lexer_consume_token (parser->lexer);
23221       token = cp_lexer_peek_token (parser->lexer);
23222       node = token->u.value;
23223     }
23224
23225   return quals;
23226 }
23227
23228 /* Parse an Objective-C typename.  */
23229
23230 static tree
23231 cp_parser_objc_typename (cp_parser* parser)
23232 {
23233   tree type_name = NULL_TREE;
23234
23235   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
23236     {
23237       tree proto_quals, cp_type = NULL_TREE;
23238
23239       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
23240       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
23241
23242       /* An ObjC type name may consist of just protocol qualifiers, in which
23243          case the type shall default to 'id'.  */
23244       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
23245         {
23246           cp_type = cp_parser_type_id (parser);
23247           
23248           /* If the type could not be parsed, an error has already
23249              been produced.  For error recovery, behave as if it had
23250              not been specified, which will use the default type
23251              'id'.  */
23252           if (cp_type == error_mark_node)
23253             {
23254               cp_type = NULL_TREE;
23255               /* We need to skip to the closing parenthesis as
23256                  cp_parser_type_id() does not seem to do it for
23257                  us.  */
23258               cp_parser_skip_to_closing_parenthesis (parser,
23259                                                      /*recovering=*/true,
23260                                                      /*or_comma=*/false,
23261                                                      /*consume_paren=*/false);
23262             }
23263         }
23264
23265       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23266       type_name = build_tree_list (proto_quals, cp_type);
23267     }
23268
23269   return type_name;
23270 }
23271
23272 /* Check to see if TYPE refers to an Objective-C selector name.  */
23273
23274 static bool
23275 cp_parser_objc_selector_p (enum cpp_ttype type)
23276 {
23277   return (type == CPP_NAME || type == CPP_KEYWORD
23278           || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
23279           || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
23280           || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
23281           || type == CPP_XOR || type == CPP_XOR_EQ);
23282 }
23283
23284 /* Parse an Objective-C selector.  */
23285
23286 static tree
23287 cp_parser_objc_selector (cp_parser* parser)
23288 {
23289   cp_token *token = cp_lexer_consume_token (parser->lexer);
23290
23291   if (!cp_parser_objc_selector_p (token->type))
23292     {
23293       error_at (token->location, "invalid Objective-C++ selector name");
23294       return error_mark_node;
23295     }
23296
23297   /* C++ operator names are allowed to appear in ObjC selectors.  */
23298   switch (token->type)
23299     {
23300     case CPP_AND_AND: return get_identifier ("and");
23301     case CPP_AND_EQ: return get_identifier ("and_eq");
23302     case CPP_AND: return get_identifier ("bitand");
23303     case CPP_OR: return get_identifier ("bitor");
23304     case CPP_COMPL: return get_identifier ("compl");
23305     case CPP_NOT: return get_identifier ("not");
23306     case CPP_NOT_EQ: return get_identifier ("not_eq");
23307     case CPP_OR_OR: return get_identifier ("or");
23308     case CPP_OR_EQ: return get_identifier ("or_eq");
23309     case CPP_XOR: return get_identifier ("xor");
23310     case CPP_XOR_EQ: return get_identifier ("xor_eq");
23311     default: return token->u.value;
23312     }
23313 }
23314
23315 /* Parse an Objective-C params list.  */
23316
23317 static tree
23318 cp_parser_objc_method_keyword_params (cp_parser* parser, tree* attributes)
23319 {
23320   tree params = NULL_TREE;
23321   bool maybe_unary_selector_p = true;
23322   cp_token *token = cp_lexer_peek_token (parser->lexer);
23323
23324   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
23325     {
23326       tree selector = NULL_TREE, type_name, identifier;
23327       tree parm_attr = NULL_TREE;
23328
23329       if (token->keyword == RID_ATTRIBUTE)
23330         break;
23331
23332       if (token->type != CPP_COLON)
23333         selector = cp_parser_objc_selector (parser);
23334
23335       /* Detect if we have a unary selector.  */
23336       if (maybe_unary_selector_p
23337           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
23338         {
23339           params = selector; /* Might be followed by attributes.  */
23340           break;
23341         }
23342
23343       maybe_unary_selector_p = false;
23344       if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
23345         {
23346           /* Something went quite wrong.  There should be a colon
23347              here, but there is not.  Stop parsing parameters.  */
23348           break;
23349         }
23350       type_name = cp_parser_objc_typename (parser);
23351       /* New ObjC allows attributes on parameters too.  */
23352       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
23353         parm_attr = cp_parser_attributes_opt (parser);
23354       identifier = cp_parser_identifier (parser);
23355
23356       params
23357         = chainon (params,
23358                    objc_build_keyword_decl (selector,
23359                                             type_name,
23360                                             identifier,
23361                                             parm_attr));
23362
23363       token = cp_lexer_peek_token (parser->lexer);
23364     }
23365
23366   if (params == NULL_TREE)
23367     {
23368       cp_parser_error (parser, "objective-c++ method declaration is expected");
23369       return error_mark_node;
23370     }
23371
23372   /* We allow tail attributes for the method.  */
23373   if (token->keyword == RID_ATTRIBUTE)
23374     {
23375       *attributes = cp_parser_attributes_opt (parser);
23376       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
23377           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
23378         return params;
23379       cp_parser_error (parser, 
23380                        "method attributes must be specified at the end");
23381       return error_mark_node;
23382     }
23383
23384   if (params == NULL_TREE)
23385     {
23386       cp_parser_error (parser, "objective-c++ method declaration is expected");
23387       return error_mark_node;
23388     }
23389   return params;
23390 }
23391
23392 /* Parse the non-keyword Objective-C params.  */
23393
23394 static tree
23395 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp, 
23396                                        tree* attributes)
23397 {
23398   tree params = make_node (TREE_LIST);
23399   cp_token *token = cp_lexer_peek_token (parser->lexer);
23400   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
23401
23402   while (token->type == CPP_COMMA)
23403     {
23404       cp_parameter_declarator *parmdecl;
23405       tree parm;
23406
23407       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
23408       token = cp_lexer_peek_token (parser->lexer);
23409
23410       if (token->type == CPP_ELLIPSIS)
23411         {
23412           cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
23413           *ellipsisp = true;
23414           token = cp_lexer_peek_token (parser->lexer);
23415           break;
23416         }
23417
23418       /* TODO: parse attributes for tail parameters.  */
23419       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
23420       parm = grokdeclarator (parmdecl->declarator,
23421                              &parmdecl->decl_specifiers,
23422                              PARM, /*initialized=*/0,
23423                              /*attrlist=*/NULL);
23424
23425       chainon (params, build_tree_list (NULL_TREE, parm));
23426       token = cp_lexer_peek_token (parser->lexer);
23427     }
23428
23429   /* We allow tail attributes for the method.  */
23430   if (token->keyword == RID_ATTRIBUTE)
23431     {
23432       if (*attributes == NULL_TREE)
23433         {
23434           *attributes = cp_parser_attributes_opt (parser);
23435           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
23436               || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
23437             return params;
23438         }
23439       else        
23440         /* We have an error, but parse the attributes, so that we can 
23441            carry on.  */
23442         *attributes = cp_parser_attributes_opt (parser);
23443
23444       cp_parser_error (parser, 
23445                        "method attributes must be specified at the end");
23446       return error_mark_node;
23447     }
23448
23449   return params;
23450 }
23451
23452 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
23453
23454 static void
23455 cp_parser_objc_interstitial_code (cp_parser* parser)
23456 {
23457   cp_token *token = cp_lexer_peek_token (parser->lexer);
23458
23459   /* If the next token is `extern' and the following token is a string
23460      literal, then we have a linkage specification.  */
23461   if (token->keyword == RID_EXTERN
23462       && cp_parser_is_pure_string_literal
23463          (cp_lexer_peek_nth_token (parser->lexer, 2)))
23464     cp_parser_linkage_specification (parser);
23465   /* Handle #pragma, if any.  */
23466   else if (token->type == CPP_PRAGMA)
23467     cp_parser_pragma (parser, pragma_external);
23468   /* Allow stray semicolons.  */
23469   else if (token->type == CPP_SEMICOLON)
23470     cp_lexer_consume_token (parser->lexer);
23471   /* Mark methods as optional or required, when building protocols.  */
23472   else if (token->keyword == RID_AT_OPTIONAL)
23473     {
23474       cp_lexer_consume_token (parser->lexer);
23475       objc_set_method_opt (true);
23476     }
23477   else if (token->keyword == RID_AT_REQUIRED)
23478     {
23479       cp_lexer_consume_token (parser->lexer);
23480       objc_set_method_opt (false);
23481     }
23482   else if (token->keyword == RID_NAMESPACE)
23483     cp_parser_namespace_definition (parser);
23484   /* Other stray characters must generate errors.  */
23485   else if (token->type == CPP_OPEN_BRACE || token->type == CPP_CLOSE_BRACE)
23486     {
23487       cp_lexer_consume_token (parser->lexer);
23488       error ("stray %qs between Objective-C++ methods",
23489              token->type == CPP_OPEN_BRACE ? "{" : "}");
23490     }
23491   /* Finally, try to parse a block-declaration, or a function-definition.  */
23492   else
23493     cp_parser_block_declaration (parser, /*statement_p=*/false);
23494 }
23495
23496 /* Parse a method signature.  */
23497
23498 static tree
23499 cp_parser_objc_method_signature (cp_parser* parser, tree* attributes)
23500 {
23501   tree rettype, kwdparms, optparms;
23502   bool ellipsis = false;
23503   bool is_class_method;
23504
23505   is_class_method = cp_parser_objc_method_type (parser);
23506   rettype = cp_parser_objc_typename (parser);
23507   *attributes = NULL_TREE;
23508   kwdparms = cp_parser_objc_method_keyword_params (parser, attributes);
23509   if (kwdparms == error_mark_node)
23510     return error_mark_node;
23511   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis, attributes);
23512   if (optparms == error_mark_node)
23513     return error_mark_node;
23514
23515   return objc_build_method_signature (is_class_method, rettype, kwdparms, optparms, ellipsis);
23516 }
23517
23518 static bool
23519 cp_parser_objc_method_maybe_bad_prefix_attributes (cp_parser* parser)
23520 {
23521   tree tattr;  
23522   cp_lexer_save_tokens (parser->lexer);
23523   tattr = cp_parser_attributes_opt (parser);
23524   gcc_assert (tattr) ;
23525   
23526   /* If the attributes are followed by a method introducer, this is not allowed.
23527      Dump the attributes and flag the situation.  */
23528   if (cp_lexer_next_token_is (parser->lexer, CPP_PLUS)
23529       || cp_lexer_next_token_is (parser->lexer, CPP_MINUS))
23530     return true;
23531
23532   /* Otherwise, the attributes introduce some interstitial code, possibly so
23533      rewind to allow that check.  */
23534   cp_lexer_rollback_tokens (parser->lexer);
23535   return false;  
23536 }
23537
23538 /* Parse an Objective-C method prototype list.  */
23539
23540 static void
23541 cp_parser_objc_method_prototype_list (cp_parser* parser)
23542 {
23543   cp_token *token = cp_lexer_peek_token (parser->lexer);
23544
23545   while (token->keyword != RID_AT_END && token->type != CPP_EOF)
23546     {
23547       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
23548         {
23549           tree attributes, sig;
23550           bool is_class_method;
23551           if (token->type == CPP_PLUS)
23552             is_class_method = true;
23553           else
23554             is_class_method = false;
23555           sig = cp_parser_objc_method_signature (parser, &attributes);
23556           if (sig == error_mark_node)
23557             {
23558               cp_parser_skip_to_end_of_block_or_statement (parser);
23559               token = cp_lexer_peek_token (parser->lexer);
23560               continue;
23561             }
23562           objc_add_method_declaration (is_class_method, sig, attributes);
23563           cp_parser_consume_semicolon_at_end_of_statement (parser);
23564         }
23565       else if (token->keyword == RID_AT_PROPERTY)
23566         cp_parser_objc_at_property_declaration (parser);
23567       else if (token->keyword == RID_ATTRIBUTE 
23568                && cp_parser_objc_method_maybe_bad_prefix_attributes(parser))
23569         warning_at (cp_lexer_peek_token (parser->lexer)->location, 
23570                     OPT_Wattributes, 
23571                     "prefix attributes are ignored for methods");
23572       else
23573         /* Allow for interspersed non-ObjC++ code.  */
23574         cp_parser_objc_interstitial_code (parser);
23575
23576       token = cp_lexer_peek_token (parser->lexer);
23577     }
23578
23579   if (token->type != CPP_EOF)
23580     cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
23581   else
23582     cp_parser_error (parser, "expected %<@end%>");
23583
23584   objc_finish_interface ();
23585 }
23586
23587 /* Parse an Objective-C method definition list.  */
23588
23589 static void
23590 cp_parser_objc_method_definition_list (cp_parser* parser)
23591 {
23592   cp_token *token = cp_lexer_peek_token (parser->lexer);
23593
23594   while (token->keyword != RID_AT_END && token->type != CPP_EOF)
23595     {
23596       tree meth;
23597
23598       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
23599         {
23600           cp_token *ptk;
23601           tree sig, attribute;
23602           bool is_class_method;
23603           if (token->type == CPP_PLUS)
23604             is_class_method = true;
23605           else
23606             is_class_method = false;
23607           push_deferring_access_checks (dk_deferred);
23608           sig = cp_parser_objc_method_signature (parser, &attribute);
23609           if (sig == error_mark_node)
23610             {
23611               cp_parser_skip_to_end_of_block_or_statement (parser);
23612               token = cp_lexer_peek_token (parser->lexer);
23613               continue;
23614             }
23615           objc_start_method_definition (is_class_method, sig, attribute,
23616                                         NULL_TREE);
23617
23618           /* For historical reasons, we accept an optional semicolon.  */
23619           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
23620             cp_lexer_consume_token (parser->lexer);
23621
23622           ptk = cp_lexer_peek_token (parser->lexer);
23623           if (!(ptk->type == CPP_PLUS || ptk->type == CPP_MINUS 
23624                 || ptk->type == CPP_EOF || ptk->keyword == RID_AT_END))
23625             {
23626               perform_deferred_access_checks ();
23627               stop_deferring_access_checks ();
23628               meth = cp_parser_function_definition_after_declarator (parser,
23629                                                                      false);
23630               pop_deferring_access_checks ();
23631               objc_finish_method_definition (meth);
23632             }
23633         }
23634       /* The following case will be removed once @synthesize is
23635          completely implemented.  */
23636       else if (token->keyword == RID_AT_PROPERTY)
23637         cp_parser_objc_at_property_declaration (parser);
23638       else if (token->keyword == RID_AT_SYNTHESIZE)
23639         cp_parser_objc_at_synthesize_declaration (parser);
23640       else if (token->keyword == RID_AT_DYNAMIC)
23641         cp_parser_objc_at_dynamic_declaration (parser);
23642       else if (token->keyword == RID_ATTRIBUTE 
23643                && cp_parser_objc_method_maybe_bad_prefix_attributes(parser))
23644         warning_at (token->location, OPT_Wattributes,
23645                     "prefix attributes are ignored for methods");
23646       else
23647         /* Allow for interspersed non-ObjC++ code.  */
23648         cp_parser_objc_interstitial_code (parser);
23649
23650       token = cp_lexer_peek_token (parser->lexer);
23651     }
23652
23653   if (token->type != CPP_EOF)
23654     cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
23655   else
23656     cp_parser_error (parser, "expected %<@end%>");
23657
23658   objc_finish_implementation ();
23659 }
23660
23661 /* Parse Objective-C ivars.  */
23662
23663 static void
23664 cp_parser_objc_class_ivars (cp_parser* parser)
23665 {
23666   cp_token *token = cp_lexer_peek_token (parser->lexer);
23667
23668   if (token->type != CPP_OPEN_BRACE)
23669     return;     /* No ivars specified.  */
23670
23671   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
23672   token = cp_lexer_peek_token (parser->lexer);
23673
23674   while (token->type != CPP_CLOSE_BRACE 
23675         && token->keyword != RID_AT_END && token->type != CPP_EOF)
23676     {
23677       cp_decl_specifier_seq declspecs;
23678       int decl_class_or_enum_p;
23679       tree prefix_attributes;
23680
23681       cp_parser_objc_visibility_spec (parser);
23682
23683       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
23684         break;
23685
23686       cp_parser_decl_specifier_seq (parser,
23687                                     CP_PARSER_FLAGS_OPTIONAL,
23688                                     &declspecs,
23689                                     &decl_class_or_enum_p);
23690
23691       /* auto, register, static, extern, mutable.  */
23692       if (declspecs.storage_class != sc_none)
23693         {
23694           cp_parser_error (parser, "invalid type for instance variable");         
23695           declspecs.storage_class = sc_none;
23696         }
23697
23698       /* __thread.  */
23699       if (declspecs.specs[(int) ds_thread])
23700         {
23701           cp_parser_error (parser, "invalid type for instance variable");
23702           declspecs.specs[(int) ds_thread] = 0;
23703         }
23704       
23705       /* typedef.  */
23706       if (declspecs.specs[(int) ds_typedef])
23707         {
23708           cp_parser_error (parser, "invalid type for instance variable");
23709           declspecs.specs[(int) ds_typedef] = 0;
23710         }
23711
23712       prefix_attributes = declspecs.attributes;
23713       declspecs.attributes = NULL_TREE;
23714
23715       /* Keep going until we hit the `;' at the end of the
23716          declaration.  */
23717       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
23718         {
23719           tree width = NULL_TREE, attributes, first_attribute, decl;
23720           cp_declarator *declarator = NULL;
23721           int ctor_dtor_or_conv_p;
23722
23723           /* Check for a (possibly unnamed) bitfield declaration.  */
23724           token = cp_lexer_peek_token (parser->lexer);
23725           if (token->type == CPP_COLON)
23726             goto eat_colon;
23727
23728           if (token->type == CPP_NAME
23729               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
23730                   == CPP_COLON))
23731             {
23732               /* Get the name of the bitfield.  */
23733               declarator = make_id_declarator (NULL_TREE,
23734                                                cp_parser_identifier (parser),
23735                                                sfk_none);
23736
23737              eat_colon:
23738               cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
23739               /* Get the width of the bitfield.  */
23740               width
23741                 = cp_parser_constant_expression (parser,
23742                                                  /*allow_non_constant=*/false,
23743                                                  NULL);
23744             }
23745           else
23746             {
23747               /* Parse the declarator.  */
23748               declarator
23749                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
23750                                         &ctor_dtor_or_conv_p,
23751                                         /*parenthesized_p=*/NULL,
23752                                         /*member_p=*/false);
23753             }
23754
23755           /* Look for attributes that apply to the ivar.  */
23756           attributes = cp_parser_attributes_opt (parser);
23757           /* Remember which attributes are prefix attributes and
23758              which are not.  */
23759           first_attribute = attributes;
23760           /* Combine the attributes.  */
23761           attributes = chainon (prefix_attributes, attributes);
23762
23763           if (width)
23764               /* Create the bitfield declaration.  */
23765               decl = grokbitfield (declarator, &declspecs,
23766                                    width,
23767                                    attributes);
23768           else
23769             decl = grokfield (declarator, &declspecs,
23770                               NULL_TREE, /*init_const_expr_p=*/false,
23771                               NULL_TREE, attributes);
23772
23773           /* Add the instance variable.  */
23774           if (decl != error_mark_node && decl != NULL_TREE)
23775             objc_add_instance_variable (decl);
23776
23777           /* Reset PREFIX_ATTRIBUTES.  */
23778           while (attributes && TREE_CHAIN (attributes) != first_attribute)
23779             attributes = TREE_CHAIN (attributes);
23780           if (attributes)
23781             TREE_CHAIN (attributes) = NULL_TREE;
23782
23783           token = cp_lexer_peek_token (parser->lexer);
23784
23785           if (token->type == CPP_COMMA)
23786             {
23787               cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
23788               continue;
23789             }
23790           break;
23791         }
23792
23793       cp_parser_consume_semicolon_at_end_of_statement (parser);
23794       token = cp_lexer_peek_token (parser->lexer);
23795     }
23796
23797   if (token->keyword == RID_AT_END)
23798     cp_parser_error (parser, "expected %<}%>");
23799
23800   /* Do not consume the RID_AT_END, so it will be read again as terminating
23801      the @interface of @implementation.  */ 
23802   if (token->keyword != RID_AT_END && token->type != CPP_EOF)
23803     cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
23804     
23805   /* For historical reasons, we accept an optional semicolon.  */
23806   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
23807     cp_lexer_consume_token (parser->lexer);
23808 }
23809
23810 /* Parse an Objective-C protocol declaration.  */
23811
23812 static void
23813 cp_parser_objc_protocol_declaration (cp_parser* parser, tree attributes)
23814 {
23815   tree proto, protorefs;
23816   cp_token *tok;
23817
23818   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
23819   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
23820     {
23821       tok = cp_lexer_peek_token (parser->lexer);
23822       error_at (tok->location, "identifier expected after %<@protocol%>");
23823       cp_parser_consume_semicolon_at_end_of_statement (parser);
23824       return;
23825     }
23826
23827   /* See if we have a forward declaration or a definition.  */
23828   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
23829
23830   /* Try a forward declaration first.  */
23831   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
23832     {
23833       while (true)
23834         {
23835           tree id;
23836           
23837           id = cp_parser_identifier (parser);
23838           if (id == error_mark_node)
23839             break;
23840           
23841           objc_declare_protocol (id, attributes);
23842           
23843           if(cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23844             cp_lexer_consume_token (parser->lexer);
23845           else
23846             break;
23847         }
23848       cp_parser_consume_semicolon_at_end_of_statement (parser);
23849     }
23850
23851   /* Ok, we got a full-fledged definition (or at least should).  */
23852   else
23853     {
23854       proto = cp_parser_identifier (parser);
23855       protorefs = cp_parser_objc_protocol_refs_opt (parser);
23856       objc_start_protocol (proto, protorefs, attributes);
23857       cp_parser_objc_method_prototype_list (parser);
23858     }
23859 }
23860
23861 /* Parse an Objective-C superclass or category.  */
23862
23863 static void
23864 cp_parser_objc_superclass_or_category (cp_parser *parser, 
23865                                        bool iface_p,
23866                                        tree *super,
23867                                        tree *categ, bool *is_class_extension)
23868 {
23869   cp_token *next = cp_lexer_peek_token (parser->lexer);
23870
23871   *super = *categ = NULL_TREE;
23872   *is_class_extension = false;
23873   if (next->type == CPP_COLON)
23874     {
23875       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
23876       *super = cp_parser_identifier (parser);
23877     }
23878   else if (next->type == CPP_OPEN_PAREN)
23879     {
23880       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
23881
23882       /* If there is no category name, and this is an @interface, we
23883          have a class extension.  */
23884       if (iface_p && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
23885         {
23886           *categ = NULL_TREE;
23887           *is_class_extension = true;
23888         }
23889       else
23890         *categ = cp_parser_identifier (parser);
23891
23892       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
23893     }
23894 }
23895
23896 /* Parse an Objective-C class interface.  */
23897
23898 static void
23899 cp_parser_objc_class_interface (cp_parser* parser, tree attributes)
23900 {
23901   tree name, super, categ, protos;
23902   bool is_class_extension;
23903
23904   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
23905   name = cp_parser_identifier (parser);
23906   if (name == error_mark_node)
23907     {
23908       /* It's hard to recover because even if valid @interface stuff
23909          is to follow, we can't compile it (or validate it) if we
23910          don't even know which class it refers to.  Let's assume this
23911          was a stray '@interface' token in the stream and skip it.
23912       */
23913       return;
23914     }
23915   cp_parser_objc_superclass_or_category (parser, true, &super, &categ,
23916                                          &is_class_extension);
23917   protos = cp_parser_objc_protocol_refs_opt (parser);
23918
23919   /* We have either a class or a category on our hands.  */
23920   if (categ || is_class_extension)
23921     objc_start_category_interface (name, categ, protos, attributes);
23922   else
23923     {
23924       objc_start_class_interface (name, super, protos, attributes);
23925       /* Handle instance variable declarations, if any.  */
23926       cp_parser_objc_class_ivars (parser);
23927       objc_continue_interface ();
23928     }
23929
23930   cp_parser_objc_method_prototype_list (parser);
23931 }
23932
23933 /* Parse an Objective-C class implementation.  */
23934
23935 static void
23936 cp_parser_objc_class_implementation (cp_parser* parser)
23937 {
23938   tree name, super, categ;
23939   bool is_class_extension;
23940
23941   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
23942   name = cp_parser_identifier (parser);
23943   if (name == error_mark_node)
23944     {
23945       /* It's hard to recover because even if valid @implementation
23946          stuff is to follow, we can't compile it (or validate it) if
23947          we don't even know which class it refers to.  Let's assume
23948          this was a stray '@implementation' token in the stream and
23949          skip it.
23950       */
23951       return;
23952     }
23953   cp_parser_objc_superclass_or_category (parser, false, &super, &categ,
23954                                          &is_class_extension);
23955
23956   /* We have either a class or a category on our hands.  */
23957   if (categ)
23958     objc_start_category_implementation (name, categ);
23959   else
23960     {
23961       objc_start_class_implementation (name, super);
23962       /* Handle instance variable declarations, if any.  */
23963       cp_parser_objc_class_ivars (parser);
23964       objc_continue_implementation ();
23965     }
23966
23967   cp_parser_objc_method_definition_list (parser);
23968 }
23969
23970 /* Consume the @end token and finish off the implementation.  */
23971
23972 static void
23973 cp_parser_objc_end_implementation (cp_parser* parser)
23974 {
23975   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
23976   objc_finish_implementation ();
23977 }
23978
23979 /* Parse an Objective-C declaration.  */
23980
23981 static void
23982 cp_parser_objc_declaration (cp_parser* parser, tree attributes)
23983 {
23984   /* Try to figure out what kind of declaration is present.  */
23985   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
23986
23987   if (attributes)
23988     switch (kwd->keyword)
23989       {
23990         case RID_AT_ALIAS:
23991         case RID_AT_CLASS:
23992         case RID_AT_END:
23993           error_at (kwd->location, "attributes may not be specified before"
23994                     " the %<@%D%> Objective-C++ keyword",
23995                     kwd->u.value);
23996           attributes = NULL;
23997           break;
23998         case RID_AT_IMPLEMENTATION:
23999           warning_at (kwd->location, OPT_Wattributes,
24000                       "prefix attributes are ignored before %<@%D%>",
24001                       kwd->u.value);
24002           attributes = NULL;
24003         default:
24004           break;
24005       }
24006
24007   switch (kwd->keyword)
24008     {
24009     case RID_AT_ALIAS:
24010       cp_parser_objc_alias_declaration (parser);
24011       break;
24012     case RID_AT_CLASS:
24013       cp_parser_objc_class_declaration (parser);
24014       break;
24015     case RID_AT_PROTOCOL:
24016       cp_parser_objc_protocol_declaration (parser, attributes);
24017       break;
24018     case RID_AT_INTERFACE:
24019       cp_parser_objc_class_interface (parser, attributes);
24020       break;
24021     case RID_AT_IMPLEMENTATION:
24022       cp_parser_objc_class_implementation (parser);
24023       break;
24024     case RID_AT_END:
24025       cp_parser_objc_end_implementation (parser);
24026       break;
24027     default:
24028       error_at (kwd->location, "misplaced %<@%D%> Objective-C++ construct",
24029                 kwd->u.value);
24030       cp_parser_skip_to_end_of_block_or_statement (parser);
24031     }
24032 }
24033
24034 /* Parse an Objective-C try-catch-finally statement.
24035
24036    objc-try-catch-finally-stmt:
24037      @try compound-statement objc-catch-clause-seq [opt]
24038        objc-finally-clause [opt]
24039
24040    objc-catch-clause-seq:
24041      objc-catch-clause objc-catch-clause-seq [opt]
24042
24043    objc-catch-clause:
24044      @catch ( objc-exception-declaration ) compound-statement
24045
24046    objc-finally-clause:
24047      @finally compound-statement
24048
24049    objc-exception-declaration:
24050      parameter-declaration
24051      '...'
24052
24053    where '...' is to be interpreted literally, that is, it means CPP_ELLIPSIS.
24054
24055    Returns NULL_TREE.
24056
24057    PS: This function is identical to c_parser_objc_try_catch_finally_statement
24058    for C.  Keep them in sync.  */   
24059
24060 static tree
24061 cp_parser_objc_try_catch_finally_statement (cp_parser *parser)
24062 {
24063   location_t location;
24064   tree stmt;
24065
24066   cp_parser_require_keyword (parser, RID_AT_TRY, RT_AT_TRY);
24067   location = cp_lexer_peek_token (parser->lexer)->location;
24068   objc_maybe_warn_exceptions (location);
24069   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
24070      node, lest it get absorbed into the surrounding block.  */
24071   stmt = push_stmt_list ();
24072   cp_parser_compound_statement (parser, NULL, false, false);
24073   objc_begin_try_stmt (location, pop_stmt_list (stmt));
24074
24075   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
24076     {
24077       cp_parameter_declarator *parm;
24078       tree parameter_declaration = error_mark_node;
24079       bool seen_open_paren = false;
24080
24081       cp_lexer_consume_token (parser->lexer);
24082       if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24083         seen_open_paren = true;
24084       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
24085         {
24086           /* We have "@catch (...)" (where the '...' are literally
24087              what is in the code).  Skip the '...'.
24088              parameter_declaration is set to NULL_TREE, and
24089              objc_being_catch_clauses() knows that that means
24090              '...'.  */
24091           cp_lexer_consume_token (parser->lexer);
24092           parameter_declaration = NULL_TREE;
24093         }
24094       else
24095         {
24096           /* We have "@catch (NSException *exception)" or something
24097              like that.  Parse the parameter declaration.  */
24098           parm = cp_parser_parameter_declaration (parser, false, NULL);
24099           if (parm == NULL)
24100             parameter_declaration = error_mark_node;
24101           else
24102             parameter_declaration = grokdeclarator (parm->declarator,
24103                                                     &parm->decl_specifiers,
24104                                                     PARM, /*initialized=*/0,
24105                                                     /*attrlist=*/NULL);
24106         }
24107       if (seen_open_paren)
24108         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
24109       else
24110         {
24111           /* If there was no open parenthesis, we are recovering from
24112              an error, and we are trying to figure out what mistake
24113              the user has made.  */
24114
24115           /* If there is an immediate closing parenthesis, the user
24116              probably forgot the opening one (ie, they typed "@catch
24117              NSException *e)".  Parse the closing parenthesis and keep
24118              going.  */
24119           if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
24120             cp_lexer_consume_token (parser->lexer);
24121           
24122           /* If these is no immediate closing parenthesis, the user
24123              probably doesn't know that parenthesis are required at
24124              all (ie, they typed "@catch NSException *e").  So, just
24125              forget about the closing parenthesis and keep going.  */
24126         }
24127       objc_begin_catch_clause (parameter_declaration);
24128       cp_parser_compound_statement (parser, NULL, false, false);
24129       objc_finish_catch_clause ();
24130     }
24131   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
24132     {
24133       cp_lexer_consume_token (parser->lexer);
24134       location = cp_lexer_peek_token (parser->lexer)->location;
24135       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
24136          node, lest it get absorbed into the surrounding block.  */
24137       stmt = push_stmt_list ();
24138       cp_parser_compound_statement (parser, NULL, false, false);
24139       objc_build_finally_clause (location, pop_stmt_list (stmt));
24140     }
24141
24142   return objc_finish_try_stmt ();
24143 }
24144
24145 /* Parse an Objective-C synchronized statement.
24146
24147    objc-synchronized-stmt:
24148      @synchronized ( expression ) compound-statement
24149
24150    Returns NULL_TREE.  */
24151
24152 static tree
24153 cp_parser_objc_synchronized_statement (cp_parser *parser)
24154 {
24155   location_t location;
24156   tree lock, stmt;
24157
24158   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, RT_AT_SYNCHRONIZED);
24159
24160   location = cp_lexer_peek_token (parser->lexer)->location;
24161   objc_maybe_warn_exceptions (location);
24162   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
24163   lock = cp_parser_expression (parser, false, NULL);
24164   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
24165
24166   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
24167      node, lest it get absorbed into the surrounding block.  */
24168   stmt = push_stmt_list ();
24169   cp_parser_compound_statement (parser, NULL, false, false);
24170
24171   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
24172 }
24173
24174 /* Parse an Objective-C throw statement.
24175
24176    objc-throw-stmt:
24177      @throw assignment-expression [opt] ;
24178
24179    Returns a constructed '@throw' statement.  */
24180
24181 static tree
24182 cp_parser_objc_throw_statement (cp_parser *parser)
24183 {
24184   tree expr = NULL_TREE;
24185   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
24186
24187   cp_parser_require_keyword (parser, RID_AT_THROW, RT_AT_THROW);
24188
24189   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
24190     expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
24191
24192   cp_parser_consume_semicolon_at_end_of_statement (parser);
24193
24194   return objc_build_throw_stmt (loc, expr);
24195 }
24196
24197 /* Parse an Objective-C statement.  */
24198
24199 static tree
24200 cp_parser_objc_statement (cp_parser * parser)
24201 {
24202   /* Try to figure out what kind of declaration is present.  */
24203   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
24204
24205   switch (kwd->keyword)
24206     {
24207     case RID_AT_TRY:
24208       return cp_parser_objc_try_catch_finally_statement (parser);
24209     case RID_AT_SYNCHRONIZED:
24210       return cp_parser_objc_synchronized_statement (parser);
24211     case RID_AT_THROW:
24212       return cp_parser_objc_throw_statement (parser);
24213     default:
24214       error_at (kwd->location, "misplaced %<@%D%> Objective-C++ construct",
24215                kwd->u.value);
24216       cp_parser_skip_to_end_of_block_or_statement (parser);
24217     }
24218
24219   return error_mark_node;
24220 }
24221
24222 /* If we are compiling ObjC++ and we see an __attribute__ we neeed to 
24223    look ahead to see if an objc keyword follows the attributes.  This
24224    is to detect the use of prefix attributes on ObjC @interface and 
24225    @protocol.  */
24226
24227 static bool
24228 cp_parser_objc_valid_prefix_attributes (cp_parser* parser, tree *attrib)
24229 {
24230   cp_lexer_save_tokens (parser->lexer);
24231   *attrib = cp_parser_attributes_opt (parser);
24232   gcc_assert (*attrib);
24233   if (OBJC_IS_AT_KEYWORD (cp_lexer_peek_token (parser->lexer)->keyword))
24234     {
24235       cp_lexer_commit_tokens (parser->lexer);
24236       return true;
24237     }
24238   cp_lexer_rollback_tokens (parser->lexer);
24239   return false;  
24240 }
24241
24242 /* This routine is a minimal replacement for
24243    c_parser_struct_declaration () used when parsing the list of
24244    types/names or ObjC++ properties.  For example, when parsing the
24245    code
24246
24247    @property (readonly) int a, b, c;
24248
24249    this function is responsible for parsing "int a, int b, int c" and
24250    returning the declarations as CHAIN of DECLs.
24251
24252    TODO: Share this code with cp_parser_objc_class_ivars.  It's very
24253    similar parsing.  */
24254 static tree
24255 cp_parser_objc_struct_declaration (cp_parser *parser)
24256 {
24257   tree decls = NULL_TREE;
24258   cp_decl_specifier_seq declspecs;
24259   int decl_class_or_enum_p;
24260   tree prefix_attributes;
24261
24262   cp_parser_decl_specifier_seq (parser,
24263                                 CP_PARSER_FLAGS_NONE,
24264                                 &declspecs,
24265                                 &decl_class_or_enum_p);
24266
24267   if (declspecs.type == error_mark_node)
24268     return error_mark_node;
24269
24270   /* auto, register, static, extern, mutable.  */
24271   if (declspecs.storage_class != sc_none)
24272     {
24273       cp_parser_error (parser, "invalid type for property");
24274       declspecs.storage_class = sc_none;
24275     }
24276   
24277   /* __thread.  */
24278   if (declspecs.specs[(int) ds_thread])
24279     {
24280       cp_parser_error (parser, "invalid type for property");
24281       declspecs.specs[(int) ds_thread] = 0;
24282     }
24283   
24284   /* typedef.  */
24285   if (declspecs.specs[(int) ds_typedef])
24286     {
24287       cp_parser_error (parser, "invalid type for property");
24288       declspecs.specs[(int) ds_typedef] = 0;
24289     }
24290
24291   prefix_attributes = declspecs.attributes;
24292   declspecs.attributes = NULL_TREE;
24293
24294   /* Keep going until we hit the `;' at the end of the declaration. */
24295   while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
24296     {
24297       tree attributes, first_attribute, decl;
24298       cp_declarator *declarator;
24299       cp_token *token;
24300
24301       /* Parse the declarator.  */
24302       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
24303                                          NULL, NULL, false);
24304
24305       /* Look for attributes that apply to the ivar.  */
24306       attributes = cp_parser_attributes_opt (parser);
24307       /* Remember which attributes are prefix attributes and
24308          which are not.  */
24309       first_attribute = attributes;
24310       /* Combine the attributes.  */
24311       attributes = chainon (prefix_attributes, attributes);
24312       
24313       decl = grokfield (declarator, &declspecs,
24314                         NULL_TREE, /*init_const_expr_p=*/false,
24315                         NULL_TREE, attributes);
24316
24317       if (decl == error_mark_node || decl == NULL_TREE)
24318         return error_mark_node;
24319       
24320       /* Reset PREFIX_ATTRIBUTES.  */
24321       while (attributes && TREE_CHAIN (attributes) != first_attribute)
24322         attributes = TREE_CHAIN (attributes);
24323       if (attributes)
24324         TREE_CHAIN (attributes) = NULL_TREE;
24325
24326       DECL_CHAIN (decl) = decls;
24327       decls = decl;
24328
24329       token = cp_lexer_peek_token (parser->lexer);
24330       if (token->type == CPP_COMMA)
24331         {
24332           cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
24333           continue;
24334         }
24335       else
24336         break;
24337     }
24338   return decls;
24339 }
24340
24341 /* Parse an Objective-C @property declaration.  The syntax is:
24342
24343    objc-property-declaration:
24344      '@property' objc-property-attributes[opt] struct-declaration ;
24345
24346    objc-property-attributes:
24347     '(' objc-property-attribute-list ')'
24348
24349    objc-property-attribute-list:
24350      objc-property-attribute
24351      objc-property-attribute-list, objc-property-attribute
24352
24353    objc-property-attribute
24354      'getter' = identifier
24355      'setter' = identifier
24356      'readonly'
24357      'readwrite'
24358      'assign'
24359      'retain'
24360      'copy'
24361      'nonatomic'
24362
24363   For example:
24364     @property NSString *name;
24365     @property (readonly) id object;
24366     @property (retain, nonatomic, getter=getTheName) id name;
24367     @property int a, b, c;
24368
24369    PS: This function is identical to
24370    c_parser_objc_at_property_declaration for C.  Keep them in sync.  */
24371 static void 
24372 cp_parser_objc_at_property_declaration (cp_parser *parser)
24373 {
24374   /* The following variables hold the attributes of the properties as
24375      parsed.  They are 'false' or 'NULL_TREE' if the attribute was not
24376      seen.  When we see an attribute, we set them to 'true' (if they
24377      are boolean properties) or to the identifier (if they have an
24378      argument, ie, for getter and setter).  Note that here we only
24379      parse the list of attributes, check the syntax and accumulate the
24380      attributes that we find.  objc_add_property_declaration() will
24381      then process the information.  */
24382   bool property_assign = false;
24383   bool property_copy = false;
24384   tree property_getter_ident = NULL_TREE;
24385   bool property_nonatomic = false;
24386   bool property_readonly = false;
24387   bool property_readwrite = false;
24388   bool property_retain = false;
24389   tree property_setter_ident = NULL_TREE;
24390
24391   /* 'properties' is the list of properties that we read.  Usually a
24392      single one, but maybe more (eg, in "@property int a, b, c;" there
24393      are three).  */
24394   tree properties;
24395   location_t loc;
24396
24397   loc = cp_lexer_peek_token (parser->lexer)->location;
24398
24399   cp_lexer_consume_token (parser->lexer);  /* Eat '@property'.  */
24400
24401   /* Parse the optional attribute list...  */
24402   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
24403     {
24404       /* Eat the '('.  */
24405       cp_lexer_consume_token (parser->lexer);
24406
24407       while (true)
24408         {
24409           bool syntax_error = false;
24410           cp_token *token = cp_lexer_peek_token (parser->lexer);
24411           enum rid keyword;
24412
24413           if (token->type != CPP_NAME)
24414             {
24415               cp_parser_error (parser, "expected identifier");
24416               break;
24417             }
24418           keyword = C_RID_CODE (token->u.value);
24419           cp_lexer_consume_token (parser->lexer);
24420           switch (keyword)
24421             {
24422             case RID_ASSIGN:    property_assign = true;    break;
24423             case RID_COPY:      property_copy = true;      break;
24424             case RID_NONATOMIC: property_nonatomic = true; break;
24425             case RID_READONLY:  property_readonly = true;  break;
24426             case RID_READWRITE: property_readwrite = true; break;
24427             case RID_RETAIN:    property_retain = true;    break;
24428
24429             case RID_GETTER:
24430             case RID_SETTER:
24431               if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
24432                 {
24433                   if (keyword == RID_GETTER)
24434                     cp_parser_error (parser,
24435                                      "missing %<=%> (after %<getter%> attribute)");
24436                   else
24437                     cp_parser_error (parser,
24438                                      "missing %<=%> (after %<setter%> attribute)");
24439                   syntax_error = true;
24440                   break;
24441                 }
24442               cp_lexer_consume_token (parser->lexer); /* eat the = */
24443               if (!cp_parser_objc_selector_p (cp_lexer_peek_token (parser->lexer)->type))
24444                 {
24445                   cp_parser_error (parser, "expected identifier");
24446                   syntax_error = true;
24447                   break;
24448                 }
24449               if (keyword == RID_SETTER)
24450                 {
24451                   if (property_setter_ident != NULL_TREE)
24452                     {
24453                       cp_parser_error (parser, "the %<setter%> attribute may only be specified once");
24454                       cp_lexer_consume_token (parser->lexer);
24455                     }
24456                   else
24457                     property_setter_ident = cp_parser_objc_selector (parser);
24458                   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
24459                     cp_parser_error (parser, "setter name must terminate with %<:%>");
24460                   else
24461                     cp_lexer_consume_token (parser->lexer);
24462                 }
24463               else
24464                 {
24465                   if (property_getter_ident != NULL_TREE)
24466                     {
24467                       cp_parser_error (parser, "the %<getter%> attribute may only be specified once");
24468                       cp_lexer_consume_token (parser->lexer);
24469                     }
24470                   else
24471                     property_getter_ident = cp_parser_objc_selector (parser);
24472                 }
24473               break;
24474             default:
24475               cp_parser_error (parser, "unknown property attribute");
24476               syntax_error = true;
24477               break;
24478             }
24479
24480           if (syntax_error)
24481             break;
24482
24483           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24484             cp_lexer_consume_token (parser->lexer);
24485           else
24486             break;
24487         }
24488
24489       /* FIXME: "@property (setter, assign);" will generate a spurious
24490          "error: expected â€˜)’ before â€˜,’ token".  This is because
24491          cp_parser_require, unlike the C counterpart, will produce an
24492          error even if we are in error recovery.  */
24493       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24494         {
24495           cp_parser_skip_to_closing_parenthesis (parser,
24496                                                  /*recovering=*/true,
24497                                                  /*or_comma=*/false,
24498                                                  /*consume_paren=*/true);
24499         }
24500     }
24501
24502   /* ... and the property declaration(s).  */
24503   properties = cp_parser_objc_struct_declaration (parser);
24504
24505   if (properties == error_mark_node)
24506     {
24507       cp_parser_skip_to_end_of_statement (parser);
24508       /* If the next token is now a `;', consume it.  */
24509       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
24510         cp_lexer_consume_token (parser->lexer);
24511       return;
24512     }
24513
24514   if (properties == NULL_TREE)
24515     cp_parser_error (parser, "expected identifier");
24516   else
24517     {
24518       /* Comma-separated properties are chained together in
24519          reverse order; add them one by one.  */
24520       properties = nreverse (properties);
24521       
24522       for (; properties; properties = TREE_CHAIN (properties))
24523         objc_add_property_declaration (loc, copy_node (properties),
24524                                        property_readonly, property_readwrite,
24525                                        property_assign, property_retain,
24526                                        property_copy, property_nonatomic,
24527                                        property_getter_ident, property_setter_ident);
24528     }
24529   
24530   cp_parser_consume_semicolon_at_end_of_statement (parser);
24531 }
24532
24533 /* Parse an Objective-C++ @synthesize declaration.  The syntax is:
24534
24535    objc-synthesize-declaration:
24536      @synthesize objc-synthesize-identifier-list ;
24537
24538    objc-synthesize-identifier-list:
24539      objc-synthesize-identifier
24540      objc-synthesize-identifier-list, objc-synthesize-identifier
24541
24542    objc-synthesize-identifier
24543      identifier
24544      identifier = identifier
24545
24546   For example:
24547     @synthesize MyProperty;
24548     @synthesize OneProperty, AnotherProperty=MyIvar, YetAnotherProperty;
24549
24550   PS: This function is identical to c_parser_objc_at_synthesize_declaration
24551   for C.  Keep them in sync.
24552 */
24553 static void 
24554 cp_parser_objc_at_synthesize_declaration (cp_parser *parser)
24555 {
24556   tree list = NULL_TREE;
24557   location_t loc;
24558   loc = cp_lexer_peek_token (parser->lexer)->location;
24559
24560   cp_lexer_consume_token (parser->lexer);  /* Eat '@synthesize'.  */
24561   while (true)
24562     {
24563       tree property, ivar;
24564       property = cp_parser_identifier (parser);
24565       if (property == error_mark_node)
24566         {
24567           cp_parser_consume_semicolon_at_end_of_statement (parser);
24568           return;
24569         }
24570       if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
24571         {
24572           cp_lexer_consume_token (parser->lexer);
24573           ivar = cp_parser_identifier (parser);
24574           if (ivar == error_mark_node)
24575             {
24576               cp_parser_consume_semicolon_at_end_of_statement (parser);
24577               return;
24578             }
24579         }
24580       else
24581         ivar = NULL_TREE;
24582       list = chainon (list, build_tree_list (ivar, property));
24583       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24584         cp_lexer_consume_token (parser->lexer);
24585       else
24586         break;
24587     }
24588   cp_parser_consume_semicolon_at_end_of_statement (parser);
24589   objc_add_synthesize_declaration (loc, list);
24590 }
24591
24592 /* Parse an Objective-C++ @dynamic declaration.  The syntax is:
24593
24594    objc-dynamic-declaration:
24595      @dynamic identifier-list ;
24596
24597    For example:
24598      @dynamic MyProperty;
24599      @dynamic MyProperty, AnotherProperty;
24600
24601   PS: This function is identical to c_parser_objc_at_dynamic_declaration
24602   for C.  Keep them in sync.
24603 */
24604 static void 
24605 cp_parser_objc_at_dynamic_declaration (cp_parser *parser)
24606 {
24607   tree list = NULL_TREE;
24608   location_t loc;
24609   loc = cp_lexer_peek_token (parser->lexer)->location;
24610
24611   cp_lexer_consume_token (parser->lexer);  /* Eat '@dynamic'.  */
24612   while (true)
24613     {
24614       tree property;
24615       property = cp_parser_identifier (parser);
24616       if (property == error_mark_node)
24617         {
24618           cp_parser_consume_semicolon_at_end_of_statement (parser);
24619           return;
24620         }
24621       list = chainon (list, build_tree_list (NULL, property));
24622       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
24623         cp_lexer_consume_token (parser->lexer);
24624       else
24625         break;
24626     }
24627   cp_parser_consume_semicolon_at_end_of_statement (parser);
24628   objc_add_dynamic_declaration (loc, list);
24629 }
24630
24631 \f
24632 /* OpenMP 2.5 parsing routines.  */
24633
24634 /* Returns name of the next clause.
24635    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
24636    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
24637    returned and the token is consumed.  */
24638
24639 static pragma_omp_clause
24640 cp_parser_omp_clause_name (cp_parser *parser)
24641 {
24642   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
24643
24644   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
24645     result = PRAGMA_OMP_CLAUSE_IF;
24646   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
24647     result = PRAGMA_OMP_CLAUSE_DEFAULT;
24648   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
24649     result = PRAGMA_OMP_CLAUSE_PRIVATE;
24650   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
24651     {
24652       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
24653       const char *p = IDENTIFIER_POINTER (id);
24654
24655       switch (p[0])
24656         {
24657         case 'c':
24658           if (!strcmp ("collapse", p))
24659             result = PRAGMA_OMP_CLAUSE_COLLAPSE;
24660           else if (!strcmp ("copyin", p))
24661             result = PRAGMA_OMP_CLAUSE_COPYIN;
24662           else if (!strcmp ("copyprivate", p))
24663             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
24664           break;
24665         case 'f':
24666           if (!strcmp ("final", p))
24667             result = PRAGMA_OMP_CLAUSE_FINAL;
24668           else if (!strcmp ("firstprivate", p))
24669             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
24670           break;
24671         case 'l':
24672           if (!strcmp ("lastprivate", p))
24673             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
24674           break;
24675         case 'm':
24676           if (!strcmp ("mergeable", p))
24677             result = PRAGMA_OMP_CLAUSE_MERGEABLE;
24678           break;
24679         case 'n':
24680           if (!strcmp ("nowait", p))
24681             result = PRAGMA_OMP_CLAUSE_NOWAIT;
24682           else if (!strcmp ("num_threads", p))
24683             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
24684           break;
24685         case 'o':
24686           if (!strcmp ("ordered", p))
24687             result = PRAGMA_OMP_CLAUSE_ORDERED;
24688           break;
24689         case 'r':
24690           if (!strcmp ("reduction", p))
24691             result = PRAGMA_OMP_CLAUSE_REDUCTION;
24692           break;
24693         case 's':
24694           if (!strcmp ("schedule", p))
24695             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
24696           else if (!strcmp ("shared", p))
24697             result = PRAGMA_OMP_CLAUSE_SHARED;
24698           break;
24699         case 'u':
24700           if (!strcmp ("untied", p))
24701             result = PRAGMA_OMP_CLAUSE_UNTIED;
24702           break;
24703         }
24704     }
24705
24706   if (result != PRAGMA_OMP_CLAUSE_NONE)
24707     cp_lexer_consume_token (parser->lexer);
24708
24709   return result;
24710 }
24711
24712 /* Validate that a clause of the given type does not already exist.  */
24713
24714 static void
24715 check_no_duplicate_clause (tree clauses, enum omp_clause_code code,
24716                            const char *name, location_t location)
24717 {
24718   tree c;
24719
24720   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
24721     if (OMP_CLAUSE_CODE (c) == code)
24722       {
24723         error_at (location, "too many %qs clauses", name);
24724         break;
24725       }
24726 }
24727
24728 /* OpenMP 2.5:
24729    variable-list:
24730      identifier
24731      variable-list , identifier
24732
24733    In addition, we match a closing parenthesis.  An opening parenthesis
24734    will have been consumed by the caller.
24735
24736    If KIND is nonzero, create the appropriate node and install the decl
24737    in OMP_CLAUSE_DECL and add the node to the head of the list.
24738
24739    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
24740    return the list created.  */
24741
24742 static tree
24743 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
24744                                 tree list)
24745 {
24746   cp_token *token;
24747   while (1)
24748     {
24749       tree name, decl;
24750
24751       token = cp_lexer_peek_token (parser->lexer);
24752       name = cp_parser_id_expression (parser, /*template_p=*/false,
24753                                       /*check_dependency_p=*/true,
24754                                       /*template_p=*/NULL,
24755                                       /*declarator_p=*/false,
24756                                       /*optional_p=*/false);
24757       if (name == error_mark_node)
24758         goto skip_comma;
24759
24760       decl = cp_parser_lookup_name_simple (parser, name, token->location);
24761       if (decl == error_mark_node)
24762         cp_parser_name_lookup_error (parser, name, decl, NLE_NULL,
24763                                      token->location);
24764       else if (kind != 0)
24765         {
24766           tree u = build_omp_clause (token->location, kind);
24767           OMP_CLAUSE_DECL (u) = decl;
24768           OMP_CLAUSE_CHAIN (u) = list;
24769           list = u;
24770         }
24771       else
24772         list = tree_cons (decl, NULL_TREE, list);
24773
24774     get_comma:
24775       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
24776         break;
24777       cp_lexer_consume_token (parser->lexer);
24778     }
24779
24780   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24781     {
24782       int ending;
24783
24784       /* Try to resync to an unnested comma.  Copied from
24785          cp_parser_parenthesized_expression_list.  */
24786     skip_comma:
24787       ending = cp_parser_skip_to_closing_parenthesis (parser,
24788                                                       /*recovering=*/true,
24789                                                       /*or_comma=*/true,
24790                                                       /*consume_paren=*/true);
24791       if (ending < 0)
24792         goto get_comma;
24793     }
24794
24795   return list;
24796 }
24797
24798 /* Similarly, but expect leading and trailing parenthesis.  This is a very
24799    common case for omp clauses.  */
24800
24801 static tree
24802 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
24803 {
24804   if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24805     return cp_parser_omp_var_list_no_open (parser, kind, list);
24806   return list;
24807 }
24808
24809 /* OpenMP 3.0:
24810    collapse ( constant-expression ) */
24811
24812 static tree
24813 cp_parser_omp_clause_collapse (cp_parser *parser, tree list, location_t location)
24814 {
24815   tree c, num;
24816   location_t loc;
24817   HOST_WIDE_INT n;
24818
24819   loc = cp_lexer_peek_token (parser->lexer)->location;
24820   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24821     return list;
24822
24823   num = cp_parser_constant_expression (parser, false, NULL);
24824
24825   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24826     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24827                                            /*or_comma=*/false,
24828                                            /*consume_paren=*/true);
24829
24830   if (num == error_mark_node)
24831     return list;
24832   num = fold_non_dependent_expr (num);
24833   if (!INTEGRAL_TYPE_P (TREE_TYPE (num))
24834       || !host_integerp (num, 0)
24835       || (n = tree_low_cst (num, 0)) <= 0
24836       || (int) n != n)
24837     {
24838       error_at (loc, "collapse argument needs positive constant integer expression");
24839       return list;
24840     }
24841
24842   check_no_duplicate_clause (list, OMP_CLAUSE_COLLAPSE, "collapse", location);
24843   c = build_omp_clause (loc, OMP_CLAUSE_COLLAPSE);
24844   OMP_CLAUSE_CHAIN (c) = list;
24845   OMP_CLAUSE_COLLAPSE_EXPR (c) = num;
24846
24847   return c;
24848 }
24849
24850 /* OpenMP 2.5:
24851    default ( shared | none ) */
24852
24853 static tree
24854 cp_parser_omp_clause_default (cp_parser *parser, tree list, location_t location)
24855 {
24856   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
24857   tree c;
24858
24859   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24860     return list;
24861   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
24862     {
24863       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
24864       const char *p = IDENTIFIER_POINTER (id);
24865
24866       switch (p[0])
24867         {
24868         case 'n':
24869           if (strcmp ("none", p) != 0)
24870             goto invalid_kind;
24871           kind = OMP_CLAUSE_DEFAULT_NONE;
24872           break;
24873
24874         case 's':
24875           if (strcmp ("shared", p) != 0)
24876             goto invalid_kind;
24877           kind = OMP_CLAUSE_DEFAULT_SHARED;
24878           break;
24879
24880         default:
24881           goto invalid_kind;
24882         }
24883
24884       cp_lexer_consume_token (parser->lexer);
24885     }
24886   else
24887     {
24888     invalid_kind:
24889       cp_parser_error (parser, "expected %<none%> or %<shared%>");
24890     }
24891
24892   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24893     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24894                                            /*or_comma=*/false,
24895                                            /*consume_paren=*/true);
24896
24897   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
24898     return list;
24899
24900   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default", location);
24901   c = build_omp_clause (location, OMP_CLAUSE_DEFAULT);
24902   OMP_CLAUSE_CHAIN (c) = list;
24903   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
24904
24905   return c;
24906 }
24907
24908 /* OpenMP 3.1:
24909    final ( expression ) */
24910
24911 static tree
24912 cp_parser_omp_clause_final (cp_parser *parser, tree list, location_t location)
24913 {
24914   tree t, c;
24915
24916   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24917     return list;
24918
24919   t = cp_parser_condition (parser);
24920
24921   if (t == error_mark_node
24922       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24923     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24924                                            /*or_comma=*/false,
24925                                            /*consume_paren=*/true);
24926
24927   check_no_duplicate_clause (list, OMP_CLAUSE_FINAL, "final", location);
24928
24929   c = build_omp_clause (location, OMP_CLAUSE_FINAL);
24930   OMP_CLAUSE_FINAL_EXPR (c) = t;
24931   OMP_CLAUSE_CHAIN (c) = list;
24932
24933   return c;
24934 }
24935
24936 /* OpenMP 2.5:
24937    if ( expression ) */
24938
24939 static tree
24940 cp_parser_omp_clause_if (cp_parser *parser, tree list, location_t location)
24941 {
24942   tree t, c;
24943
24944   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24945     return list;
24946
24947   t = cp_parser_condition (parser);
24948
24949   if (t == error_mark_node
24950       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24951     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24952                                            /*or_comma=*/false,
24953                                            /*consume_paren=*/true);
24954
24955   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if", location);
24956
24957   c = build_omp_clause (location, OMP_CLAUSE_IF);
24958   OMP_CLAUSE_IF_EXPR (c) = t;
24959   OMP_CLAUSE_CHAIN (c) = list;
24960
24961   return c;
24962 }
24963
24964 /* OpenMP 3.1:
24965    mergeable */
24966
24967 static tree
24968 cp_parser_omp_clause_mergeable (cp_parser *parser ATTRIBUTE_UNUSED,
24969                                 tree list, location_t location)
24970 {
24971   tree c;
24972
24973   check_no_duplicate_clause (list, OMP_CLAUSE_MERGEABLE, "mergeable",
24974                              location);
24975
24976   c = build_omp_clause (location, OMP_CLAUSE_MERGEABLE);
24977   OMP_CLAUSE_CHAIN (c) = list;
24978   return c;
24979 }
24980
24981 /* OpenMP 2.5:
24982    nowait */
24983
24984 static tree
24985 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED,
24986                              tree list, location_t location)
24987 {
24988   tree c;
24989
24990   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait", location);
24991
24992   c = build_omp_clause (location, OMP_CLAUSE_NOWAIT);
24993   OMP_CLAUSE_CHAIN (c) = list;
24994   return c;
24995 }
24996
24997 /* OpenMP 2.5:
24998    num_threads ( expression ) */
24999
25000 static tree
25001 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list,
25002                                   location_t location)
25003 {
25004   tree t, c;
25005
25006   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25007     return list;
25008
25009   t = cp_parser_expression (parser, false, NULL);
25010
25011   if (t == error_mark_node
25012       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25013     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25014                                            /*or_comma=*/false,
25015                                            /*consume_paren=*/true);
25016
25017   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS,
25018                              "num_threads", location);
25019
25020   c = build_omp_clause (location, OMP_CLAUSE_NUM_THREADS);
25021   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
25022   OMP_CLAUSE_CHAIN (c) = list;
25023
25024   return c;
25025 }
25026
25027 /* OpenMP 2.5:
25028    ordered */
25029
25030 static tree
25031 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED,
25032                               tree list, location_t location)
25033 {
25034   tree c;
25035
25036   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED,
25037                              "ordered", location);
25038
25039   c = build_omp_clause (location, OMP_CLAUSE_ORDERED);
25040   OMP_CLAUSE_CHAIN (c) = list;
25041   return c;
25042 }
25043
25044 /* OpenMP 2.5:
25045    reduction ( reduction-operator : variable-list )
25046
25047    reduction-operator:
25048      One of: + * - & ^ | && ||
25049
25050    OpenMP 3.1:
25051
25052    reduction-operator:
25053      One of: + * - & ^ | && || min max  */
25054
25055 static tree
25056 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
25057 {
25058   enum tree_code code;
25059   tree nlist, c;
25060
25061   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25062     return list;
25063
25064   switch (cp_lexer_peek_token (parser->lexer)->type)
25065     {
25066     case CPP_PLUS:
25067       code = PLUS_EXPR;
25068       break;
25069     case CPP_MULT:
25070       code = MULT_EXPR;
25071       break;
25072     case CPP_MINUS:
25073       code = MINUS_EXPR;
25074       break;
25075     case CPP_AND:
25076       code = BIT_AND_EXPR;
25077       break;
25078     case CPP_XOR:
25079       code = BIT_XOR_EXPR;
25080       break;
25081     case CPP_OR:
25082       code = BIT_IOR_EXPR;
25083       break;
25084     case CPP_AND_AND:
25085       code = TRUTH_ANDIF_EXPR;
25086       break;
25087     case CPP_OR_OR:
25088       code = TRUTH_ORIF_EXPR;
25089       break;
25090     case CPP_NAME:
25091       {
25092         tree id = cp_lexer_peek_token (parser->lexer)->u.value;
25093         const char *p = IDENTIFIER_POINTER (id);
25094
25095         if (strcmp (p, "min") == 0)
25096           {
25097             code = MIN_EXPR;
25098             break;
25099           }
25100         if (strcmp (p, "max") == 0)
25101           {
25102             code = MAX_EXPR;
25103             break;
25104           }
25105       }
25106       /* FALLTHROUGH */
25107     default:
25108       cp_parser_error (parser, "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, "
25109                                "%<|%>, %<&&%>, %<||%>, %<min%> or %<max%>");
25110     resync_fail:
25111       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25112                                              /*or_comma=*/false,
25113                                              /*consume_paren=*/true);
25114       return list;
25115     }
25116   cp_lexer_consume_token (parser->lexer);
25117
25118   if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
25119     goto resync_fail;
25120
25121   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
25122   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
25123     OMP_CLAUSE_REDUCTION_CODE (c) = code;
25124
25125   return nlist;
25126 }
25127
25128 /* OpenMP 2.5:
25129    schedule ( schedule-kind )
25130    schedule ( schedule-kind , expression )
25131
25132    schedule-kind:
25133      static | dynamic | guided | runtime | auto  */
25134
25135 static tree
25136 cp_parser_omp_clause_schedule (cp_parser *parser, tree list, location_t location)
25137 {
25138   tree c, t;
25139
25140   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25141     return list;
25142
25143   c = build_omp_clause (location, OMP_CLAUSE_SCHEDULE);
25144
25145   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
25146     {
25147       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
25148       const char *p = IDENTIFIER_POINTER (id);
25149
25150       switch (p[0])
25151         {
25152         case 'd':
25153           if (strcmp ("dynamic", p) != 0)
25154             goto invalid_kind;
25155           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
25156           break;
25157
25158         case 'g':
25159           if (strcmp ("guided", p) != 0)
25160             goto invalid_kind;
25161           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
25162           break;
25163
25164         case 'r':
25165           if (strcmp ("runtime", p) != 0)
25166             goto invalid_kind;
25167           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
25168           break;
25169
25170         default:
25171           goto invalid_kind;
25172         }
25173     }
25174   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
25175     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
25176   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AUTO))
25177     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_AUTO;
25178   else
25179     goto invalid_kind;
25180   cp_lexer_consume_token (parser->lexer);
25181
25182   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
25183     {
25184       cp_token *token;
25185       cp_lexer_consume_token (parser->lexer);
25186
25187       token = cp_lexer_peek_token (parser->lexer);
25188       t = cp_parser_assignment_expression (parser, false, NULL);
25189
25190       if (t == error_mark_node)
25191         goto resync_fail;
25192       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
25193         error_at (token->location, "schedule %<runtime%> does not take "
25194                   "a %<chunk_size%> parameter");
25195       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_AUTO)
25196         error_at (token->location, "schedule %<auto%> does not take "
25197                   "a %<chunk_size%> parameter");
25198       else
25199         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
25200
25201       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25202         goto resync_fail;
25203     }
25204   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_COMMA_CLOSE_PAREN))
25205     goto resync_fail;
25206
25207   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule", location);
25208   OMP_CLAUSE_CHAIN (c) = list;
25209   return c;
25210
25211  invalid_kind:
25212   cp_parser_error (parser, "invalid schedule kind");
25213  resync_fail:
25214   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25215                                          /*or_comma=*/false,
25216                                          /*consume_paren=*/true);
25217   return list;
25218 }
25219
25220 /* OpenMP 3.0:
25221    untied */
25222
25223 static tree
25224 cp_parser_omp_clause_untied (cp_parser *parser ATTRIBUTE_UNUSED,
25225                              tree list, location_t location)
25226 {
25227   tree c;
25228
25229   check_no_duplicate_clause (list, OMP_CLAUSE_UNTIED, "untied", location);
25230
25231   c = build_omp_clause (location, OMP_CLAUSE_UNTIED);
25232   OMP_CLAUSE_CHAIN (c) = list;
25233   return c;
25234 }
25235
25236 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
25237    is a bitmask in MASK.  Return the list of clauses found; the result
25238    of clause default goes in *pdefault.  */
25239
25240 static tree
25241 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
25242                            const char *where, cp_token *pragma_tok)
25243 {
25244   tree clauses = NULL;
25245   bool first = true;
25246   cp_token *token = NULL;
25247
25248   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
25249     {
25250       pragma_omp_clause c_kind;
25251       const char *c_name;
25252       tree prev = clauses;
25253
25254       if (!first && cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
25255         cp_lexer_consume_token (parser->lexer);
25256
25257       token = cp_lexer_peek_token (parser->lexer);
25258       c_kind = cp_parser_omp_clause_name (parser);
25259       first = false;
25260
25261       switch (c_kind)
25262         {
25263         case PRAGMA_OMP_CLAUSE_COLLAPSE:
25264           clauses = cp_parser_omp_clause_collapse (parser, clauses,
25265                                                    token->location);
25266           c_name = "collapse";
25267           break;
25268         case PRAGMA_OMP_CLAUSE_COPYIN:
25269           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
25270           c_name = "copyin";
25271           break;
25272         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
25273           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
25274                                             clauses);
25275           c_name = "copyprivate";
25276           break;
25277         case PRAGMA_OMP_CLAUSE_DEFAULT:
25278           clauses = cp_parser_omp_clause_default (parser, clauses,
25279                                                   token->location);
25280           c_name = "default";
25281           break;
25282         case PRAGMA_OMP_CLAUSE_FINAL:
25283           clauses = cp_parser_omp_clause_final (parser, clauses, token->location);
25284           c_name = "final";
25285           break;
25286         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
25287           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
25288                                             clauses);
25289           c_name = "firstprivate";
25290           break;
25291         case PRAGMA_OMP_CLAUSE_IF:
25292           clauses = cp_parser_omp_clause_if (parser, clauses, token->location);
25293           c_name = "if";
25294           break;
25295         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
25296           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
25297                                             clauses);
25298           c_name = "lastprivate";
25299           break;
25300         case PRAGMA_OMP_CLAUSE_MERGEABLE:
25301           clauses = cp_parser_omp_clause_mergeable (parser, clauses,
25302                                                     token->location);
25303           c_name = "mergeable";
25304           break;
25305         case PRAGMA_OMP_CLAUSE_NOWAIT:
25306           clauses = cp_parser_omp_clause_nowait (parser, clauses, token->location);
25307           c_name = "nowait";
25308           break;
25309         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
25310           clauses = cp_parser_omp_clause_num_threads (parser, clauses,
25311                                                       token->location);
25312           c_name = "num_threads";
25313           break;
25314         case PRAGMA_OMP_CLAUSE_ORDERED:
25315           clauses = cp_parser_omp_clause_ordered (parser, clauses,
25316                                                   token->location);
25317           c_name = "ordered";
25318           break;
25319         case PRAGMA_OMP_CLAUSE_PRIVATE:
25320           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
25321                                             clauses);
25322           c_name = "private";
25323           break;
25324         case PRAGMA_OMP_CLAUSE_REDUCTION:
25325           clauses = cp_parser_omp_clause_reduction (parser, clauses);
25326           c_name = "reduction";
25327           break;
25328         case PRAGMA_OMP_CLAUSE_SCHEDULE:
25329           clauses = cp_parser_omp_clause_schedule (parser, clauses,
25330                                                    token->location);
25331           c_name = "schedule";
25332           break;
25333         case PRAGMA_OMP_CLAUSE_SHARED:
25334           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
25335                                             clauses);
25336           c_name = "shared";
25337           break;
25338         case PRAGMA_OMP_CLAUSE_UNTIED:
25339           clauses = cp_parser_omp_clause_untied (parser, clauses,
25340                                                  token->location);
25341           c_name = "nowait";
25342           break;
25343         default:
25344           cp_parser_error (parser, "expected %<#pragma omp%> clause");
25345           goto saw_error;
25346         }
25347
25348       if (((mask >> c_kind) & 1) == 0)
25349         {
25350           /* Remove the invalid clause(s) from the list to avoid
25351              confusing the rest of the compiler.  */
25352           clauses = prev;
25353           error_at (token->location, "%qs is not valid for %qs", c_name, where);
25354         }
25355     }
25356  saw_error:
25357   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
25358   return finish_omp_clauses (clauses);
25359 }
25360
25361 /* OpenMP 2.5:
25362    structured-block:
25363      statement
25364
25365    In practice, we're also interested in adding the statement to an
25366    outer node.  So it is convenient if we work around the fact that
25367    cp_parser_statement calls add_stmt.  */
25368
25369 static unsigned
25370 cp_parser_begin_omp_structured_block (cp_parser *parser)
25371 {
25372   unsigned save = parser->in_statement;
25373
25374   /* Only move the values to IN_OMP_BLOCK if they weren't false.
25375      This preserves the "not within loop or switch" style error messages
25376      for nonsense cases like
25377         void foo() {
25378         #pragma omp single
25379           break;
25380         }
25381   */
25382   if (parser->in_statement)
25383     parser->in_statement = IN_OMP_BLOCK;
25384
25385   return save;
25386 }
25387
25388 static void
25389 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
25390 {
25391   parser->in_statement = save;
25392 }
25393
25394 static tree
25395 cp_parser_omp_structured_block (cp_parser *parser)
25396 {
25397   tree stmt = begin_omp_structured_block ();
25398   unsigned int save = cp_parser_begin_omp_structured_block (parser);
25399
25400   cp_parser_statement (parser, NULL_TREE, false, NULL);
25401
25402   cp_parser_end_omp_structured_block (parser, save);
25403   return finish_omp_structured_block (stmt);
25404 }
25405
25406 /* OpenMP 2.5:
25407    # pragma omp atomic new-line
25408      expression-stmt
25409
25410    expression-stmt:
25411      x binop= expr | x++ | ++x | x-- | --x
25412    binop:
25413      +, *, -, /, &, ^, |, <<, >>
25414
25415   where x is an lvalue expression with scalar type.
25416
25417    OpenMP 3.1:
25418    # pragma omp atomic new-line
25419      update-stmt
25420
25421    # pragma omp atomic read new-line
25422      read-stmt
25423
25424    # pragma omp atomic write new-line
25425      write-stmt
25426
25427    # pragma omp atomic update new-line
25428      update-stmt
25429
25430    # pragma omp atomic capture new-line
25431      capture-stmt
25432
25433    # pragma omp atomic capture new-line
25434      capture-block
25435
25436    read-stmt:
25437      v = x
25438    write-stmt:
25439      x = expr
25440    update-stmt:
25441      expression-stmt | x = x binop expr
25442    capture-stmt:
25443      v = x binop= expr | v = x++ | v = ++x | v = x-- | v = --x
25444    capture-block:
25445      { v = x; update-stmt; } | { update-stmt; v = x; }
25446
25447   where x and v are lvalue expressions with scalar type.  */
25448
25449 static void
25450 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
25451 {
25452   tree lhs = NULL_TREE, rhs = NULL_TREE, v = NULL_TREE, lhs1 = NULL_TREE;
25453   tree rhs1 = NULL_TREE, orig_lhs;
25454   enum tree_code code = OMP_ATOMIC, opcode = NOP_EXPR;
25455   bool structured_block = false;
25456
25457   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
25458     {
25459       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
25460       const char *p = IDENTIFIER_POINTER (id);
25461
25462       if (!strcmp (p, "read"))
25463         code = OMP_ATOMIC_READ;
25464       else if (!strcmp (p, "write"))
25465         code = NOP_EXPR;
25466       else if (!strcmp (p, "update"))
25467         code = OMP_ATOMIC;
25468       else if (!strcmp (p, "capture"))
25469         code = OMP_ATOMIC_CAPTURE_NEW;
25470       else
25471         p = NULL;
25472       if (p)
25473         cp_lexer_consume_token (parser->lexer);
25474     }
25475   cp_parser_require_pragma_eol (parser, pragma_tok);
25476
25477   switch (code)
25478     {
25479     case OMP_ATOMIC_READ:
25480     case NOP_EXPR: /* atomic write */
25481       v = cp_parser_unary_expression (parser, /*address_p=*/false,
25482                                       /*cast_p=*/false, NULL);
25483       if (v == error_mark_node)
25484         goto saw_error;
25485       if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
25486         goto saw_error;
25487       if (code == NOP_EXPR)
25488         lhs = cp_parser_expression (parser, /*cast_p=*/false, NULL);
25489       else
25490         lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
25491                                           /*cast_p=*/false, NULL);
25492       if (lhs == error_mark_node)
25493         goto saw_error;
25494       if (code == NOP_EXPR)
25495         {
25496           /* atomic write is represented by OMP_ATOMIC with NOP_EXPR
25497              opcode.  */
25498           code = OMP_ATOMIC;
25499           rhs = lhs;
25500           lhs = v;
25501           v = NULL_TREE;
25502         }
25503       goto done;
25504     case OMP_ATOMIC_CAPTURE_NEW:
25505       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
25506         {
25507           cp_lexer_consume_token (parser->lexer);
25508           structured_block = true;
25509         }
25510       else
25511         {
25512           v = cp_parser_unary_expression (parser, /*address_p=*/false,
25513                                           /*cast_p=*/false, NULL);
25514           if (v == error_mark_node)
25515             goto saw_error;
25516           if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
25517             goto saw_error;
25518         }
25519     default:
25520       break;
25521     }
25522
25523 restart:
25524   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
25525                                     /*cast_p=*/false, NULL);
25526   orig_lhs = lhs;
25527   switch (TREE_CODE (lhs))
25528     {
25529     case ERROR_MARK:
25530       goto saw_error;
25531
25532     case POSTINCREMENT_EXPR:
25533       if (code == OMP_ATOMIC_CAPTURE_NEW && !structured_block)
25534         code = OMP_ATOMIC_CAPTURE_OLD;
25535       /* FALLTHROUGH */
25536     case PREINCREMENT_EXPR:
25537       lhs = TREE_OPERAND (lhs, 0);
25538       opcode = PLUS_EXPR;
25539       rhs = integer_one_node;
25540       break;
25541
25542     case POSTDECREMENT_EXPR:
25543       if (code == OMP_ATOMIC_CAPTURE_NEW && !structured_block)
25544         code = OMP_ATOMIC_CAPTURE_OLD;
25545       /* FALLTHROUGH */
25546     case PREDECREMENT_EXPR:
25547       lhs = TREE_OPERAND (lhs, 0);
25548       opcode = MINUS_EXPR;
25549       rhs = integer_one_node;
25550       break;
25551
25552     case COMPOUND_EXPR:
25553       if (TREE_CODE (TREE_OPERAND (lhs, 0)) == SAVE_EXPR
25554          && TREE_CODE (TREE_OPERAND (lhs, 1)) == COMPOUND_EXPR
25555          && TREE_CODE (TREE_OPERAND (TREE_OPERAND (lhs, 1), 0)) == MODIFY_EXPR
25556          && TREE_OPERAND (TREE_OPERAND (lhs, 1), 1) == TREE_OPERAND (lhs, 0)
25557          && TREE_CODE (TREE_TYPE (TREE_OPERAND (TREE_OPERAND
25558                                              (TREE_OPERAND (lhs, 1), 0), 0)))
25559             == BOOLEAN_TYPE)
25560        /* Undo effects of boolean_increment for post {in,de}crement.  */
25561        lhs = TREE_OPERAND (TREE_OPERAND (lhs, 1), 0);
25562       /* FALLTHRU */
25563     case MODIFY_EXPR:
25564       if (TREE_CODE (lhs) == MODIFY_EXPR
25565          && TREE_CODE (TREE_TYPE (TREE_OPERAND (lhs, 0))) == BOOLEAN_TYPE)
25566         {
25567           /* Undo effects of boolean_increment.  */
25568           if (integer_onep (TREE_OPERAND (lhs, 1)))
25569             {
25570               /* This is pre or post increment.  */
25571               rhs = TREE_OPERAND (lhs, 1);
25572               lhs = TREE_OPERAND (lhs, 0);
25573               opcode = NOP_EXPR;
25574               if (code == OMP_ATOMIC_CAPTURE_NEW
25575                   && !structured_block
25576                   && TREE_CODE (orig_lhs) == COMPOUND_EXPR)
25577                 code = OMP_ATOMIC_CAPTURE_OLD;
25578               break;
25579             }
25580         }
25581       /* FALLTHRU */
25582     default:
25583       switch (cp_lexer_peek_token (parser->lexer)->type)
25584         {
25585         case CPP_MULT_EQ:
25586           opcode = MULT_EXPR;
25587           break;
25588         case CPP_DIV_EQ:
25589           opcode = TRUNC_DIV_EXPR;
25590           break;
25591         case CPP_PLUS_EQ:
25592           opcode = PLUS_EXPR;
25593           break;
25594         case CPP_MINUS_EQ:
25595           opcode = MINUS_EXPR;
25596           break;
25597         case CPP_LSHIFT_EQ:
25598           opcode = LSHIFT_EXPR;
25599           break;
25600         case CPP_RSHIFT_EQ:
25601           opcode = RSHIFT_EXPR;
25602           break;
25603         case CPP_AND_EQ:
25604           opcode = BIT_AND_EXPR;
25605           break;
25606         case CPP_OR_EQ:
25607           opcode = BIT_IOR_EXPR;
25608           break;
25609         case CPP_XOR_EQ:
25610           opcode = BIT_XOR_EXPR;
25611           break;
25612         case CPP_EQ:
25613           if (structured_block || code == OMP_ATOMIC)
25614             {
25615               enum cp_parser_prec oprec;
25616               cp_token *token;
25617               cp_lexer_consume_token (parser->lexer);
25618               rhs1 = cp_parser_unary_expression (parser, /*address_p=*/false,
25619                                                  /*cast_p=*/false, NULL);
25620               if (rhs1 == error_mark_node)
25621                 goto saw_error;
25622               token = cp_lexer_peek_token (parser->lexer);
25623               switch (token->type)
25624                 {
25625                 case CPP_SEMICOLON:
25626                   if (code == OMP_ATOMIC_CAPTURE_NEW)
25627                     {
25628                       code = OMP_ATOMIC_CAPTURE_OLD;
25629                       v = lhs;
25630                       lhs = NULL_TREE;
25631                       lhs1 = rhs1;
25632                       rhs1 = NULL_TREE;
25633                       cp_lexer_consume_token (parser->lexer);
25634                       goto restart;
25635                     }
25636                   cp_parser_error (parser,
25637                                    "invalid form of %<#pragma omp atomic%>");
25638                   goto saw_error;
25639                 case CPP_MULT:
25640                   opcode = MULT_EXPR;
25641                   break;
25642                 case CPP_DIV:
25643                   opcode = TRUNC_DIV_EXPR;
25644                   break;
25645                 case CPP_PLUS:
25646                   opcode = PLUS_EXPR;
25647                   break;
25648                 case CPP_MINUS:
25649                   opcode = MINUS_EXPR;
25650                   break;
25651                 case CPP_LSHIFT:
25652                   opcode = LSHIFT_EXPR;
25653                   break;
25654                 case CPP_RSHIFT:
25655                   opcode = RSHIFT_EXPR;
25656                   break;
25657                 case CPP_AND:
25658                   opcode = BIT_AND_EXPR;
25659                   break;
25660                 case CPP_OR:
25661                   opcode = BIT_IOR_EXPR;
25662                   break;
25663                 case CPP_XOR:
25664                   opcode = BIT_XOR_EXPR;
25665                   break;
25666                 default:
25667                   cp_parser_error (parser,
25668                                    "invalid operator for %<#pragma omp atomic%>");
25669                   goto saw_error;
25670                 }
25671               oprec = TOKEN_PRECEDENCE (token);
25672               gcc_assert (oprec != PREC_NOT_OPERATOR);
25673               if (commutative_tree_code (opcode))
25674                 oprec = (enum cp_parser_prec) (oprec - 1);
25675               cp_lexer_consume_token (parser->lexer);
25676               rhs = cp_parser_binary_expression (parser, false, false,
25677                                                  oprec, NULL);
25678               if (rhs == error_mark_node)
25679                 goto saw_error;
25680               goto stmt_done;
25681             }
25682           /* FALLTHROUGH */
25683         default:
25684           cp_parser_error (parser,
25685                            "invalid operator for %<#pragma omp atomic%>");
25686           goto saw_error;
25687         }
25688       cp_lexer_consume_token (parser->lexer);
25689
25690       rhs = cp_parser_expression (parser, false, NULL);
25691       if (rhs == error_mark_node)
25692         goto saw_error;
25693       break;
25694     }
25695 stmt_done:
25696   if (structured_block && code == OMP_ATOMIC_CAPTURE_NEW)
25697     {
25698       if (!cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON))
25699         goto saw_error;
25700       v = cp_parser_unary_expression (parser, /*address_p=*/false,
25701                                       /*cast_p=*/false, NULL);
25702       if (v == error_mark_node)
25703         goto saw_error;
25704       if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
25705         goto saw_error;
25706       lhs1 = cp_parser_unary_expression (parser, /*address_p=*/false,
25707                                          /*cast_p=*/false, NULL);
25708       if (lhs1 == error_mark_node)
25709         goto saw_error;
25710     }
25711   if (structured_block)
25712     {
25713       cp_parser_consume_semicolon_at_end_of_statement (parser);
25714       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
25715     }
25716 done:
25717   finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
25718   if (!structured_block)
25719     cp_parser_consume_semicolon_at_end_of_statement (parser);
25720   return;
25721
25722  saw_error:
25723   cp_parser_skip_to_end_of_block_or_statement (parser);
25724   if (structured_block)
25725     {
25726       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
25727         cp_lexer_consume_token (parser->lexer);
25728       else if (code == OMP_ATOMIC_CAPTURE_NEW)
25729         {
25730           cp_parser_skip_to_end_of_block_or_statement (parser);
25731           if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
25732             cp_lexer_consume_token (parser->lexer);
25733         }
25734     }
25735 }
25736
25737
25738 /* OpenMP 2.5:
25739    # pragma omp barrier new-line  */
25740
25741 static void
25742 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
25743 {
25744   cp_parser_require_pragma_eol (parser, pragma_tok);
25745   finish_omp_barrier ();
25746 }
25747
25748 /* OpenMP 2.5:
25749    # pragma omp critical [(name)] new-line
25750      structured-block  */
25751
25752 static tree
25753 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
25754 {
25755   tree stmt, name = NULL;
25756
25757   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
25758     {
25759       cp_lexer_consume_token (parser->lexer);
25760
25761       name = cp_parser_identifier (parser);
25762
25763       if (name == error_mark_node
25764           || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
25765         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
25766                                                /*or_comma=*/false,
25767                                                /*consume_paren=*/true);
25768       if (name == error_mark_node)
25769         name = NULL;
25770     }
25771   cp_parser_require_pragma_eol (parser, pragma_tok);
25772
25773   stmt = cp_parser_omp_structured_block (parser);
25774   return c_finish_omp_critical (input_location, stmt, name);
25775 }
25776
25777 /* OpenMP 2.5:
25778    # pragma omp flush flush-vars[opt] new-line
25779
25780    flush-vars:
25781      ( variable-list ) */
25782
25783 static void
25784 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
25785 {
25786   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
25787     (void) cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
25788   cp_parser_require_pragma_eol (parser, pragma_tok);
25789
25790   finish_omp_flush ();
25791 }
25792
25793 /* Helper function, to parse omp for increment expression.  */
25794
25795 static tree
25796 cp_parser_omp_for_cond (cp_parser *parser, tree decl)
25797 {
25798   tree cond = cp_parser_binary_expression (parser, false, true,
25799                                            PREC_NOT_OPERATOR, NULL);
25800   if (cond == error_mark_node
25801       || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
25802     {
25803       cp_parser_skip_to_end_of_statement (parser);
25804       return error_mark_node;
25805     }
25806
25807   switch (TREE_CODE (cond))
25808     {
25809     case GT_EXPR:
25810     case GE_EXPR:
25811     case LT_EXPR:
25812     case LE_EXPR:
25813       break;
25814     default:
25815       return error_mark_node;
25816     }
25817
25818   /* If decl is an iterator, preserve LHS and RHS of the relational
25819      expr until finish_omp_for.  */
25820   if (decl
25821       && (type_dependent_expression_p (decl)
25822           || CLASS_TYPE_P (TREE_TYPE (decl))))
25823     return cond;
25824
25825   return build_x_binary_op (TREE_CODE (cond),
25826                             TREE_OPERAND (cond, 0), ERROR_MARK,
25827                             TREE_OPERAND (cond, 1), ERROR_MARK,
25828                             /*overload=*/NULL, tf_warning_or_error);
25829 }
25830
25831 /* Helper function, to parse omp for increment expression.  */
25832
25833 static tree
25834 cp_parser_omp_for_incr (cp_parser *parser, tree decl)
25835 {
25836   cp_token *token = cp_lexer_peek_token (parser->lexer);
25837   enum tree_code op;
25838   tree lhs, rhs;
25839   cp_id_kind idk;
25840   bool decl_first;
25841
25842   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
25843     {
25844       op = (token->type == CPP_PLUS_PLUS
25845             ? PREINCREMENT_EXPR : PREDECREMENT_EXPR);
25846       cp_lexer_consume_token (parser->lexer);
25847       lhs = cp_parser_cast_expression (parser, false, false, NULL);
25848       if (lhs != decl)
25849         return error_mark_node;
25850       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
25851     }
25852
25853   lhs = cp_parser_primary_expression (parser, false, false, false, &idk);
25854   if (lhs != decl)
25855     return error_mark_node;
25856
25857   token = cp_lexer_peek_token (parser->lexer);
25858   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
25859     {
25860       op = (token->type == CPP_PLUS_PLUS
25861             ? POSTINCREMENT_EXPR : POSTDECREMENT_EXPR);
25862       cp_lexer_consume_token (parser->lexer);
25863       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
25864     }
25865
25866   op = cp_parser_assignment_operator_opt (parser);
25867   if (op == ERROR_MARK)
25868     return error_mark_node;
25869
25870   if (op != NOP_EXPR)
25871     {
25872       rhs = cp_parser_assignment_expression (parser, false, NULL);
25873       rhs = build2 (op, TREE_TYPE (decl), decl, rhs);
25874       return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
25875     }
25876
25877   lhs = cp_parser_binary_expression (parser, false, false,
25878                                      PREC_ADDITIVE_EXPRESSION, NULL);
25879   token = cp_lexer_peek_token (parser->lexer);
25880   decl_first = lhs == decl;
25881   if (decl_first)
25882     lhs = NULL_TREE;
25883   if (token->type != CPP_PLUS
25884       && token->type != CPP_MINUS)
25885     return error_mark_node;
25886
25887   do
25888     {
25889       op = token->type == CPP_PLUS ? PLUS_EXPR : MINUS_EXPR;
25890       cp_lexer_consume_token (parser->lexer);
25891       rhs = cp_parser_binary_expression (parser, false, false,
25892                                          PREC_ADDITIVE_EXPRESSION, NULL);
25893       token = cp_lexer_peek_token (parser->lexer);
25894       if (token->type == CPP_PLUS || token->type == CPP_MINUS || decl_first)
25895         {
25896           if (lhs == NULL_TREE)
25897             {
25898               if (op == PLUS_EXPR)
25899                 lhs = rhs;
25900               else
25901                 lhs = build_x_unary_op (NEGATE_EXPR, rhs, tf_warning_or_error);
25902             }
25903           else
25904             lhs = build_x_binary_op (op, lhs, ERROR_MARK, rhs, ERROR_MARK,
25905                                      NULL, tf_warning_or_error);
25906         }
25907     }
25908   while (token->type == CPP_PLUS || token->type == CPP_MINUS);
25909
25910   if (!decl_first)
25911     {
25912       if (rhs != decl || op == MINUS_EXPR)
25913         return error_mark_node;
25914       rhs = build2 (op, TREE_TYPE (decl), lhs, decl);
25915     }
25916   else
25917     rhs = build2 (PLUS_EXPR, TREE_TYPE (decl), decl, lhs);
25918
25919   return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
25920 }
25921
25922 /* Parse the restricted form of the for statement allowed by OpenMP.  */
25923
25924 static tree
25925 cp_parser_omp_for_loop (cp_parser *parser, tree clauses, tree *par_clauses)
25926 {
25927   tree init, cond, incr, body, decl, pre_body = NULL_TREE, ret;
25928   tree real_decl, initv, condv, incrv, declv;
25929   tree this_pre_body, cl;
25930   location_t loc_first;
25931   bool collapse_err = false;
25932   int i, collapse = 1, nbraces = 0;
25933   VEC(tree,gc) *for_block = make_tree_vector ();
25934
25935   for (cl = clauses; cl; cl = OMP_CLAUSE_CHAIN (cl))
25936     if (OMP_CLAUSE_CODE (cl) == OMP_CLAUSE_COLLAPSE)
25937       collapse = tree_low_cst (OMP_CLAUSE_COLLAPSE_EXPR (cl), 0);
25938
25939   gcc_assert (collapse >= 1);
25940
25941   declv = make_tree_vec (collapse);
25942   initv = make_tree_vec (collapse);
25943   condv = make_tree_vec (collapse);
25944   incrv = make_tree_vec (collapse);
25945
25946   loc_first = cp_lexer_peek_token (parser->lexer)->location;
25947
25948   for (i = 0; i < collapse; i++)
25949     {
25950       int bracecount = 0;
25951       bool add_private_clause = false;
25952       location_t loc;
25953
25954       if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
25955         {
25956           cp_parser_error (parser, "for statement expected");
25957           return NULL;
25958         }
25959       loc = cp_lexer_consume_token (parser->lexer)->location;
25960
25961       if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
25962         return NULL;
25963
25964       init = decl = real_decl = NULL;
25965       this_pre_body = push_stmt_list ();
25966       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
25967         {
25968           /* See 2.5.1 (in OpenMP 3.0, similar wording is in 2.5 standard too):
25969
25970              init-expr:
25971                        var = lb
25972                        integer-type var = lb
25973                        random-access-iterator-type var = lb
25974                        pointer-type var = lb
25975           */
25976           cp_decl_specifier_seq type_specifiers;
25977
25978           /* First, try to parse as an initialized declaration.  See
25979              cp_parser_condition, from whence the bulk of this is copied.  */
25980
25981           cp_parser_parse_tentatively (parser);
25982           cp_parser_type_specifier_seq (parser, /*is_declaration=*/true,
25983                                         /*is_trailing_return=*/false,
25984                                         &type_specifiers);
25985           if (cp_parser_parse_definitely (parser))
25986             {
25987               /* If parsing a type specifier seq succeeded, then this
25988                  MUST be a initialized declaration.  */
25989               tree asm_specification, attributes;
25990               cp_declarator *declarator;
25991
25992               declarator = cp_parser_declarator (parser,
25993                                                  CP_PARSER_DECLARATOR_NAMED,
25994                                                  /*ctor_dtor_or_conv_p=*/NULL,
25995                                                  /*parenthesized_p=*/NULL,
25996                                                  /*member_p=*/false);
25997               attributes = cp_parser_attributes_opt (parser);
25998               asm_specification = cp_parser_asm_specification_opt (parser);
25999
26000               if (declarator == cp_error_declarator) 
26001                 cp_parser_skip_to_end_of_statement (parser);
26002
26003               else 
26004                 {
26005                   tree pushed_scope, auto_node;
26006
26007                   decl = start_decl (declarator, &type_specifiers,
26008                                      SD_INITIALIZED, attributes,
26009                                      /*prefix_attributes=*/NULL_TREE,
26010                                      &pushed_scope);
26011
26012                   auto_node = type_uses_auto (TREE_TYPE (decl));
26013                   if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
26014                     {
26015                       if (cp_lexer_next_token_is (parser->lexer, 
26016                                                   CPP_OPEN_PAREN))
26017                         error ("parenthesized initialization is not allowed in "
26018                                "OpenMP %<for%> loop");
26019                       else
26020                         /* Trigger an error.  */
26021                         cp_parser_require (parser, CPP_EQ, RT_EQ);
26022
26023                       init = error_mark_node;
26024                       cp_parser_skip_to_end_of_statement (parser);
26025                     }
26026                   else if (CLASS_TYPE_P (TREE_TYPE (decl))
26027                            || type_dependent_expression_p (decl)
26028                            || auto_node)
26029                     {
26030                       bool is_direct_init, is_non_constant_init;
26031
26032                       init = cp_parser_initializer (parser,
26033                                                     &is_direct_init,
26034                                                     &is_non_constant_init);
26035
26036                       if (auto_node)
26037                         {
26038                           TREE_TYPE (decl)
26039                             = do_auto_deduction (TREE_TYPE (decl), init,
26040                                                  auto_node);
26041
26042                           if (!CLASS_TYPE_P (TREE_TYPE (decl))
26043                               && !type_dependent_expression_p (decl))
26044                             goto non_class;
26045                         }
26046                       
26047                       cp_finish_decl (decl, init, !is_non_constant_init,
26048                                       asm_specification,
26049                                       LOOKUP_ONLYCONVERTING);
26050                       if (CLASS_TYPE_P (TREE_TYPE (decl)))
26051                         {
26052                           VEC_safe_push (tree, gc, for_block, this_pre_body);
26053                           init = NULL_TREE;
26054                         }
26055                       else
26056                         init = pop_stmt_list (this_pre_body);
26057                       this_pre_body = NULL_TREE;
26058                     }
26059                   else
26060                     {
26061                       /* Consume '='.  */
26062                       cp_lexer_consume_token (parser->lexer);
26063                       init = cp_parser_assignment_expression (parser, false, NULL);
26064
26065                     non_class:
26066                       if (TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
26067                         init = error_mark_node;
26068                       else
26069                         cp_finish_decl (decl, NULL_TREE,
26070                                         /*init_const_expr_p=*/false,
26071                                         asm_specification,
26072                                         LOOKUP_ONLYCONVERTING);
26073                     }
26074
26075                   if (pushed_scope)
26076                     pop_scope (pushed_scope);
26077                 }
26078             }
26079           else 
26080             {
26081               cp_id_kind idk;
26082               /* If parsing a type specifier sequence failed, then
26083                  this MUST be a simple expression.  */
26084               cp_parser_parse_tentatively (parser);
26085               decl = cp_parser_primary_expression (parser, false, false,
26086                                                    false, &idk);
26087               if (!cp_parser_error_occurred (parser)
26088                   && decl
26089                   && DECL_P (decl)
26090                   && CLASS_TYPE_P (TREE_TYPE (decl)))
26091                 {
26092                   tree rhs;
26093
26094                   cp_parser_parse_definitely (parser);
26095                   cp_parser_require (parser, CPP_EQ, RT_EQ);
26096                   rhs = cp_parser_assignment_expression (parser, false, NULL);
26097                   finish_expr_stmt (build_x_modify_expr (decl, NOP_EXPR,
26098                                                          rhs,
26099                                                          tf_warning_or_error));
26100                   add_private_clause = true;
26101                 }
26102               else
26103                 {
26104                   decl = NULL;
26105                   cp_parser_abort_tentative_parse (parser);
26106                   init = cp_parser_expression (parser, false, NULL);
26107                   if (init)
26108                     {
26109                       if (TREE_CODE (init) == MODIFY_EXPR
26110                           || TREE_CODE (init) == MODOP_EXPR)
26111                         real_decl = TREE_OPERAND (init, 0);
26112                     }
26113                 }
26114             }
26115         }
26116       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
26117       if (this_pre_body)
26118         {
26119           this_pre_body = pop_stmt_list (this_pre_body);
26120           if (pre_body)
26121             {
26122               tree t = pre_body;
26123               pre_body = push_stmt_list ();
26124               add_stmt (t);
26125               add_stmt (this_pre_body);
26126               pre_body = pop_stmt_list (pre_body);
26127             }
26128           else
26129             pre_body = this_pre_body;
26130         }
26131
26132       if (decl)
26133         real_decl = decl;
26134       if (par_clauses != NULL && real_decl != NULL_TREE)
26135         {
26136           tree *c;
26137           for (c = par_clauses; *c ; )
26138             if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_FIRSTPRIVATE
26139                 && OMP_CLAUSE_DECL (*c) == real_decl)
26140               {
26141                 error_at (loc, "iteration variable %qD"
26142                           " should not be firstprivate", real_decl);
26143                 *c = OMP_CLAUSE_CHAIN (*c);
26144               }
26145             else if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_LASTPRIVATE
26146                      && OMP_CLAUSE_DECL (*c) == real_decl)
26147               {
26148                 /* Add lastprivate (decl) clause to OMP_FOR_CLAUSES,
26149                    change it to shared (decl) in OMP_PARALLEL_CLAUSES.  */
26150                 tree l = build_omp_clause (loc, OMP_CLAUSE_LASTPRIVATE);
26151                 OMP_CLAUSE_DECL (l) = real_decl;
26152                 OMP_CLAUSE_CHAIN (l) = clauses;
26153                 CP_OMP_CLAUSE_INFO (l) = CP_OMP_CLAUSE_INFO (*c);
26154                 clauses = l;
26155                 OMP_CLAUSE_SET_CODE (*c, OMP_CLAUSE_SHARED);
26156                 CP_OMP_CLAUSE_INFO (*c) = NULL;
26157                 add_private_clause = false;
26158               }
26159             else
26160               {
26161                 if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_PRIVATE
26162                     && OMP_CLAUSE_DECL (*c) == real_decl)
26163                   add_private_clause = false;
26164                 c = &OMP_CLAUSE_CHAIN (*c);
26165               }
26166         }
26167
26168       if (add_private_clause)
26169         {
26170           tree c;
26171           for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
26172             {
26173               if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
26174                    || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
26175                   && OMP_CLAUSE_DECL (c) == decl)
26176                 break;
26177               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
26178                        && OMP_CLAUSE_DECL (c) == decl)
26179                 error_at (loc, "iteration variable %qD "
26180                           "should not be firstprivate",
26181                           decl);
26182               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
26183                        && OMP_CLAUSE_DECL (c) == decl)
26184                 error_at (loc, "iteration variable %qD should not be reduction",
26185                           decl);
26186             }
26187           if (c == NULL)
26188             {
26189               c = build_omp_clause (loc, OMP_CLAUSE_PRIVATE);
26190               OMP_CLAUSE_DECL (c) = decl;
26191               c = finish_omp_clauses (c);
26192               if (c)
26193                 {
26194                   OMP_CLAUSE_CHAIN (c) = clauses;
26195                   clauses = c;
26196                 }
26197             }
26198         }
26199
26200       cond = NULL;
26201       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
26202         cond = cp_parser_omp_for_cond (parser, decl);
26203       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
26204
26205       incr = NULL;
26206       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
26207         {
26208           /* If decl is an iterator, preserve the operator on decl
26209              until finish_omp_for.  */
26210           if (decl
26211               && ((type_dependent_expression_p (decl)
26212                    && !POINTER_TYPE_P (TREE_TYPE (decl)))
26213                   || CLASS_TYPE_P (TREE_TYPE (decl))))
26214             incr = cp_parser_omp_for_incr (parser, decl);
26215           else
26216             incr = cp_parser_expression (parser, false, NULL);
26217         }
26218
26219       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
26220         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
26221                                                /*or_comma=*/false,
26222                                                /*consume_paren=*/true);
26223
26224       TREE_VEC_ELT (declv, i) = decl;
26225       TREE_VEC_ELT (initv, i) = init;
26226       TREE_VEC_ELT (condv, i) = cond;
26227       TREE_VEC_ELT (incrv, i) = incr;
26228
26229       if (i == collapse - 1)
26230         break;
26231
26232       /* FIXME: OpenMP 3.0 draft isn't very clear on what exactly is allowed
26233          in between the collapsed for loops to be still considered perfectly
26234          nested.  Hopefully the final version clarifies this.
26235          For now handle (multiple) {'s and empty statements.  */
26236       cp_parser_parse_tentatively (parser);
26237       do
26238         {
26239           if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
26240             break;
26241           else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
26242             {
26243               cp_lexer_consume_token (parser->lexer);
26244               bracecount++;
26245             }
26246           else if (bracecount
26247                    && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
26248             cp_lexer_consume_token (parser->lexer);
26249           else
26250             {
26251               loc = cp_lexer_peek_token (parser->lexer)->location;
26252               error_at (loc, "not enough collapsed for loops");
26253               collapse_err = true;
26254               cp_parser_abort_tentative_parse (parser);
26255               declv = NULL_TREE;
26256               break;
26257             }
26258         }
26259       while (1);
26260
26261       if (declv)
26262         {
26263           cp_parser_parse_definitely (parser);
26264           nbraces += bracecount;
26265         }
26266     }
26267
26268   /* Note that we saved the original contents of this flag when we entered
26269      the structured block, and so we don't need to re-save it here.  */
26270   parser->in_statement = IN_OMP_FOR;
26271
26272   /* Note that the grammar doesn't call for a structured block here,
26273      though the loop as a whole is a structured block.  */
26274   body = push_stmt_list ();
26275   cp_parser_statement (parser, NULL_TREE, false, NULL);
26276   body = pop_stmt_list (body);
26277
26278   if (declv == NULL_TREE)
26279     ret = NULL_TREE;
26280   else
26281     ret = finish_omp_for (loc_first, declv, initv, condv, incrv, body,
26282                           pre_body, clauses);
26283
26284   while (nbraces)
26285     {
26286       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
26287         {
26288           cp_lexer_consume_token (parser->lexer);
26289           nbraces--;
26290         }
26291       else if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
26292         cp_lexer_consume_token (parser->lexer);
26293       else
26294         {
26295           if (!collapse_err)
26296             {
26297               error_at (cp_lexer_peek_token (parser->lexer)->location,
26298                         "collapsed loops not perfectly nested");
26299             }
26300           collapse_err = true;
26301           cp_parser_statement_seq_opt (parser, NULL);
26302           if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
26303             break;
26304         }
26305     }
26306
26307   while (!VEC_empty (tree, for_block))
26308     add_stmt (pop_stmt_list (VEC_pop (tree, for_block)));
26309   release_tree_vector (for_block);
26310
26311   return ret;
26312 }
26313
26314 /* OpenMP 2.5:
26315    #pragma omp for for-clause[optseq] new-line
26316      for-loop  */
26317
26318 #define OMP_FOR_CLAUSE_MASK                             \
26319         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26320         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26321         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
26322         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
26323         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
26324         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
26325         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT)              \
26326         | (1u << PRAGMA_OMP_CLAUSE_COLLAPSE))
26327
26328 static tree
26329 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
26330 {
26331   tree clauses, sb, ret;
26332   unsigned int save;
26333
26334   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
26335                                        "#pragma omp for", pragma_tok);
26336
26337   sb = begin_omp_structured_block ();
26338   save = cp_parser_begin_omp_structured_block (parser);
26339
26340   ret = cp_parser_omp_for_loop (parser, clauses, NULL);
26341
26342   cp_parser_end_omp_structured_block (parser, save);
26343   add_stmt (finish_omp_structured_block (sb));
26344
26345   return ret;
26346 }
26347
26348 /* OpenMP 2.5:
26349    # pragma omp master new-line
26350      structured-block  */
26351
26352 static tree
26353 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
26354 {
26355   cp_parser_require_pragma_eol (parser, pragma_tok);
26356   return c_finish_omp_master (input_location,
26357                               cp_parser_omp_structured_block (parser));
26358 }
26359
26360 /* OpenMP 2.5:
26361    # pragma omp ordered new-line
26362      structured-block  */
26363
26364 static tree
26365 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
26366 {
26367   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
26368   cp_parser_require_pragma_eol (parser, pragma_tok);
26369   return c_finish_omp_ordered (loc, cp_parser_omp_structured_block (parser));
26370 }
26371
26372 /* OpenMP 2.5:
26373
26374    section-scope:
26375      { section-sequence }
26376
26377    section-sequence:
26378      section-directive[opt] structured-block
26379      section-sequence section-directive structured-block  */
26380
26381 static tree
26382 cp_parser_omp_sections_scope (cp_parser *parser)
26383 {
26384   tree stmt, substmt;
26385   bool error_suppress = false;
26386   cp_token *tok;
26387
26388   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
26389     return NULL_TREE;
26390
26391   stmt = push_stmt_list ();
26392
26393   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
26394     {
26395       unsigned save;
26396
26397       substmt = begin_omp_structured_block ();
26398       save = cp_parser_begin_omp_structured_block (parser);
26399
26400       while (1)
26401         {
26402           cp_parser_statement (parser, NULL_TREE, false, NULL);
26403
26404           tok = cp_lexer_peek_token (parser->lexer);
26405           if (tok->pragma_kind == PRAGMA_OMP_SECTION)
26406             break;
26407           if (tok->type == CPP_CLOSE_BRACE)
26408             break;
26409           if (tok->type == CPP_EOF)
26410             break;
26411         }
26412
26413       cp_parser_end_omp_structured_block (parser, save);
26414       substmt = finish_omp_structured_block (substmt);
26415       substmt = build1 (OMP_SECTION, void_type_node, substmt);
26416       add_stmt (substmt);
26417     }
26418
26419   while (1)
26420     {
26421       tok = cp_lexer_peek_token (parser->lexer);
26422       if (tok->type == CPP_CLOSE_BRACE)
26423         break;
26424       if (tok->type == CPP_EOF)
26425         break;
26426
26427       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
26428         {
26429           cp_lexer_consume_token (parser->lexer);
26430           cp_parser_require_pragma_eol (parser, tok);
26431           error_suppress = false;
26432         }
26433       else if (!error_suppress)
26434         {
26435           cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
26436           error_suppress = true;
26437         }
26438
26439       substmt = cp_parser_omp_structured_block (parser);
26440       substmt = build1 (OMP_SECTION, void_type_node, substmt);
26441       add_stmt (substmt);
26442     }
26443   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
26444
26445   substmt = pop_stmt_list (stmt);
26446
26447   stmt = make_node (OMP_SECTIONS);
26448   TREE_TYPE (stmt) = void_type_node;
26449   OMP_SECTIONS_BODY (stmt) = substmt;
26450
26451   add_stmt (stmt);
26452   return stmt;
26453 }
26454
26455 /* OpenMP 2.5:
26456    # pragma omp sections sections-clause[optseq] newline
26457      sections-scope  */
26458
26459 #define OMP_SECTIONS_CLAUSE_MASK                        \
26460         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26461         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26462         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
26463         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
26464         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
26465
26466 static tree
26467 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
26468 {
26469   tree clauses, ret;
26470
26471   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
26472                                        "#pragma omp sections", pragma_tok);
26473
26474   ret = cp_parser_omp_sections_scope (parser);
26475   if (ret)
26476     OMP_SECTIONS_CLAUSES (ret) = clauses;
26477
26478   return ret;
26479 }
26480
26481 /* OpenMP 2.5:
26482    # pragma parallel parallel-clause new-line
26483    # pragma parallel for parallel-for-clause new-line
26484    # pragma parallel sections parallel-sections-clause new-line  */
26485
26486 #define OMP_PARALLEL_CLAUSE_MASK                        \
26487         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
26488         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26489         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26490         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
26491         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
26492         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
26493         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
26494         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
26495
26496 static tree
26497 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
26498 {
26499   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
26500   const char *p_name = "#pragma omp parallel";
26501   tree stmt, clauses, par_clause, ws_clause, block;
26502   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
26503   unsigned int save;
26504   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
26505
26506   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
26507     {
26508       cp_lexer_consume_token (parser->lexer);
26509       p_kind = PRAGMA_OMP_PARALLEL_FOR;
26510       p_name = "#pragma omp parallel for";
26511       mask |= OMP_FOR_CLAUSE_MASK;
26512       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
26513     }
26514   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
26515     {
26516       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
26517       const char *p = IDENTIFIER_POINTER (id);
26518       if (strcmp (p, "sections") == 0)
26519         {
26520           cp_lexer_consume_token (parser->lexer);
26521           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
26522           p_name = "#pragma omp parallel sections";
26523           mask |= OMP_SECTIONS_CLAUSE_MASK;
26524           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
26525         }
26526     }
26527
26528   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
26529   block = begin_omp_parallel ();
26530   save = cp_parser_begin_omp_structured_block (parser);
26531
26532   switch (p_kind)
26533     {
26534     case PRAGMA_OMP_PARALLEL:
26535       cp_parser_statement (parser, NULL_TREE, false, NULL);
26536       par_clause = clauses;
26537       break;
26538
26539     case PRAGMA_OMP_PARALLEL_FOR:
26540       c_split_parallel_clauses (loc, clauses, &par_clause, &ws_clause);
26541       cp_parser_omp_for_loop (parser, ws_clause, &par_clause);
26542       break;
26543
26544     case PRAGMA_OMP_PARALLEL_SECTIONS:
26545       c_split_parallel_clauses (loc, clauses, &par_clause, &ws_clause);
26546       stmt = cp_parser_omp_sections_scope (parser);
26547       if (stmt)
26548         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
26549       break;
26550
26551     default:
26552       gcc_unreachable ();
26553     }
26554
26555   cp_parser_end_omp_structured_block (parser, save);
26556   stmt = finish_omp_parallel (par_clause, block);
26557   if (p_kind != PRAGMA_OMP_PARALLEL)
26558     OMP_PARALLEL_COMBINED (stmt) = 1;
26559   return stmt;
26560 }
26561
26562 /* OpenMP 2.5:
26563    # pragma omp single single-clause[optseq] new-line
26564      structured-block  */
26565
26566 #define OMP_SINGLE_CLAUSE_MASK                          \
26567         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26568         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26569         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
26570         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
26571
26572 static tree
26573 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
26574 {
26575   tree stmt = make_node (OMP_SINGLE);
26576   TREE_TYPE (stmt) = void_type_node;
26577
26578   OMP_SINGLE_CLAUSES (stmt)
26579     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
26580                                  "#pragma omp single", pragma_tok);
26581   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
26582
26583   return add_stmt (stmt);
26584 }
26585
26586 /* OpenMP 3.0:
26587    # pragma omp task task-clause[optseq] new-line
26588      structured-block  */
26589
26590 #define OMP_TASK_CLAUSE_MASK                            \
26591         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
26592         | (1u << PRAGMA_OMP_CLAUSE_UNTIED)              \
26593         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
26594         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
26595         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
26596         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
26597         | (1u << PRAGMA_OMP_CLAUSE_FINAL)               \
26598         | (1u << PRAGMA_OMP_CLAUSE_MERGEABLE))
26599
26600 static tree
26601 cp_parser_omp_task (cp_parser *parser, cp_token *pragma_tok)
26602 {
26603   tree clauses, block;
26604   unsigned int save;
26605
26606   clauses = cp_parser_omp_all_clauses (parser, OMP_TASK_CLAUSE_MASK,
26607                                        "#pragma omp task", pragma_tok);
26608   block = begin_omp_task ();
26609   save = cp_parser_begin_omp_structured_block (parser);
26610   cp_parser_statement (parser, NULL_TREE, false, NULL);
26611   cp_parser_end_omp_structured_block (parser, save);
26612   return finish_omp_task (clauses, block);
26613 }
26614
26615 /* OpenMP 3.0:
26616    # pragma omp taskwait new-line  */
26617
26618 static void
26619 cp_parser_omp_taskwait (cp_parser *parser, cp_token *pragma_tok)
26620 {
26621   cp_parser_require_pragma_eol (parser, pragma_tok);
26622   finish_omp_taskwait ();
26623 }
26624
26625 /* OpenMP 3.1:
26626    # pragma omp taskyield new-line  */
26627
26628 static void
26629 cp_parser_omp_taskyield (cp_parser *parser, cp_token *pragma_tok)
26630 {
26631   cp_parser_require_pragma_eol (parser, pragma_tok);
26632   finish_omp_taskyield ();
26633 }
26634
26635 /* OpenMP 2.5:
26636    # pragma omp threadprivate (variable-list) */
26637
26638 static void
26639 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
26640 {
26641   tree vars;
26642
26643   vars = cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
26644   cp_parser_require_pragma_eol (parser, pragma_tok);
26645
26646   finish_omp_threadprivate (vars);
26647 }
26648
26649 /* Main entry point to OpenMP statement pragmas.  */
26650
26651 static void
26652 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
26653 {
26654   tree stmt;
26655
26656   switch (pragma_tok->pragma_kind)
26657     {
26658     case PRAGMA_OMP_ATOMIC:
26659       cp_parser_omp_atomic (parser, pragma_tok);
26660       return;
26661     case PRAGMA_OMP_CRITICAL:
26662       stmt = cp_parser_omp_critical (parser, pragma_tok);
26663       break;
26664     case PRAGMA_OMP_FOR:
26665       stmt = cp_parser_omp_for (parser, pragma_tok);
26666       break;
26667     case PRAGMA_OMP_MASTER:
26668       stmt = cp_parser_omp_master (parser, pragma_tok);
26669       break;
26670     case PRAGMA_OMP_ORDERED:
26671       stmt = cp_parser_omp_ordered (parser, pragma_tok);
26672       break;
26673     case PRAGMA_OMP_PARALLEL:
26674       stmt = cp_parser_omp_parallel (parser, pragma_tok);
26675       break;
26676     case PRAGMA_OMP_SECTIONS:
26677       stmt = cp_parser_omp_sections (parser, pragma_tok);
26678       break;
26679     case PRAGMA_OMP_SINGLE:
26680       stmt = cp_parser_omp_single (parser, pragma_tok);
26681       break;
26682     case PRAGMA_OMP_TASK:
26683       stmt = cp_parser_omp_task (parser, pragma_tok);
26684       break;
26685     default:
26686       gcc_unreachable ();
26687     }
26688
26689   if (stmt)
26690     SET_EXPR_LOCATION (stmt, pragma_tok->location);
26691 }
26692 \f
26693 /* Transactional Memory parsing routines.  */
26694
26695 /* Parse a transaction attribute.
26696
26697    txn-attribute:
26698         attribute
26699         [ [ identifier ] ]
26700
26701    ??? Simplify this when C++0x bracket attributes are
26702    implemented properly.  */
26703
26704 static tree
26705 cp_parser_txn_attribute_opt (cp_parser *parser)
26706 {
26707   cp_token *token;
26708   tree attr_name, attr = NULL;
26709
26710   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
26711     return cp_parser_attributes_opt (parser);
26712
26713   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
26714     return NULL_TREE;
26715   cp_lexer_consume_token (parser->lexer);
26716   if (!cp_parser_require (parser, CPP_OPEN_SQUARE, RT_OPEN_SQUARE))
26717     goto error1;
26718
26719   token = cp_lexer_peek_token (parser->lexer);
26720   if (token->type == CPP_NAME || token->type == CPP_KEYWORD)
26721     {
26722       token = cp_lexer_consume_token (parser->lexer);
26723
26724       attr_name = (token->type == CPP_KEYWORD
26725                    /* For keywords, use the canonical spelling,
26726                       not the parsed identifier.  */
26727                    ? ridpointers[(int) token->keyword]
26728                    : token->u.value);
26729       attr = build_tree_list (attr_name, NULL_TREE);
26730     }
26731   else
26732     cp_parser_error (parser, "expected identifier");
26733
26734   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
26735  error1:
26736   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
26737   return attr;
26738 }
26739
26740 /* Parse a __transaction_atomic or __transaction_relaxed statement.
26741
26742    transaction-statement:
26743      __transaction_atomic txn-attribute[opt] txn-exception-spec[opt]
26744        compound-statement
26745      __transaction_relaxed txn-exception-spec[opt] compound-statement
26746
26747    ??? The exception specification is not yet implemented.
26748 */
26749
26750 static tree
26751 cp_parser_transaction (cp_parser *parser, enum rid keyword)
26752 {
26753   unsigned char old_in = parser->in_transaction;
26754   unsigned char this_in = 1, new_in;
26755   cp_token *token;
26756   tree stmt, attrs;
26757
26758   gcc_assert (keyword == RID_TRANSACTION_ATOMIC
26759       || keyword == RID_TRANSACTION_RELAXED);
26760   token = cp_parser_require_keyword (parser, keyword,
26761       (keyword == RID_TRANSACTION_ATOMIC ? RT_TRANSACTION_ATOMIC
26762           : RT_TRANSACTION_RELAXED));
26763   gcc_assert (token != NULL);
26764
26765   if (keyword == RID_TRANSACTION_RELAXED)
26766     this_in |= TM_STMT_ATTR_RELAXED;
26767   else
26768     {
26769       attrs = cp_parser_txn_attribute_opt (parser);
26770       if (attrs)
26771         this_in |= parse_tm_stmt_attr (attrs, TM_STMT_ATTR_OUTER);
26772     }
26773
26774   /* Keep track if we're in the lexical scope of an outer transaction.  */
26775   new_in = this_in | (old_in & TM_STMT_ATTR_OUTER);
26776
26777   stmt = begin_transaction_stmt (token->location, NULL, this_in);
26778
26779   parser->in_transaction = new_in;
26780   cp_parser_compound_statement (parser, NULL, false, false);
26781   parser->in_transaction = old_in;
26782
26783   finish_transaction_stmt (stmt, NULL, this_in);
26784
26785   return stmt;
26786 }
26787
26788 /* Parse a __transaction_atomic or __transaction_relaxed expression.
26789
26790    transaction-expression:
26791      __transaction_atomic txn-exception-spec[opt] ( expression )
26792      __transaction_relaxed txn-exception-spec[opt] ( expression )
26793
26794    ??? The exception specification is not yet implemented.
26795 */
26796
26797 static tree
26798 cp_parser_transaction_expression (cp_parser *parser, enum rid keyword)
26799 {
26800   unsigned char old_in = parser->in_transaction;
26801   unsigned char this_in = 1;
26802   cp_token *token;
26803   tree ret;
26804
26805   gcc_assert (keyword == RID_TRANSACTION_ATOMIC
26806       || keyword == RID_TRANSACTION_RELAXED);
26807
26808   if (!flag_tm)
26809     error (keyword == RID_TRANSACTION_RELAXED
26810            ? G_("%<__transaction_relaxed%> without transactional memory "
26811                 "support enabled")
26812            : G_("%<__transaction_atomic%> without transactional memory "
26813                 "support enabled"));
26814
26815   token = cp_parser_require_keyword (parser, keyword,
26816       (keyword == RID_TRANSACTION_ATOMIC ? RT_TRANSACTION_ATOMIC
26817           : RT_TRANSACTION_RELAXED));
26818   gcc_assert (token != NULL);
26819
26820   if (keyword == RID_TRANSACTION_RELAXED)
26821     this_in |= TM_STMT_ATTR_RELAXED;
26822
26823   parser->in_transaction = this_in;
26824   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
26825     {
26826       tree expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
26827       ret = build_transaction_expr (token->location, expr, this_in);
26828     }
26829   else
26830     {
26831       cp_parser_error (parser, "expected %<(%>");
26832       ret = error_mark_node;
26833     }
26834   parser->in_transaction = old_in;
26835
26836   if (cp_parser_non_integral_constant_expression (parser, NIC_TRANSACTION))
26837     return error_mark_node;
26838
26839   return (flag_tm ? ret : error_mark_node);
26840 }
26841
26842 /* Parse a function-transaction-block.
26843
26844    function-transaction-block:
26845      __transaction_atomic txn-attribute[opt] ctor-initializer[opt]
26846          function-body
26847      __transaction_atomic txn-attribute[opt] function-try-block
26848      __transaction_relaxed ctor-initializer[opt] function-body
26849      __transaction_relaxed function-try-block
26850 */
26851
26852 static bool
26853 cp_parser_function_transaction (cp_parser *parser, enum rid keyword)
26854 {
26855   unsigned char old_in = parser->in_transaction;
26856   unsigned char new_in = 1;
26857   tree compound_stmt, stmt, attrs;
26858   bool ctor_initializer_p;
26859   cp_token *token;
26860
26861   gcc_assert (keyword == RID_TRANSACTION_ATOMIC
26862       || keyword == RID_TRANSACTION_RELAXED);
26863   token = cp_parser_require_keyword (parser, keyword,
26864       (keyword == RID_TRANSACTION_ATOMIC ? RT_TRANSACTION_ATOMIC
26865           : RT_TRANSACTION_RELAXED));
26866   gcc_assert (token != NULL);
26867
26868   if (keyword == RID_TRANSACTION_RELAXED)
26869     new_in |= TM_STMT_ATTR_RELAXED;
26870   else
26871     {
26872       attrs = cp_parser_txn_attribute_opt (parser);
26873       if (attrs)
26874         new_in |= parse_tm_stmt_attr (attrs, TM_STMT_ATTR_OUTER);
26875     }
26876
26877   stmt = begin_transaction_stmt (token->location, &compound_stmt, new_in);
26878
26879   parser->in_transaction = new_in;
26880
26881   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
26882     ctor_initializer_p = cp_parser_function_try_block (parser);
26883   else
26884     ctor_initializer_p
26885       = cp_parser_ctor_initializer_opt_and_function_body (parser);
26886
26887   parser->in_transaction = old_in;
26888
26889   finish_transaction_stmt (stmt, compound_stmt, new_in);
26890
26891   return ctor_initializer_p;
26892 }
26893
26894 /* Parse a __transaction_cancel statement.
26895
26896    cancel-statement:
26897      __transaction_cancel txn-attribute[opt] ;
26898      __transaction_cancel txn-attribute[opt] throw-expression ;
26899
26900    ??? Cancel and throw is not yet implemented.  */
26901
26902 static tree
26903 cp_parser_transaction_cancel (cp_parser *parser)
26904 {
26905   cp_token *token;
26906   bool is_outer = false;
26907   tree stmt, attrs;
26908
26909   token = cp_parser_require_keyword (parser, RID_TRANSACTION_CANCEL,
26910                                      RT_TRANSACTION_CANCEL);
26911   gcc_assert (token != NULL);
26912
26913   attrs = cp_parser_txn_attribute_opt (parser);
26914   if (attrs)
26915     is_outer = (parse_tm_stmt_attr (attrs, TM_STMT_ATTR_OUTER) != 0);
26916
26917   /* ??? Parse cancel-and-throw here.  */
26918
26919   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
26920
26921   if (!flag_tm)
26922     {
26923       error_at (token->location, "%<__transaction_cancel%> without "
26924                 "transactional memory support enabled");
26925       return error_mark_node;
26926     }
26927   else if (parser->in_transaction & TM_STMT_ATTR_RELAXED)
26928     {
26929       error_at (token->location, "%<__transaction_cancel%> within a "
26930                 "%<__transaction_relaxed%>");
26931       return error_mark_node;
26932     }
26933   else if (is_outer)
26934     {
26935       if ((parser->in_transaction & TM_STMT_ATTR_OUTER) == 0
26936           && !is_tm_may_cancel_outer (current_function_decl))
26937         {
26938           error_at (token->location, "outer %<__transaction_cancel%> not "
26939                     "within outer %<__transaction_atomic%>");
26940           error_at (token->location,
26941                     "  or a %<transaction_may_cancel_outer%> function");
26942           return error_mark_node;
26943         }
26944     }
26945   else if (parser->in_transaction == 0)
26946     {
26947       error_at (token->location, "%<__transaction_cancel%> not within "
26948                 "%<__transaction_atomic%>");
26949       return error_mark_node;
26950     }
26951
26952   stmt = build_tm_abort_call (token->location, is_outer);
26953   add_stmt (stmt);
26954   finish_stmt ();
26955
26956   return stmt;
26957 }
26958 \f
26959 /* The parser.  */
26960
26961 static GTY (()) cp_parser *the_parser;
26962
26963 \f
26964 /* Special handling for the first token or line in the file.  The first
26965    thing in the file might be #pragma GCC pch_preprocess, which loads a
26966    PCH file, which is a GC collection point.  So we need to handle this
26967    first pragma without benefit of an existing lexer structure.
26968
26969    Always returns one token to the caller in *FIRST_TOKEN.  This is
26970    either the true first token of the file, or the first token after
26971    the initial pragma.  */
26972
26973 static void
26974 cp_parser_initial_pragma (cp_token *first_token)
26975 {
26976   tree name = NULL;
26977
26978   cp_lexer_get_preprocessor_token (NULL, first_token);
26979   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
26980     return;
26981
26982   cp_lexer_get_preprocessor_token (NULL, first_token);
26983   if (first_token->type == CPP_STRING)
26984     {
26985       name = first_token->u.value;
26986
26987       cp_lexer_get_preprocessor_token (NULL, first_token);
26988       if (first_token->type != CPP_PRAGMA_EOL)
26989         error_at (first_token->location,
26990                   "junk at end of %<#pragma GCC pch_preprocess%>");
26991     }
26992   else
26993     error_at (first_token->location, "expected string literal");
26994
26995   /* Skip to the end of the pragma.  */
26996   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
26997     cp_lexer_get_preprocessor_token (NULL, first_token);
26998
26999   /* Now actually load the PCH file.  */
27000   if (name)
27001     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
27002
27003   /* Read one more token to return to our caller.  We have to do this
27004      after reading the PCH file in, since its pointers have to be
27005      live.  */
27006   cp_lexer_get_preprocessor_token (NULL, first_token);
27007 }
27008
27009 /* Normal parsing of a pragma token.  Here we can (and must) use the
27010    regular lexer.  */
27011
27012 static bool
27013 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
27014 {
27015   cp_token *pragma_tok;
27016   unsigned int id;
27017
27018   pragma_tok = cp_lexer_consume_token (parser->lexer);
27019   gcc_assert (pragma_tok->type == CPP_PRAGMA);
27020   parser->lexer->in_pragma = true;
27021
27022   id = pragma_tok->pragma_kind;
27023   switch (id)
27024     {
27025     case PRAGMA_GCC_PCH_PREPROCESS:
27026       error_at (pragma_tok->location,
27027                 "%<#pragma GCC pch_preprocess%> must be first");
27028       break;
27029
27030     case PRAGMA_OMP_BARRIER:
27031       switch (context)
27032         {
27033         case pragma_compound:
27034           cp_parser_omp_barrier (parser, pragma_tok);
27035           return false;
27036         case pragma_stmt:
27037           error_at (pragma_tok->location, "%<#pragma omp barrier%> may only be "
27038                     "used in compound statements");
27039           break;
27040         default:
27041           goto bad_stmt;
27042         }
27043       break;
27044
27045     case PRAGMA_OMP_FLUSH:
27046       switch (context)
27047         {
27048         case pragma_compound:
27049           cp_parser_omp_flush (parser, pragma_tok);
27050           return false;
27051         case pragma_stmt:
27052           error_at (pragma_tok->location, "%<#pragma omp flush%> may only be "
27053                     "used in compound statements");
27054           break;
27055         default:
27056           goto bad_stmt;
27057         }
27058       break;
27059
27060     case PRAGMA_OMP_TASKWAIT:
27061       switch (context)
27062         {
27063         case pragma_compound:
27064           cp_parser_omp_taskwait (parser, pragma_tok);
27065           return false;
27066         case pragma_stmt:
27067           error_at (pragma_tok->location,
27068                     "%<#pragma omp taskwait%> may only be "
27069                     "used in compound statements");
27070           break;
27071         default:
27072           goto bad_stmt;
27073         }
27074       break;
27075
27076     case PRAGMA_OMP_TASKYIELD:
27077       switch (context)
27078         {
27079         case pragma_compound:
27080           cp_parser_omp_taskyield (parser, pragma_tok);
27081           return false;
27082         case pragma_stmt:
27083           error_at (pragma_tok->location,
27084                     "%<#pragma omp taskyield%> may only be "
27085                     "used in compound statements");
27086           break;
27087         default:
27088           goto bad_stmt;
27089         }
27090       break;
27091
27092     case PRAGMA_OMP_THREADPRIVATE:
27093       cp_parser_omp_threadprivate (parser, pragma_tok);
27094       return false;
27095
27096     case PRAGMA_OMP_ATOMIC:
27097     case PRAGMA_OMP_CRITICAL:
27098     case PRAGMA_OMP_FOR:
27099     case PRAGMA_OMP_MASTER:
27100     case PRAGMA_OMP_ORDERED:
27101     case PRAGMA_OMP_PARALLEL:
27102     case PRAGMA_OMP_SECTIONS:
27103     case PRAGMA_OMP_SINGLE:
27104     case PRAGMA_OMP_TASK:
27105       if (context == pragma_external)
27106         goto bad_stmt;
27107       cp_parser_omp_construct (parser, pragma_tok);
27108       return true;
27109
27110     case PRAGMA_OMP_SECTION:
27111       error_at (pragma_tok->location, 
27112                 "%<#pragma omp section%> may only be used in "
27113                 "%<#pragma omp sections%> construct");
27114       break;
27115
27116     default:
27117       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
27118       c_invoke_pragma_handler (id);
27119       break;
27120
27121     bad_stmt:
27122       cp_parser_error (parser, "expected declaration specifiers");
27123       break;
27124     }
27125
27126   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
27127   return false;
27128 }
27129
27130 /* The interface the pragma parsers have to the lexer.  */
27131
27132 enum cpp_ttype
27133 pragma_lex (tree *value)
27134 {
27135   cp_token *tok;
27136   enum cpp_ttype ret;
27137
27138   tok = cp_lexer_peek_token (the_parser->lexer);
27139
27140   ret = tok->type;
27141   *value = tok->u.value;
27142
27143   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
27144     ret = CPP_EOF;
27145   else if (ret == CPP_STRING)
27146     *value = cp_parser_string_literal (the_parser, false, false);
27147   else
27148     {
27149       cp_lexer_consume_token (the_parser->lexer);
27150       if (ret == CPP_KEYWORD)
27151         ret = CPP_NAME;
27152     }
27153
27154   return ret;
27155 }
27156
27157 \f
27158 /* External interface.  */
27159
27160 /* Parse one entire translation unit.  */
27161
27162 void
27163 c_parse_file (void)
27164 {
27165   static bool already_called = false;
27166
27167   if (already_called)
27168     {
27169       sorry ("inter-module optimizations not implemented for C++");
27170       return;
27171     }
27172   already_called = true;
27173
27174   the_parser = cp_parser_new ();
27175   push_deferring_access_checks (flag_access_control
27176                                 ? dk_no_deferred : dk_no_check);
27177   cp_parser_translation_unit (the_parser);
27178   the_parser = NULL;
27179 }
27180
27181 #include "gt-cp-parser.h"