OSDN Git Service

PR c++/26660
[pf3gnuchains/gcc-fork.git] / gcc / cp / parser.c
1 /* C++ Parser.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004,
3    2005  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 2, 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 COPYING.  If not, write to the Free
20    Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
21    02110-1301, USA.  */
22
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "tm.h"
27 #include "dyn-string.h"
28 #include "varray.h"
29 #include "cpplib.h"
30 #include "tree.h"
31 #include "cp-tree.h"
32 #include "c-pragma.h"
33 #include "decl.h"
34 #include "flags.h"
35 #include "diagnostic.h"
36 #include "toplev.h"
37 #include "output.h"
38 #include "target.h"
39 #include "cgraph.h"
40 #include "c-common.h"
41
42 \f
43 /* The lexer.  */
44
45 /* The cp_lexer_* routines mediate between the lexer proper (in libcpp
46    and c-lex.c) and the C++ parser.  */
47
48 /* A C++ token.  */
49
50 typedef struct cp_token GTY (())
51 {
52   /* The kind of token.  */
53   ENUM_BITFIELD (cpp_ttype) type : 8;
54   /* If this token is a keyword, this value indicates which keyword.
55      Otherwise, this value is RID_MAX.  */
56   ENUM_BITFIELD (rid) keyword : 8;
57   /* Token flags.  */
58   unsigned char flags;
59   /* Identifier for the pragma.  */
60   ENUM_BITFIELD (pragma_kind) pragma_kind : 6;
61   /* True if this token is from a system header.  */
62   BOOL_BITFIELD in_system_header : 1;
63   /* True if this token is from a context where it is implicitly extern "C" */
64   BOOL_BITFIELD implicit_extern_c : 1;
65   /* True for a CPP_NAME token that is not a keyword (i.e., for which
66      KEYWORD is RID_MAX) iff this name was looked up and found to be
67      ambiguous.  An error has already been reported.  */
68   BOOL_BITFIELD ambiguous_p : 1;
69   /* The value associated with this token, if any.  */
70   tree value;
71   /* The location at which this token was found.  */
72   location_t location;
73 } cp_token;
74
75 /* We use a stack of token pointer for saving token sets.  */
76 typedef struct cp_token *cp_token_position;
77 DEF_VEC_P (cp_token_position);
78 DEF_VEC_ALLOC_P (cp_token_position,heap);
79
80 static const cp_token eof_token =
81 {
82   CPP_EOF, RID_MAX, 0, PRAGMA_NONE, 0, 0, false, NULL_TREE,
83 #if USE_MAPPED_LOCATION
84   0
85 #else
86   {0, 0}
87 #endif
88 };
89
90 /* The cp_lexer structure represents the C++ lexer.  It is responsible
91    for managing the token stream from the preprocessor and supplying
92    it to the parser.  Tokens are never added to the cp_lexer after
93    it is created.  */
94
95 typedef struct cp_lexer GTY (())
96 {
97   /* The memory allocated for the buffer.  NULL if this lexer does not
98      own the token buffer.  */
99   cp_token * GTY ((length ("%h.buffer_length"))) buffer;
100   /* If the lexer owns the buffer, this is the number of tokens in the
101      buffer.  */
102   size_t buffer_length;
103
104   /* A pointer just past the last available token.  The tokens
105      in this lexer are [buffer, last_token).  */
106   cp_token_position GTY ((skip)) last_token;
107
108   /* The next available token.  If NEXT_TOKEN is &eof_token, then there are
109      no more available tokens.  */
110   cp_token_position GTY ((skip)) next_token;
111
112   /* A stack indicating positions at which cp_lexer_save_tokens was
113      called.  The top entry is the most recent position at which we
114      began saving tokens.  If the stack is non-empty, we are saving
115      tokens.  */
116   VEC(cp_token_position,heap) *GTY ((skip)) saved_tokens;
117
118   /* The next lexer in a linked list of lexers.  */
119   struct cp_lexer *next;
120
121   /* True if we should output debugging information.  */
122   bool debugging_p;
123
124   /* True if we're in the context of parsing a pragma, and should not
125      increment past the end-of-line marker.  */
126   bool in_pragma;
127 } cp_lexer;
128
129 /* cp_token_cache is a range of tokens.  There is no need to represent
130    allocate heap memory for it, since tokens are never removed from the
131    lexer's array.  There is also no need for the GC to walk through
132    a cp_token_cache, since everything in here is referenced through
133    a lexer.  */
134
135 typedef struct cp_token_cache GTY(())
136 {
137   /* The beginning of the token range.  */
138   cp_token * GTY((skip)) first;
139
140   /* Points immediately after the last token in the range.  */
141   cp_token * GTY ((skip)) last;
142 } cp_token_cache;
143
144 /* Prototypes.  */
145
146 static cp_lexer *cp_lexer_new_main
147   (void);
148 static cp_lexer *cp_lexer_new_from_tokens
149   (cp_token_cache *tokens);
150 static void cp_lexer_destroy
151   (cp_lexer *);
152 static int cp_lexer_saving_tokens
153   (const cp_lexer *);
154 static cp_token_position cp_lexer_token_position
155   (cp_lexer *, bool);
156 static cp_token *cp_lexer_token_at
157   (cp_lexer *, cp_token_position);
158 static void cp_lexer_get_preprocessor_token
159   (cp_lexer *, cp_token *);
160 static inline cp_token *cp_lexer_peek_token
161   (cp_lexer *);
162 static cp_token *cp_lexer_peek_nth_token
163   (cp_lexer *, size_t);
164 static inline bool cp_lexer_next_token_is
165   (cp_lexer *, enum cpp_ttype);
166 static bool cp_lexer_next_token_is_not
167   (cp_lexer *, enum cpp_ttype);
168 static bool cp_lexer_next_token_is_keyword
169   (cp_lexer *, enum rid);
170 static cp_token *cp_lexer_consume_token
171   (cp_lexer *);
172 static void cp_lexer_purge_token
173   (cp_lexer *);
174 static void cp_lexer_purge_tokens_after
175   (cp_lexer *, cp_token_position);
176 static void cp_lexer_save_tokens
177   (cp_lexer *);
178 static void cp_lexer_commit_tokens
179   (cp_lexer *);
180 static void cp_lexer_rollback_tokens
181   (cp_lexer *);
182 #ifdef ENABLE_CHECKING
183 static void cp_lexer_print_token
184   (FILE *, cp_token *);
185 static inline bool cp_lexer_debugging_p
186   (cp_lexer *);
187 static void cp_lexer_start_debugging
188   (cp_lexer *) ATTRIBUTE_UNUSED;
189 static void cp_lexer_stop_debugging
190   (cp_lexer *) ATTRIBUTE_UNUSED;
191 #else
192 /* If we define cp_lexer_debug_stream to NULL it will provoke warnings
193    about passing NULL to functions that require non-NULL arguments
194    (fputs, fprintf).  It will never be used, so all we need is a value
195    of the right type that's guaranteed not to be NULL.  */
196 #define cp_lexer_debug_stream stdout
197 #define cp_lexer_print_token(str, tok) (void) 0
198 #define cp_lexer_debugging_p(lexer) 0
199 #endif /* ENABLE_CHECKING */
200
201 static cp_token_cache *cp_token_cache_new
202   (cp_token *, cp_token *);
203
204 static void cp_parser_initial_pragma
205   (cp_token *);
206
207 /* Manifest constants.  */
208 #define CP_LEXER_BUFFER_SIZE 10000
209 #define CP_SAVED_TOKEN_STACK 5
210
211 /* A token type for keywords, as opposed to ordinary identifiers.  */
212 #define CPP_KEYWORD ((enum cpp_ttype) (N_TTYPES + 1))
213
214 /* A token type for template-ids.  If a template-id is processed while
215    parsing tentatively, it is replaced with a CPP_TEMPLATE_ID token;
216    the value of the CPP_TEMPLATE_ID is whatever was returned by
217    cp_parser_template_id.  */
218 #define CPP_TEMPLATE_ID ((enum cpp_ttype) (CPP_KEYWORD + 1))
219
220 /* A token type for nested-name-specifiers.  If a
221    nested-name-specifier is processed while parsing tentatively, it is
222    replaced with a CPP_NESTED_NAME_SPECIFIER token; the value of the
223    CPP_NESTED_NAME_SPECIFIER is whatever was returned by
224    cp_parser_nested_name_specifier_opt.  */
225 #define CPP_NESTED_NAME_SPECIFIER ((enum cpp_ttype) (CPP_TEMPLATE_ID + 1))
226
227 /* A token type for tokens that are not tokens at all; these are used
228    to represent slots in the array where there used to be a token
229    that has now been deleted.  */
230 #define CPP_PURGED ((enum cpp_ttype) (CPP_NESTED_NAME_SPECIFIER + 1))
231
232 /* The number of token types, including C++-specific ones.  */
233 #define N_CP_TTYPES ((int) (CPP_PURGED + 1))
234
235 /* Variables.  */
236
237 #ifdef ENABLE_CHECKING
238 /* The stream to which debugging output should be written.  */
239 static FILE *cp_lexer_debug_stream;
240 #endif /* ENABLE_CHECKING */
241
242 /* Create a new main C++ lexer, the lexer that gets tokens from the
243    preprocessor.  */
244
245 static cp_lexer *
246 cp_lexer_new_main (void)
247 {
248   cp_token first_token;
249   cp_lexer *lexer;
250   cp_token *pos;
251   size_t alloc;
252   size_t space;
253   cp_token *buffer;
254
255   /* It's possible that parsing the first pragma will load a PCH file,
256      which is a GC collection point.  So we have to do that before
257      allocating any memory.  */
258   cp_parser_initial_pragma (&first_token);
259
260   /* Tell c_lex_with_flags not to merge string constants.  */
261   c_lex_return_raw_strings = true;
262
263   c_common_no_more_pch ();
264
265   /* Allocate the memory.  */
266   lexer = GGC_CNEW (cp_lexer);
267
268 #ifdef ENABLE_CHECKING
269   /* Initially we are not debugging.  */
270   lexer->debugging_p = false;
271 #endif /* ENABLE_CHECKING */
272   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
273                                    CP_SAVED_TOKEN_STACK);
274
275   /* Create the buffer.  */
276   alloc = CP_LEXER_BUFFER_SIZE;
277   buffer = GGC_NEWVEC (cp_token, alloc);
278
279   /* Put the first token in the buffer.  */
280   space = alloc;
281   pos = buffer;
282   *pos = first_token;
283
284   /* Get the remaining tokens from the preprocessor.  */
285   while (pos->type != CPP_EOF)
286     {
287       pos++;
288       if (!--space)
289         {
290           space = alloc;
291           alloc *= 2;
292           buffer = GGC_RESIZEVEC (cp_token, buffer, alloc);
293           pos = buffer + space;
294         }
295       cp_lexer_get_preprocessor_token (lexer, pos);
296     }
297   lexer->buffer = buffer;
298   lexer->buffer_length = alloc - space;
299   lexer->last_token = pos;
300   lexer->next_token = lexer->buffer_length ? buffer : (cp_token *)&eof_token;
301
302   /* Subsequent preprocessor diagnostics should use compiler
303      diagnostic functions to get the compiler source location.  */
304   cpp_get_options (parse_in)->client_diagnostic = true;
305   cpp_get_callbacks (parse_in)->error = cp_cpp_error;
306
307   gcc_assert (lexer->next_token->type != CPP_PURGED);
308   return lexer;
309 }
310
311 /* Create a new lexer whose token stream is primed with the tokens in
312    CACHE.  When these tokens are exhausted, no new tokens will be read.  */
313
314 static cp_lexer *
315 cp_lexer_new_from_tokens (cp_token_cache *cache)
316 {
317   cp_token *first = cache->first;
318   cp_token *last = cache->last;
319   cp_lexer *lexer = GGC_CNEW (cp_lexer);
320
321   /* We do not own the buffer.  */
322   lexer->buffer = NULL;
323   lexer->buffer_length = 0;
324   lexer->next_token = first == last ? (cp_token *)&eof_token : first;
325   lexer->last_token = last;
326
327   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
328                                    CP_SAVED_TOKEN_STACK);
329
330 #ifdef ENABLE_CHECKING
331   /* Initially we are not debugging.  */
332   lexer->debugging_p = false;
333 #endif
334
335   gcc_assert (lexer->next_token->type != CPP_PURGED);
336   return lexer;
337 }
338
339 /* Frees all resources associated with LEXER.  */
340
341 static void
342 cp_lexer_destroy (cp_lexer *lexer)
343 {
344   if (lexer->buffer)
345     ggc_free (lexer->buffer);
346   VEC_free (cp_token_position, heap, lexer->saved_tokens);
347   ggc_free (lexer);
348 }
349
350 /* Returns nonzero if debugging information should be output.  */
351
352 #ifdef ENABLE_CHECKING
353
354 static inline bool
355 cp_lexer_debugging_p (cp_lexer *lexer)
356 {
357   return lexer->debugging_p;
358 }
359
360 #endif /* ENABLE_CHECKING */
361
362 static inline cp_token_position
363 cp_lexer_token_position (cp_lexer *lexer, bool previous_p)
364 {
365   gcc_assert (!previous_p || lexer->next_token != &eof_token);
366
367   return lexer->next_token - previous_p;
368 }
369
370 static inline cp_token *
371 cp_lexer_token_at (cp_lexer *lexer ATTRIBUTE_UNUSED, cp_token_position pos)
372 {
373   return pos;
374 }
375
376 /* nonzero if we are presently saving tokens.  */
377
378 static inline int
379 cp_lexer_saving_tokens (const cp_lexer* lexer)
380 {
381   return VEC_length (cp_token_position, lexer->saved_tokens) != 0;
382 }
383
384 /* Store the next token from the preprocessor in *TOKEN.  Return true
385    if we reach EOF.  */
386
387 static void
388 cp_lexer_get_preprocessor_token (cp_lexer *lexer ATTRIBUTE_UNUSED ,
389                                  cp_token *token)
390 {
391   static int is_extern_c = 0;
392
393    /* Get a new token from the preprocessor.  */
394   token->type
395     = c_lex_with_flags (&token->value, &token->location, &token->flags);
396   token->keyword = RID_MAX;
397   token->pragma_kind = PRAGMA_NONE;
398   token->in_system_header = in_system_header;
399
400   /* On some systems, some header files are surrounded by an
401      implicit extern "C" block.  Set a flag in the token if it
402      comes from such a header.  */
403   is_extern_c += pending_lang_change;
404   pending_lang_change = 0;
405   token->implicit_extern_c = is_extern_c > 0;
406
407   /* Check to see if this token is a keyword.  */
408   if (token->type == CPP_NAME)
409     {
410       if (C_IS_RESERVED_WORD (token->value))
411         {
412           /* Mark this token as a keyword.  */
413           token->type = CPP_KEYWORD;
414           /* Record which keyword.  */
415           token->keyword = C_RID_CODE (token->value);
416           /* Update the value.  Some keywords are mapped to particular
417              entities, rather than simply having the value of the
418              corresponding IDENTIFIER_NODE.  For example, `__const' is
419              mapped to `const'.  */
420           token->value = ridpointers[token->keyword];
421         }
422       else
423         {
424           token->ambiguous_p = false;
425           token->keyword = RID_MAX;
426         }
427     }
428   /* Handle Objective-C++ keywords.  */
429   else if (token->type == CPP_AT_NAME)
430     {
431       token->type = CPP_KEYWORD;
432       switch (C_RID_CODE (token->value))
433         {
434         /* Map 'class' to '@class', 'private' to '@private', etc.  */
435         case RID_CLASS: token->keyword = RID_AT_CLASS; break;
436         case RID_PRIVATE: token->keyword = RID_AT_PRIVATE; break;
437         case RID_PROTECTED: token->keyword = RID_AT_PROTECTED; break;
438         case RID_PUBLIC: token->keyword = RID_AT_PUBLIC; break;
439         case RID_THROW: token->keyword = RID_AT_THROW; break;
440         case RID_TRY: token->keyword = RID_AT_TRY; break;
441         case RID_CATCH: token->keyword = RID_AT_CATCH; break;
442         default: token->keyword = C_RID_CODE (token->value);
443         }
444     }
445   else if (token->type == CPP_PRAGMA)
446     {
447       /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST.  */
448       token->pragma_kind = TREE_INT_CST_LOW (token->value);
449       token->value = NULL;
450     }
451 }
452
453 /* Update the globals input_location and in_system_header from TOKEN.  */
454 static inline void
455 cp_lexer_set_source_position_from_token (cp_token *token)
456 {
457   if (token->type != CPP_EOF)
458     {
459       input_location = token->location;
460       in_system_header = token->in_system_header;
461     }
462 }
463
464 /* Return a pointer to the next token in the token stream, but do not
465    consume it.  */
466
467 static inline cp_token *
468 cp_lexer_peek_token (cp_lexer *lexer)
469 {
470   if (cp_lexer_debugging_p (lexer))
471     {
472       fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
473       cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
474       putc ('\n', cp_lexer_debug_stream);
475     }
476   return lexer->next_token;
477 }
478
479 /* Return true if the next token has the indicated TYPE.  */
480
481 static inline bool
482 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
483 {
484   return cp_lexer_peek_token (lexer)->type == type;
485 }
486
487 /* Return true if the next token does not have the indicated TYPE.  */
488
489 static inline bool
490 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
491 {
492   return !cp_lexer_next_token_is (lexer, type);
493 }
494
495 /* Return true if the next token is the indicated KEYWORD.  */
496
497 static inline bool
498 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
499 {
500   return cp_lexer_peek_token (lexer)->keyword == keyword;
501 }
502
503 /* Return a pointer to the Nth token in the token stream.  If N is 1,
504    then this is precisely equivalent to cp_lexer_peek_token (except
505    that it is not inline).  One would like to disallow that case, but
506    there is one case (cp_parser_nth_token_starts_template_id) where
507    the caller passes a variable for N and it might be 1.  */
508
509 static cp_token *
510 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
511 {
512   cp_token *token;
513
514   /* N is 1-based, not zero-based.  */
515   gcc_assert (n > 0);
516   
517   if (cp_lexer_debugging_p (lexer))
518     fprintf (cp_lexer_debug_stream,
519              "cp_lexer: peeking ahead %ld at token: ", (long)n);
520
521   --n;
522   token = lexer->next_token;
523   gcc_assert (!n || token != &eof_token);
524   while (n != 0)
525     {
526       ++token;
527       if (token == lexer->last_token)
528         {
529           token = (cp_token *)&eof_token;
530           break;
531         }
532
533       if (token->type != CPP_PURGED)
534         --n;
535     }
536
537   if (cp_lexer_debugging_p (lexer))
538     {
539       cp_lexer_print_token (cp_lexer_debug_stream, token);
540       putc ('\n', cp_lexer_debug_stream);
541     }
542
543   return token;
544 }
545
546 /* Return the next token, and advance the lexer's next_token pointer
547    to point to the next non-purged token.  */
548
549 static cp_token *
550 cp_lexer_consume_token (cp_lexer* lexer)
551 {
552   cp_token *token = lexer->next_token;
553
554   gcc_assert (token != &eof_token);
555   gcc_assert (!lexer->in_pragma || token->type != CPP_PRAGMA_EOL);
556
557   do
558     {
559       lexer->next_token++;
560       if (lexer->next_token == lexer->last_token)
561         {
562           lexer->next_token = (cp_token *)&eof_token;
563           break;
564         }
565
566     }
567   while (lexer->next_token->type == CPP_PURGED);
568
569   cp_lexer_set_source_position_from_token (token);
570
571   /* Provide debugging output.  */
572   if (cp_lexer_debugging_p (lexer))
573     {
574       fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
575       cp_lexer_print_token (cp_lexer_debug_stream, token);
576       putc ('\n', cp_lexer_debug_stream);
577     }
578
579   return token;
580 }
581
582 /* Permanently remove the next token from the token stream, and
583    advance the next_token pointer to refer to the next non-purged
584    token.  */
585
586 static void
587 cp_lexer_purge_token (cp_lexer *lexer)
588 {
589   cp_token *tok = lexer->next_token;
590
591   gcc_assert (tok != &eof_token);
592   tok->type = CPP_PURGED;
593   tok->location = UNKNOWN_LOCATION;
594   tok->value = NULL_TREE;
595   tok->keyword = RID_MAX;
596
597   do
598     {
599       tok++;
600       if (tok == lexer->last_token)
601         {
602           tok = (cp_token *)&eof_token;
603           break;
604         }
605     }
606   while (tok->type == CPP_PURGED);
607   lexer->next_token = tok;
608 }
609
610 /* Permanently remove all tokens after TOK, up to, but not
611    including, the token that will be returned next by
612    cp_lexer_peek_token.  */
613
614 static void
615 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
616 {
617   cp_token *peek = lexer->next_token;
618
619   if (peek == &eof_token)
620     peek = lexer->last_token;
621
622   gcc_assert (tok < peek);
623
624   for ( tok += 1; tok != peek; tok += 1)
625     {
626       tok->type = CPP_PURGED;
627       tok->location = UNKNOWN_LOCATION;
628       tok->value = NULL_TREE;
629       tok->keyword = RID_MAX;
630     }
631 }
632
633 /* Begin saving tokens.  All tokens consumed after this point will be
634    preserved.  */
635
636 static void
637 cp_lexer_save_tokens (cp_lexer* lexer)
638 {
639   /* Provide debugging output.  */
640   if (cp_lexer_debugging_p (lexer))
641     fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
642
643   VEC_safe_push (cp_token_position, heap,
644                  lexer->saved_tokens, lexer->next_token);
645 }
646
647 /* Commit to the portion of the token stream most recently saved.  */
648
649 static void
650 cp_lexer_commit_tokens (cp_lexer* lexer)
651 {
652   /* Provide debugging output.  */
653   if (cp_lexer_debugging_p (lexer))
654     fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
655
656   VEC_pop (cp_token_position, lexer->saved_tokens);
657 }
658
659 /* Return all tokens saved since the last call to cp_lexer_save_tokens
660    to the token stream.  Stop saving tokens.  */
661
662 static void
663 cp_lexer_rollback_tokens (cp_lexer* lexer)
664 {
665   /* Provide debugging output.  */
666   if (cp_lexer_debugging_p (lexer))
667     fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
668
669   lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
670 }
671
672 /* Print a representation of the TOKEN on the STREAM.  */
673
674 #ifdef ENABLE_CHECKING
675
676 static void
677 cp_lexer_print_token (FILE * stream, cp_token *token)
678 {
679   /* We don't use cpp_type2name here because the parser defines
680      a few tokens of its own.  */
681   static const char *const token_names[] = {
682     /* cpplib-defined token types */
683 #define OP(e, s) #e,
684 #define TK(e, s) #e,
685     TTYPE_TABLE
686 #undef OP
687 #undef TK
688     /* C++ parser token types - see "Manifest constants", above.  */
689     "KEYWORD",
690     "TEMPLATE_ID",
691     "NESTED_NAME_SPECIFIER",
692     "PURGED"
693   };
694
695   /* If we have a name for the token, print it out.  Otherwise, we
696      simply give the numeric code.  */
697   gcc_assert (token->type < ARRAY_SIZE(token_names));
698   fputs (token_names[token->type], stream);
699
700   /* For some tokens, print the associated data.  */
701   switch (token->type)
702     {
703     case CPP_KEYWORD:
704       /* Some keywords have a value that is not an IDENTIFIER_NODE.
705          For example, `struct' is mapped to an INTEGER_CST.  */
706       if (TREE_CODE (token->value) != IDENTIFIER_NODE)
707         break;
708       /* else fall through */
709     case CPP_NAME:
710       fputs (IDENTIFIER_POINTER (token->value), stream);
711       break;
712
713     case CPP_STRING:
714     case CPP_WSTRING:
715       fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->value));
716       break;
717
718     default:
719       break;
720     }
721 }
722
723 /* Start emitting debugging information.  */
724
725 static void
726 cp_lexer_start_debugging (cp_lexer* lexer)
727 {
728   lexer->debugging_p = true;
729 }
730
731 /* Stop emitting debugging information.  */
732
733 static void
734 cp_lexer_stop_debugging (cp_lexer* lexer)
735 {
736   lexer->debugging_p = false;
737 }
738
739 #endif /* ENABLE_CHECKING */
740
741 /* Create a new cp_token_cache, representing a range of tokens.  */
742
743 static cp_token_cache *
744 cp_token_cache_new (cp_token *first, cp_token *last)
745 {
746   cp_token_cache *cache = GGC_NEW (cp_token_cache);
747   cache->first = first;
748   cache->last = last;
749   return cache;
750 }
751
752 \f
753 /* Decl-specifiers.  */
754
755 /* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
756
757 static void
758 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
759 {
760   memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
761 }
762
763 /* Declarators.  */
764
765 /* Nothing other than the parser should be creating declarators;
766    declarators are a semi-syntactic representation of C++ entities.
767    Other parts of the front end that need to create entities (like
768    VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
769
770 static cp_declarator *make_call_declarator
771   (cp_declarator *, cp_parameter_declarator *, cp_cv_quals, tree);
772 static cp_declarator *make_array_declarator
773   (cp_declarator *, tree);
774 static cp_declarator *make_pointer_declarator
775   (cp_cv_quals, cp_declarator *);
776 static cp_declarator *make_reference_declarator
777   (cp_cv_quals, cp_declarator *);
778 static cp_parameter_declarator *make_parameter_declarator
779   (cp_decl_specifier_seq *, cp_declarator *, tree);
780 static cp_declarator *make_ptrmem_declarator
781   (cp_cv_quals, tree, cp_declarator *);
782
783 /* An erroneous declarator.  */
784 static cp_declarator *cp_error_declarator;
785
786 /* The obstack on which declarators and related data structures are
787    allocated.  */
788 static struct obstack declarator_obstack;
789
790 /* Alloc BYTES from the declarator memory pool.  */
791
792 static inline void *
793 alloc_declarator (size_t bytes)
794 {
795   return obstack_alloc (&declarator_obstack, bytes);
796 }
797
798 /* Allocate a declarator of the indicated KIND.  Clear fields that are
799    common to all declarators.  */
800
801 static cp_declarator *
802 make_declarator (cp_declarator_kind kind)
803 {
804   cp_declarator *declarator;
805
806   declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
807   declarator->kind = kind;
808   declarator->attributes = NULL_TREE;
809   declarator->declarator = NULL;
810
811   return declarator;
812 }
813
814 /* Make a declarator for a generalized identifier.  If
815    QUALIFYING_SCOPE is non-NULL, the identifier is
816    QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
817    UNQUALIFIED_NAME.  SFK indicates the kind of special function this
818    is, if any.   */
819
820 static cp_declarator *
821 make_id_declarator (tree qualifying_scope, tree unqualified_name,
822                     special_function_kind sfk)
823 {
824   cp_declarator *declarator;
825
826   /* It is valid to write:
827
828        class C { void f(); };
829        typedef C D;
830        void D::f();
831
832      The standard is not clear about whether `typedef const C D' is
833      legal; as of 2002-09-15 the committee is considering that
834      question.  EDG 3.0 allows that syntax.  Therefore, we do as
835      well.  */
836   if (qualifying_scope && TYPE_P (qualifying_scope))
837     qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
838
839   gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
840               || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
841               || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
842
843   declarator = make_declarator (cdk_id);
844   declarator->u.id.qualifying_scope = qualifying_scope;
845   declarator->u.id.unqualified_name = unqualified_name;
846   declarator->u.id.sfk = sfk;
847
848   return declarator;
849 }
850
851 /* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
852    of modifiers such as const or volatile to apply to the pointer
853    type, represented as identifiers.  */
854
855 cp_declarator *
856 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
857 {
858   cp_declarator *declarator;
859
860   declarator = make_declarator (cdk_pointer);
861   declarator->declarator = target;
862   declarator->u.pointer.qualifiers = cv_qualifiers;
863   declarator->u.pointer.class_type = NULL_TREE;
864
865   return declarator;
866 }
867
868 /* Like make_pointer_declarator -- but for references.  */
869
870 cp_declarator *
871 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
872 {
873   cp_declarator *declarator;
874
875   declarator = make_declarator (cdk_reference);
876   declarator->declarator = target;
877   declarator->u.pointer.qualifiers = cv_qualifiers;
878   declarator->u.pointer.class_type = NULL_TREE;
879
880   return declarator;
881 }
882
883 /* Like make_pointer_declarator -- but for a pointer to a non-static
884    member of CLASS_TYPE.  */
885
886 cp_declarator *
887 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
888                         cp_declarator *pointee)
889 {
890   cp_declarator *declarator;
891
892   declarator = make_declarator (cdk_ptrmem);
893   declarator->declarator = pointee;
894   declarator->u.pointer.qualifiers = cv_qualifiers;
895   declarator->u.pointer.class_type = class_type;
896
897   return declarator;
898 }
899
900 /* Make a declarator for the function given by TARGET, with the
901    indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
902    "const"-qualified member function.  The EXCEPTION_SPECIFICATION
903    indicates what exceptions can be thrown.  */
904
905 cp_declarator *
906 make_call_declarator (cp_declarator *target,
907                       cp_parameter_declarator *parms,
908                       cp_cv_quals cv_qualifiers,
909                       tree exception_specification)
910 {
911   cp_declarator *declarator;
912
913   declarator = make_declarator (cdk_function);
914   declarator->declarator = target;
915   declarator->u.function.parameters = parms;
916   declarator->u.function.qualifiers = cv_qualifiers;
917   declarator->u.function.exception_specification = exception_specification;
918
919   return declarator;
920 }
921
922 /* Make a declarator for an array of BOUNDS elements, each of which is
923    defined by ELEMENT.  */
924
925 cp_declarator *
926 make_array_declarator (cp_declarator *element, tree bounds)
927 {
928   cp_declarator *declarator;
929
930   declarator = make_declarator (cdk_array);
931   declarator->declarator = element;
932   declarator->u.array.bounds = bounds;
933
934   return declarator;
935 }
936
937 cp_parameter_declarator *no_parameters;
938
939 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
940    DECLARATOR and DEFAULT_ARGUMENT.  */
941
942 cp_parameter_declarator *
943 make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
944                            cp_declarator *declarator,
945                            tree default_argument)
946 {
947   cp_parameter_declarator *parameter;
948
949   parameter = ((cp_parameter_declarator *)
950                alloc_declarator (sizeof (cp_parameter_declarator)));
951   parameter->next = NULL;
952   if (decl_specifiers)
953     parameter->decl_specifiers = *decl_specifiers;
954   else
955     clear_decl_specs (&parameter->decl_specifiers);
956   parameter->declarator = declarator;
957   parameter->default_argument = default_argument;
958   parameter->ellipsis_p = false;
959
960   return parameter;
961 }
962
963 /* The parser.  */
964
965 /* Overview
966    --------
967
968    A cp_parser parses the token stream as specified by the C++
969    grammar.  Its job is purely parsing, not semantic analysis.  For
970    example, the parser breaks the token stream into declarators,
971    expressions, statements, and other similar syntactic constructs.
972    It does not check that the types of the expressions on either side
973    of an assignment-statement are compatible, or that a function is
974    not declared with a parameter of type `void'.
975
976    The parser invokes routines elsewhere in the compiler to perform
977    semantic analysis and to build up the abstract syntax tree for the
978    code processed.
979
980    The parser (and the template instantiation code, which is, in a
981    way, a close relative of parsing) are the only parts of the
982    compiler that should be calling push_scope and pop_scope, or
983    related functions.  The parser (and template instantiation code)
984    keeps track of what scope is presently active; everything else
985    should simply honor that.  (The code that generates static
986    initializers may also need to set the scope, in order to check
987    access control correctly when emitting the initializers.)
988
989    Methodology
990    -----------
991
992    The parser is of the standard recursive-descent variety.  Upcoming
993    tokens in the token stream are examined in order to determine which
994    production to use when parsing a non-terminal.  Some C++ constructs
995    require arbitrary look ahead to disambiguate.  For example, it is
996    impossible, in the general case, to tell whether a statement is an
997    expression or declaration without scanning the entire statement.
998    Therefore, the parser is capable of "parsing tentatively."  When the
999    parser is not sure what construct comes next, it enters this mode.
1000    Then, while we attempt to parse the construct, the parser queues up
1001    error messages, rather than issuing them immediately, and saves the
1002    tokens it consumes.  If the construct is parsed successfully, the
1003    parser "commits", i.e., it issues any queued error messages and
1004    the tokens that were being preserved are permanently discarded.
1005    If, however, the construct is not parsed successfully, the parser
1006    rolls back its state completely so that it can resume parsing using
1007    a different alternative.
1008
1009    Future Improvements
1010    -------------------
1011
1012    The performance of the parser could probably be improved substantially.
1013    We could often eliminate the need to parse tentatively by looking ahead
1014    a little bit.  In some places, this approach might not entirely eliminate
1015    the need to parse tentatively, but it might still speed up the average
1016    case.  */
1017
1018 /* Flags that are passed to some parsing functions.  These values can
1019    be bitwise-ored together.  */
1020
1021 typedef enum cp_parser_flags
1022 {
1023   /* No flags.  */
1024   CP_PARSER_FLAGS_NONE = 0x0,
1025   /* The construct is optional.  If it is not present, then no error
1026      should be issued.  */
1027   CP_PARSER_FLAGS_OPTIONAL = 0x1,
1028   /* When parsing a type-specifier, do not allow user-defined types.  */
1029   CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2
1030 } cp_parser_flags;
1031
1032 /* The different kinds of declarators we want to parse.  */
1033
1034 typedef enum cp_parser_declarator_kind
1035 {
1036   /* We want an abstract declarator.  */
1037   CP_PARSER_DECLARATOR_ABSTRACT,
1038   /* We want a named declarator.  */
1039   CP_PARSER_DECLARATOR_NAMED,
1040   /* We don't mind, but the name must be an unqualified-id.  */
1041   CP_PARSER_DECLARATOR_EITHER
1042 } cp_parser_declarator_kind;
1043
1044 /* The precedence values used to parse binary expressions.  The minimum value
1045    of PREC must be 1, because zero is reserved to quickly discriminate
1046    binary operators from other tokens.  */
1047
1048 enum cp_parser_prec
1049 {
1050   PREC_NOT_OPERATOR,
1051   PREC_LOGICAL_OR_EXPRESSION,
1052   PREC_LOGICAL_AND_EXPRESSION,
1053   PREC_INCLUSIVE_OR_EXPRESSION,
1054   PREC_EXCLUSIVE_OR_EXPRESSION,
1055   PREC_AND_EXPRESSION,
1056   PREC_EQUALITY_EXPRESSION,
1057   PREC_RELATIONAL_EXPRESSION,
1058   PREC_SHIFT_EXPRESSION,
1059   PREC_ADDITIVE_EXPRESSION,
1060   PREC_MULTIPLICATIVE_EXPRESSION,
1061   PREC_PM_EXPRESSION,
1062   NUM_PREC_VALUES = PREC_PM_EXPRESSION
1063 };
1064
1065 /* A mapping from a token type to a corresponding tree node type, with a
1066    precedence value.  */
1067
1068 typedef struct cp_parser_binary_operations_map_node
1069 {
1070   /* The token type.  */
1071   enum cpp_ttype token_type;
1072   /* The corresponding tree code.  */
1073   enum tree_code tree_type;
1074   /* The precedence of this operator.  */
1075   enum cp_parser_prec prec;
1076 } cp_parser_binary_operations_map_node;
1077
1078 /* The status of a tentative parse.  */
1079
1080 typedef enum cp_parser_status_kind
1081 {
1082   /* No errors have occurred.  */
1083   CP_PARSER_STATUS_KIND_NO_ERROR,
1084   /* An error has occurred.  */
1085   CP_PARSER_STATUS_KIND_ERROR,
1086   /* We are committed to this tentative parse, whether or not an error
1087      has occurred.  */
1088   CP_PARSER_STATUS_KIND_COMMITTED
1089 } cp_parser_status_kind;
1090
1091 typedef struct cp_parser_expression_stack_entry
1092 {
1093   tree lhs;
1094   enum tree_code tree_type;
1095   int prec;
1096 } cp_parser_expression_stack_entry;
1097
1098 /* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1099    entries because precedence levels on the stack are monotonically
1100    increasing.  */
1101 typedef struct cp_parser_expression_stack_entry
1102   cp_parser_expression_stack[NUM_PREC_VALUES];
1103
1104 /* Context that is saved and restored when parsing tentatively.  */
1105 typedef struct cp_parser_context GTY (())
1106 {
1107   /* If this is a tentative parsing context, the status of the
1108      tentative parse.  */
1109   enum cp_parser_status_kind status;
1110   /* If non-NULL, we have just seen a `x->' or `x.' expression.  Names
1111      that are looked up in this context must be looked up both in the
1112      scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1113      the context of the containing expression.  */
1114   tree object_type;
1115
1116   /* The next parsing context in the stack.  */
1117   struct cp_parser_context *next;
1118 } cp_parser_context;
1119
1120 /* Prototypes.  */
1121
1122 /* Constructors and destructors.  */
1123
1124 static cp_parser_context *cp_parser_context_new
1125   (cp_parser_context *);
1126
1127 /* Class variables.  */
1128
1129 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1130
1131 /* The operator-precedence table used by cp_parser_binary_expression.
1132    Transformed into an associative array (binops_by_token) by
1133    cp_parser_new.  */
1134
1135 static const cp_parser_binary_operations_map_node binops[] = {
1136   { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1137   { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1138
1139   { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1140   { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1141   { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1142
1143   { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1144   { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1145
1146   { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1147   { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1148
1149   { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1150   { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1151   { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1152   { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1153   { CPP_MIN, MIN_EXPR, PREC_RELATIONAL_EXPRESSION },
1154   { CPP_MAX, MAX_EXPR, PREC_RELATIONAL_EXPRESSION },
1155
1156   { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1157   { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1158
1159   { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1160
1161   { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1162
1163   { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1164
1165   { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1166
1167   { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1168 };
1169
1170 /* The same as binops, but initialized by cp_parser_new so that
1171    binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1172    for speed.  */
1173 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1174
1175 /* Constructors and destructors.  */
1176
1177 /* Construct a new context.  The context below this one on the stack
1178    is given by NEXT.  */
1179
1180 static cp_parser_context *
1181 cp_parser_context_new (cp_parser_context* next)
1182 {
1183   cp_parser_context *context;
1184
1185   /* Allocate the storage.  */
1186   if (cp_parser_context_free_list != NULL)
1187     {
1188       /* Pull the first entry from the free list.  */
1189       context = cp_parser_context_free_list;
1190       cp_parser_context_free_list = context->next;
1191       memset (context, 0, sizeof (*context));
1192     }
1193   else
1194     context = GGC_CNEW (cp_parser_context);
1195
1196   /* No errors have occurred yet in this context.  */
1197   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1198   /* If this is not the bottomost context, copy information that we
1199      need from the previous context.  */
1200   if (next)
1201     {
1202       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1203          expression, then we are parsing one in this context, too.  */
1204       context->object_type = next->object_type;
1205       /* Thread the stack.  */
1206       context->next = next;
1207     }
1208
1209   return context;
1210 }
1211
1212 /* The cp_parser structure represents the C++ parser.  */
1213
1214 typedef struct cp_parser GTY(())
1215 {
1216   /* The lexer from which we are obtaining tokens.  */
1217   cp_lexer *lexer;
1218
1219   /* The scope in which names should be looked up.  If NULL_TREE, then
1220      we look up names in the scope that is currently open in the
1221      source program.  If non-NULL, this is either a TYPE or
1222      NAMESPACE_DECL for the scope in which we should look.  It can
1223      also be ERROR_MARK, when we've parsed a bogus scope.
1224
1225      This value is not cleared automatically after a name is looked
1226      up, so we must be careful to clear it before starting a new look
1227      up sequence.  (If it is not cleared, then `X::Y' followed by `Z'
1228      will look up `Z' in the scope of `X', rather than the current
1229      scope.)  Unfortunately, it is difficult to tell when name lookup
1230      is complete, because we sometimes peek at a token, look it up,
1231      and then decide not to consume it.   */
1232   tree scope;
1233
1234   /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1235      last lookup took place.  OBJECT_SCOPE is used if an expression
1236      like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1237      respectively.  QUALIFYING_SCOPE is used for an expression of the
1238      form "X::Y"; it refers to X.  */
1239   tree object_scope;
1240   tree qualifying_scope;
1241
1242   /* A stack of parsing contexts.  All but the bottom entry on the
1243      stack will be tentative contexts.
1244
1245      We parse tentatively in order to determine which construct is in
1246      use in some situations.  For example, in order to determine
1247      whether a statement is an expression-statement or a
1248      declaration-statement we parse it tentatively as a
1249      declaration-statement.  If that fails, we then reparse the same
1250      token stream as an expression-statement.  */
1251   cp_parser_context *context;
1252
1253   /* True if we are parsing GNU C++.  If this flag is not set, then
1254      GNU extensions are not recognized.  */
1255   bool allow_gnu_extensions_p;
1256
1257   /* TRUE if the `>' token should be interpreted as the greater-than
1258      operator.  FALSE if it is the end of a template-id or
1259      template-parameter-list.  */
1260   bool greater_than_is_operator_p;
1261
1262   /* TRUE if default arguments are allowed within a parameter list
1263      that starts at this point. FALSE if only a gnu extension makes
1264      them permissible.  */
1265   bool default_arg_ok_p;
1266
1267   /* TRUE if we are parsing an integral constant-expression.  See
1268      [expr.const] for a precise definition.  */
1269   bool integral_constant_expression_p;
1270
1271   /* TRUE if we are parsing an integral constant-expression -- but a
1272      non-constant expression should be permitted as well.  This flag
1273      is used when parsing an array bound so that GNU variable-length
1274      arrays are tolerated.  */
1275   bool allow_non_integral_constant_expression_p;
1276
1277   /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1278      been seen that makes the expression non-constant.  */
1279   bool non_integral_constant_expression_p;
1280
1281   /* TRUE if local variable names and `this' are forbidden in the
1282      current context.  */
1283   bool local_variables_forbidden_p;
1284
1285   /* TRUE if the declaration we are parsing is part of a
1286      linkage-specification of the form `extern string-literal
1287      declaration'.  */
1288   bool in_unbraced_linkage_specification_p;
1289
1290   /* TRUE if we are presently parsing a declarator, after the
1291      direct-declarator.  */
1292   bool in_declarator_p;
1293
1294   /* TRUE if we are presently parsing a template-argument-list.  */
1295   bool in_template_argument_list_p;
1296
1297   /* Set to IN_ITERATION_STMT if parsing an iteration-statement,
1298      to IN_OMP_BLOCK if parsing OpenMP structured block and
1299      IN_OMP_FOR if parsing OpenMP loop.  If parsing a switch statement,
1300      this is bitwise ORed with IN_SWITCH_STMT, unless parsing an
1301      iteration-statement, OpenMP block or loop within that switch.  */
1302 #define IN_SWITCH_STMT          1
1303 #define IN_ITERATION_STMT       2
1304 #define IN_OMP_BLOCK            4
1305 #define IN_OMP_FOR              8
1306   unsigned char in_statement;
1307
1308   /* TRUE if we are presently parsing the body of a switch statement.
1309      Note that this doesn't quite overlap with in_statement above.
1310      The difference relates to giving the right sets of error messages:
1311      "case not in switch" vs "break statement used with OpenMP...".  */
1312   bool in_switch_statement_p;
1313
1314   /* TRUE if we are parsing a type-id in an expression context.  In
1315      such a situation, both "type (expr)" and "type (type)" are valid
1316      alternatives.  */
1317   bool in_type_id_in_expr_p;
1318
1319   /* TRUE if we are currently in a header file where declarations are
1320      implicitly extern "C".  */
1321   bool implicit_extern_c;
1322
1323   /* TRUE if strings in expressions should be translated to the execution
1324      character set.  */
1325   bool translate_strings_p;
1326
1327   /* If non-NULL, then we are parsing a construct where new type
1328      definitions are not permitted.  The string stored here will be
1329      issued as an error message if a type is defined.  */
1330   const char *type_definition_forbidden_message;
1331
1332   /* A list of lists. The outer list is a stack, used for member
1333      functions of local classes. At each level there are two sub-list,
1334      one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1335      sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1336      TREE_VALUE's. The functions are chained in reverse declaration
1337      order.
1338
1339      The TREE_PURPOSE sublist contains those functions with default
1340      arguments that need post processing, and the TREE_VALUE sublist
1341      contains those functions with definitions that need post
1342      processing.
1343
1344      These lists can only be processed once the outermost class being
1345      defined is complete.  */
1346   tree unparsed_functions_queues;
1347
1348   /* The number of classes whose definitions are currently in
1349      progress.  */
1350   unsigned num_classes_being_defined;
1351
1352   /* The number of template parameter lists that apply directly to the
1353      current declaration.  */
1354   unsigned num_template_parameter_lists;
1355 } cp_parser;
1356
1357 /* Prototypes.  */
1358
1359 /* Constructors and destructors.  */
1360
1361 static cp_parser *cp_parser_new
1362   (void);
1363
1364 /* Routines to parse various constructs.
1365
1366    Those that return `tree' will return the error_mark_node (rather
1367    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1368    Sometimes, they will return an ordinary node if error-recovery was
1369    attempted, even though a parse error occurred.  So, to check
1370    whether or not a parse error occurred, you should always use
1371    cp_parser_error_occurred.  If the construct is optional (indicated
1372    either by an `_opt' in the name of the function that does the
1373    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1374    the construct is not present.  */
1375
1376 /* Lexical conventions [gram.lex]  */
1377
1378 static tree cp_parser_identifier
1379   (cp_parser *);
1380 static tree cp_parser_string_literal
1381   (cp_parser *, bool, bool);
1382
1383 /* Basic concepts [gram.basic]  */
1384
1385 static bool cp_parser_translation_unit
1386   (cp_parser *);
1387
1388 /* Expressions [gram.expr]  */
1389
1390 static tree cp_parser_primary_expression
1391   (cp_parser *, bool, bool, bool, cp_id_kind *);
1392 static tree cp_parser_id_expression
1393   (cp_parser *, bool, bool, bool *, bool, bool);
1394 static tree cp_parser_unqualified_id
1395   (cp_parser *, bool, bool, bool, bool);
1396 static tree cp_parser_nested_name_specifier_opt
1397   (cp_parser *, bool, bool, bool, bool);
1398 static tree cp_parser_nested_name_specifier
1399   (cp_parser *, bool, bool, bool, bool);
1400 static tree cp_parser_class_or_namespace_name
1401   (cp_parser *, bool, bool, bool, bool, bool);
1402 static tree cp_parser_postfix_expression
1403   (cp_parser *, bool, bool);
1404 static tree cp_parser_postfix_open_square_expression
1405   (cp_parser *, tree, bool);
1406 static tree cp_parser_postfix_dot_deref_expression
1407   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *);
1408 static tree cp_parser_parenthesized_expression_list
1409   (cp_parser *, bool, bool, bool *);
1410 static void cp_parser_pseudo_destructor_name
1411   (cp_parser *, tree *, tree *);
1412 static tree cp_parser_unary_expression
1413   (cp_parser *, bool, bool);
1414 static enum tree_code cp_parser_unary_operator
1415   (cp_token *);
1416 static tree cp_parser_new_expression
1417   (cp_parser *);
1418 static tree cp_parser_new_placement
1419   (cp_parser *);
1420 static tree cp_parser_new_type_id
1421   (cp_parser *, tree *);
1422 static cp_declarator *cp_parser_new_declarator_opt
1423   (cp_parser *);
1424 static cp_declarator *cp_parser_direct_new_declarator
1425   (cp_parser *);
1426 static tree cp_parser_new_initializer
1427   (cp_parser *);
1428 static tree cp_parser_delete_expression
1429   (cp_parser *);
1430 static tree cp_parser_cast_expression
1431   (cp_parser *, bool, bool);
1432 static tree cp_parser_binary_expression
1433   (cp_parser *, bool);
1434 static tree cp_parser_question_colon_clause
1435   (cp_parser *, tree);
1436 static tree cp_parser_assignment_expression
1437   (cp_parser *, bool);
1438 static enum tree_code cp_parser_assignment_operator_opt
1439   (cp_parser *);
1440 static tree cp_parser_expression
1441   (cp_parser *, bool);
1442 static tree cp_parser_constant_expression
1443   (cp_parser *, bool, bool *);
1444 static tree cp_parser_builtin_offsetof
1445   (cp_parser *);
1446
1447 /* Statements [gram.stmt.stmt]  */
1448
1449 static void cp_parser_statement
1450   (cp_parser *, tree, bool);
1451 static tree cp_parser_labeled_statement
1452   (cp_parser *, tree, bool);
1453 static tree cp_parser_expression_statement
1454   (cp_parser *, tree);
1455 static tree cp_parser_compound_statement
1456   (cp_parser *, tree, bool);
1457 static void cp_parser_statement_seq_opt
1458   (cp_parser *, tree);
1459 static tree cp_parser_selection_statement
1460   (cp_parser *);
1461 static tree cp_parser_condition
1462   (cp_parser *);
1463 static tree cp_parser_iteration_statement
1464   (cp_parser *);
1465 static void cp_parser_for_init_statement
1466   (cp_parser *);
1467 static tree cp_parser_jump_statement
1468   (cp_parser *);
1469 static void cp_parser_declaration_statement
1470   (cp_parser *);
1471
1472 static tree cp_parser_implicitly_scoped_statement
1473   (cp_parser *);
1474 static void cp_parser_already_scoped_statement
1475   (cp_parser *);
1476
1477 /* Declarations [gram.dcl.dcl] */
1478
1479 static void cp_parser_declaration_seq_opt
1480   (cp_parser *);
1481 static void cp_parser_declaration
1482   (cp_parser *);
1483 static void cp_parser_block_declaration
1484   (cp_parser *, bool);
1485 static void cp_parser_simple_declaration
1486   (cp_parser *, bool);
1487 static void cp_parser_decl_specifier_seq
1488   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1489 static tree cp_parser_storage_class_specifier_opt
1490   (cp_parser *);
1491 static tree cp_parser_function_specifier_opt
1492   (cp_parser *, cp_decl_specifier_seq *);
1493 static tree cp_parser_type_specifier
1494   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1495    int *, bool *);
1496 static tree cp_parser_simple_type_specifier
1497   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1498 static tree cp_parser_type_name
1499   (cp_parser *);
1500 static tree cp_parser_elaborated_type_specifier
1501   (cp_parser *, bool, bool);
1502 static tree cp_parser_enum_specifier
1503   (cp_parser *);
1504 static void cp_parser_enumerator_list
1505   (cp_parser *, tree);
1506 static void cp_parser_enumerator_definition
1507   (cp_parser *, tree);
1508 static tree cp_parser_namespace_name
1509   (cp_parser *);
1510 static void cp_parser_namespace_definition
1511   (cp_parser *);
1512 static void cp_parser_namespace_body
1513   (cp_parser *);
1514 static tree cp_parser_qualified_namespace_specifier
1515   (cp_parser *);
1516 static void cp_parser_namespace_alias_definition
1517   (cp_parser *);
1518 static void cp_parser_using_declaration
1519   (cp_parser *);
1520 static void cp_parser_using_directive
1521   (cp_parser *);
1522 static void cp_parser_asm_definition
1523   (cp_parser *);
1524 static void cp_parser_linkage_specification
1525   (cp_parser *);
1526
1527 /* Declarators [gram.dcl.decl] */
1528
1529 static tree cp_parser_init_declarator
1530   (cp_parser *, cp_decl_specifier_seq *, tree, bool, bool, int, bool *);
1531 static cp_declarator *cp_parser_declarator
1532   (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1533 static cp_declarator *cp_parser_direct_declarator
1534   (cp_parser *, cp_parser_declarator_kind, int *, bool);
1535 static enum tree_code cp_parser_ptr_operator
1536   (cp_parser *, tree *, cp_cv_quals *);
1537 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1538   (cp_parser *);
1539 static tree cp_parser_declarator_id
1540   (cp_parser *, bool);
1541 static tree cp_parser_type_id
1542   (cp_parser *);
1543 static void cp_parser_type_specifier_seq
1544   (cp_parser *, bool, cp_decl_specifier_seq *);
1545 static cp_parameter_declarator *cp_parser_parameter_declaration_clause
1546   (cp_parser *);
1547 static cp_parameter_declarator *cp_parser_parameter_declaration_list
1548   (cp_parser *, bool *);
1549 static cp_parameter_declarator *cp_parser_parameter_declaration
1550   (cp_parser *, bool, bool *);
1551 static void cp_parser_function_body
1552   (cp_parser *);
1553 static tree cp_parser_initializer
1554   (cp_parser *, bool *, bool *);
1555 static tree cp_parser_initializer_clause
1556   (cp_parser *, bool *);
1557 static VEC(constructor_elt,gc) *cp_parser_initializer_list
1558   (cp_parser *, bool *);
1559
1560 static bool cp_parser_ctor_initializer_opt_and_function_body
1561   (cp_parser *);
1562
1563 /* Classes [gram.class] */
1564
1565 static tree cp_parser_class_name
1566   (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
1567 static tree cp_parser_class_specifier
1568   (cp_parser *);
1569 static tree cp_parser_class_head
1570   (cp_parser *, bool *, tree *);
1571 static enum tag_types cp_parser_class_key
1572   (cp_parser *);
1573 static void cp_parser_member_specification_opt
1574   (cp_parser *);
1575 static void cp_parser_member_declaration
1576   (cp_parser *);
1577 static tree cp_parser_pure_specifier
1578   (cp_parser *);
1579 static tree cp_parser_constant_initializer
1580   (cp_parser *);
1581
1582 /* Derived classes [gram.class.derived] */
1583
1584 static tree cp_parser_base_clause
1585   (cp_parser *);
1586 static tree cp_parser_base_specifier
1587   (cp_parser *);
1588
1589 /* Special member functions [gram.special] */
1590
1591 static tree cp_parser_conversion_function_id
1592   (cp_parser *);
1593 static tree cp_parser_conversion_type_id
1594   (cp_parser *);
1595 static cp_declarator *cp_parser_conversion_declarator_opt
1596   (cp_parser *);
1597 static bool cp_parser_ctor_initializer_opt
1598   (cp_parser *);
1599 static void cp_parser_mem_initializer_list
1600   (cp_parser *);
1601 static tree cp_parser_mem_initializer
1602   (cp_parser *);
1603 static tree cp_parser_mem_initializer_id
1604   (cp_parser *);
1605
1606 /* Overloading [gram.over] */
1607
1608 static tree cp_parser_operator_function_id
1609   (cp_parser *);
1610 static tree cp_parser_operator
1611   (cp_parser *);
1612
1613 /* Templates [gram.temp] */
1614
1615 static void cp_parser_template_declaration
1616   (cp_parser *, bool);
1617 static tree cp_parser_template_parameter_list
1618   (cp_parser *);
1619 static tree cp_parser_template_parameter
1620   (cp_parser *, bool *);
1621 static tree cp_parser_type_parameter
1622   (cp_parser *);
1623 static tree cp_parser_template_id
1624   (cp_parser *, bool, bool, bool);
1625 static tree cp_parser_template_name
1626   (cp_parser *, bool, bool, bool, bool *);
1627 static tree cp_parser_template_argument_list
1628   (cp_parser *);
1629 static tree cp_parser_template_argument
1630   (cp_parser *);
1631 static void cp_parser_explicit_instantiation
1632   (cp_parser *);
1633 static void cp_parser_explicit_specialization
1634   (cp_parser *);
1635
1636 /* Exception handling [gram.exception] */
1637
1638 static tree cp_parser_try_block
1639   (cp_parser *);
1640 static bool cp_parser_function_try_block
1641   (cp_parser *);
1642 static void cp_parser_handler_seq
1643   (cp_parser *);
1644 static void cp_parser_handler
1645   (cp_parser *);
1646 static tree cp_parser_exception_declaration
1647   (cp_parser *);
1648 static tree cp_parser_throw_expression
1649   (cp_parser *);
1650 static tree cp_parser_exception_specification_opt
1651   (cp_parser *);
1652 static tree cp_parser_type_id_list
1653   (cp_parser *);
1654
1655 /* GNU Extensions */
1656
1657 static tree cp_parser_asm_specification_opt
1658   (cp_parser *);
1659 static tree cp_parser_asm_operand_list
1660   (cp_parser *);
1661 static tree cp_parser_asm_clobber_list
1662   (cp_parser *);
1663 static tree cp_parser_attributes_opt
1664   (cp_parser *);
1665 static tree cp_parser_attribute_list
1666   (cp_parser *);
1667 static bool cp_parser_extension_opt
1668   (cp_parser *, int *);
1669 static void cp_parser_label_declaration
1670   (cp_parser *);
1671
1672 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1673 static bool cp_parser_pragma
1674   (cp_parser *, enum pragma_context);
1675
1676 /* Objective-C++ Productions */
1677
1678 static tree cp_parser_objc_message_receiver
1679   (cp_parser *);
1680 static tree cp_parser_objc_message_args
1681   (cp_parser *);
1682 static tree cp_parser_objc_message_expression
1683   (cp_parser *);
1684 static tree cp_parser_objc_encode_expression
1685   (cp_parser *);
1686 static tree cp_parser_objc_defs_expression
1687   (cp_parser *);
1688 static tree cp_parser_objc_protocol_expression
1689   (cp_parser *);
1690 static tree cp_parser_objc_selector_expression
1691   (cp_parser *);
1692 static tree cp_parser_objc_expression
1693   (cp_parser *);
1694 static bool cp_parser_objc_selector_p
1695   (enum cpp_ttype);
1696 static tree cp_parser_objc_selector
1697   (cp_parser *);
1698 static tree cp_parser_objc_protocol_refs_opt
1699   (cp_parser *);
1700 static void cp_parser_objc_declaration
1701   (cp_parser *);
1702 static tree cp_parser_objc_statement
1703   (cp_parser *);
1704
1705 /* Utility Routines */
1706
1707 static tree cp_parser_lookup_name
1708   (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *);
1709 static tree cp_parser_lookup_name_simple
1710   (cp_parser *, tree);
1711 static tree cp_parser_maybe_treat_template_as_class
1712   (tree, bool);
1713 static bool cp_parser_check_declarator_template_parameters
1714   (cp_parser *, cp_declarator *);
1715 static bool cp_parser_check_template_parameters
1716   (cp_parser *, unsigned);
1717 static tree cp_parser_simple_cast_expression
1718   (cp_parser *);
1719 static tree cp_parser_global_scope_opt
1720   (cp_parser *, bool);
1721 static bool cp_parser_constructor_declarator_p
1722   (cp_parser *, bool);
1723 static tree cp_parser_function_definition_from_specifiers_and_declarator
1724   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1725 static tree cp_parser_function_definition_after_declarator
1726   (cp_parser *, bool);
1727 static void cp_parser_template_declaration_after_export
1728   (cp_parser *, bool);
1729 static void cp_parser_perform_template_parameter_access_checks
1730   (tree);
1731 static tree cp_parser_single_declaration
1732   (cp_parser *, tree, bool, bool *);
1733 static tree cp_parser_functional_cast
1734   (cp_parser *, tree);
1735 static tree cp_parser_save_member_function_body
1736   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1737 static tree cp_parser_enclosed_template_argument_list
1738   (cp_parser *);
1739 static void cp_parser_save_default_args
1740   (cp_parser *, tree);
1741 static void cp_parser_late_parsing_for_member
1742   (cp_parser *, tree);
1743 static void cp_parser_late_parsing_default_args
1744   (cp_parser *, tree);
1745 static tree cp_parser_sizeof_operand
1746   (cp_parser *, enum rid);
1747 static bool cp_parser_declares_only_class_p
1748   (cp_parser *);
1749 static void cp_parser_set_storage_class
1750   (cp_parser *, cp_decl_specifier_seq *, enum rid);
1751 static void cp_parser_set_decl_spec_type
1752   (cp_decl_specifier_seq *, tree, bool);
1753 static bool cp_parser_friend_p
1754   (const cp_decl_specifier_seq *);
1755 static cp_token *cp_parser_require
1756   (cp_parser *, enum cpp_ttype, const char *);
1757 static cp_token *cp_parser_require_keyword
1758   (cp_parser *, enum rid, const char *);
1759 static bool cp_parser_token_starts_function_definition_p
1760   (cp_token *);
1761 static bool cp_parser_next_token_starts_class_definition_p
1762   (cp_parser *);
1763 static bool cp_parser_next_token_ends_template_argument_p
1764   (cp_parser *);
1765 static bool cp_parser_nth_token_starts_template_argument_list_p
1766   (cp_parser *, size_t);
1767 static enum tag_types cp_parser_token_is_class_key
1768   (cp_token *);
1769 static void cp_parser_check_class_key
1770   (enum tag_types, tree type);
1771 static void cp_parser_check_access_in_redeclaration
1772   (tree type);
1773 static bool cp_parser_optional_template_keyword
1774   (cp_parser *);
1775 static void cp_parser_pre_parsed_nested_name_specifier
1776   (cp_parser *);
1777 static void cp_parser_cache_group
1778   (cp_parser *, enum cpp_ttype, unsigned);
1779 static void cp_parser_parse_tentatively
1780   (cp_parser *);
1781 static void cp_parser_commit_to_tentative_parse
1782   (cp_parser *);
1783 static void cp_parser_abort_tentative_parse
1784   (cp_parser *);
1785 static bool cp_parser_parse_definitely
1786   (cp_parser *);
1787 static inline bool cp_parser_parsing_tentatively
1788   (cp_parser *);
1789 static bool cp_parser_uncommitted_to_tentative_parse_p
1790   (cp_parser *);
1791 static void cp_parser_error
1792   (cp_parser *, const char *);
1793 static void cp_parser_name_lookup_error
1794   (cp_parser *, tree, tree, const char *);
1795 static bool cp_parser_simulate_error
1796   (cp_parser *);
1797 static void cp_parser_check_type_definition
1798   (cp_parser *);
1799 static void cp_parser_check_for_definition_in_return_type
1800   (cp_declarator *, tree);
1801 static void cp_parser_check_for_invalid_template_id
1802   (cp_parser *, tree);
1803 static bool cp_parser_non_integral_constant_expression
1804   (cp_parser *, const char *);
1805 static void cp_parser_diagnose_invalid_type_name
1806   (cp_parser *, tree, tree);
1807 static bool cp_parser_parse_and_diagnose_invalid_type_name
1808   (cp_parser *);
1809 static int cp_parser_skip_to_closing_parenthesis
1810   (cp_parser *, bool, bool, bool);
1811 static void cp_parser_skip_to_end_of_statement
1812   (cp_parser *);
1813 static void cp_parser_consume_semicolon_at_end_of_statement
1814   (cp_parser *);
1815 static void cp_parser_skip_to_end_of_block_or_statement
1816   (cp_parser *);
1817 static void cp_parser_skip_to_closing_brace
1818   (cp_parser *);
1819 static void cp_parser_skip_until_found
1820   (cp_parser *, enum cpp_ttype, const char *);
1821 static void cp_parser_skip_to_pragma_eol
1822   (cp_parser*, cp_token *);
1823 static bool cp_parser_error_occurred
1824   (cp_parser *);
1825 static bool cp_parser_allow_gnu_extensions_p
1826   (cp_parser *);
1827 static bool cp_parser_is_string_literal
1828   (cp_token *);
1829 static bool cp_parser_is_keyword
1830   (cp_token *, enum rid);
1831 static tree cp_parser_make_typename_type
1832   (cp_parser *, tree, tree);
1833
1834 /* Returns nonzero if we are parsing tentatively.  */
1835
1836 static inline bool
1837 cp_parser_parsing_tentatively (cp_parser* parser)
1838 {
1839   return parser->context->next != NULL;
1840 }
1841
1842 /* Returns nonzero if TOKEN is a string literal.  */
1843
1844 static bool
1845 cp_parser_is_string_literal (cp_token* token)
1846 {
1847   return (token->type == CPP_STRING || token->type == CPP_WSTRING);
1848 }
1849
1850 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
1851
1852 static bool
1853 cp_parser_is_keyword (cp_token* token, enum rid keyword)
1854 {
1855   return token->keyword == keyword;
1856 }
1857
1858 /* A minimum or maximum operator has been seen.  As these are
1859    deprecated, issue a warning.  */
1860
1861 static inline void
1862 cp_parser_warn_min_max (void)
1863 {
1864   if (warn_deprecated && !in_system_header)
1865     warning (OPT_Wdeprecated, "minimum/maximum operators are deprecated");
1866 }
1867
1868 /* If not parsing tentatively, issue a diagnostic of the form
1869       FILE:LINE: MESSAGE before TOKEN
1870    where TOKEN is the next token in the input stream.  MESSAGE
1871    (specified by the caller) is usually of the form "expected
1872    OTHER-TOKEN".  */
1873
1874 static void
1875 cp_parser_error (cp_parser* parser, const char* message)
1876 {
1877   if (!cp_parser_simulate_error (parser))
1878     {
1879       cp_token *token = cp_lexer_peek_token (parser->lexer);
1880       /* This diagnostic makes more sense if it is tagged to the line
1881          of the token we just peeked at.  */
1882       cp_lexer_set_source_position_from_token (token);
1883
1884       if (token->type == CPP_PRAGMA)
1885         {
1886           error ("%<#pragma%> is not allowed here");
1887           cp_parser_skip_to_pragma_eol (parser, token);
1888           return;
1889         }
1890
1891       c_parse_error (message,
1892                      /* Because c_parser_error does not understand
1893                         CPP_KEYWORD, keywords are treated like
1894                         identifiers.  */
1895                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
1896                      token->value);
1897     }
1898 }
1899
1900 /* Issue an error about name-lookup failing.  NAME is the
1901    IDENTIFIER_NODE DECL is the result of
1902    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
1903    the thing that we hoped to find.  */
1904
1905 static void
1906 cp_parser_name_lookup_error (cp_parser* parser,
1907                              tree name,
1908                              tree decl,
1909                              const char* desired)
1910 {
1911   /* If name lookup completely failed, tell the user that NAME was not
1912      declared.  */
1913   if (decl == error_mark_node)
1914     {
1915       if (parser->scope && parser->scope != global_namespace)
1916         error ("%<%D::%D%> has not been declared",
1917                parser->scope, name);
1918       else if (parser->scope == global_namespace)
1919         error ("%<::%D%> has not been declared", name);
1920       else if (parser->object_scope
1921                && !CLASS_TYPE_P (parser->object_scope))
1922         error ("request for member %qD in non-class type %qT",
1923                name, parser->object_scope);
1924       else if (parser->object_scope)
1925         error ("%<%T::%D%> has not been declared",
1926                parser->object_scope, name);
1927       else
1928         error ("%qD has not been declared", name);
1929     }
1930   else if (parser->scope && parser->scope != global_namespace)
1931     error ("%<%D::%D%> %s", parser->scope, name, desired);
1932   else if (parser->scope == global_namespace)
1933     error ("%<::%D%> %s", name, desired);
1934   else
1935     error ("%qD %s", name, desired);
1936 }
1937
1938 /* If we are parsing tentatively, remember that an error has occurred
1939    during this tentative parse.  Returns true if the error was
1940    simulated; false if a message should be issued by the caller.  */
1941
1942 static bool
1943 cp_parser_simulate_error (cp_parser* parser)
1944 {
1945   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
1946     {
1947       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
1948       return true;
1949     }
1950   return false;
1951 }
1952
1953 /* This function is called when a type is defined.  If type
1954    definitions are forbidden at this point, an error message is
1955    issued.  */
1956
1957 static void
1958 cp_parser_check_type_definition (cp_parser* parser)
1959 {
1960   /* If types are forbidden here, issue a message.  */
1961   if (parser->type_definition_forbidden_message)
1962     /* Use `%s' to print the string in case there are any escape
1963        characters in the message.  */
1964     error ("%s", parser->type_definition_forbidden_message);
1965 }
1966
1967 /* This function is called when the DECLARATOR is processed.  The TYPE
1968    was a type defined in the decl-specifiers.  If it is invalid to
1969    define a type in the decl-specifiers for DECLARATOR, an error is
1970    issued.  */
1971
1972 static void
1973 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
1974                                                tree type)
1975 {
1976   /* [dcl.fct] forbids type definitions in return types.
1977      Unfortunately, it's not easy to know whether or not we are
1978      processing a return type until after the fact.  */
1979   while (declarator
1980          && (declarator->kind == cdk_pointer
1981              || declarator->kind == cdk_reference
1982              || declarator->kind == cdk_ptrmem))
1983     declarator = declarator->declarator;
1984   if (declarator
1985       && declarator->kind == cdk_function)
1986     {
1987       error ("new types may not be defined in a return type");
1988       inform ("(perhaps a semicolon is missing after the definition of %qT)",
1989               type);
1990     }
1991 }
1992
1993 /* A type-specifier (TYPE) has been parsed which cannot be followed by
1994    "<" in any valid C++ program.  If the next token is indeed "<",
1995    issue a message warning the user about what appears to be an
1996    invalid attempt to form a template-id.  */
1997
1998 static void
1999 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2000                                          tree type)
2001 {
2002   cp_token_position start = 0;
2003
2004   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2005     {
2006       if (TYPE_P (type))
2007         error ("%qT is not a template", type);
2008       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2009         error ("%qE is not a template", type);
2010       else
2011         error ("invalid template-id");
2012       /* Remember the location of the invalid "<".  */
2013       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2014         start = cp_lexer_token_position (parser->lexer, true);
2015       /* Consume the "<".  */
2016       cp_lexer_consume_token (parser->lexer);
2017       /* Parse the template arguments.  */
2018       cp_parser_enclosed_template_argument_list (parser);
2019       /* Permanently remove the invalid template arguments so that
2020          this error message is not issued again.  */
2021       if (start)
2022         cp_lexer_purge_tokens_after (parser->lexer, start);
2023     }
2024 }
2025
2026 /* If parsing an integral constant-expression, issue an error message
2027    about the fact that THING appeared and return true.  Otherwise,
2028    return false.  In either case, set
2029    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2030
2031 static bool
2032 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2033                                             const char *thing)
2034 {
2035   parser->non_integral_constant_expression_p = true;
2036   if (parser->integral_constant_expression_p)
2037     {
2038       if (!parser->allow_non_integral_constant_expression_p)
2039         {
2040           error ("%s cannot appear in a constant-expression", thing);
2041           return true;
2042         }
2043     }
2044   return false;
2045 }
2046
2047 /* Emit a diagnostic for an invalid type name.  SCOPE is the
2048    qualifying scope (or NULL, if none) for ID.  This function commits
2049    to the current active tentative parse, if any.  (Otherwise, the
2050    problematic construct might be encountered again later, resulting
2051    in duplicate error messages.)  */
2052
2053 static void
2054 cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
2055 {
2056   tree decl, old_scope;
2057   /* Try to lookup the identifier.  */
2058   old_scope = parser->scope;
2059   parser->scope = scope;
2060   decl = cp_parser_lookup_name_simple (parser, id);
2061   parser->scope = old_scope;
2062   /* If the lookup found a template-name, it means that the user forgot
2063   to specify an argument list. Emit a useful error message.  */
2064   if (TREE_CODE (decl) == TEMPLATE_DECL)
2065     error ("invalid use of template-name %qE without an argument list",
2066       decl);
2067   else if (!parser->scope)
2068     {
2069       /* Issue an error message.  */
2070       error ("%qE does not name a type", id);
2071       /* If we're in a template class, it's possible that the user was
2072          referring to a type from a base class.  For example:
2073
2074            template <typename T> struct A { typedef T X; };
2075            template <typename T> struct B : public A<T> { X x; };
2076
2077          The user should have said "typename A<T>::X".  */
2078       if (processing_template_decl && current_class_type
2079           && TYPE_BINFO (current_class_type))
2080         {
2081           tree b;
2082
2083           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2084                b;
2085                b = TREE_CHAIN (b))
2086             {
2087               tree base_type = BINFO_TYPE (b);
2088               if (CLASS_TYPE_P (base_type)
2089                   && dependent_type_p (base_type))
2090                 {
2091                   tree field;
2092                   /* Go from a particular instantiation of the
2093                      template (which will have an empty TYPE_FIELDs),
2094                      to the main version.  */
2095                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2096                   for (field = TYPE_FIELDS (base_type);
2097                        field;
2098                        field = TREE_CHAIN (field))
2099                     if (TREE_CODE (field) == TYPE_DECL
2100                         && DECL_NAME (field) == id)
2101                       {
2102                         inform ("(perhaps %<typename %T::%E%> was intended)",
2103                                 BINFO_TYPE (b), id);
2104                         break;
2105                       }
2106                   if (field)
2107                     break;
2108                 }
2109             }
2110         }
2111     }
2112   /* Here we diagnose qualified-ids where the scope is actually correct,
2113      but the identifier does not resolve to a valid type name.  */
2114   else if (parser->scope != error_mark_node)
2115     {
2116       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2117         error ("%qE in namespace %qE does not name a type",
2118                id, parser->scope);
2119       else if (TYPE_P (parser->scope))
2120         error ("%qE in class %qT does not name a type", id, parser->scope);
2121       else
2122         gcc_unreachable ();
2123     }
2124   cp_parser_commit_to_tentative_parse (parser);
2125 }
2126
2127 /* Check for a common situation where a type-name should be present,
2128    but is not, and issue a sensible error message.  Returns true if an
2129    invalid type-name was detected.
2130
2131    The situation handled by this function are variable declarations of the
2132    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2133    Usually, `ID' should name a type, but if we got here it means that it
2134    does not. We try to emit the best possible error message depending on
2135    how exactly the id-expression looks like.
2136 */
2137
2138 static bool
2139 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2140 {
2141   tree id;
2142
2143   cp_parser_parse_tentatively (parser);
2144   id = cp_parser_id_expression (parser,
2145                                 /*template_keyword_p=*/false,
2146                                 /*check_dependency_p=*/true,
2147                                 /*template_p=*/NULL,
2148                                 /*declarator_p=*/true,
2149                                 /*optional_p=*/false);
2150   /* After the id-expression, there should be a plain identifier,
2151      otherwise this is not a simple variable declaration. Also, if
2152      the scope is dependent, we cannot do much.  */
2153   if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2154       || (parser->scope && TYPE_P (parser->scope)
2155           && dependent_type_p (parser->scope)))
2156     {
2157       cp_parser_abort_tentative_parse (parser);
2158       return false;
2159     }
2160   if (!cp_parser_parse_definitely (parser)
2161       || TREE_CODE (id) != IDENTIFIER_NODE)
2162     return false;
2163
2164   /* Emit a diagnostic for the invalid type.  */
2165   cp_parser_diagnose_invalid_type_name (parser, parser->scope, id);
2166   /* Skip to the end of the declaration; there's no point in
2167      trying to process it.  */
2168   cp_parser_skip_to_end_of_block_or_statement (parser);
2169   return true;
2170 }
2171
2172 /* Consume tokens up to, and including, the next non-nested closing `)'.
2173    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2174    are doing error recovery. Returns -1 if OR_COMMA is true and we
2175    found an unnested comma.  */
2176
2177 static int
2178 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2179                                        bool recovering,
2180                                        bool or_comma,
2181                                        bool consume_paren)
2182 {
2183   unsigned paren_depth = 0;
2184   unsigned brace_depth = 0;
2185
2186   if (recovering && !or_comma
2187       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2188     return 0;
2189
2190   while (true)
2191     {
2192       cp_token * token = cp_lexer_peek_token (parser->lexer);
2193
2194       switch (token->type)
2195         {
2196         case CPP_EOF:
2197         case CPP_PRAGMA_EOL:
2198           /* If we've run out of tokens, then there is no closing `)'.  */
2199           return 0;
2200
2201         case CPP_SEMICOLON:
2202           /* This matches the processing in skip_to_end_of_statement.  */
2203           if (!brace_depth)
2204             return 0;
2205           break;
2206
2207         case CPP_OPEN_BRACE:
2208           ++brace_depth;
2209           break;
2210         case CPP_CLOSE_BRACE:
2211           if (!brace_depth--)
2212             return 0;
2213           break;
2214
2215         case CPP_COMMA:
2216           if (recovering && or_comma && !brace_depth && !paren_depth)
2217             return -1;
2218           break;
2219
2220         case CPP_OPEN_PAREN:
2221           if (!brace_depth)
2222             ++paren_depth;
2223           break;
2224
2225         case CPP_CLOSE_PAREN:
2226           if (!brace_depth && !paren_depth--)
2227             {
2228               if (consume_paren)
2229                 cp_lexer_consume_token (parser->lexer);
2230               return 1;
2231             }
2232           break;
2233
2234         default:
2235           break;
2236         }
2237
2238       /* Consume the token.  */
2239       cp_lexer_consume_token (parser->lexer);
2240     }
2241 }
2242
2243 /* Consume tokens until we reach the end of the current statement.
2244    Normally, that will be just before consuming a `;'.  However, if a
2245    non-nested `}' comes first, then we stop before consuming that.  */
2246
2247 static void
2248 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2249 {
2250   unsigned nesting_depth = 0;
2251
2252   while (true)
2253     {
2254       cp_token *token = cp_lexer_peek_token (parser->lexer);
2255
2256       switch (token->type)
2257         {
2258         case CPP_EOF:
2259         case CPP_PRAGMA_EOL:
2260           /* If we've run out of tokens, stop.  */
2261           return;
2262
2263         case CPP_SEMICOLON:
2264           /* If the next token is a `;', we have reached the end of the
2265              statement.  */
2266           if (!nesting_depth)
2267             return;
2268           break;
2269
2270         case CPP_CLOSE_BRACE:
2271           /* If this is a non-nested '}', stop before consuming it.
2272              That way, when confronted with something like:
2273
2274                { 3 + }
2275
2276              we stop before consuming the closing '}', even though we
2277              have not yet reached a `;'.  */
2278           if (nesting_depth == 0)
2279             return;
2280
2281           /* If it is the closing '}' for a block that we have
2282              scanned, stop -- but only after consuming the token.
2283              That way given:
2284
2285                 void f g () { ... }
2286                 typedef int I;
2287
2288              we will stop after the body of the erroneously declared
2289              function, but before consuming the following `typedef'
2290              declaration.  */
2291           if (--nesting_depth == 0)
2292             {
2293               cp_lexer_consume_token (parser->lexer);
2294               return;
2295             }
2296
2297         case CPP_OPEN_BRACE:
2298           ++nesting_depth;
2299           break;
2300
2301         default:
2302           break;
2303         }
2304
2305       /* Consume the token.  */
2306       cp_lexer_consume_token (parser->lexer);
2307     }
2308 }
2309
2310 /* This function is called at the end of a statement or declaration.
2311    If the next token is a semicolon, it is consumed; otherwise, error
2312    recovery is attempted.  */
2313
2314 static void
2315 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2316 {
2317   /* Look for the trailing `;'.  */
2318   if (!cp_parser_require (parser, CPP_SEMICOLON, "`;'"))
2319     {
2320       /* If there is additional (erroneous) input, skip to the end of
2321          the statement.  */
2322       cp_parser_skip_to_end_of_statement (parser);
2323       /* If the next token is now a `;', consume it.  */
2324       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2325         cp_lexer_consume_token (parser->lexer);
2326     }
2327 }
2328
2329 /* Skip tokens until we have consumed an entire block, or until we
2330    have consumed a non-nested `;'.  */
2331
2332 static void
2333 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2334 {
2335   int nesting_depth = 0;
2336
2337   while (nesting_depth >= 0)
2338     {
2339       cp_token *token = cp_lexer_peek_token (parser->lexer);
2340
2341       switch (token->type)
2342         {
2343         case CPP_EOF:
2344         case CPP_PRAGMA_EOL:
2345           /* If we've run out of tokens, stop.  */
2346           return;
2347
2348         case CPP_SEMICOLON:
2349           /* Stop if this is an unnested ';'. */
2350           if (!nesting_depth)
2351             nesting_depth = -1;
2352           break;
2353
2354         case CPP_CLOSE_BRACE:
2355           /* Stop if this is an unnested '}', or closes the outermost
2356              nesting level.  */
2357           nesting_depth--;
2358           if (!nesting_depth)
2359             nesting_depth = -1;
2360           break;
2361
2362         case CPP_OPEN_BRACE:
2363           /* Nest. */
2364           nesting_depth++;
2365           break;
2366
2367         default:
2368           break;
2369         }
2370
2371       /* Consume the token.  */
2372       cp_lexer_consume_token (parser->lexer);
2373     }
2374 }
2375
2376 /* Skip tokens until a non-nested closing curly brace is the next
2377    token.  */
2378
2379 static void
2380 cp_parser_skip_to_closing_brace (cp_parser *parser)
2381 {
2382   unsigned nesting_depth = 0;
2383
2384   while (true)
2385     {
2386       cp_token *token = cp_lexer_peek_token (parser->lexer);
2387
2388       switch (token->type)
2389         {
2390         case CPP_EOF:
2391         case CPP_PRAGMA_EOL:
2392           /* If we've run out of tokens, stop.  */
2393           return;
2394
2395         case CPP_CLOSE_BRACE:
2396           /* If the next token is a non-nested `}', then we have reached
2397              the end of the current block.  */
2398           if (nesting_depth-- == 0)
2399             return;
2400           break;
2401
2402         case CPP_OPEN_BRACE:
2403           /* If it the next token is a `{', then we are entering a new
2404              block.  Consume the entire block.  */
2405           ++nesting_depth;
2406           break;
2407
2408         default:
2409           break;
2410         }
2411
2412       /* Consume the token.  */
2413       cp_lexer_consume_token (parser->lexer);
2414     }
2415 }
2416
2417 /* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
2418    parameter is the PRAGMA token, allowing us to purge the entire pragma
2419    sequence.  */
2420
2421 static void
2422 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
2423 {
2424   cp_token *token;
2425
2426   parser->lexer->in_pragma = false;
2427
2428   do
2429     token = cp_lexer_consume_token (parser->lexer);
2430   while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
2431
2432   /* Ensure that the pragma is not parsed again.  */
2433   cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
2434 }
2435
2436 /* Require pragma end of line, resyncing with it as necessary.  The
2437    arguments are as for cp_parser_skip_to_pragma_eol.  */
2438
2439 static void
2440 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
2441 {
2442   parser->lexer->in_pragma = false;
2443   if (!cp_parser_require (parser, CPP_PRAGMA_EOL, "end of line"))
2444     cp_parser_skip_to_pragma_eol (parser, pragma_tok);
2445 }
2446
2447 /* This is a simple wrapper around make_typename_type. When the id is
2448    an unresolved identifier node, we can provide a superior diagnostic
2449    using cp_parser_diagnose_invalid_type_name.  */
2450
2451 static tree
2452 cp_parser_make_typename_type (cp_parser *parser, tree scope, tree id)
2453 {
2454   tree result;
2455   if (TREE_CODE (id) == IDENTIFIER_NODE)
2456     {
2457       result = make_typename_type (scope, id, typename_type,
2458                                    /*complain=*/tf_none);
2459       if (result == error_mark_node)
2460         cp_parser_diagnose_invalid_type_name (parser, scope, id);
2461       return result;
2462     }
2463   return make_typename_type (scope, id, typename_type, tf_error);
2464 }
2465
2466
2467 /* Create a new C++ parser.  */
2468
2469 static cp_parser *
2470 cp_parser_new (void)
2471 {
2472   cp_parser *parser;
2473   cp_lexer *lexer;
2474   unsigned i;
2475
2476   /* cp_lexer_new_main is called before calling ggc_alloc because
2477      cp_lexer_new_main might load a PCH file.  */
2478   lexer = cp_lexer_new_main ();
2479
2480   /* Initialize the binops_by_token so that we can get the tree
2481      directly from the token.  */
2482   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2483     binops_by_token[binops[i].token_type] = binops[i];
2484
2485   parser = GGC_CNEW (cp_parser);
2486   parser->lexer = lexer;
2487   parser->context = cp_parser_context_new (NULL);
2488
2489   /* For now, we always accept GNU extensions.  */
2490   parser->allow_gnu_extensions_p = 1;
2491
2492   /* The `>' token is a greater-than operator, not the end of a
2493      template-id.  */
2494   parser->greater_than_is_operator_p = true;
2495
2496   parser->default_arg_ok_p = true;
2497
2498   /* We are not parsing a constant-expression.  */
2499   parser->integral_constant_expression_p = false;
2500   parser->allow_non_integral_constant_expression_p = false;
2501   parser->non_integral_constant_expression_p = false;
2502
2503   /* Local variable names are not forbidden.  */
2504   parser->local_variables_forbidden_p = false;
2505
2506   /* We are not processing an `extern "C"' declaration.  */
2507   parser->in_unbraced_linkage_specification_p = false;
2508
2509   /* We are not processing a declarator.  */
2510   parser->in_declarator_p = false;
2511
2512   /* We are not processing a template-argument-list.  */
2513   parser->in_template_argument_list_p = false;
2514
2515   /* We are not in an iteration statement.  */
2516   parser->in_statement = 0;
2517
2518   /* We are not in a switch statement.  */
2519   parser->in_switch_statement_p = false;
2520
2521   /* We are not parsing a type-id inside an expression.  */
2522   parser->in_type_id_in_expr_p = false;
2523
2524   /* Declarations aren't implicitly extern "C".  */
2525   parser->implicit_extern_c = false;
2526
2527   /* String literals should be translated to the execution character set.  */
2528   parser->translate_strings_p = true;
2529
2530   /* The unparsed function queue is empty.  */
2531   parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE);
2532
2533   /* There are no classes being defined.  */
2534   parser->num_classes_being_defined = 0;
2535
2536   /* No template parameters apply.  */
2537   parser->num_template_parameter_lists = 0;
2538
2539   return parser;
2540 }
2541
2542 /* Create a cp_lexer structure which will emit the tokens in CACHE
2543    and push it onto the parser's lexer stack.  This is used for delayed
2544    parsing of in-class method bodies and default arguments, and should
2545    not be confused with tentative parsing.  */
2546 static void
2547 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
2548 {
2549   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
2550   lexer->next = parser->lexer;
2551   parser->lexer = lexer;
2552
2553   /* Move the current source position to that of the first token in the
2554      new lexer.  */
2555   cp_lexer_set_source_position_from_token (lexer->next_token);
2556 }
2557
2558 /* Pop the top lexer off the parser stack.  This is never used for the
2559    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
2560 static void
2561 cp_parser_pop_lexer (cp_parser *parser)
2562 {
2563   cp_lexer *lexer = parser->lexer;
2564   parser->lexer = lexer->next;
2565   cp_lexer_destroy (lexer);
2566
2567   /* Put the current source position back where it was before this
2568      lexer was pushed.  */
2569   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
2570 }
2571
2572 /* Lexical conventions [gram.lex]  */
2573
2574 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
2575    identifier.  */
2576
2577 static tree
2578 cp_parser_identifier (cp_parser* parser)
2579 {
2580   cp_token *token;
2581
2582   /* Look for the identifier.  */
2583   token = cp_parser_require (parser, CPP_NAME, "identifier");
2584   /* Return the value.  */
2585   return token ? token->value : error_mark_node;
2586 }
2587
2588 /* Parse a sequence of adjacent string constants.  Returns a
2589    TREE_STRING representing the combined, nul-terminated string
2590    constant.  If TRANSLATE is true, translate the string to the
2591    execution character set.  If WIDE_OK is true, a wide string is
2592    invalid here.
2593
2594    C++98 [lex.string] says that if a narrow string literal token is
2595    adjacent to a wide string literal token, the behavior is undefined.
2596    However, C99 6.4.5p4 says that this results in a wide string literal.
2597    We follow C99 here, for consistency with the C front end.
2598
2599    This code is largely lifted from lex_string() in c-lex.c.
2600
2601    FUTURE: ObjC++ will need to handle @-strings here.  */
2602 static tree
2603 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
2604 {
2605   tree value;
2606   bool wide = false;
2607   size_t count;
2608   struct obstack str_ob;
2609   cpp_string str, istr, *strs;
2610   cp_token *tok;
2611
2612   tok = cp_lexer_peek_token (parser->lexer);
2613   if (!cp_parser_is_string_literal (tok))
2614     {
2615       cp_parser_error (parser, "expected string-literal");
2616       return error_mark_node;
2617     }
2618
2619   /* Try to avoid the overhead of creating and destroying an obstack
2620      for the common case of just one string.  */
2621   if (!cp_parser_is_string_literal
2622       (cp_lexer_peek_nth_token (parser->lexer, 2)))
2623     {
2624       cp_lexer_consume_token (parser->lexer);
2625
2626       str.text = (const unsigned char *)TREE_STRING_POINTER (tok->value);
2627       str.len = TREE_STRING_LENGTH (tok->value);
2628       count = 1;
2629       if (tok->type == CPP_WSTRING)
2630         wide = true;
2631
2632       strs = &str;
2633     }
2634   else
2635     {
2636       gcc_obstack_init (&str_ob);
2637       count = 0;
2638
2639       do
2640         {
2641           cp_lexer_consume_token (parser->lexer);
2642           count++;
2643           str.text = (unsigned char *)TREE_STRING_POINTER (tok->value);
2644           str.len = TREE_STRING_LENGTH (tok->value);
2645           if (tok->type == CPP_WSTRING)
2646             wide = true;
2647
2648           obstack_grow (&str_ob, &str, sizeof (cpp_string));
2649
2650           tok = cp_lexer_peek_token (parser->lexer);
2651         }
2652       while (cp_parser_is_string_literal (tok));
2653
2654       strs = (cpp_string *) obstack_finish (&str_ob);
2655     }
2656
2657   if (wide && !wide_ok)
2658     {
2659       cp_parser_error (parser, "a wide string is invalid in this context");
2660       wide = false;
2661     }
2662
2663   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
2664       (parse_in, strs, count, &istr, wide))
2665     {
2666       value = build_string (istr.len, (char *)istr.text);
2667       free ((void *)istr.text);
2668
2669       TREE_TYPE (value) = wide ? wchar_array_type_node : char_array_type_node;
2670       value = fix_string_type (value);
2671     }
2672   else
2673     /* cpp_interpret_string has issued an error.  */
2674     value = error_mark_node;
2675
2676   if (count > 1)
2677     obstack_free (&str_ob, 0);
2678
2679   return value;
2680 }
2681
2682
2683 /* Basic concepts [gram.basic]  */
2684
2685 /* Parse a translation-unit.
2686
2687    translation-unit:
2688      declaration-seq [opt]
2689
2690    Returns TRUE if all went well.  */
2691
2692 static bool
2693 cp_parser_translation_unit (cp_parser* parser)
2694 {
2695   /* The address of the first non-permanent object on the declarator
2696      obstack.  */
2697   static void *declarator_obstack_base;
2698
2699   bool success;
2700
2701   /* Create the declarator obstack, if necessary.  */
2702   if (!cp_error_declarator)
2703     {
2704       gcc_obstack_init (&declarator_obstack);
2705       /* Create the error declarator.  */
2706       cp_error_declarator = make_declarator (cdk_error);
2707       /* Create the empty parameter list.  */
2708       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
2709       /* Remember where the base of the declarator obstack lies.  */
2710       declarator_obstack_base = obstack_next_free (&declarator_obstack);
2711     }
2712
2713   cp_parser_declaration_seq_opt (parser);
2714   
2715   /* If there are no tokens left then all went well.  */
2716   if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
2717     {
2718       /* Get rid of the token array; we don't need it any more.  */
2719       cp_lexer_destroy (parser->lexer);
2720       parser->lexer = NULL;
2721       
2722       /* This file might have been a context that's implicitly extern
2723          "C".  If so, pop the lang context.  (Only relevant for PCH.) */
2724       if (parser->implicit_extern_c)
2725         {
2726           pop_lang_context ();
2727           parser->implicit_extern_c = false;
2728         }
2729       
2730       /* Finish up.  */
2731       finish_translation_unit ();
2732       
2733       success = true;
2734     }
2735   else
2736     {
2737       cp_parser_error (parser, "expected declaration");
2738       success = false;
2739     }
2740   
2741   /* Make sure the declarator obstack was fully cleaned up.  */
2742   gcc_assert (obstack_next_free (&declarator_obstack)
2743               == declarator_obstack_base);
2744
2745   /* All went well.  */
2746   return success;
2747 }
2748
2749 /* Expressions [gram.expr] */
2750
2751 /* Parse a primary-expression.
2752
2753    primary-expression:
2754      literal
2755      this
2756      ( expression )
2757      id-expression
2758
2759    GNU Extensions:
2760
2761    primary-expression:
2762      ( compound-statement )
2763      __builtin_va_arg ( assignment-expression , type-id )
2764      __builtin_offsetof ( type-id , offsetof-expression )
2765
2766    Objective-C++ Extension:
2767
2768    primary-expression:
2769      objc-expression
2770
2771    literal:
2772      __null
2773
2774    ADDRESS_P is true iff this expression was immediately preceded by
2775    "&" and therefore might denote a pointer-to-member.  CAST_P is true
2776    iff this expression is the target of a cast.  TEMPLATE_ARG_P is
2777    true iff this expression is a template argument.
2778
2779    Returns a representation of the expression.  Upon return, *IDK
2780    indicates what kind of id-expression (if any) was present.  */
2781
2782 static tree
2783 cp_parser_primary_expression (cp_parser *parser,
2784                               bool address_p,
2785                               bool cast_p,
2786                               bool template_arg_p,
2787                               cp_id_kind *idk)
2788 {
2789   cp_token *token;
2790
2791   /* Assume the primary expression is not an id-expression.  */
2792   *idk = CP_ID_KIND_NONE;
2793
2794   /* Peek at the next token.  */
2795   token = cp_lexer_peek_token (parser->lexer);
2796   switch (token->type)
2797     {
2798       /* literal:
2799            integer-literal
2800            character-literal
2801            floating-literal
2802            string-literal
2803            boolean-literal  */
2804     case CPP_CHAR:
2805     case CPP_WCHAR:
2806     case CPP_NUMBER:
2807       token = cp_lexer_consume_token (parser->lexer);
2808       /* Floating-point literals are only allowed in an integral
2809          constant expression if they are cast to an integral or
2810          enumeration type.  */
2811       if (TREE_CODE (token->value) == REAL_CST
2812           && parser->integral_constant_expression_p
2813           && pedantic)
2814         {
2815           /* CAST_P will be set even in invalid code like "int(2.7 +
2816              ...)".   Therefore, we have to check that the next token
2817              is sure to end the cast.  */
2818           if (cast_p)
2819             {
2820               cp_token *next_token;
2821
2822               next_token = cp_lexer_peek_token (parser->lexer);
2823               if (/* The comma at the end of an
2824                      enumerator-definition.  */
2825                   next_token->type != CPP_COMMA
2826                   /* The curly brace at the end of an enum-specifier.  */
2827                   && next_token->type != CPP_CLOSE_BRACE
2828                   /* The end of a statement.  */
2829                   && next_token->type != CPP_SEMICOLON
2830                   /* The end of the cast-expression.  */
2831                   && next_token->type != CPP_CLOSE_PAREN
2832                   /* The end of an array bound.  */
2833                   && next_token->type != CPP_CLOSE_SQUARE
2834                   /* The closing ">" in a template-argument-list.  */
2835                   && (next_token->type != CPP_GREATER
2836                       || parser->greater_than_is_operator_p))
2837                 cast_p = false;
2838             }
2839
2840           /* If we are within a cast, then the constraint that the
2841              cast is to an integral or enumeration type will be
2842              checked at that point.  If we are not within a cast, then
2843              this code is invalid.  */
2844           if (!cast_p)
2845             cp_parser_non_integral_constant_expression
2846               (parser, "floating-point literal");
2847         }
2848       return token->value;
2849
2850     case CPP_STRING:
2851     case CPP_WSTRING:
2852       /* ??? Should wide strings be allowed when parser->translate_strings_p
2853          is false (i.e. in attributes)?  If not, we can kill the third
2854          argument to cp_parser_string_literal.  */
2855       return cp_parser_string_literal (parser,
2856                                        parser->translate_strings_p,
2857                                        true);
2858
2859     case CPP_OPEN_PAREN:
2860       {
2861         tree expr;
2862         bool saved_greater_than_is_operator_p;
2863
2864         /* Consume the `('.  */
2865         cp_lexer_consume_token (parser->lexer);
2866         /* Within a parenthesized expression, a `>' token is always
2867            the greater-than operator.  */
2868         saved_greater_than_is_operator_p
2869           = parser->greater_than_is_operator_p;
2870         parser->greater_than_is_operator_p = true;
2871         /* If we see `( { ' then we are looking at the beginning of
2872            a GNU statement-expression.  */
2873         if (cp_parser_allow_gnu_extensions_p (parser)
2874             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
2875           {
2876             /* Statement-expressions are not allowed by the standard.  */
2877             if (pedantic)
2878               pedwarn ("ISO C++ forbids braced-groups within expressions");
2879
2880             /* And they're not allowed outside of a function-body; you
2881                cannot, for example, write:
2882
2883                  int i = ({ int j = 3; j + 1; });
2884
2885                at class or namespace scope.  */
2886             if (!at_function_scope_p ())
2887               error ("statement-expressions are allowed only inside functions");
2888             /* Start the statement-expression.  */
2889             expr = begin_stmt_expr ();
2890             /* Parse the compound-statement.  */
2891             cp_parser_compound_statement (parser, expr, false);
2892             /* Finish up.  */
2893             expr = finish_stmt_expr (expr, false);
2894           }
2895         else
2896           {
2897             /* Parse the parenthesized expression.  */
2898             expr = cp_parser_expression (parser, cast_p);
2899             /* Let the front end know that this expression was
2900                enclosed in parentheses. This matters in case, for
2901                example, the expression is of the form `A::B', since
2902                `&A::B' might be a pointer-to-member, but `&(A::B)' is
2903                not.  */
2904             finish_parenthesized_expr (expr);
2905           }
2906         /* The `>' token might be the end of a template-id or
2907            template-parameter-list now.  */
2908         parser->greater_than_is_operator_p
2909           = saved_greater_than_is_operator_p;
2910         /* Consume the `)'.  */
2911         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
2912           cp_parser_skip_to_end_of_statement (parser);
2913
2914         return expr;
2915       }
2916
2917     case CPP_KEYWORD:
2918       switch (token->keyword)
2919         {
2920           /* These two are the boolean literals.  */
2921         case RID_TRUE:
2922           cp_lexer_consume_token (parser->lexer);
2923           return boolean_true_node;
2924         case RID_FALSE:
2925           cp_lexer_consume_token (parser->lexer);
2926           return boolean_false_node;
2927
2928           /* The `__null' literal.  */
2929         case RID_NULL:
2930           cp_lexer_consume_token (parser->lexer);
2931           return null_node;
2932
2933           /* Recognize the `this' keyword.  */
2934         case RID_THIS:
2935           cp_lexer_consume_token (parser->lexer);
2936           if (parser->local_variables_forbidden_p)
2937             {
2938               error ("%<this%> may not be used in this context");
2939               return error_mark_node;
2940             }
2941           /* Pointers cannot appear in constant-expressions.  */
2942           if (cp_parser_non_integral_constant_expression (parser,
2943                                                           "`this'"))
2944             return error_mark_node;
2945           return finish_this_expr ();
2946
2947           /* The `operator' keyword can be the beginning of an
2948              id-expression.  */
2949         case RID_OPERATOR:
2950           goto id_expression;
2951
2952         case RID_FUNCTION_NAME:
2953         case RID_PRETTY_FUNCTION_NAME:
2954         case RID_C99_FUNCTION_NAME:
2955           /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
2956              __func__ are the names of variables -- but they are
2957              treated specially.  Therefore, they are handled here,
2958              rather than relying on the generic id-expression logic
2959              below.  Grammatically, these names are id-expressions.
2960
2961              Consume the token.  */
2962           token = cp_lexer_consume_token (parser->lexer);
2963           /* Look up the name.  */
2964           return finish_fname (token->value);
2965
2966         case RID_VA_ARG:
2967           {
2968             tree expression;
2969             tree type;
2970
2971             /* The `__builtin_va_arg' construct is used to handle
2972                `va_arg'.  Consume the `__builtin_va_arg' token.  */
2973             cp_lexer_consume_token (parser->lexer);
2974             /* Look for the opening `('.  */
2975             cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
2976             /* Now, parse the assignment-expression.  */
2977             expression = cp_parser_assignment_expression (parser,
2978                                                           /*cast_p=*/false);
2979             /* Look for the `,'.  */
2980             cp_parser_require (parser, CPP_COMMA, "`,'");
2981             /* Parse the type-id.  */
2982             type = cp_parser_type_id (parser);
2983             /* Look for the closing `)'.  */
2984             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
2985             /* Using `va_arg' in a constant-expression is not
2986                allowed.  */
2987             if (cp_parser_non_integral_constant_expression (parser,
2988                                                             "`va_arg'"))
2989               return error_mark_node;
2990             return build_x_va_arg (expression, type);
2991           }
2992
2993         case RID_OFFSETOF:
2994           return cp_parser_builtin_offsetof (parser);
2995
2996           /* Objective-C++ expressions.  */
2997         case RID_AT_ENCODE:
2998         case RID_AT_PROTOCOL:
2999         case RID_AT_SELECTOR:
3000           return cp_parser_objc_expression (parser);
3001
3002         default:
3003           cp_parser_error (parser, "expected primary-expression");
3004           return error_mark_node;
3005         }
3006
3007       /* An id-expression can start with either an identifier, a
3008          `::' as the beginning of a qualified-id, or the "operator"
3009          keyword.  */
3010     case CPP_NAME:
3011     case CPP_SCOPE:
3012     case CPP_TEMPLATE_ID:
3013     case CPP_NESTED_NAME_SPECIFIER:
3014       {
3015         tree id_expression;
3016         tree decl;
3017         const char *error_msg;
3018         bool template_p;
3019         bool done;
3020
3021       id_expression:
3022         /* Parse the id-expression.  */
3023         id_expression
3024           = cp_parser_id_expression (parser,
3025                                      /*template_keyword_p=*/false,
3026                                      /*check_dependency_p=*/true,
3027                                      &template_p,
3028                                      /*declarator_p=*/false,
3029                                      /*optional_p=*/false);
3030         if (id_expression == error_mark_node)
3031           return error_mark_node;
3032         token = cp_lexer_peek_token (parser->lexer);
3033         done = (token->type != CPP_OPEN_SQUARE
3034                 && token->type != CPP_OPEN_PAREN
3035                 && token->type != CPP_DOT
3036                 && token->type != CPP_DEREF
3037                 && token->type != CPP_PLUS_PLUS
3038                 && token->type != CPP_MINUS_MINUS);
3039         /* If we have a template-id, then no further lookup is
3040            required.  If the template-id was for a template-class, we
3041            will sometimes have a TYPE_DECL at this point.  */
3042         if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
3043                  || TREE_CODE (id_expression) == TYPE_DECL)
3044           decl = id_expression;
3045         /* Look up the name.  */
3046         else
3047           {
3048             tree ambiguous_decls;
3049
3050             decl = cp_parser_lookup_name (parser, id_expression,
3051                                           none_type,
3052                                           template_p,
3053                                           /*is_namespace=*/false,
3054                                           /*check_dependency=*/true,
3055                                           &ambiguous_decls);
3056             /* If the lookup was ambiguous, an error will already have
3057                been issued.  */
3058             if (ambiguous_decls)
3059               return error_mark_node;
3060
3061             /* In Objective-C++, an instance variable (ivar) may be preferred
3062                to whatever cp_parser_lookup_name() found.  */
3063             decl = objc_lookup_ivar (decl, id_expression);
3064
3065             /* If name lookup gives us a SCOPE_REF, then the
3066                qualifying scope was dependent.  */
3067             if (TREE_CODE (decl) == SCOPE_REF)
3068               return decl;
3069             /* Check to see if DECL is a local variable in a context
3070                where that is forbidden.  */
3071             if (parser->local_variables_forbidden_p
3072                 && local_variable_p (decl))
3073               {
3074                 /* It might be that we only found DECL because we are
3075                    trying to be generous with pre-ISO scoping rules.
3076                    For example, consider:
3077
3078                      int i;
3079                      void g() {
3080                        for (int i = 0; i < 10; ++i) {}
3081                        extern void f(int j = i);
3082                      }
3083
3084                    Here, name look up will originally find the out
3085                    of scope `i'.  We need to issue a warning message,
3086                    but then use the global `i'.  */
3087                 decl = check_for_out_of_scope_variable (decl);
3088                 if (local_variable_p (decl))
3089                   {
3090                     error ("local variable %qD may not appear in this context",
3091                            decl);
3092                     return error_mark_node;
3093                   }
3094               }
3095           }
3096
3097         decl = (finish_id_expression 
3098                 (id_expression, decl, parser->scope,
3099                  idk,
3100                  parser->integral_constant_expression_p,
3101                  parser->allow_non_integral_constant_expression_p,
3102                  &parser->non_integral_constant_expression_p,
3103                  template_p, done, address_p,
3104                  template_arg_p,
3105                  &error_msg));
3106         if (error_msg)
3107           cp_parser_error (parser, error_msg);
3108         return decl;
3109       }
3110
3111       /* Anything else is an error.  */
3112     default:
3113       /* ...unless we have an Objective-C++ message or string literal, that is.  */
3114       if (c_dialect_objc ()
3115           && (token->type == CPP_OPEN_SQUARE || token->type == CPP_OBJC_STRING))
3116         return cp_parser_objc_expression (parser);
3117
3118       cp_parser_error (parser, "expected primary-expression");
3119       return error_mark_node;
3120     }
3121 }
3122
3123 /* Parse an id-expression.
3124
3125    id-expression:
3126      unqualified-id
3127      qualified-id
3128
3129    qualified-id:
3130      :: [opt] nested-name-specifier template [opt] unqualified-id
3131      :: identifier
3132      :: operator-function-id
3133      :: template-id
3134
3135    Return a representation of the unqualified portion of the
3136    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
3137    a `::' or nested-name-specifier.
3138
3139    Often, if the id-expression was a qualified-id, the caller will
3140    want to make a SCOPE_REF to represent the qualified-id.  This
3141    function does not do this in order to avoid wastefully creating
3142    SCOPE_REFs when they are not required.
3143
3144    If TEMPLATE_KEYWORD_P is true, then we have just seen the
3145    `template' keyword.
3146
3147    If CHECK_DEPENDENCY_P is false, then names are looked up inside
3148    uninstantiated templates.
3149
3150    If *TEMPLATE_P is non-NULL, it is set to true iff the
3151    `template' keyword is used to explicitly indicate that the entity
3152    named is a template.
3153
3154    If DECLARATOR_P is true, the id-expression is appearing as part of
3155    a declarator, rather than as part of an expression.  */
3156
3157 static tree
3158 cp_parser_id_expression (cp_parser *parser,
3159                          bool template_keyword_p,
3160                          bool check_dependency_p,
3161                          bool *template_p,
3162                          bool declarator_p,
3163                          bool optional_p)
3164 {
3165   bool global_scope_p;
3166   bool nested_name_specifier_p;
3167
3168   /* Assume the `template' keyword was not used.  */
3169   if (template_p)
3170     *template_p = template_keyword_p;
3171
3172   /* Look for the optional `::' operator.  */
3173   global_scope_p
3174     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3175        != NULL_TREE);
3176   /* Look for the optional nested-name-specifier.  */
3177   nested_name_specifier_p
3178     = (cp_parser_nested_name_specifier_opt (parser,
3179                                             /*typename_keyword_p=*/false,
3180                                             check_dependency_p,
3181                                             /*type_p=*/false,
3182                                             declarator_p)
3183        != NULL_TREE);
3184   /* If there is a nested-name-specifier, then we are looking at
3185      the first qualified-id production.  */
3186   if (nested_name_specifier_p)
3187     {
3188       tree saved_scope;
3189       tree saved_object_scope;
3190       tree saved_qualifying_scope;
3191       tree unqualified_id;
3192       bool is_template;
3193
3194       /* See if the next token is the `template' keyword.  */
3195       if (!template_p)
3196         template_p = &is_template;
3197       *template_p = cp_parser_optional_template_keyword (parser);
3198       /* Name lookup we do during the processing of the
3199          unqualified-id might obliterate SCOPE.  */
3200       saved_scope = parser->scope;
3201       saved_object_scope = parser->object_scope;
3202       saved_qualifying_scope = parser->qualifying_scope;
3203       /* Process the final unqualified-id.  */
3204       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3205                                                  check_dependency_p,
3206                                                  declarator_p,
3207                                                  /*optional_p=*/false);
3208       /* Restore the SAVED_SCOPE for our caller.  */
3209       parser->scope = saved_scope;
3210       parser->object_scope = saved_object_scope;
3211       parser->qualifying_scope = saved_qualifying_scope;
3212
3213       return unqualified_id;
3214     }
3215   /* Otherwise, if we are in global scope, then we are looking at one
3216      of the other qualified-id productions.  */
3217   else if (global_scope_p)
3218     {
3219       cp_token *token;
3220       tree id;
3221
3222       /* Peek at the next token.  */
3223       token = cp_lexer_peek_token (parser->lexer);
3224
3225       /* If it's an identifier, and the next token is not a "<", then
3226          we can avoid the template-id case.  This is an optimization
3227          for this common case.  */
3228       if (token->type == CPP_NAME
3229           && !cp_parser_nth_token_starts_template_argument_list_p
3230                (parser, 2))
3231         return cp_parser_identifier (parser);
3232
3233       cp_parser_parse_tentatively (parser);
3234       /* Try a template-id.  */
3235       id = cp_parser_template_id (parser,
3236                                   /*template_keyword_p=*/false,
3237                                   /*check_dependency_p=*/true,
3238                                   declarator_p);
3239       /* If that worked, we're done.  */
3240       if (cp_parser_parse_definitely (parser))
3241         return id;
3242
3243       /* Peek at the next token.  (Changes in the token buffer may
3244          have invalidated the pointer obtained above.)  */
3245       token = cp_lexer_peek_token (parser->lexer);
3246
3247       switch (token->type)
3248         {
3249         case CPP_NAME:
3250           return cp_parser_identifier (parser);
3251
3252         case CPP_KEYWORD:
3253           if (token->keyword == RID_OPERATOR)
3254             return cp_parser_operator_function_id (parser);
3255           /* Fall through.  */
3256
3257         default:
3258           cp_parser_error (parser, "expected id-expression");
3259           return error_mark_node;
3260         }
3261     }
3262   else
3263     return cp_parser_unqualified_id (parser, template_keyword_p,
3264                                      /*check_dependency_p=*/true,
3265                                      declarator_p,
3266                                      optional_p);
3267 }
3268
3269 /* Parse an unqualified-id.
3270
3271    unqualified-id:
3272      identifier
3273      operator-function-id
3274      conversion-function-id
3275      ~ class-name
3276      template-id
3277
3278    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3279    keyword, in a construct like `A::template ...'.
3280
3281    Returns a representation of unqualified-id.  For the `identifier'
3282    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3283    production a BIT_NOT_EXPR is returned; the operand of the
3284    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3285    other productions, see the documentation accompanying the
3286    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3287    names are looked up in uninstantiated templates.  If DECLARATOR_P
3288    is true, the unqualified-id is appearing as part of a declarator,
3289    rather than as part of an expression.  */
3290
3291 static tree
3292 cp_parser_unqualified_id (cp_parser* parser,
3293                           bool template_keyword_p,
3294                           bool check_dependency_p,
3295                           bool declarator_p, 
3296                           bool optional_p)
3297 {
3298   cp_token *token;
3299
3300   /* Peek at the next token.  */
3301   token = cp_lexer_peek_token (parser->lexer);
3302
3303   switch (token->type)
3304     {
3305     case CPP_NAME:
3306       {
3307         tree id;
3308
3309         /* We don't know yet whether or not this will be a
3310            template-id.  */
3311         cp_parser_parse_tentatively (parser);
3312         /* Try a template-id.  */
3313         id = cp_parser_template_id (parser, template_keyword_p,
3314                                     check_dependency_p,
3315                                     declarator_p);
3316         /* If it worked, we're done.  */
3317         if (cp_parser_parse_definitely (parser))
3318           return id;
3319         /* Otherwise, it's an ordinary identifier.  */
3320         return cp_parser_identifier (parser);
3321       }
3322
3323     case CPP_TEMPLATE_ID:
3324       return cp_parser_template_id (parser, template_keyword_p,
3325                                     check_dependency_p,
3326                                     declarator_p);
3327
3328     case CPP_COMPL:
3329       {
3330         tree type_decl;
3331         tree qualifying_scope;
3332         tree object_scope;
3333         tree scope;
3334         bool done;
3335
3336         /* Consume the `~' token.  */
3337         cp_lexer_consume_token (parser->lexer);
3338         /* Parse the class-name.  The standard, as written, seems to
3339            say that:
3340
3341              template <typename T> struct S { ~S (); };
3342              template <typename T> S<T>::~S() {}
3343
3344            is invalid, since `~' must be followed by a class-name, but
3345            `S<T>' is dependent, and so not known to be a class.
3346            That's not right; we need to look in uninstantiated
3347            templates.  A further complication arises from:
3348
3349              template <typename T> void f(T t) {
3350                t.T::~T();
3351              }
3352
3353            Here, it is not possible to look up `T' in the scope of `T'
3354            itself.  We must look in both the current scope, and the
3355            scope of the containing complete expression.
3356
3357            Yet another issue is:
3358
3359              struct S {
3360                int S;
3361                ~S();
3362              };
3363
3364              S::~S() {}
3365
3366            The standard does not seem to say that the `S' in `~S'
3367            should refer to the type `S' and not the data member
3368            `S::S'.  */
3369
3370         /* DR 244 says that we look up the name after the "~" in the
3371            same scope as we looked up the qualifying name.  That idea
3372            isn't fully worked out; it's more complicated than that.  */
3373         scope = parser->scope;
3374         object_scope = parser->object_scope;
3375         qualifying_scope = parser->qualifying_scope;
3376
3377         /* If the name is of the form "X::~X" it's OK.  */
3378         if (scope && TYPE_P (scope)
3379             && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
3380             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3381                 == CPP_OPEN_PAREN)
3382             && (cp_lexer_peek_token (parser->lexer)->value
3383                 == TYPE_IDENTIFIER (scope)))
3384           {
3385             cp_lexer_consume_token (parser->lexer);
3386             return build_nt (BIT_NOT_EXPR, scope);
3387           }
3388
3389         /* If there was an explicit qualification (S::~T), first look
3390            in the scope given by the qualification (i.e., S).  */
3391         done = false;
3392         type_decl = NULL_TREE;
3393         if (scope)
3394           {
3395             cp_parser_parse_tentatively (parser);
3396             type_decl = cp_parser_class_name (parser,
3397                                               /*typename_keyword_p=*/false,
3398                                               /*template_keyword_p=*/false,
3399                                               none_type,
3400                                               /*check_dependency=*/false,
3401                                               /*class_head_p=*/false,
3402                                               declarator_p);
3403             if (cp_parser_parse_definitely (parser))
3404               done = true;
3405           }
3406         /* In "N::S::~S", look in "N" as well.  */
3407         if (!done && scope && qualifying_scope)
3408           {
3409             cp_parser_parse_tentatively (parser);
3410             parser->scope = qualifying_scope;
3411             parser->object_scope = NULL_TREE;
3412             parser->qualifying_scope = NULL_TREE;
3413             type_decl
3414               = cp_parser_class_name (parser,
3415                                       /*typename_keyword_p=*/false,
3416                                       /*template_keyword_p=*/false,
3417                                       none_type,
3418                                       /*check_dependency=*/false,
3419                                       /*class_head_p=*/false,
3420                                       declarator_p);
3421             if (cp_parser_parse_definitely (parser))
3422               done = true;
3423           }
3424         /* In "p->S::~T", look in the scope given by "*p" as well.  */
3425         else if (!done && object_scope)
3426           {
3427             cp_parser_parse_tentatively (parser);
3428             parser->scope = object_scope;
3429             parser->object_scope = NULL_TREE;
3430             parser->qualifying_scope = NULL_TREE;
3431             type_decl
3432               = cp_parser_class_name (parser,
3433                                       /*typename_keyword_p=*/false,
3434                                       /*template_keyword_p=*/false,
3435                                       none_type,
3436                                       /*check_dependency=*/false,
3437                                       /*class_head_p=*/false,
3438                                       declarator_p);
3439             if (cp_parser_parse_definitely (parser))
3440               done = true;
3441           }
3442         /* Look in the surrounding context.  */
3443         if (!done)
3444           {
3445             parser->scope = NULL_TREE;
3446             parser->object_scope = NULL_TREE;
3447             parser->qualifying_scope = NULL_TREE;
3448             type_decl
3449               = cp_parser_class_name (parser,
3450                                       /*typename_keyword_p=*/false,
3451                                       /*template_keyword_p=*/false,
3452                                       none_type,
3453                                       /*check_dependency=*/false,
3454                                       /*class_head_p=*/false,
3455                                       declarator_p);
3456           }
3457         /* If an error occurred, assume that the name of the
3458            destructor is the same as the name of the qualifying
3459            class.  That allows us to keep parsing after running
3460            into ill-formed destructor names.  */
3461         if (type_decl == error_mark_node && scope && TYPE_P (scope))
3462           return build_nt (BIT_NOT_EXPR, scope);
3463         else if (type_decl == error_mark_node)
3464           return error_mark_node;
3465
3466         /* Check that destructor name and scope match.  */
3467         if (declarator_p && scope && !check_dtor_name (scope, type_decl))
3468           {
3469             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3470               error ("declaration of %<~%T%> as member of %qT",
3471                      type_decl, scope);
3472             return error_mark_node;
3473           }
3474
3475         /* [class.dtor]
3476
3477            A typedef-name that names a class shall not be used as the
3478            identifier in the declarator for a destructor declaration.  */
3479         if (declarator_p
3480             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
3481             && !DECL_SELF_REFERENCE_P (type_decl)
3482             && !cp_parser_uncommitted_to_tentative_parse_p (parser))
3483           error ("typedef-name %qD used as destructor declarator",
3484                  type_decl);
3485
3486         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3487       }
3488
3489     case CPP_KEYWORD:
3490       if (token->keyword == RID_OPERATOR)
3491         {
3492           tree id;
3493
3494           /* This could be a template-id, so we try that first.  */
3495           cp_parser_parse_tentatively (parser);
3496           /* Try a template-id.  */
3497           id = cp_parser_template_id (parser, template_keyword_p,
3498                                       /*check_dependency_p=*/true,
3499                                       declarator_p);
3500           /* If that worked, we're done.  */
3501           if (cp_parser_parse_definitely (parser))
3502             return id;
3503           /* We still don't know whether we're looking at an
3504              operator-function-id or a conversion-function-id.  */
3505           cp_parser_parse_tentatively (parser);
3506           /* Try an operator-function-id.  */
3507           id = cp_parser_operator_function_id (parser);
3508           /* If that didn't work, try a conversion-function-id.  */
3509           if (!cp_parser_parse_definitely (parser))
3510             id = cp_parser_conversion_function_id (parser);
3511
3512           return id;
3513         }
3514       /* Fall through.  */
3515
3516     default:
3517       if (optional_p)
3518         return NULL_TREE;
3519       cp_parser_error (parser, "expected unqualified-id");
3520       return error_mark_node;
3521     }
3522 }
3523
3524 /* Parse an (optional) nested-name-specifier.
3525
3526    nested-name-specifier:
3527      class-or-namespace-name :: nested-name-specifier [opt]
3528      class-or-namespace-name :: template nested-name-specifier [opt]
3529
3530    PARSER->SCOPE should be set appropriately before this function is
3531    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
3532    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
3533    in name lookups.
3534
3535    Sets PARSER->SCOPE to the class (TYPE) or namespace
3536    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
3537    it unchanged if there is no nested-name-specifier.  Returns the new
3538    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
3539
3540    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
3541    part of a declaration and/or decl-specifier.  */
3542
3543 static tree
3544 cp_parser_nested_name_specifier_opt (cp_parser *parser,
3545                                      bool typename_keyword_p,
3546                                      bool check_dependency_p,
3547                                      bool type_p,
3548                                      bool is_declaration)
3549 {
3550   bool success = false;
3551   cp_token_position start = 0;
3552   cp_token *token;
3553
3554   /* If the next token corresponds to a nested name specifier, there
3555      is no need to reparse it.  However, if CHECK_DEPENDENCY_P is
3556      false, it may have been true before, in which case something
3557      like `A<X>::B<Y>::C' may have resulted in a nested-name-specifier
3558      of `A<X>::', where it should now be `A<X>::B<Y>::'.  So, when
3559      CHECK_DEPENDENCY_P is false, we have to fall through into the
3560      main loop.  */
3561   if (check_dependency_p
3562       && cp_lexer_next_token_is (parser->lexer, CPP_NESTED_NAME_SPECIFIER))
3563     {
3564       cp_parser_pre_parsed_nested_name_specifier (parser);
3565       return parser->scope;
3566     }
3567
3568   /* Remember where the nested-name-specifier starts.  */
3569   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3570     {
3571       start = cp_lexer_token_position (parser->lexer, false);
3572       push_deferring_access_checks (dk_deferred);
3573     }
3574
3575   while (true)
3576     {
3577       tree new_scope;
3578       tree old_scope;
3579       tree saved_qualifying_scope;
3580       bool template_keyword_p;
3581
3582       /* Spot cases that cannot be the beginning of a
3583          nested-name-specifier.  */
3584       token = cp_lexer_peek_token (parser->lexer);
3585
3586       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
3587          the already parsed nested-name-specifier.  */
3588       if (token->type == CPP_NESTED_NAME_SPECIFIER)
3589         {
3590           /* Grab the nested-name-specifier and continue the loop.  */
3591           cp_parser_pre_parsed_nested_name_specifier (parser);
3592           success = true;
3593           continue;
3594         }
3595
3596       /* Spot cases that cannot be the beginning of a
3597          nested-name-specifier.  On the second and subsequent times
3598          through the loop, we look for the `template' keyword.  */
3599       if (success && token->keyword == RID_TEMPLATE)
3600         ;
3601       /* A template-id can start a nested-name-specifier.  */
3602       else if (token->type == CPP_TEMPLATE_ID)
3603         ;
3604       else
3605         {
3606           /* If the next token is not an identifier, then it is
3607              definitely not a class-or-namespace-name.  */
3608           if (token->type != CPP_NAME)
3609             break;
3610           /* If the following token is neither a `<' (to begin a
3611              template-id), nor a `::', then we are not looking at a
3612              nested-name-specifier.  */
3613           token = cp_lexer_peek_nth_token (parser->lexer, 2);
3614           if (token->type != CPP_SCOPE
3615               && !cp_parser_nth_token_starts_template_argument_list_p
3616                   (parser, 2))
3617             break;
3618         }
3619
3620       /* The nested-name-specifier is optional, so we parse
3621          tentatively.  */
3622       cp_parser_parse_tentatively (parser);
3623
3624       /* Look for the optional `template' keyword, if this isn't the
3625          first time through the loop.  */
3626       if (success)
3627         template_keyword_p = cp_parser_optional_template_keyword (parser);
3628       else
3629         template_keyword_p = false;
3630
3631       /* Save the old scope since the name lookup we are about to do
3632          might destroy it.  */
3633       old_scope = parser->scope;
3634       saved_qualifying_scope = parser->qualifying_scope;
3635       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
3636          look up names in "X<T>::I" in order to determine that "Y" is
3637          a template.  So, if we have a typename at this point, we make
3638          an effort to look through it.  */
3639       if (is_declaration
3640           && !typename_keyword_p
3641           && parser->scope
3642           && TREE_CODE (parser->scope) == TYPENAME_TYPE)
3643         parser->scope = resolve_typename_type (parser->scope,
3644                                                /*only_current_p=*/false);
3645       /* Parse the qualifying entity.  */
3646       new_scope
3647         = cp_parser_class_or_namespace_name (parser,
3648                                              typename_keyword_p,
3649                                              template_keyword_p,
3650                                              check_dependency_p,
3651                                              type_p,
3652                                              is_declaration);
3653       /* Look for the `::' token.  */
3654       cp_parser_require (parser, CPP_SCOPE, "`::'");
3655
3656       /* If we found what we wanted, we keep going; otherwise, we're
3657          done.  */
3658       if (!cp_parser_parse_definitely (parser))
3659         {
3660           bool error_p = false;
3661
3662           /* Restore the OLD_SCOPE since it was valid before the
3663              failed attempt at finding the last
3664              class-or-namespace-name.  */
3665           parser->scope = old_scope;
3666           parser->qualifying_scope = saved_qualifying_scope;
3667           /* If the next token is an identifier, and the one after
3668              that is a `::', then any valid interpretation would have
3669              found a class-or-namespace-name.  */
3670           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
3671                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3672                      == CPP_SCOPE)
3673                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
3674                      != CPP_COMPL))
3675             {
3676               token = cp_lexer_consume_token (parser->lexer);
3677               if (!error_p)
3678                 {
3679                   if (!token->ambiguous_p)
3680                     {
3681                       tree decl;
3682                       tree ambiguous_decls;
3683
3684                       decl = cp_parser_lookup_name (parser, token->value,
3685                                                     none_type,
3686                                                     /*is_template=*/false,
3687                                                     /*is_namespace=*/false,
3688                                                     /*check_dependency=*/true,
3689                                                     &ambiguous_decls);
3690                       if (TREE_CODE (decl) == TEMPLATE_DECL)
3691                         error ("%qD used without template parameters", decl);
3692                       else if (ambiguous_decls)
3693                         {
3694                           error ("reference to %qD is ambiguous", 
3695                                  token->value);
3696                           print_candidates (ambiguous_decls);
3697                           decl = error_mark_node;
3698                         }
3699                       else
3700                         cp_parser_name_lookup_error
3701                           (parser, token->value, decl,
3702                            "is not a class or namespace");
3703                     }
3704                   parser->scope = error_mark_node;
3705                   error_p = true;
3706                   /* Treat this as a successful nested-name-specifier
3707                      due to:
3708
3709                      [basic.lookup.qual]
3710
3711                      If the name found is not a class-name (clause
3712                      _class_) or namespace-name (_namespace.def_), the
3713                      program is ill-formed.  */
3714                   success = true;
3715                 }
3716               cp_lexer_consume_token (parser->lexer);
3717             }
3718           break;
3719         }
3720       /* We've found one valid nested-name-specifier.  */
3721       success = true;
3722       /* Name lookup always gives us a DECL.  */
3723       if (TREE_CODE (new_scope) == TYPE_DECL)
3724         new_scope = TREE_TYPE (new_scope);
3725       /* Uses of "template" must be followed by actual templates.  */
3726       if (template_keyword_p
3727           && !(CLASS_TYPE_P (new_scope)
3728                && ((CLASSTYPE_USE_TEMPLATE (new_scope)
3729                     && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
3730                    || CLASSTYPE_IS_TEMPLATE (new_scope)))
3731           && !(TREE_CODE (new_scope) == TYPENAME_TYPE
3732                && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
3733                    == TEMPLATE_ID_EXPR)))
3734         pedwarn (TYPE_P (new_scope)
3735                  ? "%qT is not a template"
3736                  : "%qD is not a template",
3737                  new_scope);
3738       /* If it is a class scope, try to complete it; we are about to
3739          be looking up names inside the class.  */
3740       if (TYPE_P (new_scope)
3741           /* Since checking types for dependency can be expensive,
3742              avoid doing it if the type is already complete.  */
3743           && !COMPLETE_TYPE_P (new_scope)
3744           /* Do not try to complete dependent types.  */
3745           && !dependent_type_p (new_scope))
3746         new_scope = complete_type (new_scope);
3747       /* Make sure we look in the right scope the next time through
3748          the loop.  */
3749       parser->scope = new_scope;
3750     }
3751
3752   /* If parsing tentatively, replace the sequence of tokens that makes
3753      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
3754      token.  That way, should we re-parse the token stream, we will
3755      not have to repeat the effort required to do the parse, nor will
3756      we issue duplicate error messages.  */
3757   if (success && start)
3758     {
3759       cp_token *token;
3760       tree access_checks;
3761
3762       token = cp_lexer_token_at (parser->lexer, start);
3763       /* Reset the contents of the START token.  */
3764       token->type = CPP_NESTED_NAME_SPECIFIER;
3765       /* Retrieve any deferred checks.  Do not pop this access checks yet
3766          so the memory will not be reclaimed during token replacing below.  */
3767       access_checks = get_deferred_access_checks ();
3768       token->value = build_tree_list (copy_list (access_checks),
3769                                       parser->scope);
3770       TREE_TYPE (token->value) = parser->qualifying_scope;
3771       token->keyword = RID_MAX;
3772
3773       /* Purge all subsequent tokens.  */
3774       cp_lexer_purge_tokens_after (parser->lexer, start);
3775     }
3776   
3777   if (start)
3778     pop_to_parent_deferring_access_checks ();
3779
3780   return success ? parser->scope : NULL_TREE;
3781 }
3782
3783 /* Parse a nested-name-specifier.  See
3784    cp_parser_nested_name_specifier_opt for details.  This function
3785    behaves identically, except that it will an issue an error if no
3786    nested-name-specifier is present.  */
3787
3788 static tree
3789 cp_parser_nested_name_specifier (cp_parser *parser,
3790                                  bool typename_keyword_p,
3791                                  bool check_dependency_p,
3792                                  bool type_p,
3793                                  bool is_declaration)
3794 {
3795   tree scope;
3796
3797   /* Look for the nested-name-specifier.  */
3798   scope = cp_parser_nested_name_specifier_opt (parser,
3799                                                typename_keyword_p,
3800                                                check_dependency_p,
3801                                                type_p,
3802                                                is_declaration);
3803   /* If it was not present, issue an error message.  */
3804   if (!scope)
3805     {
3806       cp_parser_error (parser, "expected nested-name-specifier");
3807       parser->scope = NULL_TREE;
3808     }
3809
3810   return scope;
3811 }
3812
3813 /* Parse a class-or-namespace-name.
3814
3815    class-or-namespace-name:
3816      class-name
3817      namespace-name
3818
3819    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
3820    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
3821    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
3822    TYPE_P is TRUE iff the next name should be taken as a class-name,
3823    even the same name is declared to be another entity in the same
3824    scope.
3825
3826    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
3827    specified by the class-or-namespace-name.  If neither is found the
3828    ERROR_MARK_NODE is returned.  */
3829
3830 static tree
3831 cp_parser_class_or_namespace_name (cp_parser *parser,
3832                                    bool typename_keyword_p,
3833                                    bool template_keyword_p,
3834                                    bool check_dependency_p,
3835                                    bool type_p,
3836                                    bool is_declaration)
3837 {
3838   tree saved_scope;
3839   tree saved_qualifying_scope;
3840   tree saved_object_scope;
3841   tree scope;
3842   bool only_class_p;
3843
3844   /* Before we try to parse the class-name, we must save away the
3845      current PARSER->SCOPE since cp_parser_class_name will destroy
3846      it.  */
3847   saved_scope = parser->scope;
3848   saved_qualifying_scope = parser->qualifying_scope;
3849   saved_object_scope = parser->object_scope;
3850   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
3851      there is no need to look for a namespace-name.  */
3852   only_class_p = template_keyword_p || (saved_scope && TYPE_P (saved_scope));
3853   if (!only_class_p)
3854     cp_parser_parse_tentatively (parser);
3855   scope = cp_parser_class_name (parser,
3856                                 typename_keyword_p,
3857                                 template_keyword_p,
3858                                 type_p ? class_type : none_type,
3859                                 check_dependency_p,
3860                                 /*class_head_p=*/false,
3861                                 is_declaration);
3862   /* If that didn't work, try for a namespace-name.  */
3863   if (!only_class_p && !cp_parser_parse_definitely (parser))
3864     {
3865       /* Restore the saved scope.  */
3866       parser->scope = saved_scope;
3867       parser->qualifying_scope = saved_qualifying_scope;
3868       parser->object_scope = saved_object_scope;
3869       /* If we are not looking at an identifier followed by the scope
3870          resolution operator, then this is not part of a
3871          nested-name-specifier.  (Note that this function is only used
3872          to parse the components of a nested-name-specifier.)  */
3873       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
3874           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
3875         return error_mark_node;
3876       scope = cp_parser_namespace_name (parser);
3877     }
3878
3879   return scope;
3880 }
3881
3882 /* Parse a postfix-expression.
3883
3884    postfix-expression:
3885      primary-expression
3886      postfix-expression [ expression ]
3887      postfix-expression ( expression-list [opt] )
3888      simple-type-specifier ( expression-list [opt] )
3889      typename :: [opt] nested-name-specifier identifier
3890        ( expression-list [opt] )
3891      typename :: [opt] nested-name-specifier template [opt] template-id
3892        ( expression-list [opt] )
3893      postfix-expression . template [opt] id-expression
3894      postfix-expression -> template [opt] id-expression
3895      postfix-expression . pseudo-destructor-name
3896      postfix-expression -> pseudo-destructor-name
3897      postfix-expression ++
3898      postfix-expression --
3899      dynamic_cast < type-id > ( expression )
3900      static_cast < type-id > ( expression )
3901      reinterpret_cast < type-id > ( expression )
3902      const_cast < type-id > ( expression )
3903      typeid ( expression )
3904      typeid ( type-id )
3905
3906    GNU Extension:
3907
3908    postfix-expression:
3909      ( type-id ) { initializer-list , [opt] }
3910
3911    This extension is a GNU version of the C99 compound-literal
3912    construct.  (The C99 grammar uses `type-name' instead of `type-id',
3913    but they are essentially the same concept.)
3914
3915    If ADDRESS_P is true, the postfix expression is the operand of the
3916    `&' operator.  CAST_P is true if this expression is the target of a
3917    cast.
3918
3919    Returns a representation of the expression.  */
3920
3921 static tree
3922 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p)
3923 {
3924   cp_token *token;
3925   enum rid keyword;
3926   cp_id_kind idk = CP_ID_KIND_NONE;
3927   tree postfix_expression = NULL_TREE;
3928
3929   /* Peek at the next token.  */
3930   token = cp_lexer_peek_token (parser->lexer);
3931   /* Some of the productions are determined by keywords.  */
3932   keyword = token->keyword;
3933   switch (keyword)
3934     {
3935     case RID_DYNCAST:
3936     case RID_STATCAST:
3937     case RID_REINTCAST:
3938     case RID_CONSTCAST:
3939       {
3940         tree type;
3941         tree expression;
3942         const char *saved_message;
3943
3944         /* All of these can be handled in the same way from the point
3945            of view of parsing.  Begin by consuming the token
3946            identifying the cast.  */
3947         cp_lexer_consume_token (parser->lexer);
3948
3949         /* New types cannot be defined in the cast.  */
3950         saved_message = parser->type_definition_forbidden_message;
3951         parser->type_definition_forbidden_message
3952           = "types may not be defined in casts";
3953
3954         /* Look for the opening `<'.  */
3955         cp_parser_require (parser, CPP_LESS, "`<'");
3956         /* Parse the type to which we are casting.  */
3957         type = cp_parser_type_id (parser);
3958         /* Look for the closing `>'.  */
3959         cp_parser_require (parser, CPP_GREATER, "`>'");
3960         /* Restore the old message.  */
3961         parser->type_definition_forbidden_message = saved_message;
3962
3963         /* And the expression which is being cast.  */
3964         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
3965         expression = cp_parser_expression (parser, /*cast_p=*/true);
3966         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3967
3968         /* Only type conversions to integral or enumeration types
3969            can be used in constant-expressions.  */
3970         if (parser->integral_constant_expression_p
3971             && !dependent_type_p (type)
3972             && !INTEGRAL_OR_ENUMERATION_TYPE_P (type)
3973             && (cp_parser_non_integral_constant_expression
3974                 (parser,
3975                  "a cast to a type other than an integral or "
3976                  "enumeration type")))
3977           return error_mark_node;
3978
3979         switch (keyword)
3980           {
3981           case RID_DYNCAST:
3982             postfix_expression
3983               = build_dynamic_cast (type, expression);
3984             break;
3985           case RID_STATCAST:
3986             postfix_expression
3987               = build_static_cast (type, expression);
3988             break;
3989           case RID_REINTCAST:
3990             postfix_expression
3991               = build_reinterpret_cast (type, expression);
3992             break;
3993           case RID_CONSTCAST:
3994             postfix_expression
3995               = build_const_cast (type, expression);
3996             break;
3997           default:
3998             gcc_unreachable ();
3999           }
4000       }
4001       break;
4002
4003     case RID_TYPEID:
4004       {
4005         tree type;
4006         const char *saved_message;
4007         bool saved_in_type_id_in_expr_p;
4008
4009         /* Consume the `typeid' token.  */
4010         cp_lexer_consume_token (parser->lexer);
4011         /* Look for the `(' token.  */
4012         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
4013         /* Types cannot be defined in a `typeid' expression.  */
4014         saved_message = parser->type_definition_forbidden_message;
4015         parser->type_definition_forbidden_message
4016           = "types may not be defined in a `typeid\' expression";
4017         /* We can't be sure yet whether we're looking at a type-id or an
4018            expression.  */
4019         cp_parser_parse_tentatively (parser);
4020         /* Try a type-id first.  */
4021         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4022         parser->in_type_id_in_expr_p = true;
4023         type = cp_parser_type_id (parser);
4024         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4025         /* Look for the `)' token.  Otherwise, we can't be sure that
4026            we're not looking at an expression: consider `typeid (int
4027            (3))', for example.  */
4028         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4029         /* If all went well, simply lookup the type-id.  */
4030         if (cp_parser_parse_definitely (parser))
4031           postfix_expression = get_typeid (type);
4032         /* Otherwise, fall back to the expression variant.  */
4033         else
4034           {
4035             tree expression;
4036
4037             /* Look for an expression.  */
4038             expression = cp_parser_expression (parser, /*cast_p=*/false);
4039             /* Compute its typeid.  */
4040             postfix_expression = build_typeid (expression);
4041             /* Look for the `)' token.  */
4042             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4043           }
4044         /* `typeid' may not appear in an integral constant expression.  */
4045         if (cp_parser_non_integral_constant_expression(parser,
4046                                                        "`typeid' operator"))
4047           return error_mark_node;
4048         /* Restore the saved message.  */
4049         parser->type_definition_forbidden_message = saved_message;
4050       }
4051       break;
4052
4053     case RID_TYPENAME:
4054       {
4055         tree type;
4056         /* The syntax permitted here is the same permitted for an
4057            elaborated-type-specifier.  */
4058         type = cp_parser_elaborated_type_specifier (parser,
4059                                                     /*is_friend=*/false,
4060                                                     /*is_declaration=*/false);
4061         postfix_expression = cp_parser_functional_cast (parser, type);
4062       }
4063       break;
4064
4065     default:
4066       {
4067         tree type;
4068
4069         /* If the next thing is a simple-type-specifier, we may be
4070            looking at a functional cast.  We could also be looking at
4071            an id-expression.  So, we try the functional cast, and if
4072            that doesn't work we fall back to the primary-expression.  */
4073         cp_parser_parse_tentatively (parser);
4074         /* Look for the simple-type-specifier.  */
4075         type = cp_parser_simple_type_specifier (parser,
4076                                                 /*decl_specs=*/NULL,
4077                                                 CP_PARSER_FLAGS_NONE);
4078         /* Parse the cast itself.  */
4079         if (!cp_parser_error_occurred (parser))
4080           postfix_expression
4081             = cp_parser_functional_cast (parser, type);
4082         /* If that worked, we're done.  */
4083         if (cp_parser_parse_definitely (parser))
4084           break;
4085
4086         /* If the functional-cast didn't work out, try a
4087            compound-literal.  */
4088         if (cp_parser_allow_gnu_extensions_p (parser)
4089             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4090           {
4091             VEC(constructor_elt,gc) *initializer_list = NULL;
4092             bool saved_in_type_id_in_expr_p;
4093
4094             cp_parser_parse_tentatively (parser);
4095             /* Consume the `('.  */
4096             cp_lexer_consume_token (parser->lexer);
4097             /* Parse the type.  */
4098             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4099             parser->in_type_id_in_expr_p = true;
4100             type = cp_parser_type_id (parser);
4101             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4102             /* Look for the `)'.  */
4103             cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4104             /* Look for the `{'.  */
4105             cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
4106             /* If things aren't going well, there's no need to
4107                keep going.  */
4108             if (!cp_parser_error_occurred (parser))
4109               {
4110                 bool non_constant_p;
4111                 /* Parse the initializer-list.  */
4112                 initializer_list
4113                   = cp_parser_initializer_list (parser, &non_constant_p);
4114                 /* Allow a trailing `,'.  */
4115                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
4116                   cp_lexer_consume_token (parser->lexer);
4117                 /* Look for the final `}'.  */
4118                 cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
4119               }
4120             /* If that worked, we're definitely looking at a
4121                compound-literal expression.  */
4122             if (cp_parser_parse_definitely (parser))
4123               {
4124                 /* Warn the user that a compound literal is not
4125                    allowed in standard C++.  */
4126                 if (pedantic)
4127                   pedwarn ("ISO C++ forbids compound-literals");
4128                 /* Form the representation of the compound-literal.  */
4129                 postfix_expression
4130                   = finish_compound_literal (type, initializer_list);
4131                 break;
4132               }
4133           }
4134
4135         /* It must be a primary-expression.  */
4136         postfix_expression 
4137           = cp_parser_primary_expression (parser, address_p, cast_p, 
4138                                           /*template_arg_p=*/false,
4139                                           &idk);
4140       }
4141       break;
4142     }
4143
4144   /* Keep looping until the postfix-expression is complete.  */
4145   while (true)
4146     {
4147       if (idk == CP_ID_KIND_UNQUALIFIED
4148           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
4149           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
4150         /* It is not a Koenig lookup function call.  */
4151         postfix_expression
4152           = unqualified_name_lookup_error (postfix_expression);
4153
4154       /* Peek at the next token.  */
4155       token = cp_lexer_peek_token (parser->lexer);
4156
4157       switch (token->type)
4158         {
4159         case CPP_OPEN_SQUARE:
4160           postfix_expression
4161             = cp_parser_postfix_open_square_expression (parser,
4162                                                         postfix_expression,
4163                                                         false);
4164           idk = CP_ID_KIND_NONE;
4165           break;
4166
4167         case CPP_OPEN_PAREN:
4168           /* postfix-expression ( expression-list [opt] ) */
4169           {
4170             bool koenig_p;
4171             bool is_builtin_constant_p;
4172             bool saved_integral_constant_expression_p = false;
4173             bool saved_non_integral_constant_expression_p = false;
4174             tree args;
4175
4176             is_builtin_constant_p
4177               = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
4178             if (is_builtin_constant_p)
4179               {
4180                 /* The whole point of __builtin_constant_p is to allow
4181                    non-constant expressions to appear as arguments.  */
4182                 saved_integral_constant_expression_p
4183                   = parser->integral_constant_expression_p;
4184                 saved_non_integral_constant_expression_p
4185                   = parser->non_integral_constant_expression_p;
4186                 parser->integral_constant_expression_p = false;
4187               }
4188             args = (cp_parser_parenthesized_expression_list
4189                     (parser, /*is_attribute_list=*/false,
4190                      /*cast_p=*/false,
4191                      /*non_constant_p=*/NULL));
4192             if (is_builtin_constant_p)
4193               {
4194                 parser->integral_constant_expression_p
4195                   = saved_integral_constant_expression_p;
4196                 parser->non_integral_constant_expression_p
4197                   = saved_non_integral_constant_expression_p;
4198               }
4199
4200             if (args == error_mark_node)
4201               {
4202                 postfix_expression = error_mark_node;
4203                 break;
4204               }
4205
4206             /* Function calls are not permitted in
4207                constant-expressions.  */
4208             if (! builtin_valid_in_constant_expr_p (postfix_expression)
4209                 && cp_parser_non_integral_constant_expression (parser,
4210                                                                "a function call"))
4211               {
4212                 postfix_expression = error_mark_node;
4213                 break;
4214               }
4215
4216             koenig_p = false;
4217             if (idk == CP_ID_KIND_UNQUALIFIED)
4218               {
4219                 if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
4220                   {
4221                     if (args)
4222                       {
4223                         koenig_p = true;
4224                         postfix_expression
4225                           = perform_koenig_lookup (postfix_expression, args);
4226                       }
4227                     else
4228                       postfix_expression
4229                         = unqualified_fn_lookup_error (postfix_expression);
4230                   }
4231                 /* We do not perform argument-dependent lookup if
4232                    normal lookup finds a non-function, in accordance
4233                    with the expected resolution of DR 218.  */
4234                 else if (args && is_overloaded_fn (postfix_expression))
4235                   {
4236                     tree fn = get_first_fn (postfix_expression);
4237
4238                     if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4239                       fn = OVL_CURRENT (TREE_OPERAND (fn, 0));
4240
4241                     /* Only do argument dependent lookup if regular
4242                        lookup does not find a set of member functions.
4243                        [basic.lookup.koenig]/2a  */
4244                     if (!DECL_FUNCTION_MEMBER_P (fn))
4245                       {
4246                         koenig_p = true;
4247                         postfix_expression
4248                           = perform_koenig_lookup (postfix_expression, args);
4249                       }
4250                   }
4251               }
4252
4253             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
4254               {
4255                 tree instance = TREE_OPERAND (postfix_expression, 0);
4256                 tree fn = TREE_OPERAND (postfix_expression, 1);
4257
4258                 if (processing_template_decl
4259                     && (type_dependent_expression_p (instance)
4260                         || (!BASELINK_P (fn)
4261                             && TREE_CODE (fn) != FIELD_DECL)
4262                         || type_dependent_expression_p (fn)
4263                         || any_type_dependent_arguments_p (args)))
4264                   {
4265                     postfix_expression
4266                       = build_min_nt (CALL_EXPR, postfix_expression,
4267                                       args, NULL_TREE);
4268                     break;
4269                   }
4270
4271                 if (BASELINK_P (fn))
4272                   postfix_expression
4273                     = (build_new_method_call
4274                        (instance, fn, args, NULL_TREE,
4275                         (idk == CP_ID_KIND_QUALIFIED
4276                          ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL),
4277                         /*fn_p=*/NULL));
4278                 else
4279                   postfix_expression
4280                     = finish_call_expr (postfix_expression, args,
4281                                         /*disallow_virtual=*/false,
4282                                         /*koenig_p=*/false);
4283               }
4284             else if (TREE_CODE (postfix_expression) == OFFSET_REF
4285                      || TREE_CODE (postfix_expression) == MEMBER_REF
4286                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
4287               postfix_expression = (build_offset_ref_call_from_tree
4288                                     (postfix_expression, args));
4289             else if (idk == CP_ID_KIND_QUALIFIED)
4290               /* A call to a static class member, or a namespace-scope
4291                  function.  */
4292               postfix_expression
4293                 = finish_call_expr (postfix_expression, args,
4294                                     /*disallow_virtual=*/true,
4295                                     koenig_p);
4296             else
4297               /* All other function calls.  */
4298               postfix_expression
4299                 = finish_call_expr (postfix_expression, args,
4300                                     /*disallow_virtual=*/false,
4301                                     koenig_p);
4302
4303             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
4304             idk = CP_ID_KIND_NONE;
4305           }
4306           break;
4307
4308         case CPP_DOT:
4309         case CPP_DEREF:
4310           /* postfix-expression . template [opt] id-expression
4311              postfix-expression . pseudo-destructor-name
4312              postfix-expression -> template [opt] id-expression
4313              postfix-expression -> pseudo-destructor-name */
4314
4315           /* Consume the `.' or `->' operator.  */
4316           cp_lexer_consume_token (parser->lexer);
4317
4318           postfix_expression
4319             = cp_parser_postfix_dot_deref_expression (parser, token->type,
4320                                                       postfix_expression,
4321                                                       false, &idk);
4322           break;
4323
4324         case CPP_PLUS_PLUS:
4325           /* postfix-expression ++  */
4326           /* Consume the `++' token.  */
4327           cp_lexer_consume_token (parser->lexer);
4328           /* Generate a representation for the complete expression.  */
4329           postfix_expression
4330             = finish_increment_expr (postfix_expression,
4331                                      POSTINCREMENT_EXPR);
4332           /* Increments may not appear in constant-expressions.  */
4333           if (cp_parser_non_integral_constant_expression (parser,
4334                                                           "an increment"))
4335             postfix_expression = error_mark_node;
4336           idk = CP_ID_KIND_NONE;
4337           break;
4338
4339         case CPP_MINUS_MINUS:
4340           /* postfix-expression -- */
4341           /* Consume the `--' token.  */
4342           cp_lexer_consume_token (parser->lexer);
4343           /* Generate a representation for the complete expression.  */
4344           postfix_expression
4345             = finish_increment_expr (postfix_expression,
4346                                      POSTDECREMENT_EXPR);
4347           /* Decrements may not appear in constant-expressions.  */
4348           if (cp_parser_non_integral_constant_expression (parser,
4349                                                           "a decrement"))
4350             postfix_expression = error_mark_node;
4351           idk = CP_ID_KIND_NONE;
4352           break;
4353
4354         default:
4355           return postfix_expression;
4356         }
4357     }
4358
4359   /* We should never get here.  */
4360   gcc_unreachable ();
4361   return error_mark_node;
4362 }
4363
4364 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4365    by cp_parser_builtin_offsetof.  We're looking for
4366
4367      postfix-expression [ expression ]
4368
4369    FOR_OFFSETOF is set if we're being called in that context, which
4370    changes how we deal with integer constant expressions.  */
4371
4372 static tree
4373 cp_parser_postfix_open_square_expression (cp_parser *parser,
4374                                           tree postfix_expression,
4375                                           bool for_offsetof)
4376 {
4377   tree index;
4378
4379   /* Consume the `[' token.  */
4380   cp_lexer_consume_token (parser->lexer);
4381
4382   /* Parse the index expression.  */
4383   /* ??? For offsetof, there is a question of what to allow here.  If
4384      offsetof is not being used in an integral constant expression context,
4385      then we *could* get the right answer by computing the value at runtime.
4386      If we are in an integral constant expression context, then we might
4387      could accept any constant expression; hard to say without analysis.
4388      Rather than open the barn door too wide right away, allow only integer
4389      constant expressions here.  */
4390   if (for_offsetof)
4391     index = cp_parser_constant_expression (parser, false, NULL);
4392   else
4393     index = cp_parser_expression (parser, /*cast_p=*/false);
4394
4395   /* Look for the closing `]'.  */
4396   cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
4397
4398   /* Build the ARRAY_REF.  */
4399   postfix_expression = grok_array_decl (postfix_expression, index);
4400
4401   /* When not doing offsetof, array references are not permitted in
4402      constant-expressions.  */
4403   if (!for_offsetof
4404       && (cp_parser_non_integral_constant_expression
4405           (parser, "an array reference")))
4406     postfix_expression = error_mark_node;
4407
4408   return postfix_expression;
4409 }
4410
4411 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4412    by cp_parser_builtin_offsetof.  We're looking for
4413
4414      postfix-expression . template [opt] id-expression
4415      postfix-expression . pseudo-destructor-name
4416      postfix-expression -> template [opt] id-expression
4417      postfix-expression -> pseudo-destructor-name
4418
4419    FOR_OFFSETOF is set if we're being called in that context.  That sorta
4420    limits what of the above we'll actually accept, but nevermind.
4421    TOKEN_TYPE is the "." or "->" token, which will already have been
4422    removed from the stream.  */
4423
4424 static tree
4425 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
4426                                         enum cpp_ttype token_type,
4427                                         tree postfix_expression,
4428                                         bool for_offsetof, cp_id_kind *idk)
4429 {
4430   tree name;
4431   bool dependent_p;
4432   bool pseudo_destructor_p;
4433   tree scope = NULL_TREE;
4434
4435   /* If this is a `->' operator, dereference the pointer.  */
4436   if (token_type == CPP_DEREF)
4437     postfix_expression = build_x_arrow (postfix_expression);
4438   /* Check to see whether or not the expression is type-dependent.  */
4439   dependent_p = type_dependent_expression_p (postfix_expression);
4440   /* The identifier following the `->' or `.' is not qualified.  */
4441   parser->scope = NULL_TREE;
4442   parser->qualifying_scope = NULL_TREE;
4443   parser->object_scope = NULL_TREE;
4444   *idk = CP_ID_KIND_NONE;
4445   /* Enter the scope corresponding to the type of the object
4446      given by the POSTFIX_EXPRESSION.  */
4447   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
4448     {
4449       scope = TREE_TYPE (postfix_expression);
4450       /* According to the standard, no expression should ever have
4451          reference type.  Unfortunately, we do not currently match
4452          the standard in this respect in that our internal representation
4453          of an expression may have reference type even when the standard
4454          says it does not.  Therefore, we have to manually obtain the
4455          underlying type here.  */
4456       scope = non_reference (scope);
4457       /* The type of the POSTFIX_EXPRESSION must be complete.  */
4458       if (scope == unknown_type_node)
4459         {
4460           error ("%qE does not have class type", postfix_expression);
4461           scope = NULL_TREE;
4462         }
4463       else
4464         scope = complete_type_or_else (scope, NULL_TREE);
4465       /* Let the name lookup machinery know that we are processing a
4466          class member access expression.  */
4467       parser->context->object_type = scope;
4468       /* If something went wrong, we want to be able to discern that case,
4469          as opposed to the case where there was no SCOPE due to the type
4470          of expression being dependent.  */
4471       if (!scope)
4472         scope = error_mark_node;
4473       /* If the SCOPE was erroneous, make the various semantic analysis
4474          functions exit quickly -- and without issuing additional error
4475          messages.  */
4476       if (scope == error_mark_node)
4477         postfix_expression = error_mark_node;
4478     }
4479
4480   /* Assume this expression is not a pseudo-destructor access.  */
4481   pseudo_destructor_p = false;
4482
4483   /* If the SCOPE is a scalar type, then, if this is a valid program,
4484      we must be looking at a pseudo-destructor-name.  */
4485   if (scope && SCALAR_TYPE_P (scope))
4486     {
4487       tree s;
4488       tree type;
4489
4490       cp_parser_parse_tentatively (parser);
4491       /* Parse the pseudo-destructor-name.  */
4492       s = NULL_TREE;
4493       cp_parser_pseudo_destructor_name (parser, &s, &type);
4494       if (cp_parser_parse_definitely (parser))
4495         {
4496           pseudo_destructor_p = true;
4497           postfix_expression
4498             = finish_pseudo_destructor_expr (postfix_expression,
4499                                              s, TREE_TYPE (type));
4500         }
4501     }
4502
4503   if (!pseudo_destructor_p)
4504     {
4505       /* If the SCOPE is not a scalar type, we are looking at an
4506          ordinary class member access expression, rather than a
4507          pseudo-destructor-name.  */
4508       bool template_p;
4509       /* Parse the id-expression.  */
4510       name = (cp_parser_id_expression 
4511               (parser, 
4512                cp_parser_optional_template_keyword (parser),
4513                /*check_dependency_p=*/true,
4514                &template_p,
4515                /*declarator_p=*/false,
4516                /*optional_p=*/false));
4517       /* In general, build a SCOPE_REF if the member name is qualified.
4518          However, if the name was not dependent and has already been
4519          resolved; there is no need to build the SCOPE_REF.  For example;
4520
4521              struct X { void f(); };
4522              template <typename T> void f(T* t) { t->X::f(); }
4523
4524          Even though "t" is dependent, "X::f" is not and has been resolved
4525          to a BASELINK; there is no need to include scope information.  */
4526
4527       /* But we do need to remember that there was an explicit scope for
4528          virtual function calls.  */
4529       if (parser->scope)
4530         *idk = CP_ID_KIND_QUALIFIED;
4531
4532       /* If the name is a template-id that names a type, we will get a
4533          TYPE_DECL here.  That is invalid code.  */
4534       if (TREE_CODE (name) == TYPE_DECL)
4535         {
4536           error ("invalid use of %qD", name);
4537           postfix_expression = error_mark_node;
4538         }
4539       else
4540         {
4541           if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
4542             {
4543               name = build_qualified_name (/*type=*/NULL_TREE,
4544                                            parser->scope,
4545                                            name,
4546                                            template_p);
4547               parser->scope = NULL_TREE;
4548               parser->qualifying_scope = NULL_TREE;
4549               parser->object_scope = NULL_TREE;
4550             }
4551           if (scope && name && BASELINK_P (name))
4552             adjust_result_of_qualified_name_lookup
4553               (name, BINFO_TYPE (BASELINK_BINFO (name)), scope);
4554           postfix_expression
4555             = finish_class_member_access_expr (postfix_expression, name,
4556                                                template_p);
4557         }
4558     }
4559
4560   /* We no longer need to look up names in the scope of the object on
4561      the left-hand side of the `.' or `->' operator.  */
4562   parser->context->object_type = NULL_TREE;
4563
4564   /* Outside of offsetof, these operators may not appear in
4565      constant-expressions.  */
4566   if (!for_offsetof
4567       && (cp_parser_non_integral_constant_expression
4568           (parser, token_type == CPP_DEREF ? "'->'" : "`.'")))
4569     postfix_expression = error_mark_node;
4570
4571   return postfix_expression;
4572 }
4573
4574 /* Parse a parenthesized expression-list.
4575
4576    expression-list:
4577      assignment-expression
4578      expression-list, assignment-expression
4579
4580    attribute-list:
4581      expression-list
4582      identifier
4583      identifier, expression-list
4584
4585    CAST_P is true if this expression is the target of a cast.
4586
4587    Returns a TREE_LIST.  The TREE_VALUE of each node is a
4588    representation of an assignment-expression.  Note that a TREE_LIST
4589    is returned even if there is only a single expression in the list.
4590    error_mark_node is returned if the ( and or ) are
4591    missing. NULL_TREE is returned on no expressions. The parentheses
4592    are eaten. IS_ATTRIBUTE_LIST is true if this is really an attribute
4593    list being parsed.  If NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P
4594    indicates whether or not all of the expressions in the list were
4595    constant.  */
4596
4597 static tree
4598 cp_parser_parenthesized_expression_list (cp_parser* parser,
4599                                          bool is_attribute_list,
4600                                          bool cast_p,
4601                                          bool *non_constant_p)
4602 {
4603   tree expression_list = NULL_TREE;
4604   bool fold_expr_p = is_attribute_list;
4605   tree identifier = NULL_TREE;
4606
4607   /* Assume all the expressions will be constant.  */
4608   if (non_constant_p)
4609     *non_constant_p = false;
4610
4611   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
4612     return error_mark_node;
4613
4614   /* Consume expressions until there are no more.  */
4615   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
4616     while (true)
4617       {
4618         tree expr;
4619
4620         /* At the beginning of attribute lists, check to see if the
4621            next token is an identifier.  */
4622         if (is_attribute_list
4623             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
4624           {
4625             cp_token *token;
4626
4627             /* Consume the identifier.  */
4628             token = cp_lexer_consume_token (parser->lexer);
4629             /* Save the identifier.  */
4630             identifier = token->value;
4631           }
4632         else
4633           {
4634             /* Parse the next assignment-expression.  */
4635             if (non_constant_p)
4636               {
4637                 bool expr_non_constant_p;
4638                 expr = (cp_parser_constant_expression
4639                         (parser, /*allow_non_constant_p=*/true,
4640                          &expr_non_constant_p));
4641                 if (expr_non_constant_p)
4642                   *non_constant_p = true;
4643               }
4644             else
4645               expr = cp_parser_assignment_expression (parser, cast_p);
4646
4647             if (fold_expr_p)
4648               expr = fold_non_dependent_expr (expr);
4649
4650              /* Add it to the list.  We add error_mark_node
4651                 expressions to the list, so that we can still tell if
4652                 the correct form for a parenthesized expression-list
4653                 is found. That gives better errors.  */
4654             expression_list = tree_cons (NULL_TREE, expr, expression_list);
4655
4656             if (expr == error_mark_node)
4657               goto skip_comma;
4658           }
4659
4660         /* After the first item, attribute lists look the same as
4661            expression lists.  */
4662         is_attribute_list = false;
4663
4664       get_comma:;
4665         /* If the next token isn't a `,', then we are done.  */
4666         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
4667           break;
4668
4669         /* Otherwise, consume the `,' and keep going.  */
4670         cp_lexer_consume_token (parser->lexer);
4671       }
4672
4673   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
4674     {
4675       int ending;
4676
4677     skip_comma:;
4678       /* We try and resync to an unnested comma, as that will give the
4679          user better diagnostics.  */
4680       ending = cp_parser_skip_to_closing_parenthesis (parser,
4681                                                       /*recovering=*/true,
4682                                                       /*or_comma=*/true,
4683                                                       /*consume_paren=*/true);
4684       if (ending < 0)
4685         goto get_comma;
4686       if (!ending)
4687         return error_mark_node;
4688     }
4689
4690   /* We built up the list in reverse order so we must reverse it now.  */
4691   expression_list = nreverse (expression_list);
4692   if (identifier)
4693     expression_list = tree_cons (NULL_TREE, identifier, expression_list);
4694
4695   return expression_list;
4696 }
4697
4698 /* Parse a pseudo-destructor-name.
4699
4700    pseudo-destructor-name:
4701      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
4702      :: [opt] nested-name-specifier template template-id :: ~ type-name
4703      :: [opt] nested-name-specifier [opt] ~ type-name
4704
4705    If either of the first two productions is used, sets *SCOPE to the
4706    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
4707    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
4708    or ERROR_MARK_NODE if the parse fails.  */
4709
4710 static void
4711 cp_parser_pseudo_destructor_name (cp_parser* parser,
4712                                   tree* scope,
4713                                   tree* type)
4714 {
4715   bool nested_name_specifier_p;
4716
4717   /* Assume that things will not work out.  */
4718   *type = error_mark_node;
4719
4720   /* Look for the optional `::' operator.  */
4721   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
4722   /* Look for the optional nested-name-specifier.  */
4723   nested_name_specifier_p
4724     = (cp_parser_nested_name_specifier_opt (parser,
4725                                             /*typename_keyword_p=*/false,
4726                                             /*check_dependency_p=*/true,
4727                                             /*type_p=*/false,
4728                                             /*is_declaration=*/true)
4729        != NULL_TREE);
4730   /* Now, if we saw a nested-name-specifier, we might be doing the
4731      second production.  */
4732   if (nested_name_specifier_p
4733       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
4734     {
4735       /* Consume the `template' keyword.  */
4736       cp_lexer_consume_token (parser->lexer);
4737       /* Parse the template-id.  */
4738       cp_parser_template_id (parser,
4739                              /*template_keyword_p=*/true,
4740                              /*check_dependency_p=*/false,
4741                              /*is_declaration=*/true);
4742       /* Look for the `::' token.  */
4743       cp_parser_require (parser, CPP_SCOPE, "`::'");
4744     }
4745   /* If the next token is not a `~', then there might be some
4746      additional qualification.  */
4747   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
4748     {
4749       /* Look for the type-name.  */
4750       *scope = TREE_TYPE (cp_parser_type_name (parser));
4751
4752       if (*scope == error_mark_node)
4753         return;
4754
4755       /* If we don't have ::~, then something has gone wrong.  Since
4756          the only caller of this function is looking for something
4757          after `.' or `->' after a scalar type, most likely the
4758          program is trying to get a member of a non-aggregate
4759          type.  */
4760       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE)
4761           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_COMPL)
4762         {
4763           cp_parser_error (parser, "request for member of non-aggregate type");
4764           return;
4765         }
4766
4767       /* Look for the `::' token.  */
4768       cp_parser_require (parser, CPP_SCOPE, "`::'");
4769     }
4770   else
4771     *scope = NULL_TREE;
4772
4773   /* Look for the `~'.  */
4774   cp_parser_require (parser, CPP_COMPL, "`~'");
4775   /* Look for the type-name again.  We are not responsible for
4776      checking that it matches the first type-name.  */
4777   *type = cp_parser_type_name (parser);
4778 }
4779
4780 /* Parse a unary-expression.
4781
4782    unary-expression:
4783      postfix-expression
4784      ++ cast-expression
4785      -- cast-expression
4786      unary-operator cast-expression
4787      sizeof unary-expression
4788      sizeof ( type-id )
4789      new-expression
4790      delete-expression
4791
4792    GNU Extensions:
4793
4794    unary-expression:
4795      __extension__ cast-expression
4796      __alignof__ unary-expression
4797      __alignof__ ( type-id )
4798      __real__ cast-expression
4799      __imag__ cast-expression
4800      && identifier
4801
4802    ADDRESS_P is true iff the unary-expression is appearing as the
4803    operand of the `&' operator.   CAST_P is true if this expression is
4804    the target of a cast.
4805
4806    Returns a representation of the expression.  */
4807
4808 static tree
4809 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p)
4810 {
4811   cp_token *token;
4812   enum tree_code unary_operator;
4813
4814   /* Peek at the next token.  */
4815   token = cp_lexer_peek_token (parser->lexer);
4816   /* Some keywords give away the kind of expression.  */
4817   if (token->type == CPP_KEYWORD)
4818     {
4819       enum rid keyword = token->keyword;
4820
4821       switch (keyword)
4822         {
4823         case RID_ALIGNOF:
4824         case RID_SIZEOF:
4825           {
4826             tree operand;
4827             enum tree_code op;
4828
4829             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
4830             /* Consume the token.  */
4831             cp_lexer_consume_token (parser->lexer);
4832             /* Parse the operand.  */
4833             operand = cp_parser_sizeof_operand (parser, keyword);
4834
4835             if (TYPE_P (operand))
4836               return cxx_sizeof_or_alignof_type (operand, op, true);
4837             else
4838               return cxx_sizeof_or_alignof_expr (operand, op);
4839           }
4840
4841         case RID_NEW:
4842           return cp_parser_new_expression (parser);
4843
4844         case RID_DELETE:
4845           return cp_parser_delete_expression (parser);
4846
4847         case RID_EXTENSION:
4848           {
4849             /* The saved value of the PEDANTIC flag.  */
4850             int saved_pedantic;
4851             tree expr;
4852
4853             /* Save away the PEDANTIC flag.  */
4854             cp_parser_extension_opt (parser, &saved_pedantic);
4855             /* Parse the cast-expression.  */
4856             expr = cp_parser_simple_cast_expression (parser);
4857             /* Restore the PEDANTIC flag.  */
4858             pedantic = saved_pedantic;
4859
4860             return expr;
4861           }
4862
4863         case RID_REALPART:
4864         case RID_IMAGPART:
4865           {
4866             tree expression;
4867
4868             /* Consume the `__real__' or `__imag__' token.  */
4869             cp_lexer_consume_token (parser->lexer);
4870             /* Parse the cast-expression.  */
4871             expression = cp_parser_simple_cast_expression (parser);
4872             /* Create the complete representation.  */
4873             return build_x_unary_op ((keyword == RID_REALPART
4874                                       ? REALPART_EXPR : IMAGPART_EXPR),
4875                                      expression);
4876           }
4877           break;
4878
4879         default:
4880           break;
4881         }
4882     }
4883
4884   /* Look for the `:: new' and `:: delete', which also signal the
4885      beginning of a new-expression, or delete-expression,
4886      respectively.  If the next token is `::', then it might be one of
4887      these.  */
4888   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
4889     {
4890       enum rid keyword;
4891
4892       /* See if the token after the `::' is one of the keywords in
4893          which we're interested.  */
4894       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
4895       /* If it's `new', we have a new-expression.  */
4896       if (keyword == RID_NEW)
4897         return cp_parser_new_expression (parser);
4898       /* Similarly, for `delete'.  */
4899       else if (keyword == RID_DELETE)
4900         return cp_parser_delete_expression (parser);
4901     }
4902
4903   /* Look for a unary operator.  */
4904   unary_operator = cp_parser_unary_operator (token);
4905   /* The `++' and `--' operators can be handled similarly, even though
4906      they are not technically unary-operators in the grammar.  */
4907   if (unary_operator == ERROR_MARK)
4908     {
4909       if (token->type == CPP_PLUS_PLUS)
4910         unary_operator = PREINCREMENT_EXPR;
4911       else if (token->type == CPP_MINUS_MINUS)
4912         unary_operator = PREDECREMENT_EXPR;
4913       /* Handle the GNU address-of-label extension.  */
4914       else if (cp_parser_allow_gnu_extensions_p (parser)
4915                && token->type == CPP_AND_AND)
4916         {
4917           tree identifier;
4918
4919           /* Consume the '&&' token.  */
4920           cp_lexer_consume_token (parser->lexer);
4921           /* Look for the identifier.  */
4922           identifier = cp_parser_identifier (parser);
4923           /* Create an expression representing the address.  */
4924           return finish_label_address_expr (identifier);
4925         }
4926     }
4927   if (unary_operator != ERROR_MARK)
4928     {
4929       tree cast_expression;
4930       tree expression = error_mark_node;
4931       const char *non_constant_p = NULL;
4932
4933       /* Consume the operator token.  */
4934       token = cp_lexer_consume_token (parser->lexer);
4935       /* Parse the cast-expression.  */
4936       cast_expression
4937         = cp_parser_cast_expression (parser,
4938                                      unary_operator == ADDR_EXPR,
4939                                      /*cast_p=*/false);
4940       /* Now, build an appropriate representation.  */
4941       switch (unary_operator)
4942         {
4943         case INDIRECT_REF:
4944           non_constant_p = "`*'";
4945           expression = build_x_indirect_ref (cast_expression, "unary *");
4946           break;
4947
4948         case ADDR_EXPR:
4949           non_constant_p = "`&'";
4950           /* Fall through.  */
4951         case BIT_NOT_EXPR:
4952           expression = build_x_unary_op (unary_operator, cast_expression);
4953           break;
4954
4955         case PREINCREMENT_EXPR:
4956         case PREDECREMENT_EXPR:
4957           non_constant_p = (unary_operator == PREINCREMENT_EXPR
4958                             ? "`++'" : "`--'");
4959           /* Fall through.  */
4960         case UNARY_PLUS_EXPR:
4961         case NEGATE_EXPR:
4962         case TRUTH_NOT_EXPR:
4963           expression = finish_unary_op_expr (unary_operator, cast_expression);
4964           break;
4965
4966         default:
4967           gcc_unreachable ();
4968         }
4969
4970       if (non_constant_p
4971           && cp_parser_non_integral_constant_expression (parser,
4972                                                          non_constant_p))
4973         expression = error_mark_node;
4974
4975       return expression;
4976     }
4977
4978   return cp_parser_postfix_expression (parser, address_p, cast_p);
4979 }
4980
4981 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
4982    unary-operator, the corresponding tree code is returned.  */
4983
4984 static enum tree_code
4985 cp_parser_unary_operator (cp_token* token)
4986 {
4987   switch (token->type)
4988     {
4989     case CPP_MULT:
4990       return INDIRECT_REF;
4991
4992     case CPP_AND:
4993       return ADDR_EXPR;
4994
4995     case CPP_PLUS:
4996       return UNARY_PLUS_EXPR;
4997
4998     case CPP_MINUS:
4999       return NEGATE_EXPR;
5000
5001     case CPP_NOT:
5002       return TRUTH_NOT_EXPR;
5003
5004     case CPP_COMPL:
5005       return BIT_NOT_EXPR;
5006
5007     default:
5008       return ERROR_MARK;
5009     }
5010 }
5011
5012 /* Parse a new-expression.
5013
5014    new-expression:
5015      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
5016      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
5017
5018    Returns a representation of the expression.  */
5019
5020 static tree
5021 cp_parser_new_expression (cp_parser* parser)
5022 {
5023   bool global_scope_p;
5024   tree placement;
5025   tree type;
5026   tree initializer;
5027   tree nelts;
5028
5029   /* Look for the optional `::' operator.  */
5030   global_scope_p
5031     = (cp_parser_global_scope_opt (parser,
5032                                    /*current_scope_valid_p=*/false)
5033        != NULL_TREE);
5034   /* Look for the `new' operator.  */
5035   cp_parser_require_keyword (parser, RID_NEW, "`new'");
5036   /* There's no easy way to tell a new-placement from the
5037      `( type-id )' construct.  */
5038   cp_parser_parse_tentatively (parser);
5039   /* Look for a new-placement.  */
5040   placement = cp_parser_new_placement (parser);
5041   /* If that didn't work out, there's no new-placement.  */
5042   if (!cp_parser_parse_definitely (parser))
5043     placement = NULL_TREE;
5044
5045   /* If the next token is a `(', then we have a parenthesized
5046      type-id.  */
5047   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5048     {
5049       /* Consume the `('.  */
5050       cp_lexer_consume_token (parser->lexer);
5051       /* Parse the type-id.  */
5052       type = cp_parser_type_id (parser);
5053       /* Look for the closing `)'.  */
5054       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5055       /* There should not be a direct-new-declarator in this production,
5056          but GCC used to allowed this, so we check and emit a sensible error
5057          message for this case.  */
5058       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5059         {
5060           error ("array bound forbidden after parenthesized type-id");
5061           inform ("try removing the parentheses around the type-id");
5062           cp_parser_direct_new_declarator (parser);
5063         }
5064       nelts = NULL_TREE;
5065     }
5066   /* Otherwise, there must be a new-type-id.  */
5067   else
5068     type = cp_parser_new_type_id (parser, &nelts);
5069
5070   /* If the next token is a `(', then we have a new-initializer.  */
5071   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5072     initializer = cp_parser_new_initializer (parser);
5073   else
5074     initializer = NULL_TREE;
5075
5076   /* A new-expression may not appear in an integral constant
5077      expression.  */
5078   if (cp_parser_non_integral_constant_expression (parser, "`new'"))
5079     return error_mark_node;
5080
5081   /* Create a representation of the new-expression.  */
5082   return build_new (placement, type, nelts, initializer, global_scope_p);
5083 }
5084
5085 /* Parse a new-placement.
5086
5087    new-placement:
5088      ( expression-list )
5089
5090    Returns the same representation as for an expression-list.  */
5091
5092 static tree
5093 cp_parser_new_placement (cp_parser* parser)
5094 {
5095   tree expression_list;
5096
5097   /* Parse the expression-list.  */
5098   expression_list = (cp_parser_parenthesized_expression_list
5099                      (parser, false, /*cast_p=*/false,
5100                       /*non_constant_p=*/NULL));
5101
5102   return expression_list;
5103 }
5104
5105 /* Parse a new-type-id.
5106
5107    new-type-id:
5108      type-specifier-seq new-declarator [opt]
5109
5110    Returns the TYPE allocated.  If the new-type-id indicates an array
5111    type, *NELTS is set to the number of elements in the last array
5112    bound; the TYPE will not include the last array bound.  */
5113
5114 static tree
5115 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
5116 {
5117   cp_decl_specifier_seq type_specifier_seq;
5118   cp_declarator *new_declarator;
5119   cp_declarator *declarator;
5120   cp_declarator *outer_declarator;
5121   const char *saved_message;
5122   tree type;
5123
5124   /* The type-specifier sequence must not contain type definitions.
5125      (It cannot contain declarations of new types either, but if they
5126      are not definitions we will catch that because they are not
5127      complete.)  */
5128   saved_message = parser->type_definition_forbidden_message;
5129   parser->type_definition_forbidden_message
5130     = "types may not be defined in a new-type-id";
5131   /* Parse the type-specifier-seq.  */
5132   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
5133                                 &type_specifier_seq);
5134   /* Restore the old message.  */
5135   parser->type_definition_forbidden_message = saved_message;
5136   /* Parse the new-declarator.  */
5137   new_declarator = cp_parser_new_declarator_opt (parser);
5138
5139   /* Determine the number of elements in the last array dimension, if
5140      any.  */
5141   *nelts = NULL_TREE;
5142   /* Skip down to the last array dimension.  */
5143   declarator = new_declarator;
5144   outer_declarator = NULL;
5145   while (declarator && (declarator->kind == cdk_pointer
5146                         || declarator->kind == cdk_ptrmem))
5147     {
5148       outer_declarator = declarator;
5149       declarator = declarator->declarator;
5150     }
5151   while (declarator
5152          && declarator->kind == cdk_array
5153          && declarator->declarator
5154          && declarator->declarator->kind == cdk_array)
5155     {
5156       outer_declarator = declarator;
5157       declarator = declarator->declarator;
5158     }
5159
5160   if (declarator && declarator->kind == cdk_array)
5161     {
5162       *nelts = declarator->u.array.bounds;
5163       if (*nelts == error_mark_node)
5164         *nelts = integer_one_node;
5165
5166       if (outer_declarator)
5167         outer_declarator->declarator = declarator->declarator;
5168       else
5169         new_declarator = NULL;
5170     }
5171
5172   type = groktypename (&type_specifier_seq, new_declarator);
5173   if (TREE_CODE (type) == ARRAY_TYPE && *nelts == NULL_TREE)
5174     {
5175       *nelts = array_type_nelts_top (type);
5176       type = TREE_TYPE (type);
5177     }
5178   return type;
5179 }
5180
5181 /* Parse an (optional) new-declarator.
5182
5183    new-declarator:
5184      ptr-operator new-declarator [opt]
5185      direct-new-declarator
5186
5187    Returns the declarator.  */
5188
5189 static cp_declarator *
5190 cp_parser_new_declarator_opt (cp_parser* parser)
5191 {
5192   enum tree_code code;
5193   tree type;
5194   cp_cv_quals cv_quals;
5195
5196   /* We don't know if there's a ptr-operator next, or not.  */
5197   cp_parser_parse_tentatively (parser);
5198   /* Look for a ptr-operator.  */
5199   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
5200   /* If that worked, look for more new-declarators.  */
5201   if (cp_parser_parse_definitely (parser))
5202     {
5203       cp_declarator *declarator;
5204
5205       /* Parse another optional declarator.  */
5206       declarator = cp_parser_new_declarator_opt (parser);
5207
5208       /* Create the representation of the declarator.  */
5209       if (type)
5210         declarator = make_ptrmem_declarator (cv_quals, type, declarator);
5211       else if (code == INDIRECT_REF)
5212         declarator = make_pointer_declarator (cv_quals, declarator);
5213       else
5214         declarator = make_reference_declarator (cv_quals, declarator);
5215
5216       return declarator;
5217     }
5218
5219   /* If the next token is a `[', there is a direct-new-declarator.  */
5220   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5221     return cp_parser_direct_new_declarator (parser);
5222
5223   return NULL;
5224 }
5225
5226 /* Parse a direct-new-declarator.
5227
5228    direct-new-declarator:
5229      [ expression ]
5230      direct-new-declarator [constant-expression]
5231
5232    */
5233
5234 static cp_declarator *
5235 cp_parser_direct_new_declarator (cp_parser* parser)
5236 {
5237   cp_declarator *declarator = NULL;
5238
5239   while (true)
5240     {
5241       tree expression;
5242
5243       /* Look for the opening `['.  */
5244       cp_parser_require (parser, CPP_OPEN_SQUARE, "`['");
5245       /* The first expression is not required to be constant.  */
5246       if (!declarator)
5247         {
5248           expression = cp_parser_expression (parser, /*cast_p=*/false);
5249           /* The standard requires that the expression have integral
5250              type.  DR 74 adds enumeration types.  We believe that the
5251              real intent is that these expressions be handled like the
5252              expression in a `switch' condition, which also allows
5253              classes with a single conversion to integral or
5254              enumeration type.  */
5255           if (!processing_template_decl)
5256             {
5257               expression
5258                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5259                                               expression,
5260                                               /*complain=*/true);
5261               if (!expression)
5262                 {
5263                   error ("expression in new-declarator must have integral "
5264                          "or enumeration type");
5265                   expression = error_mark_node;
5266                 }
5267             }
5268         }
5269       /* But all the other expressions must be.  */
5270       else
5271         expression
5272           = cp_parser_constant_expression (parser,
5273                                            /*allow_non_constant=*/false,
5274                                            NULL);
5275       /* Look for the closing `]'.  */
5276       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5277
5278       /* Add this bound to the declarator.  */
5279       declarator = make_array_declarator (declarator, expression);
5280
5281       /* If the next token is not a `[', then there are no more
5282          bounds.  */
5283       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
5284         break;
5285     }
5286
5287   return declarator;
5288 }
5289
5290 /* Parse a new-initializer.
5291
5292    new-initializer:
5293      ( expression-list [opt] )
5294
5295    Returns a representation of the expression-list.  If there is no
5296    expression-list, VOID_ZERO_NODE is returned.  */
5297
5298 static tree
5299 cp_parser_new_initializer (cp_parser* parser)
5300 {
5301   tree expression_list;
5302
5303   expression_list = (cp_parser_parenthesized_expression_list
5304                      (parser, false, /*cast_p=*/false,
5305                       /*non_constant_p=*/NULL));
5306   if (!expression_list)
5307     expression_list = void_zero_node;
5308
5309   return expression_list;
5310 }
5311
5312 /* Parse a delete-expression.
5313
5314    delete-expression:
5315      :: [opt] delete cast-expression
5316      :: [opt] delete [ ] cast-expression
5317
5318    Returns a representation of the expression.  */
5319
5320 static tree
5321 cp_parser_delete_expression (cp_parser* parser)
5322 {
5323   bool global_scope_p;
5324   bool array_p;
5325   tree expression;
5326
5327   /* Look for the optional `::' operator.  */
5328   global_scope_p
5329     = (cp_parser_global_scope_opt (parser,
5330                                    /*current_scope_valid_p=*/false)
5331        != NULL_TREE);
5332   /* Look for the `delete' keyword.  */
5333   cp_parser_require_keyword (parser, RID_DELETE, "`delete'");
5334   /* See if the array syntax is in use.  */
5335   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5336     {
5337       /* Consume the `[' token.  */
5338       cp_lexer_consume_token (parser->lexer);
5339       /* Look for the `]' token.  */
5340       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5341       /* Remember that this is the `[]' construct.  */
5342       array_p = true;
5343     }
5344   else
5345     array_p = false;
5346
5347   /* Parse the cast-expression.  */
5348   expression = cp_parser_simple_cast_expression (parser);
5349
5350   /* A delete-expression may not appear in an integral constant
5351      expression.  */
5352   if (cp_parser_non_integral_constant_expression (parser, "`delete'"))
5353     return error_mark_node;
5354
5355   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p);
5356 }
5357
5358 /* Parse a cast-expression.
5359
5360    cast-expression:
5361      unary-expression
5362      ( type-id ) cast-expression
5363
5364    ADDRESS_P is true iff the unary-expression is appearing as the
5365    operand of the `&' operator.   CAST_P is true if this expression is
5366    the target of a cast.
5367
5368    Returns a representation of the expression.  */
5369
5370 static tree
5371 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p)
5372 {
5373   /* If it's a `(', then we might be looking at a cast.  */
5374   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5375     {
5376       tree type = NULL_TREE;
5377       tree expr = NULL_TREE;
5378       bool compound_literal_p;
5379       const char *saved_message;
5380
5381       /* There's no way to know yet whether or not this is a cast.
5382          For example, `(int (3))' is a unary-expression, while `(int)
5383          3' is a cast.  So, we resort to parsing tentatively.  */
5384       cp_parser_parse_tentatively (parser);
5385       /* Types may not be defined in a cast.  */
5386       saved_message = parser->type_definition_forbidden_message;
5387       parser->type_definition_forbidden_message
5388         = "types may not be defined in casts";
5389       /* Consume the `('.  */
5390       cp_lexer_consume_token (parser->lexer);
5391       /* A very tricky bit is that `(struct S) { 3 }' is a
5392          compound-literal (which we permit in C++ as an extension).
5393          But, that construct is not a cast-expression -- it is a
5394          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
5395          is legal; if the compound-literal were a cast-expression,
5396          you'd need an extra set of parentheses.)  But, if we parse
5397          the type-id, and it happens to be a class-specifier, then we
5398          will commit to the parse at that point, because we cannot
5399          undo the action that is done when creating a new class.  So,
5400          then we cannot back up and do a postfix-expression.
5401
5402          Therefore, we scan ahead to the closing `)', and check to see
5403          if the token after the `)' is a `{'.  If so, we are not
5404          looking at a cast-expression.
5405
5406          Save tokens so that we can put them back.  */
5407       cp_lexer_save_tokens (parser->lexer);
5408       /* Skip tokens until the next token is a closing parenthesis.
5409          If we find the closing `)', and the next token is a `{', then
5410          we are looking at a compound-literal.  */
5411       compound_literal_p
5412         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
5413                                                   /*consume_paren=*/true)
5414            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
5415       /* Roll back the tokens we skipped.  */
5416       cp_lexer_rollback_tokens (parser->lexer);
5417       /* If we were looking at a compound-literal, simulate an error
5418          so that the call to cp_parser_parse_definitely below will
5419          fail.  */
5420       if (compound_literal_p)
5421         cp_parser_simulate_error (parser);
5422       else
5423         {
5424           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5425           parser->in_type_id_in_expr_p = true;
5426           /* Look for the type-id.  */
5427           type = cp_parser_type_id (parser);
5428           /* Look for the closing `)'.  */
5429           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5430           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5431         }
5432
5433       /* Restore the saved message.  */
5434       parser->type_definition_forbidden_message = saved_message;
5435
5436       /* If ok so far, parse the dependent expression. We cannot be
5437          sure it is a cast. Consider `(T ())'.  It is a parenthesized
5438          ctor of T, but looks like a cast to function returning T
5439          without a dependent expression.  */
5440       if (!cp_parser_error_occurred (parser))
5441         expr = cp_parser_cast_expression (parser,
5442                                           /*address_p=*/false,
5443                                           /*cast_p=*/true);
5444
5445       if (cp_parser_parse_definitely (parser))
5446         {
5447           /* Warn about old-style casts, if so requested.  */
5448           if (warn_old_style_cast
5449               && !in_system_header
5450               && !VOID_TYPE_P (type)
5451               && current_lang_name != lang_name_c)
5452             warning (OPT_Wold_style_cast, "use of old-style cast");
5453
5454           /* Only type conversions to integral or enumeration types
5455              can be used in constant-expressions.  */
5456           if (parser->integral_constant_expression_p
5457               && !dependent_type_p (type)
5458               && !INTEGRAL_OR_ENUMERATION_TYPE_P (type)
5459               && (cp_parser_non_integral_constant_expression
5460                   (parser,
5461                    "a cast to a type other than an integral or "
5462                    "enumeration type")))
5463             return error_mark_node;
5464
5465           /* Perform the cast.  */
5466           expr = build_c_cast (type, expr);
5467           return expr;
5468         }
5469     }
5470
5471   /* If we get here, then it's not a cast, so it must be a
5472      unary-expression.  */
5473   return cp_parser_unary_expression (parser, address_p, cast_p);
5474 }
5475
5476 /* Parse a binary expression of the general form:
5477
5478    pm-expression:
5479      cast-expression
5480      pm-expression .* cast-expression
5481      pm-expression ->* cast-expression
5482
5483    multiplicative-expression:
5484      pm-expression
5485      multiplicative-expression * pm-expression
5486      multiplicative-expression / pm-expression
5487      multiplicative-expression % pm-expression
5488
5489    additive-expression:
5490      multiplicative-expression
5491      additive-expression + multiplicative-expression
5492      additive-expression - multiplicative-expression
5493
5494    shift-expression:
5495      additive-expression
5496      shift-expression << additive-expression
5497      shift-expression >> additive-expression
5498
5499    relational-expression:
5500      shift-expression
5501      relational-expression < shift-expression
5502      relational-expression > shift-expression
5503      relational-expression <= shift-expression
5504      relational-expression >= shift-expression
5505
5506   GNU Extension:
5507
5508    relational-expression:
5509      relational-expression <? shift-expression
5510      relational-expression >? shift-expression
5511
5512    equality-expression:
5513      relational-expression
5514      equality-expression == relational-expression
5515      equality-expression != relational-expression
5516
5517    and-expression:
5518      equality-expression
5519      and-expression & equality-expression
5520
5521    exclusive-or-expression:
5522      and-expression
5523      exclusive-or-expression ^ and-expression
5524
5525    inclusive-or-expression:
5526      exclusive-or-expression
5527      inclusive-or-expression | exclusive-or-expression
5528
5529    logical-and-expression:
5530      inclusive-or-expression
5531      logical-and-expression && inclusive-or-expression
5532
5533    logical-or-expression:
5534      logical-and-expression
5535      logical-or-expression || logical-and-expression
5536
5537    All these are implemented with a single function like:
5538
5539    binary-expression:
5540      simple-cast-expression
5541      binary-expression <token> binary-expression
5542
5543    CAST_P is true if this expression is the target of a cast.
5544
5545    The binops_by_token map is used to get the tree codes for each <token> type.
5546    binary-expressions are associated according to a precedence table.  */
5547
5548 #define TOKEN_PRECEDENCE(token) \
5549   ((token->type == CPP_GREATER && !parser->greater_than_is_operator_p) \
5550    ? PREC_NOT_OPERATOR \
5551    : binops_by_token[token->type].prec)
5552
5553 static tree
5554 cp_parser_binary_expression (cp_parser* parser, bool cast_p)
5555 {
5556   cp_parser_expression_stack stack;
5557   cp_parser_expression_stack_entry *sp = &stack[0];
5558   tree lhs, rhs;
5559   cp_token *token;
5560   enum tree_code tree_type;
5561   enum cp_parser_prec prec = PREC_NOT_OPERATOR, new_prec, lookahead_prec;
5562   bool overloaded_p;
5563
5564   /* Parse the first expression.  */
5565   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p);
5566
5567   for (;;)
5568     {
5569       /* Get an operator token.  */
5570       token = cp_lexer_peek_token (parser->lexer);
5571       if (token->type == CPP_MIN || token->type == CPP_MAX)
5572         cp_parser_warn_min_max ();
5573
5574       new_prec = TOKEN_PRECEDENCE (token);
5575
5576       /* Popping an entry off the stack means we completed a subexpression:
5577          - either we found a token which is not an operator (`>' where it is not
5578            an operator, or prec == PREC_NOT_OPERATOR), in which case popping
5579            will happen repeatedly;
5580          - or, we found an operator which has lower priority.  This is the case
5581            where the recursive descent *ascends*, as in `3 * 4 + 5' after
5582            parsing `3 * 4'.  */
5583       if (new_prec <= prec)
5584         {
5585           if (sp == stack)
5586             break;
5587           else
5588             goto pop;
5589         }
5590
5591      get_rhs:
5592       tree_type = binops_by_token[token->type].tree_type;
5593
5594       /* We used the operator token.  */
5595       cp_lexer_consume_token (parser->lexer);
5596
5597       /* Extract another operand.  It may be the RHS of this expression
5598          or the LHS of a new, higher priority expression.  */
5599       rhs = cp_parser_simple_cast_expression (parser);
5600
5601       /* Get another operator token.  Look up its precedence to avoid
5602          building a useless (immediately popped) stack entry for common
5603          cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
5604       token = cp_lexer_peek_token (parser->lexer);
5605       lookahead_prec = TOKEN_PRECEDENCE (token);
5606       if (lookahead_prec > new_prec)
5607         {
5608           /* ... and prepare to parse the RHS of the new, higher priority
5609              expression.  Since precedence levels on the stack are
5610              monotonically increasing, we do not have to care about
5611              stack overflows.  */
5612           sp->prec = prec;
5613           sp->tree_type = tree_type;
5614           sp->lhs = lhs;
5615           sp++;
5616           lhs = rhs;
5617           prec = new_prec;
5618           new_prec = lookahead_prec;
5619           goto get_rhs;
5620
5621          pop:
5622           /* If the stack is not empty, we have parsed into LHS the right side
5623              (`4' in the example above) of an expression we had suspended.
5624              We can use the information on the stack to recover the LHS (`3')
5625              from the stack together with the tree code (`MULT_EXPR'), and
5626              the precedence of the higher level subexpression
5627              (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
5628              which will be used to actually build the additive expression.  */
5629           --sp;
5630           prec = sp->prec;
5631           tree_type = sp->tree_type;
5632           rhs = lhs;
5633           lhs = sp->lhs;
5634         }
5635
5636       overloaded_p = false;
5637       lhs = build_x_binary_op (tree_type, lhs, rhs, &overloaded_p);
5638
5639       /* If the binary operator required the use of an overloaded operator,
5640          then this expression cannot be an integral constant-expression.
5641          An overloaded operator can be used even if both operands are
5642          otherwise permissible in an integral constant-expression if at
5643          least one of the operands is of enumeration type.  */
5644
5645       if (overloaded_p
5646           && (cp_parser_non_integral_constant_expression
5647               (parser, "calls to overloaded operators")))
5648         return error_mark_node;
5649     }
5650
5651   return lhs;
5652 }
5653
5654
5655 /* Parse the `? expression : assignment-expression' part of a
5656    conditional-expression.  The LOGICAL_OR_EXPR is the
5657    logical-or-expression that started the conditional-expression.
5658    Returns a representation of the entire conditional-expression.
5659
5660    This routine is used by cp_parser_assignment_expression.
5661
5662      ? expression : assignment-expression
5663
5664    GNU Extensions:
5665
5666      ? : assignment-expression */
5667
5668 static tree
5669 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
5670 {
5671   tree expr;
5672   tree assignment_expr;
5673
5674   /* Consume the `?' token.  */
5675   cp_lexer_consume_token (parser->lexer);
5676   if (cp_parser_allow_gnu_extensions_p (parser)
5677       && cp_lexer_next_token_is (parser->lexer, CPP_COLON))
5678     /* Implicit true clause.  */
5679     expr = NULL_TREE;
5680   else
5681     /* Parse the expression.  */
5682     expr = cp_parser_expression (parser, /*cast_p=*/false);
5683
5684   /* The next token should be a `:'.  */
5685   cp_parser_require (parser, CPP_COLON, "`:'");
5686   /* Parse the assignment-expression.  */
5687   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false);
5688
5689   /* Build the conditional-expression.  */
5690   return build_x_conditional_expr (logical_or_expr,
5691                                    expr,
5692                                    assignment_expr);
5693 }
5694
5695 /* Parse an assignment-expression.
5696
5697    assignment-expression:
5698      conditional-expression
5699      logical-or-expression assignment-operator assignment_expression
5700      throw-expression
5701
5702    CAST_P is true if this expression is the target of a cast.
5703
5704    Returns a representation for the expression.  */
5705
5706 static tree
5707 cp_parser_assignment_expression (cp_parser* parser, bool cast_p)
5708 {
5709   tree expr;
5710
5711   /* If the next token is the `throw' keyword, then we're looking at
5712      a throw-expression.  */
5713   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
5714     expr = cp_parser_throw_expression (parser);
5715   /* Otherwise, it must be that we are looking at a
5716      logical-or-expression.  */
5717   else
5718     {
5719       /* Parse the binary expressions (logical-or-expression).  */
5720       expr = cp_parser_binary_expression (parser, cast_p);
5721       /* If the next token is a `?' then we're actually looking at a
5722          conditional-expression.  */
5723       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
5724         return cp_parser_question_colon_clause (parser, expr);
5725       else
5726         {
5727           enum tree_code assignment_operator;
5728
5729           /* If it's an assignment-operator, we're using the second
5730              production.  */
5731           assignment_operator
5732             = cp_parser_assignment_operator_opt (parser);
5733           if (assignment_operator != ERROR_MARK)
5734             {
5735               tree rhs;
5736
5737               /* Parse the right-hand side of the assignment.  */
5738               rhs = cp_parser_assignment_expression (parser, cast_p);
5739               /* An assignment may not appear in a
5740                  constant-expression.  */
5741               if (cp_parser_non_integral_constant_expression (parser,
5742                                                               "an assignment"))
5743                 return error_mark_node;
5744               /* Build the assignment expression.  */
5745               expr = build_x_modify_expr (expr,
5746                                           assignment_operator,
5747                                           rhs);
5748             }
5749         }
5750     }
5751
5752   return expr;
5753 }
5754
5755 /* Parse an (optional) assignment-operator.
5756
5757    assignment-operator: one of
5758      = *= /= %= += -= >>= <<= &= ^= |=
5759
5760    GNU Extension:
5761
5762    assignment-operator: one of
5763      <?= >?=
5764
5765    If the next token is an assignment operator, the corresponding tree
5766    code is returned, and the token is consumed.  For example, for
5767    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
5768    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
5769    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
5770    operator, ERROR_MARK is returned.  */
5771
5772 static enum tree_code
5773 cp_parser_assignment_operator_opt (cp_parser* parser)
5774 {
5775   enum tree_code op;
5776   cp_token *token;
5777
5778   /* Peek at the next toen.  */
5779   token = cp_lexer_peek_token (parser->lexer);
5780
5781   switch (token->type)
5782     {
5783     case CPP_EQ:
5784       op = NOP_EXPR;
5785       break;
5786
5787     case CPP_MULT_EQ:
5788       op = MULT_EXPR;
5789       break;
5790
5791     case CPP_DIV_EQ:
5792       op = TRUNC_DIV_EXPR;
5793       break;
5794
5795     case CPP_MOD_EQ:
5796       op = TRUNC_MOD_EXPR;
5797       break;
5798
5799     case CPP_PLUS_EQ:
5800       op = PLUS_EXPR;
5801       break;
5802
5803     case CPP_MINUS_EQ:
5804       op = MINUS_EXPR;
5805       break;
5806
5807     case CPP_RSHIFT_EQ:
5808       op = RSHIFT_EXPR;
5809       break;
5810
5811     case CPP_LSHIFT_EQ:
5812       op = LSHIFT_EXPR;
5813       break;
5814
5815     case CPP_AND_EQ:
5816       op = BIT_AND_EXPR;
5817       break;
5818
5819     case CPP_XOR_EQ:
5820       op = BIT_XOR_EXPR;
5821       break;
5822
5823     case CPP_OR_EQ:
5824       op = BIT_IOR_EXPR;
5825       break;
5826
5827     case CPP_MIN_EQ:
5828       op = MIN_EXPR;
5829       cp_parser_warn_min_max ();
5830       break;
5831
5832     case CPP_MAX_EQ:
5833       op = MAX_EXPR;
5834       cp_parser_warn_min_max ();
5835       break;
5836
5837     default:
5838       /* Nothing else is an assignment operator.  */
5839       op = ERROR_MARK;
5840     }
5841
5842   /* If it was an assignment operator, consume it.  */
5843   if (op != ERROR_MARK)
5844     cp_lexer_consume_token (parser->lexer);
5845
5846   return op;
5847 }
5848
5849 /* Parse an expression.
5850
5851    expression:
5852      assignment-expression
5853      expression , assignment-expression
5854
5855    CAST_P is true if this expression is the target of a cast.
5856
5857    Returns a representation of the expression.  */
5858
5859 static tree
5860 cp_parser_expression (cp_parser* parser, bool cast_p)
5861 {
5862   tree expression = NULL_TREE;
5863
5864   while (true)
5865     {
5866       tree assignment_expression;
5867
5868       /* Parse the next assignment-expression.  */
5869       assignment_expression
5870         = cp_parser_assignment_expression (parser, cast_p);
5871       /* If this is the first assignment-expression, we can just
5872          save it away.  */
5873       if (!expression)
5874         expression = assignment_expression;
5875       else
5876         expression = build_x_compound_expr (expression,
5877                                             assignment_expression);
5878       /* If the next token is not a comma, then we are done with the
5879          expression.  */
5880       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
5881         break;
5882       /* Consume the `,'.  */
5883       cp_lexer_consume_token (parser->lexer);
5884       /* A comma operator cannot appear in a constant-expression.  */
5885       if (cp_parser_non_integral_constant_expression (parser,
5886                                                       "a comma operator"))
5887         expression = error_mark_node;
5888     }
5889
5890   return expression;
5891 }
5892
5893 /* Parse a constant-expression.
5894
5895    constant-expression:
5896      conditional-expression
5897
5898   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
5899   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
5900   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
5901   is false, NON_CONSTANT_P should be NULL.  */
5902
5903 static tree
5904 cp_parser_constant_expression (cp_parser* parser,
5905                                bool allow_non_constant_p,
5906                                bool *non_constant_p)
5907 {
5908   bool saved_integral_constant_expression_p;
5909   bool saved_allow_non_integral_constant_expression_p;
5910   bool saved_non_integral_constant_expression_p;
5911   tree expression;
5912
5913   /* It might seem that we could simply parse the
5914      conditional-expression, and then check to see if it were
5915      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
5916      one that the compiler can figure out is constant, possibly after
5917      doing some simplifications or optimizations.  The standard has a
5918      precise definition of constant-expression, and we must honor
5919      that, even though it is somewhat more restrictive.
5920
5921      For example:
5922
5923        int i[(2, 3)];
5924
5925      is not a legal declaration, because `(2, 3)' is not a
5926      constant-expression.  The `,' operator is forbidden in a
5927      constant-expression.  However, GCC's constant-folding machinery
5928      will fold this operation to an INTEGER_CST for `3'.  */
5929
5930   /* Save the old settings.  */
5931   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
5932   saved_allow_non_integral_constant_expression_p
5933     = parser->allow_non_integral_constant_expression_p;
5934   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
5935   /* We are now parsing a constant-expression.  */
5936   parser->integral_constant_expression_p = true;
5937   parser->allow_non_integral_constant_expression_p = allow_non_constant_p;
5938   parser->non_integral_constant_expression_p = false;
5939   /* Although the grammar says "conditional-expression", we parse an
5940      "assignment-expression", which also permits "throw-expression"
5941      and the use of assignment operators.  In the case that
5942      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
5943      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
5944      actually essential that we look for an assignment-expression.
5945      For example, cp_parser_initializer_clauses uses this function to
5946      determine whether a particular assignment-expression is in fact
5947      constant.  */
5948   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false);
5949   /* Restore the old settings.  */
5950   parser->integral_constant_expression_p
5951     = saved_integral_constant_expression_p;
5952   parser->allow_non_integral_constant_expression_p
5953     = saved_allow_non_integral_constant_expression_p;
5954   if (allow_non_constant_p)
5955     *non_constant_p = parser->non_integral_constant_expression_p;
5956   else if (parser->non_integral_constant_expression_p)
5957     expression = error_mark_node;
5958   parser->non_integral_constant_expression_p
5959     = saved_non_integral_constant_expression_p;
5960
5961   return expression;
5962 }
5963
5964 /* Parse __builtin_offsetof.
5965
5966    offsetof-expression:
5967      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
5968
5969    offsetof-member-designator:
5970      id-expression
5971      | offsetof-member-designator "." id-expression
5972      | offsetof-member-designator "[" expression "]"
5973 */
5974
5975 static tree
5976 cp_parser_builtin_offsetof (cp_parser *parser)
5977 {
5978   int save_ice_p, save_non_ice_p;
5979   tree type, expr;
5980   cp_id_kind dummy;
5981
5982   /* We're about to accept non-integral-constant things, but will
5983      definitely yield an integral constant expression.  Save and
5984      restore these values around our local parsing.  */
5985   save_ice_p = parser->integral_constant_expression_p;
5986   save_non_ice_p = parser->non_integral_constant_expression_p;
5987
5988   /* Consume the "__builtin_offsetof" token.  */
5989   cp_lexer_consume_token (parser->lexer);
5990   /* Consume the opening `('.  */
5991   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
5992   /* Parse the type-id.  */
5993   type = cp_parser_type_id (parser);
5994   /* Look for the `,'.  */
5995   cp_parser_require (parser, CPP_COMMA, "`,'");
5996
5997   /* Build the (type *)null that begins the traditional offsetof macro.  */
5998   expr = build_static_cast (build_pointer_type (type), null_pointer_node);
5999
6000   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
6001   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
6002                                                  true, &dummy);
6003   while (true)
6004     {
6005       cp_token *token = cp_lexer_peek_token (parser->lexer);
6006       switch (token->type)
6007         {
6008         case CPP_OPEN_SQUARE:
6009           /* offsetof-member-designator "[" expression "]" */
6010           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
6011           break;
6012
6013         case CPP_DOT:
6014           /* offsetof-member-designator "." identifier */
6015           cp_lexer_consume_token (parser->lexer);
6016           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT, expr,
6017                                                          true, &dummy);
6018           break;
6019
6020         case CPP_CLOSE_PAREN:
6021           /* Consume the ")" token.  */
6022           cp_lexer_consume_token (parser->lexer);
6023           goto success;
6024
6025         default:
6026           /* Error.  We know the following require will fail, but
6027              that gives the proper error message.  */
6028           cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6029           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
6030           expr = error_mark_node;
6031           goto failure;
6032         }
6033     }
6034
6035  success:
6036   /* If we're processing a template, we can't finish the semantics yet.
6037      Otherwise we can fold the entire expression now.  */
6038   if (processing_template_decl)
6039     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
6040   else
6041     expr = fold_offsetof (expr);
6042
6043  failure:
6044   parser->integral_constant_expression_p = save_ice_p;
6045   parser->non_integral_constant_expression_p = save_non_ice_p;
6046
6047   return expr;
6048 }
6049
6050 /* Statements [gram.stmt.stmt]  */
6051
6052 /* Parse a statement.
6053
6054    statement:
6055      labeled-statement
6056      expression-statement
6057      compound-statement
6058      selection-statement
6059      iteration-statement
6060      jump-statement
6061      declaration-statement
6062      try-block
6063
6064   IN_COMPOUND is true when the statement is nested inside a 
6065   cp_parser_compound_statement; this matters for certain pragmas.  */
6066
6067 static void
6068 cp_parser_statement (cp_parser* parser, tree in_statement_expr,
6069                      bool in_compound)
6070 {
6071   tree statement;
6072   cp_token *token;
6073   location_t statement_location;
6074
6075  restart:
6076   /* There is no statement yet.  */
6077   statement = NULL_TREE;
6078   /* Peek at the next token.  */
6079   token = cp_lexer_peek_token (parser->lexer);
6080   /* Remember the location of the first token in the statement.  */
6081   statement_location = token->location;
6082   /* If this is a keyword, then that will often determine what kind of
6083      statement we have.  */
6084   if (token->type == CPP_KEYWORD)
6085     {
6086       enum rid keyword = token->keyword;
6087
6088       switch (keyword)
6089         {
6090         case RID_CASE:
6091         case RID_DEFAULT:
6092           statement = cp_parser_labeled_statement (parser, in_statement_expr,
6093                                                    in_compound);
6094           break;
6095
6096         case RID_IF:
6097         case RID_SWITCH:
6098           statement = cp_parser_selection_statement (parser);
6099           break;
6100
6101         case RID_WHILE:
6102         case RID_DO:
6103         case RID_FOR:
6104           statement = cp_parser_iteration_statement (parser);
6105           break;
6106
6107         case RID_BREAK:
6108         case RID_CONTINUE:
6109         case RID_RETURN:
6110         case RID_GOTO:
6111           statement = cp_parser_jump_statement (parser);
6112           break;
6113
6114           /* Objective-C++ exception-handling constructs.  */
6115         case RID_AT_TRY:
6116         case RID_AT_CATCH:
6117         case RID_AT_FINALLY:
6118         case RID_AT_SYNCHRONIZED:
6119         case RID_AT_THROW:
6120           statement = cp_parser_objc_statement (parser);
6121           break;
6122
6123         case RID_TRY:
6124           statement = cp_parser_try_block (parser);
6125           break;
6126
6127         default:
6128           /* It might be a keyword like `int' that can start a
6129              declaration-statement.  */
6130           break;
6131         }
6132     }
6133   else if (token->type == CPP_NAME)
6134     {
6135       /* If the next token is a `:', then we are looking at a
6136          labeled-statement.  */
6137       token = cp_lexer_peek_nth_token (parser->lexer, 2);
6138       if (token->type == CPP_COLON)
6139         statement = cp_parser_labeled_statement (parser, in_statement_expr,
6140                                                  in_compound);
6141     }
6142   /* Anything that starts with a `{' must be a compound-statement.  */
6143   else if (token->type == CPP_OPEN_BRACE)
6144     statement = cp_parser_compound_statement (parser, NULL, false);
6145   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
6146      a statement all its own.  */
6147   else if (token->type == CPP_PRAGMA)
6148     {
6149       /* Only certain OpenMP pragmas are attached to statements, and thus
6150          are considered statements themselves.  All others are not.  In
6151          the context of a compound, accept the pragma as a "statement" and
6152          return so that we can check for a close brace.  Otherwise we 
6153          require a real statement and must go back and read one.  */
6154       if (in_compound)
6155         cp_parser_pragma (parser, pragma_compound);
6156       else if (!cp_parser_pragma (parser, pragma_stmt))
6157         goto restart;
6158       return;
6159     }
6160   else if (token->type == CPP_EOF)
6161     {
6162       cp_parser_error (parser, "expected statement");
6163       return;
6164     }
6165
6166   /* Everything else must be a declaration-statement or an
6167      expression-statement.  Try for the declaration-statement
6168      first, unless we are looking at a `;', in which case we know that
6169      we have an expression-statement.  */
6170   if (!statement)
6171     {
6172       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6173         {
6174           cp_parser_parse_tentatively (parser);
6175           /* Try to parse the declaration-statement.  */
6176           cp_parser_declaration_statement (parser);
6177           /* If that worked, we're done.  */
6178           if (cp_parser_parse_definitely (parser))
6179             return;
6180         }
6181       /* Look for an expression-statement instead.  */
6182       statement = cp_parser_expression_statement (parser, in_statement_expr);
6183     }
6184
6185   /* Set the line number for the statement.  */
6186   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
6187     SET_EXPR_LOCATION (statement, statement_location);
6188 }
6189
6190 /* Parse a labeled-statement.
6191
6192    labeled-statement:
6193      identifier : statement
6194      case constant-expression : statement
6195      default : statement
6196
6197    GNU Extension:
6198
6199    labeled-statement:
6200      case constant-expression ... constant-expression : statement
6201
6202    Returns the new CASE_LABEL_EXPR, for a `case' or `default' label.
6203    For an ordinary label, returns a LABEL_EXPR.
6204
6205    IN_COMPOUND is as for cp_parser_statement: true when we're nested
6206    inside a compound.  */
6207
6208 static tree
6209 cp_parser_labeled_statement (cp_parser* parser, tree in_statement_expr,
6210                              bool in_compound)
6211 {
6212   cp_token *token;
6213   tree statement = error_mark_node;
6214
6215   /* The next token should be an identifier.  */
6216   token = cp_lexer_peek_token (parser->lexer);
6217   if (token->type != CPP_NAME
6218       && token->type != CPP_KEYWORD)
6219     {
6220       cp_parser_error (parser, "expected labeled-statement");
6221       return error_mark_node;
6222     }
6223
6224   switch (token->keyword)
6225     {
6226     case RID_CASE:
6227       {
6228         tree expr, expr_hi;
6229         cp_token *ellipsis;
6230
6231         /* Consume the `case' token.  */
6232         cp_lexer_consume_token (parser->lexer);
6233         /* Parse the constant-expression.  */
6234         expr = cp_parser_constant_expression (parser,
6235                                               /*allow_non_constant_p=*/false,
6236                                               NULL);
6237
6238         ellipsis = cp_lexer_peek_token (parser->lexer);
6239         if (ellipsis->type == CPP_ELLIPSIS)
6240           {
6241             /* Consume the `...' token.  */
6242             cp_lexer_consume_token (parser->lexer);
6243             expr_hi =
6244               cp_parser_constant_expression (parser,
6245                                              /*allow_non_constant_p=*/false,
6246                                              NULL);
6247             /* We don't need to emit warnings here, as the common code
6248                will do this for us.  */
6249           }
6250         else
6251           expr_hi = NULL_TREE;
6252
6253         if (parser->in_switch_statement_p)
6254           statement = finish_case_label (expr, expr_hi);
6255         else
6256           error ("case label %qE not within a switch statement", expr);
6257       }
6258       break;
6259
6260     case RID_DEFAULT:
6261       /* Consume the `default' token.  */
6262       cp_lexer_consume_token (parser->lexer);
6263
6264       if (parser->in_switch_statement_p)
6265         statement = finish_case_label (NULL_TREE, NULL_TREE);
6266       else
6267         error ("case label not within a switch statement");
6268       break;
6269
6270     default:
6271       /* Anything else must be an ordinary label.  */
6272       statement = finish_label_stmt (cp_parser_identifier (parser));
6273       break;
6274     }
6275
6276   /* Require the `:' token.  */
6277   cp_parser_require (parser, CPP_COLON, "`:'");
6278   /* Parse the labeled statement.  */
6279   cp_parser_statement (parser, in_statement_expr, in_compound);
6280
6281   /* Return the label, in the case of a `case' or `default' label.  */
6282   return statement;
6283 }
6284
6285 /* Parse an expression-statement.
6286
6287    expression-statement:
6288      expression [opt] ;
6289
6290    Returns the new EXPR_STMT -- or NULL_TREE if the expression
6291    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
6292    indicates whether this expression-statement is part of an
6293    expression statement.  */
6294
6295 static tree
6296 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
6297 {
6298   tree statement = NULL_TREE;
6299
6300   /* If the next token is a ';', then there is no expression
6301      statement.  */
6302   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6303     statement = cp_parser_expression (parser, /*cast_p=*/false);
6304
6305   /* Consume the final `;'.  */
6306   cp_parser_consume_semicolon_at_end_of_statement (parser);
6307
6308   if (in_statement_expr
6309       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
6310     /* This is the final expression statement of a statement
6311        expression.  */
6312     statement = finish_stmt_expr_expr (statement, in_statement_expr);
6313   else if (statement)
6314     statement = finish_expr_stmt (statement);
6315   else
6316     finish_stmt ();
6317
6318   return statement;
6319 }
6320
6321 /* Parse a compound-statement.
6322
6323    compound-statement:
6324      { statement-seq [opt] }
6325
6326    Returns a tree representing the statement.  */
6327
6328 static tree
6329 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
6330                               bool in_try)
6331 {
6332   tree compound_stmt;
6333
6334   /* Consume the `{'.  */
6335   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
6336     return error_mark_node;
6337   /* Begin the compound-statement.  */
6338   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
6339   /* Parse an (optional) statement-seq.  */
6340   cp_parser_statement_seq_opt (parser, in_statement_expr);
6341   /* Finish the compound-statement.  */
6342   finish_compound_stmt (compound_stmt);
6343   /* Consume the `}'.  */
6344   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6345
6346   return compound_stmt;
6347 }
6348
6349 /* Parse an (optional) statement-seq.
6350
6351    statement-seq:
6352      statement
6353      statement-seq [opt] statement  */
6354
6355 static void
6356 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
6357 {
6358   /* Scan statements until there aren't any more.  */
6359   while (true)
6360     {
6361       cp_token *token = cp_lexer_peek_token (parser->lexer);
6362
6363       /* If we're looking at a `}', then we've run out of statements.  */
6364       if (token->type == CPP_CLOSE_BRACE
6365           || token->type == CPP_EOF
6366           || token->type == CPP_PRAGMA_EOL)
6367         break;
6368
6369       /* Parse the statement.  */
6370       cp_parser_statement (parser, in_statement_expr, true);
6371     }
6372 }
6373
6374 /* Parse a selection-statement.
6375
6376    selection-statement:
6377      if ( condition ) statement
6378      if ( condition ) statement else statement
6379      switch ( condition ) statement
6380
6381    Returns the new IF_STMT or SWITCH_STMT.  */
6382
6383 static tree
6384 cp_parser_selection_statement (cp_parser* parser)
6385 {
6386   cp_token *token;
6387   enum rid keyword;
6388
6389   /* Peek at the next token.  */
6390   token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
6391
6392   /* See what kind of keyword it is.  */
6393   keyword = token->keyword;
6394   switch (keyword)
6395     {
6396     case RID_IF:
6397     case RID_SWITCH:
6398       {
6399         tree statement;
6400         tree condition;
6401
6402         /* Look for the `('.  */
6403         if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
6404           {
6405             cp_parser_skip_to_end_of_statement (parser);
6406             return error_mark_node;
6407           }
6408
6409         /* Begin the selection-statement.  */
6410         if (keyword == RID_IF)
6411           statement = begin_if_stmt ();
6412         else
6413           statement = begin_switch_stmt ();
6414
6415         /* Parse the condition.  */
6416         condition = cp_parser_condition (parser);
6417         /* Look for the `)'.  */
6418         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
6419           cp_parser_skip_to_closing_parenthesis (parser, true, false,
6420                                                  /*consume_paren=*/true);
6421
6422         if (keyword == RID_IF)
6423           {
6424             /* Add the condition.  */
6425             finish_if_stmt_cond (condition, statement);
6426
6427             /* Parse the then-clause.  */
6428             cp_parser_implicitly_scoped_statement (parser);
6429             finish_then_clause (statement);
6430
6431             /* If the next token is `else', parse the else-clause.  */
6432             if (cp_lexer_next_token_is_keyword (parser->lexer,
6433                                                 RID_ELSE))
6434               {
6435                 /* Consume the `else' keyword.  */
6436                 cp_lexer_consume_token (parser->lexer);
6437                 begin_else_clause (statement);
6438                 /* Parse the else-clause.  */
6439                 cp_parser_implicitly_scoped_statement (parser);
6440                 finish_else_clause (statement);
6441               }
6442
6443             /* Now we're all done with the if-statement.  */
6444             finish_if_stmt (statement);
6445           }
6446         else
6447           {
6448             bool in_switch_statement_p;
6449             unsigned char in_statement;
6450
6451             /* Add the condition.  */
6452             finish_switch_cond (condition, statement);
6453
6454             /* Parse the body of the switch-statement.  */
6455             in_switch_statement_p = parser->in_switch_statement_p;
6456             in_statement = parser->in_statement;
6457             parser->in_switch_statement_p = true;
6458             parser->in_statement |= IN_SWITCH_STMT;
6459             cp_parser_implicitly_scoped_statement (parser);
6460             parser->in_switch_statement_p = in_switch_statement_p;
6461             parser->in_statement = in_statement;
6462
6463             /* Now we're all done with the switch-statement.  */
6464             finish_switch_stmt (statement);
6465           }
6466
6467         return statement;
6468       }
6469       break;
6470
6471     default:
6472       cp_parser_error (parser, "expected selection-statement");
6473       return error_mark_node;
6474     }
6475 }
6476
6477 /* Parse a condition.
6478
6479    condition:
6480      expression
6481      type-specifier-seq declarator = assignment-expression
6482
6483    GNU Extension:
6484
6485    condition:
6486      type-specifier-seq declarator asm-specification [opt]
6487        attributes [opt] = assignment-expression
6488
6489    Returns the expression that should be tested.  */
6490
6491 static tree
6492 cp_parser_condition (cp_parser* parser)
6493 {
6494   cp_decl_specifier_seq type_specifiers;
6495   const char *saved_message;
6496
6497   /* Try the declaration first.  */
6498   cp_parser_parse_tentatively (parser);
6499   /* New types are not allowed in the type-specifier-seq for a
6500      condition.  */
6501   saved_message = parser->type_definition_forbidden_message;
6502   parser->type_definition_forbidden_message
6503     = "types may not be defined in conditions";
6504   /* Parse the type-specifier-seq.  */
6505   cp_parser_type_specifier_seq (parser, /*is_condition==*/true,
6506                                 &type_specifiers);
6507   /* Restore the saved message.  */
6508   parser->type_definition_forbidden_message = saved_message;
6509   /* If all is well, we might be looking at a declaration.  */
6510   if (!cp_parser_error_occurred (parser))
6511     {
6512       tree decl;
6513       tree asm_specification;
6514       tree attributes;
6515       cp_declarator *declarator;
6516       tree initializer = NULL_TREE;
6517
6518       /* Parse the declarator.  */
6519       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
6520                                          /*ctor_dtor_or_conv_p=*/NULL,
6521                                          /*parenthesized_p=*/NULL,
6522                                          /*member_p=*/false);
6523       /* Parse the attributes.  */
6524       attributes = cp_parser_attributes_opt (parser);
6525       /* Parse the asm-specification.  */
6526       asm_specification = cp_parser_asm_specification_opt (parser);
6527       /* If the next token is not an `=', then we might still be
6528          looking at an expression.  For example:
6529
6530            if (A(a).x)
6531
6532          looks like a decl-specifier-seq and a declarator -- but then
6533          there is no `=', so this is an expression.  */
6534       cp_parser_require (parser, CPP_EQ, "`='");
6535       /* If we did see an `=', then we are looking at a declaration
6536          for sure.  */
6537       if (cp_parser_parse_definitely (parser))
6538         {
6539           tree pushed_scope;
6540           bool non_constant_p;
6541
6542           /* Create the declaration.  */
6543           decl = start_decl (declarator, &type_specifiers,
6544                              /*initialized_p=*/true,
6545                              attributes, /*prefix_attributes=*/NULL_TREE,
6546                              &pushed_scope);
6547           /* Parse the assignment-expression.  */
6548           initializer 
6549             = cp_parser_constant_expression (parser,
6550                                              /*allow_non_constant_p=*/true,
6551                                              &non_constant_p);
6552           if (!non_constant_p)
6553             initializer = fold_non_dependent_expr (initializer);
6554
6555           /* Process the initializer.  */
6556           cp_finish_decl (decl,
6557                           initializer, !non_constant_p, 
6558                           asm_specification,
6559                           LOOKUP_ONLYCONVERTING);
6560
6561           if (pushed_scope)
6562             pop_scope (pushed_scope);
6563
6564           return convert_from_reference (decl);
6565         }
6566     }
6567   /* If we didn't even get past the declarator successfully, we are
6568      definitely not looking at a declaration.  */
6569   else
6570     cp_parser_abort_tentative_parse (parser);
6571
6572   /* Otherwise, we are looking at an expression.  */
6573   return cp_parser_expression (parser, /*cast_p=*/false);
6574 }
6575
6576 /* Parse an iteration-statement.
6577
6578    iteration-statement:
6579      while ( condition ) statement
6580      do statement while ( expression ) ;
6581      for ( for-init-statement condition [opt] ; expression [opt] )
6582        statement
6583
6584    Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
6585
6586 static tree
6587 cp_parser_iteration_statement (cp_parser* parser)
6588 {
6589   cp_token *token;
6590   enum rid keyword;
6591   tree statement;
6592   unsigned char in_statement;
6593
6594   /* Peek at the next token.  */
6595   token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
6596   if (!token)
6597     return error_mark_node;
6598
6599   /* Remember whether or not we are already within an iteration
6600      statement.  */
6601   in_statement = parser->in_statement;
6602
6603   /* See what kind of keyword it is.  */
6604   keyword = token->keyword;
6605   switch (keyword)
6606     {
6607     case RID_WHILE:
6608       {
6609         tree condition;
6610
6611         /* Begin the while-statement.  */
6612         statement = begin_while_stmt ();
6613         /* Look for the `('.  */
6614         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6615         /* Parse the condition.  */
6616         condition = cp_parser_condition (parser);
6617         finish_while_stmt_cond (condition, statement);
6618         /* Look for the `)'.  */
6619         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6620         /* Parse the dependent statement.  */
6621         parser->in_statement = IN_ITERATION_STMT;
6622         cp_parser_already_scoped_statement (parser);
6623         parser->in_statement = in_statement;
6624         /* We're done with the while-statement.  */
6625         finish_while_stmt (statement);
6626       }
6627       break;
6628
6629     case RID_DO:
6630       {
6631         tree expression;
6632
6633         /* Begin the do-statement.  */
6634         statement = begin_do_stmt ();
6635         /* Parse the body of the do-statement.  */
6636         parser->in_statement = IN_ITERATION_STMT;
6637         cp_parser_implicitly_scoped_statement (parser);
6638         parser->in_statement = in_statement;
6639         finish_do_body (statement);
6640         /* Look for the `while' keyword.  */
6641         cp_parser_require_keyword (parser, RID_WHILE, "`while'");
6642         /* Look for the `('.  */
6643         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6644         /* Parse the expression.  */
6645         expression = cp_parser_expression (parser, /*cast_p=*/false);
6646         /* We're done with the do-statement.  */
6647         finish_do_stmt (expression, statement);
6648         /* Look for the `)'.  */
6649         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6650         /* Look for the `;'.  */
6651         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6652       }
6653       break;
6654
6655     case RID_FOR:
6656       {
6657         tree condition = NULL_TREE;
6658         tree expression = NULL_TREE;
6659
6660         /* Begin the for-statement.  */
6661         statement = begin_for_stmt ();
6662         /* Look for the `('.  */
6663         cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6664         /* Parse the initialization.  */
6665         cp_parser_for_init_statement (parser);
6666         finish_for_init_stmt (statement);
6667
6668         /* If there's a condition, process it.  */
6669         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6670           condition = cp_parser_condition (parser);
6671         finish_for_cond (condition, statement);
6672         /* Look for the `;'.  */
6673         cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6674
6675         /* If there's an expression, process it.  */
6676         if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
6677           expression = cp_parser_expression (parser, /*cast_p=*/false);
6678         finish_for_expr (expression, statement);
6679         /* Look for the `)'.  */
6680         cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6681
6682         /* Parse the body of the for-statement.  */
6683         parser->in_statement = IN_ITERATION_STMT;
6684         cp_parser_already_scoped_statement (parser);
6685         parser->in_statement = in_statement;
6686
6687         /* We're done with the for-statement.  */
6688         finish_for_stmt (statement);
6689       }
6690       break;
6691
6692     default:
6693       cp_parser_error (parser, "expected iteration-statement");
6694       statement = error_mark_node;
6695       break;
6696     }
6697
6698   return statement;
6699 }
6700
6701 /* Parse a for-init-statement.
6702
6703    for-init-statement:
6704      expression-statement
6705      simple-declaration  */
6706
6707 static void
6708 cp_parser_for_init_statement (cp_parser* parser)
6709 {
6710   /* If the next token is a `;', then we have an empty
6711      expression-statement.  Grammatically, this is also a
6712      simple-declaration, but an invalid one, because it does not
6713      declare anything.  Therefore, if we did not handle this case
6714      specially, we would issue an error message about an invalid
6715      declaration.  */
6716   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6717     {
6718       /* We're going to speculatively look for a declaration, falling back
6719          to an expression, if necessary.  */
6720       cp_parser_parse_tentatively (parser);
6721       /* Parse the declaration.  */
6722       cp_parser_simple_declaration (parser,
6723                                     /*function_definition_allowed_p=*/false);
6724       /* If the tentative parse failed, then we shall need to look for an
6725          expression-statement.  */
6726       if (cp_parser_parse_definitely (parser))
6727         return;
6728     }
6729
6730   cp_parser_expression_statement (parser, false);
6731 }
6732
6733 /* Parse a jump-statement.
6734
6735    jump-statement:
6736      break ;
6737      continue ;
6738      return expression [opt] ;
6739      goto identifier ;
6740
6741    GNU extension:
6742
6743    jump-statement:
6744      goto * expression ;
6745
6746    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
6747
6748 static tree
6749 cp_parser_jump_statement (cp_parser* parser)
6750 {
6751   tree statement = error_mark_node;
6752   cp_token *token;
6753   enum rid keyword;
6754
6755   /* Peek at the next token.  */
6756   token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
6757   if (!token)
6758     return error_mark_node;
6759
6760   /* See what kind of keyword it is.  */
6761   keyword = token->keyword;
6762   switch (keyword)
6763     {
6764     case RID_BREAK:
6765       switch (parser->in_statement)
6766         {
6767         case 0:
6768           error ("break statement not within loop or switch");
6769           break;
6770         default:
6771           gcc_assert ((parser->in_statement & IN_SWITCH_STMT)
6772                       || parser->in_statement == IN_ITERATION_STMT);
6773           statement = finish_break_stmt ();
6774           break;
6775         case IN_OMP_BLOCK:
6776           error ("invalid exit from OpenMP structured block");
6777           break;
6778         case IN_OMP_FOR:
6779           error ("break statement used with OpenMP for loop");
6780           break;
6781         }
6782       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6783       break;
6784
6785     case RID_CONTINUE:
6786       switch (parser->in_statement & ~IN_SWITCH_STMT)
6787         {
6788         case 0:
6789           error ("continue statement not within a loop");
6790           break;
6791         case IN_ITERATION_STMT:
6792         case IN_OMP_FOR:
6793           statement = finish_continue_stmt ();
6794           break;
6795         case IN_OMP_BLOCK:
6796           error ("invalid exit from OpenMP structured block");
6797           break;
6798         default:
6799           gcc_unreachable ();
6800         }
6801       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6802       break;
6803
6804     case RID_RETURN:
6805       {
6806         tree expr;
6807
6808         /* If the next token is a `;', then there is no
6809            expression.  */
6810         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6811           expr = cp_parser_expression (parser, /*cast_p=*/false);
6812         else
6813           expr = NULL_TREE;
6814         /* Build the return-statement.  */
6815         statement = finish_return_stmt (expr);
6816         /* Look for the final `;'.  */
6817         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6818       }
6819       break;
6820
6821     case RID_GOTO:
6822       /* Create the goto-statement.  */
6823       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
6824         {
6825           /* Issue a warning about this use of a GNU extension.  */
6826           if (pedantic)
6827             pedwarn ("ISO C++ forbids computed gotos");
6828           /* Consume the '*' token.  */
6829           cp_lexer_consume_token (parser->lexer);
6830           /* Parse the dependent expression.  */
6831           finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false));
6832         }
6833       else
6834         finish_goto_stmt (cp_parser_identifier (parser));
6835       /* Look for the final `;'.  */
6836       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6837       break;
6838
6839     default:
6840       cp_parser_error (parser, "expected jump-statement");
6841       break;
6842     }
6843
6844   return statement;
6845 }
6846
6847 /* Parse a declaration-statement.
6848
6849    declaration-statement:
6850      block-declaration  */
6851
6852 static void
6853 cp_parser_declaration_statement (cp_parser* parser)
6854 {
6855   void *p;
6856
6857   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
6858   p = obstack_alloc (&declarator_obstack, 0);
6859
6860  /* Parse the block-declaration.  */
6861   cp_parser_block_declaration (parser, /*statement_p=*/true);
6862
6863   /* Free any declarators allocated.  */
6864   obstack_free (&declarator_obstack, p);
6865
6866   /* Finish off the statement.  */
6867   finish_stmt ();
6868 }
6869
6870 /* Some dependent statements (like `if (cond) statement'), are
6871    implicitly in their own scope.  In other words, if the statement is
6872    a single statement (as opposed to a compound-statement), it is
6873    none-the-less treated as if it were enclosed in braces.  Any
6874    declarations appearing in the dependent statement are out of scope
6875    after control passes that point.  This function parses a statement,
6876    but ensures that is in its own scope, even if it is not a
6877    compound-statement.
6878
6879    Returns the new statement.  */
6880
6881 static tree
6882 cp_parser_implicitly_scoped_statement (cp_parser* parser)
6883 {
6884   tree statement;
6885
6886   /* Mark if () ; with a special NOP_EXPR.  */
6887   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
6888     {
6889       cp_lexer_consume_token (parser->lexer);
6890       statement = add_stmt (build_empty_stmt ());
6891     }
6892   /* if a compound is opened, we simply parse the statement directly.  */
6893   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6894     statement = cp_parser_compound_statement (parser, NULL, false);
6895   /* If the token is not a `{', then we must take special action.  */
6896   else
6897     {
6898       /* Create a compound-statement.  */
6899       statement = begin_compound_stmt (0);
6900       /* Parse the dependent-statement.  */
6901       cp_parser_statement (parser, NULL_TREE, false);
6902       /* Finish the dummy compound-statement.  */
6903       finish_compound_stmt (statement);
6904     }
6905
6906   /* Return the statement.  */
6907   return statement;
6908 }
6909
6910 /* For some dependent statements (like `while (cond) statement'), we
6911    have already created a scope.  Therefore, even if the dependent
6912    statement is a compound-statement, we do not want to create another
6913    scope.  */
6914
6915 static void
6916 cp_parser_already_scoped_statement (cp_parser* parser)
6917 {
6918   /* If the token is a `{', then we must take special action.  */
6919   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
6920     cp_parser_statement (parser, NULL_TREE, false);
6921   else
6922     {
6923       /* Avoid calling cp_parser_compound_statement, so that we
6924          don't create a new scope.  Do everything else by hand.  */
6925       cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
6926       cp_parser_statement_seq_opt (parser, NULL_TREE);
6927       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6928     }
6929 }
6930
6931 /* Declarations [gram.dcl.dcl] */
6932
6933 /* Parse an optional declaration-sequence.
6934
6935    declaration-seq:
6936      declaration
6937      declaration-seq declaration  */
6938
6939 static void
6940 cp_parser_declaration_seq_opt (cp_parser* parser)
6941 {
6942   while (true)
6943     {
6944       cp_token *token;
6945
6946       token = cp_lexer_peek_token (parser->lexer);
6947
6948       if (token->type == CPP_CLOSE_BRACE
6949           || token->type == CPP_EOF
6950           || token->type == CPP_PRAGMA_EOL)
6951         break;
6952
6953       if (token->type == CPP_SEMICOLON)
6954         {
6955           /* A declaration consisting of a single semicolon is
6956              invalid.  Allow it unless we're being pedantic.  */
6957           cp_lexer_consume_token (parser->lexer);
6958           if (pedantic && !in_system_header)
6959             pedwarn ("extra %<;%>");
6960           continue;
6961         }
6962
6963       /* If we're entering or exiting a region that's implicitly
6964          extern "C", modify the lang context appropriately.  */
6965       if (!parser->implicit_extern_c && token->implicit_extern_c)
6966         {
6967           push_lang_context (lang_name_c);
6968           parser->implicit_extern_c = true;
6969         }
6970       else if (parser->implicit_extern_c && !token->implicit_extern_c)
6971         {
6972           pop_lang_context ();
6973           parser->implicit_extern_c = false;
6974         }
6975
6976       if (token->type == CPP_PRAGMA)
6977         {
6978           /* A top-level declaration can consist solely of a #pragma.
6979              A nested declaration cannot, so this is done here and not
6980              in cp_parser_declaration.  (A #pragma at block scope is
6981              handled in cp_parser_statement.)  */
6982           cp_parser_pragma (parser, pragma_external);
6983           continue;
6984         }
6985
6986       /* Parse the declaration itself.  */
6987       cp_parser_declaration (parser);
6988     }
6989 }
6990
6991 /* Parse a declaration.
6992
6993    declaration:
6994      block-declaration
6995      function-definition
6996      template-declaration
6997      explicit-instantiation
6998      explicit-specialization
6999      linkage-specification
7000      namespace-definition
7001
7002    GNU extension:
7003
7004    declaration:
7005       __extension__ declaration */
7006
7007 static void
7008 cp_parser_declaration (cp_parser* parser)
7009 {
7010   cp_token token1;
7011   cp_token token2;
7012   int saved_pedantic;
7013   void *p;
7014
7015   /* Check for the `__extension__' keyword.  */
7016   if (cp_parser_extension_opt (parser, &saved_pedantic))
7017     {
7018       /* Parse the qualified declaration.  */
7019       cp_parser_declaration (parser);
7020       /* Restore the PEDANTIC flag.  */
7021       pedantic = saved_pedantic;
7022
7023       return;
7024     }
7025
7026   /* Try to figure out what kind of declaration is present.  */
7027   token1 = *cp_lexer_peek_token (parser->lexer);
7028
7029   if (token1.type != CPP_EOF)
7030     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
7031   else
7032     {
7033       token2.type = CPP_EOF;
7034       token2.keyword = RID_MAX;
7035     }
7036
7037   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7038   p = obstack_alloc (&declarator_obstack, 0);
7039
7040   /* If the next token is `extern' and the following token is a string
7041      literal, then we have a linkage specification.  */
7042   if (token1.keyword == RID_EXTERN
7043       && cp_parser_is_string_literal (&token2))
7044     cp_parser_linkage_specification (parser);
7045   /* If the next token is `template', then we have either a template
7046      declaration, an explicit instantiation, or an explicit
7047      specialization.  */
7048   else if (token1.keyword == RID_TEMPLATE)
7049     {
7050       /* `template <>' indicates a template specialization.  */
7051       if (token2.type == CPP_LESS
7052           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
7053         cp_parser_explicit_specialization (parser);
7054       /* `template <' indicates a template declaration.  */
7055       else if (token2.type == CPP_LESS)
7056         cp_parser_template_declaration (parser, /*member_p=*/false);
7057       /* Anything else must be an explicit instantiation.  */
7058       else
7059         cp_parser_explicit_instantiation (parser);
7060     }
7061   /* If the next token is `export', then we have a template
7062      declaration.  */
7063   else if (token1.keyword == RID_EXPORT)
7064     cp_parser_template_declaration (parser, /*member_p=*/false);
7065   /* If the next token is `extern', 'static' or 'inline' and the one
7066      after that is `template', we have a GNU extended explicit
7067      instantiation directive.  */
7068   else if (cp_parser_allow_gnu_extensions_p (parser)
7069            && (token1.keyword == RID_EXTERN
7070                || token1.keyword == RID_STATIC
7071                || token1.keyword == RID_INLINE)
7072            && token2.keyword == RID_TEMPLATE)
7073     cp_parser_explicit_instantiation (parser);
7074   /* If the next token is `namespace', check for a named or unnamed
7075      namespace definition.  */
7076   else if (token1.keyword == RID_NAMESPACE
7077            && (/* A named namespace definition.  */
7078                (token2.type == CPP_NAME
7079                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
7080                     != CPP_EQ))
7081                /* An unnamed namespace definition.  */
7082                || token2.type == CPP_OPEN_BRACE
7083                || token2.keyword == RID_ATTRIBUTE))
7084     cp_parser_namespace_definition (parser);
7085   /* Objective-C++ declaration/definition.  */
7086   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
7087     cp_parser_objc_declaration (parser);
7088   /* We must have either a block declaration or a function
7089      definition.  */
7090   else
7091     /* Try to parse a block-declaration, or a function-definition.  */
7092     cp_parser_block_declaration (parser, /*statement_p=*/false);
7093
7094   /* Free any declarators allocated.  */
7095   obstack_free (&declarator_obstack, p);
7096 }
7097
7098 /* Parse a block-declaration.
7099
7100    block-declaration:
7101      simple-declaration
7102      asm-definition
7103      namespace-alias-definition
7104      using-declaration
7105      using-directive
7106
7107    GNU Extension:
7108
7109    block-declaration:
7110      __extension__ block-declaration
7111      label-declaration
7112
7113    If STATEMENT_P is TRUE, then this block-declaration is occurring as
7114    part of a declaration-statement.  */
7115
7116 static void
7117 cp_parser_block_declaration (cp_parser *parser,
7118                              bool      statement_p)
7119 {
7120   cp_token *token1;
7121   int saved_pedantic;
7122
7123   /* Check for the `__extension__' keyword.  */
7124   if (cp_parser_extension_opt (parser, &saved_pedantic))
7125     {
7126       /* Parse the qualified declaration.  */
7127       cp_parser_block_declaration (parser, statement_p);
7128       /* Restore the PEDANTIC flag.  */
7129       pedantic = saved_pedantic;
7130
7131       return;
7132     }
7133
7134   /* Peek at the next token to figure out which kind of declaration is
7135      present.  */
7136   token1 = cp_lexer_peek_token (parser->lexer);
7137
7138   /* If the next keyword is `asm', we have an asm-definition.  */
7139   if (token1->keyword == RID_ASM)
7140     {
7141       if (statement_p)
7142         cp_parser_commit_to_tentative_parse (parser);
7143       cp_parser_asm_definition (parser);
7144     }
7145   /* If the next keyword is `namespace', we have a
7146      namespace-alias-definition.  */
7147   else if (token1->keyword == RID_NAMESPACE)
7148     cp_parser_namespace_alias_definition (parser);
7149   /* If the next keyword is `using', we have either a
7150      using-declaration or a using-directive.  */
7151   else if (token1->keyword == RID_USING)
7152     {
7153       cp_token *token2;
7154
7155       if (statement_p)
7156         cp_parser_commit_to_tentative_parse (parser);
7157       /* If the token after `using' is `namespace', then we have a
7158          using-directive.  */
7159       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
7160       if (token2->keyword == RID_NAMESPACE)
7161         cp_parser_using_directive (parser);
7162       /* Otherwise, it's a using-declaration.  */
7163       else
7164         cp_parser_using_declaration (parser);
7165     }
7166   /* If the next keyword is `__label__' we have a label declaration.  */
7167   else if (token1->keyword == RID_LABEL)
7168     {
7169       if (statement_p)
7170         cp_parser_commit_to_tentative_parse (parser);
7171       cp_parser_label_declaration (parser);
7172     }
7173   /* Anything else must be a simple-declaration.  */
7174   else
7175     cp_parser_simple_declaration (parser, !statement_p);
7176 }
7177
7178 /* Parse a simple-declaration.
7179
7180    simple-declaration:
7181      decl-specifier-seq [opt] init-declarator-list [opt] ;
7182
7183    init-declarator-list:
7184      init-declarator
7185      init-declarator-list , init-declarator
7186
7187    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
7188    function-definition as a simple-declaration.  */
7189
7190 static void
7191 cp_parser_simple_declaration (cp_parser* parser,
7192                               bool function_definition_allowed_p)
7193 {
7194   cp_decl_specifier_seq decl_specifiers;
7195   int declares_class_or_enum;
7196   bool saw_declarator;
7197
7198   /* Defer access checks until we know what is being declared; the
7199      checks for names appearing in the decl-specifier-seq should be
7200      done as if we were in the scope of the thing being declared.  */
7201   push_deferring_access_checks (dk_deferred);
7202
7203   /* Parse the decl-specifier-seq.  We have to keep track of whether
7204      or not the decl-specifier-seq declares a named class or
7205      enumeration type, since that is the only case in which the
7206      init-declarator-list is allowed to be empty.
7207
7208      [dcl.dcl]
7209
7210      In a simple-declaration, the optional init-declarator-list can be
7211      omitted only when declaring a class or enumeration, that is when
7212      the decl-specifier-seq contains either a class-specifier, an
7213      elaborated-type-specifier, or an enum-specifier.  */
7214   cp_parser_decl_specifier_seq (parser,
7215                                 CP_PARSER_FLAGS_OPTIONAL,
7216                                 &decl_specifiers,
7217                                 &declares_class_or_enum);
7218   /* We no longer need to defer access checks.  */
7219   stop_deferring_access_checks ();
7220
7221   /* In a block scope, a valid declaration must always have a
7222      decl-specifier-seq.  By not trying to parse declarators, we can
7223      resolve the declaration/expression ambiguity more quickly.  */
7224   if (!function_definition_allowed_p
7225       && !decl_specifiers.any_specifiers_p)
7226     {
7227       cp_parser_error (parser, "expected declaration");
7228       goto done;
7229     }
7230
7231   /* If the next two tokens are both identifiers, the code is
7232      erroneous. The usual cause of this situation is code like:
7233
7234        T t;
7235
7236      where "T" should name a type -- but does not.  */
7237   if (!decl_specifiers.type
7238       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
7239     {
7240       /* If parsing tentatively, we should commit; we really are
7241          looking at a declaration.  */
7242       cp_parser_commit_to_tentative_parse (parser);
7243       /* Give up.  */
7244       goto done;
7245     }
7246
7247   /* If we have seen at least one decl-specifier, and the next token
7248      is not a parenthesis, then we must be looking at a declaration.
7249      (After "int (" we might be looking at a functional cast.)  */
7250   if (decl_specifiers.any_specifiers_p
7251       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
7252     cp_parser_commit_to_tentative_parse (parser);
7253
7254   /* Keep going until we hit the `;' at the end of the simple
7255      declaration.  */
7256   saw_declarator = false;
7257   while (cp_lexer_next_token_is_not (parser->lexer,
7258                                      CPP_SEMICOLON))
7259     {
7260       cp_token *token;
7261       bool function_definition_p;
7262       tree decl;
7263
7264       if (saw_declarator)
7265         {
7266           /* If we are processing next declarator, coma is expected */
7267           token = cp_lexer_peek_token (parser->lexer);
7268           gcc_assert (token->type == CPP_COMMA);
7269           cp_lexer_consume_token (parser->lexer);
7270         }
7271       else
7272         saw_declarator = true;
7273
7274       /* Parse the init-declarator.  */
7275       decl = cp_parser_init_declarator (parser, &decl_specifiers,
7276                                         /*checks=*/NULL_TREE,
7277                                         function_definition_allowed_p,
7278                                         /*member_p=*/false,
7279                                         declares_class_or_enum,
7280                                         &function_definition_p);
7281       /* If an error occurred while parsing tentatively, exit quickly.
7282          (That usually happens when in the body of a function; each
7283          statement is treated as a declaration-statement until proven
7284          otherwise.)  */
7285       if (cp_parser_error_occurred (parser))
7286         goto done;
7287       /* Handle function definitions specially.  */
7288       if (function_definition_p)
7289         {
7290           /* If the next token is a `,', then we are probably
7291              processing something like:
7292
7293                void f() {}, *p;
7294
7295              which is erroneous.  */
7296           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
7297             error ("mixing declarations and function-definitions is forbidden");
7298           /* Otherwise, we're done with the list of declarators.  */
7299           else
7300             {
7301               pop_deferring_access_checks ();
7302               return;
7303             }
7304         }
7305       /* The next token should be either a `,' or a `;'.  */
7306       token = cp_lexer_peek_token (parser->lexer);
7307       /* If it's a `,', there are more declarators to come.  */
7308       if (token->type == CPP_COMMA)
7309         /* will be consumed next time around */;
7310       /* If it's a `;', we are done.  */
7311       else if (token->type == CPP_SEMICOLON)
7312         break;
7313       /* Anything else is an error.  */
7314       else
7315         {
7316           /* If we have already issued an error message we don't need
7317              to issue another one.  */
7318           if (decl != error_mark_node
7319               || cp_parser_uncommitted_to_tentative_parse_p (parser))
7320             cp_parser_error (parser, "expected %<,%> or %<;%>");
7321           /* Skip tokens until we reach the end of the statement.  */
7322           cp_parser_skip_to_end_of_statement (parser);
7323           /* If the next token is now a `;', consume it.  */
7324           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7325             cp_lexer_consume_token (parser->lexer);
7326           goto done;
7327         }
7328       /* After the first time around, a function-definition is not
7329          allowed -- even if it was OK at first.  For example:
7330
7331            int i, f() {}
7332
7333          is not valid.  */
7334       function_definition_allowed_p = false;
7335     }
7336
7337   /* Issue an error message if no declarators are present, and the
7338      decl-specifier-seq does not itself declare a class or
7339      enumeration.  */
7340   if (!saw_declarator)
7341     {
7342       if (cp_parser_declares_only_class_p (parser))
7343         shadow_tag (&decl_specifiers);
7344       /* Perform any deferred access checks.  */
7345       perform_deferred_access_checks ();
7346     }
7347
7348   /* Consume the `;'.  */
7349   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
7350
7351  done:
7352   pop_deferring_access_checks ();
7353 }
7354
7355 /* Parse a decl-specifier-seq.
7356
7357    decl-specifier-seq:
7358      decl-specifier-seq [opt] decl-specifier
7359
7360    decl-specifier:
7361      storage-class-specifier
7362      type-specifier
7363      function-specifier
7364      friend
7365      typedef
7366
7367    GNU Extension:
7368
7369    decl-specifier:
7370      attributes
7371
7372    Set *DECL_SPECS to a representation of the decl-specifier-seq.
7373
7374    The parser flags FLAGS is used to control type-specifier parsing.
7375
7376    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
7377    flags:
7378
7379      1: one of the decl-specifiers is an elaborated-type-specifier
7380         (i.e., a type declaration)
7381      2: one of the decl-specifiers is an enum-specifier or a
7382         class-specifier (i.e., a type definition)
7383
7384    */
7385
7386 static void
7387 cp_parser_decl_specifier_seq (cp_parser* parser,
7388                               cp_parser_flags flags,
7389                               cp_decl_specifier_seq *decl_specs,
7390                               int* declares_class_or_enum)
7391 {
7392   bool constructor_possible_p = !parser->in_declarator_p;
7393   cp_decl_spec ds;
7394
7395   /* Clear DECL_SPECS.  */
7396   clear_decl_specs (decl_specs);
7397
7398   /* Assume no class or enumeration type is declared.  */
7399   *declares_class_or_enum = 0;
7400
7401   /* Keep reading specifiers until there are no more to read.  */
7402   while (true)
7403     {
7404       bool constructor_p;
7405       bool found_decl_spec;
7406       cp_token *token;
7407
7408       /* Peek at the next token.  */
7409       token = cp_lexer_peek_token (parser->lexer);
7410       /* Handle attributes.  */
7411       if (token->keyword == RID_ATTRIBUTE)
7412         {
7413           /* Parse the attributes.  */
7414           decl_specs->attributes
7415             = chainon (decl_specs->attributes,
7416                        cp_parser_attributes_opt (parser));
7417           continue;
7418         }
7419       /* Assume we will find a decl-specifier keyword.  */
7420       found_decl_spec = true;
7421       /* If the next token is an appropriate keyword, we can simply
7422          add it to the list.  */
7423       switch (token->keyword)
7424         {
7425           /* decl-specifier:
7426                friend  */
7427         case RID_FRIEND:
7428           if (!at_class_scope_p ())
7429             {
7430               error ("%<friend%> used outside of class");
7431               cp_lexer_purge_token (parser->lexer);
7432             }
7433           else
7434             {
7435               ++decl_specs->specs[(int) ds_friend];
7436               /* Consume the token.  */
7437               cp_lexer_consume_token (parser->lexer);
7438             }
7439           break;
7440
7441           /* function-specifier:
7442                inline
7443                virtual
7444                explicit  */
7445         case RID_INLINE:
7446         case RID_VIRTUAL:
7447         case RID_EXPLICIT:
7448           cp_parser_function_specifier_opt (parser, decl_specs);
7449           break;
7450
7451           /* decl-specifier:
7452                typedef  */
7453         case RID_TYPEDEF:
7454           ++decl_specs->specs[(int) ds_typedef];
7455           /* Consume the token.  */
7456           cp_lexer_consume_token (parser->lexer);
7457           /* A constructor declarator cannot appear in a typedef.  */
7458           constructor_possible_p = false;
7459           /* The "typedef" keyword can only occur in a declaration; we
7460              may as well commit at this point.  */
7461           cp_parser_commit_to_tentative_parse (parser);
7462           break;
7463
7464           /* storage-class-specifier:
7465                auto
7466                register
7467                static
7468                extern
7469                mutable
7470
7471              GNU Extension:
7472                thread  */
7473         case RID_AUTO:
7474         case RID_REGISTER:
7475         case RID_STATIC:
7476         case RID_EXTERN:
7477         case RID_MUTABLE:
7478           /* Consume the token.  */
7479           cp_lexer_consume_token (parser->lexer);
7480           cp_parser_set_storage_class (parser, decl_specs, token->keyword);
7481           break;
7482         case RID_THREAD:
7483           /* Consume the token.  */
7484           cp_lexer_consume_token (parser->lexer);
7485           ++decl_specs->specs[(int) ds_thread];
7486           break;
7487
7488         default:
7489           /* We did not yet find a decl-specifier yet.  */
7490           found_decl_spec = false;
7491           break;
7492         }
7493
7494       /* Constructors are a special case.  The `S' in `S()' is not a
7495          decl-specifier; it is the beginning of the declarator.  */
7496       constructor_p
7497         = (!found_decl_spec
7498            && constructor_possible_p
7499            && (cp_parser_constructor_declarator_p
7500                (parser, decl_specs->specs[(int) ds_friend] != 0)));
7501
7502       /* If we don't have a DECL_SPEC yet, then we must be looking at
7503          a type-specifier.  */
7504       if (!found_decl_spec && !constructor_p)
7505         {
7506           int decl_spec_declares_class_or_enum;
7507           bool is_cv_qualifier;
7508           tree type_spec;
7509
7510           type_spec
7511             = cp_parser_type_specifier (parser, flags,
7512                                         decl_specs,
7513                                         /*is_declaration=*/true,
7514                                         &decl_spec_declares_class_or_enum,
7515                                         &is_cv_qualifier);
7516
7517           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
7518
7519           /* If this type-specifier referenced a user-defined type
7520              (a typedef, class-name, etc.), then we can't allow any
7521              more such type-specifiers henceforth.
7522
7523              [dcl.spec]
7524
7525              The longest sequence of decl-specifiers that could
7526              possibly be a type name is taken as the
7527              decl-specifier-seq of a declaration.  The sequence shall
7528              be self-consistent as described below.
7529
7530              [dcl.type]
7531
7532              As a general rule, at most one type-specifier is allowed
7533              in the complete decl-specifier-seq of a declaration.  The
7534              only exceptions are the following:
7535
7536              -- const or volatile can be combined with any other
7537                 type-specifier.
7538
7539              -- signed or unsigned can be combined with char, long,
7540                 short, or int.
7541
7542              -- ..
7543
7544              Example:
7545
7546                typedef char* Pc;
7547                void g (const int Pc);
7548
7549              Here, Pc is *not* part of the decl-specifier seq; it's
7550              the declarator.  Therefore, once we see a type-specifier
7551              (other than a cv-qualifier), we forbid any additional
7552              user-defined types.  We *do* still allow things like `int
7553              int' to be considered a decl-specifier-seq, and issue the
7554              error message later.  */
7555           if (type_spec && !is_cv_qualifier)
7556             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
7557           /* A constructor declarator cannot follow a type-specifier.  */
7558           if (type_spec)
7559             {
7560               constructor_possible_p = false;
7561               found_decl_spec = true;
7562             }
7563         }
7564
7565       /* If we still do not have a DECL_SPEC, then there are no more
7566          decl-specifiers.  */
7567       if (!found_decl_spec)
7568         break;
7569
7570       decl_specs->any_specifiers_p = true;
7571       /* After we see one decl-specifier, further decl-specifiers are
7572          always optional.  */
7573       flags |= CP_PARSER_FLAGS_OPTIONAL;
7574     }
7575
7576   /* Check for repeated decl-specifiers.  */
7577   for (ds = ds_first; ds != ds_last; ++ds)
7578     {
7579       unsigned count = decl_specs->specs[(int)ds];
7580       if (count < 2)
7581         continue;
7582       /* The "long" specifier is a special case because of "long long".  */
7583       if (ds == ds_long)
7584         {
7585           if (count > 2)
7586             error ("%<long long long%> is too long for GCC");
7587           else if (pedantic && !in_system_header && warn_long_long)
7588             pedwarn ("ISO C++ does not support %<long long%>");
7589         }
7590       else if (count > 1)
7591         {
7592           static const char *const decl_spec_names[] = {
7593             "signed",
7594             "unsigned",
7595             "short",
7596             "long",
7597             "const",
7598             "volatile",
7599             "restrict",
7600             "inline",
7601             "virtual",
7602             "explicit",
7603             "friend",
7604             "typedef",
7605             "__complex",
7606             "__thread"
7607           };
7608           error ("duplicate %qs", decl_spec_names[(int)ds]);
7609         }
7610     }
7611
7612   /* Don't allow a friend specifier with a class definition.  */
7613   if (decl_specs->specs[(int) ds_friend] != 0
7614       && (*declares_class_or_enum & 2))
7615     error ("class definition may not be declared a friend");
7616 }
7617
7618 /* Parse an (optional) storage-class-specifier.
7619
7620    storage-class-specifier:
7621      auto
7622      register
7623      static
7624      extern
7625      mutable
7626
7627    GNU Extension:
7628
7629    storage-class-specifier:
7630      thread
7631
7632    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
7633
7634 static tree
7635 cp_parser_storage_class_specifier_opt (cp_parser* parser)
7636 {
7637   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7638     {
7639     case RID_AUTO:
7640     case RID_REGISTER:
7641     case RID_STATIC:
7642     case RID_EXTERN:
7643     case RID_MUTABLE:
7644     case RID_THREAD:
7645       /* Consume the token.  */
7646       return cp_lexer_consume_token (parser->lexer)->value;
7647
7648     default:
7649       return NULL_TREE;
7650     }
7651 }
7652
7653 /* Parse an (optional) function-specifier.
7654
7655    function-specifier:
7656      inline
7657      virtual
7658      explicit
7659
7660    Returns an IDENTIFIER_NODE corresponding to the keyword used.
7661    Updates DECL_SPECS, if it is non-NULL.  */
7662
7663 static tree
7664 cp_parser_function_specifier_opt (cp_parser* parser,
7665                                   cp_decl_specifier_seq *decl_specs)
7666 {
7667   switch (cp_lexer_peek_token (parser->lexer)->keyword)
7668     {
7669     case RID_INLINE:
7670       if (decl_specs)
7671         ++decl_specs->specs[(int) ds_inline];
7672       break;
7673
7674     case RID_VIRTUAL:
7675       /* 14.5.2.3 [temp.mem]
7676          
7677          A member function template shall not be virtual.  */
7678       if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7679         error ("templates may not be %<virtual%>");
7680       else if (decl_specs)
7681         ++decl_specs->specs[(int) ds_virtual];
7682       break;
7683
7684     case RID_EXPLICIT:
7685       if (decl_specs)
7686         ++decl_specs->specs[(int) ds_explicit];
7687       break;
7688
7689     default:
7690       return NULL_TREE;
7691     }
7692
7693   /* Consume the token.  */
7694   return cp_lexer_consume_token (parser->lexer)->value;
7695 }
7696
7697 /* Parse a linkage-specification.
7698
7699    linkage-specification:
7700      extern string-literal { declaration-seq [opt] }
7701      extern string-literal declaration  */
7702
7703 static void
7704 cp_parser_linkage_specification (cp_parser* parser)
7705 {
7706   tree linkage;
7707
7708   /* Look for the `extern' keyword.  */
7709   cp_parser_require_keyword (parser, RID_EXTERN, "`extern'");
7710
7711   /* Look for the string-literal.  */
7712   linkage = cp_parser_string_literal (parser, false, false);
7713
7714   /* Transform the literal into an identifier.  If the literal is a
7715      wide-character string, or contains embedded NULs, then we can't
7716      handle it as the user wants.  */
7717   if (strlen (TREE_STRING_POINTER (linkage))
7718       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
7719     {
7720       cp_parser_error (parser, "invalid linkage-specification");
7721       /* Assume C++ linkage.  */
7722       linkage = lang_name_cplusplus;
7723     }
7724   else
7725     linkage = get_identifier (TREE_STRING_POINTER (linkage));
7726
7727   /* We're now using the new linkage.  */
7728   push_lang_context (linkage);
7729
7730   /* If the next token is a `{', then we're using the first
7731      production.  */
7732   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7733     {
7734       /* Consume the `{' token.  */
7735       cp_lexer_consume_token (parser->lexer);
7736       /* Parse the declarations.  */
7737       cp_parser_declaration_seq_opt (parser);
7738       /* Look for the closing `}'.  */
7739       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7740     }
7741   /* Otherwise, there's just one declaration.  */
7742   else
7743     {
7744       bool saved_in_unbraced_linkage_specification_p;
7745
7746       saved_in_unbraced_linkage_specification_p
7747         = parser->in_unbraced_linkage_specification_p;
7748       parser->in_unbraced_linkage_specification_p = true;
7749       have_extern_spec = true;
7750       cp_parser_declaration (parser);
7751       have_extern_spec = false;
7752       parser->in_unbraced_linkage_specification_p
7753         = saved_in_unbraced_linkage_specification_p;
7754     }
7755
7756   /* We're done with the linkage-specification.  */
7757   pop_lang_context ();
7758 }
7759
7760 /* Special member functions [gram.special] */
7761
7762 /* Parse a conversion-function-id.
7763
7764    conversion-function-id:
7765      operator conversion-type-id
7766
7767    Returns an IDENTIFIER_NODE representing the operator.  */
7768
7769 static tree
7770 cp_parser_conversion_function_id (cp_parser* parser)
7771 {
7772   tree type;
7773   tree saved_scope;
7774   tree saved_qualifying_scope;
7775   tree saved_object_scope;
7776   tree pushed_scope = NULL_TREE;
7777
7778   /* Look for the `operator' token.  */
7779   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
7780     return error_mark_node;
7781   /* When we parse the conversion-type-id, the current scope will be
7782      reset.  However, we need that information in able to look up the
7783      conversion function later, so we save it here.  */
7784   saved_scope = parser->scope;
7785   saved_qualifying_scope = parser->qualifying_scope;
7786   saved_object_scope = parser->object_scope;
7787   /* We must enter the scope of the class so that the names of
7788      entities declared within the class are available in the
7789      conversion-type-id.  For example, consider:
7790
7791        struct S {
7792          typedef int I;
7793          operator I();
7794        };
7795
7796        S::operator I() { ... }
7797
7798      In order to see that `I' is a type-name in the definition, we
7799      must be in the scope of `S'.  */
7800   if (saved_scope)
7801     pushed_scope = push_scope (saved_scope);
7802   /* Parse the conversion-type-id.  */
7803   type = cp_parser_conversion_type_id (parser);
7804   /* Leave the scope of the class, if any.  */
7805   if (pushed_scope)
7806     pop_scope (pushed_scope);
7807   /* Restore the saved scope.  */
7808   parser->scope = saved_scope;
7809   parser->qualifying_scope = saved_qualifying_scope;
7810   parser->object_scope = saved_object_scope;
7811   /* If the TYPE is invalid, indicate failure.  */
7812   if (type == error_mark_node)
7813     return error_mark_node;
7814   return mangle_conv_op_name_for_type (type);
7815 }
7816
7817 /* Parse a conversion-type-id:
7818
7819    conversion-type-id:
7820      type-specifier-seq conversion-declarator [opt]
7821
7822    Returns the TYPE specified.  */
7823
7824 static tree
7825 cp_parser_conversion_type_id (cp_parser* parser)
7826 {
7827   tree attributes;
7828   cp_decl_specifier_seq type_specifiers;
7829   cp_declarator *declarator;
7830   tree type_specified;
7831
7832   /* Parse the attributes.  */
7833   attributes = cp_parser_attributes_opt (parser);
7834   /* Parse the type-specifiers.  */
7835   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
7836                                 &type_specifiers);
7837   /* If that didn't work, stop.  */
7838   if (type_specifiers.type == error_mark_node)
7839     return error_mark_node;
7840   /* Parse the conversion-declarator.  */
7841   declarator = cp_parser_conversion_declarator_opt (parser);
7842
7843   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
7844                                     /*initialized=*/0, &attributes);
7845   if (attributes)
7846     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
7847   return type_specified;
7848 }
7849
7850 /* Parse an (optional) conversion-declarator.
7851
7852    conversion-declarator:
7853      ptr-operator conversion-declarator [opt]
7854
7855    */
7856
7857 static cp_declarator *
7858 cp_parser_conversion_declarator_opt (cp_parser* parser)
7859 {
7860   enum tree_code code;
7861   tree class_type;
7862   cp_cv_quals cv_quals;
7863
7864   /* We don't know if there's a ptr-operator next, or not.  */
7865   cp_parser_parse_tentatively (parser);
7866   /* Try the ptr-operator.  */
7867   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
7868   /* If it worked, look for more conversion-declarators.  */
7869   if (cp_parser_parse_definitely (parser))
7870     {
7871       cp_declarator *declarator;
7872
7873       /* Parse another optional declarator.  */
7874       declarator = cp_parser_conversion_declarator_opt (parser);
7875
7876       /* Create the representation of the declarator.  */
7877       if (class_type)
7878         declarator = make_ptrmem_declarator (cv_quals, class_type,
7879                                              declarator);
7880       else if (code == INDIRECT_REF)
7881         declarator = make_pointer_declarator (cv_quals, declarator);
7882       else
7883         declarator = make_reference_declarator (cv_quals, declarator);
7884
7885       return declarator;
7886    }
7887
7888   return NULL;
7889 }
7890
7891 /* Parse an (optional) ctor-initializer.
7892
7893    ctor-initializer:
7894      : mem-initializer-list
7895
7896    Returns TRUE iff the ctor-initializer was actually present.  */
7897
7898 static bool
7899 cp_parser_ctor_initializer_opt (cp_parser* parser)
7900 {
7901   /* If the next token is not a `:', then there is no
7902      ctor-initializer.  */
7903   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
7904     {
7905       /* Do default initialization of any bases and members.  */
7906       if (DECL_CONSTRUCTOR_P (current_function_decl))
7907         finish_mem_initializers (NULL_TREE);
7908
7909       return false;
7910     }
7911
7912   /* Consume the `:' token.  */
7913   cp_lexer_consume_token (parser->lexer);
7914   /* And the mem-initializer-list.  */
7915   cp_parser_mem_initializer_list (parser);
7916
7917   return true;
7918 }
7919
7920 /* Parse a mem-initializer-list.
7921
7922    mem-initializer-list:
7923      mem-initializer
7924      mem-initializer , mem-initializer-list  */
7925
7926 static void
7927 cp_parser_mem_initializer_list (cp_parser* parser)
7928 {
7929   tree mem_initializer_list = NULL_TREE;
7930
7931   /* Let the semantic analysis code know that we are starting the
7932      mem-initializer-list.  */
7933   if (!DECL_CONSTRUCTOR_P (current_function_decl))
7934     error ("only constructors take base initializers");
7935
7936   /* Loop through the list.  */
7937   while (true)
7938     {
7939       tree mem_initializer;
7940
7941       /* Parse the mem-initializer.  */
7942       mem_initializer = cp_parser_mem_initializer (parser);
7943       /* Add it to the list, unless it was erroneous.  */
7944       if (mem_initializer != error_mark_node)
7945         {
7946           TREE_CHAIN (mem_initializer) = mem_initializer_list;
7947           mem_initializer_list = mem_initializer;
7948         }
7949       /* If the next token is not a `,', we're done.  */
7950       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
7951         break;
7952       /* Consume the `,' token.  */
7953       cp_lexer_consume_token (parser->lexer);
7954     }
7955
7956   /* Perform semantic analysis.  */
7957   if (DECL_CONSTRUCTOR_P (current_function_decl))
7958     finish_mem_initializers (mem_initializer_list);
7959 }
7960
7961 /* Parse a mem-initializer.
7962
7963    mem-initializer:
7964      mem-initializer-id ( expression-list [opt] )
7965
7966    GNU extension:
7967
7968    mem-initializer:
7969      ( expression-list [opt] )
7970
7971    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
7972    class) or FIELD_DECL (for a non-static data member) to initialize;
7973    the TREE_VALUE is the expression-list.  An empty initialization
7974    list is represented by void_list_node.  */
7975
7976 static tree
7977 cp_parser_mem_initializer (cp_parser* parser)
7978 {
7979   tree mem_initializer_id;
7980   tree expression_list;
7981   tree member;
7982
7983   /* Find out what is being initialized.  */
7984   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
7985     {
7986       pedwarn ("anachronistic old-style base class initializer");
7987       mem_initializer_id = NULL_TREE;
7988     }
7989   else
7990     mem_initializer_id = cp_parser_mem_initializer_id (parser);
7991   member = expand_member_init (mem_initializer_id);
7992   if (member && !DECL_P (member))
7993     in_base_initializer = 1;
7994
7995   expression_list
7996     = cp_parser_parenthesized_expression_list (parser, false,
7997                                                /*cast_p=*/false,
7998                                                /*non_constant_p=*/NULL);
7999   if (expression_list == error_mark_node)
8000     return error_mark_node;
8001   if (!expression_list)
8002     expression_list = void_type_node;
8003
8004   in_base_initializer = 0;
8005
8006   return member ? build_tree_list (member, expression_list) : error_mark_node;
8007 }
8008
8009 /* Parse a mem-initializer-id.
8010
8011    mem-initializer-id:
8012      :: [opt] nested-name-specifier [opt] class-name
8013      identifier
8014
8015    Returns a TYPE indicating the class to be initializer for the first
8016    production.  Returns an IDENTIFIER_NODE indicating the data member
8017    to be initialized for the second production.  */
8018
8019 static tree
8020 cp_parser_mem_initializer_id (cp_parser* parser)
8021 {
8022   bool global_scope_p;
8023   bool nested_name_specifier_p;
8024   bool template_p = false;
8025   tree id;
8026
8027   /* `typename' is not allowed in this context ([temp.res]).  */
8028   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
8029     {
8030       error ("keyword %<typename%> not allowed in this context (a qualified "
8031              "member initializer is implicitly a type)");
8032       cp_lexer_consume_token (parser->lexer);
8033     }
8034   /* Look for the optional `::' operator.  */
8035   global_scope_p
8036     = (cp_parser_global_scope_opt (parser,
8037                                    /*current_scope_valid_p=*/false)
8038        != NULL_TREE);
8039   /* Look for the optional nested-name-specifier.  The simplest way to
8040      implement:
8041
8042        [temp.res]
8043
8044        The keyword `typename' is not permitted in a base-specifier or
8045        mem-initializer; in these contexts a qualified name that
8046        depends on a template-parameter is implicitly assumed to be a
8047        type name.
8048
8049      is to assume that we have seen the `typename' keyword at this
8050      point.  */
8051   nested_name_specifier_p
8052     = (cp_parser_nested_name_specifier_opt (parser,
8053                                             /*typename_keyword_p=*/true,
8054                                             /*check_dependency_p=*/true,
8055                                             /*type_p=*/true,
8056                                             /*is_declaration=*/true)
8057        != NULL_TREE);
8058   if (nested_name_specifier_p)
8059     template_p = cp_parser_optional_template_keyword (parser);
8060   /* If there is a `::' operator or a nested-name-specifier, then we
8061      are definitely looking for a class-name.  */
8062   if (global_scope_p || nested_name_specifier_p)
8063     return cp_parser_class_name (parser,
8064                                  /*typename_keyword_p=*/true,
8065                                  /*template_keyword_p=*/template_p,
8066                                  none_type,
8067                                  /*check_dependency_p=*/true,
8068                                  /*class_head_p=*/false,
8069                                  /*is_declaration=*/true);
8070   /* Otherwise, we could also be looking for an ordinary identifier.  */
8071   cp_parser_parse_tentatively (parser);
8072   /* Try a class-name.  */
8073   id = cp_parser_class_name (parser,
8074                              /*typename_keyword_p=*/true,
8075                              /*template_keyword_p=*/false,
8076                              none_type,
8077                              /*check_dependency_p=*/true,
8078                              /*class_head_p=*/false,
8079                              /*is_declaration=*/true);
8080   /* If we found one, we're done.  */
8081   if (cp_parser_parse_definitely (parser))
8082     return id;
8083   /* Otherwise, look for an ordinary identifier.  */
8084   return cp_parser_identifier (parser);
8085 }
8086
8087 /* Overloading [gram.over] */
8088
8089 /* Parse an operator-function-id.
8090
8091    operator-function-id:
8092      operator operator
8093
8094    Returns an IDENTIFIER_NODE for the operator which is a
8095    human-readable spelling of the identifier, e.g., `operator +'.  */
8096
8097 static tree
8098 cp_parser_operator_function_id (cp_parser* parser)
8099 {
8100   /* Look for the `operator' keyword.  */
8101   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
8102     return error_mark_node;
8103   /* And then the name of the operator itself.  */
8104   return cp_parser_operator (parser);
8105 }
8106
8107 /* Parse an operator.
8108
8109    operator:
8110      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
8111      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
8112      || ++ -- , ->* -> () []
8113
8114    GNU Extensions:
8115
8116    operator:
8117      <? >? <?= >?=
8118
8119    Returns an IDENTIFIER_NODE for the operator which is a
8120    human-readable spelling of the identifier, e.g., `operator +'.  */
8121
8122 static tree
8123 cp_parser_operator (cp_parser* parser)
8124 {
8125   tree id = NULL_TREE;
8126   cp_token *token;
8127
8128   /* Peek at the next token.  */
8129   token = cp_lexer_peek_token (parser->lexer);
8130   /* Figure out which operator we have.  */
8131   switch (token->type)
8132     {
8133     case CPP_KEYWORD:
8134       {
8135         enum tree_code op;
8136
8137         /* The keyword should be either `new' or `delete'.  */
8138         if (token->keyword == RID_NEW)
8139           op = NEW_EXPR;
8140         else if (token->keyword == RID_DELETE)
8141           op = DELETE_EXPR;
8142         else
8143           break;
8144
8145         /* Consume the `new' or `delete' token.  */
8146         cp_lexer_consume_token (parser->lexer);
8147
8148         /* Peek at the next token.  */
8149         token = cp_lexer_peek_token (parser->lexer);
8150         /* If it's a `[' token then this is the array variant of the
8151            operator.  */
8152         if (token->type == CPP_OPEN_SQUARE)
8153           {
8154             /* Consume the `[' token.  */
8155             cp_lexer_consume_token (parser->lexer);
8156             /* Look for the `]' token.  */
8157             cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8158             id = ansi_opname (op == NEW_EXPR
8159                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
8160           }
8161         /* Otherwise, we have the non-array variant.  */
8162         else
8163           id = ansi_opname (op);
8164
8165         return id;
8166       }
8167
8168     case CPP_PLUS:
8169       id = ansi_opname (PLUS_EXPR);
8170       break;
8171
8172     case CPP_MINUS:
8173       id = ansi_opname (MINUS_EXPR);
8174       break;
8175
8176     case CPP_MULT:
8177       id = ansi_opname (MULT_EXPR);
8178       break;
8179
8180     case CPP_DIV:
8181       id = ansi_opname (TRUNC_DIV_EXPR);
8182       break;
8183
8184     case CPP_MOD:
8185       id = ansi_opname (TRUNC_MOD_EXPR);
8186       break;
8187
8188     case CPP_XOR:
8189       id = ansi_opname (BIT_XOR_EXPR);
8190       break;
8191
8192     case CPP_AND:
8193       id = ansi_opname (BIT_AND_EXPR);
8194       break;
8195
8196     case CPP_OR:
8197       id = ansi_opname (BIT_IOR_EXPR);
8198       break;
8199
8200     case CPP_COMPL:
8201       id = ansi_opname (BIT_NOT_EXPR);
8202       break;
8203
8204     case CPP_NOT:
8205       id = ansi_opname (TRUTH_NOT_EXPR);
8206       break;
8207
8208     case CPP_EQ:
8209       id = ansi_assopname (NOP_EXPR);
8210       break;
8211
8212     case CPP_LESS:
8213       id = ansi_opname (LT_EXPR);
8214       break;
8215
8216     case CPP_GREATER:
8217       id = ansi_opname (GT_EXPR);
8218       break;
8219
8220     case CPP_PLUS_EQ:
8221       id = ansi_assopname (PLUS_EXPR);
8222       break;
8223
8224     case CPP_MINUS_EQ:
8225       id = ansi_assopname (MINUS_EXPR);
8226       break;
8227
8228     case CPP_MULT_EQ:
8229       id = ansi_assopname (MULT_EXPR);
8230       break;
8231
8232     case CPP_DIV_EQ:
8233       id = ansi_assopname (TRUNC_DIV_EXPR);
8234       break;
8235
8236     case CPP_MOD_EQ:
8237       id = ansi_assopname (TRUNC_MOD_EXPR);
8238       break;
8239
8240     case CPP_XOR_EQ:
8241       id = ansi_assopname (BIT_XOR_EXPR);
8242       break;
8243
8244     case CPP_AND_EQ:
8245       id = ansi_assopname (BIT_AND_EXPR);
8246       break;
8247
8248     case CPP_OR_EQ:
8249       id = ansi_assopname (BIT_IOR_EXPR);
8250       break;
8251
8252     case CPP_LSHIFT:
8253       id = ansi_opname (LSHIFT_EXPR);
8254       break;
8255
8256     case CPP_RSHIFT:
8257       id = ansi_opname (RSHIFT_EXPR);
8258       break;
8259
8260     case CPP_LSHIFT_EQ:
8261       id = ansi_assopname (LSHIFT_EXPR);
8262       break;
8263
8264     case CPP_RSHIFT_EQ:
8265       id = ansi_assopname (RSHIFT_EXPR);
8266       break;
8267
8268     case CPP_EQ_EQ:
8269       id = ansi_opname (EQ_EXPR);
8270       break;
8271
8272     case CPP_NOT_EQ:
8273       id = ansi_opname (NE_EXPR);
8274       break;
8275
8276     case CPP_LESS_EQ:
8277       id = ansi_opname (LE_EXPR);
8278       break;
8279
8280     case CPP_GREATER_EQ:
8281       id = ansi_opname (GE_EXPR);
8282       break;
8283
8284     case CPP_AND_AND:
8285       id = ansi_opname (TRUTH_ANDIF_EXPR);
8286       break;
8287
8288     case CPP_OR_OR:
8289       id = ansi_opname (TRUTH_ORIF_EXPR);
8290       break;
8291
8292     case CPP_PLUS_PLUS:
8293       id = ansi_opname (POSTINCREMENT_EXPR);
8294       break;
8295
8296     case CPP_MINUS_MINUS:
8297       id = ansi_opname (PREDECREMENT_EXPR);
8298       break;
8299
8300     case CPP_COMMA:
8301       id = ansi_opname (COMPOUND_EXPR);
8302       break;
8303
8304     case CPP_DEREF_STAR:
8305       id = ansi_opname (MEMBER_REF);
8306       break;
8307
8308     case CPP_DEREF:
8309       id = ansi_opname (COMPONENT_REF);
8310       break;
8311
8312     case CPP_OPEN_PAREN:
8313       /* Consume the `('.  */
8314       cp_lexer_consume_token (parser->lexer);
8315       /* Look for the matching `)'.  */
8316       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
8317       return ansi_opname (CALL_EXPR);
8318
8319     case CPP_OPEN_SQUARE:
8320       /* Consume the `['.  */
8321       cp_lexer_consume_token (parser->lexer);
8322       /* Look for the matching `]'.  */
8323       cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8324       return ansi_opname (ARRAY_REF);
8325
8326       /* Extensions.  */
8327     case CPP_MIN:
8328       id = ansi_opname (MIN_EXPR);
8329       cp_parser_warn_min_max ();
8330       break;
8331
8332     case CPP_MAX:
8333       id = ansi_opname (MAX_EXPR);
8334       cp_parser_warn_min_max ();
8335       break;
8336
8337     case CPP_MIN_EQ:
8338       id = ansi_assopname (MIN_EXPR);
8339       cp_parser_warn_min_max ();
8340       break;
8341
8342     case CPP_MAX_EQ:
8343       id = ansi_assopname (MAX_EXPR);
8344       cp_parser_warn_min_max ();
8345       break;
8346
8347     default:
8348       /* Anything else is an error.  */
8349       break;
8350     }
8351
8352   /* If we have selected an identifier, we need to consume the
8353      operator token.  */
8354   if (id)
8355     cp_lexer_consume_token (parser->lexer);
8356   /* Otherwise, no valid operator name was present.  */
8357   else
8358     {
8359       cp_parser_error (parser, "expected operator");
8360       id = error_mark_node;
8361     }
8362
8363   return id;
8364 }
8365
8366 /* Parse a template-declaration.
8367
8368    template-declaration:
8369      export [opt] template < template-parameter-list > declaration
8370
8371    If MEMBER_P is TRUE, this template-declaration occurs within a
8372    class-specifier.
8373
8374    The grammar rule given by the standard isn't correct.  What
8375    is really meant is:
8376
8377    template-declaration:
8378      export [opt] template-parameter-list-seq
8379        decl-specifier-seq [opt] init-declarator [opt] ;
8380      export [opt] template-parameter-list-seq
8381        function-definition
8382
8383    template-parameter-list-seq:
8384      template-parameter-list-seq [opt]
8385      template < template-parameter-list >  */
8386
8387 static void
8388 cp_parser_template_declaration (cp_parser* parser, bool member_p)
8389 {
8390   /* Check for `export'.  */
8391   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
8392     {
8393       /* Consume the `export' token.  */
8394       cp_lexer_consume_token (parser->lexer);
8395       /* Warn that we do not support `export'.  */
8396       warning (0, "keyword %<export%> not implemented, and will be ignored");
8397     }
8398
8399   cp_parser_template_declaration_after_export (parser, member_p);
8400 }
8401
8402 /* Parse a template-parameter-list.
8403
8404    template-parameter-list:
8405      template-parameter
8406      template-parameter-list , template-parameter
8407
8408    Returns a TREE_LIST.  Each node represents a template parameter.
8409    The nodes are connected via their TREE_CHAINs.  */
8410
8411 static tree
8412 cp_parser_template_parameter_list (cp_parser* parser)
8413 {
8414   tree parameter_list = NULL_TREE;
8415
8416   begin_template_parm_list ();
8417   while (true)
8418     {
8419       tree parameter;
8420       cp_token *token;
8421       bool is_non_type;
8422
8423       /* Parse the template-parameter.  */
8424       parameter = cp_parser_template_parameter (parser, &is_non_type);
8425       /* Add it to the list.  */
8426       if (parameter != error_mark_node)
8427         parameter_list = process_template_parm (parameter_list,
8428                                                 parameter,
8429                                                 is_non_type);
8430       /* Peek at the next token.  */
8431       token = cp_lexer_peek_token (parser->lexer);
8432       /* If it's not a `,', we're done.  */
8433       if (token->type != CPP_COMMA)
8434         break;
8435       /* Otherwise, consume the `,' token.  */
8436       cp_lexer_consume_token (parser->lexer);
8437     }
8438
8439   return end_template_parm_list (parameter_list);
8440 }
8441
8442 /* Parse a template-parameter.
8443
8444    template-parameter:
8445      type-parameter
8446      parameter-declaration
8447
8448    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
8449    the parameter.  The TREE_PURPOSE is the default value, if any.
8450    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
8451    iff this parameter is a non-type parameter.  */
8452
8453 static tree
8454 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
8455 {
8456   cp_token *token;
8457   cp_parameter_declarator *parameter_declarator;
8458   tree parm;
8459
8460   /* Assume it is a type parameter or a template parameter.  */
8461   *is_non_type = false;
8462   /* Peek at the next token.  */
8463   token = cp_lexer_peek_token (parser->lexer);
8464   /* If it is `class' or `template', we have a type-parameter.  */
8465   if (token->keyword == RID_TEMPLATE)
8466     return cp_parser_type_parameter (parser);
8467   /* If it is `class' or `typename' we do not know yet whether it is a
8468      type parameter or a non-type parameter.  Consider:
8469
8470        template <typename T, typename T::X X> ...
8471
8472      or:
8473
8474        template <class C, class D*> ...
8475
8476      Here, the first parameter is a type parameter, and the second is
8477      a non-type parameter.  We can tell by looking at the token after
8478      the identifier -- if it is a `,', `=', or `>' then we have a type
8479      parameter.  */
8480   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
8481     {
8482       /* Peek at the token after `class' or `typename'.  */
8483       token = cp_lexer_peek_nth_token (parser->lexer, 2);
8484       /* If it's an identifier, skip it.  */
8485       if (token->type == CPP_NAME)
8486         token = cp_lexer_peek_nth_token (parser->lexer, 3);
8487       /* Now, see if the token looks like the end of a template
8488          parameter.  */
8489       if (token->type == CPP_COMMA
8490           || token->type == CPP_EQ
8491           || token->type == CPP_GREATER)
8492         return cp_parser_type_parameter (parser);
8493     }
8494
8495   /* Otherwise, it is a non-type parameter.
8496
8497      [temp.param]
8498
8499      When parsing a default template-argument for a non-type
8500      template-parameter, the first non-nested `>' is taken as the end
8501      of the template parameter-list rather than a greater-than
8502      operator.  */
8503   *is_non_type = true;
8504   parameter_declarator
8505      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
8506                                         /*parenthesized_p=*/NULL);
8507   parm = grokdeclarator (parameter_declarator->declarator,
8508                          &parameter_declarator->decl_specifiers,
8509                          PARM, /*initialized=*/0,
8510                          /*attrlist=*/NULL);
8511   if (parm == error_mark_node)
8512     return error_mark_node;
8513   return build_tree_list (parameter_declarator->default_argument, parm);
8514 }
8515
8516 /* Parse a type-parameter.
8517
8518    type-parameter:
8519      class identifier [opt]
8520      class identifier [opt] = type-id
8521      typename identifier [opt]
8522      typename identifier [opt] = type-id
8523      template < template-parameter-list > class identifier [opt]
8524      template < template-parameter-list > class identifier [opt]
8525        = id-expression
8526
8527    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
8528    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
8529    the declaration of the parameter.  */
8530
8531 static tree
8532 cp_parser_type_parameter (cp_parser* parser)
8533 {
8534   cp_token *token;
8535   tree parameter;
8536
8537   /* Look for a keyword to tell us what kind of parameter this is.  */
8538   token = cp_parser_require (parser, CPP_KEYWORD,
8539                              "`class', `typename', or `template'");
8540   if (!token)
8541     return error_mark_node;
8542
8543   switch (token->keyword)
8544     {
8545     case RID_CLASS:
8546     case RID_TYPENAME:
8547       {
8548         tree identifier;
8549         tree default_argument;
8550
8551         /* If the next token is an identifier, then it names the
8552            parameter.  */
8553         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
8554           identifier = cp_parser_identifier (parser);
8555         else
8556           identifier = NULL_TREE;
8557
8558         /* Create the parameter.  */
8559         parameter = finish_template_type_parm (class_type_node, identifier);
8560
8561         /* If the next token is an `=', we have a default argument.  */
8562         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8563           {
8564             /* Consume the `=' token.  */
8565             cp_lexer_consume_token (parser->lexer);
8566             /* Parse the default-argument.  */
8567             push_deferring_access_checks (dk_no_deferred);
8568             default_argument = cp_parser_type_id (parser);
8569             pop_deferring_access_checks ();
8570           }
8571         else
8572           default_argument = NULL_TREE;
8573
8574         /* Create the combined representation of the parameter and the
8575            default argument.  */
8576         parameter = build_tree_list (default_argument, parameter);
8577       }
8578       break;
8579
8580     case RID_TEMPLATE:
8581       {
8582         tree parameter_list;
8583         tree identifier;
8584         tree default_argument;
8585
8586         /* Look for the `<'.  */
8587         cp_parser_require (parser, CPP_LESS, "`<'");
8588         /* Parse the template-parameter-list.  */
8589         parameter_list = cp_parser_template_parameter_list (parser);
8590         /* Look for the `>'.  */
8591         cp_parser_require (parser, CPP_GREATER, "`>'");
8592         /* Look for the `class' keyword.  */
8593         cp_parser_require_keyword (parser, RID_CLASS, "`class'");
8594         /* If the next token is an `=', then there is a
8595            default-argument.  If the next token is a `>', we are at
8596            the end of the parameter-list.  If the next token is a `,',
8597            then we are at the end of this parameter.  */
8598         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
8599             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
8600             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8601           {
8602             identifier = cp_parser_identifier (parser);
8603             /* Treat invalid names as if the parameter were nameless.  */
8604             if (identifier == error_mark_node)
8605               identifier = NULL_TREE;
8606           }
8607         else
8608           identifier = NULL_TREE;
8609
8610         /* Create the template parameter.  */
8611         parameter = finish_template_template_parm (class_type_node,
8612                                                    identifier);
8613
8614         /* If the next token is an `=', then there is a
8615            default-argument.  */
8616         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8617           {
8618             bool is_template;
8619
8620             /* Consume the `='.  */
8621             cp_lexer_consume_token (parser->lexer);
8622             /* Parse the id-expression.  */
8623             push_deferring_access_checks (dk_no_deferred);
8624             default_argument
8625               = cp_parser_id_expression (parser,
8626                                          /*template_keyword_p=*/false,
8627                                          /*check_dependency_p=*/true,
8628                                          /*template_p=*/&is_template,
8629                                          /*declarator_p=*/false,
8630                                          /*optional_p=*/false);
8631             if (TREE_CODE (default_argument) == TYPE_DECL)
8632               /* If the id-expression was a template-id that refers to
8633                  a template-class, we already have the declaration here,
8634                  so no further lookup is needed.  */
8635                  ;
8636             else
8637               /* Look up the name.  */
8638               default_argument
8639                 = cp_parser_lookup_name (parser, default_argument,
8640                                          none_type,
8641                                          /*is_template=*/is_template,
8642                                          /*is_namespace=*/false,
8643                                          /*check_dependency=*/true,
8644                                          /*ambiguous_decls=*/NULL);
8645             /* See if the default argument is valid.  */
8646             default_argument
8647               = check_template_template_default_arg (default_argument);
8648             pop_deferring_access_checks ();
8649           }
8650         else
8651           default_argument = NULL_TREE;
8652
8653         /* Create the combined representation of the parameter and the
8654            default argument.  */
8655         parameter = build_tree_list (default_argument, parameter);
8656       }
8657       break;
8658
8659     default:
8660       gcc_unreachable ();
8661       break;
8662     }
8663
8664   return parameter;
8665 }
8666
8667 /* Parse a template-id.
8668
8669    template-id:
8670      template-name < template-argument-list [opt] >
8671
8672    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
8673    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
8674    returned.  Otherwise, if the template-name names a function, or set
8675    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
8676    names a class, returns a TYPE_DECL for the specialization.
8677
8678    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
8679    uninstantiated templates.  */
8680
8681 static tree
8682 cp_parser_template_id (cp_parser *parser,
8683                        bool template_keyword_p,
8684                        bool check_dependency_p,
8685                        bool is_declaration)
8686 {
8687   tree template;
8688   tree arguments;
8689   tree template_id;
8690   cp_token_position start_of_id = 0;
8691   tree access_check = NULL_TREE;
8692   cp_token *next_token, *next_token_2;
8693   bool is_identifier;
8694
8695   /* If the next token corresponds to a template-id, there is no need
8696      to reparse it.  */
8697   next_token = cp_lexer_peek_token (parser->lexer);
8698   if (next_token->type == CPP_TEMPLATE_ID)
8699     {
8700       tree value;
8701       tree check;
8702
8703       /* Get the stored value.  */
8704       value = cp_lexer_consume_token (parser->lexer)->value;
8705       /* Perform any access checks that were deferred.  */
8706       for (check = TREE_PURPOSE (value); check; check = TREE_CHAIN (check))
8707         perform_or_defer_access_check (TREE_PURPOSE (check),
8708                                        TREE_VALUE (check));
8709       /* Return the stored value.  */
8710       return TREE_VALUE (value);
8711     }
8712
8713   /* Avoid performing name lookup if there is no possibility of
8714      finding a template-id.  */
8715   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
8716       || (next_token->type == CPP_NAME
8717           && !cp_parser_nth_token_starts_template_argument_list_p
8718                (parser, 2)))
8719     {
8720       cp_parser_error (parser, "expected template-id");
8721       return error_mark_node;
8722     }
8723
8724   /* Remember where the template-id starts.  */
8725   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
8726     start_of_id = cp_lexer_token_position (parser->lexer, false);
8727
8728   push_deferring_access_checks (dk_deferred);
8729
8730   /* Parse the template-name.  */
8731   is_identifier = false;
8732   template = cp_parser_template_name (parser, template_keyword_p,
8733                                       check_dependency_p,
8734                                       is_declaration,
8735                                       &is_identifier);
8736   if (template == error_mark_node || is_identifier)
8737     {
8738       pop_deferring_access_checks ();
8739       return template;
8740     }
8741
8742   /* If we find the sequence `[:' after a template-name, it's probably
8743      a digraph-typo for `< ::'. Substitute the tokens and check if we can
8744      parse correctly the argument list.  */
8745   next_token = cp_lexer_peek_token (parser->lexer);
8746   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
8747   if (next_token->type == CPP_OPEN_SQUARE
8748       && next_token->flags & DIGRAPH
8749       && next_token_2->type == CPP_COLON
8750       && !(next_token_2->flags & PREV_WHITE))
8751     {
8752       cp_parser_parse_tentatively (parser);
8753       /* Change `:' into `::'.  */
8754       next_token_2->type = CPP_SCOPE;
8755       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
8756          CPP_LESS.  */
8757       cp_lexer_consume_token (parser->lexer);
8758       /* Parse the arguments.  */
8759       arguments = cp_parser_enclosed_template_argument_list (parser);
8760       if (!cp_parser_parse_definitely (parser))
8761         {
8762           /* If we couldn't parse an argument list, then we revert our changes
8763              and return simply an error. Maybe this is not a template-id
8764              after all.  */
8765           next_token_2->type = CPP_COLON;
8766           cp_parser_error (parser, "expected %<<%>");
8767           pop_deferring_access_checks ();
8768           return error_mark_node;
8769         }
8770       /* Otherwise, emit an error about the invalid digraph, but continue
8771          parsing because we got our argument list.  */
8772       pedwarn ("%<<::%> cannot begin a template-argument list");
8773       inform ("%<<:%> is an alternate spelling for %<[%>. Insert whitespace "
8774               "between %<<%> and %<::%>");
8775       if (!flag_permissive)
8776         {
8777           static bool hint;
8778           if (!hint)
8779             {
8780               inform ("(if you use -fpermissive G++ will accept your code)");
8781               hint = true;
8782             }
8783         }
8784     }
8785   else
8786     {
8787       /* Look for the `<' that starts the template-argument-list.  */
8788       if (!cp_parser_require (parser, CPP_LESS, "`<'"))
8789         {
8790           pop_deferring_access_checks ();
8791           return error_mark_node;
8792         }
8793       /* Parse the arguments.  */
8794       arguments = cp_parser_enclosed_template_argument_list (parser);
8795     }
8796
8797   /* Build a representation of the specialization.  */
8798   if (TREE_CODE (template) == IDENTIFIER_NODE)
8799     template_id = build_min_nt (TEMPLATE_ID_EXPR, template, arguments);
8800   else if (DECL_CLASS_TEMPLATE_P (template)
8801            || DECL_TEMPLATE_TEMPLATE_PARM_P (template))
8802     template_id
8803       = finish_template_type (template, arguments,
8804                               cp_lexer_next_token_is (parser->lexer,
8805                                                       CPP_SCOPE));
8806   else
8807     {
8808       /* If it's not a class-template or a template-template, it should be
8809          a function-template.  */
8810       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (template)
8811                    || TREE_CODE (template) == OVERLOAD
8812                    || BASELINK_P (template)));
8813
8814       template_id = lookup_template_function (template, arguments);
8815     }
8816
8817   /* Retrieve any deferred checks.  Do not pop this access checks yet
8818      so the memory will not be reclaimed during token replacing below.  */
8819   access_check = get_deferred_access_checks ();
8820
8821   /* If parsing tentatively, replace the sequence of tokens that makes
8822      up the template-id with a CPP_TEMPLATE_ID token.  That way,
8823      should we re-parse the token stream, we will not have to repeat
8824      the effort required to do the parse, nor will we issue duplicate
8825      error messages about problems during instantiation of the
8826      template.  */
8827   if (start_of_id)
8828     {
8829       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
8830
8831       /* Reset the contents of the START_OF_ID token.  */
8832       token->type = CPP_TEMPLATE_ID;
8833       token->value = build_tree_list (access_check, template_id);
8834       token->keyword = RID_MAX;
8835
8836       /* Purge all subsequent tokens.  */
8837       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
8838
8839       /* ??? Can we actually assume that, if template_id ==
8840          error_mark_node, we will have issued a diagnostic to the
8841          user, as opposed to simply marking the tentative parse as
8842          failed?  */
8843       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
8844         error ("parse error in template argument list");
8845     }
8846
8847   pop_deferring_access_checks ();
8848   return template_id;
8849 }
8850
8851 /* Parse a template-name.
8852
8853    template-name:
8854      identifier
8855
8856    The standard should actually say:
8857
8858    template-name:
8859      identifier
8860      operator-function-id
8861
8862    A defect report has been filed about this issue.
8863
8864    A conversion-function-id cannot be a template name because they cannot
8865    be part of a template-id. In fact, looking at this code:
8866
8867    a.operator K<int>()
8868
8869    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
8870    It is impossible to call a templated conversion-function-id with an
8871    explicit argument list, since the only allowed template parameter is
8872    the type to which it is converting.
8873
8874    If TEMPLATE_KEYWORD_P is true, then we have just seen the
8875    `template' keyword, in a construction like:
8876
8877      T::template f<3>()
8878
8879    In that case `f' is taken to be a template-name, even though there
8880    is no way of knowing for sure.
8881
8882    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
8883    name refers to a set of overloaded functions, at least one of which
8884    is a template, or an IDENTIFIER_NODE with the name of the template,
8885    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
8886    names are looked up inside uninstantiated templates.  */
8887
8888 static tree
8889 cp_parser_template_name (cp_parser* parser,
8890                          bool template_keyword_p,
8891                          bool check_dependency_p,
8892                          bool is_declaration,
8893                          bool *is_identifier)
8894 {
8895   tree identifier;
8896   tree decl;
8897   tree fns;
8898
8899   /* If the next token is `operator', then we have either an
8900      operator-function-id or a conversion-function-id.  */
8901   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
8902     {
8903       /* We don't know whether we're looking at an
8904          operator-function-id or a conversion-function-id.  */
8905       cp_parser_parse_tentatively (parser);
8906       /* Try an operator-function-id.  */
8907       identifier = cp_parser_operator_function_id (parser);
8908       /* If that didn't work, try a conversion-function-id.  */
8909       if (!cp_parser_parse_definitely (parser))
8910         {
8911           cp_parser_error (parser, "expected template-name");
8912           return error_mark_node;
8913         }
8914     }
8915   /* Look for the identifier.  */
8916   else
8917     identifier = cp_parser_identifier (parser);
8918
8919   /* If we didn't find an identifier, we don't have a template-id.  */
8920   if (identifier == error_mark_node)
8921     return error_mark_node;
8922
8923   /* If the name immediately followed the `template' keyword, then it
8924      is a template-name.  However, if the next token is not `<', then
8925      we do not treat it as a template-name, since it is not being used
8926      as part of a template-id.  This enables us to handle constructs
8927      like:
8928
8929        template <typename T> struct S { S(); };
8930        template <typename T> S<T>::S();
8931
8932      correctly.  We would treat `S' as a template -- if it were `S<T>'
8933      -- but we do not if there is no `<'.  */
8934
8935   if (processing_template_decl
8936       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
8937     {
8938       /* In a declaration, in a dependent context, we pretend that the
8939          "template" keyword was present in order to improve error
8940          recovery.  For example, given:
8941
8942            template <typename T> void f(T::X<int>);
8943
8944          we want to treat "X<int>" as a template-id.  */
8945       if (is_declaration
8946           && !template_keyword_p
8947           && parser->scope && TYPE_P (parser->scope)
8948           && check_dependency_p
8949           && dependent_type_p (parser->scope)
8950           /* Do not do this for dtors (or ctors), since they never
8951              need the template keyword before their name.  */
8952           && !constructor_name_p (identifier, parser->scope))
8953         {
8954           cp_token_position start = 0;
8955
8956           /* Explain what went wrong.  */
8957           error ("non-template %qD used as template", identifier);
8958           inform ("use %<%T::template %D%> to indicate that it is a template",
8959                   parser->scope, identifier);
8960           /* If parsing tentatively, find the location of the "<" token.  */
8961           if (cp_parser_simulate_error (parser))
8962             start = cp_lexer_token_position (parser->lexer, true);
8963           /* Parse the template arguments so that we can issue error
8964              messages about them.  */
8965           cp_lexer_consume_token (parser->lexer);
8966           cp_parser_enclosed_template_argument_list (parser);
8967           /* Skip tokens until we find a good place from which to
8968              continue parsing.  */
8969           cp_parser_skip_to_closing_parenthesis (parser,
8970                                                  /*recovering=*/true,
8971                                                  /*or_comma=*/true,
8972                                                  /*consume_paren=*/false);
8973           /* If parsing tentatively, permanently remove the
8974              template argument list.  That will prevent duplicate
8975              error messages from being issued about the missing
8976              "template" keyword.  */
8977           if (start)
8978             cp_lexer_purge_tokens_after (parser->lexer, start);
8979           if (is_identifier)
8980             *is_identifier = true;
8981           return identifier;
8982         }
8983
8984       /* If the "template" keyword is present, then there is generally
8985          no point in doing name-lookup, so we just return IDENTIFIER.
8986          But, if the qualifying scope is non-dependent then we can
8987          (and must) do name-lookup normally.  */
8988       if (template_keyword_p
8989           && (!parser->scope
8990               || (TYPE_P (parser->scope)
8991                   && dependent_type_p (parser->scope))))
8992         return identifier;
8993     }
8994
8995   /* Look up the name.  */
8996   decl = cp_parser_lookup_name (parser, identifier,
8997                                 none_type,
8998                                 /*is_template=*/false,
8999                                 /*is_namespace=*/false,
9000                                 check_dependency_p,
9001                                 /*ambiguous_decls=*/NULL);
9002   decl = maybe_get_template_decl_from_type_decl (decl);
9003
9004   /* If DECL is a template, then the name was a template-name.  */
9005   if (TREE_CODE (decl) == TEMPLATE_DECL)
9006     ;
9007   else
9008     {
9009       tree fn = NULL_TREE;
9010
9011       /* The standard does not explicitly indicate whether a name that
9012          names a set of overloaded declarations, some of which are
9013          templates, is a template-name.  However, such a name should
9014          be a template-name; otherwise, there is no way to form a
9015          template-id for the overloaded templates.  */
9016       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
9017       if (TREE_CODE (fns) == OVERLOAD)
9018         for (fn = fns; fn; fn = OVL_NEXT (fn))
9019           if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
9020             break;
9021
9022       if (!fn)
9023         {
9024           /* The name does not name a template.  */
9025           cp_parser_error (parser, "expected template-name");
9026           return error_mark_node;
9027         }
9028     }
9029
9030   /* If DECL is dependent, and refers to a function, then just return
9031      its name; we will look it up again during template instantiation.  */
9032   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
9033     {
9034       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
9035       if (TYPE_P (scope) && dependent_type_p (scope))
9036         return identifier;
9037     }
9038
9039   return decl;
9040 }
9041
9042 /* Parse a template-argument-list.
9043
9044    template-argument-list:
9045      template-argument
9046      template-argument-list , template-argument
9047
9048    Returns a TREE_VEC containing the arguments.  */
9049
9050 static tree
9051 cp_parser_template_argument_list (cp_parser* parser)
9052 {
9053   tree fixed_args[10];
9054   unsigned n_args = 0;
9055   unsigned alloced = 10;
9056   tree *arg_ary = fixed_args;
9057   tree vec;
9058   bool saved_in_template_argument_list_p;
9059   bool saved_ice_p;
9060   bool saved_non_ice_p;
9061
9062   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
9063   parser->in_template_argument_list_p = true;
9064   /* Even if the template-id appears in an integral
9065      constant-expression, the contents of the argument list do 
9066      not.  */ 
9067   saved_ice_p = parser->integral_constant_expression_p;
9068   parser->integral_constant_expression_p = false;
9069   saved_non_ice_p = parser->non_integral_constant_expression_p;
9070   parser->non_integral_constant_expression_p = false;
9071   /* Parse the arguments.  */
9072   do
9073     {
9074       tree argument;
9075
9076       if (n_args)
9077         /* Consume the comma.  */
9078         cp_lexer_consume_token (parser->lexer);
9079
9080       /* Parse the template-argument.  */
9081       argument = cp_parser_template_argument (parser);
9082       if (n_args == alloced)
9083         {
9084           alloced *= 2;
9085
9086           if (arg_ary == fixed_args)
9087             {
9088               arg_ary = XNEWVEC (tree, alloced);
9089               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
9090             }
9091           else
9092             arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
9093         }
9094       arg_ary[n_args++] = argument;
9095     }
9096   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
9097
9098   vec = make_tree_vec (n_args);
9099
9100   while (n_args--)
9101     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
9102
9103   if (arg_ary != fixed_args)
9104     free (arg_ary);
9105   parser->non_integral_constant_expression_p = saved_non_ice_p;
9106   parser->integral_constant_expression_p = saved_ice_p;
9107   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
9108   return vec;
9109 }
9110
9111 /* Parse a template-argument.
9112
9113    template-argument:
9114      assignment-expression
9115      type-id
9116      id-expression
9117
9118    The representation is that of an assignment-expression, type-id, or
9119    id-expression -- except that the qualified id-expression is
9120    evaluated, so that the value returned is either a DECL or an
9121    OVERLOAD.
9122
9123    Although the standard says "assignment-expression", it forbids
9124    throw-expressions or assignments in the template argument.
9125    Therefore, we use "conditional-expression" instead.  */
9126
9127 static tree
9128 cp_parser_template_argument (cp_parser* parser)
9129 {
9130   tree argument;
9131   bool template_p;
9132   bool address_p;
9133   bool maybe_type_id = false;
9134   cp_token *token;
9135   cp_id_kind idk;
9136
9137   /* There's really no way to know what we're looking at, so we just
9138      try each alternative in order.
9139
9140        [temp.arg]
9141
9142        In a template-argument, an ambiguity between a type-id and an
9143        expression is resolved to a type-id, regardless of the form of
9144        the corresponding template-parameter.
9145
9146      Therefore, we try a type-id first.  */
9147   cp_parser_parse_tentatively (parser);
9148   argument = cp_parser_type_id (parser);
9149   /* If there was no error parsing the type-id but the next token is a '>>',
9150      we probably found a typo for '> >'. But there are type-id which are
9151      also valid expressions. For instance:
9152
9153      struct X { int operator >> (int); };
9154      template <int V> struct Foo {};
9155      Foo<X () >> 5> r;
9156
9157      Here 'X()' is a valid type-id of a function type, but the user just
9158      wanted to write the expression "X() >> 5". Thus, we remember that we
9159      found a valid type-id, but we still try to parse the argument as an
9160      expression to see what happens.  */
9161   if (!cp_parser_error_occurred (parser)
9162       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
9163     {
9164       maybe_type_id = true;
9165       cp_parser_abort_tentative_parse (parser);
9166     }
9167   else
9168     {
9169       /* If the next token isn't a `,' or a `>', then this argument wasn't
9170       really finished. This means that the argument is not a valid
9171       type-id.  */
9172       if (!cp_parser_next_token_ends_template_argument_p (parser))
9173         cp_parser_error (parser, "expected template-argument");
9174       /* If that worked, we're done.  */
9175       if (cp_parser_parse_definitely (parser))
9176         return argument;
9177     }
9178   /* We're still not sure what the argument will be.  */
9179   cp_parser_parse_tentatively (parser);
9180   /* Try a template.  */
9181   argument = cp_parser_id_expression (parser,
9182                                       /*template_keyword_p=*/false,
9183                                       /*check_dependency_p=*/true,
9184                                       &template_p,
9185                                       /*declarator_p=*/false,
9186                                       /*optional_p=*/false);
9187   /* If the next token isn't a `,' or a `>', then this argument wasn't
9188      really finished.  */
9189   if (!cp_parser_next_token_ends_template_argument_p (parser))
9190     cp_parser_error (parser, "expected template-argument");
9191   if (!cp_parser_error_occurred (parser))
9192     {
9193       /* Figure out what is being referred to.  If the id-expression
9194          was for a class template specialization, then we will have a
9195          TYPE_DECL at this point.  There is no need to do name lookup
9196          at this point in that case.  */
9197       if (TREE_CODE (argument) != TYPE_DECL)
9198         argument = cp_parser_lookup_name (parser, argument,
9199                                           none_type,
9200                                           /*is_template=*/template_p,
9201                                           /*is_namespace=*/false,
9202                                           /*check_dependency=*/true,
9203                                           /*ambiguous_decls=*/NULL);
9204       if (TREE_CODE (argument) != TEMPLATE_DECL
9205           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
9206         cp_parser_error (parser, "expected template-name");
9207     }
9208   if (cp_parser_parse_definitely (parser))
9209     return argument;
9210   /* It must be a non-type argument.  There permitted cases are given
9211      in [temp.arg.nontype]:
9212
9213      -- an integral constant-expression of integral or enumeration
9214         type; or
9215
9216      -- the name of a non-type template-parameter; or
9217
9218      -- the name of an object or function with external linkage...
9219
9220      -- the address of an object or function with external linkage...
9221
9222      -- a pointer to member...  */
9223   /* Look for a non-type template parameter.  */
9224   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
9225     {
9226       cp_parser_parse_tentatively (parser);
9227       argument = cp_parser_primary_expression (parser,
9228                                                /*adress_p=*/false,
9229                                                /*cast_p=*/false,
9230                                                /*template_arg_p=*/true,
9231                                                &idk);
9232       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
9233           || !cp_parser_next_token_ends_template_argument_p (parser))
9234         cp_parser_simulate_error (parser);
9235       if (cp_parser_parse_definitely (parser))
9236         return argument;
9237     }
9238
9239   /* If the next token is "&", the argument must be the address of an
9240      object or function with external linkage.  */
9241   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
9242   if (address_p)
9243     cp_lexer_consume_token (parser->lexer);
9244   /* See if we might have an id-expression.  */
9245   token = cp_lexer_peek_token (parser->lexer);
9246   if (token->type == CPP_NAME
9247       || token->keyword == RID_OPERATOR
9248       || token->type == CPP_SCOPE
9249       || token->type == CPP_TEMPLATE_ID
9250       || token->type == CPP_NESTED_NAME_SPECIFIER)
9251     {
9252       cp_parser_parse_tentatively (parser);
9253       argument = cp_parser_primary_expression (parser,
9254                                                address_p,
9255                                                /*cast_p=*/false,
9256                                                /*template_arg_p=*/true,
9257                                                &idk);
9258       if (cp_parser_error_occurred (parser)
9259           || !cp_parser_next_token_ends_template_argument_p (parser))
9260         cp_parser_abort_tentative_parse (parser);
9261       else
9262         {
9263           if (TREE_CODE (argument) == INDIRECT_REF)
9264             {
9265               gcc_assert (REFERENCE_REF_P (argument));
9266               argument = TREE_OPERAND (argument, 0);
9267             }
9268
9269           if (TREE_CODE (argument) == BASELINK)
9270             /* We don't need the information about what class was used
9271                to name the overloaded functions.  */  
9272             argument = BASELINK_FUNCTIONS (argument);
9273
9274           if (TREE_CODE (argument) == VAR_DECL)
9275             {
9276               /* A variable without external linkage might still be a
9277                  valid constant-expression, so no error is issued here
9278                  if the external-linkage check fails.  */
9279               if (!DECL_EXTERNAL_LINKAGE_P (argument))
9280                 cp_parser_simulate_error (parser);
9281             }
9282           else if (is_overloaded_fn (argument))
9283             /* All overloaded functions are allowed; if the external
9284                linkage test does not pass, an error will be issued
9285                later.  */
9286             ;
9287           else if (address_p
9288                    && (TREE_CODE (argument) == OFFSET_REF
9289                        || TREE_CODE (argument) == SCOPE_REF))
9290             /* A pointer-to-member.  */
9291             ;
9292           else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
9293             ;
9294           else
9295             cp_parser_simulate_error (parser);
9296
9297           if (cp_parser_parse_definitely (parser))
9298             {
9299               if (address_p)
9300                 argument = build_x_unary_op (ADDR_EXPR, argument);
9301               return argument;
9302             }
9303         }
9304     }
9305   /* If the argument started with "&", there are no other valid
9306      alternatives at this point.  */
9307   if (address_p)
9308     {
9309       cp_parser_error (parser, "invalid non-type template argument");
9310       return error_mark_node;
9311     }
9312
9313   /* If the argument wasn't successfully parsed as a type-id followed
9314      by '>>', the argument can only be a constant expression now.
9315      Otherwise, we try parsing the constant-expression tentatively,
9316      because the argument could really be a type-id.  */
9317   if (maybe_type_id)
9318     cp_parser_parse_tentatively (parser);
9319   argument = cp_parser_constant_expression (parser,
9320                                             /*allow_non_constant_p=*/false,
9321                                             /*non_constant_p=*/NULL);
9322   argument = fold_non_dependent_expr (argument);
9323   if (!maybe_type_id)
9324     return argument;
9325   if (!cp_parser_next_token_ends_template_argument_p (parser))
9326     cp_parser_error (parser, "expected template-argument");
9327   if (cp_parser_parse_definitely (parser))
9328     return argument;
9329   /* We did our best to parse the argument as a non type-id, but that
9330      was the only alternative that matched (albeit with a '>' after
9331      it). We can assume it's just a typo from the user, and a
9332      diagnostic will then be issued.  */
9333   return cp_parser_type_id (parser);
9334 }
9335
9336 /* Parse an explicit-instantiation.
9337
9338    explicit-instantiation:
9339      template declaration
9340
9341    Although the standard says `declaration', what it really means is:
9342
9343    explicit-instantiation:
9344      template decl-specifier-seq [opt] declarator [opt] ;
9345
9346    Things like `template int S<int>::i = 5, int S<double>::j;' are not
9347    supposed to be allowed.  A defect report has been filed about this
9348    issue.
9349
9350    GNU Extension:
9351
9352    explicit-instantiation:
9353      storage-class-specifier template
9354        decl-specifier-seq [opt] declarator [opt] ;
9355      function-specifier template
9356        decl-specifier-seq [opt] declarator [opt] ;  */
9357
9358 static void
9359 cp_parser_explicit_instantiation (cp_parser* parser)
9360 {
9361   int declares_class_or_enum;
9362   cp_decl_specifier_seq decl_specifiers;
9363   tree extension_specifier = NULL_TREE;
9364
9365   /* Look for an (optional) storage-class-specifier or
9366      function-specifier.  */
9367   if (cp_parser_allow_gnu_extensions_p (parser))
9368     {
9369       extension_specifier
9370         = cp_parser_storage_class_specifier_opt (parser);
9371       if (!extension_specifier)
9372         extension_specifier
9373           = cp_parser_function_specifier_opt (parser,
9374                                               /*decl_specs=*/NULL);
9375     }
9376
9377   /* Look for the `template' keyword.  */
9378   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9379   /* Let the front end know that we are processing an explicit
9380      instantiation.  */
9381   begin_explicit_instantiation ();
9382   /* [temp.explicit] says that we are supposed to ignore access
9383      control while processing explicit instantiation directives.  */
9384   push_deferring_access_checks (dk_no_check);
9385   /* Parse a decl-specifier-seq.  */
9386   cp_parser_decl_specifier_seq (parser,
9387                                 CP_PARSER_FLAGS_OPTIONAL,
9388                                 &decl_specifiers,
9389                                 &declares_class_or_enum);
9390   /* If there was exactly one decl-specifier, and it declared a class,
9391      and there's no declarator, then we have an explicit type
9392      instantiation.  */
9393   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
9394     {
9395       tree type;
9396
9397       type = check_tag_decl (&decl_specifiers);
9398       /* Turn access control back on for names used during
9399          template instantiation.  */
9400       pop_deferring_access_checks ();
9401       if (type)
9402         do_type_instantiation (type, extension_specifier,
9403                                /*complain=*/tf_error);
9404     }
9405   else
9406     {
9407       cp_declarator *declarator;
9408       tree decl;
9409
9410       /* Parse the declarator.  */
9411       declarator
9412         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
9413                                 /*ctor_dtor_or_conv_p=*/NULL,
9414                                 /*parenthesized_p=*/NULL,
9415                                 /*member_p=*/false);
9416       if (declares_class_or_enum & 2)
9417         cp_parser_check_for_definition_in_return_type (declarator,
9418                                                        decl_specifiers.type);
9419       if (declarator != cp_error_declarator)
9420         {
9421           decl = grokdeclarator (declarator, &decl_specifiers,
9422                                  NORMAL, 0, NULL);
9423           /* Turn access control back on for names used during
9424              template instantiation.  */
9425           pop_deferring_access_checks ();
9426           /* Do the explicit instantiation.  */
9427           do_decl_instantiation (decl, extension_specifier);
9428         }
9429       else
9430         {
9431           pop_deferring_access_checks ();
9432           /* Skip the body of the explicit instantiation.  */
9433           cp_parser_skip_to_end_of_statement (parser);
9434         }
9435     }
9436   /* We're done with the instantiation.  */
9437   end_explicit_instantiation ();
9438
9439   cp_parser_consume_semicolon_at_end_of_statement (parser);
9440 }
9441
9442 /* Parse an explicit-specialization.
9443
9444    explicit-specialization:
9445      template < > declaration
9446
9447    Although the standard says `declaration', what it really means is:
9448
9449    explicit-specialization:
9450      template <> decl-specifier [opt] init-declarator [opt] ;
9451      template <> function-definition
9452      template <> explicit-specialization
9453      template <> template-declaration  */
9454
9455 static void
9456 cp_parser_explicit_specialization (cp_parser* parser)
9457 {
9458   bool need_lang_pop;
9459   /* Look for the `template' keyword.  */
9460   cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9461   /* Look for the `<'.  */
9462   cp_parser_require (parser, CPP_LESS, "`<'");
9463   /* Look for the `>'.  */
9464   cp_parser_require (parser, CPP_GREATER, "`>'");
9465   /* We have processed another parameter list.  */
9466   ++parser->num_template_parameter_lists;
9467   /* [temp]
9468    
9469      A template ... explicit specialization ... shall not have C
9470      linkage.  */ 
9471   if (current_lang_name == lang_name_c)
9472     {
9473       error ("template specialization with C linkage");
9474       /* Give it C++ linkage to avoid confusing other parts of the
9475          front end.  */
9476       push_lang_context (lang_name_cplusplus);
9477       need_lang_pop = true;
9478     }
9479   else
9480     need_lang_pop = false;
9481   /* Let the front end know that we are beginning a specialization.  */
9482   begin_specialization ();
9483   /* If the next keyword is `template', we need to figure out whether
9484      or not we're looking a template-declaration.  */
9485   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
9486     {
9487       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
9488           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
9489         cp_parser_template_declaration_after_export (parser,
9490                                                      /*member_p=*/false);
9491       else
9492         cp_parser_explicit_specialization (parser);
9493     }
9494   else
9495     /* Parse the dependent declaration.  */
9496     cp_parser_single_declaration (parser,
9497                                   /*checks=*/NULL_TREE,
9498                                   /*member_p=*/false,
9499                                   /*friend_p=*/NULL);
9500   /* We're done with the specialization.  */
9501   end_specialization ();
9502   /* For the erroneous case of a template with C linkage, we pushed an
9503      implicit C++ linkage scope; exit that scope now.  */
9504   if (need_lang_pop)
9505     pop_lang_context ();
9506   /* We're done with this parameter list.  */
9507   --parser->num_template_parameter_lists;
9508 }
9509
9510 /* Parse a type-specifier.
9511
9512    type-specifier:
9513      simple-type-specifier
9514      class-specifier
9515      enum-specifier
9516      elaborated-type-specifier
9517      cv-qualifier
9518
9519    GNU Extension:
9520
9521    type-specifier:
9522      __complex__
9523
9524    Returns a representation of the type-specifier.  For a
9525    class-specifier, enum-specifier, or elaborated-type-specifier, a
9526    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
9527
9528    The parser flags FLAGS is used to control type-specifier parsing.
9529
9530    If IS_DECLARATION is TRUE, then this type-specifier is appearing
9531    in a decl-specifier-seq.
9532
9533    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
9534    class-specifier, enum-specifier, or elaborated-type-specifier, then
9535    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
9536    if a type is declared; 2 if it is defined.  Otherwise, it is set to
9537    zero.
9538
9539    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
9540    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
9541    is set to FALSE.  */
9542
9543 static tree
9544 cp_parser_type_specifier (cp_parser* parser,
9545                           cp_parser_flags flags,
9546                           cp_decl_specifier_seq *decl_specs,
9547                           bool is_declaration,
9548                           int* declares_class_or_enum,
9549                           bool* is_cv_qualifier)
9550 {
9551   tree type_spec = NULL_TREE;
9552   cp_token *token;
9553   enum rid keyword;
9554   cp_decl_spec ds = ds_last;
9555
9556   /* Assume this type-specifier does not declare a new type.  */
9557   if (declares_class_or_enum)
9558     *declares_class_or_enum = 0;
9559   /* And that it does not specify a cv-qualifier.  */
9560   if (is_cv_qualifier)
9561     *is_cv_qualifier = false;
9562   /* Peek at the next token.  */
9563   token = cp_lexer_peek_token (parser->lexer);
9564
9565   /* If we're looking at a keyword, we can use that to guide the
9566      production we choose.  */
9567   keyword = token->keyword;
9568   switch (keyword)
9569     {
9570     case RID_ENUM:
9571       /* 'enum' [identifier] '{' introduces an enum-specifier;
9572          'enum' <anything else> introduces an elaborated-type-specifier.  */
9573       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_OPEN_BRACE
9574           || (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME
9575               && cp_lexer_peek_nth_token (parser->lexer, 3)->type
9576                  == CPP_OPEN_BRACE))
9577         {
9578           if (parser->num_template_parameter_lists)
9579             {
9580               error ("template declaration of %qs", "enum");
9581               cp_parser_skip_to_end_of_block_or_statement (parser);
9582               type_spec = error_mark_node;
9583             }
9584           else
9585             type_spec = cp_parser_enum_specifier (parser);
9586
9587           if (declares_class_or_enum)
9588             *declares_class_or_enum = 2;
9589           if (decl_specs)
9590             cp_parser_set_decl_spec_type (decl_specs,
9591                                           type_spec,
9592                                           /*user_defined_p=*/true);
9593           return type_spec;
9594         }
9595       else
9596         goto elaborated_type_specifier;
9597
9598       /* Any of these indicate either a class-specifier, or an
9599          elaborated-type-specifier.  */
9600     case RID_CLASS:
9601     case RID_STRUCT:
9602     case RID_UNION:
9603       /* Parse tentatively so that we can back up if we don't find a
9604          class-specifier.  */
9605       cp_parser_parse_tentatively (parser);
9606       /* Look for the class-specifier.  */
9607       type_spec = cp_parser_class_specifier (parser);
9608       /* If that worked, we're done.  */
9609       if (cp_parser_parse_definitely (parser))
9610         {
9611           if (declares_class_or_enum)
9612             *declares_class_or_enum = 2;
9613           if (decl_specs)
9614             cp_parser_set_decl_spec_type (decl_specs,
9615                                           type_spec,
9616                                           /*user_defined_p=*/true);
9617           return type_spec;
9618         }
9619
9620       /* Fall through.  */
9621     elaborated_type_specifier:
9622       /* We're declaring (not defining) a class or enum.  */
9623       if (declares_class_or_enum)
9624         *declares_class_or_enum = 1;
9625
9626       /* Fall through.  */
9627     case RID_TYPENAME:
9628       /* Look for an elaborated-type-specifier.  */
9629       type_spec
9630         = (cp_parser_elaborated_type_specifier
9631            (parser,
9632             decl_specs && decl_specs->specs[(int) ds_friend],
9633             is_declaration));
9634       if (decl_specs)
9635         cp_parser_set_decl_spec_type (decl_specs,
9636                                       type_spec,
9637                                       /*user_defined_p=*/true);
9638       return type_spec;
9639
9640     case RID_CONST:
9641       ds = ds_const;
9642       if (is_cv_qualifier)
9643         *is_cv_qualifier = true;
9644       break;
9645
9646     case RID_VOLATILE:
9647       ds = ds_volatile;
9648       if (is_cv_qualifier)
9649         *is_cv_qualifier = true;
9650       break;
9651
9652     case RID_RESTRICT:
9653       ds = ds_restrict;
9654       if (is_cv_qualifier)
9655         *is_cv_qualifier = true;
9656       break;
9657
9658     case RID_COMPLEX:
9659       /* The `__complex__' keyword is a GNU extension.  */
9660       ds = ds_complex;
9661       break;
9662
9663     default:
9664       break;
9665     }
9666
9667   /* Handle simple keywords.  */
9668   if (ds != ds_last)
9669     {
9670       if (decl_specs)
9671         {
9672           ++decl_specs->specs[(int)ds];
9673           decl_specs->any_specifiers_p = true;
9674         }
9675       return cp_lexer_consume_token (parser->lexer)->value;
9676     }
9677
9678   /* If we do not already have a type-specifier, assume we are looking
9679      at a simple-type-specifier.  */
9680   type_spec = cp_parser_simple_type_specifier (parser,
9681                                                decl_specs,
9682                                                flags);
9683
9684   /* If we didn't find a type-specifier, and a type-specifier was not
9685      optional in this context, issue an error message.  */
9686   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9687     {
9688       cp_parser_error (parser, "expected type specifier");
9689       return error_mark_node;
9690     }
9691
9692   return type_spec;
9693 }
9694
9695 /* Parse a simple-type-specifier.
9696
9697    simple-type-specifier:
9698      :: [opt] nested-name-specifier [opt] type-name
9699      :: [opt] nested-name-specifier template template-id
9700      char
9701      wchar_t
9702      bool
9703      short
9704      int
9705      long
9706      signed
9707      unsigned
9708      float
9709      double
9710      void
9711
9712    GNU Extension:
9713
9714    simple-type-specifier:
9715      __typeof__ unary-expression
9716      __typeof__ ( type-id )
9717
9718    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
9719    appropriately updated.  */
9720
9721 static tree
9722 cp_parser_simple_type_specifier (cp_parser* parser,
9723                                  cp_decl_specifier_seq *decl_specs,
9724                                  cp_parser_flags flags)
9725 {
9726   tree type = NULL_TREE;
9727   cp_token *token;
9728
9729   /* Peek at the next token.  */
9730   token = cp_lexer_peek_token (parser->lexer);
9731
9732   /* If we're looking at a keyword, things are easy.  */
9733   switch (token->keyword)
9734     {
9735     case RID_CHAR:
9736       if (decl_specs)
9737         decl_specs->explicit_char_p = true;
9738       type = char_type_node;
9739       break;
9740     case RID_WCHAR:
9741       type = wchar_type_node;
9742       break;
9743     case RID_BOOL:
9744       type = boolean_type_node;
9745       break;
9746     case RID_SHORT:
9747       if (decl_specs)
9748         ++decl_specs->specs[(int) ds_short];
9749       type = short_integer_type_node;
9750       break;
9751     case RID_INT:
9752       if (decl_specs)
9753         decl_specs->explicit_int_p = true;
9754       type = integer_type_node;
9755       break;
9756     case RID_LONG:
9757       if (decl_specs)
9758         ++decl_specs->specs[(int) ds_long];
9759       type = long_integer_type_node;
9760       break;
9761     case RID_SIGNED:
9762       if (decl_specs)
9763         ++decl_specs->specs[(int) ds_signed];
9764       type = integer_type_node;
9765       break;
9766     case RID_UNSIGNED:
9767       if (decl_specs)
9768         ++decl_specs->specs[(int) ds_unsigned];
9769       type = unsigned_type_node;
9770       break;
9771     case RID_FLOAT:
9772       type = float_type_node;
9773       break;
9774     case RID_DOUBLE:
9775       type = double_type_node;
9776       break;
9777     case RID_VOID:
9778       type = void_type_node;
9779       break;
9780
9781     case RID_TYPEOF:
9782       /* Consume the `typeof' token.  */
9783       cp_lexer_consume_token (parser->lexer);
9784       /* Parse the operand to `typeof'.  */
9785       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
9786       /* If it is not already a TYPE, take its type.  */
9787       if (!TYPE_P (type))
9788         type = finish_typeof (type);
9789
9790       if (decl_specs)
9791         cp_parser_set_decl_spec_type (decl_specs, type,
9792                                       /*user_defined_p=*/true);
9793
9794       return type;
9795
9796     default:
9797       break;
9798     }
9799
9800   /* If the type-specifier was for a built-in type, we're done.  */
9801   if (type)
9802     {
9803       tree id;
9804
9805       /* Record the type.  */
9806       if (decl_specs
9807           && (token->keyword != RID_SIGNED
9808               && token->keyword != RID_UNSIGNED
9809               && token->keyword != RID_SHORT
9810               && token->keyword != RID_LONG))
9811         cp_parser_set_decl_spec_type (decl_specs,
9812                                       type,
9813                                       /*user_defined=*/false);
9814       if (decl_specs)
9815         decl_specs->any_specifiers_p = true;
9816
9817       /* Consume the token.  */
9818       id = cp_lexer_consume_token (parser->lexer)->value;
9819
9820       /* There is no valid C++ program where a non-template type is
9821          followed by a "<".  That usually indicates that the user thought
9822          that the type was a template.  */
9823       cp_parser_check_for_invalid_template_id (parser, type);
9824
9825       return TYPE_NAME (type);
9826     }
9827
9828   /* The type-specifier must be a user-defined type.  */
9829   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
9830     {
9831       bool qualified_p;
9832       bool global_p;
9833
9834       /* Don't gobble tokens or issue error messages if this is an
9835          optional type-specifier.  */
9836       if (flags & CP_PARSER_FLAGS_OPTIONAL)
9837         cp_parser_parse_tentatively (parser);
9838
9839       /* Look for the optional `::' operator.  */
9840       global_p
9841         = (cp_parser_global_scope_opt (parser,
9842                                        /*current_scope_valid_p=*/false)
9843            != NULL_TREE);
9844       /* Look for the nested-name specifier.  */
9845       qualified_p
9846         = (cp_parser_nested_name_specifier_opt (parser,
9847                                                 /*typename_keyword_p=*/false,
9848                                                 /*check_dependency_p=*/true,
9849                                                 /*type_p=*/false,
9850                                                 /*is_declaration=*/false)
9851            != NULL_TREE);
9852       /* If we have seen a nested-name-specifier, and the next token
9853          is `template', then we are using the template-id production.  */
9854       if (parser->scope
9855           && cp_parser_optional_template_keyword (parser))
9856         {
9857           /* Look for the template-id.  */
9858           type = cp_parser_template_id (parser,
9859                                         /*template_keyword_p=*/true,
9860                                         /*check_dependency_p=*/true,
9861                                         /*is_declaration=*/false);
9862           /* If the template-id did not name a type, we are out of
9863              luck.  */
9864           if (TREE_CODE (type) != TYPE_DECL)
9865             {
9866               cp_parser_error (parser, "expected template-id for type");
9867               type = NULL_TREE;
9868             }
9869         }
9870       /* Otherwise, look for a type-name.  */
9871       else
9872         type = cp_parser_type_name (parser);
9873       /* Keep track of all name-lookups performed in class scopes.  */
9874       if (type
9875           && !global_p
9876           && !qualified_p
9877           && TREE_CODE (type) == TYPE_DECL
9878           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
9879         maybe_note_name_used_in_class (DECL_NAME (type), type);
9880       /* If it didn't work out, we don't have a TYPE.  */
9881       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
9882           && !cp_parser_parse_definitely (parser))
9883         type = NULL_TREE;
9884       if (type && decl_specs)
9885         cp_parser_set_decl_spec_type (decl_specs, type,
9886                                       /*user_defined=*/true);
9887     }
9888
9889   /* If we didn't get a type-name, issue an error message.  */
9890   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9891     {
9892       cp_parser_error (parser, "expected type-name");
9893       return error_mark_node;
9894     }
9895
9896   /* There is no valid C++ program where a non-template type is
9897      followed by a "<".  That usually indicates that the user thought
9898      that the type was a template.  */
9899   if (type && type != error_mark_node)
9900     {
9901       /* As a last-ditch effort, see if TYPE is an Objective-C type.
9902          If it is, then the '<'...'>' enclose protocol names rather than
9903          template arguments, and so everything is fine.  */
9904       if (c_dialect_objc ()
9905           && (objc_is_id (type) || objc_is_class_name (type)))
9906         {
9907           tree protos = cp_parser_objc_protocol_refs_opt (parser);
9908           tree qual_type = objc_get_protocol_qualified_type (type, protos);
9909
9910           /* Clobber the "unqualified" type previously entered into
9911              DECL_SPECS with the new, improved protocol-qualified version.  */
9912           if (decl_specs)
9913             decl_specs->type = qual_type;
9914
9915           return qual_type;
9916         }
9917
9918       cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type));
9919     }
9920
9921   return type;
9922 }
9923
9924 /* Parse a type-name.
9925
9926    type-name:
9927      class-name
9928      enum-name
9929      typedef-name
9930
9931    enum-name:
9932      identifier
9933
9934    typedef-name:
9935      identifier
9936
9937    Returns a TYPE_DECL for the type.  */
9938
9939 static tree
9940 cp_parser_type_name (cp_parser* parser)
9941 {
9942   tree type_decl;
9943   tree identifier;
9944
9945   /* We can't know yet whether it is a class-name or not.  */
9946   cp_parser_parse_tentatively (parser);
9947   /* Try a class-name.  */
9948   type_decl = cp_parser_class_name (parser,
9949                                     /*typename_keyword_p=*/false,
9950                                     /*template_keyword_p=*/false,
9951                                     none_type,
9952                                     /*check_dependency_p=*/true,
9953                                     /*class_head_p=*/false,
9954                                     /*is_declaration=*/false);
9955   /* If it's not a class-name, keep looking.  */
9956   if (!cp_parser_parse_definitely (parser))
9957     {
9958       /* It must be a typedef-name or an enum-name.  */
9959       identifier = cp_parser_identifier (parser);
9960       if (identifier == error_mark_node)
9961         return error_mark_node;
9962
9963       /* Look up the type-name.  */
9964       type_decl = cp_parser_lookup_name_simple (parser, identifier);
9965
9966       if (TREE_CODE (type_decl) != TYPE_DECL
9967           && (objc_is_id (identifier) || objc_is_class_name (identifier)))
9968         {
9969           /* See if this is an Objective-C type.  */
9970           tree protos = cp_parser_objc_protocol_refs_opt (parser);
9971           tree type = objc_get_protocol_qualified_type (identifier, protos);
9972           if (type)
9973             type_decl = TYPE_NAME (type);
9974         }
9975
9976       /* Issue an error if we did not find a type-name.  */
9977       if (TREE_CODE (type_decl) != TYPE_DECL)
9978         {
9979           if (!cp_parser_simulate_error (parser))
9980             cp_parser_name_lookup_error (parser, identifier, type_decl,
9981                                          "is not a type");
9982           type_decl = error_mark_node;
9983         }
9984       /* Remember that the name was used in the definition of the
9985          current class so that we can check later to see if the
9986          meaning would have been different after the class was
9987          entirely defined.  */
9988       else if (type_decl != error_mark_node
9989                && !parser->scope)
9990         maybe_note_name_used_in_class (identifier, type_decl);
9991     }
9992
9993   return type_decl;
9994 }
9995
9996
9997 /* Parse an elaborated-type-specifier.  Note that the grammar given
9998    here incorporates the resolution to DR68.
9999
10000    elaborated-type-specifier:
10001      class-key :: [opt] nested-name-specifier [opt] identifier
10002      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
10003      enum :: [opt] nested-name-specifier [opt] identifier
10004      typename :: [opt] nested-name-specifier identifier
10005      typename :: [opt] nested-name-specifier template [opt]
10006        template-id
10007
10008    GNU extension:
10009
10010    elaborated-type-specifier:
10011      class-key attributes :: [opt] nested-name-specifier [opt] identifier
10012      class-key attributes :: [opt] nested-name-specifier [opt]
10013                template [opt] template-id
10014      enum attributes :: [opt] nested-name-specifier [opt] identifier
10015
10016    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
10017    declared `friend'.  If IS_DECLARATION is TRUE, then this
10018    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
10019    something is being declared.
10020
10021    Returns the TYPE specified.  */
10022
10023 static tree
10024 cp_parser_elaborated_type_specifier (cp_parser* parser,
10025                                      bool is_friend,
10026                                      bool is_declaration)
10027 {
10028   enum tag_types tag_type;
10029   tree identifier;
10030   tree type = NULL_TREE;
10031   tree attributes = NULL_TREE;
10032
10033   /* See if we're looking at the `enum' keyword.  */
10034   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
10035     {
10036       /* Consume the `enum' token.  */
10037       cp_lexer_consume_token (parser->lexer);
10038       /* Remember that it's an enumeration type.  */
10039       tag_type = enum_type;
10040       /* Parse the attributes.  */
10041       attributes = cp_parser_attributes_opt (parser);
10042     }
10043   /* Or, it might be `typename'.  */
10044   else if (cp_lexer_next_token_is_keyword (parser->lexer,
10045                                            RID_TYPENAME))
10046     {
10047       /* Consume the `typename' token.  */
10048       cp_lexer_consume_token (parser->lexer);
10049       /* Remember that it's a `typename' type.  */
10050       tag_type = typename_type;
10051       /* The `typename' keyword is only allowed in templates.  */
10052       if (!processing_template_decl)
10053         pedwarn ("using %<typename%> outside of template");
10054     }
10055   /* Otherwise it must be a class-key.  */
10056   else
10057     {
10058       tag_type = cp_parser_class_key (parser);
10059       if (tag_type == none_type)
10060         return error_mark_node;
10061       /* Parse the attributes.  */
10062       attributes = cp_parser_attributes_opt (parser);
10063     }
10064
10065   /* Look for the `::' operator.  */
10066   cp_parser_global_scope_opt (parser,
10067                               /*current_scope_valid_p=*/false);
10068   /* Look for the nested-name-specifier.  */
10069   if (tag_type == typename_type)
10070     {
10071       if (!cp_parser_nested_name_specifier (parser,
10072                                            /*typename_keyword_p=*/true,
10073                                            /*check_dependency_p=*/true,
10074                                            /*type_p=*/true,
10075                                             is_declaration))
10076         return error_mark_node;
10077     }
10078   else
10079     /* Even though `typename' is not present, the proposed resolution
10080        to Core Issue 180 says that in `class A<T>::B', `B' should be
10081        considered a type-name, even if `A<T>' is dependent.  */
10082     cp_parser_nested_name_specifier_opt (parser,
10083                                          /*typename_keyword_p=*/true,
10084                                          /*check_dependency_p=*/true,
10085                                          /*type_p=*/true,
10086                                          is_declaration);
10087   /* For everything but enumeration types, consider a template-id.  */
10088   if (tag_type != enum_type)
10089     {
10090       bool template_p = false;
10091       tree decl;
10092
10093       /* Allow the `template' keyword.  */
10094       template_p = cp_parser_optional_template_keyword (parser);
10095       /* If we didn't see `template', we don't know if there's a
10096          template-id or not.  */
10097       if (!template_p)
10098         cp_parser_parse_tentatively (parser);
10099       /* Parse the template-id.  */
10100       decl = cp_parser_template_id (parser, template_p,
10101                                     /*check_dependency_p=*/true,
10102                                     is_declaration);
10103       /* If we didn't find a template-id, look for an ordinary
10104          identifier.  */
10105       if (!template_p && !cp_parser_parse_definitely (parser))
10106         ;
10107       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
10108          in effect, then we must assume that, upon instantiation, the
10109          template will correspond to a class.  */
10110       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
10111                && tag_type == typename_type)
10112         type = make_typename_type (parser->scope, decl,
10113                                    typename_type,
10114                                    /*complain=*/tf_error);
10115       else
10116         type = TREE_TYPE (decl);
10117     }
10118
10119   /* For an enumeration type, consider only a plain identifier.  */
10120   if (!type)
10121     {
10122       identifier = cp_parser_identifier (parser);
10123
10124       if (identifier == error_mark_node)
10125         {
10126           parser->scope = NULL_TREE;
10127           return error_mark_node;
10128         }
10129
10130       /* For a `typename', we needn't call xref_tag.  */
10131       if (tag_type == typename_type
10132           && TREE_CODE (parser->scope) != NAMESPACE_DECL)
10133         return cp_parser_make_typename_type (parser, parser->scope,
10134                                              identifier);
10135       /* Look up a qualified name in the usual way.  */
10136       if (parser->scope)
10137         {
10138           tree decl;
10139
10140           decl = cp_parser_lookup_name (parser, identifier,
10141                                         tag_type,
10142                                         /*is_template=*/false,
10143                                         /*is_namespace=*/false,
10144                                         /*check_dependency=*/true,
10145                                         /*ambiguous_decls=*/NULL);
10146
10147           /* If we are parsing friend declaration, DECL may be a
10148              TEMPLATE_DECL tree node here.  However, we need to check
10149              whether this TEMPLATE_DECL results in valid code.  Consider
10150              the following example:
10151
10152                namespace N {
10153                  template <class T> class C {};
10154                }
10155                class X {
10156                  template <class T> friend class N::C; // #1, valid code
10157                };
10158                template <class T> class Y {
10159                  friend class N::C;                    // #2, invalid code
10160                };
10161
10162              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
10163              name lookup of `N::C'.  We see that friend declaration must
10164              be template for the code to be valid.  Note that
10165              processing_template_decl does not work here since it is
10166              always 1 for the above two cases.  */
10167
10168           decl = (cp_parser_maybe_treat_template_as_class
10169                   (decl, /*tag_name_p=*/is_friend
10170                          && parser->num_template_parameter_lists));
10171
10172           if (TREE_CODE (decl) != TYPE_DECL)
10173             {
10174               cp_parser_diagnose_invalid_type_name (parser,
10175                                                     parser->scope,
10176                                                     identifier);
10177               return error_mark_node;
10178             }
10179
10180           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
10181             check_elaborated_type_specifier
10182               (tag_type, decl,
10183                (parser->num_template_parameter_lists
10184                 || DECL_SELF_REFERENCE_P (decl)));
10185
10186           type = TREE_TYPE (decl);
10187         }
10188       else
10189         {
10190           /* An elaborated-type-specifier sometimes introduces a new type and
10191              sometimes names an existing type.  Normally, the rule is that it
10192              introduces a new type only if there is not an existing type of
10193              the same name already in scope.  For example, given:
10194
10195                struct S {};
10196                void f() { struct S s; }
10197
10198              the `struct S' in the body of `f' is the same `struct S' as in
10199              the global scope; the existing definition is used.  However, if
10200              there were no global declaration, this would introduce a new
10201              local class named `S'.
10202
10203              An exception to this rule applies to the following code:
10204
10205                namespace N { struct S; }
10206
10207              Here, the elaborated-type-specifier names a new type
10208              unconditionally; even if there is already an `S' in the
10209              containing scope this declaration names a new type.
10210              This exception only applies if the elaborated-type-specifier
10211              forms the complete declaration:
10212
10213                [class.name]
10214
10215                A declaration consisting solely of `class-key identifier ;' is
10216                either a redeclaration of the name in the current scope or a
10217                forward declaration of the identifier as a class name.  It
10218                introduces the name into the current scope.
10219
10220              We are in this situation precisely when the next token is a `;'.
10221
10222              An exception to the exception is that a `friend' declaration does
10223              *not* name a new type; i.e., given:
10224
10225                struct S { friend struct T; };
10226
10227              `T' is not a new type in the scope of `S'.
10228
10229              Also, `new struct S' or `sizeof (struct S)' never results in the
10230              definition of a new type; a new type can only be declared in a
10231              declaration context.  */
10232
10233           tag_scope ts;
10234           bool template_p;
10235
10236           if (is_friend)
10237             /* Friends have special name lookup rules.  */
10238             ts = ts_within_enclosing_non_class;
10239           else if (is_declaration
10240                    && cp_lexer_next_token_is (parser->lexer,
10241                                               CPP_SEMICOLON))
10242             /* This is a `class-key identifier ;' */
10243             ts = ts_current;
10244           else
10245             ts = ts_global;
10246
10247           /* Warn about attributes. They are ignored.  */
10248           if (attributes)
10249             warning (OPT_Wattributes,
10250                      "type attributes are honored only at type definition");
10251
10252           template_p = 
10253             (parser->num_template_parameter_lists
10254              && (cp_parser_next_token_starts_class_definition_p (parser)
10255                  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
10256           /* An unqualified name was used to reference this type, so
10257              there were no qualifying templates.  */
10258           if (!cp_parser_check_template_parameters (parser, 
10259                                                     /*num_templates=*/0))
10260             return error_mark_node;
10261           type = xref_tag (tag_type, identifier, ts, template_p);
10262         }
10263     }
10264   if (tag_type != enum_type)
10265     cp_parser_check_class_key (tag_type, type);
10266
10267   /* A "<" cannot follow an elaborated type specifier.  If that
10268      happens, the user was probably trying to form a template-id.  */
10269   cp_parser_check_for_invalid_template_id (parser, type);
10270
10271   return type;
10272 }
10273
10274 /* Parse an enum-specifier.
10275
10276    enum-specifier:
10277      enum identifier [opt] { enumerator-list [opt] }
10278
10279    GNU Extensions:
10280      enum identifier [opt] { enumerator-list [opt] } attributes
10281
10282    Returns an ENUM_TYPE representing the enumeration.  */
10283
10284 static tree
10285 cp_parser_enum_specifier (cp_parser* parser)
10286 {
10287   tree identifier;
10288   tree type;
10289
10290   /* Caller guarantees that the current token is 'enum', an identifier
10291      possibly follows, and the token after that is an opening brace.
10292      If we don't have an identifier, fabricate an anonymous name for
10293      the enumeration being defined.  */
10294   cp_lexer_consume_token (parser->lexer);
10295
10296   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10297     identifier = cp_parser_identifier (parser);
10298   else
10299     identifier = make_anon_name ();
10300
10301   /* Issue an error message if type-definitions are forbidden here.  */
10302   cp_parser_check_type_definition (parser);
10303
10304   /* Create the new type.  We do this before consuming the opening brace
10305      so the enum will be recorded as being on the line of its tag (or the
10306      'enum' keyword, if there is no tag).  */
10307   type = start_enum (identifier);
10308
10309   /* Consume the opening brace.  */
10310   cp_lexer_consume_token (parser->lexer);
10311
10312   /* If the next token is not '}', then there are some enumerators.  */
10313   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
10314     cp_parser_enumerator_list (parser, type);
10315
10316   /* Consume the final '}'.  */
10317   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10318
10319   /* Look for trailing attributes to apply to this enumeration, and
10320      apply them if appropriate.  */
10321   if (cp_parser_allow_gnu_extensions_p (parser))
10322     {
10323       tree trailing_attr = cp_parser_attributes_opt (parser);
10324       cplus_decl_attributes (&type,
10325                              trailing_attr,
10326                              (int) ATTR_FLAG_TYPE_IN_PLACE);
10327     }
10328
10329   /* Finish up the enumeration.  */
10330   finish_enum (type);
10331
10332   return type;
10333 }
10334
10335 /* Parse an enumerator-list.  The enumerators all have the indicated
10336    TYPE.
10337
10338    enumerator-list:
10339      enumerator-definition
10340      enumerator-list , enumerator-definition  */
10341
10342 static void
10343 cp_parser_enumerator_list (cp_parser* parser, tree type)
10344 {
10345   while (true)
10346     {
10347       /* Parse an enumerator-definition.  */
10348       cp_parser_enumerator_definition (parser, type);
10349
10350       /* If the next token is not a ',', we've reached the end of
10351          the list.  */
10352       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
10353         break;
10354       /* Otherwise, consume the `,' and keep going.  */
10355       cp_lexer_consume_token (parser->lexer);
10356       /* If the next token is a `}', there is a trailing comma.  */
10357       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
10358         {
10359           if (pedantic && !in_system_header)
10360             pedwarn ("comma at end of enumerator list");
10361           break;
10362         }
10363     }
10364 }
10365
10366 /* Parse an enumerator-definition.  The enumerator has the indicated
10367    TYPE.
10368
10369    enumerator-definition:
10370      enumerator
10371      enumerator = constant-expression
10372
10373    enumerator:
10374      identifier  */
10375
10376 static void
10377 cp_parser_enumerator_definition (cp_parser* parser, tree type)
10378 {
10379   tree identifier;
10380   tree value;
10381
10382   /* Look for the identifier.  */
10383   identifier = cp_parser_identifier (parser);
10384   if (identifier == error_mark_node)
10385     return;
10386
10387   /* If the next token is an '=', then there is an explicit value.  */
10388   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
10389     {
10390       /* Consume the `=' token.  */
10391       cp_lexer_consume_token (parser->lexer);
10392       /* Parse the value.  */
10393       value = cp_parser_constant_expression (parser,
10394                                              /*allow_non_constant_p=*/false,
10395                                              NULL);
10396     }
10397   else
10398     value = NULL_TREE;
10399
10400   /* Create the enumerator.  */
10401   build_enumerator (identifier, value, type);
10402 }
10403
10404 /* Parse a namespace-name.
10405
10406    namespace-name:
10407      original-namespace-name
10408      namespace-alias
10409
10410    Returns the NAMESPACE_DECL for the namespace.  */
10411
10412 static tree
10413 cp_parser_namespace_name (cp_parser* parser)
10414 {
10415   tree identifier;
10416   tree namespace_decl;
10417
10418   /* Get the name of the namespace.  */
10419   identifier = cp_parser_identifier (parser);
10420   if (identifier == error_mark_node)
10421     return error_mark_node;
10422
10423   /* Look up the identifier in the currently active scope.  Look only
10424      for namespaces, due to:
10425
10426        [basic.lookup.udir]
10427
10428        When looking up a namespace-name in a using-directive or alias
10429        definition, only namespace names are considered.
10430
10431      And:
10432
10433        [basic.lookup.qual]
10434
10435        During the lookup of a name preceding the :: scope resolution
10436        operator, object, function, and enumerator names are ignored.
10437
10438      (Note that cp_parser_class_or_namespace_name only calls this
10439      function if the token after the name is the scope resolution
10440      operator.)  */
10441   namespace_decl = cp_parser_lookup_name (parser, identifier,
10442                                           none_type,
10443                                           /*is_template=*/false,
10444                                           /*is_namespace=*/true,
10445                                           /*check_dependency=*/true,
10446                                           /*ambiguous_decls=*/NULL);
10447   /* If it's not a namespace, issue an error.  */
10448   if (namespace_decl == error_mark_node
10449       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
10450     {
10451       if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
10452         error ("%qD is not a namespace-name", identifier);
10453       cp_parser_error (parser, "expected namespace-name");
10454       namespace_decl = error_mark_node;
10455     }
10456
10457   return namespace_decl;
10458 }
10459
10460 /* Parse a namespace-definition.
10461
10462    namespace-definition:
10463      named-namespace-definition
10464      unnamed-namespace-definition
10465
10466    named-namespace-definition:
10467      original-namespace-definition
10468      extension-namespace-definition
10469
10470    original-namespace-definition:
10471      namespace identifier { namespace-body }
10472
10473    extension-namespace-definition:
10474      namespace original-namespace-name { namespace-body }
10475
10476    unnamed-namespace-definition:
10477      namespace { namespace-body } */
10478
10479 static void
10480 cp_parser_namespace_definition (cp_parser* parser)
10481 {
10482   tree identifier, attribs;
10483
10484   /* Look for the `namespace' keyword.  */
10485   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10486
10487   /* Get the name of the namespace.  We do not attempt to distinguish
10488      between an original-namespace-definition and an
10489      extension-namespace-definition at this point.  The semantic
10490      analysis routines are responsible for that.  */
10491   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10492     identifier = cp_parser_identifier (parser);
10493   else
10494     identifier = NULL_TREE;
10495
10496   /* Parse any specified attributes.  */
10497   attribs = cp_parser_attributes_opt (parser);
10498
10499   /* Look for the `{' to start the namespace.  */
10500   cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
10501   /* Start the namespace.  */
10502   push_namespace_with_attribs (identifier, attribs);
10503   /* Parse the body of the namespace.  */
10504   cp_parser_namespace_body (parser);
10505   /* Finish the namespace.  */
10506   pop_namespace ();
10507   /* Look for the final `}'.  */
10508   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10509 }
10510
10511 /* Parse a namespace-body.
10512
10513    namespace-body:
10514      declaration-seq [opt]  */
10515
10516 static void
10517 cp_parser_namespace_body (cp_parser* parser)
10518 {
10519   cp_parser_declaration_seq_opt (parser);
10520 }
10521
10522 /* Parse a namespace-alias-definition.
10523
10524    namespace-alias-definition:
10525      namespace identifier = qualified-namespace-specifier ;  */
10526
10527 static void
10528 cp_parser_namespace_alias_definition (cp_parser* parser)
10529 {
10530   tree identifier;
10531   tree namespace_specifier;
10532
10533   /* Look for the `namespace' keyword.  */
10534   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10535   /* Look for the identifier.  */
10536   identifier = cp_parser_identifier (parser);
10537   if (identifier == error_mark_node)
10538     return;
10539   /* Look for the `=' token.  */
10540   cp_parser_require (parser, CPP_EQ, "`='");
10541   /* Look for the qualified-namespace-specifier.  */
10542   namespace_specifier
10543     = cp_parser_qualified_namespace_specifier (parser);
10544   /* Look for the `;' token.  */
10545   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10546
10547   /* Register the alias in the symbol table.  */
10548   do_namespace_alias (identifier, namespace_specifier);
10549 }
10550
10551 /* Parse a qualified-namespace-specifier.
10552
10553    qualified-namespace-specifier:
10554      :: [opt] nested-name-specifier [opt] namespace-name
10555
10556    Returns a NAMESPACE_DECL corresponding to the specified
10557    namespace.  */
10558
10559 static tree
10560 cp_parser_qualified_namespace_specifier (cp_parser* parser)
10561 {
10562   /* Look for the optional `::'.  */
10563   cp_parser_global_scope_opt (parser,
10564                               /*current_scope_valid_p=*/false);
10565
10566   /* Look for the optional nested-name-specifier.  */
10567   cp_parser_nested_name_specifier_opt (parser,
10568                                        /*typename_keyword_p=*/false,
10569                                        /*check_dependency_p=*/true,
10570                                        /*type_p=*/false,
10571                                        /*is_declaration=*/true);
10572
10573   return cp_parser_namespace_name (parser);
10574 }
10575
10576 /* Parse a using-declaration.
10577
10578    using-declaration:
10579      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
10580      using :: unqualified-id ;  */
10581
10582 static void
10583 cp_parser_using_declaration (cp_parser* parser)
10584 {
10585   cp_token *token;
10586   bool typename_p = false;
10587   bool global_scope_p;
10588   tree decl;
10589   tree identifier;
10590   tree qscope;
10591
10592   /* Look for the `using' keyword.  */
10593   cp_parser_require_keyword (parser, RID_USING, "`using'");
10594
10595   /* Peek at the next token.  */
10596   token = cp_lexer_peek_token (parser->lexer);
10597   /* See if it's `typename'.  */
10598   if (token->keyword == RID_TYPENAME)
10599     {
10600       /* Remember that we've seen it.  */
10601       typename_p = true;
10602       /* Consume the `typename' token.  */
10603       cp_lexer_consume_token (parser->lexer);
10604     }
10605
10606   /* Look for the optional global scope qualification.  */
10607   global_scope_p
10608     = (cp_parser_global_scope_opt (parser,
10609                                    /*current_scope_valid_p=*/false)
10610        != NULL_TREE);
10611
10612   /* If we saw `typename', or didn't see `::', then there must be a
10613      nested-name-specifier present.  */
10614   if (typename_p || !global_scope_p)
10615     qscope = cp_parser_nested_name_specifier (parser, typename_p,
10616                                               /*check_dependency_p=*/true,
10617                                               /*type_p=*/false,
10618                                               /*is_declaration=*/true);
10619   /* Otherwise, we could be in either of the two productions.  In that
10620      case, treat the nested-name-specifier as optional.  */
10621   else
10622     qscope = cp_parser_nested_name_specifier_opt (parser,
10623                                                   /*typename_keyword_p=*/false,
10624                                                   /*check_dependency_p=*/true,
10625                                                   /*type_p=*/false,
10626                                                   /*is_declaration=*/true);
10627   if (!qscope)
10628     qscope = global_namespace;
10629
10630   /* Parse the unqualified-id.  */
10631   identifier = cp_parser_unqualified_id (parser,
10632                                          /*template_keyword_p=*/false,
10633                                          /*check_dependency_p=*/true,
10634                                          /*declarator_p=*/true,
10635                                          /*optional_p=*/false);
10636
10637   /* The function we call to handle a using-declaration is different
10638      depending on what scope we are in.  */
10639   if (qscope == error_mark_node || identifier == error_mark_node)
10640     ;
10641   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
10642            && TREE_CODE (identifier) != BIT_NOT_EXPR)
10643     /* [namespace.udecl]
10644
10645        A using declaration shall not name a template-id.  */
10646     error ("a template-id may not appear in a using-declaration");
10647   else
10648     {
10649       if (at_class_scope_p ())
10650         {
10651           /* Create the USING_DECL.  */
10652           decl = do_class_using_decl (parser->scope, identifier);
10653           /* Add it to the list of members in this class.  */
10654           finish_member_declaration (decl);
10655         }
10656       else
10657         {
10658           decl = cp_parser_lookup_name_simple (parser, identifier);
10659           if (decl == error_mark_node)
10660             cp_parser_name_lookup_error (parser, identifier, decl, NULL);
10661           else if (!at_namespace_scope_p ())
10662             do_local_using_decl (decl, qscope, identifier);
10663           else
10664             do_toplevel_using_decl (decl, qscope, identifier);
10665         }
10666     }
10667
10668   /* Look for the final `;'.  */
10669   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10670 }
10671
10672 /* Parse a using-directive.
10673
10674    using-directive:
10675      using namespace :: [opt] nested-name-specifier [opt]
10676        namespace-name ;  */
10677
10678 static void
10679 cp_parser_using_directive (cp_parser* parser)
10680 {
10681   tree namespace_decl;
10682   tree attribs;
10683
10684   /* Look for the `using' keyword.  */
10685   cp_parser_require_keyword (parser, RID_USING, "`using'");
10686   /* And the `namespace' keyword.  */
10687   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10688   /* Look for the optional `::' operator.  */
10689   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
10690   /* And the optional nested-name-specifier.  */
10691   cp_parser_nested_name_specifier_opt (parser,
10692                                        /*typename_keyword_p=*/false,
10693                                        /*check_dependency_p=*/true,
10694                                        /*type_p=*/false,
10695                                        /*is_declaration=*/true);
10696   /* Get the namespace being used.  */
10697   namespace_decl = cp_parser_namespace_name (parser);
10698   /* And any specified attributes.  */
10699   attribs = cp_parser_attributes_opt (parser);
10700   /* Update the symbol table.  */
10701   parse_using_directive (namespace_decl, attribs);
10702   /* Look for the final `;'.  */
10703   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10704 }
10705
10706 /* Parse an asm-definition.
10707
10708    asm-definition:
10709      asm ( string-literal ) ;
10710
10711    GNU Extension:
10712
10713    asm-definition:
10714      asm volatile [opt] ( string-literal ) ;
10715      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
10716      asm volatile [opt] ( string-literal : asm-operand-list [opt]
10717                           : asm-operand-list [opt] ) ;
10718      asm volatile [opt] ( string-literal : asm-operand-list [opt]
10719                           : asm-operand-list [opt]
10720                           : asm-operand-list [opt] ) ;  */
10721
10722 static void
10723 cp_parser_asm_definition (cp_parser* parser)
10724 {
10725   tree string;
10726   tree outputs = NULL_TREE;
10727   tree inputs = NULL_TREE;
10728   tree clobbers = NULL_TREE;
10729   tree asm_stmt;
10730   bool volatile_p = false;
10731   bool extended_p = false;
10732
10733   /* Look for the `asm' keyword.  */
10734   cp_parser_require_keyword (parser, RID_ASM, "`asm'");
10735   /* See if the next token is `volatile'.  */
10736   if (cp_parser_allow_gnu_extensions_p (parser)
10737       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
10738     {
10739       /* Remember that we saw the `volatile' keyword.  */
10740       volatile_p = true;
10741       /* Consume the token.  */
10742       cp_lexer_consume_token (parser->lexer);
10743     }
10744   /* Look for the opening `('.  */
10745   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
10746     return;
10747   /* Look for the string.  */
10748   string = cp_parser_string_literal (parser, false, false);
10749   if (string == error_mark_node)
10750     {
10751       cp_parser_skip_to_closing_parenthesis (parser, true, false,
10752                                              /*consume_paren=*/true);
10753       return;
10754     }
10755
10756   /* If we're allowing GNU extensions, check for the extended assembly
10757      syntax.  Unfortunately, the `:' tokens need not be separated by
10758      a space in C, and so, for compatibility, we tolerate that here
10759      too.  Doing that means that we have to treat the `::' operator as
10760      two `:' tokens.  */
10761   if (cp_parser_allow_gnu_extensions_p (parser)
10762       && at_function_scope_p ()
10763       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
10764           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
10765     {
10766       bool inputs_p = false;
10767       bool clobbers_p = false;
10768
10769       /* The extended syntax was used.  */
10770       extended_p = true;
10771
10772       /* Look for outputs.  */
10773       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10774         {
10775           /* Consume the `:'.  */
10776           cp_lexer_consume_token (parser->lexer);
10777           /* Parse the output-operands.  */
10778           if (cp_lexer_next_token_is_not (parser->lexer,
10779                                           CPP_COLON)
10780               && cp_lexer_next_token_is_not (parser->lexer,
10781                                              CPP_SCOPE)
10782               && cp_lexer_next_token_is_not (parser->lexer,
10783                                              CPP_CLOSE_PAREN))
10784             outputs = cp_parser_asm_operand_list (parser);
10785         }
10786       /* If the next token is `::', there are no outputs, and the
10787          next token is the beginning of the inputs.  */
10788       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10789         /* The inputs are coming next.  */
10790         inputs_p = true;
10791
10792       /* Look for inputs.  */
10793       if (inputs_p
10794           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10795         {
10796           /* Consume the `:' or `::'.  */
10797           cp_lexer_consume_token (parser->lexer);
10798           /* Parse the output-operands.  */
10799           if (cp_lexer_next_token_is_not (parser->lexer,
10800                                           CPP_COLON)
10801               && cp_lexer_next_token_is_not (parser->lexer,
10802                                              CPP_CLOSE_PAREN))
10803             inputs = cp_parser_asm_operand_list (parser);
10804         }
10805       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10806         /* The clobbers are coming next.  */
10807         clobbers_p = true;
10808
10809       /* Look for clobbers.  */
10810       if (clobbers_p
10811           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10812         {
10813           /* Consume the `:' or `::'.  */
10814           cp_lexer_consume_token (parser->lexer);
10815           /* Parse the clobbers.  */
10816           if (cp_lexer_next_token_is_not (parser->lexer,
10817                                           CPP_CLOSE_PAREN))
10818             clobbers = cp_parser_asm_clobber_list (parser);
10819         }
10820     }
10821   /* Look for the closing `)'.  */
10822   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
10823     cp_parser_skip_to_closing_parenthesis (parser, true, false,
10824                                            /*consume_paren=*/true);
10825   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10826
10827   /* Create the ASM_EXPR.  */
10828   if (at_function_scope_p ())
10829     {
10830       asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
10831                                   inputs, clobbers);
10832       /* If the extended syntax was not used, mark the ASM_EXPR.  */
10833       if (!extended_p)
10834         {
10835           tree temp = asm_stmt;
10836           if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
10837             temp = TREE_OPERAND (temp, 0);
10838
10839           ASM_INPUT_P (temp) = 1;
10840         }
10841     }
10842   else
10843     cgraph_add_asm_node (string);
10844 }
10845
10846 /* Declarators [gram.dcl.decl] */
10847
10848 /* Parse an init-declarator.
10849
10850    init-declarator:
10851      declarator initializer [opt]
10852
10853    GNU Extension:
10854
10855    init-declarator:
10856      declarator asm-specification [opt] attributes [opt] initializer [opt]
10857
10858    function-definition:
10859      decl-specifier-seq [opt] declarator ctor-initializer [opt]
10860        function-body
10861      decl-specifier-seq [opt] declarator function-try-block
10862
10863    GNU Extension:
10864
10865    function-definition:
10866      __extension__ function-definition
10867
10868    The DECL_SPECIFIERS apply to this declarator.  Returns a
10869    representation of the entity declared.  If MEMBER_P is TRUE, then
10870    this declarator appears in a class scope.  The new DECL created by
10871    this declarator is returned.
10872
10873    The CHECKS are access checks that should be performed once we know
10874    what entity is being declared (and, therefore, what classes have
10875    befriended it).
10876
10877    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
10878    for a function-definition here as well.  If the declarator is a
10879    declarator for a function-definition, *FUNCTION_DEFINITION_P will
10880    be TRUE upon return.  By that point, the function-definition will
10881    have been completely parsed.
10882
10883    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
10884    is FALSE.  */
10885
10886 static tree
10887 cp_parser_init_declarator (cp_parser* parser,
10888                            cp_decl_specifier_seq *decl_specifiers,
10889                            tree checks,
10890                            bool function_definition_allowed_p,
10891                            bool member_p,
10892                            int declares_class_or_enum,
10893                            bool* function_definition_p)
10894 {
10895   cp_token *token;
10896   cp_declarator *declarator;
10897   tree prefix_attributes;
10898   tree attributes;
10899   tree asm_specification;
10900   tree initializer;
10901   tree decl = NULL_TREE;
10902   tree scope;
10903   bool is_initialized;
10904   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
10905      initialized with "= ..", CPP_OPEN_PAREN if initialized with
10906      "(...)".  */
10907   enum cpp_ttype initialization_kind;
10908   bool is_parenthesized_init = false;
10909   bool is_non_constant_init;
10910   int ctor_dtor_or_conv_p;
10911   bool friend_p;
10912   tree pushed_scope = NULL;
10913
10914   /* Gather the attributes that were provided with the
10915      decl-specifiers.  */
10916   prefix_attributes = decl_specifiers->attributes;
10917
10918   /* Assume that this is not the declarator for a function
10919      definition.  */
10920   if (function_definition_p)
10921     *function_definition_p = false;
10922
10923   /* Defer access checks while parsing the declarator; we cannot know
10924      what names are accessible until we know what is being
10925      declared.  */
10926   resume_deferring_access_checks ();
10927
10928   /* Parse the declarator.  */
10929   declarator
10930     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
10931                             &ctor_dtor_or_conv_p,
10932                             /*parenthesized_p=*/NULL,
10933                             /*member_p=*/false);
10934   /* Gather up the deferred checks.  */
10935   stop_deferring_access_checks ();
10936
10937   /* If the DECLARATOR was erroneous, there's no need to go
10938      further.  */
10939   if (declarator == cp_error_declarator)
10940     return error_mark_node;
10941
10942   if (declares_class_or_enum & 2)
10943     cp_parser_check_for_definition_in_return_type (declarator,
10944                                                    decl_specifiers->type);
10945
10946   /* Figure out what scope the entity declared by the DECLARATOR is
10947      located in.  `grokdeclarator' sometimes changes the scope, so
10948      we compute it now.  */
10949   scope = get_scope_of_declarator (declarator);
10950
10951   /* If we're allowing GNU extensions, look for an asm-specification
10952      and attributes.  */
10953   if (cp_parser_allow_gnu_extensions_p (parser))
10954     {
10955       /* Look for an asm-specification.  */
10956       asm_specification = cp_parser_asm_specification_opt (parser);
10957       /* And attributes.  */
10958       attributes = cp_parser_attributes_opt (parser);
10959     }
10960   else
10961     {
10962       asm_specification = NULL_TREE;
10963       attributes = NULL_TREE;
10964     }
10965
10966   /* Peek at the next token.  */
10967   token = cp_lexer_peek_token (parser->lexer);
10968   /* Check to see if the token indicates the start of a
10969      function-definition.  */
10970   if (cp_parser_token_starts_function_definition_p (token))
10971     {
10972       if (!function_definition_allowed_p)
10973         {
10974           /* If a function-definition should not appear here, issue an
10975              error message.  */
10976           cp_parser_error (parser,
10977                            "a function-definition is not allowed here");
10978           return error_mark_node;
10979         }
10980       else
10981         {
10982           /* Neither attributes nor an asm-specification are allowed
10983              on a function-definition.  */
10984           if (asm_specification)
10985             error ("an asm-specification is not allowed on a function-definition");
10986           if (attributes)
10987             error ("attributes are not allowed on a function-definition");
10988           /* This is a function-definition.  */
10989           *function_definition_p = true;
10990
10991           /* Parse the function definition.  */
10992           if (member_p)
10993             decl = cp_parser_save_member_function_body (parser,
10994                                                         decl_specifiers,
10995                                                         declarator,
10996                                                         prefix_attributes);
10997           else
10998             decl
10999               = (cp_parser_function_definition_from_specifiers_and_declarator
11000                  (parser, decl_specifiers, prefix_attributes, declarator));
11001
11002           return decl;
11003         }
11004     }
11005
11006   /* [dcl.dcl]
11007
11008      Only in function declarations for constructors, destructors, and
11009      type conversions can the decl-specifier-seq be omitted.
11010
11011      We explicitly postpone this check past the point where we handle
11012      function-definitions because we tolerate function-definitions
11013      that are missing their return types in some modes.  */
11014   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
11015     {
11016       cp_parser_error (parser,
11017                        "expected constructor, destructor, or type conversion");
11018       return error_mark_node;
11019     }
11020
11021   /* An `=' or an `(' indicates an initializer.  */
11022   if (token->type == CPP_EQ
11023       || token->type == CPP_OPEN_PAREN)
11024     {
11025       is_initialized = true;
11026       initialization_kind = token->type;
11027     }
11028   else
11029     {
11030       /* If the init-declarator isn't initialized and isn't followed by a
11031          `,' or `;', it's not a valid init-declarator.  */
11032       if (token->type != CPP_COMMA
11033           && token->type != CPP_SEMICOLON)
11034         {
11035           cp_parser_error (parser, "expected initializer");
11036           return error_mark_node;
11037         }
11038       is_initialized = false;
11039       initialization_kind = CPP_EOF;
11040     }
11041
11042   /* Because start_decl has side-effects, we should only call it if we
11043      know we're going ahead.  By this point, we know that we cannot
11044      possibly be looking at any other construct.  */
11045   cp_parser_commit_to_tentative_parse (parser);
11046
11047   /* If the decl specifiers were bad, issue an error now that we're
11048      sure this was intended to be a declarator.  Then continue
11049      declaring the variable(s), as int, to try to cut down on further
11050      errors.  */
11051   if (decl_specifiers->any_specifiers_p
11052       && decl_specifiers->type == error_mark_node)
11053     {
11054       cp_parser_error (parser, "invalid type in declaration");
11055       decl_specifiers->type = integer_type_node;
11056     }
11057
11058   /* Check to see whether or not this declaration is a friend.  */
11059   friend_p = cp_parser_friend_p (decl_specifiers);
11060
11061   /* Check that the number of template-parameter-lists is OK.  */
11062   if (!cp_parser_check_declarator_template_parameters (parser, declarator))
11063     return error_mark_node;
11064
11065   /* Enter the newly declared entry in the symbol table.  If we're
11066      processing a declaration in a class-specifier, we wait until
11067      after processing the initializer.  */
11068   if (!member_p)
11069     {
11070       if (parser->in_unbraced_linkage_specification_p)
11071         {
11072           decl_specifiers->storage_class = sc_extern;
11073           have_extern_spec = false;
11074         }
11075       decl = start_decl (declarator, decl_specifiers,
11076                          is_initialized, attributes, prefix_attributes,
11077                          &pushed_scope);
11078     }
11079   else if (scope)
11080     /* Enter the SCOPE.  That way unqualified names appearing in the
11081        initializer will be looked up in SCOPE.  */
11082     pushed_scope = push_scope (scope);
11083
11084   /* Perform deferred access control checks, now that we know in which
11085      SCOPE the declared entity resides.  */
11086   if (!member_p && decl)
11087     {
11088       tree saved_current_function_decl = NULL_TREE;
11089
11090       /* If the entity being declared is a function, pretend that we
11091          are in its scope.  If it is a `friend', it may have access to
11092          things that would not otherwise be accessible.  */
11093       if (TREE_CODE (decl) == FUNCTION_DECL)
11094         {
11095           saved_current_function_decl = current_function_decl;
11096           current_function_decl = decl;
11097         }
11098
11099       /* Perform access checks for template parameters.  */
11100       cp_parser_perform_template_parameter_access_checks (checks);
11101
11102       /* Perform the access control checks for the declarator and the
11103          the decl-specifiers.  */
11104       perform_deferred_access_checks ();
11105
11106       /* Restore the saved value.  */
11107       if (TREE_CODE (decl) == FUNCTION_DECL)
11108         current_function_decl = saved_current_function_decl;
11109     }
11110
11111   /* Parse the initializer.  */
11112   initializer = NULL_TREE;
11113   is_parenthesized_init = false;
11114   is_non_constant_init = true;
11115   if (is_initialized)
11116     {
11117       if (declarator->kind == cdk_function
11118           && declarator->declarator->kind == cdk_id
11119           && initialization_kind == CPP_EQ)
11120         initializer = cp_parser_pure_specifier (parser);
11121       else
11122         initializer = cp_parser_initializer (parser,
11123                                              &is_parenthesized_init,
11124                                              &is_non_constant_init);
11125     }
11126
11127   /* The old parser allows attributes to appear after a parenthesized
11128      initializer.  Mark Mitchell proposed removing this functionality
11129      on the GCC mailing lists on 2002-08-13.  This parser accepts the
11130      attributes -- but ignores them.  */
11131   if (cp_parser_allow_gnu_extensions_p (parser) && is_parenthesized_init)
11132     if (cp_parser_attributes_opt (parser))
11133       warning (OPT_Wattributes,
11134                "attributes after parenthesized initializer ignored");
11135
11136   /* For an in-class declaration, use `grokfield' to create the
11137      declaration.  */
11138   if (member_p)
11139     {
11140       if (pushed_scope)
11141         {
11142           pop_scope (pushed_scope);
11143           pushed_scope = false;
11144         }
11145       decl = grokfield (declarator, decl_specifiers,
11146                         initializer, !is_non_constant_init,
11147                         /*asmspec=*/NULL_TREE,
11148                         prefix_attributes);
11149       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
11150         cp_parser_save_default_args (parser, decl);
11151     }
11152
11153   /* Finish processing the declaration.  But, skip friend
11154      declarations.  */
11155   if (!friend_p && decl && decl != error_mark_node)
11156     {
11157       cp_finish_decl (decl,
11158                       initializer, !is_non_constant_init,
11159                       asm_specification,
11160                       /* If the initializer is in parentheses, then this is
11161                          a direct-initialization, which means that an
11162                          `explicit' constructor is OK.  Otherwise, an
11163                          `explicit' constructor cannot be used.  */
11164                       ((is_parenthesized_init || !is_initialized)
11165                      ? 0 : LOOKUP_ONLYCONVERTING));
11166     }
11167   if (!friend_p && pushed_scope)
11168     pop_scope (pushed_scope);
11169
11170   return decl;
11171 }
11172
11173 /* Parse a declarator.
11174
11175    declarator:
11176      direct-declarator
11177      ptr-operator declarator
11178
11179    abstract-declarator:
11180      ptr-operator abstract-declarator [opt]
11181      direct-abstract-declarator
11182
11183    GNU Extensions:
11184
11185    declarator:
11186      attributes [opt] direct-declarator
11187      attributes [opt] ptr-operator declarator
11188
11189    abstract-declarator:
11190      attributes [opt] ptr-operator abstract-declarator [opt]
11191      attributes [opt] direct-abstract-declarator
11192
11193    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
11194    detect constructor, destructor or conversion operators. It is set
11195    to -1 if the declarator is a name, and +1 if it is a
11196    function. Otherwise it is set to zero. Usually you just want to
11197    test for >0, but internally the negative value is used.
11198
11199    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
11200    a decl-specifier-seq unless it declares a constructor, destructor,
11201    or conversion.  It might seem that we could check this condition in
11202    semantic analysis, rather than parsing, but that makes it difficult
11203    to handle something like `f()'.  We want to notice that there are
11204    no decl-specifiers, and therefore realize that this is an
11205    expression, not a declaration.)
11206
11207    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
11208    the declarator is a direct-declarator of the form "(...)".
11209
11210    MEMBER_P is true iff this declarator is a member-declarator.  */
11211
11212 static cp_declarator *
11213 cp_parser_declarator (cp_parser* parser,
11214                       cp_parser_declarator_kind dcl_kind,
11215                       int* ctor_dtor_or_conv_p,
11216                       bool* parenthesized_p,
11217                       bool member_p)
11218 {
11219   cp_token *token;
11220   cp_declarator *declarator;
11221   enum tree_code code;
11222   cp_cv_quals cv_quals;
11223   tree class_type;
11224   tree attributes = NULL_TREE;
11225
11226   /* Assume this is not a constructor, destructor, or type-conversion
11227      operator.  */
11228   if (ctor_dtor_or_conv_p)
11229     *ctor_dtor_or_conv_p = 0;
11230
11231   if (cp_parser_allow_gnu_extensions_p (parser))
11232     attributes = cp_parser_attributes_opt (parser);
11233
11234   /* Peek at the next token.  */
11235   token = cp_lexer_peek_token (parser->lexer);
11236
11237   /* Check for the ptr-operator production.  */
11238   cp_parser_parse_tentatively (parser);
11239   /* Parse the ptr-operator.  */
11240   code = cp_parser_ptr_operator (parser,
11241                                  &class_type,
11242                                  &cv_quals);
11243   /* If that worked, then we have a ptr-operator.  */
11244   if (cp_parser_parse_definitely (parser))
11245     {
11246       /* If a ptr-operator was found, then this declarator was not
11247          parenthesized.  */
11248       if (parenthesized_p)
11249         *parenthesized_p = true;
11250       /* The dependent declarator is optional if we are parsing an
11251          abstract-declarator.  */
11252       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11253         cp_parser_parse_tentatively (parser);
11254
11255       /* Parse the dependent declarator.  */
11256       declarator = cp_parser_declarator (parser, dcl_kind,
11257                                          /*ctor_dtor_or_conv_p=*/NULL,
11258                                          /*parenthesized_p=*/NULL,
11259                                          /*member_p=*/false);
11260
11261       /* If we are parsing an abstract-declarator, we must handle the
11262          case where the dependent declarator is absent.  */
11263       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
11264           && !cp_parser_parse_definitely (parser))
11265         declarator = NULL;
11266
11267       /* Build the representation of the ptr-operator.  */
11268       if (class_type)
11269         declarator = make_ptrmem_declarator (cv_quals,
11270                                              class_type,
11271                                              declarator);
11272       else if (code == INDIRECT_REF)
11273         declarator = make_pointer_declarator (cv_quals, declarator);
11274       else
11275         declarator = make_reference_declarator (cv_quals, declarator);
11276     }
11277   /* Everything else is a direct-declarator.  */
11278   else
11279     {
11280       if (parenthesized_p)
11281         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
11282                                                    CPP_OPEN_PAREN);
11283       declarator = cp_parser_direct_declarator (parser, dcl_kind,
11284                                                 ctor_dtor_or_conv_p,
11285                                                 member_p);
11286     }
11287
11288   if (attributes && declarator != cp_error_declarator)
11289     declarator->attributes = attributes;
11290
11291   return declarator;
11292 }
11293
11294 /* Parse a direct-declarator or direct-abstract-declarator.
11295
11296    direct-declarator:
11297      declarator-id
11298      direct-declarator ( parameter-declaration-clause )
11299        cv-qualifier-seq [opt]
11300        exception-specification [opt]
11301      direct-declarator [ constant-expression [opt] ]
11302      ( declarator )
11303
11304    direct-abstract-declarator:
11305      direct-abstract-declarator [opt]
11306        ( parameter-declaration-clause )
11307        cv-qualifier-seq [opt]
11308        exception-specification [opt]
11309      direct-abstract-declarator [opt] [ constant-expression [opt] ]
11310      ( abstract-declarator )
11311
11312    Returns a representation of the declarator.  DCL_KIND is
11313    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
11314    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
11315    we are parsing a direct-declarator.  It is
11316    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
11317    of ambiguity we prefer an abstract declarator, as per
11318    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
11319    cp_parser_declarator.  */
11320
11321 static cp_declarator *
11322 cp_parser_direct_declarator (cp_parser* parser,
11323                              cp_parser_declarator_kind dcl_kind,
11324                              int* ctor_dtor_or_conv_p,
11325                              bool member_p)
11326 {
11327   cp_token *token;
11328   cp_declarator *declarator = NULL;
11329   tree scope = NULL_TREE;
11330   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
11331   bool saved_in_declarator_p = parser->in_declarator_p;
11332   bool first = true;
11333   tree pushed_scope = NULL_TREE;
11334
11335   while (true)
11336     {
11337       /* Peek at the next token.  */
11338       token = cp_lexer_peek_token (parser->lexer);
11339       if (token->type == CPP_OPEN_PAREN)
11340         {
11341           /* This is either a parameter-declaration-clause, or a
11342              parenthesized declarator. When we know we are parsing a
11343              named declarator, it must be a parenthesized declarator
11344              if FIRST is true. For instance, `(int)' is a
11345              parameter-declaration-clause, with an omitted
11346              direct-abstract-declarator. But `((*))', is a
11347              parenthesized abstract declarator. Finally, when T is a
11348              template parameter `(T)' is a
11349              parameter-declaration-clause, and not a parenthesized
11350              named declarator.
11351
11352              We first try and parse a parameter-declaration-clause,
11353              and then try a nested declarator (if FIRST is true).
11354
11355              It is not an error for it not to be a
11356              parameter-declaration-clause, even when FIRST is
11357              false. Consider,
11358
11359                int i (int);
11360                int i (3);
11361
11362              The first is the declaration of a function while the
11363              second is a the definition of a variable, including its
11364              initializer.
11365
11366              Having seen only the parenthesis, we cannot know which of
11367              these two alternatives should be selected.  Even more
11368              complex are examples like:
11369
11370                int i (int (a));
11371                int i (int (3));
11372
11373              The former is a function-declaration; the latter is a
11374              variable initialization.
11375
11376              Thus again, we try a parameter-declaration-clause, and if
11377              that fails, we back out and return.  */
11378
11379           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11380             {
11381               cp_parameter_declarator *params;
11382               unsigned saved_num_template_parameter_lists;
11383
11384               /* In a member-declarator, the only valid interpretation
11385                  of a parenthesis is the start of a
11386                  parameter-declaration-clause.  (It is invalid to
11387                  initialize a static data member with a parenthesized
11388                  initializer; only the "=" form of initialization is
11389                  permitted.)  */
11390               if (!member_p)
11391                 cp_parser_parse_tentatively (parser);
11392
11393               /* Consume the `('.  */
11394               cp_lexer_consume_token (parser->lexer);
11395               if (first)
11396                 {
11397                   /* If this is going to be an abstract declarator, we're
11398                      in a declarator and we can't have default args.  */
11399                   parser->default_arg_ok_p = false;
11400                   parser->in_declarator_p = true;
11401                 }
11402
11403               /* Inside the function parameter list, surrounding
11404                  template-parameter-lists do not apply.  */
11405               saved_num_template_parameter_lists
11406                 = parser->num_template_parameter_lists;
11407               parser->num_template_parameter_lists = 0;
11408
11409               /* Parse the parameter-declaration-clause.  */
11410               params = cp_parser_parameter_declaration_clause (parser);
11411
11412               parser->num_template_parameter_lists
11413                 = saved_num_template_parameter_lists;
11414
11415               /* If all went well, parse the cv-qualifier-seq and the
11416                  exception-specification.  */
11417               if (member_p || cp_parser_parse_definitely (parser))
11418                 {
11419                   cp_cv_quals cv_quals;
11420                   tree exception_specification;
11421
11422                   if (ctor_dtor_or_conv_p)
11423                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
11424                   first = false;
11425                   /* Consume the `)'.  */
11426                   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
11427
11428                   /* Parse the cv-qualifier-seq.  */
11429                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11430                   /* And the exception-specification.  */
11431                   exception_specification
11432                     = cp_parser_exception_specification_opt (parser);
11433
11434                   /* Create the function-declarator.  */
11435                   declarator = make_call_declarator (declarator,
11436                                                      params,
11437                                                      cv_quals,
11438                                                      exception_specification);
11439                   /* Any subsequent parameter lists are to do with
11440                      return type, so are not those of the declared
11441                      function.  */
11442                   parser->default_arg_ok_p = false;
11443
11444                   /* Repeat the main loop.  */
11445                   continue;
11446                 }
11447             }
11448
11449           /* If this is the first, we can try a parenthesized
11450              declarator.  */
11451           if (first)
11452             {
11453               bool saved_in_type_id_in_expr_p;
11454
11455               parser->default_arg_ok_p = saved_default_arg_ok_p;
11456               parser->in_declarator_p = saved_in_declarator_p;
11457
11458               /* Consume the `('.  */
11459               cp_lexer_consume_token (parser->lexer);
11460               /* Parse the nested declarator.  */
11461               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
11462               parser->in_type_id_in_expr_p = true;
11463               declarator
11464                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
11465                                         /*parenthesized_p=*/NULL,
11466                                         member_p);
11467               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
11468               first = false;
11469               /* Expect a `)'.  */
11470               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
11471                 declarator = cp_error_declarator;
11472               if (declarator == cp_error_declarator)
11473                 break;
11474
11475               goto handle_declarator;
11476             }
11477           /* Otherwise, we must be done.  */
11478           else
11479             break;
11480         }
11481       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11482                && token->type == CPP_OPEN_SQUARE)
11483         {
11484           /* Parse an array-declarator.  */
11485           tree bounds;
11486
11487           if (ctor_dtor_or_conv_p)
11488             *ctor_dtor_or_conv_p = 0;
11489
11490           first = false;
11491           parser->default_arg_ok_p = false;
11492           parser->in_declarator_p = true;
11493           /* Consume the `['.  */
11494           cp_lexer_consume_token (parser->lexer);
11495           /* Peek at the next token.  */
11496           token = cp_lexer_peek_token (parser->lexer);
11497           /* If the next token is `]', then there is no
11498              constant-expression.  */
11499           if (token->type != CPP_CLOSE_SQUARE)
11500             {
11501               bool non_constant_p;
11502
11503               bounds
11504                 = cp_parser_constant_expression (parser,
11505                                                  /*allow_non_constant=*/true,
11506                                                  &non_constant_p);
11507               if (!non_constant_p)
11508                 bounds = fold_non_dependent_expr (bounds);
11509               /* Normally, the array bound must be an integral constant
11510                  expression.  However, as an extension, we allow VLAs
11511                  in function scopes.  */
11512               else if (!at_function_scope_p ())
11513                 {
11514                   error ("array bound is not an integer constant");
11515                   bounds = error_mark_node;
11516                 }
11517             }
11518           else
11519             bounds = NULL_TREE;
11520           /* Look for the closing `]'.  */
11521           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"))
11522             {
11523               declarator = cp_error_declarator;
11524               break;
11525             }
11526
11527           declarator = make_array_declarator (declarator, bounds);
11528         }
11529       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
11530         {
11531           tree qualifying_scope;
11532           tree unqualified_name;
11533           special_function_kind sfk;
11534           bool abstract_ok;
11535
11536           /* Parse a declarator-id */
11537           abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
11538           if (abstract_ok)
11539             cp_parser_parse_tentatively (parser);
11540           unqualified_name 
11541             = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
11542           qualifying_scope = parser->scope;
11543           if (abstract_ok)
11544             {
11545               if (!cp_parser_parse_definitely (parser))
11546                 unqualified_name = error_mark_node;
11547               else if (unqualified_name
11548                        && (qualifying_scope
11549                            || (TREE_CODE (unqualified_name)
11550                                != IDENTIFIER_NODE)))
11551                 {
11552                   cp_parser_error (parser, "expected unqualified-id");
11553                   unqualified_name = error_mark_node;
11554                 }
11555             }
11556
11557           if (!unqualified_name)
11558             return NULL;
11559           if (unqualified_name == error_mark_node)
11560             {
11561               declarator = cp_error_declarator;
11562               break;
11563             }
11564
11565           if (qualifying_scope && at_namespace_scope_p ()
11566               && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
11567             {
11568               /* In the declaration of a member of a template class
11569                  outside of the class itself, the SCOPE will sometimes
11570                  be a TYPENAME_TYPE.  For example, given:
11571
11572                  template <typename T>
11573                  int S<T>::R::i = 3;
11574
11575                  the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
11576                  this context, we must resolve S<T>::R to an ordinary
11577                  type, rather than a typename type.
11578
11579                  The reason we normally avoid resolving TYPENAME_TYPEs
11580                  is that a specialization of `S' might render
11581                  `S<T>::R' not a type.  However, if `S' is
11582                  specialized, then this `i' will not be used, so there
11583                  is no harm in resolving the types here.  */
11584               tree type;
11585
11586               /* Resolve the TYPENAME_TYPE.  */
11587               type = resolve_typename_type (qualifying_scope,
11588                                             /*only_current_p=*/false);
11589               /* If that failed, the declarator is invalid.  */
11590               if (type == error_mark_node)
11591                 error ("%<%T::%D%> is not a type",
11592                        TYPE_CONTEXT (qualifying_scope),
11593                        TYPE_IDENTIFIER (qualifying_scope));
11594               qualifying_scope = type;
11595             }
11596
11597           sfk = sfk_none;
11598           if (unqualified_name)
11599             {
11600               tree class_type;
11601
11602               if (qualifying_scope
11603                   && CLASS_TYPE_P (qualifying_scope))
11604                 class_type = qualifying_scope;
11605               else
11606                 class_type = current_class_type;
11607
11608               if (TREE_CODE (unqualified_name) == TYPE_DECL)
11609                 {
11610                   tree name_type = TREE_TYPE (unqualified_name);
11611                   if (class_type && same_type_p (name_type, class_type))
11612                     {
11613                       if (qualifying_scope
11614                           && CLASSTYPE_USE_TEMPLATE (name_type))
11615                         {
11616                           error ("invalid use of constructor as a template");
11617                           inform ("use %<%T::%D%> instead of %<%T::%D%> to "
11618                                   "name the constructor in a qualified name",
11619                                   class_type,
11620                                   DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
11621                                   class_type, name_type);
11622                           declarator = cp_error_declarator;
11623                           break;
11624                         }
11625                       else
11626                         unqualified_name = constructor_name (class_type);
11627                     }
11628                   else
11629                     {
11630                       /* We do not attempt to print the declarator
11631                          here because we do not have enough
11632                          information about its original syntactic
11633                          form.  */
11634                       cp_parser_error (parser, "invalid declarator");
11635                       declarator = cp_error_declarator;
11636                       break;
11637                     }
11638                 }
11639
11640               if (class_type)
11641                 {
11642                   if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
11643                     sfk = sfk_destructor;
11644                   else if (IDENTIFIER_TYPENAME_P (unqualified_name))
11645                     sfk = sfk_conversion;
11646                   else if (/* There's no way to declare a constructor
11647                               for an anonymous type, even if the type
11648                               got a name for linkage purposes.  */
11649                            !TYPE_WAS_ANONYMOUS (class_type)
11650                            && constructor_name_p (unqualified_name,
11651                                                   class_type))
11652                     {
11653                       unqualified_name = constructor_name (class_type);
11654                       sfk = sfk_constructor;
11655                     }
11656
11657                   if (ctor_dtor_or_conv_p && sfk != sfk_none)
11658                     *ctor_dtor_or_conv_p = -1;
11659                 }
11660             }
11661           declarator = make_id_declarator (qualifying_scope, 
11662                                            unqualified_name,
11663                                            sfk);
11664           declarator->id_loc = token->location;
11665
11666         handle_declarator:;
11667           scope = get_scope_of_declarator (declarator);
11668           if (scope)
11669             /* Any names that appear after the declarator-id for a
11670                member are looked up in the containing scope.  */
11671             pushed_scope = push_scope (scope);
11672           parser->in_declarator_p = true;
11673           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
11674               || (declarator && declarator->kind == cdk_id))
11675             /* Default args are only allowed on function
11676                declarations.  */
11677             parser->default_arg_ok_p = saved_default_arg_ok_p;
11678           else
11679             parser->default_arg_ok_p = false;
11680
11681           first = false;
11682         }
11683       /* We're done.  */
11684       else
11685         break;
11686     }
11687
11688   /* For an abstract declarator, we might wind up with nothing at this
11689      point.  That's an error; the declarator is not optional.  */
11690   if (!declarator)
11691     cp_parser_error (parser, "expected declarator");
11692
11693   /* If we entered a scope, we must exit it now.  */
11694   if (pushed_scope)
11695     pop_scope (pushed_scope);
11696
11697   parser->default_arg_ok_p = saved_default_arg_ok_p;
11698   parser->in_declarator_p = saved_in_declarator_p;
11699
11700   return declarator;
11701 }
11702
11703 /* Parse a ptr-operator.
11704
11705    ptr-operator:
11706      * cv-qualifier-seq [opt]
11707      &
11708      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
11709
11710    GNU Extension:
11711
11712    ptr-operator:
11713      & cv-qualifier-seq [opt]
11714
11715    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
11716    Returns ADDR_EXPR if a reference was used.  In the case of a
11717    pointer-to-member, *TYPE is filled in with the TYPE containing the
11718    member.  *CV_QUALS is filled in with the cv-qualifier-seq, or
11719    TYPE_UNQUALIFIED, if there are no cv-qualifiers.  Returns
11720    ERROR_MARK if an error occurred.  */
11721
11722 static enum tree_code
11723 cp_parser_ptr_operator (cp_parser* parser,
11724                         tree* type,
11725                         cp_cv_quals *cv_quals)
11726 {
11727   enum tree_code code = ERROR_MARK;
11728   cp_token *token;
11729
11730   /* Assume that it's not a pointer-to-member.  */
11731   *type = NULL_TREE;
11732   /* And that there are no cv-qualifiers.  */
11733   *cv_quals = TYPE_UNQUALIFIED;
11734
11735   /* Peek at the next token.  */
11736   token = cp_lexer_peek_token (parser->lexer);
11737   /* If it's a `*' or `&' we have a pointer or reference.  */
11738   if (token->type == CPP_MULT || token->type == CPP_AND)
11739     {
11740       /* Remember which ptr-operator we were processing.  */
11741       code = (token->type == CPP_AND ? ADDR_EXPR : INDIRECT_REF);
11742
11743       /* Consume the `*' or `&'.  */
11744       cp_lexer_consume_token (parser->lexer);
11745
11746       /* A `*' can be followed by a cv-qualifier-seq, and so can a
11747          `&', if we are allowing GNU extensions.  (The only qualifier
11748          that can legally appear after `&' is `restrict', but that is
11749          enforced during semantic analysis.  */
11750       if (code == INDIRECT_REF
11751           || cp_parser_allow_gnu_extensions_p (parser))
11752         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11753     }
11754   else
11755     {
11756       /* Try the pointer-to-member case.  */
11757       cp_parser_parse_tentatively (parser);
11758       /* Look for the optional `::' operator.  */
11759       cp_parser_global_scope_opt (parser,
11760                                   /*current_scope_valid_p=*/false);
11761       /* Look for the nested-name specifier.  */
11762       cp_parser_nested_name_specifier (parser,
11763                                        /*typename_keyword_p=*/false,
11764                                        /*check_dependency_p=*/true,
11765                                        /*type_p=*/false,
11766                                        /*is_declaration=*/false);
11767       /* If we found it, and the next token is a `*', then we are
11768          indeed looking at a pointer-to-member operator.  */
11769       if (!cp_parser_error_occurred (parser)
11770           && cp_parser_require (parser, CPP_MULT, "`*'"))
11771         {
11772           /* Indicate that the `*' operator was used.  */
11773           code = INDIRECT_REF;
11774
11775           if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
11776             error ("%qD is a namespace", parser->scope);
11777           else
11778             {
11779               /* The type of which the member is a member is given by the
11780                  current SCOPE.  */
11781               *type = parser->scope;
11782               /* The next name will not be qualified.  */
11783               parser->scope = NULL_TREE;
11784               parser->qualifying_scope = NULL_TREE;
11785               parser->object_scope = NULL_TREE;
11786               /* Look for the optional cv-qualifier-seq.  */
11787               *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11788             }
11789         }
11790       /* If that didn't work we don't have a ptr-operator.  */
11791       if (!cp_parser_parse_definitely (parser))
11792         cp_parser_error (parser, "expected ptr-operator");
11793     }
11794
11795   return code;
11796 }
11797
11798 /* Parse an (optional) cv-qualifier-seq.
11799
11800    cv-qualifier-seq:
11801      cv-qualifier cv-qualifier-seq [opt]
11802
11803    cv-qualifier:
11804      const
11805      volatile
11806
11807    GNU Extension:
11808
11809    cv-qualifier:
11810      __restrict__
11811
11812    Returns a bitmask representing the cv-qualifiers.  */
11813
11814 static cp_cv_quals
11815 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
11816 {
11817   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
11818
11819   while (true)
11820     {
11821       cp_token *token;
11822       cp_cv_quals cv_qualifier;
11823
11824       /* Peek at the next token.  */
11825       token = cp_lexer_peek_token (parser->lexer);
11826       /* See if it's a cv-qualifier.  */
11827       switch (token->keyword)
11828         {
11829         case RID_CONST:
11830           cv_qualifier = TYPE_QUAL_CONST;
11831           break;
11832
11833         case RID_VOLATILE:
11834           cv_qualifier = TYPE_QUAL_VOLATILE;
11835           break;
11836
11837         case RID_RESTRICT:
11838           cv_qualifier = TYPE_QUAL_RESTRICT;
11839           break;
11840
11841         default:
11842           cv_qualifier = TYPE_UNQUALIFIED;
11843           break;
11844         }
11845
11846       if (!cv_qualifier)
11847         break;
11848
11849       if (cv_quals & cv_qualifier)
11850         {
11851           error ("duplicate cv-qualifier");
11852           cp_lexer_purge_token (parser->lexer);
11853         }
11854       else
11855         {
11856           cp_lexer_consume_token (parser->lexer);
11857           cv_quals |= cv_qualifier;
11858         }
11859     }
11860
11861   return cv_quals;
11862 }
11863
11864 /* Parse a declarator-id.
11865
11866    declarator-id:
11867      id-expression
11868      :: [opt] nested-name-specifier [opt] type-name
11869
11870    In the `id-expression' case, the value returned is as for
11871    cp_parser_id_expression if the id-expression was an unqualified-id.
11872    If the id-expression was a qualified-id, then a SCOPE_REF is
11873    returned.  The first operand is the scope (either a NAMESPACE_DECL
11874    or TREE_TYPE), but the second is still just a representation of an
11875    unqualified-id.  */
11876
11877 static tree
11878 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
11879 {
11880   tree id;
11881   /* The expression must be an id-expression.  Assume that qualified
11882      names are the names of types so that:
11883
11884        template <class T>
11885        int S<T>::R::i = 3;
11886
11887      will work; we must treat `S<T>::R' as the name of a type.
11888      Similarly, assume that qualified names are templates, where
11889      required, so that:
11890
11891        template <class T>
11892        int S<T>::R<T>::i = 3;
11893
11894      will work, too.  */
11895   id = cp_parser_id_expression (parser,
11896                                 /*template_keyword_p=*/false,
11897                                 /*check_dependency_p=*/false,
11898                                 /*template_p=*/NULL,
11899                                 /*declarator_p=*/true,
11900                                 optional_p);
11901   if (id && BASELINK_P (id))
11902     id = BASELINK_FUNCTIONS (id);
11903   return id;
11904 }
11905
11906 /* Parse a type-id.
11907
11908    type-id:
11909      type-specifier-seq abstract-declarator [opt]
11910
11911    Returns the TYPE specified.  */
11912
11913 static tree
11914 cp_parser_type_id (cp_parser* parser)
11915 {
11916   cp_decl_specifier_seq type_specifier_seq;
11917   cp_declarator *abstract_declarator;
11918
11919   /* Parse the type-specifier-seq.  */
11920   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
11921                                 &type_specifier_seq);
11922   if (type_specifier_seq.type == error_mark_node)
11923     return error_mark_node;
11924
11925   /* There might or might not be an abstract declarator.  */
11926   cp_parser_parse_tentatively (parser);
11927   /* Look for the declarator.  */
11928   abstract_declarator
11929     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
11930                             /*parenthesized_p=*/NULL,
11931                             /*member_p=*/false);
11932   /* Check to see if there really was a declarator.  */
11933   if (!cp_parser_parse_definitely (parser))
11934     abstract_declarator = NULL;
11935
11936   return groktypename (&type_specifier_seq, abstract_declarator);
11937 }
11938
11939 /* Parse a type-specifier-seq.
11940
11941    type-specifier-seq:
11942      type-specifier type-specifier-seq [opt]
11943
11944    GNU extension:
11945
11946    type-specifier-seq:
11947      attributes type-specifier-seq [opt]
11948
11949    If IS_CONDITION is true, we are at the start of a "condition",
11950    e.g., we've just seen "if (".
11951
11952    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
11953
11954 static void
11955 cp_parser_type_specifier_seq (cp_parser* parser,
11956                               bool is_condition,
11957                               cp_decl_specifier_seq *type_specifier_seq)
11958 {
11959   bool seen_type_specifier = false;
11960   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
11961
11962   /* Clear the TYPE_SPECIFIER_SEQ.  */
11963   clear_decl_specs (type_specifier_seq);
11964
11965   /* Parse the type-specifiers and attributes.  */
11966   while (true)
11967     {
11968       tree type_specifier;
11969       bool is_cv_qualifier;
11970
11971       /* Check for attributes first.  */
11972       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
11973         {
11974           type_specifier_seq->attributes =
11975             chainon (type_specifier_seq->attributes,
11976                      cp_parser_attributes_opt (parser));
11977           continue;
11978         }
11979
11980       /* Look for the type-specifier.  */
11981       type_specifier = cp_parser_type_specifier (parser,
11982                                                  flags,
11983                                                  type_specifier_seq,
11984                                                  /*is_declaration=*/false,
11985                                                  NULL,
11986                                                  &is_cv_qualifier);
11987       if (!type_specifier)
11988         {
11989           /* If the first type-specifier could not be found, this is not a
11990              type-specifier-seq at all.  */
11991           if (!seen_type_specifier)
11992             {
11993               cp_parser_error (parser, "expected type-specifier");
11994               type_specifier_seq->type = error_mark_node;
11995               return;
11996             }
11997           /* If subsequent type-specifiers could not be found, the
11998              type-specifier-seq is complete.  */
11999           break;
12000         }
12001
12002       seen_type_specifier = true;
12003       /* The standard says that a condition can be:
12004
12005             type-specifier-seq declarator = assignment-expression
12006
12007          However, given:
12008
12009            struct S {};
12010            if (int S = ...)
12011
12012          we should treat the "S" as a declarator, not as a
12013          type-specifier.  The standard doesn't say that explicitly for
12014          type-specifier-seq, but it does say that for
12015          decl-specifier-seq in an ordinary declaration.  Perhaps it
12016          would be clearer just to allow a decl-specifier-seq here, and
12017          then add a semantic restriction that if any decl-specifiers
12018          that are not type-specifiers appear, the program is invalid.  */
12019       if (is_condition && !is_cv_qualifier)
12020         flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
12021     }
12022 }
12023
12024 /* Parse a parameter-declaration-clause.
12025
12026    parameter-declaration-clause:
12027      parameter-declaration-list [opt] ... [opt]
12028      parameter-declaration-list , ...
12029
12030    Returns a representation for the parameter declarations.  A return
12031    value of NULL indicates a parameter-declaration-clause consisting
12032    only of an ellipsis.  */
12033
12034 static cp_parameter_declarator *
12035 cp_parser_parameter_declaration_clause (cp_parser* parser)
12036 {
12037   cp_parameter_declarator *parameters;
12038   cp_token *token;
12039   bool ellipsis_p;
12040   bool is_error;
12041
12042   /* Peek at the next token.  */
12043   token = cp_lexer_peek_token (parser->lexer);
12044   /* Check for trivial parameter-declaration-clauses.  */
12045   if (token->type == CPP_ELLIPSIS)
12046     {
12047       /* Consume the `...' token.  */
12048       cp_lexer_consume_token (parser->lexer);
12049       return NULL;
12050     }
12051   else if (token->type == CPP_CLOSE_PAREN)
12052     /* There are no parameters.  */
12053     {
12054 #ifndef NO_IMPLICIT_EXTERN_C
12055       if (in_system_header && current_class_type == NULL
12056           && current_lang_name == lang_name_c)
12057         return NULL;
12058       else
12059 #endif
12060         return no_parameters;
12061     }
12062   /* Check for `(void)', too, which is a special case.  */
12063   else if (token->keyword == RID_VOID
12064            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
12065                == CPP_CLOSE_PAREN))
12066     {
12067       /* Consume the `void' token.  */
12068       cp_lexer_consume_token (parser->lexer);
12069       /* There are no parameters.  */
12070       return no_parameters;
12071     }
12072
12073   /* Parse the parameter-declaration-list.  */
12074   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
12075   /* If a parse error occurred while parsing the
12076      parameter-declaration-list, then the entire
12077      parameter-declaration-clause is erroneous.  */
12078   if (is_error)
12079     return NULL;
12080
12081   /* Peek at the next token.  */
12082   token = cp_lexer_peek_token (parser->lexer);
12083   /* If it's a `,', the clause should terminate with an ellipsis.  */
12084   if (token->type == CPP_COMMA)
12085     {
12086       /* Consume the `,'.  */
12087       cp_lexer_consume_token (parser->lexer);
12088       /* Expect an ellipsis.  */
12089       ellipsis_p
12090         = (cp_parser_require (parser, CPP_ELLIPSIS, "`...'") != NULL);
12091     }
12092   /* It might also be `...' if the optional trailing `,' was
12093      omitted.  */
12094   else if (token->type == CPP_ELLIPSIS)
12095     {
12096       /* Consume the `...' token.  */
12097       cp_lexer_consume_token (parser->lexer);
12098       /* And remember that we saw it.  */
12099       ellipsis_p = true;
12100     }
12101   else
12102     ellipsis_p = false;
12103
12104   /* Finish the parameter list.  */
12105   if (parameters && ellipsis_p)
12106     parameters->ellipsis_p = true;
12107
12108   return parameters;
12109 }
12110
12111 /* Parse a parameter-declaration-list.
12112
12113    parameter-declaration-list:
12114      parameter-declaration
12115      parameter-declaration-list , parameter-declaration
12116
12117    Returns a representation of the parameter-declaration-list, as for
12118    cp_parser_parameter_declaration_clause.  However, the
12119    `void_list_node' is never appended to the list.  Upon return,
12120    *IS_ERROR will be true iff an error occurred.  */
12121
12122 static cp_parameter_declarator *
12123 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
12124 {
12125   cp_parameter_declarator *parameters = NULL;
12126   cp_parameter_declarator **tail = &parameters;
12127
12128   /* Assume all will go well.  */
12129   *is_error = false;
12130
12131   /* Look for more parameters.  */
12132   while (true)
12133     {
12134       cp_parameter_declarator *parameter;
12135       bool parenthesized_p;
12136       /* Parse the parameter.  */
12137       parameter
12138         = cp_parser_parameter_declaration (parser,
12139                                            /*template_parm_p=*/false,
12140                                            &parenthesized_p);
12141
12142       /* If a parse error occurred parsing the parameter declaration,
12143          then the entire parameter-declaration-list is erroneous.  */
12144       if (!parameter)
12145         {
12146           *is_error = true;
12147           parameters = NULL;
12148           break;
12149         }
12150       /* Add the new parameter to the list.  */
12151       *tail = parameter;
12152       tail = &parameter->next;
12153
12154       /* Peek at the next token.  */
12155       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
12156           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
12157           /* These are for Objective-C++ */
12158           || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
12159           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
12160         /* The parameter-declaration-list is complete.  */
12161         break;
12162       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12163         {
12164           cp_token *token;
12165
12166           /* Peek at the next token.  */
12167           token = cp_lexer_peek_nth_token (parser->lexer, 2);
12168           /* If it's an ellipsis, then the list is complete.  */
12169           if (token->type == CPP_ELLIPSIS)
12170             break;
12171           /* Otherwise, there must be more parameters.  Consume the
12172              `,'.  */
12173           cp_lexer_consume_token (parser->lexer);
12174           /* When parsing something like:
12175
12176                 int i(float f, double d)
12177
12178              we can tell after seeing the declaration for "f" that we
12179              are not looking at an initialization of a variable "i",
12180              but rather at the declaration of a function "i".
12181
12182              Due to the fact that the parsing of template arguments
12183              (as specified to a template-id) requires backtracking we
12184              cannot use this technique when inside a template argument
12185              list.  */
12186           if (!parser->in_template_argument_list_p
12187               && !parser->in_type_id_in_expr_p
12188               && cp_parser_uncommitted_to_tentative_parse_p (parser)
12189               /* However, a parameter-declaration of the form
12190                  "foat(f)" (which is a valid declaration of a
12191                  parameter "f") can also be interpreted as an
12192                  expression (the conversion of "f" to "float").  */
12193               && !parenthesized_p)
12194             cp_parser_commit_to_tentative_parse (parser);
12195         }
12196       else
12197         {
12198           cp_parser_error (parser, "expected %<,%> or %<...%>");
12199           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
12200             cp_parser_skip_to_closing_parenthesis (parser,
12201                                                    /*recovering=*/true,
12202                                                    /*or_comma=*/false,
12203                                                    /*consume_paren=*/false);
12204           break;
12205         }
12206     }
12207
12208   return parameters;
12209 }
12210
12211 /* Parse a parameter declaration.
12212
12213    parameter-declaration:
12214      decl-specifier-seq declarator
12215      decl-specifier-seq declarator = assignment-expression
12216      decl-specifier-seq abstract-declarator [opt]
12217      decl-specifier-seq abstract-declarator [opt] = assignment-expression
12218
12219    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
12220    declares a template parameter.  (In that case, a non-nested `>'
12221    token encountered during the parsing of the assignment-expression
12222    is not interpreted as a greater-than operator.)
12223
12224    Returns a representation of the parameter, or NULL if an error
12225    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
12226    true iff the declarator is of the form "(p)".  */
12227
12228 static cp_parameter_declarator *
12229 cp_parser_parameter_declaration (cp_parser *parser,
12230                                  bool template_parm_p,
12231                                  bool *parenthesized_p)
12232 {
12233   int declares_class_or_enum;
12234   bool greater_than_is_operator_p;
12235   cp_decl_specifier_seq decl_specifiers;
12236   cp_declarator *declarator;
12237   tree default_argument;
12238   cp_token *token;
12239   const char *saved_message;
12240
12241   /* In a template parameter, `>' is not an operator.
12242
12243      [temp.param]
12244
12245      When parsing a default template-argument for a non-type
12246      template-parameter, the first non-nested `>' is taken as the end
12247      of the template parameter-list rather than a greater-than
12248      operator.  */
12249   greater_than_is_operator_p = !template_parm_p;
12250
12251   /* Type definitions may not appear in parameter types.  */
12252   saved_message = parser->type_definition_forbidden_message;
12253   parser->type_definition_forbidden_message
12254     = "types may not be defined in parameter types";
12255
12256   /* Parse the declaration-specifiers.  */
12257   cp_parser_decl_specifier_seq (parser,
12258                                 CP_PARSER_FLAGS_NONE,
12259                                 &decl_specifiers,
12260                                 &declares_class_or_enum);
12261   /* If an error occurred, there's no reason to attempt to parse the
12262      rest of the declaration.  */
12263   if (cp_parser_error_occurred (parser))
12264     {
12265       parser->type_definition_forbidden_message = saved_message;
12266       return NULL;
12267     }
12268
12269   /* Peek at the next token.  */
12270   token = cp_lexer_peek_token (parser->lexer);
12271   /* If the next token is a `)', `,', `=', `>', or `...', then there
12272      is no declarator.  */
12273   if (token->type == CPP_CLOSE_PAREN
12274       || token->type == CPP_COMMA
12275       || token->type == CPP_EQ
12276       || token->type == CPP_ELLIPSIS
12277       || token->type == CPP_GREATER)
12278     {
12279       declarator = NULL;
12280       if (parenthesized_p)
12281         *parenthesized_p = false;
12282     }
12283   /* Otherwise, there should be a declarator.  */
12284   else
12285     {
12286       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
12287       parser->default_arg_ok_p = false;
12288
12289       /* After seeing a decl-specifier-seq, if the next token is not a
12290          "(", there is no possibility that the code is a valid
12291          expression.  Therefore, if parsing tentatively, we commit at
12292          this point.  */
12293       if (!parser->in_template_argument_list_p
12294           /* In an expression context, having seen:
12295
12296                (int((char ...
12297
12298              we cannot be sure whether we are looking at a
12299              function-type (taking a "char" as a parameter) or a cast
12300              of some object of type "char" to "int".  */
12301           && !parser->in_type_id_in_expr_p
12302           && cp_parser_uncommitted_to_tentative_parse_p (parser)
12303           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
12304         cp_parser_commit_to_tentative_parse (parser);
12305       /* Parse the declarator.  */
12306       declarator = cp_parser_declarator (parser,
12307                                          CP_PARSER_DECLARATOR_EITHER,
12308                                          /*ctor_dtor_or_conv_p=*/NULL,
12309                                          parenthesized_p,
12310                                          /*member_p=*/false);
12311       parser->default_arg_ok_p = saved_default_arg_ok_p;
12312       /* After the declarator, allow more attributes.  */
12313       decl_specifiers.attributes
12314         = chainon (decl_specifiers.attributes,
12315                    cp_parser_attributes_opt (parser));
12316     }
12317
12318   /* The restriction on defining new types applies only to the type
12319      of the parameter, not to the default argument.  */
12320   parser->type_definition_forbidden_message = saved_message;
12321
12322   /* If the next token is `=', then process a default argument.  */
12323   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12324     {
12325       bool saved_greater_than_is_operator_p;
12326       /* Consume the `='.  */
12327       cp_lexer_consume_token (parser->lexer);
12328
12329       /* If we are defining a class, then the tokens that make up the
12330          default argument must be saved and processed later.  */
12331       if (!template_parm_p && at_class_scope_p ()
12332           && TYPE_BEING_DEFINED (current_class_type))
12333         {
12334           unsigned depth = 0;
12335           cp_token *first_token;
12336           cp_token *token;
12337
12338           /* Add tokens until we have processed the entire default
12339              argument.  We add the range [first_token, token).  */
12340           first_token = cp_lexer_peek_token (parser->lexer);
12341           while (true)
12342             {
12343               bool done = false;
12344
12345               /* Peek at the next token.  */
12346               token = cp_lexer_peek_token (parser->lexer);
12347               /* What we do depends on what token we have.  */
12348               switch (token->type)
12349                 {
12350                   /* In valid code, a default argument must be
12351                      immediately followed by a `,' `)', or `...'.  */
12352                 case CPP_COMMA:
12353                 case CPP_CLOSE_PAREN:
12354                 case CPP_ELLIPSIS:
12355                   /* If we run into a non-nested `;', `}', or `]',
12356                      then the code is invalid -- but the default
12357                      argument is certainly over.  */
12358                 case CPP_SEMICOLON:
12359                 case CPP_CLOSE_BRACE:
12360                 case CPP_CLOSE_SQUARE:
12361                   if (depth == 0)
12362                     done = true;
12363                   /* Update DEPTH, if necessary.  */
12364                   else if (token->type == CPP_CLOSE_PAREN
12365                            || token->type == CPP_CLOSE_BRACE
12366                            || token->type == CPP_CLOSE_SQUARE)
12367                     --depth;
12368                   break;
12369
12370                 case CPP_OPEN_PAREN:
12371                 case CPP_OPEN_SQUARE:
12372                 case CPP_OPEN_BRACE:
12373                   ++depth;
12374                   break;
12375
12376                 case CPP_GREATER:
12377                   /* If we see a non-nested `>', and `>' is not an
12378                      operator, then it marks the end of the default
12379                      argument.  */
12380                   if (!depth && !greater_than_is_operator_p)
12381                     done = true;
12382                   break;
12383
12384                   /* If we run out of tokens, issue an error message.  */
12385                 case CPP_EOF:
12386                 case CPP_PRAGMA_EOL:
12387                   error ("file ends in default argument");
12388                   done = true;
12389                   break;
12390
12391                 case CPP_NAME:
12392                 case CPP_SCOPE:
12393                   /* In these cases, we should look for template-ids.
12394                      For example, if the default argument is
12395                      `X<int, double>()', we need to do name lookup to
12396                      figure out whether or not `X' is a template; if
12397                      so, the `,' does not end the default argument.
12398
12399                      That is not yet done.  */
12400                   break;
12401
12402                 default:
12403                   break;
12404                 }
12405
12406               /* If we've reached the end, stop.  */
12407               if (done)
12408                 break;
12409
12410               /* Add the token to the token block.  */
12411               token = cp_lexer_consume_token (parser->lexer);
12412             }
12413
12414           /* Create a DEFAULT_ARG to represented the unparsed default
12415              argument.  */
12416           default_argument = make_node (DEFAULT_ARG);
12417           DEFARG_TOKENS (default_argument)
12418             = cp_token_cache_new (first_token, token);
12419           DEFARG_INSTANTIATIONS (default_argument) = NULL;
12420         }
12421       /* Outside of a class definition, we can just parse the
12422          assignment-expression.  */
12423       else
12424         {
12425           bool saved_local_variables_forbidden_p;
12426
12427           /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
12428              set correctly.  */
12429           saved_greater_than_is_operator_p
12430             = parser->greater_than_is_operator_p;
12431           parser->greater_than_is_operator_p = greater_than_is_operator_p;
12432           /* Local variable names (and the `this' keyword) may not
12433              appear in a default argument.  */
12434           saved_local_variables_forbidden_p
12435             = parser->local_variables_forbidden_p;
12436           parser->local_variables_forbidden_p = true;
12437           /* The default argument expression may cause implicitly
12438              defined member functions to be synthesized, which will
12439              result in garbage collection.  We must treat this
12440              situation as if we were within the body of function so as
12441              to avoid collecting live data on the stack.  */
12442           ++function_depth;
12443           /* Parse the assignment-expression.  */
12444           if (template_parm_p)
12445             push_deferring_access_checks (dk_no_deferred);
12446           default_argument
12447             = cp_parser_assignment_expression (parser, /*cast_p=*/false);
12448           if (template_parm_p)
12449             pop_deferring_access_checks ();
12450           /* Restore saved state.  */
12451           --function_depth;
12452           parser->greater_than_is_operator_p
12453             = saved_greater_than_is_operator_p;
12454           parser->local_variables_forbidden_p
12455             = saved_local_variables_forbidden_p;
12456         }
12457       if (!parser->default_arg_ok_p)
12458         {
12459           if (!flag_pedantic_errors)
12460             warning (0, "deprecated use of default argument for parameter of non-function");
12461           else
12462             {
12463               error ("default arguments are only permitted for function parameters");
12464               default_argument = NULL_TREE;
12465             }
12466         }
12467     }
12468   else
12469     default_argument = NULL_TREE;
12470
12471   return make_parameter_declarator (&decl_specifiers,
12472                                     declarator,
12473                                     default_argument);
12474 }
12475
12476 /* Parse a function-body.
12477
12478    function-body:
12479      compound_statement  */
12480
12481 static void
12482 cp_parser_function_body (cp_parser *parser)
12483 {
12484   cp_parser_compound_statement (parser, NULL, false);
12485 }
12486
12487 /* Parse a ctor-initializer-opt followed by a function-body.  Return
12488    true if a ctor-initializer was present.  */
12489
12490 static bool
12491 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
12492 {
12493   tree body;
12494   bool ctor_initializer_p;
12495
12496   /* Begin the function body.  */
12497   body = begin_function_body ();
12498   /* Parse the optional ctor-initializer.  */
12499   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
12500   /* Parse the function-body.  */
12501   cp_parser_function_body (parser);
12502   /* Finish the function body.  */
12503   finish_function_body (body);
12504
12505   return ctor_initializer_p;
12506 }
12507
12508 /* Parse an initializer.
12509
12510    initializer:
12511      = initializer-clause
12512      ( expression-list )
12513
12514    Returns an expression representing the initializer.  If no
12515    initializer is present, NULL_TREE is returned.
12516
12517    *IS_PARENTHESIZED_INIT is set to TRUE if the `( expression-list )'
12518    production is used, and zero otherwise.  *IS_PARENTHESIZED_INIT is
12519    set to FALSE if there is no initializer present.  If there is an
12520    initializer, and it is not a constant-expression, *NON_CONSTANT_P
12521    is set to true; otherwise it is set to false.  */
12522
12523 static tree
12524 cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init,
12525                        bool* non_constant_p)
12526 {
12527   cp_token *token;
12528   tree init;
12529
12530   /* Peek at the next token.  */
12531   token = cp_lexer_peek_token (parser->lexer);
12532
12533   /* Let our caller know whether or not this initializer was
12534      parenthesized.  */
12535   *is_parenthesized_init = (token->type == CPP_OPEN_PAREN);
12536   /* Assume that the initializer is constant.  */
12537   *non_constant_p = false;
12538
12539   if (token->type == CPP_EQ)
12540     {
12541       /* Consume the `='.  */
12542       cp_lexer_consume_token (parser->lexer);
12543       /* Parse the initializer-clause.  */
12544       init = cp_parser_initializer_clause (parser, non_constant_p);
12545     }
12546   else if (token->type == CPP_OPEN_PAREN)
12547     init = cp_parser_parenthesized_expression_list (parser, false,
12548                                                     /*cast_p=*/false,
12549                                                     non_constant_p);
12550   else
12551     {
12552       /* Anything else is an error.  */
12553       cp_parser_error (parser, "expected initializer");
12554       init = error_mark_node;
12555     }
12556
12557   return init;
12558 }
12559
12560 /* Parse an initializer-clause.
12561
12562    initializer-clause:
12563      assignment-expression
12564      { initializer-list , [opt] }
12565      { }
12566
12567    Returns an expression representing the initializer.
12568
12569    If the `assignment-expression' production is used the value
12570    returned is simply a representation for the expression.
12571
12572    Otherwise, a CONSTRUCTOR is returned.  The CONSTRUCTOR_ELTS will be
12573    the elements of the initializer-list (or NULL, if the last
12574    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
12575    NULL_TREE.  There is no way to detect whether or not the optional
12576    trailing `,' was provided.  NON_CONSTANT_P is as for
12577    cp_parser_initializer.  */
12578
12579 static tree
12580 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
12581 {
12582   tree initializer;
12583
12584   /* Assume the expression is constant.  */
12585   *non_constant_p = false;
12586
12587   /* If it is not a `{', then we are looking at an
12588      assignment-expression.  */
12589   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
12590     {
12591       initializer
12592         = cp_parser_constant_expression (parser,
12593                                         /*allow_non_constant_p=*/true,
12594                                         non_constant_p);
12595       if (!*non_constant_p)
12596         initializer = fold_non_dependent_expr (initializer);
12597     }
12598   else
12599     {
12600       /* Consume the `{' token.  */
12601       cp_lexer_consume_token (parser->lexer);
12602       /* Create a CONSTRUCTOR to represent the braced-initializer.  */
12603       initializer = make_node (CONSTRUCTOR);
12604       /* If it's not a `}', then there is a non-trivial initializer.  */
12605       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
12606         {
12607           /* Parse the initializer list.  */
12608           CONSTRUCTOR_ELTS (initializer)
12609             = cp_parser_initializer_list (parser, non_constant_p);
12610           /* A trailing `,' token is allowed.  */
12611           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12612             cp_lexer_consume_token (parser->lexer);
12613         }
12614       /* Now, there should be a trailing `}'.  */
12615       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12616     }
12617
12618   return initializer;
12619 }
12620
12621 /* Parse an initializer-list.
12622
12623    initializer-list:
12624      initializer-clause
12625      initializer-list , initializer-clause
12626
12627    GNU Extension:
12628
12629    initializer-list:
12630      identifier : initializer-clause
12631      initializer-list, identifier : initializer-clause
12632
12633    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
12634    for the initializer.  If the INDEX of the elt is non-NULL, it is the
12635    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
12636    as for cp_parser_initializer.  */
12637
12638 static VEC(constructor_elt,gc) *
12639 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
12640 {
12641   VEC(constructor_elt,gc) *v = NULL;
12642
12643   /* Assume all of the expressions are constant.  */
12644   *non_constant_p = false;
12645
12646   /* Parse the rest of the list.  */
12647   while (true)
12648     {
12649       cp_token *token;
12650       tree identifier;
12651       tree initializer;
12652       bool clause_non_constant_p;
12653
12654       /* If the next token is an identifier and the following one is a
12655          colon, we are looking at the GNU designated-initializer
12656          syntax.  */
12657       if (cp_parser_allow_gnu_extensions_p (parser)
12658           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
12659           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
12660         {
12661           /* Consume the identifier.  */
12662           identifier = cp_lexer_consume_token (parser->lexer)->value;
12663           /* Consume the `:'.  */
12664           cp_lexer_consume_token (parser->lexer);
12665         }
12666       else
12667         identifier = NULL_TREE;
12668
12669       /* Parse the initializer.  */
12670       initializer = cp_parser_initializer_clause (parser,
12671                                                   &clause_non_constant_p);
12672       /* If any clause is non-constant, so is the entire initializer.  */
12673       if (clause_non_constant_p)
12674         *non_constant_p = true;
12675
12676       /* Add it to the vector.  */
12677       CONSTRUCTOR_APPEND_ELT(v, identifier, initializer);
12678
12679       /* If the next token is not a comma, we have reached the end of
12680          the list.  */
12681       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
12682         break;
12683
12684       /* Peek at the next token.  */
12685       token = cp_lexer_peek_nth_token (parser->lexer, 2);
12686       /* If the next token is a `}', then we're still done.  An
12687          initializer-clause can have a trailing `,' after the
12688          initializer-list and before the closing `}'.  */
12689       if (token->type == CPP_CLOSE_BRACE)
12690         break;
12691
12692       /* Consume the `,' token.  */
12693       cp_lexer_consume_token (parser->lexer);
12694     }
12695
12696   return v;
12697 }
12698
12699 /* Classes [gram.class] */
12700
12701 /* Parse a class-name.
12702
12703    class-name:
12704      identifier
12705      template-id
12706
12707    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
12708    to indicate that names looked up in dependent types should be
12709    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
12710    keyword has been used to indicate that the name that appears next
12711    is a template.  TAG_TYPE indicates the explicit tag given before
12712    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
12713    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
12714    is the class being defined in a class-head.
12715
12716    Returns the TYPE_DECL representing the class.  */
12717
12718 static tree
12719 cp_parser_class_name (cp_parser *parser,
12720                       bool typename_keyword_p,
12721                       bool template_keyword_p,
12722                       enum tag_types tag_type,
12723                       bool check_dependency_p,
12724                       bool class_head_p,
12725                       bool is_declaration)
12726 {
12727   tree decl;
12728   tree scope;
12729   bool typename_p;
12730   cp_token *token;
12731
12732   /* All class-names start with an identifier.  */
12733   token = cp_lexer_peek_token (parser->lexer);
12734   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
12735     {
12736       cp_parser_error (parser, "expected class-name");
12737       return error_mark_node;
12738     }
12739
12740   /* PARSER->SCOPE can be cleared when parsing the template-arguments
12741      to a template-id, so we save it here.  */
12742   scope = parser->scope;
12743   if (scope == error_mark_node)
12744     return error_mark_node;
12745
12746   /* Any name names a type if we're following the `typename' keyword
12747      in a qualified name where the enclosing scope is type-dependent.  */
12748   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
12749                 && dependent_type_p (scope));
12750   /* Handle the common case (an identifier, but not a template-id)
12751      efficiently.  */
12752   if (token->type == CPP_NAME
12753       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
12754     {
12755       cp_token *identifier_token;
12756       tree identifier;
12757       bool ambiguous_p;
12758
12759       /* Look for the identifier.  */
12760       identifier_token = cp_lexer_peek_token (parser->lexer);
12761       ambiguous_p = identifier_token->ambiguous_p;
12762       identifier = cp_parser_identifier (parser);
12763       /* If the next token isn't an identifier, we are certainly not
12764          looking at a class-name.  */
12765       if (identifier == error_mark_node)
12766         decl = error_mark_node;
12767       /* If we know this is a type-name, there's no need to look it
12768          up.  */
12769       else if (typename_p)
12770         decl = identifier;
12771       else
12772         {
12773           tree ambiguous_decls;
12774           /* If we already know that this lookup is ambiguous, then
12775              we've already issued an error message; there's no reason
12776              to check again.  */
12777           if (ambiguous_p)
12778             {
12779               cp_parser_simulate_error (parser);
12780               return error_mark_node;
12781             }
12782           /* If the next token is a `::', then the name must be a type
12783              name.
12784
12785              [basic.lookup.qual]
12786
12787              During the lookup for a name preceding the :: scope
12788              resolution operator, object, function, and enumerator
12789              names are ignored.  */
12790           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12791             tag_type = typename_type;
12792           /* Look up the name.  */
12793           decl = cp_parser_lookup_name (parser, identifier,
12794                                         tag_type,
12795                                         /*is_template=*/false,
12796                                         /*is_namespace=*/false,
12797                                         check_dependency_p,
12798                                         &ambiguous_decls);
12799           if (ambiguous_decls)
12800             {
12801               error ("reference to %qD is ambiguous", identifier);
12802               print_candidates (ambiguous_decls);
12803               if (cp_parser_parsing_tentatively (parser))
12804                 {
12805                   identifier_token->ambiguous_p = true;
12806                   cp_parser_simulate_error (parser);
12807                 }
12808               return error_mark_node;
12809             }
12810         }
12811     }
12812   else
12813     {
12814       /* Try a template-id.  */
12815       decl = cp_parser_template_id (parser, template_keyword_p,
12816                                     check_dependency_p,
12817                                     is_declaration);
12818       if (decl == error_mark_node)
12819         return error_mark_node;
12820     }
12821
12822   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
12823
12824   /* If this is a typename, create a TYPENAME_TYPE.  */
12825   if (typename_p && decl != error_mark_node)
12826     {
12827       decl = make_typename_type (scope, decl, typename_type,
12828                                  /*complain=*/tf_error);
12829       if (decl != error_mark_node)
12830         decl = TYPE_NAME (decl);
12831     }
12832
12833   /* Check to see that it is really the name of a class.  */
12834   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
12835       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
12836       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12837     /* Situations like this:
12838
12839          template <typename T> struct A {
12840            typename T::template X<int>::I i;
12841          };
12842
12843        are problematic.  Is `T::template X<int>' a class-name?  The
12844        standard does not seem to be definitive, but there is no other
12845        valid interpretation of the following `::'.  Therefore, those
12846        names are considered class-names.  */
12847     {
12848       decl = make_typename_type (scope, decl, tag_type, tf_error);
12849       if (decl != error_mark_node)
12850         decl = TYPE_NAME (decl);
12851     }
12852   else if (TREE_CODE (decl) != TYPE_DECL
12853            || TREE_TYPE (decl) == error_mark_node
12854            || !IS_AGGR_TYPE (TREE_TYPE (decl)))
12855     decl = error_mark_node;
12856
12857   if (decl == error_mark_node)
12858     cp_parser_error (parser, "expected class-name");
12859
12860   return decl;
12861 }
12862
12863 /* Parse a class-specifier.
12864
12865    class-specifier:
12866      class-head { member-specification [opt] }
12867
12868    Returns the TREE_TYPE representing the class.  */
12869
12870 static tree
12871 cp_parser_class_specifier (cp_parser* parser)
12872 {
12873   cp_token *token;
12874   tree type;
12875   tree attributes = NULL_TREE;
12876   int has_trailing_semicolon;
12877   bool nested_name_specifier_p;
12878   unsigned saved_num_template_parameter_lists;
12879   tree old_scope = NULL_TREE;
12880   tree scope = NULL_TREE;
12881
12882   push_deferring_access_checks (dk_no_deferred);
12883
12884   /* Parse the class-head.  */
12885   type = cp_parser_class_head (parser,
12886                                &nested_name_specifier_p,
12887                                &attributes);
12888   /* If the class-head was a semantic disaster, skip the entire body
12889      of the class.  */
12890   if (!type)
12891     {
12892       cp_parser_skip_to_end_of_block_or_statement (parser);
12893       pop_deferring_access_checks ();
12894       return error_mark_node;
12895     }
12896
12897   /* Look for the `{'.  */
12898   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
12899     {
12900       pop_deferring_access_checks ();
12901       return error_mark_node;
12902     }
12903
12904   /* Issue an error message if type-definitions are forbidden here.  */
12905   cp_parser_check_type_definition (parser);
12906   /* Remember that we are defining one more class.  */
12907   ++parser->num_classes_being_defined;
12908   /* Inside the class, surrounding template-parameter-lists do not
12909      apply.  */
12910   saved_num_template_parameter_lists
12911     = parser->num_template_parameter_lists;
12912   parser->num_template_parameter_lists = 0;
12913
12914   /* Start the class.  */
12915   if (nested_name_specifier_p)
12916     {
12917       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
12918       old_scope = push_inner_scope (scope);
12919     }
12920   type = begin_class_definition (type);
12921
12922   if (type == error_mark_node)
12923     /* If the type is erroneous, skip the entire body of the class.  */
12924     cp_parser_skip_to_closing_brace (parser);
12925   else
12926     /* Parse the member-specification.  */
12927     cp_parser_member_specification_opt (parser);
12928
12929   /* Look for the trailing `}'.  */
12930   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12931   /* We get better error messages by noticing a common problem: a
12932      missing trailing `;'.  */
12933   token = cp_lexer_peek_token (parser->lexer);
12934   has_trailing_semicolon = (token->type == CPP_SEMICOLON);
12935   /* Look for trailing attributes to apply to this class.  */
12936   if (cp_parser_allow_gnu_extensions_p (parser))
12937     {
12938       tree sub_attr = cp_parser_attributes_opt (parser);
12939       attributes = chainon (attributes, sub_attr);
12940     }
12941   if (type != error_mark_node)
12942     type = finish_struct (type, attributes);
12943   if (nested_name_specifier_p)
12944     pop_inner_scope (old_scope, scope);
12945   /* If this class is not itself within the scope of another class,
12946      then we need to parse the bodies of all of the queued function
12947      definitions.  Note that the queued functions defined in a class
12948      are not always processed immediately following the
12949      class-specifier for that class.  Consider:
12950
12951        struct A {
12952          struct B { void f() { sizeof (A); } };
12953        };
12954
12955      If `f' were processed before the processing of `A' were
12956      completed, there would be no way to compute the size of `A'.
12957      Note that the nesting we are interested in here is lexical --
12958      not the semantic nesting given by TYPE_CONTEXT.  In particular,
12959      for:
12960
12961        struct A { struct B; };
12962        struct A::B { void f() { } };
12963
12964      there is no need to delay the parsing of `A::B::f'.  */
12965   if (--parser->num_classes_being_defined == 0)
12966     {
12967       tree queue_entry;
12968       tree fn;
12969       tree class_type = NULL_TREE;
12970       tree pushed_scope = NULL_TREE;
12971  
12972       /* In a first pass, parse default arguments to the functions.
12973          Then, in a second pass, parse the bodies of the functions.
12974          This two-phased approach handles cases like:
12975
12976             struct S {
12977               void f() { g(); }
12978               void g(int i = 3);
12979             };
12980
12981          */
12982       for (TREE_PURPOSE (parser->unparsed_functions_queues)
12983              = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
12984            (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
12985            TREE_PURPOSE (parser->unparsed_functions_queues)
12986              = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
12987         {
12988           fn = TREE_VALUE (queue_entry);
12989           /* If there are default arguments that have not yet been processed,
12990              take care of them now.  */
12991           if (class_type != TREE_PURPOSE (queue_entry))
12992             {
12993               if (pushed_scope)
12994                 pop_scope (pushed_scope);
12995               class_type = TREE_PURPOSE (queue_entry);
12996               pushed_scope = push_scope (class_type);
12997             }
12998           /* Make sure that any template parameters are in scope.  */
12999           maybe_begin_member_template_processing (fn);
13000           /* Parse the default argument expressions.  */
13001           cp_parser_late_parsing_default_args (parser, fn);
13002           /* Remove any template parameters from the symbol table.  */
13003           maybe_end_member_template_processing ();
13004         }
13005       if (pushed_scope)
13006         pop_scope (pushed_scope);
13007       /* Now parse the body of the functions.  */
13008       for (TREE_VALUE (parser->unparsed_functions_queues)
13009              = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
13010            (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
13011            TREE_VALUE (parser->unparsed_functions_queues)
13012              = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
13013         {
13014           /* Figure out which function we need to process.  */
13015           fn = TREE_VALUE (queue_entry);
13016           /* Parse the function.  */
13017           cp_parser_late_parsing_for_member (parser, fn);
13018         }
13019     }
13020
13021   /* Put back any saved access checks.  */
13022   pop_deferring_access_checks ();
13023
13024   /* Restore the count of active template-parameter-lists.  */
13025   parser->num_template_parameter_lists
13026     = saved_num_template_parameter_lists;
13027
13028   return type;
13029 }
13030
13031 /* Parse a class-head.
13032
13033    class-head:
13034      class-key identifier [opt] base-clause [opt]
13035      class-key nested-name-specifier identifier base-clause [opt]
13036      class-key nested-name-specifier [opt] template-id
13037        base-clause [opt]
13038
13039    GNU Extensions:
13040      class-key attributes identifier [opt] base-clause [opt]
13041      class-key attributes nested-name-specifier identifier base-clause [opt]
13042      class-key attributes nested-name-specifier [opt] template-id
13043        base-clause [opt]
13044
13045    Returns the TYPE of the indicated class.  Sets
13046    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
13047    involving a nested-name-specifier was used, and FALSE otherwise.
13048
13049    Returns error_mark_node if this is not a class-head.
13050
13051    Returns NULL_TREE if the class-head is syntactically valid, but
13052    semantically invalid in a way that means we should skip the entire
13053    body of the class.  */
13054
13055 static tree
13056 cp_parser_class_head (cp_parser* parser,
13057                       bool* nested_name_specifier_p,
13058                       tree *attributes_p)
13059 {
13060   tree nested_name_specifier;
13061   enum tag_types class_key;
13062   tree id = NULL_TREE;
13063   tree type = NULL_TREE;
13064   tree attributes;
13065   bool template_id_p = false;
13066   bool qualified_p = false;
13067   bool invalid_nested_name_p = false;
13068   bool invalid_explicit_specialization_p = false;
13069   tree pushed_scope = NULL_TREE;
13070   unsigned num_templates;
13071   tree bases;
13072
13073   /* Assume no nested-name-specifier will be present.  */
13074   *nested_name_specifier_p = false;
13075   /* Assume no template parameter lists will be used in defining the
13076      type.  */
13077   num_templates = 0;
13078
13079   /* Look for the class-key.  */
13080   class_key = cp_parser_class_key (parser);
13081   if (class_key == none_type)
13082     return error_mark_node;
13083
13084   /* Parse the attributes.  */
13085   attributes = cp_parser_attributes_opt (parser);
13086
13087   /* If the next token is `::', that is invalid -- but sometimes
13088      people do try to write:
13089
13090        struct ::S {};
13091
13092      Handle this gracefully by accepting the extra qualifier, and then
13093      issuing an error about it later if this really is a
13094      class-head.  If it turns out just to be an elaborated type
13095      specifier, remain silent.  */
13096   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
13097     qualified_p = true;
13098
13099   push_deferring_access_checks (dk_no_check);
13100
13101   /* Determine the name of the class.  Begin by looking for an
13102      optional nested-name-specifier.  */
13103   nested_name_specifier
13104     = cp_parser_nested_name_specifier_opt (parser,
13105                                            /*typename_keyword_p=*/false,
13106                                            /*check_dependency_p=*/false,
13107                                            /*type_p=*/false,
13108                                            /*is_declaration=*/false);
13109   /* If there was a nested-name-specifier, then there *must* be an
13110      identifier.  */
13111   if (nested_name_specifier)
13112     {
13113       /* Although the grammar says `identifier', it really means
13114          `class-name' or `template-name'.  You are only allowed to
13115          define a class that has already been declared with this
13116          syntax.
13117
13118          The proposed resolution for Core Issue 180 says that wherever
13119          you see `class T::X' you should treat `X' as a type-name.
13120
13121          It is OK to define an inaccessible class; for example:
13122
13123            class A { class B; };
13124            class A::B {};
13125
13126          We do not know if we will see a class-name, or a
13127          template-name.  We look for a class-name first, in case the
13128          class-name is a template-id; if we looked for the
13129          template-name first we would stop after the template-name.  */
13130       cp_parser_parse_tentatively (parser);
13131       type = cp_parser_class_name (parser,
13132                                    /*typename_keyword_p=*/false,
13133                                    /*template_keyword_p=*/false,
13134                                    class_type,
13135                                    /*check_dependency_p=*/false,
13136                                    /*class_head_p=*/true,
13137                                    /*is_declaration=*/false);
13138       /* If that didn't work, ignore the nested-name-specifier.  */
13139       if (!cp_parser_parse_definitely (parser))
13140         {
13141           invalid_nested_name_p = true;
13142           id = cp_parser_identifier (parser);
13143           if (id == error_mark_node)
13144             id = NULL_TREE;
13145         }
13146       /* If we could not find a corresponding TYPE, treat this
13147          declaration like an unqualified declaration.  */
13148       if (type == error_mark_node)
13149         nested_name_specifier = NULL_TREE;
13150       /* Otherwise, count the number of templates used in TYPE and its
13151          containing scopes.  */
13152       else
13153         {
13154           tree scope;
13155
13156           for (scope = TREE_TYPE (type);
13157                scope && TREE_CODE (scope) != NAMESPACE_DECL;
13158                scope = (TYPE_P (scope)
13159                         ? TYPE_CONTEXT (scope)
13160                         : DECL_CONTEXT (scope)))
13161             if (TYPE_P (scope)
13162                 && CLASS_TYPE_P (scope)
13163                 && CLASSTYPE_TEMPLATE_INFO (scope)
13164                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
13165                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
13166               ++num_templates;
13167         }
13168     }
13169   /* Otherwise, the identifier is optional.  */
13170   else
13171     {
13172       /* We don't know whether what comes next is a template-id,
13173          an identifier, or nothing at all.  */
13174       cp_parser_parse_tentatively (parser);
13175       /* Check for a template-id.  */
13176       id = cp_parser_template_id (parser,
13177                                   /*template_keyword_p=*/false,
13178                                   /*check_dependency_p=*/true,
13179                                   /*is_declaration=*/true);
13180       /* If that didn't work, it could still be an identifier.  */
13181       if (!cp_parser_parse_definitely (parser))
13182         {
13183           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
13184             id = cp_parser_identifier (parser);
13185           else
13186             id = NULL_TREE;
13187         }
13188       else
13189         {
13190           template_id_p = true;
13191           ++num_templates;
13192         }
13193     }
13194
13195   pop_deferring_access_checks ();
13196
13197   if (id)
13198     cp_parser_check_for_invalid_template_id (parser, id);
13199
13200   /* If it's not a `:' or a `{' then we can't really be looking at a
13201      class-head, since a class-head only appears as part of a
13202      class-specifier.  We have to detect this situation before calling
13203      xref_tag, since that has irreversible side-effects.  */
13204   if (!cp_parser_next_token_starts_class_definition_p (parser))
13205     {
13206       cp_parser_error (parser, "expected %<{%> or %<:%>");
13207       return error_mark_node;
13208     }
13209
13210   /* At this point, we're going ahead with the class-specifier, even
13211      if some other problem occurs.  */
13212   cp_parser_commit_to_tentative_parse (parser);
13213   /* Issue the error about the overly-qualified name now.  */
13214   if (qualified_p)
13215     cp_parser_error (parser,
13216                      "global qualification of class name is invalid");
13217   else if (invalid_nested_name_p)
13218     cp_parser_error (parser,
13219                      "qualified name does not name a class");
13220   else if (nested_name_specifier)
13221     {
13222       tree scope;
13223
13224       /* Reject typedef-names in class heads.  */
13225       if (!DECL_IMPLICIT_TYPEDEF_P (type))
13226         {
13227           error ("invalid class name in declaration of %qD", type);
13228           type = NULL_TREE;
13229           goto done;
13230         }
13231
13232       /* Figure out in what scope the declaration is being placed.  */
13233       scope = current_scope ();
13234       /* If that scope does not contain the scope in which the
13235          class was originally declared, the program is invalid.  */
13236       if (scope && !is_ancestor (scope, nested_name_specifier))
13237         {
13238           error ("declaration of %qD in %qD which does not enclose %qD",
13239                  type, scope, nested_name_specifier);
13240           type = NULL_TREE;
13241           goto done;
13242         }
13243       /* [dcl.meaning]
13244
13245          A declarator-id shall not be qualified exception of the
13246          definition of a ... nested class outside of its class
13247          ... [or] a the definition or explicit instantiation of a
13248          class member of a namespace outside of its namespace.  */
13249       if (scope == nested_name_specifier)
13250         {
13251           pedwarn ("extra qualification ignored");
13252           nested_name_specifier = NULL_TREE;
13253           num_templates = 0;
13254         }
13255     }
13256   /* An explicit-specialization must be preceded by "template <>".  If
13257      it is not, try to recover gracefully.  */
13258   if (at_namespace_scope_p ()
13259       && parser->num_template_parameter_lists == 0
13260       && template_id_p)
13261     {
13262       error ("an explicit specialization must be preceded by %<template <>%>");
13263       invalid_explicit_specialization_p = true;
13264       /* Take the same action that would have been taken by
13265          cp_parser_explicit_specialization.  */
13266       ++parser->num_template_parameter_lists;
13267       begin_specialization ();
13268     }
13269   /* There must be no "return" statements between this point and the
13270      end of this function; set "type "to the correct return value and
13271      use "goto done;" to return.  */
13272   /* Make sure that the right number of template parameters were
13273      present.  */
13274   if (!cp_parser_check_template_parameters (parser, num_templates))
13275     {
13276       /* If something went wrong, there is no point in even trying to
13277          process the class-definition.  */
13278       type = NULL_TREE;
13279       goto done;
13280     }
13281
13282   /* Look up the type.  */
13283   if (template_id_p)
13284     {
13285       type = TREE_TYPE (id);
13286       maybe_process_partial_specialization (type);
13287       if (nested_name_specifier)
13288         pushed_scope = push_scope (nested_name_specifier);
13289     }
13290   else if (nested_name_specifier)
13291     {
13292       tree class_type;
13293
13294       /* Given:
13295
13296             template <typename T> struct S { struct T };
13297             template <typename T> struct S<T>::T { };
13298
13299          we will get a TYPENAME_TYPE when processing the definition of
13300          `S::T'.  We need to resolve it to the actual type before we
13301          try to define it.  */
13302       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
13303         {
13304           class_type = resolve_typename_type (TREE_TYPE (type),
13305                                               /*only_current_p=*/false);
13306           if (class_type != error_mark_node)
13307             type = TYPE_NAME (class_type);
13308           else
13309             {
13310               cp_parser_error (parser, "could not resolve typename type");
13311               type = error_mark_node;
13312             }
13313         }
13314
13315       maybe_process_partial_specialization (TREE_TYPE (type));
13316       class_type = current_class_type;
13317       /* Enter the scope indicated by the nested-name-specifier.  */
13318       pushed_scope = push_scope (nested_name_specifier);
13319       /* Get the canonical version of this type.  */
13320       type = TYPE_MAIN_DECL (TREE_TYPE (type));
13321       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
13322           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
13323         {
13324           type = push_template_decl (type);
13325           if (type == error_mark_node)
13326             {
13327               type = NULL_TREE;
13328               goto done;
13329             }
13330         }
13331
13332       type = TREE_TYPE (type);
13333       *nested_name_specifier_p = true;
13334     }
13335   else      /* The name is not a nested name.  */
13336     {
13337       /* If the class was unnamed, create a dummy name.  */
13338       if (!id)
13339         id = make_anon_name ();
13340       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
13341                        parser->num_template_parameter_lists);
13342     }
13343
13344   /* Indicate whether this class was declared as a `class' or as a
13345      `struct'.  */
13346   if (TREE_CODE (type) == RECORD_TYPE)
13347     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
13348   cp_parser_check_class_key (class_key, type);
13349
13350   /* If this type was already complete, and we see another definition,
13351      that's an error.  */
13352   if (type != error_mark_node && COMPLETE_TYPE_P (type))
13353     {
13354       error ("redefinition of %q#T", type);
13355       error ("previous definition of %q+#T", type);
13356       type = NULL_TREE;
13357       goto done;
13358     }
13359
13360   /* We will have entered the scope containing the class; the names of
13361      base classes should be looked up in that context.  For example:
13362
13363        struct A { struct B {}; struct C; };
13364        struct A::C : B {};
13365
13366      is valid.  */
13367   bases = NULL_TREE;
13368
13369   /* Get the list of base-classes, if there is one.  */
13370   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
13371     bases = cp_parser_base_clause (parser);
13372
13373   /* Process the base classes.  */
13374   xref_basetypes (type, bases);
13375
13376  done:
13377   /* Leave the scope given by the nested-name-specifier.  We will
13378      enter the class scope itself while processing the members.  */
13379   if (pushed_scope)
13380     pop_scope (pushed_scope);
13381
13382   if (invalid_explicit_specialization_p)
13383     {
13384       end_specialization ();
13385       --parser->num_template_parameter_lists;
13386     }
13387   *attributes_p = attributes;
13388   return type;
13389 }
13390
13391 /* Parse a class-key.
13392
13393    class-key:
13394      class
13395      struct
13396      union
13397
13398    Returns the kind of class-key specified, or none_type to indicate
13399    error.  */
13400
13401 static enum tag_types
13402 cp_parser_class_key (cp_parser* parser)
13403 {
13404   cp_token *token;
13405   enum tag_types tag_type;
13406
13407   /* Look for the class-key.  */
13408   token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
13409   if (!token)
13410     return none_type;
13411
13412   /* Check to see if the TOKEN is a class-key.  */
13413   tag_type = cp_parser_token_is_class_key (token);
13414   if (!tag_type)
13415     cp_parser_error (parser, "expected class-key");
13416   return tag_type;
13417 }
13418
13419 /* Parse an (optional) member-specification.
13420
13421    member-specification:
13422      member-declaration member-specification [opt]
13423      access-specifier : member-specification [opt]  */
13424
13425 static void
13426 cp_parser_member_specification_opt (cp_parser* parser)
13427 {
13428   while (true)
13429     {
13430       cp_token *token;
13431       enum rid keyword;
13432
13433       /* Peek at the next token.  */
13434       token = cp_lexer_peek_token (parser->lexer);
13435       /* If it's a `}', or EOF then we've seen all the members.  */
13436       if (token->type == CPP_CLOSE_BRACE
13437           || token->type == CPP_EOF
13438           || token->type == CPP_PRAGMA_EOL)
13439         break;
13440
13441       /* See if this token is a keyword.  */
13442       keyword = token->keyword;
13443       switch (keyword)
13444         {
13445         case RID_PUBLIC:
13446         case RID_PROTECTED:
13447         case RID_PRIVATE:
13448           /* Consume the access-specifier.  */
13449           cp_lexer_consume_token (parser->lexer);
13450           /* Remember which access-specifier is active.  */
13451           current_access_specifier = token->value;
13452           /* Look for the `:'.  */
13453           cp_parser_require (parser, CPP_COLON, "`:'");
13454           break;
13455
13456         default:
13457           /* Accept #pragmas at class scope.  */
13458           if (token->type == CPP_PRAGMA)
13459             {
13460               cp_parser_pragma (parser, pragma_external);
13461               break;
13462             }
13463
13464           /* Otherwise, the next construction must be a
13465              member-declaration.  */
13466           cp_parser_member_declaration (parser);
13467         }
13468     }
13469 }
13470
13471 /* Parse a member-declaration.
13472
13473    member-declaration:
13474      decl-specifier-seq [opt] member-declarator-list [opt] ;
13475      function-definition ; [opt]
13476      :: [opt] nested-name-specifier template [opt] unqualified-id ;
13477      using-declaration
13478      template-declaration
13479
13480    member-declarator-list:
13481      member-declarator
13482      member-declarator-list , member-declarator
13483
13484    member-declarator:
13485      declarator pure-specifier [opt]
13486      declarator constant-initializer [opt]
13487      identifier [opt] : constant-expression
13488
13489    GNU Extensions:
13490
13491    member-declaration:
13492      __extension__ member-declaration
13493
13494    member-declarator:
13495      declarator attributes [opt] pure-specifier [opt]
13496      declarator attributes [opt] constant-initializer [opt]
13497      identifier [opt] attributes [opt] : constant-expression  */
13498
13499 static void
13500 cp_parser_member_declaration (cp_parser* parser)
13501 {
13502   cp_decl_specifier_seq decl_specifiers;
13503   tree prefix_attributes;
13504   tree decl;
13505   int declares_class_or_enum;
13506   bool friend_p;
13507   cp_token *token;
13508   int saved_pedantic;
13509
13510   /* Check for the `__extension__' keyword.  */
13511   if (cp_parser_extension_opt (parser, &saved_pedantic))
13512     {
13513       /* Recurse.  */
13514       cp_parser_member_declaration (parser);
13515       /* Restore the old value of the PEDANTIC flag.  */
13516       pedantic = saved_pedantic;
13517
13518       return;
13519     }
13520
13521   /* Check for a template-declaration.  */
13522   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
13523     {
13524       /* An explicit specialization here is an error condition, and we
13525          expect the specialization handler to detect and report this.  */
13526       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
13527           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
13528         cp_parser_explicit_specialization (parser);
13529       else
13530         cp_parser_template_declaration (parser, /*member_p=*/true);
13531
13532       return;
13533     }
13534
13535   /* Check for a using-declaration.  */
13536   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
13537     {
13538       /* Parse the using-declaration.  */
13539       cp_parser_using_declaration (parser);
13540
13541       return;
13542     }
13543
13544   /* Check for @defs.  */
13545   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
13546     {
13547       tree ivar, member;
13548       tree ivar_chains = cp_parser_objc_defs_expression (parser);
13549       ivar = ivar_chains;
13550       while (ivar)
13551         {
13552           member = ivar;
13553           ivar = TREE_CHAIN (member);
13554           TREE_CHAIN (member) = NULL_TREE;
13555           finish_member_declaration (member);
13556         }
13557       return;
13558     }
13559
13560   /* Parse the decl-specifier-seq.  */
13561   cp_parser_decl_specifier_seq (parser,
13562                                 CP_PARSER_FLAGS_OPTIONAL,
13563                                 &decl_specifiers,
13564                                 &declares_class_or_enum);
13565   prefix_attributes = decl_specifiers.attributes;
13566   decl_specifiers.attributes = NULL_TREE;
13567   /* Check for an invalid type-name.  */
13568   if (!decl_specifiers.type
13569       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
13570     return;
13571   /* If there is no declarator, then the decl-specifier-seq should
13572      specify a type.  */
13573   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
13574     {
13575       /* If there was no decl-specifier-seq, and the next token is a
13576          `;', then we have something like:
13577
13578            struct S { ; };
13579
13580          [class.mem]
13581
13582          Each member-declaration shall declare at least one member
13583          name of the class.  */
13584       if (!decl_specifiers.any_specifiers_p)
13585         {
13586           cp_token *token = cp_lexer_peek_token (parser->lexer);
13587           if (pedantic && !token->in_system_header)
13588             pedwarn ("%Hextra %<;%>", &token->location);
13589         }
13590       else
13591         {
13592           tree type;
13593
13594           /* See if this declaration is a friend.  */
13595           friend_p = cp_parser_friend_p (&decl_specifiers);
13596           /* If there were decl-specifiers, check to see if there was
13597              a class-declaration.  */
13598           type = check_tag_decl (&decl_specifiers);
13599           /* Nested classes have already been added to the class, but
13600              a `friend' needs to be explicitly registered.  */
13601           if (friend_p)
13602             {
13603               /* If the `friend' keyword was present, the friend must
13604                  be introduced with a class-key.  */
13605                if (!declares_class_or_enum)
13606                  error ("a class-key must be used when declaring a friend");
13607                /* In this case:
13608
13609                     template <typename T> struct A {
13610                       friend struct A<T>::B;
13611                     };
13612
13613                   A<T>::B will be represented by a TYPENAME_TYPE, and
13614                   therefore not recognized by check_tag_decl.  */
13615                if (!type
13616                    && decl_specifiers.type
13617                    && TYPE_P (decl_specifiers.type))
13618                  type = decl_specifiers.type;
13619                if (!type || !TYPE_P (type))
13620                  error ("friend declaration does not name a class or "
13621                         "function");
13622                else
13623                  make_friend_class (current_class_type, type,
13624                                     /*complain=*/true);
13625             }
13626           /* If there is no TYPE, an error message will already have
13627              been issued.  */
13628           else if (!type || type == error_mark_node)
13629             ;
13630           /* An anonymous aggregate has to be handled specially; such
13631              a declaration really declares a data member (with a
13632              particular type), as opposed to a nested class.  */
13633           else if (ANON_AGGR_TYPE_P (type))
13634             {
13635               /* Remove constructors and such from TYPE, now that we
13636                  know it is an anonymous aggregate.  */
13637               fixup_anonymous_aggr (type);
13638               /* And make the corresponding data member.  */
13639               decl = build_decl (FIELD_DECL, NULL_TREE, type);
13640               /* Add it to the class.  */
13641               finish_member_declaration (decl);
13642             }
13643           else
13644             cp_parser_check_access_in_redeclaration (TYPE_NAME (type));
13645         }
13646     }
13647   else
13648     {
13649       /* See if these declarations will be friends.  */
13650       friend_p = cp_parser_friend_p (&decl_specifiers);
13651
13652       /* Keep going until we hit the `;' at the end of the
13653          declaration.  */
13654       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
13655         {
13656           tree attributes = NULL_TREE;
13657           tree first_attribute;
13658
13659           /* Peek at the next token.  */
13660           token = cp_lexer_peek_token (parser->lexer);
13661
13662           /* Check for a bitfield declaration.  */
13663           if (token->type == CPP_COLON
13664               || (token->type == CPP_NAME
13665                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
13666                   == CPP_COLON))
13667             {
13668               tree identifier;
13669               tree width;
13670
13671               /* Get the name of the bitfield.  Note that we cannot just
13672                  check TOKEN here because it may have been invalidated by
13673                  the call to cp_lexer_peek_nth_token above.  */
13674               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
13675                 identifier = cp_parser_identifier (parser);
13676               else
13677                 identifier = NULL_TREE;
13678
13679               /* Consume the `:' token.  */
13680               cp_lexer_consume_token (parser->lexer);
13681               /* Get the width of the bitfield.  */
13682               width
13683                 = cp_parser_constant_expression (parser,
13684                                                  /*allow_non_constant=*/false,
13685                                                  NULL);
13686
13687               /* Look for attributes that apply to the bitfield.  */
13688               attributes = cp_parser_attributes_opt (parser);
13689               /* Remember which attributes are prefix attributes and
13690                  which are not.  */
13691               first_attribute = attributes;
13692               /* Combine the attributes.  */
13693               attributes = chainon (prefix_attributes, attributes);
13694
13695               /* Create the bitfield declaration.  */
13696               decl = grokbitfield (identifier
13697                                    ? make_id_declarator (NULL_TREE,
13698                                                          identifier,
13699                                                          sfk_none)
13700                                    : NULL,
13701                                    &decl_specifiers,
13702                                    width);
13703               /* Apply the attributes.  */
13704               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
13705             }
13706           else
13707             {
13708               cp_declarator *declarator;
13709               tree initializer;
13710               tree asm_specification;
13711               int ctor_dtor_or_conv_p;
13712
13713               /* Parse the declarator.  */
13714               declarator
13715                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
13716                                         &ctor_dtor_or_conv_p,
13717                                         /*parenthesized_p=*/NULL,
13718                                         /*member_p=*/true);
13719
13720               /* If something went wrong parsing the declarator, make sure
13721                  that we at least consume some tokens.  */
13722               if (declarator == cp_error_declarator)
13723                 {
13724                   /* Skip to the end of the statement.  */
13725                   cp_parser_skip_to_end_of_statement (parser);
13726                   /* If the next token is not a semicolon, that is
13727                      probably because we just skipped over the body of
13728                      a function.  So, we consume a semicolon if
13729                      present, but do not issue an error message if it
13730                      is not present.  */
13731                   if (cp_lexer_next_token_is (parser->lexer,
13732                                               CPP_SEMICOLON))
13733                     cp_lexer_consume_token (parser->lexer);
13734                   return;
13735                 }
13736
13737               if (declares_class_or_enum & 2)
13738                 cp_parser_check_for_definition_in_return_type
13739                   (declarator, decl_specifiers.type);
13740
13741               /* Look for an asm-specification.  */
13742               asm_specification = cp_parser_asm_specification_opt (parser);
13743               /* Look for attributes that apply to the declaration.  */
13744               attributes = cp_parser_attributes_opt (parser);
13745               /* Remember which attributes are prefix attributes and
13746                  which are not.  */
13747               first_attribute = attributes;
13748               /* Combine the attributes.  */
13749               attributes = chainon (prefix_attributes, attributes);
13750
13751               /* If it's an `=', then we have a constant-initializer or a
13752                  pure-specifier.  It is not correct to parse the
13753                  initializer before registering the member declaration
13754                  since the member declaration should be in scope while
13755                  its initializer is processed.  However, the rest of the
13756                  front end does not yet provide an interface that allows
13757                  us to handle this correctly.  */
13758               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
13759                 {
13760                   /* In [class.mem]:
13761
13762                      A pure-specifier shall be used only in the declaration of
13763                      a virtual function.
13764
13765                      A member-declarator can contain a constant-initializer
13766                      only if it declares a static member of integral or
13767                      enumeration type.
13768
13769                      Therefore, if the DECLARATOR is for a function, we look
13770                      for a pure-specifier; otherwise, we look for a
13771                      constant-initializer.  When we call `grokfield', it will
13772                      perform more stringent semantics checks.  */
13773                   if (declarator->kind == cdk_function
13774                       && declarator->declarator->kind == cdk_id)
13775                     initializer = cp_parser_pure_specifier (parser);
13776                   else
13777                     /* Parse the initializer.  */
13778                     initializer = cp_parser_constant_initializer (parser);
13779                 }
13780               /* Otherwise, there is no initializer.  */
13781               else
13782                 initializer = NULL_TREE;
13783
13784               /* See if we are probably looking at a function
13785                  definition.  We are certainly not looking at a
13786                  member-declarator.  Calling `grokfield' has
13787                  side-effects, so we must not do it unless we are sure
13788                  that we are looking at a member-declarator.  */
13789               if (cp_parser_token_starts_function_definition_p
13790                   (cp_lexer_peek_token (parser->lexer)))
13791                 {
13792                   /* The grammar does not allow a pure-specifier to be
13793                      used when a member function is defined.  (It is
13794                      possible that this fact is an oversight in the
13795                      standard, since a pure function may be defined
13796                      outside of the class-specifier.  */
13797                   if (initializer)
13798                     error ("pure-specifier on function-definition");
13799                   decl = cp_parser_save_member_function_body (parser,
13800                                                               &decl_specifiers,
13801                                                               declarator,
13802                                                               attributes);
13803                   /* If the member was not a friend, declare it here.  */
13804                   if (!friend_p)
13805                     finish_member_declaration (decl);
13806                   /* Peek at the next token.  */
13807                   token = cp_lexer_peek_token (parser->lexer);
13808                   /* If the next token is a semicolon, consume it.  */
13809                   if (token->type == CPP_SEMICOLON)
13810                     cp_lexer_consume_token (parser->lexer);
13811                   return;
13812                 }
13813               else
13814                 /* Create the declaration.  */
13815                 decl = grokfield (declarator, &decl_specifiers,
13816                                   initializer, /*init_const_expr_p=*/true,
13817                                   asm_specification,
13818                                   attributes);
13819             }
13820
13821           /* Reset PREFIX_ATTRIBUTES.  */
13822           while (attributes && TREE_CHAIN (attributes) != first_attribute)
13823             attributes = TREE_CHAIN (attributes);
13824           if (attributes)
13825             TREE_CHAIN (attributes) = NULL_TREE;
13826
13827           /* If there is any qualification still in effect, clear it
13828              now; we will be starting fresh with the next declarator.  */
13829           parser->scope = NULL_TREE;
13830           parser->qualifying_scope = NULL_TREE;
13831           parser->object_scope = NULL_TREE;
13832           /* If it's a `,', then there are more declarators.  */
13833           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
13834             cp_lexer_consume_token (parser->lexer);
13835           /* If the next token isn't a `;', then we have a parse error.  */
13836           else if (cp_lexer_next_token_is_not (parser->lexer,
13837                                                CPP_SEMICOLON))
13838             {
13839               cp_parser_error (parser, "expected %<;%>");
13840               /* Skip tokens until we find a `;'.  */
13841               cp_parser_skip_to_end_of_statement (parser);
13842
13843               break;
13844             }
13845
13846           if (decl)
13847             {
13848               /* Add DECL to the list of members.  */
13849               if (!friend_p)
13850                 finish_member_declaration (decl);
13851
13852               if (TREE_CODE (decl) == FUNCTION_DECL)
13853                 cp_parser_save_default_args (parser, decl);
13854             }
13855         }
13856     }
13857
13858   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
13859 }
13860
13861 /* Parse a pure-specifier.
13862
13863    pure-specifier:
13864      = 0
13865
13866    Returns INTEGER_ZERO_NODE if a pure specifier is found.
13867    Otherwise, ERROR_MARK_NODE is returned.  */
13868
13869 static tree
13870 cp_parser_pure_specifier (cp_parser* parser)
13871 {
13872   cp_token *token;
13873
13874   /* Look for the `=' token.  */
13875   if (!cp_parser_require (parser, CPP_EQ, "`='"))
13876     return error_mark_node;
13877   /* Look for the `0' token.  */
13878   token = cp_lexer_consume_token (parser->lexer);
13879   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
13880   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
13881     {
13882       cp_parser_error (parser, 
13883                        "invalid pure specifier (only `= 0' is allowed)");
13884       cp_parser_skip_to_end_of_statement (parser);
13885       return error_mark_node;
13886     }
13887   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
13888     {
13889       error ("templates may not be %<virtual%>");
13890       return error_mark_node;
13891     }
13892
13893   return integer_zero_node;
13894 }
13895
13896 /* Parse a constant-initializer.
13897
13898    constant-initializer:
13899      = constant-expression
13900
13901    Returns a representation of the constant-expression.  */
13902
13903 static tree
13904 cp_parser_constant_initializer (cp_parser* parser)
13905 {
13906   /* Look for the `=' token.  */
13907   if (!cp_parser_require (parser, CPP_EQ, "`='"))
13908     return error_mark_node;
13909
13910   /* It is invalid to write:
13911
13912        struct S { static const int i = { 7 }; };
13913
13914      */
13915   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
13916     {
13917       cp_parser_error (parser,
13918                        "a brace-enclosed initializer is not allowed here");
13919       /* Consume the opening brace.  */
13920       cp_lexer_consume_token (parser->lexer);
13921       /* Skip the initializer.  */
13922       cp_parser_skip_to_closing_brace (parser);
13923       /* Look for the trailing `}'.  */
13924       cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
13925
13926       return error_mark_node;
13927     }
13928
13929   return cp_parser_constant_expression (parser,
13930                                         /*allow_non_constant=*/false,
13931                                         NULL);
13932 }
13933
13934 /* Derived classes [gram.class.derived] */
13935
13936 /* Parse a base-clause.
13937
13938    base-clause:
13939      : base-specifier-list
13940
13941    base-specifier-list:
13942      base-specifier
13943      base-specifier-list , base-specifier
13944
13945    Returns a TREE_LIST representing the base-classes, in the order in
13946    which they were declared.  The representation of each node is as
13947    described by cp_parser_base_specifier.
13948
13949    In the case that no bases are specified, this function will return
13950    NULL_TREE, not ERROR_MARK_NODE.  */
13951
13952 static tree
13953 cp_parser_base_clause (cp_parser* parser)
13954 {
13955   tree bases = NULL_TREE;
13956
13957   /* Look for the `:' that begins the list.  */
13958   cp_parser_require (parser, CPP_COLON, "`:'");
13959
13960   /* Scan the base-specifier-list.  */
13961   while (true)
13962     {
13963       cp_token *token;
13964       tree base;
13965
13966       /* Look for the base-specifier.  */
13967       base = cp_parser_base_specifier (parser);
13968       /* Add BASE to the front of the list.  */
13969       if (base != error_mark_node)
13970         {
13971           TREE_CHAIN (base) = bases;
13972           bases = base;
13973         }
13974       /* Peek at the next token.  */
13975       token = cp_lexer_peek_token (parser->lexer);
13976       /* If it's not a comma, then the list is complete.  */
13977       if (token->type != CPP_COMMA)
13978         break;
13979       /* Consume the `,'.  */
13980       cp_lexer_consume_token (parser->lexer);
13981     }
13982
13983   /* PARSER->SCOPE may still be non-NULL at this point, if the last
13984      base class had a qualified name.  However, the next name that
13985      appears is certainly not qualified.  */
13986   parser->scope = NULL_TREE;
13987   parser->qualifying_scope = NULL_TREE;
13988   parser->object_scope = NULL_TREE;
13989
13990   return nreverse (bases);
13991 }
13992
13993 /* Parse a base-specifier.
13994
13995    base-specifier:
13996      :: [opt] nested-name-specifier [opt] class-name
13997      virtual access-specifier [opt] :: [opt] nested-name-specifier
13998        [opt] class-name
13999      access-specifier virtual [opt] :: [opt] nested-name-specifier
14000        [opt] class-name
14001
14002    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
14003    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
14004    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
14005    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
14006
14007 static tree
14008 cp_parser_base_specifier (cp_parser* parser)
14009 {
14010   cp_token *token;
14011   bool done = false;
14012   bool virtual_p = false;
14013   bool duplicate_virtual_error_issued_p = false;
14014   bool duplicate_access_error_issued_p = false;
14015   bool class_scope_p, template_p;
14016   tree access = access_default_node;
14017   tree type;
14018
14019   /* Process the optional `virtual' and `access-specifier'.  */
14020   while (!done)
14021     {
14022       /* Peek at the next token.  */
14023       token = cp_lexer_peek_token (parser->lexer);
14024       /* Process `virtual'.  */
14025       switch (token->keyword)
14026         {
14027         case RID_VIRTUAL:
14028           /* If `virtual' appears more than once, issue an error.  */
14029           if (virtual_p && !duplicate_virtual_error_issued_p)
14030             {
14031               cp_parser_error (parser,
14032                                "%<virtual%> specified more than once in base-specified");
14033               duplicate_virtual_error_issued_p = true;
14034             }
14035
14036           virtual_p = true;
14037
14038           /* Consume the `virtual' token.  */
14039           cp_lexer_consume_token (parser->lexer);
14040
14041           break;
14042
14043         case RID_PUBLIC:
14044         case RID_PROTECTED:
14045         case RID_PRIVATE:
14046           /* If more than one access specifier appears, issue an
14047              error.  */
14048           if (access != access_default_node
14049               && !duplicate_access_error_issued_p)
14050             {
14051               cp_parser_error (parser,
14052                                "more than one access specifier in base-specified");
14053               duplicate_access_error_issued_p = true;
14054             }
14055
14056           access = ridpointers[(int) token->keyword];
14057
14058           /* Consume the access-specifier.  */
14059           cp_lexer_consume_token (parser->lexer);
14060
14061           break;
14062
14063         default:
14064           done = true;
14065           break;
14066         }
14067     }
14068   /* It is not uncommon to see programs mechanically, erroneously, use
14069      the 'typename' keyword to denote (dependent) qualified types
14070      as base classes.  */
14071   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
14072     {
14073       if (!processing_template_decl)
14074         error ("keyword %<typename%> not allowed outside of templates");
14075       else
14076         error ("keyword %<typename%> not allowed in this context "
14077                "(the base class is implicitly a type)");
14078       cp_lexer_consume_token (parser->lexer);
14079     }
14080
14081   /* Look for the optional `::' operator.  */
14082   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
14083   /* Look for the nested-name-specifier.  The simplest way to
14084      implement:
14085
14086        [temp.res]
14087
14088        The keyword `typename' is not permitted in a base-specifier or
14089        mem-initializer; in these contexts a qualified name that
14090        depends on a template-parameter is implicitly assumed to be a
14091        type name.
14092
14093      is to pretend that we have seen the `typename' keyword at this
14094      point.  */
14095   cp_parser_nested_name_specifier_opt (parser,
14096                                        /*typename_keyword_p=*/true,
14097                                        /*check_dependency_p=*/true,
14098                                        typename_type,
14099                                        /*is_declaration=*/true);
14100   /* If the base class is given by a qualified name, assume that names
14101      we see are type names or templates, as appropriate.  */
14102   class_scope_p = (parser->scope && TYPE_P (parser->scope));
14103   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
14104
14105   /* Finally, look for the class-name.  */
14106   type = cp_parser_class_name (parser,
14107                                class_scope_p,
14108                                template_p,
14109                                typename_type,
14110                                /*check_dependency_p=*/true,
14111                                /*class_head_p=*/false,
14112                                /*is_declaration=*/true);
14113
14114   if (type == error_mark_node)
14115     return error_mark_node;
14116
14117   return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
14118 }
14119
14120 /* Exception handling [gram.exception] */
14121
14122 /* Parse an (optional) exception-specification.
14123
14124    exception-specification:
14125      throw ( type-id-list [opt] )
14126
14127    Returns a TREE_LIST representing the exception-specification.  The
14128    TREE_VALUE of each node is a type.  */
14129
14130 static tree
14131 cp_parser_exception_specification_opt (cp_parser* parser)
14132 {
14133   cp_token *token;
14134   tree type_id_list;
14135
14136   /* Peek at the next token.  */
14137   token = cp_lexer_peek_token (parser->lexer);
14138   /* If it's not `throw', then there's no exception-specification.  */
14139   if (!cp_parser_is_keyword (token, RID_THROW))
14140     return NULL_TREE;
14141
14142   /* Consume the `throw'.  */
14143   cp_lexer_consume_token (parser->lexer);
14144
14145   /* Look for the `('.  */
14146   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14147
14148   /* Peek at the next token.  */
14149   token = cp_lexer_peek_token (parser->lexer);
14150   /* If it's not a `)', then there is a type-id-list.  */
14151   if (token->type != CPP_CLOSE_PAREN)
14152     {
14153       const char *saved_message;
14154
14155       /* Types may not be defined in an exception-specification.  */
14156       saved_message = parser->type_definition_forbidden_message;
14157       parser->type_definition_forbidden_message
14158         = "types may not be defined in an exception-specification";
14159       /* Parse the type-id-list.  */
14160       type_id_list = cp_parser_type_id_list (parser);
14161       /* Restore the saved message.  */
14162       parser->type_definition_forbidden_message = saved_message;
14163     }
14164   else
14165     type_id_list = empty_except_spec;
14166
14167   /* Look for the `)'.  */
14168   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14169
14170   return type_id_list;
14171 }
14172
14173 /* Parse an (optional) type-id-list.
14174
14175    type-id-list:
14176      type-id
14177      type-id-list , type-id
14178
14179    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
14180    in the order that the types were presented.  */
14181
14182 static tree
14183 cp_parser_type_id_list (cp_parser* parser)
14184 {
14185   tree types = NULL_TREE;
14186
14187   while (true)
14188     {
14189       cp_token *token;
14190       tree type;
14191
14192       /* Get the next type-id.  */
14193       type = cp_parser_type_id (parser);
14194       /* Add it to the list.  */
14195       types = add_exception_specifier (types, type, /*complain=*/1);
14196       /* Peek at the next token.  */
14197       token = cp_lexer_peek_token (parser->lexer);
14198       /* If it is not a `,', we are done.  */
14199       if (token->type != CPP_COMMA)
14200         break;
14201       /* Consume the `,'.  */
14202       cp_lexer_consume_token (parser->lexer);
14203     }
14204
14205   return nreverse (types);
14206 }
14207
14208 /* Parse a try-block.
14209
14210    try-block:
14211      try compound-statement handler-seq  */
14212
14213 static tree
14214 cp_parser_try_block (cp_parser* parser)
14215 {
14216   tree try_block;
14217
14218   cp_parser_require_keyword (parser, RID_TRY, "`try'");
14219   try_block = begin_try_block ();
14220   cp_parser_compound_statement (parser, NULL, true);
14221   finish_try_block (try_block);
14222   cp_parser_handler_seq (parser);
14223   finish_handler_sequence (try_block);
14224
14225   return try_block;
14226 }
14227
14228 /* Parse a function-try-block.
14229
14230    function-try-block:
14231      try ctor-initializer [opt] function-body handler-seq  */
14232
14233 static bool
14234 cp_parser_function_try_block (cp_parser* parser)
14235 {
14236   tree compound_stmt;
14237   tree try_block;
14238   bool ctor_initializer_p;
14239
14240   /* Look for the `try' keyword.  */
14241   if (!cp_parser_require_keyword (parser, RID_TRY, "`try'"))
14242     return false;
14243   /* Let the rest of the front-end know where we are.  */
14244   try_block = begin_function_try_block (&compound_stmt);
14245   /* Parse the function-body.  */
14246   ctor_initializer_p
14247     = cp_parser_ctor_initializer_opt_and_function_body (parser);
14248   /* We're done with the `try' part.  */
14249   finish_function_try_block (try_block);
14250   /* Parse the handlers.  */
14251   cp_parser_handler_seq (parser);
14252   /* We're done with the handlers.  */
14253   finish_function_handler_sequence (try_block, compound_stmt);
14254
14255   return ctor_initializer_p;
14256 }
14257
14258 /* Parse a handler-seq.
14259
14260    handler-seq:
14261      handler handler-seq [opt]  */
14262
14263 static void
14264 cp_parser_handler_seq (cp_parser* parser)
14265 {
14266   while (true)
14267     {
14268       cp_token *token;
14269
14270       /* Parse the handler.  */
14271       cp_parser_handler (parser);
14272       /* Peek at the next token.  */
14273       token = cp_lexer_peek_token (parser->lexer);
14274       /* If it's not `catch' then there are no more handlers.  */
14275       if (!cp_parser_is_keyword (token, RID_CATCH))
14276         break;
14277     }
14278 }
14279
14280 /* Parse a handler.
14281
14282    handler:
14283      catch ( exception-declaration ) compound-statement  */
14284
14285 static void
14286 cp_parser_handler (cp_parser* parser)
14287 {
14288   tree handler;
14289   tree declaration;
14290
14291   cp_parser_require_keyword (parser, RID_CATCH, "`catch'");
14292   handler = begin_handler ();
14293   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14294   declaration = cp_parser_exception_declaration (parser);
14295   finish_handler_parms (declaration, handler);
14296   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14297   cp_parser_compound_statement (parser, NULL, false);
14298   finish_handler (handler);
14299 }
14300
14301 /* Parse an exception-declaration.
14302
14303    exception-declaration:
14304      type-specifier-seq declarator
14305      type-specifier-seq abstract-declarator
14306      type-specifier-seq
14307      ...
14308
14309    Returns a VAR_DECL for the declaration, or NULL_TREE if the
14310    ellipsis variant is used.  */
14311
14312 static tree
14313 cp_parser_exception_declaration (cp_parser* parser)
14314 {
14315   tree decl;
14316   cp_decl_specifier_seq type_specifiers;
14317   cp_declarator *declarator;
14318   const char *saved_message;
14319
14320   /* If it's an ellipsis, it's easy to handle.  */
14321   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
14322     {
14323       /* Consume the `...' token.  */
14324       cp_lexer_consume_token (parser->lexer);
14325       return NULL_TREE;
14326     }
14327
14328   /* Types may not be defined in exception-declarations.  */
14329   saved_message = parser->type_definition_forbidden_message;
14330   parser->type_definition_forbidden_message
14331     = "types may not be defined in exception-declarations";
14332
14333   /* Parse the type-specifier-seq.  */
14334   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
14335                                 &type_specifiers);
14336   /* If it's a `)', then there is no declarator.  */
14337   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
14338     declarator = NULL;
14339   else
14340     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
14341                                        /*ctor_dtor_or_conv_p=*/NULL,
14342                                        /*parenthesized_p=*/NULL,
14343                                        /*member_p=*/false);
14344
14345   /* Restore the saved message.  */
14346   parser->type_definition_forbidden_message = saved_message;
14347
14348   if (type_specifiers.any_specifiers_p)
14349     {
14350       decl = grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
14351       if (decl == NULL_TREE)
14352         error ("invalid catch parameter");
14353     }
14354   else
14355     decl = NULL_TREE;
14356
14357   return decl;
14358 }
14359
14360 /* Parse a throw-expression.
14361
14362    throw-expression:
14363      throw assignment-expression [opt]
14364
14365    Returns a THROW_EXPR representing the throw-expression.  */
14366
14367 static tree
14368 cp_parser_throw_expression (cp_parser* parser)
14369 {
14370   tree expression;
14371   cp_token* token;
14372
14373   cp_parser_require_keyword (parser, RID_THROW, "`throw'");
14374   token = cp_lexer_peek_token (parser->lexer);
14375   /* Figure out whether or not there is an assignment-expression
14376      following the "throw" keyword.  */
14377   if (token->type == CPP_COMMA
14378       || token->type == CPP_SEMICOLON
14379       || token->type == CPP_CLOSE_PAREN
14380       || token->type == CPP_CLOSE_SQUARE
14381       || token->type == CPP_CLOSE_BRACE
14382       || token->type == CPP_COLON)
14383     expression = NULL_TREE;
14384   else
14385     expression = cp_parser_assignment_expression (parser,
14386                                                   /*cast_p=*/false);
14387
14388   return build_throw (expression);
14389 }
14390
14391 /* GNU Extensions */
14392
14393 /* Parse an (optional) asm-specification.
14394
14395    asm-specification:
14396      asm ( string-literal )
14397
14398    If the asm-specification is present, returns a STRING_CST
14399    corresponding to the string-literal.  Otherwise, returns
14400    NULL_TREE.  */
14401
14402 static tree
14403 cp_parser_asm_specification_opt (cp_parser* parser)
14404 {
14405   cp_token *token;
14406   tree asm_specification;
14407
14408   /* Peek at the next token.  */
14409   token = cp_lexer_peek_token (parser->lexer);
14410   /* If the next token isn't the `asm' keyword, then there's no
14411      asm-specification.  */
14412   if (!cp_parser_is_keyword (token, RID_ASM))
14413     return NULL_TREE;
14414
14415   /* Consume the `asm' token.  */
14416   cp_lexer_consume_token (parser->lexer);
14417   /* Look for the `('.  */
14418   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14419
14420   /* Look for the string-literal.  */
14421   asm_specification = cp_parser_string_literal (parser, false, false);
14422
14423   /* Look for the `)'.  */
14424   cp_parser_require (parser, CPP_CLOSE_PAREN, "`('");
14425
14426   return asm_specification;
14427 }
14428
14429 /* Parse an asm-operand-list.
14430
14431    asm-operand-list:
14432      asm-operand
14433      asm-operand-list , asm-operand
14434
14435    asm-operand:
14436      string-literal ( expression )
14437      [ string-literal ] string-literal ( expression )
14438
14439    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
14440    each node is the expression.  The TREE_PURPOSE is itself a
14441    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
14442    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
14443    is a STRING_CST for the string literal before the parenthesis.  */
14444
14445 static tree
14446 cp_parser_asm_operand_list (cp_parser* parser)
14447 {
14448   tree asm_operands = NULL_TREE;
14449
14450   while (true)
14451     {
14452       tree string_literal;
14453       tree expression;
14454       tree name;
14455
14456       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
14457         {
14458           /* Consume the `[' token.  */
14459           cp_lexer_consume_token (parser->lexer);
14460           /* Read the operand name.  */
14461           name = cp_parser_identifier (parser);
14462           if (name != error_mark_node)
14463             name = build_string (IDENTIFIER_LENGTH (name),
14464                                  IDENTIFIER_POINTER (name));
14465           /* Look for the closing `]'.  */
14466           cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
14467         }
14468       else
14469         name = NULL_TREE;
14470       /* Look for the string-literal.  */
14471       string_literal = cp_parser_string_literal (parser, false, false);
14472
14473       /* Look for the `('.  */
14474       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14475       /* Parse the expression.  */
14476       expression = cp_parser_expression (parser, /*cast_p=*/false);
14477       /* Look for the `)'.  */
14478       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14479
14480       /* Add this operand to the list.  */
14481       asm_operands = tree_cons (build_tree_list (name, string_literal),
14482                                 expression,
14483                                 asm_operands);
14484       /* If the next token is not a `,', there are no more
14485          operands.  */
14486       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14487         break;
14488       /* Consume the `,'.  */
14489       cp_lexer_consume_token (parser->lexer);
14490     }
14491
14492   return nreverse (asm_operands);
14493 }
14494
14495 /* Parse an asm-clobber-list.
14496
14497    asm-clobber-list:
14498      string-literal
14499      asm-clobber-list , string-literal
14500
14501    Returns a TREE_LIST, indicating the clobbers in the order that they
14502    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
14503
14504 static tree
14505 cp_parser_asm_clobber_list (cp_parser* parser)
14506 {
14507   tree clobbers = NULL_TREE;
14508
14509   while (true)
14510     {
14511       tree string_literal;
14512
14513       /* Look for the string literal.  */
14514       string_literal = cp_parser_string_literal (parser, false, false);
14515       /* Add it to the list.  */
14516       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
14517       /* If the next token is not a `,', then the list is
14518          complete.  */
14519       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14520         break;
14521       /* Consume the `,' token.  */
14522       cp_lexer_consume_token (parser->lexer);
14523     }
14524
14525   return clobbers;
14526 }
14527
14528 /* Parse an (optional) series of attributes.
14529
14530    attributes:
14531      attributes attribute
14532
14533    attribute:
14534      __attribute__ (( attribute-list [opt] ))
14535
14536    The return value is as for cp_parser_attribute_list.  */
14537
14538 static tree
14539 cp_parser_attributes_opt (cp_parser* parser)
14540 {
14541   tree attributes = NULL_TREE;
14542
14543   while (true)
14544     {
14545       cp_token *token;
14546       tree attribute_list;
14547
14548       /* Peek at the next token.  */
14549       token = cp_lexer_peek_token (parser->lexer);
14550       /* If it's not `__attribute__', then we're done.  */
14551       if (token->keyword != RID_ATTRIBUTE)
14552         break;
14553
14554       /* Consume the `__attribute__' keyword.  */
14555       cp_lexer_consume_token (parser->lexer);
14556       /* Look for the two `(' tokens.  */
14557       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14558       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14559
14560       /* Peek at the next token.  */
14561       token = cp_lexer_peek_token (parser->lexer);
14562       if (token->type != CPP_CLOSE_PAREN)
14563         /* Parse the attribute-list.  */
14564         attribute_list = cp_parser_attribute_list (parser);
14565       else
14566         /* If the next token is a `)', then there is no attribute
14567            list.  */
14568         attribute_list = NULL;
14569
14570       /* Look for the two `)' tokens.  */
14571       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14572       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14573
14574       /* Add these new attributes to the list.  */
14575       attributes = chainon (attributes, attribute_list);
14576     }
14577
14578   return attributes;
14579 }
14580
14581 /* Parse an attribute-list.
14582
14583    attribute-list:
14584      attribute
14585      attribute-list , attribute
14586
14587    attribute:
14588      identifier
14589      identifier ( identifier )
14590      identifier ( identifier , expression-list )
14591      identifier ( expression-list )
14592
14593    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
14594    to an attribute.  The TREE_PURPOSE of each node is the identifier
14595    indicating which attribute is in use.  The TREE_VALUE represents
14596    the arguments, if any.  */
14597
14598 static tree
14599 cp_parser_attribute_list (cp_parser* parser)
14600 {
14601   tree attribute_list = NULL_TREE;
14602   bool save_translate_strings_p = parser->translate_strings_p;
14603
14604   parser->translate_strings_p = false;
14605   while (true)
14606     {
14607       cp_token *token;
14608       tree identifier;
14609       tree attribute;
14610
14611       /* Look for the identifier.  We also allow keywords here; for
14612          example `__attribute__ ((const))' is legal.  */
14613       token = cp_lexer_peek_token (parser->lexer);
14614       if (token->type == CPP_NAME
14615           || token->type == CPP_KEYWORD)
14616         {
14617           /* Consume the token.  */
14618           token = cp_lexer_consume_token (parser->lexer);
14619
14620           /* Save away the identifier that indicates which attribute
14621              this is.  */
14622           identifier = token->value;
14623           attribute = build_tree_list (identifier, NULL_TREE);
14624
14625           /* Peek at the next token.  */
14626           token = cp_lexer_peek_token (parser->lexer);
14627           /* If it's an `(', then parse the attribute arguments.  */
14628           if (token->type == CPP_OPEN_PAREN)
14629             {
14630               tree arguments;
14631
14632               arguments = (cp_parser_parenthesized_expression_list
14633                            (parser, true, /*cast_p=*/false,
14634                             /*non_constant_p=*/NULL));
14635               /* Save the identifier and arguments away.  */
14636               TREE_VALUE (attribute) = arguments;
14637             }
14638
14639           /* Add this attribute to the list.  */
14640           TREE_CHAIN (attribute) = attribute_list;
14641           attribute_list = attribute;
14642
14643           token = cp_lexer_peek_token (parser->lexer);
14644         }
14645       /* Now, look for more attributes.  If the next token isn't a
14646          `,', we're done.  */
14647       if (token->type != CPP_COMMA)
14648         break;
14649
14650       /* Consume the comma and keep going.  */
14651       cp_lexer_consume_token (parser->lexer);
14652     }
14653   parser->translate_strings_p = save_translate_strings_p;
14654
14655   /* We built up the list in reverse order.  */
14656   return nreverse (attribute_list);
14657 }
14658
14659 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
14660    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
14661    current value of the PEDANTIC flag, regardless of whether or not
14662    the `__extension__' keyword is present.  The caller is responsible
14663    for restoring the value of the PEDANTIC flag.  */
14664
14665 static bool
14666 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
14667 {
14668   /* Save the old value of the PEDANTIC flag.  */
14669   *saved_pedantic = pedantic;
14670
14671   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
14672     {
14673       /* Consume the `__extension__' token.  */
14674       cp_lexer_consume_token (parser->lexer);
14675       /* We're not being pedantic while the `__extension__' keyword is
14676          in effect.  */
14677       pedantic = 0;
14678
14679       return true;
14680     }
14681
14682   return false;
14683 }
14684
14685 /* Parse a label declaration.
14686
14687    label-declaration:
14688      __label__ label-declarator-seq ;
14689
14690    label-declarator-seq:
14691      identifier , label-declarator-seq
14692      identifier  */
14693
14694 static void
14695 cp_parser_label_declaration (cp_parser* parser)
14696 {
14697   /* Look for the `__label__' keyword.  */
14698   cp_parser_require_keyword (parser, RID_LABEL, "`__label__'");
14699
14700   while (true)
14701     {
14702       tree identifier;
14703
14704       /* Look for an identifier.  */
14705       identifier = cp_parser_identifier (parser);
14706       /* If we failed, stop.  */
14707       if (identifier == error_mark_node)
14708         break;
14709       /* Declare it as a label.  */
14710       finish_label_decl (identifier);
14711       /* If the next token is a `;', stop.  */
14712       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
14713         break;
14714       /* Look for the `,' separating the label declarations.  */
14715       cp_parser_require (parser, CPP_COMMA, "`,'");
14716     }
14717
14718   /* Look for the final `;'.  */
14719   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
14720 }
14721
14722 /* Support Functions */
14723
14724 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
14725    NAME should have one of the representations used for an
14726    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
14727    is returned.  If PARSER->SCOPE is a dependent type, then a
14728    SCOPE_REF is returned.
14729
14730    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
14731    returned; the name was already resolved when the TEMPLATE_ID_EXPR
14732    was formed.  Abstractly, such entities should not be passed to this
14733    function, because they do not need to be looked up, but it is
14734    simpler to check for this special case here, rather than at the
14735    call-sites.
14736
14737    In cases not explicitly covered above, this function returns a
14738    DECL, OVERLOAD, or baselink representing the result of the lookup.
14739    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
14740    is returned.
14741
14742    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
14743    (e.g., "struct") that was used.  In that case bindings that do not
14744    refer to types are ignored.
14745
14746    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
14747    ignored.
14748
14749    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
14750    are ignored.
14751
14752    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
14753    types.
14754
14755    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
14756    TREE_LIST of candidates if name-lookup results in an ambiguity, and
14757    NULL_TREE otherwise.  */ 
14758
14759 static tree
14760 cp_parser_lookup_name (cp_parser *parser, tree name,
14761                        enum tag_types tag_type,
14762                        bool is_template, 
14763                        bool is_namespace,
14764                        bool check_dependency,
14765                        tree *ambiguous_decls)
14766 {
14767   int flags = 0;
14768   tree decl;
14769   tree object_type = parser->context->object_type;
14770
14771   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
14772     flags |= LOOKUP_COMPLAIN;
14773
14774   /* Assume that the lookup will be unambiguous.  */
14775   if (ambiguous_decls)
14776     *ambiguous_decls = NULL_TREE;
14777
14778   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
14779      no longer valid.  Note that if we are parsing tentatively, and
14780      the parse fails, OBJECT_TYPE will be automatically restored.  */
14781   parser->context->object_type = NULL_TREE;
14782
14783   if (name == error_mark_node)
14784     return error_mark_node;
14785
14786   /* A template-id has already been resolved; there is no lookup to
14787      do.  */
14788   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
14789     return name;
14790   if (BASELINK_P (name))
14791     {
14792       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
14793                   == TEMPLATE_ID_EXPR);
14794       return name;
14795     }
14796
14797   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
14798      it should already have been checked to make sure that the name
14799      used matches the type being destroyed.  */
14800   if (TREE_CODE (name) == BIT_NOT_EXPR)
14801     {
14802       tree type;
14803
14804       /* Figure out to which type this destructor applies.  */
14805       if (parser->scope)
14806         type = parser->scope;
14807       else if (object_type)
14808         type = object_type;
14809       else
14810         type = current_class_type;
14811       /* If that's not a class type, there is no destructor.  */
14812       if (!type || !CLASS_TYPE_P (type))
14813         return error_mark_node;
14814       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
14815         lazily_declare_fn (sfk_destructor, type);
14816       if (!CLASSTYPE_DESTRUCTORS (type))
14817           return error_mark_node;
14818       /* If it was a class type, return the destructor.  */
14819       return CLASSTYPE_DESTRUCTORS (type);
14820     }
14821
14822   /* By this point, the NAME should be an ordinary identifier.  If
14823      the id-expression was a qualified name, the qualifying scope is
14824      stored in PARSER->SCOPE at this point.  */
14825   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
14826
14827   /* Perform the lookup.  */
14828   if (parser->scope)
14829     {
14830       bool dependent_p;
14831
14832       if (parser->scope == error_mark_node)
14833         return error_mark_node;
14834
14835       /* If the SCOPE is dependent, the lookup must be deferred until
14836          the template is instantiated -- unless we are explicitly
14837          looking up names in uninstantiated templates.  Even then, we
14838          cannot look up the name if the scope is not a class type; it
14839          might, for example, be a template type parameter.  */
14840       dependent_p = (TYPE_P (parser->scope)
14841                      && !(parser->in_declarator_p
14842                           && currently_open_class (parser->scope))
14843                      && dependent_type_p (parser->scope));
14844       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
14845            && dependent_p)
14846         {
14847           if (tag_type)
14848             {
14849               tree type;
14850
14851               /* The resolution to Core Issue 180 says that `struct
14852                  A::B' should be considered a type-name, even if `A'
14853                  is dependent.  */
14854               type = make_typename_type (parser->scope, name, tag_type,
14855                                          /*complain=*/tf_error);
14856               decl = TYPE_NAME (type);
14857             }
14858           else if (is_template
14859                    && (cp_parser_next_token_ends_template_argument_p (parser)
14860                        || cp_lexer_next_token_is (parser->lexer,
14861                                                   CPP_CLOSE_PAREN)))
14862             decl = make_unbound_class_template (parser->scope,
14863                                                 name, NULL_TREE,
14864                                                 /*complain=*/tf_error);
14865           else
14866             decl = build_qualified_name (/*type=*/NULL_TREE,
14867                                          parser->scope, name,
14868                                          is_template);
14869         }
14870       else
14871         {
14872           tree pushed_scope = NULL_TREE;
14873
14874           /* If PARSER->SCOPE is a dependent type, then it must be a
14875              class type, and we must not be checking dependencies;
14876              otherwise, we would have processed this lookup above.  So
14877              that PARSER->SCOPE is not considered a dependent base by
14878              lookup_member, we must enter the scope here.  */
14879           if (dependent_p)
14880             pushed_scope = push_scope (parser->scope);
14881           /* If the PARSER->SCOPE is a template specialization, it
14882              may be instantiated during name lookup.  In that case,
14883              errors may be issued.  Even if we rollback the current
14884              tentative parse, those errors are valid.  */
14885           decl = lookup_qualified_name (parser->scope, name,
14886                                         tag_type != none_type,
14887                                         /*complain=*/true);
14888           if (pushed_scope)
14889             pop_scope (pushed_scope);
14890         }
14891       parser->qualifying_scope = parser->scope;
14892       parser->object_scope = NULL_TREE;
14893     }
14894   else if (object_type)
14895     {
14896       tree object_decl = NULL_TREE;
14897       /* Look up the name in the scope of the OBJECT_TYPE, unless the
14898          OBJECT_TYPE is not a class.  */
14899       if (CLASS_TYPE_P (object_type))
14900         /* If the OBJECT_TYPE is a template specialization, it may
14901            be instantiated during name lookup.  In that case, errors
14902            may be issued.  Even if we rollback the current tentative
14903            parse, those errors are valid.  */
14904         object_decl = lookup_member (object_type,
14905                                      name,
14906                                      /*protect=*/0,
14907                                      tag_type != none_type);
14908       /* Look it up in the enclosing context, too.  */
14909       decl = lookup_name_real (name, tag_type != none_type,
14910                                /*nonclass=*/0,
14911                                /*block_p=*/true, is_namespace, flags);
14912       parser->object_scope = object_type;
14913       parser->qualifying_scope = NULL_TREE;
14914       if (object_decl)
14915         decl = object_decl;
14916     }
14917   else
14918     {
14919       decl = lookup_name_real (name, tag_type != none_type,
14920                                /*nonclass=*/0,
14921                                /*block_p=*/true, is_namespace, flags);
14922       parser->qualifying_scope = NULL_TREE;
14923       parser->object_scope = NULL_TREE;
14924     }
14925
14926   /* If the lookup failed, let our caller know.  */
14927   if (!decl || decl == error_mark_node)
14928     return error_mark_node;
14929
14930   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
14931   if (TREE_CODE (decl) == TREE_LIST)
14932     {
14933       if (ambiguous_decls)
14934         *ambiguous_decls = decl;
14935       /* The error message we have to print is too complicated for
14936          cp_parser_error, so we incorporate its actions directly.  */
14937       if (!cp_parser_simulate_error (parser))
14938         {
14939           error ("reference to %qD is ambiguous", name);
14940           print_candidates (decl);
14941         }
14942       return error_mark_node;
14943     }
14944
14945   gcc_assert (DECL_P (decl)
14946               || TREE_CODE (decl) == OVERLOAD
14947               || TREE_CODE (decl) == SCOPE_REF
14948               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
14949               || BASELINK_P (decl));
14950
14951   /* If we have resolved the name of a member declaration, check to
14952      see if the declaration is accessible.  When the name resolves to
14953      set of overloaded functions, accessibility is checked when
14954      overload resolution is done.
14955
14956      During an explicit instantiation, access is not checked at all,
14957      as per [temp.explicit].  */
14958   if (DECL_P (decl))
14959     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
14960
14961   return decl;
14962 }
14963
14964 /* Like cp_parser_lookup_name, but for use in the typical case where
14965    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
14966    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
14967
14968 static tree
14969 cp_parser_lookup_name_simple (cp_parser* parser, tree name)
14970 {
14971   return cp_parser_lookup_name (parser, name,
14972                                 none_type,
14973                                 /*is_template=*/false,
14974                                 /*is_namespace=*/false,
14975                                 /*check_dependency=*/true,
14976                                 /*ambiguous_decls=*/NULL);
14977 }
14978
14979 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
14980    the current context, return the TYPE_DECL.  If TAG_NAME_P is
14981    true, the DECL indicates the class being defined in a class-head,
14982    or declared in an elaborated-type-specifier.
14983
14984    Otherwise, return DECL.  */
14985
14986 static tree
14987 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
14988 {
14989   /* If the TEMPLATE_DECL is being declared as part of a class-head,
14990      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
14991
14992        struct A {
14993          template <typename T> struct B;
14994        };
14995
14996        template <typename T> struct A::B {};
14997
14998      Similarly, in an elaborated-type-specifier:
14999
15000        namespace N { struct X{}; }
15001
15002        struct A {
15003          template <typename T> friend struct N::X;
15004        };
15005
15006      However, if the DECL refers to a class type, and we are in
15007      the scope of the class, then the name lookup automatically
15008      finds the TYPE_DECL created by build_self_reference rather
15009      than a TEMPLATE_DECL.  For example, in:
15010
15011        template <class T> struct S {
15012          S s;
15013        };
15014
15015      there is no need to handle such case.  */
15016
15017   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
15018     return DECL_TEMPLATE_RESULT (decl);
15019
15020   return decl;
15021 }
15022
15023 /* If too many, or too few, template-parameter lists apply to the
15024    declarator, issue an error message.  Returns TRUE if all went well,
15025    and FALSE otherwise.  */
15026
15027 static bool
15028 cp_parser_check_declarator_template_parameters (cp_parser* parser,
15029                                                 cp_declarator *declarator)
15030 {
15031   unsigned num_templates;
15032
15033   /* We haven't seen any classes that involve template parameters yet.  */
15034   num_templates = 0;
15035
15036   switch (declarator->kind)
15037     {
15038     case cdk_id:
15039       if (declarator->u.id.qualifying_scope)
15040         {
15041           tree scope;
15042           tree member;
15043
15044           scope = declarator->u.id.qualifying_scope;
15045           member = declarator->u.id.unqualified_name;
15046
15047           while (scope && CLASS_TYPE_P (scope))
15048             {
15049               /* You're supposed to have one `template <...>'
15050                  for every template class, but you don't need one
15051                  for a full specialization.  For example:
15052
15053                  template <class T> struct S{};
15054                  template <> struct S<int> { void f(); };
15055                  void S<int>::f () {}
15056
15057                  is correct; there shouldn't be a `template <>' for
15058                  the definition of `S<int>::f'.  */
15059               if (CLASSTYPE_TEMPLATE_INFO (scope)
15060                   && (CLASSTYPE_TEMPLATE_INSTANTIATION (scope)
15061                       || uses_template_parms (CLASSTYPE_TI_ARGS (scope)))
15062                   && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
15063                 ++num_templates;
15064
15065               scope = TYPE_CONTEXT (scope);
15066             }
15067         }
15068       else if (TREE_CODE (declarator->u.id.unqualified_name)
15069                == TEMPLATE_ID_EXPR)
15070         /* If the DECLARATOR has the form `X<y>' then it uses one
15071            additional level of template parameters.  */
15072         ++num_templates;
15073
15074       return cp_parser_check_template_parameters (parser,
15075                                                   num_templates);
15076
15077     case cdk_function:
15078     case cdk_array:
15079     case cdk_pointer:
15080     case cdk_reference:
15081     case cdk_ptrmem:
15082       return (cp_parser_check_declarator_template_parameters
15083               (parser, declarator->declarator));
15084
15085     case cdk_error:
15086       return true;
15087
15088     default:
15089       gcc_unreachable ();
15090     }
15091   return false;
15092 }
15093
15094 /* NUM_TEMPLATES were used in the current declaration.  If that is
15095    invalid, return FALSE and issue an error messages.  Otherwise,
15096    return TRUE.  */
15097
15098 static bool
15099 cp_parser_check_template_parameters (cp_parser* parser,
15100                                      unsigned num_templates)
15101 {
15102   /* If there are more template classes than parameter lists, we have
15103      something like:
15104
15105        template <class T> void S<T>::R<T>::f ();  */
15106   if (parser->num_template_parameter_lists < num_templates)
15107     {
15108       error ("too few template-parameter-lists");
15109       return false;
15110     }
15111   /* If there are the same number of template classes and parameter
15112      lists, that's OK.  */
15113   if (parser->num_template_parameter_lists == num_templates)
15114     return true;
15115   /* If there are more, but only one more, then we are referring to a
15116      member template.  That's OK too.  */
15117   if (parser->num_template_parameter_lists == num_templates + 1)
15118       return true;
15119   /* Otherwise, there are too many template parameter lists.  We have
15120      something like:
15121
15122      template <class T> template <class U> void S::f();  */
15123   error ("too many template-parameter-lists");
15124   return false;
15125 }
15126
15127 /* Parse an optional `::' token indicating that the following name is
15128    from the global namespace.  If so, PARSER->SCOPE is set to the
15129    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
15130    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
15131    Returns the new value of PARSER->SCOPE, if the `::' token is
15132    present, and NULL_TREE otherwise.  */
15133
15134 static tree
15135 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
15136 {
15137   cp_token *token;
15138
15139   /* Peek at the next token.  */
15140   token = cp_lexer_peek_token (parser->lexer);
15141   /* If we're looking at a `::' token then we're starting from the
15142      global namespace, not our current location.  */
15143   if (token->type == CPP_SCOPE)
15144     {
15145       /* Consume the `::' token.  */
15146       cp_lexer_consume_token (parser->lexer);
15147       /* Set the SCOPE so that we know where to start the lookup.  */
15148       parser->scope = global_namespace;
15149       parser->qualifying_scope = global_namespace;
15150       parser->object_scope = NULL_TREE;
15151
15152       return parser->scope;
15153     }
15154   else if (!current_scope_valid_p)
15155     {
15156       parser->scope = NULL_TREE;
15157       parser->qualifying_scope = NULL_TREE;
15158       parser->object_scope = NULL_TREE;
15159     }
15160
15161   return NULL_TREE;
15162 }
15163
15164 /* Returns TRUE if the upcoming token sequence is the start of a
15165    constructor declarator.  If FRIEND_P is true, the declarator is
15166    preceded by the `friend' specifier.  */
15167
15168 static bool
15169 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
15170 {
15171   bool constructor_p;
15172   tree type_decl = NULL_TREE;
15173   bool nested_name_p;
15174   cp_token *next_token;
15175
15176   /* The common case is that this is not a constructor declarator, so
15177      try to avoid doing lots of work if at all possible.  It's not
15178      valid declare a constructor at function scope.  */
15179   if (at_function_scope_p ())
15180     return false;
15181   /* And only certain tokens can begin a constructor declarator.  */
15182   next_token = cp_lexer_peek_token (parser->lexer);
15183   if (next_token->type != CPP_NAME
15184       && next_token->type != CPP_SCOPE
15185       && next_token->type != CPP_NESTED_NAME_SPECIFIER
15186       && next_token->type != CPP_TEMPLATE_ID)
15187     return false;
15188
15189   /* Parse tentatively; we are going to roll back all of the tokens
15190      consumed here.  */
15191   cp_parser_parse_tentatively (parser);
15192   /* Assume that we are looking at a constructor declarator.  */
15193   constructor_p = true;
15194
15195   /* Look for the optional `::' operator.  */
15196   cp_parser_global_scope_opt (parser,
15197                               /*current_scope_valid_p=*/false);
15198   /* Look for the nested-name-specifier.  */
15199   nested_name_p
15200     = (cp_parser_nested_name_specifier_opt (parser,
15201                                             /*typename_keyword_p=*/false,
15202                                             /*check_dependency_p=*/false,
15203                                             /*type_p=*/false,
15204                                             /*is_declaration=*/false)
15205        != NULL_TREE);
15206   /* Outside of a class-specifier, there must be a
15207      nested-name-specifier.  */
15208   if (!nested_name_p &&
15209       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
15210        || friend_p))
15211     constructor_p = false;
15212   /* If we still think that this might be a constructor-declarator,
15213      look for a class-name.  */
15214   if (constructor_p)
15215     {
15216       /* If we have:
15217
15218            template <typename T> struct S { S(); };
15219            template <typename T> S<T>::S ();
15220
15221          we must recognize that the nested `S' names a class.
15222          Similarly, for:
15223
15224            template <typename T> S<T>::S<T> ();
15225
15226          we must recognize that the nested `S' names a template.  */
15227       type_decl = cp_parser_class_name (parser,
15228                                         /*typename_keyword_p=*/false,
15229                                         /*template_keyword_p=*/false,
15230                                         none_type,
15231                                         /*check_dependency_p=*/false,
15232                                         /*class_head_p=*/false,
15233                                         /*is_declaration=*/false);
15234       /* If there was no class-name, then this is not a constructor.  */
15235       constructor_p = !cp_parser_error_occurred (parser);
15236     }
15237
15238   /* If we're still considering a constructor, we have to see a `(',
15239      to begin the parameter-declaration-clause, followed by either a
15240      `)', an `...', or a decl-specifier.  We need to check for a
15241      type-specifier to avoid being fooled into thinking that:
15242
15243        S::S (f) (int);
15244
15245      is a constructor.  (It is actually a function named `f' that
15246      takes one parameter (of type `int') and returns a value of type
15247      `S::S'.  */
15248   if (constructor_p
15249       && cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
15250     {
15251       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
15252           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
15253           /* A parameter declaration begins with a decl-specifier,
15254              which is either the "attribute" keyword, a storage class
15255              specifier, or (usually) a type-specifier.  */
15256           && !cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE)
15257           && !cp_parser_storage_class_specifier_opt (parser))
15258         {
15259           tree type;
15260           tree pushed_scope = NULL_TREE;
15261           unsigned saved_num_template_parameter_lists;
15262
15263           /* Names appearing in the type-specifier should be looked up
15264              in the scope of the class.  */
15265           if (current_class_type)
15266             type = NULL_TREE;
15267           else
15268             {
15269               type = TREE_TYPE (type_decl);
15270               if (TREE_CODE (type) == TYPENAME_TYPE)
15271                 {
15272                   type = resolve_typename_type (type,
15273                                                 /*only_current_p=*/false);
15274                   if (type == error_mark_node)
15275                     {
15276                       cp_parser_abort_tentative_parse (parser);
15277                       return false;
15278                     }
15279                 }
15280               pushed_scope = push_scope (type);
15281             }
15282
15283           /* Inside the constructor parameter list, surrounding
15284              template-parameter-lists do not apply.  */
15285           saved_num_template_parameter_lists
15286             = parser->num_template_parameter_lists;
15287           parser->num_template_parameter_lists = 0;
15288
15289           /* Look for the type-specifier.  */
15290           cp_parser_type_specifier (parser,
15291                                     CP_PARSER_FLAGS_NONE,
15292                                     /*decl_specs=*/NULL,
15293                                     /*is_declarator=*/true,
15294                                     /*declares_class_or_enum=*/NULL,
15295                                     /*is_cv_qualifier=*/NULL);
15296
15297           parser->num_template_parameter_lists
15298             = saved_num_template_parameter_lists;
15299
15300           /* Leave the scope of the class.  */
15301           if (pushed_scope)
15302             pop_scope (pushed_scope);
15303
15304           constructor_p = !cp_parser_error_occurred (parser);
15305         }
15306     }
15307   else
15308     constructor_p = false;
15309   /* We did not really want to consume any tokens.  */
15310   cp_parser_abort_tentative_parse (parser);
15311
15312   return constructor_p;
15313 }
15314
15315 /* Parse the definition of the function given by the DECL_SPECIFIERS,
15316    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
15317    they must be performed once we are in the scope of the function.
15318
15319    Returns the function defined.  */
15320
15321 static tree
15322 cp_parser_function_definition_from_specifiers_and_declarator
15323   (cp_parser* parser,
15324    cp_decl_specifier_seq *decl_specifiers,
15325    tree attributes,
15326    const cp_declarator *declarator)
15327 {
15328   tree fn;
15329   bool success_p;
15330
15331   /* Begin the function-definition.  */
15332   success_p = start_function (decl_specifiers, declarator, attributes);
15333
15334   /* The things we're about to see are not directly qualified by any
15335      template headers we've seen thus far.  */
15336   reset_specialization ();
15337
15338   /* If there were names looked up in the decl-specifier-seq that we
15339      did not check, check them now.  We must wait until we are in the
15340      scope of the function to perform the checks, since the function
15341      might be a friend.  */
15342   perform_deferred_access_checks ();
15343
15344   if (!success_p)
15345     {
15346       /* Skip the entire function.  */
15347       cp_parser_skip_to_end_of_block_or_statement (parser);
15348       fn = error_mark_node;
15349     }
15350   else
15351     fn = cp_parser_function_definition_after_declarator (parser,
15352                                                          /*inline_p=*/false);
15353
15354   return fn;
15355 }
15356
15357 /* Parse the part of a function-definition that follows the
15358    declarator.  INLINE_P is TRUE iff this function is an inline
15359    function defined with a class-specifier.
15360
15361    Returns the function defined.  */
15362
15363 static tree
15364 cp_parser_function_definition_after_declarator (cp_parser* parser,
15365                                                 bool inline_p)
15366 {
15367   tree fn;
15368   bool ctor_initializer_p = false;
15369   bool saved_in_unbraced_linkage_specification_p;
15370   unsigned saved_num_template_parameter_lists;
15371
15372   /* If the next token is `return', then the code may be trying to
15373      make use of the "named return value" extension that G++ used to
15374      support.  */
15375   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
15376     {
15377       /* Consume the `return' keyword.  */
15378       cp_lexer_consume_token (parser->lexer);
15379       /* Look for the identifier that indicates what value is to be
15380          returned.  */
15381       cp_parser_identifier (parser);
15382       /* Issue an error message.  */
15383       error ("named return values are no longer supported");
15384       /* Skip tokens until we reach the start of the function body.  */
15385       while (true)
15386         {
15387           cp_token *token = cp_lexer_peek_token (parser->lexer);
15388           if (token->type == CPP_OPEN_BRACE
15389               || token->type == CPP_EOF
15390               || token->type == CPP_PRAGMA_EOL)
15391             break;
15392           cp_lexer_consume_token (parser->lexer);
15393         }
15394     }
15395   /* The `extern' in `extern "C" void f () { ... }' does not apply to
15396      anything declared inside `f'.  */
15397   saved_in_unbraced_linkage_specification_p
15398     = parser->in_unbraced_linkage_specification_p;
15399   parser->in_unbraced_linkage_specification_p = false;
15400   /* Inside the function, surrounding template-parameter-lists do not
15401      apply.  */
15402   saved_num_template_parameter_lists
15403     = parser->num_template_parameter_lists;
15404   parser->num_template_parameter_lists = 0;
15405   /* If the next token is `try', then we are looking at a
15406      function-try-block.  */
15407   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
15408     ctor_initializer_p = cp_parser_function_try_block (parser);
15409   /* A function-try-block includes the function-body, so we only do
15410      this next part if we're not processing a function-try-block.  */
15411   else
15412     ctor_initializer_p
15413       = cp_parser_ctor_initializer_opt_and_function_body (parser);
15414
15415   /* Finish the function.  */
15416   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
15417                         (inline_p ? 2 : 0));
15418   /* Generate code for it, if necessary.  */
15419   expand_or_defer_fn (fn);
15420   /* Restore the saved values.  */
15421   parser->in_unbraced_linkage_specification_p
15422     = saved_in_unbraced_linkage_specification_p;
15423   parser->num_template_parameter_lists
15424     = saved_num_template_parameter_lists;
15425
15426   return fn;
15427 }
15428
15429 /* Parse a template-declaration, assuming that the `export' (and
15430    `extern') keywords, if present, has already been scanned.  MEMBER_P
15431    is as for cp_parser_template_declaration.  */
15432
15433 static void
15434 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
15435 {
15436   tree decl = NULL_TREE;
15437   tree checks;
15438   tree parameter_list;
15439   bool friend_p = false;
15440   bool need_lang_pop;
15441
15442   /* Look for the `template' keyword.  */
15443   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"))
15444     return;
15445
15446   /* And the `<'.  */
15447   if (!cp_parser_require (parser, CPP_LESS, "`<'"))
15448     return;
15449   /* [temp]
15450    
15451      A template ... shall not have C linkage.  */
15452   if (current_lang_name == lang_name_c)
15453     {
15454       error ("template with C linkage");
15455       /* Give it C++ linkage to avoid confusing other parts of the
15456          front end.  */
15457       push_lang_context (lang_name_cplusplus);
15458       need_lang_pop = true;
15459     }
15460   else
15461     need_lang_pop = false;
15462
15463   /* We cannot perform access checks on the template parameter
15464      declarations until we know what is being declared, just as we
15465      cannot check the decl-specifier list.  */
15466   push_deferring_access_checks (dk_deferred);
15467
15468   /* If the next token is `>', then we have an invalid
15469      specialization.  Rather than complain about an invalid template
15470      parameter, issue an error message here.  */
15471   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
15472     {
15473       cp_parser_error (parser, "invalid explicit specialization");
15474       begin_specialization ();
15475       parameter_list = NULL_TREE;
15476     }
15477   else
15478     /* Parse the template parameters.  */
15479     parameter_list = cp_parser_template_parameter_list (parser);
15480
15481   /* Get the deferred access checks from the parameter list.  These
15482      will be checked once we know what is being declared, as for a
15483      member template the checks must be performed in the scope of the
15484      class containing the member.  */
15485   checks = get_deferred_access_checks ();
15486
15487   /* Look for the `>'.  */
15488   cp_parser_skip_until_found (parser, CPP_GREATER, "`>'");
15489   /* We just processed one more parameter list.  */
15490   ++parser->num_template_parameter_lists;
15491   /* If the next token is `template', there are more template
15492      parameters.  */
15493   if (cp_lexer_next_token_is_keyword (parser->lexer,
15494                                       RID_TEMPLATE))
15495     cp_parser_template_declaration_after_export (parser, member_p);
15496   else
15497     {
15498       /* There are no access checks when parsing a template, as we do not
15499          know if a specialization will be a friend.  */
15500       push_deferring_access_checks (dk_no_check);
15501       decl = cp_parser_single_declaration (parser,
15502                                            checks,
15503                                            member_p,
15504                                            &friend_p);
15505       pop_deferring_access_checks ();
15506
15507       /* If this is a member template declaration, let the front
15508          end know.  */
15509       if (member_p && !friend_p && decl)
15510         {
15511           if (TREE_CODE (decl) == TYPE_DECL)
15512             cp_parser_check_access_in_redeclaration (decl);
15513
15514           decl = finish_member_template_decl (decl);
15515         }
15516       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
15517         make_friend_class (current_class_type, TREE_TYPE (decl),
15518                            /*complain=*/true);
15519     }
15520   /* We are done with the current parameter list.  */
15521   --parser->num_template_parameter_lists;
15522
15523   pop_deferring_access_checks ();
15524
15525   /* Finish up.  */
15526   finish_template_decl (parameter_list);
15527
15528   /* Register member declarations.  */
15529   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
15530     finish_member_declaration (decl);
15531   /* For the erroneous case of a template with C linkage, we pushed an
15532      implicit C++ linkage scope; exit that scope now.  */
15533   if (need_lang_pop)
15534     pop_lang_context ();
15535   /* If DECL is a function template, we must return to parse it later.
15536      (Even though there is no definition, there might be default
15537      arguments that need handling.)  */
15538   if (member_p && decl
15539       && (TREE_CODE (decl) == FUNCTION_DECL
15540           || DECL_FUNCTION_TEMPLATE_P (decl)))
15541     TREE_VALUE (parser->unparsed_functions_queues)
15542       = tree_cons (NULL_TREE, decl,
15543                    TREE_VALUE (parser->unparsed_functions_queues));
15544 }
15545
15546 /* Perform the deferred access checks from a template-parameter-list.
15547    CHECKS is a TREE_LIST of access checks, as returned by
15548    get_deferred_access_checks.  */
15549
15550 static void
15551 cp_parser_perform_template_parameter_access_checks (tree checks)
15552 {
15553   ++processing_template_parmlist;
15554   perform_access_checks (checks);
15555   --processing_template_parmlist;
15556 }
15557
15558 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
15559    `function-definition' sequence.  MEMBER_P is true, this declaration
15560    appears in a class scope.
15561
15562    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
15563    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
15564
15565 static tree
15566 cp_parser_single_declaration (cp_parser* parser,
15567                               tree checks,
15568                               bool member_p,
15569                               bool* friend_p)
15570 {
15571   int declares_class_or_enum;
15572   tree decl = NULL_TREE;
15573   cp_decl_specifier_seq decl_specifiers;
15574   bool function_definition_p = false;
15575
15576   /* This function is only used when processing a template
15577      declaration.  */
15578   gcc_assert (innermost_scope_kind () == sk_template_parms
15579               || innermost_scope_kind () == sk_template_spec);
15580
15581   /* Defer access checks until we know what is being declared.  */
15582   push_deferring_access_checks (dk_deferred);
15583
15584   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
15585      alternative.  */
15586   cp_parser_decl_specifier_seq (parser,
15587                                 CP_PARSER_FLAGS_OPTIONAL,
15588                                 &decl_specifiers,
15589                                 &declares_class_or_enum);
15590   if (friend_p)
15591     *friend_p = cp_parser_friend_p (&decl_specifiers);
15592
15593   /* There are no template typedefs.  */
15594   if (decl_specifiers.specs[(int) ds_typedef])
15595     {
15596       error ("template declaration of %qs", "typedef");
15597       decl = error_mark_node;
15598     }
15599
15600   /* Gather up the access checks that occurred the
15601      decl-specifier-seq.  */
15602   stop_deferring_access_checks ();
15603
15604   /* Check for the declaration of a template class.  */
15605   if (declares_class_or_enum)
15606     {
15607       if (cp_parser_declares_only_class_p (parser))
15608         {
15609           decl = shadow_tag (&decl_specifiers);
15610
15611           /* In this case:
15612
15613                struct C {
15614                  friend template <typename T> struct A<T>::B;
15615                };
15616
15617              A<T>::B will be represented by a TYPENAME_TYPE, and
15618              therefore not recognized by shadow_tag.  */
15619           if (friend_p && *friend_p
15620               && !decl
15621               && decl_specifiers.type
15622               && TYPE_P (decl_specifiers.type))
15623             decl = decl_specifiers.type;
15624
15625           if (decl && decl != error_mark_node)
15626             decl = TYPE_NAME (decl);
15627           else
15628             decl = error_mark_node;
15629
15630           /* Perform access checks for template parameters.  */
15631           cp_parser_perform_template_parameter_access_checks (checks);
15632         }
15633     }
15634   /* If it's not a template class, try for a template function.  If
15635      the next token is a `;', then this declaration does not declare
15636      anything.  But, if there were errors in the decl-specifiers, then
15637      the error might well have come from an attempted class-specifier.
15638      In that case, there's no need to warn about a missing declarator.  */
15639   if (!decl
15640       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
15641           || decl_specifiers.type != error_mark_node))
15642     decl = cp_parser_init_declarator (parser,
15643                                       &decl_specifiers,
15644                                       checks,
15645                                       /*function_definition_allowed_p=*/true,
15646                                       member_p,
15647                                       declares_class_or_enum,
15648                                       &function_definition_p);
15649
15650   pop_deferring_access_checks ();
15651
15652   /* Clear any current qualification; whatever comes next is the start
15653      of something new.  */
15654   parser->scope = NULL_TREE;
15655   parser->qualifying_scope = NULL_TREE;
15656   parser->object_scope = NULL_TREE;
15657   /* Look for a trailing `;' after the declaration.  */
15658   if (!function_definition_p
15659       && (decl == error_mark_node
15660           || !cp_parser_require (parser, CPP_SEMICOLON, "`;'")))
15661     cp_parser_skip_to_end_of_block_or_statement (parser);
15662
15663   return decl;
15664 }
15665
15666 /* Parse a cast-expression that is not the operand of a unary "&".  */
15667
15668 static tree
15669 cp_parser_simple_cast_expression (cp_parser *parser)
15670 {
15671   return cp_parser_cast_expression (parser, /*address_p=*/false,
15672                                     /*cast_p=*/false);
15673 }
15674
15675 /* Parse a functional cast to TYPE.  Returns an expression
15676    representing the cast.  */
15677
15678 static tree
15679 cp_parser_functional_cast (cp_parser* parser, tree type)
15680 {
15681   tree expression_list;
15682   tree cast;
15683
15684   expression_list
15685     = cp_parser_parenthesized_expression_list (parser, false,
15686                                                /*cast_p=*/true,
15687                                                /*non_constant_p=*/NULL);
15688
15689   cast = build_functional_cast (type, expression_list);
15690   /* [expr.const]/1: In an integral constant expression "only type
15691      conversions to integral or enumeration type can be used".  */
15692   if (TREE_CODE (type) == TYPE_DECL)
15693     type = TREE_TYPE (type);
15694   if (cast != error_mark_node && !dependent_type_p (type)
15695       && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
15696     {
15697       if (cp_parser_non_integral_constant_expression
15698           (parser, "a call to a constructor"))
15699         return error_mark_node;
15700     }
15701   return cast;
15702 }
15703
15704 /* Save the tokens that make up the body of a member function defined
15705    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
15706    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
15707    specifiers applied to the declaration.  Returns the FUNCTION_DECL
15708    for the member function.  */
15709
15710 static tree
15711 cp_parser_save_member_function_body (cp_parser* parser,
15712                                      cp_decl_specifier_seq *decl_specifiers,
15713                                      cp_declarator *declarator,
15714                                      tree attributes)
15715 {
15716   cp_token *first;
15717   cp_token *last;
15718   tree fn;
15719
15720   /* Create the function-declaration.  */
15721   fn = start_method (decl_specifiers, declarator, attributes);
15722   /* If something went badly wrong, bail out now.  */
15723   if (fn == error_mark_node)
15724     {
15725       /* If there's a function-body, skip it.  */
15726       if (cp_parser_token_starts_function_definition_p
15727           (cp_lexer_peek_token (parser->lexer)))
15728         cp_parser_skip_to_end_of_block_or_statement (parser);
15729       return error_mark_node;
15730     }
15731
15732   /* Remember it, if there default args to post process.  */
15733   cp_parser_save_default_args (parser, fn);
15734
15735   /* Save away the tokens that make up the body of the
15736      function.  */
15737   first = parser->lexer->next_token;
15738   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
15739   /* Handle function try blocks.  */
15740   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
15741     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
15742   last = parser->lexer->next_token;
15743
15744   /* Save away the inline definition; we will process it when the
15745      class is complete.  */
15746   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
15747   DECL_PENDING_INLINE_P (fn) = 1;
15748
15749   /* We need to know that this was defined in the class, so that
15750      friend templates are handled correctly.  */
15751   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
15752
15753   /* We're done with the inline definition.  */
15754   finish_method (fn);
15755
15756   /* Add FN to the queue of functions to be parsed later.  */
15757   TREE_VALUE (parser->unparsed_functions_queues)
15758     = tree_cons (NULL_TREE, fn,
15759                  TREE_VALUE (parser->unparsed_functions_queues));
15760
15761   return fn;
15762 }
15763
15764 /* Parse a template-argument-list, as well as the trailing ">" (but
15765    not the opening ">").  See cp_parser_template_argument_list for the
15766    return value.  */
15767
15768 static tree
15769 cp_parser_enclosed_template_argument_list (cp_parser* parser)
15770 {
15771   tree arguments;
15772   tree saved_scope;
15773   tree saved_qualifying_scope;
15774   tree saved_object_scope;
15775   bool saved_greater_than_is_operator_p;
15776   bool saved_skip_evaluation;
15777
15778   /* [temp.names]
15779
15780      When parsing a template-id, the first non-nested `>' is taken as
15781      the end of the template-argument-list rather than a greater-than
15782      operator.  */
15783   saved_greater_than_is_operator_p
15784     = parser->greater_than_is_operator_p;
15785   parser->greater_than_is_operator_p = false;
15786   /* Parsing the argument list may modify SCOPE, so we save it
15787      here.  */
15788   saved_scope = parser->scope;
15789   saved_qualifying_scope = parser->qualifying_scope;
15790   saved_object_scope = parser->object_scope;
15791   /* We need to evaluate the template arguments, even though this
15792      template-id may be nested within a "sizeof".  */
15793   saved_skip_evaluation = skip_evaluation;
15794   skip_evaluation = false;
15795   /* Parse the template-argument-list itself.  */
15796   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
15797     arguments = NULL_TREE;
15798   else
15799     arguments = cp_parser_template_argument_list (parser);
15800   /* Look for the `>' that ends the template-argument-list. If we find
15801      a '>>' instead, it's probably just a typo.  */
15802   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
15803     {
15804       if (!saved_greater_than_is_operator_p)
15805         {
15806           /* If we're in a nested template argument list, the '>>' has
15807             to be a typo for '> >'. We emit the error message, but we
15808             continue parsing and we push a '>' as next token, so that
15809             the argument list will be parsed correctly.  Note that the
15810             global source location is still on the token before the
15811             '>>', so we need to say explicitly where we want it.  */
15812           cp_token *token = cp_lexer_peek_token (parser->lexer);
15813           error ("%H%<>>%> should be %<> >%> "
15814                  "within a nested template argument list",
15815                  &token->location);
15816
15817           /* ??? Proper recovery should terminate two levels of
15818              template argument list here.  */
15819           token->type = CPP_GREATER;
15820         }
15821       else
15822         {
15823           /* If this is not a nested template argument list, the '>>'
15824             is a typo for '>'. Emit an error message and continue.
15825             Same deal about the token location, but here we can get it
15826             right by consuming the '>>' before issuing the diagnostic.  */
15827           cp_lexer_consume_token (parser->lexer);
15828           error ("spurious %<>>%>, use %<>%> to terminate "
15829                  "a template argument list");
15830         }
15831     }
15832   else
15833     cp_parser_skip_until_found (parser, CPP_GREATER, "`>'");
15834   /* The `>' token might be a greater-than operator again now.  */
15835   parser->greater_than_is_operator_p
15836     = saved_greater_than_is_operator_p;
15837   /* Restore the SAVED_SCOPE.  */
15838   parser->scope = saved_scope;
15839   parser->qualifying_scope = saved_qualifying_scope;
15840   parser->object_scope = saved_object_scope;
15841   skip_evaluation = saved_skip_evaluation;
15842
15843   return arguments;
15844 }
15845
15846 /* MEMBER_FUNCTION is a member function, or a friend.  If default
15847    arguments, or the body of the function have not yet been parsed,
15848    parse them now.  */
15849
15850 static void
15851 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
15852 {
15853   /* If this member is a template, get the underlying
15854      FUNCTION_DECL.  */
15855   if (DECL_FUNCTION_TEMPLATE_P (member_function))
15856     member_function = DECL_TEMPLATE_RESULT (member_function);
15857
15858   /* There should not be any class definitions in progress at this
15859      point; the bodies of members are only parsed outside of all class
15860      definitions.  */
15861   gcc_assert (parser->num_classes_being_defined == 0);
15862   /* While we're parsing the member functions we might encounter more
15863      classes.  We want to handle them right away, but we don't want
15864      them getting mixed up with functions that are currently in the
15865      queue.  */
15866   parser->unparsed_functions_queues
15867     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
15868
15869   /* Make sure that any template parameters are in scope.  */
15870   maybe_begin_member_template_processing (member_function);
15871
15872   /* If the body of the function has not yet been parsed, parse it
15873      now.  */
15874   if (DECL_PENDING_INLINE_P (member_function))
15875     {
15876       tree function_scope;
15877       cp_token_cache *tokens;
15878
15879       /* The function is no longer pending; we are processing it.  */
15880       tokens = DECL_PENDING_INLINE_INFO (member_function);
15881       DECL_PENDING_INLINE_INFO (member_function) = NULL;
15882       DECL_PENDING_INLINE_P (member_function) = 0;
15883
15884       /* If this is a local class, enter the scope of the containing
15885          function.  */
15886       function_scope = current_function_decl;
15887       if (function_scope)
15888         push_function_context_to (function_scope);
15889
15890
15891       /* Push the body of the function onto the lexer stack.  */
15892       cp_parser_push_lexer_for_tokens (parser, tokens);
15893
15894       /* Let the front end know that we going to be defining this
15895          function.  */
15896       start_preparsed_function (member_function, NULL_TREE,
15897                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
15898
15899       /* Don't do access checking if it is a templated function.  */
15900       if (processing_template_decl)
15901         push_deferring_access_checks (dk_no_check);
15902
15903       /* Now, parse the body of the function.  */
15904       cp_parser_function_definition_after_declarator (parser,
15905                                                       /*inline_p=*/true);
15906
15907       if (processing_template_decl)
15908         pop_deferring_access_checks ();
15909
15910       /* Leave the scope of the containing function.  */
15911       if (function_scope)
15912         pop_function_context_from (function_scope);
15913       cp_parser_pop_lexer (parser);
15914     }
15915
15916   /* Remove any template parameters from the symbol table.  */
15917   maybe_end_member_template_processing ();
15918
15919   /* Restore the queue.  */
15920   parser->unparsed_functions_queues
15921     = TREE_CHAIN (parser->unparsed_functions_queues);
15922 }
15923
15924 /* If DECL contains any default args, remember it on the unparsed
15925    functions queue.  */
15926
15927 static void
15928 cp_parser_save_default_args (cp_parser* parser, tree decl)
15929 {
15930   tree probe;
15931
15932   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
15933        probe;
15934        probe = TREE_CHAIN (probe))
15935     if (TREE_PURPOSE (probe))
15936       {
15937         TREE_PURPOSE (parser->unparsed_functions_queues)
15938           = tree_cons (current_class_type, decl,
15939                        TREE_PURPOSE (parser->unparsed_functions_queues));
15940         break;
15941       }
15942 }
15943
15944 /* FN is a FUNCTION_DECL which may contains a parameter with an
15945    unparsed DEFAULT_ARG.  Parse the default args now.  This function
15946    assumes that the current scope is the scope in which the default
15947    argument should be processed.  */
15948
15949 static void
15950 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
15951 {
15952   bool saved_local_variables_forbidden_p;
15953   tree parm;
15954
15955   /* While we're parsing the default args, we might (due to the
15956      statement expression extension) encounter more classes.  We want
15957      to handle them right away, but we don't want them getting mixed
15958      up with default args that are currently in the queue.  */
15959   parser->unparsed_functions_queues
15960     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
15961
15962   /* Local variable names (and the `this' keyword) may not appear
15963      in a default argument.  */
15964   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
15965   parser->local_variables_forbidden_p = true;
15966
15967   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
15968        parm;
15969        parm = TREE_CHAIN (parm))
15970     {
15971       cp_token_cache *tokens;
15972       tree default_arg = TREE_PURPOSE (parm);
15973       tree parsed_arg;
15974       VEC(tree,gc) *insts;
15975       tree copy;
15976       unsigned ix;
15977
15978       if (!default_arg)
15979         continue;
15980
15981       if (TREE_CODE (default_arg) != DEFAULT_ARG)
15982         /* This can happen for a friend declaration for a function
15983            already declared with default arguments.  */
15984         continue;
15985
15986        /* Push the saved tokens for the default argument onto the parser's
15987           lexer stack.  */
15988       tokens = DEFARG_TOKENS (default_arg);
15989       cp_parser_push_lexer_for_tokens (parser, tokens);
15990
15991       /* Parse the assignment-expression.  */
15992       parsed_arg = cp_parser_assignment_expression (parser, /*cast_p=*/false);
15993
15994       if (!processing_template_decl)
15995         parsed_arg = check_default_argument (TREE_VALUE (parm), parsed_arg);
15996       
15997       TREE_PURPOSE (parm) = parsed_arg;
15998
15999       /* Update any instantiations we've already created.  */
16000       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
16001            VEC_iterate (tree, insts, ix, copy); ix++)
16002         TREE_PURPOSE (copy) = parsed_arg;
16003
16004       /* If the token stream has not been completely used up, then
16005          there was extra junk after the end of the default
16006          argument.  */
16007       if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
16008         cp_parser_error (parser, "expected %<,%>");
16009
16010       /* Revert to the main lexer.  */
16011       cp_parser_pop_lexer (parser);
16012     }
16013
16014   /* Make sure no default arg is missing.  */
16015   check_default_args (fn);
16016
16017   /* Restore the state of local_variables_forbidden_p.  */
16018   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
16019
16020   /* Restore the queue.  */
16021   parser->unparsed_functions_queues
16022     = TREE_CHAIN (parser->unparsed_functions_queues);
16023 }
16024
16025 /* Parse the operand of `sizeof' (or a similar operator).  Returns
16026    either a TYPE or an expression, depending on the form of the
16027    input.  The KEYWORD indicates which kind of expression we have
16028    encountered.  */
16029
16030 static tree
16031 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
16032 {
16033   static const char *format;
16034   tree expr = NULL_TREE;
16035   const char *saved_message;
16036   bool saved_integral_constant_expression_p;
16037   bool saved_non_integral_constant_expression_p;
16038
16039   /* Initialize FORMAT the first time we get here.  */
16040   if (!format)
16041     format = "types may not be defined in '%s' expressions";
16042
16043   /* Types cannot be defined in a `sizeof' expression.  Save away the
16044      old message.  */
16045   saved_message = parser->type_definition_forbidden_message;
16046   /* And create the new one.  */
16047   parser->type_definition_forbidden_message
16048     = XNEWVEC (const char, strlen (format)
16049                + strlen (IDENTIFIER_POINTER (ridpointers[keyword]))
16050                + 1 /* `\0' */);
16051   sprintf ((char *) parser->type_definition_forbidden_message,
16052            format, IDENTIFIER_POINTER (ridpointers[keyword]));
16053
16054   /* The restrictions on constant-expressions do not apply inside
16055      sizeof expressions.  */
16056   saved_integral_constant_expression_p
16057     = parser->integral_constant_expression_p;
16058   saved_non_integral_constant_expression_p
16059     = parser->non_integral_constant_expression_p;
16060   parser->integral_constant_expression_p = false;
16061
16062   /* Do not actually evaluate the expression.  */
16063   ++skip_evaluation;
16064   /* If it's a `(', then we might be looking at the type-id
16065      construction.  */
16066   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
16067     {
16068       tree type;
16069       bool saved_in_type_id_in_expr_p;
16070
16071       /* We can't be sure yet whether we're looking at a type-id or an
16072          expression.  */
16073       cp_parser_parse_tentatively (parser);
16074       /* Consume the `('.  */
16075       cp_lexer_consume_token (parser->lexer);
16076       /* Parse the type-id.  */
16077       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
16078       parser->in_type_id_in_expr_p = true;
16079       type = cp_parser_type_id (parser);
16080       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
16081       /* Now, look for the trailing `)'.  */
16082       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16083       /* If all went well, then we're done.  */
16084       if (cp_parser_parse_definitely (parser))
16085         {
16086           cp_decl_specifier_seq decl_specs;
16087
16088           /* Build a trivial decl-specifier-seq.  */
16089           clear_decl_specs (&decl_specs);
16090           decl_specs.type = type;
16091
16092           /* Call grokdeclarator to figure out what type this is.  */
16093           expr = grokdeclarator (NULL,
16094                                  &decl_specs,
16095                                  TYPENAME,
16096                                  /*initialized=*/0,
16097                                  /*attrlist=*/NULL);
16098         }
16099     }
16100
16101   /* If the type-id production did not work out, then we must be
16102      looking at the unary-expression production.  */
16103   if (!expr)
16104     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
16105                                        /*cast_p=*/false);
16106   /* Go back to evaluating expressions.  */
16107   --skip_evaluation;
16108
16109   /* Free the message we created.  */
16110   free ((char *) parser->type_definition_forbidden_message);
16111   /* And restore the old one.  */
16112   parser->type_definition_forbidden_message = saved_message;
16113   parser->integral_constant_expression_p
16114     = saved_integral_constant_expression_p;
16115   parser->non_integral_constant_expression_p
16116     = saved_non_integral_constant_expression_p;
16117
16118   return expr;
16119 }
16120
16121 /* If the current declaration has no declarator, return true.  */
16122
16123 static bool
16124 cp_parser_declares_only_class_p (cp_parser *parser)
16125 {
16126   /* If the next token is a `;' or a `,' then there is no
16127      declarator.  */
16128   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
16129           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
16130 }
16131
16132 /* Update the DECL_SPECS to reflect the storage class indicated by
16133    KEYWORD.  */
16134
16135 static void
16136 cp_parser_set_storage_class (cp_parser *parser,
16137                              cp_decl_specifier_seq *decl_specs,
16138                              enum rid keyword)
16139 {
16140   cp_storage_class storage_class;
16141
16142   if (parser->in_unbraced_linkage_specification_p)
16143     {
16144       error ("invalid use of %qD in linkage specification",
16145              ridpointers[keyword]);
16146       return;
16147     }
16148   else if (decl_specs->storage_class != sc_none)
16149     {
16150       decl_specs->multiple_storage_classes_p = true;
16151       return;
16152     }
16153
16154   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
16155       && decl_specs->specs[(int) ds_thread])
16156     {
16157       error ("%<__thread%> before %qD", ridpointers[keyword]);
16158       decl_specs->specs[(int) ds_thread] = 0;
16159     }
16160
16161   switch (keyword) 
16162     {
16163     case RID_AUTO:
16164       storage_class = sc_auto;
16165       break;
16166     case RID_REGISTER:
16167       storage_class = sc_register;
16168       break;
16169     case RID_STATIC:
16170       storage_class = sc_static;
16171       break;
16172     case RID_EXTERN:
16173       storage_class = sc_extern;
16174       break;
16175     case RID_MUTABLE:
16176       storage_class = sc_mutable;
16177       break;
16178     default:
16179       gcc_unreachable ();
16180     }
16181   decl_specs->storage_class = storage_class;
16182 }
16183
16184 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
16185    is true, the type is a user-defined type; otherwise it is a
16186    built-in type specified by a keyword.  */
16187
16188 static void
16189 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
16190                               tree type_spec,
16191                               bool user_defined_p)
16192 {
16193   decl_specs->any_specifiers_p = true;
16194
16195   /* If the user tries to redeclare bool or wchar_t (with, for
16196      example, in "typedef int wchar_t;") we remember that this is what
16197      happened.  In system headers, we ignore these declarations so
16198      that G++ can work with system headers that are not C++-safe.  */
16199   if (decl_specs->specs[(int) ds_typedef]
16200       && !user_defined_p
16201       && (type_spec == boolean_type_node
16202           || type_spec == wchar_type_node)
16203       && (decl_specs->type
16204           || decl_specs->specs[(int) ds_long]
16205           || decl_specs->specs[(int) ds_short]
16206           || decl_specs->specs[(int) ds_unsigned]
16207           || decl_specs->specs[(int) ds_signed]))
16208     {
16209       decl_specs->redefined_builtin_type = type_spec;
16210       if (!decl_specs->type)
16211         {
16212           decl_specs->type = type_spec;
16213           decl_specs->user_defined_type_p = false;
16214         }
16215     }
16216   else if (decl_specs->type)
16217     decl_specs->multiple_types_p = true;
16218   else
16219     {
16220       decl_specs->type = type_spec;
16221       decl_specs->user_defined_type_p = user_defined_p;
16222       decl_specs->redefined_builtin_type = NULL_TREE;
16223     }
16224 }
16225
16226 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
16227    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
16228
16229 static bool
16230 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
16231 {
16232   return decl_specifiers->specs[(int) ds_friend] != 0;
16233 }
16234
16235 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
16236    issue an error message indicating that TOKEN_DESC was expected.
16237
16238    Returns the token consumed, if the token had the appropriate type.
16239    Otherwise, returns NULL.  */
16240
16241 static cp_token *
16242 cp_parser_require (cp_parser* parser,
16243                    enum cpp_ttype type,
16244                    const char* token_desc)
16245 {
16246   if (cp_lexer_next_token_is (parser->lexer, type))
16247     return cp_lexer_consume_token (parser->lexer);
16248   else
16249     {
16250       /* Output the MESSAGE -- unless we're parsing tentatively.  */
16251       if (!cp_parser_simulate_error (parser))
16252         {
16253           char *message = concat ("expected ", token_desc, NULL);
16254           cp_parser_error (parser, message);
16255           free (message);
16256         }
16257       return NULL;
16258     }
16259 }
16260
16261 /* Like cp_parser_require, except that tokens will be skipped until
16262    the desired token is found.  An error message is still produced if
16263    the next token is not as expected.  */
16264
16265 static void
16266 cp_parser_skip_until_found (cp_parser* parser,
16267                             enum cpp_ttype type,
16268                             const char* token_desc)
16269 {
16270   cp_token *token;
16271   unsigned nesting_depth = 0;
16272
16273   if (cp_parser_require (parser, type, token_desc))
16274     return;
16275
16276   /* Skip tokens until the desired token is found.  */
16277   while (true)
16278     {
16279       /* Peek at the next token.  */
16280       token = cp_lexer_peek_token (parser->lexer);
16281
16282       /* If we've reached the token we want, consume it and stop.  */
16283       if (token->type == type && !nesting_depth)
16284         {
16285           cp_lexer_consume_token (parser->lexer);
16286           return;
16287         }
16288
16289       switch (token->type)
16290         {
16291         case CPP_EOF:
16292         case CPP_PRAGMA_EOL:
16293           /* If we've run out of tokens, stop.  */
16294           return;
16295
16296         case CPP_OPEN_BRACE:
16297         case CPP_OPEN_PAREN:
16298         case CPP_OPEN_SQUARE:
16299           ++nesting_depth;
16300           break;
16301
16302         case CPP_CLOSE_BRACE:
16303         case CPP_CLOSE_PAREN:
16304         case CPP_CLOSE_SQUARE:
16305           if (nesting_depth-- == 0)
16306             return;
16307           break;
16308
16309         default:
16310           break;
16311         }
16312
16313       /* Consume this token.  */
16314       cp_lexer_consume_token (parser->lexer);
16315     }
16316 }
16317
16318 /* If the next token is the indicated keyword, consume it.  Otherwise,
16319    issue an error message indicating that TOKEN_DESC was expected.
16320
16321    Returns the token consumed, if the token had the appropriate type.
16322    Otherwise, returns NULL.  */
16323
16324 static cp_token *
16325 cp_parser_require_keyword (cp_parser* parser,
16326                            enum rid keyword,
16327                            const char* token_desc)
16328 {
16329   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
16330
16331   if (token && token->keyword != keyword)
16332     {
16333       dyn_string_t error_msg;
16334
16335       /* Format the error message.  */
16336       error_msg = dyn_string_new (0);
16337       dyn_string_append_cstr (error_msg, "expected ");
16338       dyn_string_append_cstr (error_msg, token_desc);
16339       cp_parser_error (parser, error_msg->s);
16340       dyn_string_delete (error_msg);
16341       return NULL;
16342     }
16343
16344   return token;
16345 }
16346
16347 /* Returns TRUE iff TOKEN is a token that can begin the body of a
16348    function-definition.  */
16349
16350 static bool
16351 cp_parser_token_starts_function_definition_p (cp_token* token)
16352 {
16353   return (/* An ordinary function-body begins with an `{'.  */
16354           token->type == CPP_OPEN_BRACE
16355           /* A ctor-initializer begins with a `:'.  */
16356           || token->type == CPP_COLON
16357           /* A function-try-block begins with `try'.  */
16358           || token->keyword == RID_TRY
16359           /* The named return value extension begins with `return'.  */
16360           || token->keyword == RID_RETURN);
16361 }
16362
16363 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
16364    definition.  */
16365
16366 static bool
16367 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
16368 {
16369   cp_token *token;
16370
16371   token = cp_lexer_peek_token (parser->lexer);
16372   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
16373 }
16374
16375 /* Returns TRUE iff the next token is the "," or ">" ending a
16376    template-argument.  */
16377
16378 static bool
16379 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
16380 {
16381   cp_token *token;
16382
16383   token = cp_lexer_peek_token (parser->lexer);
16384   return (token->type == CPP_COMMA || token->type == CPP_GREATER);
16385 }
16386
16387 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
16388    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
16389
16390 static bool
16391 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
16392                                                      size_t n)
16393 {
16394   cp_token *token;
16395
16396   token = cp_lexer_peek_nth_token (parser->lexer, n);
16397   if (token->type == CPP_LESS)
16398     return true;
16399   /* Check for the sequence `<::' in the original code. It would be lexed as
16400      `[:', where `[' is a digraph, and there is no whitespace before
16401      `:'.  */
16402   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
16403     {
16404       cp_token *token2;
16405       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
16406       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
16407         return true;
16408     }
16409   return false;
16410 }
16411
16412 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
16413    or none_type otherwise.  */
16414
16415 static enum tag_types
16416 cp_parser_token_is_class_key (cp_token* token)
16417 {
16418   switch (token->keyword)
16419     {
16420     case RID_CLASS:
16421       return class_type;
16422     case RID_STRUCT:
16423       return record_type;
16424     case RID_UNION:
16425       return union_type;
16426
16427     default:
16428       return none_type;
16429     }
16430 }
16431
16432 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
16433
16434 static void
16435 cp_parser_check_class_key (enum tag_types class_key, tree type)
16436 {
16437   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
16438     pedwarn ("%qs tag used in naming %q#T",
16439             class_key == union_type ? "union"
16440              : class_key == record_type ? "struct" : "class",
16441              type);
16442 }
16443
16444 /* Issue an error message if DECL is redeclared with different
16445    access than its original declaration [class.access.spec/3].
16446    This applies to nested classes and nested class templates.
16447    [class.mem/1].  */
16448
16449 static void
16450 cp_parser_check_access_in_redeclaration (tree decl)
16451 {
16452   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
16453     return;
16454
16455   if ((TREE_PRIVATE (decl)
16456        != (current_access_specifier == access_private_node))
16457       || (TREE_PROTECTED (decl)
16458           != (current_access_specifier == access_protected_node)))
16459     error ("%qD redeclared with different access", decl);
16460 }
16461
16462 /* Look for the `template' keyword, as a syntactic disambiguator.
16463    Return TRUE iff it is present, in which case it will be
16464    consumed.  */
16465
16466 static bool
16467 cp_parser_optional_template_keyword (cp_parser *parser)
16468 {
16469   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
16470     {
16471       /* The `template' keyword can only be used within templates;
16472          outside templates the parser can always figure out what is a
16473          template and what is not.  */
16474       if (!processing_template_decl)
16475         {
16476           error ("%<template%> (as a disambiguator) is only allowed "
16477                  "within templates");
16478           /* If this part of the token stream is rescanned, the same
16479              error message would be generated.  So, we purge the token
16480              from the stream.  */
16481           cp_lexer_purge_token (parser->lexer);
16482           return false;
16483         }
16484       else
16485         {
16486           /* Consume the `template' keyword.  */
16487           cp_lexer_consume_token (parser->lexer);
16488           return true;
16489         }
16490     }
16491
16492   return false;
16493 }
16494
16495 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
16496    set PARSER->SCOPE, and perform other related actions.  */
16497
16498 static void
16499 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
16500 {
16501   tree value;
16502   tree check;
16503
16504   /* Get the stored value.  */
16505   value = cp_lexer_consume_token (parser->lexer)->value;
16506   /* Perform any access checks that were deferred.  */
16507   for (check = TREE_PURPOSE (value); check; check = TREE_CHAIN (check))
16508     perform_or_defer_access_check (TREE_PURPOSE (check), TREE_VALUE (check));
16509   /* Set the scope from the stored value.  */
16510   parser->scope = TREE_VALUE (value);
16511   parser->qualifying_scope = TREE_TYPE (value);
16512   parser->object_scope = NULL_TREE;
16513 }
16514
16515 /* Consume tokens up through a non-nested END token.  */
16516
16517 static void
16518 cp_parser_cache_group (cp_parser *parser,
16519                        enum cpp_ttype end,
16520                        unsigned depth)
16521 {
16522   while (true)
16523     {
16524       cp_token *token;
16525
16526       /* Abort a parenthesized expression if we encounter a brace.  */
16527       if ((end == CPP_CLOSE_PAREN || depth == 0)
16528           && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
16529         return;
16530       /* If we've reached the end of the file, stop.  */
16531       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF)
16532           || (end != CPP_PRAGMA_EOL
16533               && cp_lexer_next_token_is (parser->lexer, CPP_PRAGMA_EOL)))
16534         return;
16535       /* Consume the next token.  */
16536       token = cp_lexer_consume_token (parser->lexer);
16537       /* See if it starts a new group.  */
16538       if (token->type == CPP_OPEN_BRACE)
16539         {
16540           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
16541           if (depth == 0)
16542             return;
16543         }
16544       else if (token->type == CPP_OPEN_PAREN)
16545         cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
16546       else if (token->type == CPP_PRAGMA)
16547         cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
16548       else if (token->type == end)
16549         return;
16550     }
16551 }
16552
16553 /* Begin parsing tentatively.  We always save tokens while parsing
16554    tentatively so that if the tentative parsing fails we can restore the
16555    tokens.  */
16556
16557 static void
16558 cp_parser_parse_tentatively (cp_parser* parser)
16559 {
16560   /* Enter a new parsing context.  */
16561   parser->context = cp_parser_context_new (parser->context);
16562   /* Begin saving tokens.  */
16563   cp_lexer_save_tokens (parser->lexer);
16564   /* In order to avoid repetitive access control error messages,
16565      access checks are queued up until we are no longer parsing
16566      tentatively.  */
16567   push_deferring_access_checks (dk_deferred);
16568 }
16569
16570 /* Commit to the currently active tentative parse.  */
16571
16572 static void
16573 cp_parser_commit_to_tentative_parse (cp_parser* parser)
16574 {
16575   cp_parser_context *context;
16576   cp_lexer *lexer;
16577
16578   /* Mark all of the levels as committed.  */
16579   lexer = parser->lexer;
16580   for (context = parser->context; context->next; context = context->next)
16581     {
16582       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
16583         break;
16584       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
16585       while (!cp_lexer_saving_tokens (lexer))
16586         lexer = lexer->next;
16587       cp_lexer_commit_tokens (lexer);
16588     }
16589 }
16590
16591 /* Abort the currently active tentative parse.  All consumed tokens
16592    will be rolled back, and no diagnostics will be issued.  */
16593
16594 static void
16595 cp_parser_abort_tentative_parse (cp_parser* parser)
16596 {
16597   cp_parser_simulate_error (parser);
16598   /* Now, pretend that we want to see if the construct was
16599      successfully parsed.  */
16600   cp_parser_parse_definitely (parser);
16601 }
16602
16603 /* Stop parsing tentatively.  If a parse error has occurred, restore the
16604    token stream.  Otherwise, commit to the tokens we have consumed.
16605    Returns true if no error occurred; false otherwise.  */
16606
16607 static bool
16608 cp_parser_parse_definitely (cp_parser* parser)
16609 {
16610   bool error_occurred;
16611   cp_parser_context *context;
16612
16613   /* Remember whether or not an error occurred, since we are about to
16614      destroy that information.  */
16615   error_occurred = cp_parser_error_occurred (parser);
16616   /* Remove the topmost context from the stack.  */
16617   context = parser->context;
16618   parser->context = context->next;
16619   /* If no parse errors occurred, commit to the tentative parse.  */
16620   if (!error_occurred)
16621     {
16622       /* Commit to the tokens read tentatively, unless that was
16623          already done.  */
16624       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
16625         cp_lexer_commit_tokens (parser->lexer);
16626
16627       pop_to_parent_deferring_access_checks ();
16628     }
16629   /* Otherwise, if errors occurred, roll back our state so that things
16630      are just as they were before we began the tentative parse.  */
16631   else
16632     {
16633       cp_lexer_rollback_tokens (parser->lexer);
16634       pop_deferring_access_checks ();
16635     }
16636   /* Add the context to the front of the free list.  */
16637   context->next = cp_parser_context_free_list;
16638   cp_parser_context_free_list = context;
16639
16640   return !error_occurred;
16641 }
16642
16643 /* Returns true if we are parsing tentatively and are not committed to
16644    this tentative parse.  */
16645
16646 static bool
16647 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
16648 {
16649   return (cp_parser_parsing_tentatively (parser)
16650           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
16651 }
16652
16653 /* Returns nonzero iff an error has occurred during the most recent
16654    tentative parse.  */
16655
16656 static bool
16657 cp_parser_error_occurred (cp_parser* parser)
16658 {
16659   return (cp_parser_parsing_tentatively (parser)
16660           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
16661 }
16662
16663 /* Returns nonzero if GNU extensions are allowed.  */
16664
16665 static bool
16666 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
16667 {
16668   return parser->allow_gnu_extensions_p;
16669 }
16670 \f
16671 /* Objective-C++ Productions */
16672
16673
16674 /* Parse an Objective-C expression, which feeds into a primary-expression
16675    above.
16676
16677    objc-expression:
16678      objc-message-expression
16679      objc-string-literal
16680      objc-encode-expression
16681      objc-protocol-expression
16682      objc-selector-expression
16683
16684   Returns a tree representation of the expression.  */
16685
16686 static tree
16687 cp_parser_objc_expression (cp_parser* parser)
16688 {
16689   /* Try to figure out what kind of declaration is present.  */
16690   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
16691
16692   switch (kwd->type)
16693     {
16694     case CPP_OPEN_SQUARE:
16695       return cp_parser_objc_message_expression (parser);
16696
16697     case CPP_OBJC_STRING:
16698       kwd = cp_lexer_consume_token (parser->lexer);
16699       return objc_build_string_object (kwd->value);
16700
16701     case CPP_KEYWORD:
16702       switch (kwd->keyword)
16703         {
16704         case RID_AT_ENCODE:
16705           return cp_parser_objc_encode_expression (parser);
16706
16707         case RID_AT_PROTOCOL:
16708           return cp_parser_objc_protocol_expression (parser);
16709
16710         case RID_AT_SELECTOR:
16711           return cp_parser_objc_selector_expression (parser);
16712
16713         default:
16714           break;
16715         }
16716     default:
16717       error ("misplaced %<@%D%> Objective-C++ construct", kwd->value);
16718       cp_parser_skip_to_end_of_block_or_statement (parser);
16719     }
16720
16721   return error_mark_node;
16722 }
16723
16724 /* Parse an Objective-C message expression.
16725
16726    objc-message-expression:
16727      [ objc-message-receiver objc-message-args ]
16728
16729    Returns a representation of an Objective-C message.  */
16730
16731 static tree
16732 cp_parser_objc_message_expression (cp_parser* parser)
16733 {
16734   tree receiver, messageargs;
16735
16736   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
16737   receiver = cp_parser_objc_message_receiver (parser);
16738   messageargs = cp_parser_objc_message_args (parser);
16739   cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
16740
16741   return objc_build_message_expr (build_tree_list (receiver, messageargs));
16742 }
16743
16744 /* Parse an objc-message-receiver.
16745
16746    objc-message-receiver:
16747      expression
16748      simple-type-specifier
16749
16750   Returns a representation of the type or expression.  */
16751
16752 static tree
16753 cp_parser_objc_message_receiver (cp_parser* parser)
16754 {
16755   tree rcv;
16756
16757   /* An Objective-C message receiver may be either (1) a type
16758      or (2) an expression.  */
16759   cp_parser_parse_tentatively (parser);
16760   rcv = cp_parser_expression (parser, false);
16761
16762   if (cp_parser_parse_definitely (parser))
16763     return rcv;
16764
16765   rcv = cp_parser_simple_type_specifier (parser,
16766                                          /*decl_specs=*/NULL,
16767                                          CP_PARSER_FLAGS_NONE);
16768
16769   return objc_get_class_reference (rcv);
16770 }
16771
16772 /* Parse the arguments and selectors comprising an Objective-C message.
16773
16774    objc-message-args:
16775      objc-selector
16776      objc-selector-args
16777      objc-selector-args , objc-comma-args
16778
16779    objc-selector-args:
16780      objc-selector [opt] : assignment-expression
16781      objc-selector-args objc-selector [opt] : assignment-expression
16782
16783    objc-comma-args:
16784      assignment-expression
16785      objc-comma-args , assignment-expression
16786
16787    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
16788    selector arguments and TREE_VALUE containing a list of comma
16789    arguments.  */
16790
16791 static tree
16792 cp_parser_objc_message_args (cp_parser* parser)
16793 {
16794   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
16795   bool maybe_unary_selector_p = true;
16796   cp_token *token = cp_lexer_peek_token (parser->lexer);
16797
16798   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
16799     {
16800       tree selector = NULL_TREE, arg;
16801
16802       if (token->type != CPP_COLON)
16803         selector = cp_parser_objc_selector (parser);
16804
16805       /* Detect if we have a unary selector.  */
16806       if (maybe_unary_selector_p
16807           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
16808         return build_tree_list (selector, NULL_TREE);
16809
16810       maybe_unary_selector_p = false;
16811       cp_parser_require (parser, CPP_COLON, "`:'");
16812       arg = cp_parser_assignment_expression (parser, false);
16813
16814       sel_args
16815         = chainon (sel_args,
16816                    build_tree_list (selector, arg));
16817
16818       token = cp_lexer_peek_token (parser->lexer);
16819     }
16820
16821   /* Handle non-selector arguments, if any. */
16822   while (token->type == CPP_COMMA)
16823     {
16824       tree arg;
16825
16826       cp_lexer_consume_token (parser->lexer);
16827       arg = cp_parser_assignment_expression (parser, false);
16828
16829       addl_args
16830         = chainon (addl_args,
16831                    build_tree_list (NULL_TREE, arg));
16832
16833       token = cp_lexer_peek_token (parser->lexer);
16834     }
16835
16836   return build_tree_list (sel_args, addl_args);
16837 }
16838
16839 /* Parse an Objective-C encode expression.
16840
16841    objc-encode-expression:
16842      @encode objc-typename
16843
16844    Returns an encoded representation of the type argument.  */
16845
16846 static tree
16847 cp_parser_objc_encode_expression (cp_parser* parser)
16848 {
16849   tree type;
16850
16851   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
16852   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
16853   type = complete_type (cp_parser_type_id (parser));
16854   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
16855
16856   if (!type)
16857     {
16858       error ("%<@encode%> must specify a type as an argument");
16859       return error_mark_node;
16860     }
16861
16862   return objc_build_encode_expr (type);
16863 }
16864
16865 /* Parse an Objective-C @defs expression.  */
16866
16867 static tree
16868 cp_parser_objc_defs_expression (cp_parser *parser)
16869 {
16870   tree name;
16871
16872   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
16873   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
16874   name = cp_parser_identifier (parser);
16875   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
16876
16877   return objc_get_class_ivars (name);
16878 }
16879
16880 /* Parse an Objective-C protocol expression.
16881
16882   objc-protocol-expression:
16883     @protocol ( identifier )
16884
16885   Returns a representation of the protocol expression.  */
16886
16887 static tree
16888 cp_parser_objc_protocol_expression (cp_parser* parser)
16889 {
16890   tree proto;
16891
16892   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
16893   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
16894   proto = cp_parser_identifier (parser);
16895   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
16896
16897   return objc_build_protocol_expr (proto);
16898 }
16899
16900 /* Parse an Objective-C selector expression.
16901
16902    objc-selector-expression:
16903      @selector ( objc-method-signature )
16904
16905    objc-method-signature:
16906      objc-selector
16907      objc-selector-seq
16908
16909    objc-selector-seq:
16910      objc-selector :
16911      objc-selector-seq objc-selector :
16912
16913   Returns a representation of the method selector.  */
16914
16915 static tree
16916 cp_parser_objc_selector_expression (cp_parser* parser)
16917 {
16918   tree sel_seq = NULL_TREE;
16919   bool maybe_unary_selector_p = true;
16920   cp_token *token;
16921
16922   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
16923   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
16924   token = cp_lexer_peek_token (parser->lexer);
16925
16926   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
16927          || token->type == CPP_SCOPE)
16928     {
16929       tree selector = NULL_TREE;
16930
16931       if (token->type != CPP_COLON
16932           || token->type == CPP_SCOPE)
16933         selector = cp_parser_objc_selector (parser);
16934
16935       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
16936           && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
16937         {
16938           /* Detect if we have a unary selector.  */
16939           if (maybe_unary_selector_p)
16940             {
16941               sel_seq = selector;
16942               goto finish_selector;
16943             }
16944           else
16945             {
16946               cp_parser_error (parser, "expected %<:%>");
16947             }
16948         }
16949       maybe_unary_selector_p = false;
16950       token = cp_lexer_consume_token (parser->lexer);
16951       
16952       if (token->type == CPP_SCOPE)
16953         {
16954           sel_seq
16955             = chainon (sel_seq,
16956                        build_tree_list (selector, NULL_TREE));
16957           sel_seq
16958             = chainon (sel_seq,
16959                        build_tree_list (NULL_TREE, NULL_TREE));
16960         }
16961       else
16962         sel_seq
16963           = chainon (sel_seq,
16964                      build_tree_list (selector, NULL_TREE));
16965
16966       token = cp_lexer_peek_token (parser->lexer);
16967     }
16968
16969  finish_selector:
16970   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
16971
16972   return objc_build_selector_expr (sel_seq);
16973 }
16974
16975 /* Parse a list of identifiers.
16976
16977    objc-identifier-list:
16978      identifier
16979      objc-identifier-list , identifier
16980
16981    Returns a TREE_LIST of identifier nodes.  */
16982
16983 static tree
16984 cp_parser_objc_identifier_list (cp_parser* parser)
16985 {
16986   tree list = build_tree_list (NULL_TREE, cp_parser_identifier (parser));
16987   cp_token *sep = cp_lexer_peek_token (parser->lexer);
16988
16989   while (sep->type == CPP_COMMA)
16990     {
16991       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
16992       list = chainon (list,
16993                       build_tree_list (NULL_TREE,
16994                                        cp_parser_identifier (parser)));
16995       sep = cp_lexer_peek_token (parser->lexer);
16996     }
16997
16998   return list;
16999 }
17000
17001 /* Parse an Objective-C alias declaration.
17002
17003    objc-alias-declaration:
17004      @compatibility_alias identifier identifier ;
17005
17006    This function registers the alias mapping with the Objective-C front-end.
17007    It returns nothing.  */
17008
17009 static void
17010 cp_parser_objc_alias_declaration (cp_parser* parser)
17011 {
17012   tree alias, orig;
17013
17014   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
17015   alias = cp_parser_identifier (parser);
17016   orig = cp_parser_identifier (parser);
17017   objc_declare_alias (alias, orig);
17018   cp_parser_consume_semicolon_at_end_of_statement (parser);
17019 }
17020
17021 /* Parse an Objective-C class forward-declaration.
17022
17023    objc-class-declaration:
17024      @class objc-identifier-list ;
17025
17026    The function registers the forward declarations with the Objective-C
17027    front-end.  It returns nothing.  */
17028
17029 static void
17030 cp_parser_objc_class_declaration (cp_parser* parser)
17031 {
17032   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
17033   objc_declare_class (cp_parser_objc_identifier_list (parser));
17034   cp_parser_consume_semicolon_at_end_of_statement (parser);
17035 }
17036
17037 /* Parse a list of Objective-C protocol references.
17038
17039    objc-protocol-refs-opt:
17040      objc-protocol-refs [opt]
17041
17042    objc-protocol-refs:
17043      < objc-identifier-list >
17044
17045    Returns a TREE_LIST of identifiers, if any.  */
17046
17047 static tree
17048 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
17049 {
17050   tree protorefs = NULL_TREE;
17051
17052   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
17053     {
17054       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
17055       protorefs = cp_parser_objc_identifier_list (parser);
17056       cp_parser_require (parser, CPP_GREATER, "`>'");
17057     }
17058
17059   return protorefs;
17060 }
17061
17062 /* Parse a Objective-C visibility specification.  */
17063
17064 static void
17065 cp_parser_objc_visibility_spec (cp_parser* parser)
17066 {
17067   cp_token *vis = cp_lexer_peek_token (parser->lexer);
17068
17069   switch (vis->keyword)
17070     {
17071     case RID_AT_PRIVATE:
17072       objc_set_visibility (2);
17073       break;
17074     case RID_AT_PROTECTED:
17075       objc_set_visibility (0);
17076       break;
17077     case RID_AT_PUBLIC:
17078       objc_set_visibility (1);
17079       break;
17080     default:
17081       return;
17082     }
17083
17084   /* Eat '@private'/'@protected'/'@public'.  */
17085   cp_lexer_consume_token (parser->lexer);
17086 }
17087
17088 /* Parse an Objective-C method type.  */
17089
17090 static void
17091 cp_parser_objc_method_type (cp_parser* parser)
17092 {
17093   objc_set_method_type
17094    (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS
17095     ? PLUS_EXPR
17096     : MINUS_EXPR);
17097 }
17098
17099 /* Parse an Objective-C protocol qualifier.  */
17100
17101 static tree
17102 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
17103 {
17104   tree quals = NULL_TREE, node;
17105   cp_token *token = cp_lexer_peek_token (parser->lexer);
17106
17107   node = token->value;
17108
17109   while (node && TREE_CODE (node) == IDENTIFIER_NODE
17110          && (node == ridpointers [(int) RID_IN]
17111              || node == ridpointers [(int) RID_OUT]
17112              || node == ridpointers [(int) RID_INOUT]
17113              || node == ridpointers [(int) RID_BYCOPY]
17114              || node == ridpointers [(int) RID_BYREF]
17115              || node == ridpointers [(int) RID_ONEWAY]))
17116     {
17117       quals = tree_cons (NULL_TREE, node, quals);
17118       cp_lexer_consume_token (parser->lexer);
17119       token = cp_lexer_peek_token (parser->lexer);
17120       node = token->value;
17121     }
17122
17123   return quals;
17124 }
17125
17126 /* Parse an Objective-C typename.  */
17127
17128 static tree
17129 cp_parser_objc_typename (cp_parser* parser)
17130 {
17131   tree typename = NULL_TREE;
17132
17133   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
17134     {
17135       tree proto_quals, cp_type = NULL_TREE;
17136
17137       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
17138       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
17139
17140       /* An ObjC type name may consist of just protocol qualifiers, in which
17141          case the type shall default to 'id'.  */
17142       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
17143         cp_type = cp_parser_type_id (parser);
17144
17145       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17146       typename = build_tree_list (proto_quals, cp_type);
17147     }
17148
17149   return typename;
17150 }
17151
17152 /* Check to see if TYPE refers to an Objective-C selector name.  */
17153
17154 static bool
17155 cp_parser_objc_selector_p (enum cpp_ttype type)
17156 {
17157   return (type == CPP_NAME || type == CPP_KEYWORD
17158           || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
17159           || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
17160           || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
17161           || type == CPP_XOR || type == CPP_XOR_EQ);
17162 }
17163
17164 /* Parse an Objective-C selector.  */
17165
17166 static tree
17167 cp_parser_objc_selector (cp_parser* parser)
17168 {
17169   cp_token *token = cp_lexer_consume_token (parser->lexer);
17170
17171   if (!cp_parser_objc_selector_p (token->type))
17172     {
17173       error ("invalid Objective-C++ selector name");
17174       return error_mark_node;
17175     }
17176
17177   /* C++ operator names are allowed to appear in ObjC selectors.  */
17178   switch (token->type)
17179     {
17180     case CPP_AND_AND: return get_identifier ("and");
17181     case CPP_AND_EQ: return get_identifier ("and_eq");
17182     case CPP_AND: return get_identifier ("bitand");
17183     case CPP_OR: return get_identifier ("bitor");
17184     case CPP_COMPL: return get_identifier ("compl");
17185     case CPP_NOT: return get_identifier ("not");
17186     case CPP_NOT_EQ: return get_identifier ("not_eq");
17187     case CPP_OR_OR: return get_identifier ("or");
17188     case CPP_OR_EQ: return get_identifier ("or_eq");
17189     case CPP_XOR: return get_identifier ("xor");
17190     case CPP_XOR_EQ: return get_identifier ("xor_eq");
17191     default: return token->value;
17192     }
17193 }
17194
17195 /* Parse an Objective-C params list.  */
17196
17197 static tree
17198 cp_parser_objc_method_keyword_params (cp_parser* parser)
17199 {
17200   tree params = NULL_TREE;
17201   bool maybe_unary_selector_p = true;
17202   cp_token *token = cp_lexer_peek_token (parser->lexer);
17203
17204   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
17205     {
17206       tree selector = NULL_TREE, typename, identifier;
17207
17208       if (token->type != CPP_COLON)
17209         selector = cp_parser_objc_selector (parser);
17210
17211       /* Detect if we have a unary selector.  */
17212       if (maybe_unary_selector_p
17213           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
17214         return selector;
17215
17216       maybe_unary_selector_p = false;
17217       cp_parser_require (parser, CPP_COLON, "`:'");
17218       typename = cp_parser_objc_typename (parser);
17219       identifier = cp_parser_identifier (parser);
17220
17221       params
17222         = chainon (params,
17223                    objc_build_keyword_decl (selector,
17224                                             typename,
17225                                             identifier));
17226
17227       token = cp_lexer_peek_token (parser->lexer);
17228     }
17229
17230   return params;
17231 }
17232
17233 /* Parse the non-keyword Objective-C params.  */
17234
17235 static tree
17236 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp)
17237 {
17238   tree params = make_node (TREE_LIST);
17239   cp_token *token = cp_lexer_peek_token (parser->lexer);
17240   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
17241
17242   while (token->type == CPP_COMMA)
17243     {
17244       cp_parameter_declarator *parmdecl;
17245       tree parm;
17246
17247       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17248       token = cp_lexer_peek_token (parser->lexer);
17249
17250       if (token->type == CPP_ELLIPSIS)
17251         {
17252           cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
17253           *ellipsisp = true;
17254           break;
17255         }
17256
17257       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
17258       parm = grokdeclarator (parmdecl->declarator,
17259                              &parmdecl->decl_specifiers,
17260                              PARM, /*initialized=*/0,
17261                              /*attrlist=*/NULL);
17262
17263       chainon (params, build_tree_list (NULL_TREE, parm));
17264       token = cp_lexer_peek_token (parser->lexer);
17265     }
17266
17267   return params;
17268 }
17269
17270 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
17271
17272 static void
17273 cp_parser_objc_interstitial_code (cp_parser* parser)
17274 {
17275   cp_token *token = cp_lexer_peek_token (parser->lexer);
17276
17277   /* If the next token is `extern' and the following token is a string
17278      literal, then we have a linkage specification.  */
17279   if (token->keyword == RID_EXTERN
17280       && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser->lexer, 2)))
17281     cp_parser_linkage_specification (parser);
17282   /* Handle #pragma, if any.  */
17283   else if (token->type == CPP_PRAGMA)
17284     cp_parser_pragma (parser, pragma_external);
17285   /* Allow stray semicolons.  */
17286   else if (token->type == CPP_SEMICOLON)
17287     cp_lexer_consume_token (parser->lexer);
17288   /* Finally, try to parse a block-declaration, or a function-definition.  */
17289   else
17290     cp_parser_block_declaration (parser, /*statement_p=*/false);
17291 }
17292
17293 /* Parse a method signature.  */
17294
17295 static tree
17296 cp_parser_objc_method_signature (cp_parser* parser)
17297 {
17298   tree rettype, kwdparms, optparms;
17299   bool ellipsis = false;
17300
17301   cp_parser_objc_method_type (parser);
17302   rettype = cp_parser_objc_typename (parser);
17303   kwdparms = cp_parser_objc_method_keyword_params (parser);
17304   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis);
17305
17306   return objc_build_method_signature (rettype, kwdparms, optparms, ellipsis);
17307 }
17308
17309 /* Pars an Objective-C method prototype list.  */
17310
17311 static void
17312 cp_parser_objc_method_prototype_list (cp_parser* parser)
17313 {
17314   cp_token *token = cp_lexer_peek_token (parser->lexer);
17315
17316   while (token->keyword != RID_AT_END)
17317     {
17318       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
17319         {
17320           objc_add_method_declaration
17321            (cp_parser_objc_method_signature (parser));
17322           cp_parser_consume_semicolon_at_end_of_statement (parser);
17323         }
17324       else
17325         /* Allow for interspersed non-ObjC++ code.  */
17326         cp_parser_objc_interstitial_code (parser);
17327
17328       token = cp_lexer_peek_token (parser->lexer);
17329     }
17330
17331   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17332   objc_finish_interface ();
17333 }
17334
17335 /* Parse an Objective-C method definition list.  */
17336
17337 static void
17338 cp_parser_objc_method_definition_list (cp_parser* parser)
17339 {
17340   cp_token *token = cp_lexer_peek_token (parser->lexer);
17341
17342   while (token->keyword != RID_AT_END)
17343     {
17344       tree meth;
17345
17346       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
17347         {
17348           push_deferring_access_checks (dk_deferred);
17349           objc_start_method_definition
17350            (cp_parser_objc_method_signature (parser));
17351
17352           /* For historical reasons, we accept an optional semicolon.  */
17353           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17354             cp_lexer_consume_token (parser->lexer);
17355
17356           perform_deferred_access_checks ();
17357           stop_deferring_access_checks ();
17358           meth = cp_parser_function_definition_after_declarator (parser,
17359                                                                  false);
17360           pop_deferring_access_checks ();
17361           objc_finish_method_definition (meth);
17362         }
17363       else
17364         /* Allow for interspersed non-ObjC++ code.  */
17365         cp_parser_objc_interstitial_code (parser);
17366
17367       token = cp_lexer_peek_token (parser->lexer);
17368     }
17369
17370   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17371   objc_finish_implementation ();
17372 }
17373
17374 /* Parse Objective-C ivars.  */
17375
17376 static void
17377 cp_parser_objc_class_ivars (cp_parser* parser)
17378 {
17379   cp_token *token = cp_lexer_peek_token (parser->lexer);
17380
17381   if (token->type != CPP_OPEN_BRACE)
17382     return;     /* No ivars specified.  */
17383
17384   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
17385   token = cp_lexer_peek_token (parser->lexer);
17386
17387   while (token->type != CPP_CLOSE_BRACE)
17388     {
17389       cp_decl_specifier_seq declspecs;
17390       int decl_class_or_enum_p;
17391       tree prefix_attributes;
17392
17393       cp_parser_objc_visibility_spec (parser);
17394
17395       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
17396         break;
17397
17398       cp_parser_decl_specifier_seq (parser,
17399                                     CP_PARSER_FLAGS_OPTIONAL,
17400                                     &declspecs,
17401                                     &decl_class_or_enum_p);
17402       prefix_attributes = declspecs.attributes;
17403       declspecs.attributes = NULL_TREE;
17404
17405       /* Keep going until we hit the `;' at the end of the
17406          declaration.  */
17407       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
17408         {
17409           tree width = NULL_TREE, attributes, first_attribute, decl;
17410           cp_declarator *declarator = NULL;
17411           int ctor_dtor_or_conv_p;
17412
17413           /* Check for a (possibly unnamed) bitfield declaration.  */
17414           token = cp_lexer_peek_token (parser->lexer);
17415           if (token->type == CPP_COLON)
17416             goto eat_colon;
17417
17418           if (token->type == CPP_NAME
17419               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
17420                   == CPP_COLON))
17421             {
17422               /* Get the name of the bitfield.  */
17423               declarator = make_id_declarator (NULL_TREE,
17424                                                cp_parser_identifier (parser),
17425                                                sfk_none);
17426
17427              eat_colon:
17428               cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
17429               /* Get the width of the bitfield.  */
17430               width
17431                 = cp_parser_constant_expression (parser,
17432                                                  /*allow_non_constant=*/false,
17433                                                  NULL);
17434             }
17435           else
17436             {
17437               /* Parse the declarator.  */
17438               declarator
17439                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
17440                                         &ctor_dtor_or_conv_p,
17441                                         /*parenthesized_p=*/NULL,
17442                                         /*member_p=*/false);
17443             }
17444
17445           /* Look for attributes that apply to the ivar.  */
17446           attributes = cp_parser_attributes_opt (parser);
17447           /* Remember which attributes are prefix attributes and
17448              which are not.  */
17449           first_attribute = attributes;
17450           /* Combine the attributes.  */
17451           attributes = chainon (prefix_attributes, attributes);
17452
17453           if (width)
17454             {
17455               /* Create the bitfield declaration.  */
17456               decl = grokbitfield (declarator, &declspecs, width);
17457               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
17458             }
17459           else
17460             decl = grokfield (declarator, &declspecs, 
17461                               NULL_TREE, /*init_const_expr_p=*/false,
17462                               NULL_TREE, attributes);
17463
17464           /* Add the instance variable.  */
17465           objc_add_instance_variable (decl);
17466
17467           /* Reset PREFIX_ATTRIBUTES.  */
17468           while (attributes && TREE_CHAIN (attributes) != first_attribute)
17469             attributes = TREE_CHAIN (attributes);
17470           if (attributes)
17471             TREE_CHAIN (attributes) = NULL_TREE;
17472
17473           token = cp_lexer_peek_token (parser->lexer);
17474
17475           if (token->type == CPP_COMMA)
17476             {
17477               cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17478               continue;
17479             }
17480           break;
17481         }
17482
17483       cp_parser_consume_semicolon_at_end_of_statement (parser);
17484       token = cp_lexer_peek_token (parser->lexer);
17485     }
17486
17487   cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
17488   /* For historical reasons, we accept an optional semicolon.  */
17489   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17490     cp_lexer_consume_token (parser->lexer);
17491 }
17492
17493 /* Parse an Objective-C protocol declaration.  */
17494
17495 static void
17496 cp_parser_objc_protocol_declaration (cp_parser* parser)
17497 {
17498   tree proto, protorefs;
17499   cp_token *tok;
17500
17501   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
17502   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
17503     {
17504       error ("identifier expected after %<@protocol%>");
17505       goto finish;
17506     }
17507
17508   /* See if we have a forward declaration or a definition.  */
17509   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
17510
17511   /* Try a forward declaration first.  */
17512   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
17513     {
17514       objc_declare_protocols (cp_parser_objc_identifier_list (parser));
17515      finish:
17516       cp_parser_consume_semicolon_at_end_of_statement (parser);
17517     }
17518
17519   /* Ok, we got a full-fledged definition (or at least should).  */
17520   else
17521     {
17522       proto = cp_parser_identifier (parser);
17523       protorefs = cp_parser_objc_protocol_refs_opt (parser);
17524       objc_start_protocol (proto, protorefs);
17525       cp_parser_objc_method_prototype_list (parser);
17526     }
17527 }
17528
17529 /* Parse an Objective-C superclass or category.  */
17530
17531 static void
17532 cp_parser_objc_superclass_or_category (cp_parser *parser, tree *super,
17533                                                           tree *categ)
17534 {
17535   cp_token *next = cp_lexer_peek_token (parser->lexer);
17536
17537   *super = *categ = NULL_TREE;
17538   if (next->type == CPP_COLON)
17539     {
17540       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
17541       *super = cp_parser_identifier (parser);
17542     }
17543   else if (next->type == CPP_OPEN_PAREN)
17544     {
17545       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
17546       *categ = cp_parser_identifier (parser);
17547       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17548     }
17549 }
17550
17551 /* Parse an Objective-C class interface.  */
17552
17553 static void
17554 cp_parser_objc_class_interface (cp_parser* parser)
17555 {
17556   tree name, super, categ, protos;
17557
17558   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
17559   name = cp_parser_identifier (parser);
17560   cp_parser_objc_superclass_or_category (parser, &super, &categ);
17561   protos = cp_parser_objc_protocol_refs_opt (parser);
17562
17563   /* We have either a class or a category on our hands.  */
17564   if (categ)
17565     objc_start_category_interface (name, categ, protos);
17566   else
17567     {
17568       objc_start_class_interface (name, super, protos);
17569       /* Handle instance variable declarations, if any.  */
17570       cp_parser_objc_class_ivars (parser);
17571       objc_continue_interface ();
17572     }
17573
17574   cp_parser_objc_method_prototype_list (parser);
17575 }
17576
17577 /* Parse an Objective-C class implementation.  */
17578
17579 static void
17580 cp_parser_objc_class_implementation (cp_parser* parser)
17581 {
17582   tree name, super, categ;
17583
17584   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
17585   name = cp_parser_identifier (parser);
17586   cp_parser_objc_superclass_or_category (parser, &super, &categ);
17587
17588   /* We have either a class or a category on our hands.  */
17589   if (categ)
17590     objc_start_category_implementation (name, categ);
17591   else
17592     {
17593       objc_start_class_implementation (name, super);
17594       /* Handle instance variable declarations, if any.  */
17595       cp_parser_objc_class_ivars (parser);
17596       objc_continue_implementation ();
17597     }
17598
17599   cp_parser_objc_method_definition_list (parser);
17600 }
17601
17602 /* Consume the @end token and finish off the implementation.  */
17603
17604 static void
17605 cp_parser_objc_end_implementation (cp_parser* parser)
17606 {
17607   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17608   objc_finish_implementation ();
17609 }
17610
17611 /* Parse an Objective-C declaration.  */
17612
17613 static void
17614 cp_parser_objc_declaration (cp_parser* parser)
17615 {
17616   /* Try to figure out what kind of declaration is present.  */
17617   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
17618
17619   switch (kwd->keyword)
17620     {
17621     case RID_AT_ALIAS:
17622       cp_parser_objc_alias_declaration (parser);
17623       break;
17624     case RID_AT_CLASS:
17625       cp_parser_objc_class_declaration (parser);
17626       break;
17627     case RID_AT_PROTOCOL:
17628       cp_parser_objc_protocol_declaration (parser);
17629       break;
17630     case RID_AT_INTERFACE:
17631       cp_parser_objc_class_interface (parser);
17632       break;
17633     case RID_AT_IMPLEMENTATION:
17634       cp_parser_objc_class_implementation (parser);
17635       break;
17636     case RID_AT_END:
17637       cp_parser_objc_end_implementation (parser);
17638       break;
17639     default:
17640       error ("misplaced %<@%D%> Objective-C++ construct", kwd->value);
17641       cp_parser_skip_to_end_of_block_or_statement (parser);
17642     }
17643 }
17644
17645 /* Parse an Objective-C try-catch-finally statement.
17646
17647    objc-try-catch-finally-stmt:
17648      @try compound-statement objc-catch-clause-seq [opt]
17649        objc-finally-clause [opt]
17650
17651    objc-catch-clause-seq:
17652      objc-catch-clause objc-catch-clause-seq [opt]
17653
17654    objc-catch-clause:
17655      @catch ( exception-declaration ) compound-statement
17656
17657    objc-finally-clause
17658      @finally compound-statement
17659
17660    Returns NULL_TREE.  */
17661
17662 static tree
17663 cp_parser_objc_try_catch_finally_statement (cp_parser *parser) {
17664   location_t location;
17665   tree stmt;
17666
17667   cp_parser_require_keyword (parser, RID_AT_TRY, "`@try'");
17668   location = cp_lexer_peek_token (parser->lexer)->location;
17669   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
17670      node, lest it get absorbed into the surrounding block.  */
17671   stmt = push_stmt_list ();
17672   cp_parser_compound_statement (parser, NULL, false);
17673   objc_begin_try_stmt (location, pop_stmt_list (stmt));
17674
17675   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
17676     {
17677       cp_parameter_declarator *parmdecl;
17678       tree parm;
17679
17680       cp_lexer_consume_token (parser->lexer);
17681       cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17682       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
17683       parm = grokdeclarator (parmdecl->declarator,
17684                              &parmdecl->decl_specifiers,
17685                              PARM, /*initialized=*/0,
17686                              /*attrlist=*/NULL);
17687       cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17688       objc_begin_catch_clause (parm);
17689       cp_parser_compound_statement (parser, NULL, false);
17690       objc_finish_catch_clause ();
17691     }
17692
17693   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
17694     {
17695       cp_lexer_consume_token (parser->lexer);
17696       location = cp_lexer_peek_token (parser->lexer)->location;
17697       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
17698          node, lest it get absorbed into the surrounding block.  */
17699       stmt = push_stmt_list ();
17700       cp_parser_compound_statement (parser, NULL, false);
17701       objc_build_finally_clause (location, pop_stmt_list (stmt));
17702     }
17703
17704   return objc_finish_try_stmt ();
17705 }
17706
17707 /* Parse an Objective-C synchronized statement.
17708
17709    objc-synchronized-stmt:
17710      @synchronized ( expression ) compound-statement
17711
17712    Returns NULL_TREE.  */
17713
17714 static tree
17715 cp_parser_objc_synchronized_statement (cp_parser *parser) {
17716   location_t location;
17717   tree lock, stmt;
17718
17719   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, "`@synchronized'");
17720
17721   location = cp_lexer_peek_token (parser->lexer)->location;
17722   cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17723   lock = cp_parser_expression (parser, false);
17724   cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17725
17726   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
17727      node, lest it get absorbed into the surrounding block.  */
17728   stmt = push_stmt_list ();
17729   cp_parser_compound_statement (parser, NULL, false);
17730
17731   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
17732 }
17733
17734 /* Parse an Objective-C throw statement.
17735
17736    objc-throw-stmt:
17737      @throw assignment-expression [opt] ;
17738
17739    Returns a constructed '@throw' statement.  */
17740
17741 static tree
17742 cp_parser_objc_throw_statement (cp_parser *parser) {
17743   tree expr = NULL_TREE;
17744
17745   cp_parser_require_keyword (parser, RID_AT_THROW, "`@throw'");
17746
17747   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
17748     expr = cp_parser_assignment_expression (parser, false);
17749
17750   cp_parser_consume_semicolon_at_end_of_statement (parser);
17751
17752   return objc_build_throw_stmt (expr);
17753 }
17754
17755 /* Parse an Objective-C statement.  */
17756
17757 static tree
17758 cp_parser_objc_statement (cp_parser * parser) {
17759   /* Try to figure out what kind of declaration is present.  */
17760   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
17761
17762   switch (kwd->keyword)
17763     {
17764     case RID_AT_TRY:
17765       return cp_parser_objc_try_catch_finally_statement (parser);
17766     case RID_AT_SYNCHRONIZED:
17767       return cp_parser_objc_synchronized_statement (parser);
17768     case RID_AT_THROW:
17769       return cp_parser_objc_throw_statement (parser);
17770     default:
17771       error ("misplaced %<@%D%> Objective-C++ construct", kwd->value);
17772       cp_parser_skip_to_end_of_block_or_statement (parser);
17773     }
17774
17775   return error_mark_node;
17776 }
17777 \f
17778 /* OpenMP 2.5 parsing routines.  */
17779
17780 /* All OpenMP clauses.  OpenMP 2.5.  */
17781 typedef enum pragma_omp_clause {
17782   PRAGMA_OMP_CLAUSE_NONE = 0,
17783
17784   PRAGMA_OMP_CLAUSE_COPYIN,
17785   PRAGMA_OMP_CLAUSE_COPYPRIVATE,
17786   PRAGMA_OMP_CLAUSE_DEFAULT,
17787   PRAGMA_OMP_CLAUSE_FIRSTPRIVATE,
17788   PRAGMA_OMP_CLAUSE_IF,
17789   PRAGMA_OMP_CLAUSE_LASTPRIVATE,
17790   PRAGMA_OMP_CLAUSE_NOWAIT,
17791   PRAGMA_OMP_CLAUSE_NUM_THREADS,
17792   PRAGMA_OMP_CLAUSE_ORDERED,
17793   PRAGMA_OMP_CLAUSE_PRIVATE,
17794   PRAGMA_OMP_CLAUSE_REDUCTION,
17795   PRAGMA_OMP_CLAUSE_SCHEDULE,
17796   PRAGMA_OMP_CLAUSE_SHARED
17797 } pragma_omp_clause;
17798
17799 /* Returns name of the next clause.
17800    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
17801    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
17802    returned and the token is consumed.  */
17803
17804 static pragma_omp_clause
17805 cp_parser_omp_clause_name (cp_parser *parser)
17806 {
17807   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
17808
17809   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
17810     result = PRAGMA_OMP_CLAUSE_IF;
17811   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
17812     result = PRAGMA_OMP_CLAUSE_DEFAULT;
17813   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
17814     result = PRAGMA_OMP_CLAUSE_PRIVATE;
17815   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
17816     {
17817       tree id = cp_lexer_peek_token (parser->lexer)->value;
17818       const char *p = IDENTIFIER_POINTER (id);
17819
17820       switch (p[0])
17821         {
17822         case 'c':
17823           if (!strcmp ("copyin", p))
17824             result = PRAGMA_OMP_CLAUSE_COPYIN;
17825           else if (!strcmp ("copyprivate", p))
17826             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
17827           break;
17828         case 'f':
17829           if (!strcmp ("firstprivate", p))
17830             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
17831           break;
17832         case 'l':
17833           if (!strcmp ("lastprivate", p))
17834             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
17835           break;
17836         case 'n':
17837           if (!strcmp ("nowait", p))
17838             result = PRAGMA_OMP_CLAUSE_NOWAIT;
17839           else if (!strcmp ("num_threads", p))
17840             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
17841           break;
17842         case 'o':
17843           if (!strcmp ("ordered", p))
17844             result = PRAGMA_OMP_CLAUSE_ORDERED;
17845           break;
17846         case 'r':
17847           if (!strcmp ("reduction", p))
17848             result = PRAGMA_OMP_CLAUSE_REDUCTION;
17849           break;
17850         case 's':
17851           if (!strcmp ("schedule", p))
17852             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
17853           else if (!strcmp ("shared", p))
17854             result = PRAGMA_OMP_CLAUSE_SHARED;
17855           break;
17856         }
17857     }
17858
17859   if (result != PRAGMA_OMP_CLAUSE_NONE)
17860     cp_lexer_consume_token (parser->lexer);
17861
17862   return result;
17863 }
17864
17865 /* Validate that a clause of the given type does not already exist.  */
17866
17867 static void
17868 check_no_duplicate_clause (tree clauses, enum tree_code code, const char *name)
17869 {
17870   tree c;
17871
17872   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
17873     if (OMP_CLAUSE_CODE (c) == code)
17874       {
17875         error ("too many %qs clauses", name);
17876         break;
17877       }
17878 }
17879
17880 /* OpenMP 2.5:
17881    variable-list:
17882      identifier
17883      variable-list , identifier
17884
17885    In addition, we match a closing parenthesis.  An opening parenthesis
17886    will have been consumed by the caller.
17887
17888    If KIND is nonzero, create the appropriate node and install the decl
17889    in OMP_CLAUSE_DECL and add the node to the head of the list.
17890
17891    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
17892    return the list created.  */
17893
17894 static tree
17895 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
17896                                 tree list)
17897 {
17898   while (1)
17899     {
17900       tree name, decl;
17901
17902       name = cp_parser_id_expression (parser, /*template_p=*/false,
17903                                       /*check_dependency_p=*/true,
17904                                       /*template_p=*/NULL,
17905                                       /*declarator_p=*/false,
17906                                       /*optional_p=*/false);
17907       if (name == error_mark_node)
17908         goto skip_comma;
17909
17910       decl = cp_parser_lookup_name_simple (parser, name);
17911       if (decl == error_mark_node)
17912         cp_parser_name_lookup_error (parser, name, decl, NULL);
17913       else if (kind != 0)
17914         {
17915           tree u = build_omp_clause (kind);
17916           OMP_CLAUSE_DECL (u) = decl;
17917           OMP_CLAUSE_CHAIN (u) = list;
17918           list = u;
17919         }
17920       else
17921         list = tree_cons (decl, NULL_TREE, list);
17922
17923     get_comma:
17924       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
17925         break;
17926       cp_lexer_consume_token (parser->lexer);
17927     }
17928
17929   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
17930     {
17931       int ending;
17932
17933       /* Try to resync to an unnested comma.  Copied from
17934          cp_parser_parenthesized_expression_list.  */
17935     skip_comma:
17936       ending = cp_parser_skip_to_closing_parenthesis (parser,
17937                                                       /*recovering=*/true,
17938                                                       /*or_comma=*/true,
17939                                                       /*consume_paren=*/true);
17940       if (ending < 0)
17941         goto get_comma;
17942     }
17943
17944   return list;
17945 }
17946
17947 /* Similarly, but expect leading and trailing parenthesis.  This is a very
17948    common case for omp clauses.  */
17949
17950 static tree
17951 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
17952 {
17953   if (cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
17954     return cp_parser_omp_var_list_no_open (parser, kind, list);
17955   return list;
17956 }
17957
17958 /* OpenMP 2.5:
17959    default ( shared | none ) */
17960
17961 static tree
17962 cp_parser_omp_clause_default (cp_parser *parser, tree list)
17963 {
17964   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
17965   tree c;
17966
17967   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
17968     return list;
17969   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
17970     {
17971       tree id = cp_lexer_peek_token (parser->lexer)->value;
17972       const char *p = IDENTIFIER_POINTER (id);
17973
17974       switch (p[0])
17975         {
17976         case 'n':
17977           if (strcmp ("none", p) != 0)
17978             goto invalid_kind;
17979           kind = OMP_CLAUSE_DEFAULT_NONE;
17980           break;
17981
17982         case 's':
17983           if (strcmp ("shared", p) != 0)
17984             goto invalid_kind;
17985           kind = OMP_CLAUSE_DEFAULT_SHARED;
17986           break;
17987
17988         default:
17989           goto invalid_kind;
17990         }
17991
17992       cp_lexer_consume_token (parser->lexer);
17993     }
17994   else
17995     {
17996     invalid_kind:
17997       cp_parser_error (parser, "expected %<none%> or %<shared%>");
17998     }
17999
18000   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18001     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18002                                            /*or_comma=*/false,
18003                                            /*consume_paren=*/true);
18004   
18005   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
18006     return list;
18007
18008   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default");
18009   c = build_omp_clause (OMP_CLAUSE_DEFAULT);
18010   OMP_CLAUSE_CHAIN (c) = list;
18011   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
18012
18013   return c;
18014 }
18015
18016 /* OpenMP 2.5:
18017    if ( expression ) */
18018
18019 static tree
18020 cp_parser_omp_clause_if (cp_parser *parser, tree list)
18021 {
18022   tree t, c;
18023
18024   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18025     return list;
18026
18027   t = cp_parser_condition (parser);
18028
18029   if (t == error_mark_node
18030       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18031     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18032                                            /*or_comma=*/false,
18033                                            /*consume_paren=*/true);
18034
18035   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if");
18036
18037   c = build_omp_clause (OMP_CLAUSE_IF);
18038   OMP_CLAUSE_IF_EXPR (c) = t;
18039   OMP_CLAUSE_CHAIN (c) = list;
18040
18041   return c;
18042 }
18043
18044 /* OpenMP 2.5:
18045    nowait */
18046
18047 static tree
18048 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
18049 {
18050   tree c;
18051
18052   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait");
18053
18054   c = build_omp_clause (OMP_CLAUSE_NOWAIT);
18055   OMP_CLAUSE_CHAIN (c) = list;
18056   return c;
18057 }
18058
18059 /* OpenMP 2.5:
18060    num_threads ( expression ) */
18061
18062 static tree
18063 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list)
18064 {
18065   tree t, c;
18066
18067   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18068     return list;
18069
18070   t = cp_parser_expression (parser, false);
18071
18072   if (t == error_mark_node
18073       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18074     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18075                                            /*or_comma=*/false,
18076                                            /*consume_paren=*/true);
18077
18078   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS, "num_threads");
18079
18080   c = build_omp_clause (OMP_CLAUSE_NUM_THREADS);
18081   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
18082   OMP_CLAUSE_CHAIN (c) = list;
18083
18084   return c;
18085 }
18086
18087 /* OpenMP 2.5:
18088    ordered */
18089
18090 static tree
18091 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
18092 {
18093   tree c;
18094
18095   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED, "ordered");
18096
18097   c = build_omp_clause (OMP_CLAUSE_ORDERED);
18098   OMP_CLAUSE_CHAIN (c) = list;
18099   return c;
18100 }
18101
18102 /* OpenMP 2.5:
18103    reduction ( reduction-operator : variable-list )
18104
18105    reduction-operator:
18106      One of: + * - & ^ | && || */
18107
18108 static tree
18109 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
18110 {
18111   enum tree_code code;
18112   tree nlist, c;
18113
18114   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18115     return list;
18116
18117   switch (cp_lexer_peek_token (parser->lexer)->type)
18118     {
18119     case CPP_PLUS:
18120       code = PLUS_EXPR;
18121       break;
18122     case CPP_MULT:
18123       code = MULT_EXPR;
18124       break;
18125     case CPP_MINUS:
18126       code = MINUS_EXPR;
18127       break;
18128     case CPP_AND:
18129       code = BIT_AND_EXPR;
18130       break;
18131     case CPP_XOR:
18132       code = BIT_XOR_EXPR;
18133       break;
18134     case CPP_OR:
18135       code = BIT_IOR_EXPR;
18136       break;
18137     case CPP_AND_AND:
18138       code = TRUTH_ANDIF_EXPR;
18139       break;
18140     case CPP_OR_OR:
18141       code = TRUTH_ORIF_EXPR;
18142       break;
18143     default:
18144       cp_parser_error (parser, "`+', `*', `-', `&', `^', `|', `&&', or `||'");
18145     resync_fail:
18146       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18147                                              /*or_comma=*/false,
18148                                              /*consume_paren=*/true);
18149       return list;
18150     }
18151   cp_lexer_consume_token (parser->lexer);
18152
18153   if (!cp_parser_require (parser, CPP_COLON, "`:'"))
18154     goto resync_fail;
18155
18156   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
18157   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
18158     OMP_CLAUSE_REDUCTION_CODE (c) = code;
18159
18160   return nlist;
18161 }
18162
18163 /* OpenMP 2.5:
18164    schedule ( schedule-kind )
18165    schedule ( schedule-kind , expression )
18166
18167    schedule-kind:
18168      static | dynamic | guided | runtime
18169 */
18170
18171 static tree
18172 cp_parser_omp_clause_schedule (cp_parser *parser, tree list)
18173 {
18174   tree c, t;
18175
18176   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
18177     return list;
18178
18179   c = build_omp_clause (OMP_CLAUSE_SCHEDULE);
18180
18181   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18182     {
18183       tree id = cp_lexer_peek_token (parser->lexer)->value;
18184       const char *p = IDENTIFIER_POINTER (id);
18185
18186       switch (p[0])
18187         {
18188         case 'd':
18189           if (strcmp ("dynamic", p) != 0)
18190             goto invalid_kind;
18191           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
18192           break;
18193
18194         case 'g':
18195           if (strcmp ("guided", p) != 0)
18196             goto invalid_kind;
18197           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
18198           break;
18199
18200         case 'r':
18201           if (strcmp ("runtime", p) != 0)
18202             goto invalid_kind;
18203           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
18204           break;
18205
18206         default:
18207           goto invalid_kind;
18208         }
18209     }
18210   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
18211     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
18212   else
18213     goto invalid_kind;
18214   cp_lexer_consume_token (parser->lexer);
18215
18216   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
18217     {
18218       cp_lexer_consume_token (parser->lexer);
18219
18220       t = cp_parser_assignment_expression (parser, false);
18221
18222       if (t == error_mark_node)
18223         goto resync_fail;
18224       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
18225         error ("schedule %<runtime%> does not take "
18226                "a %<chunk_size%> parameter");
18227       else
18228         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
18229
18230       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18231         goto resync_fail;
18232     }
18233   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`,' or `)'"))
18234     goto resync_fail;
18235
18236   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule");
18237   OMP_CLAUSE_CHAIN (c) = list;
18238   return c;
18239
18240  invalid_kind:
18241   cp_parser_error (parser, "invalid schedule kind");
18242  resync_fail:
18243   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18244                                          /*or_comma=*/false,
18245                                          /*consume_paren=*/true);
18246   return list;
18247 }
18248
18249 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
18250    is a bitmask in MASK.  Return the list of clauses found; the result
18251    of clause default goes in *pdefault.  */
18252
18253 static tree
18254 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
18255                            const char *where, cp_token *pragma_tok)
18256 {
18257   tree clauses = NULL;
18258
18259   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
18260     {
18261       pragma_omp_clause c_kind = cp_parser_omp_clause_name (parser);
18262       const char *c_name;
18263       tree prev = clauses;
18264
18265       switch (c_kind)
18266         {
18267         case PRAGMA_OMP_CLAUSE_COPYIN:
18268           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
18269           c_name = "copyin";
18270           break;
18271         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
18272           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
18273                                             clauses);
18274           c_name = "copyprivate";
18275           break;
18276         case PRAGMA_OMP_CLAUSE_DEFAULT:
18277           clauses = cp_parser_omp_clause_default (parser, clauses);
18278           c_name = "default";
18279           break;
18280         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
18281           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
18282                                             clauses);
18283           c_name = "firstprivate";
18284           break;
18285         case PRAGMA_OMP_CLAUSE_IF:
18286           clauses = cp_parser_omp_clause_if (parser, clauses);
18287           c_name = "if";
18288           break;
18289         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
18290           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
18291                                             clauses);
18292           c_name = "lastprivate";
18293           break;
18294         case PRAGMA_OMP_CLAUSE_NOWAIT:
18295           clauses = cp_parser_omp_clause_nowait (parser, clauses);
18296           c_name = "nowait";
18297           break;
18298         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
18299           clauses = cp_parser_omp_clause_num_threads (parser, clauses);
18300           c_name = "num_threads";
18301           break;
18302         case PRAGMA_OMP_CLAUSE_ORDERED:
18303           clauses = cp_parser_omp_clause_ordered (parser, clauses);
18304           c_name = "ordered";
18305           break;
18306         case PRAGMA_OMP_CLAUSE_PRIVATE:
18307           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
18308                                             clauses);
18309           c_name = "private";
18310           break;
18311         case PRAGMA_OMP_CLAUSE_REDUCTION:
18312           clauses = cp_parser_omp_clause_reduction (parser, clauses);
18313           c_name = "reduction";
18314           break;
18315         case PRAGMA_OMP_CLAUSE_SCHEDULE:
18316           clauses = cp_parser_omp_clause_schedule (parser, clauses);
18317           c_name = "schedule";
18318           break;
18319         case PRAGMA_OMP_CLAUSE_SHARED:
18320           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
18321                                             clauses);
18322           c_name = "shared";
18323           break;
18324         default:
18325           cp_parser_error (parser, "expected %<#pragma omp%> clause");
18326           goto saw_error;
18327         }
18328
18329       if (((mask >> c_kind) & 1) == 0)
18330         {
18331           /* Remove the invalid clause(s) from the list to avoid
18332              confusing the rest of the compiler.  */
18333           clauses = prev;
18334           error ("%qs is not valid for %qs", c_name, where);
18335         }
18336     }
18337  saw_error:
18338   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
18339   return finish_omp_clauses (clauses);
18340 }
18341
18342 /* OpenMP 2.5:
18343    structured-block:
18344      statement
18345
18346    In practice, we're also interested in adding the statement to an
18347    outer node.  So it is convenient if we work around the fact that
18348    cp_parser_statement calls add_stmt.  */
18349
18350 static unsigned
18351 cp_parser_begin_omp_structured_block (cp_parser *parser)
18352 {
18353   unsigned save = parser->in_statement;
18354
18355   /* Only move the values to IN_OMP_BLOCK if they weren't false.
18356      This preserves the "not within loop or switch" style error messages
18357      for nonsense cases like
18358         void foo() {
18359         #pragma omp single
18360           break;
18361         }
18362   */
18363   if (parser->in_statement)
18364     parser->in_statement = IN_OMP_BLOCK;
18365
18366   return save;
18367 }
18368
18369 static void
18370 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
18371 {
18372   parser->in_statement = save;
18373 }
18374
18375 static tree
18376 cp_parser_omp_structured_block (cp_parser *parser)
18377 {
18378   tree stmt = begin_omp_structured_block ();
18379   unsigned int save = cp_parser_begin_omp_structured_block (parser);
18380
18381   cp_parser_statement (parser, NULL_TREE, false);
18382
18383   cp_parser_end_omp_structured_block (parser, save);
18384   return finish_omp_structured_block (stmt);
18385 }
18386
18387 /* OpenMP 2.5:
18388    # pragma omp atomic new-line
18389      expression-stmt
18390
18391    expression-stmt:
18392      x binop= expr | x++ | ++x | x-- | --x
18393    binop:
18394      +, *, -, /, &, ^, |, <<, >>
18395
18396   where x is an lvalue expression with scalar type.  */
18397
18398 static void
18399 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
18400 {
18401   tree lhs, rhs;
18402   enum tree_code code;
18403
18404   cp_parser_require_pragma_eol (parser, pragma_tok);
18405
18406   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
18407                                     /*cast_p=*/false);
18408   switch (TREE_CODE (lhs))
18409     {
18410     case ERROR_MARK:
18411       goto saw_error;
18412
18413     case PREINCREMENT_EXPR:
18414     case POSTINCREMENT_EXPR:
18415       lhs = TREE_OPERAND (lhs, 0);
18416       code = PLUS_EXPR;
18417       rhs = integer_one_node;
18418       break;
18419
18420     case PREDECREMENT_EXPR:
18421     case POSTDECREMENT_EXPR:
18422       lhs = TREE_OPERAND (lhs, 0);
18423       code = MINUS_EXPR;
18424       rhs = integer_one_node;
18425       break;
18426
18427     default:
18428       switch (cp_lexer_peek_token (parser->lexer)->type)
18429         {
18430         case CPP_MULT_EQ:
18431           code = MULT_EXPR;
18432           break;
18433         case CPP_DIV_EQ:
18434           code = TRUNC_DIV_EXPR;
18435           break;
18436         case CPP_PLUS_EQ:
18437           code = PLUS_EXPR;
18438           break;
18439         case CPP_MINUS_EQ:
18440           code = MINUS_EXPR;
18441           break;
18442         case CPP_LSHIFT_EQ:
18443           code = LSHIFT_EXPR;
18444           break;
18445         case CPP_RSHIFT_EQ:
18446           code = RSHIFT_EXPR;
18447           break;
18448         case CPP_AND_EQ:
18449           code = BIT_AND_EXPR;
18450           break;
18451         case CPP_OR_EQ:
18452           code = BIT_IOR_EXPR;
18453           break;
18454         case CPP_XOR_EQ:
18455           code = BIT_XOR_EXPR;
18456           break;
18457         default:
18458           cp_parser_error (parser,
18459                            "invalid operator for %<#pragma omp atomic%>");
18460           goto saw_error;
18461         }
18462       cp_lexer_consume_token (parser->lexer);
18463
18464       rhs = cp_parser_expression (parser, false);
18465       if (rhs == error_mark_node)
18466         goto saw_error;
18467       break;
18468     }
18469   finish_omp_atomic (code, lhs, rhs);
18470   cp_parser_consume_semicolon_at_end_of_statement (parser);
18471   return;
18472
18473  saw_error:
18474   cp_parser_skip_to_end_of_block_or_statement (parser);
18475 }
18476
18477
18478 /* OpenMP 2.5:
18479    # pragma omp barrier new-line
18480 */
18481
18482 static void
18483 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
18484 {
18485   cp_parser_require_pragma_eol (parser, pragma_tok);
18486   finish_omp_barrier ();
18487 }
18488
18489 /* OpenMP 2.5:
18490    # pragma omp critical [(name)] new-line
18491      structured-block
18492 */
18493
18494 static tree
18495 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
18496 {
18497   tree stmt, name = NULL;
18498
18499   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18500     {
18501       cp_lexer_consume_token (parser->lexer);
18502
18503       name = cp_parser_identifier (parser);
18504       
18505       if (name == error_mark_node
18506           || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18507         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18508                                                /*or_comma=*/false,
18509                                                /*consume_paren=*/true);
18510       if (name == error_mark_node)
18511         name = NULL;
18512     }
18513   cp_parser_require_pragma_eol (parser, pragma_tok);
18514
18515   stmt = cp_parser_omp_structured_block (parser);
18516   return c_finish_omp_critical (stmt, name);
18517 }
18518
18519 /* OpenMP 2.5:
18520    # pragma omp flush flush-vars[opt] new-line
18521
18522    flush-vars:
18523      ( variable-list ) */
18524
18525 static void
18526 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
18527 {
18528   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18529     (void) cp_parser_omp_var_list (parser, 0, NULL);
18530   cp_parser_require_pragma_eol (parser, pragma_tok);
18531
18532   finish_omp_flush ();
18533 }
18534
18535 /* Parse the restricted form of the for statment allowed by OpenMP.  */
18536
18537 static tree
18538 cp_parser_omp_for_loop (cp_parser *parser)
18539 {
18540   tree init, cond, incr, body, decl, pre_body;
18541   location_t loc;
18542
18543   if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
18544     {
18545       cp_parser_error (parser, "for statement expected");
18546       return NULL;
18547     }
18548   loc = cp_lexer_consume_token (parser->lexer)->location;
18549   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18550     return NULL;
18551
18552   init = decl = NULL;
18553   pre_body = push_stmt_list ();
18554   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18555     {
18556       cp_decl_specifier_seq type_specifiers;
18557
18558       /* First, try to parse as an initialized declaration.  See
18559          cp_parser_condition, from whence the bulk of this is copied.  */
18560
18561       cp_parser_parse_tentatively (parser);
18562       cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
18563                                     &type_specifiers);
18564       if (!cp_parser_error_occurred (parser))
18565         {
18566           tree asm_specification, attributes;
18567           cp_declarator *declarator;
18568
18569           declarator = cp_parser_declarator (parser,
18570                                              CP_PARSER_DECLARATOR_NAMED,
18571                                              /*ctor_dtor_or_conv_p=*/NULL,
18572                                              /*parenthesized_p=*/NULL,
18573                                              /*member_p=*/false);
18574           attributes = cp_parser_attributes_opt (parser);
18575           asm_specification = cp_parser_asm_specification_opt (parser);
18576
18577           cp_parser_require (parser, CPP_EQ, "`='");
18578           if (cp_parser_parse_definitely (parser))
18579             {
18580               tree pushed_scope;
18581
18582               decl = start_decl (declarator, &type_specifiers,
18583                                  /*initialized_p=*/false, attributes,
18584                                  /*prefix_attributes=*/NULL_TREE,
18585                                  &pushed_scope);
18586
18587               init = cp_parser_assignment_expression (parser, false);
18588
18589               cp_finish_decl (decl, NULL_TREE, /*init_const_expr_p=*/false,
18590                               asm_specification, LOOKUP_ONLYCONVERTING);
18591
18592               if (pushed_scope)
18593                 pop_scope (pushed_scope);
18594             }
18595         }
18596       else
18597         cp_parser_abort_tentative_parse (parser);
18598
18599       /* If parsing as an initialized declaration failed, try again as
18600          a simple expression.  */
18601       if (decl == NULL)
18602         init = cp_parser_expression (parser, false);
18603     }
18604   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
18605   pre_body = pop_stmt_list (pre_body);
18606
18607   cond = NULL;
18608   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18609     cond = cp_parser_condition (parser);
18610   cp_parser_require (parser, CPP_SEMICOLON, "`;'");
18611
18612   incr = NULL;
18613   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
18614     incr = cp_parser_expression (parser, false);
18615
18616   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18617     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18618                                            /*or_comma=*/false,
18619                                            /*consume_paren=*/true);
18620
18621   /* Note that we saved the original contents of this flag when we entered
18622      the structured block, and so we don't need to re-save it here.  */
18623   parser->in_statement = IN_OMP_FOR;
18624
18625   /* Note that the grammar doesn't call for a structured block here,
18626      though the loop as a whole is a structured block.  */
18627   body = push_stmt_list ();
18628   cp_parser_statement (parser, NULL_TREE, false);
18629   body = pop_stmt_list (body);
18630
18631   return finish_omp_for (loc, decl, init, cond, incr, body, pre_body);
18632 }
18633
18634 /* OpenMP 2.5:
18635    #pragma omp for for-clause[optseq] new-line
18636      for-loop
18637 */
18638
18639 #define OMP_FOR_CLAUSE_MASK                             \
18640         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
18641         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
18642         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
18643         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
18644         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
18645         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
18646         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
18647
18648 static tree
18649 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
18650 {
18651   tree clauses, sb, ret;
18652   unsigned int save;
18653
18654   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
18655                                        "#pragma omp for", pragma_tok);
18656
18657   sb = begin_omp_structured_block ();
18658   save = cp_parser_begin_omp_structured_block (parser);
18659
18660   ret = cp_parser_omp_for_loop (parser);
18661   if (ret)
18662     OMP_FOR_CLAUSES (ret) = clauses;
18663
18664   cp_parser_end_omp_structured_block (parser, save);
18665   add_stmt (finish_omp_structured_block (sb));
18666
18667   return ret;
18668 }
18669
18670 /* OpenMP 2.5:
18671    # pragma omp master new-line
18672      structured-block
18673 */
18674
18675 static tree
18676 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
18677 {
18678   cp_parser_require_pragma_eol (parser, pragma_tok);
18679   return c_finish_omp_master (cp_parser_omp_structured_block (parser));
18680 }
18681
18682 /* OpenMP 2.5:
18683    # pragma omp ordered new-line
18684      structured-block
18685 */
18686
18687 static tree
18688 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
18689 {
18690   cp_parser_require_pragma_eol (parser, pragma_tok);
18691   return c_finish_omp_ordered (cp_parser_omp_structured_block (parser));
18692 }
18693
18694 /* OpenMP 2.5:
18695
18696    section-scope:
18697      { section-sequence }
18698
18699    section-sequence:
18700      section-directive[opt] structured-block
18701      section-sequence section-directive structured-block  */
18702
18703 static tree
18704 cp_parser_omp_sections_scope (cp_parser *parser)
18705 {
18706   tree stmt, substmt;
18707   bool error_suppress = false;
18708   cp_token *tok;
18709
18710   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
18711     return NULL_TREE;
18712
18713   stmt = push_stmt_list ();
18714
18715   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
18716     {
18717       unsigned save;
18718
18719       substmt = begin_omp_structured_block ();
18720       save = cp_parser_begin_omp_structured_block (parser);
18721
18722       while (1)
18723         {
18724           cp_parser_statement (parser, NULL_TREE, false);
18725
18726           tok = cp_lexer_peek_token (parser->lexer);
18727           if (tok->pragma_kind == PRAGMA_OMP_SECTION)
18728             break;
18729           if (tok->type == CPP_CLOSE_BRACE)
18730             break;
18731           if (tok->type == CPP_EOF)
18732             break;
18733         }
18734
18735       cp_parser_end_omp_structured_block (parser, save);
18736       substmt = finish_omp_structured_block (substmt);
18737       substmt = build1 (OMP_SECTION, void_type_node, substmt);
18738       add_stmt (substmt);
18739     }
18740
18741   while (1)
18742     {
18743       tok = cp_lexer_peek_token (parser->lexer);
18744       if (tok->type == CPP_CLOSE_BRACE)
18745         break;
18746       if (tok->type == CPP_EOF)
18747         break;
18748
18749       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
18750         {
18751           cp_lexer_consume_token (parser->lexer);
18752           cp_parser_require_pragma_eol (parser, tok);
18753           error_suppress = false;
18754         }
18755       else if (!error_suppress)
18756         {
18757           cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
18758           error_suppress = true;
18759         }
18760
18761       substmt = cp_parser_omp_structured_block (parser);
18762       substmt = build1 (OMP_SECTION, void_type_node, substmt);
18763       add_stmt (substmt);
18764     }
18765   cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
18766
18767   substmt = pop_stmt_list (stmt);
18768
18769   stmt = make_node (OMP_SECTIONS);
18770   TREE_TYPE (stmt) = void_type_node;
18771   OMP_SECTIONS_BODY (stmt) = substmt;
18772
18773   add_stmt (stmt);
18774   return stmt;
18775 }
18776
18777 /* OpenMP 2.5:
18778    # pragma omp sections sections-clause[optseq] newline
18779      sections-scope
18780 */
18781
18782 #define OMP_SECTIONS_CLAUSE_MASK                        \
18783         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
18784         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
18785         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
18786         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
18787         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
18788
18789 static tree
18790 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
18791 {
18792   tree clauses, ret;
18793
18794   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
18795                                        "#pragma omp sections", pragma_tok);
18796
18797   ret = cp_parser_omp_sections_scope (parser);
18798   if (ret)
18799     OMP_SECTIONS_CLAUSES (ret) = clauses;
18800
18801   return ret;
18802 }
18803
18804 /* OpenMP 2.5:
18805    # pragma parallel parallel-clause new-line
18806    # pragma parallel for parallel-for-clause new-line
18807    # pragma parallel sections parallel-sections-clause new-line
18808 */
18809
18810 #define OMP_PARALLEL_CLAUSE_MASK                        \
18811         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
18812         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
18813         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
18814         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
18815         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
18816         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
18817         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
18818         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
18819
18820 static tree
18821 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
18822 {
18823   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
18824   const char *p_name = "#pragma omp parallel";
18825   tree stmt, clauses, par_clause, ws_clause, block;
18826   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
18827   unsigned int save;
18828
18829   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
18830     {
18831       cp_lexer_consume_token (parser->lexer);
18832       p_kind = PRAGMA_OMP_PARALLEL_FOR;
18833       p_name = "#pragma omp parallel for";
18834       mask |= OMP_FOR_CLAUSE_MASK;
18835       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
18836     }
18837   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18838     {
18839       tree id = cp_lexer_peek_token (parser->lexer)->value;
18840       const char *p = IDENTIFIER_POINTER (id);
18841       if (strcmp (p, "sections") == 0)
18842         {
18843           cp_lexer_consume_token (parser->lexer);
18844           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
18845           p_name = "#pragma omp parallel sections";
18846           mask |= OMP_SECTIONS_CLAUSE_MASK;
18847           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
18848         }
18849     }
18850
18851   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
18852   block = begin_omp_parallel ();
18853   save = cp_parser_begin_omp_structured_block (parser);
18854
18855   switch (p_kind)
18856     {
18857     case PRAGMA_OMP_PARALLEL:
18858       cp_parser_already_scoped_statement (parser);
18859       par_clause = clauses;
18860       break;
18861
18862     case PRAGMA_OMP_PARALLEL_FOR:
18863       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
18864       stmt = cp_parser_omp_for_loop (parser);
18865       if (stmt)
18866         OMP_FOR_CLAUSES (stmt) = ws_clause;
18867       break;
18868
18869     case PRAGMA_OMP_PARALLEL_SECTIONS:
18870       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
18871       stmt = cp_parser_omp_sections_scope (parser);
18872       if (stmt)
18873         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
18874       break;
18875
18876     default:
18877       gcc_unreachable ();
18878     }
18879
18880   cp_parser_end_omp_structured_block (parser, save);
18881   stmt = finish_omp_parallel (par_clause, block);
18882   if (p_kind != PRAGMA_OMP_PARALLEL)
18883     OMP_PARALLEL_COMBINED (stmt) = 1;
18884   return stmt;
18885 }
18886
18887 /* OpenMP 2.5:
18888    # pragma omp single single-clause[optseq] new-line
18889      structured-block
18890 */
18891
18892 #define OMP_SINGLE_CLAUSE_MASK                          \
18893         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
18894         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
18895         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
18896         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
18897
18898 static tree
18899 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
18900 {
18901   tree stmt = make_node (OMP_SINGLE);
18902   TREE_TYPE (stmt) = void_type_node;
18903
18904   OMP_SINGLE_CLAUSES (stmt)
18905     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
18906                                  "#pragma omp single", pragma_tok);
18907   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
18908
18909   return add_stmt (stmt);
18910 }
18911
18912 /* OpenMP 2.5:
18913    # pragma omp threadprivate (variable-list) */
18914
18915 static void
18916 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
18917 {
18918   tree vars;
18919
18920   vars = cp_parser_omp_var_list (parser, 0, NULL);
18921   cp_parser_require_pragma_eol (parser, pragma_tok);
18922
18923   if (!targetm.have_tls)
18924     sorry ("threadprivate variables not supported in this target");
18925
18926   finish_omp_threadprivate (vars);
18927 }
18928
18929 /* Main entry point to OpenMP statement pragmas.  */
18930
18931 static void
18932 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
18933 {
18934   tree stmt;
18935
18936   switch (pragma_tok->pragma_kind)
18937     {
18938     case PRAGMA_OMP_ATOMIC:
18939       cp_parser_omp_atomic (parser, pragma_tok);
18940       return;
18941     case PRAGMA_OMP_CRITICAL:
18942       stmt = cp_parser_omp_critical (parser, pragma_tok);
18943       break;
18944     case PRAGMA_OMP_FOR:
18945       stmt = cp_parser_omp_for (parser, pragma_tok);
18946       break;
18947     case PRAGMA_OMP_MASTER:
18948       stmt = cp_parser_omp_master (parser, pragma_tok);
18949       break;
18950     case PRAGMA_OMP_ORDERED:
18951       stmt = cp_parser_omp_ordered (parser, pragma_tok);
18952       break;
18953     case PRAGMA_OMP_PARALLEL:
18954       stmt = cp_parser_omp_parallel (parser, pragma_tok);
18955       break;
18956     case PRAGMA_OMP_SECTIONS:
18957       stmt = cp_parser_omp_sections (parser, pragma_tok);
18958       break;
18959     case PRAGMA_OMP_SINGLE:
18960       stmt = cp_parser_omp_single (parser, pragma_tok);
18961       break;
18962     default:
18963       gcc_unreachable ();
18964     }
18965
18966   if (stmt)
18967     SET_EXPR_LOCATION (stmt, pragma_tok->location);
18968 }
18969 \f
18970 /* The parser.  */
18971
18972 static GTY (()) cp_parser *the_parser;
18973
18974 \f
18975 /* Special handling for the first token or line in the file.  The first
18976    thing in the file might be #pragma GCC pch_preprocess, which loads a
18977    PCH file, which is a GC collection point.  So we need to handle this
18978    first pragma without benefit of an existing lexer structure.
18979
18980    Always returns one token to the caller in *FIRST_TOKEN.  This is 
18981    either the true first token of the file, or the first token after
18982    the initial pragma.  */
18983
18984 static void
18985 cp_parser_initial_pragma (cp_token *first_token)
18986 {
18987   tree name = NULL;
18988
18989   cp_lexer_get_preprocessor_token (NULL, first_token);
18990   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
18991     return;
18992
18993   cp_lexer_get_preprocessor_token (NULL, first_token);
18994   if (first_token->type == CPP_STRING)
18995     {
18996       name = first_token->value;
18997
18998       cp_lexer_get_preprocessor_token (NULL, first_token);
18999       if (first_token->type != CPP_PRAGMA_EOL)
19000         error ("junk at end of %<#pragma GCC pch_preprocess%>");
19001     }
19002   else
19003     error ("expected string literal");
19004
19005   /* Skip to the end of the pragma.  */
19006   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
19007     cp_lexer_get_preprocessor_token (NULL, first_token);
19008
19009   /* Now actually load the PCH file.  */
19010   if (name)
19011     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
19012
19013   /* Read one more token to return to our caller.  We have to do this
19014      after reading the PCH file in, since its pointers have to be
19015      live.  */
19016   cp_lexer_get_preprocessor_token (NULL, first_token);
19017 }
19018
19019 /* Normal parsing of a pragma token.  Here we can (and must) use the
19020    regular lexer.  */
19021
19022 static bool
19023 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
19024 {
19025   cp_token *pragma_tok;
19026   unsigned int id;
19027
19028   pragma_tok = cp_lexer_consume_token (parser->lexer);
19029   gcc_assert (pragma_tok->type == CPP_PRAGMA);
19030   parser->lexer->in_pragma = true;
19031
19032   id = pragma_tok->pragma_kind;
19033   switch (id)
19034     {
19035     case PRAGMA_GCC_PCH_PREPROCESS:
19036       error ("%<#pragma GCC pch_preprocess%> must be first");
19037       break;
19038
19039     case PRAGMA_OMP_BARRIER:
19040       switch (context)
19041         {
19042         case pragma_compound:
19043           cp_parser_omp_barrier (parser, pragma_tok);
19044           return false;
19045         case pragma_stmt:
19046           error ("%<#pragma omp barrier%> may only be "
19047                  "used in compound statements");
19048           break;
19049         default:
19050           goto bad_stmt;
19051         }
19052       break;
19053
19054     case PRAGMA_OMP_FLUSH:
19055       switch (context)
19056         {
19057         case pragma_compound:
19058           cp_parser_omp_flush (parser, pragma_tok);
19059           return false;
19060         case pragma_stmt:
19061           error ("%<#pragma omp flush%> may only be "
19062                  "used in compound statements");
19063           break;
19064         default:
19065           goto bad_stmt;
19066         }
19067       break;
19068
19069     case PRAGMA_OMP_THREADPRIVATE:
19070       cp_parser_omp_threadprivate (parser, pragma_tok);
19071       return false;
19072
19073     case PRAGMA_OMP_ATOMIC:
19074     case PRAGMA_OMP_CRITICAL:
19075     case PRAGMA_OMP_FOR:
19076     case PRAGMA_OMP_MASTER:
19077     case PRAGMA_OMP_ORDERED:
19078     case PRAGMA_OMP_PARALLEL:
19079     case PRAGMA_OMP_SECTIONS:
19080     case PRAGMA_OMP_SINGLE:
19081       if (context == pragma_external)
19082         goto bad_stmt;
19083       cp_parser_omp_construct (parser, pragma_tok);
19084       return true;
19085
19086     case PRAGMA_OMP_SECTION:
19087       error ("%<#pragma omp section%> may only be used in "
19088              "%<#pragma omp sections%> construct");
19089       break;
19090
19091     default:
19092       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
19093       c_invoke_pragma_handler (id);
19094       break;
19095
19096     bad_stmt:
19097       cp_parser_error (parser, "expected declaration specifiers");
19098       break;
19099     }
19100
19101   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
19102   return false;
19103 }
19104
19105 /* The interface the pragma parsers have to the lexer.  */
19106
19107 enum cpp_ttype
19108 pragma_lex (tree *value)
19109 {
19110   cp_token *tok;
19111   enum cpp_ttype ret;
19112
19113   tok = cp_lexer_peek_token (the_parser->lexer);
19114
19115   ret = tok->type;
19116   *value = tok->value;
19117
19118   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
19119     ret = CPP_EOF;
19120   else if (ret == CPP_STRING)
19121     *value = cp_parser_string_literal (the_parser, false, false);
19122   else
19123     {
19124       cp_lexer_consume_token (the_parser->lexer);
19125       if (ret == CPP_KEYWORD)
19126         ret = CPP_NAME;
19127     }
19128
19129   return ret;
19130 }
19131
19132 \f
19133 /* External interface.  */
19134
19135 /* Parse one entire translation unit.  */
19136
19137 void
19138 c_parse_file (void)
19139 {
19140   bool error_occurred;
19141   static bool already_called = false;
19142
19143   if (already_called)
19144     {
19145       sorry ("inter-module optimizations not implemented for C++");
19146       return;
19147     }
19148   already_called = true;
19149
19150   the_parser = cp_parser_new ();
19151   push_deferring_access_checks (flag_access_control
19152                                 ? dk_no_deferred : dk_no_check);
19153   error_occurred = cp_parser_translation_unit (the_parser);
19154   the_parser = NULL;
19155 }
19156
19157 /* This variable must be provided by every front end.  */
19158
19159 int yydebug;
19160
19161 #include "gt-cp-parser.h"