re PR c++/35650 (Can't bind ref-to-function through using-decl. in namespace)
[platform/upstream/gcc.git] / gcc / cp / parser.c
1 /* C++ Parser.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004,
3    2005, 2007, 2008  Free Software Foundation, Inc.
4    Written by Mark Mitchell <mark@codesourcery.com>.
5
6    This file is part of GCC.
7
8    GCC is free software; you can redistribute it and/or modify it
9    under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3, or (at your option)
11    any later version.
12
13    GCC is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "dyn-string.h"
27 #include "varray.h"
28 #include "cpplib.h"
29 #include "tree.h"
30 #include "cp-tree.h"
31 #include "c-pragma.h"
32 #include "decl.h"
33 #include "flags.h"
34 #include "diagnostic.h"
35 #include "toplev.h"
36 #include "output.h"
37 #include "target.h"
38 #include "cgraph.h"
39 #include "c-common.h"
40
41 \f
42 /* The lexer.  */
43
44 /* The cp_lexer_* routines mediate between the lexer proper (in libcpp
45    and c-lex.c) and the C++ parser.  */
46
47 /* A token's value and its associated deferred access checks and
48    qualifying scope.  */
49
50 struct tree_check GTY(())
51 {
52   /* The value associated with the token.  */
53   tree value;
54   /* The checks that have been associated with value.  */
55   VEC (deferred_access_check, gc)* checks;
56   /* The token's qualifying scope (used when it is a
57      CPP_NESTED_NAME_SPECIFIER).  */
58   tree qualifying_scope;
59 };
60
61 /* A C++ token.  */
62
63 typedef struct cp_token GTY (())
64 {
65   /* The kind of token.  */
66   ENUM_BITFIELD (cpp_ttype) type : 8;
67   /* If this token is a keyword, this value indicates which keyword.
68      Otherwise, this value is RID_MAX.  */
69   ENUM_BITFIELD (rid) keyword : 8;
70   /* Token flags.  */
71   unsigned char flags;
72   /* Identifier for the pragma.  */
73   ENUM_BITFIELD (pragma_kind) pragma_kind : 6;
74   /* True if this token is from a system header.  */
75   BOOL_BITFIELD in_system_header : 1;
76   /* True if this token is from a context where it is implicitly extern "C" */
77   BOOL_BITFIELD implicit_extern_c : 1;
78   /* True for a CPP_NAME token that is not a keyword (i.e., for which
79      KEYWORD is RID_MAX) iff this name was looked up and found to be
80      ambiguous.  An error has already been reported.  */
81   BOOL_BITFIELD ambiguous_p : 1;
82   /* The value associated with this token, if any.  */
83   union cp_token_value {
84     /* Used for CPP_NESTED_NAME_SPECIFIER and CPP_TEMPLATE_ID.  */
85     struct tree_check* GTY((tag ("1"))) tree_check_value;
86     /* Use for all other tokens.  */
87     tree GTY((tag ("0"))) value;
88   } GTY((desc ("(%1.type == CPP_TEMPLATE_ID) || (%1.type == CPP_NESTED_NAME_SPECIFIER)"))) u;
89   /* The location at which this token was found.  */
90   location_t location;
91 } cp_token;
92
93 /* We use a stack of token pointer for saving token sets.  */
94 typedef struct cp_token *cp_token_position;
95 DEF_VEC_P (cp_token_position);
96 DEF_VEC_ALLOC_P (cp_token_position,heap);
97
98 static cp_token eof_token =
99 {
100   CPP_EOF, RID_MAX, 0, PRAGMA_NONE, 0, false, 0, { NULL },
101   0
102 };
103
104 /* The cp_lexer structure represents the C++ lexer.  It is responsible
105    for managing the token stream from the preprocessor and supplying
106    it to the parser.  Tokens are never added to the cp_lexer after
107    it is created.  */
108
109 typedef struct cp_lexer GTY (())
110 {
111   /* The memory allocated for the buffer.  NULL if this lexer does not
112      own the token buffer.  */
113   cp_token * GTY ((length ("%h.buffer_length"))) buffer;
114   /* If the lexer owns the buffer, this is the number of tokens in the
115      buffer.  */
116   size_t buffer_length;
117
118   /* A pointer just past the last available token.  The tokens
119      in this lexer are [buffer, last_token).  */
120   cp_token_position GTY ((skip)) last_token;
121
122   /* The next available token.  If NEXT_TOKEN is &eof_token, then there are
123      no more available tokens.  */
124   cp_token_position GTY ((skip)) next_token;
125
126   /* A stack indicating positions at which cp_lexer_save_tokens was
127      called.  The top entry is the most recent position at which we
128      began saving tokens.  If the stack is non-empty, we are saving
129      tokens.  */
130   VEC(cp_token_position,heap) *GTY ((skip)) saved_tokens;
131
132   /* The next lexer in a linked list of lexers.  */
133   struct cp_lexer *next;
134
135   /* True if we should output debugging information.  */
136   bool debugging_p;
137
138   /* True if we're in the context of parsing a pragma, and should not
139      increment past the end-of-line marker.  */
140   bool in_pragma;
141 } cp_lexer;
142
143 /* cp_token_cache is a range of tokens.  There is no need to represent
144    allocate heap memory for it, since tokens are never removed from the
145    lexer's array.  There is also no need for the GC to walk through
146    a cp_token_cache, since everything in here is referenced through
147    a lexer.  */
148
149 typedef struct cp_token_cache GTY(())
150 {
151   /* The beginning of the token range.  */
152   cp_token * GTY((skip)) first;
153
154   /* Points immediately after the last token in the range.  */
155   cp_token * GTY ((skip)) last;
156 } cp_token_cache;
157
158 /* Prototypes.  */
159
160 static cp_lexer *cp_lexer_new_main
161   (void);
162 static cp_lexer *cp_lexer_new_from_tokens
163   (cp_token_cache *tokens);
164 static void cp_lexer_destroy
165   (cp_lexer *);
166 static int cp_lexer_saving_tokens
167   (const cp_lexer *);
168 static cp_token_position cp_lexer_token_position
169   (cp_lexer *, bool);
170 static cp_token *cp_lexer_token_at
171   (cp_lexer *, cp_token_position);
172 static void cp_lexer_get_preprocessor_token
173   (cp_lexer *, cp_token *);
174 static inline cp_token *cp_lexer_peek_token
175   (cp_lexer *);
176 static cp_token *cp_lexer_peek_nth_token
177   (cp_lexer *, size_t);
178 static inline bool cp_lexer_next_token_is
179   (cp_lexer *, enum cpp_ttype);
180 static bool cp_lexer_next_token_is_not
181   (cp_lexer *, enum cpp_ttype);
182 static bool cp_lexer_next_token_is_keyword
183   (cp_lexer *, enum rid);
184 static cp_token *cp_lexer_consume_token
185   (cp_lexer *);
186 static void cp_lexer_purge_token
187   (cp_lexer *);
188 static void cp_lexer_purge_tokens_after
189   (cp_lexer *, cp_token_position);
190 static void cp_lexer_save_tokens
191   (cp_lexer *);
192 static void cp_lexer_commit_tokens
193   (cp_lexer *);
194 static void cp_lexer_rollback_tokens
195   (cp_lexer *);
196 #ifdef ENABLE_CHECKING
197 static void cp_lexer_print_token
198   (FILE *, cp_token *);
199 static inline bool cp_lexer_debugging_p
200   (cp_lexer *);
201 static void cp_lexer_start_debugging
202   (cp_lexer *) ATTRIBUTE_UNUSED;
203 static void cp_lexer_stop_debugging
204   (cp_lexer *) ATTRIBUTE_UNUSED;
205 #else
206 /* If we define cp_lexer_debug_stream to NULL it will provoke warnings
207    about passing NULL to functions that require non-NULL arguments
208    (fputs, fprintf).  It will never be used, so all we need is a value
209    of the right type that's guaranteed not to be NULL.  */
210 #define cp_lexer_debug_stream stdout
211 #define cp_lexer_print_token(str, tok) (void) 0
212 #define cp_lexer_debugging_p(lexer) 0
213 #endif /* ENABLE_CHECKING */
214
215 static cp_token_cache *cp_token_cache_new
216   (cp_token *, cp_token *);
217
218 static void cp_parser_initial_pragma
219   (cp_token *);
220
221 /* Manifest constants.  */
222 #define CP_LEXER_BUFFER_SIZE ((256 * 1024) / sizeof (cp_token))
223 #define CP_SAVED_TOKEN_STACK 5
224
225 /* A token type for keywords, as opposed to ordinary identifiers.  */
226 #define CPP_KEYWORD ((enum cpp_ttype) (N_TTYPES + 1))
227
228 /* A token type for template-ids.  If a template-id is processed while
229    parsing tentatively, it is replaced with a CPP_TEMPLATE_ID token;
230    the value of the CPP_TEMPLATE_ID is whatever was returned by
231    cp_parser_template_id.  */
232 #define CPP_TEMPLATE_ID ((enum cpp_ttype) (CPP_KEYWORD + 1))
233
234 /* A token type for nested-name-specifiers.  If a
235    nested-name-specifier is processed while parsing tentatively, it is
236    replaced with a CPP_NESTED_NAME_SPECIFIER token; the value of the
237    CPP_NESTED_NAME_SPECIFIER is whatever was returned by
238    cp_parser_nested_name_specifier_opt.  */
239 #define CPP_NESTED_NAME_SPECIFIER ((enum cpp_ttype) (CPP_TEMPLATE_ID + 1))
240
241 /* A token type for tokens that are not tokens at all; these are used
242    to represent slots in the array where there used to be a token
243    that has now been deleted.  */
244 #define CPP_PURGED ((enum cpp_ttype) (CPP_NESTED_NAME_SPECIFIER + 1))
245
246 /* The number of token types, including C++-specific ones.  */
247 #define N_CP_TTYPES ((int) (CPP_PURGED + 1))
248
249 /* Variables.  */
250
251 #ifdef ENABLE_CHECKING
252 /* The stream to which debugging output should be written.  */
253 static FILE *cp_lexer_debug_stream;
254 #endif /* ENABLE_CHECKING */
255
256 /* Create a new main C++ lexer, the lexer that gets tokens from the
257    preprocessor.  */
258
259 static cp_lexer *
260 cp_lexer_new_main (void)
261 {
262   cp_token first_token;
263   cp_lexer *lexer;
264   cp_token *pos;
265   size_t alloc;
266   size_t space;
267   cp_token *buffer;
268
269   /* It's possible that parsing the first pragma will load a PCH file,
270      which is a GC collection point.  So we have to do that before
271      allocating any memory.  */
272   cp_parser_initial_pragma (&first_token);
273
274   c_common_no_more_pch ();
275
276   /* Allocate the memory.  */
277   lexer = GGC_CNEW (cp_lexer);
278
279 #ifdef ENABLE_CHECKING
280   /* Initially we are not debugging.  */
281   lexer->debugging_p = false;
282 #endif /* ENABLE_CHECKING */
283   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
284                                    CP_SAVED_TOKEN_STACK);
285
286   /* Create the buffer.  */
287   alloc = CP_LEXER_BUFFER_SIZE;
288   buffer = GGC_NEWVEC (cp_token, alloc);
289
290   /* Put the first token in the buffer.  */
291   space = alloc;
292   pos = buffer;
293   *pos = first_token;
294
295   /* Get the remaining tokens from the preprocessor.  */
296   while (pos->type != CPP_EOF)
297     {
298       pos++;
299       if (!--space)
300         {
301           space = alloc;
302           alloc *= 2;
303           buffer = GGC_RESIZEVEC (cp_token, buffer, alloc);
304           pos = buffer + space;
305         }
306       cp_lexer_get_preprocessor_token (lexer, pos);
307     }
308   lexer->buffer = buffer;
309   lexer->buffer_length = alloc - space;
310   lexer->last_token = pos;
311   lexer->next_token = lexer->buffer_length ? buffer : &eof_token;
312
313   /* Subsequent preprocessor diagnostics should use compiler
314      diagnostic functions to get the compiler source location.  */
315   cpp_get_options (parse_in)->client_diagnostic = true;
316   cpp_get_callbacks (parse_in)->error = cp_cpp_error;
317
318   gcc_assert (lexer->next_token->type != CPP_PURGED);
319   return lexer;
320 }
321
322 /* Create a new lexer whose token stream is primed with the tokens in
323    CACHE.  When these tokens are exhausted, no new tokens will be read.  */
324
325 static cp_lexer *
326 cp_lexer_new_from_tokens (cp_token_cache *cache)
327 {
328   cp_token *first = cache->first;
329   cp_token *last = cache->last;
330   cp_lexer *lexer = GGC_CNEW (cp_lexer);
331
332   /* We do not own the buffer.  */
333   lexer->buffer = NULL;
334   lexer->buffer_length = 0;
335   lexer->next_token = first == last ? &eof_token : first;
336   lexer->last_token = last;
337
338   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
339                                    CP_SAVED_TOKEN_STACK);
340
341 #ifdef ENABLE_CHECKING
342   /* Initially we are not debugging.  */
343   lexer->debugging_p = false;
344 #endif
345
346   gcc_assert (lexer->next_token->type != CPP_PURGED);
347   return lexer;
348 }
349
350 /* Frees all resources associated with LEXER.  */
351
352 static void
353 cp_lexer_destroy (cp_lexer *lexer)
354 {
355   if (lexer->buffer)
356     ggc_free (lexer->buffer);
357   VEC_free (cp_token_position, heap, lexer->saved_tokens);
358   ggc_free (lexer);
359 }
360
361 /* Returns nonzero if debugging information should be output.  */
362
363 #ifdef ENABLE_CHECKING
364
365 static inline bool
366 cp_lexer_debugging_p (cp_lexer *lexer)
367 {
368   return lexer->debugging_p;
369 }
370
371 #endif /* ENABLE_CHECKING */
372
373 static inline cp_token_position
374 cp_lexer_token_position (cp_lexer *lexer, bool previous_p)
375 {
376   gcc_assert (!previous_p || lexer->next_token != &eof_token);
377
378   return lexer->next_token - previous_p;
379 }
380
381 static inline cp_token *
382 cp_lexer_token_at (cp_lexer *lexer ATTRIBUTE_UNUSED, cp_token_position pos)
383 {
384   return pos;
385 }
386
387 /* nonzero if we are presently saving tokens.  */
388
389 static inline int
390 cp_lexer_saving_tokens (const cp_lexer* lexer)
391 {
392   return VEC_length (cp_token_position, lexer->saved_tokens) != 0;
393 }
394
395 /* Store the next token from the preprocessor in *TOKEN.  Return true
396    if we reach EOF.  If LEXER is NULL, assume we are handling an
397    initial #pragma pch_preprocess, and thus want the lexer to return
398    processed strings.  */
399
400 static void
401 cp_lexer_get_preprocessor_token (cp_lexer *lexer, cp_token *token)
402 {
403   static int is_extern_c = 0;
404
405    /* Get a new token from the preprocessor.  */
406   token->type
407     = c_lex_with_flags (&token->u.value, &token->location, &token->flags,
408                         lexer == NULL ? 0 : C_LEX_RAW_STRINGS);
409   token->keyword = RID_MAX;
410   token->pragma_kind = PRAGMA_NONE;
411   token->in_system_header = in_system_header;
412
413   /* On some systems, some header files are surrounded by an
414      implicit extern "C" block.  Set a flag in the token if it
415      comes from such a header.  */
416   is_extern_c += pending_lang_change;
417   pending_lang_change = 0;
418   token->implicit_extern_c = is_extern_c > 0;
419
420   /* Check to see if this token is a keyword.  */
421   if (token->type == CPP_NAME)
422     {
423       if (C_IS_RESERVED_WORD (token->u.value))
424         {
425           /* Mark this token as a keyword.  */
426           token->type = CPP_KEYWORD;
427           /* Record which keyword.  */
428           token->keyword = C_RID_CODE (token->u.value);
429           /* Update the value.  Some keywords are mapped to particular
430              entities, rather than simply having the value of the
431              corresponding IDENTIFIER_NODE.  For example, `__const' is
432              mapped to `const'.  */
433           token->u.value = ridpointers[token->keyword];
434         }
435       else
436         {
437           if (warn_cxx0x_compat
438               && C_RID_CODE (token->u.value) >= RID_FIRST_CXX0X
439               && C_RID_CODE (token->u.value) <= RID_LAST_CXX0X)
440             {
441               /* Warn about the C++0x keyword (but still treat it as
442                  an identifier).  */
443               warning (OPT_Wc__0x_compat, 
444                        "identifier %<%s%> will become a keyword in C++0x",
445                        IDENTIFIER_POINTER (token->u.value));
446
447               /* Clear out the C_RID_CODE so we don't warn about this
448                  particular identifier-turned-keyword again.  */
449               C_RID_CODE (token->u.value) = RID_MAX;
450             }
451
452           token->ambiguous_p = false;
453           token->keyword = RID_MAX;
454         }
455     }
456   /* Handle Objective-C++ keywords.  */
457   else if (token->type == CPP_AT_NAME)
458     {
459       token->type = CPP_KEYWORD;
460       switch (C_RID_CODE (token->u.value))
461         {
462         /* Map 'class' to '@class', 'private' to '@private', etc.  */
463         case RID_CLASS: token->keyword = RID_AT_CLASS; break;
464         case RID_PRIVATE: token->keyword = RID_AT_PRIVATE; break;
465         case RID_PROTECTED: token->keyword = RID_AT_PROTECTED; break;
466         case RID_PUBLIC: token->keyword = RID_AT_PUBLIC; break;
467         case RID_THROW: token->keyword = RID_AT_THROW; break;
468         case RID_TRY: token->keyword = RID_AT_TRY; break;
469         case RID_CATCH: token->keyword = RID_AT_CATCH; break;
470         default: token->keyword = C_RID_CODE (token->u.value);
471         }
472     }
473   else if (token->type == CPP_PRAGMA)
474     {
475       /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST.  */
476       token->pragma_kind = TREE_INT_CST_LOW (token->u.value);
477       token->u.value = NULL_TREE;
478     }
479 }
480
481 /* Update the globals input_location and in_system_header and the
482    input file stack from TOKEN.  */
483 static inline void
484 cp_lexer_set_source_position_from_token (cp_token *token)
485 {
486   if (token->type != CPP_EOF)
487     {
488       input_location = token->location;
489       in_system_header = token->in_system_header;
490     }
491 }
492
493 /* Return a pointer to the next token in the token stream, but do not
494    consume it.  */
495
496 static inline cp_token *
497 cp_lexer_peek_token (cp_lexer *lexer)
498 {
499   if (cp_lexer_debugging_p (lexer))
500     {
501       fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
502       cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
503       putc ('\n', cp_lexer_debug_stream);
504     }
505   return lexer->next_token;
506 }
507
508 /* Return true if the next token has the indicated TYPE.  */
509
510 static inline bool
511 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
512 {
513   return cp_lexer_peek_token (lexer)->type == type;
514 }
515
516 /* Return true if the next token does not have the indicated TYPE.  */
517
518 static inline bool
519 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
520 {
521   return !cp_lexer_next_token_is (lexer, type);
522 }
523
524 /* Return true if the next token is the indicated KEYWORD.  */
525
526 static inline bool
527 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
528 {
529   return cp_lexer_peek_token (lexer)->keyword == keyword;
530 }
531
532 /* Return true if the next token is a keyword for a decl-specifier.  */
533
534 static bool
535 cp_lexer_next_token_is_decl_specifier_keyword (cp_lexer *lexer)
536 {
537   cp_token *token;
538
539   token = cp_lexer_peek_token (lexer);
540   switch (token->keyword) 
541     {
542       /* auto specifier: storage-class-specifier in C++,
543          simple-type-specifier in C++0x.  */
544     case RID_AUTO:
545       /* Storage classes.  */
546     case RID_REGISTER:
547     case RID_STATIC:
548     case RID_EXTERN:
549     case RID_MUTABLE:
550     case RID_THREAD:
551       /* Elaborated type specifiers.  */
552     case RID_ENUM:
553     case RID_CLASS:
554     case RID_STRUCT:
555     case RID_UNION:
556     case RID_TYPENAME:
557       /* Simple type specifiers.  */
558     case RID_CHAR:
559     case RID_CHAR16:
560     case RID_CHAR32:
561     case RID_WCHAR:
562     case RID_BOOL:
563     case RID_SHORT:
564     case RID_INT:
565     case RID_LONG:
566     case RID_SIGNED:
567     case RID_UNSIGNED:
568     case RID_FLOAT:
569     case RID_DOUBLE:
570     case RID_VOID:
571       /* GNU extensions.  */ 
572     case RID_ATTRIBUTE:
573     case RID_TYPEOF:
574       /* C++0x extensions.  */
575     case RID_DECLTYPE:
576       return true;
577
578     default:
579       return false;
580     }
581 }
582
583 /* Return a pointer to the Nth token in the token stream.  If N is 1,
584    then this is precisely equivalent to cp_lexer_peek_token (except
585    that it is not inline).  One would like to disallow that case, but
586    there is one case (cp_parser_nth_token_starts_template_id) where
587    the caller passes a variable for N and it might be 1.  */
588
589 static cp_token *
590 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
591 {
592   cp_token *token;
593
594   /* N is 1-based, not zero-based.  */
595   gcc_assert (n > 0);
596
597   if (cp_lexer_debugging_p (lexer))
598     fprintf (cp_lexer_debug_stream,
599              "cp_lexer: peeking ahead %ld at token: ", (long)n);
600
601   --n;
602   token = lexer->next_token;
603   gcc_assert (!n || token != &eof_token);
604   while (n != 0)
605     {
606       ++token;
607       if (token == lexer->last_token)
608         {
609           token = &eof_token;
610           break;
611         }
612
613       if (token->type != CPP_PURGED)
614         --n;
615     }
616
617   if (cp_lexer_debugging_p (lexer))
618     {
619       cp_lexer_print_token (cp_lexer_debug_stream, token);
620       putc ('\n', cp_lexer_debug_stream);
621     }
622
623   return token;
624 }
625
626 /* Return the next token, and advance the lexer's next_token pointer
627    to point to the next non-purged token.  */
628
629 static cp_token *
630 cp_lexer_consume_token (cp_lexer* lexer)
631 {
632   cp_token *token = lexer->next_token;
633
634   gcc_assert (token != &eof_token);
635   gcc_assert (!lexer->in_pragma || token->type != CPP_PRAGMA_EOL);
636
637   do
638     {
639       lexer->next_token++;
640       if (lexer->next_token == lexer->last_token)
641         {
642           lexer->next_token = &eof_token;
643           break;
644         }
645
646     }
647   while (lexer->next_token->type == CPP_PURGED);
648
649   cp_lexer_set_source_position_from_token (token);
650
651   /* Provide debugging output.  */
652   if (cp_lexer_debugging_p (lexer))
653     {
654       fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
655       cp_lexer_print_token (cp_lexer_debug_stream, token);
656       putc ('\n', cp_lexer_debug_stream);
657     }
658
659   return token;
660 }
661
662 /* Permanently remove the next token from the token stream, and
663    advance the next_token pointer to refer to the next non-purged
664    token.  */
665
666 static void
667 cp_lexer_purge_token (cp_lexer *lexer)
668 {
669   cp_token *tok = lexer->next_token;
670
671   gcc_assert (tok != &eof_token);
672   tok->type = CPP_PURGED;
673   tok->location = UNKNOWN_LOCATION;
674   tok->u.value = NULL_TREE;
675   tok->keyword = RID_MAX;
676
677   do
678     {
679       tok++;
680       if (tok == lexer->last_token)
681         {
682           tok = &eof_token;
683           break;
684         }
685     }
686   while (tok->type == CPP_PURGED);
687   lexer->next_token = tok;
688 }
689
690 /* Permanently remove all tokens after TOK, up to, but not
691    including, the token that will be returned next by
692    cp_lexer_peek_token.  */
693
694 static void
695 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
696 {
697   cp_token *peek = lexer->next_token;
698
699   if (peek == &eof_token)
700     peek = lexer->last_token;
701
702   gcc_assert (tok < peek);
703
704   for ( tok += 1; tok != peek; tok += 1)
705     {
706       tok->type = CPP_PURGED;
707       tok->location = UNKNOWN_LOCATION;
708       tok->u.value = NULL_TREE;
709       tok->keyword = RID_MAX;
710     }
711 }
712
713 /* Begin saving tokens.  All tokens consumed after this point will be
714    preserved.  */
715
716 static void
717 cp_lexer_save_tokens (cp_lexer* lexer)
718 {
719   /* Provide debugging output.  */
720   if (cp_lexer_debugging_p (lexer))
721     fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
722
723   VEC_safe_push (cp_token_position, heap,
724                  lexer->saved_tokens, lexer->next_token);
725 }
726
727 /* Commit to the portion of the token stream most recently saved.  */
728
729 static void
730 cp_lexer_commit_tokens (cp_lexer* lexer)
731 {
732   /* Provide debugging output.  */
733   if (cp_lexer_debugging_p (lexer))
734     fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
735
736   VEC_pop (cp_token_position, lexer->saved_tokens);
737 }
738
739 /* Return all tokens saved since the last call to cp_lexer_save_tokens
740    to the token stream.  Stop saving tokens.  */
741
742 static void
743 cp_lexer_rollback_tokens (cp_lexer* lexer)
744 {
745   /* Provide debugging output.  */
746   if (cp_lexer_debugging_p (lexer))
747     fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
748
749   lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
750 }
751
752 /* Print a representation of the TOKEN on the STREAM.  */
753
754 #ifdef ENABLE_CHECKING
755
756 static void
757 cp_lexer_print_token (FILE * stream, cp_token *token)
758 {
759   /* We don't use cpp_type2name here because the parser defines
760      a few tokens of its own.  */
761   static const char *const token_names[] = {
762     /* cpplib-defined token types */
763 #define OP(e, s) #e,
764 #define TK(e, s) #e,
765     TTYPE_TABLE
766 #undef OP
767 #undef TK
768     /* C++ parser token types - see "Manifest constants", above.  */
769     "KEYWORD",
770     "TEMPLATE_ID",
771     "NESTED_NAME_SPECIFIER",
772     "PURGED"
773   };
774
775   /* If we have a name for the token, print it out.  Otherwise, we
776      simply give the numeric code.  */
777   gcc_assert (token->type < ARRAY_SIZE(token_names));
778   fputs (token_names[token->type], stream);
779
780   /* For some tokens, print the associated data.  */
781   switch (token->type)
782     {
783     case CPP_KEYWORD:
784       /* Some keywords have a value that is not an IDENTIFIER_NODE.
785          For example, `struct' is mapped to an INTEGER_CST.  */
786       if (TREE_CODE (token->u.value) != IDENTIFIER_NODE)
787         break;
788       /* else fall through */
789     case CPP_NAME:
790       fputs (IDENTIFIER_POINTER (token->u.value), stream);
791       break;
792
793     case CPP_STRING:
794     case CPP_STRING16:
795     case CPP_STRING32:
796     case CPP_WSTRING:
797       fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->u.value));
798       break;
799
800     default:
801       break;
802     }
803 }
804
805 /* Start emitting debugging information.  */
806
807 static void
808 cp_lexer_start_debugging (cp_lexer* lexer)
809 {
810   lexer->debugging_p = true;
811 }
812
813 /* Stop emitting debugging information.  */
814
815 static void
816 cp_lexer_stop_debugging (cp_lexer* lexer)
817 {
818   lexer->debugging_p = false;
819 }
820
821 #endif /* ENABLE_CHECKING */
822
823 /* Create a new cp_token_cache, representing a range of tokens.  */
824
825 static cp_token_cache *
826 cp_token_cache_new (cp_token *first, cp_token *last)
827 {
828   cp_token_cache *cache = GGC_NEW (cp_token_cache);
829   cache->first = first;
830   cache->last = last;
831   return cache;
832 }
833
834 \f
835 /* Decl-specifiers.  */
836
837 /* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
838
839 static void
840 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
841 {
842   memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
843 }
844
845 /* Declarators.  */
846
847 /* Nothing other than the parser should be creating declarators;
848    declarators are a semi-syntactic representation of C++ entities.
849    Other parts of the front end that need to create entities (like
850    VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
851
852 static cp_declarator *make_call_declarator
853   (cp_declarator *, cp_parameter_declarator *, cp_cv_quals, tree);
854 static cp_declarator *make_array_declarator
855   (cp_declarator *, tree);
856 static cp_declarator *make_pointer_declarator
857   (cp_cv_quals, cp_declarator *);
858 static cp_declarator *make_reference_declarator
859   (cp_cv_quals, cp_declarator *, bool);
860 static cp_parameter_declarator *make_parameter_declarator
861   (cp_decl_specifier_seq *, cp_declarator *, tree);
862 static cp_declarator *make_ptrmem_declarator
863   (cp_cv_quals, tree, cp_declarator *);
864
865 /* An erroneous declarator.  */
866 static cp_declarator *cp_error_declarator;
867
868 /* The obstack on which declarators and related data structures are
869    allocated.  */
870 static struct obstack declarator_obstack;
871
872 /* Alloc BYTES from the declarator memory pool.  */
873
874 static inline void *
875 alloc_declarator (size_t bytes)
876 {
877   return obstack_alloc (&declarator_obstack, bytes);
878 }
879
880 /* Allocate a declarator of the indicated KIND.  Clear fields that are
881    common to all declarators.  */
882
883 static cp_declarator *
884 make_declarator (cp_declarator_kind kind)
885 {
886   cp_declarator *declarator;
887
888   declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
889   declarator->kind = kind;
890   declarator->attributes = NULL_TREE;
891   declarator->declarator = NULL;
892   declarator->parameter_pack_p = false;
893
894   return declarator;
895 }
896
897 /* Make a declarator for a generalized identifier.  If
898    QUALIFYING_SCOPE is non-NULL, the identifier is
899    QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
900    UNQUALIFIED_NAME.  SFK indicates the kind of special function this
901    is, if any.   */
902
903 static cp_declarator *
904 make_id_declarator (tree qualifying_scope, tree unqualified_name,
905                     special_function_kind sfk)
906 {
907   cp_declarator *declarator;
908
909   /* It is valid to write:
910
911        class C { void f(); };
912        typedef C D;
913        void D::f();
914
915      The standard is not clear about whether `typedef const C D' is
916      legal; as of 2002-09-15 the committee is considering that
917      question.  EDG 3.0 allows that syntax.  Therefore, we do as
918      well.  */
919   if (qualifying_scope && TYPE_P (qualifying_scope))
920     qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
921
922   gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
923               || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
924               || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
925
926   declarator = make_declarator (cdk_id);
927   declarator->u.id.qualifying_scope = qualifying_scope;
928   declarator->u.id.unqualified_name = unqualified_name;
929   declarator->u.id.sfk = sfk;
930   
931   return declarator;
932 }
933
934 /* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
935    of modifiers such as const or volatile to apply to the pointer
936    type, represented as identifiers.  */
937
938 cp_declarator *
939 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
940 {
941   cp_declarator *declarator;
942
943   declarator = make_declarator (cdk_pointer);
944   declarator->declarator = target;
945   declarator->u.pointer.qualifiers = cv_qualifiers;
946   declarator->u.pointer.class_type = NULL_TREE;
947   if (target)
948     {
949       declarator->parameter_pack_p = target->parameter_pack_p;
950       target->parameter_pack_p = false;
951     }
952   else
953     declarator->parameter_pack_p = false;
954
955   return declarator;
956 }
957
958 /* Like make_pointer_declarator -- but for references.  */
959
960 cp_declarator *
961 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target,
962                            bool rvalue_ref)
963 {
964   cp_declarator *declarator;
965
966   declarator = make_declarator (cdk_reference);
967   declarator->declarator = target;
968   declarator->u.reference.qualifiers = cv_qualifiers;
969   declarator->u.reference.rvalue_ref = rvalue_ref;
970   if (target)
971     {
972       declarator->parameter_pack_p = target->parameter_pack_p;
973       target->parameter_pack_p = false;
974     }
975   else
976     declarator->parameter_pack_p = false;
977
978   return declarator;
979 }
980
981 /* Like make_pointer_declarator -- but for a pointer to a non-static
982    member of CLASS_TYPE.  */
983
984 cp_declarator *
985 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
986                         cp_declarator *pointee)
987 {
988   cp_declarator *declarator;
989
990   declarator = make_declarator (cdk_ptrmem);
991   declarator->declarator = pointee;
992   declarator->u.pointer.qualifiers = cv_qualifiers;
993   declarator->u.pointer.class_type = class_type;
994
995   if (pointee)
996     {
997       declarator->parameter_pack_p = pointee->parameter_pack_p;
998       pointee->parameter_pack_p = false;
999     }
1000   else
1001     declarator->parameter_pack_p = false;
1002
1003   return declarator;
1004 }
1005
1006 /* Make a declarator for the function given by TARGET, with the
1007    indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
1008    "const"-qualified member function.  The EXCEPTION_SPECIFICATION
1009    indicates what exceptions can be thrown.  */
1010
1011 cp_declarator *
1012 make_call_declarator (cp_declarator *target,
1013                       cp_parameter_declarator *parms,
1014                       cp_cv_quals cv_qualifiers,
1015                       tree exception_specification)
1016 {
1017   cp_declarator *declarator;
1018
1019   declarator = make_declarator (cdk_function);
1020   declarator->declarator = target;
1021   declarator->u.function.parameters = parms;
1022   declarator->u.function.qualifiers = cv_qualifiers;
1023   declarator->u.function.exception_specification = exception_specification;
1024   if (target)
1025     {
1026       declarator->parameter_pack_p = target->parameter_pack_p;
1027       target->parameter_pack_p = false;
1028     }
1029   else
1030     declarator->parameter_pack_p = false;
1031
1032   return declarator;
1033 }
1034
1035 /* Make a declarator for an array of BOUNDS elements, each of which is
1036    defined by ELEMENT.  */
1037
1038 cp_declarator *
1039 make_array_declarator (cp_declarator *element, tree bounds)
1040 {
1041   cp_declarator *declarator;
1042
1043   declarator = make_declarator (cdk_array);
1044   declarator->declarator = element;
1045   declarator->u.array.bounds = bounds;
1046   if (element)
1047     {
1048       declarator->parameter_pack_p = element->parameter_pack_p;
1049       element->parameter_pack_p = false;
1050     }
1051   else
1052     declarator->parameter_pack_p = false;
1053
1054   return declarator;
1055 }
1056
1057 /* Determine whether the declarator we've seen so far can be a
1058    parameter pack, when followed by an ellipsis.  */
1059 static bool 
1060 declarator_can_be_parameter_pack (cp_declarator *declarator)
1061 {
1062   /* Search for a declarator name, or any other declarator that goes
1063      after the point where the ellipsis could appear in a parameter
1064      pack. If we find any of these, then this declarator can not be
1065      made into a parameter pack.  */
1066   bool found = false;
1067   while (declarator && !found)
1068     {
1069       switch ((int)declarator->kind)
1070         {
1071         case cdk_id:
1072         case cdk_array:
1073           found = true;
1074           break;
1075
1076         case cdk_error:
1077           return true;
1078
1079         default:
1080           declarator = declarator->declarator;
1081           break;
1082         }
1083     }
1084
1085   return !found;
1086 }
1087
1088 cp_parameter_declarator *no_parameters;
1089
1090 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
1091    DECLARATOR and DEFAULT_ARGUMENT.  */
1092
1093 cp_parameter_declarator *
1094 make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
1095                            cp_declarator *declarator,
1096                            tree default_argument)
1097 {
1098   cp_parameter_declarator *parameter;
1099
1100   parameter = ((cp_parameter_declarator *)
1101                alloc_declarator (sizeof (cp_parameter_declarator)));
1102   parameter->next = NULL;
1103   if (decl_specifiers)
1104     parameter->decl_specifiers = *decl_specifiers;
1105   else
1106     clear_decl_specs (&parameter->decl_specifiers);
1107   parameter->declarator = declarator;
1108   parameter->default_argument = default_argument;
1109   parameter->ellipsis_p = false;
1110
1111   return parameter;
1112 }
1113
1114 /* Returns true iff DECLARATOR  is a declaration for a function.  */
1115
1116 static bool
1117 function_declarator_p (const cp_declarator *declarator)
1118 {
1119   while (declarator)
1120     {
1121       if (declarator->kind == cdk_function
1122           && declarator->declarator->kind == cdk_id)
1123         return true;
1124       if (declarator->kind == cdk_id
1125           || declarator->kind == cdk_error)
1126         return false;
1127       declarator = declarator->declarator;
1128     }
1129   return false;
1130 }
1131  
1132 /* The parser.  */
1133
1134 /* Overview
1135    --------
1136
1137    A cp_parser parses the token stream as specified by the C++
1138    grammar.  Its job is purely parsing, not semantic analysis.  For
1139    example, the parser breaks the token stream into declarators,
1140    expressions, statements, and other similar syntactic constructs.
1141    It does not check that the types of the expressions on either side
1142    of an assignment-statement are compatible, or that a function is
1143    not declared with a parameter of type `void'.
1144
1145    The parser invokes routines elsewhere in the compiler to perform
1146    semantic analysis and to build up the abstract syntax tree for the
1147    code processed.
1148
1149    The parser (and the template instantiation code, which is, in a
1150    way, a close relative of parsing) are the only parts of the
1151    compiler that should be calling push_scope and pop_scope, or
1152    related functions.  The parser (and template instantiation code)
1153    keeps track of what scope is presently active; everything else
1154    should simply honor that.  (The code that generates static
1155    initializers may also need to set the scope, in order to check
1156    access control correctly when emitting the initializers.)
1157
1158    Methodology
1159    -----------
1160
1161    The parser is of the standard recursive-descent variety.  Upcoming
1162    tokens in the token stream are examined in order to determine which
1163    production to use when parsing a non-terminal.  Some C++ constructs
1164    require arbitrary look ahead to disambiguate.  For example, it is
1165    impossible, in the general case, to tell whether a statement is an
1166    expression or declaration without scanning the entire statement.
1167    Therefore, the parser is capable of "parsing tentatively."  When the
1168    parser is not sure what construct comes next, it enters this mode.
1169    Then, while we attempt to parse the construct, the parser queues up
1170    error messages, rather than issuing them immediately, and saves the
1171    tokens it consumes.  If the construct is parsed successfully, the
1172    parser "commits", i.e., it issues any queued error messages and
1173    the tokens that were being preserved are permanently discarded.
1174    If, however, the construct is not parsed successfully, the parser
1175    rolls back its state completely so that it can resume parsing using
1176    a different alternative.
1177
1178    Future Improvements
1179    -------------------
1180
1181    The performance of the parser could probably be improved substantially.
1182    We could often eliminate the need to parse tentatively by looking ahead
1183    a little bit.  In some places, this approach might not entirely eliminate
1184    the need to parse tentatively, but it might still speed up the average
1185    case.  */
1186
1187 /* Flags that are passed to some parsing functions.  These values can
1188    be bitwise-ored together.  */
1189
1190 typedef enum cp_parser_flags
1191 {
1192   /* No flags.  */
1193   CP_PARSER_FLAGS_NONE = 0x0,
1194   /* The construct is optional.  If it is not present, then no error
1195      should be issued.  */
1196   CP_PARSER_FLAGS_OPTIONAL = 0x1,
1197   /* When parsing a type-specifier, do not allow user-defined types.  */
1198   CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2
1199 } cp_parser_flags;
1200
1201 /* The different kinds of declarators we want to parse.  */
1202
1203 typedef enum cp_parser_declarator_kind
1204 {
1205   /* We want an abstract declarator.  */
1206   CP_PARSER_DECLARATOR_ABSTRACT,
1207   /* We want a named declarator.  */
1208   CP_PARSER_DECLARATOR_NAMED,
1209   /* We don't mind, but the name must be an unqualified-id.  */
1210   CP_PARSER_DECLARATOR_EITHER
1211 } cp_parser_declarator_kind;
1212
1213 /* The precedence values used to parse binary expressions.  The minimum value
1214    of PREC must be 1, because zero is reserved to quickly discriminate
1215    binary operators from other tokens.  */
1216
1217 enum cp_parser_prec
1218 {
1219   PREC_NOT_OPERATOR,
1220   PREC_LOGICAL_OR_EXPRESSION,
1221   PREC_LOGICAL_AND_EXPRESSION,
1222   PREC_INCLUSIVE_OR_EXPRESSION,
1223   PREC_EXCLUSIVE_OR_EXPRESSION,
1224   PREC_AND_EXPRESSION,
1225   PREC_EQUALITY_EXPRESSION,
1226   PREC_RELATIONAL_EXPRESSION,
1227   PREC_SHIFT_EXPRESSION,
1228   PREC_ADDITIVE_EXPRESSION,
1229   PREC_MULTIPLICATIVE_EXPRESSION,
1230   PREC_PM_EXPRESSION,
1231   NUM_PREC_VALUES = PREC_PM_EXPRESSION
1232 };
1233
1234 /* A mapping from a token type to a corresponding tree node type, with a
1235    precedence value.  */
1236
1237 typedef struct cp_parser_binary_operations_map_node
1238 {
1239   /* The token type.  */
1240   enum cpp_ttype token_type;
1241   /* The corresponding tree code.  */
1242   enum tree_code tree_type;
1243   /* The precedence of this operator.  */
1244   enum cp_parser_prec prec;
1245 } cp_parser_binary_operations_map_node;
1246
1247 /* The status of a tentative parse.  */
1248
1249 typedef enum cp_parser_status_kind
1250 {
1251   /* No errors have occurred.  */
1252   CP_PARSER_STATUS_KIND_NO_ERROR,
1253   /* An error has occurred.  */
1254   CP_PARSER_STATUS_KIND_ERROR,
1255   /* We are committed to this tentative parse, whether or not an error
1256      has occurred.  */
1257   CP_PARSER_STATUS_KIND_COMMITTED
1258 } cp_parser_status_kind;
1259
1260 typedef struct cp_parser_expression_stack_entry
1261 {
1262   /* Left hand side of the binary operation we are currently
1263      parsing.  */
1264   tree lhs;
1265   /* Original tree code for left hand side, if it was a binary
1266      expression itself (used for -Wparentheses).  */
1267   enum tree_code lhs_type;
1268   /* Tree code for the binary operation we are parsing.  */
1269   enum tree_code tree_type;
1270   /* Precedence of the binary operation we are parsing.  */
1271   int prec;
1272 } cp_parser_expression_stack_entry;
1273
1274 /* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1275    entries because precedence levels on the stack are monotonically
1276    increasing.  */
1277 typedef struct cp_parser_expression_stack_entry
1278   cp_parser_expression_stack[NUM_PREC_VALUES];
1279
1280 /* Context that is saved and restored when parsing tentatively.  */
1281 typedef struct cp_parser_context GTY (())
1282 {
1283   /* If this is a tentative parsing context, the status of the
1284      tentative parse.  */
1285   enum cp_parser_status_kind status;
1286   /* If non-NULL, we have just seen a `x->' or `x.' expression.  Names
1287      that are looked up in this context must be looked up both in the
1288      scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1289      the context of the containing expression.  */
1290   tree object_type;
1291
1292   /* The next parsing context in the stack.  */
1293   struct cp_parser_context *next;
1294 } cp_parser_context;
1295
1296 /* Prototypes.  */
1297
1298 /* Constructors and destructors.  */
1299
1300 static cp_parser_context *cp_parser_context_new
1301   (cp_parser_context *);
1302
1303 /* Class variables.  */
1304
1305 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1306
1307 /* The operator-precedence table used by cp_parser_binary_expression.
1308    Transformed into an associative array (binops_by_token) by
1309    cp_parser_new.  */
1310
1311 static const cp_parser_binary_operations_map_node binops[] = {
1312   { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1313   { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1314
1315   { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1316   { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1317   { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1318
1319   { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1320   { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1321
1322   { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1323   { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1324
1325   { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1326   { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1327   { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1328   { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1329
1330   { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1331   { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1332
1333   { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1334
1335   { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1336
1337   { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1338
1339   { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1340
1341   { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1342 };
1343
1344 /* The same as binops, but initialized by cp_parser_new so that
1345    binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1346    for speed.  */
1347 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1348
1349 /* Constructors and destructors.  */
1350
1351 /* Construct a new context.  The context below this one on the stack
1352    is given by NEXT.  */
1353
1354 static cp_parser_context *
1355 cp_parser_context_new (cp_parser_context* next)
1356 {
1357   cp_parser_context *context;
1358
1359   /* Allocate the storage.  */
1360   if (cp_parser_context_free_list != NULL)
1361     {
1362       /* Pull the first entry from the free list.  */
1363       context = cp_parser_context_free_list;
1364       cp_parser_context_free_list = context->next;
1365       memset (context, 0, sizeof (*context));
1366     }
1367   else
1368     context = GGC_CNEW (cp_parser_context);
1369
1370   /* No errors have occurred yet in this context.  */
1371   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1372   /* If this is not the bottomost context, copy information that we
1373      need from the previous context.  */
1374   if (next)
1375     {
1376       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1377          expression, then we are parsing one in this context, too.  */
1378       context->object_type = next->object_type;
1379       /* Thread the stack.  */
1380       context->next = next;
1381     }
1382
1383   return context;
1384 }
1385
1386 /* The cp_parser structure represents the C++ parser.  */
1387
1388 typedef struct cp_parser GTY(())
1389 {
1390   /* The lexer from which we are obtaining tokens.  */
1391   cp_lexer *lexer;
1392
1393   /* The scope in which names should be looked up.  If NULL_TREE, then
1394      we look up names in the scope that is currently open in the
1395      source program.  If non-NULL, this is either a TYPE or
1396      NAMESPACE_DECL for the scope in which we should look.  It can
1397      also be ERROR_MARK, when we've parsed a bogus scope.
1398
1399      This value is not cleared automatically after a name is looked
1400      up, so we must be careful to clear it before starting a new look
1401      up sequence.  (If it is not cleared, then `X::Y' followed by `Z'
1402      will look up `Z' in the scope of `X', rather than the current
1403      scope.)  Unfortunately, it is difficult to tell when name lookup
1404      is complete, because we sometimes peek at a token, look it up,
1405      and then decide not to consume it.   */
1406   tree scope;
1407
1408   /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1409      last lookup took place.  OBJECT_SCOPE is used if an expression
1410      like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1411      respectively.  QUALIFYING_SCOPE is used for an expression of the
1412      form "X::Y"; it refers to X.  */
1413   tree object_scope;
1414   tree qualifying_scope;
1415
1416   /* A stack of parsing contexts.  All but the bottom entry on the
1417      stack will be tentative contexts.
1418
1419      We parse tentatively in order to determine which construct is in
1420      use in some situations.  For example, in order to determine
1421      whether a statement is an expression-statement or a
1422      declaration-statement we parse it tentatively as a
1423      declaration-statement.  If that fails, we then reparse the same
1424      token stream as an expression-statement.  */
1425   cp_parser_context *context;
1426
1427   /* True if we are parsing GNU C++.  If this flag is not set, then
1428      GNU extensions are not recognized.  */
1429   bool allow_gnu_extensions_p;
1430
1431   /* TRUE if the `>' token should be interpreted as the greater-than
1432      operator.  FALSE if it is the end of a template-id or
1433      template-parameter-list. In C++0x mode, this flag also applies to
1434      `>>' tokens, which are viewed as two consecutive `>' tokens when
1435      this flag is FALSE.  */
1436   bool greater_than_is_operator_p;
1437
1438   /* TRUE if default arguments are allowed within a parameter list
1439      that starts at this point. FALSE if only a gnu extension makes
1440      them permissible.  */
1441   bool default_arg_ok_p;
1442
1443   /* TRUE if we are parsing an integral constant-expression.  See
1444      [expr.const] for a precise definition.  */
1445   bool integral_constant_expression_p;
1446
1447   /* TRUE if we are parsing an integral constant-expression -- but a
1448      non-constant expression should be permitted as well.  This flag
1449      is used when parsing an array bound so that GNU variable-length
1450      arrays are tolerated.  */
1451   bool allow_non_integral_constant_expression_p;
1452
1453   /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1454      been seen that makes the expression non-constant.  */
1455   bool non_integral_constant_expression_p;
1456
1457   /* TRUE if local variable names and `this' are forbidden in the
1458      current context.  */
1459   bool local_variables_forbidden_p;
1460
1461   /* TRUE if the declaration we are parsing is part of a
1462      linkage-specification of the form `extern string-literal
1463      declaration'.  */
1464   bool in_unbraced_linkage_specification_p;
1465
1466   /* TRUE if we are presently parsing a declarator, after the
1467      direct-declarator.  */
1468   bool in_declarator_p;
1469
1470   /* TRUE if we are presently parsing a template-argument-list.  */
1471   bool in_template_argument_list_p;
1472
1473   /* Set to IN_ITERATION_STMT if parsing an iteration-statement,
1474      to IN_OMP_BLOCK if parsing OpenMP structured block and
1475      IN_OMP_FOR if parsing OpenMP loop.  If parsing a switch statement,
1476      this is bitwise ORed with IN_SWITCH_STMT, unless parsing an
1477      iteration-statement, OpenMP block or loop within that switch.  */
1478 #define IN_SWITCH_STMT          1
1479 #define IN_ITERATION_STMT       2
1480 #define IN_OMP_BLOCK            4
1481 #define IN_OMP_FOR              8
1482 #define IN_IF_STMT             16
1483   unsigned char in_statement;
1484
1485   /* TRUE if we are presently parsing the body of a switch statement.
1486      Note that this doesn't quite overlap with in_statement above.
1487      The difference relates to giving the right sets of error messages:
1488      "case not in switch" vs "break statement used with OpenMP...".  */
1489   bool in_switch_statement_p;
1490
1491   /* TRUE if we are parsing a type-id in an expression context.  In
1492      such a situation, both "type (expr)" and "type (type)" are valid
1493      alternatives.  */
1494   bool in_type_id_in_expr_p;
1495
1496   /* TRUE if we are currently in a header file where declarations are
1497      implicitly extern "C".  */
1498   bool implicit_extern_c;
1499
1500   /* TRUE if strings in expressions should be translated to the execution
1501      character set.  */
1502   bool translate_strings_p;
1503
1504   /* TRUE if we are presently parsing the body of a function, but not
1505      a local class.  */
1506   bool in_function_body;
1507
1508   /* If non-NULL, then we are parsing a construct where new type
1509      definitions are not permitted.  The string stored here will be
1510      issued as an error message if a type is defined.  */
1511   const char *type_definition_forbidden_message;
1512
1513   /* A list of lists. The outer list is a stack, used for member
1514      functions of local classes. At each level there are two sub-list,
1515      one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1516      sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1517      TREE_VALUE's. The functions are chained in reverse declaration
1518      order.
1519
1520      The TREE_PURPOSE sublist contains those functions with default
1521      arguments that need post processing, and the TREE_VALUE sublist
1522      contains those functions with definitions that need post
1523      processing.
1524
1525      These lists can only be processed once the outermost class being
1526      defined is complete.  */
1527   tree unparsed_functions_queues;
1528
1529   /* The number of classes whose definitions are currently in
1530      progress.  */
1531   unsigned num_classes_being_defined;
1532
1533   /* The number of template parameter lists that apply directly to the
1534      current declaration.  */
1535   unsigned num_template_parameter_lists;
1536 } cp_parser;
1537
1538 /* Prototypes.  */
1539
1540 /* Constructors and destructors.  */
1541
1542 static cp_parser *cp_parser_new
1543   (void);
1544
1545 /* Routines to parse various constructs.
1546
1547    Those that return `tree' will return the error_mark_node (rather
1548    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1549    Sometimes, they will return an ordinary node if error-recovery was
1550    attempted, even though a parse error occurred.  So, to check
1551    whether or not a parse error occurred, you should always use
1552    cp_parser_error_occurred.  If the construct is optional (indicated
1553    either by an `_opt' in the name of the function that does the
1554    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1555    the construct is not present.  */
1556
1557 /* Lexical conventions [gram.lex]  */
1558
1559 static tree cp_parser_identifier
1560   (cp_parser *);
1561 static tree cp_parser_string_literal
1562   (cp_parser *, bool, bool);
1563
1564 /* Basic concepts [gram.basic]  */
1565
1566 static bool cp_parser_translation_unit
1567   (cp_parser *);
1568
1569 /* Expressions [gram.expr]  */
1570
1571 static tree cp_parser_primary_expression
1572   (cp_parser *, bool, bool, bool, cp_id_kind *);
1573 static tree cp_parser_id_expression
1574   (cp_parser *, bool, bool, bool *, bool, bool);
1575 static tree cp_parser_unqualified_id
1576   (cp_parser *, bool, bool, bool, bool);
1577 static tree cp_parser_nested_name_specifier_opt
1578   (cp_parser *, bool, bool, bool, bool);
1579 static tree cp_parser_nested_name_specifier
1580   (cp_parser *, bool, bool, bool, bool);
1581 static tree cp_parser_class_or_namespace_name
1582   (cp_parser *, bool, bool, bool, bool, bool);
1583 static tree cp_parser_postfix_expression
1584   (cp_parser *, bool, bool, bool);
1585 static tree cp_parser_postfix_open_square_expression
1586   (cp_parser *, tree, bool);
1587 static tree cp_parser_postfix_dot_deref_expression
1588   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *);
1589 static tree cp_parser_parenthesized_expression_list
1590   (cp_parser *, bool, bool, bool, bool *);
1591 static void cp_parser_pseudo_destructor_name
1592   (cp_parser *, tree *, tree *);
1593 static tree cp_parser_unary_expression
1594   (cp_parser *, bool, bool);
1595 static enum tree_code cp_parser_unary_operator
1596   (cp_token *);
1597 static tree cp_parser_new_expression
1598   (cp_parser *);
1599 static tree cp_parser_new_placement
1600   (cp_parser *);
1601 static tree cp_parser_new_type_id
1602   (cp_parser *, tree *);
1603 static cp_declarator *cp_parser_new_declarator_opt
1604   (cp_parser *);
1605 static cp_declarator *cp_parser_direct_new_declarator
1606   (cp_parser *);
1607 static tree cp_parser_new_initializer
1608   (cp_parser *);
1609 static tree cp_parser_delete_expression
1610   (cp_parser *);
1611 static tree cp_parser_cast_expression
1612   (cp_parser *, bool, bool);
1613 static tree cp_parser_binary_expression
1614   (cp_parser *, bool);
1615 static tree cp_parser_question_colon_clause
1616   (cp_parser *, tree);
1617 static tree cp_parser_assignment_expression
1618   (cp_parser *, bool);
1619 static enum tree_code cp_parser_assignment_operator_opt
1620   (cp_parser *);
1621 static tree cp_parser_expression
1622   (cp_parser *, bool);
1623 static tree cp_parser_constant_expression
1624   (cp_parser *, bool, bool *);
1625 static tree cp_parser_builtin_offsetof
1626   (cp_parser *);
1627
1628 /* Statements [gram.stmt.stmt]  */
1629
1630 static void cp_parser_statement
1631   (cp_parser *, tree, bool, bool *);
1632 static void cp_parser_label_for_labeled_statement
1633   (cp_parser *);
1634 static tree cp_parser_expression_statement
1635   (cp_parser *, tree);
1636 static tree cp_parser_compound_statement
1637   (cp_parser *, tree, bool);
1638 static void cp_parser_statement_seq_opt
1639   (cp_parser *, tree);
1640 static tree cp_parser_selection_statement
1641   (cp_parser *, bool *);
1642 static tree cp_parser_condition
1643   (cp_parser *);
1644 static tree cp_parser_iteration_statement
1645   (cp_parser *);
1646 static void cp_parser_for_init_statement
1647   (cp_parser *);
1648 static tree cp_parser_jump_statement
1649   (cp_parser *);
1650 static void cp_parser_declaration_statement
1651   (cp_parser *);
1652
1653 static tree cp_parser_implicitly_scoped_statement
1654   (cp_parser *, bool *);
1655 static void cp_parser_already_scoped_statement
1656   (cp_parser *);
1657
1658 /* Declarations [gram.dcl.dcl] */
1659
1660 static void cp_parser_declaration_seq_opt
1661   (cp_parser *);
1662 static void cp_parser_declaration
1663   (cp_parser *);
1664 static void cp_parser_block_declaration
1665   (cp_parser *, bool);
1666 static void cp_parser_simple_declaration
1667   (cp_parser *, bool);
1668 static void cp_parser_decl_specifier_seq
1669   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1670 static tree cp_parser_storage_class_specifier_opt
1671   (cp_parser *);
1672 static tree cp_parser_function_specifier_opt
1673   (cp_parser *, cp_decl_specifier_seq *);
1674 static tree cp_parser_type_specifier
1675   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1676    int *, bool *);
1677 static tree cp_parser_simple_type_specifier
1678   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1679 static tree cp_parser_type_name
1680   (cp_parser *);
1681 static tree cp_parser_nonclass_name 
1682   (cp_parser* parser);
1683 static tree cp_parser_elaborated_type_specifier
1684   (cp_parser *, bool, bool);
1685 static tree cp_parser_enum_specifier
1686   (cp_parser *);
1687 static void cp_parser_enumerator_list
1688   (cp_parser *, tree);
1689 static void cp_parser_enumerator_definition
1690   (cp_parser *, tree);
1691 static tree cp_parser_namespace_name
1692   (cp_parser *);
1693 static void cp_parser_namespace_definition
1694   (cp_parser *);
1695 static void cp_parser_namespace_body
1696   (cp_parser *);
1697 static tree cp_parser_qualified_namespace_specifier
1698   (cp_parser *);
1699 static void cp_parser_namespace_alias_definition
1700   (cp_parser *);
1701 static bool cp_parser_using_declaration
1702   (cp_parser *, bool);
1703 static void cp_parser_using_directive
1704   (cp_parser *);
1705 static void cp_parser_asm_definition
1706   (cp_parser *);
1707 static void cp_parser_linkage_specification
1708   (cp_parser *);
1709 static void cp_parser_static_assert
1710   (cp_parser *, bool);
1711 static tree cp_parser_decltype
1712   (cp_parser *);
1713
1714 /* Declarators [gram.dcl.decl] */
1715
1716 static tree cp_parser_init_declarator
1717   (cp_parser *, cp_decl_specifier_seq *, VEC (deferred_access_check,gc)*, bool, bool, int, bool *);
1718 static cp_declarator *cp_parser_declarator
1719   (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1720 static cp_declarator *cp_parser_direct_declarator
1721   (cp_parser *, cp_parser_declarator_kind, int *, bool);
1722 static enum tree_code cp_parser_ptr_operator
1723   (cp_parser *, tree *, cp_cv_quals *);
1724 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1725   (cp_parser *);
1726 static tree cp_parser_declarator_id
1727   (cp_parser *, bool);
1728 static tree cp_parser_type_id
1729   (cp_parser *);
1730 static void cp_parser_type_specifier_seq
1731   (cp_parser *, bool, cp_decl_specifier_seq *);
1732 static cp_parameter_declarator *cp_parser_parameter_declaration_clause
1733   (cp_parser *);
1734 static cp_parameter_declarator *cp_parser_parameter_declaration_list
1735   (cp_parser *, bool *);
1736 static cp_parameter_declarator *cp_parser_parameter_declaration
1737   (cp_parser *, bool, bool *);
1738 static tree cp_parser_default_argument 
1739   (cp_parser *, bool);
1740 static void cp_parser_function_body
1741   (cp_parser *);
1742 static tree cp_parser_initializer
1743   (cp_parser *, bool *, bool *);
1744 static tree cp_parser_initializer_clause
1745   (cp_parser *, bool *);
1746 static VEC(constructor_elt,gc) *cp_parser_initializer_list
1747   (cp_parser *, bool *);
1748
1749 static bool cp_parser_ctor_initializer_opt_and_function_body
1750   (cp_parser *);
1751
1752 /* Classes [gram.class] */
1753
1754 static tree cp_parser_class_name
1755   (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
1756 static tree cp_parser_class_specifier
1757   (cp_parser *);
1758 static tree cp_parser_class_head
1759   (cp_parser *, bool *, tree *, tree *);
1760 static enum tag_types cp_parser_class_key
1761   (cp_parser *);
1762 static void cp_parser_member_specification_opt
1763   (cp_parser *);
1764 static void cp_parser_member_declaration
1765   (cp_parser *);
1766 static tree cp_parser_pure_specifier
1767   (cp_parser *);
1768 static tree cp_parser_constant_initializer
1769   (cp_parser *);
1770
1771 /* Derived classes [gram.class.derived] */
1772
1773 static tree cp_parser_base_clause
1774   (cp_parser *);
1775 static tree cp_parser_base_specifier
1776   (cp_parser *);
1777
1778 /* Special member functions [gram.special] */
1779
1780 static tree cp_parser_conversion_function_id
1781   (cp_parser *);
1782 static tree cp_parser_conversion_type_id
1783   (cp_parser *);
1784 static cp_declarator *cp_parser_conversion_declarator_opt
1785   (cp_parser *);
1786 static bool cp_parser_ctor_initializer_opt
1787   (cp_parser *);
1788 static void cp_parser_mem_initializer_list
1789   (cp_parser *);
1790 static tree cp_parser_mem_initializer
1791   (cp_parser *);
1792 static tree cp_parser_mem_initializer_id
1793   (cp_parser *);
1794
1795 /* Overloading [gram.over] */
1796
1797 static tree cp_parser_operator_function_id
1798   (cp_parser *);
1799 static tree cp_parser_operator
1800   (cp_parser *);
1801
1802 /* Templates [gram.temp] */
1803
1804 static void cp_parser_template_declaration
1805   (cp_parser *, bool);
1806 static tree cp_parser_template_parameter_list
1807   (cp_parser *);
1808 static tree cp_parser_template_parameter
1809   (cp_parser *, bool *, bool *);
1810 static tree cp_parser_type_parameter
1811   (cp_parser *, bool *);
1812 static tree cp_parser_template_id
1813   (cp_parser *, bool, bool, bool);
1814 static tree cp_parser_template_name
1815   (cp_parser *, bool, bool, bool, bool *);
1816 static tree cp_parser_template_argument_list
1817   (cp_parser *);
1818 static tree cp_parser_template_argument
1819   (cp_parser *);
1820 static void cp_parser_explicit_instantiation
1821   (cp_parser *);
1822 static void cp_parser_explicit_specialization
1823   (cp_parser *);
1824
1825 /* Exception handling [gram.exception] */
1826
1827 static tree cp_parser_try_block
1828   (cp_parser *);
1829 static bool cp_parser_function_try_block
1830   (cp_parser *);
1831 static void cp_parser_handler_seq
1832   (cp_parser *);
1833 static void cp_parser_handler
1834   (cp_parser *);
1835 static tree cp_parser_exception_declaration
1836   (cp_parser *);
1837 static tree cp_parser_throw_expression
1838   (cp_parser *);
1839 static tree cp_parser_exception_specification_opt
1840   (cp_parser *);
1841 static tree cp_parser_type_id_list
1842   (cp_parser *);
1843
1844 /* GNU Extensions */
1845
1846 static tree cp_parser_asm_specification_opt
1847   (cp_parser *);
1848 static tree cp_parser_asm_operand_list
1849   (cp_parser *);
1850 static tree cp_parser_asm_clobber_list
1851   (cp_parser *);
1852 static tree cp_parser_attributes_opt
1853   (cp_parser *);
1854 static tree cp_parser_attribute_list
1855   (cp_parser *);
1856 static bool cp_parser_extension_opt
1857   (cp_parser *, int *);
1858 static void cp_parser_label_declaration
1859   (cp_parser *);
1860
1861 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1862 static bool cp_parser_pragma
1863   (cp_parser *, enum pragma_context);
1864
1865 /* Objective-C++ Productions */
1866
1867 static tree cp_parser_objc_message_receiver
1868   (cp_parser *);
1869 static tree cp_parser_objc_message_args
1870   (cp_parser *);
1871 static tree cp_parser_objc_message_expression
1872   (cp_parser *);
1873 static tree cp_parser_objc_encode_expression
1874   (cp_parser *);
1875 static tree cp_parser_objc_defs_expression
1876   (cp_parser *);
1877 static tree cp_parser_objc_protocol_expression
1878   (cp_parser *);
1879 static tree cp_parser_objc_selector_expression
1880   (cp_parser *);
1881 static tree cp_parser_objc_expression
1882   (cp_parser *);
1883 static bool cp_parser_objc_selector_p
1884   (enum cpp_ttype);
1885 static tree cp_parser_objc_selector
1886   (cp_parser *);
1887 static tree cp_parser_objc_protocol_refs_opt
1888   (cp_parser *);
1889 static void cp_parser_objc_declaration
1890   (cp_parser *);
1891 static tree cp_parser_objc_statement
1892   (cp_parser *);
1893
1894 /* Utility Routines */
1895
1896 static tree cp_parser_lookup_name
1897   (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *);
1898 static tree cp_parser_lookup_name_simple
1899   (cp_parser *, tree);
1900 static tree cp_parser_maybe_treat_template_as_class
1901   (tree, bool);
1902 static bool cp_parser_check_declarator_template_parameters
1903   (cp_parser *, cp_declarator *);
1904 static bool cp_parser_check_template_parameters
1905   (cp_parser *, unsigned);
1906 static tree cp_parser_simple_cast_expression
1907   (cp_parser *);
1908 static tree cp_parser_global_scope_opt
1909   (cp_parser *, bool);
1910 static bool cp_parser_constructor_declarator_p
1911   (cp_parser *, bool);
1912 static tree cp_parser_function_definition_from_specifiers_and_declarator
1913   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1914 static tree cp_parser_function_definition_after_declarator
1915   (cp_parser *, bool);
1916 static void cp_parser_template_declaration_after_export
1917   (cp_parser *, bool);
1918 static void cp_parser_perform_template_parameter_access_checks
1919   (VEC (deferred_access_check,gc)*);
1920 static tree cp_parser_single_declaration
1921   (cp_parser *, VEC (deferred_access_check,gc)*, bool, bool, bool *);
1922 static tree cp_parser_functional_cast
1923   (cp_parser *, tree);
1924 static tree cp_parser_save_member_function_body
1925   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1926 static tree cp_parser_enclosed_template_argument_list
1927   (cp_parser *);
1928 static void cp_parser_save_default_args
1929   (cp_parser *, tree);
1930 static void cp_parser_late_parsing_for_member
1931   (cp_parser *, tree);
1932 static void cp_parser_late_parsing_default_args
1933   (cp_parser *, tree);
1934 static tree cp_parser_sizeof_operand
1935   (cp_parser *, enum rid);
1936 static tree cp_parser_trait_expr
1937   (cp_parser *, enum rid);
1938 static bool cp_parser_declares_only_class_p
1939   (cp_parser *);
1940 static void cp_parser_set_storage_class
1941   (cp_parser *, cp_decl_specifier_seq *, enum rid);
1942 static void cp_parser_set_decl_spec_type
1943   (cp_decl_specifier_seq *, tree, bool);
1944 static bool cp_parser_friend_p
1945   (const cp_decl_specifier_seq *);
1946 static cp_token *cp_parser_require
1947   (cp_parser *, enum cpp_ttype, const char *);
1948 static cp_token *cp_parser_require_keyword
1949   (cp_parser *, enum rid, const char *);
1950 static bool cp_parser_token_starts_function_definition_p
1951   (cp_token *);
1952 static bool cp_parser_next_token_starts_class_definition_p
1953   (cp_parser *);
1954 static bool cp_parser_next_token_ends_template_argument_p
1955   (cp_parser *);
1956 static bool cp_parser_nth_token_starts_template_argument_list_p
1957   (cp_parser *, size_t);
1958 static enum tag_types cp_parser_token_is_class_key
1959   (cp_token *);
1960 static void cp_parser_check_class_key
1961   (enum tag_types, tree type);
1962 static void cp_parser_check_access_in_redeclaration
1963   (tree type);
1964 static bool cp_parser_optional_template_keyword
1965   (cp_parser *);
1966 static void cp_parser_pre_parsed_nested_name_specifier
1967   (cp_parser *);
1968 static void cp_parser_cache_group
1969   (cp_parser *, enum cpp_ttype, unsigned);
1970 static void cp_parser_parse_tentatively
1971   (cp_parser *);
1972 static void cp_parser_commit_to_tentative_parse
1973   (cp_parser *);
1974 static void cp_parser_abort_tentative_parse
1975   (cp_parser *);
1976 static bool cp_parser_parse_definitely
1977   (cp_parser *);
1978 static inline bool cp_parser_parsing_tentatively
1979   (cp_parser *);
1980 static bool cp_parser_uncommitted_to_tentative_parse_p
1981   (cp_parser *);
1982 static void cp_parser_error
1983   (cp_parser *, const char *);
1984 static void cp_parser_name_lookup_error
1985   (cp_parser *, tree, tree, const char *);
1986 static bool cp_parser_simulate_error
1987   (cp_parser *);
1988 static bool cp_parser_check_type_definition
1989   (cp_parser *);
1990 static void cp_parser_check_for_definition_in_return_type
1991   (cp_declarator *, tree);
1992 static void cp_parser_check_for_invalid_template_id
1993   (cp_parser *, tree);
1994 static bool cp_parser_non_integral_constant_expression
1995   (cp_parser *, const char *);
1996 static void cp_parser_diagnose_invalid_type_name
1997   (cp_parser *, tree, tree);
1998 static bool cp_parser_parse_and_diagnose_invalid_type_name
1999   (cp_parser *);
2000 static int cp_parser_skip_to_closing_parenthesis
2001   (cp_parser *, bool, bool, bool);
2002 static void cp_parser_skip_to_end_of_statement
2003   (cp_parser *);
2004 static void cp_parser_consume_semicolon_at_end_of_statement
2005   (cp_parser *);
2006 static void cp_parser_skip_to_end_of_block_or_statement
2007   (cp_parser *);
2008 static bool cp_parser_skip_to_closing_brace
2009   (cp_parser *);
2010 static void cp_parser_skip_to_end_of_template_parameter_list
2011   (cp_parser *);
2012 static void cp_parser_skip_to_pragma_eol
2013   (cp_parser*, cp_token *);
2014 static bool cp_parser_error_occurred
2015   (cp_parser *);
2016 static bool cp_parser_allow_gnu_extensions_p
2017   (cp_parser *);
2018 static bool cp_parser_is_string_literal
2019   (cp_token *);
2020 static bool cp_parser_is_keyword
2021   (cp_token *, enum rid);
2022 static tree cp_parser_make_typename_type
2023   (cp_parser *, tree, tree);
2024 static cp_declarator * cp_parser_make_indirect_declarator
2025   (enum tree_code, tree, cp_cv_quals, cp_declarator *);
2026
2027 /* Returns nonzero if we are parsing tentatively.  */
2028
2029 static inline bool
2030 cp_parser_parsing_tentatively (cp_parser* parser)
2031 {
2032   return parser->context->next != NULL;
2033 }
2034
2035 /* Returns nonzero if TOKEN is a string literal.  */
2036
2037 static bool
2038 cp_parser_is_string_literal (cp_token* token)
2039 {
2040   return (token->type == CPP_STRING ||
2041           token->type == CPP_STRING16 ||
2042           token->type == CPP_STRING32 ||
2043           token->type == CPP_WSTRING);
2044 }
2045
2046 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
2047
2048 static bool
2049 cp_parser_is_keyword (cp_token* token, enum rid keyword)
2050 {
2051   return token->keyword == keyword;
2052 }
2053
2054 /* If not parsing tentatively, issue a diagnostic of the form
2055       FILE:LINE: MESSAGE before TOKEN
2056    where TOKEN is the next token in the input stream.  MESSAGE
2057    (specified by the caller) is usually of the form "expected
2058    OTHER-TOKEN".  */
2059
2060 static void
2061 cp_parser_error (cp_parser* parser, const char* message)
2062 {
2063   if (!cp_parser_simulate_error (parser))
2064     {
2065       cp_token *token = cp_lexer_peek_token (parser->lexer);
2066       /* This diagnostic makes more sense if it is tagged to the line
2067          of the token we just peeked at.  */
2068       cp_lexer_set_source_position_from_token (token);
2069
2070       if (token->type == CPP_PRAGMA)
2071         {
2072           error ("%<#pragma%> is not allowed here");
2073           cp_parser_skip_to_pragma_eol (parser, token);
2074           return;
2075         }
2076
2077       c_parse_error (message,
2078                      /* Because c_parser_error does not understand
2079                         CPP_KEYWORD, keywords are treated like
2080                         identifiers.  */
2081                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
2082                      token->u.value);
2083     }
2084 }
2085
2086 /* Issue an error about name-lookup failing.  NAME is the
2087    IDENTIFIER_NODE DECL is the result of
2088    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
2089    the thing that we hoped to find.  */
2090
2091 static void
2092 cp_parser_name_lookup_error (cp_parser* parser,
2093                              tree name,
2094                              tree decl,
2095                              const char* desired)
2096 {
2097   /* If name lookup completely failed, tell the user that NAME was not
2098      declared.  */
2099   if (decl == error_mark_node)
2100     {
2101       if (parser->scope && parser->scope != global_namespace)
2102         error ("%<%E::%E%> has not been declared",
2103                parser->scope, name);
2104       else if (parser->scope == global_namespace)
2105         error ("%<::%E%> has not been declared", name);
2106       else if (parser->object_scope
2107                && !CLASS_TYPE_P (parser->object_scope))
2108         error ("request for member %qE in non-class type %qT",
2109                name, parser->object_scope);
2110       else if (parser->object_scope)
2111         error ("%<%T::%E%> has not been declared",
2112                parser->object_scope, name);
2113       else
2114         error ("%qE has not been declared", name);
2115     }
2116   else if (parser->scope && parser->scope != global_namespace)
2117     error ("%<%E::%E%> %s", parser->scope, name, desired);
2118   else if (parser->scope == global_namespace)
2119     error ("%<::%E%> %s", name, desired);
2120   else
2121     error ("%qE %s", name, desired);
2122 }
2123
2124 /* If we are parsing tentatively, remember that an error has occurred
2125    during this tentative parse.  Returns true if the error was
2126    simulated; false if a message should be issued by the caller.  */
2127
2128 static bool
2129 cp_parser_simulate_error (cp_parser* parser)
2130 {
2131   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2132     {
2133       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2134       return true;
2135     }
2136   return false;
2137 }
2138
2139 /* Check for repeated decl-specifiers.  */
2140
2141 static void
2142 cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs)
2143 {
2144   cp_decl_spec ds;
2145
2146   for (ds = ds_first; ds != ds_last; ++ds)
2147     {
2148       unsigned count = decl_specs->specs[(int)ds];
2149       if (count < 2)
2150         continue;
2151       /* The "long" specifier is a special case because of "long long".  */
2152       if (ds == ds_long)
2153         {
2154           if (count > 2)
2155             error ("%<long long long%> is too long for GCC");
2156           else if (pedantic && !in_system_header && warn_long_long
2157                    && cxx_dialect == cxx98)
2158             pedwarn ("ISO C++ 1998 does not support %<long long%>");
2159         }
2160       else if (count > 1)
2161         {
2162           static const char *const decl_spec_names[] = {
2163             "signed",
2164             "unsigned",
2165             "short",
2166             "long",
2167             "const",
2168             "volatile",
2169             "restrict",
2170             "inline",
2171             "virtual",
2172             "explicit",
2173             "friend",
2174             "typedef",
2175             "__complex",
2176             "__thread"
2177           };
2178           error ("duplicate %qs", decl_spec_names[(int)ds]);
2179         }
2180     }
2181 }
2182
2183 /* This function is called when a type is defined.  If type
2184    definitions are forbidden at this point, an error message is
2185    issued.  */
2186
2187 static bool
2188 cp_parser_check_type_definition (cp_parser* parser)
2189 {
2190   /* If types are forbidden here, issue a message.  */
2191   if (parser->type_definition_forbidden_message)
2192     {
2193       /* Don't use `%s' to print the string, because quotations (`%<', `%>')
2194          in the message need to be interpreted.  */
2195       error (parser->type_definition_forbidden_message);
2196       return false;
2197     }
2198   return true;
2199 }
2200
2201 /* This function is called when the DECLARATOR is processed.  The TYPE
2202    was a type defined in the decl-specifiers.  If it is invalid to
2203    define a type in the decl-specifiers for DECLARATOR, an error is
2204    issued.  */
2205
2206 static void
2207 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2208                                                tree type)
2209 {
2210   /* [dcl.fct] forbids type definitions in return types.
2211      Unfortunately, it's not easy to know whether or not we are
2212      processing a return type until after the fact.  */
2213   while (declarator
2214          && (declarator->kind == cdk_pointer
2215              || declarator->kind == cdk_reference
2216              || declarator->kind == cdk_ptrmem))
2217     declarator = declarator->declarator;
2218   if (declarator
2219       && declarator->kind == cdk_function)
2220     {
2221       error ("new types may not be defined in a return type");
2222       inform ("(perhaps a semicolon is missing after the definition of %qT)",
2223               type);
2224     }
2225 }
2226
2227 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2228    "<" in any valid C++ program.  If the next token is indeed "<",
2229    issue a message warning the user about what appears to be an
2230    invalid attempt to form a template-id.  */
2231
2232 static void
2233 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2234                                          tree type)
2235 {
2236   cp_token_position start = 0;
2237
2238   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2239     {
2240       if (TYPE_P (type))
2241         error ("%qT is not a template", type);
2242       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2243         error ("%qE is not a template", type);
2244       else
2245         error ("invalid template-id");
2246       /* Remember the location of the invalid "<".  */
2247       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2248         start = cp_lexer_token_position (parser->lexer, true);
2249       /* Consume the "<".  */
2250       cp_lexer_consume_token (parser->lexer);
2251       /* Parse the template arguments.  */
2252       cp_parser_enclosed_template_argument_list (parser);
2253       /* Permanently remove the invalid template arguments so that
2254          this error message is not issued again.  */
2255       if (start)
2256         cp_lexer_purge_tokens_after (parser->lexer, start);
2257     }
2258 }
2259
2260 /* If parsing an integral constant-expression, issue an error message
2261    about the fact that THING appeared and return true.  Otherwise,
2262    return false.  In either case, set
2263    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2264
2265 static bool
2266 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2267                                             const char *thing)
2268 {
2269   parser->non_integral_constant_expression_p = true;
2270   if (parser->integral_constant_expression_p)
2271     {
2272       if (!parser->allow_non_integral_constant_expression_p)
2273         {
2274           /* Don't use `%s' to print THING, because quotations (`%<', `%>')
2275              in the message need to be interpreted.  */
2276           char *message = concat (thing,
2277                                   " cannot appear in a constant-expression",
2278                                   NULL);
2279           error (message);
2280           free (message);
2281           return true;
2282         }
2283     }
2284   return false;
2285 }
2286
2287 /* Emit a diagnostic for an invalid type name.  SCOPE is the
2288    qualifying scope (or NULL, if none) for ID.  This function commits
2289    to the current active tentative parse, if any.  (Otherwise, the
2290    problematic construct might be encountered again later, resulting
2291    in duplicate error messages.)  */
2292
2293 static void
2294 cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
2295 {
2296   tree decl, old_scope;
2297   /* Try to lookup the identifier.  */
2298   old_scope = parser->scope;
2299   parser->scope = scope;
2300   decl = cp_parser_lookup_name_simple (parser, id);
2301   parser->scope = old_scope;
2302   /* If the lookup found a template-name, it means that the user forgot
2303   to specify an argument list. Emit a useful error message.  */
2304   if (TREE_CODE (decl) == TEMPLATE_DECL)
2305     error ("invalid use of template-name %qE without an argument list", decl);
2306   else if (TREE_CODE (id) == BIT_NOT_EXPR)
2307     error ("invalid use of destructor %qD as a type", id);
2308   else if (TREE_CODE (decl) == TYPE_DECL)
2309     /* Something like 'unsigned A a;'  */
2310     error ("invalid combination of multiple type-specifiers");
2311   else if (!parser->scope)
2312     {
2313       /* Issue an error message.  */
2314       error ("%qE does not name a type", id);
2315       /* If we're in a template class, it's possible that the user was
2316          referring to a type from a base class.  For example:
2317
2318            template <typename T> struct A { typedef T X; };
2319            template <typename T> struct B : public A<T> { X x; };
2320
2321          The user should have said "typename A<T>::X".  */
2322       if (processing_template_decl && current_class_type
2323           && TYPE_BINFO (current_class_type))
2324         {
2325           tree b;
2326
2327           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2328                b;
2329                b = TREE_CHAIN (b))
2330             {
2331               tree base_type = BINFO_TYPE (b);
2332               if (CLASS_TYPE_P (base_type)
2333                   && dependent_type_p (base_type))
2334                 {
2335                   tree field;
2336                   /* Go from a particular instantiation of the
2337                      template (which will have an empty TYPE_FIELDs),
2338                      to the main version.  */
2339                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2340                   for (field = TYPE_FIELDS (base_type);
2341                        field;
2342                        field = TREE_CHAIN (field))
2343                     if (TREE_CODE (field) == TYPE_DECL
2344                         && DECL_NAME (field) == id)
2345                       {
2346                         inform ("(perhaps %<typename %T::%E%> was intended)",
2347                                 BINFO_TYPE (b), id);
2348                         break;
2349                       }
2350                   if (field)
2351                     break;
2352                 }
2353             }
2354         }
2355     }
2356   /* Here we diagnose qualified-ids where the scope is actually correct,
2357      but the identifier does not resolve to a valid type name.  */
2358   else if (parser->scope != error_mark_node)
2359     {
2360       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2361         error ("%qE in namespace %qE does not name a type",
2362                id, parser->scope);
2363       else if (TYPE_P (parser->scope))
2364         error ("%qE in class %qT does not name a type", id, parser->scope);
2365       else
2366         gcc_unreachable ();
2367     }
2368   cp_parser_commit_to_tentative_parse (parser);
2369 }
2370
2371 /* Check for a common situation where a type-name should be present,
2372    but is not, and issue a sensible error message.  Returns true if an
2373    invalid type-name was detected.
2374
2375    The situation handled by this function are variable declarations of the
2376    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2377    Usually, `ID' should name a type, but if we got here it means that it
2378    does not. We try to emit the best possible error message depending on
2379    how exactly the id-expression looks like.  */
2380
2381 static bool
2382 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2383 {
2384   tree id;
2385
2386   cp_parser_parse_tentatively (parser);
2387   id = cp_parser_id_expression (parser,
2388                                 /*template_keyword_p=*/false,
2389                                 /*check_dependency_p=*/true,
2390                                 /*template_p=*/NULL,
2391                                 /*declarator_p=*/true,
2392                                 /*optional_p=*/false);
2393   /* After the id-expression, there should be a plain identifier,
2394      otherwise this is not a simple variable declaration. Also, if
2395      the scope is dependent, we cannot do much.  */
2396   if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2397       || (parser->scope && TYPE_P (parser->scope)
2398           && dependent_type_p (parser->scope))
2399       || TREE_CODE (id) == TYPE_DECL)
2400     {
2401       cp_parser_abort_tentative_parse (parser);
2402       return false;
2403     }
2404   if (!cp_parser_parse_definitely (parser))
2405     return false;
2406
2407   /* Emit a diagnostic for the invalid type.  */
2408   cp_parser_diagnose_invalid_type_name (parser, parser->scope, id);
2409   /* Skip to the end of the declaration; there's no point in
2410      trying to process it.  */
2411   cp_parser_skip_to_end_of_block_or_statement (parser);
2412   return true;
2413 }
2414
2415 /* Consume tokens up to, and including, the next non-nested closing `)'.
2416    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2417    are doing error recovery. Returns -1 if OR_COMMA is true and we
2418    found an unnested comma.  */
2419
2420 static int
2421 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2422                                        bool recovering,
2423                                        bool or_comma,
2424                                        bool consume_paren)
2425 {
2426   unsigned paren_depth = 0;
2427   unsigned brace_depth = 0;
2428
2429   if (recovering && !or_comma
2430       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2431     return 0;
2432
2433   while (true)
2434     {
2435       cp_token * token = cp_lexer_peek_token (parser->lexer);
2436
2437       switch (token->type)
2438         {
2439         case CPP_EOF:
2440         case CPP_PRAGMA_EOL:
2441           /* If we've run out of tokens, then there is no closing `)'.  */
2442           return 0;
2443
2444         case CPP_SEMICOLON:
2445           /* This matches the processing in skip_to_end_of_statement.  */
2446           if (!brace_depth)
2447             return 0;
2448           break;
2449
2450         case CPP_OPEN_BRACE:
2451           ++brace_depth;
2452           break;
2453         case CPP_CLOSE_BRACE:
2454           if (!brace_depth--)
2455             return 0;
2456           break;
2457
2458         case CPP_COMMA:
2459           if (recovering && or_comma && !brace_depth && !paren_depth)
2460             return -1;
2461           break;
2462
2463         case CPP_OPEN_PAREN:
2464           if (!brace_depth)
2465             ++paren_depth;
2466           break;
2467
2468         case CPP_CLOSE_PAREN:
2469           if (!brace_depth && !paren_depth--)
2470             {
2471               if (consume_paren)
2472                 cp_lexer_consume_token (parser->lexer);
2473               return 1;
2474             }
2475           break;
2476
2477         default:
2478           break;
2479         }
2480
2481       /* Consume the token.  */
2482       cp_lexer_consume_token (parser->lexer);
2483     }
2484 }
2485
2486 /* Consume tokens until we reach the end of the current statement.
2487    Normally, that will be just before consuming a `;'.  However, if a
2488    non-nested `}' comes first, then we stop before consuming that.  */
2489
2490 static void
2491 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2492 {
2493   unsigned nesting_depth = 0;
2494
2495   while (true)
2496     {
2497       cp_token *token = cp_lexer_peek_token (parser->lexer);
2498
2499       switch (token->type)
2500         {
2501         case CPP_EOF:
2502         case CPP_PRAGMA_EOL:
2503           /* If we've run out of tokens, stop.  */
2504           return;
2505
2506         case CPP_SEMICOLON:
2507           /* If the next token is a `;', we have reached the end of the
2508              statement.  */
2509           if (!nesting_depth)
2510             return;
2511           break;
2512
2513         case CPP_CLOSE_BRACE:
2514           /* If this is a non-nested '}', stop before consuming it.
2515              That way, when confronted with something like:
2516
2517                { 3 + }
2518
2519              we stop before consuming the closing '}', even though we
2520              have not yet reached a `;'.  */
2521           if (nesting_depth == 0)
2522             return;
2523
2524           /* If it is the closing '}' for a block that we have
2525              scanned, stop -- but only after consuming the token.
2526              That way given:
2527
2528                 void f g () { ... }
2529                 typedef int I;
2530
2531              we will stop after the body of the erroneously declared
2532              function, but before consuming the following `typedef'
2533              declaration.  */
2534           if (--nesting_depth == 0)
2535             {
2536               cp_lexer_consume_token (parser->lexer);
2537               return;
2538             }
2539
2540         case CPP_OPEN_BRACE:
2541           ++nesting_depth;
2542           break;
2543
2544         default:
2545           break;
2546         }
2547
2548       /* Consume the token.  */
2549       cp_lexer_consume_token (parser->lexer);
2550     }
2551 }
2552
2553 /* This function is called at the end of a statement or declaration.
2554    If the next token is a semicolon, it is consumed; otherwise, error
2555    recovery is attempted.  */
2556
2557 static void
2558 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2559 {
2560   /* Look for the trailing `;'.  */
2561   if (!cp_parser_require (parser, CPP_SEMICOLON, "%<;%>"))
2562     {
2563       /* If there is additional (erroneous) input, skip to the end of
2564          the statement.  */
2565       cp_parser_skip_to_end_of_statement (parser);
2566       /* If the next token is now a `;', consume it.  */
2567       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2568         cp_lexer_consume_token (parser->lexer);
2569     }
2570 }
2571
2572 /* Skip tokens until we have consumed an entire block, or until we
2573    have consumed a non-nested `;'.  */
2574
2575 static void
2576 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2577 {
2578   int nesting_depth = 0;
2579
2580   while (nesting_depth >= 0)
2581     {
2582       cp_token *token = cp_lexer_peek_token (parser->lexer);
2583
2584       switch (token->type)
2585         {
2586         case CPP_EOF:
2587         case CPP_PRAGMA_EOL:
2588           /* If we've run out of tokens, stop.  */
2589           return;
2590
2591         case CPP_SEMICOLON:
2592           /* Stop if this is an unnested ';'. */
2593           if (!nesting_depth)
2594             nesting_depth = -1;
2595           break;
2596
2597         case CPP_CLOSE_BRACE:
2598           /* Stop if this is an unnested '}', or closes the outermost
2599              nesting level.  */
2600           nesting_depth--;
2601           if (!nesting_depth)
2602             nesting_depth = -1;
2603           break;
2604
2605         case CPP_OPEN_BRACE:
2606           /* Nest. */
2607           nesting_depth++;
2608           break;
2609
2610         default:
2611           break;
2612         }
2613
2614       /* Consume the token.  */
2615       cp_lexer_consume_token (parser->lexer);
2616     }
2617 }
2618
2619 /* Skip tokens until a non-nested closing curly brace is the next
2620    token, or there are no more tokens. Return true in the first case,
2621    false otherwise.  */
2622
2623 static bool
2624 cp_parser_skip_to_closing_brace (cp_parser *parser)
2625 {
2626   unsigned nesting_depth = 0;
2627
2628   while (true)
2629     {
2630       cp_token *token = cp_lexer_peek_token (parser->lexer);
2631
2632       switch (token->type)
2633         {
2634         case CPP_EOF:
2635         case CPP_PRAGMA_EOL:
2636           /* If we've run out of tokens, stop.  */
2637           return false;
2638
2639         case CPP_CLOSE_BRACE:
2640           /* If the next token is a non-nested `}', then we have reached
2641              the end of the current block.  */
2642           if (nesting_depth-- == 0)
2643             return true;
2644           break;
2645
2646         case CPP_OPEN_BRACE:
2647           /* If it the next token is a `{', then we are entering a new
2648              block.  Consume the entire block.  */
2649           ++nesting_depth;
2650           break;
2651
2652         default:
2653           break;
2654         }
2655
2656       /* Consume the token.  */
2657       cp_lexer_consume_token (parser->lexer);
2658     }
2659 }
2660
2661 /* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
2662    parameter is the PRAGMA token, allowing us to purge the entire pragma
2663    sequence.  */
2664
2665 static void
2666 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
2667 {
2668   cp_token *token;
2669
2670   parser->lexer->in_pragma = false;
2671
2672   do
2673     token = cp_lexer_consume_token (parser->lexer);
2674   while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
2675
2676   /* Ensure that the pragma is not parsed again.  */
2677   cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
2678 }
2679
2680 /* Require pragma end of line, resyncing with it as necessary.  The
2681    arguments are as for cp_parser_skip_to_pragma_eol.  */
2682
2683 static void
2684 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
2685 {
2686   parser->lexer->in_pragma = false;
2687   if (!cp_parser_require (parser, CPP_PRAGMA_EOL, "end of line"))
2688     cp_parser_skip_to_pragma_eol (parser, pragma_tok);
2689 }
2690
2691 /* This is a simple wrapper around make_typename_type. When the id is
2692    an unresolved identifier node, we can provide a superior diagnostic
2693    using cp_parser_diagnose_invalid_type_name.  */
2694
2695 static tree
2696 cp_parser_make_typename_type (cp_parser *parser, tree scope, tree id)
2697 {
2698   tree result;
2699   if (TREE_CODE (id) == IDENTIFIER_NODE)
2700     {
2701       result = make_typename_type (scope, id, typename_type,
2702                                    /*complain=*/tf_none);
2703       if (result == error_mark_node)
2704         cp_parser_diagnose_invalid_type_name (parser, scope, id);
2705       return result;
2706     }
2707   return make_typename_type (scope, id, typename_type, tf_error);
2708 }
2709
2710 /* This is a wrapper around the
2711    make_{pointer,ptrmem,reference}_declarator functions that decides
2712    which one to call based on the CODE and CLASS_TYPE arguments. The
2713    CODE argument should be one of the values returned by
2714    cp_parser_ptr_operator. */
2715 static cp_declarator *
2716 cp_parser_make_indirect_declarator (enum tree_code code, tree class_type,
2717                                     cp_cv_quals cv_qualifiers,
2718                                     cp_declarator *target)
2719 {
2720   if (code == ERROR_MARK)
2721     return cp_error_declarator;
2722
2723   if (code == INDIRECT_REF)
2724     if (class_type == NULL_TREE)
2725       return make_pointer_declarator (cv_qualifiers, target);
2726     else
2727       return make_ptrmem_declarator (cv_qualifiers, class_type, target);
2728   else if (code == ADDR_EXPR && class_type == NULL_TREE)
2729     return make_reference_declarator (cv_qualifiers, target, false);
2730   else if (code == NON_LVALUE_EXPR && class_type == NULL_TREE)
2731     return make_reference_declarator (cv_qualifiers, target, true);
2732   gcc_unreachable ();
2733 }
2734
2735 /* Create a new C++ parser.  */
2736
2737 static cp_parser *
2738 cp_parser_new (void)
2739 {
2740   cp_parser *parser;
2741   cp_lexer *lexer;
2742   unsigned i;
2743
2744   /* cp_lexer_new_main is called before calling ggc_alloc because
2745      cp_lexer_new_main might load a PCH file.  */
2746   lexer = cp_lexer_new_main ();
2747
2748   /* Initialize the binops_by_token so that we can get the tree
2749      directly from the token.  */
2750   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2751     binops_by_token[binops[i].token_type] = binops[i];
2752
2753   parser = GGC_CNEW (cp_parser);
2754   parser->lexer = lexer;
2755   parser->context = cp_parser_context_new (NULL);
2756
2757   /* For now, we always accept GNU extensions.  */
2758   parser->allow_gnu_extensions_p = 1;
2759
2760   /* The `>' token is a greater-than operator, not the end of a
2761      template-id.  */
2762   parser->greater_than_is_operator_p = true;
2763
2764   parser->default_arg_ok_p = true;
2765
2766   /* We are not parsing a constant-expression.  */
2767   parser->integral_constant_expression_p = false;
2768   parser->allow_non_integral_constant_expression_p = false;
2769   parser->non_integral_constant_expression_p = false;
2770
2771   /* Local variable names are not forbidden.  */
2772   parser->local_variables_forbidden_p = false;
2773
2774   /* We are not processing an `extern "C"' declaration.  */
2775   parser->in_unbraced_linkage_specification_p = false;
2776
2777   /* We are not processing a declarator.  */
2778   parser->in_declarator_p = false;
2779
2780   /* We are not processing a template-argument-list.  */
2781   parser->in_template_argument_list_p = false;
2782
2783   /* We are not in an iteration statement.  */
2784   parser->in_statement = 0;
2785
2786   /* We are not in a switch statement.  */
2787   parser->in_switch_statement_p = false;
2788
2789   /* We are not parsing a type-id inside an expression.  */
2790   parser->in_type_id_in_expr_p = false;
2791
2792   /* Declarations aren't implicitly extern "C".  */
2793   parser->implicit_extern_c = false;
2794
2795   /* String literals should be translated to the execution character set.  */
2796   parser->translate_strings_p = true;
2797
2798   /* We are not parsing a function body.  */
2799   parser->in_function_body = false;
2800
2801   /* The unparsed function queue is empty.  */
2802   parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE);
2803
2804   /* There are no classes being defined.  */
2805   parser->num_classes_being_defined = 0;
2806
2807   /* No template parameters apply.  */
2808   parser->num_template_parameter_lists = 0;
2809
2810   return parser;
2811 }
2812
2813 /* Create a cp_lexer structure which will emit the tokens in CACHE
2814    and push it onto the parser's lexer stack.  This is used for delayed
2815    parsing of in-class method bodies and default arguments, and should
2816    not be confused with tentative parsing.  */
2817 static void
2818 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
2819 {
2820   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
2821   lexer->next = parser->lexer;
2822   parser->lexer = lexer;
2823
2824   /* Move the current source position to that of the first token in the
2825      new lexer.  */
2826   cp_lexer_set_source_position_from_token (lexer->next_token);
2827 }
2828
2829 /* Pop the top lexer off the parser stack.  This is never used for the
2830    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
2831 static void
2832 cp_parser_pop_lexer (cp_parser *parser)
2833 {
2834   cp_lexer *lexer = parser->lexer;
2835   parser->lexer = lexer->next;
2836   cp_lexer_destroy (lexer);
2837
2838   /* Put the current source position back where it was before this
2839      lexer was pushed.  */
2840   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
2841 }
2842
2843 /* Lexical conventions [gram.lex]  */
2844
2845 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
2846    identifier.  */
2847
2848 static tree
2849 cp_parser_identifier (cp_parser* parser)
2850 {
2851   cp_token *token;
2852
2853   /* Look for the identifier.  */
2854   token = cp_parser_require (parser, CPP_NAME, "identifier");
2855   /* Return the value.  */
2856   return token ? token->u.value : error_mark_node;
2857 }
2858
2859 /* Parse a sequence of adjacent string constants.  Returns a
2860    TREE_STRING representing the combined, nul-terminated string
2861    constant.  If TRANSLATE is true, translate the string to the
2862    execution character set.  If WIDE_OK is true, a wide string is
2863    invalid here.
2864
2865    C++98 [lex.string] says that if a narrow string literal token is
2866    adjacent to a wide string literal token, the behavior is undefined.
2867    However, C99 6.4.5p4 says that this results in a wide string literal.
2868    We follow C99 here, for consistency with the C front end.
2869
2870    This code is largely lifted from lex_string() in c-lex.c.
2871
2872    FUTURE: ObjC++ will need to handle @-strings here.  */
2873 static tree
2874 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
2875 {
2876   tree value;
2877   size_t count;
2878   struct obstack str_ob;
2879   cpp_string str, istr, *strs;
2880   cp_token *tok;
2881   enum cpp_ttype type;
2882
2883   tok = cp_lexer_peek_token (parser->lexer);
2884   if (!cp_parser_is_string_literal (tok))
2885     {
2886       cp_parser_error (parser, "expected string-literal");
2887       return error_mark_node;
2888     }
2889
2890   type = tok->type;
2891
2892   /* Try to avoid the overhead of creating and destroying an obstack
2893      for the common case of just one string.  */
2894   if (!cp_parser_is_string_literal
2895       (cp_lexer_peek_nth_token (parser->lexer, 2)))
2896     {
2897       cp_lexer_consume_token (parser->lexer);
2898
2899       str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
2900       str.len = TREE_STRING_LENGTH (tok->u.value);
2901       count = 1;
2902
2903       strs = &str;
2904     }
2905   else
2906     {
2907       gcc_obstack_init (&str_ob);
2908       count = 0;
2909
2910       do
2911         {
2912           cp_lexer_consume_token (parser->lexer);
2913           count++;
2914           str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
2915           str.len = TREE_STRING_LENGTH (tok->u.value);
2916
2917           if (type != tok->type)
2918             {
2919               if (type == CPP_STRING)
2920                 type = tok->type;
2921               else if (tok->type != CPP_STRING)
2922                 error ("unsupported non-standard concatenation of string literals");
2923             }
2924
2925           obstack_grow (&str_ob, &str, sizeof (cpp_string));
2926
2927           tok = cp_lexer_peek_token (parser->lexer);
2928         }
2929       while (cp_parser_is_string_literal (tok));
2930
2931       strs = (cpp_string *) obstack_finish (&str_ob);
2932     }
2933
2934   if (type != CPP_STRING && !wide_ok)
2935     {
2936       cp_parser_error (parser, "a wide string is invalid in this context");
2937       type = CPP_STRING;
2938     }
2939
2940   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
2941       (parse_in, strs, count, &istr, type))
2942     {
2943       value = build_string (istr.len, (const char *)istr.text);
2944       free (CONST_CAST (unsigned char *, istr.text));
2945
2946       switch (type)
2947         {
2948         default:
2949         case CPP_STRING:
2950           TREE_TYPE (value) = char_array_type_node;
2951           break;
2952         case CPP_STRING16:
2953           TREE_TYPE (value) = char16_array_type_node;
2954           break;
2955         case CPP_STRING32:
2956           TREE_TYPE (value) = char32_array_type_node;
2957           break;
2958         case CPP_WSTRING:
2959           TREE_TYPE (value) = wchar_array_type_node;
2960           break;
2961         }
2962
2963       value = fix_string_type (value);
2964     }
2965   else
2966     /* cpp_interpret_string has issued an error.  */
2967     value = error_mark_node;
2968
2969   if (count > 1)
2970     obstack_free (&str_ob, 0);
2971
2972   return value;
2973 }
2974
2975
2976 /* Basic concepts [gram.basic]  */
2977
2978 /* Parse a translation-unit.
2979
2980    translation-unit:
2981      declaration-seq [opt]
2982
2983    Returns TRUE if all went well.  */
2984
2985 static bool
2986 cp_parser_translation_unit (cp_parser* parser)
2987 {
2988   /* The address of the first non-permanent object on the declarator
2989      obstack.  */
2990   static void *declarator_obstack_base;
2991
2992   bool success;
2993
2994   /* Create the declarator obstack, if necessary.  */
2995   if (!cp_error_declarator)
2996     {
2997       gcc_obstack_init (&declarator_obstack);
2998       /* Create the error declarator.  */
2999       cp_error_declarator = make_declarator (cdk_error);
3000       /* Create the empty parameter list.  */
3001       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
3002       /* Remember where the base of the declarator obstack lies.  */
3003       declarator_obstack_base = obstack_next_free (&declarator_obstack);
3004     }
3005
3006   cp_parser_declaration_seq_opt (parser);
3007
3008   /* If there are no tokens left then all went well.  */
3009   if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
3010     {
3011       /* Get rid of the token array; we don't need it any more.  */
3012       cp_lexer_destroy (parser->lexer);
3013       parser->lexer = NULL;
3014
3015       /* This file might have been a context that's implicitly extern
3016          "C".  If so, pop the lang context.  (Only relevant for PCH.) */
3017       if (parser->implicit_extern_c)
3018         {
3019           pop_lang_context ();
3020           parser->implicit_extern_c = false;
3021         }
3022
3023       /* Finish up.  */
3024       finish_translation_unit ();
3025
3026       success = true;
3027     }
3028   else
3029     {
3030       cp_parser_error (parser, "expected declaration");
3031       success = false;
3032     }
3033
3034   /* Make sure the declarator obstack was fully cleaned up.  */
3035   gcc_assert (obstack_next_free (&declarator_obstack)
3036               == declarator_obstack_base);
3037
3038   /* All went well.  */
3039   return success;
3040 }
3041
3042 /* Expressions [gram.expr] */
3043
3044 /* Parse a primary-expression.
3045
3046    primary-expression:
3047      literal
3048      this
3049      ( expression )
3050      id-expression
3051
3052    GNU Extensions:
3053
3054    primary-expression:
3055      ( compound-statement )
3056      __builtin_va_arg ( assignment-expression , type-id )
3057      __builtin_offsetof ( type-id , offsetof-expression )
3058
3059    C++ Extensions:
3060      __has_nothrow_assign ( type-id )   
3061      __has_nothrow_constructor ( type-id )
3062      __has_nothrow_copy ( type-id )
3063      __has_trivial_assign ( type-id )   
3064      __has_trivial_constructor ( type-id )
3065      __has_trivial_copy ( type-id )
3066      __has_trivial_destructor ( type-id )
3067      __has_virtual_destructor ( type-id )     
3068      __is_abstract ( type-id )
3069      __is_base_of ( type-id , type-id )
3070      __is_class ( type-id )
3071      __is_convertible_to ( type-id , type-id )     
3072      __is_empty ( type-id )
3073      __is_enum ( type-id )
3074      __is_pod ( type-id )
3075      __is_polymorphic ( type-id )
3076      __is_union ( type-id )
3077
3078    Objective-C++ Extension:
3079
3080    primary-expression:
3081      objc-expression
3082
3083    literal:
3084      __null
3085
3086    ADDRESS_P is true iff this expression was immediately preceded by
3087    "&" and therefore might denote a pointer-to-member.  CAST_P is true
3088    iff this expression is the target of a cast.  TEMPLATE_ARG_P is
3089    true iff this expression is a template argument.
3090
3091    Returns a representation of the expression.  Upon return, *IDK
3092    indicates what kind of id-expression (if any) was present.  */
3093
3094 static tree
3095 cp_parser_primary_expression (cp_parser *parser,
3096                               bool address_p,
3097                               bool cast_p,
3098                               bool template_arg_p,
3099                               cp_id_kind *idk)
3100 {
3101   cp_token *token;
3102
3103   /* Assume the primary expression is not an id-expression.  */
3104   *idk = CP_ID_KIND_NONE;
3105
3106   /* Peek at the next token.  */
3107   token = cp_lexer_peek_token (parser->lexer);
3108   switch (token->type)
3109     {
3110       /* literal:
3111            integer-literal
3112            character-literal
3113            floating-literal
3114            string-literal
3115            boolean-literal  */
3116     case CPP_CHAR:
3117     case CPP_CHAR16:
3118     case CPP_CHAR32:
3119     case CPP_WCHAR:
3120     case CPP_NUMBER:
3121       token = cp_lexer_consume_token (parser->lexer);
3122       /* Floating-point literals are only allowed in an integral
3123          constant expression if they are cast to an integral or
3124          enumeration type.  */
3125       if (TREE_CODE (token->u.value) == REAL_CST
3126           && parser->integral_constant_expression_p
3127           && pedantic)
3128         {
3129           /* CAST_P will be set even in invalid code like "int(2.7 +
3130              ...)".   Therefore, we have to check that the next token
3131              is sure to end the cast.  */
3132           if (cast_p)
3133             {
3134               cp_token *next_token;
3135
3136               next_token = cp_lexer_peek_token (parser->lexer);
3137               if (/* The comma at the end of an
3138                      enumerator-definition.  */
3139                   next_token->type != CPP_COMMA
3140                   /* The curly brace at the end of an enum-specifier.  */
3141                   && next_token->type != CPP_CLOSE_BRACE
3142                   /* The end of a statement.  */
3143                   && next_token->type != CPP_SEMICOLON
3144                   /* The end of the cast-expression.  */
3145                   && next_token->type != CPP_CLOSE_PAREN
3146                   /* The end of an array bound.  */
3147                   && next_token->type != CPP_CLOSE_SQUARE
3148                   /* The closing ">" in a template-argument-list.  */
3149                   && (next_token->type != CPP_GREATER
3150                       || parser->greater_than_is_operator_p)
3151                   /* C++0x only: A ">>" treated like two ">" tokens,
3152                      in a template-argument-list.  */
3153                   && (next_token->type != CPP_RSHIFT
3154                       || (cxx_dialect == cxx98)
3155                       || parser->greater_than_is_operator_p))
3156                 cast_p = false;
3157             }
3158
3159           /* If we are within a cast, then the constraint that the
3160              cast is to an integral or enumeration type will be
3161              checked at that point.  If we are not within a cast, then
3162              this code is invalid.  */
3163           if (!cast_p)
3164             cp_parser_non_integral_constant_expression
3165               (parser, "floating-point literal");
3166         }
3167       return token->u.value;
3168
3169     case CPP_STRING:
3170     case CPP_STRING16:
3171     case CPP_STRING32:
3172     case CPP_WSTRING:
3173       /* ??? Should wide strings be allowed when parser->translate_strings_p
3174          is false (i.e. in attributes)?  If not, we can kill the third
3175          argument to cp_parser_string_literal.  */
3176       return cp_parser_string_literal (parser,
3177                                        parser->translate_strings_p,
3178                                        true);
3179
3180     case CPP_OPEN_PAREN:
3181       {
3182         tree expr;
3183         bool saved_greater_than_is_operator_p;
3184
3185         /* Consume the `('.  */
3186         cp_lexer_consume_token (parser->lexer);
3187         /* Within a parenthesized expression, a `>' token is always
3188            the greater-than operator.  */
3189         saved_greater_than_is_operator_p
3190           = parser->greater_than_is_operator_p;
3191         parser->greater_than_is_operator_p = true;
3192         /* If we see `( { ' then we are looking at the beginning of
3193            a GNU statement-expression.  */
3194         if (cp_parser_allow_gnu_extensions_p (parser)
3195             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
3196           {
3197             /* Statement-expressions are not allowed by the standard.  */
3198             if (pedantic)
3199               pedwarn ("ISO C++ forbids braced-groups within expressions");
3200
3201             /* And they're not allowed outside of a function-body; you
3202                cannot, for example, write:
3203
3204                  int i = ({ int j = 3; j + 1; });
3205
3206                at class or namespace scope.  */
3207             if (!parser->in_function_body
3208                 || parser->in_template_argument_list_p)
3209               {
3210                 error ("statement-expressions are not allowed outside "
3211                        "functions nor in template-argument lists");
3212                 cp_parser_skip_to_end_of_block_or_statement (parser);
3213                 expr = error_mark_node;
3214               }
3215             else
3216               {
3217                 /* Start the statement-expression.  */
3218                 expr = begin_stmt_expr ();
3219                 /* Parse the compound-statement.  */
3220                 cp_parser_compound_statement (parser, expr, false);
3221                 /* Finish up.  */
3222                 expr = finish_stmt_expr (expr, false);
3223               }
3224           }
3225         else
3226           {
3227             /* Parse the parenthesized expression.  */
3228             expr = cp_parser_expression (parser, cast_p);
3229             /* Let the front end know that this expression was
3230                enclosed in parentheses. This matters in case, for
3231                example, the expression is of the form `A::B', since
3232                `&A::B' might be a pointer-to-member, but `&(A::B)' is
3233                not.  */
3234             finish_parenthesized_expr (expr);
3235           }
3236         /* The `>' token might be the end of a template-id or
3237            template-parameter-list now.  */
3238         parser->greater_than_is_operator_p
3239           = saved_greater_than_is_operator_p;
3240         /* Consume the `)'.  */
3241         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
3242           cp_parser_skip_to_end_of_statement (parser);
3243
3244         return expr;
3245       }
3246
3247     case CPP_KEYWORD:
3248       switch (token->keyword)
3249         {
3250           /* These two are the boolean literals.  */
3251         case RID_TRUE:
3252           cp_lexer_consume_token (parser->lexer);
3253           return boolean_true_node;
3254         case RID_FALSE:
3255           cp_lexer_consume_token (parser->lexer);
3256           return boolean_false_node;
3257
3258           /* The `__null' literal.  */
3259         case RID_NULL:
3260           cp_lexer_consume_token (parser->lexer);
3261           return null_node;
3262
3263           /* Recognize the `this' keyword.  */
3264         case RID_THIS:
3265           cp_lexer_consume_token (parser->lexer);
3266           if (parser->local_variables_forbidden_p)
3267             {
3268               error ("%<this%> may not be used in this context");
3269               return error_mark_node;
3270             }
3271           /* Pointers cannot appear in constant-expressions.  */
3272           if (cp_parser_non_integral_constant_expression (parser, "%<this%>"))
3273             return error_mark_node;
3274           return finish_this_expr ();
3275
3276           /* The `operator' keyword can be the beginning of an
3277              id-expression.  */
3278         case RID_OPERATOR:
3279           goto id_expression;
3280
3281         case RID_FUNCTION_NAME:
3282         case RID_PRETTY_FUNCTION_NAME:
3283         case RID_C99_FUNCTION_NAME:
3284           /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
3285              __func__ are the names of variables -- but they are
3286              treated specially.  Therefore, they are handled here,
3287              rather than relying on the generic id-expression logic
3288              below.  Grammatically, these names are id-expressions.
3289
3290              Consume the token.  */
3291           token = cp_lexer_consume_token (parser->lexer);
3292           /* Look up the name.  */
3293           return finish_fname (token->u.value);
3294
3295         case RID_VA_ARG:
3296           {
3297             tree expression;
3298             tree type;
3299
3300             /* The `__builtin_va_arg' construct is used to handle
3301                `va_arg'.  Consume the `__builtin_va_arg' token.  */
3302             cp_lexer_consume_token (parser->lexer);
3303             /* Look for the opening `('.  */
3304             cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
3305             /* Now, parse the assignment-expression.  */
3306             expression = cp_parser_assignment_expression (parser,
3307                                                           /*cast_p=*/false);
3308             /* Look for the `,'.  */
3309             cp_parser_require (parser, CPP_COMMA, "%<,%>");
3310             /* Parse the type-id.  */
3311             type = cp_parser_type_id (parser);
3312             /* Look for the closing `)'.  */
3313             cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
3314             /* Using `va_arg' in a constant-expression is not
3315                allowed.  */
3316             if (cp_parser_non_integral_constant_expression (parser,
3317                                                             "%<va_arg%>"))
3318               return error_mark_node;
3319             return build_x_va_arg (expression, type);
3320           }
3321
3322         case RID_OFFSETOF:
3323           return cp_parser_builtin_offsetof (parser);
3324
3325         case RID_HAS_NOTHROW_ASSIGN:
3326         case RID_HAS_NOTHROW_CONSTRUCTOR:
3327         case RID_HAS_NOTHROW_COPY:        
3328         case RID_HAS_TRIVIAL_ASSIGN:
3329         case RID_HAS_TRIVIAL_CONSTRUCTOR:
3330         case RID_HAS_TRIVIAL_COPY:        
3331         case RID_HAS_TRIVIAL_DESTRUCTOR:
3332         case RID_HAS_VIRTUAL_DESTRUCTOR:
3333         case RID_IS_ABSTRACT:
3334         case RID_IS_BASE_OF:
3335         case RID_IS_CLASS:
3336         case RID_IS_CONVERTIBLE_TO:
3337         case RID_IS_EMPTY:
3338         case RID_IS_ENUM:
3339         case RID_IS_POD:
3340         case RID_IS_POLYMORPHIC:
3341         case RID_IS_UNION:
3342           return cp_parser_trait_expr (parser, token->keyword);
3343
3344         /* Objective-C++ expressions.  */
3345         case RID_AT_ENCODE:
3346         case RID_AT_PROTOCOL:
3347         case RID_AT_SELECTOR:
3348           return cp_parser_objc_expression (parser);
3349
3350         default:
3351           cp_parser_error (parser, "expected primary-expression");
3352           return error_mark_node;
3353         }
3354
3355       /* An id-expression can start with either an identifier, a
3356          `::' as the beginning of a qualified-id, or the "operator"
3357          keyword.  */
3358     case CPP_NAME:
3359     case CPP_SCOPE:
3360     case CPP_TEMPLATE_ID:
3361     case CPP_NESTED_NAME_SPECIFIER:
3362       {
3363         tree id_expression;
3364         tree decl;
3365         const char *error_msg;
3366         bool template_p;
3367         bool done;
3368
3369       id_expression:
3370         /* Parse the id-expression.  */
3371         id_expression
3372           = cp_parser_id_expression (parser,
3373                                      /*template_keyword_p=*/false,
3374                                      /*check_dependency_p=*/true,
3375                                      &template_p,
3376                                      /*declarator_p=*/false,
3377                                      /*optional_p=*/false);
3378         if (id_expression == error_mark_node)
3379           return error_mark_node;
3380         token = cp_lexer_peek_token (parser->lexer);
3381         done = (token->type != CPP_OPEN_SQUARE
3382                 && token->type != CPP_OPEN_PAREN
3383                 && token->type != CPP_DOT
3384                 && token->type != CPP_DEREF
3385                 && token->type != CPP_PLUS_PLUS
3386                 && token->type != CPP_MINUS_MINUS);
3387         /* If we have a template-id, then no further lookup is
3388            required.  If the template-id was for a template-class, we
3389            will sometimes have a TYPE_DECL at this point.  */
3390         if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
3391                  || TREE_CODE (id_expression) == TYPE_DECL)
3392           decl = id_expression;
3393         /* Look up the name.  */
3394         else
3395           {
3396             tree ambiguous_decls;
3397
3398             decl = cp_parser_lookup_name (parser, id_expression,
3399                                           none_type,
3400                                           template_p,
3401                                           /*is_namespace=*/false,
3402                                           /*check_dependency=*/true,
3403                                           &ambiguous_decls);
3404             /* If the lookup was ambiguous, an error will already have
3405                been issued.  */
3406             if (ambiguous_decls)
3407               return error_mark_node;
3408
3409             /* In Objective-C++, an instance variable (ivar) may be preferred
3410                to whatever cp_parser_lookup_name() found.  */
3411             decl = objc_lookup_ivar (decl, id_expression);
3412
3413             /* If name lookup gives us a SCOPE_REF, then the
3414                qualifying scope was dependent.  */
3415             if (TREE_CODE (decl) == SCOPE_REF)
3416               {
3417                 /* At this point, we do not know if DECL is a valid
3418                    integral constant expression.  We assume that it is
3419                    in fact such an expression, so that code like:
3420
3421                       template <int N> struct A {
3422                         int a[B<N>::i];
3423                       };
3424                      
3425                    is accepted.  At template-instantiation time, we
3426                    will check that B<N>::i is actually a constant.  */
3427                 return decl;
3428               }
3429             /* Check to see if DECL is a local variable in a context
3430                where that is forbidden.  */
3431             if (parser->local_variables_forbidden_p
3432                 && local_variable_p (decl))
3433               {
3434                 /* It might be that we only found DECL because we are
3435                    trying to be generous with pre-ISO scoping rules.
3436                    For example, consider:
3437
3438                      int i;
3439                      void g() {
3440                        for (int i = 0; i < 10; ++i) {}
3441                        extern void f(int j = i);
3442                      }
3443
3444                    Here, name look up will originally find the out
3445                    of scope `i'.  We need to issue a warning message,
3446                    but then use the global `i'.  */
3447                 decl = check_for_out_of_scope_variable (decl);
3448                 if (local_variable_p (decl))
3449                   {
3450                     error ("local variable %qD may not appear in this context",
3451                            decl);
3452                     return error_mark_node;
3453                   }
3454               }
3455           }
3456
3457         decl = (finish_id_expression
3458                 (id_expression, decl, parser->scope,
3459                  idk,
3460                  parser->integral_constant_expression_p,
3461                  parser->allow_non_integral_constant_expression_p,
3462                  &parser->non_integral_constant_expression_p,
3463                  template_p, done, address_p,
3464                  template_arg_p,
3465                  &error_msg));
3466         if (error_msg)
3467           cp_parser_error (parser, error_msg);
3468         return decl;
3469       }
3470
3471       /* Anything else is an error.  */
3472     default:
3473       /* ...unless we have an Objective-C++ message or string literal,
3474          that is.  */
3475       if (c_dialect_objc ()
3476           && (token->type == CPP_OPEN_SQUARE
3477               || token->type == CPP_OBJC_STRING))
3478         return cp_parser_objc_expression (parser);
3479
3480       cp_parser_error (parser, "expected primary-expression");
3481       return error_mark_node;
3482     }
3483 }
3484
3485 /* Parse an id-expression.
3486
3487    id-expression:
3488      unqualified-id
3489      qualified-id
3490
3491    qualified-id:
3492      :: [opt] nested-name-specifier template [opt] unqualified-id
3493      :: identifier
3494      :: operator-function-id
3495      :: template-id
3496
3497    Return a representation of the unqualified portion of the
3498    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
3499    a `::' or nested-name-specifier.
3500
3501    Often, if the id-expression was a qualified-id, the caller will
3502    want to make a SCOPE_REF to represent the qualified-id.  This
3503    function does not do this in order to avoid wastefully creating
3504    SCOPE_REFs when they are not required.
3505
3506    If TEMPLATE_KEYWORD_P is true, then we have just seen the
3507    `template' keyword.
3508
3509    If CHECK_DEPENDENCY_P is false, then names are looked up inside
3510    uninstantiated templates.
3511
3512    If *TEMPLATE_P is non-NULL, it is set to true iff the
3513    `template' keyword is used to explicitly indicate that the entity
3514    named is a template.
3515
3516    If DECLARATOR_P is true, the id-expression is appearing as part of
3517    a declarator, rather than as part of an expression.  */
3518
3519 static tree
3520 cp_parser_id_expression (cp_parser *parser,
3521                          bool template_keyword_p,
3522                          bool check_dependency_p,
3523                          bool *template_p,
3524                          bool declarator_p,
3525                          bool optional_p)
3526 {
3527   bool global_scope_p;
3528   bool nested_name_specifier_p;
3529
3530   /* Assume the `template' keyword was not used.  */
3531   if (template_p)
3532     *template_p = template_keyword_p;
3533
3534   /* Look for the optional `::' operator.  */
3535   global_scope_p
3536     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3537        != NULL_TREE);
3538   /* Look for the optional nested-name-specifier.  */
3539   nested_name_specifier_p
3540     = (cp_parser_nested_name_specifier_opt (parser,
3541                                             /*typename_keyword_p=*/false,
3542                                             check_dependency_p,
3543                                             /*type_p=*/false,
3544                                             declarator_p)
3545        != NULL_TREE);
3546   /* If there is a nested-name-specifier, then we are looking at
3547      the first qualified-id production.  */
3548   if (nested_name_specifier_p)
3549     {
3550       tree saved_scope;
3551       tree saved_object_scope;
3552       tree saved_qualifying_scope;
3553       tree unqualified_id;
3554       bool is_template;
3555
3556       /* See if the next token is the `template' keyword.  */
3557       if (!template_p)
3558         template_p = &is_template;
3559       *template_p = cp_parser_optional_template_keyword (parser);
3560       /* Name lookup we do during the processing of the
3561          unqualified-id might obliterate SCOPE.  */
3562       saved_scope = parser->scope;
3563       saved_object_scope = parser->object_scope;
3564       saved_qualifying_scope = parser->qualifying_scope;
3565       /* Process the final unqualified-id.  */
3566       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3567                                                  check_dependency_p,
3568                                                  declarator_p,
3569                                                  /*optional_p=*/false);
3570       /* Restore the SAVED_SCOPE for our caller.  */
3571       parser->scope = saved_scope;
3572       parser->object_scope = saved_object_scope;
3573       parser->qualifying_scope = saved_qualifying_scope;
3574
3575       return unqualified_id;
3576     }
3577   /* Otherwise, if we are in global scope, then we are looking at one
3578      of the other qualified-id productions.  */
3579   else if (global_scope_p)
3580     {
3581       cp_token *token;
3582       tree id;
3583
3584       /* Peek at the next token.  */
3585       token = cp_lexer_peek_token (parser->lexer);
3586
3587       /* If it's an identifier, and the next token is not a "<", then
3588          we can avoid the template-id case.  This is an optimization
3589          for this common case.  */
3590       if (token->type == CPP_NAME
3591           && !cp_parser_nth_token_starts_template_argument_list_p
3592                (parser, 2))
3593         return cp_parser_identifier (parser);
3594
3595       cp_parser_parse_tentatively (parser);
3596       /* Try a template-id.  */
3597       id = cp_parser_template_id (parser,
3598                                   /*template_keyword_p=*/false,
3599                                   /*check_dependency_p=*/true,
3600                                   declarator_p);
3601       /* If that worked, we're done.  */
3602       if (cp_parser_parse_definitely (parser))
3603         return id;
3604
3605       /* Peek at the next token.  (Changes in the token buffer may
3606          have invalidated the pointer obtained above.)  */
3607       token = cp_lexer_peek_token (parser->lexer);
3608
3609       switch (token->type)
3610         {
3611         case CPP_NAME:
3612           return cp_parser_identifier (parser);
3613
3614         case CPP_KEYWORD:
3615           if (token->keyword == RID_OPERATOR)
3616             return cp_parser_operator_function_id (parser);
3617           /* Fall through.  */
3618
3619         default:
3620           cp_parser_error (parser, "expected id-expression");
3621           return error_mark_node;
3622         }
3623     }
3624   else
3625     return cp_parser_unqualified_id (parser, template_keyword_p,
3626                                      /*check_dependency_p=*/true,
3627                                      declarator_p,
3628                                      optional_p);
3629 }
3630
3631 /* Parse an unqualified-id.
3632
3633    unqualified-id:
3634      identifier
3635      operator-function-id
3636      conversion-function-id
3637      ~ class-name
3638      template-id
3639
3640    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3641    keyword, in a construct like `A::template ...'.
3642
3643    Returns a representation of unqualified-id.  For the `identifier'
3644    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3645    production a BIT_NOT_EXPR is returned; the operand of the
3646    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3647    other productions, see the documentation accompanying the
3648    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3649    names are looked up in uninstantiated templates.  If DECLARATOR_P
3650    is true, the unqualified-id is appearing as part of a declarator,
3651    rather than as part of an expression.  */
3652
3653 static tree
3654 cp_parser_unqualified_id (cp_parser* parser,
3655                           bool template_keyword_p,
3656                           bool check_dependency_p,
3657                           bool declarator_p,
3658                           bool optional_p)
3659 {
3660   cp_token *token;
3661
3662   /* Peek at the next token.  */
3663   token = cp_lexer_peek_token (parser->lexer);
3664
3665   switch (token->type)
3666     {
3667     case CPP_NAME:
3668       {
3669         tree id;
3670
3671         /* We don't know yet whether or not this will be a
3672            template-id.  */
3673         cp_parser_parse_tentatively (parser);
3674         /* Try a template-id.  */
3675         id = cp_parser_template_id (parser, template_keyword_p,
3676                                     check_dependency_p,
3677                                     declarator_p);
3678         /* If it worked, we're done.  */
3679         if (cp_parser_parse_definitely (parser))
3680           return id;
3681         /* Otherwise, it's an ordinary identifier.  */
3682         return cp_parser_identifier (parser);
3683       }
3684
3685     case CPP_TEMPLATE_ID:
3686       return cp_parser_template_id (parser, template_keyword_p,
3687                                     check_dependency_p,
3688                                     declarator_p);
3689
3690     case CPP_COMPL:
3691       {
3692         tree type_decl;
3693         tree qualifying_scope;
3694         tree object_scope;
3695         tree scope;
3696         bool done;
3697
3698         /* Consume the `~' token.  */
3699         cp_lexer_consume_token (parser->lexer);
3700         /* Parse the class-name.  The standard, as written, seems to
3701            say that:
3702
3703              template <typename T> struct S { ~S (); };
3704              template <typename T> S<T>::~S() {}
3705
3706            is invalid, since `~' must be followed by a class-name, but
3707            `S<T>' is dependent, and so not known to be a class.
3708            That's not right; we need to look in uninstantiated
3709            templates.  A further complication arises from:
3710
3711              template <typename T> void f(T t) {
3712                t.T::~T();
3713              }
3714
3715            Here, it is not possible to look up `T' in the scope of `T'
3716            itself.  We must look in both the current scope, and the
3717            scope of the containing complete expression.
3718
3719            Yet another issue is:
3720
3721              struct S {
3722                int S;
3723                ~S();
3724              };
3725
3726              S::~S() {}
3727
3728            The standard does not seem to say that the `S' in `~S'
3729            should refer to the type `S' and not the data member
3730            `S::S'.  */
3731
3732         /* DR 244 says that we look up the name after the "~" in the
3733            same scope as we looked up the qualifying name.  That idea
3734            isn't fully worked out; it's more complicated than that.  */
3735         scope = parser->scope;
3736         object_scope = parser->object_scope;
3737         qualifying_scope = parser->qualifying_scope;
3738
3739         /* Check for invalid scopes.  */
3740         if (scope == error_mark_node)
3741           {
3742             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3743               cp_lexer_consume_token (parser->lexer);
3744             return error_mark_node;
3745           }
3746         if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
3747           {
3748             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3749               error ("scope %qT before %<~%> is not a class-name", scope);
3750             cp_parser_simulate_error (parser);
3751             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3752               cp_lexer_consume_token (parser->lexer);
3753             return error_mark_node;
3754           }
3755         gcc_assert (!scope || TYPE_P (scope));
3756
3757         /* If the name is of the form "X::~X" it's OK.  */
3758         token = cp_lexer_peek_token (parser->lexer);
3759         if (scope
3760             && token->type == CPP_NAME
3761             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3762                 == CPP_OPEN_PAREN)
3763             && constructor_name_p (token->u.value, scope))
3764           {
3765             cp_lexer_consume_token (parser->lexer);
3766             return build_nt (BIT_NOT_EXPR, scope);
3767           }
3768
3769         /* If there was an explicit qualification (S::~T), first look
3770            in the scope given by the qualification (i.e., S).  */
3771         done = false;
3772         type_decl = NULL_TREE;
3773         if (scope)
3774           {
3775             cp_parser_parse_tentatively (parser);
3776             type_decl = cp_parser_class_name (parser,
3777                                               /*typename_keyword_p=*/false,
3778                                               /*template_keyword_p=*/false,
3779                                               none_type,
3780                                               /*check_dependency=*/false,
3781                                               /*class_head_p=*/false,
3782                                               declarator_p);
3783             if (cp_parser_parse_definitely (parser))
3784               done = true;
3785           }
3786         /* In "N::S::~S", look in "N" as well.  */
3787         if (!done && scope && qualifying_scope)
3788           {
3789             cp_parser_parse_tentatively (parser);
3790             parser->scope = qualifying_scope;
3791             parser->object_scope = NULL_TREE;
3792             parser->qualifying_scope = NULL_TREE;
3793             type_decl
3794               = cp_parser_class_name (parser,
3795                                       /*typename_keyword_p=*/false,
3796                                       /*template_keyword_p=*/false,
3797                                       none_type,
3798                                       /*check_dependency=*/false,
3799                                       /*class_head_p=*/false,
3800                                       declarator_p);
3801             if (cp_parser_parse_definitely (parser))
3802               done = true;
3803           }
3804         /* In "p->S::~T", look in the scope given by "*p" as well.  */
3805         else if (!done && object_scope)
3806           {
3807             cp_parser_parse_tentatively (parser);
3808             parser->scope = object_scope;
3809             parser->object_scope = NULL_TREE;
3810             parser->qualifying_scope = NULL_TREE;
3811             type_decl
3812               = cp_parser_class_name (parser,
3813                                       /*typename_keyword_p=*/false,
3814                                       /*template_keyword_p=*/false,
3815                                       none_type,
3816                                       /*check_dependency=*/false,
3817                                       /*class_head_p=*/false,
3818                                       declarator_p);
3819             if (cp_parser_parse_definitely (parser))
3820               done = true;
3821           }
3822         /* Look in the surrounding context.  */
3823         if (!done)
3824           {
3825             parser->scope = NULL_TREE;
3826             parser->object_scope = NULL_TREE;
3827             parser->qualifying_scope = NULL_TREE;
3828             type_decl
3829               = cp_parser_class_name (parser,
3830                                       /*typename_keyword_p=*/false,
3831                                       /*template_keyword_p=*/false,
3832                                       none_type,
3833                                       /*check_dependency=*/false,
3834                                       /*class_head_p=*/false,
3835                                       declarator_p);
3836           }
3837         /* If an error occurred, assume that the name of the
3838            destructor is the same as the name of the qualifying
3839            class.  That allows us to keep parsing after running
3840            into ill-formed destructor names.  */
3841         if (type_decl == error_mark_node && scope)
3842           return build_nt (BIT_NOT_EXPR, scope);
3843         else if (type_decl == error_mark_node)
3844           return error_mark_node;
3845
3846         /* Check that destructor name and scope match.  */
3847         if (declarator_p && scope && !check_dtor_name (scope, type_decl))
3848           {
3849             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3850               error ("declaration of %<~%T%> as member of %qT",
3851                      type_decl, scope);
3852             cp_parser_simulate_error (parser);
3853             return error_mark_node;
3854           }
3855
3856         /* [class.dtor]
3857
3858            A typedef-name that names a class shall not be used as the
3859            identifier in the declarator for a destructor declaration.  */
3860         if (declarator_p
3861             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
3862             && !DECL_SELF_REFERENCE_P (type_decl)
3863             && !cp_parser_uncommitted_to_tentative_parse_p (parser))
3864           error ("typedef-name %qD used as destructor declarator",
3865                  type_decl);
3866
3867         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3868       }
3869
3870     case CPP_KEYWORD:
3871       if (token->keyword == RID_OPERATOR)
3872         {
3873           tree id;
3874
3875           /* This could be a template-id, so we try that first.  */
3876           cp_parser_parse_tentatively (parser);
3877           /* Try a template-id.  */
3878           id = cp_parser_template_id (parser, template_keyword_p,
3879                                       /*check_dependency_p=*/true,
3880                                       declarator_p);
3881           /* If that worked, we're done.  */
3882           if (cp_parser_parse_definitely (parser))
3883             return id;
3884           /* We still don't know whether we're looking at an
3885              operator-function-id or a conversion-function-id.  */
3886           cp_parser_parse_tentatively (parser);
3887           /* Try an operator-function-id.  */
3888           id = cp_parser_operator_function_id (parser);
3889           /* If that didn't work, try a conversion-function-id.  */
3890           if (!cp_parser_parse_definitely (parser))
3891             id = cp_parser_conversion_function_id (parser);
3892
3893           return id;
3894         }
3895       /* Fall through.  */
3896
3897     default:
3898       if (optional_p)
3899         return NULL_TREE;
3900       cp_parser_error (parser, "expected unqualified-id");
3901       return error_mark_node;
3902     }
3903 }
3904
3905 /* Parse an (optional) nested-name-specifier.
3906
3907    nested-name-specifier:
3908      class-or-namespace-name :: nested-name-specifier [opt]
3909      class-or-namespace-name :: template nested-name-specifier [opt]
3910
3911    PARSER->SCOPE should be set appropriately before this function is
3912    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
3913    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
3914    in name lookups.
3915
3916    Sets PARSER->SCOPE to the class (TYPE) or namespace
3917    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
3918    it unchanged if there is no nested-name-specifier.  Returns the new
3919    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
3920
3921    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
3922    part of a declaration and/or decl-specifier.  */
3923
3924 static tree
3925 cp_parser_nested_name_specifier_opt (cp_parser *parser,
3926                                      bool typename_keyword_p,
3927                                      bool check_dependency_p,
3928                                      bool type_p,
3929                                      bool is_declaration)
3930 {
3931   bool success = false;
3932   cp_token_position start = 0;
3933   cp_token *token;
3934
3935   /* Remember where the nested-name-specifier starts.  */
3936   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3937     {
3938       start = cp_lexer_token_position (parser->lexer, false);
3939       push_deferring_access_checks (dk_deferred);
3940     }
3941
3942   while (true)
3943     {
3944       tree new_scope;
3945       tree old_scope;
3946       tree saved_qualifying_scope;
3947       bool template_keyword_p;
3948
3949       /* Spot cases that cannot be the beginning of a
3950          nested-name-specifier.  */
3951       token = cp_lexer_peek_token (parser->lexer);
3952
3953       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
3954          the already parsed nested-name-specifier.  */
3955       if (token->type == CPP_NESTED_NAME_SPECIFIER)
3956         {
3957           /* Grab the nested-name-specifier and continue the loop.  */
3958           cp_parser_pre_parsed_nested_name_specifier (parser);
3959           /* If we originally encountered this nested-name-specifier
3960              with IS_DECLARATION set to false, we will not have
3961              resolved TYPENAME_TYPEs, so we must do so here.  */
3962           if (is_declaration
3963               && TREE_CODE (parser->scope) == TYPENAME_TYPE)
3964             {
3965               new_scope = resolve_typename_type (parser->scope,
3966                                                  /*only_current_p=*/false);
3967               if (TREE_CODE (new_scope) != TYPENAME_TYPE)
3968                 parser->scope = new_scope;
3969             }
3970           success = true;
3971           continue;
3972         }
3973
3974       /* Spot cases that cannot be the beginning of a
3975          nested-name-specifier.  On the second and subsequent times
3976          through the loop, we look for the `template' keyword.  */
3977       if (success && token->keyword == RID_TEMPLATE)
3978         ;
3979       /* A template-id can start a nested-name-specifier.  */
3980       else if (token->type == CPP_TEMPLATE_ID)
3981         ;
3982       else
3983         {
3984           /* If the next token is not an identifier, then it is
3985              definitely not a class-or-namespace-name.  */
3986           if (token->type != CPP_NAME)
3987             break;
3988           /* If the following token is neither a `<' (to begin a
3989              template-id), nor a `::', then we are not looking at a
3990              nested-name-specifier.  */
3991           token = cp_lexer_peek_nth_token (parser->lexer, 2);
3992           if (token->type != CPP_SCOPE
3993               && !cp_parser_nth_token_starts_template_argument_list_p
3994                   (parser, 2))
3995             break;
3996         }
3997
3998       /* The nested-name-specifier is optional, so we parse
3999          tentatively.  */
4000       cp_parser_parse_tentatively (parser);
4001
4002       /* Look for the optional `template' keyword, if this isn't the
4003          first time through the loop.  */
4004       if (success)
4005         template_keyword_p = cp_parser_optional_template_keyword (parser);
4006       else
4007         template_keyword_p = false;
4008
4009       /* Save the old scope since the name lookup we are about to do
4010          might destroy it.  */
4011       old_scope = parser->scope;
4012       saved_qualifying_scope = parser->qualifying_scope;
4013       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
4014          look up names in "X<T>::I" in order to determine that "Y" is
4015          a template.  So, if we have a typename at this point, we make
4016          an effort to look through it.  */
4017       if (is_declaration
4018           && !typename_keyword_p
4019           && parser->scope
4020           && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4021         parser->scope = resolve_typename_type (parser->scope,
4022                                                /*only_current_p=*/false);
4023       /* Parse the qualifying entity.  */
4024       new_scope
4025         = cp_parser_class_or_namespace_name (parser,
4026                                              typename_keyword_p,
4027                                              template_keyword_p,
4028                                              check_dependency_p,
4029                                              type_p,
4030                                              is_declaration);
4031       /* Look for the `::' token.  */
4032       cp_parser_require (parser, CPP_SCOPE, "%<::%>");
4033
4034       /* If we found what we wanted, we keep going; otherwise, we're
4035          done.  */
4036       if (!cp_parser_parse_definitely (parser))
4037         {
4038           bool error_p = false;
4039
4040           /* Restore the OLD_SCOPE since it was valid before the
4041              failed attempt at finding the last
4042              class-or-namespace-name.  */
4043           parser->scope = old_scope;
4044           parser->qualifying_scope = saved_qualifying_scope;
4045           if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4046             break;
4047           /* If the next token is an identifier, and the one after
4048              that is a `::', then any valid interpretation would have
4049              found a class-or-namespace-name.  */
4050           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
4051                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4052                      == CPP_SCOPE)
4053                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
4054                      != CPP_COMPL))
4055             {
4056               token = cp_lexer_consume_token (parser->lexer);
4057               if (!error_p)
4058                 {
4059                   if (!token->ambiguous_p)
4060                     {
4061                       tree decl;
4062                       tree ambiguous_decls;
4063
4064                       decl = cp_parser_lookup_name (parser, token->u.value,
4065                                                     none_type,
4066                                                     /*is_template=*/false,
4067                                                     /*is_namespace=*/false,
4068                                                     /*check_dependency=*/true,
4069                                                     &ambiguous_decls);
4070                       if (TREE_CODE (decl) == TEMPLATE_DECL)
4071                         error ("%qD used without template parameters", decl);
4072                       else if (ambiguous_decls)
4073                         {
4074                           error ("reference to %qD is ambiguous",
4075                                  token->u.value);
4076                           print_candidates (ambiguous_decls);
4077                           decl = error_mark_node;
4078                         }
4079                       else
4080                         cp_parser_name_lookup_error
4081                           (parser, token->u.value, decl,
4082                            "is not a class or namespace");
4083                     }
4084                   parser->scope = error_mark_node;
4085                   error_p = true;
4086                   /* Treat this as a successful nested-name-specifier
4087                      due to:
4088
4089                      [basic.lookup.qual]
4090
4091                      If the name found is not a class-name (clause
4092                      _class_) or namespace-name (_namespace.def_), the
4093                      program is ill-formed.  */
4094                   success = true;
4095                 }
4096               cp_lexer_consume_token (parser->lexer);
4097             }
4098           break;
4099         }
4100       /* We've found one valid nested-name-specifier.  */
4101       success = true;
4102       /* Name lookup always gives us a DECL.  */
4103       if (TREE_CODE (new_scope) == TYPE_DECL)
4104         new_scope = TREE_TYPE (new_scope);
4105       /* Uses of "template" must be followed by actual templates.  */
4106       if (template_keyword_p
4107           && !(CLASS_TYPE_P (new_scope)
4108                && ((CLASSTYPE_USE_TEMPLATE (new_scope)
4109                     && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
4110                    || CLASSTYPE_IS_TEMPLATE (new_scope)))
4111           && !(TREE_CODE (new_scope) == TYPENAME_TYPE
4112                && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
4113                    == TEMPLATE_ID_EXPR)))
4114         pedwarn (TYPE_P (new_scope)
4115                  ? "%qT is not a template"
4116                  : "%qD is not a template",
4117                  new_scope);
4118       /* If it is a class scope, try to complete it; we are about to
4119          be looking up names inside the class.  */
4120       if (TYPE_P (new_scope)
4121           /* Since checking types for dependency can be expensive,
4122              avoid doing it if the type is already complete.  */
4123           && !COMPLETE_TYPE_P (new_scope)
4124           /* Do not try to complete dependent types.  */
4125           && !dependent_type_p (new_scope))
4126         {
4127           new_scope = complete_type (new_scope);
4128           /* If it is a typedef to current class, use the current
4129              class instead, as the typedef won't have any names inside
4130              it yet.  */
4131           if (!COMPLETE_TYPE_P (new_scope)
4132               && currently_open_class (new_scope))
4133             new_scope = TYPE_MAIN_VARIANT (new_scope);
4134         }
4135       /* Make sure we look in the right scope the next time through
4136          the loop.  */
4137       parser->scope = new_scope;
4138     }
4139
4140   /* If parsing tentatively, replace the sequence of tokens that makes
4141      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
4142      token.  That way, should we re-parse the token stream, we will
4143      not have to repeat the effort required to do the parse, nor will
4144      we issue duplicate error messages.  */
4145   if (success && start)
4146     {
4147       cp_token *token;
4148
4149       token = cp_lexer_token_at (parser->lexer, start);
4150       /* Reset the contents of the START token.  */
4151       token->type = CPP_NESTED_NAME_SPECIFIER;
4152       /* Retrieve any deferred checks.  Do not pop this access checks yet
4153          so the memory will not be reclaimed during token replacing below.  */
4154       token->u.tree_check_value = GGC_CNEW (struct tree_check);
4155       token->u.tree_check_value->value = parser->scope;
4156       token->u.tree_check_value->checks = get_deferred_access_checks ();
4157       token->u.tree_check_value->qualifying_scope =
4158         parser->qualifying_scope;
4159       token->keyword = RID_MAX;
4160
4161       /* Purge all subsequent tokens.  */
4162       cp_lexer_purge_tokens_after (parser->lexer, start);
4163     }
4164
4165   if (start)
4166     pop_to_parent_deferring_access_checks ();
4167
4168   return success ? parser->scope : NULL_TREE;
4169 }
4170
4171 /* Parse a nested-name-specifier.  See
4172    cp_parser_nested_name_specifier_opt for details.  This function
4173    behaves identically, except that it will an issue an error if no
4174    nested-name-specifier is present.  */
4175
4176 static tree
4177 cp_parser_nested_name_specifier (cp_parser *parser,
4178                                  bool typename_keyword_p,
4179                                  bool check_dependency_p,
4180                                  bool type_p,
4181                                  bool is_declaration)
4182 {
4183   tree scope;
4184
4185   /* Look for the nested-name-specifier.  */
4186   scope = cp_parser_nested_name_specifier_opt (parser,
4187                                                typename_keyword_p,
4188                                                check_dependency_p,
4189                                                type_p,
4190                                                is_declaration);
4191   /* If it was not present, issue an error message.  */
4192   if (!scope)
4193     {
4194       cp_parser_error (parser, "expected nested-name-specifier");
4195       parser->scope = NULL_TREE;
4196     }
4197
4198   return scope;
4199 }
4200
4201 /* Parse a class-or-namespace-name.
4202
4203    class-or-namespace-name:
4204      class-name
4205      namespace-name
4206
4207    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
4208    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
4209    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
4210    TYPE_P is TRUE iff the next name should be taken as a class-name,
4211    even the same name is declared to be another entity in the same
4212    scope.
4213
4214    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
4215    specified by the class-or-namespace-name.  If neither is found the
4216    ERROR_MARK_NODE is returned.  */
4217
4218 static tree
4219 cp_parser_class_or_namespace_name (cp_parser *parser,
4220                                    bool typename_keyword_p,
4221                                    bool template_keyword_p,
4222                                    bool check_dependency_p,
4223                                    bool type_p,
4224                                    bool is_declaration)
4225 {
4226   tree saved_scope;
4227   tree saved_qualifying_scope;
4228   tree saved_object_scope;
4229   tree scope;
4230   bool only_class_p;
4231
4232   /* Before we try to parse the class-name, we must save away the
4233      current PARSER->SCOPE since cp_parser_class_name will destroy
4234      it.  */
4235   saved_scope = parser->scope;
4236   saved_qualifying_scope = parser->qualifying_scope;
4237   saved_object_scope = parser->object_scope;
4238   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
4239      there is no need to look for a namespace-name.  */
4240   only_class_p = template_keyword_p || (saved_scope && TYPE_P (saved_scope));
4241   if (!only_class_p)
4242     cp_parser_parse_tentatively (parser);
4243   scope = cp_parser_class_name (parser,
4244                                 typename_keyword_p,
4245                                 template_keyword_p,
4246                                 type_p ? class_type : none_type,
4247                                 check_dependency_p,
4248                                 /*class_head_p=*/false,
4249                                 is_declaration);
4250   /* If that didn't work, try for a namespace-name.  */
4251   if (!only_class_p && !cp_parser_parse_definitely (parser))
4252     {
4253       /* Restore the saved scope.  */
4254       parser->scope = saved_scope;
4255       parser->qualifying_scope = saved_qualifying_scope;
4256       parser->object_scope = saved_object_scope;
4257       /* If we are not looking at an identifier followed by the scope
4258          resolution operator, then this is not part of a
4259          nested-name-specifier.  (Note that this function is only used
4260          to parse the components of a nested-name-specifier.)  */
4261       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
4262           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
4263         return error_mark_node;
4264       scope = cp_parser_namespace_name (parser);
4265     }
4266
4267   return scope;
4268 }
4269
4270 /* Parse a postfix-expression.
4271
4272    postfix-expression:
4273      primary-expression
4274      postfix-expression [ expression ]
4275      postfix-expression ( expression-list [opt] )
4276      simple-type-specifier ( expression-list [opt] )
4277      typename :: [opt] nested-name-specifier identifier
4278        ( expression-list [opt] )
4279      typename :: [opt] nested-name-specifier template [opt] template-id
4280        ( expression-list [opt] )
4281      postfix-expression . template [opt] id-expression
4282      postfix-expression -> template [opt] id-expression
4283      postfix-expression . pseudo-destructor-name
4284      postfix-expression -> pseudo-destructor-name
4285      postfix-expression ++
4286      postfix-expression --
4287      dynamic_cast < type-id > ( expression )
4288      static_cast < type-id > ( expression )
4289      reinterpret_cast < type-id > ( expression )
4290      const_cast < type-id > ( expression )
4291      typeid ( expression )
4292      typeid ( type-id )
4293
4294    GNU Extension:
4295
4296    postfix-expression:
4297      ( type-id ) { initializer-list , [opt] }
4298
4299    This extension is a GNU version of the C99 compound-literal
4300    construct.  (The C99 grammar uses `type-name' instead of `type-id',
4301    but they are essentially the same concept.)
4302
4303    If ADDRESS_P is true, the postfix expression is the operand of the
4304    `&' operator.  CAST_P is true if this expression is the target of a
4305    cast.
4306
4307    If MEMBER_ACCESS_ONLY_P, we only allow postfix expressions that are
4308    class member access expressions [expr.ref].
4309
4310    Returns a representation of the expression.  */
4311
4312 static tree
4313 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
4314                               bool member_access_only_p)
4315 {
4316   cp_token *token;
4317   enum rid keyword;
4318   cp_id_kind idk = CP_ID_KIND_NONE;
4319   tree postfix_expression = NULL_TREE;
4320   bool is_member_access = false;
4321
4322   /* Peek at the next token.  */
4323   token = cp_lexer_peek_token (parser->lexer);
4324   /* Some of the productions are determined by keywords.  */
4325   keyword = token->keyword;
4326   switch (keyword)
4327     {
4328     case RID_DYNCAST:
4329     case RID_STATCAST:
4330     case RID_REINTCAST:
4331     case RID_CONSTCAST:
4332       {
4333         tree type;
4334         tree expression;
4335         const char *saved_message;
4336
4337         /* All of these can be handled in the same way from the point
4338            of view of parsing.  Begin by consuming the token
4339            identifying the cast.  */
4340         cp_lexer_consume_token (parser->lexer);
4341
4342         /* New types cannot be defined in the cast.  */
4343         saved_message = parser->type_definition_forbidden_message;
4344         parser->type_definition_forbidden_message
4345           = "types may not be defined in casts";
4346
4347         /* Look for the opening `<'.  */
4348         cp_parser_require (parser, CPP_LESS, "%<<%>");
4349         /* Parse the type to which we are casting.  */
4350         type = cp_parser_type_id (parser);
4351         /* Look for the closing `>'.  */
4352         cp_parser_require (parser, CPP_GREATER, "%<>%>");
4353         /* Restore the old message.  */
4354         parser->type_definition_forbidden_message = saved_message;
4355
4356         /* And the expression which is being cast.  */
4357         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
4358         expression = cp_parser_expression (parser, /*cast_p=*/true);
4359         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4360
4361         /* Only type conversions to integral or enumeration types
4362            can be used in constant-expressions.  */
4363         if (!cast_valid_in_integral_constant_expression_p (type)
4364             && (cp_parser_non_integral_constant_expression
4365                 (parser,
4366                  "a cast to a type other than an integral or "
4367                  "enumeration type")))
4368           return error_mark_node;
4369
4370         switch (keyword)
4371           {
4372           case RID_DYNCAST:
4373             postfix_expression
4374               = build_dynamic_cast (type, expression, tf_warning_or_error);
4375             break;
4376           case RID_STATCAST:
4377             postfix_expression
4378               = build_static_cast (type, expression, tf_warning_or_error);
4379             break;
4380           case RID_REINTCAST:
4381             postfix_expression
4382               = build_reinterpret_cast (type, expression, 
4383                                         tf_warning_or_error);
4384             break;
4385           case RID_CONSTCAST:
4386             postfix_expression
4387               = build_const_cast (type, expression, tf_warning_or_error);
4388             break;
4389           default:
4390             gcc_unreachable ();
4391           }
4392       }
4393       break;
4394
4395     case RID_TYPEID:
4396       {
4397         tree type;
4398         const char *saved_message;
4399         bool saved_in_type_id_in_expr_p;
4400
4401         /* Consume the `typeid' token.  */
4402         cp_lexer_consume_token (parser->lexer);
4403         /* Look for the `(' token.  */
4404         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
4405         /* Types cannot be defined in a `typeid' expression.  */
4406         saved_message = parser->type_definition_forbidden_message;
4407         parser->type_definition_forbidden_message
4408           = "types may not be defined in a %<typeid%> expression";
4409         /* We can't be sure yet whether we're looking at a type-id or an
4410            expression.  */
4411         cp_parser_parse_tentatively (parser);
4412         /* Try a type-id first.  */
4413         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4414         parser->in_type_id_in_expr_p = true;
4415         type = cp_parser_type_id (parser);
4416         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4417         /* Look for the `)' token.  Otherwise, we can't be sure that
4418            we're not looking at an expression: consider `typeid (int
4419            (3))', for example.  */
4420         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4421         /* If all went well, simply lookup the type-id.  */
4422         if (cp_parser_parse_definitely (parser))
4423           postfix_expression = get_typeid (type);
4424         /* Otherwise, fall back to the expression variant.  */
4425         else
4426           {
4427             tree expression;
4428
4429             /* Look for an expression.  */
4430             expression = cp_parser_expression (parser, /*cast_p=*/false);
4431             /* Compute its typeid.  */
4432             postfix_expression = build_typeid (expression);
4433             /* Look for the `)' token.  */
4434             cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4435           }
4436         /* Restore the saved message.  */
4437         parser->type_definition_forbidden_message = saved_message;
4438         /* `typeid' may not appear in an integral constant expression.  */
4439         if (cp_parser_non_integral_constant_expression(parser,
4440                                                        "%<typeid%> operator"))
4441           return error_mark_node;
4442       }
4443       break;
4444
4445     case RID_TYPENAME:
4446       {
4447         tree type;
4448         /* The syntax permitted here is the same permitted for an
4449            elaborated-type-specifier.  */
4450         type = cp_parser_elaborated_type_specifier (parser,
4451                                                     /*is_friend=*/false,
4452                                                     /*is_declaration=*/false);
4453         postfix_expression = cp_parser_functional_cast (parser, type);
4454       }
4455       break;
4456
4457     default:
4458       {
4459         tree type;
4460
4461         /* If the next thing is a simple-type-specifier, we may be
4462            looking at a functional cast.  We could also be looking at
4463            an id-expression.  So, we try the functional cast, and if
4464            that doesn't work we fall back to the primary-expression.  */
4465         cp_parser_parse_tentatively (parser);
4466         /* Look for the simple-type-specifier.  */
4467         type = cp_parser_simple_type_specifier (parser,
4468                                                 /*decl_specs=*/NULL,
4469                                                 CP_PARSER_FLAGS_NONE);
4470         /* Parse the cast itself.  */
4471         if (!cp_parser_error_occurred (parser))
4472           postfix_expression
4473             = cp_parser_functional_cast (parser, type);
4474         /* If that worked, we're done.  */
4475         if (cp_parser_parse_definitely (parser))
4476           break;
4477
4478         /* If the functional-cast didn't work out, try a
4479            compound-literal.  */
4480         if (cp_parser_allow_gnu_extensions_p (parser)
4481             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4482           {
4483             VEC(constructor_elt,gc) *initializer_list = NULL;
4484             bool saved_in_type_id_in_expr_p;
4485
4486             cp_parser_parse_tentatively (parser);
4487             /* Consume the `('.  */
4488             cp_lexer_consume_token (parser->lexer);
4489             /* Parse the type.  */
4490             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4491             parser->in_type_id_in_expr_p = true;
4492             type = cp_parser_type_id (parser);
4493             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4494             /* Look for the `)'.  */
4495             cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
4496             /* Look for the `{'.  */
4497             cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>");
4498             /* If things aren't going well, there's no need to
4499                keep going.  */
4500             if (!cp_parser_error_occurred (parser))
4501               {
4502                 bool non_constant_p;
4503                 /* Parse the initializer-list.  */
4504                 initializer_list
4505                   = cp_parser_initializer_list (parser, &non_constant_p);
4506                 /* Allow a trailing `,'.  */
4507                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
4508                   cp_lexer_consume_token (parser->lexer);
4509                 /* Look for the final `}'.  */
4510                 cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
4511               }
4512             /* If that worked, we're definitely looking at a
4513                compound-literal expression.  */
4514             if (cp_parser_parse_definitely (parser))
4515               {
4516                 /* Warn the user that a compound literal is not
4517                    allowed in standard C++.  */
4518                 if (pedantic)
4519                   pedwarn ("ISO C++ forbids compound-literals");
4520                 /* For simplicity, we disallow compound literals in
4521                    constant-expressions.  We could
4522                    allow compound literals of integer type, whose
4523                    initializer was a constant, in constant
4524                    expressions.  Permitting that usage, as a further
4525                    extension, would not change the meaning of any
4526                    currently accepted programs.  (Of course, as
4527                    compound literals are not part of ISO C++, the
4528                    standard has nothing to say.)  */
4529                 if (cp_parser_non_integral_constant_expression 
4530                     (parser, "non-constant compound literals"))
4531                   {
4532                     postfix_expression = error_mark_node;
4533                     break;
4534                   }
4535                 /* Form the representation of the compound-literal.  */
4536                 postfix_expression
4537                   = finish_compound_literal (type, initializer_list);
4538                 break;
4539               }
4540           }
4541
4542         /* It must be a primary-expression.  */
4543         postfix_expression
4544           = cp_parser_primary_expression (parser, address_p, cast_p,
4545                                           /*template_arg_p=*/false,
4546                                           &idk);
4547       }
4548       break;
4549     }
4550
4551   /* Keep looping until the postfix-expression is complete.  */
4552   while (true)
4553     {
4554       if (idk == CP_ID_KIND_UNQUALIFIED
4555           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
4556           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
4557         /* It is not a Koenig lookup function call.  */
4558         postfix_expression
4559           = unqualified_name_lookup_error (postfix_expression);
4560
4561       /* Peek at the next token.  */
4562       token = cp_lexer_peek_token (parser->lexer);
4563
4564       switch (token->type)
4565         {
4566         case CPP_OPEN_SQUARE:
4567           postfix_expression
4568             = cp_parser_postfix_open_square_expression (parser,
4569                                                         postfix_expression,
4570                                                         false);
4571           idk = CP_ID_KIND_NONE;
4572           is_member_access = false;
4573           break;
4574
4575         case CPP_OPEN_PAREN:
4576           /* postfix-expression ( expression-list [opt] ) */
4577           {
4578             bool koenig_p;
4579             bool is_builtin_constant_p;
4580             bool saved_integral_constant_expression_p = false;
4581             bool saved_non_integral_constant_expression_p = false;
4582             tree args;
4583
4584             is_member_access = false;
4585
4586             is_builtin_constant_p
4587               = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
4588             if (is_builtin_constant_p)
4589               {
4590                 /* The whole point of __builtin_constant_p is to allow
4591                    non-constant expressions to appear as arguments.  */
4592                 saved_integral_constant_expression_p
4593                   = parser->integral_constant_expression_p;
4594                 saved_non_integral_constant_expression_p
4595                   = parser->non_integral_constant_expression_p;
4596                 parser->integral_constant_expression_p = false;
4597               }
4598             args = (cp_parser_parenthesized_expression_list
4599                     (parser, /*is_attribute_list=*/false,
4600                      /*cast_p=*/false, /*allow_expansion_p=*/true,
4601                      /*non_constant_p=*/NULL));
4602             if (is_builtin_constant_p)
4603               {
4604                 parser->integral_constant_expression_p
4605                   = saved_integral_constant_expression_p;
4606                 parser->non_integral_constant_expression_p
4607                   = saved_non_integral_constant_expression_p;
4608               }
4609
4610             if (args == error_mark_node)
4611               {
4612                 postfix_expression = error_mark_node;
4613                 break;
4614               }
4615
4616             /* Function calls are not permitted in
4617                constant-expressions.  */
4618             if (! builtin_valid_in_constant_expr_p (postfix_expression)
4619                 && cp_parser_non_integral_constant_expression (parser,
4620                                                                "a function call"))
4621               {
4622                 postfix_expression = error_mark_node;
4623                 break;
4624               }
4625
4626             koenig_p = false;
4627             if (idk == CP_ID_KIND_UNQUALIFIED)
4628               {
4629                 if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
4630                   {
4631                     if (args)
4632                       {
4633                         koenig_p = true;
4634                         postfix_expression
4635                           = perform_koenig_lookup (postfix_expression, args);
4636                       }
4637                     else
4638                       postfix_expression
4639                         = unqualified_fn_lookup_error (postfix_expression);
4640                   }
4641                 /* We do not perform argument-dependent lookup if
4642                    normal lookup finds a non-function, in accordance
4643                    with the expected resolution of DR 218.  */
4644                 else if (args && is_overloaded_fn (postfix_expression))
4645                   {
4646                     tree fn = get_first_fn (postfix_expression);
4647
4648                     if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4649                       fn = OVL_CURRENT (TREE_OPERAND (fn, 0));
4650
4651                     /* Only do argument dependent lookup if regular
4652                        lookup does not find a set of member functions.
4653                        [basic.lookup.koenig]/2a  */
4654                     if (!DECL_FUNCTION_MEMBER_P (fn))
4655                       {
4656                         koenig_p = true;
4657                         postfix_expression
4658                           = perform_koenig_lookup (postfix_expression, args);
4659                       }
4660                   }
4661               }
4662
4663             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
4664               {
4665                 tree instance = TREE_OPERAND (postfix_expression, 0);
4666                 tree fn = TREE_OPERAND (postfix_expression, 1);
4667
4668                 if (processing_template_decl
4669                     && (type_dependent_expression_p (instance)
4670                         || (!BASELINK_P (fn)
4671                             && TREE_CODE (fn) != FIELD_DECL)
4672                         || type_dependent_expression_p (fn)
4673                         || any_type_dependent_arguments_p (args)))
4674                   {
4675                     postfix_expression
4676                       = build_nt_call_list (postfix_expression, args);
4677                     break;
4678                   }
4679
4680                 if (BASELINK_P (fn))
4681                   postfix_expression
4682                     = (build_new_method_call
4683                        (instance, fn, args, NULL_TREE,
4684                         (idk == CP_ID_KIND_QUALIFIED
4685                          ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL),
4686                         /*fn_p=*/NULL,
4687                         tf_warning_or_error));
4688                 else
4689                   postfix_expression
4690                     = finish_call_expr (postfix_expression, args,
4691                                         /*disallow_virtual=*/false,
4692                                         /*koenig_p=*/false,
4693                                         tf_warning_or_error);
4694               }
4695             else if (TREE_CODE (postfix_expression) == OFFSET_REF
4696                      || TREE_CODE (postfix_expression) == MEMBER_REF
4697                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
4698               postfix_expression = (build_offset_ref_call_from_tree
4699                                     (postfix_expression, args));
4700             else if (idk == CP_ID_KIND_QUALIFIED)
4701               /* A call to a static class member, or a namespace-scope
4702                  function.  */
4703               postfix_expression
4704                 = finish_call_expr (postfix_expression, args,
4705                                     /*disallow_virtual=*/true,
4706                                     koenig_p,
4707                                     tf_warning_or_error);
4708             else
4709               /* All other function calls.  */
4710               postfix_expression
4711                 = finish_call_expr (postfix_expression, args,
4712                                     /*disallow_virtual=*/false,
4713                                     koenig_p,
4714                                     tf_warning_or_error);
4715
4716             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
4717             idk = CP_ID_KIND_NONE;
4718           }
4719           break;
4720
4721         case CPP_DOT:
4722         case CPP_DEREF:
4723           /* postfix-expression . template [opt] id-expression
4724              postfix-expression . pseudo-destructor-name
4725              postfix-expression -> template [opt] id-expression
4726              postfix-expression -> pseudo-destructor-name */
4727
4728           /* Consume the `.' or `->' operator.  */
4729           cp_lexer_consume_token (parser->lexer);
4730
4731           postfix_expression
4732             = cp_parser_postfix_dot_deref_expression (parser, token->type,
4733                                                       postfix_expression,
4734                                                       false, &idk);
4735
4736           is_member_access = true;
4737           break;
4738
4739         case CPP_PLUS_PLUS:
4740           /* postfix-expression ++  */
4741           /* Consume the `++' token.  */
4742           cp_lexer_consume_token (parser->lexer);
4743           /* Generate a representation for the complete expression.  */
4744           postfix_expression
4745             = finish_increment_expr (postfix_expression,
4746                                      POSTINCREMENT_EXPR);
4747           /* Increments may not appear in constant-expressions.  */
4748           if (cp_parser_non_integral_constant_expression (parser,
4749                                                           "an increment"))
4750             postfix_expression = error_mark_node;
4751           idk = CP_ID_KIND_NONE;
4752           is_member_access = false;
4753           break;
4754
4755         case CPP_MINUS_MINUS:
4756           /* postfix-expression -- */
4757           /* Consume the `--' token.  */
4758           cp_lexer_consume_token (parser->lexer);
4759           /* Generate a representation for the complete expression.  */
4760           postfix_expression
4761             = finish_increment_expr (postfix_expression,
4762                                      POSTDECREMENT_EXPR);
4763           /* Decrements may not appear in constant-expressions.  */
4764           if (cp_parser_non_integral_constant_expression (parser,
4765                                                           "a decrement"))
4766             postfix_expression = error_mark_node;
4767           idk = CP_ID_KIND_NONE;
4768           is_member_access = false;
4769           break;
4770
4771         default:
4772           if (member_access_only_p)
4773             return is_member_access? postfix_expression : error_mark_node;
4774           else
4775             return postfix_expression;
4776         }
4777     }
4778
4779   /* We should never get here.  */
4780   gcc_unreachable ();
4781   return error_mark_node;
4782 }
4783
4784 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4785    by cp_parser_builtin_offsetof.  We're looking for
4786
4787      postfix-expression [ expression ]
4788
4789    FOR_OFFSETOF is set if we're being called in that context, which
4790    changes how we deal with integer constant expressions.  */
4791
4792 static tree
4793 cp_parser_postfix_open_square_expression (cp_parser *parser,
4794                                           tree postfix_expression,
4795                                           bool for_offsetof)
4796 {
4797   tree index;
4798
4799   /* Consume the `[' token.  */
4800   cp_lexer_consume_token (parser->lexer);
4801
4802   /* Parse the index expression.  */
4803   /* ??? For offsetof, there is a question of what to allow here.  If
4804      offsetof is not being used in an integral constant expression context,
4805      then we *could* get the right answer by computing the value at runtime.
4806      If we are in an integral constant expression context, then we might
4807      could accept any constant expression; hard to say without analysis.
4808      Rather than open the barn door too wide right away, allow only integer
4809      constant expressions here.  */
4810   if (for_offsetof)
4811     index = cp_parser_constant_expression (parser, false, NULL);
4812   else
4813     index = cp_parser_expression (parser, /*cast_p=*/false);
4814
4815   /* Look for the closing `]'.  */
4816   cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
4817
4818   /* Build the ARRAY_REF.  */
4819   postfix_expression = grok_array_decl (postfix_expression, index);
4820
4821   /* When not doing offsetof, array references are not permitted in
4822      constant-expressions.  */
4823   if (!for_offsetof
4824       && (cp_parser_non_integral_constant_expression
4825           (parser, "an array reference")))
4826     postfix_expression = error_mark_node;
4827
4828   return postfix_expression;
4829 }
4830
4831 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
4832    by cp_parser_builtin_offsetof.  We're looking for
4833
4834      postfix-expression . template [opt] id-expression
4835      postfix-expression . pseudo-destructor-name
4836      postfix-expression -> template [opt] id-expression
4837      postfix-expression -> pseudo-destructor-name
4838
4839    FOR_OFFSETOF is set if we're being called in that context.  That sorta
4840    limits what of the above we'll actually accept, but nevermind.
4841    TOKEN_TYPE is the "." or "->" token, which will already have been
4842    removed from the stream.  */
4843
4844 static tree
4845 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
4846                                         enum cpp_ttype token_type,
4847                                         tree postfix_expression,
4848                                         bool for_offsetof, cp_id_kind *idk)
4849 {
4850   tree name;
4851   bool dependent_p;
4852   bool pseudo_destructor_p;
4853   tree scope = NULL_TREE;
4854
4855   /* If this is a `->' operator, dereference the pointer.  */
4856   if (token_type == CPP_DEREF)
4857     postfix_expression = build_x_arrow (postfix_expression);
4858   /* Check to see whether or not the expression is type-dependent.  */
4859   dependent_p = type_dependent_expression_p (postfix_expression);
4860   /* The identifier following the `->' or `.' is not qualified.  */
4861   parser->scope = NULL_TREE;
4862   parser->qualifying_scope = NULL_TREE;
4863   parser->object_scope = NULL_TREE;
4864   *idk = CP_ID_KIND_NONE;
4865   /* Enter the scope corresponding to the type of the object
4866      given by the POSTFIX_EXPRESSION.  */
4867   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
4868     {
4869       scope = TREE_TYPE (postfix_expression);
4870       /* According to the standard, no expression should ever have
4871          reference type.  Unfortunately, we do not currently match
4872          the standard in this respect in that our internal representation
4873          of an expression may have reference type even when the standard
4874          says it does not.  Therefore, we have to manually obtain the
4875          underlying type here.  */
4876       scope = non_reference (scope);
4877       /* The type of the POSTFIX_EXPRESSION must be complete.  */
4878       if (scope == unknown_type_node)
4879         {
4880           error ("%qE does not have class type", postfix_expression);
4881           scope = NULL_TREE;
4882         }
4883       else
4884         scope = complete_type_or_else (scope, NULL_TREE);
4885       /* Let the name lookup machinery know that we are processing a
4886          class member access expression.  */
4887       parser->context->object_type = scope;
4888       /* If something went wrong, we want to be able to discern that case,
4889          as opposed to the case where there was no SCOPE due to the type
4890          of expression being dependent.  */
4891       if (!scope)
4892         scope = error_mark_node;
4893       /* If the SCOPE was erroneous, make the various semantic analysis
4894          functions exit quickly -- and without issuing additional error
4895          messages.  */
4896       if (scope == error_mark_node)
4897         postfix_expression = error_mark_node;
4898     }
4899
4900   /* Assume this expression is not a pseudo-destructor access.  */
4901   pseudo_destructor_p = false;
4902
4903   /* If the SCOPE is a scalar type, then, if this is a valid program,
4904      we must be looking at a pseudo-destructor-name.  If POSTFIX_EXPRESSION
4905      is type dependent, it can be pseudo-destructor-name or something else.
4906      Try to parse it as pseudo-destructor-name first.  */
4907   if ((scope && SCALAR_TYPE_P (scope)) || dependent_p)
4908     {
4909       tree s;
4910       tree type;
4911
4912       cp_parser_parse_tentatively (parser);
4913       /* Parse the pseudo-destructor-name.  */
4914       s = NULL_TREE;
4915       cp_parser_pseudo_destructor_name (parser, &s, &type);
4916       if (dependent_p
4917           && (cp_parser_error_occurred (parser)
4918               || TREE_CODE (type) != TYPE_DECL
4919               || !SCALAR_TYPE_P (TREE_TYPE (type))))
4920         cp_parser_abort_tentative_parse (parser);
4921       else if (cp_parser_parse_definitely (parser))
4922         {
4923           pseudo_destructor_p = true;
4924           postfix_expression
4925             = finish_pseudo_destructor_expr (postfix_expression,
4926                                              s, TREE_TYPE (type));
4927         }
4928     }
4929
4930   if (!pseudo_destructor_p)
4931     {
4932       /* If the SCOPE is not a scalar type, we are looking at an
4933          ordinary class member access expression, rather than a
4934          pseudo-destructor-name.  */
4935       bool template_p;
4936       /* Parse the id-expression.  */
4937       name = (cp_parser_id_expression
4938               (parser,
4939                cp_parser_optional_template_keyword (parser),
4940                /*check_dependency_p=*/true,
4941                &template_p,
4942                /*declarator_p=*/false,
4943                /*optional_p=*/false));
4944       /* In general, build a SCOPE_REF if the member name is qualified.
4945          However, if the name was not dependent and has already been
4946          resolved; there is no need to build the SCOPE_REF.  For example;
4947
4948              struct X { void f(); };
4949              template <typename T> void f(T* t) { t->X::f(); }
4950
4951          Even though "t" is dependent, "X::f" is not and has been resolved
4952          to a BASELINK; there is no need to include scope information.  */
4953
4954       /* But we do need to remember that there was an explicit scope for
4955          virtual function calls.  */
4956       if (parser->scope)
4957         *idk = CP_ID_KIND_QUALIFIED;
4958
4959       /* If the name is a template-id that names a type, we will get a
4960          TYPE_DECL here.  That is invalid code.  */
4961       if (TREE_CODE (name) == TYPE_DECL)
4962         {
4963           error ("invalid use of %qD", name);
4964           postfix_expression = error_mark_node;
4965         }
4966       else
4967         {
4968           if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
4969             {
4970               name = build_qualified_name (/*type=*/NULL_TREE,
4971                                            parser->scope,
4972                                            name,
4973                                            template_p);
4974               parser->scope = NULL_TREE;
4975               parser->qualifying_scope = NULL_TREE;
4976               parser->object_scope = NULL_TREE;
4977             }
4978           if (scope && name && BASELINK_P (name))
4979             adjust_result_of_qualified_name_lookup
4980               (name, BINFO_TYPE (BASELINK_ACCESS_BINFO (name)), scope);
4981           postfix_expression
4982             = finish_class_member_access_expr (postfix_expression, name,
4983                                                template_p, 
4984                                                tf_warning_or_error);
4985         }
4986     }
4987
4988   /* We no longer need to look up names in the scope of the object on
4989      the left-hand side of the `.' or `->' operator.  */
4990   parser->context->object_type = NULL_TREE;
4991
4992   /* Outside of offsetof, these operators may not appear in
4993      constant-expressions.  */
4994   if (!for_offsetof
4995       && (cp_parser_non_integral_constant_expression
4996           (parser, token_type == CPP_DEREF ? "%<->%>" : "%<.%>")))
4997     postfix_expression = error_mark_node;
4998
4999   return postfix_expression;
5000 }
5001
5002 /* Parse a parenthesized expression-list.
5003
5004    expression-list:
5005      assignment-expression
5006      expression-list, assignment-expression
5007
5008    attribute-list:
5009      expression-list
5010      identifier
5011      identifier, expression-list
5012
5013    CAST_P is true if this expression is the target of a cast.
5014
5015    ALLOW_EXPANSION_P is true if this expression allows expansion of an
5016    argument pack.
5017
5018    Returns a TREE_LIST.  The TREE_VALUE of each node is a
5019    representation of an assignment-expression.  Note that a TREE_LIST
5020    is returned even if there is only a single expression in the list.
5021    error_mark_node is returned if the ( and or ) are
5022    missing. NULL_TREE is returned on no expressions. The parentheses
5023    are eaten. IS_ATTRIBUTE_LIST is true if this is really an attribute
5024    list being parsed.  If NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P
5025    indicates whether or not all of the expressions in the list were
5026    constant.  */
5027
5028 static tree
5029 cp_parser_parenthesized_expression_list (cp_parser* parser,
5030                                          bool is_attribute_list,
5031                                          bool cast_p,
5032                                          bool allow_expansion_p,
5033                                          bool *non_constant_p)
5034 {
5035   tree expression_list = NULL_TREE;
5036   bool fold_expr_p = is_attribute_list;
5037   tree identifier = NULL_TREE;
5038   bool saved_greater_than_is_operator_p;
5039
5040   /* Assume all the expressions will be constant.  */
5041   if (non_constant_p)
5042     *non_constant_p = false;
5043
5044   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
5045     return error_mark_node;
5046
5047   /* Within a parenthesized expression, a `>' token is always
5048      the greater-than operator.  */
5049   saved_greater_than_is_operator_p
5050     = parser->greater_than_is_operator_p;
5051   parser->greater_than_is_operator_p = true;
5052
5053   /* Consume expressions until there are no more.  */
5054   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
5055     while (true)
5056       {
5057         tree expr;
5058
5059         /* At the beginning of attribute lists, check to see if the
5060            next token is an identifier.  */
5061         if (is_attribute_list
5062             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
5063           {
5064             cp_token *token;
5065
5066             /* Consume the identifier.  */
5067             token = cp_lexer_consume_token (parser->lexer);
5068             /* Save the identifier.  */
5069             identifier = token->u.value;
5070           }
5071         else
5072           {
5073             /* Parse the next assignment-expression.  */
5074             if (non_constant_p)
5075               {
5076                 bool expr_non_constant_p;
5077                 expr = (cp_parser_constant_expression
5078                         (parser, /*allow_non_constant_p=*/true,
5079                          &expr_non_constant_p));
5080                 if (expr_non_constant_p)
5081                   *non_constant_p = true;
5082               }
5083             else
5084               expr = cp_parser_assignment_expression (parser, cast_p);
5085
5086             if (fold_expr_p)
5087               expr = fold_non_dependent_expr (expr);
5088
5089             /* If we have an ellipsis, then this is an expression
5090                expansion.  */
5091             if (allow_expansion_p
5092                 && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
5093               {
5094                 /* Consume the `...'.  */
5095                 cp_lexer_consume_token (parser->lexer);
5096
5097                 /* Build the argument pack.  */
5098                 expr = make_pack_expansion (expr);
5099               }
5100
5101              /* Add it to the list.  We add error_mark_node
5102                 expressions to the list, so that we can still tell if
5103                 the correct form for a parenthesized expression-list
5104                 is found. That gives better errors.  */
5105             expression_list = tree_cons (NULL_TREE, expr, expression_list);
5106
5107             if (expr == error_mark_node)
5108               goto skip_comma;
5109           }
5110
5111         /* After the first item, attribute lists look the same as
5112            expression lists.  */
5113         is_attribute_list = false;
5114
5115       get_comma:;
5116         /* If the next token isn't a `,', then we are done.  */
5117         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
5118           break;
5119
5120         /* Otherwise, consume the `,' and keep going.  */
5121         cp_lexer_consume_token (parser->lexer);
5122       }
5123
5124   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
5125     {
5126       int ending;
5127
5128     skip_comma:;
5129       /* We try and resync to an unnested comma, as that will give the
5130          user better diagnostics.  */
5131       ending = cp_parser_skip_to_closing_parenthesis (parser,
5132                                                       /*recovering=*/true,
5133                                                       /*or_comma=*/true,
5134                                                       /*consume_paren=*/true);
5135       if (ending < 0)
5136         goto get_comma;
5137       if (!ending)
5138         {
5139           parser->greater_than_is_operator_p
5140             = saved_greater_than_is_operator_p;
5141           return error_mark_node;
5142         }
5143     }
5144
5145   parser->greater_than_is_operator_p
5146     = saved_greater_than_is_operator_p;
5147
5148   /* We built up the list in reverse order so we must reverse it now.  */
5149   expression_list = nreverse (expression_list);
5150   if (identifier)
5151     expression_list = tree_cons (NULL_TREE, identifier, expression_list);
5152
5153   return expression_list;
5154 }
5155
5156 /* Parse a pseudo-destructor-name.
5157
5158    pseudo-destructor-name:
5159      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
5160      :: [opt] nested-name-specifier template template-id :: ~ type-name
5161      :: [opt] nested-name-specifier [opt] ~ type-name
5162
5163    If either of the first two productions is used, sets *SCOPE to the
5164    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
5165    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
5166    or ERROR_MARK_NODE if the parse fails.  */
5167
5168 static void
5169 cp_parser_pseudo_destructor_name (cp_parser* parser,
5170                                   tree* scope,
5171                                   tree* type)
5172 {
5173   bool nested_name_specifier_p;
5174
5175   /* Assume that things will not work out.  */
5176   *type = error_mark_node;
5177
5178   /* Look for the optional `::' operator.  */
5179   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
5180   /* Look for the optional nested-name-specifier.  */
5181   nested_name_specifier_p
5182     = (cp_parser_nested_name_specifier_opt (parser,
5183                                             /*typename_keyword_p=*/false,
5184                                             /*check_dependency_p=*/true,
5185                                             /*type_p=*/false,
5186                                             /*is_declaration=*/true)
5187        != NULL_TREE);
5188   /* Now, if we saw a nested-name-specifier, we might be doing the
5189      second production.  */
5190   if (nested_name_specifier_p
5191       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
5192     {
5193       /* Consume the `template' keyword.  */
5194       cp_lexer_consume_token (parser->lexer);
5195       /* Parse the template-id.  */
5196       cp_parser_template_id (parser,
5197                              /*template_keyword_p=*/true,
5198                              /*check_dependency_p=*/false,
5199                              /*is_declaration=*/true);
5200       /* Look for the `::' token.  */
5201       cp_parser_require (parser, CPP_SCOPE, "%<::%>");
5202     }
5203   /* If the next token is not a `~', then there might be some
5204      additional qualification.  */
5205   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
5206     {
5207       /* At this point, we're looking for "type-name :: ~".  The type-name
5208          must not be a class-name, since this is a pseudo-destructor.  So,
5209          it must be either an enum-name, or a typedef-name -- both of which
5210          are just identifiers.  So, we peek ahead to check that the "::"
5211          and "~" tokens are present; if they are not, then we can avoid
5212          calling type_name.  */
5213       if (cp_lexer_peek_token (parser->lexer)->type != CPP_NAME
5214           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE
5215           || cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_COMPL)
5216         {
5217           cp_parser_error (parser, "non-scalar type");
5218           return;
5219         }
5220
5221       /* Look for the type-name.  */
5222       *scope = TREE_TYPE (cp_parser_nonclass_name (parser));
5223       if (*scope == error_mark_node)
5224         return;
5225
5226       /* Look for the `::' token.  */
5227       cp_parser_require (parser, CPP_SCOPE, "%<::%>");
5228     }
5229   else
5230     *scope = NULL_TREE;
5231
5232   /* Look for the `~'.  */
5233   cp_parser_require (parser, CPP_COMPL, "%<~%>");
5234   /* Look for the type-name again.  We are not responsible for
5235      checking that it matches the first type-name.  */
5236   *type = cp_parser_nonclass_name (parser);
5237 }
5238
5239 /* Parse a unary-expression.
5240
5241    unary-expression:
5242      postfix-expression
5243      ++ cast-expression
5244      -- cast-expression
5245      unary-operator cast-expression
5246      sizeof unary-expression
5247      sizeof ( type-id )
5248      new-expression
5249      delete-expression
5250
5251    GNU Extensions:
5252
5253    unary-expression:
5254      __extension__ cast-expression
5255      __alignof__ unary-expression
5256      __alignof__ ( type-id )
5257      __real__ cast-expression
5258      __imag__ cast-expression
5259      && identifier
5260
5261    ADDRESS_P is true iff the unary-expression is appearing as the
5262    operand of the `&' operator.   CAST_P is true if this expression is
5263    the target of a cast.
5264
5265    Returns a representation of the expression.  */
5266
5267 static tree
5268 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p)
5269 {
5270   cp_token *token;
5271   enum tree_code unary_operator;
5272
5273   /* Peek at the next token.  */
5274   token = cp_lexer_peek_token (parser->lexer);
5275   /* Some keywords give away the kind of expression.  */
5276   if (token->type == CPP_KEYWORD)
5277     {
5278       enum rid keyword = token->keyword;
5279
5280       switch (keyword)
5281         {
5282         case RID_ALIGNOF:
5283         case RID_SIZEOF:
5284           {
5285             tree operand;
5286             enum tree_code op;
5287
5288             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
5289             /* Consume the token.  */
5290             cp_lexer_consume_token (parser->lexer);
5291             /* Parse the operand.  */
5292             operand = cp_parser_sizeof_operand (parser, keyword);
5293
5294             if (TYPE_P (operand))
5295               return cxx_sizeof_or_alignof_type (operand, op, true);
5296             else
5297               return cxx_sizeof_or_alignof_expr (operand, op, true);
5298           }
5299
5300         case RID_NEW:
5301           return cp_parser_new_expression (parser);
5302
5303         case RID_DELETE:
5304           return cp_parser_delete_expression (parser);
5305
5306         case RID_EXTENSION:
5307           {
5308             /* The saved value of the PEDANTIC flag.  */
5309             int saved_pedantic;
5310             tree expr;
5311
5312             /* Save away the PEDANTIC flag.  */
5313             cp_parser_extension_opt (parser, &saved_pedantic);
5314             /* Parse the cast-expression.  */
5315             expr = cp_parser_simple_cast_expression (parser);
5316             /* Restore the PEDANTIC flag.  */
5317             pedantic = saved_pedantic;
5318
5319             return expr;
5320           }
5321
5322         case RID_REALPART:
5323         case RID_IMAGPART:
5324           {
5325             tree expression;
5326
5327             /* Consume the `__real__' or `__imag__' token.  */
5328             cp_lexer_consume_token (parser->lexer);
5329             /* Parse the cast-expression.  */
5330             expression = cp_parser_simple_cast_expression (parser);
5331             /* Create the complete representation.  */
5332             return build_x_unary_op ((keyword == RID_REALPART
5333                                       ? REALPART_EXPR : IMAGPART_EXPR),
5334                                      expression,
5335                                      tf_warning_or_error);
5336           }
5337           break;
5338
5339         default:
5340           break;
5341         }
5342     }
5343
5344   /* Look for the `:: new' and `:: delete', which also signal the
5345      beginning of a new-expression, or delete-expression,
5346      respectively.  If the next token is `::', then it might be one of
5347      these.  */
5348   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
5349     {
5350       enum rid keyword;
5351
5352       /* See if the token after the `::' is one of the keywords in
5353          which we're interested.  */
5354       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
5355       /* If it's `new', we have a new-expression.  */
5356       if (keyword == RID_NEW)
5357         return cp_parser_new_expression (parser);
5358       /* Similarly, for `delete'.  */
5359       else if (keyword == RID_DELETE)
5360         return cp_parser_delete_expression (parser);
5361     }
5362
5363   /* Look for a unary operator.  */
5364   unary_operator = cp_parser_unary_operator (token);
5365   /* The `++' and `--' operators can be handled similarly, even though
5366      they are not technically unary-operators in the grammar.  */
5367   if (unary_operator == ERROR_MARK)
5368     {
5369       if (token->type == CPP_PLUS_PLUS)
5370         unary_operator = PREINCREMENT_EXPR;
5371       else if (token->type == CPP_MINUS_MINUS)
5372         unary_operator = PREDECREMENT_EXPR;
5373       /* Handle the GNU address-of-label extension.  */
5374       else if (cp_parser_allow_gnu_extensions_p (parser)
5375                && token->type == CPP_AND_AND)
5376         {
5377           tree identifier;
5378           tree expression;
5379
5380           /* Consume the '&&' token.  */
5381           cp_lexer_consume_token (parser->lexer);
5382           /* Look for the identifier.  */
5383           identifier = cp_parser_identifier (parser);
5384           /* Create an expression representing the address.  */
5385           expression = finish_label_address_expr (identifier);
5386           if (cp_parser_non_integral_constant_expression (parser,
5387                                                 "the address of a label"))
5388             expression = error_mark_node;
5389           return expression;
5390         }
5391     }
5392   if (unary_operator != ERROR_MARK)
5393     {
5394       tree cast_expression;
5395       tree expression = error_mark_node;
5396       const char *non_constant_p = NULL;
5397
5398       /* Consume the operator token.  */
5399       token = cp_lexer_consume_token (parser->lexer);
5400       /* Parse the cast-expression.  */
5401       cast_expression
5402         = cp_parser_cast_expression (parser,
5403                                      unary_operator == ADDR_EXPR,
5404                                      /*cast_p=*/false);
5405       /* Now, build an appropriate representation.  */
5406       switch (unary_operator)
5407         {
5408         case INDIRECT_REF:
5409           non_constant_p = "%<*%>";
5410           expression = build_x_indirect_ref (cast_expression, "unary *",
5411                                              tf_warning_or_error);
5412           break;
5413
5414         case ADDR_EXPR:
5415           non_constant_p = "%<&%>";
5416           /* Fall through.  */
5417         case BIT_NOT_EXPR:
5418           expression = build_x_unary_op (unary_operator, cast_expression,
5419                                          tf_warning_or_error);
5420           break;
5421
5422         case PREINCREMENT_EXPR:
5423         case PREDECREMENT_EXPR:
5424           non_constant_p = (unary_operator == PREINCREMENT_EXPR
5425                             ? "%<++%>" : "%<--%>");
5426           /* Fall through.  */
5427         case UNARY_PLUS_EXPR:
5428         case NEGATE_EXPR:
5429         case TRUTH_NOT_EXPR:
5430           expression = finish_unary_op_expr (unary_operator, cast_expression);
5431           break;
5432
5433         default:
5434           gcc_unreachable ();
5435         }
5436
5437       if (non_constant_p
5438           && cp_parser_non_integral_constant_expression (parser,
5439                                                          non_constant_p))
5440         expression = error_mark_node;
5441
5442       return expression;
5443     }
5444
5445   return cp_parser_postfix_expression (parser, address_p, cast_p,
5446                                        /*member_access_only_p=*/false);
5447 }
5448
5449 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
5450    unary-operator, the corresponding tree code is returned.  */
5451
5452 static enum tree_code
5453 cp_parser_unary_operator (cp_token* token)
5454 {
5455   switch (token->type)
5456     {
5457     case CPP_MULT:
5458       return INDIRECT_REF;
5459
5460     case CPP_AND:
5461       return ADDR_EXPR;
5462
5463     case CPP_PLUS:
5464       return UNARY_PLUS_EXPR;
5465
5466     case CPP_MINUS:
5467       return NEGATE_EXPR;
5468
5469     case CPP_NOT:
5470       return TRUTH_NOT_EXPR;
5471
5472     case CPP_COMPL:
5473       return BIT_NOT_EXPR;
5474
5475     default:
5476       return ERROR_MARK;
5477     }
5478 }
5479
5480 /* Parse a new-expression.
5481
5482    new-expression:
5483      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
5484      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
5485
5486    Returns a representation of the expression.  */
5487
5488 static tree
5489 cp_parser_new_expression (cp_parser* parser)
5490 {
5491   bool global_scope_p;
5492   tree placement;
5493   tree type;
5494   tree initializer;
5495   tree nelts;
5496
5497   /* Look for the optional `::' operator.  */
5498   global_scope_p
5499     = (cp_parser_global_scope_opt (parser,
5500                                    /*current_scope_valid_p=*/false)
5501        != NULL_TREE);
5502   /* Look for the `new' operator.  */
5503   cp_parser_require_keyword (parser, RID_NEW, "%<new%>");
5504   /* There's no easy way to tell a new-placement from the
5505      `( type-id )' construct.  */
5506   cp_parser_parse_tentatively (parser);
5507   /* Look for a new-placement.  */
5508   placement = cp_parser_new_placement (parser);
5509   /* If that didn't work out, there's no new-placement.  */
5510   if (!cp_parser_parse_definitely (parser))
5511     placement = NULL_TREE;
5512
5513   /* If the next token is a `(', then we have a parenthesized
5514      type-id.  */
5515   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5516     {
5517       /* Consume the `('.  */
5518       cp_lexer_consume_token (parser->lexer);
5519       /* Parse the type-id.  */
5520       type = cp_parser_type_id (parser);
5521       /* Look for the closing `)'.  */
5522       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
5523       /* There should not be a direct-new-declarator in this production,
5524          but GCC used to allowed this, so we check and emit a sensible error
5525          message for this case.  */
5526       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5527         {
5528           error ("array bound forbidden after parenthesized type-id");
5529           inform ("try removing the parentheses around the type-id");
5530           cp_parser_direct_new_declarator (parser);
5531         }
5532       nelts = NULL_TREE;
5533     }
5534   /* Otherwise, there must be a new-type-id.  */
5535   else
5536     type = cp_parser_new_type_id (parser, &nelts);
5537
5538   /* If the next token is a `(', then we have a new-initializer.  */
5539   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5540     initializer = cp_parser_new_initializer (parser);
5541   else
5542     initializer = NULL_TREE;
5543
5544   /* A new-expression may not appear in an integral constant
5545      expression.  */
5546   if (cp_parser_non_integral_constant_expression (parser, "%<new%>"))
5547     return error_mark_node;
5548
5549   /* Create a representation of the new-expression.  */
5550   return build_new (placement, type, nelts, initializer, global_scope_p,
5551                     tf_warning_or_error);
5552 }
5553
5554 /* Parse a new-placement.
5555
5556    new-placement:
5557      ( expression-list )
5558
5559    Returns the same representation as for an expression-list.  */
5560
5561 static tree
5562 cp_parser_new_placement (cp_parser* parser)
5563 {
5564   tree expression_list;
5565
5566   /* Parse the expression-list.  */
5567   expression_list = (cp_parser_parenthesized_expression_list
5568                      (parser, false, /*cast_p=*/false, /*allow_expansion_p=*/true,
5569                       /*non_constant_p=*/NULL));
5570
5571   return expression_list;
5572 }
5573
5574 /* Parse a new-type-id.
5575
5576    new-type-id:
5577      type-specifier-seq new-declarator [opt]
5578
5579    Returns the TYPE allocated.  If the new-type-id indicates an array
5580    type, *NELTS is set to the number of elements in the last array
5581    bound; the TYPE will not include the last array bound.  */
5582
5583 static tree
5584 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
5585 {
5586   cp_decl_specifier_seq type_specifier_seq;
5587   cp_declarator *new_declarator;
5588   cp_declarator *declarator;
5589   cp_declarator *outer_declarator;
5590   const char *saved_message;
5591   tree type;
5592
5593   /* The type-specifier sequence must not contain type definitions.
5594      (It cannot contain declarations of new types either, but if they
5595      are not definitions we will catch that because they are not
5596      complete.)  */
5597   saved_message = parser->type_definition_forbidden_message;
5598   parser->type_definition_forbidden_message
5599     = "types may not be defined in a new-type-id";
5600   /* Parse the type-specifier-seq.  */
5601   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
5602                                 &type_specifier_seq);
5603   /* Restore the old message.  */
5604   parser->type_definition_forbidden_message = saved_message;
5605   /* Parse the new-declarator.  */
5606   new_declarator = cp_parser_new_declarator_opt (parser);
5607
5608   /* Determine the number of elements in the last array dimension, if
5609      any.  */
5610   *nelts = NULL_TREE;
5611   /* Skip down to the last array dimension.  */
5612   declarator = new_declarator;
5613   outer_declarator = NULL;
5614   while (declarator && (declarator->kind == cdk_pointer
5615                         || declarator->kind == cdk_ptrmem))
5616     {
5617       outer_declarator = declarator;
5618       declarator = declarator->declarator;
5619     }
5620   while (declarator
5621          && declarator->kind == cdk_array
5622          && declarator->declarator
5623          && declarator->declarator->kind == cdk_array)
5624     {
5625       outer_declarator = declarator;
5626       declarator = declarator->declarator;
5627     }
5628
5629   if (declarator && declarator->kind == cdk_array)
5630     {
5631       *nelts = declarator->u.array.bounds;
5632       if (*nelts == error_mark_node)
5633         *nelts = integer_one_node;
5634
5635       if (outer_declarator)
5636         outer_declarator->declarator = declarator->declarator;
5637       else
5638         new_declarator = NULL;
5639     }
5640
5641   type = groktypename (&type_specifier_seq, new_declarator);
5642   return type;
5643 }
5644
5645 /* Parse an (optional) new-declarator.
5646
5647    new-declarator:
5648      ptr-operator new-declarator [opt]
5649      direct-new-declarator
5650
5651    Returns the declarator.  */
5652
5653 static cp_declarator *
5654 cp_parser_new_declarator_opt (cp_parser* parser)
5655 {
5656   enum tree_code code;
5657   tree type;
5658   cp_cv_quals cv_quals;
5659
5660   /* We don't know if there's a ptr-operator next, or not.  */
5661   cp_parser_parse_tentatively (parser);
5662   /* Look for a ptr-operator.  */
5663   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
5664   /* If that worked, look for more new-declarators.  */
5665   if (cp_parser_parse_definitely (parser))
5666     {
5667       cp_declarator *declarator;
5668
5669       /* Parse another optional declarator.  */
5670       declarator = cp_parser_new_declarator_opt (parser);
5671
5672       return cp_parser_make_indirect_declarator
5673         (code, type, cv_quals, declarator);
5674     }
5675
5676   /* If the next token is a `[', there is a direct-new-declarator.  */
5677   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5678     return cp_parser_direct_new_declarator (parser);
5679
5680   return NULL;
5681 }
5682
5683 /* Parse a direct-new-declarator.
5684
5685    direct-new-declarator:
5686      [ expression ]
5687      direct-new-declarator [constant-expression]
5688
5689    */
5690
5691 static cp_declarator *
5692 cp_parser_direct_new_declarator (cp_parser* parser)
5693 {
5694   cp_declarator *declarator = NULL;
5695
5696   while (true)
5697     {
5698       tree expression;
5699
5700       /* Look for the opening `['.  */
5701       cp_parser_require (parser, CPP_OPEN_SQUARE, "%<[%>");
5702       /* The first expression is not required to be constant.  */
5703       if (!declarator)
5704         {
5705           expression = cp_parser_expression (parser, /*cast_p=*/false);
5706           /* The standard requires that the expression have integral
5707              type.  DR 74 adds enumeration types.  We believe that the
5708              real intent is that these expressions be handled like the
5709              expression in a `switch' condition, which also allows
5710              classes with a single conversion to integral or
5711              enumeration type.  */
5712           if (!processing_template_decl)
5713             {
5714               expression
5715                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5716                                               expression,
5717                                               /*complain=*/true);
5718               if (!expression)
5719                 {
5720                   error ("expression in new-declarator must have integral "
5721                          "or enumeration type");
5722                   expression = error_mark_node;
5723                 }
5724             }
5725         }
5726       /* But all the other expressions must be.  */
5727       else
5728         expression
5729           = cp_parser_constant_expression (parser,
5730                                            /*allow_non_constant=*/false,
5731                                            NULL);
5732       /* Look for the closing `]'.  */
5733       cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
5734
5735       /* Add this bound to the declarator.  */
5736       declarator = make_array_declarator (declarator, expression);
5737
5738       /* If the next token is not a `[', then there are no more
5739          bounds.  */
5740       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
5741         break;
5742     }
5743
5744   return declarator;
5745 }
5746
5747 /* Parse a new-initializer.
5748
5749    new-initializer:
5750      ( expression-list [opt] )
5751
5752    Returns a representation of the expression-list.  If there is no
5753    expression-list, VOID_ZERO_NODE is returned.  */
5754
5755 static tree
5756 cp_parser_new_initializer (cp_parser* parser)
5757 {
5758   tree expression_list;
5759
5760   expression_list = (cp_parser_parenthesized_expression_list
5761                      (parser, false, /*cast_p=*/false, /*allow_expansion_p=*/true,
5762                       /*non_constant_p=*/NULL));
5763   if (!expression_list)
5764     expression_list = void_zero_node;
5765
5766   return expression_list;
5767 }
5768
5769 /* Parse a delete-expression.
5770
5771    delete-expression:
5772      :: [opt] delete cast-expression
5773      :: [opt] delete [ ] cast-expression
5774
5775    Returns a representation of the expression.  */
5776
5777 static tree
5778 cp_parser_delete_expression (cp_parser* parser)
5779 {
5780   bool global_scope_p;
5781   bool array_p;
5782   tree expression;
5783
5784   /* Look for the optional `::' operator.  */
5785   global_scope_p
5786     = (cp_parser_global_scope_opt (parser,
5787                                    /*current_scope_valid_p=*/false)
5788        != NULL_TREE);
5789   /* Look for the `delete' keyword.  */
5790   cp_parser_require_keyword (parser, RID_DELETE, "%<delete%>");
5791   /* See if the array syntax is in use.  */
5792   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5793     {
5794       /* Consume the `[' token.  */
5795       cp_lexer_consume_token (parser->lexer);
5796       /* Look for the `]' token.  */
5797       cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
5798       /* Remember that this is the `[]' construct.  */
5799       array_p = true;
5800     }
5801   else
5802     array_p = false;
5803
5804   /* Parse the cast-expression.  */
5805   expression = cp_parser_simple_cast_expression (parser);
5806
5807   /* A delete-expression may not appear in an integral constant
5808      expression.  */
5809   if (cp_parser_non_integral_constant_expression (parser, "%<delete%>"))
5810     return error_mark_node;
5811
5812   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p);
5813 }
5814
5815 /* Parse a cast-expression.
5816
5817    cast-expression:
5818      unary-expression
5819      ( type-id ) cast-expression
5820
5821    ADDRESS_P is true iff the unary-expression is appearing as the
5822    operand of the `&' operator.   CAST_P is true if this expression is
5823    the target of a cast.
5824
5825    Returns a representation of the expression.  */
5826
5827 static tree
5828 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p)
5829 {
5830   /* If it's a `(', then we might be looking at a cast.  */
5831   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5832     {
5833       tree type = NULL_TREE;
5834       tree expr = NULL_TREE;
5835       bool compound_literal_p;
5836       const char *saved_message;
5837
5838       /* There's no way to know yet whether or not this is a cast.
5839          For example, `(int (3))' is a unary-expression, while `(int)
5840          3' is a cast.  So, we resort to parsing tentatively.  */
5841       cp_parser_parse_tentatively (parser);
5842       /* Types may not be defined in a cast.  */
5843       saved_message = parser->type_definition_forbidden_message;
5844       parser->type_definition_forbidden_message
5845         = "types may not be defined in casts";
5846       /* Consume the `('.  */
5847       cp_lexer_consume_token (parser->lexer);
5848       /* A very tricky bit is that `(struct S) { 3 }' is a
5849          compound-literal (which we permit in C++ as an extension).
5850          But, that construct is not a cast-expression -- it is a
5851          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
5852          is legal; if the compound-literal were a cast-expression,
5853          you'd need an extra set of parentheses.)  But, if we parse
5854          the type-id, and it happens to be a class-specifier, then we
5855          will commit to the parse at that point, because we cannot
5856          undo the action that is done when creating a new class.  So,
5857          then we cannot back up and do a postfix-expression.
5858
5859          Therefore, we scan ahead to the closing `)', and check to see
5860          if the token after the `)' is a `{'.  If so, we are not
5861          looking at a cast-expression.
5862
5863          Save tokens so that we can put them back.  */
5864       cp_lexer_save_tokens (parser->lexer);
5865       /* Skip tokens until the next token is a closing parenthesis.
5866          If we find the closing `)', and the next token is a `{', then
5867          we are looking at a compound-literal.  */
5868       compound_literal_p
5869         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
5870                                                   /*consume_paren=*/true)
5871            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
5872       /* Roll back the tokens we skipped.  */
5873       cp_lexer_rollback_tokens (parser->lexer);
5874       /* If we were looking at a compound-literal, simulate an error
5875          so that the call to cp_parser_parse_definitely below will
5876          fail.  */
5877       if (compound_literal_p)
5878         cp_parser_simulate_error (parser);
5879       else
5880         {
5881           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5882           parser->in_type_id_in_expr_p = true;
5883           /* Look for the type-id.  */
5884           type = cp_parser_type_id (parser);
5885           /* Look for the closing `)'.  */
5886           cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
5887           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5888         }
5889
5890       /* Restore the saved message.  */
5891       parser->type_definition_forbidden_message = saved_message;
5892
5893       /* If ok so far, parse the dependent expression. We cannot be
5894          sure it is a cast. Consider `(T ())'.  It is a parenthesized
5895          ctor of T, but looks like a cast to function returning T
5896          without a dependent expression.  */
5897       if (!cp_parser_error_occurred (parser))
5898         expr = cp_parser_cast_expression (parser,
5899                                           /*address_p=*/false,
5900                                           /*cast_p=*/true);
5901
5902       if (cp_parser_parse_definitely (parser))
5903         {
5904           /* Warn about old-style casts, if so requested.  */
5905           if (warn_old_style_cast
5906               && !in_system_header
5907               && !VOID_TYPE_P (type)
5908               && current_lang_name != lang_name_c)
5909             warning (OPT_Wold_style_cast, "use of old-style cast");
5910
5911           /* Only type conversions to integral or enumeration types
5912              can be used in constant-expressions.  */
5913           if (!cast_valid_in_integral_constant_expression_p (type)
5914               && (cp_parser_non_integral_constant_expression
5915                   (parser,
5916                    "a cast to a type other than an integral or "
5917                    "enumeration type")))
5918             return error_mark_node;
5919
5920           /* Perform the cast.  */
5921           expr = build_c_cast (type, expr);
5922           return expr;
5923         }
5924     }
5925
5926   /* If we get here, then it's not a cast, so it must be a
5927      unary-expression.  */
5928   return cp_parser_unary_expression (parser, address_p, cast_p);
5929 }
5930
5931 /* Parse a binary expression of the general form:
5932
5933    pm-expression:
5934      cast-expression
5935      pm-expression .* cast-expression
5936      pm-expression ->* cast-expression
5937
5938    multiplicative-expression:
5939      pm-expression
5940      multiplicative-expression * pm-expression
5941      multiplicative-expression / pm-expression
5942      multiplicative-expression % pm-expression
5943
5944    additive-expression:
5945      multiplicative-expression
5946      additive-expression + multiplicative-expression
5947      additive-expression - multiplicative-expression
5948
5949    shift-expression:
5950      additive-expression
5951      shift-expression << additive-expression
5952      shift-expression >> additive-expression
5953
5954    relational-expression:
5955      shift-expression
5956      relational-expression < shift-expression
5957      relational-expression > shift-expression
5958      relational-expression <= shift-expression
5959      relational-expression >= shift-expression
5960
5961   GNU Extension:
5962
5963    relational-expression:
5964      relational-expression <? shift-expression
5965      relational-expression >? shift-expression
5966
5967    equality-expression:
5968      relational-expression
5969      equality-expression == relational-expression
5970      equality-expression != relational-expression
5971
5972    and-expression:
5973      equality-expression
5974      and-expression & equality-expression
5975
5976    exclusive-or-expression:
5977      and-expression
5978      exclusive-or-expression ^ and-expression
5979
5980    inclusive-or-expression:
5981      exclusive-or-expression
5982      inclusive-or-expression | exclusive-or-expression
5983
5984    logical-and-expression:
5985      inclusive-or-expression
5986      logical-and-expression && inclusive-or-expression
5987
5988    logical-or-expression:
5989      logical-and-expression
5990      logical-or-expression || logical-and-expression
5991
5992    All these are implemented with a single function like:
5993
5994    binary-expression:
5995      simple-cast-expression
5996      binary-expression <token> binary-expression
5997
5998    CAST_P is true if this expression is the target of a cast.
5999
6000    The binops_by_token map is used to get the tree codes for each <token> type.
6001    binary-expressions are associated according to a precedence table.  */
6002
6003 #define TOKEN_PRECEDENCE(token)                              \
6004 (((token->type == CPP_GREATER                                \
6005    || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT)) \
6006   && !parser->greater_than_is_operator_p)                    \
6007  ? PREC_NOT_OPERATOR                                         \
6008  : binops_by_token[token->type].prec)
6009
6010 static tree
6011 cp_parser_binary_expression (cp_parser* parser, bool cast_p)
6012 {
6013   cp_parser_expression_stack stack;
6014   cp_parser_expression_stack_entry *sp = &stack[0];
6015   tree lhs, rhs;
6016   cp_token *token;
6017   enum tree_code tree_type, lhs_type, rhs_type;
6018   enum cp_parser_prec prec = PREC_NOT_OPERATOR, new_prec, lookahead_prec;
6019   bool overloaded_p;
6020
6021   /* Parse the first expression.  */
6022   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p);
6023   lhs_type = ERROR_MARK;
6024
6025   for (;;)
6026     {
6027       /* Get an operator token.  */
6028       token = cp_lexer_peek_token (parser->lexer);
6029
6030       if (warn_cxx0x_compat
6031           && token->type == CPP_RSHIFT
6032           && !parser->greater_than_is_operator_p)
6033         {
6034           warning (OPT_Wc__0x_compat, 
6035                    "%H%<>>%> operator will be treated as two right angle brackets in C++0x", 
6036                    &token->location);
6037           warning (OPT_Wc__0x_compat, 
6038                    "suggest parentheses around %<>>%> expression");
6039         }
6040
6041       new_prec = TOKEN_PRECEDENCE (token);
6042
6043       /* Popping an entry off the stack means we completed a subexpression:
6044          - either we found a token which is not an operator (`>' where it is not
6045            an operator, or prec == PREC_NOT_OPERATOR), in which case popping
6046            will happen repeatedly;
6047          - or, we found an operator which has lower priority.  This is the case
6048            where the recursive descent *ascends*, as in `3 * 4 + 5' after
6049            parsing `3 * 4'.  */
6050       if (new_prec <= prec)
6051         {
6052           if (sp == stack)
6053             break;
6054           else
6055             goto pop;
6056         }
6057
6058      get_rhs:
6059       tree_type = binops_by_token[token->type].tree_type;
6060
6061       /* We used the operator token.  */
6062       cp_lexer_consume_token (parser->lexer);
6063
6064       /* Extract another operand.  It may be the RHS of this expression
6065          or the LHS of a new, higher priority expression.  */
6066       rhs = cp_parser_simple_cast_expression (parser);
6067       rhs_type = ERROR_MARK;
6068
6069       /* Get another operator token.  Look up its precedence to avoid
6070          building a useless (immediately popped) stack entry for common
6071          cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
6072       token = cp_lexer_peek_token (parser->lexer);
6073       lookahead_prec = TOKEN_PRECEDENCE (token);
6074       if (lookahead_prec > new_prec)
6075         {
6076           /* ... and prepare to parse the RHS of the new, higher priority
6077              expression.  Since precedence levels on the stack are
6078              monotonically increasing, we do not have to care about
6079              stack overflows.  */
6080           sp->prec = prec;
6081           sp->tree_type = tree_type;
6082           sp->lhs = lhs;
6083           sp->lhs_type = lhs_type;
6084           sp++;
6085           lhs = rhs;
6086           lhs_type = rhs_type;
6087           prec = new_prec;
6088           new_prec = lookahead_prec;
6089           goto get_rhs;
6090
6091          pop:
6092           /* If the stack is not empty, we have parsed into LHS the right side
6093              (`4' in the example above) of an expression we had suspended.
6094              We can use the information on the stack to recover the LHS (`3')
6095              from the stack together with the tree code (`MULT_EXPR'), and
6096              the precedence of the higher level subexpression
6097              (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
6098              which will be used to actually build the additive expression.  */
6099           --sp;
6100           prec = sp->prec;
6101           tree_type = sp->tree_type;
6102           rhs = lhs;
6103           rhs_type = lhs_type;
6104           lhs = sp->lhs;
6105           lhs_type = sp->lhs_type;
6106         }
6107
6108       overloaded_p = false;
6109       lhs = build_x_binary_op (tree_type, lhs, lhs_type, rhs, rhs_type,
6110                                &overloaded_p, tf_warning_or_error);
6111       lhs_type = tree_type;
6112
6113       /* If the binary operator required the use of an overloaded operator,
6114          then this expression cannot be an integral constant-expression.
6115          An overloaded operator can be used even if both operands are
6116          otherwise permissible in an integral constant-expression if at
6117          least one of the operands is of enumeration type.  */
6118
6119       if (overloaded_p
6120           && (cp_parser_non_integral_constant_expression
6121               (parser, "calls to overloaded operators")))
6122         return error_mark_node;
6123     }
6124
6125   return lhs;
6126 }
6127
6128
6129 /* Parse the `? expression : assignment-expression' part of a
6130    conditional-expression.  The LOGICAL_OR_EXPR is the
6131    logical-or-expression that started the conditional-expression.
6132    Returns a representation of the entire conditional-expression.
6133
6134    This routine is used by cp_parser_assignment_expression.
6135
6136      ? expression : assignment-expression
6137
6138    GNU Extensions:
6139
6140      ? : assignment-expression */
6141
6142 static tree
6143 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
6144 {
6145   tree expr;
6146   tree assignment_expr;
6147
6148   /* Consume the `?' token.  */
6149   cp_lexer_consume_token (parser->lexer);
6150   if (cp_parser_allow_gnu_extensions_p (parser)
6151       && cp_lexer_next_token_is (parser->lexer, CPP_COLON))
6152     /* Implicit true clause.  */
6153     expr = NULL_TREE;
6154   else
6155     /* Parse the expression.  */
6156     expr = cp_parser_expression (parser, /*cast_p=*/false);
6157
6158   /* The next token should be a `:'.  */
6159   cp_parser_require (parser, CPP_COLON, "%<:%>");
6160   /* Parse the assignment-expression.  */
6161   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false);
6162
6163   /* Build the conditional-expression.  */
6164   return build_x_conditional_expr (logical_or_expr,
6165                                    expr,
6166                                    assignment_expr,
6167                                    tf_warning_or_error);
6168 }
6169
6170 /* Parse an assignment-expression.
6171
6172    assignment-expression:
6173      conditional-expression
6174      logical-or-expression assignment-operator assignment_expression
6175      throw-expression
6176
6177    CAST_P is true if this expression is the target of a cast.
6178
6179    Returns a representation for the expression.  */
6180
6181 static tree
6182 cp_parser_assignment_expression (cp_parser* parser, bool cast_p)
6183 {
6184   tree expr;
6185
6186   /* If the next token is the `throw' keyword, then we're looking at
6187      a throw-expression.  */
6188   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
6189     expr = cp_parser_throw_expression (parser);
6190   /* Otherwise, it must be that we are looking at a
6191      logical-or-expression.  */
6192   else
6193     {
6194       /* Parse the binary expressions (logical-or-expression).  */
6195       expr = cp_parser_binary_expression (parser, cast_p);
6196       /* If the next token is a `?' then we're actually looking at a
6197          conditional-expression.  */
6198       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
6199         return cp_parser_question_colon_clause (parser, expr);
6200       else
6201         {
6202           enum tree_code assignment_operator;
6203
6204           /* If it's an assignment-operator, we're using the second
6205              production.  */
6206           assignment_operator
6207             = cp_parser_assignment_operator_opt (parser);
6208           if (assignment_operator != ERROR_MARK)
6209             {
6210               tree rhs;
6211
6212               /* Parse the right-hand side of the assignment.  */
6213               rhs = cp_parser_assignment_expression (parser, cast_p);
6214               /* An assignment may not appear in a
6215                  constant-expression.  */
6216               if (cp_parser_non_integral_constant_expression (parser,
6217                                                               "an assignment"))
6218                 return error_mark_node;
6219               /* Build the assignment expression.  */
6220               expr = build_x_modify_expr (expr,
6221                                           assignment_operator,
6222                                           rhs,
6223                                           tf_warning_or_error);
6224             }
6225         }
6226     }
6227
6228   return expr;
6229 }
6230
6231 /* Parse an (optional) assignment-operator.
6232
6233    assignment-operator: one of
6234      = *= /= %= += -= >>= <<= &= ^= |=
6235
6236    GNU Extension:
6237
6238    assignment-operator: one of
6239      <?= >?=
6240
6241    If the next token is an assignment operator, the corresponding tree
6242    code is returned, and the token is consumed.  For example, for
6243    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
6244    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
6245    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
6246    operator, ERROR_MARK is returned.  */
6247
6248 static enum tree_code
6249 cp_parser_assignment_operator_opt (cp_parser* parser)
6250 {
6251   enum tree_code op;
6252   cp_token *token;
6253
6254   /* Peek at the next toen.  */
6255   token = cp_lexer_peek_token (parser->lexer);
6256
6257   switch (token->type)
6258     {
6259     case CPP_EQ:
6260       op = NOP_EXPR;
6261       break;
6262
6263     case CPP_MULT_EQ:
6264       op = MULT_EXPR;
6265       break;
6266
6267     case CPP_DIV_EQ:
6268       op = TRUNC_DIV_EXPR;
6269       break;
6270
6271     case CPP_MOD_EQ:
6272       op = TRUNC_MOD_EXPR;
6273       break;
6274
6275     case CPP_PLUS_EQ:
6276       op = PLUS_EXPR;
6277       break;
6278
6279     case CPP_MINUS_EQ:
6280       op = MINUS_EXPR;
6281       break;
6282
6283     case CPP_RSHIFT_EQ:
6284       op = RSHIFT_EXPR;
6285       break;
6286
6287     case CPP_LSHIFT_EQ:
6288       op = LSHIFT_EXPR;
6289       break;
6290
6291     case CPP_AND_EQ:
6292       op = BIT_AND_EXPR;
6293       break;
6294
6295     case CPP_XOR_EQ:
6296       op = BIT_XOR_EXPR;
6297       break;
6298
6299     case CPP_OR_EQ:
6300       op = BIT_IOR_EXPR;
6301       break;
6302
6303     default:
6304       /* Nothing else is an assignment operator.  */
6305       op = ERROR_MARK;
6306     }
6307
6308   /* If it was an assignment operator, consume it.  */
6309   if (op != ERROR_MARK)
6310     cp_lexer_consume_token (parser->lexer);
6311
6312   return op;
6313 }
6314
6315 /* Parse an expression.
6316
6317    expression:
6318      assignment-expression
6319      expression , assignment-expression
6320
6321    CAST_P is true if this expression is the target of a cast.
6322
6323    Returns a representation of the expression.  */
6324
6325 static tree
6326 cp_parser_expression (cp_parser* parser, bool cast_p)
6327 {
6328   tree expression = NULL_TREE;
6329
6330   while (true)
6331     {
6332       tree assignment_expression;
6333
6334       /* Parse the next assignment-expression.  */
6335       assignment_expression
6336         = cp_parser_assignment_expression (parser, cast_p);
6337       /* If this is the first assignment-expression, we can just
6338          save it away.  */
6339       if (!expression)
6340         expression = assignment_expression;
6341       else
6342         expression = build_x_compound_expr (expression,
6343                                             assignment_expression,
6344                                             tf_warning_or_error);
6345       /* If the next token is not a comma, then we are done with the
6346          expression.  */
6347       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
6348         break;
6349       /* Consume the `,'.  */
6350       cp_lexer_consume_token (parser->lexer);
6351       /* A comma operator cannot appear in a constant-expression.  */
6352       if (cp_parser_non_integral_constant_expression (parser,
6353                                                       "a comma operator"))
6354         expression = error_mark_node;
6355     }
6356
6357   return expression;
6358 }
6359
6360 /* Parse a constant-expression.
6361
6362    constant-expression:
6363      conditional-expression
6364
6365   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
6366   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
6367   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
6368   is false, NON_CONSTANT_P should be NULL.  */
6369
6370 static tree
6371 cp_parser_constant_expression (cp_parser* parser,
6372                                bool allow_non_constant_p,
6373                                bool *non_constant_p)
6374 {
6375   bool saved_integral_constant_expression_p;
6376   bool saved_allow_non_integral_constant_expression_p;
6377   bool saved_non_integral_constant_expression_p;
6378   tree expression;
6379
6380   /* It might seem that we could simply parse the
6381      conditional-expression, and then check to see if it were
6382      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
6383      one that the compiler can figure out is constant, possibly after
6384      doing some simplifications or optimizations.  The standard has a
6385      precise definition of constant-expression, and we must honor
6386      that, even though it is somewhat more restrictive.
6387
6388      For example:
6389
6390        int i[(2, 3)];
6391
6392      is not a legal declaration, because `(2, 3)' is not a
6393      constant-expression.  The `,' operator is forbidden in a
6394      constant-expression.  However, GCC's constant-folding machinery
6395      will fold this operation to an INTEGER_CST for `3'.  */
6396
6397   /* Save the old settings.  */
6398   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
6399   saved_allow_non_integral_constant_expression_p
6400     = parser->allow_non_integral_constant_expression_p;
6401   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
6402   /* We are now parsing a constant-expression.  */
6403   parser->integral_constant_expression_p = true;
6404   parser->allow_non_integral_constant_expression_p = allow_non_constant_p;
6405   parser->non_integral_constant_expression_p = false;
6406   /* Although the grammar says "conditional-expression", we parse an
6407      "assignment-expression", which also permits "throw-expression"
6408      and the use of assignment operators.  In the case that
6409      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
6410      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
6411      actually essential that we look for an assignment-expression.
6412      For example, cp_parser_initializer_clauses uses this function to
6413      determine whether a particular assignment-expression is in fact
6414      constant.  */
6415   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false);
6416   /* Restore the old settings.  */
6417   parser->integral_constant_expression_p
6418     = saved_integral_constant_expression_p;
6419   parser->allow_non_integral_constant_expression_p
6420     = saved_allow_non_integral_constant_expression_p;
6421   if (allow_non_constant_p)
6422     *non_constant_p = parser->non_integral_constant_expression_p;
6423   else if (parser->non_integral_constant_expression_p)
6424     expression = error_mark_node;
6425   parser->non_integral_constant_expression_p
6426     = saved_non_integral_constant_expression_p;
6427
6428   return expression;
6429 }
6430
6431 /* Parse __builtin_offsetof.
6432
6433    offsetof-expression:
6434      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
6435
6436    offsetof-member-designator:
6437      id-expression
6438      | offsetof-member-designator "." id-expression
6439      | offsetof-member-designator "[" expression "]"  */
6440
6441 static tree
6442 cp_parser_builtin_offsetof (cp_parser *parser)
6443 {
6444   int save_ice_p, save_non_ice_p;
6445   tree type, expr;
6446   cp_id_kind dummy;
6447
6448   /* We're about to accept non-integral-constant things, but will
6449      definitely yield an integral constant expression.  Save and
6450      restore these values around our local parsing.  */
6451   save_ice_p = parser->integral_constant_expression_p;
6452   save_non_ice_p = parser->non_integral_constant_expression_p;
6453
6454   /* Consume the "__builtin_offsetof" token.  */
6455   cp_lexer_consume_token (parser->lexer);
6456   /* Consume the opening `('.  */
6457   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
6458   /* Parse the type-id.  */
6459   type = cp_parser_type_id (parser);
6460   /* Look for the `,'.  */
6461   cp_parser_require (parser, CPP_COMMA, "%<,%>");
6462
6463   /* Build the (type *)null that begins the traditional offsetof macro.  */
6464   expr = build_static_cast (build_pointer_type (type), null_pointer_node,
6465                             tf_warning_or_error);
6466
6467   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
6468   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
6469                                                  true, &dummy);
6470   while (true)
6471     {
6472       cp_token *token = cp_lexer_peek_token (parser->lexer);
6473       switch (token->type)
6474         {
6475         case CPP_OPEN_SQUARE:
6476           /* offsetof-member-designator "[" expression "]" */
6477           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
6478           break;
6479
6480         case CPP_DOT:
6481           /* offsetof-member-designator "." identifier */
6482           cp_lexer_consume_token (parser->lexer);
6483           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT, expr,
6484                                                          true, &dummy);
6485           break;
6486
6487         case CPP_CLOSE_PAREN:
6488           /* Consume the ")" token.  */
6489           cp_lexer_consume_token (parser->lexer);
6490           goto success;
6491
6492         default:
6493           /* Error.  We know the following require will fail, but
6494              that gives the proper error message.  */
6495           cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
6496           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
6497           expr = error_mark_node;
6498           goto failure;
6499         }
6500     }
6501
6502  success:
6503   /* If we're processing a template, we can't finish the semantics yet.
6504      Otherwise we can fold the entire expression now.  */
6505   if (processing_template_decl)
6506     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
6507   else
6508     expr = finish_offsetof (expr);
6509
6510  failure:
6511   parser->integral_constant_expression_p = save_ice_p;
6512   parser->non_integral_constant_expression_p = save_non_ice_p;
6513
6514   return expr;
6515 }
6516
6517 /* Parse a trait expression.  */
6518
6519 static tree
6520 cp_parser_trait_expr (cp_parser* parser, enum rid keyword)
6521 {
6522   cp_trait_kind kind;
6523   tree type1, type2 = NULL_TREE;
6524   bool binary = false;
6525   cp_decl_specifier_seq decl_specs;
6526
6527   switch (keyword)
6528     {
6529     case RID_HAS_NOTHROW_ASSIGN:
6530       kind = CPTK_HAS_NOTHROW_ASSIGN;
6531       break;
6532     case RID_HAS_NOTHROW_CONSTRUCTOR:
6533       kind = CPTK_HAS_NOTHROW_CONSTRUCTOR;
6534       break;
6535     case RID_HAS_NOTHROW_COPY:
6536       kind = CPTK_HAS_NOTHROW_COPY;
6537       break;
6538     case RID_HAS_TRIVIAL_ASSIGN:
6539       kind = CPTK_HAS_TRIVIAL_ASSIGN;
6540       break;
6541     case RID_HAS_TRIVIAL_CONSTRUCTOR:
6542       kind = CPTK_HAS_TRIVIAL_CONSTRUCTOR;
6543       break;
6544     case RID_HAS_TRIVIAL_COPY:
6545       kind = CPTK_HAS_TRIVIAL_COPY;
6546       break;
6547     case RID_HAS_TRIVIAL_DESTRUCTOR:
6548       kind = CPTK_HAS_TRIVIAL_DESTRUCTOR;
6549       break;
6550     case RID_HAS_VIRTUAL_DESTRUCTOR:
6551       kind = CPTK_HAS_VIRTUAL_DESTRUCTOR;
6552       break;
6553     case RID_IS_ABSTRACT:
6554       kind = CPTK_IS_ABSTRACT;
6555       break;
6556     case RID_IS_BASE_OF:
6557       kind = CPTK_IS_BASE_OF;
6558       binary = true;
6559       break;
6560     case RID_IS_CLASS:
6561       kind = CPTK_IS_CLASS;
6562       break;
6563     case RID_IS_CONVERTIBLE_TO:
6564       kind = CPTK_IS_CONVERTIBLE_TO;
6565       binary = true;
6566       break;
6567     case RID_IS_EMPTY:
6568       kind = CPTK_IS_EMPTY;
6569       break;
6570     case RID_IS_ENUM:
6571       kind = CPTK_IS_ENUM;
6572       break;
6573     case RID_IS_POD:
6574       kind = CPTK_IS_POD;
6575       break;
6576     case RID_IS_POLYMORPHIC:
6577       kind = CPTK_IS_POLYMORPHIC;
6578       break;
6579     case RID_IS_UNION:
6580       kind = CPTK_IS_UNION;
6581       break;
6582     default:
6583       gcc_unreachable ();
6584     }
6585
6586   /* Consume the token.  */
6587   cp_lexer_consume_token (parser->lexer);
6588
6589   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
6590
6591   type1 = cp_parser_type_id (parser);
6592
6593   if (type1 == error_mark_node)
6594     return error_mark_node;
6595
6596   /* Build a trivial decl-specifier-seq.  */
6597   clear_decl_specs (&decl_specs);
6598   decl_specs.type = type1;
6599
6600   /* Call grokdeclarator to figure out what type this is.  */
6601   type1 = grokdeclarator (NULL, &decl_specs, TYPENAME,
6602                           /*initialized=*/0, /*attrlist=*/NULL);
6603
6604   if (binary)
6605     {
6606       cp_parser_require (parser, CPP_COMMA, "%<,%>");
6607  
6608       type2 = cp_parser_type_id (parser);
6609
6610       if (type2 == error_mark_node)
6611         return error_mark_node;
6612
6613       /* Build a trivial decl-specifier-seq.  */
6614       clear_decl_specs (&decl_specs);
6615       decl_specs.type = type2;
6616
6617       /* Call grokdeclarator to figure out what type this is.  */
6618       type2 = grokdeclarator (NULL, &decl_specs, TYPENAME,
6619                               /*initialized=*/0, /*attrlist=*/NULL);
6620     }
6621
6622   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
6623
6624   /* Complete the trait expression, which may mean either processing
6625      the trait expr now or saving it for template instantiation.  */
6626   return finish_trait_expr (kind, type1, type2);
6627 }
6628
6629 /* Statements [gram.stmt.stmt]  */
6630
6631 /* Parse a statement.
6632
6633    statement:
6634      labeled-statement
6635      expression-statement
6636      compound-statement
6637      selection-statement
6638      iteration-statement
6639      jump-statement
6640      declaration-statement
6641      try-block
6642
6643   IN_COMPOUND is true when the statement is nested inside a
6644   cp_parser_compound_statement; this matters for certain pragmas.
6645
6646   If IF_P is not NULL, *IF_P is set to indicate whether the statement
6647   is a (possibly labeled) if statement which is not enclosed in braces
6648   and has an else clause.  This is used to implement -Wparentheses.  */
6649
6650 static void
6651 cp_parser_statement (cp_parser* parser, tree in_statement_expr,
6652                      bool in_compound, bool *if_p)
6653 {
6654   tree statement;
6655   cp_token *token;
6656   location_t statement_location;
6657
6658  restart:
6659   if (if_p != NULL)
6660     *if_p = false;
6661   /* There is no statement yet.  */
6662   statement = NULL_TREE;
6663   /* Peek at the next token.  */
6664   token = cp_lexer_peek_token (parser->lexer);
6665   /* Remember the location of the first token in the statement.  */
6666   statement_location = token->location;
6667   /* If this is a keyword, then that will often determine what kind of
6668      statement we have.  */
6669   if (token->type == CPP_KEYWORD)
6670     {
6671       enum rid keyword = token->keyword;
6672
6673       switch (keyword)
6674         {
6675         case RID_CASE:
6676         case RID_DEFAULT:
6677           /* Looks like a labeled-statement with a case label.
6678              Parse the label, and then use tail recursion to parse
6679              the statement.  */
6680           cp_parser_label_for_labeled_statement (parser);
6681           goto restart;
6682
6683         case RID_IF:
6684         case RID_SWITCH:
6685           statement = cp_parser_selection_statement (parser, if_p);
6686           break;
6687
6688         case RID_WHILE:
6689         case RID_DO:
6690         case RID_FOR:
6691           statement = cp_parser_iteration_statement (parser);
6692           break;
6693
6694         case RID_BREAK:
6695         case RID_CONTINUE:
6696         case RID_RETURN:
6697         case RID_GOTO:
6698           statement = cp_parser_jump_statement (parser);
6699           break;
6700
6701           /* Objective-C++ exception-handling constructs.  */
6702         case RID_AT_TRY:
6703         case RID_AT_CATCH:
6704         case RID_AT_FINALLY:
6705         case RID_AT_SYNCHRONIZED:
6706         case RID_AT_THROW:
6707           statement = cp_parser_objc_statement (parser);
6708           break;
6709
6710         case RID_TRY:
6711           statement = cp_parser_try_block (parser);
6712           break;
6713
6714         case RID_NAMESPACE:
6715           /* This must be a namespace alias definition.  */
6716           cp_parser_declaration_statement (parser);
6717           return;
6718           
6719         default:
6720           /* It might be a keyword like `int' that can start a
6721              declaration-statement.  */
6722           break;
6723         }
6724     }
6725   else if (token->type == CPP_NAME)
6726     {
6727       /* If the next token is a `:', then we are looking at a
6728          labeled-statement.  */
6729       token = cp_lexer_peek_nth_token (parser->lexer, 2);
6730       if (token->type == CPP_COLON)
6731         {
6732           /* Looks like a labeled-statement with an ordinary label.
6733              Parse the label, and then use tail recursion to parse
6734              the statement.  */
6735           cp_parser_label_for_labeled_statement (parser);
6736           goto restart;
6737         }
6738     }
6739   /* Anything that starts with a `{' must be a compound-statement.  */
6740   else if (token->type == CPP_OPEN_BRACE)
6741     statement = cp_parser_compound_statement (parser, NULL, false);
6742   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
6743      a statement all its own.  */
6744   else if (token->type == CPP_PRAGMA)
6745     {
6746       /* Only certain OpenMP pragmas are attached to statements, and thus
6747          are considered statements themselves.  All others are not.  In
6748          the context of a compound, accept the pragma as a "statement" and
6749          return so that we can check for a close brace.  Otherwise we
6750          require a real statement and must go back and read one.  */
6751       if (in_compound)
6752         cp_parser_pragma (parser, pragma_compound);
6753       else if (!cp_parser_pragma (parser, pragma_stmt))
6754         goto restart;
6755       return;
6756     }
6757   else if (token->type == CPP_EOF)
6758     {
6759       cp_parser_error (parser, "expected statement");
6760       return;
6761     }
6762
6763   /* Everything else must be a declaration-statement or an
6764      expression-statement.  Try for the declaration-statement
6765      first, unless we are looking at a `;', in which case we know that
6766      we have an expression-statement.  */
6767   if (!statement)
6768     {
6769       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6770         {
6771           cp_parser_parse_tentatively (parser);
6772           /* Try to parse the declaration-statement.  */
6773           cp_parser_declaration_statement (parser);
6774           /* If that worked, we're done.  */
6775           if (cp_parser_parse_definitely (parser))
6776             return;
6777         }
6778       /* Look for an expression-statement instead.  */
6779       statement = cp_parser_expression_statement (parser, in_statement_expr);
6780     }
6781
6782   /* Set the line number for the statement.  */
6783   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
6784     SET_EXPR_LOCATION (statement, statement_location);
6785 }
6786
6787 /* Parse the label for a labeled-statement, i.e.
6788
6789    identifier :
6790    case constant-expression :
6791    default :
6792
6793    GNU Extension:
6794    case constant-expression ... constant-expression : statement
6795
6796    When a label is parsed without errors, the label is added to the
6797    parse tree by the finish_* functions, so this function doesn't
6798    have to return the label.  */
6799
6800 static void
6801 cp_parser_label_for_labeled_statement (cp_parser* parser)
6802 {
6803   cp_token *token;
6804
6805   /* The next token should be an identifier.  */
6806   token = cp_lexer_peek_token (parser->lexer);
6807   if (token->type != CPP_NAME
6808       && token->type != CPP_KEYWORD)
6809     {
6810       cp_parser_error (parser, "expected labeled-statement");
6811       return;
6812     }
6813
6814   switch (token->keyword)
6815     {
6816     case RID_CASE:
6817       {
6818         tree expr, expr_hi;
6819         cp_token *ellipsis;
6820
6821         /* Consume the `case' token.  */
6822         cp_lexer_consume_token (parser->lexer);
6823         /* Parse the constant-expression.  */
6824         expr = cp_parser_constant_expression (parser,
6825                                               /*allow_non_constant_p=*/false,
6826                                               NULL);
6827
6828         ellipsis = cp_lexer_peek_token (parser->lexer);
6829         if (ellipsis->type == CPP_ELLIPSIS)
6830           {
6831             /* Consume the `...' token.  */
6832             cp_lexer_consume_token (parser->lexer);
6833             expr_hi =
6834               cp_parser_constant_expression (parser,
6835                                              /*allow_non_constant_p=*/false,
6836                                              NULL);
6837             /* We don't need to emit warnings here, as the common code
6838                will do this for us.  */
6839           }
6840         else
6841           expr_hi = NULL_TREE;
6842
6843         if (parser->in_switch_statement_p)
6844           finish_case_label (expr, expr_hi);
6845         else
6846           error ("case label %qE not within a switch statement", expr);
6847       }
6848       break;
6849
6850     case RID_DEFAULT:
6851       /* Consume the `default' token.  */
6852       cp_lexer_consume_token (parser->lexer);
6853
6854       if (parser->in_switch_statement_p)
6855         finish_case_label (NULL_TREE, NULL_TREE);
6856       else
6857         error ("case label not within a switch statement");
6858       break;
6859
6860     default:
6861       /* Anything else must be an ordinary label.  */
6862       finish_label_stmt (cp_parser_identifier (parser));
6863       break;
6864     }
6865
6866   /* Require the `:' token.  */
6867   cp_parser_require (parser, CPP_COLON, "%<:%>");
6868 }
6869
6870 /* Parse an expression-statement.
6871
6872    expression-statement:
6873      expression [opt] ;
6874
6875    Returns the new EXPR_STMT -- or NULL_TREE if the expression
6876    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
6877    indicates whether this expression-statement is part of an
6878    expression statement.  */
6879
6880 static tree
6881 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
6882 {
6883   tree statement = NULL_TREE;
6884
6885   /* If the next token is a ';', then there is no expression
6886      statement.  */
6887   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6888     statement = cp_parser_expression (parser, /*cast_p=*/false);
6889
6890   /* Consume the final `;'.  */
6891   cp_parser_consume_semicolon_at_end_of_statement (parser);
6892
6893   if (in_statement_expr
6894       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
6895     /* This is the final expression statement of a statement
6896        expression.  */
6897     statement = finish_stmt_expr_expr (statement, in_statement_expr);
6898   else if (statement)
6899     statement = finish_expr_stmt (statement);
6900   else
6901     finish_stmt ();
6902
6903   return statement;
6904 }
6905
6906 /* Parse a compound-statement.
6907
6908    compound-statement:
6909      { statement-seq [opt] }
6910
6911    GNU extension:
6912
6913    compound-statement:
6914      { label-declaration-seq [opt] statement-seq [opt] }
6915
6916    label-declaration-seq:
6917      label-declaration
6918      label-declaration-seq label-declaration
6919
6920    Returns a tree representing the statement.  */
6921
6922 static tree
6923 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
6924                               bool in_try)
6925 {
6926   tree compound_stmt;
6927
6928   /* Consume the `{'.  */
6929   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>"))
6930     return error_mark_node;
6931   /* Begin the compound-statement.  */
6932   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
6933   /* If the next keyword is `__label__' we have a label declaration.  */
6934   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
6935     cp_parser_label_declaration (parser);
6936   /* Parse an (optional) statement-seq.  */
6937   cp_parser_statement_seq_opt (parser, in_statement_expr);
6938   /* Finish the compound-statement.  */
6939   finish_compound_stmt (compound_stmt);
6940   /* Consume the `}'.  */
6941   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
6942
6943   return compound_stmt;
6944 }
6945
6946 /* Parse an (optional) statement-seq.
6947
6948    statement-seq:
6949      statement
6950      statement-seq [opt] statement  */
6951
6952 static void
6953 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
6954 {
6955   /* Scan statements until there aren't any more.  */
6956   while (true)
6957     {
6958       cp_token *token = cp_lexer_peek_token (parser->lexer);
6959
6960       /* If we're looking at a `}', then we've run out of statements.  */
6961       if (token->type == CPP_CLOSE_BRACE
6962           || token->type == CPP_EOF
6963           || token->type == CPP_PRAGMA_EOL)
6964         break;
6965       
6966       /* If we are in a compound statement and find 'else' then
6967          something went wrong.  */
6968       else if (token->type == CPP_KEYWORD && token->keyword == RID_ELSE)
6969         {
6970           if (parser->in_statement & IN_IF_STMT) 
6971             break;
6972           else
6973             {
6974               token = cp_lexer_consume_token (parser->lexer);
6975               error ("%<else%> without a previous %<if%>");
6976             }
6977         }
6978
6979       /* Parse the statement.  */
6980       cp_parser_statement (parser, in_statement_expr, true, NULL);
6981     }
6982 }
6983
6984 /* Parse a selection-statement.
6985
6986    selection-statement:
6987      if ( condition ) statement
6988      if ( condition ) statement else statement
6989      switch ( condition ) statement
6990
6991    Returns the new IF_STMT or SWITCH_STMT.
6992
6993    If IF_P is not NULL, *IF_P is set to indicate whether the statement
6994    is a (possibly labeled) if statement which is not enclosed in
6995    braces and has an else clause.  This is used to implement
6996    -Wparentheses.  */
6997
6998 static tree
6999 cp_parser_selection_statement (cp_parser* parser, bool *if_p)
7000 {
7001   cp_token *token;
7002   enum rid keyword;
7003
7004   if (if_p != NULL)
7005     *if_p = false;
7006
7007   /* Peek at the next token.  */
7008   token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
7009
7010   /* See what kind of keyword it is.  */
7011   keyword = token->keyword;
7012   switch (keyword)
7013     {
7014     case RID_IF:
7015     case RID_SWITCH:
7016       {
7017         tree statement;
7018         tree condition;
7019
7020         /* Look for the `('.  */
7021         if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
7022           {
7023             cp_parser_skip_to_end_of_statement (parser);
7024             return error_mark_node;
7025           }
7026
7027         /* Begin the selection-statement.  */
7028         if (keyword == RID_IF)
7029           statement = begin_if_stmt ();
7030         else
7031           statement = begin_switch_stmt ();
7032
7033         /* Parse the condition.  */
7034         condition = cp_parser_condition (parser);
7035         /* Look for the `)'.  */
7036         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
7037           cp_parser_skip_to_closing_parenthesis (parser, true, false,
7038                                                  /*consume_paren=*/true);
7039
7040         if (keyword == RID_IF)
7041           {
7042             bool nested_if;
7043             unsigned char in_statement;
7044
7045             /* Add the condition.  */
7046             finish_if_stmt_cond (condition, statement);
7047
7048             /* Parse the then-clause.  */
7049             in_statement = parser->in_statement;
7050             parser->in_statement |= IN_IF_STMT;
7051             cp_parser_implicitly_scoped_statement (parser, &nested_if);
7052             parser->in_statement = in_statement;
7053
7054             finish_then_clause (statement);
7055
7056             /* If the next token is `else', parse the else-clause.  */
7057             if (cp_lexer_next_token_is_keyword (parser->lexer,
7058                                                 RID_ELSE))
7059               {
7060                 /* Consume the `else' keyword.  */
7061                 cp_lexer_consume_token (parser->lexer);
7062                 begin_else_clause (statement);
7063                 /* Parse the else-clause.  */
7064                 cp_parser_implicitly_scoped_statement (parser, NULL);
7065                 finish_else_clause (statement);
7066
7067                 /* If we are currently parsing a then-clause, then
7068                    IF_P will not be NULL.  We set it to true to
7069                    indicate that this if statement has an else clause.
7070                    This may trigger the Wparentheses warning below
7071                    when we get back up to the parent if statement.  */
7072                 if (if_p != NULL)
7073                   *if_p = true;
7074               }
7075             else
7076               {
7077                 /* This if statement does not have an else clause.  If
7078                    NESTED_IF is true, then the then-clause is an if
7079                    statement which does have an else clause.  We warn
7080                    about the potential ambiguity.  */
7081                 if (nested_if)
7082                   warning (OPT_Wparentheses,
7083                            ("%Hsuggest explicit braces "
7084                             "to avoid ambiguous %<else%>"),
7085                            EXPR_LOCUS (statement));
7086               }
7087
7088             /* Now we're all done with the if-statement.  */
7089             finish_if_stmt (statement);
7090           }
7091         else
7092           {
7093             bool in_switch_statement_p;
7094             unsigned char in_statement;
7095
7096             /* Add the condition.  */
7097             finish_switch_cond (condition, statement);
7098
7099             /* Parse the body of the switch-statement.  */
7100             in_switch_statement_p = parser->in_switch_statement_p;
7101             in_statement = parser->in_statement;
7102             parser->in_switch_statement_p = true;
7103             parser->in_statement |= IN_SWITCH_STMT;
7104             cp_parser_implicitly_scoped_statement (parser, NULL);
7105             parser->in_switch_statement_p = in_switch_statement_p;
7106             parser->in_statement = in_statement;
7107
7108             /* Now we're all done with the switch-statement.  */
7109             finish_switch_stmt (statement);
7110           }
7111
7112         return statement;
7113       }
7114       break;
7115
7116     default:
7117       cp_parser_error (parser, "expected selection-statement");
7118       return error_mark_node;
7119     }
7120 }
7121
7122 /* Parse a condition.
7123
7124    condition:
7125      expression
7126      type-specifier-seq declarator = assignment-expression
7127
7128    GNU Extension:
7129
7130    condition:
7131      type-specifier-seq declarator asm-specification [opt]
7132        attributes [opt] = assignment-expression
7133
7134    Returns the expression that should be tested.  */
7135
7136 static tree
7137 cp_parser_condition (cp_parser* parser)
7138 {
7139   cp_decl_specifier_seq type_specifiers;
7140   const char *saved_message;
7141
7142   /* Try the declaration first.  */
7143   cp_parser_parse_tentatively (parser);
7144   /* New types are not allowed in the type-specifier-seq for a
7145      condition.  */
7146   saved_message = parser->type_definition_forbidden_message;
7147   parser->type_definition_forbidden_message
7148     = "types may not be defined in conditions";
7149   /* Parse the type-specifier-seq.  */
7150   cp_parser_type_specifier_seq (parser, /*is_condition==*/true,
7151                                 &type_specifiers);
7152   /* Restore the saved message.  */
7153   parser->type_definition_forbidden_message = saved_message;
7154   /* If all is well, we might be looking at a declaration.  */
7155   if (!cp_parser_error_occurred (parser))
7156     {
7157       tree decl;
7158       tree asm_specification;
7159       tree attributes;
7160       cp_declarator *declarator;
7161       tree initializer = NULL_TREE;
7162
7163       /* Parse the declarator.  */
7164       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
7165                                          /*ctor_dtor_or_conv_p=*/NULL,
7166                                          /*parenthesized_p=*/NULL,
7167                                          /*member_p=*/false);
7168       /* Parse the attributes.  */
7169       attributes = cp_parser_attributes_opt (parser);
7170       /* Parse the asm-specification.  */
7171       asm_specification = cp_parser_asm_specification_opt (parser);
7172       /* If the next token is not an `=', then we might still be
7173          looking at an expression.  For example:
7174
7175            if (A(a).x)
7176
7177          looks like a decl-specifier-seq and a declarator -- but then
7178          there is no `=', so this is an expression.  */
7179       cp_parser_require (parser, CPP_EQ, "%<=%>");
7180       /* If we did see an `=', then we are looking at a declaration
7181          for sure.  */
7182       if (cp_parser_parse_definitely (parser))
7183         {
7184           tree pushed_scope;
7185           bool non_constant_p;
7186
7187           /* Create the declaration.  */
7188           decl = start_decl (declarator, &type_specifiers,
7189                              /*initialized_p=*/true,
7190                              attributes, /*prefix_attributes=*/NULL_TREE,
7191                              &pushed_scope);
7192           /* Parse the assignment-expression.  */
7193           initializer
7194             = cp_parser_constant_expression (parser,
7195                                              /*allow_non_constant_p=*/true,
7196                                              &non_constant_p);
7197           if (!non_constant_p)
7198             initializer = fold_non_dependent_expr (initializer);
7199
7200           /* Process the initializer.  */
7201           cp_finish_decl (decl,
7202                           initializer, !non_constant_p,
7203                           asm_specification,
7204                           LOOKUP_ONLYCONVERTING);
7205
7206           if (pushed_scope)
7207             pop_scope (pushed_scope);
7208
7209           return convert_from_reference (decl);
7210         }
7211     }
7212   /* If we didn't even get past the declarator successfully, we are
7213      definitely not looking at a declaration.  */
7214   else
7215     cp_parser_abort_tentative_parse (parser);
7216
7217   /* Otherwise, we are looking at an expression.  */
7218   return cp_parser_expression (parser, /*cast_p=*/false);
7219 }
7220
7221 /* We check for a ) immediately followed by ; with no whitespacing
7222    between.  This is used to issue a warning for:
7223
7224      while (...);
7225
7226    and:
7227
7228      for (...);
7229
7230    as the semicolon is probably extraneous.
7231
7232    On parse errors, the next token might not be a ), so do nothing in
7233    that case. */
7234
7235 static void
7236 check_empty_body (cp_parser* parser, const char* type)
7237 {
7238   cp_token *token;
7239   cp_token *close_paren;
7240   expanded_location close_loc;
7241   expanded_location semi_loc;
7242   
7243   close_paren = cp_lexer_peek_token (parser->lexer);
7244   if (close_paren->type != CPP_CLOSE_PAREN)
7245     return;
7246
7247   close_loc = expand_location (close_paren->location);
7248   token = cp_lexer_peek_nth_token (parser->lexer, 2);
7249
7250   if (token->type != CPP_SEMICOLON
7251       || (token->flags & PREV_WHITE))
7252     return;
7253
7254   semi_loc =  expand_location (token->location);
7255   if (close_loc.line == semi_loc.line
7256       && close_loc.column+1 == semi_loc.column)
7257     warning (OPT_Wempty_body,
7258              "suggest a space before %<;%> or explicit braces around empty "
7259              "body in %<%s%> statement",
7260              type);
7261 }
7262
7263 /* Parse an iteration-statement.
7264
7265    iteration-statement:
7266      while ( condition ) statement
7267      do statement while ( expression ) ;
7268      for ( for-init-statement condition [opt] ; expression [opt] )
7269        statement
7270
7271    Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
7272
7273 static tree
7274 cp_parser_iteration_statement (cp_parser* parser)
7275 {
7276   cp_token *token;
7277   enum rid keyword;
7278   tree statement;
7279   unsigned char in_statement;
7280
7281   /* Peek at the next token.  */
7282   token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
7283   if (!token)
7284     return error_mark_node;
7285
7286   /* Remember whether or not we are already within an iteration
7287      statement.  */
7288   in_statement = parser->in_statement;
7289
7290   /* See what kind of keyword it is.  */
7291   keyword = token->keyword;
7292   switch (keyword)
7293     {
7294     case RID_WHILE:
7295       {
7296         tree condition;
7297
7298         /* Begin the while-statement.  */
7299         statement = begin_while_stmt ();
7300         /* Look for the `('.  */
7301         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
7302         /* Parse the condition.  */
7303         condition = cp_parser_condition (parser);
7304         finish_while_stmt_cond (condition, statement);
7305         check_empty_body (parser, "while");
7306         /* Look for the `)'.  */
7307         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
7308         /* Parse the dependent statement.  */
7309         parser->in_statement = IN_ITERATION_STMT;
7310         cp_parser_already_scoped_statement (parser);
7311         parser->in_statement = in_statement;
7312         /* We're done with the while-statement.  */
7313         finish_while_stmt (statement);
7314       }
7315       break;
7316
7317     case RID_DO:
7318       {
7319         tree expression;
7320
7321         /* Begin the do-statement.  */
7322         statement = begin_do_stmt ();
7323         /* Parse the body of the do-statement.  */
7324         parser->in_statement = IN_ITERATION_STMT;
7325         cp_parser_implicitly_scoped_statement (parser, NULL);
7326         parser->in_statement = in_statement;
7327         finish_do_body (statement);
7328         /* Look for the `while' keyword.  */
7329         cp_parser_require_keyword (parser, RID_WHILE, "%<while%>");
7330         /* Look for the `('.  */
7331         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
7332         /* Parse the expression.  */
7333         expression = cp_parser_expression (parser, /*cast_p=*/false);
7334         /* We're done with the do-statement.  */
7335         finish_do_stmt (expression, statement);
7336         /* Look for the `)'.  */
7337         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
7338         /* Look for the `;'.  */
7339         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7340       }
7341       break;
7342
7343     case RID_FOR:
7344       {
7345         tree condition = NULL_TREE;
7346         tree expression = NULL_TREE;
7347
7348         /* Begin the for-statement.  */
7349         statement = begin_for_stmt ();
7350         /* Look for the `('.  */
7351         cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
7352         /* Parse the initialization.  */
7353         cp_parser_for_init_statement (parser);
7354         finish_for_init_stmt (statement);
7355
7356         /* If there's a condition, process it.  */
7357         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7358           condition = cp_parser_condition (parser);
7359         finish_for_cond (condition, statement);
7360         /* Look for the `;'.  */
7361         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7362
7363         /* If there's an expression, process it.  */
7364         if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
7365           expression = cp_parser_expression (parser, /*cast_p=*/false);
7366         finish_for_expr (expression, statement);
7367         check_empty_body (parser, "for");
7368         /* Look for the `)'.  */
7369         cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
7370
7371         /* Parse the body of the for-statement.  */
7372         parser->in_statement = IN_ITERATION_STMT;
7373         cp_parser_already_scoped_statement (parser);
7374         parser->in_statement = in_statement;
7375
7376         /* We're done with the for-statement.  */
7377         finish_for_stmt (statement);
7378       }
7379       break;
7380
7381     default:
7382       cp_parser_error (parser, "expected iteration-statement");
7383       statement = error_mark_node;
7384       break;
7385     }
7386
7387   return statement;
7388 }
7389
7390 /* Parse a for-init-statement.
7391
7392    for-init-statement:
7393      expression-statement
7394      simple-declaration  */
7395
7396 static void
7397 cp_parser_for_init_statement (cp_parser* parser)
7398 {
7399   /* If the next token is a `;', then we have an empty
7400      expression-statement.  Grammatically, this is also a
7401      simple-declaration, but an invalid one, because it does not
7402      declare anything.  Therefore, if we did not handle this case
7403      specially, we would issue an error message about an invalid
7404      declaration.  */
7405   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7406     {
7407       /* We're going to speculatively look for a declaration, falling back
7408          to an expression, if necessary.  */
7409       cp_parser_parse_tentatively (parser);
7410       /* Parse the declaration.  */
7411       cp_parser_simple_declaration (parser,
7412                                     /*function_definition_allowed_p=*/false);
7413       /* If the tentative parse failed, then we shall need to look for an
7414          expression-statement.  */
7415       if (cp_parser_parse_definitely (parser))
7416         return;
7417     }
7418
7419   cp_parser_expression_statement (parser, false);
7420 }
7421
7422 /* Parse a jump-statement.
7423
7424    jump-statement:
7425      break ;
7426      continue ;
7427      return expression [opt] ;
7428      goto identifier ;
7429
7430    GNU extension:
7431
7432    jump-statement:
7433      goto * expression ;
7434
7435    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
7436
7437 static tree
7438 cp_parser_jump_statement (cp_parser* parser)
7439 {
7440   tree statement = error_mark_node;
7441   cp_token *token;
7442   enum rid keyword;
7443   unsigned char in_statement;
7444
7445   /* Peek at the next token.  */
7446   token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
7447   if (!token)
7448     return error_mark_node;
7449
7450   /* See what kind of keyword it is.  */
7451   keyword = token->keyword;
7452   switch (keyword)
7453     {
7454     case RID_BREAK:
7455       in_statement = parser->in_statement & ~IN_IF_STMT;      
7456       switch (in_statement)
7457         {
7458         case 0:
7459           error ("break statement not within loop or switch");
7460           break;
7461         default:
7462           gcc_assert ((in_statement & IN_SWITCH_STMT)
7463                       || in_statement == IN_ITERATION_STMT);
7464           statement = finish_break_stmt ();
7465           break;
7466         case IN_OMP_BLOCK:
7467           error ("invalid exit from OpenMP structured block");
7468           break;
7469         case IN_OMP_FOR:
7470           error ("break statement used with OpenMP for loop");
7471           break;
7472         }
7473       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7474       break;
7475
7476     case RID_CONTINUE:
7477       switch (parser->in_statement & ~(IN_SWITCH_STMT | IN_IF_STMT))
7478         {
7479         case 0:
7480           error ("continue statement not within a loop");
7481           break;
7482         case IN_ITERATION_STMT:
7483         case IN_OMP_FOR:
7484           statement = finish_continue_stmt ();
7485           break;
7486         case IN_OMP_BLOCK:
7487           error ("invalid exit from OpenMP structured block");
7488           break;
7489         default:
7490           gcc_unreachable ();
7491         }
7492       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7493       break;
7494
7495     case RID_RETURN:
7496       {
7497         tree expr;
7498
7499         /* If the next token is a `;', then there is no
7500            expression.  */
7501         if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7502           expr = cp_parser_expression (parser, /*cast_p=*/false);
7503         else
7504           expr = NULL_TREE;
7505         /* Build the return-statement.  */
7506         statement = finish_return_stmt (expr);
7507         /* Look for the final `;'.  */
7508         cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7509       }
7510       break;
7511
7512     case RID_GOTO:
7513       /* Create the goto-statement.  */
7514       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
7515         {
7516           /* Issue a warning about this use of a GNU extension.  */
7517           if (pedantic)
7518             pedwarn ("ISO C++ forbids computed gotos");
7519           /* Consume the '*' token.  */
7520           cp_lexer_consume_token (parser->lexer);
7521           /* Parse the dependent expression.  */
7522           finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false));
7523         }
7524       else
7525         finish_goto_stmt (cp_parser_identifier (parser));
7526       /* Look for the final `;'.  */
7527       cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7528       break;
7529
7530     default:
7531       cp_parser_error (parser, "expected jump-statement");
7532       break;
7533     }
7534
7535   return statement;
7536 }
7537
7538 /* Parse a declaration-statement.
7539
7540    declaration-statement:
7541      block-declaration  */
7542
7543 static void
7544 cp_parser_declaration_statement (cp_parser* parser)
7545 {
7546   void *p;
7547
7548   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7549   p = obstack_alloc (&declarator_obstack, 0);
7550
7551  /* Parse the block-declaration.  */
7552   cp_parser_block_declaration (parser, /*statement_p=*/true);
7553
7554   /* Free any declarators allocated.  */
7555   obstack_free (&declarator_obstack, p);
7556
7557   /* Finish off the statement.  */
7558   finish_stmt ();
7559 }
7560
7561 /* Some dependent statements (like `if (cond) statement'), are
7562    implicitly in their own scope.  In other words, if the statement is
7563    a single statement (as opposed to a compound-statement), it is
7564    none-the-less treated as if it were enclosed in braces.  Any
7565    declarations appearing in the dependent statement are out of scope
7566    after control passes that point.  This function parses a statement,
7567    but ensures that is in its own scope, even if it is not a
7568    compound-statement.
7569
7570    If IF_P is not NULL, *IF_P is set to indicate whether the statement
7571    is a (possibly labeled) if statement which is not enclosed in
7572    braces and has an else clause.  This is used to implement
7573    -Wparentheses.
7574
7575    Returns the new statement.  */
7576
7577 static tree
7578 cp_parser_implicitly_scoped_statement (cp_parser* parser, bool *if_p)
7579 {
7580   tree statement;
7581
7582   if (if_p != NULL)
7583     *if_p = false;
7584
7585   /* Mark if () ; with a special NOP_EXPR.  */
7586   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7587     {
7588       cp_lexer_consume_token (parser->lexer);
7589       statement = add_stmt (build_empty_stmt ());
7590     }
7591   /* if a compound is opened, we simply parse the statement directly.  */
7592   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7593     statement = cp_parser_compound_statement (parser, NULL, false);
7594   /* If the token is not a `{', then we must take special action.  */
7595   else
7596     {
7597       /* Create a compound-statement.  */
7598       statement = begin_compound_stmt (0);
7599       /* Parse the dependent-statement.  */
7600       cp_parser_statement (parser, NULL_TREE, false, if_p);
7601       /* Finish the dummy compound-statement.  */
7602       finish_compound_stmt (statement);
7603     }
7604
7605   /* Return the statement.  */
7606   return statement;
7607 }
7608
7609 /* For some dependent statements (like `while (cond) statement'), we
7610    have already created a scope.  Therefore, even if the dependent
7611    statement is a compound-statement, we do not want to create another
7612    scope.  */
7613
7614 static void
7615 cp_parser_already_scoped_statement (cp_parser* parser)
7616 {
7617   /* If the token is a `{', then we must take special action.  */
7618   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
7619     cp_parser_statement (parser, NULL_TREE, false, NULL);
7620   else
7621     {
7622       /* Avoid calling cp_parser_compound_statement, so that we
7623          don't create a new scope.  Do everything else by hand.  */
7624       cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>");
7625       cp_parser_statement_seq_opt (parser, NULL_TREE);
7626       cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
7627     }
7628 }
7629
7630 /* Declarations [gram.dcl.dcl] */
7631
7632 /* Parse an optional declaration-sequence.
7633
7634    declaration-seq:
7635      declaration
7636      declaration-seq declaration  */
7637
7638 static void
7639 cp_parser_declaration_seq_opt (cp_parser* parser)
7640 {
7641   while (true)
7642     {
7643       cp_token *token;
7644
7645       token = cp_lexer_peek_token (parser->lexer);
7646
7647       if (token->type == CPP_CLOSE_BRACE
7648           || token->type == CPP_EOF
7649           || token->type == CPP_PRAGMA_EOL)
7650         break;
7651
7652       if (token->type == CPP_SEMICOLON)
7653         {
7654           /* A declaration consisting of a single semicolon is
7655              invalid.  Allow it unless we're being pedantic.  */
7656           cp_lexer_consume_token (parser->lexer);
7657           if (pedantic && !in_system_header)
7658             pedwarn ("extra %<;%>");
7659           continue;
7660         }
7661
7662       /* If we're entering or exiting a region that's implicitly
7663          extern "C", modify the lang context appropriately.  */
7664       if (!parser->implicit_extern_c && token->implicit_extern_c)
7665         {
7666           push_lang_context (lang_name_c);
7667           parser->implicit_extern_c = true;
7668         }
7669       else if (parser->implicit_extern_c && !token->implicit_extern_c)
7670         {
7671           pop_lang_context ();
7672           parser->implicit_extern_c = false;
7673         }
7674
7675       if (token->type == CPP_PRAGMA)
7676         {
7677           /* A top-level declaration can consist solely of a #pragma.
7678              A nested declaration cannot, so this is done here and not
7679              in cp_parser_declaration.  (A #pragma at block scope is
7680              handled in cp_parser_statement.)  */
7681           cp_parser_pragma (parser, pragma_external);
7682           continue;
7683         }
7684
7685       /* Parse the declaration itself.  */
7686       cp_parser_declaration (parser);
7687     }
7688 }
7689
7690 /* Parse a declaration.
7691
7692    declaration:
7693      block-declaration
7694      function-definition
7695      template-declaration
7696      explicit-instantiation
7697      explicit-specialization
7698      linkage-specification
7699      namespace-definition
7700
7701    GNU extension:
7702
7703    declaration:
7704       __extension__ declaration */
7705
7706 static void
7707 cp_parser_declaration (cp_parser* parser)
7708 {
7709   cp_token token1;
7710   cp_token token2;
7711   int saved_pedantic;
7712   void *p;
7713
7714   /* Check for the `__extension__' keyword.  */
7715   if (cp_parser_extension_opt (parser, &saved_pedantic))
7716     {
7717       /* Parse the qualified declaration.  */
7718       cp_parser_declaration (parser);
7719       /* Restore the PEDANTIC flag.  */
7720       pedantic = saved_pedantic;
7721
7722       return;
7723     }
7724
7725   /* Try to figure out what kind of declaration is present.  */
7726   token1 = *cp_lexer_peek_token (parser->lexer);
7727
7728   if (token1.type != CPP_EOF)
7729     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
7730   else
7731     {
7732       token2.type = CPP_EOF;
7733       token2.keyword = RID_MAX;
7734     }
7735
7736   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7737   p = obstack_alloc (&declarator_obstack, 0);
7738
7739   /* If the next token is `extern' and the following token is a string
7740      literal, then we have a linkage specification.  */
7741   if (token1.keyword == RID_EXTERN
7742       && cp_parser_is_string_literal (&token2))
7743     cp_parser_linkage_specification (parser);
7744   /* If the next token is `template', then we have either a template
7745      declaration, an explicit instantiation, or an explicit
7746      specialization.  */
7747   else if (token1.keyword == RID_TEMPLATE)
7748     {
7749       /* `template <>' indicates a template specialization.  */
7750       if (token2.type == CPP_LESS
7751           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
7752         cp_parser_explicit_specialization (parser);
7753       /* `template <' indicates a template declaration.  */
7754       else if (token2.type == CPP_LESS)
7755         cp_parser_template_declaration (parser, /*member_p=*/false);
7756       /* Anything else must be an explicit instantiation.  */
7757       else
7758         cp_parser_explicit_instantiation (parser);
7759     }
7760   /* If the next token is `export', then we have a template
7761      declaration.  */
7762   else if (token1.keyword == RID_EXPORT)
7763     cp_parser_template_declaration (parser, /*member_p=*/false);
7764   /* If the next token is `extern', 'static' or 'inline' and the one
7765      after that is `template', we have a GNU extended explicit
7766      instantiation directive.  */
7767   else if (cp_parser_allow_gnu_extensions_p (parser)
7768            && (token1.keyword == RID_EXTERN
7769                || token1.keyword == RID_STATIC
7770                || token1.keyword == RID_INLINE)
7771            && token2.keyword == RID_TEMPLATE)
7772     cp_parser_explicit_instantiation (parser);
7773   /* If the next token is `namespace', check for a named or unnamed
7774      namespace definition.  */
7775   else if (token1.keyword == RID_NAMESPACE
7776            && (/* A named namespace definition.  */
7777                (token2.type == CPP_NAME
7778                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
7779                     != CPP_EQ))
7780                /* An unnamed namespace definition.  */
7781                || token2.type == CPP_OPEN_BRACE
7782                || token2.keyword == RID_ATTRIBUTE))
7783     cp_parser_namespace_definition (parser);
7784   /* An inline (associated) namespace definition.  */
7785   else if (token1.keyword == RID_INLINE
7786            && token2.keyword == RID_NAMESPACE)
7787     cp_parser_namespace_definition (parser);
7788   /* Objective-C++ declaration/definition.  */
7789   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
7790     cp_parser_objc_declaration (parser);
7791   /* We must have either a block declaration or a function
7792      definition.  */
7793   else
7794     /* Try to parse a block-declaration, or a function-definition.  */
7795     cp_parser_block_declaration (parser, /*statement_p=*/false);
7796
7797   /* Free any declarators allocated.  */
7798   obstack_free (&declarator_obstack, p);
7799 }
7800
7801 /* Parse a block-declaration.
7802
7803    block-declaration:
7804      simple-declaration
7805      asm-definition
7806      namespace-alias-definition
7807      using-declaration
7808      using-directive
7809
7810    GNU Extension:
7811
7812    block-declaration:
7813      __extension__ block-declaration
7814
7815    C++0x Extension:
7816
7817    block-declaration:
7818      static_assert-declaration
7819
7820    If STATEMENT_P is TRUE, then this block-declaration is occurring as
7821    part of a declaration-statement.  */
7822
7823 static void
7824 cp_parser_block_declaration (cp_parser *parser,
7825                              bool      statement_p)
7826 {
7827   cp_token *token1;
7828   int saved_pedantic;
7829
7830   /* Check for the `__extension__' keyword.  */
7831   if (cp_parser_extension_opt (parser, &saved_pedantic))
7832     {
7833       /* Parse the qualified declaration.  */
7834       cp_parser_block_declaration (parser, statement_p);
7835       /* Restore the PEDANTIC flag.  */
7836       pedantic = saved_pedantic;
7837
7838       return;
7839     }
7840
7841   /* Peek at the next token to figure out which kind of declaration is
7842      present.  */
7843   token1 = cp_lexer_peek_token (parser->lexer);
7844
7845   /* If the next keyword is `asm', we have an asm-definition.  */
7846   if (token1->keyword == RID_ASM)
7847     {
7848       if (statement_p)
7849         cp_parser_commit_to_tentative_parse (parser);
7850       cp_parser_asm_definition (parser);
7851     }
7852   /* If the next keyword is `namespace', we have a
7853      namespace-alias-definition.  */
7854   else if (token1->keyword == RID_NAMESPACE)
7855     cp_parser_namespace_alias_definition (parser);
7856   /* If the next keyword is `using', we have either a
7857      using-declaration or a using-directive.  */
7858   else if (token1->keyword == RID_USING)
7859     {
7860       cp_token *token2;
7861
7862       if (statement_p)
7863         cp_parser_commit_to_tentative_parse (parser);
7864       /* If the token after `using' is `namespace', then we have a
7865          using-directive.  */
7866       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
7867       if (token2->keyword == RID_NAMESPACE)
7868         cp_parser_using_directive (parser);
7869       /* Otherwise, it's a using-declaration.  */
7870       else
7871         cp_parser_using_declaration (parser,
7872                                      /*access_declaration_p=*/false);
7873     }
7874   /* If the next keyword is `__label__' we have a misplaced label
7875      declaration.  */
7876   else if (token1->keyword == RID_LABEL)
7877     {
7878       cp_lexer_consume_token (parser->lexer);
7879       error ("%<__label__%> not at the beginning of a block");
7880       cp_parser_skip_to_end_of_statement (parser);
7881       /* If the next token is now a `;', consume it.  */
7882       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7883         cp_lexer_consume_token (parser->lexer);
7884     }
7885   /* If the next token is `static_assert' we have a static assertion.  */
7886   else if (token1->keyword == RID_STATIC_ASSERT)
7887     cp_parser_static_assert (parser, /*member_p=*/false);
7888   /* Anything else must be a simple-declaration.  */
7889   else
7890     cp_parser_simple_declaration (parser, !statement_p);
7891 }
7892
7893 /* Parse a simple-declaration.
7894
7895    simple-declaration:
7896      decl-specifier-seq [opt] init-declarator-list [opt] ;
7897
7898    init-declarator-list:
7899      init-declarator
7900      init-declarator-list , init-declarator
7901
7902    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
7903    function-definition as a simple-declaration.  */
7904
7905 static void
7906 cp_parser_simple_declaration (cp_parser* parser,
7907                               bool function_definition_allowed_p)
7908 {
7909   cp_decl_specifier_seq decl_specifiers;
7910   int declares_class_or_enum;
7911   bool saw_declarator;
7912
7913   /* Defer access checks until we know what is being declared; the
7914      checks for names appearing in the decl-specifier-seq should be
7915      done as if we were in the scope of the thing being declared.  */
7916   push_deferring_access_checks (dk_deferred);
7917
7918   /* Parse the decl-specifier-seq.  We have to keep track of whether
7919      or not the decl-specifier-seq declares a named class or
7920      enumeration type, since that is the only case in which the
7921      init-declarator-list is allowed to be empty.
7922
7923      [dcl.dcl]
7924
7925      In a simple-declaration, the optional init-declarator-list can be
7926      omitted only when declaring a class or enumeration, that is when
7927      the decl-specifier-seq contains either a class-specifier, an
7928      elaborated-type-specifier, or an enum-specifier.  */
7929   cp_parser_decl_specifier_seq (parser,
7930                                 CP_PARSER_FLAGS_OPTIONAL,
7931                                 &decl_specifiers,
7932                                 &declares_class_or_enum);
7933   /* We no longer need to defer access checks.  */
7934   stop_deferring_access_checks ();
7935
7936   /* In a block scope, a valid declaration must always have a
7937      decl-specifier-seq.  By not trying to parse declarators, we can
7938      resolve the declaration/expression ambiguity more quickly.  */
7939   if (!function_definition_allowed_p
7940       && !decl_specifiers.any_specifiers_p)
7941     {
7942       cp_parser_error (parser, "expected declaration");
7943       goto done;
7944     }
7945
7946   /* If the next two tokens are both identifiers, the code is
7947      erroneous. The usual cause of this situation is code like:
7948
7949        T t;
7950
7951      where "T" should name a type -- but does not.  */
7952   if (!decl_specifiers.type
7953       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
7954     {
7955       /* If parsing tentatively, we should commit; we really are
7956          looking at a declaration.  */
7957       cp_parser_commit_to_tentative_parse (parser);
7958       /* Give up.  */
7959       goto done;
7960     }
7961
7962   /* If we have seen at least one decl-specifier, and the next token
7963      is not a parenthesis, then we must be looking at a declaration.
7964      (After "int (" we might be looking at a functional cast.)  */
7965   if (decl_specifiers.any_specifiers_p
7966       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
7967     cp_parser_commit_to_tentative_parse (parser);
7968
7969   /* Keep going until we hit the `;' at the end of the simple
7970      declaration.  */
7971   saw_declarator = false;
7972   while (cp_lexer_next_token_is_not (parser->lexer,
7973                                      CPP_SEMICOLON))
7974     {
7975       cp_token *token;
7976       bool function_definition_p;
7977       tree decl;
7978
7979       if (saw_declarator)
7980         {
7981           /* If we are processing next declarator, coma is expected */
7982           token = cp_lexer_peek_token (parser->lexer);
7983           gcc_assert (token->type == CPP_COMMA);
7984           cp_lexer_consume_token (parser->lexer);
7985         }
7986       else
7987         saw_declarator = true;
7988
7989       /* Parse the init-declarator.  */
7990       decl = cp_parser_init_declarator (parser, &decl_specifiers,
7991                                         /*checks=*/NULL,
7992                                         function_definition_allowed_p,
7993                                         /*member_p=*/false,
7994                                         declares_class_or_enum,
7995                                         &function_definition_p);
7996       /* If an error occurred while parsing tentatively, exit quickly.
7997          (That usually happens when in the body of a function; each
7998          statement is treated as a declaration-statement until proven
7999          otherwise.)  */
8000       if (cp_parser_error_occurred (parser))
8001         goto done;
8002       /* Handle function definitions specially.  */
8003       if (function_definition_p)
8004         {
8005           /* If the next token is a `,', then we are probably
8006              processing something like:
8007
8008                void f() {}, *p;
8009
8010              which is erroneous.  */
8011           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
8012             error ("mixing declarations and function-definitions is forbidden");
8013           /* Otherwise, we're done with the list of declarators.  */
8014           else
8015             {
8016               pop_deferring_access_checks ();
8017               return;
8018             }
8019         }
8020       /* The next token should be either a `,' or a `;'.  */
8021       token = cp_lexer_peek_token (parser->lexer);
8022       /* If it's a `,', there are more declarators to come.  */
8023       if (token->type == CPP_COMMA)
8024         /* will be consumed next time around */;
8025       /* If it's a `;', we are done.  */
8026       else if (token->type == CPP_SEMICOLON)
8027         break;
8028       /* Anything else is an error.  */
8029       else
8030         {
8031           /* If we have already issued an error message we don't need
8032              to issue another one.  */
8033           if (decl != error_mark_node
8034               || cp_parser_uncommitted_to_tentative_parse_p (parser))
8035             cp_parser_error (parser, "expected %<,%> or %<;%>");
8036           /* Skip tokens until we reach the end of the statement.  */
8037           cp_parser_skip_to_end_of_statement (parser);
8038           /* If the next token is now a `;', consume it.  */
8039           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
8040             cp_lexer_consume_token (parser->lexer);
8041           goto done;
8042         }
8043       /* After the first time around, a function-definition is not
8044          allowed -- even if it was OK at first.  For example:
8045
8046            int i, f() {}
8047
8048          is not valid.  */
8049       function_definition_allowed_p = false;
8050     }
8051
8052   /* Issue an error message if no declarators are present, and the
8053      decl-specifier-seq does not itself declare a class or
8054      enumeration.  */
8055   if (!saw_declarator)
8056     {
8057       if (cp_parser_declares_only_class_p (parser))
8058         shadow_tag (&decl_specifiers);
8059       /* Perform any deferred access checks.  */
8060       perform_deferred_access_checks ();
8061     }
8062
8063   /* Consume the `;'.  */
8064   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
8065
8066  done:
8067   pop_deferring_access_checks ();
8068 }
8069
8070 /* Parse a decl-specifier-seq.
8071
8072    decl-specifier-seq:
8073      decl-specifier-seq [opt] decl-specifier
8074
8075    decl-specifier:
8076      storage-class-specifier
8077      type-specifier
8078      function-specifier
8079      friend
8080      typedef
8081
8082    GNU Extension:
8083
8084    decl-specifier:
8085      attributes
8086
8087    Set *DECL_SPECS to a representation of the decl-specifier-seq.
8088
8089    The parser flags FLAGS is used to control type-specifier parsing.
8090
8091    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
8092    flags:
8093
8094      1: one of the decl-specifiers is an elaborated-type-specifier
8095         (i.e., a type declaration)
8096      2: one of the decl-specifiers is an enum-specifier or a
8097         class-specifier (i.e., a type definition)
8098
8099    */
8100
8101 static void
8102 cp_parser_decl_specifier_seq (cp_parser* parser,
8103                               cp_parser_flags flags,
8104                               cp_decl_specifier_seq *decl_specs,
8105                               int* declares_class_or_enum)
8106 {
8107   bool constructor_possible_p = !parser->in_declarator_p;
8108
8109   /* Clear DECL_SPECS.  */
8110   clear_decl_specs (decl_specs);
8111
8112   /* Assume no class or enumeration type is declared.  */
8113   *declares_class_or_enum = 0;
8114
8115   /* Keep reading specifiers until there are no more to read.  */
8116   while (true)
8117     {
8118       bool constructor_p;
8119       bool found_decl_spec;
8120       cp_token *token;
8121
8122       /* Peek at the next token.  */
8123       token = cp_lexer_peek_token (parser->lexer);
8124       /* Handle attributes.  */
8125       if (token->keyword == RID_ATTRIBUTE)
8126         {
8127           /* Parse the attributes.  */
8128           decl_specs->attributes
8129             = chainon (decl_specs->attributes,
8130                        cp_parser_attributes_opt (parser));
8131           continue;
8132         }
8133       /* Assume we will find a decl-specifier keyword.  */
8134       found_decl_spec = true;
8135       /* If the next token is an appropriate keyword, we can simply
8136          add it to the list.  */
8137       switch (token->keyword)
8138         {
8139           /* decl-specifier:
8140                friend  */
8141         case RID_FRIEND:
8142           if (!at_class_scope_p ())
8143             {
8144               error ("%H%<friend%> used outside of class", &token->location);
8145               cp_lexer_purge_token (parser->lexer);
8146             }
8147           else
8148             {
8149               ++decl_specs->specs[(int) ds_friend];
8150               /* Consume the token.  */
8151               cp_lexer_consume_token (parser->lexer);
8152             }
8153           break;
8154
8155           /* function-specifier:
8156                inline
8157                virtual
8158                explicit  */
8159         case RID_INLINE:
8160         case RID_VIRTUAL:
8161         case RID_EXPLICIT:
8162           cp_parser_function_specifier_opt (parser, decl_specs);
8163           break;
8164
8165           /* decl-specifier:
8166                typedef  */
8167         case RID_TYPEDEF:
8168           ++decl_specs->specs[(int) ds_typedef];
8169           /* Consume the token.  */
8170           cp_lexer_consume_token (parser->lexer);
8171           /* A constructor declarator cannot appear in a typedef.  */
8172           constructor_possible_p = false;
8173           /* The "typedef" keyword can only occur in a declaration; we
8174              may as well commit at this point.  */
8175           cp_parser_commit_to_tentative_parse (parser);
8176
8177           if (decl_specs->storage_class != sc_none)
8178             decl_specs->conflicting_specifiers_p = true;
8179           break;
8180
8181           /* storage-class-specifier:
8182                auto
8183                register
8184                static
8185                extern
8186                mutable
8187
8188              GNU Extension:
8189                thread  */
8190         case RID_AUTO:
8191           /* Consume the token.  */
8192           cp_lexer_consume_token (parser->lexer);
8193
8194           if (cxx_dialect == cxx98) 
8195             {
8196               /* Complain about `auto' as a storage specifier, if
8197                  we're complaining about C++0x compatibility.  */
8198               warning 
8199                 (OPT_Wc__0x_compat, 
8200                  "%<auto%> will change meaning in C++0x; please remove it");
8201
8202               /* Set the storage class anyway.  */
8203               cp_parser_set_storage_class (parser, decl_specs, RID_AUTO);
8204             }
8205           else 
8206             /* We do not yet support the use of `auto' as a
8207                type-specifier.  */
8208             error ("C++0x %<auto%> specifier not supported");
8209           break;
8210
8211         case RID_REGISTER:
8212         case RID_STATIC:
8213         case RID_EXTERN:
8214         case RID_MUTABLE:
8215           /* Consume the token.  */
8216           cp_lexer_consume_token (parser->lexer);
8217           cp_parser_set_storage_class (parser, decl_specs, token->keyword);
8218           break;
8219         case RID_THREAD:
8220           /* Consume the token.  */
8221           cp_lexer_consume_token (parser->lexer);
8222           ++decl_specs->specs[(int) ds_thread];
8223           break;
8224
8225         default:
8226           /* We did not yet find a decl-specifier yet.  */
8227           found_decl_spec = false;
8228           break;
8229         }
8230
8231       /* Constructors are a special case.  The `S' in `S()' is not a
8232          decl-specifier; it is the beginning of the declarator.  */
8233       constructor_p
8234         = (!found_decl_spec
8235            && constructor_possible_p
8236            && (cp_parser_constructor_declarator_p
8237                (parser, decl_specs->specs[(int) ds_friend] != 0)));
8238
8239       /* If we don't have a DECL_SPEC yet, then we must be looking at
8240          a type-specifier.  */
8241       if (!found_decl_spec && !constructor_p)
8242         {
8243           int decl_spec_declares_class_or_enum;
8244           bool is_cv_qualifier;
8245           tree type_spec;
8246
8247           type_spec
8248             = cp_parser_type_specifier (parser, flags,
8249                                         decl_specs,
8250                                         /*is_declaration=*/true,
8251                                         &decl_spec_declares_class_or_enum,
8252                                         &is_cv_qualifier);
8253
8254           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
8255
8256           /* If this type-specifier referenced a user-defined type
8257              (a typedef, class-name, etc.), then we can't allow any
8258              more such type-specifiers henceforth.
8259
8260              [dcl.spec]
8261
8262              The longest sequence of decl-specifiers that could
8263              possibly be a type name is taken as the
8264              decl-specifier-seq of a declaration.  The sequence shall
8265              be self-consistent as described below.
8266
8267              [dcl.type]
8268
8269              As a general rule, at most one type-specifier is allowed
8270              in the complete decl-specifier-seq of a declaration.  The
8271              only exceptions are the following:
8272
8273              -- const or volatile can be combined with any other
8274                 type-specifier.
8275
8276              -- signed or unsigned can be combined with char, long,
8277                 short, or int.
8278
8279              -- ..
8280
8281              Example:
8282
8283                typedef char* Pc;
8284                void g (const int Pc);
8285
8286              Here, Pc is *not* part of the decl-specifier seq; it's
8287              the declarator.  Therefore, once we see a type-specifier
8288              (other than a cv-qualifier), we forbid any additional
8289              user-defined types.  We *do* still allow things like `int
8290              int' to be considered a decl-specifier-seq, and issue the
8291              error message later.  */
8292           if (type_spec && !is_cv_qualifier)
8293             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
8294           /* A constructor declarator cannot follow a type-specifier.  */
8295           if (type_spec)
8296             {
8297               constructor_possible_p = false;
8298               found_decl_spec = true;
8299             }
8300         }
8301
8302       /* If we still do not have a DECL_SPEC, then there are no more
8303          decl-specifiers.  */
8304       if (!found_decl_spec)
8305         break;
8306
8307       decl_specs->any_specifiers_p = true;
8308       /* After we see one decl-specifier, further decl-specifiers are
8309          always optional.  */
8310       flags |= CP_PARSER_FLAGS_OPTIONAL;
8311     }
8312
8313   cp_parser_check_decl_spec (decl_specs);
8314
8315   /* Don't allow a friend specifier with a class definition.  */
8316   if (decl_specs->specs[(int) ds_friend] != 0
8317       && (*declares_class_or_enum & 2))
8318     error ("class definition may not be declared a friend");
8319 }
8320
8321 /* Parse an (optional) storage-class-specifier.
8322
8323    storage-class-specifier:
8324      auto
8325      register
8326      static
8327      extern
8328      mutable
8329
8330    GNU Extension:
8331
8332    storage-class-specifier:
8333      thread
8334
8335    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
8336
8337 static tree
8338 cp_parser_storage_class_specifier_opt (cp_parser* parser)
8339 {
8340   switch (cp_lexer_peek_token (parser->lexer)->keyword)
8341     {
8342     case RID_AUTO:
8343       if (cxx_dialect != cxx98)
8344         return NULL_TREE;
8345       /* Fall through for C++98.  */
8346
8347     case RID_REGISTER:
8348     case RID_STATIC:
8349     case RID_EXTERN:
8350     case RID_MUTABLE:
8351     case RID_THREAD:
8352       /* Consume the token.  */
8353       return cp_lexer_consume_token (parser->lexer)->u.value;
8354
8355     default:
8356       return NULL_TREE;
8357     }
8358 }
8359
8360 /* Parse an (optional) function-specifier.
8361
8362    function-specifier:
8363      inline
8364      virtual
8365      explicit
8366
8367    Returns an IDENTIFIER_NODE corresponding to the keyword used.
8368    Updates DECL_SPECS, if it is non-NULL.  */
8369
8370 static tree
8371 cp_parser_function_specifier_opt (cp_parser* parser,
8372                                   cp_decl_specifier_seq *decl_specs)
8373 {
8374   switch (cp_lexer_peek_token (parser->lexer)->keyword)
8375     {
8376     case RID_INLINE:
8377       if (decl_specs)
8378         ++decl_specs->specs[(int) ds_inline];
8379       break;
8380
8381     case RID_VIRTUAL:
8382       /* 14.5.2.3 [temp.mem]
8383
8384          A member function template shall not be virtual.  */
8385       if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8386         error ("templates may not be %<virtual%>");
8387       else if (decl_specs)
8388         ++decl_specs->specs[(int) ds_virtual];
8389       break;
8390
8391     case RID_EXPLICIT:
8392       if (decl_specs)
8393         ++decl_specs->specs[(int) ds_explicit];
8394       break;
8395
8396     default:
8397       return NULL_TREE;
8398     }
8399
8400   /* Consume the token.  */
8401   return cp_lexer_consume_token (parser->lexer)->u.value;
8402 }
8403
8404 /* Parse a linkage-specification.
8405
8406    linkage-specification:
8407      extern string-literal { declaration-seq [opt] }
8408      extern string-literal declaration  */
8409
8410 static void
8411 cp_parser_linkage_specification (cp_parser* parser)
8412 {
8413   tree linkage;
8414
8415   /* Look for the `extern' keyword.  */
8416   cp_parser_require_keyword (parser, RID_EXTERN, "%<extern%>");
8417
8418   /* Look for the string-literal.  */
8419   linkage = cp_parser_string_literal (parser, false, false);
8420
8421   /* Transform the literal into an identifier.  If the literal is a
8422      wide-character string, or contains embedded NULs, then we can't
8423      handle it as the user wants.  */
8424   if (strlen (TREE_STRING_POINTER (linkage))
8425       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
8426     {
8427       cp_parser_error (parser, "invalid linkage-specification");
8428       /* Assume C++ linkage.  */
8429       linkage = lang_name_cplusplus;
8430     }
8431   else
8432     linkage = get_identifier (TREE_STRING_POINTER (linkage));
8433
8434   /* We're now using the new linkage.  */
8435   push_lang_context (linkage);
8436
8437   /* If the next token is a `{', then we're using the first
8438      production.  */
8439   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
8440     {
8441       /* Consume the `{' token.  */
8442       cp_lexer_consume_token (parser->lexer);
8443       /* Parse the declarations.  */
8444       cp_parser_declaration_seq_opt (parser);
8445       /* Look for the closing `}'.  */
8446       cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
8447     }
8448   /* Otherwise, there's just one declaration.  */
8449   else
8450     {
8451       bool saved_in_unbraced_linkage_specification_p;
8452
8453       saved_in_unbraced_linkage_specification_p
8454         = parser->in_unbraced_linkage_specification_p;
8455       parser->in_unbraced_linkage_specification_p = true;
8456       cp_parser_declaration (parser);
8457       parser->in_unbraced_linkage_specification_p
8458         = saved_in_unbraced_linkage_specification_p;
8459     }
8460
8461   /* We're done with the linkage-specification.  */
8462   pop_lang_context ();
8463 }
8464
8465 /* Parse a static_assert-declaration.
8466
8467    static_assert-declaration:
8468      static_assert ( constant-expression , string-literal ) ; 
8469
8470    If MEMBER_P, this static_assert is a class member.  */
8471
8472 static void 
8473 cp_parser_static_assert(cp_parser *parser, bool member_p)
8474 {
8475   tree condition;
8476   tree message;
8477   cp_token *token;
8478   location_t saved_loc;
8479
8480   /* Peek at the `static_assert' token so we can keep track of exactly
8481      where the static assertion started.  */
8482   token = cp_lexer_peek_token (parser->lexer);
8483   saved_loc = token->location;
8484
8485   /* Look for the `static_assert' keyword.  */
8486   if (!cp_parser_require_keyword (parser, RID_STATIC_ASSERT, 
8487                                   "%<static_assert%>"))
8488     return;
8489
8490   /*  We know we are in a static assertion; commit to any tentative
8491       parse.  */
8492   if (cp_parser_parsing_tentatively (parser))
8493     cp_parser_commit_to_tentative_parse (parser);
8494
8495   /* Parse the `(' starting the static assertion condition.  */
8496   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
8497
8498   /* Parse the constant-expression.  */
8499   condition = 
8500     cp_parser_constant_expression (parser,
8501                                    /*allow_non_constant_p=*/false,
8502                                    /*non_constant_p=*/NULL);
8503
8504   /* Parse the separating `,'.  */
8505   cp_parser_require (parser, CPP_COMMA, "%<,%>");
8506
8507   /* Parse the string-literal message.  */
8508   message = cp_parser_string_literal (parser, 
8509                                       /*translate=*/false,
8510                                       /*wide_ok=*/true);
8511
8512   /* A `)' completes the static assertion.  */
8513   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
8514     cp_parser_skip_to_closing_parenthesis (parser, 
8515                                            /*recovering=*/true, 
8516                                            /*or_comma=*/false,
8517                                            /*consume_paren=*/true);
8518
8519   /* A semicolon terminates the declaration.  */
8520   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
8521
8522   /* Complete the static assertion, which may mean either processing 
8523      the static assert now or saving it for template instantiation.  */
8524   finish_static_assert (condition, message, saved_loc, member_p);
8525 }
8526
8527 /* Parse a `decltype' type. Returns the type. 
8528
8529    simple-type-specifier:
8530      decltype ( expression )  */
8531
8532 static tree
8533 cp_parser_decltype (cp_parser *parser)
8534 {
8535   tree expr;
8536   bool id_expression_or_member_access_p = false;
8537   const char *saved_message;
8538   bool saved_integral_constant_expression_p;
8539   bool saved_non_integral_constant_expression_p;
8540
8541   /* Look for the `decltype' token.  */
8542   if (!cp_parser_require_keyword (parser, RID_DECLTYPE, "%<decltype%>"))
8543     return error_mark_node;
8544
8545   /* Types cannot be defined in a `decltype' expression.  Save away the
8546      old message.  */
8547   saved_message = parser->type_definition_forbidden_message;
8548
8549   /* And create the new one.  */
8550   parser->type_definition_forbidden_message
8551     = "types may not be defined in %<decltype%> expressions";
8552
8553   /* The restrictions on constant-expressions do not apply inside
8554      decltype expressions.  */
8555   saved_integral_constant_expression_p
8556     = parser->integral_constant_expression_p;
8557   saved_non_integral_constant_expression_p
8558     = parser->non_integral_constant_expression_p;
8559   parser->integral_constant_expression_p = false;
8560
8561   /* Do not actually evaluate the expression.  */
8562   ++skip_evaluation;
8563
8564   /* Parse the opening `('.  */
8565   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
8566     return error_mark_node;
8567   
8568   /* First, try parsing an id-expression.  */
8569   cp_parser_parse_tentatively (parser);
8570   expr = cp_parser_id_expression (parser,
8571                                   /*template_keyword_p=*/false,
8572                                   /*check_dependency_p=*/true,
8573                                   /*template_p=*/NULL,
8574                                   /*declarator_p=*/false,
8575                                   /*optional_p=*/false);
8576
8577   if (!cp_parser_error_occurred (parser) && expr != error_mark_node)
8578     {
8579       bool non_integral_constant_expression_p = false;
8580       tree id_expression = expr;
8581       cp_id_kind idk;
8582       const char *error_msg;
8583
8584       if (TREE_CODE (expr) == IDENTIFIER_NODE)
8585         /* Lookup the name we got back from the id-expression.  */
8586         expr = cp_parser_lookup_name (parser, expr,
8587                                       none_type,
8588                                       /*is_template=*/false,
8589                                       /*is_namespace=*/false,
8590                                       /*check_dependency=*/true,
8591                                       /*ambiguous_decls=*/NULL);
8592
8593       if (expr
8594           && expr != error_mark_node
8595           && TREE_CODE (expr) != TEMPLATE_ID_EXPR
8596           && TREE_CODE (expr) != TYPE_DECL
8597           && (TREE_CODE (expr) != BIT_NOT_EXPR
8598               || !TYPE_P (TREE_OPERAND (expr, 0)))
8599           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
8600         {
8601           /* Complete lookup of the id-expression.  */
8602           expr = (finish_id_expression
8603                   (id_expression, expr, parser->scope, &idk,
8604                    /*integral_constant_expression_p=*/false,
8605                    /*allow_non_integral_constant_expression_p=*/true,
8606                    &non_integral_constant_expression_p,
8607                    /*template_p=*/false,
8608                    /*done=*/true,
8609                    /*address_p=*/false,
8610                    /*template_arg_p=*/false,
8611                    &error_msg));
8612
8613           if (expr == error_mark_node)
8614             /* We found an id-expression, but it was something that we
8615                should not have found. This is an error, not something
8616                we can recover from, so note that we found an
8617                id-expression and we'll recover as gracefully as
8618                possible.  */
8619             id_expression_or_member_access_p = true;
8620         }
8621
8622       if (expr 
8623           && expr != error_mark_node
8624           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
8625         /* We have an id-expression.  */
8626         id_expression_or_member_access_p = true;
8627     }
8628
8629   if (!id_expression_or_member_access_p)
8630     {
8631       /* Abort the id-expression parse.  */
8632       cp_parser_abort_tentative_parse (parser);
8633
8634       /* Parsing tentatively, again.  */
8635       cp_parser_parse_tentatively (parser);
8636
8637       /* Parse a class member access.  */
8638       expr = cp_parser_postfix_expression (parser, /*address_p=*/false,
8639                                            /*cast_p=*/false,
8640                                            /*member_access_only_p=*/true);
8641
8642       if (expr 
8643           && expr != error_mark_node
8644           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
8645         /* We have an id-expression.  */
8646         id_expression_or_member_access_p = true;
8647     }
8648
8649   if (id_expression_or_member_access_p)
8650     /* We have parsed the complete id-expression or member access.  */
8651     cp_parser_parse_definitely (parser);
8652   else
8653     {
8654       /* Abort our attempt to parse an id-expression or member access
8655          expression.  */
8656       cp_parser_abort_tentative_parse (parser);
8657
8658       /* Parse a full expression.  */
8659       expr = cp_parser_expression (parser, /*cast_p=*/false);
8660     }
8661
8662   /* Go back to evaluating expressions.  */
8663   --skip_evaluation;
8664
8665   /* Restore the old message and the integral constant expression
8666      flags.  */
8667   parser->type_definition_forbidden_message = saved_message;
8668   parser->integral_constant_expression_p
8669     = saved_integral_constant_expression_p;
8670   parser->non_integral_constant_expression_p
8671     = saved_non_integral_constant_expression_p;
8672
8673   if (expr == error_mark_node)
8674     {
8675       /* Skip everything up to the closing `)'.  */
8676       cp_parser_skip_to_closing_parenthesis (parser, true, false,
8677                                              /*consume_paren=*/true);
8678       return error_mark_node;
8679     }
8680   
8681   /* Parse to the closing `)'.  */
8682   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
8683     {
8684       cp_parser_skip_to_closing_parenthesis (parser, true, false,
8685                                              /*consume_paren=*/true);
8686       return error_mark_node;
8687     }
8688
8689   return finish_decltype_type (expr, id_expression_or_member_access_p);
8690 }
8691
8692 /* Special member functions [gram.special] */
8693
8694 /* Parse a conversion-function-id.
8695
8696    conversion-function-id:
8697      operator conversion-type-id
8698
8699    Returns an IDENTIFIER_NODE representing the operator.  */
8700
8701 static tree
8702 cp_parser_conversion_function_id (cp_parser* parser)
8703 {
8704   tree type;
8705   tree saved_scope;
8706   tree saved_qualifying_scope;
8707   tree saved_object_scope;
8708   tree pushed_scope = NULL_TREE;
8709
8710   /* Look for the `operator' token.  */
8711   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "%<operator%>"))
8712     return error_mark_node;
8713   /* When we parse the conversion-type-id, the current scope will be
8714      reset.  However, we need that information in able to look up the
8715      conversion function later, so we save it here.  */
8716   saved_scope = parser->scope;
8717   saved_qualifying_scope = parser->qualifying_scope;
8718   saved_object_scope = parser->object_scope;
8719   /* We must enter the scope of the class so that the names of
8720      entities declared within the class are available in the
8721      conversion-type-id.  For example, consider:
8722
8723        struct S {
8724          typedef int I;
8725          operator I();
8726        };
8727
8728        S::operator I() { ... }
8729
8730      In order to see that `I' is a type-name in the definition, we
8731      must be in the scope of `S'.  */
8732   if (saved_scope)
8733     pushed_scope = push_scope (saved_scope);
8734   /* Parse the conversion-type-id.  */
8735   type = cp_parser_conversion_type_id (parser);
8736   /* Leave the scope of the class, if any.  */
8737   if (pushed_scope)
8738     pop_scope (pushed_scope);
8739   /* Restore the saved scope.  */
8740   parser->scope = saved_scope;
8741   parser->qualifying_scope = saved_qualifying_scope;
8742   parser->object_scope = saved_object_scope;
8743   /* If the TYPE is invalid, indicate failure.  */
8744   if (type == error_mark_node)
8745     return error_mark_node;
8746   return mangle_conv_op_name_for_type (type);
8747 }
8748
8749 /* Parse a conversion-type-id:
8750
8751    conversion-type-id:
8752      type-specifier-seq conversion-declarator [opt]
8753
8754    Returns the TYPE specified.  */
8755
8756 static tree
8757 cp_parser_conversion_type_id (cp_parser* parser)
8758 {
8759   tree attributes;
8760   cp_decl_specifier_seq type_specifiers;
8761   cp_declarator *declarator;
8762   tree type_specified;
8763
8764   /* Parse the attributes.  */
8765   attributes = cp_parser_attributes_opt (parser);
8766   /* Parse the type-specifiers.  */
8767   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
8768                                 &type_specifiers);
8769   /* If that didn't work, stop.  */
8770   if (type_specifiers.type == error_mark_node)
8771     return error_mark_node;
8772   /* Parse the conversion-declarator.  */
8773   declarator = cp_parser_conversion_declarator_opt (parser);
8774
8775   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
8776                                     /*initialized=*/0, &attributes);
8777   if (attributes)
8778     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
8779   return type_specified;
8780 }
8781
8782 /* Parse an (optional) conversion-declarator.
8783
8784    conversion-declarator:
8785      ptr-operator conversion-declarator [opt]
8786
8787    */
8788
8789 static cp_declarator *
8790 cp_parser_conversion_declarator_opt (cp_parser* parser)
8791 {
8792   enum tree_code code;
8793   tree class_type;
8794   cp_cv_quals cv_quals;
8795
8796   /* We don't know if there's a ptr-operator next, or not.  */
8797   cp_parser_parse_tentatively (parser);
8798   /* Try the ptr-operator.  */
8799   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
8800   /* If it worked, look for more conversion-declarators.  */
8801   if (cp_parser_parse_definitely (parser))
8802     {
8803       cp_declarator *declarator;
8804
8805       /* Parse another optional declarator.  */
8806       declarator = cp_parser_conversion_declarator_opt (parser);
8807
8808       return cp_parser_make_indirect_declarator
8809         (code, class_type, cv_quals, declarator);
8810    }
8811
8812   return NULL;
8813 }
8814
8815 /* Parse an (optional) ctor-initializer.
8816
8817    ctor-initializer:
8818      : mem-initializer-list
8819
8820    Returns TRUE iff the ctor-initializer was actually present.  */
8821
8822 static bool
8823 cp_parser_ctor_initializer_opt (cp_parser* parser)
8824 {
8825   /* If the next token is not a `:', then there is no
8826      ctor-initializer.  */
8827   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
8828     {
8829       /* Do default initialization of any bases and members.  */
8830       if (DECL_CONSTRUCTOR_P (current_function_decl))
8831         finish_mem_initializers (NULL_TREE);
8832
8833       return false;
8834     }
8835
8836   /* Consume the `:' token.  */
8837   cp_lexer_consume_token (parser->lexer);
8838   /* And the mem-initializer-list.  */
8839   cp_parser_mem_initializer_list (parser);
8840
8841   return true;
8842 }
8843
8844 /* Parse a mem-initializer-list.
8845
8846    mem-initializer-list:
8847      mem-initializer ... [opt]
8848      mem-initializer ... [opt] , mem-initializer-list  */
8849
8850 static void
8851 cp_parser_mem_initializer_list (cp_parser* parser)
8852 {
8853   tree mem_initializer_list = NULL_TREE;
8854
8855   /* Let the semantic analysis code know that we are starting the
8856      mem-initializer-list.  */
8857   if (!DECL_CONSTRUCTOR_P (current_function_decl))
8858     error ("only constructors take base initializers");
8859
8860   /* Loop through the list.  */
8861   while (true)
8862     {
8863       tree mem_initializer;
8864
8865       /* Parse the mem-initializer.  */
8866       mem_initializer = cp_parser_mem_initializer (parser);
8867       /* If the next token is a `...', we're expanding member initializers. */
8868       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
8869         {
8870           /* Consume the `...'. */
8871           cp_lexer_consume_token (parser->lexer);
8872
8873           /* The TREE_PURPOSE must be a _TYPE, because base-specifiers
8874              can be expanded but members cannot. */
8875           if (mem_initializer != error_mark_node
8876               && !TYPE_P (TREE_PURPOSE (mem_initializer)))
8877             {
8878               error ("cannot expand initializer for member %<%D%>", 
8879                      TREE_PURPOSE (mem_initializer));
8880               mem_initializer = error_mark_node;
8881             }
8882
8883           /* Construct the pack expansion type. */
8884           if (mem_initializer != error_mark_node)
8885             mem_initializer = make_pack_expansion (mem_initializer);
8886         }
8887       /* Add it to the list, unless it was erroneous.  */
8888       if (mem_initializer != error_mark_node)
8889         {
8890           TREE_CHAIN (mem_initializer) = mem_initializer_list;
8891           mem_initializer_list = mem_initializer;
8892         }
8893       /* If the next token is not a `,', we're done.  */
8894       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8895         break;
8896       /* Consume the `,' token.  */
8897       cp_lexer_consume_token (parser->lexer);
8898     }
8899
8900   /* Perform semantic analysis.  */
8901   if (DECL_CONSTRUCTOR_P (current_function_decl))
8902     finish_mem_initializers (mem_initializer_list);
8903 }
8904
8905 /* Parse a mem-initializer.
8906
8907    mem-initializer:
8908      mem-initializer-id ( expression-list [opt] )
8909
8910    GNU extension:
8911
8912    mem-initializer:
8913      ( expression-list [opt] )
8914
8915    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
8916    class) or FIELD_DECL (for a non-static data member) to initialize;
8917    the TREE_VALUE is the expression-list.  An empty initialization
8918    list is represented by void_list_node.  */
8919
8920 static tree
8921 cp_parser_mem_initializer (cp_parser* parser)
8922 {
8923   tree mem_initializer_id;
8924   tree expression_list;
8925   tree member;
8926
8927   /* Find out what is being initialized.  */
8928   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
8929     {
8930       pedwarn ("anachronistic old-style base class initializer");
8931       mem_initializer_id = NULL_TREE;
8932     }
8933   else
8934     mem_initializer_id = cp_parser_mem_initializer_id (parser);
8935   member = expand_member_init (mem_initializer_id);
8936   if (member && !DECL_P (member))
8937     in_base_initializer = 1;
8938
8939   expression_list
8940     = cp_parser_parenthesized_expression_list (parser, false,
8941                                                /*cast_p=*/false,
8942                                                /*allow_expansion_p=*/true,
8943                                                /*non_constant_p=*/NULL);
8944   if (expression_list == error_mark_node)
8945     return error_mark_node;
8946   if (!expression_list)
8947     expression_list = void_type_node;
8948
8949   in_base_initializer = 0;
8950
8951   return member ? build_tree_list (member, expression_list) : error_mark_node;
8952 }
8953
8954 /* Parse a mem-initializer-id.
8955
8956    mem-initializer-id:
8957      :: [opt] nested-name-specifier [opt] class-name
8958      identifier
8959
8960    Returns a TYPE indicating the class to be initializer for the first
8961    production.  Returns an IDENTIFIER_NODE indicating the data member
8962    to be initialized for the second production.  */
8963
8964 static tree
8965 cp_parser_mem_initializer_id (cp_parser* parser)
8966 {
8967   bool global_scope_p;
8968   bool nested_name_specifier_p;
8969   bool template_p = false;
8970   tree id;
8971
8972   /* `typename' is not allowed in this context ([temp.res]).  */
8973   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
8974     {
8975       error ("keyword %<typename%> not allowed in this context (a qualified "
8976              "member initializer is implicitly a type)");
8977       cp_lexer_consume_token (parser->lexer);
8978     }
8979   /* Look for the optional `::' operator.  */
8980   global_scope_p
8981     = (cp_parser_global_scope_opt (parser,
8982                                    /*current_scope_valid_p=*/false)
8983        != NULL_TREE);
8984   /* Look for the optional nested-name-specifier.  The simplest way to
8985      implement:
8986
8987        [temp.res]
8988
8989        The keyword `typename' is not permitted in a base-specifier or
8990        mem-initializer; in these contexts a qualified name that
8991        depends on a template-parameter is implicitly assumed to be a
8992        type name.
8993
8994      is to assume that we have seen the `typename' keyword at this
8995      point.  */
8996   nested_name_specifier_p
8997     = (cp_parser_nested_name_specifier_opt (parser,
8998                                             /*typename_keyword_p=*/true,
8999                                             /*check_dependency_p=*/true,
9000                                             /*type_p=*/true,
9001                                             /*is_declaration=*/true)
9002        != NULL_TREE);
9003   if (nested_name_specifier_p)
9004     template_p = cp_parser_optional_template_keyword (parser);
9005   /* If there is a `::' operator or a nested-name-specifier, then we
9006      are definitely looking for a class-name.  */
9007   if (global_scope_p || nested_name_specifier_p)
9008     return cp_parser_class_name (parser,
9009                                  /*typename_keyword_p=*/true,
9010                                  /*template_keyword_p=*/template_p,
9011                                  none_type,
9012                                  /*check_dependency_p=*/true,
9013                                  /*class_head_p=*/false,
9014                                  /*is_declaration=*/true);
9015   /* Otherwise, we could also be looking for an ordinary identifier.  */
9016   cp_parser_parse_tentatively (parser);
9017   /* Try a class-name.  */
9018   id = cp_parser_class_name (parser,
9019                              /*typename_keyword_p=*/true,
9020                              /*template_keyword_p=*/false,
9021                              none_type,
9022                              /*check_dependency_p=*/true,
9023                              /*class_head_p=*/false,
9024                              /*is_declaration=*/true);
9025   /* If we found one, we're done.  */
9026   if (cp_parser_parse_definitely (parser))
9027     return id;
9028   /* Otherwise, look for an ordinary identifier.  */
9029   return cp_parser_identifier (parser);
9030 }
9031
9032 /* Overloading [gram.over] */
9033
9034 /* Parse an operator-function-id.
9035
9036    operator-function-id:
9037      operator operator
9038
9039    Returns an IDENTIFIER_NODE for the operator which is a
9040    human-readable spelling of the identifier, e.g., `operator +'.  */
9041
9042 static tree
9043 cp_parser_operator_function_id (cp_parser* parser)
9044 {
9045   /* Look for the `operator' keyword.  */
9046   if (!cp_parser_require_keyword (parser, RID_OPERATOR, "%<operator%>"))
9047     return error_mark_node;
9048   /* And then the name of the operator itself.  */
9049   return cp_parser_operator (parser);
9050 }
9051
9052 /* Parse an operator.
9053
9054    operator:
9055      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
9056      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
9057      || ++ -- , ->* -> () []
9058
9059    GNU Extensions:
9060
9061    operator:
9062      <? >? <?= >?=
9063
9064    Returns an IDENTIFIER_NODE for the operator which is a
9065    human-readable spelling of the identifier, e.g., `operator +'.  */
9066
9067 static tree
9068 cp_parser_operator (cp_parser* parser)
9069 {
9070   tree id = NULL_TREE;
9071   cp_token *token;
9072
9073   /* Peek at the next token.  */
9074   token = cp_lexer_peek_token (parser->lexer);
9075   /* Figure out which operator we have.  */
9076   switch (token->type)
9077     {
9078     case CPP_KEYWORD:
9079       {
9080         enum tree_code op;
9081
9082         /* The keyword should be either `new' or `delete'.  */
9083         if (token->keyword == RID_NEW)
9084           op = NEW_EXPR;
9085         else if (token->keyword == RID_DELETE)
9086           op = DELETE_EXPR;
9087         else
9088           break;
9089
9090         /* Consume the `new' or `delete' token.  */
9091         cp_lexer_consume_token (parser->lexer);
9092
9093         /* Peek at the next token.  */
9094         token = cp_lexer_peek_token (parser->lexer);
9095         /* If it's a `[' token then this is the array variant of the
9096            operator.  */
9097         if (token->type == CPP_OPEN_SQUARE)
9098           {
9099             /* Consume the `[' token.  */
9100             cp_lexer_consume_token (parser->lexer);
9101             /* Look for the `]' token.  */
9102             cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
9103             id = ansi_opname (op == NEW_EXPR
9104                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
9105           }
9106         /* Otherwise, we have the non-array variant.  */
9107         else
9108           id = ansi_opname (op);
9109
9110         return id;
9111       }
9112
9113     case CPP_PLUS:
9114       id = ansi_opname (PLUS_EXPR);
9115       break;
9116
9117     case CPP_MINUS:
9118       id = ansi_opname (MINUS_EXPR);
9119       break;
9120
9121     case CPP_MULT:
9122       id = ansi_opname (MULT_EXPR);
9123       break;
9124
9125     case CPP_DIV:
9126       id = ansi_opname (TRUNC_DIV_EXPR);
9127       break;
9128
9129     case CPP_MOD:
9130       id = ansi_opname (TRUNC_MOD_EXPR);
9131       break;
9132
9133     case CPP_XOR:
9134       id = ansi_opname (BIT_XOR_EXPR);
9135       break;
9136
9137     case CPP_AND:
9138       id = ansi_opname (BIT_AND_EXPR);
9139       break;
9140
9141     case CPP_OR:
9142       id = ansi_opname (BIT_IOR_EXPR);
9143       break;
9144
9145     case CPP_COMPL:
9146       id = ansi_opname (BIT_NOT_EXPR);
9147       break;
9148
9149     case CPP_NOT:
9150       id = ansi_opname (TRUTH_NOT_EXPR);
9151       break;
9152
9153     case CPP_EQ:
9154       id = ansi_assopname (NOP_EXPR);
9155       break;
9156
9157     case CPP_LESS:
9158       id = ansi_opname (LT_EXPR);
9159       break;
9160
9161     case CPP_GREATER:
9162       id = ansi_opname (GT_EXPR);
9163       break;
9164
9165     case CPP_PLUS_EQ:
9166       id = ansi_assopname (PLUS_EXPR);
9167       break;
9168
9169     case CPP_MINUS_EQ:
9170       id = ansi_assopname (MINUS_EXPR);
9171       break;
9172
9173     case CPP_MULT_EQ:
9174       id = ansi_assopname (MULT_EXPR);
9175       break;
9176
9177     case CPP_DIV_EQ:
9178       id = ansi_assopname (TRUNC_DIV_EXPR);
9179       break;
9180
9181     case CPP_MOD_EQ:
9182       id = ansi_assopname (TRUNC_MOD_EXPR);
9183       break;
9184
9185     case CPP_XOR_EQ:
9186       id = ansi_assopname (BIT_XOR_EXPR);
9187       break;
9188
9189     case CPP_AND_EQ:
9190       id = ansi_assopname (BIT_AND_EXPR);
9191       break;
9192
9193     case CPP_OR_EQ:
9194       id = ansi_assopname (BIT_IOR_EXPR);
9195       break;
9196
9197     case CPP_LSHIFT:
9198       id = ansi_opname (LSHIFT_EXPR);
9199       break;
9200
9201     case CPP_RSHIFT:
9202       id = ansi_opname (RSHIFT_EXPR);
9203       break;
9204
9205     case CPP_LSHIFT_EQ:
9206       id = ansi_assopname (LSHIFT_EXPR);
9207       break;
9208
9209     case CPP_RSHIFT_EQ:
9210       id = ansi_assopname (RSHIFT_EXPR);
9211       break;
9212
9213     case CPP_EQ_EQ:
9214       id = ansi_opname (EQ_EXPR);
9215       break;
9216
9217     case CPP_NOT_EQ:
9218       id = ansi_opname (NE_EXPR);
9219       break;
9220
9221     case CPP_LESS_EQ:
9222       id = ansi_opname (LE_EXPR);
9223       break;
9224
9225     case CPP_GREATER_EQ:
9226       id = ansi_opname (GE_EXPR);
9227       break;
9228
9229     case CPP_AND_AND:
9230       id = ansi_opname (TRUTH_ANDIF_EXPR);
9231       break;
9232
9233     case CPP_OR_OR:
9234       id = ansi_opname (TRUTH_ORIF_EXPR);
9235       break;
9236
9237     case CPP_PLUS_PLUS:
9238       id = ansi_opname (POSTINCREMENT_EXPR);
9239       break;
9240
9241     case CPP_MINUS_MINUS:
9242       id = ansi_opname (PREDECREMENT_EXPR);
9243       break;
9244
9245     case CPP_COMMA:
9246       id = ansi_opname (COMPOUND_EXPR);
9247       break;
9248
9249     case CPP_DEREF_STAR:
9250       id = ansi_opname (MEMBER_REF);
9251       break;
9252
9253     case CPP_DEREF:
9254       id = ansi_opname (COMPONENT_REF);
9255       break;
9256
9257     case CPP_OPEN_PAREN:
9258       /* Consume the `('.  */
9259       cp_lexer_consume_token (parser->lexer);
9260       /* Look for the matching `)'.  */
9261       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
9262       return ansi_opname (CALL_EXPR);
9263
9264     case CPP_OPEN_SQUARE:
9265       /* Consume the `['.  */
9266       cp_lexer_consume_token (parser->lexer);
9267       /* Look for the matching `]'.  */
9268       cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
9269       return ansi_opname (ARRAY_REF);
9270
9271     default:
9272       /* Anything else is an error.  */
9273       break;
9274     }
9275
9276   /* If we have selected an identifier, we need to consume the
9277      operator token.  */
9278   if (id)
9279     cp_lexer_consume_token (parser->lexer);
9280   /* Otherwise, no valid operator name was present.  */
9281   else
9282     {
9283       cp_parser_error (parser, "expected operator");
9284       id = error_mark_node;
9285     }
9286
9287   return id;
9288 }
9289
9290 /* Parse a template-declaration.
9291
9292    template-declaration:
9293      export [opt] template < template-parameter-list > declaration
9294
9295    If MEMBER_P is TRUE, this template-declaration occurs within a
9296    class-specifier.
9297
9298    The grammar rule given by the standard isn't correct.  What
9299    is really meant is:
9300
9301    template-declaration:
9302      export [opt] template-parameter-list-seq
9303        decl-specifier-seq [opt] init-declarator [opt] ;
9304      export [opt] template-parameter-list-seq
9305        function-definition
9306
9307    template-parameter-list-seq:
9308      template-parameter-list-seq [opt]
9309      template < template-parameter-list >  */
9310
9311 static void
9312 cp_parser_template_declaration (cp_parser* parser, bool member_p)
9313 {
9314   /* Check for `export'.  */
9315   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
9316     {
9317       /* Consume the `export' token.  */
9318       cp_lexer_consume_token (parser->lexer);
9319       /* Warn that we do not support `export'.  */
9320       warning (0, "keyword %<export%> not implemented, and will be ignored");
9321     }
9322
9323   cp_parser_template_declaration_after_export (parser, member_p);
9324 }
9325
9326 /* Parse a template-parameter-list.
9327
9328    template-parameter-list:
9329      template-parameter
9330      template-parameter-list , template-parameter
9331
9332    Returns a TREE_LIST.  Each node represents a template parameter.
9333    The nodes are connected via their TREE_CHAINs.  */
9334
9335 static tree
9336 cp_parser_template_parameter_list (cp_parser* parser)
9337 {
9338   tree parameter_list = NULL_TREE;
9339
9340   begin_template_parm_list ();
9341   while (true)
9342     {
9343       tree parameter;
9344       bool is_non_type;
9345       bool is_parameter_pack;
9346
9347       /* Parse the template-parameter.  */
9348       parameter = cp_parser_template_parameter (parser, 
9349                                                 &is_non_type,
9350                                                 &is_parameter_pack);
9351       /* Add it to the list.  */
9352       if (parameter != error_mark_node)
9353         parameter_list = process_template_parm (parameter_list,
9354                                                 parameter,
9355                                                 is_non_type,
9356                                                 is_parameter_pack);
9357       else
9358        {
9359          tree err_parm = build_tree_list (parameter, parameter);
9360          TREE_VALUE (err_parm) = error_mark_node;
9361          parameter_list = chainon (parameter_list, err_parm);
9362        }
9363
9364       /* If the next token is not a `,', we're done.  */
9365       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
9366         break;
9367       /* Otherwise, consume the `,' token.  */
9368       cp_lexer_consume_token (parser->lexer);
9369     }
9370
9371   return end_template_parm_list (parameter_list);
9372 }
9373
9374 /* Parse a template-parameter.
9375
9376    template-parameter:
9377      type-parameter
9378      parameter-declaration
9379
9380    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
9381    the parameter.  The TREE_PURPOSE is the default value, if any.
9382    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
9383    iff this parameter is a non-type parameter.  *IS_PARAMETER_PACK is
9384    set to true iff this parameter is a parameter pack. */
9385
9386 static tree
9387 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type,
9388                               bool *is_parameter_pack)
9389 {
9390   cp_token *token;
9391   cp_parameter_declarator *parameter_declarator;
9392   cp_declarator *id_declarator;
9393   tree parm;
9394
9395   /* Assume it is a type parameter or a template parameter.  */
9396   *is_non_type = false;
9397   /* Assume it not a parameter pack. */
9398   *is_parameter_pack = false;
9399   /* Peek at the next token.  */
9400   token = cp_lexer_peek_token (parser->lexer);
9401   /* If it is `class' or `template', we have a type-parameter.  */
9402   if (token->keyword == RID_TEMPLATE)
9403     return cp_parser_type_parameter (parser, is_parameter_pack);
9404   /* If it is `class' or `typename' we do not know yet whether it is a
9405      type parameter or a non-type parameter.  Consider:
9406
9407        template <typename T, typename T::X X> ...
9408
9409      or:
9410
9411        template <class C, class D*> ...
9412
9413      Here, the first parameter is a type parameter, and the second is
9414      a non-type parameter.  We can tell by looking at the token after
9415      the identifier -- if it is a `,', `=', or `>' then we have a type
9416      parameter.  */
9417   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
9418     {
9419       /* Peek at the token after `class' or `typename'.  */
9420       token = cp_lexer_peek_nth_token (parser->lexer, 2);
9421       /* If it's an ellipsis, we have a template type parameter
9422          pack. */
9423       if (token->type == CPP_ELLIPSIS)
9424         return cp_parser_type_parameter (parser, is_parameter_pack);
9425       /* If it's an identifier, skip it.  */
9426       if (token->type == CPP_NAME)
9427         token = cp_lexer_peek_nth_token (parser->lexer, 3);
9428       /* Now, see if the token looks like the end of a template
9429          parameter.  */
9430       if (token->type == CPP_COMMA
9431           || token->type == CPP_EQ
9432           || token->type == CPP_GREATER)
9433         return cp_parser_type_parameter (parser, is_parameter_pack);
9434     }
9435
9436   /* Otherwise, it is a non-type parameter.
9437
9438      [temp.param]
9439
9440      When parsing a default template-argument for a non-type
9441      template-parameter, the first non-nested `>' is taken as the end
9442      of the template parameter-list rather than a greater-than
9443      operator.  */
9444   *is_non_type = true;
9445   parameter_declarator
9446      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
9447                                         /*parenthesized_p=*/NULL);
9448
9449   /* If the parameter declaration is marked as a parameter pack, set
9450      *IS_PARAMETER_PACK to notify the caller. Also, unmark the
9451      declarator's PACK_EXPANSION_P, otherwise we'll get errors from
9452      grokdeclarator. */
9453   if (parameter_declarator
9454       && parameter_declarator->declarator
9455       && parameter_declarator->declarator->parameter_pack_p)
9456     {
9457       *is_parameter_pack = true;
9458       parameter_declarator->declarator->parameter_pack_p = false;
9459     }
9460
9461   /* If the next token is an ellipsis, and we don't already have it
9462      marked as a parameter pack, then we have a parameter pack (that
9463      has no declarator).  */
9464   if (!*is_parameter_pack
9465       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
9466       && declarator_can_be_parameter_pack (parameter_declarator->declarator))
9467     {
9468       /* Consume the `...'.  */
9469       cp_lexer_consume_token (parser->lexer);
9470       maybe_warn_variadic_templates ();
9471       
9472       *is_parameter_pack = true;
9473     }
9474   /* We might end up with a pack expansion as the type of the non-type
9475      template parameter, in which case this is a non-type template
9476      parameter pack.  */
9477   else if (parameter_declarator
9478            && parameter_declarator->decl_specifiers.type
9479            && PACK_EXPANSION_P (parameter_declarator->decl_specifiers.type))
9480     {
9481       *is_parameter_pack = true;
9482       parameter_declarator->decl_specifiers.type = 
9483         PACK_EXPANSION_PATTERN (parameter_declarator->decl_specifiers.type);
9484     }
9485
9486   if (*is_parameter_pack && cp_lexer_next_token_is (parser->lexer, CPP_EQ))
9487     {
9488       /* Parameter packs cannot have default arguments.  However, a
9489          user may try to do so, so we'll parse them and give an
9490          appropriate diagnostic here.  */
9491
9492       /* Consume the `='.  */
9493       cp_lexer_consume_token (parser->lexer);
9494       
9495       /* Find the name of the parameter pack.  */     
9496       id_declarator = parameter_declarator->declarator;
9497       while (id_declarator && id_declarator->kind != cdk_id)
9498         id_declarator = id_declarator->declarator;
9499       
9500       if (id_declarator && id_declarator->kind == cdk_id)
9501         error ("template parameter pack %qD cannot have a default argument",
9502                id_declarator->u.id.unqualified_name);
9503       else
9504         error ("template parameter pack cannot have a default argument");
9505       
9506       /* Parse the default argument, but throw away the result.  */
9507       cp_parser_default_argument (parser, /*template_parm_p=*/true);
9508     }
9509
9510   parm = grokdeclarator (parameter_declarator->declarator,
9511                          &parameter_declarator->decl_specifiers,
9512                          PARM, /*initialized=*/0,
9513                          /*attrlist=*/NULL);
9514   if (parm == error_mark_node)
9515     return error_mark_node;
9516
9517   return build_tree_list (parameter_declarator->default_argument, parm);
9518 }
9519
9520 /* Parse a type-parameter.
9521
9522    type-parameter:
9523      class identifier [opt]
9524      class identifier [opt] = type-id
9525      typename identifier [opt]
9526      typename identifier [opt] = type-id
9527      template < template-parameter-list > class identifier [opt]
9528      template < template-parameter-list > class identifier [opt]
9529        = id-expression
9530
9531    GNU Extension (variadic templates):
9532
9533    type-parameter:
9534      class ... identifier [opt]
9535      typename ... identifier [opt]
9536
9537    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
9538    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
9539    the declaration of the parameter.
9540
9541    Sets *IS_PARAMETER_PACK if this is a template parameter pack. */
9542
9543 static tree
9544 cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
9545 {
9546   cp_token *token;
9547   tree parameter;
9548
9549   /* Look for a keyword to tell us what kind of parameter this is.  */
9550   token = cp_parser_require (parser, CPP_KEYWORD,
9551                              "%<class%>, %<typename%>, or %<template%>");
9552   if (!token)
9553     return error_mark_node;
9554
9555   switch (token->keyword)
9556     {
9557     case RID_CLASS:
9558     case RID_TYPENAME:
9559       {
9560         tree identifier;
9561         tree default_argument;
9562
9563         /* If the next token is an ellipsis, we have a template
9564            argument pack. */
9565         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
9566           {
9567             /* Consume the `...' token. */
9568             cp_lexer_consume_token (parser->lexer);
9569             maybe_warn_variadic_templates ();
9570
9571             *is_parameter_pack = true;
9572           }
9573
9574         /* If the next token is an identifier, then it names the
9575            parameter.  */
9576         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
9577           identifier = cp_parser_identifier (parser);
9578         else
9579           identifier = NULL_TREE;
9580
9581         /* Create the parameter.  */
9582         parameter = finish_template_type_parm (class_type_node, identifier);
9583
9584         /* If the next token is an `=', we have a default argument.  */
9585         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
9586           {
9587             /* Consume the `=' token.  */
9588             cp_lexer_consume_token (parser->lexer);
9589             /* Parse the default-argument.  */
9590             push_deferring_access_checks (dk_no_deferred);
9591             default_argument = cp_parser_type_id (parser);
9592
9593             /* Template parameter packs cannot have default
9594                arguments. */
9595             if (*is_parameter_pack)
9596               {
9597                 if (identifier)
9598                   error ("template parameter pack %qD cannot have a default argument", 
9599                          identifier);
9600                 else
9601                   error ("template parameter packs cannot have default arguments");
9602                 default_argument = NULL_TREE;
9603               }
9604             pop_deferring_access_checks ();
9605           }
9606         else
9607           default_argument = NULL_TREE;
9608
9609         /* Create the combined representation of the parameter and the
9610            default argument.  */
9611         parameter = build_tree_list (default_argument, parameter);
9612       }
9613       break;
9614
9615     case RID_TEMPLATE:
9616       {
9617         tree parameter_list;
9618         tree identifier;
9619         tree default_argument;
9620
9621         /* Look for the `<'.  */
9622         cp_parser_require (parser, CPP_LESS, "%<<%>");
9623         /* Parse the template-parameter-list.  */
9624         parameter_list = cp_parser_template_parameter_list (parser);
9625         /* Look for the `>'.  */
9626         cp_parser_require (parser, CPP_GREATER, "%<>%>");
9627         /* Look for the `class' keyword.  */
9628         cp_parser_require_keyword (parser, RID_CLASS, "%<class%>");
9629         /* If the next token is an ellipsis, we have a template
9630            argument pack. */
9631         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
9632           {
9633             /* Consume the `...' token. */
9634             cp_lexer_consume_token (parser->lexer);
9635             maybe_warn_variadic_templates ();
9636
9637             *is_parameter_pack = true;
9638           }
9639         /* If the next token is an `=', then there is a
9640            default-argument.  If the next token is a `>', we are at
9641            the end of the parameter-list.  If the next token is a `,',
9642            then we are at the end of this parameter.  */
9643         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
9644             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
9645             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
9646           {
9647             identifier = cp_parser_identifier (parser);
9648             /* Treat invalid names as if the parameter were nameless.  */
9649             if (identifier == error_mark_node)
9650               identifier = NULL_TREE;
9651           }
9652         else
9653           identifier = NULL_TREE;
9654
9655         /* Create the template parameter.  */
9656         parameter = finish_template_template_parm (class_type_node,
9657                                                    identifier);
9658
9659         /* If the next token is an `=', then there is a
9660            default-argument.  */
9661         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
9662           {
9663             bool is_template;
9664
9665             /* Consume the `='.  */
9666             cp_lexer_consume_token (parser->lexer);
9667             /* Parse the id-expression.  */
9668             push_deferring_access_checks (dk_no_deferred);
9669             default_argument
9670               = cp_parser_id_expression (parser,
9671                                          /*template_keyword_p=*/false,
9672                                          /*check_dependency_p=*/true,
9673                                          /*template_p=*/&is_template,
9674                                          /*declarator_p=*/false,
9675                                          /*optional_p=*/false);
9676             if (TREE_CODE (default_argument) == TYPE_DECL)
9677               /* If the id-expression was a template-id that refers to
9678                  a template-class, we already have the declaration here,
9679                  so no further lookup is needed.  */
9680                  ;
9681             else
9682               /* Look up the name.  */
9683               default_argument
9684                 = cp_parser_lookup_name (parser, default_argument,
9685                                          none_type,
9686                                          /*is_template=*/is_template,
9687                                          /*is_namespace=*/false,
9688                                          /*check_dependency=*/true,
9689                                          /*ambiguous_decls=*/NULL);
9690             /* See if the default argument is valid.  */
9691             default_argument
9692               = check_template_template_default_arg (default_argument);
9693
9694             /* Template parameter packs cannot have default
9695                arguments. */
9696             if (*is_parameter_pack)
9697               {
9698                 if (identifier)
9699                   error ("template parameter pack %qD cannot have a default argument", 
9700                          identifier);
9701                 else
9702                   error ("template parameter packs cannot have default arguments");
9703                 default_argument = NULL_TREE;
9704               }
9705             pop_deferring_access_checks ();
9706           }
9707         else
9708           default_argument = NULL_TREE;
9709
9710         /* Create the combined representation of the parameter and the
9711            default argument.  */
9712         parameter = build_tree_list (default_argument, parameter);
9713       }
9714       break;
9715
9716     default:
9717       gcc_unreachable ();
9718       break;
9719     }
9720
9721   return parameter;
9722 }
9723
9724 /* Parse a template-id.
9725
9726    template-id:
9727      template-name < template-argument-list [opt] >
9728
9729    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
9730    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
9731    returned.  Otherwise, if the template-name names a function, or set
9732    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
9733    names a class, returns a TYPE_DECL for the specialization.
9734
9735    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
9736    uninstantiated templates.  */
9737
9738 static tree
9739 cp_parser_template_id (cp_parser *parser,
9740                        bool template_keyword_p,
9741                        bool check_dependency_p,
9742                        bool is_declaration)
9743 {
9744   int i;
9745   tree template;
9746   tree arguments;
9747   tree template_id;
9748   cp_token_position start_of_id = 0;
9749   deferred_access_check *chk;
9750   VEC (deferred_access_check,gc) *access_check;
9751   cp_token *next_token, *next_token_2;
9752   bool is_identifier;
9753
9754   /* If the next token corresponds to a template-id, there is no need
9755      to reparse it.  */
9756   next_token = cp_lexer_peek_token (parser->lexer);
9757   if (next_token->type == CPP_TEMPLATE_ID)
9758     {
9759       struct tree_check *check_value;
9760
9761       /* Get the stored value.  */
9762       check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
9763       /* Perform any access checks that were deferred.  */
9764       access_check = check_value->checks;
9765       if (access_check)
9766         {
9767           for (i = 0 ;
9768                VEC_iterate (deferred_access_check, access_check, i, chk) ;
9769                ++i)
9770             {
9771               perform_or_defer_access_check (chk->binfo,
9772                                              chk->decl,
9773                                              chk->diag_decl);
9774             }
9775         }
9776       /* Return the stored value.  */
9777       return check_value->value;
9778     }
9779
9780   /* Avoid performing name lookup if there is no possibility of
9781      finding a template-id.  */
9782   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
9783       || (next_token->type == CPP_NAME
9784           && !cp_parser_nth_token_starts_template_argument_list_p
9785                (parser, 2)))
9786     {
9787       cp_parser_error (parser, "expected template-id");
9788       return error_mark_node;
9789     }
9790
9791   /* Remember where the template-id starts.  */
9792   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
9793     start_of_id = cp_lexer_token_position (parser->lexer, false);
9794
9795   push_deferring_access_checks (dk_deferred);
9796
9797   /* Parse the template-name.  */
9798   is_identifier = false;
9799   template = cp_parser_template_name (parser, template_keyword_p,
9800                                       check_dependency_p,
9801                                       is_declaration,
9802                                       &is_identifier);
9803   if (template == error_mark_node || is_identifier)
9804     {
9805       pop_deferring_access_checks ();
9806       return template;
9807     }
9808
9809   /* If we find the sequence `[:' after a template-name, it's probably
9810      a digraph-typo for `< ::'. Substitute the tokens and check if we can
9811      parse correctly the argument list.  */
9812   next_token = cp_lexer_peek_token (parser->lexer);
9813   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
9814   if (next_token->type == CPP_OPEN_SQUARE
9815       && next_token->flags & DIGRAPH
9816       && next_token_2->type == CPP_COLON
9817       && !(next_token_2->flags & PREV_WHITE))
9818     {
9819       cp_parser_parse_tentatively (parser);
9820       /* Change `:' into `::'.  */
9821       next_token_2->type = CPP_SCOPE;
9822       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
9823          CPP_LESS.  */
9824       cp_lexer_consume_token (parser->lexer);
9825       /* Parse the arguments.  */
9826       arguments = cp_parser_enclosed_template_argument_list (parser);
9827       if (!cp_parser_parse_definitely (parser))
9828         {
9829           /* If we couldn't parse an argument list, then we revert our changes
9830              and return simply an error. Maybe this is not a template-id
9831              after all.  */
9832           next_token_2->type = CPP_COLON;
9833           cp_parser_error (parser, "expected %<<%>");
9834           pop_deferring_access_checks ();
9835           return error_mark_node;
9836         }
9837       /* Otherwise, emit an error about the invalid digraph, but continue
9838          parsing because we got our argument list.  */
9839       permerror ("%<<::%> cannot begin a template-argument list");
9840       inform ("%<<:%> is an alternate spelling for %<[%>. Insert whitespace "
9841               "between %<<%> and %<::%>");
9842       if (!flag_permissive)
9843         {
9844           static bool hint;
9845           if (!hint)
9846             {
9847               inform ("(if you use -fpermissive G++ will accept your code)");
9848               hint = true;
9849             }
9850         }
9851     }
9852   else
9853     {
9854       /* Look for the `<' that starts the template-argument-list.  */
9855       if (!cp_parser_require (parser, CPP_LESS, "%<<%>"))
9856         {
9857           pop_deferring_access_checks ();
9858           return error_mark_node;
9859         }
9860       /* Parse the arguments.  */
9861       arguments = cp_parser_enclosed_template_argument_list (parser);
9862     }
9863
9864   /* Build a representation of the specialization.  */
9865   if (TREE_CODE (template) == IDENTIFIER_NODE)
9866     template_id = build_min_nt (TEMPLATE_ID_EXPR, template, arguments);
9867   else if (DECL_CLASS_TEMPLATE_P (template)
9868            || DECL_TEMPLATE_TEMPLATE_PARM_P (template))
9869     {
9870       bool entering_scope;
9871       /* In "template <typename T> ... A<T>::", A<T> is the abstract A
9872          template (rather than some instantiation thereof) only if
9873          is not nested within some other construct.  For example, in
9874          "template <typename T> void f(T) { A<T>::", A<T> is just an
9875          instantiation of A.  */
9876       entering_scope = (template_parm_scope_p ()
9877                         && cp_lexer_next_token_is (parser->lexer,
9878                                                    CPP_SCOPE));
9879       template_id
9880         = finish_template_type (template, arguments, entering_scope);
9881     }
9882   else
9883     {
9884       /* If it's not a class-template or a template-template, it should be
9885          a function-template.  */
9886       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (template)
9887                    || TREE_CODE (template) == OVERLOAD
9888                    || BASELINK_P (template)));
9889
9890       template_id = lookup_template_function (template, arguments);
9891     }
9892
9893   /* If parsing tentatively, replace the sequence of tokens that makes
9894      up the template-id with a CPP_TEMPLATE_ID token.  That way,
9895      should we re-parse the token stream, we will not have to repeat
9896      the effort required to do the parse, nor will we issue duplicate
9897      error messages about problems during instantiation of the
9898      template.  */
9899   if (start_of_id)
9900     {
9901       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
9902
9903       /* Reset the contents of the START_OF_ID token.  */
9904       token->type = CPP_TEMPLATE_ID;
9905       /* Retrieve any deferred checks.  Do not pop this access checks yet
9906          so the memory will not be reclaimed during token replacing below.  */
9907       token->u.tree_check_value = GGC_CNEW (struct tree_check);
9908       token->u.tree_check_value->value = template_id;
9909       token->u.tree_check_value->checks = get_deferred_access_checks ();
9910       token->keyword = RID_MAX;
9911
9912       /* Purge all subsequent tokens.  */
9913       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
9914
9915       /* ??? Can we actually assume that, if template_id ==
9916          error_mark_node, we will have issued a diagnostic to the
9917          user, as opposed to simply marking the tentative parse as
9918          failed?  */
9919       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
9920         error ("parse error in template argument list");
9921     }
9922
9923   pop_deferring_access_checks ();
9924   return template_id;
9925 }
9926
9927 /* Parse a template-name.
9928
9929    template-name:
9930      identifier
9931
9932    The standard should actually say:
9933
9934    template-name:
9935      identifier
9936      operator-function-id
9937
9938    A defect report has been filed about this issue.
9939
9940    A conversion-function-id cannot be a template name because they cannot
9941    be part of a template-id. In fact, looking at this code:
9942
9943    a.operator K<int>()
9944
9945    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
9946    It is impossible to call a templated conversion-function-id with an
9947    explicit argument list, since the only allowed template parameter is
9948    the type to which it is converting.
9949
9950    If TEMPLATE_KEYWORD_P is true, then we have just seen the
9951    `template' keyword, in a construction like:
9952
9953      T::template f<3>()
9954
9955    In that case `f' is taken to be a template-name, even though there
9956    is no way of knowing for sure.
9957
9958    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
9959    name refers to a set of overloaded functions, at least one of which
9960    is a template, or an IDENTIFIER_NODE with the name of the template,
9961    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
9962    names are looked up inside uninstantiated templates.  */
9963
9964 static tree
9965 cp_parser_template_name (cp_parser* parser,
9966                          bool template_keyword_p,
9967                          bool check_dependency_p,
9968                          bool is_declaration,
9969                          bool *is_identifier)
9970 {
9971   tree identifier;
9972   tree decl;
9973   tree fns;
9974
9975   /* If the next token is `operator', then we have either an
9976      operator-function-id or a conversion-function-id.  */
9977   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
9978     {
9979       /* We don't know whether we're looking at an
9980          operator-function-id or a conversion-function-id.  */
9981       cp_parser_parse_tentatively (parser);
9982       /* Try an operator-function-id.  */
9983       identifier = cp_parser_operator_function_id (parser);
9984       /* If that didn't work, try a conversion-function-id.  */
9985       if (!cp_parser_parse_definitely (parser))
9986         {
9987           cp_parser_error (parser, "expected template-name");
9988           return error_mark_node;
9989         }
9990     }
9991   /* Look for the identifier.  */
9992   else
9993     identifier = cp_parser_identifier (parser);
9994
9995   /* If we didn't find an identifier, we don't have a template-id.  */
9996   if (identifier == error_mark_node)
9997     return error_mark_node;
9998
9999   /* If the name immediately followed the `template' keyword, then it
10000      is a template-name.  However, if the next token is not `<', then
10001      we do not treat it as a template-name, since it is not being used
10002      as part of a template-id.  This enables us to handle constructs
10003      like:
10004
10005        template <typename T> struct S { S(); };
10006        template <typename T> S<T>::S();
10007
10008      correctly.  We would treat `S' as a template -- if it were `S<T>'
10009      -- but we do not if there is no `<'.  */
10010
10011   if (processing_template_decl
10012       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
10013     {
10014       /* In a declaration, in a dependent context, we pretend that the
10015          "template" keyword was present in order to improve error
10016          recovery.  For example, given:
10017
10018            template <typename T> void f(T::X<int>);
10019
10020          we want to treat "X<int>" as a template-id.  */
10021       if (is_declaration
10022           && !template_keyword_p
10023           && parser->scope && TYPE_P (parser->scope)
10024           && check_dependency_p
10025           && dependent_type_p (parser->scope)
10026           /* Do not do this for dtors (or ctors), since they never
10027              need the template keyword before their name.  */
10028           && !constructor_name_p (identifier, parser->scope))
10029         {
10030           cp_token_position start = 0;
10031
10032           /* Explain what went wrong.  */
10033           error ("non-template %qD used as template", identifier);
10034           inform ("use %<%T::template %D%> to indicate that it is a template",
10035                   parser->scope, identifier);
10036           /* If parsing tentatively, find the location of the "<" token.  */
10037           if (cp_parser_simulate_error (parser))
10038             start = cp_lexer_token_position (parser->lexer, true);
10039           /* Parse the template arguments so that we can issue error
10040              messages about them.  */
10041           cp_lexer_consume_token (parser->lexer);
10042           cp_parser_enclosed_template_argument_list (parser);
10043           /* Skip tokens until we find a good place from which to
10044              continue parsing.  */
10045           cp_parser_skip_to_closing_parenthesis (parser,
10046                                                  /*recovering=*/true,
10047                                                  /*or_comma=*/true,
10048                                                  /*consume_paren=*/false);
10049           /* If parsing tentatively, permanently remove the
10050              template argument list.  That will prevent duplicate
10051              error messages from being issued about the missing
10052              "template" keyword.  */
10053           if (start)
10054             cp_lexer_purge_tokens_after (parser->lexer, start);
10055           if (is_identifier)
10056             *is_identifier = true;
10057           return identifier;
10058         }
10059
10060       /* If the "template" keyword is present, then there is generally
10061          no point in doing name-lookup, so we just return IDENTIFIER.
10062          But, if the qualifying scope is non-dependent then we can
10063          (and must) do name-lookup normally.  */
10064       if (template_keyword_p
10065           && (!parser->scope
10066               || (TYPE_P (parser->scope)
10067                   && dependent_type_p (parser->scope))))
10068         return identifier;
10069     }
10070
10071   /* Look up the name.  */
10072   decl = cp_parser_lookup_name (parser, identifier,
10073                                 none_type,
10074                                 /*is_template=*/false,
10075                                 /*is_namespace=*/false,
10076                                 check_dependency_p,
10077                                 /*ambiguous_decls=*/NULL);
10078   decl = maybe_get_template_decl_from_type_decl (decl);
10079
10080   /* If DECL is a template, then the name was a template-name.  */
10081   if (TREE_CODE (decl) == TEMPLATE_DECL)
10082     ;
10083   else
10084     {
10085       tree fn = NULL_TREE;
10086
10087       /* The standard does not explicitly indicate whether a name that
10088          names a set of overloaded declarations, some of which are
10089          templates, is a template-name.  However, such a name should
10090          be a template-name; otherwise, there is no way to form a
10091          template-id for the overloaded templates.  */
10092       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
10093       if (TREE_CODE (fns) == OVERLOAD)
10094         for (fn = fns; fn; fn = OVL_NEXT (fn))
10095           if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
10096             break;
10097
10098       if (!fn)
10099         {
10100           /* The name does not name a template.  */
10101           cp_parser_error (parser, "expected template-name");
10102           return error_mark_node;
10103         }
10104     }
10105
10106   /* If DECL is dependent, and refers to a function, then just return
10107      its name; we will look it up again during template instantiation.  */
10108   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
10109     {
10110       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
10111       if (TYPE_P (scope) && dependent_type_p (scope))
10112         return identifier;
10113     }
10114
10115   return decl;
10116 }
10117
10118 /* Parse a template-argument-list.
10119
10120    template-argument-list:
10121      template-argument ... [opt]
10122      template-argument-list , template-argument ... [opt]
10123
10124    Returns a TREE_VEC containing the arguments.  */
10125
10126 static tree
10127 cp_parser_template_argument_list (cp_parser* parser)
10128 {
10129   tree fixed_args[10];
10130   unsigned n_args = 0;
10131   unsigned alloced = 10;
10132   tree *arg_ary = fixed_args;
10133   tree vec;
10134   bool saved_in_template_argument_list_p;
10135   bool saved_ice_p;
10136   bool saved_non_ice_p;
10137
10138   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
10139   parser->in_template_argument_list_p = true;
10140   /* Even if the template-id appears in an integral
10141      constant-expression, the contents of the argument list do
10142      not.  */
10143   saved_ice_p = parser->integral_constant_expression_p;
10144   parser->integral_constant_expression_p = false;
10145   saved_non_ice_p = parser->non_integral_constant_expression_p;
10146   parser->non_integral_constant_expression_p = false;
10147   /* Parse the arguments.  */
10148   do
10149     {
10150       tree argument;
10151
10152       if (n_args)
10153         /* Consume the comma.  */
10154         cp_lexer_consume_token (parser->lexer);
10155
10156       /* Parse the template-argument.  */
10157       argument = cp_parser_template_argument (parser);
10158
10159       /* If the next token is an ellipsis, we're expanding a template
10160          argument pack. */
10161       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
10162         {
10163           /* Consume the `...' token. */
10164           cp_lexer_consume_token (parser->lexer);
10165
10166           /* Make the argument into a TYPE_PACK_EXPANSION or
10167              EXPR_PACK_EXPANSION. */
10168           argument = make_pack_expansion (argument);
10169         }
10170
10171       if (n_args == alloced)
10172         {
10173           alloced *= 2;
10174
10175           if (arg_ary == fixed_args)
10176             {
10177               arg_ary = XNEWVEC (tree, alloced);
10178               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
10179             }
10180           else
10181             arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
10182         }
10183       arg_ary[n_args++] = argument;
10184     }
10185   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
10186
10187   vec = make_tree_vec (n_args);
10188
10189   while (n_args--)
10190     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
10191
10192   if (arg_ary != fixed_args)
10193     free (arg_ary);
10194   parser->non_integral_constant_expression_p = saved_non_ice_p;
10195   parser->integral_constant_expression_p = saved_ice_p;
10196   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
10197   return vec;
10198 }
10199
10200 /* Parse a template-argument.
10201
10202    template-argument:
10203      assignment-expression
10204      type-id
10205      id-expression
10206
10207    The representation is that of an assignment-expression, type-id, or
10208    id-expression -- except that the qualified id-expression is
10209    evaluated, so that the value returned is either a DECL or an
10210    OVERLOAD.
10211
10212    Although the standard says "assignment-expression", it forbids
10213    throw-expressions or assignments in the template argument.
10214    Therefore, we use "conditional-expression" instead.  */
10215
10216 static tree
10217 cp_parser_template_argument (cp_parser* parser)
10218 {
10219   tree argument;
10220   bool template_p;
10221   bool address_p;
10222   bool maybe_type_id = false;
10223   cp_token *token;
10224   cp_id_kind idk;
10225
10226   /* There's really no way to know what we're looking at, so we just
10227      try each alternative in order.
10228
10229        [temp.arg]
10230
10231        In a template-argument, an ambiguity between a type-id and an
10232        expression is resolved to a type-id, regardless of the form of
10233        the corresponding template-parameter.
10234
10235      Therefore, we try a type-id first.  */
10236   cp_parser_parse_tentatively (parser);
10237   argument = cp_parser_type_id (parser);
10238   /* If there was no error parsing the type-id but the next token is a '>>',
10239      we probably found a typo for '> >'. But there are type-id which are
10240      also valid expressions. For instance:
10241
10242      struct X { int operator >> (int); };
10243      template <int V> struct Foo {};
10244      Foo<X () >> 5> r;
10245
10246      Here 'X()' is a valid type-id of a function type, but the user just
10247      wanted to write the expression "X() >> 5". Thus, we remember that we
10248      found a valid type-id, but we still try to parse the argument as an
10249      expression to see what happens.  */
10250   if (!cp_parser_error_occurred (parser)
10251       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
10252     {
10253       maybe_type_id = true;
10254       cp_parser_abort_tentative_parse (parser);
10255     }
10256   else
10257     {
10258       /* If the next token isn't a `,' or a `>', then this argument wasn't
10259       really finished. This means that the argument is not a valid
10260       type-id.  */
10261       if (!cp_parser_next_token_ends_template_argument_p (parser))
10262         cp_parser_error (parser, "expected template-argument");
10263       /* If that worked, we're done.  */
10264       if (cp_parser_parse_definitely (parser))
10265         return argument;
10266     }
10267   /* We're still not sure what the argument will be.  */
10268   cp_parser_parse_tentatively (parser);
10269   /* Try a template.  */
10270   argument = cp_parser_id_expression (parser,
10271                                       /*template_keyword_p=*/false,
10272                                       /*check_dependency_p=*/true,
10273                                       &template_p,
10274                                       /*declarator_p=*/false,
10275                                       /*optional_p=*/false);
10276   /* If the next token isn't a `,' or a `>', then this argument wasn't
10277      really finished.  */
10278   if (!cp_parser_next_token_ends_template_argument_p (parser))
10279     cp_parser_error (parser, "expected template-argument");
10280   if (!cp_parser_error_occurred (parser))
10281     {
10282       /* Figure out what is being referred to.  If the id-expression
10283          was for a class template specialization, then we will have a
10284          TYPE_DECL at this point.  There is no need to do name lookup
10285          at this point in that case.  */
10286       if (TREE_CODE (argument) != TYPE_DECL)
10287         argument = cp_parser_lookup_name (parser, argument,
10288                                           none_type,
10289                                           /*is_template=*/template_p,
10290                                           /*is_namespace=*/false,
10291                                           /*check_dependency=*/true,
10292                                           /*ambiguous_decls=*/NULL);
10293       if (TREE_CODE (argument) != TEMPLATE_DECL
10294           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
10295         cp_parser_error (parser, "expected template-name");
10296     }
10297   if (cp_parser_parse_definitely (parser))
10298     return argument;
10299   /* It must be a non-type argument.  There permitted cases are given
10300      in [temp.arg.nontype]:
10301
10302      -- an integral constant-expression of integral or enumeration
10303         type; or
10304
10305      -- the name of a non-type template-parameter; or
10306
10307      -- the name of an object or function with external linkage...
10308
10309      -- the address of an object or function with external linkage...
10310
10311      -- a pointer to member...  */
10312   /* Look for a non-type template parameter.  */
10313   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10314     {
10315       cp_parser_parse_tentatively (parser);
10316       argument = cp_parser_primary_expression (parser,
10317                                                /*adress_p=*/false,
10318                                                /*cast_p=*/false,
10319                                                /*template_arg_p=*/true,
10320                                                &idk);
10321       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
10322           || !cp_parser_next_token_ends_template_argument_p (parser))
10323         cp_parser_simulate_error (parser);
10324       if (cp_parser_parse_definitely (parser))
10325         return argument;
10326     }
10327
10328   /* If the next token is "&", the argument must be the address of an
10329      object or function with external linkage.  */
10330   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
10331   if (address_p)
10332     cp_lexer_consume_token (parser->lexer);
10333   /* See if we might have an id-expression.  */
10334   token = cp_lexer_peek_token (parser->lexer);
10335   if (token->type == CPP_NAME
10336       || token->keyword == RID_OPERATOR
10337       || token->type == CPP_SCOPE
10338       || token->type == CPP_TEMPLATE_ID
10339       || token->type == CPP_NESTED_NAME_SPECIFIER)
10340     {
10341       cp_parser_parse_tentatively (parser);
10342       argument = cp_parser_primary_expression (parser,
10343                                                address_p,
10344                                                /*cast_p=*/false,
10345                                                /*template_arg_p=*/true,
10346                                                &idk);
10347       if (cp_parser_error_occurred (parser)
10348           || !cp_parser_next_token_ends_template_argument_p (parser))
10349         cp_parser_abort_tentative_parse (parser);
10350       else
10351         {
10352           if (TREE_CODE (argument) == INDIRECT_REF)
10353             {
10354               gcc_assert (REFERENCE_REF_P (argument));
10355               argument = TREE_OPERAND (argument, 0);
10356             }
10357
10358           if (TREE_CODE (argument) == VAR_DECL)
10359             {
10360               /* A variable without external linkage might still be a
10361                  valid constant-expression, so no error is issued here
10362                  if the external-linkage check fails.  */
10363               if (!address_p && !DECL_EXTERNAL_LINKAGE_P (argument))
10364                 cp_parser_simulate_error (parser);
10365             }
10366           else if (is_overloaded_fn (argument))
10367             /* All overloaded functions are allowed; if the external
10368                linkage test does not pass, an error will be issued
10369                later.  */
10370             ;
10371           else if (address_p
10372                    && (TREE_CODE (argument) == OFFSET_REF
10373                        || TREE_CODE (argument) == SCOPE_REF))
10374             /* A pointer-to-member.  */
10375             ;
10376           else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
10377             ;
10378           else
10379             cp_parser_simulate_error (parser);
10380
10381           if (cp_parser_parse_definitely (parser))
10382             {
10383               if (address_p)
10384                 argument = build_x_unary_op (ADDR_EXPR, argument,
10385                                              tf_warning_or_error);
10386               return argument;
10387             }
10388         }
10389     }
10390   /* If the argument started with "&", there are no other valid
10391      alternatives at this point.  */
10392   if (address_p)
10393     {
10394       cp_parser_error (parser, "invalid non-type template argument");
10395       return error_mark_node;
10396     }
10397
10398   /* If the argument wasn't successfully parsed as a type-id followed
10399      by '>>', the argument can only be a constant expression now.
10400      Otherwise, we try parsing the constant-expression tentatively,
10401      because the argument could really be a type-id.  */
10402   if (maybe_type_id)
10403     cp_parser_parse_tentatively (parser);
10404   argument = cp_parser_constant_expression (parser,
10405                                             /*allow_non_constant_p=*/false,
10406                                             /*non_constant_p=*/NULL);
10407   argument = fold_non_dependent_expr (argument);
10408   if (!maybe_type_id)
10409     return argument;
10410   if (!cp_parser_next_token_ends_template_argument_p (parser))
10411     cp_parser_error (parser, "expected template-argument");
10412   if (cp_parser_parse_definitely (parser))
10413     return argument;
10414   /* We did our best to parse the argument as a non type-id, but that
10415      was the only alternative that matched (albeit with a '>' after
10416      it). We can assume it's just a typo from the user, and a
10417      diagnostic will then be issued.  */
10418   return cp_parser_type_id (parser);
10419 }
10420
10421 /* Parse an explicit-instantiation.
10422
10423    explicit-instantiation:
10424      template declaration
10425
10426    Although the standard says `declaration', what it really means is:
10427
10428    explicit-instantiation:
10429      template decl-specifier-seq [opt] declarator [opt] ;
10430
10431    Things like `template int S<int>::i = 5, int S<double>::j;' are not
10432    supposed to be allowed.  A defect report has been filed about this
10433    issue.
10434
10435    GNU Extension:
10436
10437    explicit-instantiation:
10438      storage-class-specifier template
10439        decl-specifier-seq [opt] declarator [opt] ;
10440      function-specifier template
10441        decl-specifier-seq [opt] declarator [opt] ;  */
10442
10443 static void
10444 cp_parser_explicit_instantiation (cp_parser* parser)
10445 {
10446   int declares_class_or_enum;
10447   cp_decl_specifier_seq decl_specifiers;
10448   tree extension_specifier = NULL_TREE;
10449
10450   /* Look for an (optional) storage-class-specifier or
10451      function-specifier.  */
10452   if (cp_parser_allow_gnu_extensions_p (parser))
10453     {
10454       extension_specifier
10455         = cp_parser_storage_class_specifier_opt (parser);
10456       if (!extension_specifier)
10457         extension_specifier
10458           = cp_parser_function_specifier_opt (parser,
10459                                               /*decl_specs=*/NULL);
10460     }
10461
10462   /* Look for the `template' keyword.  */
10463   cp_parser_require_keyword (parser, RID_TEMPLATE, "%<template%>");
10464   /* Let the front end know that we are processing an explicit
10465      instantiation.  */
10466   begin_explicit_instantiation ();
10467   /* [temp.explicit] says that we are supposed to ignore access
10468      control while processing explicit instantiation directives.  */
10469   push_deferring_access_checks (dk_no_check);
10470   /* Parse a decl-specifier-seq.  */
10471   cp_parser_decl_specifier_seq (parser,
10472                                 CP_PARSER_FLAGS_OPTIONAL,
10473                                 &decl_specifiers,
10474                                 &declares_class_or_enum);
10475   /* If there was exactly one decl-specifier, and it declared a class,
10476      and there's no declarator, then we have an explicit type
10477      instantiation.  */
10478   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
10479     {
10480       tree type;
10481
10482       type = check_tag_decl (&decl_specifiers);
10483       /* Turn access control back on for names used during
10484          template instantiation.  */
10485       pop_deferring_access_checks ();
10486       if (type)
10487         do_type_instantiation (type, extension_specifier,
10488                                /*complain=*/tf_error);
10489     }
10490   else
10491     {
10492       cp_declarator *declarator;
10493       tree decl;
10494
10495       /* Parse the declarator.  */
10496       declarator
10497         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
10498                                 /*ctor_dtor_or_conv_p=*/NULL,
10499                                 /*parenthesized_p=*/NULL,
10500                                 /*member_p=*/false);
10501       if (declares_class_or_enum & 2)
10502         cp_parser_check_for_definition_in_return_type (declarator,
10503                                                        decl_specifiers.type);
10504       if (declarator != cp_error_declarator)
10505         {
10506           decl = grokdeclarator (declarator, &decl_specifiers,
10507                                  NORMAL, 0, &decl_specifiers.attributes);
10508           /* Turn access control back on for names used during
10509              template instantiation.  */
10510           pop_deferring_access_checks ();
10511           /* Do the explicit instantiation.  */
10512           do_decl_instantiation (decl, extension_specifier);
10513         }
10514       else
10515         {
10516           pop_deferring_access_checks ();
10517           /* Skip the body of the explicit instantiation.  */
10518           cp_parser_skip_to_end_of_statement (parser);
10519         }
10520     }
10521   /* We're done with the instantiation.  */
10522   end_explicit_instantiation ();
10523
10524   cp_parser_consume_semicolon_at_end_of_statement (parser);
10525 }
10526
10527 /* Parse an explicit-specialization.
10528
10529    explicit-specialization:
10530      template < > declaration
10531
10532    Although the standard says `declaration', what it really means is:
10533
10534    explicit-specialization:
10535      template <> decl-specifier [opt] init-declarator [opt] ;
10536      template <> function-definition
10537      template <> explicit-specialization
10538      template <> template-declaration  */
10539
10540 static void
10541 cp_parser_explicit_specialization (cp_parser* parser)
10542 {
10543   bool need_lang_pop;
10544   /* Look for the `template' keyword.  */
10545   cp_parser_require_keyword (parser, RID_TEMPLATE, "%<template%>");
10546   /* Look for the `<'.  */
10547   cp_parser_require (parser, CPP_LESS, "%<<%>");
10548   /* Look for the `>'.  */
10549   cp_parser_require (parser, CPP_GREATER, "%<>%>");
10550   /* We have processed another parameter list.  */
10551   ++parser->num_template_parameter_lists;
10552   /* [temp]
10553
10554      A template ... explicit specialization ... shall not have C
10555      linkage.  */
10556   if (current_lang_name == lang_name_c)
10557     {
10558       error ("template specialization with C linkage");
10559       /* Give it C++ linkage to avoid confusing other parts of the
10560          front end.  */
10561       push_lang_context (lang_name_cplusplus);
10562       need_lang_pop = true;
10563     }
10564   else
10565     need_lang_pop = false;
10566   /* Let the front end know that we are beginning a specialization.  */
10567   if (!begin_specialization ())
10568     {
10569       end_specialization ();
10570       cp_parser_skip_to_end_of_block_or_statement (parser);
10571       return;
10572     }
10573
10574   /* If the next keyword is `template', we need to figure out whether
10575      or not we're looking a template-declaration.  */
10576   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
10577     {
10578       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
10579           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
10580         cp_parser_template_declaration_after_export (parser,
10581                                                      /*member_p=*/false);
10582       else
10583         cp_parser_explicit_specialization (parser);
10584     }
10585   else
10586     /* Parse the dependent declaration.  */
10587     cp_parser_single_declaration (parser,
10588                                   /*checks=*/NULL,
10589                                   /*member_p=*/false,
10590                                   /*explicit_specialization_p=*/true,
10591                                   /*friend_p=*/NULL);
10592   /* We're done with the specialization.  */
10593   end_specialization ();
10594   /* For the erroneous case of a template with C linkage, we pushed an
10595      implicit C++ linkage scope; exit that scope now.  */
10596   if (need_lang_pop)
10597     pop_lang_context ();
10598   /* We're done with this parameter list.  */
10599   --parser->num_template_parameter_lists;
10600 }
10601
10602 /* Parse a type-specifier.
10603
10604    type-specifier:
10605      simple-type-specifier
10606      class-specifier
10607      enum-specifier
10608      elaborated-type-specifier
10609      cv-qualifier
10610
10611    GNU Extension:
10612
10613    type-specifier:
10614      __complex__
10615
10616    Returns a representation of the type-specifier.  For a
10617    class-specifier, enum-specifier, or elaborated-type-specifier, a
10618    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
10619
10620    The parser flags FLAGS is used to control type-specifier parsing.
10621
10622    If IS_DECLARATION is TRUE, then this type-specifier is appearing
10623    in a decl-specifier-seq.
10624
10625    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
10626    class-specifier, enum-specifier, or elaborated-type-specifier, then
10627    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
10628    if a type is declared; 2 if it is defined.  Otherwise, it is set to
10629    zero.
10630
10631    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
10632    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
10633    is set to FALSE.  */
10634
10635 static tree
10636 cp_parser_type_specifier (cp_parser* parser,
10637                           cp_parser_flags flags,
10638                           cp_decl_specifier_seq *decl_specs,
10639                           bool is_declaration,
10640                           int* declares_class_or_enum,
10641                           bool* is_cv_qualifier)
10642 {
10643   tree type_spec = NULL_TREE;
10644   cp_token *token;
10645   enum rid keyword;
10646   cp_decl_spec ds = ds_last;
10647
10648   /* Assume this type-specifier does not declare a new type.  */
10649   if (declares_class_or_enum)
10650     *declares_class_or_enum = 0;
10651   /* And that it does not specify a cv-qualifier.  */
10652   if (is_cv_qualifier)
10653     *is_cv_qualifier = false;
10654   /* Peek at the next token.  */
10655   token = cp_lexer_peek_token (parser->lexer);
10656
10657   /* If we're looking at a keyword, we can use that to guide the
10658      production we choose.  */
10659   keyword = token->keyword;
10660   switch (keyword)
10661     {
10662     case RID_ENUM:
10663       /* Look for the enum-specifier.  */
10664       type_spec = cp_parser_enum_specifier (parser);
10665       /* If that worked, we're done.  */
10666       if (type_spec)
10667         {
10668           if (declares_class_or_enum)
10669             *declares_class_or_enum = 2;
10670           if (decl_specs)
10671             cp_parser_set_decl_spec_type (decl_specs,
10672                                           type_spec,
10673                                           /*user_defined_p=*/true);
10674           return type_spec;
10675         }
10676       else
10677         goto elaborated_type_specifier;
10678
10679       /* Any of these indicate either a class-specifier, or an
10680          elaborated-type-specifier.  */
10681     case RID_CLASS:
10682     case RID_STRUCT:
10683     case RID_UNION:
10684       /* Parse tentatively so that we can back up if we don't find a
10685          class-specifier.  */
10686       cp_parser_parse_tentatively (parser);
10687       /* Look for the class-specifier.  */
10688       type_spec = cp_parser_class_specifier (parser);
10689       /* If that worked, we're done.  */
10690       if (cp_parser_parse_definitely (parser))
10691         {
10692           if (declares_class_or_enum)
10693             *declares_class_or_enum = 2;
10694           if (decl_specs)
10695             cp_parser_set_decl_spec_type (decl_specs,
10696                                           type_spec,
10697                                           /*user_defined_p=*/true);
10698           return type_spec;
10699         }
10700
10701       /* Fall through.  */
10702     elaborated_type_specifier:
10703       /* We're declaring (not defining) a class or enum.  */
10704       if (declares_class_or_enum)
10705         *declares_class_or_enum = 1;
10706
10707       /* Fall through.  */
10708     case RID_TYPENAME:
10709       /* Look for an elaborated-type-specifier.  */
10710       type_spec
10711         = (cp_parser_elaborated_type_specifier
10712            (parser,
10713             decl_specs && decl_specs->specs[(int) ds_friend],
10714             is_declaration));
10715       if (decl_specs)
10716         cp_parser_set_decl_spec_type (decl_specs,
10717                                       type_spec,
10718                                       /*user_defined_p=*/true);
10719       return type_spec;
10720
10721     case RID_CONST:
10722       ds = ds_const;
10723       if (is_cv_qualifier)
10724         *is_cv_qualifier = true;
10725       break;
10726
10727     case RID_VOLATILE:
10728       ds = ds_volatile;
10729       if (is_cv_qualifier)
10730         *is_cv_qualifier = true;
10731       break;
10732
10733     case RID_RESTRICT:
10734       ds = ds_restrict;
10735       if (is_cv_qualifier)
10736         *is_cv_qualifier = true;
10737       break;
10738
10739     case RID_COMPLEX:
10740       /* The `__complex__' keyword is a GNU extension.  */
10741       ds = ds_complex;
10742       break;
10743
10744     default:
10745       break;
10746     }
10747
10748   /* Handle simple keywords.  */
10749   if (ds != ds_last)
10750     {
10751       if (decl_specs)
10752         {
10753           ++decl_specs->specs[(int)ds];
10754           decl_specs->any_specifiers_p = true;
10755         }
10756       return cp_lexer_consume_token (parser->lexer)->u.value;
10757     }
10758
10759   /* If we do not already have a type-specifier, assume we are looking
10760      at a simple-type-specifier.  */
10761   type_spec = cp_parser_simple_type_specifier (parser,
10762                                                decl_specs,
10763                                                flags);
10764
10765   /* If we didn't find a type-specifier, and a type-specifier was not
10766      optional in this context, issue an error message.  */
10767   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
10768     {
10769       cp_parser_error (parser, "expected type specifier");
10770       return error_mark_node;
10771     }
10772
10773   return type_spec;
10774 }
10775
10776 /* Parse a simple-type-specifier.
10777
10778    simple-type-specifier:
10779      :: [opt] nested-name-specifier [opt] type-name
10780      :: [opt] nested-name-specifier template template-id
10781      char
10782      wchar_t
10783      bool
10784      short
10785      int
10786      long
10787      signed
10788      unsigned
10789      float
10790      double
10791      void
10792
10793    C++0x Extension:
10794
10795    simple-type-specifier:
10796      auto
10797      decltype ( expression )   
10798      char16_t
10799      char32_t
10800
10801    GNU Extension:
10802
10803    simple-type-specifier:
10804      __typeof__ unary-expression
10805      __typeof__ ( type-id )
10806
10807    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
10808    appropriately updated.  */
10809
10810 static tree
10811 cp_parser_simple_type_specifier (cp_parser* parser,
10812                                  cp_decl_specifier_seq *decl_specs,
10813                                  cp_parser_flags flags)
10814 {
10815   tree type = NULL_TREE;
10816   cp_token *token;
10817
10818   /* Peek at the next token.  */
10819   token = cp_lexer_peek_token (parser->lexer);
10820
10821   /* If we're looking at a keyword, things are easy.  */
10822   switch (token->keyword)
10823     {
10824     case RID_CHAR:
10825       if (decl_specs)
10826         decl_specs->explicit_char_p = true;
10827       type = char_type_node;
10828       break;
10829     case RID_CHAR16:
10830       type = char16_type_node;
10831       break;
10832     case RID_CHAR32:
10833       type = char32_type_node;
10834       break;
10835     case RID_WCHAR:
10836       type = wchar_type_node;
10837       break;
10838     case RID_BOOL:
10839       type = boolean_type_node;
10840       break;
10841     case RID_SHORT:
10842       if (decl_specs)
10843         ++decl_specs->specs[(int) ds_short];
10844       type = short_integer_type_node;
10845       break;
10846     case RID_INT:
10847       if (decl_specs)
10848         decl_specs->explicit_int_p = true;
10849       type = integer_type_node;
10850       break;
10851     case RID_LONG:
10852       if (decl_specs)
10853         ++decl_specs->specs[(int) ds_long];
10854       type = long_integer_type_node;
10855       break;
10856     case RID_SIGNED:
10857       if (decl_specs)
10858         ++decl_specs->specs[(int) ds_signed];
10859       type = integer_type_node;
10860       break;
10861     case RID_UNSIGNED:
10862       if (decl_specs)
10863         ++decl_specs->specs[(int) ds_unsigned];
10864       type = unsigned_type_node;
10865       break;
10866     case RID_FLOAT:
10867       type = float_type_node;
10868       break;
10869     case RID_DOUBLE:
10870       type = double_type_node;
10871       break;
10872     case RID_VOID:
10873       type = void_type_node;
10874       break;
10875       
10876     case RID_AUTO:
10877       if (cxx_dialect != cxx98)
10878         {
10879           /* Consume the token.  */
10880           cp_lexer_consume_token (parser->lexer);
10881           /* We do not yet support the use of `auto' as a
10882              type-specifier.  */
10883           error ("C++0x %<auto%> specifier not supported");
10884         }
10885       break;
10886
10887     case RID_DECLTYPE:
10888       /* Parse the `decltype' type.  */
10889       type = cp_parser_decltype (parser);
10890
10891       if (decl_specs)
10892         cp_parser_set_decl_spec_type (decl_specs, type,
10893                                       /*user_defined_p=*/true);
10894
10895       return type;
10896
10897     case RID_TYPEOF:
10898       /* Consume the `typeof' token.  */
10899       cp_lexer_consume_token (parser->lexer);
10900       /* Parse the operand to `typeof'.  */
10901       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
10902       /* If it is not already a TYPE, take its type.  */
10903       if (!TYPE_P (type))
10904         type = finish_typeof (type);
10905
10906       if (decl_specs)
10907         cp_parser_set_decl_spec_type (decl_specs, type,
10908                                       /*user_defined_p=*/true);
10909
10910       return type;
10911
10912     default:
10913       break;
10914     }
10915
10916   /* If the type-specifier was for a built-in type, we're done.  */
10917   if (type)
10918     {
10919       tree id;
10920
10921       /* Record the type.  */
10922       if (decl_specs
10923           && (token->keyword != RID_SIGNED
10924               && token->keyword != RID_UNSIGNED
10925               && token->keyword != RID_SHORT
10926               && token->keyword != RID_LONG))
10927         cp_parser_set_decl_spec_type (decl_specs,
10928                                       type,
10929                                       /*user_defined=*/false);
10930       if (decl_specs)
10931         decl_specs->any_specifiers_p = true;
10932
10933       /* Consume the token.  */
10934       id = cp_lexer_consume_token (parser->lexer)->u.value;
10935
10936       /* There is no valid C++ program where a non-template type is
10937          followed by a "<".  That usually indicates that the user thought
10938          that the type was a template.  */
10939       cp_parser_check_for_invalid_template_id (parser, type);
10940
10941       return TYPE_NAME (type);
10942     }
10943
10944   /* The type-specifier must be a user-defined type.  */
10945   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
10946     {
10947       bool qualified_p;
10948       bool global_p;
10949
10950       /* Don't gobble tokens or issue error messages if this is an
10951          optional type-specifier.  */
10952       if (flags & CP_PARSER_FLAGS_OPTIONAL)
10953         cp_parser_parse_tentatively (parser);
10954
10955       /* Look for the optional `::' operator.  */
10956       global_p
10957         = (cp_parser_global_scope_opt (parser,
10958                                        /*current_scope_valid_p=*/false)
10959            != NULL_TREE);
10960       /* Look for the nested-name specifier.  */
10961       qualified_p
10962         = (cp_parser_nested_name_specifier_opt (parser,
10963                                                 /*typename_keyword_p=*/false,
10964                                                 /*check_dependency_p=*/true,
10965                                                 /*type_p=*/false,
10966                                                 /*is_declaration=*/false)
10967            != NULL_TREE);
10968       /* If we have seen a nested-name-specifier, and the next token
10969          is `template', then we are using the template-id production.  */
10970       if (parser->scope
10971           && cp_parser_optional_template_keyword (parser))
10972         {
10973           /* Look for the template-id.  */
10974           type = cp_parser_template_id (parser,
10975                                         /*template_keyword_p=*/true,
10976                                         /*check_dependency_p=*/true,
10977                                         /*is_declaration=*/false);
10978           /* If the template-id did not name a type, we are out of
10979              luck.  */
10980           if (TREE_CODE (type) != TYPE_DECL)
10981             {
10982               cp_parser_error (parser, "expected template-id for type");
10983               type = NULL_TREE;
10984             }
10985         }
10986       /* Otherwise, look for a type-name.  */
10987       else
10988         type = cp_parser_type_name (parser);
10989       /* Keep track of all name-lookups performed in class scopes.  */
10990       if (type
10991           && !global_p
10992           && !qualified_p
10993           && TREE_CODE (type) == TYPE_DECL
10994           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
10995         maybe_note_name_used_in_class (DECL_NAME (type), type);
10996       /* If it didn't work out, we don't have a TYPE.  */
10997       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
10998           && !cp_parser_parse_definitely (parser))
10999         type = NULL_TREE;
11000       if (type && decl_specs)
11001         cp_parser_set_decl_spec_type (decl_specs, type,
11002                                       /*user_defined=*/true);
11003     }
11004
11005   /* If we didn't get a type-name, issue an error message.  */
11006   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
11007     {
11008       cp_parser_error (parser, "expected type-name");
11009       return error_mark_node;
11010     }
11011
11012   /* There is no valid C++ program where a non-template type is
11013      followed by a "<".  That usually indicates that the user thought
11014      that the type was a template.  */
11015   if (type && type != error_mark_node)
11016     {
11017       /* As a last-ditch effort, see if TYPE is an Objective-C type.
11018          If it is, then the '<'...'>' enclose protocol names rather than
11019          template arguments, and so everything is fine.  */
11020       if (c_dialect_objc ()
11021           && (objc_is_id (type) || objc_is_class_name (type)))
11022         {
11023           tree protos = cp_parser_objc_protocol_refs_opt (parser);
11024           tree qual_type = objc_get_protocol_qualified_type (type, protos);
11025
11026           /* Clobber the "unqualified" type previously entered into
11027              DECL_SPECS with the new, improved protocol-qualified version.  */
11028           if (decl_specs)
11029             decl_specs->type = qual_type;
11030
11031           return qual_type;
11032         }
11033
11034       cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type));
11035     }
11036
11037   return type;
11038 }
11039
11040 /* Parse a type-name.
11041
11042    type-name:
11043      class-name
11044      enum-name
11045      typedef-name
11046
11047    enum-name:
11048      identifier
11049
11050    typedef-name:
11051      identifier
11052
11053    Returns a TYPE_DECL for the type.  */
11054
11055 static tree
11056 cp_parser_type_name (cp_parser* parser)
11057 {
11058   tree type_decl;
11059
11060   /* We can't know yet whether it is a class-name or not.  */
11061   cp_parser_parse_tentatively (parser);
11062   /* Try a class-name.  */
11063   type_decl = cp_parser_class_name (parser,
11064                                     /*typename_keyword_p=*/false,
11065                                     /*template_keyword_p=*/false,
11066                                     none_type,
11067                                     /*check_dependency_p=*/true,
11068                                     /*class_head_p=*/false,
11069                                     /*is_declaration=*/false);
11070   /* If it's not a class-name, keep looking.  */
11071   if (!cp_parser_parse_definitely (parser))
11072     {
11073       /* It must be a typedef-name or an enum-name.  */
11074       return cp_parser_nonclass_name (parser);
11075     }
11076
11077   return type_decl;
11078 }
11079
11080 /* Parse a non-class type-name, that is, either an enum-name or a typedef-name.
11081
11082    enum-name:
11083      identifier
11084
11085    typedef-name:
11086      identifier
11087
11088    Returns a TYPE_DECL for the type.  */
11089
11090 static tree
11091 cp_parser_nonclass_name (cp_parser* parser)
11092 {
11093   tree type_decl;
11094   tree identifier;
11095
11096   identifier = cp_parser_identifier (parser);
11097   if (identifier == error_mark_node)
11098     return error_mark_node;
11099
11100   /* Look up the type-name.  */
11101   type_decl = cp_parser_lookup_name_simple (parser, identifier);
11102
11103   if (TREE_CODE (type_decl) != TYPE_DECL
11104       && (objc_is_id (identifier) || objc_is_class_name (identifier)))
11105     {
11106       /* See if this is an Objective-C type.  */
11107       tree protos = cp_parser_objc_protocol_refs_opt (parser);
11108       tree type = objc_get_protocol_qualified_type (identifier, protos);
11109       if (type)
11110         type_decl = TYPE_NAME (type);
11111     }
11112   
11113   /* Issue an error if we did not find a type-name.  */
11114   if (TREE_CODE (type_decl) != TYPE_DECL)
11115     {
11116       if (!cp_parser_simulate_error (parser))
11117         cp_parser_name_lookup_error (parser, identifier, type_decl,
11118                                      "is not a type");
11119       return error_mark_node;
11120     }
11121   /* Remember that the name was used in the definition of the
11122      current class so that we can check later to see if the
11123      meaning would have been different after the class was
11124      entirely defined.  */
11125   else if (type_decl != error_mark_node
11126            && !parser->scope)
11127     maybe_note_name_used_in_class (identifier, type_decl);
11128   
11129   return type_decl;
11130 }
11131
11132 /* Parse an elaborated-type-specifier.  Note that the grammar given
11133    here incorporates the resolution to DR68.
11134
11135    elaborated-type-specifier:
11136      class-key :: [opt] nested-name-specifier [opt] identifier
11137      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
11138      enum :: [opt] nested-name-specifier [opt] identifier
11139      typename :: [opt] nested-name-specifier identifier
11140      typename :: [opt] nested-name-specifier template [opt]
11141        template-id
11142
11143    GNU extension:
11144
11145    elaborated-type-specifier:
11146      class-key attributes :: [opt] nested-name-specifier [opt] identifier
11147      class-key attributes :: [opt] nested-name-specifier [opt]
11148                template [opt] template-id
11149      enum attributes :: [opt] nested-name-specifier [opt] identifier
11150
11151    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
11152    declared `friend'.  If IS_DECLARATION is TRUE, then this
11153    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
11154    something is being declared.
11155
11156    Returns the TYPE specified.  */
11157
11158 static tree
11159 cp_parser_elaborated_type_specifier (cp_parser* parser,
11160                                      bool is_friend,
11161                                      bool is_declaration)
11162 {
11163   enum tag_types tag_type;
11164   tree identifier;
11165   tree type = NULL_TREE;
11166   tree attributes = NULL_TREE;
11167
11168   /* See if we're looking at the `enum' keyword.  */
11169   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
11170     {
11171       /* Consume the `enum' token.  */
11172       cp_lexer_consume_token (parser->lexer);
11173       /* Remember that it's an enumeration type.  */
11174       tag_type = enum_type;
11175       /* Parse the attributes.  */
11176       attributes = cp_parser_attributes_opt (parser);
11177     }
11178   /* Or, it might be `typename'.  */
11179   else if (cp_lexer_next_token_is_keyword (parser->lexer,
11180                                            RID_TYPENAME))
11181     {
11182       /* Consume the `typename' token.  */
11183       cp_lexer_consume_token (parser->lexer);
11184       /* Remember that it's a `typename' type.  */
11185       tag_type = typename_type;
11186       /* The `typename' keyword is only allowed in templates.  */
11187       if (!processing_template_decl)
11188         pedwarn ("using %<typename%> outside of template");
11189     }
11190   /* Otherwise it must be a class-key.  */
11191   else
11192     {
11193       tag_type = cp_parser_class_key (parser);
11194       if (tag_type == none_type)
11195         return error_mark_node;
11196       /* Parse the attributes.  */
11197       attributes = cp_parser_attributes_opt (parser);
11198     }
11199
11200   /* Look for the `::' operator.  */
11201   cp_parser_global_scope_opt (parser,
11202                               /*current_scope_valid_p=*/false);
11203   /* Look for the nested-name-specifier.  */
11204   if (tag_type == typename_type)
11205     {
11206       if (!cp_parser_nested_name_specifier (parser,
11207                                            /*typename_keyword_p=*/true,
11208                                            /*check_dependency_p=*/true,
11209                                            /*type_p=*/true,
11210                                             is_declaration))
11211         return error_mark_node;
11212     }
11213   else
11214     /* Even though `typename' is not present, the proposed resolution
11215        to Core Issue 180 says that in `class A<T>::B', `B' should be
11216        considered a type-name, even if `A<T>' is dependent.  */
11217     cp_parser_nested_name_specifier_opt (parser,
11218                                          /*typename_keyword_p=*/true,
11219                                          /*check_dependency_p=*/true,
11220                                          /*type_p=*/true,
11221                                          is_declaration);
11222  /* For everything but enumeration types, consider a template-id.
11223     For an enumeration type, consider only a plain identifier.  */
11224   if (tag_type != enum_type)
11225     {
11226       bool template_p = false;
11227       tree decl;
11228
11229       /* Allow the `template' keyword.  */
11230       template_p = cp_parser_optional_template_keyword (parser);
11231       /* If we didn't see `template', we don't know if there's a
11232          template-id or not.  */
11233       if (!template_p)
11234         cp_parser_parse_tentatively (parser);
11235       /* Parse the template-id.  */
11236       decl = cp_parser_template_id (parser, template_p,
11237                                     /*check_dependency_p=*/true,
11238                                     is_declaration);
11239       /* If we didn't find a template-id, look for an ordinary
11240          identifier.  */
11241       if (!template_p && !cp_parser_parse_definitely (parser))
11242         ;
11243       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
11244          in effect, then we must assume that, upon instantiation, the
11245          template will correspond to a class.  */
11246       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
11247                && tag_type == typename_type)
11248         type = make_typename_type (parser->scope, decl,
11249                                    typename_type,
11250                                    /*complain=*/tf_error);
11251       else
11252         type = TREE_TYPE (decl);
11253     }
11254
11255   if (!type)
11256     {
11257       identifier = cp_parser_identifier (parser);
11258
11259       if (identifier == error_mark_node)
11260         {
11261           parser->scope = NULL_TREE;
11262           return error_mark_node;
11263         }
11264
11265       /* For a `typename', we needn't call xref_tag.  */
11266       if (tag_type == typename_type
11267           && TREE_CODE (parser->scope) != NAMESPACE_DECL)
11268         return cp_parser_make_typename_type (parser, parser->scope,
11269                                              identifier);
11270       /* Look up a qualified name in the usual way.  */
11271       if (parser->scope)
11272         {
11273           tree decl;
11274           tree ambiguous_decls;
11275
11276           decl = cp_parser_lookup_name (parser, identifier,
11277                                         tag_type,
11278                                         /*is_template=*/false,
11279                                         /*is_namespace=*/false,
11280                                         /*check_dependency=*/true,
11281                                         &ambiguous_decls);
11282
11283           /* If the lookup was ambiguous, an error will already have been
11284              issued.  */
11285           if (ambiguous_decls)
11286             return error_mark_node;
11287
11288           /* If we are parsing friend declaration, DECL may be a
11289              TEMPLATE_DECL tree node here.  However, we need to check
11290              whether this TEMPLATE_DECL results in valid code.  Consider
11291              the following example:
11292
11293                namespace N {
11294                  template <class T> class C {};
11295                }
11296                class X {
11297                  template <class T> friend class N::C; // #1, valid code
11298                };
11299                template <class T> class Y {
11300                  friend class N::C;                    // #2, invalid code
11301                };
11302
11303              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
11304              name lookup of `N::C'.  We see that friend declaration must
11305              be template for the code to be valid.  Note that
11306              processing_template_decl does not work here since it is
11307              always 1 for the above two cases.  */
11308
11309           decl = (cp_parser_maybe_treat_template_as_class
11310                   (decl, /*tag_name_p=*/is_friend
11311                          && parser->num_template_parameter_lists));
11312
11313           if (TREE_CODE (decl) != TYPE_DECL)
11314             {
11315               cp_parser_diagnose_invalid_type_name (parser,
11316                                                     parser->scope,
11317                                                     identifier);
11318               return error_mark_node;
11319             }
11320
11321           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
11322             {
11323               bool allow_template = (parser->num_template_parameter_lists
11324                                       || DECL_SELF_REFERENCE_P (decl));
11325               type = check_elaborated_type_specifier (tag_type, decl, 
11326                                                       allow_template);
11327
11328               if (type == error_mark_node)
11329                 return error_mark_node;
11330             }
11331
11332           /* Forward declarations of nested types, such as
11333
11334                class C1::C2;
11335                class C1::C2::C3;
11336
11337              are invalid unless all components preceding the final '::'
11338              are complete.  If all enclosing types are complete, these
11339              declarations become merely pointless.
11340
11341              Invalid forward declarations of nested types are errors
11342              caught elsewhere in parsing.  Those that are pointless arrive
11343              here.  */
11344
11345           if (cp_parser_declares_only_class_p (parser)
11346               && !is_friend && !processing_explicit_instantiation)
11347             warning (0, "declaration %qD does not declare anything", decl);
11348
11349           type = TREE_TYPE (decl);
11350         }
11351       else
11352         {
11353           /* An elaborated-type-specifier sometimes introduces a new type and
11354              sometimes names an existing type.  Normally, the rule is that it
11355              introduces a new type only if there is not an existing type of
11356              the same name already in scope.  For example, given:
11357
11358                struct S {};
11359                void f() { struct S s; }
11360
11361              the `struct S' in the body of `f' is the same `struct S' as in
11362              the global scope; the existing definition is used.  However, if
11363              there were no global declaration, this would introduce a new
11364              local class named `S'.
11365
11366              An exception to this rule applies to the following code:
11367
11368                namespace N { struct S; }
11369
11370              Here, the elaborated-type-specifier names a new type
11371              unconditionally; even if there is already an `S' in the
11372              containing scope this declaration names a new type.
11373              This exception only applies if the elaborated-type-specifier
11374              forms the complete declaration:
11375
11376                [class.name]
11377
11378                A declaration consisting solely of `class-key identifier ;' is
11379                either a redeclaration of the name in the current scope or a
11380                forward declaration of the identifier as a class name.  It
11381                introduces the name into the current scope.
11382
11383              We are in this situation precisely when the next token is a `;'.
11384
11385              An exception to the exception is that a `friend' declaration does
11386              *not* name a new type; i.e., given:
11387
11388                struct S { friend struct T; };
11389
11390              `T' is not a new type in the scope of `S'.
11391
11392              Also, `new struct S' or `sizeof (struct S)' never results in the
11393              definition of a new type; a new type can only be declared in a
11394              declaration context.  */
11395
11396           tag_scope ts;
11397           bool template_p;
11398
11399           if (is_friend)
11400             /* Friends have special name lookup rules.  */
11401             ts = ts_within_enclosing_non_class;
11402           else if (is_declaration
11403                    && cp_lexer_next_token_is (parser->lexer,
11404                                               CPP_SEMICOLON))
11405             /* This is a `class-key identifier ;' */
11406             ts = ts_current;
11407           else
11408             ts = ts_global;
11409
11410           template_p =
11411             (parser->num_template_parameter_lists
11412              && (cp_parser_next_token_starts_class_definition_p (parser)
11413                  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
11414           /* An unqualified name was used to reference this type, so
11415              there were no qualifying templates.  */
11416           if (!cp_parser_check_template_parameters (parser,
11417                                                     /*num_templates=*/0))
11418             return error_mark_node;
11419           type = xref_tag (tag_type, identifier, ts, template_p);
11420         }
11421     }
11422
11423   if (type == error_mark_node)
11424     return error_mark_node;
11425
11426   /* Allow attributes on forward declarations of classes.  */
11427   if (attributes)
11428     {
11429       if (TREE_CODE (type) == TYPENAME_TYPE)
11430         warning (OPT_Wattributes,
11431                  "attributes ignored on uninstantiated type");
11432       else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
11433                && ! processing_explicit_instantiation)
11434         warning (OPT_Wattributes,
11435                  "attributes ignored on template instantiation");
11436       else if (is_declaration && cp_parser_declares_only_class_p (parser))
11437         cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
11438       else
11439         warning (OPT_Wattributes,
11440                  "attributes ignored on elaborated-type-specifier that is not a forward declaration");
11441     }
11442
11443   if (tag_type != enum_type)
11444     cp_parser_check_class_key (tag_type, type);
11445
11446   /* A "<" cannot follow an elaborated type specifier.  If that
11447      happens, the user was probably trying to form a template-id.  */
11448   cp_parser_check_for_invalid_template_id (parser, type);
11449
11450   return type;
11451 }
11452
11453 /* Parse an enum-specifier.
11454
11455    enum-specifier:
11456      enum identifier [opt] { enumerator-list [opt] }
11457
11458    GNU Extensions:
11459      enum attributes[opt] identifier [opt] { enumerator-list [opt] }
11460        attributes[opt]
11461
11462    Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
11463    if the token stream isn't an enum-specifier after all.  */
11464
11465 static tree
11466 cp_parser_enum_specifier (cp_parser* parser)
11467 {
11468   tree identifier;
11469   tree type;
11470   tree attributes;
11471
11472   /* Parse tentatively so that we can back up if we don't find a
11473      enum-specifier.  */
11474   cp_parser_parse_tentatively (parser);
11475
11476   /* Caller guarantees that the current token is 'enum', an identifier
11477      possibly follows, and the token after that is an opening brace.
11478      If we don't have an identifier, fabricate an anonymous name for
11479      the enumeration being defined.  */
11480   cp_lexer_consume_token (parser->lexer);
11481
11482   attributes = cp_parser_attributes_opt (parser);
11483
11484   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
11485     identifier = cp_parser_identifier (parser);
11486   else
11487     identifier = make_anon_name ();
11488
11489   /* Look for the `{' but don't consume it yet.  */
11490   if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
11491     cp_parser_simulate_error (parser);
11492
11493   if (!cp_parser_parse_definitely (parser))
11494     return NULL_TREE;
11495
11496   /* Issue an error message if type-definitions are forbidden here.  */
11497   if (!cp_parser_check_type_definition (parser))
11498     type = error_mark_node;
11499   else
11500     /* Create the new type.  We do this before consuming the opening
11501        brace so the enum will be recorded as being on the line of its
11502        tag (or the 'enum' keyword, if there is no tag).  */
11503     type = start_enum (identifier);
11504   
11505   /* Consume the opening brace.  */
11506   cp_lexer_consume_token (parser->lexer);
11507
11508   if (type == error_mark_node)
11509     {
11510       cp_parser_skip_to_end_of_block_or_statement (parser);
11511       return error_mark_node;
11512     }
11513
11514   /* If the next token is not '}', then there are some enumerators.  */
11515   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
11516     cp_parser_enumerator_list (parser, type);
11517
11518   /* Consume the final '}'.  */
11519   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
11520
11521   /* Look for trailing attributes to apply to this enumeration, and
11522      apply them if appropriate.  */
11523   if (cp_parser_allow_gnu_extensions_p (parser))
11524     {
11525       tree trailing_attr = cp_parser_attributes_opt (parser);
11526       cplus_decl_attributes (&type,
11527                              trailing_attr,
11528                              (int) ATTR_FLAG_TYPE_IN_PLACE);
11529     }
11530
11531   /* Finish up the enumeration.  */
11532   finish_enum (type);
11533
11534   return type;
11535 }
11536
11537 /* Parse an enumerator-list.  The enumerators all have the indicated
11538    TYPE.
11539
11540    enumerator-list:
11541      enumerator-definition
11542      enumerator-list , enumerator-definition  */
11543
11544 static void
11545 cp_parser_enumerator_list (cp_parser* parser, tree type)
11546 {
11547   while (true)
11548     {
11549       /* Parse an enumerator-definition.  */
11550       cp_parser_enumerator_definition (parser, type);
11551
11552       /* If the next token is not a ',', we've reached the end of
11553          the list.  */
11554       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11555         break;
11556       /* Otherwise, consume the `,' and keep going.  */
11557       cp_lexer_consume_token (parser->lexer);
11558       /* If the next token is a `}', there is a trailing comma.  */
11559       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
11560         {
11561           if (pedantic && !in_system_header)
11562             pedwarn ("comma at end of enumerator list");
11563           break;
11564         }
11565     }
11566 }
11567
11568 /* Parse an enumerator-definition.  The enumerator has the indicated
11569    TYPE.
11570
11571    enumerator-definition:
11572      enumerator
11573      enumerator = constant-expression
11574
11575    enumerator:
11576      identifier  */
11577
11578 static void
11579 cp_parser_enumerator_definition (cp_parser* parser, tree type)
11580 {
11581   tree identifier;
11582   tree value;
11583
11584   /* Look for the identifier.  */
11585   identifier = cp_parser_identifier (parser);
11586   if (identifier == error_mark_node)
11587     return;
11588
11589   /* If the next token is an '=', then there is an explicit value.  */
11590   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
11591     {
11592       /* Consume the `=' token.  */
11593       cp_lexer_consume_token (parser->lexer);
11594       /* Parse the value.  */
11595       value = cp_parser_constant_expression (parser,
11596                                              /*allow_non_constant_p=*/false,
11597                                              NULL);
11598     }
11599   else
11600     value = NULL_TREE;
11601
11602   /* Create the enumerator.  */
11603   build_enumerator (identifier, value, type);
11604 }
11605
11606 /* Parse a namespace-name.
11607
11608    namespace-name:
11609      original-namespace-name
11610      namespace-alias
11611
11612    Returns the NAMESPACE_DECL for the namespace.  */
11613
11614 static tree
11615 cp_parser_namespace_name (cp_parser* parser)
11616 {
11617   tree identifier;
11618   tree namespace_decl;
11619
11620   /* Get the name of the namespace.  */
11621   identifier = cp_parser_identifier (parser);
11622   if (identifier == error_mark_node)
11623     return error_mark_node;
11624
11625   /* Look up the identifier in the currently active scope.  Look only
11626      for namespaces, due to:
11627
11628        [basic.lookup.udir]
11629
11630        When looking up a namespace-name in a using-directive or alias
11631        definition, only namespace names are considered.
11632
11633      And:
11634
11635        [basic.lookup.qual]
11636
11637        During the lookup of a name preceding the :: scope resolution
11638        operator, object, function, and enumerator names are ignored.
11639
11640      (Note that cp_parser_class_or_namespace_name only calls this
11641      function if the token after the name is the scope resolution
11642      operator.)  */
11643   namespace_decl = cp_parser_lookup_name (parser, identifier,
11644                                           none_type,
11645                                           /*is_template=*/false,
11646                                           /*is_namespace=*/true,
11647                                           /*check_dependency=*/true,
11648                                           /*ambiguous_decls=*/NULL);
11649   /* If it's not a namespace, issue an error.  */
11650   if (namespace_decl == error_mark_node
11651       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
11652     {
11653       if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
11654         error ("%qD is not a namespace-name", identifier);
11655       cp_parser_error (parser, "expected namespace-name");
11656       namespace_decl = error_mark_node;
11657     }
11658
11659   return namespace_decl;
11660 }
11661
11662 /* Parse a namespace-definition.
11663
11664    namespace-definition:
11665      named-namespace-definition
11666      unnamed-namespace-definition
11667
11668    named-namespace-definition:
11669      original-namespace-definition
11670      extension-namespace-definition
11671
11672    original-namespace-definition:
11673      namespace identifier { namespace-body }
11674
11675    extension-namespace-definition:
11676      namespace original-namespace-name { namespace-body }
11677
11678    unnamed-namespace-definition:
11679      namespace { namespace-body } */
11680
11681 static void
11682 cp_parser_namespace_definition (cp_parser* parser)
11683 {
11684   tree identifier, attribs;
11685   bool has_visibility;
11686   bool is_inline;
11687
11688   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_INLINE))
11689     {
11690       is_inline = true;
11691       cp_lexer_consume_token (parser->lexer);
11692     }
11693   else
11694     is_inline = false;
11695
11696   /* Look for the `namespace' keyword.  */
11697   cp_parser_require_keyword (parser, RID_NAMESPACE, "%<namespace%>");
11698
11699   /* Get the name of the namespace.  We do not attempt to distinguish
11700      between an original-namespace-definition and an
11701      extension-namespace-definition at this point.  The semantic
11702      analysis routines are responsible for that.  */
11703   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
11704     identifier = cp_parser_identifier (parser);
11705   else
11706     identifier = NULL_TREE;
11707
11708   /* Parse any specified attributes.  */
11709   attribs = cp_parser_attributes_opt (parser);
11710
11711   /* Look for the `{' to start the namespace.  */
11712   cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>");
11713   /* Start the namespace.  */
11714   push_namespace (identifier);
11715
11716   /* "inline namespace" is equivalent to a stub namespace definition
11717      followed by a strong using directive.  */
11718   if (is_inline)
11719     {
11720       tree namespace = current_namespace;
11721       /* Set up namespace association.  */
11722       DECL_NAMESPACE_ASSOCIATIONS (namespace)
11723         = tree_cons (CP_DECL_CONTEXT (namespace), NULL_TREE,
11724                      DECL_NAMESPACE_ASSOCIATIONS (namespace));
11725       /* Import the contents of the inline namespace.  */
11726       pop_namespace ();
11727       do_using_directive (namespace);
11728       push_namespace (identifier);
11729     }
11730
11731   has_visibility = handle_namespace_attrs (current_namespace, attribs);
11732
11733   /* Parse the body of the namespace.  */
11734   cp_parser_namespace_body (parser);
11735
11736 #ifdef HANDLE_PRAGMA_VISIBILITY
11737   if (has_visibility)
11738     pop_visibility ();
11739 #endif
11740
11741   /* Finish the namespace.  */
11742   pop_namespace ();
11743   /* Look for the final `}'.  */
11744   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
11745 }
11746
11747 /* Parse a namespace-body.
11748
11749    namespace-body:
11750      declaration-seq [opt]  */
11751
11752 static void
11753 cp_parser_namespace_body (cp_parser* parser)
11754 {
11755   cp_parser_declaration_seq_opt (parser);
11756 }
11757
11758 /* Parse a namespace-alias-definition.
11759
11760    namespace-alias-definition:
11761      namespace identifier = qualified-namespace-specifier ;  */
11762
11763 static void
11764 cp_parser_namespace_alias_definition (cp_parser* parser)
11765 {
11766   tree identifier;
11767   tree namespace_specifier;
11768
11769   /* Look for the `namespace' keyword.  */
11770   cp_parser_require_keyword (parser, RID_NAMESPACE, "%<namespace%>");
11771   /* Look for the identifier.  */
11772   identifier = cp_parser_identifier (parser);
11773   if (identifier == error_mark_node)
11774     return;
11775   /* Look for the `=' token.  */
11776   if (!cp_parser_uncommitted_to_tentative_parse_p (parser)
11777       && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) 
11778     {
11779       error ("%<namespace%> definition is not allowed here");
11780       /* Skip the definition.  */
11781       cp_lexer_consume_token (parser->lexer);
11782       if (cp_parser_skip_to_closing_brace (parser))
11783         cp_lexer_consume_token (parser->lexer);
11784       return;
11785     }
11786   cp_parser_require (parser, CPP_EQ, "%<=%>");
11787   /* Look for the qualified-namespace-specifier.  */
11788   namespace_specifier
11789     = cp_parser_qualified_namespace_specifier (parser);
11790   /* Look for the `;' token.  */
11791   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
11792
11793   /* Register the alias in the symbol table.  */
11794   do_namespace_alias (identifier, namespace_specifier);
11795 }
11796
11797 /* Parse a qualified-namespace-specifier.
11798
11799    qualified-namespace-specifier:
11800      :: [opt] nested-name-specifier [opt] namespace-name
11801
11802    Returns a NAMESPACE_DECL corresponding to the specified
11803    namespace.  */
11804
11805 static tree
11806 cp_parser_qualified_namespace_specifier (cp_parser* parser)
11807 {
11808   /* Look for the optional `::'.  */
11809   cp_parser_global_scope_opt (parser,
11810                               /*current_scope_valid_p=*/false);
11811
11812   /* Look for the optional nested-name-specifier.  */
11813   cp_parser_nested_name_specifier_opt (parser,
11814                                        /*typename_keyword_p=*/false,
11815                                        /*check_dependency_p=*/true,
11816                                        /*type_p=*/false,
11817                                        /*is_declaration=*/true);
11818
11819   return cp_parser_namespace_name (parser);
11820 }
11821
11822 /* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
11823    access declaration.
11824
11825    using-declaration:
11826      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
11827      using :: unqualified-id ;  
11828
11829    access-declaration:
11830      qualified-id ;  
11831
11832    */
11833
11834 static bool
11835 cp_parser_using_declaration (cp_parser* parser, 
11836                              bool access_declaration_p)
11837 {
11838   cp_token *token;
11839   bool typename_p = false;
11840   bool global_scope_p;
11841   tree decl;
11842   tree identifier;
11843   tree qscope;
11844
11845   if (access_declaration_p)
11846     cp_parser_parse_tentatively (parser);
11847   else
11848     {
11849       /* Look for the `using' keyword.  */
11850       cp_parser_require_keyword (parser, RID_USING, "%<using%>");
11851       
11852       /* Peek at the next token.  */
11853       token = cp_lexer_peek_token (parser->lexer);
11854       /* See if it's `typename'.  */
11855       if (token->keyword == RID_TYPENAME)
11856         {
11857           /* Remember that we've seen it.  */
11858           typename_p = true;
11859           /* Consume the `typename' token.  */
11860           cp_lexer_consume_token (parser->lexer);
11861         }
11862     }
11863
11864   /* Look for the optional global scope qualification.  */
11865   global_scope_p
11866     = (cp_parser_global_scope_opt (parser,
11867                                    /*current_scope_valid_p=*/false)
11868        != NULL_TREE);
11869
11870   /* If we saw `typename', or didn't see `::', then there must be a
11871      nested-name-specifier present.  */
11872   if (typename_p || !global_scope_p)
11873     qscope = cp_parser_nested_name_specifier (parser, typename_p,
11874                                               /*check_dependency_p=*/true,
11875                                               /*type_p=*/false,
11876                                               /*is_declaration=*/true);
11877   /* Otherwise, we could be in either of the two productions.  In that
11878      case, treat the nested-name-specifier as optional.  */
11879   else
11880     qscope = cp_parser_nested_name_specifier_opt (parser,
11881                                                   /*typename_keyword_p=*/false,
11882                                                   /*check_dependency_p=*/true,
11883                                                   /*type_p=*/false,
11884                                                   /*is_declaration=*/true);
11885   if (!qscope)
11886     qscope = global_namespace;
11887
11888   if (access_declaration_p && cp_parser_error_occurred (parser))
11889     /* Something has already gone wrong; there's no need to parse
11890        further.  Since an error has occurred, the return value of
11891        cp_parser_parse_definitely will be false, as required.  */
11892     return cp_parser_parse_definitely (parser);
11893
11894   /* Parse the unqualified-id.  */
11895   identifier = cp_parser_unqualified_id (parser,
11896                                          /*template_keyword_p=*/false,
11897                                          /*check_dependency_p=*/true,
11898                                          /*declarator_p=*/true,
11899                                          /*optional_p=*/false);
11900
11901   if (access_declaration_p)
11902     {
11903       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
11904         cp_parser_simulate_error (parser);
11905       if (!cp_parser_parse_definitely (parser))
11906         return false;
11907     }
11908
11909   /* The function we call to handle a using-declaration is different
11910      depending on what scope we are in.  */
11911   if (qscope == error_mark_node || identifier == error_mark_node)
11912     ;
11913   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
11914            && TREE_CODE (identifier) != BIT_NOT_EXPR)
11915     /* [namespace.udecl]
11916
11917        A using declaration shall not name a template-id.  */
11918     error ("a template-id may not appear in a using-declaration");
11919   else
11920     {
11921       if (at_class_scope_p ())
11922         {
11923           /* Create the USING_DECL.  */
11924           decl = do_class_using_decl (parser->scope, identifier);
11925
11926           if (check_for_bare_parameter_packs (decl))
11927             return false;
11928           else
11929             /* Add it to the list of members in this class.  */
11930             finish_member_declaration (decl);
11931         }
11932       else
11933         {
11934           decl = cp_parser_lookup_name_simple (parser, identifier);
11935           if (decl == error_mark_node)
11936             cp_parser_name_lookup_error (parser, identifier, decl, NULL);
11937           else if (check_for_bare_parameter_packs (decl))
11938             return false;
11939           else if (!at_namespace_scope_p ())
11940             do_local_using_decl (decl, qscope, identifier);
11941           else
11942             do_toplevel_using_decl (decl, qscope, identifier);
11943         }
11944     }
11945
11946   /* Look for the final `;'.  */
11947   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
11948   
11949   return true;
11950 }
11951
11952 /* Parse a using-directive.
11953
11954    using-directive:
11955      using namespace :: [opt] nested-name-specifier [opt]
11956        namespace-name ;  */
11957
11958 static void
11959 cp_parser_using_directive (cp_parser* parser)
11960 {
11961   tree namespace_decl;
11962   tree attribs;
11963
11964   /* Look for the `using' keyword.  */
11965   cp_parser_require_keyword (parser, RID_USING, "%<using%>");
11966   /* And the `namespace' keyword.  */
11967   cp_parser_require_keyword (parser, RID_NAMESPACE, "%<namespace%>");
11968   /* Look for the optional `::' operator.  */
11969   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
11970   /* And the optional nested-name-specifier.  */
11971   cp_parser_nested_name_specifier_opt (parser,
11972                                        /*typename_keyword_p=*/false,
11973                                        /*check_dependency_p=*/true,
11974                                        /*type_p=*/false,
11975                                        /*is_declaration=*/true);
11976   /* Get the namespace being used.  */
11977   namespace_decl = cp_parser_namespace_name (parser);
11978   /* And any specified attributes.  */
11979   attribs = cp_parser_attributes_opt (parser);
11980   /* Update the symbol table.  */
11981   parse_using_directive (namespace_decl, attribs);
11982   /* Look for the final `;'.  */
11983   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
11984 }
11985
11986 /* Parse an asm-definition.
11987
11988    asm-definition:
11989      asm ( string-literal ) ;
11990
11991    GNU Extension:
11992
11993    asm-definition:
11994      asm volatile [opt] ( string-literal ) ;
11995      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
11996      asm volatile [opt] ( string-literal : asm-operand-list [opt]
11997                           : asm-operand-list [opt] ) ;
11998      asm volatile [opt] ( string-literal : asm-operand-list [opt]
11999                           : asm-operand-list [opt]
12000                           : asm-operand-list [opt] ) ;  */
12001
12002 static void
12003 cp_parser_asm_definition (cp_parser* parser)
12004 {
12005   tree string;
12006   tree outputs = NULL_TREE;
12007   tree inputs = NULL_TREE;
12008   tree clobbers = NULL_TREE;
12009   tree asm_stmt;
12010   bool volatile_p = false;
12011   bool extended_p = false;
12012   bool invalid_inputs_p = false;
12013   bool invalid_outputs_p = false;
12014
12015   /* Look for the `asm' keyword.  */
12016   cp_parser_require_keyword (parser, RID_ASM, "%<asm%>");
12017   /* See if the next token is `volatile'.  */
12018   if (cp_parser_allow_gnu_extensions_p (parser)
12019       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
12020     {
12021       /* Remember that we saw the `volatile' keyword.  */
12022       volatile_p = true;
12023       /* Consume the token.  */
12024       cp_lexer_consume_token (parser->lexer);
12025     }
12026   /* Look for the opening `('.  */
12027   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
12028     return;
12029   /* Look for the string.  */
12030   string = cp_parser_string_literal (parser, false, false);
12031   if (string == error_mark_node)
12032     {
12033       cp_parser_skip_to_closing_parenthesis (parser, true, false,
12034                                              /*consume_paren=*/true);
12035       return;
12036     }
12037
12038   /* If we're allowing GNU extensions, check for the extended assembly
12039      syntax.  Unfortunately, the `:' tokens need not be separated by
12040      a space in C, and so, for compatibility, we tolerate that here
12041      too.  Doing that means that we have to treat the `::' operator as
12042      two `:' tokens.  */
12043   if (cp_parser_allow_gnu_extensions_p (parser)
12044       && parser->in_function_body
12045       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
12046           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
12047     {
12048       bool inputs_p = false;
12049       bool clobbers_p = false;
12050
12051       /* The extended syntax was used.  */
12052       extended_p = true;
12053
12054       /* Look for outputs.  */
12055       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
12056         {
12057           /* Consume the `:'.  */
12058           cp_lexer_consume_token (parser->lexer);
12059           /* Parse the output-operands.  */
12060           if (cp_lexer_next_token_is_not (parser->lexer,
12061                                           CPP_COLON)
12062               && cp_lexer_next_token_is_not (parser->lexer,
12063                                              CPP_SCOPE)
12064               && cp_lexer_next_token_is_not (parser->lexer,
12065                                              CPP_CLOSE_PAREN))
12066             outputs = cp_parser_asm_operand_list (parser);
12067
12068             if (outputs == error_mark_node)
12069               invalid_outputs_p = true;
12070         }
12071       /* If the next token is `::', there are no outputs, and the
12072          next token is the beginning of the inputs.  */
12073       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12074         /* The inputs are coming next.  */
12075         inputs_p = true;
12076
12077       /* Look for inputs.  */
12078       if (inputs_p
12079           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
12080         {
12081           /* Consume the `:' or `::'.  */
12082           cp_lexer_consume_token (parser->lexer);
12083           /* Parse the output-operands.  */
12084           if (cp_lexer_next_token_is_not (parser->lexer,
12085                                           CPP_COLON)
12086               && cp_lexer_next_token_is_not (parser->lexer,
12087                                              CPP_CLOSE_PAREN))
12088             inputs = cp_parser_asm_operand_list (parser);
12089
12090             if (inputs == error_mark_node)
12091               invalid_inputs_p = true;
12092         }
12093       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
12094         /* The clobbers are coming next.  */
12095         clobbers_p = true;
12096
12097       /* Look for clobbers.  */
12098       if (clobbers_p
12099           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
12100         {
12101           /* Consume the `:' or `::'.  */
12102           cp_lexer_consume_token (parser->lexer);
12103           /* Parse the clobbers.  */
12104           if (cp_lexer_next_token_is_not (parser->lexer,
12105                                           CPP_CLOSE_PAREN))
12106             clobbers = cp_parser_asm_clobber_list (parser);
12107         }
12108     }
12109   /* Look for the closing `)'.  */
12110   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
12111     cp_parser_skip_to_closing_parenthesis (parser, true, false,
12112                                            /*consume_paren=*/true);
12113   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
12114
12115   if (!invalid_inputs_p && !invalid_outputs_p)
12116     {
12117       /* Create the ASM_EXPR.  */
12118       if (parser->in_function_body)
12119         {
12120           asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
12121                                       inputs, clobbers);
12122           /* If the extended syntax was not used, mark the ASM_EXPR.  */
12123           if (!extended_p)
12124             {
12125               tree temp = asm_stmt;
12126               if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
12127                 temp = TREE_OPERAND (temp, 0);
12128
12129               ASM_INPUT_P (temp) = 1;
12130             }
12131         }
12132       else
12133         cgraph_add_asm_node (string);
12134     }
12135 }
12136
12137 /* Declarators [gram.dcl.decl] */
12138
12139 /* Parse an init-declarator.
12140
12141    init-declarator:
12142      declarator initializer [opt]
12143
12144    GNU Extension:
12145
12146    init-declarator:
12147      declarator asm-specification [opt] attributes [opt] initializer [opt]
12148
12149    function-definition:
12150      decl-specifier-seq [opt] declarator ctor-initializer [opt]
12151        function-body
12152      decl-specifier-seq [opt] declarator function-try-block
12153
12154    GNU Extension:
12155
12156    function-definition:
12157      __extension__ function-definition
12158
12159    The DECL_SPECIFIERS apply to this declarator.  Returns a
12160    representation of the entity declared.  If MEMBER_P is TRUE, then
12161    this declarator appears in a class scope.  The new DECL created by
12162    this declarator is returned.
12163
12164    The CHECKS are access checks that should be performed once we know
12165    what entity is being declared (and, therefore, what classes have
12166    befriended it).
12167
12168    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
12169    for a function-definition here as well.  If the declarator is a
12170    declarator for a function-definition, *FUNCTION_DEFINITION_P will
12171    be TRUE upon return.  By that point, the function-definition will
12172    have been completely parsed.
12173
12174    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
12175    is FALSE.  */
12176
12177 static tree
12178 cp_parser_init_declarator (cp_parser* parser,
12179                            cp_decl_specifier_seq *decl_specifiers,
12180                            VEC (deferred_access_check,gc)* checks,
12181                            bool function_definition_allowed_p,
12182                            bool member_p,
12183                            int declares_class_or_enum,
12184                            bool* function_definition_p)
12185 {
12186   cp_token *token;
12187   cp_declarator *declarator;
12188   tree prefix_attributes;
12189   tree attributes;
12190   tree asm_specification;
12191   tree initializer;
12192   tree decl = NULL_TREE;
12193   tree scope;
12194   bool is_initialized;
12195   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
12196      initialized with "= ..", CPP_OPEN_PAREN if initialized with
12197      "(...)".  */
12198   enum cpp_ttype initialization_kind;
12199   bool is_parenthesized_init = false;
12200   bool is_non_constant_init;
12201   int ctor_dtor_or_conv_p;
12202   bool friend_p;
12203   tree pushed_scope = NULL;
12204
12205   /* Gather the attributes that were provided with the
12206      decl-specifiers.  */
12207   prefix_attributes = decl_specifiers->attributes;
12208
12209   /* Assume that this is not the declarator for a function
12210      definition.  */
12211   if (function_definition_p)
12212     *function_definition_p = false;
12213
12214   /* Defer access checks while parsing the declarator; we cannot know
12215      what names are accessible until we know what is being
12216      declared.  */
12217   resume_deferring_access_checks ();
12218
12219   /* Parse the declarator.  */
12220   declarator
12221     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
12222                             &ctor_dtor_or_conv_p,
12223                             /*parenthesized_p=*/NULL,
12224                             /*member_p=*/false);
12225   /* Gather up the deferred checks.  */
12226   stop_deferring_access_checks ();
12227
12228   /* If the DECLARATOR was erroneous, there's no need to go
12229      further.  */
12230   if (declarator == cp_error_declarator)
12231     return error_mark_node;
12232
12233   /* Check that the number of template-parameter-lists is OK.  */
12234   if (!cp_parser_check_declarator_template_parameters (parser, declarator))
12235     return error_mark_node;
12236
12237   if (declares_class_or_enum & 2)
12238     cp_parser_check_for_definition_in_return_type (declarator,
12239                                                    decl_specifiers->type);
12240
12241   /* Figure out what scope the entity declared by the DECLARATOR is
12242      located in.  `grokdeclarator' sometimes changes the scope, so
12243      we compute it now.  */
12244   scope = get_scope_of_declarator (declarator);
12245
12246   /* If we're allowing GNU extensions, look for an asm-specification
12247      and attributes.  */
12248   if (cp_parser_allow_gnu_extensions_p (parser))
12249     {
12250       /* Look for an asm-specification.  */
12251       asm_specification = cp_parser_asm_specification_opt (parser);
12252       /* And attributes.  */
12253       attributes = cp_parser_attributes_opt (parser);
12254     }
12255   else
12256     {
12257       asm_specification = NULL_TREE;
12258       attributes = NULL_TREE;
12259     }
12260
12261   /* Peek at the next token.  */
12262   token = cp_lexer_peek_token (parser->lexer);
12263   /* Check to see if the token indicates the start of a
12264      function-definition.  */
12265   if (cp_parser_token_starts_function_definition_p (token))
12266     {
12267       if (!function_definition_allowed_p)
12268         {
12269           /* If a function-definition should not appear here, issue an
12270              error message.  */
12271           cp_parser_error (parser,
12272                            "a function-definition is not allowed here");
12273           return error_mark_node;
12274         }
12275       else
12276         {
12277           /* Neither attributes nor an asm-specification are allowed
12278              on a function-definition.  */
12279           if (asm_specification)
12280             error ("an asm-specification is not allowed on a function-definition");
12281           if (attributes)
12282             error ("attributes are not allowed on a function-definition");
12283           /* This is a function-definition.  */
12284           *function_definition_p = true;
12285
12286           /* Parse the function definition.  */
12287           if (member_p)
12288             decl = cp_parser_save_member_function_body (parser,
12289                                                         decl_specifiers,
12290                                                         declarator,
12291                                                         prefix_attributes);
12292           else
12293             decl
12294               = (cp_parser_function_definition_from_specifiers_and_declarator
12295                  (parser, decl_specifiers, prefix_attributes, declarator));
12296
12297           return decl;
12298         }
12299     }
12300
12301   /* [dcl.dcl]
12302
12303      Only in function declarations for constructors, destructors, and
12304      type conversions can the decl-specifier-seq be omitted.
12305
12306      We explicitly postpone this check past the point where we handle
12307      function-definitions because we tolerate function-definitions
12308      that are missing their return types in some modes.  */
12309   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
12310     {
12311       cp_parser_error (parser,
12312                        "expected constructor, destructor, or type conversion");
12313       return error_mark_node;
12314     }
12315
12316   /* An `=' or an `(' indicates an initializer.  */
12317   if (token->type == CPP_EQ
12318       || token->type == CPP_OPEN_PAREN)
12319     {
12320       is_initialized = true;
12321       initialization_kind = token->type;
12322     }
12323   else
12324     {
12325       /* If the init-declarator isn't initialized and isn't followed by a
12326          `,' or `;', it's not a valid init-declarator.  */
12327       if (token->type != CPP_COMMA
12328           && token->type != CPP_SEMICOLON)
12329         {
12330           cp_parser_error (parser, "expected initializer");
12331           return error_mark_node;
12332         }
12333       is_initialized = false;
12334       initialization_kind = CPP_EOF;
12335     }
12336
12337   /* Because start_decl has side-effects, we should only call it if we
12338      know we're going ahead.  By this point, we know that we cannot
12339      possibly be looking at any other construct.  */
12340   cp_parser_commit_to_tentative_parse (parser);
12341
12342   /* If the decl specifiers were bad, issue an error now that we're
12343      sure this was intended to be a declarator.  Then continue
12344      declaring the variable(s), as int, to try to cut down on further
12345      errors.  */
12346   if (decl_specifiers->any_specifiers_p
12347       && decl_specifiers->type == error_mark_node)
12348     {
12349       cp_parser_error (parser, "invalid type in declaration");
12350       decl_specifiers->type = integer_type_node;
12351     }
12352
12353   /* Check to see whether or not this declaration is a friend.  */
12354   friend_p = cp_parser_friend_p (decl_specifiers);
12355
12356   /* Enter the newly declared entry in the symbol table.  If we're
12357      processing a declaration in a class-specifier, we wait until
12358      after processing the initializer.  */
12359   if (!member_p)
12360     {
12361       if (parser->in_unbraced_linkage_specification_p)
12362         decl_specifiers->storage_class = sc_extern;
12363       decl = start_decl (declarator, decl_specifiers,
12364                          is_initialized, attributes, prefix_attributes,
12365                          &pushed_scope);
12366     }
12367   else if (scope)
12368     /* Enter the SCOPE.  That way unqualified names appearing in the
12369        initializer will be looked up in SCOPE.  */
12370     pushed_scope = push_scope (scope);
12371
12372   /* Perform deferred access control checks, now that we know in which
12373      SCOPE the declared entity resides.  */
12374   if (!member_p && decl)
12375     {
12376       tree saved_current_function_decl = NULL_TREE;
12377
12378       /* If the entity being declared is a function, pretend that we
12379          are in its scope.  If it is a `friend', it may have access to
12380          things that would not otherwise be accessible.  */
12381       if (TREE_CODE (decl) == FUNCTION_DECL)
12382         {
12383           saved_current_function_decl = current_function_decl;
12384           current_function_decl = decl;
12385         }
12386
12387       /* Perform access checks for template parameters.  */
12388       cp_parser_perform_template_parameter_access_checks (checks);
12389
12390       /* Perform the access control checks for the declarator and the
12391          the decl-specifiers.  */
12392       perform_deferred_access_checks ();
12393
12394       /* Restore the saved value.  */
12395       if (TREE_CODE (decl) == FUNCTION_DECL)
12396         current_function_decl = saved_current_function_decl;
12397     }
12398
12399   /* Parse the initializer.  */
12400   initializer = NULL_TREE;
12401   is_parenthesized_init = false;
12402   is_non_constant_init = true;
12403   if (is_initialized)
12404     {
12405       if (function_declarator_p (declarator))
12406         {
12407            if (initialization_kind == CPP_EQ)
12408              initializer = cp_parser_pure_specifier (parser);
12409            else
12410              {
12411                /* If the declaration was erroneous, we don't really
12412                   know what the user intended, so just silently
12413                   consume the initializer.  */
12414                if (decl != error_mark_node)
12415                  error ("initializer provided for function");
12416                cp_parser_skip_to_closing_parenthesis (parser,
12417                                                       /*recovering=*/true,
12418                                                       /*or_comma=*/false,
12419                                                       /*consume_paren=*/true);
12420              }
12421         }
12422       else
12423         initializer = cp_parser_initializer (parser,
12424                                              &is_parenthesized_init,
12425                                              &is_non_constant_init);
12426     }
12427
12428   /* The old parser allows attributes to appear after a parenthesized
12429      initializer.  Mark Mitchell proposed removing this functionality
12430      on the GCC mailing lists on 2002-08-13.  This parser accepts the
12431      attributes -- but ignores them.  */
12432   if (cp_parser_allow_gnu_extensions_p (parser) && is_parenthesized_init)
12433     if (cp_parser_attributes_opt (parser))
12434       warning (OPT_Wattributes,
12435                "attributes after parenthesized initializer ignored");
12436
12437   /* For an in-class declaration, use `grokfield' to create the
12438      declaration.  */
12439   if (member_p)
12440     {
12441       if (pushed_scope)
12442         {
12443           pop_scope (pushed_scope);
12444           pushed_scope = false;
12445         }
12446       decl = grokfield (declarator, decl_specifiers,
12447                         initializer, !is_non_constant_init,
12448                         /*asmspec=*/NULL_TREE,
12449                         prefix_attributes);
12450       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
12451         cp_parser_save_default_args (parser, decl);
12452     }
12453
12454   /* Finish processing the declaration.  But, skip friend
12455      declarations.  */
12456   if (!friend_p && decl && decl != error_mark_node)
12457     {
12458       cp_finish_decl (decl,
12459                       initializer, !is_non_constant_init,
12460                       asm_specification,
12461                       /* If the initializer is in parentheses, then this is
12462                          a direct-initialization, which means that an
12463                          `explicit' constructor is OK.  Otherwise, an
12464                          `explicit' constructor cannot be used.  */
12465                       ((is_parenthesized_init || !is_initialized)
12466                      ? 0 : LOOKUP_ONLYCONVERTING));
12467     }
12468   else if ((cxx_dialect != cxx98) && friend_p
12469            && decl && TREE_CODE (decl) == FUNCTION_DECL)
12470     /* Core issue #226 (C++0x only): A default template-argument
12471        shall not be specified in a friend class template
12472        declaration. */
12473     check_default_tmpl_args (decl, current_template_parms, /*is_primary=*/1, 
12474                              /*is_partial=*/0, /*is_friend_decl=*/1);
12475
12476   if (!friend_p && pushed_scope)
12477     pop_scope (pushed_scope);
12478
12479   return decl;
12480 }
12481
12482 /* Parse a declarator.
12483
12484    declarator:
12485      direct-declarator
12486      ptr-operator declarator
12487
12488    abstract-declarator:
12489      ptr-operator abstract-declarator [opt]
12490      direct-abstract-declarator
12491
12492    GNU Extensions:
12493
12494    declarator:
12495      attributes [opt] direct-declarator
12496      attributes [opt] ptr-operator declarator
12497
12498    abstract-declarator:
12499      attributes [opt] ptr-operator abstract-declarator [opt]
12500      attributes [opt] direct-abstract-declarator
12501
12502    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
12503    detect constructor, destructor or conversion operators. It is set
12504    to -1 if the declarator is a name, and +1 if it is a
12505    function. Otherwise it is set to zero. Usually you just want to
12506    test for >0, but internally the negative value is used.
12507
12508    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
12509    a decl-specifier-seq unless it declares a constructor, destructor,
12510    or conversion.  It might seem that we could check this condition in
12511    semantic analysis, rather than parsing, but that makes it difficult
12512    to handle something like `f()'.  We want to notice that there are
12513    no decl-specifiers, and therefore realize that this is an
12514    expression, not a declaration.)
12515
12516    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
12517    the declarator is a direct-declarator of the form "(...)".
12518
12519    MEMBER_P is true iff this declarator is a member-declarator.  */
12520
12521 static cp_declarator *
12522 cp_parser_declarator (cp_parser* parser,
12523                       cp_parser_declarator_kind dcl_kind,
12524                       int* ctor_dtor_or_conv_p,
12525                       bool* parenthesized_p,
12526                       bool member_p)
12527 {
12528   cp_token *token;
12529   cp_declarator *declarator;
12530   enum tree_code code;
12531   cp_cv_quals cv_quals;
12532   tree class_type;
12533   tree attributes = NULL_TREE;
12534
12535   /* Assume this is not a constructor, destructor, or type-conversion
12536      operator.  */
12537   if (ctor_dtor_or_conv_p)
12538     *ctor_dtor_or_conv_p = 0;
12539
12540   if (cp_parser_allow_gnu_extensions_p (parser))
12541     attributes = cp_parser_attributes_opt (parser);
12542
12543   /* Peek at the next token.  */
12544   token = cp_lexer_peek_token (parser->lexer);
12545
12546   /* Check for the ptr-operator production.  */
12547   cp_parser_parse_tentatively (parser);
12548   /* Parse the ptr-operator.  */
12549   code = cp_parser_ptr_operator (parser,
12550                                  &class_type,
12551                                  &cv_quals);
12552   /* If that worked, then we have a ptr-operator.  */
12553   if (cp_parser_parse_definitely (parser))
12554     {
12555       /* If a ptr-operator was found, then this declarator was not
12556          parenthesized.  */
12557       if (parenthesized_p)
12558         *parenthesized_p = true;
12559       /* The dependent declarator is optional if we are parsing an
12560          abstract-declarator.  */
12561       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
12562         cp_parser_parse_tentatively (parser);
12563
12564       /* Parse the dependent declarator.  */
12565       declarator = cp_parser_declarator (parser, dcl_kind,
12566                                          /*ctor_dtor_or_conv_p=*/NULL,
12567                                          /*parenthesized_p=*/NULL,
12568                                          /*member_p=*/false);
12569
12570       /* If we are parsing an abstract-declarator, we must handle the
12571          case where the dependent declarator is absent.  */
12572       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
12573           && !cp_parser_parse_definitely (parser))
12574         declarator = NULL;
12575
12576       declarator = cp_parser_make_indirect_declarator
12577         (code, class_type, cv_quals, declarator);
12578     }
12579   /* Everything else is a direct-declarator.  */
12580   else
12581     {
12582       if (parenthesized_p)
12583         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
12584                                                    CPP_OPEN_PAREN);
12585       declarator = cp_parser_direct_declarator (parser, dcl_kind,
12586                                                 ctor_dtor_or_conv_p,
12587                                                 member_p);
12588     }
12589
12590   if (attributes && declarator && declarator != cp_error_declarator)
12591     declarator->attributes = attributes;
12592
12593   return declarator;
12594 }
12595
12596 /* Parse a direct-declarator or direct-abstract-declarator.
12597
12598    direct-declarator:
12599      declarator-id
12600      direct-declarator ( parameter-declaration-clause )
12601        cv-qualifier-seq [opt]
12602        exception-specification [opt]
12603      direct-declarator [ constant-expression [opt] ]
12604      ( declarator )
12605
12606    direct-abstract-declarator:
12607      direct-abstract-declarator [opt]
12608        ( parameter-declaration-clause )
12609        cv-qualifier-seq [opt]
12610        exception-specification [opt]
12611      direct-abstract-declarator [opt] [ constant-expression [opt] ]
12612      ( abstract-declarator )
12613
12614    Returns a representation of the declarator.  DCL_KIND is
12615    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
12616    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
12617    we are parsing a direct-declarator.  It is
12618    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
12619    of ambiguity we prefer an abstract declarator, as per
12620    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
12621    cp_parser_declarator.  */
12622
12623 static cp_declarator *
12624 cp_parser_direct_declarator (cp_parser* parser,
12625                              cp_parser_declarator_kind dcl_kind,
12626                              int* ctor_dtor_or_conv_p,
12627                              bool member_p)
12628 {
12629   cp_token *token;
12630   cp_declarator *declarator = NULL;
12631   tree scope = NULL_TREE;
12632   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
12633   bool saved_in_declarator_p = parser->in_declarator_p;
12634   bool first = true;
12635   tree pushed_scope = NULL_TREE;
12636
12637   while (true)
12638     {
12639       /* Peek at the next token.  */
12640       token = cp_lexer_peek_token (parser->lexer);
12641       if (token->type == CPP_OPEN_PAREN)
12642         {
12643           /* This is either a parameter-declaration-clause, or a
12644              parenthesized declarator. When we know we are parsing a
12645              named declarator, it must be a parenthesized declarator
12646              if FIRST is true. For instance, `(int)' is a
12647              parameter-declaration-clause, with an omitted
12648              direct-abstract-declarator. But `((*))', is a
12649              parenthesized abstract declarator. Finally, when T is a
12650              template parameter `(T)' is a
12651              parameter-declaration-clause, and not a parenthesized
12652              named declarator.
12653
12654              We first try and parse a parameter-declaration-clause,
12655              and then try a nested declarator (if FIRST is true).
12656
12657              It is not an error for it not to be a
12658              parameter-declaration-clause, even when FIRST is
12659              false. Consider,
12660
12661                int i (int);
12662                int i (3);
12663
12664              The first is the declaration of a function while the
12665              second is a the definition of a variable, including its
12666              initializer.
12667
12668              Having seen only the parenthesis, we cannot know which of
12669              these two alternatives should be selected.  Even more
12670              complex are examples like:
12671
12672                int i (int (a));
12673                int i (int (3));
12674
12675              The former is a function-declaration; the latter is a
12676              variable initialization.
12677
12678              Thus again, we try a parameter-declaration-clause, and if
12679              that fails, we back out and return.  */
12680
12681           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
12682             {
12683               cp_parameter_declarator *params;
12684               unsigned saved_num_template_parameter_lists;
12685
12686               /* In a member-declarator, the only valid interpretation
12687                  of a parenthesis is the start of a
12688                  parameter-declaration-clause.  (It is invalid to
12689                  initialize a static data member with a parenthesized
12690                  initializer; only the "=" form of initialization is
12691                  permitted.)  */
12692               if (!member_p)
12693                 cp_parser_parse_tentatively (parser);
12694
12695               /* Consume the `('.  */
12696               cp_lexer_consume_token (parser->lexer);
12697               if (first)
12698                 {
12699                   /* If this is going to be an abstract declarator, we're
12700                      in a declarator and we can't have default args.  */
12701                   parser->default_arg_ok_p = false;
12702                   parser->in_declarator_p = true;
12703                 }
12704
12705               /* Inside the function parameter list, surrounding
12706                  template-parameter-lists do not apply.  */
12707               saved_num_template_parameter_lists
12708                 = parser->num_template_parameter_lists;
12709               parser->num_template_parameter_lists = 0;
12710
12711               /* Parse the parameter-declaration-clause.  */
12712               params = cp_parser_parameter_declaration_clause (parser);
12713
12714               parser->num_template_parameter_lists
12715                 = saved_num_template_parameter_lists;
12716
12717               /* If all went well, parse the cv-qualifier-seq and the
12718                  exception-specification.  */
12719               if (member_p || cp_parser_parse_definitely (parser))
12720                 {
12721                   cp_cv_quals cv_quals;
12722                   tree exception_specification;
12723
12724                   if (ctor_dtor_or_conv_p)
12725                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
12726                   first = false;
12727                   /* Consume the `)'.  */
12728                   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
12729
12730                   /* Parse the cv-qualifier-seq.  */
12731                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
12732                   /* And the exception-specification.  */
12733                   exception_specification
12734                     = cp_parser_exception_specification_opt (parser);
12735
12736                   /* Create the function-declarator.  */
12737                   declarator = make_call_declarator (declarator,
12738                                                      params,
12739                                                      cv_quals,
12740                                                      exception_specification);
12741                   /* Any subsequent parameter lists are to do with
12742                      return type, so are not those of the declared
12743                      function.  */
12744                   parser->default_arg_ok_p = false;
12745
12746                   /* Repeat the main loop.  */
12747                   continue;
12748                 }
12749             }
12750
12751           /* If this is the first, we can try a parenthesized
12752              declarator.  */
12753           if (first)
12754             {
12755               bool saved_in_type_id_in_expr_p;
12756
12757               parser->default_arg_ok_p = saved_default_arg_ok_p;
12758               parser->in_declarator_p = saved_in_declarator_p;
12759
12760               /* Consume the `('.  */
12761               cp_lexer_consume_token (parser->lexer);
12762               /* Parse the nested declarator.  */
12763               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
12764               parser->in_type_id_in_expr_p = true;
12765               declarator
12766                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
12767                                         /*parenthesized_p=*/NULL,
12768                                         member_p);
12769               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
12770               first = false;
12771               /* Expect a `)'.  */
12772               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
12773                 declarator = cp_error_declarator;
12774               if (declarator == cp_error_declarator)
12775                 break;
12776
12777               goto handle_declarator;
12778             }
12779           /* Otherwise, we must be done.  */
12780           else
12781             break;
12782         }
12783       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
12784                && token->type == CPP_OPEN_SQUARE)
12785         {
12786           /* Parse an array-declarator.  */
12787           tree bounds;
12788
12789           if (ctor_dtor_or_conv_p)
12790             *ctor_dtor_or_conv_p = 0;
12791
12792           first = false;
12793           parser->default_arg_ok_p = false;
12794           parser->in_declarator_p = true;
12795           /* Consume the `['.  */
12796           cp_lexer_consume_token (parser->lexer);
12797           /* Peek at the next token.  */
12798           token = cp_lexer_peek_token (parser->lexer);
12799           /* If the next token is `]', then there is no
12800              constant-expression.  */
12801           if (token->type != CPP_CLOSE_SQUARE)
12802             {
12803               bool non_constant_p;
12804
12805               bounds
12806                 = cp_parser_constant_expression (parser,
12807                                                  /*allow_non_constant=*/true,
12808                                                  &non_constant_p);
12809               if (!non_constant_p)
12810                 bounds = fold_non_dependent_expr (bounds);
12811               /* Normally, the array bound must be an integral constant
12812                  expression.  However, as an extension, we allow VLAs
12813                  in function scopes.  */
12814               else if (!parser->in_function_body)
12815                 {
12816                   error ("array bound is not an integer constant");
12817                   bounds = error_mark_node;
12818                 }
12819             }
12820           else
12821             bounds = NULL_TREE;
12822           /* Look for the closing `]'.  */
12823           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>"))
12824             {
12825               declarator = cp_error_declarator;
12826               break;
12827             }
12828
12829           declarator = make_array_declarator (declarator, bounds);
12830         }
12831       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
12832         {
12833           tree qualifying_scope;
12834           tree unqualified_name;
12835           special_function_kind sfk;
12836           bool abstract_ok;
12837           bool pack_expansion_p = false;
12838
12839           /* Parse a declarator-id */
12840           abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
12841           if (abstract_ok)
12842             {
12843               cp_parser_parse_tentatively (parser);
12844
12845               /* If we see an ellipsis, we should be looking at a
12846                  parameter pack. */
12847               if (token->type == CPP_ELLIPSIS)
12848                 {
12849                   /* Consume the `...' */
12850                   cp_lexer_consume_token (parser->lexer);
12851
12852                   pack_expansion_p = true;
12853                 }
12854             }
12855
12856           unqualified_name
12857             = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
12858           qualifying_scope = parser->scope;
12859           if (abstract_ok)
12860             {
12861               bool okay = false;
12862
12863               if (!unqualified_name && pack_expansion_p)
12864                 {
12865                   /* Check whether an error occurred. */
12866                   okay = !cp_parser_error_occurred (parser);
12867
12868                   /* We already consumed the ellipsis to mark a
12869                      parameter pack, but we have no way to report it,
12870                      so abort the tentative parse. We will be exiting
12871                      immediately anyway. */
12872                   cp_parser_abort_tentative_parse (parser);
12873                 }
12874               else
12875                 okay = cp_parser_parse_definitely (parser);
12876
12877               if (!okay)
12878                 unqualified_name = error_mark_node;
12879               else if (unqualified_name
12880                        && (qualifying_scope
12881                            || (TREE_CODE (unqualified_name)
12882                                != IDENTIFIER_NODE)))
12883                 {
12884                   cp_parser_error (parser, "expected unqualified-id");
12885                   unqualified_name = error_mark_node;
12886                 }
12887             }
12888
12889           if (!unqualified_name)
12890             return NULL;
12891           if (unqualified_name == error_mark_node)
12892             {
12893               declarator = cp_error_declarator;
12894               pack_expansion_p = false;
12895               declarator->parameter_pack_p = false;
12896               break;
12897             }
12898
12899           if (qualifying_scope && at_namespace_scope_p ()
12900               && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
12901             {
12902               /* In the declaration of a member of a template class
12903                  outside of the class itself, the SCOPE will sometimes
12904                  be a TYPENAME_TYPE.  For example, given:
12905
12906                  template <typename T>
12907                  int S<T>::R::i = 3;
12908
12909                  the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
12910                  this context, we must resolve S<T>::R to an ordinary
12911                  type, rather than a typename type.
12912
12913                  The reason we normally avoid resolving TYPENAME_TYPEs
12914                  is that a specialization of `S' might render
12915                  `S<T>::R' not a type.  However, if `S' is
12916                  specialized, then this `i' will not be used, so there
12917                  is no harm in resolving the types here.  */
12918               tree type;
12919
12920               /* Resolve the TYPENAME_TYPE.  */
12921               type = resolve_typename_type (qualifying_scope,
12922                                             /*only_current_p=*/false);
12923               /* If that failed, the declarator is invalid.  */
12924               if (TREE_CODE (type) == TYPENAME_TYPE)
12925                 error ("%<%T::%E%> is not a type",
12926                        TYPE_CONTEXT (qualifying_scope),
12927                        TYPE_IDENTIFIER (qualifying_scope));
12928               qualifying_scope = type;
12929             }
12930
12931           sfk = sfk_none;
12932
12933           if (unqualified_name)
12934             {
12935               tree class_type;
12936
12937               if (qualifying_scope
12938                   && CLASS_TYPE_P (qualifying_scope))
12939                 class_type = qualifying_scope;
12940               else
12941                 class_type = current_class_type;
12942
12943               if (TREE_CODE (unqualified_name) == TYPE_DECL)
12944                 {
12945                   tree name_type = TREE_TYPE (unqualified_name);
12946                   if (class_type && same_type_p (name_type, class_type))
12947                     {
12948                       if (qualifying_scope
12949                           && CLASSTYPE_USE_TEMPLATE (name_type))
12950                         {
12951                           error ("invalid use of constructor as a template");
12952                           inform ("use %<%T::%D%> instead of %<%T::%D%> to "
12953                                   "name the constructor in a qualified name",
12954                                   class_type,
12955                                   DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
12956                                   class_type, name_type);
12957                           declarator = cp_error_declarator;
12958                           break;
12959                         }
12960                       else
12961                         unqualified_name = constructor_name (class_type);
12962                     }
12963                   else
12964                     {
12965                       /* We do not attempt to print the declarator
12966                          here because we do not have enough
12967                          information about its original syntactic
12968                          form.  */
12969                       cp_parser_error (parser, "invalid declarator");
12970                       declarator = cp_error_declarator;
12971                       break;
12972                     }
12973                 }
12974
12975               if (class_type)
12976                 {
12977                   if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
12978                     sfk = sfk_destructor;
12979                   else if (IDENTIFIER_TYPENAME_P (unqualified_name))
12980                     sfk = sfk_conversion;
12981                   else if (/* There's no way to declare a constructor
12982                               for an anonymous type, even if the type
12983                               got a name for linkage purposes.  */
12984                            !TYPE_WAS_ANONYMOUS (class_type)
12985                            && constructor_name_p (unqualified_name,
12986                                                   class_type))
12987                     {
12988                       unqualified_name = constructor_name (class_type);
12989                       sfk = sfk_constructor;
12990                     }
12991
12992                   if (ctor_dtor_or_conv_p && sfk != sfk_none)
12993                     *ctor_dtor_or_conv_p = -1;
12994                 }
12995             }
12996           declarator = make_id_declarator (qualifying_scope,
12997                                            unqualified_name,
12998                                            sfk);
12999           declarator->id_loc = token->location;
13000           declarator->parameter_pack_p = pack_expansion_p;
13001
13002           if (pack_expansion_p)
13003             maybe_warn_variadic_templates ();
13004
13005         handle_declarator:;
13006           scope = get_scope_of_declarator (declarator);
13007           if (scope)
13008             /* Any names that appear after the declarator-id for a
13009                member are looked up in the containing scope.  */
13010             pushed_scope = push_scope (scope);
13011           parser->in_declarator_p = true;
13012           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
13013               || (declarator && declarator->kind == cdk_id))
13014             /* Default args are only allowed on function
13015                declarations.  */
13016             parser->default_arg_ok_p = saved_default_arg_ok_p;
13017           else
13018             parser->default_arg_ok_p = false;
13019
13020           first = false;
13021         }
13022       /* We're done.  */
13023       else
13024         break;
13025     }
13026
13027   /* For an abstract declarator, we might wind up with nothing at this
13028      point.  That's an error; the declarator is not optional.  */
13029   if (!declarator)
13030     cp_parser_error (parser, "expected declarator");
13031
13032   /* If we entered a scope, we must exit it now.  */
13033   if (pushed_scope)
13034     pop_scope (pushed_scope);
13035
13036   parser->default_arg_ok_p = saved_default_arg_ok_p;
13037   parser->in_declarator_p = saved_in_declarator_p;
13038
13039   return declarator;
13040 }
13041
13042 /* Parse a ptr-operator.
13043
13044    ptr-operator:
13045      * cv-qualifier-seq [opt]
13046      &
13047      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
13048
13049    GNU Extension:
13050
13051    ptr-operator:
13052      & cv-qualifier-seq [opt]
13053
13054    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
13055    Returns ADDR_EXPR if a reference was used, or NON_LVALUE_EXPR for
13056    an rvalue reference. In the case of a pointer-to-member, *TYPE is
13057    filled in with the TYPE containing the member.  *CV_QUALS is
13058    filled in with the cv-qualifier-seq, or TYPE_UNQUALIFIED, if there
13059    are no cv-qualifiers.  Returns ERROR_MARK if an error occurred.
13060    Note that the tree codes returned by this function have nothing
13061    to do with the types of trees that will be eventually be created
13062    to represent the pointer or reference type being parsed. They are
13063    just constants with suggestive names. */
13064 static enum tree_code
13065 cp_parser_ptr_operator (cp_parser* parser,
13066                         tree* type,
13067                         cp_cv_quals *cv_quals)
13068 {
13069   enum tree_code code = ERROR_MARK;
13070   cp_token *token;
13071
13072   /* Assume that it's not a pointer-to-member.  */
13073   *type = NULL_TREE;
13074   /* And that there are no cv-qualifiers.  */
13075   *cv_quals = TYPE_UNQUALIFIED;
13076
13077   /* Peek at the next token.  */
13078   token = cp_lexer_peek_token (parser->lexer);
13079
13080   /* If it's a `*', `&' or `&&' we have a pointer or reference.  */
13081   if (token->type == CPP_MULT)
13082     code = INDIRECT_REF;
13083   else if (token->type == CPP_AND)
13084     code = ADDR_EXPR;
13085   else if ((cxx_dialect != cxx98) &&
13086            token->type == CPP_AND_AND) /* C++0x only */
13087     code = NON_LVALUE_EXPR;
13088
13089   if (code != ERROR_MARK)
13090     {
13091       /* Consume the `*', `&' or `&&'.  */
13092       cp_lexer_consume_token (parser->lexer);
13093
13094       /* A `*' can be followed by a cv-qualifier-seq, and so can a
13095          `&', if we are allowing GNU extensions.  (The only qualifier
13096          that can legally appear after `&' is `restrict', but that is
13097          enforced during semantic analysis.  */
13098       if (code == INDIRECT_REF
13099           || cp_parser_allow_gnu_extensions_p (parser))
13100         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
13101     }
13102   else
13103     {
13104       /* Try the pointer-to-member case.  */
13105       cp_parser_parse_tentatively (parser);
13106       /* Look for the optional `::' operator.  */
13107       cp_parser_global_scope_opt (parser,
13108                                   /*current_scope_valid_p=*/false);
13109       /* Look for the nested-name specifier.  */
13110       cp_parser_nested_name_specifier (parser,
13111                                        /*typename_keyword_p=*/false,
13112                                        /*check_dependency_p=*/true,
13113                                        /*type_p=*/false,
13114                                        /*is_declaration=*/false);
13115       /* If we found it, and the next token is a `*', then we are
13116          indeed looking at a pointer-to-member operator.  */
13117       if (!cp_parser_error_occurred (parser)
13118           && cp_parser_require (parser, CPP_MULT, "%<*%>"))
13119         {
13120           /* Indicate that the `*' operator was used.  */
13121           code = INDIRECT_REF;
13122
13123           if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
13124             error ("%qD is a namespace", parser->scope);
13125           else
13126             {
13127               /* The type of which the member is a member is given by the
13128                  current SCOPE.  */
13129               *type = parser->scope;
13130               /* The next name will not be qualified.  */
13131               parser->scope = NULL_TREE;
13132               parser->qualifying_scope = NULL_TREE;
13133               parser->object_scope = NULL_TREE;
13134               /* Look for the optional cv-qualifier-seq.  */
13135               *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
13136             }
13137         }
13138       /* If that didn't work we don't have a ptr-operator.  */
13139       if (!cp_parser_parse_definitely (parser))
13140         cp_parser_error (parser, "expected ptr-operator");
13141     }
13142
13143   return code;
13144 }
13145
13146 /* Parse an (optional) cv-qualifier-seq.
13147
13148    cv-qualifier-seq:
13149      cv-qualifier cv-qualifier-seq [opt]
13150
13151    cv-qualifier:
13152      const
13153      volatile
13154
13155    GNU Extension:
13156
13157    cv-qualifier:
13158      __restrict__
13159
13160    Returns a bitmask representing the cv-qualifiers.  */
13161
13162 static cp_cv_quals
13163 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
13164 {
13165   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
13166
13167   while (true)
13168     {
13169       cp_token *token;
13170       cp_cv_quals cv_qualifier;
13171
13172       /* Peek at the next token.  */
13173       token = cp_lexer_peek_token (parser->lexer);
13174       /* See if it's a cv-qualifier.  */
13175       switch (token->keyword)
13176         {
13177         case RID_CONST:
13178           cv_qualifier = TYPE_QUAL_CONST;
13179           break;
13180
13181         case RID_VOLATILE:
13182           cv_qualifier = TYPE_QUAL_VOLATILE;
13183           break;
13184
13185         case RID_RESTRICT:
13186           cv_qualifier = TYPE_QUAL_RESTRICT;
13187           break;
13188
13189         default:
13190           cv_qualifier = TYPE_UNQUALIFIED;
13191           break;
13192         }
13193
13194       if (!cv_qualifier)
13195         break;
13196
13197       if (cv_quals & cv_qualifier)
13198         {
13199           error ("duplicate cv-qualifier");
13200           cp_lexer_purge_token (parser->lexer);
13201         }
13202       else
13203         {
13204           cp_lexer_consume_token (parser->lexer);
13205           cv_quals |= cv_qualifier;
13206         }
13207     }
13208
13209   return cv_quals;
13210 }
13211
13212 /* Parse a declarator-id.
13213
13214    declarator-id:
13215      id-expression
13216      :: [opt] nested-name-specifier [opt] type-name
13217
13218    In the `id-expression' case, the value returned is as for
13219    cp_parser_id_expression if the id-expression was an unqualified-id.
13220    If the id-expression was a qualified-id, then a SCOPE_REF is
13221    returned.  The first operand is the scope (either a NAMESPACE_DECL
13222    or TREE_TYPE), but the second is still just a representation of an
13223    unqualified-id.  */
13224
13225 static tree
13226 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
13227 {
13228   tree id;
13229   /* The expression must be an id-expression.  Assume that qualified
13230      names are the names of types so that:
13231
13232        template <class T>
13233        int S<T>::R::i = 3;
13234
13235      will work; we must treat `S<T>::R' as the name of a type.
13236      Similarly, assume that qualified names are templates, where
13237      required, so that:
13238
13239        template <class T>
13240        int S<T>::R<T>::i = 3;
13241
13242      will work, too.  */
13243   id = cp_parser_id_expression (parser,
13244                                 /*template_keyword_p=*/false,
13245                                 /*check_dependency_p=*/false,
13246                                 /*template_p=*/NULL,
13247                                 /*declarator_p=*/true,
13248                                 optional_p);
13249   if (id && BASELINK_P (id))
13250     id = BASELINK_FUNCTIONS (id);
13251   return id;
13252 }
13253
13254 /* Parse a type-id.
13255
13256    type-id:
13257      type-specifier-seq abstract-declarator [opt]
13258
13259    Returns the TYPE specified.  */
13260
13261 static tree
13262 cp_parser_type_id (cp_parser* parser)
13263 {
13264   cp_decl_specifier_seq type_specifier_seq;
13265   cp_declarator *abstract_declarator;
13266
13267   /* Parse the type-specifier-seq.  */
13268   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
13269                                 &type_specifier_seq);
13270   if (type_specifier_seq.type == error_mark_node)
13271     return error_mark_node;
13272
13273   /* There might or might not be an abstract declarator.  */
13274   cp_parser_parse_tentatively (parser);
13275   /* Look for the declarator.  */
13276   abstract_declarator
13277     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
13278                             /*parenthesized_p=*/NULL,
13279                             /*member_p=*/false);
13280   /* Check to see if there really was a declarator.  */
13281   if (!cp_parser_parse_definitely (parser))
13282     abstract_declarator = NULL;
13283
13284   return groktypename (&type_specifier_seq, abstract_declarator);
13285 }
13286
13287 /* Parse a type-specifier-seq.
13288
13289    type-specifier-seq:
13290      type-specifier type-specifier-seq [opt]
13291
13292    GNU extension:
13293
13294    type-specifier-seq:
13295      attributes type-specifier-seq [opt]
13296
13297    If IS_CONDITION is true, we are at the start of a "condition",
13298    e.g., we've just seen "if (".
13299
13300    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
13301
13302 static void
13303 cp_parser_type_specifier_seq (cp_parser* parser,
13304                               bool is_condition,
13305                               cp_decl_specifier_seq *type_specifier_seq)
13306 {
13307   bool seen_type_specifier = false;
13308   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
13309
13310   /* Clear the TYPE_SPECIFIER_SEQ.  */
13311   clear_decl_specs (type_specifier_seq);
13312
13313   /* Parse the type-specifiers and attributes.  */
13314   while (true)
13315     {
13316       tree type_specifier;
13317       bool is_cv_qualifier;
13318
13319       /* Check for attributes first.  */
13320       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
13321         {
13322           type_specifier_seq->attributes =
13323             chainon (type_specifier_seq->attributes,
13324                      cp_parser_attributes_opt (parser));
13325           continue;
13326         }
13327
13328       /* Look for the type-specifier.  */
13329       type_specifier = cp_parser_type_specifier (parser,
13330                                                  flags,
13331                                                  type_specifier_seq,
13332                                                  /*is_declaration=*/false,
13333                                                  NULL,
13334                                                  &is_cv_qualifier);
13335       if (!type_specifier)
13336         {
13337           /* If the first type-specifier could not be found, this is not a
13338              type-specifier-seq at all.  */
13339           if (!seen_type_specifier)
13340             {
13341               cp_parser_error (parser, "expected type-specifier");
13342               type_specifier_seq->type = error_mark_node;
13343               return;
13344             }
13345           /* If subsequent type-specifiers could not be found, the
13346              type-specifier-seq is complete.  */
13347           break;
13348         }
13349
13350       seen_type_specifier = true;
13351       /* The standard says that a condition can be:
13352
13353             type-specifier-seq declarator = assignment-expression
13354
13355          However, given:
13356
13357            struct S {};
13358            if (int S = ...)
13359
13360          we should treat the "S" as a declarator, not as a
13361          type-specifier.  The standard doesn't say that explicitly for
13362          type-specifier-seq, but it does say that for
13363          decl-specifier-seq in an ordinary declaration.  Perhaps it
13364          would be clearer just to allow a decl-specifier-seq here, and
13365          then add a semantic restriction that if any decl-specifiers
13366          that are not type-specifiers appear, the program is invalid.  */
13367       if (is_condition && !is_cv_qualifier)
13368         flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
13369     }
13370
13371   cp_parser_check_decl_spec (type_specifier_seq);
13372 }
13373
13374 /* Parse a parameter-declaration-clause.
13375
13376    parameter-declaration-clause:
13377      parameter-declaration-list [opt] ... [opt]
13378      parameter-declaration-list , ...
13379
13380    Returns a representation for the parameter declarations.  A return
13381    value of NULL indicates a parameter-declaration-clause consisting
13382    only of an ellipsis.  */
13383
13384 static cp_parameter_declarator *
13385 cp_parser_parameter_declaration_clause (cp_parser* parser)
13386 {
13387   cp_parameter_declarator *parameters;
13388   cp_token *token;
13389   bool ellipsis_p;
13390   bool is_error;
13391
13392   /* Peek at the next token.  */
13393   token = cp_lexer_peek_token (parser->lexer);
13394   /* Check for trivial parameter-declaration-clauses.  */
13395   if (token->type == CPP_ELLIPSIS)
13396     {
13397       /* Consume the `...' token.  */
13398       cp_lexer_consume_token (parser->lexer);
13399       return NULL;
13400     }
13401   else if (token->type == CPP_CLOSE_PAREN)
13402     /* There are no parameters.  */
13403     {
13404 #ifndef NO_IMPLICIT_EXTERN_C
13405       if (in_system_header && current_class_type == NULL
13406           && current_lang_name == lang_name_c)
13407         return NULL;
13408       else
13409 #endif
13410         return no_parameters;
13411     }
13412   /* Check for `(void)', too, which is a special case.  */
13413   else if (token->keyword == RID_VOID
13414            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
13415                == CPP_CLOSE_PAREN))
13416     {
13417       /* Consume the `void' token.  */
13418       cp_lexer_consume_token (parser->lexer);
13419       /* There are no parameters.  */
13420       return no_parameters;
13421     }
13422
13423   /* Parse the parameter-declaration-list.  */
13424   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
13425   /* If a parse error occurred while parsing the
13426      parameter-declaration-list, then the entire
13427      parameter-declaration-clause is erroneous.  */
13428   if (is_error)
13429     return NULL;
13430
13431   /* Peek at the next token.  */
13432   token = cp_lexer_peek_token (parser->lexer);
13433   /* If it's a `,', the clause should terminate with an ellipsis.  */
13434   if (token->type == CPP_COMMA)
13435     {
13436       /* Consume the `,'.  */
13437       cp_lexer_consume_token (parser->lexer);
13438       /* Expect an ellipsis.  */
13439       ellipsis_p
13440         = (cp_parser_require (parser, CPP_ELLIPSIS, "%<...%>") != NULL);
13441     }
13442   /* It might also be `...' if the optional trailing `,' was
13443      omitted.  */
13444   else if (token->type == CPP_ELLIPSIS)
13445     {
13446       /* Consume the `...' token.  */
13447       cp_lexer_consume_token (parser->lexer);
13448       /* And remember that we saw it.  */
13449       ellipsis_p = true;
13450     }
13451   else
13452     ellipsis_p = false;
13453
13454   /* Finish the parameter list.  */
13455   if (parameters && ellipsis_p)
13456     parameters->ellipsis_p = true;
13457
13458   return parameters;
13459 }
13460
13461 /* Parse a parameter-declaration-list.
13462
13463    parameter-declaration-list:
13464      parameter-declaration
13465      parameter-declaration-list , parameter-declaration
13466
13467    Returns a representation of the parameter-declaration-list, as for
13468    cp_parser_parameter_declaration_clause.  However, the
13469    `void_list_node' is never appended to the list.  Upon return,
13470    *IS_ERROR will be true iff an error occurred.  */
13471
13472 static cp_parameter_declarator *
13473 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
13474 {
13475   cp_parameter_declarator *parameters = NULL;
13476   cp_parameter_declarator **tail = &parameters;
13477   bool saved_in_unbraced_linkage_specification_p;
13478
13479   /* Assume all will go well.  */
13480   *is_error = false;
13481   /* The special considerations that apply to a function within an
13482      unbraced linkage specifications do not apply to the parameters
13483      to the function.  */
13484   saved_in_unbraced_linkage_specification_p 
13485     = parser->in_unbraced_linkage_specification_p;
13486   parser->in_unbraced_linkage_specification_p = false;
13487
13488   /* Look for more parameters.  */
13489   while (true)
13490     {
13491       cp_parameter_declarator *parameter;
13492       bool parenthesized_p;
13493       /* Parse the parameter.  */
13494       parameter
13495         = cp_parser_parameter_declaration (parser,
13496                                            /*template_parm_p=*/false,
13497                                            &parenthesized_p);
13498
13499       /* If a parse error occurred parsing the parameter declaration,
13500          then the entire parameter-declaration-list is erroneous.  */
13501       if (!parameter)
13502         {
13503           *is_error = true;
13504           parameters = NULL;
13505           break;
13506         }
13507       /* Add the new parameter to the list.  */
13508       *tail = parameter;
13509       tail = &parameter->next;
13510
13511       /* Peek at the next token.  */
13512       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
13513           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
13514           /* These are for Objective-C++ */
13515           || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
13516           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
13517         /* The parameter-declaration-list is complete.  */
13518         break;
13519       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
13520         {
13521           cp_token *token;
13522
13523           /* Peek at the next token.  */
13524           token = cp_lexer_peek_nth_token (parser->lexer, 2);
13525           /* If it's an ellipsis, then the list is complete.  */
13526           if (token->type == CPP_ELLIPSIS)
13527             break;
13528           /* Otherwise, there must be more parameters.  Consume the
13529              `,'.  */
13530           cp_lexer_consume_token (parser->lexer);
13531           /* When parsing something like:
13532
13533                 int i(float f, double d)
13534
13535              we can tell after seeing the declaration for "f" that we
13536              are not looking at an initialization of a variable "i",
13537              but rather at the declaration of a function "i".
13538
13539              Due to the fact that the parsing of template arguments
13540              (as specified to a template-id) requires backtracking we
13541              cannot use this technique when inside a template argument
13542              list.  */
13543           if (!parser->in_template_argument_list_p
13544               && !parser->in_type_id_in_expr_p
13545               && cp_parser_uncommitted_to_tentative_parse_p (parser)
13546               /* However, a parameter-declaration of the form
13547                  "foat(f)" (which is a valid declaration of a
13548                  parameter "f") can also be interpreted as an
13549                  expression (the conversion of "f" to "float").  */
13550               && !parenthesized_p)
13551             cp_parser_commit_to_tentative_parse (parser);
13552         }
13553       else
13554         {
13555           cp_parser_error (parser, "expected %<,%> or %<...%>");
13556           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
13557             cp_parser_skip_to_closing_parenthesis (parser,
13558                                                    /*recovering=*/true,
13559                                                    /*or_comma=*/false,
13560                                                    /*consume_paren=*/false);
13561           break;
13562         }
13563     }
13564
13565   parser->in_unbraced_linkage_specification_p
13566     = saved_in_unbraced_linkage_specification_p;
13567
13568   return parameters;
13569 }
13570
13571 /* Parse a parameter declaration.
13572
13573    parameter-declaration:
13574      decl-specifier-seq ... [opt] declarator
13575      decl-specifier-seq declarator = assignment-expression
13576      decl-specifier-seq ... [opt] abstract-declarator [opt]
13577      decl-specifier-seq abstract-declarator [opt] = assignment-expression
13578
13579    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
13580    declares a template parameter.  (In that case, a non-nested `>'
13581    token encountered during the parsing of the assignment-expression
13582    is not interpreted as a greater-than operator.)
13583
13584    Returns a representation of the parameter, or NULL if an error
13585    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
13586    true iff the declarator is of the form "(p)".  */
13587
13588 static cp_parameter_declarator *
13589 cp_parser_parameter_declaration (cp_parser *parser,
13590                                  bool template_parm_p,
13591                                  bool *parenthesized_p)
13592 {
13593   int declares_class_or_enum;
13594   bool greater_than_is_operator_p;
13595   cp_decl_specifier_seq decl_specifiers;
13596   cp_declarator *declarator;
13597   tree default_argument;
13598   cp_token *token;
13599   const char *saved_message;
13600
13601   /* In a template parameter, `>' is not an operator.
13602
13603      [temp.param]
13604
13605      When parsing a default template-argument for a non-type
13606      template-parameter, the first non-nested `>' is taken as the end
13607      of the template parameter-list rather than a greater-than
13608      operator.  */
13609   greater_than_is_operator_p = !template_parm_p;
13610
13611   /* Type definitions may not appear in parameter types.  */
13612   saved_message = parser->type_definition_forbidden_message;
13613   parser->type_definition_forbidden_message
13614     = "types may not be defined in parameter types";
13615
13616   /* Parse the declaration-specifiers.  */
13617   cp_parser_decl_specifier_seq (parser,
13618                                 CP_PARSER_FLAGS_NONE,
13619                                 &decl_specifiers,
13620                                 &declares_class_or_enum);
13621   /* If an error occurred, there's no reason to attempt to parse the
13622      rest of the declaration.  */
13623   if (cp_parser_error_occurred (parser))
13624     {
13625       parser->type_definition_forbidden_message = saved_message;
13626       return NULL;
13627     }
13628
13629   /* Peek at the next token.  */
13630   token = cp_lexer_peek_token (parser->lexer);
13631
13632   /* If the next token is a `)', `,', `=', `>', or `...', then there
13633      is no declarator. However, when variadic templates are enabled,
13634      there may be a declarator following `...'.  */
13635   if (token->type == CPP_CLOSE_PAREN
13636       || token->type == CPP_COMMA
13637       || token->type == CPP_EQ
13638       || token->type == CPP_GREATER)
13639     {
13640       declarator = NULL;
13641       if (parenthesized_p)
13642         *parenthesized_p = false;
13643     }
13644   /* Otherwise, there should be a declarator.  */
13645   else
13646     {
13647       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
13648       parser->default_arg_ok_p = false;
13649
13650       /* After seeing a decl-specifier-seq, if the next token is not a
13651          "(", there is no possibility that the code is a valid
13652          expression.  Therefore, if parsing tentatively, we commit at
13653          this point.  */
13654       if (!parser->in_template_argument_list_p
13655           /* In an expression context, having seen:
13656
13657                (int((char ...
13658
13659              we cannot be sure whether we are looking at a
13660              function-type (taking a "char" as a parameter) or a cast
13661              of some object of type "char" to "int".  */
13662           && !parser->in_type_id_in_expr_p
13663           && cp_parser_uncommitted_to_tentative_parse_p (parser)
13664           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
13665         cp_parser_commit_to_tentative_parse (parser);
13666       /* Parse the declarator.  */
13667       declarator = cp_parser_declarator (parser,
13668                                          CP_PARSER_DECLARATOR_EITHER,
13669                                          /*ctor_dtor_or_conv_p=*/NULL,
13670                                          parenthesized_p,
13671                                          /*member_p=*/false);
13672       parser->default_arg_ok_p = saved_default_arg_ok_p;
13673       /* After the declarator, allow more attributes.  */
13674       decl_specifiers.attributes
13675         = chainon (decl_specifiers.attributes,
13676                    cp_parser_attributes_opt (parser));
13677     }
13678
13679   /* If the next token is an ellipsis, and we have not seen a
13680      declarator name, and the type of the declarator contains parameter
13681      packs but it is not a TYPE_PACK_EXPANSION, then we actually have
13682      a parameter pack expansion expression. Otherwise, leave the
13683      ellipsis for a C-style variadic function. */
13684   token = cp_lexer_peek_token (parser->lexer);
13685   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
13686     {
13687       tree type = decl_specifiers.type;
13688
13689       if (type && DECL_P (type))
13690         type = TREE_TYPE (type);
13691
13692       if (type
13693           && TREE_CODE (type) != TYPE_PACK_EXPANSION
13694           && declarator_can_be_parameter_pack (declarator)
13695           && (!declarator || !declarator->parameter_pack_p)
13696           && uses_parameter_packs (type))
13697         {
13698           /* Consume the `...'. */
13699           cp_lexer_consume_token (parser->lexer);
13700           maybe_warn_variadic_templates ();
13701           
13702           /* Build a pack expansion type */
13703           if (declarator)
13704             declarator->parameter_pack_p = true;
13705           else
13706             decl_specifiers.type = make_pack_expansion (type);
13707         }
13708     }
13709
13710   /* The restriction on defining new types applies only to the type
13711      of the parameter, not to the default argument.  */
13712   parser->type_definition_forbidden_message = saved_message;
13713
13714   /* If the next token is `=', then process a default argument.  */
13715   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
13716     {
13717       /* Consume the `='.  */
13718       cp_lexer_consume_token (parser->lexer);
13719
13720       /* If we are defining a class, then the tokens that make up the
13721          default argument must be saved and processed later.  */
13722       if (!template_parm_p && at_class_scope_p ()
13723           && TYPE_BEING_DEFINED (current_class_type))
13724         {
13725           unsigned depth = 0;
13726           int maybe_template_id = 0;
13727           cp_token *first_token;
13728           cp_token *token;
13729
13730           /* Add tokens until we have processed the entire default
13731              argument.  We add the range [first_token, token).  */
13732           first_token = cp_lexer_peek_token (parser->lexer);
13733           while (true)
13734             {
13735               bool done = false;
13736
13737               /* Peek at the next token.  */
13738               token = cp_lexer_peek_token (parser->lexer);
13739               /* What we do depends on what token we have.  */
13740               switch (token->type)
13741                 {
13742                   /* In valid code, a default argument must be
13743                      immediately followed by a `,' `)', or `...'.  */
13744                 case CPP_COMMA:
13745                   if (depth == 0 && maybe_template_id)
13746                     {
13747                       /* If we've seen a '<', we might be in a
13748                          template-argument-list.  Until Core issue 325 is
13749                          resolved, we don't know how this situation ought
13750                          to be handled, so try to DTRT.  We check whether
13751                          what comes after the comma is a valid parameter
13752                          declaration list.  If it is, then the comma ends
13753                          the default argument; otherwise the default
13754                          argument continues.  */
13755                       bool error = false;
13756
13757                       /* Set ITALP so cp_parser_parameter_declaration_list
13758                          doesn't decide to commit to this parse.  */
13759                       bool saved_italp = parser->in_template_argument_list_p;
13760                       parser->in_template_argument_list_p = true;
13761
13762                       cp_parser_parse_tentatively (parser);
13763                       cp_lexer_consume_token (parser->lexer);
13764                       cp_parser_parameter_declaration_list (parser, &error);
13765                       if (!cp_parser_error_occurred (parser) && !error)
13766                         done = true;
13767                       cp_parser_abort_tentative_parse (parser);
13768
13769                       parser->in_template_argument_list_p = saved_italp;
13770                       break;
13771                     }
13772                 case CPP_CLOSE_PAREN:
13773                 case CPP_ELLIPSIS:
13774                   /* If we run into a non-nested `;', `}', or `]',
13775                      then the code is invalid -- but the default
13776                      argument is certainly over.  */
13777                 case CPP_SEMICOLON:
13778                 case CPP_CLOSE_BRACE:
13779                 case CPP_CLOSE_SQUARE:
13780                   if (depth == 0)
13781                     done = true;
13782                   /* Update DEPTH, if necessary.  */
13783                   else if (token->type == CPP_CLOSE_PAREN
13784                            || token->type == CPP_CLOSE_BRACE
13785                            || token->type == CPP_CLOSE_SQUARE)
13786                     --depth;
13787                   break;
13788
13789                 case CPP_OPEN_PAREN:
13790                 case CPP_OPEN_SQUARE:
13791                 case CPP_OPEN_BRACE:
13792                   ++depth;
13793                   break;
13794
13795                 case CPP_LESS:
13796                   if (depth == 0)
13797                     /* This might be the comparison operator, or it might
13798                        start a template argument list.  */
13799                     ++maybe_template_id;
13800                   break;
13801
13802                 case CPP_RSHIFT:
13803                   if (cxx_dialect == cxx98)
13804                     break;
13805                   /* Fall through for C++0x, which treats the `>>'
13806                      operator like two `>' tokens in certain
13807                      cases.  */
13808
13809                 case CPP_GREATER:
13810                   if (depth == 0)
13811                     {
13812                       /* This might be an operator, or it might close a
13813                          template argument list.  But if a previous '<'
13814                          started a template argument list, this will have
13815                          closed it, so we can't be in one anymore.  */
13816                       maybe_template_id -= 1 + (token->type == CPP_RSHIFT);
13817                       if (maybe_template_id < 0)
13818                         maybe_template_id = 0;
13819                     }
13820                   break;
13821
13822                   /* If we run out of tokens, issue an error message.  */
13823                 case CPP_EOF:
13824                 case CPP_PRAGMA_EOL:
13825                   error ("file ends in default argument");
13826                   done = true;
13827                   break;
13828
13829                 case CPP_NAME:
13830                 case CPP_SCOPE:
13831                   /* In these cases, we should look for template-ids.
13832                      For example, if the default argument is
13833                      `X<int, double>()', we need to do name lookup to
13834                      figure out whether or not `X' is a template; if
13835                      so, the `,' does not end the default argument.
13836
13837                      That is not yet done.  */
13838                   break;
13839
13840                 default:
13841                   break;
13842                 }
13843
13844               /* If we've reached the end, stop.  */
13845               if (done)
13846                 break;
13847
13848               /* Add the token to the token block.  */
13849               token = cp_lexer_consume_token (parser->lexer);
13850             }
13851
13852           /* Create a DEFAULT_ARG to represent the unparsed default
13853              argument.  */
13854           default_argument = make_node (DEFAULT_ARG);
13855           DEFARG_TOKENS (default_argument)
13856             = cp_token_cache_new (first_token, token);
13857           DEFARG_INSTANTIATIONS (default_argument) = NULL;
13858         }
13859       /* Outside of a class definition, we can just parse the
13860          assignment-expression.  */
13861       else
13862         default_argument 
13863           = cp_parser_default_argument (parser, template_parm_p);
13864
13865       if (!parser->default_arg_ok_p)
13866         {
13867           if (!flag_pedantic_errors)
13868             warning (0, "deprecated use of default argument for parameter of non-function");
13869           else
13870             {
13871               error ("default arguments are only permitted for function parameters");
13872               default_argument = NULL_TREE;
13873             }
13874         }
13875       else if ((declarator && declarator->parameter_pack_p)
13876                || (decl_specifiers.type
13877                    && PACK_EXPANSION_P (decl_specifiers.type)))
13878         {
13879           const char* kind = template_parm_p? "template " : "";
13880           
13881           /* Find the name of the parameter pack.  */     
13882           cp_declarator *id_declarator = declarator;
13883           while (id_declarator && id_declarator->kind != cdk_id)
13884             id_declarator = id_declarator->declarator;
13885           
13886           if (id_declarator && id_declarator->kind == cdk_id)
13887             error ("%sparameter pack %qD cannot have a default argument",
13888                    kind, id_declarator->u.id.unqualified_name);
13889           else
13890             error ("%sparameter pack cannot have a default argument",
13891                    kind);
13892           
13893           default_argument = NULL_TREE;
13894         }
13895     }
13896   else
13897     default_argument = NULL_TREE;
13898
13899   return make_parameter_declarator (&decl_specifiers,
13900                                     declarator,
13901                                     default_argument);
13902 }
13903
13904 /* Parse a default argument and return it.
13905
13906    TEMPLATE_PARM_P is true if this is a default argument for a
13907    non-type template parameter.  */
13908 static tree
13909 cp_parser_default_argument (cp_parser *parser, bool template_parm_p)
13910 {
13911   tree default_argument = NULL_TREE;
13912   bool saved_greater_than_is_operator_p;
13913   bool saved_local_variables_forbidden_p;
13914
13915   /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
13916      set correctly.  */
13917   saved_greater_than_is_operator_p = parser->greater_than_is_operator_p;
13918   parser->greater_than_is_operator_p = !template_parm_p;
13919   /* Local variable names (and the `this' keyword) may not
13920      appear in a default argument.  */
13921   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
13922   parser->local_variables_forbidden_p = true;
13923   /* The default argument expression may cause implicitly
13924      defined member functions to be synthesized, which will
13925      result in garbage collection.  We must treat this
13926      situation as if we were within the body of function so as
13927      to avoid collecting live data on the stack.  */
13928   ++function_depth;
13929   /* Parse the assignment-expression.  */
13930   if (template_parm_p)
13931     push_deferring_access_checks (dk_no_deferred);
13932   default_argument
13933     = cp_parser_assignment_expression (parser, /*cast_p=*/false);
13934   if (template_parm_p)
13935     pop_deferring_access_checks ();
13936   /* Restore saved state.  */
13937   --function_depth;
13938   parser->greater_than_is_operator_p = saved_greater_than_is_operator_p;
13939   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
13940
13941   return default_argument;
13942 }
13943
13944 /* Parse a function-body.
13945
13946    function-body:
13947      compound_statement  */
13948
13949 static void
13950 cp_parser_function_body (cp_parser *parser)
13951 {
13952   cp_parser_compound_statement (parser, NULL, false);
13953 }
13954
13955 /* Parse a ctor-initializer-opt followed by a function-body.  Return
13956    true if a ctor-initializer was present.  */
13957
13958 static bool
13959 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
13960 {
13961   tree body;
13962   bool ctor_initializer_p;
13963
13964   /* Begin the function body.  */
13965   body = begin_function_body ();
13966   /* Parse the optional ctor-initializer.  */
13967   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
13968   /* Parse the function-body.  */
13969   cp_parser_function_body (parser);
13970   /* Finish the function body.  */
13971   finish_function_body (body);
13972
13973   return ctor_initializer_p;
13974 }
13975
13976 /* Parse an initializer.
13977
13978    initializer:
13979      = initializer-clause
13980      ( expression-list )
13981
13982    Returns an expression representing the initializer.  If no
13983    initializer is present, NULL_TREE is returned.
13984
13985    *IS_PARENTHESIZED_INIT is set to TRUE if the `( expression-list )'
13986    production is used, and zero otherwise.  *IS_PARENTHESIZED_INIT is
13987    set to FALSE if there is no initializer present.  If there is an
13988    initializer, and it is not a constant-expression, *NON_CONSTANT_P
13989    is set to true; otherwise it is set to false.  */
13990
13991 static tree
13992 cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init,
13993                        bool* non_constant_p)
13994 {
13995   cp_token *token;
13996   tree init;
13997
13998   /* Peek at the next token.  */
13999   token = cp_lexer_peek_token (parser->lexer);
14000
14001   /* Let our caller know whether or not this initializer was
14002      parenthesized.  */
14003   *is_parenthesized_init = (token->type == CPP_OPEN_PAREN);
14004   /* Assume that the initializer is constant.  */
14005   *non_constant_p = false;
14006
14007   if (token->type == CPP_EQ)
14008     {
14009       /* Consume the `='.  */
14010       cp_lexer_consume_token (parser->lexer);
14011       /* Parse the initializer-clause.  */
14012       init = cp_parser_initializer_clause (parser, non_constant_p);
14013     }
14014   else if (token->type == CPP_OPEN_PAREN)
14015     init = cp_parser_parenthesized_expression_list (parser, false,
14016                                                     /*cast_p=*/false,
14017                                                     /*allow_expansion_p=*/true,
14018                                                     non_constant_p);
14019   else
14020     {
14021       /* Anything else is an error.  */
14022       cp_parser_error (parser, "expected initializer");
14023       init = error_mark_node;
14024     }
14025
14026   return init;
14027 }
14028
14029 /* Parse an initializer-clause.
14030
14031    initializer-clause:
14032      assignment-expression
14033      { initializer-list , [opt] }
14034      { }
14035
14036    Returns an expression representing the initializer.
14037
14038    If the `assignment-expression' production is used the value
14039    returned is simply a representation for the expression.
14040
14041    Otherwise, a CONSTRUCTOR is returned.  The CONSTRUCTOR_ELTS will be
14042    the elements of the initializer-list (or NULL, if the last
14043    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
14044    NULL_TREE.  There is no way to detect whether or not the optional
14045    trailing `,' was provided.  NON_CONSTANT_P is as for
14046    cp_parser_initializer.  */
14047
14048 static tree
14049 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
14050 {
14051   tree initializer;
14052
14053   /* Assume the expression is constant.  */
14054   *non_constant_p = false;
14055
14056   /* If it is not a `{', then we are looking at an
14057      assignment-expression.  */
14058   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
14059     {
14060       initializer
14061         = cp_parser_constant_expression (parser,
14062                                         /*allow_non_constant_p=*/true,
14063                                         non_constant_p);
14064       if (!*non_constant_p)
14065         initializer = fold_non_dependent_expr (initializer);
14066     }
14067   else
14068     {
14069       /* Consume the `{' token.  */
14070       cp_lexer_consume_token (parser->lexer);
14071       /* Create a CONSTRUCTOR to represent the braced-initializer.  */
14072       initializer = make_node (CONSTRUCTOR);
14073       /* If it's not a `}', then there is a non-trivial initializer.  */
14074       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
14075         {
14076           /* Parse the initializer list.  */
14077           CONSTRUCTOR_ELTS (initializer)
14078             = cp_parser_initializer_list (parser, non_constant_p);
14079           /* A trailing `,' token is allowed.  */
14080           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
14081             cp_lexer_consume_token (parser->lexer);
14082         }
14083       /* Now, there should be a trailing `}'.  */
14084       cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
14085     }
14086
14087   return initializer;
14088 }
14089
14090 /* Parse an initializer-list.
14091
14092    initializer-list:
14093      initializer-clause ... [opt]
14094      initializer-list , initializer-clause ... [opt]
14095
14096    GNU Extension:
14097
14098    initializer-list:
14099      identifier : initializer-clause
14100      initializer-list, identifier : initializer-clause
14101
14102    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
14103    for the initializer.  If the INDEX of the elt is non-NULL, it is the
14104    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
14105    as for cp_parser_initializer.  */
14106
14107 static VEC(constructor_elt,gc) *
14108 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
14109 {
14110   VEC(constructor_elt,gc) *v = NULL;
14111
14112   /* Assume all of the expressions are constant.  */
14113   *non_constant_p = false;
14114
14115   /* Parse the rest of the list.  */
14116   while (true)
14117     {
14118       cp_token *token;
14119       tree identifier;
14120       tree initializer;
14121       bool clause_non_constant_p;
14122
14123       /* If the next token is an identifier and the following one is a
14124          colon, we are looking at the GNU designated-initializer
14125          syntax.  */
14126       if (cp_parser_allow_gnu_extensions_p (parser)
14127           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
14128           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
14129         {
14130           /* Warn the user that they are using an extension.  */
14131           if (pedantic)
14132             pedwarn ("ISO C++ does not allow designated initializers");
14133           /* Consume the identifier.  */
14134           identifier = cp_lexer_consume_token (parser->lexer)->u.value;
14135           /* Consume the `:'.  */
14136           cp_lexer_consume_token (parser->lexer);
14137         }
14138       else
14139         identifier = NULL_TREE;
14140
14141       /* Parse the initializer.  */
14142       initializer = cp_parser_initializer_clause (parser,
14143                                                   &clause_non_constant_p);
14144       /* If any clause is non-constant, so is the entire initializer.  */
14145       if (clause_non_constant_p)
14146         *non_constant_p = true;
14147
14148       /* If we have an ellipsis, this is an initializer pack
14149          expansion.  */
14150       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
14151         {
14152           /* Consume the `...'.  */
14153           cp_lexer_consume_token (parser->lexer);
14154
14155           /* Turn the initializer into an initializer expansion.  */
14156           initializer = make_pack_expansion (initializer);
14157         }
14158
14159       /* Add it to the vector.  */
14160       CONSTRUCTOR_APPEND_ELT(v, identifier, initializer);
14161
14162       /* If the next token is not a comma, we have reached the end of
14163          the list.  */
14164       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14165         break;
14166
14167       /* Peek at the next token.  */
14168       token = cp_lexer_peek_nth_token (parser->lexer, 2);
14169       /* If the next token is a `}', then we're still done.  An
14170          initializer-clause can have a trailing `,' after the
14171          initializer-list and before the closing `}'.  */
14172       if (token->type == CPP_CLOSE_BRACE)
14173         break;
14174
14175       /* Consume the `,' token.  */
14176       cp_lexer_consume_token (parser->lexer);
14177     }
14178
14179   return v;
14180 }
14181
14182 /* Classes [gram.class] */
14183
14184 /* Parse a class-name.
14185
14186    class-name:
14187      identifier
14188      template-id
14189
14190    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
14191    to indicate that names looked up in dependent types should be
14192    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
14193    keyword has been used to indicate that the name that appears next
14194    is a template.  TAG_TYPE indicates the explicit tag given before
14195    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
14196    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
14197    is the class being defined in a class-head.
14198
14199    Returns the TYPE_DECL representing the class.  */
14200
14201 static tree
14202 cp_parser_class_name (cp_parser *parser,
14203                       bool typename_keyword_p,
14204                       bool template_keyword_p,
14205                       enum tag_types tag_type,
14206                       bool check_dependency_p,
14207                       bool class_head_p,
14208                       bool is_declaration)
14209 {
14210   tree decl;
14211   tree scope;
14212   bool typename_p;
14213   cp_token *token;
14214
14215   /* All class-names start with an identifier.  */
14216   token = cp_lexer_peek_token (parser->lexer);
14217   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
14218     {
14219       cp_parser_error (parser, "expected class-name");
14220       return error_mark_node;
14221     }
14222
14223   /* PARSER->SCOPE can be cleared when parsing the template-arguments
14224      to a template-id, so we save it here.  */
14225   scope = parser->scope;
14226   if (scope == error_mark_node)
14227     return error_mark_node;
14228
14229   /* Any name names a type if we're following the `typename' keyword
14230      in a qualified name where the enclosing scope is type-dependent.  */
14231   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
14232                 && dependent_type_p (scope));
14233   /* Handle the common case (an identifier, but not a template-id)
14234      efficiently.  */
14235   if (token->type == CPP_NAME
14236       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
14237     {
14238       cp_token *identifier_token;
14239       tree identifier;
14240       bool ambiguous_p;
14241
14242       /* Look for the identifier.  */
14243       identifier_token = cp_lexer_peek_token (parser->lexer);
14244       ambiguous_p = identifier_token->ambiguous_p;
14245       identifier = cp_parser_identifier (parser);
14246       /* If the next token isn't an identifier, we are certainly not
14247          looking at a class-name.  */
14248       if (identifier == error_mark_node)
14249         decl = error_mark_node;
14250       /* If we know this is a type-name, there's no need to look it
14251          up.  */
14252       else if (typename_p)
14253         decl = identifier;
14254       else
14255         {
14256           tree ambiguous_decls;
14257           /* If we already know that this lookup is ambiguous, then
14258              we've already issued an error message; there's no reason
14259              to check again.  */
14260           if (ambiguous_p)
14261             {
14262               cp_parser_simulate_error (parser);
14263               return error_mark_node;
14264             }
14265           /* If the next token is a `::', then the name must be a type
14266              name.
14267
14268              [basic.lookup.qual]
14269
14270              During the lookup for a name preceding the :: scope
14271              resolution operator, object, function, and enumerator
14272              names are ignored.  */
14273           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
14274             tag_type = typename_type;
14275           /* Look up the name.  */
14276           decl = cp_parser_lookup_name (parser, identifier,
14277                                         tag_type,
14278                                         /*is_template=*/false,
14279                                         /*is_namespace=*/false,
14280                                         check_dependency_p,
14281                                         &ambiguous_decls);
14282           if (ambiguous_decls)
14283             {
14284               error ("reference to %qD is ambiguous", identifier);
14285               print_candidates (ambiguous_decls);
14286               if (cp_parser_parsing_tentatively (parser))
14287                 {
14288                   identifier_token->ambiguous_p = true;
14289                   cp_parser_simulate_error (parser);
14290                 }
14291               return error_mark_node;
14292             }
14293         }
14294     }
14295   else
14296     {
14297       /* Try a template-id.  */
14298       decl = cp_parser_template_id (parser, template_keyword_p,
14299                                     check_dependency_p,
14300                                     is_declaration);
14301       if (decl == error_mark_node)
14302         return error_mark_node;
14303     }
14304
14305   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
14306
14307   /* If this is a typename, create a TYPENAME_TYPE.  */
14308   if (typename_p && decl != error_mark_node)
14309     {
14310       decl = make_typename_type (scope, decl, typename_type,
14311                                  /*complain=*/tf_error);
14312       if (decl != error_mark_node)
14313         decl = TYPE_NAME (decl);
14314     }
14315
14316   /* Check to see that it is really the name of a class.  */
14317   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
14318       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
14319       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
14320     /* Situations like this:
14321
14322          template <typename T> struct A {
14323            typename T::template X<int>::I i;
14324          };
14325
14326        are problematic.  Is `T::template X<int>' a class-name?  The
14327        standard does not seem to be definitive, but there is no other
14328        valid interpretation of the following `::'.  Therefore, those
14329        names are considered class-names.  */
14330     {
14331       decl = make_typename_type (scope, decl, tag_type, tf_error);
14332       if (decl != error_mark_node)
14333         decl = TYPE_NAME (decl);
14334     }
14335   else if (TREE_CODE (decl) != TYPE_DECL
14336            || TREE_TYPE (decl) == error_mark_node
14337            || !MAYBE_CLASS_TYPE_P (TREE_TYPE (decl)))
14338     decl = error_mark_node;
14339
14340   if (decl == error_mark_node)
14341     cp_parser_error (parser, "expected class-name");
14342
14343   return decl;
14344 }
14345
14346 /* Parse a class-specifier.
14347
14348    class-specifier:
14349      class-head { member-specification [opt] }
14350
14351    Returns the TREE_TYPE representing the class.  */
14352
14353 static tree
14354 cp_parser_class_specifier (cp_parser* parser)
14355 {
14356   cp_token *token;
14357   tree type;
14358   tree attributes = NULL_TREE;
14359   int has_trailing_semicolon;
14360   bool nested_name_specifier_p;
14361   unsigned saved_num_template_parameter_lists;
14362   bool saved_in_function_body;
14363   tree old_scope = NULL_TREE;
14364   tree scope = NULL_TREE;
14365   tree bases;
14366
14367   push_deferring_access_checks (dk_no_deferred);
14368
14369   /* Parse the class-head.  */
14370   type = cp_parser_class_head (parser,
14371                                &nested_name_specifier_p,
14372                                &attributes,
14373                                &bases);
14374   /* If the class-head was a semantic disaster, skip the entire body
14375      of the class.  */
14376   if (!type)
14377     {
14378       cp_parser_skip_to_end_of_block_or_statement (parser);
14379       pop_deferring_access_checks ();
14380       return error_mark_node;
14381     }
14382
14383   /* Look for the `{'.  */
14384   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>"))
14385     {
14386       pop_deferring_access_checks ();
14387       return error_mark_node;
14388     }
14389
14390   /* Process the base classes. If they're invalid, skip the 
14391      entire class body.  */
14392   if (!xref_basetypes (type, bases))
14393     {
14394       /* Consuming the closing brace yields better error messages
14395          later on.  */
14396       if (cp_parser_skip_to_closing_brace (parser))
14397         cp_lexer_consume_token (parser->lexer);
14398       pop_deferring_access_checks ();
14399       return error_mark_node;
14400     }
14401
14402   /* Issue an error message if type-definitions are forbidden here.  */
14403   cp_parser_check_type_definition (parser);
14404   /* Remember that we are defining one more class.  */
14405   ++parser->num_classes_being_defined;
14406   /* Inside the class, surrounding template-parameter-lists do not
14407      apply.  */
14408   saved_num_template_parameter_lists
14409     = parser->num_template_parameter_lists;
14410   parser->num_template_parameter_lists = 0;
14411   /* We are not in a function body.  */
14412   saved_in_function_body = parser->in_function_body;
14413   parser->in_function_body = false;
14414
14415   /* Start the class.  */
14416   if (nested_name_specifier_p)
14417     {
14418       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
14419       old_scope = push_inner_scope (scope);
14420     }
14421   type = begin_class_definition (type, attributes);
14422
14423   if (type == error_mark_node)
14424     /* If the type is erroneous, skip the entire body of the class.  */
14425     cp_parser_skip_to_closing_brace (parser);
14426   else
14427     /* Parse the member-specification.  */
14428     cp_parser_member_specification_opt (parser);
14429
14430   /* Look for the trailing `}'.  */
14431   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
14432   /* We get better error messages by noticing a common problem: a
14433      missing trailing `;'.  */
14434   token = cp_lexer_peek_token (parser->lexer);
14435   has_trailing_semicolon = (token->type == CPP_SEMICOLON);
14436   /* Look for trailing attributes to apply to this class.  */
14437   if (cp_parser_allow_gnu_extensions_p (parser))
14438     attributes = cp_parser_attributes_opt (parser);
14439   if (type != error_mark_node)
14440     type = finish_struct (type, attributes);
14441   if (nested_name_specifier_p)
14442     pop_inner_scope (old_scope, scope);
14443   /* If this class is not itself within the scope of another class,
14444      then we need to parse the bodies of all of the queued function
14445      definitions.  Note that the queued functions defined in a class
14446      are not always processed immediately following the
14447      class-specifier for that class.  Consider:
14448
14449        struct A {
14450          struct B { void f() { sizeof (A); } };
14451        };
14452
14453      If `f' were processed before the processing of `A' were
14454      completed, there would be no way to compute the size of `A'.
14455      Note that the nesting we are interested in here is lexical --
14456      not the semantic nesting given by TYPE_CONTEXT.  In particular,
14457      for:
14458
14459        struct A { struct B; };
14460        struct A::B { void f() { } };
14461
14462      there is no need to delay the parsing of `A::B::f'.  */
14463   if (--parser->num_classes_being_defined == 0)
14464     {
14465       tree queue_entry;
14466       tree fn;
14467       tree class_type = NULL_TREE;
14468       tree pushed_scope = NULL_TREE;
14469
14470       /* In a first pass, parse default arguments to the functions.
14471          Then, in a second pass, parse the bodies of the functions.
14472          This two-phased approach handles cases like:
14473
14474             struct S {
14475               void f() { g(); }
14476               void g(int i = 3);
14477             };
14478
14479          */
14480       for (TREE_PURPOSE (parser->unparsed_functions_queues)
14481              = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
14482            (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
14483            TREE_PURPOSE (parser->unparsed_functions_queues)
14484              = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
14485         {
14486           fn = TREE_VALUE (queue_entry);
14487           /* If there are default arguments that have not yet been processed,
14488              take care of them now.  */
14489           if (class_type != TREE_PURPOSE (queue_entry))
14490             {
14491               if (pushed_scope)
14492                 pop_scope (pushed_scope);
14493               class_type = TREE_PURPOSE (queue_entry);
14494               pushed_scope = push_scope (class_type);
14495             }
14496           /* Make sure that any template parameters are in scope.  */
14497           maybe_begin_member_template_processing (fn);
14498           /* Parse the default argument expressions.  */
14499           cp_parser_late_parsing_default_args (parser, fn);
14500           /* Remove any template parameters from the symbol table.  */
14501           maybe_end_member_template_processing ();
14502         }
14503       if (pushed_scope)
14504         pop_scope (pushed_scope);
14505       /* Now parse the body of the functions.  */
14506       for (TREE_VALUE (parser->unparsed_functions_queues)
14507              = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
14508            (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
14509            TREE_VALUE (parser->unparsed_functions_queues)
14510              = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
14511         {
14512           /* Figure out which function we need to process.  */
14513           fn = TREE_VALUE (queue_entry);
14514           /* Parse the function.  */
14515           cp_parser_late_parsing_for_member (parser, fn);
14516         }
14517     }
14518
14519   /* Put back any saved access checks.  */
14520   pop_deferring_access_checks ();
14521
14522   /* Restore saved state.  */
14523   parser->in_function_body = saved_in_function_body;
14524   parser->num_template_parameter_lists
14525     = saved_num_template_parameter_lists;
14526
14527   return type;
14528 }
14529
14530 /* Parse a class-head.
14531
14532    class-head:
14533      class-key identifier [opt] base-clause [opt]
14534      class-key nested-name-specifier identifier base-clause [opt]
14535      class-key nested-name-specifier [opt] template-id
14536        base-clause [opt]
14537
14538    GNU Extensions:
14539      class-key attributes identifier [opt] base-clause [opt]
14540      class-key attributes nested-name-specifier identifier base-clause [opt]
14541      class-key attributes nested-name-specifier [opt] template-id
14542        base-clause [opt]
14543
14544    Upon return BASES is initialized to the list of base classes (or
14545    NULL, if there are none) in the same form returned by
14546    cp_parser_base_clause.
14547
14548    Returns the TYPE of the indicated class.  Sets
14549    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
14550    involving a nested-name-specifier was used, and FALSE otherwise.
14551
14552    Returns error_mark_node if this is not a class-head.
14553
14554    Returns NULL_TREE if the class-head is syntactically valid, but
14555    semantically invalid in a way that means we should skip the entire
14556    body of the class.  */
14557
14558 static tree
14559 cp_parser_class_head (cp_parser* parser,
14560                       bool* nested_name_specifier_p,
14561                       tree *attributes_p,
14562                       tree *bases)
14563 {
14564   tree nested_name_specifier;
14565   enum tag_types class_key;
14566   tree id = NULL_TREE;
14567   tree type = NULL_TREE;
14568   tree attributes;
14569   bool template_id_p = false;
14570   bool qualified_p = false;
14571   bool invalid_nested_name_p = false;
14572   bool invalid_explicit_specialization_p = false;
14573   tree pushed_scope = NULL_TREE;
14574   unsigned num_templates;
14575
14576   /* Assume no nested-name-specifier will be present.  */
14577   *nested_name_specifier_p = false;
14578   /* Assume no template parameter lists will be used in defining the
14579      type.  */
14580   num_templates = 0;
14581
14582   *bases = NULL_TREE;
14583
14584   /* Look for the class-key.  */
14585   class_key = cp_parser_class_key (parser);
14586   if (class_key == none_type)
14587     return error_mark_node;
14588
14589   /* Parse the attributes.  */
14590   attributes = cp_parser_attributes_opt (parser);
14591
14592   /* If the next token is `::', that is invalid -- but sometimes
14593      people do try to write:
14594
14595        struct ::S {};
14596
14597      Handle this gracefully by accepting the extra qualifier, and then
14598      issuing an error about it later if this really is a
14599      class-head.  If it turns out just to be an elaborated type
14600      specifier, remain silent.  */
14601   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
14602     qualified_p = true;
14603
14604   push_deferring_access_checks (dk_no_check);
14605
14606   /* Determine the name of the class.  Begin by looking for an
14607      optional nested-name-specifier.  */
14608   nested_name_specifier
14609     = cp_parser_nested_name_specifier_opt (parser,
14610                                            /*typename_keyword_p=*/false,
14611                                            /*check_dependency_p=*/false,
14612                                            /*type_p=*/false,
14613                                            /*is_declaration=*/false);
14614   /* If there was a nested-name-specifier, then there *must* be an
14615      identifier.  */
14616   if (nested_name_specifier)
14617     {
14618       /* Although the grammar says `identifier', it really means
14619          `class-name' or `template-name'.  You are only allowed to
14620          define a class that has already been declared with this
14621          syntax.
14622
14623          The proposed resolution for Core Issue 180 says that wherever
14624          you see `class T::X' you should treat `X' as a type-name.
14625
14626          It is OK to define an inaccessible class; for example:
14627
14628            class A { class B; };
14629            class A::B {};
14630
14631          We do not know if we will see a class-name, or a
14632          template-name.  We look for a class-name first, in case the
14633          class-name is a template-id; if we looked for the
14634          template-name first we would stop after the template-name.  */
14635       cp_parser_parse_tentatively (parser);
14636       type = cp_parser_class_name (parser,
14637                                    /*typename_keyword_p=*/false,
14638                                    /*template_keyword_p=*/false,
14639                                    class_type,
14640                                    /*check_dependency_p=*/false,
14641                                    /*class_head_p=*/true,
14642                                    /*is_declaration=*/false);
14643       /* If that didn't work, ignore the nested-name-specifier.  */
14644       if (!cp_parser_parse_definitely (parser))
14645         {
14646           invalid_nested_name_p = true;
14647           id = cp_parser_identifier (parser);
14648           if (id == error_mark_node)
14649             id = NULL_TREE;
14650         }
14651       /* If we could not find a corresponding TYPE, treat this
14652          declaration like an unqualified declaration.  */
14653       if (type == error_mark_node)
14654         nested_name_specifier = NULL_TREE;
14655       /* Otherwise, count the number of templates used in TYPE and its
14656          containing scopes.  */
14657       else
14658         {
14659           tree scope;
14660
14661           for (scope = TREE_TYPE (type);
14662                scope && TREE_CODE (scope) != NAMESPACE_DECL;
14663                scope = (TYPE_P (scope)
14664                         ? TYPE_CONTEXT (scope)
14665                         : DECL_CONTEXT (scope)))
14666             if (TYPE_P (scope)
14667                 && CLASS_TYPE_P (scope)
14668                 && CLASSTYPE_TEMPLATE_INFO (scope)
14669                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
14670                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
14671               ++num_templates;
14672         }
14673     }
14674   /* Otherwise, the identifier is optional.  */
14675   else
14676     {
14677       /* We don't know whether what comes next is a template-id,
14678          an identifier, or nothing at all.  */
14679       cp_parser_parse_tentatively (parser);
14680       /* Check for a template-id.  */
14681       id = cp_parser_template_id (parser,
14682                                   /*template_keyword_p=*/false,
14683                                   /*check_dependency_p=*/true,
14684                                   /*is_declaration=*/true);
14685       /* If that didn't work, it could still be an identifier.  */
14686       if (!cp_parser_parse_definitely (parser))
14687         {
14688           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
14689             id = cp_parser_identifier (parser);
14690           else
14691             id = NULL_TREE;
14692         }
14693       else
14694         {
14695           template_id_p = true;
14696           ++num_templates;
14697         }
14698     }
14699
14700   pop_deferring_access_checks ();
14701
14702   if (id)
14703     cp_parser_check_for_invalid_template_id (parser, id);
14704
14705   /* If it's not a `:' or a `{' then we can't really be looking at a
14706      class-head, since a class-head only appears as part of a
14707      class-specifier.  We have to detect this situation before calling
14708      xref_tag, since that has irreversible side-effects.  */
14709   if (!cp_parser_next_token_starts_class_definition_p (parser))
14710     {
14711       cp_parser_error (parser, "expected %<{%> or %<:%>");
14712       return error_mark_node;
14713     }
14714
14715   /* At this point, we're going ahead with the class-specifier, even
14716      if some other problem occurs.  */
14717   cp_parser_commit_to_tentative_parse (parser);
14718   /* Issue the error about the overly-qualified name now.  */
14719   if (qualified_p)
14720     cp_parser_error (parser,
14721                      "global qualification of class name is invalid");
14722   else if (invalid_nested_name_p)
14723     cp_parser_error (parser,
14724                      "qualified name does not name a class");
14725   else if (nested_name_specifier)
14726     {
14727       tree scope;
14728
14729       /* Reject typedef-names in class heads.  */
14730       if (!DECL_IMPLICIT_TYPEDEF_P (type))
14731         {
14732           error ("invalid class name in declaration of %qD", type);
14733           type = NULL_TREE;
14734           goto done;
14735         }
14736
14737       /* Figure out in what scope the declaration is being placed.  */
14738       scope = current_scope ();
14739       /* If that scope does not contain the scope in which the
14740          class was originally declared, the program is invalid.  */
14741       if (scope && !is_ancestor (scope, nested_name_specifier))
14742         {
14743           if (at_namespace_scope_p ())
14744             error ("declaration of %qD in namespace %qD which does not "
14745                    "enclose %qD", type, scope, nested_name_specifier);
14746           else
14747             error ("declaration of %qD in %qD which does not enclose %qD",
14748                    type, scope, nested_name_specifier);
14749           type = NULL_TREE;
14750           goto done;
14751         }
14752       /* [dcl.meaning]
14753
14754          A declarator-id shall not be qualified exception of the
14755          definition of a ... nested class outside of its class
14756          ... [or] a the definition or explicit instantiation of a
14757          class member of a namespace outside of its namespace.  */
14758       if (scope == nested_name_specifier)
14759         {
14760           pedwarn ("extra qualification ignored");
14761           nested_name_specifier = NULL_TREE;
14762           num_templates = 0;
14763         }
14764     }
14765   /* An explicit-specialization must be preceded by "template <>".  If
14766      it is not, try to recover gracefully.  */
14767   if (at_namespace_scope_p ()
14768       && parser->num_template_parameter_lists == 0
14769       && template_id_p)
14770     {
14771       error ("an explicit specialization must be preceded by %<template <>%>");
14772       invalid_explicit_specialization_p = true;
14773       /* Take the same action that would have been taken by
14774          cp_parser_explicit_specialization.  */
14775       ++parser->num_template_parameter_lists;
14776       begin_specialization ();
14777     }
14778   /* There must be no "return" statements between this point and the
14779      end of this function; set "type "to the correct return value and
14780      use "goto done;" to return.  */
14781   /* Make sure that the right number of template parameters were
14782      present.  */
14783   if (!cp_parser_check_template_parameters (parser, num_templates))
14784     {
14785       /* If something went wrong, there is no point in even trying to
14786          process the class-definition.  */
14787       type = NULL_TREE;
14788       goto done;
14789     }
14790
14791   /* Look up the type.  */
14792   if (template_id_p)
14793     {
14794       if (TREE_CODE (id) == TEMPLATE_ID_EXPR
14795           && (DECL_FUNCTION_TEMPLATE_P (TREE_OPERAND (id, 0))
14796               || TREE_CODE (TREE_OPERAND (id, 0)) == OVERLOAD))
14797         {
14798           error ("function template %qD redeclared as a class template", id);
14799           type = error_mark_node;
14800         }
14801       else
14802         {
14803           type = TREE_TYPE (id);
14804           type = maybe_process_partial_specialization (type);
14805         }
14806       if (nested_name_specifier)
14807         pushed_scope = push_scope (nested_name_specifier);
14808     }
14809   else if (nested_name_specifier)
14810     {
14811       tree class_type;
14812
14813       /* Given:
14814
14815             template <typename T> struct S { struct T };
14816             template <typename T> struct S<T>::T { };
14817
14818          we will get a TYPENAME_TYPE when processing the definition of
14819          `S::T'.  We need to resolve it to the actual type before we
14820          try to define it.  */
14821       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
14822         {
14823           class_type = resolve_typename_type (TREE_TYPE (type),
14824                                               /*only_current_p=*/false);
14825           if (TREE_CODE (class_type) != TYPENAME_TYPE)
14826             type = TYPE_NAME (class_type);
14827           else
14828             {
14829               cp_parser_error (parser, "could not resolve typename type");
14830               type = error_mark_node;
14831             }
14832         }
14833
14834       maybe_process_partial_specialization (TREE_TYPE (type));
14835       class_type = current_class_type;
14836       /* Enter the scope indicated by the nested-name-specifier.  */
14837       pushed_scope = push_scope (nested_name_specifier);
14838       /* Get the canonical version of this type.  */
14839       type = TYPE_MAIN_DECL (TREE_TYPE (type));
14840       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
14841           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
14842         {
14843           type = push_template_decl (type);
14844           if (type == error_mark_node)
14845             {
14846               type = NULL_TREE;
14847               goto done;
14848             }
14849         }
14850
14851       type = TREE_TYPE (type);
14852       *nested_name_specifier_p = true;
14853     }
14854   else      /* The name is not a nested name.  */
14855     {
14856       /* If the class was unnamed, create a dummy name.  */
14857       if (!id)
14858         id = make_anon_name ();
14859       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
14860                        parser->num_template_parameter_lists);
14861     }
14862
14863   /* Indicate whether this class was declared as a `class' or as a
14864      `struct'.  */
14865   if (TREE_CODE (type) == RECORD_TYPE)
14866     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
14867   cp_parser_check_class_key (class_key, type);
14868
14869   /* If this type was already complete, and we see another definition,
14870      that's an error.  */
14871   if (type != error_mark_node && COMPLETE_TYPE_P (type))
14872     {
14873       error ("redefinition of %q#T", type);
14874       error ("previous definition of %q+#T", type);
14875       type = NULL_TREE;
14876       goto done;
14877     }
14878   else if (type == error_mark_node)
14879     type = NULL_TREE;
14880
14881   /* We will have entered the scope containing the class; the names of
14882      base classes should be looked up in that context.  For example:
14883
14884        struct A { struct B {}; struct C; };
14885        struct A::C : B {};
14886
14887      is valid.  */
14888
14889   /* Get the list of base-classes, if there is one.  */
14890   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
14891     *bases = cp_parser_base_clause (parser);
14892
14893  done:
14894   /* Leave the scope given by the nested-name-specifier.  We will
14895      enter the class scope itself while processing the members.  */
14896   if (pushed_scope)
14897     pop_scope (pushed_scope);
14898
14899   if (invalid_explicit_specialization_p)
14900     {
14901       end_specialization ();
14902       --parser->num_template_parameter_lists;
14903     }
14904   *attributes_p = attributes;
14905   return type;
14906 }
14907
14908 /* Parse a class-key.
14909
14910    class-key:
14911      class
14912      struct
14913      union
14914
14915    Returns the kind of class-key specified, or none_type to indicate
14916    error.  */
14917
14918 static enum tag_types
14919 cp_parser_class_key (cp_parser* parser)
14920 {
14921   cp_token *token;
14922   enum tag_types tag_type;
14923
14924   /* Look for the class-key.  */
14925   token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
14926   if (!token)
14927     return none_type;
14928
14929   /* Check to see if the TOKEN is a class-key.  */
14930   tag_type = cp_parser_token_is_class_key (token);
14931   if (!tag_type)
14932     cp_parser_error (parser, "expected class-key");
14933   return tag_type;
14934 }
14935
14936 /* Parse an (optional) member-specification.
14937
14938    member-specification:
14939      member-declaration member-specification [opt]
14940      access-specifier : member-specification [opt]  */
14941
14942 static void
14943 cp_parser_member_specification_opt (cp_parser* parser)
14944 {
14945   while (true)
14946     {
14947       cp_token *token;
14948       enum rid keyword;
14949
14950       /* Peek at the next token.  */
14951       token = cp_lexer_peek_token (parser->lexer);
14952       /* If it's a `}', or EOF then we've seen all the members.  */
14953       if (token->type == CPP_CLOSE_BRACE
14954           || token->type == CPP_EOF
14955           || token->type == CPP_PRAGMA_EOL)
14956         break;
14957
14958       /* See if this token is a keyword.  */
14959       keyword = token->keyword;
14960       switch (keyword)
14961         {
14962         case RID_PUBLIC:
14963         case RID_PROTECTED:
14964         case RID_PRIVATE:
14965           /* Consume the access-specifier.  */
14966           cp_lexer_consume_token (parser->lexer);
14967           /* Remember which access-specifier is active.  */
14968           current_access_specifier = token->u.value;
14969           /* Look for the `:'.  */
14970           cp_parser_require (parser, CPP_COLON, "%<:%>");
14971           break;
14972
14973         default:
14974           /* Accept #pragmas at class scope.  */
14975           if (token->type == CPP_PRAGMA)
14976             {
14977               cp_parser_pragma (parser, pragma_external);
14978               break;
14979             }
14980
14981           /* Otherwise, the next construction must be a
14982              member-declaration.  */
14983           cp_parser_member_declaration (parser);
14984         }
14985     }
14986 }
14987
14988 /* Parse a member-declaration.
14989
14990    member-declaration:
14991      decl-specifier-seq [opt] member-declarator-list [opt] ;
14992      function-definition ; [opt]
14993      :: [opt] nested-name-specifier template [opt] unqualified-id ;
14994      using-declaration
14995      template-declaration
14996
14997    member-declarator-list:
14998      member-declarator
14999      member-declarator-list , member-declarator
15000
15001    member-declarator:
15002      declarator pure-specifier [opt]
15003      declarator constant-initializer [opt]
15004      identifier [opt] : constant-expression
15005
15006    GNU Extensions:
15007
15008    member-declaration:
15009      __extension__ member-declaration
15010
15011    member-declarator:
15012      declarator attributes [opt] pure-specifier [opt]
15013      declarator attributes [opt] constant-initializer [opt]
15014      identifier [opt] attributes [opt] : constant-expression  
15015
15016    C++0x Extensions:
15017
15018    member-declaration:
15019      static_assert-declaration  */
15020
15021 static void
15022 cp_parser_member_declaration (cp_parser* parser)
15023 {
15024   cp_decl_specifier_seq decl_specifiers;
15025   tree prefix_attributes;
15026   tree decl;
15027   int declares_class_or_enum;
15028   bool friend_p;
15029   cp_token *token;
15030   int saved_pedantic;
15031
15032   /* Check for the `__extension__' keyword.  */
15033   if (cp_parser_extension_opt (parser, &saved_pedantic))
15034     {
15035       /* Recurse.  */
15036       cp_parser_member_declaration (parser);
15037       /* Restore the old value of the PEDANTIC flag.  */
15038       pedantic = saved_pedantic;
15039
15040       return;
15041     }
15042
15043   /* Check for a template-declaration.  */
15044   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
15045     {
15046       /* An explicit specialization here is an error condition, and we
15047          expect the specialization handler to detect and report this.  */
15048       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
15049           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
15050         cp_parser_explicit_specialization (parser);
15051       else
15052         cp_parser_template_declaration (parser, /*member_p=*/true);
15053
15054       return;
15055     }
15056
15057   /* Check for a using-declaration.  */
15058   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
15059     {
15060       /* Parse the using-declaration.  */
15061       cp_parser_using_declaration (parser,
15062                                    /*access_declaration_p=*/false);
15063       return;
15064     }
15065
15066   /* Check for @defs.  */
15067   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
15068     {
15069       tree ivar, member;
15070       tree ivar_chains = cp_parser_objc_defs_expression (parser);
15071       ivar = ivar_chains;
15072       while (ivar)
15073         {
15074           member = ivar;
15075           ivar = TREE_CHAIN (member);
15076           TREE_CHAIN (member) = NULL_TREE;
15077           finish_member_declaration (member);
15078         }
15079       return;
15080     }
15081
15082   /* If the next token is `static_assert' we have a static assertion.  */
15083   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC_ASSERT))
15084     {
15085       cp_parser_static_assert (parser, /*member_p=*/true);
15086       return;
15087     }
15088
15089   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
15090     return;
15091
15092   /* Parse the decl-specifier-seq.  */
15093   cp_parser_decl_specifier_seq (parser,
15094                                 CP_PARSER_FLAGS_OPTIONAL,
15095                                 &decl_specifiers,
15096                                 &declares_class_or_enum);
15097   prefix_attributes = decl_specifiers.attributes;
15098   decl_specifiers.attributes = NULL_TREE;
15099   /* Check for an invalid type-name.  */
15100   if (!decl_specifiers.type
15101       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
15102     return;
15103   /* If there is no declarator, then the decl-specifier-seq should
15104      specify a type.  */
15105   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
15106     {
15107       /* If there was no decl-specifier-seq, and the next token is a
15108          `;', then we have something like:
15109
15110            struct S { ; };
15111
15112          [class.mem]
15113
15114          Each member-declaration shall declare at least one member
15115          name of the class.  */
15116       if (!decl_specifiers.any_specifiers_p)
15117         {
15118           cp_token *token = cp_lexer_peek_token (parser->lexer);
15119           if (pedantic && !token->in_system_header)
15120             pedwarn ("%Hextra %<;%>", &token->location);
15121         }
15122       else
15123         {
15124           tree type;
15125
15126           /* See if this declaration is a friend.  */
15127           friend_p = cp_parser_friend_p (&decl_specifiers);
15128           /* If there were decl-specifiers, check to see if there was
15129              a class-declaration.  */
15130           type = check_tag_decl (&decl_specifiers);
15131           /* Nested classes have already been added to the class, but
15132              a `friend' needs to be explicitly registered.  */
15133           if (friend_p)
15134             {
15135               /* If the `friend' keyword was present, the friend must
15136                  be introduced with a class-key.  */
15137                if (!declares_class_or_enum)
15138                  error ("a class-key must be used when declaring a friend");
15139                /* In this case:
15140
15141                     template <typename T> struct A {
15142                       friend struct A<T>::B;
15143                     };
15144
15145                   A<T>::B will be represented by a TYPENAME_TYPE, and
15146                   therefore not recognized by check_tag_decl.  */
15147                if (!type
15148                    && decl_specifiers.type
15149                    && TYPE_P (decl_specifiers.type))
15150                  type = decl_specifiers.type;
15151                if (!type || !TYPE_P (type))
15152                  error ("friend declaration does not name a class or "
15153                         "function");
15154                else
15155                  make_friend_class (current_class_type, type,
15156                                     /*complain=*/true);
15157             }
15158           /* If there is no TYPE, an error message will already have
15159              been issued.  */
15160           else if (!type || type == error_mark_node)
15161             ;
15162           /* An anonymous aggregate has to be handled specially; such
15163              a declaration really declares a data member (with a
15164              particular type), as opposed to a nested class.  */
15165           else if (ANON_AGGR_TYPE_P (type))
15166             {
15167               /* Remove constructors and such from TYPE, now that we
15168                  know it is an anonymous aggregate.  */
15169               fixup_anonymous_aggr (type);
15170               /* And make the corresponding data member.  */
15171               decl = build_decl (FIELD_DECL, NULL_TREE, type);
15172               /* Add it to the class.  */
15173               finish_member_declaration (decl);
15174             }
15175           else
15176             cp_parser_check_access_in_redeclaration (TYPE_NAME (type));
15177         }
15178     }
15179   else
15180     {
15181       /* See if these declarations will be friends.  */
15182       friend_p = cp_parser_friend_p (&decl_specifiers);
15183
15184       /* Keep going until we hit the `;' at the end of the
15185          declaration.  */
15186       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
15187         {
15188           tree attributes = NULL_TREE;
15189           tree first_attribute;
15190
15191           /* Peek at the next token.  */
15192           token = cp_lexer_peek_token (parser->lexer);
15193
15194           /* Check for a bitfield declaration.  */
15195           if (token->type == CPP_COLON
15196               || (token->type == CPP_NAME
15197                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
15198                   == CPP_COLON))
15199             {
15200               tree identifier;
15201               tree width;
15202
15203               /* Get the name of the bitfield.  Note that we cannot just
15204                  check TOKEN here because it may have been invalidated by
15205                  the call to cp_lexer_peek_nth_token above.  */
15206               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
15207                 identifier = cp_parser_identifier (parser);
15208               else
15209                 identifier = NULL_TREE;
15210
15211               /* Consume the `:' token.  */
15212               cp_lexer_consume_token (parser->lexer);
15213               /* Get the width of the bitfield.  */
15214               width
15215                 = cp_parser_constant_expression (parser,
15216                                                  /*allow_non_constant=*/false,
15217                                                  NULL);
15218
15219               /* Look for attributes that apply to the bitfield.  */
15220               attributes = cp_parser_attributes_opt (parser);
15221               /* Remember which attributes are prefix attributes and
15222                  which are not.  */
15223               first_attribute = attributes;
15224               /* Combine the attributes.  */
15225               attributes = chainon (prefix_attributes, attributes);
15226
15227               /* Create the bitfield declaration.  */
15228               decl = grokbitfield (identifier
15229                                    ? make_id_declarator (NULL_TREE,
15230                                                          identifier,
15231                                                          sfk_none)
15232                                    : NULL,
15233                                    &decl_specifiers,
15234                                    width);
15235               /* Apply the attributes.  */
15236               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
15237             }
15238           else
15239             {
15240               cp_declarator *declarator;
15241               tree initializer;
15242               tree asm_specification;
15243               int ctor_dtor_or_conv_p;
15244
15245               /* Parse the declarator.  */
15246               declarator
15247                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
15248                                         &ctor_dtor_or_conv_p,
15249                                         /*parenthesized_p=*/NULL,
15250                                         /*member_p=*/true);
15251
15252               /* If something went wrong parsing the declarator, make sure
15253                  that we at least consume some tokens.  */
15254               if (declarator == cp_error_declarator)
15255                 {
15256                   /* Skip to the end of the statement.  */
15257                   cp_parser_skip_to_end_of_statement (parser);
15258                   /* If the next token is not a semicolon, that is
15259                      probably because we just skipped over the body of
15260                      a function.  So, we consume a semicolon if
15261                      present, but do not issue an error message if it
15262                      is not present.  */
15263                   if (cp_lexer_next_token_is (parser->lexer,
15264                                               CPP_SEMICOLON))
15265                     cp_lexer_consume_token (parser->lexer);
15266                   return;
15267                 }
15268
15269               if (declares_class_or_enum & 2)
15270                 cp_parser_check_for_definition_in_return_type
15271                   (declarator, decl_specifiers.type);
15272
15273               /* Look for an asm-specification.  */
15274               asm_specification = cp_parser_asm_specification_opt (parser);
15275               /* Look for attributes that apply to the declaration.  */
15276               attributes = cp_parser_attributes_opt (parser);
15277               /* Remember which attributes are prefix attributes and
15278                  which are not.  */
15279               first_attribute = attributes;
15280               /* Combine the attributes.  */
15281               attributes = chainon (prefix_attributes, attributes);
15282
15283               /* If it's an `=', then we have a constant-initializer or a
15284                  pure-specifier.  It is not correct to parse the
15285                  initializer before registering the member declaration
15286                  since the member declaration should be in scope while
15287                  its initializer is processed.  However, the rest of the
15288                  front end does not yet provide an interface that allows
15289                  us to handle this correctly.  */
15290               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
15291                 {
15292                   /* In [class.mem]:
15293
15294                      A pure-specifier shall be used only in the declaration of
15295                      a virtual function.
15296
15297                      A member-declarator can contain a constant-initializer
15298                      only if it declares a static member of integral or
15299                      enumeration type.
15300
15301                      Therefore, if the DECLARATOR is for a function, we look
15302                      for a pure-specifier; otherwise, we look for a
15303                      constant-initializer.  When we call `grokfield', it will
15304                      perform more stringent semantics checks.  */
15305                   if (function_declarator_p (declarator))
15306                     initializer = cp_parser_pure_specifier (parser);
15307                   else
15308                     /* Parse the initializer.  */
15309                     initializer = cp_parser_constant_initializer (parser);
15310                 }
15311               /* Otherwise, there is no initializer.  */
15312               else
15313                 initializer = NULL_TREE;
15314
15315               /* See if we are probably looking at a function
15316                  definition.  We are certainly not looking at a
15317                  member-declarator.  Calling `grokfield' has
15318                  side-effects, so we must not do it unless we are sure
15319                  that we are looking at a member-declarator.  */
15320               if (cp_parser_token_starts_function_definition_p
15321                   (cp_lexer_peek_token (parser->lexer)))
15322                 {
15323                   /* The grammar does not allow a pure-specifier to be
15324                      used when a member function is defined.  (It is
15325                      possible that this fact is an oversight in the
15326                      standard, since a pure function may be defined
15327                      outside of the class-specifier.  */
15328                   if (initializer)
15329                     error ("pure-specifier on function-definition");
15330                   decl = cp_parser_save_member_function_body (parser,
15331                                                               &decl_specifiers,
15332                                                               declarator,
15333                                                               attributes);
15334                   /* If the member was not a friend, declare it here.  */
15335                   if (!friend_p)
15336                     finish_member_declaration (decl);
15337                   /* Peek at the next token.  */
15338                   token = cp_lexer_peek_token (parser->lexer);
15339                   /* If the next token is a semicolon, consume it.  */
15340                   if (token->type == CPP_SEMICOLON)
15341                     cp_lexer_consume_token (parser->lexer);
15342                   return;
15343                 }
15344               else
15345                 /* Create the declaration.  */
15346                 decl = grokfield (declarator, &decl_specifiers,
15347                                   initializer, /*init_const_expr_p=*/true,
15348                                   asm_specification,
15349                                   attributes);
15350             }
15351
15352           /* Reset PREFIX_ATTRIBUTES.  */
15353           while (attributes && TREE_CHAIN (attributes) != first_attribute)
15354             attributes = TREE_CHAIN (attributes);
15355           if (attributes)
15356             TREE_CHAIN (attributes) = NULL_TREE;
15357
15358           /* If there is any qualification still in effect, clear it
15359              now; we will be starting fresh with the next declarator.  */
15360           parser->scope = NULL_TREE;
15361           parser->qualifying_scope = NULL_TREE;
15362           parser->object_scope = NULL_TREE;
15363           /* If it's a `,', then there are more declarators.  */
15364           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
15365             cp_lexer_consume_token (parser->lexer);
15366           /* If the next token isn't a `;', then we have a parse error.  */
15367           else if (cp_lexer_next_token_is_not (parser->lexer,
15368                                                CPP_SEMICOLON))
15369             {
15370               cp_parser_error (parser, "expected %<;%>");
15371               /* Skip tokens until we find a `;'.  */
15372               cp_parser_skip_to_end_of_statement (parser);
15373
15374               break;
15375             }
15376
15377           if (decl)
15378             {
15379               /* Add DECL to the list of members.  */
15380               if (!friend_p)
15381                 finish_member_declaration (decl);
15382
15383               if (TREE_CODE (decl) == FUNCTION_DECL)
15384                 cp_parser_save_default_args (parser, decl);
15385             }
15386         }
15387     }
15388
15389   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
15390 }
15391
15392 /* Parse a pure-specifier.
15393
15394    pure-specifier:
15395      = 0
15396
15397    Returns INTEGER_ZERO_NODE if a pure specifier is found.
15398    Otherwise, ERROR_MARK_NODE is returned.  */
15399
15400 static tree
15401 cp_parser_pure_specifier (cp_parser* parser)
15402 {
15403   cp_token *token;
15404
15405   /* Look for the `=' token.  */
15406   if (!cp_parser_require (parser, CPP_EQ, "%<=%>"))
15407     return error_mark_node;
15408   /* Look for the `0' token.  */
15409   token = cp_lexer_consume_token (parser->lexer);
15410   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
15411   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
15412     {
15413       cp_parser_error (parser,
15414                        "invalid pure specifier (only %<= 0%> is allowed)");
15415       cp_parser_skip_to_end_of_statement (parser);
15416       return error_mark_node;
15417     }
15418   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
15419     {
15420       error ("templates may not be %<virtual%>");
15421       return error_mark_node;
15422     }
15423
15424   return integer_zero_node;
15425 }
15426
15427 /* Parse a constant-initializer.
15428
15429    constant-initializer:
15430      = constant-expression
15431
15432    Returns a representation of the constant-expression.  */
15433
15434 static tree
15435 cp_parser_constant_initializer (cp_parser* parser)
15436 {
15437   /* Look for the `=' token.  */
15438   if (!cp_parser_require (parser, CPP_EQ, "%<=%>"))
15439     return error_mark_node;
15440
15441   /* It is invalid to write:
15442
15443        struct S { static const int i = { 7 }; };
15444
15445      */
15446   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
15447     {
15448       cp_parser_error (parser,
15449                        "a brace-enclosed initializer is not allowed here");
15450       /* Consume the opening brace.  */
15451       cp_lexer_consume_token (parser->lexer);
15452       /* Skip the initializer.  */
15453       cp_parser_skip_to_closing_brace (parser);
15454       /* Look for the trailing `}'.  */
15455       cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
15456
15457       return error_mark_node;
15458     }
15459
15460   return cp_parser_constant_expression (parser,
15461                                         /*allow_non_constant=*/false,
15462                                         NULL);
15463 }
15464
15465 /* Derived classes [gram.class.derived] */
15466
15467 /* Parse a base-clause.
15468
15469    base-clause:
15470      : base-specifier-list
15471
15472    base-specifier-list:
15473      base-specifier ... [opt]
15474      base-specifier-list , base-specifier ... [opt]
15475
15476    Returns a TREE_LIST representing the base-classes, in the order in
15477    which they were declared.  The representation of each node is as
15478    described by cp_parser_base_specifier.
15479
15480    In the case that no bases are specified, this function will return
15481    NULL_TREE, not ERROR_MARK_NODE.  */
15482
15483 static tree
15484 cp_parser_base_clause (cp_parser* parser)
15485 {
15486   tree bases = NULL_TREE;
15487
15488   /* Look for the `:' that begins the list.  */
15489   cp_parser_require (parser, CPP_COLON, "%<:%>");
15490
15491   /* Scan the base-specifier-list.  */
15492   while (true)
15493     {
15494       cp_token *token;
15495       tree base;
15496       bool pack_expansion_p = false;
15497
15498       /* Look for the base-specifier.  */
15499       base = cp_parser_base_specifier (parser);
15500       /* Look for the (optional) ellipsis. */
15501       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
15502         {
15503           /* Consume the `...'. */
15504           cp_lexer_consume_token (parser->lexer);
15505
15506           pack_expansion_p = true;
15507         }
15508
15509       /* Add BASE to the front of the list.  */
15510       if (base != error_mark_node)
15511         {
15512           if (pack_expansion_p)
15513             /* Make this a pack expansion type. */
15514             TREE_VALUE (base) = make_pack_expansion (TREE_VALUE (base));
15515           
15516
15517           if (!check_for_bare_parameter_packs (TREE_VALUE (base)))
15518             {
15519               TREE_CHAIN (base) = bases;
15520               bases = base;
15521             }
15522         }
15523       /* Peek at the next token.  */
15524       token = cp_lexer_peek_token (parser->lexer);
15525       /* If it's not a comma, then the list is complete.  */
15526       if (token->type != CPP_COMMA)
15527         break;
15528       /* Consume the `,'.  */
15529       cp_lexer_consume_token (parser->lexer);
15530     }
15531
15532   /* PARSER->SCOPE may still be non-NULL at this point, if the last
15533      base class had a qualified name.  However, the next name that
15534      appears is certainly not qualified.  */
15535   parser->scope = NULL_TREE;
15536   parser->qualifying_scope = NULL_TREE;
15537   parser->object_scope = NULL_TREE;
15538
15539   return nreverse (bases);
15540 }
15541
15542 /* Parse a base-specifier.
15543
15544    base-specifier:
15545      :: [opt] nested-name-specifier [opt] class-name
15546      virtual access-specifier [opt] :: [opt] nested-name-specifier
15547        [opt] class-name
15548      access-specifier virtual [opt] :: [opt] nested-name-specifier
15549        [opt] class-name
15550
15551    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
15552    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
15553    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
15554    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
15555
15556 static tree
15557 cp_parser_base_specifier (cp_parser* parser)
15558 {
15559   cp_token *token;
15560   bool done = false;
15561   bool virtual_p = false;
15562   bool duplicate_virtual_error_issued_p = false;
15563   bool duplicate_access_error_issued_p = false;
15564   bool class_scope_p, template_p;
15565   tree access = access_default_node;
15566   tree type;
15567
15568   /* Process the optional `virtual' and `access-specifier'.  */
15569   while (!done)
15570     {
15571       /* Peek at the next token.  */
15572       token = cp_lexer_peek_token (parser->lexer);
15573       /* Process `virtual'.  */
15574       switch (token->keyword)
15575         {
15576         case RID_VIRTUAL:
15577           /* If `virtual' appears more than once, issue an error.  */
15578           if (virtual_p && !duplicate_virtual_error_issued_p)
15579             {
15580               cp_parser_error (parser,
15581                                "%<virtual%> specified more than once in base-specified");
15582               duplicate_virtual_error_issued_p = true;
15583             }
15584
15585           virtual_p = true;
15586
15587           /* Consume the `virtual' token.  */
15588           cp_lexer_consume_token (parser->lexer);
15589
15590           break;
15591
15592         case RID_PUBLIC:
15593         case RID_PROTECTED:
15594         case RID_PRIVATE:
15595           /* If more than one access specifier appears, issue an
15596              error.  */
15597           if (access != access_default_node
15598               && !duplicate_access_error_issued_p)
15599             {
15600               cp_parser_error (parser,
15601                                "more than one access specifier in base-specified");
15602               duplicate_access_error_issued_p = true;
15603             }
15604
15605           access = ridpointers[(int) token->keyword];
15606
15607           /* Consume the access-specifier.  */
15608           cp_lexer_consume_token (parser->lexer);
15609
15610           break;
15611
15612         default:
15613           done = true;
15614           break;
15615         }
15616     }
15617   /* It is not uncommon to see programs mechanically, erroneously, use
15618      the 'typename' keyword to denote (dependent) qualified types
15619      as base classes.  */
15620   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
15621     {
15622       if (!processing_template_decl)
15623         error ("keyword %<typename%> not allowed outside of templates");
15624       else
15625         error ("keyword %<typename%> not allowed in this context "
15626                "(the base class is implicitly a type)");
15627       cp_lexer_consume_token (parser->lexer);
15628     }
15629
15630   /* Look for the optional `::' operator.  */
15631   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
15632   /* Look for the nested-name-specifier.  The simplest way to
15633      implement:
15634
15635        [temp.res]
15636
15637        The keyword `typename' is not permitted in a base-specifier or
15638        mem-initializer; in these contexts a qualified name that
15639        depends on a template-parameter is implicitly assumed to be a
15640        type name.
15641
15642      is to pretend that we have seen the `typename' keyword at this
15643      point.  */
15644   cp_parser_nested_name_specifier_opt (parser,
15645                                        /*typename_keyword_p=*/true,
15646                                        /*check_dependency_p=*/true,
15647                                        typename_type,
15648                                        /*is_declaration=*/true);
15649   /* If the base class is given by a qualified name, assume that names
15650      we see are type names or templates, as appropriate.  */
15651   class_scope_p = (parser->scope && TYPE_P (parser->scope));
15652   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
15653
15654   /* Finally, look for the class-name.  */
15655   type = cp_parser_class_name (parser,
15656                                class_scope_p,
15657                                template_p,
15658                                typename_type,
15659                                /*check_dependency_p=*/true,
15660                                /*class_head_p=*/false,
15661                                /*is_declaration=*/true);
15662
15663   if (type == error_mark_node)
15664     return error_mark_node;
15665
15666   return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
15667 }
15668
15669 /* Exception handling [gram.exception] */
15670
15671 /* Parse an (optional) exception-specification.
15672
15673    exception-specification:
15674      throw ( type-id-list [opt] )
15675
15676    Returns a TREE_LIST representing the exception-specification.  The
15677    TREE_VALUE of each node is a type.  */
15678
15679 static tree
15680 cp_parser_exception_specification_opt (cp_parser* parser)
15681 {
15682   cp_token *token;
15683   tree type_id_list;
15684
15685   /* Peek at the next token.  */
15686   token = cp_lexer_peek_token (parser->lexer);
15687   /* If it's not `throw', then there's no exception-specification.  */
15688   if (!cp_parser_is_keyword (token, RID_THROW))
15689     return NULL_TREE;
15690
15691   /* Consume the `throw'.  */
15692   cp_lexer_consume_token (parser->lexer);
15693
15694   /* Look for the `('.  */
15695   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
15696
15697   /* Peek at the next token.  */
15698   token = cp_lexer_peek_token (parser->lexer);
15699   /* If it's not a `)', then there is a type-id-list.  */
15700   if (token->type != CPP_CLOSE_PAREN)
15701     {
15702       const char *saved_message;
15703
15704       /* Types may not be defined in an exception-specification.  */
15705       saved_message = parser->type_definition_forbidden_message;
15706       parser->type_definition_forbidden_message
15707         = "types may not be defined in an exception-specification";
15708       /* Parse the type-id-list.  */
15709       type_id_list = cp_parser_type_id_list (parser);
15710       /* Restore the saved message.  */
15711       parser->type_definition_forbidden_message = saved_message;
15712     }
15713   else
15714     type_id_list = empty_except_spec;
15715
15716   /* Look for the `)'.  */
15717   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
15718
15719   return type_id_list;
15720 }
15721
15722 /* Parse an (optional) type-id-list.
15723
15724    type-id-list:
15725      type-id ... [opt]
15726      type-id-list , type-id ... [opt]
15727
15728    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
15729    in the order that the types were presented.  */
15730
15731 static tree
15732 cp_parser_type_id_list (cp_parser* parser)
15733 {
15734   tree types = NULL_TREE;
15735
15736   while (true)
15737     {
15738       cp_token *token;
15739       tree type;
15740
15741       /* Get the next type-id.  */
15742       type = cp_parser_type_id (parser);
15743       /* Parse the optional ellipsis. */
15744       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
15745         {
15746           /* Consume the `...'. */
15747           cp_lexer_consume_token (parser->lexer);
15748
15749           /* Turn the type into a pack expansion expression. */
15750           type = make_pack_expansion (type);
15751         }
15752       /* Add it to the list.  */
15753       types = add_exception_specifier (types, type, /*complain=*/1);
15754       /* Peek at the next token.  */
15755       token = cp_lexer_peek_token (parser->lexer);
15756       /* If it is not a `,', we are done.  */
15757       if (token->type != CPP_COMMA)
15758         break;
15759       /* Consume the `,'.  */
15760       cp_lexer_consume_token (parser->lexer);
15761     }
15762
15763   return nreverse (types);
15764 }
15765
15766 /* Parse a try-block.
15767
15768    try-block:
15769      try compound-statement handler-seq  */
15770
15771 static tree
15772 cp_parser_try_block (cp_parser* parser)
15773 {
15774   tree try_block;
15775
15776   cp_parser_require_keyword (parser, RID_TRY, "%<try%>");
15777   try_block = begin_try_block ();
15778   cp_parser_compound_statement (parser, NULL, true);
15779   finish_try_block (try_block);
15780   cp_parser_handler_seq (parser);
15781   finish_handler_sequence (try_block);
15782
15783   return try_block;
15784 }
15785
15786 /* Parse a function-try-block.
15787
15788    function-try-block:
15789      try ctor-initializer [opt] function-body handler-seq  */
15790
15791 static bool
15792 cp_parser_function_try_block (cp_parser* parser)
15793 {
15794   tree compound_stmt;
15795   tree try_block;
15796   bool ctor_initializer_p;
15797
15798   /* Look for the `try' keyword.  */
15799   if (!cp_parser_require_keyword (parser, RID_TRY, "%<try%>"))
15800     return false;
15801   /* Let the rest of the front end know where we are.  */
15802   try_block = begin_function_try_block (&compound_stmt);
15803   /* Parse the function-body.  */
15804   ctor_initializer_p
15805     = cp_parser_ctor_initializer_opt_and_function_body (parser);
15806   /* We're done with the `try' part.  */
15807   finish_function_try_block (try_block);
15808   /* Parse the handlers.  */
15809   cp_parser_handler_seq (parser);
15810   /* We're done with the handlers.  */
15811   finish_function_handler_sequence (try_block, compound_stmt);
15812
15813   return ctor_initializer_p;
15814 }
15815
15816 /* Parse a handler-seq.
15817
15818    handler-seq:
15819      handler handler-seq [opt]  */
15820
15821 static void
15822 cp_parser_handler_seq (cp_parser* parser)
15823 {
15824   while (true)
15825     {
15826       cp_token *token;
15827
15828       /* Parse the handler.  */
15829       cp_parser_handler (parser);
15830       /* Peek at the next token.  */
15831       token = cp_lexer_peek_token (parser->lexer);
15832       /* If it's not `catch' then there are no more handlers.  */
15833       if (!cp_parser_is_keyword (token, RID_CATCH))
15834         break;
15835     }
15836 }
15837
15838 /* Parse a handler.
15839
15840    handler:
15841      catch ( exception-declaration ) compound-statement  */
15842
15843 static void
15844 cp_parser_handler (cp_parser* parser)
15845 {
15846   tree handler;
15847   tree declaration;
15848
15849   cp_parser_require_keyword (parser, RID_CATCH, "%<catch%>");
15850   handler = begin_handler ();
15851   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
15852   declaration = cp_parser_exception_declaration (parser);
15853   finish_handler_parms (declaration, handler);
15854   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
15855   cp_parser_compound_statement (parser, NULL, false);
15856   finish_handler (handler);
15857 }
15858
15859 /* Parse an exception-declaration.
15860
15861    exception-declaration:
15862      type-specifier-seq declarator
15863      type-specifier-seq abstract-declarator
15864      type-specifier-seq
15865      ...
15866
15867    Returns a VAR_DECL for the declaration, or NULL_TREE if the
15868    ellipsis variant is used.  */
15869
15870 static tree
15871 cp_parser_exception_declaration (cp_parser* parser)
15872 {
15873   cp_decl_specifier_seq type_specifiers;
15874   cp_declarator *declarator;
15875   const char *saved_message;
15876
15877   /* If it's an ellipsis, it's easy to handle.  */
15878   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
15879     {
15880       /* Consume the `...' token.  */
15881       cp_lexer_consume_token (parser->lexer);
15882       return NULL_TREE;
15883     }
15884
15885   /* Types may not be defined in exception-declarations.  */
15886   saved_message = parser->type_definition_forbidden_message;
15887   parser->type_definition_forbidden_message
15888     = "types may not be defined in exception-declarations";
15889
15890   /* Parse the type-specifier-seq.  */
15891   cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
15892                                 &type_specifiers);
15893   /* If it's a `)', then there is no declarator.  */
15894   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
15895     declarator = NULL;
15896   else
15897     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
15898                                        /*ctor_dtor_or_conv_p=*/NULL,
15899                                        /*parenthesized_p=*/NULL,
15900                                        /*member_p=*/false);
15901
15902   /* Restore the saved message.  */
15903   parser->type_definition_forbidden_message = saved_message;
15904
15905   if (!type_specifiers.any_specifiers_p)
15906     return error_mark_node;
15907
15908   return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
15909 }
15910
15911 /* Parse a throw-expression.
15912
15913    throw-expression:
15914      throw assignment-expression [opt]
15915
15916    Returns a THROW_EXPR representing the throw-expression.  */
15917
15918 static tree
15919 cp_parser_throw_expression (cp_parser* parser)
15920 {
15921   tree expression;
15922   cp_token* token;
15923
15924   cp_parser_require_keyword (parser, RID_THROW, "%<throw%>");
15925   token = cp_lexer_peek_token (parser->lexer);
15926   /* Figure out whether or not there is an assignment-expression
15927      following the "throw" keyword.  */
15928   if (token->type == CPP_COMMA
15929       || token->type == CPP_SEMICOLON
15930       || token->type == CPP_CLOSE_PAREN
15931       || token->type == CPP_CLOSE_SQUARE
15932       || token->type == CPP_CLOSE_BRACE
15933       || token->type == CPP_COLON)
15934     expression = NULL_TREE;
15935   else
15936     expression = cp_parser_assignment_expression (parser,
15937                                                   /*cast_p=*/false);
15938
15939   return build_throw (expression);
15940 }
15941
15942 /* GNU Extensions */
15943
15944 /* Parse an (optional) asm-specification.
15945
15946    asm-specification:
15947      asm ( string-literal )
15948
15949    If the asm-specification is present, returns a STRING_CST
15950    corresponding to the string-literal.  Otherwise, returns
15951    NULL_TREE.  */
15952
15953 static tree
15954 cp_parser_asm_specification_opt (cp_parser* parser)
15955 {
15956   cp_token *token;
15957   tree asm_specification;
15958
15959   /* Peek at the next token.  */
15960   token = cp_lexer_peek_token (parser->lexer);
15961   /* If the next token isn't the `asm' keyword, then there's no
15962      asm-specification.  */
15963   if (!cp_parser_is_keyword (token, RID_ASM))
15964     return NULL_TREE;
15965
15966   /* Consume the `asm' token.  */
15967   cp_lexer_consume_token (parser->lexer);
15968   /* Look for the `('.  */
15969   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
15970
15971   /* Look for the string-literal.  */
15972   asm_specification = cp_parser_string_literal (parser, false, false);
15973
15974   /* Look for the `)'.  */
15975   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
15976
15977   return asm_specification;
15978 }
15979
15980 /* Parse an asm-operand-list.
15981
15982    asm-operand-list:
15983      asm-operand
15984      asm-operand-list , asm-operand
15985
15986    asm-operand:
15987      string-literal ( expression )
15988      [ string-literal ] string-literal ( expression )
15989
15990    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
15991    each node is the expression.  The TREE_PURPOSE is itself a
15992    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
15993    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
15994    is a STRING_CST for the string literal before the parenthesis. Returns
15995    ERROR_MARK_NODE if any of the operands are invalid.  */
15996
15997 static tree
15998 cp_parser_asm_operand_list (cp_parser* parser)
15999 {
16000   tree asm_operands = NULL_TREE;
16001   bool invalid_operands = false;
16002
16003   while (true)
16004     {
16005       tree string_literal;
16006       tree expression;
16007       tree name;
16008
16009       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
16010         {
16011           /* Consume the `[' token.  */
16012           cp_lexer_consume_token (parser->lexer);
16013           /* Read the operand name.  */
16014           name = cp_parser_identifier (parser);
16015           if (name != error_mark_node)
16016             name = build_string (IDENTIFIER_LENGTH (name),
16017                                  IDENTIFIER_POINTER (name));
16018           /* Look for the closing `]'.  */
16019           cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
16020         }
16021       else
16022         name = NULL_TREE;
16023       /* Look for the string-literal.  */
16024       string_literal = cp_parser_string_literal (parser, false, false);
16025
16026       /* Look for the `('.  */
16027       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16028       /* Parse the expression.  */
16029       expression = cp_parser_expression (parser, /*cast_p=*/false);
16030       /* Look for the `)'.  */
16031       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16032
16033       if (name == error_mark_node 
16034           || string_literal == error_mark_node 
16035           || expression == error_mark_node)
16036         invalid_operands = true;
16037
16038       /* Add this operand to the list.  */
16039       asm_operands = tree_cons (build_tree_list (name, string_literal),
16040                                 expression,
16041                                 asm_operands);
16042       /* If the next token is not a `,', there are no more
16043          operands.  */
16044       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
16045         break;
16046       /* Consume the `,'.  */
16047       cp_lexer_consume_token (parser->lexer);
16048     }
16049
16050   return invalid_operands ? error_mark_node : nreverse (asm_operands);
16051 }
16052
16053 /* Parse an asm-clobber-list.
16054
16055    asm-clobber-list:
16056      string-literal
16057      asm-clobber-list , string-literal
16058
16059    Returns a TREE_LIST, indicating the clobbers in the order that they
16060    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
16061
16062 static tree
16063 cp_parser_asm_clobber_list (cp_parser* parser)
16064 {
16065   tree clobbers = NULL_TREE;
16066
16067   while (true)
16068     {
16069       tree string_literal;
16070
16071       /* Look for the string literal.  */
16072       string_literal = cp_parser_string_literal (parser, false, false);
16073       /* Add it to the list.  */
16074       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
16075       /* If the next token is not a `,', then the list is
16076          complete.  */
16077       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
16078         break;
16079       /* Consume the `,' token.  */
16080       cp_lexer_consume_token (parser->lexer);
16081     }
16082
16083   return clobbers;
16084 }
16085
16086 /* Parse an (optional) series of attributes.
16087
16088    attributes:
16089      attributes attribute
16090
16091    attribute:
16092      __attribute__ (( attribute-list [opt] ))
16093
16094    The return value is as for cp_parser_attribute_list.  */
16095
16096 static tree
16097 cp_parser_attributes_opt (cp_parser* parser)
16098 {
16099   tree attributes = NULL_TREE;
16100
16101   while (true)
16102     {
16103       cp_token *token;
16104       tree attribute_list;
16105
16106       /* Peek at the next token.  */
16107       token = cp_lexer_peek_token (parser->lexer);
16108       /* If it's not `__attribute__', then we're done.  */
16109       if (token->keyword != RID_ATTRIBUTE)
16110         break;
16111
16112       /* Consume the `__attribute__' keyword.  */
16113       cp_lexer_consume_token (parser->lexer);
16114       /* Look for the two `(' tokens.  */
16115       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16116       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
16117
16118       /* Peek at the next token.  */
16119       token = cp_lexer_peek_token (parser->lexer);
16120       if (token->type != CPP_CLOSE_PAREN)
16121         /* Parse the attribute-list.  */
16122         attribute_list = cp_parser_attribute_list (parser);
16123       else
16124         /* If the next token is a `)', then there is no attribute
16125            list.  */
16126         attribute_list = NULL;
16127
16128       /* Look for the two `)' tokens.  */
16129       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16130       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16131
16132       /* Add these new attributes to the list.  */
16133       attributes = chainon (attributes, attribute_list);
16134     }
16135
16136   return attributes;
16137 }
16138
16139 /* Parse an attribute-list.
16140
16141    attribute-list:
16142      attribute
16143      attribute-list , attribute
16144
16145    attribute:
16146      identifier
16147      identifier ( identifier )
16148      identifier ( identifier , expression-list )
16149      identifier ( expression-list )
16150
16151    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
16152    to an attribute.  The TREE_PURPOSE of each node is the identifier
16153    indicating which attribute is in use.  The TREE_VALUE represents
16154    the arguments, if any.  */
16155
16156 static tree
16157 cp_parser_attribute_list (cp_parser* parser)
16158 {
16159   tree attribute_list = NULL_TREE;
16160   bool save_translate_strings_p = parser->translate_strings_p;
16161
16162   parser->translate_strings_p = false;
16163   while (true)
16164     {
16165       cp_token *token;
16166       tree identifier;
16167       tree attribute;
16168
16169       /* Look for the identifier.  We also allow keywords here; for
16170          example `__attribute__ ((const))' is legal.  */
16171       token = cp_lexer_peek_token (parser->lexer);
16172       if (token->type == CPP_NAME
16173           || token->type == CPP_KEYWORD)
16174         {
16175           tree arguments = NULL_TREE;
16176
16177           /* Consume the token.  */
16178           token = cp_lexer_consume_token (parser->lexer);
16179
16180           /* Save away the identifier that indicates which attribute
16181              this is.  */
16182           identifier = token->u.value;
16183           attribute = build_tree_list (identifier, NULL_TREE);
16184
16185           /* Peek at the next token.  */
16186           token = cp_lexer_peek_token (parser->lexer);
16187           /* If it's an `(', then parse the attribute arguments.  */
16188           if (token->type == CPP_OPEN_PAREN)
16189             {
16190               arguments = cp_parser_parenthesized_expression_list
16191                           (parser, true, /*cast_p=*/false,
16192                            /*allow_expansion_p=*/false,
16193                            /*non_constant_p=*/NULL);
16194               /* Save the arguments away.  */
16195               TREE_VALUE (attribute) = arguments;
16196             }
16197
16198           if (arguments != error_mark_node)
16199             {
16200               /* Add this attribute to the list.  */
16201               TREE_CHAIN (attribute) = attribute_list;
16202               attribute_list = attribute;
16203             }
16204
16205           token = cp_lexer_peek_token (parser->lexer);
16206         }
16207       /* Now, look for more attributes.  If the next token isn't a
16208          `,', we're done.  */
16209       if (token->type != CPP_COMMA)
16210         break;
16211
16212       /* Consume the comma and keep going.  */
16213       cp_lexer_consume_token (parser->lexer);
16214     }
16215   parser->translate_strings_p = save_translate_strings_p;
16216
16217   /* We built up the list in reverse order.  */
16218   return nreverse (attribute_list);
16219 }
16220
16221 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
16222    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
16223    current value of the PEDANTIC flag, regardless of whether or not
16224    the `__extension__' keyword is present.  The caller is responsible
16225    for restoring the value of the PEDANTIC flag.  */
16226
16227 static bool
16228 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
16229 {
16230   /* Save the old value of the PEDANTIC flag.  */
16231   *saved_pedantic = pedantic;
16232
16233   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
16234     {
16235       /* Consume the `__extension__' token.  */
16236       cp_lexer_consume_token (parser->lexer);
16237       /* We're not being pedantic while the `__extension__' keyword is
16238          in effect.  */
16239       pedantic = 0;
16240
16241       return true;
16242     }
16243
16244   return false;
16245 }
16246
16247 /* Parse a label declaration.
16248
16249    label-declaration:
16250      __label__ label-declarator-seq ;
16251
16252    label-declarator-seq:
16253      identifier , label-declarator-seq
16254      identifier  */
16255
16256 static void
16257 cp_parser_label_declaration (cp_parser* parser)
16258 {
16259   /* Look for the `__label__' keyword.  */
16260   cp_parser_require_keyword (parser, RID_LABEL, "%<__label__%>");
16261
16262   while (true)
16263     {
16264       tree identifier;
16265
16266       /* Look for an identifier.  */
16267       identifier = cp_parser_identifier (parser);
16268       /* If we failed, stop.  */
16269       if (identifier == error_mark_node)
16270         break;
16271       /* Declare it as a label.  */
16272       finish_label_decl (identifier);
16273       /* If the next token is a `;', stop.  */
16274       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
16275         break;
16276       /* Look for the `,' separating the label declarations.  */
16277       cp_parser_require (parser, CPP_COMMA, "%<,%>");
16278     }
16279
16280   /* Look for the final `;'.  */
16281   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
16282 }
16283
16284 /* Support Functions */
16285
16286 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
16287    NAME should have one of the representations used for an
16288    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
16289    is returned.  If PARSER->SCOPE is a dependent type, then a
16290    SCOPE_REF is returned.
16291
16292    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
16293    returned; the name was already resolved when the TEMPLATE_ID_EXPR
16294    was formed.  Abstractly, such entities should not be passed to this
16295    function, because they do not need to be looked up, but it is
16296    simpler to check for this special case here, rather than at the
16297    call-sites.
16298
16299    In cases not explicitly covered above, this function returns a
16300    DECL, OVERLOAD, or baselink representing the result of the lookup.
16301    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
16302    is returned.
16303
16304    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
16305    (e.g., "struct") that was used.  In that case bindings that do not
16306    refer to types are ignored.
16307
16308    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
16309    ignored.
16310
16311    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
16312    are ignored.
16313
16314    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
16315    types.
16316
16317    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
16318    TREE_LIST of candidates if name-lookup results in an ambiguity, and
16319    NULL_TREE otherwise.  */
16320
16321 static tree
16322 cp_parser_lookup_name (cp_parser *parser, tree name,
16323                        enum tag_types tag_type,
16324                        bool is_template,
16325                        bool is_namespace,
16326                        bool check_dependency,
16327                        tree *ambiguous_decls)
16328 {
16329   int flags = 0;
16330   tree decl;
16331   tree object_type = parser->context->object_type;
16332
16333   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
16334     flags |= LOOKUP_COMPLAIN;
16335
16336   /* Assume that the lookup will be unambiguous.  */
16337   if (ambiguous_decls)
16338     *ambiguous_decls = NULL_TREE;
16339
16340   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
16341      no longer valid.  Note that if we are parsing tentatively, and
16342      the parse fails, OBJECT_TYPE will be automatically restored.  */
16343   parser->context->object_type = NULL_TREE;
16344
16345   if (name == error_mark_node)
16346     return error_mark_node;
16347
16348   /* A template-id has already been resolved; there is no lookup to
16349      do.  */
16350   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
16351     return name;
16352   if (BASELINK_P (name))
16353     {
16354       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
16355                   == TEMPLATE_ID_EXPR);
16356       return name;
16357     }
16358
16359   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
16360      it should already have been checked to make sure that the name
16361      used matches the type being destroyed.  */
16362   if (TREE_CODE (name) == BIT_NOT_EXPR)
16363     {
16364       tree type;
16365
16366       /* Figure out to which type this destructor applies.  */
16367       if (parser->scope)
16368         type = parser->scope;
16369       else if (object_type)
16370         type = object_type;
16371       else
16372         type = current_class_type;
16373       /* If that's not a class type, there is no destructor.  */
16374       if (!type || !CLASS_TYPE_P (type))
16375         return error_mark_node;
16376       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
16377         lazily_declare_fn (sfk_destructor, type);
16378       if (!CLASSTYPE_DESTRUCTORS (type))
16379           return error_mark_node;
16380       /* If it was a class type, return the destructor.  */
16381       return CLASSTYPE_DESTRUCTORS (type);
16382     }
16383
16384   /* By this point, the NAME should be an ordinary identifier.  If
16385      the id-expression was a qualified name, the qualifying scope is
16386      stored in PARSER->SCOPE at this point.  */
16387   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
16388
16389   /* Perform the lookup.  */
16390   if (parser->scope)
16391     {
16392       bool dependent_p;
16393
16394       if (parser->scope == error_mark_node)
16395         return error_mark_node;
16396
16397       /* If the SCOPE is dependent, the lookup must be deferred until
16398          the template is instantiated -- unless we are explicitly
16399          looking up names in uninstantiated templates.  Even then, we
16400          cannot look up the name if the scope is not a class type; it
16401          might, for example, be a template type parameter.  */
16402       dependent_p = (TYPE_P (parser->scope)
16403                      && !(parser->in_declarator_p
16404                           && currently_open_class (parser->scope))
16405                      && dependent_type_p (parser->scope));
16406       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
16407            && dependent_p)
16408         {
16409           if (tag_type)
16410             {
16411               tree type;
16412
16413               /* The resolution to Core Issue 180 says that `struct
16414                  A::B' should be considered a type-name, even if `A'
16415                  is dependent.  */
16416               type = make_typename_type (parser->scope, name, tag_type,
16417                                          /*complain=*/tf_error);
16418               decl = TYPE_NAME (type);
16419             }
16420           else if (is_template
16421                    && (cp_parser_next_token_ends_template_argument_p (parser)
16422                        || cp_lexer_next_token_is (parser->lexer,
16423                                                   CPP_CLOSE_PAREN)))
16424             decl = make_unbound_class_template (parser->scope,
16425                                                 name, NULL_TREE,
16426                                                 /*complain=*/tf_error);
16427           else
16428             decl = build_qualified_name (/*type=*/NULL_TREE,
16429                                          parser->scope, name,
16430                                          is_template);
16431         }
16432       else
16433         {
16434           tree pushed_scope = NULL_TREE;
16435
16436           /* If PARSER->SCOPE is a dependent type, then it must be a
16437              class type, and we must not be checking dependencies;
16438              otherwise, we would have processed this lookup above.  So
16439              that PARSER->SCOPE is not considered a dependent base by
16440              lookup_member, we must enter the scope here.  */
16441           if (dependent_p)
16442             pushed_scope = push_scope (parser->scope);
16443           /* If the PARSER->SCOPE is a template specialization, it
16444              may be instantiated during name lookup.  In that case,
16445              errors may be issued.  Even if we rollback the current
16446              tentative parse, those errors are valid.  */
16447           decl = lookup_qualified_name (parser->scope, name,
16448                                         tag_type != none_type,
16449                                         /*complain=*/true);
16450
16451           /* If we have a single function from a using decl, pull it out.  */
16452           if (decl
16453               && TREE_CODE (decl) == OVERLOAD
16454               && !really_overloaded_fn (decl))
16455             decl = OVL_FUNCTION (decl);
16456
16457           if (pushed_scope)
16458             pop_scope (pushed_scope);
16459         }
16460       parser->qualifying_scope = parser->scope;
16461       parser->object_scope = NULL_TREE;
16462     }
16463   else if (object_type)
16464     {
16465       tree object_decl = NULL_TREE;
16466       /* Look up the name in the scope of the OBJECT_TYPE, unless the
16467          OBJECT_TYPE is not a class.  */
16468       if (CLASS_TYPE_P (object_type))
16469         /* If the OBJECT_TYPE is a template specialization, it may
16470            be instantiated during name lookup.  In that case, errors
16471            may be issued.  Even if we rollback the current tentative
16472            parse, those errors are valid.  */
16473         object_decl = lookup_member (object_type,
16474                                      name,
16475                                      /*protect=*/0,
16476                                      tag_type != none_type);
16477       /* Look it up in the enclosing context, too.  */
16478       decl = lookup_name_real (name, tag_type != none_type,
16479                                /*nonclass=*/0,
16480                                /*block_p=*/true, is_namespace, flags);
16481       parser->object_scope = object_type;
16482       parser->qualifying_scope = NULL_TREE;
16483       if (object_decl)
16484         decl = object_decl;
16485     }
16486   else
16487     {
16488       decl = lookup_name_real (name, tag_type != none_type,
16489                                /*nonclass=*/0,
16490                                /*block_p=*/true, is_namespace, flags);
16491       parser->qualifying_scope = NULL_TREE;
16492       parser->object_scope = NULL_TREE;
16493     }
16494
16495   /* If the lookup failed, let our caller know.  */
16496   if (!decl || decl == error_mark_node)
16497     return error_mark_node;
16498
16499   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
16500   if (TREE_CODE (decl) == TREE_LIST)
16501     {
16502       if (ambiguous_decls)
16503         *ambiguous_decls = decl;
16504       /* The error message we have to print is too complicated for
16505          cp_parser_error, so we incorporate its actions directly.  */
16506       if (!cp_parser_simulate_error (parser))
16507         {
16508           error ("reference to %qD is ambiguous", name);
16509           print_candidates (decl);
16510         }
16511       return error_mark_node;
16512     }
16513
16514   gcc_assert (DECL_P (decl)
16515               || TREE_CODE (decl) == OVERLOAD
16516               || TREE_CODE (decl) == SCOPE_REF
16517               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
16518               || BASELINK_P (decl));
16519
16520   /* If we have resolved the name of a member declaration, check to
16521      see if the declaration is accessible.  When the name resolves to
16522      set of overloaded functions, accessibility is checked when
16523      overload resolution is done.
16524
16525      During an explicit instantiation, access is not checked at all,
16526      as per [temp.explicit].  */
16527   if (DECL_P (decl))
16528     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
16529
16530   return decl;
16531 }
16532
16533 /* Like cp_parser_lookup_name, but for use in the typical case where
16534    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
16535    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
16536
16537 static tree
16538 cp_parser_lookup_name_simple (cp_parser* parser, tree name)
16539 {
16540   return cp_parser_lookup_name (parser, name,
16541                                 none_type,
16542                                 /*is_template=*/false,
16543                                 /*is_namespace=*/false,
16544                                 /*check_dependency=*/true,
16545                                 /*ambiguous_decls=*/NULL);
16546 }
16547
16548 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
16549    the current context, return the TYPE_DECL.  If TAG_NAME_P is
16550    true, the DECL indicates the class being defined in a class-head,
16551    or declared in an elaborated-type-specifier.
16552
16553    Otherwise, return DECL.  */
16554
16555 static tree
16556 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
16557 {
16558   /* If the TEMPLATE_DECL is being declared as part of a class-head,
16559      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
16560
16561        struct A {
16562          template <typename T> struct B;
16563        };
16564
16565        template <typename T> struct A::B {};
16566
16567      Similarly, in an elaborated-type-specifier:
16568
16569        namespace N { struct X{}; }
16570
16571        struct A {
16572          template <typename T> friend struct N::X;
16573        };
16574
16575      However, if the DECL refers to a class type, and we are in
16576      the scope of the class, then the name lookup automatically
16577      finds the TYPE_DECL created by build_self_reference rather
16578      than a TEMPLATE_DECL.  For example, in:
16579
16580        template <class T> struct S {
16581          S s;
16582        };
16583
16584      there is no need to handle such case.  */
16585
16586   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
16587     return DECL_TEMPLATE_RESULT (decl);
16588
16589   return decl;
16590 }
16591
16592 /* If too many, or too few, template-parameter lists apply to the
16593    declarator, issue an error message.  Returns TRUE if all went well,
16594    and FALSE otherwise.  */
16595
16596 static bool
16597 cp_parser_check_declarator_template_parameters (cp_parser* parser,
16598                                                 cp_declarator *declarator)
16599 {
16600   unsigned num_templates;
16601
16602   /* We haven't seen any classes that involve template parameters yet.  */
16603   num_templates = 0;
16604
16605   switch (declarator->kind)
16606     {
16607     case cdk_id:
16608       if (declarator->u.id.qualifying_scope)
16609         {
16610           tree scope;
16611           tree member;
16612
16613           scope = declarator->u.id.qualifying_scope;
16614           member = declarator->u.id.unqualified_name;
16615
16616           while (scope && CLASS_TYPE_P (scope))
16617             {
16618               /* You're supposed to have one `template <...>'
16619                  for every template class, but you don't need one
16620                  for a full specialization.  For example:
16621
16622                  template <class T> struct S{};
16623                  template <> struct S<int> { void f(); };
16624                  void S<int>::f () {}
16625
16626                  is correct; there shouldn't be a `template <>' for
16627                  the definition of `S<int>::f'.  */
16628               if (!CLASSTYPE_TEMPLATE_INFO (scope))
16629                 /* If SCOPE does not have template information of any
16630                    kind, then it is not a template, nor is it nested
16631                    within a template.  */
16632                 break;
16633               if (explicit_class_specialization_p (scope))
16634                 break;
16635               if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
16636                 ++num_templates;
16637
16638               scope = TYPE_CONTEXT (scope);
16639             }
16640         }
16641       else if (TREE_CODE (declarator->u.id.unqualified_name)
16642                == TEMPLATE_ID_EXPR)
16643         /* If the DECLARATOR has the form `X<y>' then it uses one
16644            additional level of template parameters.  */
16645         ++num_templates;
16646
16647       return cp_parser_check_template_parameters (parser,
16648                                                   num_templates);
16649
16650     case cdk_function:
16651     case cdk_array:
16652     case cdk_pointer:
16653     case cdk_reference:
16654     case cdk_ptrmem:
16655       return (cp_parser_check_declarator_template_parameters
16656               (parser, declarator->declarator));
16657
16658     case cdk_error:
16659       return true;
16660
16661     default:
16662       gcc_unreachable ();
16663     }
16664   return false;
16665 }
16666
16667 /* NUM_TEMPLATES were used in the current declaration.  If that is
16668    invalid, return FALSE and issue an error messages.  Otherwise,
16669    return TRUE.  */
16670
16671 static bool
16672 cp_parser_check_template_parameters (cp_parser* parser,
16673                                      unsigned num_templates)
16674 {
16675   /* If there are more template classes than parameter lists, we have
16676      something like:
16677
16678        template <class T> void S<T>::R<T>::f ();  */
16679   if (parser->num_template_parameter_lists < num_templates)
16680     {
16681       error ("too few template-parameter-lists");
16682       return false;
16683     }
16684   /* If there are the same number of template classes and parameter
16685      lists, that's OK.  */
16686   if (parser->num_template_parameter_lists == num_templates)
16687     return true;
16688   /* If there are more, but only one more, then we are referring to a
16689      member template.  That's OK too.  */
16690   if (parser->num_template_parameter_lists == num_templates + 1)
16691       return true;
16692   /* Otherwise, there are too many template parameter lists.  We have
16693      something like:
16694
16695      template <class T> template <class U> void S::f();  */
16696   error ("too many template-parameter-lists");
16697   return false;
16698 }
16699
16700 /* Parse an optional `::' token indicating that the following name is
16701    from the global namespace.  If so, PARSER->SCOPE is set to the
16702    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
16703    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
16704    Returns the new value of PARSER->SCOPE, if the `::' token is
16705    present, and NULL_TREE otherwise.  */
16706
16707 static tree
16708 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
16709 {
16710   cp_token *token;
16711
16712   /* Peek at the next token.  */
16713   token = cp_lexer_peek_token (parser->lexer);
16714   /* If we're looking at a `::' token then we're starting from the
16715      global namespace, not our current location.  */
16716   if (token->type == CPP_SCOPE)
16717     {
16718       /* Consume the `::' token.  */
16719       cp_lexer_consume_token (parser->lexer);
16720       /* Set the SCOPE so that we know where to start the lookup.  */
16721       parser->scope = global_namespace;
16722       parser->qualifying_scope = global_namespace;
16723       parser->object_scope = NULL_TREE;
16724
16725       return parser->scope;
16726     }
16727   else if (!current_scope_valid_p)
16728     {
16729       parser->scope = NULL_TREE;
16730       parser->qualifying_scope = NULL_TREE;
16731       parser->object_scope = NULL_TREE;
16732     }
16733
16734   return NULL_TREE;
16735 }
16736
16737 /* Returns TRUE if the upcoming token sequence is the start of a
16738    constructor declarator.  If FRIEND_P is true, the declarator is
16739    preceded by the `friend' specifier.  */
16740
16741 static bool
16742 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
16743 {
16744   bool constructor_p;
16745   tree type_decl = NULL_TREE;
16746   bool nested_name_p;
16747   cp_token *next_token;
16748
16749   /* The common case is that this is not a constructor declarator, so
16750      try to avoid doing lots of work if at all possible.  It's not
16751      valid declare a constructor at function scope.  */
16752   if (parser->in_function_body)
16753     return false;
16754   /* And only certain tokens can begin a constructor declarator.  */
16755   next_token = cp_lexer_peek_token (parser->lexer);
16756   if (next_token->type != CPP_NAME
16757       && next_token->type != CPP_SCOPE
16758       && next_token->type != CPP_NESTED_NAME_SPECIFIER
16759       && next_token->type != CPP_TEMPLATE_ID)
16760     return false;
16761
16762   /* Parse tentatively; we are going to roll back all of the tokens
16763      consumed here.  */
16764   cp_parser_parse_tentatively (parser);
16765   /* Assume that we are looking at a constructor declarator.  */
16766   constructor_p = true;
16767
16768   /* Look for the optional `::' operator.  */
16769   cp_parser_global_scope_opt (parser,
16770                               /*current_scope_valid_p=*/false);
16771   /* Look for the nested-name-specifier.  */
16772   nested_name_p
16773     = (cp_parser_nested_name_specifier_opt (parser,
16774                                             /*typename_keyword_p=*/false,
16775                                             /*check_dependency_p=*/false,
16776                                             /*type_p=*/false,
16777                                             /*is_declaration=*/false)
16778        != NULL_TREE);
16779   /* Outside of a class-specifier, there must be a
16780      nested-name-specifier.  */
16781   if (!nested_name_p &&
16782       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
16783        || friend_p))
16784     constructor_p = false;
16785   /* If we still think that this might be a constructor-declarator,
16786      look for a class-name.  */
16787   if (constructor_p)
16788     {
16789       /* If we have:
16790
16791            template <typename T> struct S { S(); };
16792            template <typename T> S<T>::S ();
16793
16794          we must recognize that the nested `S' names a class.
16795          Similarly, for:
16796
16797            template <typename T> S<T>::S<T> ();
16798
16799          we must recognize that the nested `S' names a template.  */
16800       type_decl = cp_parser_class_name (parser,
16801                                         /*typename_keyword_p=*/false,
16802                                         /*template_keyword_p=*/false,
16803                                         none_type,
16804                                         /*check_dependency_p=*/false,
16805                                         /*class_head_p=*/false,
16806                                         /*is_declaration=*/false);
16807       /* If there was no class-name, then this is not a constructor.  */
16808       constructor_p = !cp_parser_error_occurred (parser);
16809     }
16810
16811   /* If we're still considering a constructor, we have to see a `(',
16812      to begin the parameter-declaration-clause, followed by either a
16813      `)', an `...', or a decl-specifier.  We need to check for a
16814      type-specifier to avoid being fooled into thinking that:
16815
16816        S::S (f) (int);
16817
16818      is a constructor.  (It is actually a function named `f' that
16819      takes one parameter (of type `int') and returns a value of type
16820      `S::S'.  */
16821   if (constructor_p
16822       && cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
16823     {
16824       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
16825           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
16826           /* A parameter declaration begins with a decl-specifier,
16827              which is either the "attribute" keyword, a storage class
16828              specifier, or (usually) a type-specifier.  */
16829           && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
16830         {
16831           tree type;
16832           tree pushed_scope = NULL_TREE;
16833           unsigned saved_num_template_parameter_lists;
16834
16835           /* Names appearing in the type-specifier should be looked up
16836              in the scope of the class.  */
16837           if (current_class_type)
16838             type = NULL_TREE;
16839           else
16840             {
16841               type = TREE_TYPE (type_decl);
16842               if (TREE_CODE (type) == TYPENAME_TYPE)
16843                 {
16844                   type = resolve_typename_type (type,
16845                                                 /*only_current_p=*/false);
16846                   if (TREE_CODE (type) == TYPENAME_TYPE)
16847                     {
16848                       cp_parser_abort_tentative_parse (parser);
16849                       return false;
16850                     }
16851                 }
16852               pushed_scope = push_scope (type);
16853             }
16854
16855           /* Inside the constructor parameter list, surrounding
16856              template-parameter-lists do not apply.  */
16857           saved_num_template_parameter_lists
16858             = parser->num_template_parameter_lists;
16859           parser->num_template_parameter_lists = 0;
16860
16861           /* Look for the type-specifier.  */
16862           cp_parser_type_specifier (parser,
16863                                     CP_PARSER_FLAGS_NONE,
16864                                     /*decl_specs=*/NULL,
16865                                     /*is_declarator=*/true,
16866                                     /*declares_class_or_enum=*/NULL,
16867                                     /*is_cv_qualifier=*/NULL);
16868
16869           parser->num_template_parameter_lists
16870             = saved_num_template_parameter_lists;
16871
16872           /* Leave the scope of the class.  */
16873           if (pushed_scope)
16874             pop_scope (pushed_scope);
16875
16876           constructor_p = !cp_parser_error_occurred (parser);
16877         }
16878     }
16879   else
16880     constructor_p = false;
16881   /* We did not really want to consume any tokens.  */
16882   cp_parser_abort_tentative_parse (parser);
16883
16884   return constructor_p;
16885 }
16886
16887 /* Parse the definition of the function given by the DECL_SPECIFIERS,
16888    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
16889    they must be performed once we are in the scope of the function.
16890
16891    Returns the function defined.  */
16892
16893 static tree
16894 cp_parser_function_definition_from_specifiers_and_declarator
16895   (cp_parser* parser,
16896    cp_decl_specifier_seq *decl_specifiers,
16897    tree attributes,
16898    const cp_declarator *declarator)
16899 {
16900   tree fn;
16901   bool success_p;
16902
16903   /* Begin the function-definition.  */
16904   success_p = start_function (decl_specifiers, declarator, attributes);
16905
16906   /* The things we're about to see are not directly qualified by any
16907      template headers we've seen thus far.  */
16908   reset_specialization ();
16909
16910   /* If there were names looked up in the decl-specifier-seq that we
16911      did not check, check them now.  We must wait until we are in the
16912      scope of the function to perform the checks, since the function
16913      might be a friend.  */
16914   perform_deferred_access_checks ();
16915
16916   if (!success_p)
16917     {
16918       /* Skip the entire function.  */
16919       cp_parser_skip_to_end_of_block_or_statement (parser);
16920       fn = error_mark_node;
16921     }
16922   else if (DECL_INITIAL (current_function_decl) != error_mark_node)
16923     {
16924       /* Seen already, skip it.  An error message has already been output.  */
16925       cp_parser_skip_to_end_of_block_or_statement (parser);
16926       fn = current_function_decl;
16927       current_function_decl = NULL_TREE;
16928       /* If this is a function from a class, pop the nested class.  */
16929       if (current_class_name)
16930         pop_nested_class ();
16931     }
16932   else
16933     fn = cp_parser_function_definition_after_declarator (parser,
16934                                                          /*inline_p=*/false);
16935
16936   return fn;
16937 }
16938
16939 /* Parse the part of a function-definition that follows the
16940    declarator.  INLINE_P is TRUE iff this function is an inline
16941    function defined with a class-specifier.
16942
16943    Returns the function defined.  */
16944
16945 static tree
16946 cp_parser_function_definition_after_declarator (cp_parser* parser,
16947                                                 bool inline_p)
16948 {
16949   tree fn;
16950   bool ctor_initializer_p = false;
16951   bool saved_in_unbraced_linkage_specification_p;
16952   bool saved_in_function_body;
16953   unsigned saved_num_template_parameter_lists;
16954
16955   saved_in_function_body = parser->in_function_body;
16956   parser->in_function_body = true;
16957   /* If the next token is `return', then the code may be trying to
16958      make use of the "named return value" extension that G++ used to
16959      support.  */
16960   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
16961     {
16962       /* Consume the `return' keyword.  */
16963       cp_lexer_consume_token (parser->lexer);
16964       /* Look for the identifier that indicates what value is to be
16965          returned.  */
16966       cp_parser_identifier (parser);
16967       /* Issue an error message.  */
16968       error ("named return values are no longer supported");
16969       /* Skip tokens until we reach the start of the function body.  */
16970       while (true)
16971         {
16972           cp_token *token = cp_lexer_peek_token (parser->lexer);
16973           if (token->type == CPP_OPEN_BRACE
16974               || token->type == CPP_EOF
16975               || token->type == CPP_PRAGMA_EOL)
16976             break;
16977           cp_lexer_consume_token (parser->lexer);
16978         }
16979     }
16980   /* The `extern' in `extern "C" void f () { ... }' does not apply to
16981      anything declared inside `f'.  */
16982   saved_in_unbraced_linkage_specification_p
16983     = parser->in_unbraced_linkage_specification_p;
16984   parser->in_unbraced_linkage_specification_p = false;
16985   /* Inside the function, surrounding template-parameter-lists do not
16986      apply.  */
16987   saved_num_template_parameter_lists
16988     = parser->num_template_parameter_lists;
16989   parser->num_template_parameter_lists = 0;
16990   /* If the next token is `try', then we are looking at a
16991      function-try-block.  */
16992   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
16993     ctor_initializer_p = cp_parser_function_try_block (parser);
16994   /* A function-try-block includes the function-body, so we only do
16995      this next part if we're not processing a function-try-block.  */
16996   else
16997     ctor_initializer_p
16998       = cp_parser_ctor_initializer_opt_and_function_body (parser);
16999
17000   /* Finish the function.  */
17001   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
17002                         (inline_p ? 2 : 0));
17003   /* Generate code for it, if necessary.  */
17004   expand_or_defer_fn (fn);
17005   /* Restore the saved values.  */
17006   parser->in_unbraced_linkage_specification_p
17007     = saved_in_unbraced_linkage_specification_p;
17008   parser->num_template_parameter_lists
17009     = saved_num_template_parameter_lists;
17010   parser->in_function_body = saved_in_function_body;
17011
17012   return fn;
17013 }
17014
17015 /* Parse a template-declaration, assuming that the `export' (and
17016    `extern') keywords, if present, has already been scanned.  MEMBER_P
17017    is as for cp_parser_template_declaration.  */
17018
17019 static void
17020 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
17021 {
17022   tree decl = NULL_TREE;
17023   VEC (deferred_access_check,gc) *checks;
17024   tree parameter_list;
17025   bool friend_p = false;
17026   bool need_lang_pop;
17027
17028   /* Look for the `template' keyword.  */
17029   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "%<template%>"))
17030     return;
17031
17032   /* And the `<'.  */
17033   if (!cp_parser_require (parser, CPP_LESS, "%<<%>"))
17034     return;
17035   if (at_class_scope_p () && current_function_decl)
17036     {
17037       /* 14.5.2.2 [temp.mem]
17038
17039          A local class shall not have member templates.  */
17040       error ("invalid declaration of member template in local class");
17041       cp_parser_skip_to_end_of_block_or_statement (parser);
17042       return;
17043     }
17044   /* [temp]
17045
17046      A template ... shall not have C linkage.  */
17047   if (current_lang_name == lang_name_c)
17048     {
17049       error ("template with C linkage");
17050       /* Give it C++ linkage to avoid confusing other parts of the
17051          front end.  */
17052       push_lang_context (lang_name_cplusplus);
17053       need_lang_pop = true;
17054     }
17055   else
17056     need_lang_pop = false;
17057
17058   /* We cannot perform access checks on the template parameter
17059      declarations until we know what is being declared, just as we
17060      cannot check the decl-specifier list.  */
17061   push_deferring_access_checks (dk_deferred);
17062
17063   /* If the next token is `>', then we have an invalid
17064      specialization.  Rather than complain about an invalid template
17065      parameter, issue an error message here.  */
17066   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
17067     {
17068       cp_parser_error (parser, "invalid explicit specialization");
17069       begin_specialization ();
17070       parameter_list = NULL_TREE;
17071     }
17072   else
17073     /* Parse the template parameters.  */
17074     parameter_list = cp_parser_template_parameter_list (parser);
17075
17076   /* Get the deferred access checks from the parameter list.  These
17077      will be checked once we know what is being declared, as for a
17078      member template the checks must be performed in the scope of the
17079      class containing the member.  */
17080   checks = get_deferred_access_checks ();
17081
17082   /* Look for the `>'.  */
17083   cp_parser_skip_to_end_of_template_parameter_list (parser);
17084   /* We just processed one more parameter list.  */
17085   ++parser->num_template_parameter_lists;
17086   /* If the next token is `template', there are more template
17087      parameters.  */
17088   if (cp_lexer_next_token_is_keyword (parser->lexer,
17089                                       RID_TEMPLATE))
17090     cp_parser_template_declaration_after_export (parser, member_p);
17091   else
17092     {
17093       /* There are no access checks when parsing a template, as we do not
17094          know if a specialization will be a friend.  */
17095       push_deferring_access_checks (dk_no_check);
17096       decl = cp_parser_single_declaration (parser,
17097                                            checks,
17098                                            member_p,
17099                                            /*explicit_specialization_p=*/false,
17100                                            &friend_p);
17101       pop_deferring_access_checks ();
17102
17103       /* If this is a member template declaration, let the front
17104          end know.  */
17105       if (member_p && !friend_p && decl)
17106         {
17107           if (TREE_CODE (decl) == TYPE_DECL)
17108             cp_parser_check_access_in_redeclaration (decl);
17109
17110           decl = finish_member_template_decl (decl);
17111         }
17112       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
17113         make_friend_class (current_class_type, TREE_TYPE (decl),
17114                            /*complain=*/true);
17115     }
17116   /* We are done with the current parameter list.  */
17117   --parser->num_template_parameter_lists;
17118
17119   pop_deferring_access_checks ();
17120
17121   /* Finish up.  */
17122   finish_template_decl (parameter_list);
17123
17124   /* Register member declarations.  */
17125   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
17126     finish_member_declaration (decl);
17127   /* For the erroneous case of a template with C linkage, we pushed an
17128      implicit C++ linkage scope; exit that scope now.  */
17129   if (need_lang_pop)
17130     pop_lang_context ();
17131   /* If DECL is a function template, we must return to parse it later.
17132      (Even though there is no definition, there might be default
17133      arguments that need handling.)  */
17134   if (member_p && decl
17135       && (TREE_CODE (decl) == FUNCTION_DECL
17136           || DECL_FUNCTION_TEMPLATE_P (decl)))
17137     TREE_VALUE (parser->unparsed_functions_queues)
17138       = tree_cons (NULL_TREE, decl,
17139                    TREE_VALUE (parser->unparsed_functions_queues));
17140 }
17141
17142 /* Perform the deferred access checks from a template-parameter-list.
17143    CHECKS is a TREE_LIST of access checks, as returned by
17144    get_deferred_access_checks.  */
17145
17146 static void
17147 cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
17148 {
17149   ++processing_template_parmlist;
17150   perform_access_checks (checks);
17151   --processing_template_parmlist;
17152 }
17153
17154 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
17155    `function-definition' sequence.  MEMBER_P is true, this declaration
17156    appears in a class scope.
17157
17158    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
17159    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
17160
17161 static tree
17162 cp_parser_single_declaration (cp_parser* parser,
17163                               VEC (deferred_access_check,gc)* checks,
17164                               bool member_p,
17165                               bool explicit_specialization_p,
17166                               bool* friend_p)
17167 {
17168   int declares_class_or_enum;
17169   tree decl = NULL_TREE;
17170   cp_decl_specifier_seq decl_specifiers;
17171   bool function_definition_p = false;
17172
17173   /* This function is only used when processing a template
17174      declaration.  */
17175   gcc_assert (innermost_scope_kind () == sk_template_parms
17176               || innermost_scope_kind () == sk_template_spec);
17177
17178   /* Defer access checks until we know what is being declared.  */
17179   push_deferring_access_checks (dk_deferred);
17180
17181   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
17182      alternative.  */
17183   cp_parser_decl_specifier_seq (parser,
17184                                 CP_PARSER_FLAGS_OPTIONAL,
17185                                 &decl_specifiers,
17186                                 &declares_class_or_enum);
17187   if (friend_p)
17188     *friend_p = cp_parser_friend_p (&decl_specifiers);
17189
17190   /* There are no template typedefs.  */
17191   if (decl_specifiers.specs[(int) ds_typedef])
17192     {
17193       error ("template declaration of %qs", "typedef");
17194       decl = error_mark_node;
17195     }
17196
17197   /* Gather up the access checks that occurred the
17198      decl-specifier-seq.  */
17199   stop_deferring_access_checks ();
17200
17201   /* Check for the declaration of a template class.  */
17202   if (declares_class_or_enum)
17203     {
17204       if (cp_parser_declares_only_class_p (parser))
17205         {
17206           decl = shadow_tag (&decl_specifiers);
17207
17208           /* In this case:
17209
17210                struct C {
17211                  friend template <typename T> struct A<T>::B;
17212                };
17213
17214              A<T>::B will be represented by a TYPENAME_TYPE, and
17215              therefore not recognized by shadow_tag.  */
17216           if (friend_p && *friend_p
17217               && !decl
17218               && decl_specifiers.type
17219               && TYPE_P (decl_specifiers.type))
17220             decl = decl_specifiers.type;
17221
17222           if (decl && decl != error_mark_node)
17223             decl = TYPE_NAME (decl);
17224           else
17225             decl = error_mark_node;
17226
17227           /* Perform access checks for template parameters.  */
17228           cp_parser_perform_template_parameter_access_checks (checks);
17229         }
17230     }
17231   /* If it's not a template class, try for a template function.  If
17232      the next token is a `;', then this declaration does not declare
17233      anything.  But, if there were errors in the decl-specifiers, then
17234      the error might well have come from an attempted class-specifier.
17235      In that case, there's no need to warn about a missing declarator.  */
17236   if (!decl
17237       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
17238           || decl_specifiers.type != error_mark_node))
17239     {
17240       decl = cp_parser_init_declarator (parser,
17241                                         &decl_specifiers,
17242                                         checks,
17243                                         /*function_definition_allowed_p=*/true,
17244                                         member_p,
17245                                         declares_class_or_enum,
17246                                         &function_definition_p);
17247
17248     /* 7.1.1-1 [dcl.stc]
17249
17250        A storage-class-specifier shall not be specified in an explicit
17251        specialization...  */
17252     if (decl
17253         && explicit_specialization_p
17254         && decl_specifiers.storage_class != sc_none)
17255       {
17256         error ("explicit template specialization cannot have a storage class");
17257         decl = error_mark_node;
17258       }
17259     }
17260
17261   pop_deferring_access_checks ();
17262
17263   /* Clear any current qualification; whatever comes next is the start
17264      of something new.  */
17265   parser->scope = NULL_TREE;
17266   parser->qualifying_scope = NULL_TREE;
17267   parser->object_scope = NULL_TREE;
17268   /* Look for a trailing `;' after the declaration.  */
17269   if (!function_definition_p
17270       && (decl == error_mark_node
17271           || !cp_parser_require (parser, CPP_SEMICOLON, "%<;%>")))
17272     cp_parser_skip_to_end_of_block_or_statement (parser);
17273
17274   return decl;
17275 }
17276
17277 /* Parse a cast-expression that is not the operand of a unary "&".  */
17278
17279 static tree
17280 cp_parser_simple_cast_expression (cp_parser *parser)
17281 {
17282   return cp_parser_cast_expression (parser, /*address_p=*/false,
17283                                     /*cast_p=*/false);
17284 }
17285
17286 /* Parse a functional cast to TYPE.  Returns an expression
17287    representing the cast.  */
17288
17289 static tree
17290 cp_parser_functional_cast (cp_parser* parser, tree type)
17291 {
17292   tree expression_list;
17293   tree cast;
17294
17295   expression_list
17296     = cp_parser_parenthesized_expression_list (parser, false,
17297                                                /*cast_p=*/true,
17298                                                /*allow_expansion_p=*/true,
17299                                                /*non_constant_p=*/NULL);
17300
17301   cast = build_functional_cast (type, expression_list,
17302                                 tf_warning_or_error);
17303   /* [expr.const]/1: In an integral constant expression "only type
17304      conversions to integral or enumeration type can be used".  */
17305   if (TREE_CODE (type) == TYPE_DECL)
17306     type = TREE_TYPE (type);
17307   if (cast != error_mark_node
17308       && !cast_valid_in_integral_constant_expression_p (type)
17309       && (cp_parser_non_integral_constant_expression
17310           (parser, "a call to a constructor")))
17311     return error_mark_node;
17312   return cast;
17313 }
17314
17315 /* Save the tokens that make up the body of a member function defined
17316    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
17317    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
17318    specifiers applied to the declaration.  Returns the FUNCTION_DECL
17319    for the member function.  */
17320
17321 static tree
17322 cp_parser_save_member_function_body (cp_parser* parser,
17323                                      cp_decl_specifier_seq *decl_specifiers,
17324                                      cp_declarator *declarator,
17325                                      tree attributes)
17326 {
17327   cp_token *first;
17328   cp_token *last;
17329   tree fn;
17330
17331   /* Create the function-declaration.  */
17332   fn = start_method (decl_specifiers, declarator, attributes);
17333   /* If something went badly wrong, bail out now.  */
17334   if (fn == error_mark_node)
17335     {
17336       /* If there's a function-body, skip it.  */
17337       if (cp_parser_token_starts_function_definition_p
17338           (cp_lexer_peek_token (parser->lexer)))
17339         cp_parser_skip_to_end_of_block_or_statement (parser);
17340       return error_mark_node;
17341     }
17342
17343   /* Remember it, if there default args to post process.  */
17344   cp_parser_save_default_args (parser, fn);
17345
17346   /* Save away the tokens that make up the body of the
17347      function.  */
17348   first = parser->lexer->next_token;
17349   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
17350   /* Handle function try blocks.  */
17351   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
17352     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
17353   last = parser->lexer->next_token;
17354
17355   /* Save away the inline definition; we will process it when the
17356      class is complete.  */
17357   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
17358   DECL_PENDING_INLINE_P (fn) = 1;
17359
17360   /* We need to know that this was defined in the class, so that
17361      friend templates are handled correctly.  */
17362   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
17363
17364   /* We're done with the inline definition.  */
17365   finish_method (fn);
17366
17367   /* Add FN to the queue of functions to be parsed later.  */
17368   TREE_VALUE (parser->unparsed_functions_queues)
17369     = tree_cons (NULL_TREE, fn,
17370                  TREE_VALUE (parser->unparsed_functions_queues));
17371
17372   return fn;
17373 }
17374
17375 /* Parse a template-argument-list, as well as the trailing ">" (but
17376    not the opening ">").  See cp_parser_template_argument_list for the
17377    return value.  */
17378
17379 static tree
17380 cp_parser_enclosed_template_argument_list (cp_parser* parser)
17381 {
17382   tree arguments;
17383   tree saved_scope;
17384   tree saved_qualifying_scope;
17385   tree saved_object_scope;
17386   bool saved_greater_than_is_operator_p;
17387   bool saved_skip_evaluation;
17388
17389   /* [temp.names]
17390
17391      When parsing a template-id, the first non-nested `>' is taken as
17392      the end of the template-argument-list rather than a greater-than
17393      operator.  */
17394   saved_greater_than_is_operator_p
17395     = parser->greater_than_is_operator_p;
17396   parser->greater_than_is_operator_p = false;
17397   /* Parsing the argument list may modify SCOPE, so we save it
17398      here.  */
17399   saved_scope = parser->scope;
17400   saved_qualifying_scope = parser->qualifying_scope;
17401   saved_object_scope = parser->object_scope;
17402   /* We need to evaluate the template arguments, even though this
17403      template-id may be nested within a "sizeof".  */
17404   saved_skip_evaluation = skip_evaluation;
17405   skip_evaluation = false;
17406   /* Parse the template-argument-list itself.  */
17407   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER)
17408       || cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
17409     arguments = NULL_TREE;
17410   else
17411     arguments = cp_parser_template_argument_list (parser);
17412   /* Look for the `>' that ends the template-argument-list. If we find
17413      a '>>' instead, it's probably just a typo.  */
17414   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
17415     {
17416       if (cxx_dialect != cxx98)
17417         {
17418           /* In C++0x, a `>>' in a template argument list or cast
17419              expression is considered to be two separate `>'
17420              tokens. So, change the current token to a `>', but don't
17421              consume it: it will be consumed later when the outer
17422              template argument list (or cast expression) is parsed.
17423              Note that this replacement of `>' for `>>' is necessary
17424              even if we are parsing tentatively: in the tentative
17425              case, after calling
17426              cp_parser_enclosed_template_argument_list we will always
17427              throw away all of the template arguments and the first
17428              closing `>', either because the template argument list
17429              was erroneous or because we are replacing those tokens
17430              with a CPP_TEMPLATE_ID token.  The second `>' (which will
17431              not have been thrown away) is needed either to close an
17432              outer template argument list or to complete a new-style
17433              cast.  */
17434           cp_token *token = cp_lexer_peek_token (parser->lexer);
17435           token->type = CPP_GREATER;
17436         }
17437       else if (!saved_greater_than_is_operator_p)
17438         {
17439           /* If we're in a nested template argument list, the '>>' has
17440             to be a typo for '> >'. We emit the error message, but we
17441             continue parsing and we push a '>' as next token, so that
17442             the argument list will be parsed correctly.  Note that the
17443             global source location is still on the token before the
17444             '>>', so we need to say explicitly where we want it.  */
17445           cp_token *token = cp_lexer_peek_token (parser->lexer);
17446           error ("%H%<>>%> should be %<> >%> "
17447                  "within a nested template argument list",
17448                  &token->location);
17449
17450           token->type = CPP_GREATER;
17451         }
17452       else
17453         {
17454           /* If this is not a nested template argument list, the '>>'
17455             is a typo for '>'. Emit an error message and continue.
17456             Same deal about the token location, but here we can get it
17457             right by consuming the '>>' before issuing the diagnostic.  */
17458           cp_lexer_consume_token (parser->lexer);
17459           error ("spurious %<>>%>, use %<>%> to terminate "
17460                  "a template argument list");
17461         }
17462     }
17463   else
17464     cp_parser_skip_to_end_of_template_parameter_list (parser);
17465   /* The `>' token might be a greater-than operator again now.  */
17466   parser->greater_than_is_operator_p
17467     = saved_greater_than_is_operator_p;
17468   /* Restore the SAVED_SCOPE.  */
17469   parser->scope = saved_scope;
17470   parser->qualifying_scope = saved_qualifying_scope;
17471   parser->object_scope = saved_object_scope;
17472   skip_evaluation = saved_skip_evaluation;
17473
17474   return arguments;
17475 }
17476
17477 /* MEMBER_FUNCTION is a member function, or a friend.  If default
17478    arguments, or the body of the function have not yet been parsed,
17479    parse them now.  */
17480
17481 static void
17482 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
17483 {
17484   /* If this member is a template, get the underlying
17485      FUNCTION_DECL.  */
17486   if (DECL_FUNCTION_TEMPLATE_P (member_function))
17487     member_function = DECL_TEMPLATE_RESULT (member_function);
17488
17489   /* There should not be any class definitions in progress at this
17490      point; the bodies of members are only parsed outside of all class
17491      definitions.  */
17492   gcc_assert (parser->num_classes_being_defined == 0);
17493   /* While we're parsing the member functions we might encounter more
17494      classes.  We want to handle them right away, but we don't want
17495      them getting mixed up with functions that are currently in the
17496      queue.  */
17497   parser->unparsed_functions_queues
17498     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
17499
17500   /* Make sure that any template parameters are in scope.  */
17501   maybe_begin_member_template_processing (member_function);
17502
17503   /* If the body of the function has not yet been parsed, parse it
17504      now.  */
17505   if (DECL_PENDING_INLINE_P (member_function))
17506     {
17507       tree function_scope;
17508       cp_token_cache *tokens;
17509
17510       /* The function is no longer pending; we are processing it.  */
17511       tokens = DECL_PENDING_INLINE_INFO (member_function);
17512       DECL_PENDING_INLINE_INFO (member_function) = NULL;
17513       DECL_PENDING_INLINE_P (member_function) = 0;
17514
17515       /* If this is a local class, enter the scope of the containing
17516          function.  */
17517       function_scope = current_function_decl;
17518       if (function_scope)
17519         push_function_context ();
17520
17521       /* Push the body of the function onto the lexer stack.  */
17522       cp_parser_push_lexer_for_tokens (parser, tokens);
17523
17524       /* Let the front end know that we going to be defining this
17525          function.  */
17526       start_preparsed_function (member_function, NULL_TREE,
17527                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
17528
17529       /* Don't do access checking if it is a templated function.  */
17530       if (processing_template_decl)
17531         push_deferring_access_checks (dk_no_check);
17532
17533       /* Now, parse the body of the function.  */
17534       cp_parser_function_definition_after_declarator (parser,
17535                                                       /*inline_p=*/true);
17536
17537       if (processing_template_decl)
17538         pop_deferring_access_checks ();
17539
17540       /* Leave the scope of the containing function.  */
17541       if (function_scope)
17542         pop_function_context ();
17543       cp_parser_pop_lexer (parser);
17544     }
17545
17546   /* Remove any template parameters from the symbol table.  */
17547   maybe_end_member_template_processing ();
17548
17549   /* Restore the queue.  */
17550   parser->unparsed_functions_queues
17551     = TREE_CHAIN (parser->unparsed_functions_queues);
17552 }
17553
17554 /* If DECL contains any default args, remember it on the unparsed
17555    functions queue.  */
17556
17557 static void
17558 cp_parser_save_default_args (cp_parser* parser, tree decl)
17559 {
17560   tree probe;
17561
17562   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
17563        probe;
17564        probe = TREE_CHAIN (probe))
17565     if (TREE_PURPOSE (probe))
17566       {
17567         TREE_PURPOSE (parser->unparsed_functions_queues)
17568           = tree_cons (current_class_type, decl,
17569                        TREE_PURPOSE (parser->unparsed_functions_queues));
17570         break;
17571       }
17572 }
17573
17574 /* FN is a FUNCTION_DECL which may contains a parameter with an
17575    unparsed DEFAULT_ARG.  Parse the default args now.  This function
17576    assumes that the current scope is the scope in which the default
17577    argument should be processed.  */
17578
17579 static void
17580 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
17581 {
17582   bool saved_local_variables_forbidden_p;
17583   tree parm;
17584
17585   /* While we're parsing the default args, we might (due to the
17586      statement expression extension) encounter more classes.  We want
17587      to handle them right away, but we don't want them getting mixed
17588      up with default args that are currently in the queue.  */
17589   parser->unparsed_functions_queues
17590     = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
17591
17592   /* Local variable names (and the `this' keyword) may not appear
17593      in a default argument.  */
17594   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
17595   parser->local_variables_forbidden_p = true;
17596
17597   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
17598        parm;
17599        parm = TREE_CHAIN (parm))
17600     {
17601       cp_token_cache *tokens;
17602       tree default_arg = TREE_PURPOSE (parm);
17603       tree parsed_arg;
17604       VEC(tree,gc) *insts;
17605       tree copy;
17606       unsigned ix;
17607
17608       if (!default_arg)
17609         continue;
17610
17611       if (TREE_CODE (default_arg) != DEFAULT_ARG)
17612         /* This can happen for a friend declaration for a function
17613            already declared with default arguments.  */
17614         continue;
17615
17616        /* Push the saved tokens for the default argument onto the parser's
17617           lexer stack.  */
17618       tokens = DEFARG_TOKENS (default_arg);
17619       cp_parser_push_lexer_for_tokens (parser, tokens);
17620
17621       /* Parse the assignment-expression.  */
17622       parsed_arg = cp_parser_assignment_expression (parser, /*cast_p=*/false);
17623
17624       if (!processing_template_decl)
17625         parsed_arg = check_default_argument (TREE_VALUE (parm), parsed_arg);
17626
17627       TREE_PURPOSE (parm) = parsed_arg;
17628
17629       /* Update any instantiations we've already created.  */
17630       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
17631            VEC_iterate (tree, insts, ix, copy); ix++)
17632         TREE_PURPOSE (copy) = parsed_arg;
17633
17634       /* If the token stream has not been completely used up, then
17635          there was extra junk after the end of the default
17636          argument.  */
17637       if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
17638         cp_parser_error (parser, "expected %<,%>");
17639
17640       /* Revert to the main lexer.  */
17641       cp_parser_pop_lexer (parser);
17642     }
17643
17644   /* Make sure no default arg is missing.  */
17645   check_default_args (fn);
17646
17647   /* Restore the state of local_variables_forbidden_p.  */
17648   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
17649
17650   /* Restore the queue.  */
17651   parser->unparsed_functions_queues
17652     = TREE_CHAIN (parser->unparsed_functions_queues);
17653 }
17654
17655 /* Parse the operand of `sizeof' (or a similar operator).  Returns
17656    either a TYPE or an expression, depending on the form of the
17657    input.  The KEYWORD indicates which kind of expression we have
17658    encountered.  */
17659
17660 static tree
17661 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
17662 {
17663   tree expr = NULL_TREE;
17664   const char *saved_message;
17665   char *tmp;
17666   bool saved_integral_constant_expression_p;
17667   bool saved_non_integral_constant_expression_p;
17668   bool pack_expansion_p = false;
17669
17670   /* Types cannot be defined in a `sizeof' expression.  Save away the
17671      old message.  */
17672   saved_message = parser->type_definition_forbidden_message;
17673   /* And create the new one.  */
17674   tmp = concat ("types may not be defined in %<",
17675                 IDENTIFIER_POINTER (ridpointers[keyword]),
17676                 "%> expressions", NULL);
17677   parser->type_definition_forbidden_message = tmp;
17678
17679   /* The restrictions on constant-expressions do not apply inside
17680      sizeof expressions.  */
17681   saved_integral_constant_expression_p
17682     = parser->integral_constant_expression_p;
17683   saved_non_integral_constant_expression_p
17684     = parser->non_integral_constant_expression_p;
17685   parser->integral_constant_expression_p = false;
17686
17687   /* If it's a `...', then we are computing the length of a parameter
17688      pack.  */
17689   if (keyword == RID_SIZEOF
17690       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
17691     {
17692       /* Consume the `...'.  */
17693       cp_lexer_consume_token (parser->lexer);
17694       maybe_warn_variadic_templates ();
17695
17696       /* Note that this is an expansion.  */
17697       pack_expansion_p = true;
17698     }
17699
17700   /* Do not actually evaluate the expression.  */
17701   ++skip_evaluation;
17702   /* If it's a `(', then we might be looking at the type-id
17703      construction.  */
17704   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
17705     {
17706       tree type;
17707       bool saved_in_type_id_in_expr_p;
17708
17709       /* We can't be sure yet whether we're looking at a type-id or an
17710          expression.  */
17711       cp_parser_parse_tentatively (parser);
17712       /* Consume the `('.  */
17713       cp_lexer_consume_token (parser->lexer);
17714       /* Parse the type-id.  */
17715       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
17716       parser->in_type_id_in_expr_p = true;
17717       type = cp_parser_type_id (parser);
17718       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
17719       /* Now, look for the trailing `)'.  */
17720       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
17721       /* If all went well, then we're done.  */
17722       if (cp_parser_parse_definitely (parser))
17723         {
17724           cp_decl_specifier_seq decl_specs;
17725
17726           /* Build a trivial decl-specifier-seq.  */
17727           clear_decl_specs (&decl_specs);
17728           decl_specs.type = type;
17729
17730           /* Call grokdeclarator to figure out what type this is.  */
17731           expr = grokdeclarator (NULL,
17732                                  &decl_specs,
17733                                  TYPENAME,
17734                                  /*initialized=*/0,
17735                                  /*attrlist=*/NULL);
17736         }
17737     }
17738
17739   /* If the type-id production did not work out, then we must be
17740      looking at the unary-expression production.  */
17741   if (!expr)
17742     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
17743                                        /*cast_p=*/false);
17744
17745   if (pack_expansion_p)
17746     /* Build a pack expansion. */
17747     expr = make_pack_expansion (expr);
17748
17749   /* Go back to evaluating expressions.  */
17750   --skip_evaluation;
17751
17752   /* Free the message we created.  */
17753   free (tmp);
17754   /* And restore the old one.  */
17755   parser->type_definition_forbidden_message = saved_message;
17756   parser->integral_constant_expression_p
17757     = saved_integral_constant_expression_p;
17758   parser->non_integral_constant_expression_p
17759     = saved_non_integral_constant_expression_p;
17760
17761   return expr;
17762 }
17763
17764 /* If the current declaration has no declarator, return true.  */
17765
17766 static bool
17767 cp_parser_declares_only_class_p (cp_parser *parser)
17768 {
17769   /* If the next token is a `;' or a `,' then there is no
17770      declarator.  */
17771   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
17772           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
17773 }
17774
17775 /* Update the DECL_SPECS to reflect the storage class indicated by
17776    KEYWORD.  */
17777
17778 static void
17779 cp_parser_set_storage_class (cp_parser *parser,
17780                              cp_decl_specifier_seq *decl_specs,
17781                              enum rid keyword)
17782 {
17783   cp_storage_class storage_class;
17784
17785   if (parser->in_unbraced_linkage_specification_p)
17786     {
17787       error ("invalid use of %qD in linkage specification",
17788              ridpointers[keyword]);
17789       return;
17790     }
17791   else if (decl_specs->storage_class != sc_none)
17792     {
17793       decl_specs->conflicting_specifiers_p = true;
17794       return;
17795     }
17796
17797   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
17798       && decl_specs->specs[(int) ds_thread])
17799     {
17800       error ("%<__thread%> before %qD", ridpointers[keyword]);
17801       decl_specs->specs[(int) ds_thread] = 0;
17802     }
17803
17804   switch (keyword)
17805     {
17806     case RID_AUTO:
17807       storage_class = sc_auto;
17808       break;
17809     case RID_REGISTER:
17810       storage_class = sc_register;
17811       break;
17812     case RID_STATIC:
17813       storage_class = sc_static;
17814       break;
17815     case RID_EXTERN:
17816       storage_class = sc_extern;
17817       break;
17818     case RID_MUTABLE:
17819       storage_class = sc_mutable;
17820       break;
17821     default:
17822       gcc_unreachable ();
17823     }
17824   decl_specs->storage_class = storage_class;
17825
17826   /* A storage class specifier cannot be applied alongside a typedef 
17827      specifier. If there is a typedef specifier present then set 
17828      conflicting_specifiers_p which will trigger an error later
17829      on in grokdeclarator. */
17830   if (decl_specs->specs[(int)ds_typedef])
17831     decl_specs->conflicting_specifiers_p = true;
17832 }
17833
17834 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
17835    is true, the type is a user-defined type; otherwise it is a
17836    built-in type specified by a keyword.  */
17837
17838 static void
17839 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
17840                               tree type_spec,
17841                               bool user_defined_p)
17842 {
17843   decl_specs->any_specifiers_p = true;
17844
17845   /* If the user tries to redeclare bool, char16_t, char32_t, or wchar_t
17846      (with, for example, in "typedef int wchar_t;") we remember that
17847      this is what happened.  In system headers, we ignore these
17848      declarations so that G++ can work with system headers that are not
17849      C++-safe.  */
17850   if (decl_specs->specs[(int) ds_typedef]
17851       && !user_defined_p
17852       && (type_spec == boolean_type_node
17853           || type_spec == char16_type_node
17854           || type_spec == char32_type_node
17855           || type_spec == wchar_type_node)
17856       && (decl_specs->type
17857           || decl_specs->specs[(int) ds_long]
17858           || decl_specs->specs[(int) ds_short]
17859           || decl_specs->specs[(int) ds_unsigned]
17860           || decl_specs->specs[(int) ds_signed]))
17861     {
17862       decl_specs->redefined_builtin_type = type_spec;
17863       if (!decl_specs->type)
17864         {
17865           decl_specs->type = type_spec;
17866           decl_specs->user_defined_type_p = false;
17867         }
17868     }
17869   else if (decl_specs->type)
17870     decl_specs->multiple_types_p = true;
17871   else
17872     {
17873       decl_specs->type = type_spec;
17874       decl_specs->user_defined_type_p = user_defined_p;
17875       decl_specs->redefined_builtin_type = NULL_TREE;
17876     }
17877 }
17878
17879 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
17880    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
17881
17882 static bool
17883 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
17884 {
17885   return decl_specifiers->specs[(int) ds_friend] != 0;
17886 }
17887
17888 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
17889    issue an error message indicating that TOKEN_DESC was expected.
17890
17891    Returns the token consumed, if the token had the appropriate type.
17892    Otherwise, returns NULL.  */
17893
17894 static cp_token *
17895 cp_parser_require (cp_parser* parser,
17896                    enum cpp_ttype type,
17897                    const char* token_desc)
17898 {
17899   if (cp_lexer_next_token_is (parser->lexer, type))
17900     return cp_lexer_consume_token (parser->lexer);
17901   else
17902     {
17903       /* Output the MESSAGE -- unless we're parsing tentatively.  */
17904       if (!cp_parser_simulate_error (parser))
17905         {
17906           char *message = concat ("expected ", token_desc, NULL);
17907           cp_parser_error (parser, message);
17908           free (message);
17909         }
17910       return NULL;
17911     }
17912 }
17913
17914 /* An error message is produced if the next token is not '>'.
17915    All further tokens are skipped until the desired token is
17916    found or '{', '}', ';' or an unbalanced ')' or ']'.  */
17917
17918 static void
17919 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
17920 {
17921   /* Current level of '< ... >'.  */
17922   unsigned level = 0;
17923   /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
17924   unsigned nesting_depth = 0;
17925
17926   /* Are we ready, yet?  If not, issue error message.  */
17927   if (cp_parser_require (parser, CPP_GREATER, "%<>%>"))
17928     return;
17929
17930   /* Skip tokens until the desired token is found.  */
17931   while (true)
17932     {
17933       /* Peek at the next token.  */
17934       switch (cp_lexer_peek_token (parser->lexer)->type)
17935         {
17936         case CPP_LESS:
17937           if (!nesting_depth)
17938             ++level;
17939           break;
17940
17941         case CPP_RSHIFT:
17942           if (cxx_dialect == cxx98)
17943             /* C++0x views the `>>' operator as two `>' tokens, but
17944                C++98 does not. */
17945             break;
17946           else if (!nesting_depth && level-- == 0)
17947             {
17948               /* We've hit a `>>' where the first `>' closes the
17949                  template argument list, and the second `>' is
17950                  spurious.  Just consume the `>>' and stop; we've
17951                  already produced at least one error.  */
17952               cp_lexer_consume_token (parser->lexer);
17953               return;
17954             }
17955           /* Fall through for C++0x, so we handle the second `>' in
17956              the `>>'.  */
17957
17958         case CPP_GREATER:
17959           if (!nesting_depth && level-- == 0)
17960             {
17961               /* We've reached the token we want, consume it and stop.  */
17962               cp_lexer_consume_token (parser->lexer);
17963               return;
17964             }
17965           break;
17966
17967         case CPP_OPEN_PAREN:
17968         case CPP_OPEN_SQUARE:
17969           ++nesting_depth;
17970           break;
17971
17972         case CPP_CLOSE_PAREN:
17973         case CPP_CLOSE_SQUARE:
17974           if (nesting_depth-- == 0)
17975             return;
17976           break;
17977
17978         case CPP_EOF:
17979         case CPP_PRAGMA_EOL:
17980         case CPP_SEMICOLON:
17981         case CPP_OPEN_BRACE:
17982         case CPP_CLOSE_BRACE:
17983           /* The '>' was probably forgotten, don't look further.  */
17984           return;
17985
17986         default:
17987           break;
17988         }
17989
17990       /* Consume this token.  */
17991       cp_lexer_consume_token (parser->lexer);
17992     }
17993 }
17994
17995 /* If the next token is the indicated keyword, consume it.  Otherwise,
17996    issue an error message indicating that TOKEN_DESC was expected.
17997
17998    Returns the token consumed, if the token had the appropriate type.
17999    Otherwise, returns NULL.  */
18000
18001 static cp_token *
18002 cp_parser_require_keyword (cp_parser* parser,
18003                            enum rid keyword,
18004                            const char* token_desc)
18005 {
18006   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
18007
18008   if (token && token->keyword != keyword)
18009     {
18010       dyn_string_t error_msg;
18011
18012       /* Format the error message.  */
18013       error_msg = dyn_string_new (0);
18014       dyn_string_append_cstr (error_msg, "expected ");
18015       dyn_string_append_cstr (error_msg, token_desc);
18016       cp_parser_error (parser, error_msg->s);
18017       dyn_string_delete (error_msg);
18018       return NULL;
18019     }
18020
18021   return token;
18022 }
18023
18024 /* Returns TRUE iff TOKEN is a token that can begin the body of a
18025    function-definition.  */
18026
18027 static bool
18028 cp_parser_token_starts_function_definition_p (cp_token* token)
18029 {
18030   return (/* An ordinary function-body begins with an `{'.  */
18031           token->type == CPP_OPEN_BRACE
18032           /* A ctor-initializer begins with a `:'.  */
18033           || token->type == CPP_COLON
18034           /* A function-try-block begins with `try'.  */
18035           || token->keyword == RID_TRY
18036           /* The named return value extension begins with `return'.  */
18037           || token->keyword == RID_RETURN);
18038 }
18039
18040 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
18041    definition.  */
18042
18043 static bool
18044 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
18045 {
18046   cp_token *token;
18047
18048   token = cp_lexer_peek_token (parser->lexer);
18049   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
18050 }
18051
18052 /* Returns TRUE iff the next token is the "," or ">" (or `>>', in
18053    C++0x) ending a template-argument.  */
18054
18055 static bool
18056 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
18057 {
18058   cp_token *token;
18059
18060   token = cp_lexer_peek_token (parser->lexer);
18061   return (token->type == CPP_COMMA 
18062           || token->type == CPP_GREATER
18063           || token->type == CPP_ELLIPSIS
18064           || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT));
18065 }
18066
18067 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
18068    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
18069
18070 static bool
18071 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
18072                                                      size_t n)
18073 {
18074   cp_token *token;
18075
18076   token = cp_lexer_peek_nth_token (parser->lexer, n);
18077   if (token->type == CPP_LESS)
18078     return true;
18079   /* Check for the sequence `<::' in the original code. It would be lexed as
18080      `[:', where `[' is a digraph, and there is no whitespace before
18081      `:'.  */
18082   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
18083     {
18084       cp_token *token2;
18085       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
18086       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
18087         return true;
18088     }
18089   return false;
18090 }
18091
18092 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
18093    or none_type otherwise.  */
18094
18095 static enum tag_types
18096 cp_parser_token_is_class_key (cp_token* token)
18097 {
18098   switch (token->keyword)
18099     {
18100     case RID_CLASS:
18101       return class_type;
18102     case RID_STRUCT:
18103       return record_type;
18104     case RID_UNION:
18105       return union_type;
18106
18107     default:
18108       return none_type;
18109     }
18110 }
18111
18112 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
18113
18114 static void
18115 cp_parser_check_class_key (enum tag_types class_key, tree type)
18116 {
18117   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
18118     pedwarn ("%qs tag used in naming %q#T",
18119             class_key == union_type ? "union"
18120              : class_key == record_type ? "struct" : "class",
18121              type);
18122 }
18123
18124 /* Issue an error message if DECL is redeclared with different
18125    access than its original declaration [class.access.spec/3].
18126    This applies to nested classes and nested class templates.
18127    [class.mem/1].  */
18128
18129 static void
18130 cp_parser_check_access_in_redeclaration (tree decl)
18131 {
18132   if (!decl || !CLASS_TYPE_P (TREE_TYPE (decl)))
18133     return;
18134
18135   if ((TREE_PRIVATE (decl)
18136        != (current_access_specifier == access_private_node))
18137       || (TREE_PROTECTED (decl)
18138           != (current_access_specifier == access_protected_node)))
18139     error ("%qD redeclared with different access", decl);
18140 }
18141
18142 /* Look for the `template' keyword, as a syntactic disambiguator.
18143    Return TRUE iff it is present, in which case it will be
18144    consumed.  */
18145
18146 static bool
18147 cp_parser_optional_template_keyword (cp_parser *parser)
18148 {
18149   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
18150     {
18151       /* The `template' keyword can only be used within templates;
18152          outside templates the parser can always figure out what is a
18153          template and what is not.  */
18154       if (!processing_template_decl)
18155         {
18156           error ("%<template%> (as a disambiguator) is only allowed "
18157                  "within templates");
18158           /* If this part of the token stream is rescanned, the same
18159              error message would be generated.  So, we purge the token
18160              from the stream.  */
18161           cp_lexer_purge_token (parser->lexer);
18162           return false;
18163         }
18164       else
18165         {
18166           /* Consume the `template' keyword.  */
18167           cp_lexer_consume_token (parser->lexer);
18168           return true;
18169         }
18170     }
18171
18172   return false;
18173 }
18174
18175 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
18176    set PARSER->SCOPE, and perform other related actions.  */
18177
18178 static void
18179 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
18180 {
18181   int i;
18182   struct tree_check *check_value;
18183   deferred_access_check *chk;
18184   VEC (deferred_access_check,gc) *checks;
18185
18186   /* Get the stored value.  */
18187   check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
18188   /* Perform any access checks that were deferred.  */
18189   checks = check_value->checks;
18190   if (checks)
18191     {
18192       for (i = 0 ;
18193            VEC_iterate (deferred_access_check, checks, i, chk) ;
18194            ++i)
18195         {
18196           perform_or_defer_access_check (chk->binfo,
18197                                          chk->decl,
18198                                          chk->diag_decl);
18199         }
18200     }
18201   /* Set the scope from the stored value.  */
18202   parser->scope = check_value->value;
18203   parser->qualifying_scope = check_value->qualifying_scope;
18204   parser->object_scope = NULL_TREE;
18205 }
18206
18207 /* Consume tokens up through a non-nested END token.  */
18208
18209 static void
18210 cp_parser_cache_group (cp_parser *parser,
18211                        enum cpp_ttype end,
18212                        unsigned depth)
18213 {
18214   while (true)
18215     {
18216       cp_token *token;
18217
18218       /* Abort a parenthesized expression if we encounter a brace.  */
18219       if ((end == CPP_CLOSE_PAREN || depth == 0)
18220           && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
18221         return;
18222       /* If we've reached the end of the file, stop.  */
18223       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF)
18224           || (end != CPP_PRAGMA_EOL
18225               && cp_lexer_next_token_is (parser->lexer, CPP_PRAGMA_EOL)))
18226         return;
18227       /* Consume the next token.  */
18228       token = cp_lexer_consume_token (parser->lexer);
18229       /* See if it starts a new group.  */
18230       if (token->type == CPP_OPEN_BRACE)
18231         {
18232           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
18233           if (depth == 0)
18234             return;
18235         }
18236       else if (token->type == CPP_OPEN_PAREN)
18237         cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
18238       else if (token->type == CPP_PRAGMA)
18239         cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
18240       else if (token->type == end)
18241         return;
18242     }
18243 }
18244
18245 /* Begin parsing tentatively.  We always save tokens while parsing
18246    tentatively so that if the tentative parsing fails we can restore the
18247    tokens.  */
18248
18249 static void
18250 cp_parser_parse_tentatively (cp_parser* parser)
18251 {
18252   /* Enter a new parsing context.  */
18253   parser->context = cp_parser_context_new (parser->context);
18254   /* Begin saving tokens.  */
18255   cp_lexer_save_tokens (parser->lexer);
18256   /* In order to avoid repetitive access control error messages,
18257      access checks are queued up until we are no longer parsing
18258      tentatively.  */
18259   push_deferring_access_checks (dk_deferred);
18260 }
18261
18262 /* Commit to the currently active tentative parse.  */
18263
18264 static void
18265 cp_parser_commit_to_tentative_parse (cp_parser* parser)
18266 {
18267   cp_parser_context *context;
18268   cp_lexer *lexer;
18269
18270   /* Mark all of the levels as committed.  */
18271   lexer = parser->lexer;
18272   for (context = parser->context; context->next; context = context->next)
18273     {
18274       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
18275         break;
18276       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
18277       while (!cp_lexer_saving_tokens (lexer))
18278         lexer = lexer->next;
18279       cp_lexer_commit_tokens (lexer);
18280     }
18281 }
18282
18283 /* Abort the currently active tentative parse.  All consumed tokens
18284    will be rolled back, and no diagnostics will be issued.  */
18285
18286 static void
18287 cp_parser_abort_tentative_parse (cp_parser* parser)
18288 {
18289   cp_parser_simulate_error (parser);
18290   /* Now, pretend that we want to see if the construct was
18291      successfully parsed.  */
18292   cp_parser_parse_definitely (parser);
18293 }
18294
18295 /* Stop parsing tentatively.  If a parse error has occurred, restore the
18296    token stream.  Otherwise, commit to the tokens we have consumed.
18297    Returns true if no error occurred; false otherwise.  */
18298
18299 static bool
18300 cp_parser_parse_definitely (cp_parser* parser)
18301 {
18302   bool error_occurred;
18303   cp_parser_context *context;
18304
18305   /* Remember whether or not an error occurred, since we are about to
18306      destroy that information.  */
18307   error_occurred = cp_parser_error_occurred (parser);
18308   /* Remove the topmost context from the stack.  */
18309   context = parser->context;
18310   parser->context = context->next;
18311   /* If no parse errors occurred, commit to the tentative parse.  */
18312   if (!error_occurred)
18313     {
18314       /* Commit to the tokens read tentatively, unless that was
18315          already done.  */
18316       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
18317         cp_lexer_commit_tokens (parser->lexer);
18318
18319       pop_to_parent_deferring_access_checks ();
18320     }
18321   /* Otherwise, if errors occurred, roll back our state so that things
18322      are just as they were before we began the tentative parse.  */
18323   else
18324     {
18325       cp_lexer_rollback_tokens (parser->lexer);
18326       pop_deferring_access_checks ();
18327     }
18328   /* Add the context to the front of the free list.  */
18329   context->next = cp_parser_context_free_list;
18330   cp_parser_context_free_list = context;
18331
18332   return !error_occurred;
18333 }
18334
18335 /* Returns true if we are parsing tentatively and are not committed to
18336    this tentative parse.  */
18337
18338 static bool
18339 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
18340 {
18341   return (cp_parser_parsing_tentatively (parser)
18342           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
18343 }
18344
18345 /* Returns nonzero iff an error has occurred during the most recent
18346    tentative parse.  */
18347
18348 static bool
18349 cp_parser_error_occurred (cp_parser* parser)
18350 {
18351   return (cp_parser_parsing_tentatively (parser)
18352           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
18353 }
18354
18355 /* Returns nonzero if GNU extensions are allowed.  */
18356
18357 static bool
18358 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
18359 {
18360   return parser->allow_gnu_extensions_p;
18361 }
18362 \f
18363 /* Objective-C++ Productions */
18364
18365
18366 /* Parse an Objective-C expression, which feeds into a primary-expression
18367    above.
18368
18369    objc-expression:
18370      objc-message-expression
18371      objc-string-literal
18372      objc-encode-expression
18373      objc-protocol-expression
18374      objc-selector-expression
18375
18376   Returns a tree representation of the expression.  */
18377
18378 static tree
18379 cp_parser_objc_expression (cp_parser* parser)
18380 {
18381   /* Try to figure out what kind of declaration is present.  */
18382   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
18383
18384   switch (kwd->type)
18385     {
18386     case CPP_OPEN_SQUARE:
18387       return cp_parser_objc_message_expression (parser);
18388
18389     case CPP_OBJC_STRING:
18390       kwd = cp_lexer_consume_token (parser->lexer);
18391       return objc_build_string_object (kwd->u.value);
18392
18393     case CPP_KEYWORD:
18394       switch (kwd->keyword)
18395         {
18396         case RID_AT_ENCODE:
18397           return cp_parser_objc_encode_expression (parser);
18398
18399         case RID_AT_PROTOCOL:
18400           return cp_parser_objc_protocol_expression (parser);
18401
18402         case RID_AT_SELECTOR:
18403           return cp_parser_objc_selector_expression (parser);
18404
18405         default:
18406           break;
18407         }
18408     default:
18409       error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
18410       cp_parser_skip_to_end_of_block_or_statement (parser);
18411     }
18412
18413   return error_mark_node;
18414 }
18415
18416 /* Parse an Objective-C message expression.
18417
18418    objc-message-expression:
18419      [ objc-message-receiver objc-message-args ]
18420
18421    Returns a representation of an Objective-C message.  */
18422
18423 static tree
18424 cp_parser_objc_message_expression (cp_parser* parser)
18425 {
18426   tree receiver, messageargs;
18427
18428   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
18429   receiver = cp_parser_objc_message_receiver (parser);
18430   messageargs = cp_parser_objc_message_args (parser);
18431   cp_parser_require (parser, CPP_CLOSE_SQUARE, "%<]%>");
18432
18433   return objc_build_message_expr (build_tree_list (receiver, messageargs));
18434 }
18435
18436 /* Parse an objc-message-receiver.
18437
18438    objc-message-receiver:
18439      expression
18440      simple-type-specifier
18441
18442   Returns a representation of the type or expression.  */
18443
18444 static tree
18445 cp_parser_objc_message_receiver (cp_parser* parser)
18446 {
18447   tree rcv;
18448
18449   /* An Objective-C message receiver may be either (1) a type
18450      or (2) an expression.  */
18451   cp_parser_parse_tentatively (parser);
18452   rcv = cp_parser_expression (parser, false);
18453
18454   if (cp_parser_parse_definitely (parser))
18455     return rcv;
18456
18457   rcv = cp_parser_simple_type_specifier (parser,
18458                                          /*decl_specs=*/NULL,
18459                                          CP_PARSER_FLAGS_NONE);
18460
18461   return objc_get_class_reference (rcv);
18462 }
18463
18464 /* Parse the arguments and selectors comprising an Objective-C message.
18465
18466    objc-message-args:
18467      objc-selector
18468      objc-selector-args
18469      objc-selector-args , objc-comma-args
18470
18471    objc-selector-args:
18472      objc-selector [opt] : assignment-expression
18473      objc-selector-args objc-selector [opt] : assignment-expression
18474
18475    objc-comma-args:
18476      assignment-expression
18477      objc-comma-args , assignment-expression
18478
18479    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
18480    selector arguments and TREE_VALUE containing a list of comma
18481    arguments.  */
18482
18483 static tree
18484 cp_parser_objc_message_args (cp_parser* parser)
18485 {
18486   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
18487   bool maybe_unary_selector_p = true;
18488   cp_token *token = cp_lexer_peek_token (parser->lexer);
18489
18490   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
18491     {
18492       tree selector = NULL_TREE, arg;
18493
18494       if (token->type != CPP_COLON)
18495         selector = cp_parser_objc_selector (parser);
18496
18497       /* Detect if we have a unary selector.  */
18498       if (maybe_unary_selector_p
18499           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
18500         return build_tree_list (selector, NULL_TREE);
18501
18502       maybe_unary_selector_p = false;
18503       cp_parser_require (parser, CPP_COLON, "%<:%>");
18504       arg = cp_parser_assignment_expression (parser, false);
18505
18506       sel_args
18507         = chainon (sel_args,
18508                    build_tree_list (selector, arg));
18509
18510       token = cp_lexer_peek_token (parser->lexer);
18511     }
18512
18513   /* Handle non-selector arguments, if any. */
18514   while (token->type == CPP_COMMA)
18515     {
18516       tree arg;
18517
18518       cp_lexer_consume_token (parser->lexer);
18519       arg = cp_parser_assignment_expression (parser, false);
18520
18521       addl_args
18522         = chainon (addl_args,
18523                    build_tree_list (NULL_TREE, arg));
18524
18525       token = cp_lexer_peek_token (parser->lexer);
18526     }
18527
18528   return build_tree_list (sel_args, addl_args);
18529 }
18530
18531 /* Parse an Objective-C encode expression.
18532
18533    objc-encode-expression:
18534      @encode objc-typename
18535
18536    Returns an encoded representation of the type argument.  */
18537
18538 static tree
18539 cp_parser_objc_encode_expression (cp_parser* parser)
18540 {
18541   tree type;
18542
18543   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
18544   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
18545   type = complete_type (cp_parser_type_id (parser));
18546   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
18547
18548   if (!type)
18549     {
18550       error ("%<@encode%> must specify a type as an argument");
18551       return error_mark_node;
18552     }
18553
18554   return objc_build_encode_expr (type);
18555 }
18556
18557 /* Parse an Objective-C @defs expression.  */
18558
18559 static tree
18560 cp_parser_objc_defs_expression (cp_parser *parser)
18561 {
18562   tree name;
18563
18564   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
18565   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
18566   name = cp_parser_identifier (parser);
18567   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
18568
18569   return objc_get_class_ivars (name);
18570 }
18571
18572 /* Parse an Objective-C protocol expression.
18573
18574   objc-protocol-expression:
18575     @protocol ( identifier )
18576
18577   Returns a representation of the protocol expression.  */
18578
18579 static tree
18580 cp_parser_objc_protocol_expression (cp_parser* parser)
18581 {
18582   tree proto;
18583
18584   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
18585   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
18586   proto = cp_parser_identifier (parser);
18587   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
18588
18589   return objc_build_protocol_expr (proto);
18590 }
18591
18592 /* Parse an Objective-C selector expression.
18593
18594    objc-selector-expression:
18595      @selector ( objc-method-signature )
18596
18597    objc-method-signature:
18598      objc-selector
18599      objc-selector-seq
18600
18601    objc-selector-seq:
18602      objc-selector :
18603      objc-selector-seq objc-selector :
18604
18605   Returns a representation of the method selector.  */
18606
18607 static tree
18608 cp_parser_objc_selector_expression (cp_parser* parser)
18609 {
18610   tree sel_seq = NULL_TREE;
18611   bool maybe_unary_selector_p = true;
18612   cp_token *token;
18613
18614   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
18615   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
18616   token = cp_lexer_peek_token (parser->lexer);
18617
18618   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
18619          || token->type == CPP_SCOPE)
18620     {
18621       tree selector = NULL_TREE;
18622
18623       if (token->type != CPP_COLON
18624           || token->type == CPP_SCOPE)
18625         selector = cp_parser_objc_selector (parser);
18626
18627       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
18628           && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
18629         {
18630           /* Detect if we have a unary selector.  */
18631           if (maybe_unary_selector_p)
18632             {
18633               sel_seq = selector;
18634               goto finish_selector;
18635             }
18636           else
18637             {
18638               cp_parser_error (parser, "expected %<:%>");
18639             }
18640         }
18641       maybe_unary_selector_p = false;
18642       token = cp_lexer_consume_token (parser->lexer);
18643
18644       if (token->type == CPP_SCOPE)
18645         {
18646           sel_seq
18647             = chainon (sel_seq,
18648                        build_tree_list (selector, NULL_TREE));
18649           sel_seq
18650             = chainon (sel_seq,
18651                        build_tree_list (NULL_TREE, NULL_TREE));
18652         }
18653       else
18654         sel_seq
18655           = chainon (sel_seq,
18656                      build_tree_list (selector, NULL_TREE));
18657
18658       token = cp_lexer_peek_token (parser->lexer);
18659     }
18660
18661  finish_selector:
18662   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
18663
18664   return objc_build_selector_expr (sel_seq);
18665 }
18666
18667 /* Parse a list of identifiers.
18668
18669    objc-identifier-list:
18670      identifier
18671      objc-identifier-list , identifier
18672
18673    Returns a TREE_LIST of identifier nodes.  */
18674
18675 static tree
18676 cp_parser_objc_identifier_list (cp_parser* parser)
18677 {
18678   tree list = build_tree_list (NULL_TREE, cp_parser_identifier (parser));
18679   cp_token *sep = cp_lexer_peek_token (parser->lexer);
18680
18681   while (sep->type == CPP_COMMA)
18682     {
18683       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
18684       list = chainon (list,
18685                       build_tree_list (NULL_TREE,
18686                                        cp_parser_identifier (parser)));
18687       sep = cp_lexer_peek_token (parser->lexer);
18688     }
18689
18690   return list;
18691 }
18692
18693 /* Parse an Objective-C alias declaration.
18694
18695    objc-alias-declaration:
18696      @compatibility_alias identifier identifier ;
18697
18698    This function registers the alias mapping with the Objective-C front end.
18699    It returns nothing.  */
18700
18701 static void
18702 cp_parser_objc_alias_declaration (cp_parser* parser)
18703 {
18704   tree alias, orig;
18705
18706   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
18707   alias = cp_parser_identifier (parser);
18708   orig = cp_parser_identifier (parser);
18709   objc_declare_alias (alias, orig);
18710   cp_parser_consume_semicolon_at_end_of_statement (parser);
18711 }
18712
18713 /* Parse an Objective-C class forward-declaration.
18714
18715    objc-class-declaration:
18716      @class objc-identifier-list ;
18717
18718    The function registers the forward declarations with the Objective-C
18719    front end.  It returns nothing.  */
18720
18721 static void
18722 cp_parser_objc_class_declaration (cp_parser* parser)
18723 {
18724   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
18725   objc_declare_class (cp_parser_objc_identifier_list (parser));
18726   cp_parser_consume_semicolon_at_end_of_statement (parser);
18727 }
18728
18729 /* Parse a list of Objective-C protocol references.
18730
18731    objc-protocol-refs-opt:
18732      objc-protocol-refs [opt]
18733
18734    objc-protocol-refs:
18735      < objc-identifier-list >
18736
18737    Returns a TREE_LIST of identifiers, if any.  */
18738
18739 static tree
18740 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
18741 {
18742   tree protorefs = NULL_TREE;
18743
18744   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
18745     {
18746       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
18747       protorefs = cp_parser_objc_identifier_list (parser);
18748       cp_parser_require (parser, CPP_GREATER, "%<>%>");
18749     }
18750
18751   return protorefs;
18752 }
18753
18754 /* Parse a Objective-C visibility specification.  */
18755
18756 static void
18757 cp_parser_objc_visibility_spec (cp_parser* parser)
18758 {
18759   cp_token *vis = cp_lexer_peek_token (parser->lexer);
18760
18761   switch (vis->keyword)
18762     {
18763     case RID_AT_PRIVATE:
18764       objc_set_visibility (2);
18765       break;
18766     case RID_AT_PROTECTED:
18767       objc_set_visibility (0);
18768       break;
18769     case RID_AT_PUBLIC:
18770       objc_set_visibility (1);
18771       break;
18772     default:
18773       return;
18774     }
18775
18776   /* Eat '@private'/'@protected'/'@public'.  */
18777   cp_lexer_consume_token (parser->lexer);
18778 }
18779
18780 /* Parse an Objective-C method type.  */
18781
18782 static void
18783 cp_parser_objc_method_type (cp_parser* parser)
18784 {
18785   objc_set_method_type
18786    (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS
18787     ? PLUS_EXPR
18788     : MINUS_EXPR);
18789 }
18790
18791 /* Parse an Objective-C protocol qualifier.  */
18792
18793 static tree
18794 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
18795 {
18796   tree quals = NULL_TREE, node;
18797   cp_token *token = cp_lexer_peek_token (parser->lexer);
18798
18799   node = token->u.value;
18800
18801   while (node && TREE_CODE (node) == IDENTIFIER_NODE
18802          && (node == ridpointers [(int) RID_IN]
18803              || node == ridpointers [(int) RID_OUT]
18804              || node == ridpointers [(int) RID_INOUT]
18805              || node == ridpointers [(int) RID_BYCOPY]
18806              || node == ridpointers [(int) RID_BYREF]
18807              || node == ridpointers [(int) RID_ONEWAY]))
18808     {
18809       quals = tree_cons (NULL_TREE, node, quals);
18810       cp_lexer_consume_token (parser->lexer);
18811       token = cp_lexer_peek_token (parser->lexer);
18812       node = token->u.value;
18813     }
18814
18815   return quals;
18816 }
18817
18818 /* Parse an Objective-C typename.  */
18819
18820 static tree
18821 cp_parser_objc_typename (cp_parser* parser)
18822 {
18823   tree typename = NULL_TREE;
18824
18825   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18826     {
18827       tree proto_quals, cp_type = NULL_TREE;
18828
18829       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
18830       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
18831
18832       /* An ObjC type name may consist of just protocol qualifiers, in which
18833          case the type shall default to 'id'.  */
18834       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
18835         cp_type = cp_parser_type_id (parser);
18836
18837       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
18838       typename = build_tree_list (proto_quals, cp_type);
18839     }
18840
18841   return typename;
18842 }
18843
18844 /* Check to see if TYPE refers to an Objective-C selector name.  */
18845
18846 static bool
18847 cp_parser_objc_selector_p (enum cpp_ttype type)
18848 {
18849   return (type == CPP_NAME || type == CPP_KEYWORD
18850           || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
18851           || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
18852           || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
18853           || type == CPP_XOR || type == CPP_XOR_EQ);
18854 }
18855
18856 /* Parse an Objective-C selector.  */
18857
18858 static tree
18859 cp_parser_objc_selector (cp_parser* parser)
18860 {
18861   cp_token *token = cp_lexer_consume_token (parser->lexer);
18862
18863   if (!cp_parser_objc_selector_p (token->type))
18864     {
18865       error ("invalid Objective-C++ selector name");
18866       return error_mark_node;
18867     }
18868
18869   /* C++ operator names are allowed to appear in ObjC selectors.  */
18870   switch (token->type)
18871     {
18872     case CPP_AND_AND: return get_identifier ("and");
18873     case CPP_AND_EQ: return get_identifier ("and_eq");
18874     case CPP_AND: return get_identifier ("bitand");
18875     case CPP_OR: return get_identifier ("bitor");
18876     case CPP_COMPL: return get_identifier ("compl");
18877     case CPP_NOT: return get_identifier ("not");
18878     case CPP_NOT_EQ: return get_identifier ("not_eq");
18879     case CPP_OR_OR: return get_identifier ("or");
18880     case CPP_OR_EQ: return get_identifier ("or_eq");
18881     case CPP_XOR: return get_identifier ("xor");
18882     case CPP_XOR_EQ: return get_identifier ("xor_eq");
18883     default: return token->u.value;
18884     }
18885 }
18886
18887 /* Parse an Objective-C params list.  */
18888
18889 static tree
18890 cp_parser_objc_method_keyword_params (cp_parser* parser)
18891 {
18892   tree params = NULL_TREE;
18893   bool maybe_unary_selector_p = true;
18894   cp_token *token = cp_lexer_peek_token (parser->lexer);
18895
18896   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
18897     {
18898       tree selector = NULL_TREE, typename, identifier;
18899
18900       if (token->type != CPP_COLON)
18901         selector = cp_parser_objc_selector (parser);
18902
18903       /* Detect if we have a unary selector.  */
18904       if (maybe_unary_selector_p
18905           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
18906         return selector;
18907
18908       maybe_unary_selector_p = false;
18909       cp_parser_require (parser, CPP_COLON, "%<:%>");
18910       typename = cp_parser_objc_typename (parser);
18911       identifier = cp_parser_identifier (parser);
18912
18913       params
18914         = chainon (params,
18915                    objc_build_keyword_decl (selector,
18916                                             typename,
18917                                             identifier));
18918
18919       token = cp_lexer_peek_token (parser->lexer);
18920     }
18921
18922   return params;
18923 }
18924
18925 /* Parse the non-keyword Objective-C params.  */
18926
18927 static tree
18928 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp)
18929 {
18930   tree params = make_node (TREE_LIST);
18931   cp_token *token = cp_lexer_peek_token (parser->lexer);
18932   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
18933
18934   while (token->type == CPP_COMMA)
18935     {
18936       cp_parameter_declarator *parmdecl;
18937       tree parm;
18938
18939       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
18940       token = cp_lexer_peek_token (parser->lexer);
18941
18942       if (token->type == CPP_ELLIPSIS)
18943         {
18944           cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
18945           *ellipsisp = true;
18946           break;
18947         }
18948
18949       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
18950       parm = grokdeclarator (parmdecl->declarator,
18951                              &parmdecl->decl_specifiers,
18952                              PARM, /*initialized=*/0,
18953                              /*attrlist=*/NULL);
18954
18955       chainon (params, build_tree_list (NULL_TREE, parm));
18956       token = cp_lexer_peek_token (parser->lexer);
18957     }
18958
18959   return params;
18960 }
18961
18962 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
18963
18964 static void
18965 cp_parser_objc_interstitial_code (cp_parser* parser)
18966 {
18967   cp_token *token = cp_lexer_peek_token (parser->lexer);
18968
18969   /* If the next token is `extern' and the following token is a string
18970      literal, then we have a linkage specification.  */
18971   if (token->keyword == RID_EXTERN
18972       && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser->lexer, 2)))
18973     cp_parser_linkage_specification (parser);
18974   /* Handle #pragma, if any.  */
18975   else if (token->type == CPP_PRAGMA)
18976     cp_parser_pragma (parser, pragma_external);
18977   /* Allow stray semicolons.  */
18978   else if (token->type == CPP_SEMICOLON)
18979     cp_lexer_consume_token (parser->lexer);
18980   /* Finally, try to parse a block-declaration, or a function-definition.  */
18981   else
18982     cp_parser_block_declaration (parser, /*statement_p=*/false);
18983 }
18984
18985 /* Parse a method signature.  */
18986
18987 static tree
18988 cp_parser_objc_method_signature (cp_parser* parser)
18989 {
18990   tree rettype, kwdparms, optparms;
18991   bool ellipsis = false;
18992
18993   cp_parser_objc_method_type (parser);
18994   rettype = cp_parser_objc_typename (parser);
18995   kwdparms = cp_parser_objc_method_keyword_params (parser);
18996   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis);
18997
18998   return objc_build_method_signature (rettype, kwdparms, optparms, ellipsis);
18999 }
19000
19001 /* Pars an Objective-C method prototype list.  */
19002
19003 static void
19004 cp_parser_objc_method_prototype_list (cp_parser* parser)
19005 {
19006   cp_token *token = cp_lexer_peek_token (parser->lexer);
19007
19008   while (token->keyword != RID_AT_END)
19009     {
19010       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
19011         {
19012           objc_add_method_declaration
19013            (cp_parser_objc_method_signature (parser));
19014           cp_parser_consume_semicolon_at_end_of_statement (parser);
19015         }
19016       else
19017         /* Allow for interspersed non-ObjC++ code.  */
19018         cp_parser_objc_interstitial_code (parser);
19019
19020       token = cp_lexer_peek_token (parser->lexer);
19021     }
19022
19023   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
19024   objc_finish_interface ();
19025 }
19026
19027 /* Parse an Objective-C method definition list.  */
19028
19029 static void
19030 cp_parser_objc_method_definition_list (cp_parser* parser)
19031 {
19032   cp_token *token = cp_lexer_peek_token (parser->lexer);
19033
19034   while (token->keyword != RID_AT_END)
19035     {
19036       tree meth;
19037
19038       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
19039         {
19040           push_deferring_access_checks (dk_deferred);
19041           objc_start_method_definition
19042            (cp_parser_objc_method_signature (parser));
19043
19044           /* For historical reasons, we accept an optional semicolon.  */
19045           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
19046             cp_lexer_consume_token (parser->lexer);
19047
19048           perform_deferred_access_checks ();
19049           stop_deferring_access_checks ();
19050           meth = cp_parser_function_definition_after_declarator (parser,
19051                                                                  false);
19052           pop_deferring_access_checks ();
19053           objc_finish_method_definition (meth);
19054         }
19055       else
19056         /* Allow for interspersed non-ObjC++ code.  */
19057         cp_parser_objc_interstitial_code (parser);
19058
19059       token = cp_lexer_peek_token (parser->lexer);
19060     }
19061
19062   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
19063   objc_finish_implementation ();
19064 }
19065
19066 /* Parse Objective-C ivars.  */
19067
19068 static void
19069 cp_parser_objc_class_ivars (cp_parser* parser)
19070 {
19071   cp_token *token = cp_lexer_peek_token (parser->lexer);
19072
19073   if (token->type != CPP_OPEN_BRACE)
19074     return;     /* No ivars specified.  */
19075
19076   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
19077   token = cp_lexer_peek_token (parser->lexer);
19078
19079   while (token->type != CPP_CLOSE_BRACE)
19080     {
19081       cp_decl_specifier_seq declspecs;
19082       int decl_class_or_enum_p;
19083       tree prefix_attributes;
19084
19085       cp_parser_objc_visibility_spec (parser);
19086
19087       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
19088         break;
19089
19090       cp_parser_decl_specifier_seq (parser,
19091                                     CP_PARSER_FLAGS_OPTIONAL,
19092                                     &declspecs,
19093                                     &decl_class_or_enum_p);
19094       prefix_attributes = declspecs.attributes;
19095       declspecs.attributes = NULL_TREE;
19096
19097       /* Keep going until we hit the `;' at the end of the
19098          declaration.  */
19099       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
19100         {
19101           tree width = NULL_TREE, attributes, first_attribute, decl;
19102           cp_declarator *declarator = NULL;
19103           int ctor_dtor_or_conv_p;
19104
19105           /* Check for a (possibly unnamed) bitfield declaration.  */
19106           token = cp_lexer_peek_token (parser->lexer);
19107           if (token->type == CPP_COLON)
19108             goto eat_colon;
19109
19110           if (token->type == CPP_NAME
19111               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
19112                   == CPP_COLON))
19113             {
19114               /* Get the name of the bitfield.  */
19115               declarator = make_id_declarator (NULL_TREE,
19116                                                cp_parser_identifier (parser),
19117                                                sfk_none);
19118
19119              eat_colon:
19120               cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
19121               /* Get the width of the bitfield.  */
19122               width
19123                 = cp_parser_constant_expression (parser,
19124                                                  /*allow_non_constant=*/false,
19125                                                  NULL);
19126             }
19127           else
19128             {
19129               /* Parse the declarator.  */
19130               declarator
19131                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
19132                                         &ctor_dtor_or_conv_p,
19133                                         /*parenthesized_p=*/NULL,
19134                                         /*member_p=*/false);
19135             }
19136
19137           /* Look for attributes that apply to the ivar.  */
19138           attributes = cp_parser_attributes_opt (parser);
19139           /* Remember which attributes are prefix attributes and
19140              which are not.  */
19141           first_attribute = attributes;
19142           /* Combine the attributes.  */
19143           attributes = chainon (prefix_attributes, attributes);
19144
19145           if (width)
19146             {
19147               /* Create the bitfield declaration.  */
19148               decl = grokbitfield (declarator, &declspecs, width);
19149               cplus_decl_attributes (&decl, attributes, /*flags=*/0);
19150             }
19151           else
19152             decl = grokfield (declarator, &declspecs,
19153                               NULL_TREE, /*init_const_expr_p=*/false,
19154                               NULL_TREE, attributes);
19155
19156           /* Add the instance variable.  */
19157           objc_add_instance_variable (decl);
19158
19159           /* Reset PREFIX_ATTRIBUTES.  */
19160           while (attributes && TREE_CHAIN (attributes) != first_attribute)
19161             attributes = TREE_CHAIN (attributes);
19162           if (attributes)
19163             TREE_CHAIN (attributes) = NULL_TREE;
19164
19165           token = cp_lexer_peek_token (parser->lexer);
19166
19167           if (token->type == CPP_COMMA)
19168             {
19169               cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
19170               continue;
19171             }
19172           break;
19173         }
19174
19175       cp_parser_consume_semicolon_at_end_of_statement (parser);
19176       token = cp_lexer_peek_token (parser->lexer);
19177     }
19178
19179   cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
19180   /* For historical reasons, we accept an optional semicolon.  */
19181   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
19182     cp_lexer_consume_token (parser->lexer);
19183 }
19184
19185 /* Parse an Objective-C protocol declaration.  */
19186
19187 static void
19188 cp_parser_objc_protocol_declaration (cp_parser* parser)
19189 {
19190   tree proto, protorefs;
19191   cp_token *tok;
19192
19193   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
19194   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
19195     {
19196       error ("identifier expected after %<@protocol%>");
19197       goto finish;
19198     }
19199
19200   /* See if we have a forward declaration or a definition.  */
19201   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
19202
19203   /* Try a forward declaration first.  */
19204   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
19205     {
19206       objc_declare_protocols (cp_parser_objc_identifier_list (parser));
19207      finish:
19208       cp_parser_consume_semicolon_at_end_of_statement (parser);
19209     }
19210
19211   /* Ok, we got a full-fledged definition (or at least should).  */
19212   else
19213     {
19214       proto = cp_parser_identifier (parser);
19215       protorefs = cp_parser_objc_protocol_refs_opt (parser);
19216       objc_start_protocol (proto, protorefs);
19217       cp_parser_objc_method_prototype_list (parser);
19218     }
19219 }
19220
19221 /* Parse an Objective-C superclass or category.  */
19222
19223 static void
19224 cp_parser_objc_superclass_or_category (cp_parser *parser, tree *super,
19225                                                           tree *categ)
19226 {
19227   cp_token *next = cp_lexer_peek_token (parser->lexer);
19228
19229   *super = *categ = NULL_TREE;
19230   if (next->type == CPP_COLON)
19231     {
19232       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
19233       *super = cp_parser_identifier (parser);
19234     }
19235   else if (next->type == CPP_OPEN_PAREN)
19236     {
19237       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
19238       *categ = cp_parser_identifier (parser);
19239       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19240     }
19241 }
19242
19243 /* Parse an Objective-C class interface.  */
19244
19245 static void
19246 cp_parser_objc_class_interface (cp_parser* parser)
19247 {
19248   tree name, super, categ, protos;
19249
19250   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
19251   name = cp_parser_identifier (parser);
19252   cp_parser_objc_superclass_or_category (parser, &super, &categ);
19253   protos = cp_parser_objc_protocol_refs_opt (parser);
19254
19255   /* We have either a class or a category on our hands.  */
19256   if (categ)
19257     objc_start_category_interface (name, categ, protos);
19258   else
19259     {
19260       objc_start_class_interface (name, super, protos);
19261       /* Handle instance variable declarations, if any.  */
19262       cp_parser_objc_class_ivars (parser);
19263       objc_continue_interface ();
19264     }
19265
19266   cp_parser_objc_method_prototype_list (parser);
19267 }
19268
19269 /* Parse an Objective-C class implementation.  */
19270
19271 static void
19272 cp_parser_objc_class_implementation (cp_parser* parser)
19273 {
19274   tree name, super, categ;
19275
19276   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
19277   name = cp_parser_identifier (parser);
19278   cp_parser_objc_superclass_or_category (parser, &super, &categ);
19279
19280   /* We have either a class or a category on our hands.  */
19281   if (categ)
19282     objc_start_category_implementation (name, categ);
19283   else
19284     {
19285       objc_start_class_implementation (name, super);
19286       /* Handle instance variable declarations, if any.  */
19287       cp_parser_objc_class_ivars (parser);
19288       objc_continue_implementation ();
19289     }
19290
19291   cp_parser_objc_method_definition_list (parser);
19292 }
19293
19294 /* Consume the @end token and finish off the implementation.  */
19295
19296 static void
19297 cp_parser_objc_end_implementation (cp_parser* parser)
19298 {
19299   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
19300   objc_finish_implementation ();
19301 }
19302
19303 /* Parse an Objective-C declaration.  */
19304
19305 static void
19306 cp_parser_objc_declaration (cp_parser* parser)
19307 {
19308   /* Try to figure out what kind of declaration is present.  */
19309   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
19310
19311   switch (kwd->keyword)
19312     {
19313     case RID_AT_ALIAS:
19314       cp_parser_objc_alias_declaration (parser);
19315       break;
19316     case RID_AT_CLASS:
19317       cp_parser_objc_class_declaration (parser);
19318       break;
19319     case RID_AT_PROTOCOL:
19320       cp_parser_objc_protocol_declaration (parser);
19321       break;
19322     case RID_AT_INTERFACE:
19323       cp_parser_objc_class_interface (parser);
19324       break;
19325     case RID_AT_IMPLEMENTATION:
19326       cp_parser_objc_class_implementation (parser);
19327       break;
19328     case RID_AT_END:
19329       cp_parser_objc_end_implementation (parser);
19330       break;
19331     default:
19332       error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
19333       cp_parser_skip_to_end_of_block_or_statement (parser);
19334     }
19335 }
19336
19337 /* Parse an Objective-C try-catch-finally statement.
19338
19339    objc-try-catch-finally-stmt:
19340      @try compound-statement objc-catch-clause-seq [opt]
19341        objc-finally-clause [opt]
19342
19343    objc-catch-clause-seq:
19344      objc-catch-clause objc-catch-clause-seq [opt]
19345
19346    objc-catch-clause:
19347      @catch ( exception-declaration ) compound-statement
19348
19349    objc-finally-clause
19350      @finally compound-statement
19351
19352    Returns NULL_TREE.  */
19353
19354 static tree
19355 cp_parser_objc_try_catch_finally_statement (cp_parser *parser) {
19356   location_t location;
19357   tree stmt;
19358
19359   cp_parser_require_keyword (parser, RID_AT_TRY, "%<@try%>");
19360   location = cp_lexer_peek_token (parser->lexer)->location;
19361   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
19362      node, lest it get absorbed into the surrounding block.  */
19363   stmt = push_stmt_list ();
19364   cp_parser_compound_statement (parser, NULL, false);
19365   objc_begin_try_stmt (location, pop_stmt_list (stmt));
19366
19367   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
19368     {
19369       cp_parameter_declarator *parmdecl;
19370       tree parm;
19371
19372       cp_lexer_consume_token (parser->lexer);
19373       cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
19374       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
19375       parm = grokdeclarator (parmdecl->declarator,
19376                              &parmdecl->decl_specifiers,
19377                              PARM, /*initialized=*/0,
19378                              /*attrlist=*/NULL);
19379       cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19380       objc_begin_catch_clause (parm);
19381       cp_parser_compound_statement (parser, NULL, false);
19382       objc_finish_catch_clause ();
19383     }
19384
19385   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
19386     {
19387       cp_lexer_consume_token (parser->lexer);
19388       location = cp_lexer_peek_token (parser->lexer)->location;
19389       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
19390          node, lest it get absorbed into the surrounding block.  */
19391       stmt = push_stmt_list ();
19392       cp_parser_compound_statement (parser, NULL, false);
19393       objc_build_finally_clause (location, pop_stmt_list (stmt));
19394     }
19395
19396   return objc_finish_try_stmt ();
19397 }
19398
19399 /* Parse an Objective-C synchronized statement.
19400
19401    objc-synchronized-stmt:
19402      @synchronized ( expression ) compound-statement
19403
19404    Returns NULL_TREE.  */
19405
19406 static tree
19407 cp_parser_objc_synchronized_statement (cp_parser *parser) {
19408   location_t location;
19409   tree lock, stmt;
19410
19411   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, "%<@synchronized%>");
19412
19413   location = cp_lexer_peek_token (parser->lexer)->location;
19414   cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>");
19415   lock = cp_parser_expression (parser, false);
19416   cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
19417
19418   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
19419      node, lest it get absorbed into the surrounding block.  */
19420   stmt = push_stmt_list ();
19421   cp_parser_compound_statement (parser, NULL, false);
19422
19423   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
19424 }
19425
19426 /* Parse an Objective-C throw statement.
19427
19428    objc-throw-stmt:
19429      @throw assignment-expression [opt] ;
19430
19431    Returns a constructed '@throw' statement.  */
19432
19433 static tree
19434 cp_parser_objc_throw_statement (cp_parser *parser) {
19435   tree expr = NULL_TREE;
19436
19437   cp_parser_require_keyword (parser, RID_AT_THROW, "%<@throw%>");
19438
19439   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
19440     expr = cp_parser_assignment_expression (parser, false);
19441
19442   cp_parser_consume_semicolon_at_end_of_statement (parser);
19443
19444   return objc_build_throw_stmt (expr);
19445 }
19446
19447 /* Parse an Objective-C statement.  */
19448
19449 static tree
19450 cp_parser_objc_statement (cp_parser * parser) {
19451   /* Try to figure out what kind of declaration is present.  */
19452   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
19453
19454   switch (kwd->keyword)
19455     {
19456     case RID_AT_TRY:
19457       return cp_parser_objc_try_catch_finally_statement (parser);
19458     case RID_AT_SYNCHRONIZED:
19459       return cp_parser_objc_synchronized_statement (parser);
19460     case RID_AT_THROW:
19461       return cp_parser_objc_throw_statement (parser);
19462     default:
19463       error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
19464       cp_parser_skip_to_end_of_block_or_statement (parser);
19465     }
19466
19467   return error_mark_node;
19468 }
19469 \f
19470 /* OpenMP 2.5 parsing routines.  */
19471
19472 /* Returns name of the next clause.
19473    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
19474    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
19475    returned and the token is consumed.  */
19476
19477 static pragma_omp_clause
19478 cp_parser_omp_clause_name (cp_parser *parser)
19479 {
19480   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
19481
19482   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
19483     result = PRAGMA_OMP_CLAUSE_IF;
19484   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
19485     result = PRAGMA_OMP_CLAUSE_DEFAULT;
19486   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
19487     result = PRAGMA_OMP_CLAUSE_PRIVATE;
19488   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
19489     {
19490       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
19491       const char *p = IDENTIFIER_POINTER (id);
19492
19493       switch (p[0])
19494         {
19495         case 'c':
19496           if (!strcmp ("copyin", p))
19497             result = PRAGMA_OMP_CLAUSE_COPYIN;
19498           else if (!strcmp ("copyprivate", p))
19499             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
19500           break;
19501         case 'f':
19502           if (!strcmp ("firstprivate", p))
19503             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
19504           break;
19505         case 'l':
19506           if (!strcmp ("lastprivate", p))
19507             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
19508           break;
19509         case 'n':
19510           if (!strcmp ("nowait", p))
19511             result = PRAGMA_OMP_CLAUSE_NOWAIT;
19512           else if (!strcmp ("num_threads", p))
19513             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
19514           break;
19515         case 'o':
19516           if (!strcmp ("ordered", p))
19517             result = PRAGMA_OMP_CLAUSE_ORDERED;
19518           break;
19519         case 'r':
19520           if (!strcmp ("reduction", p))
19521             result = PRAGMA_OMP_CLAUSE_REDUCTION;
19522           break;
19523         case 's':
19524           if (!strcmp ("schedule", p))
19525             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
19526           else if (!strcmp ("shared", p))
19527             result = PRAGMA_OMP_CLAUSE_SHARED;
19528           break;
19529         }
19530     }
19531
19532   if (result != PRAGMA_OMP_CLAUSE_NONE)
19533     cp_lexer_consume_token (parser->lexer);
19534
19535   return result;
19536 }
19537
19538 /* Validate that a clause of the given type does not already exist.  */
19539
19540 static void
19541 check_no_duplicate_clause (tree clauses, enum tree_code code, const char *name)
19542 {
19543   tree c;
19544
19545   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
19546     if (OMP_CLAUSE_CODE (c) == code)
19547       {
19548         error ("too many %qs clauses", name);
19549         break;
19550       }
19551 }
19552
19553 /* OpenMP 2.5:
19554    variable-list:
19555      identifier
19556      variable-list , identifier
19557
19558    In addition, we match a closing parenthesis.  An opening parenthesis
19559    will have been consumed by the caller.
19560
19561    If KIND is nonzero, create the appropriate node and install the decl
19562    in OMP_CLAUSE_DECL and add the node to the head of the list.
19563
19564    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
19565    return the list created.  */
19566
19567 static tree
19568 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
19569                                 tree list)
19570 {
19571   while (1)
19572     {
19573       tree name, decl;
19574
19575       name = cp_parser_id_expression (parser, /*template_p=*/false,
19576                                       /*check_dependency_p=*/true,
19577                                       /*template_p=*/NULL,
19578                                       /*declarator_p=*/false,
19579                                       /*optional_p=*/false);
19580       if (name == error_mark_node)
19581         goto skip_comma;
19582
19583       decl = cp_parser_lookup_name_simple (parser, name);
19584       if (decl == error_mark_node)
19585         cp_parser_name_lookup_error (parser, name, decl, NULL);
19586       else if (kind != 0)
19587         {
19588           tree u = build_omp_clause (kind);
19589           OMP_CLAUSE_DECL (u) = decl;
19590           OMP_CLAUSE_CHAIN (u) = list;
19591           list = u;
19592         }
19593       else
19594         list = tree_cons (decl, NULL_TREE, list);
19595
19596     get_comma:
19597       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
19598         break;
19599       cp_lexer_consume_token (parser->lexer);
19600     }
19601
19602   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
19603     {
19604       int ending;
19605
19606       /* Try to resync to an unnested comma.  Copied from
19607          cp_parser_parenthesized_expression_list.  */
19608     skip_comma:
19609       ending = cp_parser_skip_to_closing_parenthesis (parser,
19610                                                       /*recovering=*/true,
19611                                                       /*or_comma=*/true,
19612                                                       /*consume_paren=*/true);
19613       if (ending < 0)
19614         goto get_comma;
19615     }
19616
19617   return list;
19618 }
19619
19620 /* Similarly, but expect leading and trailing parenthesis.  This is a very
19621    common case for omp clauses.  */
19622
19623 static tree
19624 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
19625 {
19626   if (cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
19627     return cp_parser_omp_var_list_no_open (parser, kind, list);
19628   return list;
19629 }
19630
19631 /* OpenMP 2.5:
19632    default ( shared | none ) */
19633
19634 static tree
19635 cp_parser_omp_clause_default (cp_parser *parser, tree list)
19636 {
19637   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
19638   tree c;
19639
19640   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
19641     return list;
19642   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
19643     {
19644       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
19645       const char *p = IDENTIFIER_POINTER (id);
19646
19647       switch (p[0])
19648         {
19649         case 'n':
19650           if (strcmp ("none", p) != 0)
19651             goto invalid_kind;
19652           kind = OMP_CLAUSE_DEFAULT_NONE;
19653           break;
19654
19655         case 's':
19656           if (strcmp ("shared", p) != 0)
19657             goto invalid_kind;
19658           kind = OMP_CLAUSE_DEFAULT_SHARED;
19659           break;
19660
19661         default:
19662           goto invalid_kind;
19663         }
19664
19665       cp_lexer_consume_token (parser->lexer);
19666     }
19667   else
19668     {
19669     invalid_kind:
19670       cp_parser_error (parser, "expected %<none%> or %<shared%>");
19671     }
19672
19673   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
19674     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
19675                                            /*or_comma=*/false,
19676                                            /*consume_paren=*/true);
19677
19678   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
19679     return list;
19680
19681   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default");
19682   c = build_omp_clause (OMP_CLAUSE_DEFAULT);
19683   OMP_CLAUSE_CHAIN (c) = list;
19684   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
19685
19686   return c;
19687 }
19688
19689 /* OpenMP 2.5:
19690    if ( expression ) */
19691
19692 static tree
19693 cp_parser_omp_clause_if (cp_parser *parser, tree list)
19694 {
19695   tree t, c;
19696
19697   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
19698     return list;
19699
19700   t = cp_parser_condition (parser);
19701
19702   if (t == error_mark_node
19703       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
19704     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
19705                                            /*or_comma=*/false,
19706                                            /*consume_paren=*/true);
19707
19708   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if");
19709
19710   c = build_omp_clause (OMP_CLAUSE_IF);
19711   OMP_CLAUSE_IF_EXPR (c) = t;
19712   OMP_CLAUSE_CHAIN (c) = list;
19713
19714   return c;
19715 }
19716
19717 /* OpenMP 2.5:
19718    nowait */
19719
19720 static tree
19721 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
19722 {
19723   tree c;
19724
19725   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait");
19726
19727   c = build_omp_clause (OMP_CLAUSE_NOWAIT);
19728   OMP_CLAUSE_CHAIN (c) = list;
19729   return c;
19730 }
19731
19732 /* OpenMP 2.5:
19733    num_threads ( expression ) */
19734
19735 static tree
19736 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list)
19737 {
19738   tree t, c;
19739
19740   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
19741     return list;
19742
19743   t = cp_parser_expression (parser, false);
19744
19745   if (t == error_mark_node
19746       || !cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
19747     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
19748                                            /*or_comma=*/false,
19749                                            /*consume_paren=*/true);
19750
19751   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS, "num_threads");
19752
19753   c = build_omp_clause (OMP_CLAUSE_NUM_THREADS);
19754   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
19755   OMP_CLAUSE_CHAIN (c) = list;
19756
19757   return c;
19758 }
19759
19760 /* OpenMP 2.5:
19761    ordered */
19762
19763 static tree
19764 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
19765 {
19766   tree c;
19767
19768   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED, "ordered");
19769
19770   c = build_omp_clause (OMP_CLAUSE_ORDERED);
19771   OMP_CLAUSE_CHAIN (c) = list;
19772   return c;
19773 }
19774
19775 /* OpenMP 2.5:
19776    reduction ( reduction-operator : variable-list )
19777
19778    reduction-operator:
19779      One of: + * - & ^ | && || */
19780
19781 static tree
19782 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
19783 {
19784   enum tree_code code;
19785   tree nlist, c;
19786
19787   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
19788     return list;
19789
19790   switch (cp_lexer_peek_token (parser->lexer)->type)
19791     {
19792     case CPP_PLUS:
19793       code = PLUS_EXPR;
19794       break;
19795     case CPP_MULT:
19796       code = MULT_EXPR;
19797       break;
19798     case CPP_MINUS:
19799       code = MINUS_EXPR;
19800       break;
19801     case CPP_AND:
19802       code = BIT_AND_EXPR;
19803       break;
19804     case CPP_XOR:
19805       code = BIT_XOR_EXPR;
19806       break;
19807     case CPP_OR:
19808       code = BIT_IOR_EXPR;
19809       break;
19810     case CPP_AND_AND:
19811       code = TRUTH_ANDIF_EXPR;
19812       break;
19813     case CPP_OR_OR:
19814       code = TRUTH_ORIF_EXPR;
19815       break;
19816     default:
19817       cp_parser_error (parser, "%<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, "
19818                                "%<&&%>, or %<||%>");
19819     resync_fail:
19820       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
19821                                              /*or_comma=*/false,
19822                                              /*consume_paren=*/true);
19823       return list;
19824     }
19825   cp_lexer_consume_token (parser->lexer);
19826
19827   if (!cp_parser_require (parser, CPP_COLON, "%<:%>"))
19828     goto resync_fail;
19829
19830   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
19831   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
19832     OMP_CLAUSE_REDUCTION_CODE (c) = code;
19833
19834   return nlist;
19835 }
19836
19837 /* OpenMP 2.5:
19838    schedule ( schedule-kind )
19839    schedule ( schedule-kind , expression )
19840
19841    schedule-kind:
19842      static | dynamic | guided | runtime  */
19843
19844 static tree
19845 cp_parser_omp_clause_schedule (cp_parser *parser, tree list)
19846 {
19847   tree c, t;
19848
19849   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
19850     return list;
19851
19852   c = build_omp_clause (OMP_CLAUSE_SCHEDULE);
19853
19854   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
19855     {
19856       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
19857       const char *p = IDENTIFIER_POINTER (id);
19858
19859       switch (p[0])
19860         {
19861         case 'd':
19862           if (strcmp ("dynamic", p) != 0)
19863             goto invalid_kind;
19864           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
19865           break;
19866
19867         case 'g':
19868           if (strcmp ("guided", p) != 0)
19869             goto invalid_kind;
19870           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
19871           break;
19872
19873         case 'r':
19874           if (strcmp ("runtime", p) != 0)
19875             goto invalid_kind;
19876           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
19877           break;
19878
19879         default:
19880           goto invalid_kind;
19881         }
19882     }
19883   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
19884     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
19885   else
19886     goto invalid_kind;
19887   cp_lexer_consume_token (parser->lexer);
19888
19889   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
19890     {
19891       cp_lexer_consume_token (parser->lexer);
19892
19893       t = cp_parser_assignment_expression (parser, false);
19894
19895       if (t == error_mark_node)
19896         goto resync_fail;
19897       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
19898         error ("schedule %<runtime%> does not take "
19899                "a %<chunk_size%> parameter");
19900       else
19901         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
19902
19903       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
19904         goto resync_fail;
19905     }
19906   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<,%> or %<)%>"))
19907     goto resync_fail;
19908
19909   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule");
19910   OMP_CLAUSE_CHAIN (c) = list;
19911   return c;
19912
19913  invalid_kind:
19914   cp_parser_error (parser, "invalid schedule kind");
19915  resync_fail:
19916   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
19917                                          /*or_comma=*/false,
19918                                          /*consume_paren=*/true);
19919   return list;
19920 }
19921
19922 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
19923    is a bitmask in MASK.  Return the list of clauses found; the result
19924    of clause default goes in *pdefault.  */
19925
19926 static tree
19927 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
19928                            const char *where, cp_token *pragma_tok)
19929 {
19930   tree clauses = NULL;
19931   bool first = true;
19932
19933   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
19934     {
19935       pragma_omp_clause c_kind;
19936       const char *c_name;
19937       tree prev = clauses;
19938
19939       if (!first && cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
19940         cp_lexer_consume_token (parser->lexer);
19941
19942       c_kind = cp_parser_omp_clause_name (parser);
19943       first = false;
19944
19945       switch (c_kind)
19946         {
19947         case PRAGMA_OMP_CLAUSE_COPYIN:
19948           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
19949           c_name = "copyin";
19950           break;
19951         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
19952           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
19953                                             clauses);
19954           c_name = "copyprivate";
19955           break;
19956         case PRAGMA_OMP_CLAUSE_DEFAULT:
19957           clauses = cp_parser_omp_clause_default (parser, clauses);
19958           c_name = "default";
19959           break;
19960         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
19961           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
19962                                             clauses);
19963           c_name = "firstprivate";
19964           break;
19965         case PRAGMA_OMP_CLAUSE_IF:
19966           clauses = cp_parser_omp_clause_if (parser, clauses);
19967           c_name = "if";
19968           break;
19969         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
19970           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
19971                                             clauses);
19972           c_name = "lastprivate";
19973           break;
19974         case PRAGMA_OMP_CLAUSE_NOWAIT:
19975           clauses = cp_parser_omp_clause_nowait (parser, clauses);
19976           c_name = "nowait";
19977           break;
19978         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
19979           clauses = cp_parser_omp_clause_num_threads (parser, clauses);
19980           c_name = "num_threads";
19981           break;
19982         case PRAGMA_OMP_CLAUSE_ORDERED:
19983           clauses = cp_parser_omp_clause_ordered (parser, clauses);
19984           c_name = "ordered";
19985           break;
19986         case PRAGMA_OMP_CLAUSE_PRIVATE:
19987           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
19988                                             clauses);
19989           c_name = "private";
19990           break;
19991         case PRAGMA_OMP_CLAUSE_REDUCTION:
19992           clauses = cp_parser_omp_clause_reduction (parser, clauses);
19993           c_name = "reduction";
19994           break;
19995         case PRAGMA_OMP_CLAUSE_SCHEDULE:
19996           clauses = cp_parser_omp_clause_schedule (parser, clauses);
19997           c_name = "schedule";
19998           break;
19999         case PRAGMA_OMP_CLAUSE_SHARED:
20000           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
20001                                             clauses);
20002           c_name = "shared";
20003           break;
20004         default:
20005           cp_parser_error (parser, "expected %<#pragma omp%> clause");
20006           goto saw_error;
20007         }
20008
20009       if (((mask >> c_kind) & 1) == 0)
20010         {
20011           /* Remove the invalid clause(s) from the list to avoid
20012              confusing the rest of the compiler.  */
20013           clauses = prev;
20014           error ("%qs is not valid for %qs", c_name, where);
20015         }
20016     }
20017  saw_error:
20018   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
20019   return finish_omp_clauses (clauses);
20020 }
20021
20022 /* OpenMP 2.5:
20023    structured-block:
20024      statement
20025
20026    In practice, we're also interested in adding the statement to an
20027    outer node.  So it is convenient if we work around the fact that
20028    cp_parser_statement calls add_stmt.  */
20029
20030 static unsigned
20031 cp_parser_begin_omp_structured_block (cp_parser *parser)
20032 {
20033   unsigned save = parser->in_statement;
20034
20035   /* Only move the values to IN_OMP_BLOCK if they weren't false.
20036      This preserves the "not within loop or switch" style error messages
20037      for nonsense cases like
20038         void foo() {
20039         #pragma omp single
20040           break;
20041         }
20042   */
20043   if (parser->in_statement)
20044     parser->in_statement = IN_OMP_BLOCK;
20045
20046   return save;
20047 }
20048
20049 static void
20050 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
20051 {
20052   parser->in_statement = save;
20053 }
20054
20055 static tree
20056 cp_parser_omp_structured_block (cp_parser *parser)
20057 {
20058   tree stmt = begin_omp_structured_block ();
20059   unsigned int save = cp_parser_begin_omp_structured_block (parser);
20060
20061   cp_parser_statement (parser, NULL_TREE, false, NULL);
20062
20063   cp_parser_end_omp_structured_block (parser, save);
20064   return finish_omp_structured_block (stmt);
20065 }
20066
20067 /* OpenMP 2.5:
20068    # pragma omp atomic new-line
20069      expression-stmt
20070
20071    expression-stmt:
20072      x binop= expr | x++ | ++x | x-- | --x
20073    binop:
20074      +, *, -, /, &, ^, |, <<, >>
20075
20076   where x is an lvalue expression with scalar type.  */
20077
20078 static void
20079 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
20080 {
20081   tree lhs, rhs;
20082   enum tree_code code;
20083
20084   cp_parser_require_pragma_eol (parser, pragma_tok);
20085
20086   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
20087                                     /*cast_p=*/false);
20088   switch (TREE_CODE (lhs))
20089     {
20090     case ERROR_MARK:
20091       goto saw_error;
20092
20093     case PREINCREMENT_EXPR:
20094     case POSTINCREMENT_EXPR:
20095       lhs = TREE_OPERAND (lhs, 0);
20096       code = PLUS_EXPR;
20097       rhs = integer_one_node;
20098       break;
20099
20100     case PREDECREMENT_EXPR:
20101     case POSTDECREMENT_EXPR:
20102       lhs = TREE_OPERAND (lhs, 0);
20103       code = MINUS_EXPR;
20104       rhs = integer_one_node;
20105       break;
20106
20107     default:
20108       switch (cp_lexer_peek_token (parser->lexer)->type)
20109         {
20110         case CPP_MULT_EQ:
20111           code = MULT_EXPR;
20112           break;
20113         case CPP_DIV_EQ:
20114           code = TRUNC_DIV_EXPR;
20115           break;
20116         case CPP_PLUS_EQ:
20117           code = PLUS_EXPR;
20118           break;
20119         case CPP_MINUS_EQ:
20120           code = MINUS_EXPR;
20121           break;
20122         case CPP_LSHIFT_EQ:
20123           code = LSHIFT_EXPR;
20124           break;
20125         case CPP_RSHIFT_EQ:
20126           code = RSHIFT_EXPR;
20127           break;
20128         case CPP_AND_EQ:
20129           code = BIT_AND_EXPR;
20130           break;
20131         case CPP_OR_EQ:
20132           code = BIT_IOR_EXPR;
20133           break;
20134         case CPP_XOR_EQ:
20135           code = BIT_XOR_EXPR;
20136           break;
20137         default:
20138           cp_parser_error (parser,
20139                            "invalid operator for %<#pragma omp atomic%>");
20140           goto saw_error;
20141         }
20142       cp_lexer_consume_token (parser->lexer);
20143
20144       rhs = cp_parser_expression (parser, false);
20145       if (rhs == error_mark_node)
20146         goto saw_error;
20147       break;
20148     }
20149   finish_omp_atomic (code, lhs, rhs);
20150   cp_parser_consume_semicolon_at_end_of_statement (parser);
20151   return;
20152
20153  saw_error:
20154   cp_parser_skip_to_end_of_block_or_statement (parser);
20155 }
20156
20157
20158 /* OpenMP 2.5:
20159    # pragma omp barrier new-line  */
20160
20161 static void
20162 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
20163 {
20164   cp_parser_require_pragma_eol (parser, pragma_tok);
20165   finish_omp_barrier ();
20166 }
20167
20168 /* OpenMP 2.5:
20169    # pragma omp critical [(name)] new-line
20170      structured-block  */
20171
20172 static tree
20173 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
20174 {
20175   tree stmt, name = NULL;
20176
20177   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
20178     {
20179       cp_lexer_consume_token (parser->lexer);
20180
20181       name = cp_parser_identifier (parser);
20182
20183       if (name == error_mark_node
20184           || !cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20185         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20186                                                /*or_comma=*/false,
20187                                                /*consume_paren=*/true);
20188       if (name == error_mark_node)
20189         name = NULL;
20190     }
20191   cp_parser_require_pragma_eol (parser, pragma_tok);
20192
20193   stmt = cp_parser_omp_structured_block (parser);
20194   return c_finish_omp_critical (stmt, name);
20195 }
20196
20197 /* OpenMP 2.5:
20198    # pragma omp flush flush-vars[opt] new-line
20199
20200    flush-vars:
20201      ( variable-list ) */
20202
20203 static void
20204 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
20205 {
20206   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
20207     (void) cp_parser_omp_var_list (parser, 0, NULL);
20208   cp_parser_require_pragma_eol (parser, pragma_tok);
20209
20210   finish_omp_flush ();
20211 }
20212
20213 /* Parse the restricted form of the for statment allowed by OpenMP.  */
20214
20215 static tree
20216 cp_parser_omp_for_loop (cp_parser *parser)
20217 {
20218   tree init, cond, incr, body, decl, pre_body;
20219   location_t loc;
20220
20221   if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
20222     {
20223       cp_parser_error (parser, "for statement expected");
20224       return NULL;
20225     }
20226   loc = cp_lexer_consume_token (parser->lexer)->location;
20227   if (!cp_parser_require (parser, CPP_OPEN_PAREN, "%<(%>"))
20228     return NULL;
20229
20230   init = decl = NULL;
20231   pre_body = push_stmt_list ();
20232   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
20233     {
20234       cp_decl_specifier_seq type_specifiers;
20235
20236       /* First, try to parse as an initialized declaration.  See
20237          cp_parser_condition, from whence the bulk of this is copied.  */
20238
20239       cp_parser_parse_tentatively (parser);
20240       cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
20241                                     &type_specifiers);
20242       if (!cp_parser_error_occurred (parser))
20243         {
20244           tree asm_specification, attributes;
20245           cp_declarator *declarator;
20246
20247           declarator = cp_parser_declarator (parser,
20248                                              CP_PARSER_DECLARATOR_NAMED,
20249                                              /*ctor_dtor_or_conv_p=*/NULL,
20250                                              /*parenthesized_p=*/NULL,
20251                                              /*member_p=*/false);
20252           attributes = cp_parser_attributes_opt (parser);
20253           asm_specification = cp_parser_asm_specification_opt (parser);
20254
20255           cp_parser_require (parser, CPP_EQ, "%<=%>");
20256           if (cp_parser_parse_definitely (parser))
20257             {
20258               tree pushed_scope;
20259
20260               decl = start_decl (declarator, &type_specifiers,
20261                                  /*initialized_p=*/false, attributes,
20262                                  /*prefix_attributes=*/NULL_TREE,
20263                                  &pushed_scope);
20264
20265               init = cp_parser_assignment_expression (parser, false);
20266
20267               if (TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
20268                 init = error_mark_node;
20269               else
20270                 cp_finish_decl (decl, NULL_TREE, /*init_const_expr_p=*/false,
20271                                 asm_specification, LOOKUP_ONLYCONVERTING);
20272
20273               if (pushed_scope)
20274                 pop_scope (pushed_scope);
20275             }
20276         }
20277       else
20278         cp_parser_abort_tentative_parse (parser);
20279
20280       /* If parsing as an initialized declaration failed, try again as
20281          a simple expression.  */
20282       if (decl == NULL)
20283         init = cp_parser_expression (parser, false);
20284     }
20285   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
20286   pre_body = pop_stmt_list (pre_body);
20287
20288   cond = NULL;
20289   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
20290     cond = cp_parser_condition (parser);
20291   cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
20292
20293   incr = NULL;
20294   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
20295     incr = cp_parser_expression (parser, false);
20296
20297   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>"))
20298     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
20299                                            /*or_comma=*/false,
20300                                            /*consume_paren=*/true);
20301
20302   /* Note that we saved the original contents of this flag when we entered
20303      the structured block, and so we don't need to re-save it here.  */
20304   parser->in_statement = IN_OMP_FOR;
20305
20306   /* Note that the grammar doesn't call for a structured block here,
20307      though the loop as a whole is a structured block.  */
20308   body = push_stmt_list ();
20309   cp_parser_statement (parser, NULL_TREE, false, NULL);
20310   body = pop_stmt_list (body);
20311
20312   return finish_omp_for (loc, decl, init, cond, incr, body, pre_body);
20313 }
20314
20315 /* OpenMP 2.5:
20316    #pragma omp for for-clause[optseq] new-line
20317      for-loop  */
20318
20319 #define OMP_FOR_CLAUSE_MASK                             \
20320         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
20321         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
20322         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
20323         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
20324         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
20325         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
20326         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
20327
20328 static tree
20329 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
20330 {
20331   tree clauses, sb, ret;
20332   unsigned int save;
20333
20334   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
20335                                        "#pragma omp for", pragma_tok);
20336
20337   sb = begin_omp_structured_block ();
20338   save = cp_parser_begin_omp_structured_block (parser);
20339
20340   ret = cp_parser_omp_for_loop (parser);
20341   if (ret)
20342     OMP_FOR_CLAUSES (ret) = clauses;
20343
20344   cp_parser_end_omp_structured_block (parser, save);
20345   add_stmt (finish_omp_structured_block (sb));
20346
20347   return ret;
20348 }
20349
20350 /* OpenMP 2.5:
20351    # pragma omp master new-line
20352      structured-block  */
20353
20354 static tree
20355 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
20356 {
20357   cp_parser_require_pragma_eol (parser, pragma_tok);
20358   return c_finish_omp_master (cp_parser_omp_structured_block (parser));
20359 }
20360
20361 /* OpenMP 2.5:
20362    # pragma omp ordered new-line
20363      structured-block  */
20364
20365 static tree
20366 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
20367 {
20368   cp_parser_require_pragma_eol (parser, pragma_tok);
20369   return c_finish_omp_ordered (cp_parser_omp_structured_block (parser));
20370 }
20371
20372 /* OpenMP 2.5:
20373
20374    section-scope:
20375      { section-sequence }
20376
20377    section-sequence:
20378      section-directive[opt] structured-block
20379      section-sequence section-directive structured-block  */
20380
20381 static tree
20382 cp_parser_omp_sections_scope (cp_parser *parser)
20383 {
20384   tree stmt, substmt;
20385   bool error_suppress = false;
20386   cp_token *tok;
20387
20388   if (!cp_parser_require (parser, CPP_OPEN_BRACE, "%<{%>"))
20389     return NULL_TREE;
20390
20391   stmt = push_stmt_list ();
20392
20393   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
20394     {
20395       unsigned save;
20396
20397       substmt = begin_omp_structured_block ();
20398       save = cp_parser_begin_omp_structured_block (parser);
20399
20400       while (1)
20401         {
20402           cp_parser_statement (parser, NULL_TREE, false, NULL);
20403
20404           tok = cp_lexer_peek_token (parser->lexer);
20405           if (tok->pragma_kind == PRAGMA_OMP_SECTION)
20406             break;
20407           if (tok->type == CPP_CLOSE_BRACE)
20408             break;
20409           if (tok->type == CPP_EOF)
20410             break;
20411         }
20412
20413       cp_parser_end_omp_structured_block (parser, save);
20414       substmt = finish_omp_structured_block (substmt);
20415       substmt = build1 (OMP_SECTION, void_type_node, substmt);
20416       add_stmt (substmt);
20417     }
20418
20419   while (1)
20420     {
20421       tok = cp_lexer_peek_token (parser->lexer);
20422       if (tok->type == CPP_CLOSE_BRACE)
20423         break;
20424       if (tok->type == CPP_EOF)
20425         break;
20426
20427       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
20428         {
20429           cp_lexer_consume_token (parser->lexer);
20430           cp_parser_require_pragma_eol (parser, tok);
20431           error_suppress = false;
20432         }
20433       else if (!error_suppress)
20434         {
20435           cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
20436           error_suppress = true;
20437         }
20438
20439       substmt = cp_parser_omp_structured_block (parser);
20440       substmt = build1 (OMP_SECTION, void_type_node, substmt);
20441       add_stmt (substmt);
20442     }
20443   cp_parser_require (parser, CPP_CLOSE_BRACE, "%<}%>");
20444
20445   substmt = pop_stmt_list (stmt);
20446
20447   stmt = make_node (OMP_SECTIONS);
20448   TREE_TYPE (stmt) = void_type_node;
20449   OMP_SECTIONS_BODY (stmt) = substmt;
20450
20451   add_stmt (stmt);
20452   return stmt;
20453 }
20454
20455 /* OpenMP 2.5:
20456    # pragma omp sections sections-clause[optseq] newline
20457      sections-scope  */
20458
20459 #define OMP_SECTIONS_CLAUSE_MASK                        \
20460         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
20461         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
20462         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
20463         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
20464         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
20465
20466 static tree
20467 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
20468 {
20469   tree clauses, ret;
20470
20471   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
20472                                        "#pragma omp sections", pragma_tok);
20473
20474   ret = cp_parser_omp_sections_scope (parser);
20475   if (ret)
20476     OMP_SECTIONS_CLAUSES (ret) = clauses;
20477
20478   return ret;
20479 }
20480
20481 /* OpenMP 2.5:
20482    # pragma parallel parallel-clause new-line
20483    # pragma parallel for parallel-for-clause new-line
20484    # pragma parallel sections parallel-sections-clause new-line  */
20485
20486 #define OMP_PARALLEL_CLAUSE_MASK                        \
20487         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
20488         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
20489         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
20490         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
20491         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
20492         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
20493         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
20494         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
20495
20496 static tree
20497 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
20498 {
20499   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
20500   const char *p_name = "#pragma omp parallel";
20501   tree stmt, clauses, par_clause, ws_clause, block;
20502   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
20503   unsigned int save;
20504
20505   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
20506     {
20507       cp_lexer_consume_token (parser->lexer);
20508       p_kind = PRAGMA_OMP_PARALLEL_FOR;
20509       p_name = "#pragma omp parallel for";
20510       mask |= OMP_FOR_CLAUSE_MASK;
20511       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
20512     }
20513   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
20514     {
20515       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
20516       const char *p = IDENTIFIER_POINTER (id);
20517       if (strcmp (p, "sections") == 0)
20518         {
20519           cp_lexer_consume_token (parser->lexer);
20520           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
20521           p_name = "#pragma omp parallel sections";
20522           mask |= OMP_SECTIONS_CLAUSE_MASK;
20523           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
20524         }
20525     }
20526
20527   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
20528   block = begin_omp_parallel ();
20529   save = cp_parser_begin_omp_structured_block (parser);
20530
20531   switch (p_kind)
20532     {
20533     case PRAGMA_OMP_PARALLEL:
20534       cp_parser_statement (parser, NULL_TREE, false, NULL);
20535       par_clause = clauses;
20536       break;
20537
20538     case PRAGMA_OMP_PARALLEL_FOR:
20539       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
20540       stmt = cp_parser_omp_for_loop (parser);
20541       if (stmt)
20542         OMP_FOR_CLAUSES (stmt) = ws_clause;
20543       break;
20544
20545     case PRAGMA_OMP_PARALLEL_SECTIONS:
20546       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
20547       stmt = cp_parser_omp_sections_scope (parser);
20548       if (stmt)
20549         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
20550       break;
20551
20552     default:
20553       gcc_unreachable ();
20554     }
20555
20556   cp_parser_end_omp_structured_block (parser, save);
20557   stmt = finish_omp_parallel (par_clause, block);
20558   if (p_kind != PRAGMA_OMP_PARALLEL)
20559     OMP_PARALLEL_COMBINED (stmt) = 1;
20560   return stmt;
20561 }
20562
20563 /* OpenMP 2.5:
20564    # pragma omp single single-clause[optseq] new-line
20565      structured-block  */
20566
20567 #define OMP_SINGLE_CLAUSE_MASK                          \
20568         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
20569         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
20570         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
20571         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
20572
20573 static tree
20574 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
20575 {
20576   tree stmt = make_node (OMP_SINGLE);
20577   TREE_TYPE (stmt) = void_type_node;
20578
20579   OMP_SINGLE_CLAUSES (stmt)
20580     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
20581                                  "#pragma omp single", pragma_tok);
20582   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
20583
20584   return add_stmt (stmt);
20585 }
20586
20587 /* OpenMP 2.5:
20588    # pragma omp threadprivate (variable-list) */
20589
20590 static void
20591 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
20592 {
20593   tree vars;
20594
20595   vars = cp_parser_omp_var_list (parser, 0, NULL);
20596   cp_parser_require_pragma_eol (parser, pragma_tok);
20597
20598   finish_omp_threadprivate (vars);
20599 }
20600
20601 /* Main entry point to OpenMP statement pragmas.  */
20602
20603 static void
20604 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
20605 {
20606   tree stmt;
20607
20608   switch (pragma_tok->pragma_kind)
20609     {
20610     case PRAGMA_OMP_ATOMIC:
20611       cp_parser_omp_atomic (parser, pragma_tok);
20612       return;
20613     case PRAGMA_OMP_CRITICAL:
20614       stmt = cp_parser_omp_critical (parser, pragma_tok);
20615       break;
20616     case PRAGMA_OMP_FOR:
20617       stmt = cp_parser_omp_for (parser, pragma_tok);
20618       break;
20619     case PRAGMA_OMP_MASTER:
20620       stmt = cp_parser_omp_master (parser, pragma_tok);
20621       break;
20622     case PRAGMA_OMP_ORDERED:
20623       stmt = cp_parser_omp_ordered (parser, pragma_tok);
20624       break;
20625     case PRAGMA_OMP_PARALLEL:
20626       stmt = cp_parser_omp_parallel (parser, pragma_tok);
20627       break;
20628     case PRAGMA_OMP_SECTIONS:
20629       stmt = cp_parser_omp_sections (parser, pragma_tok);
20630       break;
20631     case PRAGMA_OMP_SINGLE:
20632       stmt = cp_parser_omp_single (parser, pragma_tok);
20633       break;
20634     default:
20635       gcc_unreachable ();
20636     }
20637
20638   if (stmt)
20639     SET_EXPR_LOCATION (stmt, pragma_tok->location);
20640 }
20641 \f
20642 /* The parser.  */
20643
20644 static GTY (()) cp_parser *the_parser;
20645
20646 \f
20647 /* Special handling for the first token or line in the file.  The first
20648    thing in the file might be #pragma GCC pch_preprocess, which loads a
20649    PCH file, which is a GC collection point.  So we need to handle this
20650    first pragma without benefit of an existing lexer structure.
20651
20652    Always returns one token to the caller in *FIRST_TOKEN.  This is
20653    either the true first token of the file, or the first token after
20654    the initial pragma.  */
20655
20656 static void
20657 cp_parser_initial_pragma (cp_token *first_token)
20658 {
20659   tree name = NULL;
20660
20661   cp_lexer_get_preprocessor_token (NULL, first_token);
20662   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
20663     return;
20664
20665   cp_lexer_get_preprocessor_token (NULL, first_token);
20666   if (first_token->type == CPP_STRING)
20667     {
20668       name = first_token->u.value;
20669
20670       cp_lexer_get_preprocessor_token (NULL, first_token);
20671       if (first_token->type != CPP_PRAGMA_EOL)
20672         error ("junk at end of %<#pragma GCC pch_preprocess%>");
20673     }
20674   else
20675     error ("expected string literal");
20676
20677   /* Skip to the end of the pragma.  */
20678   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
20679     cp_lexer_get_preprocessor_token (NULL, first_token);
20680
20681   /* Now actually load the PCH file.  */
20682   if (name)
20683     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
20684
20685   /* Read one more token to return to our caller.  We have to do this
20686      after reading the PCH file in, since its pointers have to be
20687      live.  */
20688   cp_lexer_get_preprocessor_token (NULL, first_token);
20689 }
20690
20691 /* Normal parsing of a pragma token.  Here we can (and must) use the
20692    regular lexer.  */
20693
20694 static bool
20695 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
20696 {
20697   cp_token *pragma_tok;
20698   unsigned int id;
20699
20700   pragma_tok = cp_lexer_consume_token (parser->lexer);
20701   gcc_assert (pragma_tok->type == CPP_PRAGMA);
20702   parser->lexer->in_pragma = true;
20703
20704   id = pragma_tok->pragma_kind;
20705   switch (id)
20706     {
20707     case PRAGMA_GCC_PCH_PREPROCESS:
20708       error ("%<#pragma GCC pch_preprocess%> must be first");
20709       break;
20710
20711     case PRAGMA_OMP_BARRIER:
20712       switch (context)
20713         {
20714         case pragma_compound:
20715           cp_parser_omp_barrier (parser, pragma_tok);
20716           return false;
20717         case pragma_stmt:
20718           error ("%<#pragma omp barrier%> may only be "
20719                  "used in compound statements");
20720           break;
20721         default:
20722           goto bad_stmt;
20723         }
20724       break;
20725
20726     case PRAGMA_OMP_FLUSH:
20727       switch (context)
20728         {
20729         case pragma_compound:
20730           cp_parser_omp_flush (parser, pragma_tok);
20731           return false;
20732         case pragma_stmt:
20733           error ("%<#pragma omp flush%> may only be "
20734                  "used in compound statements");
20735           break;
20736         default:
20737           goto bad_stmt;
20738         }
20739       break;
20740
20741     case PRAGMA_OMP_THREADPRIVATE:
20742       cp_parser_omp_threadprivate (parser, pragma_tok);
20743       return false;
20744
20745     case PRAGMA_OMP_ATOMIC:
20746     case PRAGMA_OMP_CRITICAL:
20747     case PRAGMA_OMP_FOR:
20748     case PRAGMA_OMP_MASTER:
20749     case PRAGMA_OMP_ORDERED:
20750     case PRAGMA_OMP_PARALLEL:
20751     case PRAGMA_OMP_SECTIONS:
20752     case PRAGMA_OMP_SINGLE:
20753       if (context == pragma_external)
20754         goto bad_stmt;
20755       cp_parser_omp_construct (parser, pragma_tok);
20756       return true;
20757
20758     case PRAGMA_OMP_SECTION:
20759       error ("%<#pragma omp section%> may only be used in "
20760              "%<#pragma omp sections%> construct");
20761       break;
20762
20763     default:
20764       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
20765       c_invoke_pragma_handler (id);
20766       break;
20767
20768     bad_stmt:
20769       cp_parser_error (parser, "expected declaration specifiers");
20770       break;
20771     }
20772
20773   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
20774   return false;
20775 }
20776
20777 /* The interface the pragma parsers have to the lexer.  */
20778
20779 enum cpp_ttype
20780 pragma_lex (tree *value)
20781 {
20782   cp_token *tok;
20783   enum cpp_ttype ret;
20784
20785   tok = cp_lexer_peek_token (the_parser->lexer);
20786
20787   ret = tok->type;
20788   *value = tok->u.value;
20789
20790   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
20791     ret = CPP_EOF;
20792   else if (ret == CPP_STRING)
20793     *value = cp_parser_string_literal (the_parser, false, false);
20794   else
20795     {
20796       cp_lexer_consume_token (the_parser->lexer);
20797       if (ret == CPP_KEYWORD)
20798         ret = CPP_NAME;
20799     }
20800
20801   return ret;
20802 }
20803
20804 \f
20805 /* External interface.  */
20806
20807 /* Parse one entire translation unit.  */
20808
20809 void
20810 c_parse_file (void)
20811 {
20812   bool error_occurred;
20813   static bool already_called = false;
20814
20815   if (already_called)
20816     {
20817       sorry ("inter-module optimizations not implemented for C++");
20818       return;
20819     }
20820   already_called = true;
20821
20822   the_parser = cp_parser_new ();
20823   push_deferring_access_checks (flag_access_control
20824                                 ? dk_no_deferred : dk_no_check);
20825   error_occurred = cp_parser_translation_unit (the_parser);
20826   the_parser = NULL;
20827 }
20828
20829 #include "gt-cp-parser.h"