OSDN Git Service

PR c++/44160
[pf3gnuchains/gcc-fork.git] / gcc / cp / parser.c
1 /* C++ Parser.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004,
3    2005, 2007, 2008, 2009, 2010, 2011  Free Software Foundation, Inc.
4    Written by Mark Mitchell <mark@codesourcery.com>.
5
6    This file is part of GCC.
7
8    GCC is free software; you can redistribute it and/or modify it
9    under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3, or (at your option)
11    any later version.
12
13    GCC is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 #include "timevar.h"
27 #include "cpplib.h"
28 #include "tree.h"
29 #include "cp-tree.h"
30 #include "intl.h"
31 #include "c-family/c-pragma.h"
32 #include "decl.h"
33 #include "flags.h"
34 #include "diagnostic-core.h"
35 #include "output.h"
36 #include "target.h"
37 #include "cgraph.h"
38 #include "c-family/c-common.h"
39 #include "c-family/c-objc.h"
40 #include "plugin.h"
41 #include "tree-pretty-print.h"
42 #include "parser.h"
43
44 \f
45 /* The lexer.  */
46
47 /* The cp_lexer_* routines mediate between the lexer proper (in libcpp
48    and c-lex.c) and the C++ parser.  */
49
50 static cp_token eof_token =
51 {
52   CPP_EOF, RID_MAX, 0, PRAGMA_NONE, false, false, false, 0, { NULL }
53 };
54
55 /* The various kinds of non integral constant we encounter. */
56 typedef enum non_integral_constant {
57   NIC_NONE,
58   /* floating-point literal */
59   NIC_FLOAT,
60   /* %<this%> */
61   NIC_THIS,
62   /* %<__FUNCTION__%> */
63   NIC_FUNC_NAME,
64   /* %<__PRETTY_FUNCTION__%> */
65   NIC_PRETTY_FUNC,
66   /* %<__func__%> */
67   NIC_C99_FUNC,
68   /* "%<va_arg%> */
69   NIC_VA_ARG,
70   /* a cast */
71   NIC_CAST,
72   /* %<typeid%> operator */
73   NIC_TYPEID,
74   /* non-constant compound literals */
75   NIC_NCC,
76   /* a function call */
77   NIC_FUNC_CALL,
78   /* an increment */
79   NIC_INC,
80   /* an decrement */
81   NIC_DEC,
82   /* an array reference */
83   NIC_ARRAY_REF,
84   /* %<->%> */
85   NIC_ARROW,
86   /* %<.%> */
87   NIC_POINT,
88   /* the address of a label */
89   NIC_ADDR_LABEL,
90   /* %<*%> */
91   NIC_STAR,
92   /* %<&%> */
93   NIC_ADDR,
94   /* %<++%> */
95   NIC_PREINCREMENT,
96   /* %<--%> */
97   NIC_PREDECREMENT,
98   /* %<new%> */
99   NIC_NEW,
100   /* %<delete%> */
101   NIC_DEL,
102   /* calls to overloaded operators */
103   NIC_OVERLOADED,
104   /* an assignment */
105   NIC_ASSIGNMENT,
106   /* a comma operator */
107   NIC_COMMA,
108   /* a call to a constructor */
109   NIC_CONSTRUCTOR
110 } non_integral_constant;
111
112 /* The various kinds of errors about name-lookup failing. */
113 typedef enum name_lookup_error {
114   /* NULL */
115   NLE_NULL,
116   /* is not a type */
117   NLE_TYPE,
118   /* is not a class or namespace */
119   NLE_CXX98,
120   /* is not a class, namespace, or enumeration */
121   NLE_NOT_CXX98
122 } name_lookup_error;
123
124 /* The various kinds of required token */
125 typedef enum required_token {
126   RT_NONE,
127   RT_SEMICOLON,  /* ';' */
128   RT_OPEN_PAREN, /* '(' */
129   RT_CLOSE_BRACE, /* '}' */
130   RT_OPEN_BRACE,  /* '{' */
131   RT_CLOSE_SQUARE, /* ']' */
132   RT_OPEN_SQUARE,  /* '[' */
133   RT_COMMA, /* ',' */
134   RT_SCOPE, /* '::' */
135   RT_LESS, /* '<' */
136   RT_GREATER, /* '>' */
137   RT_EQ, /* '=' */
138   RT_ELLIPSIS, /* '...' */
139   RT_MULT, /* '*' */
140   RT_COMPL, /* '~' */
141   RT_COLON, /* ':' */
142   RT_COLON_SCOPE, /* ':' or '::' */
143   RT_CLOSE_PAREN, /* ')' */
144   RT_COMMA_CLOSE_PAREN, /* ',' or ')' */
145   RT_PRAGMA_EOL, /* end of line */
146   RT_NAME, /* identifier */
147
148   /* The type is CPP_KEYWORD */
149   RT_NEW, /* new */
150   RT_DELETE, /* delete */
151   RT_RETURN, /* return */
152   RT_WHILE, /* while */
153   RT_EXTERN, /* extern */
154   RT_STATIC_ASSERT, /* static_assert */
155   RT_DECLTYPE, /* decltype */
156   RT_OPERATOR, /* operator */
157   RT_CLASS, /* class */
158   RT_TEMPLATE, /* template */
159   RT_NAMESPACE, /* namespace */
160   RT_USING, /* using */
161   RT_ASM, /* asm */
162   RT_TRY, /* try */
163   RT_CATCH, /* catch */
164   RT_THROW, /* throw */
165   RT_LABEL, /* __label__ */
166   RT_AT_TRY, /* @try */
167   RT_AT_SYNCHRONIZED, /* @synchronized */
168   RT_AT_THROW, /* @throw */
169
170   RT_SELECT,  /* selection-statement */
171   RT_INTERATION, /* iteration-statement */
172   RT_JUMP, /* jump-statement */
173   RT_CLASS_KEY, /* class-key */
174   RT_CLASS_TYPENAME_TEMPLATE /* class, typename, or template */
175 } required_token;
176
177 /* Prototypes.  */
178
179 static cp_lexer *cp_lexer_new_main
180   (void);
181 static cp_lexer *cp_lexer_new_from_tokens
182   (cp_token_cache *tokens);
183 static void cp_lexer_destroy
184   (cp_lexer *);
185 static int cp_lexer_saving_tokens
186   (const cp_lexer *);
187 static cp_token *cp_lexer_token_at
188   (cp_lexer *, cp_token_position);
189 static void cp_lexer_get_preprocessor_token
190   (cp_lexer *, cp_token *);
191 static inline cp_token *cp_lexer_peek_token
192   (cp_lexer *);
193 static cp_token *cp_lexer_peek_nth_token
194   (cp_lexer *, size_t);
195 static inline bool cp_lexer_next_token_is
196   (cp_lexer *, enum cpp_ttype);
197 static bool cp_lexer_next_token_is_not
198   (cp_lexer *, enum cpp_ttype);
199 static bool cp_lexer_next_token_is_keyword
200   (cp_lexer *, enum rid);
201 static cp_token *cp_lexer_consume_token
202   (cp_lexer *);
203 static void cp_lexer_purge_token
204   (cp_lexer *);
205 static void cp_lexer_purge_tokens_after
206   (cp_lexer *, cp_token_position);
207 static void cp_lexer_save_tokens
208   (cp_lexer *);
209 static void cp_lexer_commit_tokens
210   (cp_lexer *);
211 static void cp_lexer_rollback_tokens
212   (cp_lexer *);
213 #ifdef ENABLE_CHECKING
214 static void cp_lexer_print_token
215   (FILE *, cp_token *);
216 static inline bool cp_lexer_debugging_p
217   (cp_lexer *);
218 static void cp_lexer_start_debugging
219   (cp_lexer *) ATTRIBUTE_UNUSED;
220 static void cp_lexer_stop_debugging
221   (cp_lexer *) ATTRIBUTE_UNUSED;
222 #else
223 /* If we define cp_lexer_debug_stream to NULL it will provoke warnings
224    about passing NULL to functions that require non-NULL arguments
225    (fputs, fprintf).  It will never be used, so all we need is a value
226    of the right type that's guaranteed not to be NULL.  */
227 #define cp_lexer_debug_stream stdout
228 #define cp_lexer_print_token(str, tok) (void) 0
229 #define cp_lexer_debugging_p(lexer) 0
230 #endif /* ENABLE_CHECKING */
231
232 static cp_token_cache *cp_token_cache_new
233   (cp_token *, cp_token *);
234
235 static void cp_parser_initial_pragma
236   (cp_token *);
237
238 /* Manifest constants.  */
239 #define CP_LEXER_BUFFER_SIZE ((256 * 1024) / sizeof (cp_token))
240 #define CP_SAVED_TOKEN_STACK 5
241
242 /* Variables.  */
243
244 #ifdef ENABLE_CHECKING
245 /* The stream to which debugging output should be written.  */
246 static FILE *cp_lexer_debug_stream;
247 #endif /* ENABLE_CHECKING */
248
249 /* Nonzero if we are parsing an unevaluated operand: an operand to
250    sizeof, typeof, or alignof.  */
251 int cp_unevaluated_operand;
252
253 #ifdef ENABLE_CHECKING
254 /* Dump up to NUM tokens in BUFFER to FILE.  If NUM is 0, dump all the
255    tokens.  */
256
257 void
258 cp_lexer_dump_tokens (FILE *file, VEC(cp_token,gc) *buffer, unsigned num)
259 {
260   unsigned i;
261   cp_token *token;
262
263   fprintf (file, "%u tokens\n", VEC_length (cp_token, buffer));
264
265   if (num == 0)
266     num = VEC_length (cp_token, buffer);
267
268   for (i = 0; VEC_iterate (cp_token, buffer, i, token) && i < num; i++)
269     {
270       cp_lexer_print_token (file, token);
271       switch (token->type)
272         {
273           case CPP_SEMICOLON:
274           case CPP_OPEN_BRACE:
275           case CPP_CLOSE_BRACE:
276           case CPP_EOF:
277             fputc ('\n', file);
278             break;
279
280           default:
281             fputc (' ', file);
282         }
283     }
284
285   if (i == num && i < VEC_length (cp_token, buffer))
286     {
287       fprintf (file, " ... ");
288       cp_lexer_print_token (file, VEC_index (cp_token, buffer,
289                             VEC_length (cp_token, buffer) - 1));
290     }
291
292   fprintf (file, "\n");
293 }
294
295
296 /* Dump all tokens in BUFFER to stderr.  */
297
298 void
299 cp_lexer_debug_tokens (VEC(cp_token,gc) *buffer)
300 {
301   cp_lexer_dump_tokens (stderr, buffer, 0);
302 }
303 #endif
304
305
306 /* Allocate memory for a new lexer object and return it.  */
307
308 static cp_lexer *
309 cp_lexer_alloc (void)
310 {
311   cp_lexer *lexer;
312
313   c_common_no_more_pch ();
314
315   /* Allocate the memory.  */
316   lexer = ggc_alloc_cleared_cp_lexer ();
317
318 #ifdef ENABLE_CHECKING
319   /* Initially we are not debugging.  */
320   lexer->debugging_p = false;
321 #endif /* ENABLE_CHECKING */
322   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
323                                    CP_SAVED_TOKEN_STACK);
324
325   /* Create the buffer.  */
326   lexer->buffer = VEC_alloc (cp_token, gc, CP_LEXER_BUFFER_SIZE);
327
328   return lexer;
329 }
330
331
332 /* Create a new main C++ lexer, the lexer that gets tokens from the
333    preprocessor.  */
334
335 static cp_lexer *
336 cp_lexer_new_main (void)
337 {
338   cp_lexer *lexer;
339   cp_token token;
340
341   /* It's possible that parsing the first pragma will load a PCH file,
342      which is a GC collection point.  So we have to do that before
343      allocating any memory.  */
344   cp_parser_initial_pragma (&token);
345
346   lexer = cp_lexer_alloc ();
347
348   /* Put the first token in the buffer.  */
349   VEC_quick_push (cp_token, lexer->buffer, &token);
350
351   /* Get the remaining tokens from the preprocessor.  */
352   while (token.type != CPP_EOF)
353     {
354       cp_lexer_get_preprocessor_token (lexer, &token);
355       VEC_safe_push (cp_token, gc, lexer->buffer, &token);
356     }
357
358   lexer->last_token = VEC_address (cp_token, lexer->buffer)
359                       + VEC_length (cp_token, lexer->buffer)
360                       - 1;
361   lexer->next_token = VEC_length (cp_token, lexer->buffer)
362                       ? VEC_address (cp_token, lexer->buffer)
363                       : &eof_token;
364
365   /* Subsequent preprocessor diagnostics should use compiler
366      diagnostic functions to get the compiler source location.  */
367   done_lexing = true;
368
369   gcc_assert (!lexer->next_token->purged_p);
370   return lexer;
371 }
372
373 /* Create a new lexer whose token stream is primed with the tokens in
374    CACHE.  When these tokens are exhausted, no new tokens will be read.  */
375
376 static cp_lexer *
377 cp_lexer_new_from_tokens (cp_token_cache *cache)
378 {
379   cp_token *first = cache->first;
380   cp_token *last = cache->last;
381   cp_lexer *lexer = ggc_alloc_cleared_cp_lexer ();
382
383   /* We do not own the buffer.  */
384   lexer->buffer = NULL;
385   lexer->next_token = first == last ? &eof_token : first;
386   lexer->last_token = last;
387
388   lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
389                                    CP_SAVED_TOKEN_STACK);
390
391 #ifdef ENABLE_CHECKING
392   /* Initially we are not debugging.  */
393   lexer->debugging_p = false;
394 #endif
395
396   gcc_assert (!lexer->next_token->purged_p);
397   return lexer;
398 }
399
400 /* Frees all resources associated with LEXER.  */
401
402 static void
403 cp_lexer_destroy (cp_lexer *lexer)
404 {
405   VEC_free (cp_token, gc, lexer->buffer);
406   VEC_free (cp_token_position, heap, lexer->saved_tokens);
407   ggc_free (lexer);
408 }
409
410 /* Returns nonzero if debugging information should be output.  */
411
412 #ifdef ENABLE_CHECKING
413
414 static inline bool
415 cp_lexer_debugging_p (cp_lexer *lexer)
416 {
417   return lexer->debugging_p;
418 }
419
420 #endif /* ENABLE_CHECKING */
421
422 static inline cp_token_position
423 cp_lexer_token_position (cp_lexer *lexer, bool previous_p)
424 {
425   gcc_assert (!previous_p || lexer->next_token != &eof_token);
426
427   return lexer->next_token - previous_p;
428 }
429
430 static inline cp_token *
431 cp_lexer_token_at (cp_lexer *lexer ATTRIBUTE_UNUSED, cp_token_position pos)
432 {
433   return pos;
434 }
435
436 static inline void
437 cp_lexer_set_token_position (cp_lexer *lexer, cp_token_position pos)
438 {
439   lexer->next_token = cp_lexer_token_at (lexer, pos);
440 }
441
442 static inline cp_token_position
443 cp_lexer_previous_token_position (cp_lexer *lexer)
444 {
445   if (lexer->next_token == &eof_token)
446     return lexer->last_token - 1;
447   else
448     return cp_lexer_token_position (lexer, true);
449 }
450
451 static inline cp_token *
452 cp_lexer_previous_token (cp_lexer *lexer)
453 {
454   cp_token_position tp = cp_lexer_previous_token_position (lexer);
455
456   return cp_lexer_token_at (lexer, tp);
457 }
458
459 /* nonzero if we are presently saving tokens.  */
460
461 static inline int
462 cp_lexer_saving_tokens (const cp_lexer* lexer)
463 {
464   return VEC_length (cp_token_position, lexer->saved_tokens) != 0;
465 }
466
467 /* Store the next token from the preprocessor in *TOKEN.  Return true
468    if we reach EOF.  If LEXER is NULL, assume we are handling an
469    initial #pragma pch_preprocess, and thus want the lexer to return
470    processed strings.  */
471
472 static void
473 cp_lexer_get_preprocessor_token (cp_lexer *lexer, cp_token *token)
474 {
475   static int is_extern_c = 0;
476
477    /* Get a new token from the preprocessor.  */
478   token->type
479     = c_lex_with_flags (&token->u.value, &token->location, &token->flags,
480                         lexer == NULL ? 0 : C_LEX_STRING_NO_JOIN);
481   token->keyword = RID_MAX;
482   token->pragma_kind = PRAGMA_NONE;
483   token->purged_p = false;
484
485   /* On some systems, some header files are surrounded by an
486      implicit extern "C" block.  Set a flag in the token if it
487      comes from such a header.  */
488   is_extern_c += pending_lang_change;
489   pending_lang_change = 0;
490   token->implicit_extern_c = is_extern_c > 0;
491
492   /* Check to see if this token is a keyword.  */
493   if (token->type == CPP_NAME)
494     {
495       if (C_IS_RESERVED_WORD (token->u.value))
496         {
497           /* Mark this token as a keyword.  */
498           token->type = CPP_KEYWORD;
499           /* Record which keyword.  */
500           token->keyword = C_RID_CODE (token->u.value);
501         }
502       else
503         {
504           if (warn_cxx0x_compat
505               && C_RID_CODE (token->u.value) >= RID_FIRST_CXX0X
506               && C_RID_CODE (token->u.value) <= RID_LAST_CXX0X)
507             {
508               /* Warn about the C++0x keyword (but still treat it as
509                  an identifier).  */
510               warning (OPT_Wc__0x_compat, 
511                        "identifier %qE will become a keyword in C++0x",
512                        token->u.value);
513
514               /* Clear out the C_RID_CODE so we don't warn about this
515                  particular identifier-turned-keyword again.  */
516               C_SET_RID_CODE (token->u.value, RID_MAX);
517             }
518
519           token->ambiguous_p = false;
520           token->keyword = RID_MAX;
521         }
522     }
523   else if (token->type == CPP_AT_NAME)
524     {
525       /* This only happens in Objective-C++; it must be a keyword.  */
526       token->type = CPP_KEYWORD;
527       switch (C_RID_CODE (token->u.value))
528         {
529           /* Replace 'class' with '@class', 'private' with '@private',
530              etc.  This prevents confusion with the C++ keyword
531              'class', and makes the tokens consistent with other
532              Objective-C 'AT' keywords.  For example '@class' is
533              reported as RID_AT_CLASS which is consistent with
534              '@synchronized', which is reported as
535              RID_AT_SYNCHRONIZED.
536           */
537         case RID_CLASS:     token->keyword = RID_AT_CLASS; break;
538         case RID_PRIVATE:   token->keyword = RID_AT_PRIVATE; break;
539         case RID_PROTECTED: token->keyword = RID_AT_PROTECTED; break;
540         case RID_PUBLIC:    token->keyword = RID_AT_PUBLIC; break;
541         case RID_THROW:     token->keyword = RID_AT_THROW; break;
542         case RID_TRY:       token->keyword = RID_AT_TRY; break;
543         case RID_CATCH:     token->keyword = RID_AT_CATCH; break;
544         default:            token->keyword = C_RID_CODE (token->u.value);
545         }
546     }
547   else if (token->type == CPP_PRAGMA)
548     {
549       /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST.  */
550       token->pragma_kind = ((enum pragma_kind)
551                             TREE_INT_CST_LOW (token->u.value));
552       token->u.value = NULL_TREE;
553     }
554 }
555
556 /* Update the globals input_location and the input file stack from TOKEN.  */
557 static inline void
558 cp_lexer_set_source_position_from_token (cp_token *token)
559 {
560   if (token->type != CPP_EOF)
561     {
562       input_location = token->location;
563     }
564 }
565
566 /* Return a pointer to the next token in the token stream, but do not
567    consume it.  */
568
569 static inline cp_token *
570 cp_lexer_peek_token (cp_lexer *lexer)
571 {
572   if (cp_lexer_debugging_p (lexer))
573     {
574       fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
575       cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
576       putc ('\n', cp_lexer_debug_stream);
577     }
578   return lexer->next_token;
579 }
580
581 /* Return true if the next token has the indicated TYPE.  */
582
583 static inline bool
584 cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
585 {
586   return cp_lexer_peek_token (lexer)->type == type;
587 }
588
589 /* Return true if the next token does not have the indicated TYPE.  */
590
591 static inline bool
592 cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
593 {
594   return !cp_lexer_next_token_is (lexer, type);
595 }
596
597 /* Return true if the next token is the indicated KEYWORD.  */
598
599 static inline bool
600 cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
601 {
602   return cp_lexer_peek_token (lexer)->keyword == keyword;
603 }
604
605 /* Return true if the next token is not the indicated KEYWORD.  */
606
607 static inline bool
608 cp_lexer_next_token_is_not_keyword (cp_lexer* lexer, enum rid keyword)
609 {
610   return cp_lexer_peek_token (lexer)->keyword != keyword;
611 }
612
613 /* Return true if the next token is a keyword for a decl-specifier.  */
614
615 static bool
616 cp_lexer_next_token_is_decl_specifier_keyword (cp_lexer *lexer)
617 {
618   cp_token *token;
619
620   token = cp_lexer_peek_token (lexer);
621   switch (token->keyword) 
622     {
623       /* auto specifier: storage-class-specifier in C++,
624          simple-type-specifier in C++0x.  */
625     case RID_AUTO:
626       /* Storage classes.  */
627     case RID_REGISTER:
628     case RID_STATIC:
629     case RID_EXTERN:
630     case RID_MUTABLE:
631     case RID_THREAD:
632       /* Elaborated type specifiers.  */
633     case RID_ENUM:
634     case RID_CLASS:
635     case RID_STRUCT:
636     case RID_UNION:
637     case RID_TYPENAME:
638       /* Simple type specifiers.  */
639     case RID_CHAR:
640     case RID_CHAR16:
641     case RID_CHAR32:
642     case RID_WCHAR:
643     case RID_BOOL:
644     case RID_SHORT:
645     case RID_INT:
646     case RID_LONG:
647     case RID_INT128:
648     case RID_SIGNED:
649     case RID_UNSIGNED:
650     case RID_FLOAT:
651     case RID_DOUBLE:
652     case RID_VOID:
653       /* GNU extensions.  */ 
654     case RID_ATTRIBUTE:
655     case RID_TYPEOF:
656       /* C++0x extensions.  */
657     case RID_DECLTYPE:
658     case RID_UNDERLYING_TYPE:
659       return true;
660
661     default:
662       return false;
663     }
664 }
665
666 /* Return a pointer to the Nth token in the token stream.  If N is 1,
667    then this is precisely equivalent to cp_lexer_peek_token (except
668    that it is not inline).  One would like to disallow that case, but
669    there is one case (cp_parser_nth_token_starts_template_id) where
670    the caller passes a variable for N and it might be 1.  */
671
672 static cp_token *
673 cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
674 {
675   cp_token *token;
676
677   /* N is 1-based, not zero-based.  */
678   gcc_assert (n > 0);
679
680   if (cp_lexer_debugging_p (lexer))
681     fprintf (cp_lexer_debug_stream,
682              "cp_lexer: peeking ahead %ld at token: ", (long)n);
683
684   --n;
685   token = lexer->next_token;
686   gcc_assert (!n || token != &eof_token);
687   while (n != 0)
688     {
689       ++token;
690       if (token == lexer->last_token)
691         {
692           token = &eof_token;
693           break;
694         }
695
696       if (!token->purged_p)
697         --n;
698     }
699
700   if (cp_lexer_debugging_p (lexer))
701     {
702       cp_lexer_print_token (cp_lexer_debug_stream, token);
703       putc ('\n', cp_lexer_debug_stream);
704     }
705
706   return token;
707 }
708
709 /* Return the next token, and advance the lexer's next_token pointer
710    to point to the next non-purged token.  */
711
712 static cp_token *
713 cp_lexer_consume_token (cp_lexer* lexer)
714 {
715   cp_token *token = lexer->next_token;
716
717   gcc_assert (token != &eof_token);
718   gcc_assert (!lexer->in_pragma || token->type != CPP_PRAGMA_EOL);
719
720   do
721     {
722       lexer->next_token++;
723       if (lexer->next_token == lexer->last_token)
724         {
725           lexer->next_token = &eof_token;
726           break;
727         }
728
729     }
730   while (lexer->next_token->purged_p);
731
732   cp_lexer_set_source_position_from_token (token);
733
734   /* Provide debugging output.  */
735   if (cp_lexer_debugging_p (lexer))
736     {
737       fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
738       cp_lexer_print_token (cp_lexer_debug_stream, token);
739       putc ('\n', cp_lexer_debug_stream);
740     }
741
742   return token;
743 }
744
745 /* Permanently remove the next token from the token stream, and
746    advance the next_token pointer to refer to the next non-purged
747    token.  */
748
749 static void
750 cp_lexer_purge_token (cp_lexer *lexer)
751 {
752   cp_token *tok = lexer->next_token;
753
754   gcc_assert (tok != &eof_token);
755   tok->purged_p = true;
756   tok->location = UNKNOWN_LOCATION;
757   tok->u.value = NULL_TREE;
758   tok->keyword = RID_MAX;
759
760   do
761     {
762       tok++;
763       if (tok == lexer->last_token)
764         {
765           tok = &eof_token;
766           break;
767         }
768     }
769   while (tok->purged_p);
770   lexer->next_token = tok;
771 }
772
773 /* Permanently remove all tokens after TOK, up to, but not
774    including, the token that will be returned next by
775    cp_lexer_peek_token.  */
776
777 static void
778 cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
779 {
780   cp_token *peek = lexer->next_token;
781
782   if (peek == &eof_token)
783     peek = lexer->last_token;
784
785   gcc_assert (tok < peek);
786
787   for ( tok += 1; tok != peek; tok += 1)
788     {
789       tok->purged_p = true;
790       tok->location = UNKNOWN_LOCATION;
791       tok->u.value = NULL_TREE;
792       tok->keyword = RID_MAX;
793     }
794 }
795
796 /* Begin saving tokens.  All tokens consumed after this point will be
797    preserved.  */
798
799 static void
800 cp_lexer_save_tokens (cp_lexer* lexer)
801 {
802   /* Provide debugging output.  */
803   if (cp_lexer_debugging_p (lexer))
804     fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
805
806   VEC_safe_push (cp_token_position, heap,
807                  lexer->saved_tokens, lexer->next_token);
808 }
809
810 /* Commit to the portion of the token stream most recently saved.  */
811
812 static void
813 cp_lexer_commit_tokens (cp_lexer* lexer)
814 {
815   /* Provide debugging output.  */
816   if (cp_lexer_debugging_p (lexer))
817     fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
818
819   VEC_pop (cp_token_position, lexer->saved_tokens);
820 }
821
822 /* Return all tokens saved since the last call to cp_lexer_save_tokens
823    to the token stream.  Stop saving tokens.  */
824
825 static void
826 cp_lexer_rollback_tokens (cp_lexer* lexer)
827 {
828   /* Provide debugging output.  */
829   if (cp_lexer_debugging_p (lexer))
830     fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
831
832   lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
833 }
834
835 /* Print a representation of the TOKEN on the STREAM.  */
836
837 #ifdef ENABLE_CHECKING
838
839 static void
840 cp_lexer_print_token (FILE * stream, cp_token *token)
841 {
842   /* We don't use cpp_type2name here because the parser defines
843      a few tokens of its own.  */
844   static const char *const token_names[] = {
845     /* cpplib-defined token types */
846 #define OP(e, s) #e,
847 #define TK(e, s) #e,
848     TTYPE_TABLE
849 #undef OP
850 #undef TK
851     /* C++ parser token types - see "Manifest constants", above.  */
852     "KEYWORD",
853     "TEMPLATE_ID",
854     "NESTED_NAME_SPECIFIER",
855   };
856
857   /* For some tokens, print the associated data.  */
858   switch (token->type)
859     {
860     case CPP_KEYWORD:
861       /* Some keywords have a value that is not an IDENTIFIER_NODE.
862          For example, `struct' is mapped to an INTEGER_CST.  */
863       if (TREE_CODE (token->u.value) != IDENTIFIER_NODE)
864         break;
865       /* else fall through */
866     case CPP_NAME:
867       fputs (IDENTIFIER_POINTER (token->u.value), stream);
868       break;
869
870     case CPP_STRING:
871     case CPP_STRING16:
872     case CPP_STRING32:
873     case CPP_WSTRING:
874     case CPP_UTF8STRING:
875       fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->u.value));
876       break;
877
878     case CPP_NUMBER:
879       print_generic_expr (stream, token->u.value, 0);
880       break;
881
882     default:
883       /* If we have a name for the token, print it out.  Otherwise, we
884          simply give the numeric code.  */
885       if (token->type < ARRAY_SIZE(token_names))
886         fputs (token_names[token->type], stream);
887       else
888         fprintf (stream, "[%d]", token->type);
889       break;
890     }
891 }
892
893 /* Start emitting debugging information.  */
894
895 static void
896 cp_lexer_start_debugging (cp_lexer* lexer)
897 {
898   lexer->debugging_p = true;
899 }
900
901 /* Stop emitting debugging information.  */
902
903 static void
904 cp_lexer_stop_debugging (cp_lexer* lexer)
905 {
906   lexer->debugging_p = false;
907 }
908
909 #endif /* ENABLE_CHECKING */
910
911 /* Create a new cp_token_cache, representing a range of tokens.  */
912
913 static cp_token_cache *
914 cp_token_cache_new (cp_token *first, cp_token *last)
915 {
916   cp_token_cache *cache = ggc_alloc_cp_token_cache ();
917   cache->first = first;
918   cache->last = last;
919   return cache;
920 }
921
922 \f
923 /* Decl-specifiers.  */
924
925 /* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
926
927 static void
928 clear_decl_specs (cp_decl_specifier_seq *decl_specs)
929 {
930   memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
931 }
932
933 /* Declarators.  */
934
935 /* Nothing other than the parser should be creating declarators;
936    declarators are a semi-syntactic representation of C++ entities.
937    Other parts of the front end that need to create entities (like
938    VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
939
940 static cp_declarator *make_call_declarator
941   (cp_declarator *, tree, cp_cv_quals, cp_virt_specifiers, tree, tree);
942 static cp_declarator *make_array_declarator
943   (cp_declarator *, tree);
944 static cp_declarator *make_pointer_declarator
945   (cp_cv_quals, cp_declarator *);
946 static cp_declarator *make_reference_declarator
947   (cp_cv_quals, cp_declarator *, bool);
948 static cp_parameter_declarator *make_parameter_declarator
949   (cp_decl_specifier_seq *, cp_declarator *, tree);
950 static cp_declarator *make_ptrmem_declarator
951   (cp_cv_quals, tree, cp_declarator *);
952
953 /* An erroneous declarator.  */
954 static cp_declarator *cp_error_declarator;
955
956 /* The obstack on which declarators and related data structures are
957    allocated.  */
958 static struct obstack declarator_obstack;
959
960 /* Alloc BYTES from the declarator memory pool.  */
961
962 static inline void *
963 alloc_declarator (size_t bytes)
964 {
965   return obstack_alloc (&declarator_obstack, bytes);
966 }
967
968 /* Allocate a declarator of the indicated KIND.  Clear fields that are
969    common to all declarators.  */
970
971 static cp_declarator *
972 make_declarator (cp_declarator_kind kind)
973 {
974   cp_declarator *declarator;
975
976   declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
977   declarator->kind = kind;
978   declarator->attributes = NULL_TREE;
979   declarator->declarator = NULL;
980   declarator->parameter_pack_p = false;
981   declarator->id_loc = UNKNOWN_LOCATION;
982
983   return declarator;
984 }
985
986 /* Make a declarator for a generalized identifier.  If
987    QUALIFYING_SCOPE is non-NULL, the identifier is
988    QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
989    UNQUALIFIED_NAME.  SFK indicates the kind of special function this
990    is, if any.   */
991
992 static cp_declarator *
993 make_id_declarator (tree qualifying_scope, tree unqualified_name,
994                     special_function_kind sfk)
995 {
996   cp_declarator *declarator;
997
998   /* It is valid to write:
999
1000        class C { void f(); };
1001        typedef C D;
1002        void D::f();
1003
1004      The standard is not clear about whether `typedef const C D' is
1005      legal; as of 2002-09-15 the committee is considering that
1006      question.  EDG 3.0 allows that syntax.  Therefore, we do as
1007      well.  */
1008   if (qualifying_scope && TYPE_P (qualifying_scope))
1009     qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
1010
1011   gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
1012               || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
1013               || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
1014
1015   declarator = make_declarator (cdk_id);
1016   declarator->u.id.qualifying_scope = qualifying_scope;
1017   declarator->u.id.unqualified_name = unqualified_name;
1018   declarator->u.id.sfk = sfk;
1019   
1020   return declarator;
1021 }
1022
1023 /* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
1024    of modifiers such as const or volatile to apply to the pointer
1025    type, represented as identifiers.  */
1026
1027 cp_declarator *
1028 make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
1029 {
1030   cp_declarator *declarator;
1031
1032   declarator = make_declarator (cdk_pointer);
1033   declarator->declarator = target;
1034   declarator->u.pointer.qualifiers = cv_qualifiers;
1035   declarator->u.pointer.class_type = NULL_TREE;
1036   if (target)
1037     {
1038       declarator->id_loc = target->id_loc;
1039       declarator->parameter_pack_p = target->parameter_pack_p;
1040       target->parameter_pack_p = false;
1041     }
1042   else
1043     declarator->parameter_pack_p = false;
1044
1045   return declarator;
1046 }
1047
1048 /* Like make_pointer_declarator -- but for references.  */
1049
1050 cp_declarator *
1051 make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target,
1052                            bool rvalue_ref)
1053 {
1054   cp_declarator *declarator;
1055
1056   declarator = make_declarator (cdk_reference);
1057   declarator->declarator = target;
1058   declarator->u.reference.qualifiers = cv_qualifiers;
1059   declarator->u.reference.rvalue_ref = rvalue_ref;
1060   if (target)
1061     {
1062       declarator->id_loc = target->id_loc;
1063       declarator->parameter_pack_p = target->parameter_pack_p;
1064       target->parameter_pack_p = false;
1065     }
1066   else
1067     declarator->parameter_pack_p = false;
1068
1069   return declarator;
1070 }
1071
1072 /* Like make_pointer_declarator -- but for a pointer to a non-static
1073    member of CLASS_TYPE.  */
1074
1075 cp_declarator *
1076 make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
1077                         cp_declarator *pointee)
1078 {
1079   cp_declarator *declarator;
1080
1081   declarator = make_declarator (cdk_ptrmem);
1082   declarator->declarator = pointee;
1083   declarator->u.pointer.qualifiers = cv_qualifiers;
1084   declarator->u.pointer.class_type = class_type;
1085
1086   if (pointee)
1087     {
1088       declarator->parameter_pack_p = pointee->parameter_pack_p;
1089       pointee->parameter_pack_p = false;
1090     }
1091   else
1092     declarator->parameter_pack_p = false;
1093
1094   return declarator;
1095 }
1096
1097 /* Make a declarator for the function given by TARGET, with the
1098    indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
1099    "const"-qualified member function.  The EXCEPTION_SPECIFICATION
1100    indicates what exceptions can be thrown.  */
1101
1102 cp_declarator *
1103 make_call_declarator (cp_declarator *target,
1104                       tree parms,
1105                       cp_cv_quals cv_qualifiers,
1106                       cp_virt_specifiers virt_specifiers,
1107                       tree exception_specification,
1108                       tree late_return_type)
1109 {
1110   cp_declarator *declarator;
1111
1112   declarator = make_declarator (cdk_function);
1113   declarator->declarator = target;
1114   declarator->u.function.parameters = parms;
1115   declarator->u.function.qualifiers = cv_qualifiers;
1116   declarator->u.function.virt_specifiers = virt_specifiers;
1117   declarator->u.function.exception_specification = exception_specification;
1118   declarator->u.function.late_return_type = late_return_type;
1119   if (target)
1120     {
1121       declarator->id_loc = target->id_loc;
1122       declarator->parameter_pack_p = target->parameter_pack_p;
1123       target->parameter_pack_p = false;
1124     }
1125   else
1126     declarator->parameter_pack_p = false;
1127
1128   return declarator;
1129 }
1130
1131 /* Make a declarator for an array of BOUNDS elements, each of which is
1132    defined by ELEMENT.  */
1133
1134 cp_declarator *
1135 make_array_declarator (cp_declarator *element, tree bounds)
1136 {
1137   cp_declarator *declarator;
1138
1139   declarator = make_declarator (cdk_array);
1140   declarator->declarator = element;
1141   declarator->u.array.bounds = bounds;
1142   if (element)
1143     {
1144       declarator->id_loc = element->id_loc;
1145       declarator->parameter_pack_p = element->parameter_pack_p;
1146       element->parameter_pack_p = false;
1147     }
1148   else
1149     declarator->parameter_pack_p = false;
1150
1151   return declarator;
1152 }
1153
1154 /* Determine whether the declarator we've seen so far can be a
1155    parameter pack, when followed by an ellipsis.  */
1156 static bool 
1157 declarator_can_be_parameter_pack (cp_declarator *declarator)
1158 {
1159   /* Search for a declarator name, or any other declarator that goes
1160      after the point where the ellipsis could appear in a parameter
1161      pack. If we find any of these, then this declarator can not be
1162      made into a parameter pack.  */
1163   bool found = false;
1164   while (declarator && !found)
1165     {
1166       switch ((int)declarator->kind)
1167         {
1168         case cdk_id:
1169         case cdk_array:
1170           found = true;
1171           break;
1172
1173         case cdk_error:
1174           return true;
1175
1176         default:
1177           declarator = declarator->declarator;
1178           break;
1179         }
1180     }
1181
1182   return !found;
1183 }
1184
1185 cp_parameter_declarator *no_parameters;
1186
1187 /* Create a parameter declarator with the indicated DECL_SPECIFIERS,
1188    DECLARATOR and DEFAULT_ARGUMENT.  */
1189
1190 cp_parameter_declarator *
1191 make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
1192                            cp_declarator *declarator,
1193                            tree default_argument)
1194 {
1195   cp_parameter_declarator *parameter;
1196
1197   parameter = ((cp_parameter_declarator *)
1198                alloc_declarator (sizeof (cp_parameter_declarator)));
1199   parameter->next = NULL;
1200   if (decl_specifiers)
1201     parameter->decl_specifiers = *decl_specifiers;
1202   else
1203     clear_decl_specs (&parameter->decl_specifiers);
1204   parameter->declarator = declarator;
1205   parameter->default_argument = default_argument;
1206   parameter->ellipsis_p = false;
1207
1208   return parameter;
1209 }
1210
1211 /* Returns true iff DECLARATOR  is a declaration for a function.  */
1212
1213 static bool
1214 function_declarator_p (const cp_declarator *declarator)
1215 {
1216   while (declarator)
1217     {
1218       if (declarator->kind == cdk_function
1219           && declarator->declarator->kind == cdk_id)
1220         return true;
1221       if (declarator->kind == cdk_id
1222           || declarator->kind == cdk_error)
1223         return false;
1224       declarator = declarator->declarator;
1225     }
1226   return false;
1227 }
1228  
1229 /* The parser.  */
1230
1231 /* Overview
1232    --------
1233
1234    A cp_parser parses the token stream as specified by the C++
1235    grammar.  Its job is purely parsing, not semantic analysis.  For
1236    example, the parser breaks the token stream into declarators,
1237    expressions, statements, and other similar syntactic constructs.
1238    It does not check that the types of the expressions on either side
1239    of an assignment-statement are compatible, or that a function is
1240    not declared with a parameter of type `void'.
1241
1242    The parser invokes routines elsewhere in the compiler to perform
1243    semantic analysis and to build up the abstract syntax tree for the
1244    code processed.
1245
1246    The parser (and the template instantiation code, which is, in a
1247    way, a close relative of parsing) are the only parts of the
1248    compiler that should be calling push_scope and pop_scope, or
1249    related functions.  The parser (and template instantiation code)
1250    keeps track of what scope is presently active; everything else
1251    should simply honor that.  (The code that generates static
1252    initializers may also need to set the scope, in order to check
1253    access control correctly when emitting the initializers.)
1254
1255    Methodology
1256    -----------
1257
1258    The parser is of the standard recursive-descent variety.  Upcoming
1259    tokens in the token stream are examined in order to determine which
1260    production to use when parsing a non-terminal.  Some C++ constructs
1261    require arbitrary look ahead to disambiguate.  For example, it is
1262    impossible, in the general case, to tell whether a statement is an
1263    expression or declaration without scanning the entire statement.
1264    Therefore, the parser is capable of "parsing tentatively."  When the
1265    parser is not sure what construct comes next, it enters this mode.
1266    Then, while we attempt to parse the construct, the parser queues up
1267    error messages, rather than issuing them immediately, and saves the
1268    tokens it consumes.  If the construct is parsed successfully, the
1269    parser "commits", i.e., it issues any queued error messages and
1270    the tokens that were being preserved are permanently discarded.
1271    If, however, the construct is not parsed successfully, the parser
1272    rolls back its state completely so that it can resume parsing using
1273    a different alternative.
1274
1275    Future Improvements
1276    -------------------
1277
1278    The performance of the parser could probably be improved substantially.
1279    We could often eliminate the need to parse tentatively by looking ahead
1280    a little bit.  In some places, this approach might not entirely eliminate
1281    the need to parse tentatively, but it might still speed up the average
1282    case.  */
1283
1284 /* Flags that are passed to some parsing functions.  These values can
1285    be bitwise-ored together.  */
1286
1287 enum
1288 {
1289   /* No flags.  */
1290   CP_PARSER_FLAGS_NONE = 0x0,
1291   /* The construct is optional.  If it is not present, then no error
1292      should be issued.  */
1293   CP_PARSER_FLAGS_OPTIONAL = 0x1,
1294   /* When parsing a type-specifier, treat user-defined type-names
1295      as non-type identifiers.  */
1296   CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2,
1297   /* When parsing a type-specifier, do not try to parse a class-specifier
1298      or enum-specifier.  */
1299   CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS = 0x4,
1300   /* When parsing a decl-specifier-seq, only allow type-specifier or
1301      constexpr.  */
1302   CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR = 0x8
1303 };
1304
1305 /* This type is used for parameters and variables which hold
1306    combinations of the above flags.  */
1307 typedef int cp_parser_flags;
1308
1309 /* The different kinds of declarators we want to parse.  */
1310
1311 typedef enum cp_parser_declarator_kind
1312 {
1313   /* We want an abstract declarator.  */
1314   CP_PARSER_DECLARATOR_ABSTRACT,
1315   /* We want a named declarator.  */
1316   CP_PARSER_DECLARATOR_NAMED,
1317   /* We don't mind, but the name must be an unqualified-id.  */
1318   CP_PARSER_DECLARATOR_EITHER
1319 } cp_parser_declarator_kind;
1320
1321 /* The precedence values used to parse binary expressions.  The minimum value
1322    of PREC must be 1, because zero is reserved to quickly discriminate
1323    binary operators from other tokens.  */
1324
1325 enum cp_parser_prec
1326 {
1327   PREC_NOT_OPERATOR,
1328   PREC_LOGICAL_OR_EXPRESSION,
1329   PREC_LOGICAL_AND_EXPRESSION,
1330   PREC_INCLUSIVE_OR_EXPRESSION,
1331   PREC_EXCLUSIVE_OR_EXPRESSION,
1332   PREC_AND_EXPRESSION,
1333   PREC_EQUALITY_EXPRESSION,
1334   PREC_RELATIONAL_EXPRESSION,
1335   PREC_SHIFT_EXPRESSION,
1336   PREC_ADDITIVE_EXPRESSION,
1337   PREC_MULTIPLICATIVE_EXPRESSION,
1338   PREC_PM_EXPRESSION,
1339   NUM_PREC_VALUES = PREC_PM_EXPRESSION
1340 };
1341
1342 /* A mapping from a token type to a corresponding tree node type, with a
1343    precedence value.  */
1344
1345 typedef struct cp_parser_binary_operations_map_node
1346 {
1347   /* The token type.  */
1348   enum cpp_ttype token_type;
1349   /* The corresponding tree code.  */
1350   enum tree_code tree_type;
1351   /* The precedence of this operator.  */
1352   enum cp_parser_prec prec;
1353 } cp_parser_binary_operations_map_node;
1354
1355 typedef struct cp_parser_expression_stack_entry
1356 {
1357   /* Left hand side of the binary operation we are currently
1358      parsing.  */
1359   tree lhs;
1360   /* Original tree code for left hand side, if it was a binary
1361      expression itself (used for -Wparentheses).  */
1362   enum tree_code lhs_type;
1363   /* Tree code for the binary operation we are parsing.  */
1364   enum tree_code tree_type;
1365   /* Precedence of the binary operation we are parsing.  */
1366   enum cp_parser_prec prec;
1367 } cp_parser_expression_stack_entry;
1368
1369 /* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1370    entries because precedence levels on the stack are monotonically
1371    increasing.  */
1372 typedef struct cp_parser_expression_stack_entry
1373   cp_parser_expression_stack[NUM_PREC_VALUES];
1374
1375 /* Prototypes.  */
1376
1377 /* Constructors and destructors.  */
1378
1379 static cp_parser_context *cp_parser_context_new
1380   (cp_parser_context *);
1381
1382 /* Class variables.  */
1383
1384 static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1385
1386 /* The operator-precedence table used by cp_parser_binary_expression.
1387    Transformed into an associative array (binops_by_token) by
1388    cp_parser_new.  */
1389
1390 static const cp_parser_binary_operations_map_node binops[] = {
1391   { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1392   { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1393
1394   { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1395   { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1396   { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1397
1398   { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1399   { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1400
1401   { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1402   { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1403
1404   { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1405   { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1406   { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1407   { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1408
1409   { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1410   { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1411
1412   { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1413
1414   { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1415
1416   { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1417
1418   { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1419
1420   { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1421 };
1422
1423 /* The same as binops, but initialized by cp_parser_new so that
1424    binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1425    for speed.  */
1426 static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1427
1428 /* Constructors and destructors.  */
1429
1430 /* Construct a new context.  The context below this one on the stack
1431    is given by NEXT.  */
1432
1433 static cp_parser_context *
1434 cp_parser_context_new (cp_parser_context* next)
1435 {
1436   cp_parser_context *context;
1437
1438   /* Allocate the storage.  */
1439   if (cp_parser_context_free_list != NULL)
1440     {
1441       /* Pull the first entry from the free list.  */
1442       context = cp_parser_context_free_list;
1443       cp_parser_context_free_list = context->next;
1444       memset (context, 0, sizeof (*context));
1445     }
1446   else
1447     context = ggc_alloc_cleared_cp_parser_context ();
1448
1449   /* No errors have occurred yet in this context.  */
1450   context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1451   /* If this is not the bottommost context, copy information that we
1452      need from the previous context.  */
1453   if (next)
1454     {
1455       /* If, in the NEXT context, we are parsing an `x->' or `x.'
1456          expression, then we are parsing one in this context, too.  */
1457       context->object_type = next->object_type;
1458       /* Thread the stack.  */
1459       context->next = next;
1460     }
1461
1462   return context;
1463 }
1464
1465 /* Managing the unparsed function queues.  */
1466
1467 #define unparsed_funs_with_default_args \
1468   VEC_last (cp_unparsed_functions_entry, parser->unparsed_queues)->funs_with_default_args
1469 #define unparsed_funs_with_definitions \
1470   VEC_last (cp_unparsed_functions_entry, parser->unparsed_queues)->funs_with_definitions
1471
1472 static void
1473 push_unparsed_function_queues (cp_parser *parser)
1474 {
1475   VEC_safe_push (cp_unparsed_functions_entry, gc,
1476                  parser->unparsed_queues, NULL);
1477   unparsed_funs_with_default_args = NULL;
1478   unparsed_funs_with_definitions = make_tree_vector ();
1479 }
1480
1481 static void
1482 pop_unparsed_function_queues (cp_parser *parser)
1483 {
1484   release_tree_vector (unparsed_funs_with_definitions);
1485   VEC_pop (cp_unparsed_functions_entry, parser->unparsed_queues);
1486 }
1487
1488 /* Prototypes.  */
1489
1490 /* Constructors and destructors.  */
1491
1492 static cp_parser *cp_parser_new
1493   (void);
1494
1495 /* Routines to parse various constructs.
1496
1497    Those that return `tree' will return the error_mark_node (rather
1498    than NULL_TREE) if a parse error occurs, unless otherwise noted.
1499    Sometimes, they will return an ordinary node if error-recovery was
1500    attempted, even though a parse error occurred.  So, to check
1501    whether or not a parse error occurred, you should always use
1502    cp_parser_error_occurred.  If the construct is optional (indicated
1503    either by an `_opt' in the name of the function that does the
1504    parsing or via a FLAGS parameter), then NULL_TREE is returned if
1505    the construct is not present.  */
1506
1507 /* Lexical conventions [gram.lex]  */
1508
1509 static tree cp_parser_identifier
1510   (cp_parser *);
1511 static tree cp_parser_string_literal
1512   (cp_parser *, bool, bool);
1513
1514 /* Basic concepts [gram.basic]  */
1515
1516 static bool cp_parser_translation_unit
1517   (cp_parser *);
1518
1519 /* Expressions [gram.expr]  */
1520
1521 static tree cp_parser_primary_expression
1522   (cp_parser *, bool, bool, bool, cp_id_kind *);
1523 static tree cp_parser_id_expression
1524   (cp_parser *, bool, bool, bool *, bool, bool);
1525 static tree cp_parser_unqualified_id
1526   (cp_parser *, bool, bool, bool, bool);
1527 static tree cp_parser_nested_name_specifier_opt
1528   (cp_parser *, bool, bool, bool, bool);
1529 static tree cp_parser_nested_name_specifier
1530   (cp_parser *, bool, bool, bool, bool);
1531 static tree cp_parser_qualifying_entity
1532   (cp_parser *, bool, bool, bool, bool, bool);
1533 static tree cp_parser_postfix_expression
1534   (cp_parser *, bool, bool, bool, cp_id_kind *);
1535 static tree cp_parser_postfix_open_square_expression
1536   (cp_parser *, tree, bool);
1537 static tree cp_parser_postfix_dot_deref_expression
1538   (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *, location_t);
1539 static VEC(tree,gc) *cp_parser_parenthesized_expression_list
1540   (cp_parser *, int, bool, bool, bool *);
1541 /* Values for the second parameter of cp_parser_parenthesized_expression_list.  */
1542 enum { non_attr = 0, normal_attr = 1, id_attr = 2 };
1543 static void cp_parser_pseudo_destructor_name
1544   (cp_parser *, tree *, tree *);
1545 static tree cp_parser_unary_expression
1546   (cp_parser *, bool, bool, cp_id_kind *);
1547 static enum tree_code cp_parser_unary_operator
1548   (cp_token *);
1549 static tree cp_parser_new_expression
1550   (cp_parser *);
1551 static VEC(tree,gc) *cp_parser_new_placement
1552   (cp_parser *);
1553 static tree cp_parser_new_type_id
1554   (cp_parser *, tree *);
1555 static cp_declarator *cp_parser_new_declarator_opt
1556   (cp_parser *);
1557 static cp_declarator *cp_parser_direct_new_declarator
1558   (cp_parser *);
1559 static VEC(tree,gc) *cp_parser_new_initializer
1560   (cp_parser *);
1561 static tree cp_parser_delete_expression
1562   (cp_parser *);
1563 static tree cp_parser_cast_expression
1564   (cp_parser *, bool, bool, cp_id_kind *);
1565 static tree cp_parser_binary_expression
1566   (cp_parser *, bool, bool, enum cp_parser_prec, cp_id_kind *);
1567 static tree cp_parser_question_colon_clause
1568   (cp_parser *, tree);
1569 static tree cp_parser_assignment_expression
1570   (cp_parser *, bool, cp_id_kind *);
1571 static enum tree_code cp_parser_assignment_operator_opt
1572   (cp_parser *);
1573 static tree cp_parser_expression
1574   (cp_parser *, bool, cp_id_kind *);
1575 static tree cp_parser_constant_expression
1576   (cp_parser *, bool, bool *);
1577 static tree cp_parser_builtin_offsetof
1578   (cp_parser *);
1579 static tree cp_parser_lambda_expression
1580   (cp_parser *);
1581 static void cp_parser_lambda_introducer
1582   (cp_parser *, tree);
1583 static bool cp_parser_lambda_declarator_opt
1584   (cp_parser *, tree);
1585 static void cp_parser_lambda_body
1586   (cp_parser *, tree);
1587
1588 /* Statements [gram.stmt.stmt]  */
1589
1590 static void cp_parser_statement
1591   (cp_parser *, tree, bool, bool *);
1592 static void cp_parser_label_for_labeled_statement
1593   (cp_parser *);
1594 static tree cp_parser_expression_statement
1595   (cp_parser *, tree);
1596 static tree cp_parser_compound_statement
1597   (cp_parser *, tree, bool, bool);
1598 static void cp_parser_statement_seq_opt
1599   (cp_parser *, tree);
1600 static tree cp_parser_selection_statement
1601   (cp_parser *, bool *);
1602 static tree cp_parser_condition
1603   (cp_parser *);
1604 static tree cp_parser_iteration_statement
1605   (cp_parser *);
1606 static bool cp_parser_for_init_statement
1607   (cp_parser *, tree *decl);
1608 static tree cp_parser_for
1609   (cp_parser *);
1610 static tree cp_parser_c_for
1611   (cp_parser *, tree, tree);
1612 static tree cp_parser_range_for
1613   (cp_parser *, tree, tree, tree);
1614 static tree cp_parser_perform_range_for_lookup
1615   (tree, tree *, tree *);
1616 static tree cp_parser_range_for_member_function
1617   (tree, tree);
1618 static tree cp_parser_jump_statement
1619   (cp_parser *);
1620 static void cp_parser_declaration_statement
1621   (cp_parser *);
1622
1623 static tree cp_parser_implicitly_scoped_statement
1624   (cp_parser *, bool *);
1625 static void cp_parser_already_scoped_statement
1626   (cp_parser *);
1627
1628 /* Declarations [gram.dcl.dcl] */
1629
1630 static void cp_parser_declaration_seq_opt
1631   (cp_parser *);
1632 static void cp_parser_declaration
1633   (cp_parser *);
1634 static void cp_parser_block_declaration
1635   (cp_parser *, bool);
1636 static void cp_parser_simple_declaration
1637   (cp_parser *, bool, tree *);
1638 static void cp_parser_decl_specifier_seq
1639   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1640 static tree cp_parser_storage_class_specifier_opt
1641   (cp_parser *);
1642 static tree cp_parser_function_specifier_opt
1643   (cp_parser *, cp_decl_specifier_seq *);
1644 static tree cp_parser_type_specifier
1645   (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1646    int *, bool *);
1647 static tree cp_parser_simple_type_specifier
1648   (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1649 static tree cp_parser_type_name
1650   (cp_parser *);
1651 static tree cp_parser_nonclass_name 
1652   (cp_parser* parser);
1653 static tree cp_parser_elaborated_type_specifier
1654   (cp_parser *, bool, bool);
1655 static tree cp_parser_enum_specifier
1656   (cp_parser *);
1657 static void cp_parser_enumerator_list
1658   (cp_parser *, tree);
1659 static void cp_parser_enumerator_definition
1660   (cp_parser *, tree);
1661 static tree cp_parser_namespace_name
1662   (cp_parser *);
1663 static void cp_parser_namespace_definition
1664   (cp_parser *);
1665 static void cp_parser_namespace_body
1666   (cp_parser *);
1667 static tree cp_parser_qualified_namespace_specifier
1668   (cp_parser *);
1669 static void cp_parser_namespace_alias_definition
1670   (cp_parser *);
1671 static bool cp_parser_using_declaration
1672   (cp_parser *, bool);
1673 static void cp_parser_using_directive
1674   (cp_parser *);
1675 static void cp_parser_asm_definition
1676   (cp_parser *);
1677 static void cp_parser_linkage_specification
1678   (cp_parser *);
1679 static void cp_parser_static_assert
1680   (cp_parser *, bool);
1681 static tree cp_parser_decltype
1682   (cp_parser *);
1683
1684 /* Declarators [gram.dcl.decl] */
1685
1686 static tree cp_parser_init_declarator
1687   (cp_parser *, cp_decl_specifier_seq *, VEC (deferred_access_check,gc)*, bool, bool, int, bool *, tree *);
1688 static cp_declarator *cp_parser_declarator
1689   (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1690 static cp_declarator *cp_parser_direct_declarator
1691   (cp_parser *, cp_parser_declarator_kind, int *, bool);
1692 static enum tree_code cp_parser_ptr_operator
1693   (cp_parser *, tree *, cp_cv_quals *);
1694 static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1695   (cp_parser *);
1696 static cp_virt_specifiers cp_parser_virt_specifier_seq_opt
1697   (cp_parser *);
1698 static tree cp_parser_late_return_type_opt
1699   (cp_parser *);
1700 static tree cp_parser_declarator_id
1701   (cp_parser *, bool);
1702 static tree cp_parser_type_id
1703   (cp_parser *);
1704 static tree cp_parser_template_type_arg
1705   (cp_parser *);
1706 static tree cp_parser_trailing_type_id (cp_parser *);
1707 static tree cp_parser_type_id_1
1708   (cp_parser *, bool, bool);
1709 static void cp_parser_type_specifier_seq
1710   (cp_parser *, bool, bool, cp_decl_specifier_seq *);
1711 static tree cp_parser_parameter_declaration_clause
1712   (cp_parser *);
1713 static tree cp_parser_parameter_declaration_list
1714   (cp_parser *, bool *);
1715 static cp_parameter_declarator *cp_parser_parameter_declaration
1716   (cp_parser *, bool, bool *);
1717 static tree cp_parser_default_argument 
1718   (cp_parser *, bool);
1719 static void cp_parser_function_body
1720   (cp_parser *);
1721 static tree cp_parser_initializer
1722   (cp_parser *, bool *, bool *);
1723 static tree cp_parser_initializer_clause
1724   (cp_parser *, bool *);
1725 static tree cp_parser_braced_list
1726   (cp_parser*, bool*);
1727 static VEC(constructor_elt,gc) *cp_parser_initializer_list
1728   (cp_parser *, bool *);
1729
1730 static bool cp_parser_ctor_initializer_opt_and_function_body
1731   (cp_parser *);
1732
1733 /* Classes [gram.class] */
1734
1735 static tree cp_parser_class_name
1736   (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
1737 static tree cp_parser_class_specifier
1738   (cp_parser *);
1739 static tree cp_parser_class_head
1740   (cp_parser *, bool *, tree *, tree *);
1741 static enum tag_types cp_parser_class_key
1742   (cp_parser *);
1743 static void cp_parser_member_specification_opt
1744   (cp_parser *);
1745 static void cp_parser_member_declaration
1746   (cp_parser *);
1747 static tree cp_parser_pure_specifier
1748   (cp_parser *);
1749 static tree cp_parser_constant_initializer
1750   (cp_parser *);
1751
1752 /* Derived classes [gram.class.derived] */
1753
1754 static tree cp_parser_base_clause
1755   (cp_parser *);
1756 static tree cp_parser_base_specifier
1757   (cp_parser *);
1758
1759 /* Special member functions [gram.special] */
1760
1761 static tree cp_parser_conversion_function_id
1762   (cp_parser *);
1763 static tree cp_parser_conversion_type_id
1764   (cp_parser *);
1765 static cp_declarator *cp_parser_conversion_declarator_opt
1766   (cp_parser *);
1767 static bool cp_parser_ctor_initializer_opt
1768   (cp_parser *);
1769 static void cp_parser_mem_initializer_list
1770   (cp_parser *);
1771 static tree cp_parser_mem_initializer
1772   (cp_parser *);
1773 static tree cp_parser_mem_initializer_id
1774   (cp_parser *);
1775
1776 /* Overloading [gram.over] */
1777
1778 static tree cp_parser_operator_function_id
1779   (cp_parser *);
1780 static tree cp_parser_operator
1781   (cp_parser *);
1782
1783 /* Templates [gram.temp] */
1784
1785 static void cp_parser_template_declaration
1786   (cp_parser *, bool);
1787 static tree cp_parser_template_parameter_list
1788   (cp_parser *);
1789 static tree cp_parser_template_parameter
1790   (cp_parser *, bool *, bool *);
1791 static tree cp_parser_type_parameter
1792   (cp_parser *, bool *);
1793 static tree cp_parser_template_id
1794   (cp_parser *, bool, bool, bool);
1795 static tree cp_parser_template_name
1796   (cp_parser *, bool, bool, bool, bool *);
1797 static tree cp_parser_template_argument_list
1798   (cp_parser *);
1799 static tree cp_parser_template_argument
1800   (cp_parser *);
1801 static void cp_parser_explicit_instantiation
1802   (cp_parser *);
1803 static void cp_parser_explicit_specialization
1804   (cp_parser *);
1805
1806 /* Exception handling [gram.exception] */
1807
1808 static tree cp_parser_try_block
1809   (cp_parser *);
1810 static bool cp_parser_function_try_block
1811   (cp_parser *);
1812 static void cp_parser_handler_seq
1813   (cp_parser *);
1814 static void cp_parser_handler
1815   (cp_parser *);
1816 static tree cp_parser_exception_declaration
1817   (cp_parser *);
1818 static tree cp_parser_throw_expression
1819   (cp_parser *);
1820 static tree cp_parser_exception_specification_opt
1821   (cp_parser *);
1822 static tree cp_parser_type_id_list
1823   (cp_parser *);
1824
1825 /* GNU Extensions */
1826
1827 static tree cp_parser_asm_specification_opt
1828   (cp_parser *);
1829 static tree cp_parser_asm_operand_list
1830   (cp_parser *);
1831 static tree cp_parser_asm_clobber_list
1832   (cp_parser *);
1833 static tree cp_parser_asm_label_list
1834   (cp_parser *);
1835 static tree cp_parser_attributes_opt
1836   (cp_parser *);
1837 static tree cp_parser_attribute_list
1838   (cp_parser *);
1839 static bool cp_parser_extension_opt
1840   (cp_parser *, int *);
1841 static void cp_parser_label_declaration
1842   (cp_parser *);
1843
1844 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1845 static bool cp_parser_pragma
1846   (cp_parser *, enum pragma_context);
1847
1848 /* Objective-C++ Productions */
1849
1850 static tree cp_parser_objc_message_receiver
1851   (cp_parser *);
1852 static tree cp_parser_objc_message_args
1853   (cp_parser *);
1854 static tree cp_parser_objc_message_expression
1855   (cp_parser *);
1856 static tree cp_parser_objc_encode_expression
1857   (cp_parser *);
1858 static tree cp_parser_objc_defs_expression
1859   (cp_parser *);
1860 static tree cp_parser_objc_protocol_expression
1861   (cp_parser *);
1862 static tree cp_parser_objc_selector_expression
1863   (cp_parser *);
1864 static tree cp_parser_objc_expression
1865   (cp_parser *);
1866 static bool cp_parser_objc_selector_p
1867   (enum cpp_ttype);
1868 static tree cp_parser_objc_selector
1869   (cp_parser *);
1870 static tree cp_parser_objc_protocol_refs_opt
1871   (cp_parser *);
1872 static void cp_parser_objc_declaration
1873   (cp_parser *, tree);
1874 static tree cp_parser_objc_statement
1875   (cp_parser *);
1876 static bool cp_parser_objc_valid_prefix_attributes
1877   (cp_parser *, tree *);
1878 static void cp_parser_objc_at_property_declaration 
1879   (cp_parser *) ;
1880 static void cp_parser_objc_at_synthesize_declaration 
1881   (cp_parser *) ;
1882 static void cp_parser_objc_at_dynamic_declaration
1883   (cp_parser *) ;
1884 static tree cp_parser_objc_struct_declaration
1885   (cp_parser *) ;
1886
1887 /* Utility Routines */
1888
1889 static tree cp_parser_lookup_name
1890   (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *, location_t);
1891 static tree cp_parser_lookup_name_simple
1892   (cp_parser *, tree, location_t);
1893 static tree cp_parser_maybe_treat_template_as_class
1894   (tree, bool);
1895 static bool cp_parser_check_declarator_template_parameters
1896   (cp_parser *, cp_declarator *, location_t);
1897 static bool cp_parser_check_template_parameters
1898   (cp_parser *, unsigned, location_t, cp_declarator *);
1899 static tree cp_parser_simple_cast_expression
1900   (cp_parser *);
1901 static tree cp_parser_global_scope_opt
1902   (cp_parser *, bool);
1903 static bool cp_parser_constructor_declarator_p
1904   (cp_parser *, bool);
1905 static tree cp_parser_function_definition_from_specifiers_and_declarator
1906   (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1907 static tree cp_parser_function_definition_after_declarator
1908   (cp_parser *, bool);
1909 static void cp_parser_template_declaration_after_export
1910   (cp_parser *, bool);
1911 static void cp_parser_perform_template_parameter_access_checks
1912   (VEC (deferred_access_check,gc)*);
1913 static tree cp_parser_single_declaration
1914   (cp_parser *, VEC (deferred_access_check,gc)*, bool, bool, bool *);
1915 static tree cp_parser_functional_cast
1916   (cp_parser *, tree);
1917 static tree cp_parser_save_member_function_body
1918   (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1919 static tree cp_parser_enclosed_template_argument_list
1920   (cp_parser *);
1921 static void cp_parser_save_default_args
1922   (cp_parser *, tree);
1923 static void cp_parser_late_parsing_for_member
1924   (cp_parser *, tree);
1925 static void cp_parser_late_parsing_default_args
1926   (cp_parser *, tree);
1927 static tree cp_parser_sizeof_operand
1928   (cp_parser *, enum rid);
1929 static tree cp_parser_trait_expr
1930   (cp_parser *, enum rid);
1931 static bool cp_parser_declares_only_class_p
1932   (cp_parser *);
1933 static void cp_parser_set_storage_class
1934   (cp_parser *, cp_decl_specifier_seq *, enum rid, location_t);
1935 static void cp_parser_set_decl_spec_type
1936   (cp_decl_specifier_seq *, tree, location_t, bool);
1937 static bool cp_parser_friend_p
1938   (const cp_decl_specifier_seq *);
1939 static void cp_parser_required_error
1940   (cp_parser *, required_token, bool);
1941 static cp_token *cp_parser_require
1942   (cp_parser *, enum cpp_ttype, required_token);
1943 static cp_token *cp_parser_require_keyword
1944   (cp_parser *, enum rid, required_token);
1945 static bool cp_parser_token_starts_function_definition_p
1946   (cp_token *);
1947 static bool cp_parser_next_token_starts_class_definition_p
1948   (cp_parser *);
1949 static bool cp_parser_next_token_ends_template_argument_p
1950   (cp_parser *);
1951 static bool cp_parser_nth_token_starts_template_argument_list_p
1952   (cp_parser *, size_t);
1953 static enum tag_types cp_parser_token_is_class_key
1954   (cp_token *);
1955 static void cp_parser_check_class_key
1956   (enum tag_types, tree type);
1957 static void cp_parser_check_access_in_redeclaration
1958   (tree type, location_t location);
1959 static bool cp_parser_optional_template_keyword
1960   (cp_parser *);
1961 static void cp_parser_pre_parsed_nested_name_specifier
1962   (cp_parser *);
1963 static bool cp_parser_cache_group
1964   (cp_parser *, enum cpp_ttype, unsigned);
1965 static void cp_parser_parse_tentatively
1966   (cp_parser *);
1967 static void cp_parser_commit_to_tentative_parse
1968   (cp_parser *);
1969 static void cp_parser_abort_tentative_parse
1970   (cp_parser *);
1971 static bool cp_parser_parse_definitely
1972   (cp_parser *);
1973 static inline bool cp_parser_parsing_tentatively
1974   (cp_parser *);
1975 static bool cp_parser_uncommitted_to_tentative_parse_p
1976   (cp_parser *);
1977 static void cp_parser_error
1978   (cp_parser *, const char *);
1979 static void cp_parser_name_lookup_error
1980   (cp_parser *, tree, tree, name_lookup_error, location_t);
1981 static bool cp_parser_simulate_error
1982   (cp_parser *);
1983 static bool cp_parser_check_type_definition
1984   (cp_parser *);
1985 static void cp_parser_check_for_definition_in_return_type
1986   (cp_declarator *, tree, location_t type_location);
1987 static void cp_parser_check_for_invalid_template_id
1988   (cp_parser *, tree, location_t location);
1989 static bool cp_parser_non_integral_constant_expression
1990   (cp_parser *, non_integral_constant);
1991 static void cp_parser_diagnose_invalid_type_name
1992   (cp_parser *, tree, tree, location_t);
1993 static bool cp_parser_parse_and_diagnose_invalid_type_name
1994   (cp_parser *);
1995 static int cp_parser_skip_to_closing_parenthesis
1996   (cp_parser *, bool, bool, bool);
1997 static void cp_parser_skip_to_end_of_statement
1998   (cp_parser *);
1999 static void cp_parser_consume_semicolon_at_end_of_statement
2000   (cp_parser *);
2001 static void cp_parser_skip_to_end_of_block_or_statement
2002   (cp_parser *);
2003 static bool cp_parser_skip_to_closing_brace
2004   (cp_parser *);
2005 static void cp_parser_skip_to_end_of_template_parameter_list
2006   (cp_parser *);
2007 static void cp_parser_skip_to_pragma_eol
2008   (cp_parser*, cp_token *);
2009 static bool cp_parser_error_occurred
2010   (cp_parser *);
2011 static bool cp_parser_allow_gnu_extensions_p
2012   (cp_parser *);
2013 static bool cp_parser_is_string_literal
2014   (cp_token *);
2015 static bool cp_parser_is_keyword
2016   (cp_token *, enum rid);
2017 static tree cp_parser_make_typename_type
2018   (cp_parser *, tree, tree, location_t location);
2019 static cp_declarator * cp_parser_make_indirect_declarator
2020   (enum tree_code, tree, cp_cv_quals, cp_declarator *);
2021
2022 /* Returns nonzero if we are parsing tentatively.  */
2023
2024 static inline bool
2025 cp_parser_parsing_tentatively (cp_parser* parser)
2026 {
2027   return parser->context->next != NULL;
2028 }
2029
2030 /* Returns nonzero if TOKEN is a string literal.  */
2031
2032 static bool
2033 cp_parser_is_string_literal (cp_token* token)
2034 {
2035   return (token->type == CPP_STRING ||
2036           token->type == CPP_STRING16 ||
2037           token->type == CPP_STRING32 ||
2038           token->type == CPP_WSTRING ||
2039           token->type == CPP_UTF8STRING);
2040 }
2041
2042 /* Returns nonzero if TOKEN is the indicated KEYWORD.  */
2043
2044 static bool
2045 cp_parser_is_keyword (cp_token* token, enum rid keyword)
2046 {
2047   return token->keyword == keyword;
2048 }
2049
2050 /* If not parsing tentatively, issue a diagnostic of the form
2051       FILE:LINE: MESSAGE before TOKEN
2052    where TOKEN is the next token in the input stream.  MESSAGE
2053    (specified by the caller) is usually of the form "expected
2054    OTHER-TOKEN".  */
2055
2056 static void
2057 cp_parser_error (cp_parser* parser, const char* gmsgid)
2058 {
2059   if (!cp_parser_simulate_error (parser))
2060     {
2061       cp_token *token = cp_lexer_peek_token (parser->lexer);
2062       /* This diagnostic makes more sense if it is tagged to the line
2063          of the token we just peeked at.  */
2064       cp_lexer_set_source_position_from_token (token);
2065
2066       if (token->type == CPP_PRAGMA)
2067         {
2068           error_at (token->location,
2069                     "%<#pragma%> is not allowed here");
2070           cp_parser_skip_to_pragma_eol (parser, token);
2071           return;
2072         }
2073
2074       c_parse_error (gmsgid,
2075                      /* Because c_parser_error does not understand
2076                         CPP_KEYWORD, keywords are treated like
2077                         identifiers.  */
2078                      (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
2079                      token->u.value, token->flags);
2080     }
2081 }
2082
2083 /* Issue an error about name-lookup failing.  NAME is the
2084    IDENTIFIER_NODE DECL is the result of
2085    the lookup (as returned from cp_parser_lookup_name).  DESIRED is
2086    the thing that we hoped to find.  */
2087
2088 static void
2089 cp_parser_name_lookup_error (cp_parser* parser,
2090                              tree name,
2091                              tree decl,
2092                              name_lookup_error desired,
2093                              location_t location)
2094 {
2095   /* If name lookup completely failed, tell the user that NAME was not
2096      declared.  */
2097   if (decl == error_mark_node)
2098     {
2099       if (parser->scope && parser->scope != global_namespace)
2100         error_at (location, "%<%E::%E%> has not been declared",
2101                   parser->scope, name);
2102       else if (parser->scope == global_namespace)
2103         error_at (location, "%<::%E%> has not been declared", name);
2104       else if (parser->object_scope
2105                && !CLASS_TYPE_P (parser->object_scope))
2106         error_at (location, "request for member %qE in non-class type %qT",
2107                   name, parser->object_scope);
2108       else if (parser->object_scope)
2109         error_at (location, "%<%T::%E%> has not been declared",
2110                   parser->object_scope, name);
2111       else
2112         error_at (location, "%qE has not been declared", name);
2113     }
2114   else if (parser->scope && parser->scope != global_namespace)
2115     {
2116       switch (desired)
2117         {
2118           case NLE_TYPE:
2119             error_at (location, "%<%E::%E%> is not a type",
2120                                 parser->scope, name);
2121             break;
2122           case NLE_CXX98:
2123             error_at (location, "%<%E::%E%> is not a class or namespace",
2124                                 parser->scope, name);
2125             break;
2126           case NLE_NOT_CXX98:
2127             error_at (location,
2128                       "%<%E::%E%> is not a class, namespace, or enumeration",
2129                       parser->scope, name);
2130             break;
2131           default:
2132             gcc_unreachable ();
2133             
2134         }
2135     }
2136   else if (parser->scope == global_namespace)
2137     {
2138       switch (desired)
2139         {
2140           case NLE_TYPE:
2141             error_at (location, "%<::%E%> is not a type", name);
2142             break;
2143           case NLE_CXX98:
2144             error_at (location, "%<::%E%> is not a class or namespace", name);
2145             break;
2146           case NLE_NOT_CXX98:
2147             error_at (location,
2148                       "%<::%E%> is not a class, namespace, or enumeration",
2149                       name);
2150             break;
2151           default:
2152             gcc_unreachable ();
2153         }
2154     }
2155   else
2156     {
2157       switch (desired)
2158         {
2159           case NLE_TYPE:
2160             error_at (location, "%qE is not a type", name);
2161             break;
2162           case NLE_CXX98:
2163             error_at (location, "%qE is not a class or namespace", name);
2164             break;
2165           case NLE_NOT_CXX98:
2166             error_at (location,
2167                       "%qE is not a class, namespace, or enumeration", name);
2168             break;
2169           default:
2170             gcc_unreachable ();
2171         }
2172     }
2173 }
2174
2175 /* If we are parsing tentatively, remember that an error has occurred
2176    during this tentative parse.  Returns true if the error was
2177    simulated; false if a message should be issued by the caller.  */
2178
2179 static bool
2180 cp_parser_simulate_error (cp_parser* parser)
2181 {
2182   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2183     {
2184       parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2185       return true;
2186     }
2187   return false;
2188 }
2189
2190 /* Check for repeated decl-specifiers.  */
2191
2192 static void
2193 cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs,
2194                            location_t location)
2195 {
2196   int ds;
2197
2198   for (ds = ds_first; ds != ds_last; ++ds)
2199     {
2200       unsigned count = decl_specs->specs[ds];
2201       if (count < 2)
2202         continue;
2203       /* The "long" specifier is a special case because of "long long".  */
2204       if (ds == ds_long)
2205         {
2206           if (count > 2)
2207             error_at (location, "%<long long long%> is too long for GCC");
2208           else 
2209             pedwarn_cxx98 (location, OPT_Wlong_long, 
2210                            "ISO C++ 1998 does not support %<long long%>");
2211         }
2212       else if (count > 1)
2213         {
2214           static const char *const decl_spec_names[] = {
2215             "signed",
2216             "unsigned",
2217             "short",
2218             "long",
2219             "const",
2220             "volatile",
2221             "restrict",
2222             "inline",
2223             "virtual",
2224             "explicit",
2225             "friend",
2226             "typedef",
2227             "constexpr",
2228             "__complex",
2229             "__thread"
2230           };
2231           error_at (location, "duplicate %qs", decl_spec_names[ds]);
2232         }
2233     }
2234 }
2235
2236 /* This function is called when a type is defined.  If type
2237    definitions are forbidden at this point, an error message is
2238    issued.  */
2239
2240 static bool
2241 cp_parser_check_type_definition (cp_parser* parser)
2242 {
2243   /* If types are forbidden here, issue a message.  */
2244   if (parser->type_definition_forbidden_message)
2245     {
2246       /* Don't use `%s' to print the string, because quotations (`%<', `%>')
2247          in the message need to be interpreted.  */
2248       error (parser->type_definition_forbidden_message);
2249       return false;
2250     }
2251   return true;
2252 }
2253
2254 /* This function is called when the DECLARATOR is processed.  The TYPE
2255    was a type defined in the decl-specifiers.  If it is invalid to
2256    define a type in the decl-specifiers for DECLARATOR, an error is
2257    issued. TYPE_LOCATION is the location of TYPE and is used
2258    for error reporting.  */
2259
2260 static void
2261 cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2262                                                tree type, location_t type_location)
2263 {
2264   /* [dcl.fct] forbids type definitions in return types.
2265      Unfortunately, it's not easy to know whether or not we are
2266      processing a return type until after the fact.  */
2267   while (declarator
2268          && (declarator->kind == cdk_pointer
2269              || declarator->kind == cdk_reference
2270              || declarator->kind == cdk_ptrmem))
2271     declarator = declarator->declarator;
2272   if (declarator
2273       && declarator->kind == cdk_function)
2274     {
2275       error_at (type_location,
2276                 "new types may not be defined in a return type");
2277       inform (type_location, 
2278               "(perhaps a semicolon is missing after the definition of %qT)",
2279               type);
2280     }
2281 }
2282
2283 /* A type-specifier (TYPE) has been parsed which cannot be followed by
2284    "<" in any valid C++ program.  If the next token is indeed "<",
2285    issue a message warning the user about what appears to be an
2286    invalid attempt to form a template-id. LOCATION is the location
2287    of the type-specifier (TYPE) */
2288
2289 static void
2290 cp_parser_check_for_invalid_template_id (cp_parser* parser,
2291                                          tree type, location_t location)
2292 {
2293   cp_token_position start = 0;
2294
2295   if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2296     {
2297       if (TYPE_P (type))
2298         error_at (location, "%qT is not a template", type);
2299       else if (TREE_CODE (type) == IDENTIFIER_NODE)
2300         error_at (location, "%qE is not a template", type);
2301       else
2302         error_at (location, "invalid template-id");
2303       /* Remember the location of the invalid "<".  */
2304       if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2305         start = cp_lexer_token_position (parser->lexer, true);
2306       /* Consume the "<".  */
2307       cp_lexer_consume_token (parser->lexer);
2308       /* Parse the template arguments.  */
2309       cp_parser_enclosed_template_argument_list (parser);
2310       /* Permanently remove the invalid template arguments so that
2311          this error message is not issued again.  */
2312       if (start)
2313         cp_lexer_purge_tokens_after (parser->lexer, start);
2314     }
2315 }
2316
2317 /* If parsing an integral constant-expression, issue an error message
2318    about the fact that THING appeared and return true.  Otherwise,
2319    return false.  In either case, set
2320    PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2321
2322 static bool
2323 cp_parser_non_integral_constant_expression (cp_parser  *parser,
2324                                             non_integral_constant thing)
2325 {
2326   parser->non_integral_constant_expression_p = true;
2327   if (parser->integral_constant_expression_p)
2328     {
2329       if (!parser->allow_non_integral_constant_expression_p)
2330         {
2331           const char *msg = NULL;
2332           switch (thing)
2333             {
2334               case NIC_FLOAT:
2335                 error ("floating-point literal "
2336                        "cannot appear in a constant-expression");
2337                 return true;
2338               case NIC_CAST:
2339                 error ("a cast to a type other than an integral or "
2340                        "enumeration type cannot appear in a "
2341                        "constant-expression");
2342                 return true;
2343               case NIC_TYPEID:
2344                 error ("%<typeid%> operator "
2345                        "cannot appear in a constant-expression");
2346                 return true;
2347               case NIC_NCC:
2348                 error ("non-constant compound literals "
2349                        "cannot appear in a constant-expression");
2350                 return true;
2351               case NIC_FUNC_CALL:
2352                 error ("a function call "
2353                        "cannot appear in a constant-expression");
2354                 return true;
2355               case NIC_INC:
2356                 error ("an increment "
2357                        "cannot appear in a constant-expression");
2358                 return true;
2359               case NIC_DEC:
2360                 error ("an decrement "
2361                        "cannot appear in a constant-expression");
2362                 return true;
2363               case NIC_ARRAY_REF:
2364                 error ("an array reference "
2365                        "cannot appear in a constant-expression");
2366                 return true;
2367               case NIC_ADDR_LABEL:
2368                 error ("the address of a label "
2369                        "cannot appear in a constant-expression");
2370                 return true;
2371               case NIC_OVERLOADED:
2372                 error ("calls to overloaded operators "
2373                        "cannot appear in a constant-expression");
2374                 return true;
2375               case NIC_ASSIGNMENT:
2376                 error ("an assignment cannot appear in a constant-expression");
2377                 return true;
2378               case NIC_COMMA:
2379                 error ("a comma operator "
2380                        "cannot appear in a constant-expression");
2381                 return true;
2382               case NIC_CONSTRUCTOR:
2383                 error ("a call to a constructor "
2384                        "cannot appear in a constant-expression");
2385                 return true;
2386               case NIC_THIS:
2387                 msg = "this";
2388                 break;
2389               case NIC_FUNC_NAME:
2390                 msg = "__FUNCTION__";
2391                 break;
2392               case NIC_PRETTY_FUNC:
2393                 msg = "__PRETTY_FUNCTION__";
2394                 break;
2395               case NIC_C99_FUNC:
2396                 msg = "__func__";
2397                 break;
2398               case NIC_VA_ARG:
2399                 msg = "va_arg";
2400                 break;
2401               case NIC_ARROW:
2402                 msg = "->";
2403                 break;
2404               case NIC_POINT:
2405                 msg = ".";
2406                 break;
2407               case NIC_STAR:
2408                 msg = "*";
2409                 break;
2410               case NIC_ADDR:
2411                 msg = "&";
2412                 break;
2413               case NIC_PREINCREMENT:
2414                 msg = "++";
2415                 break;
2416               case NIC_PREDECREMENT:
2417                 msg = "--";
2418                 break;
2419               case NIC_NEW:
2420                 msg = "new";
2421                 break;
2422               case NIC_DEL:
2423                 msg = "delete";
2424                 break;
2425               default:
2426                 gcc_unreachable ();
2427             }
2428           if (msg)
2429             error ("%qs cannot appear in a constant-expression", msg);
2430           return true;
2431         }
2432     }
2433   return false;
2434 }
2435
2436 /* Emit a diagnostic for an invalid type name.  SCOPE is the
2437    qualifying scope (or NULL, if none) for ID.  This function commits
2438    to the current active tentative parse, if any.  (Otherwise, the
2439    problematic construct might be encountered again later, resulting
2440    in duplicate error messages.) LOCATION is the location of ID.  */
2441
2442 static void
2443 cp_parser_diagnose_invalid_type_name (cp_parser *parser,
2444                                       tree scope, tree id,
2445                                       location_t location)
2446 {
2447   tree decl, old_scope;
2448   cp_parser_commit_to_tentative_parse (parser);
2449   /* Try to lookup the identifier.  */
2450   old_scope = parser->scope;
2451   parser->scope = scope;
2452   decl = cp_parser_lookup_name_simple (parser, id, location);
2453   parser->scope = old_scope;
2454   /* If the lookup found a template-name, it means that the user forgot
2455   to specify an argument list. Emit a useful error message.  */
2456   if (TREE_CODE (decl) == TEMPLATE_DECL)
2457     error_at (location,
2458               "invalid use of template-name %qE without an argument list",
2459               decl);
2460   else if (TREE_CODE (id) == BIT_NOT_EXPR)
2461     error_at (location, "invalid use of destructor %qD as a type", id);
2462   else if (TREE_CODE (decl) == TYPE_DECL)
2463     /* Something like 'unsigned A a;'  */
2464     error_at (location, "invalid combination of multiple type-specifiers");
2465   else if (!parser->scope)
2466     {
2467       /* Issue an error message.  */
2468       error_at (location, "%qE does not name a type", id);
2469       /* If we're in a template class, it's possible that the user was
2470          referring to a type from a base class.  For example:
2471
2472            template <typename T> struct A { typedef T X; };
2473            template <typename T> struct B : public A<T> { X x; };
2474
2475          The user should have said "typename A<T>::X".  */
2476       if (cxx_dialect < cxx0x && id == ridpointers[(int)RID_CONSTEXPR])
2477         inform (location, "C++0x %<constexpr%> only available with "
2478                 "-std=c++0x or -std=gnu++0x");
2479       else if (processing_template_decl && current_class_type
2480                && TYPE_BINFO (current_class_type))
2481         {
2482           tree b;
2483
2484           for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2485                b;
2486                b = TREE_CHAIN (b))
2487             {
2488               tree base_type = BINFO_TYPE (b);
2489               if (CLASS_TYPE_P (base_type)
2490                   && dependent_type_p (base_type))
2491                 {
2492                   tree field;
2493                   /* Go from a particular instantiation of the
2494                      template (which will have an empty TYPE_FIELDs),
2495                      to the main version.  */
2496                   base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2497                   for (field = TYPE_FIELDS (base_type);
2498                        field;
2499                        field = DECL_CHAIN (field))
2500                     if (TREE_CODE (field) == TYPE_DECL
2501                         && DECL_NAME (field) == id)
2502                       {
2503                         inform (location, 
2504                                 "(perhaps %<typename %T::%E%> was intended)",
2505                                 BINFO_TYPE (b), id);
2506                         break;
2507                       }
2508                   if (field)
2509                     break;
2510                 }
2511             }
2512         }
2513     }
2514   /* Here we diagnose qualified-ids where the scope is actually correct,
2515      but the identifier does not resolve to a valid type name.  */
2516   else if (parser->scope != error_mark_node)
2517     {
2518       if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2519         error_at (location, "%qE in namespace %qE does not name a type",
2520                   id, parser->scope);
2521       else if (CLASS_TYPE_P (parser->scope)
2522                && constructor_name_p (id, parser->scope))
2523         {
2524           /* A<T>::A<T>() */
2525           error_at (location, "%<%T::%E%> names the constructor, not"
2526                     " the type", parser->scope, id);
2527           if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2528             error_at (location, "and %qT has no template constructors",
2529                       parser->scope);
2530         }
2531       else if (TYPE_P (parser->scope)
2532                && dependent_scope_p (parser->scope))
2533         error_at (location, "need %<typename%> before %<%T::%E%> because "
2534                   "%qT is a dependent scope",
2535                   parser->scope, id, parser->scope);
2536       else if (TYPE_P (parser->scope))
2537         error_at (location, "%qE in %q#T does not name a type",
2538                   id, parser->scope);
2539       else
2540         gcc_unreachable ();
2541     }
2542 }
2543
2544 /* Check for a common situation where a type-name should be present,
2545    but is not, and issue a sensible error message.  Returns true if an
2546    invalid type-name was detected.
2547
2548    The situation handled by this function are variable declarations of the
2549    form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2550    Usually, `ID' should name a type, but if we got here it means that it
2551    does not. We try to emit the best possible error message depending on
2552    how exactly the id-expression looks like.  */
2553
2554 static bool
2555 cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2556 {
2557   tree id;
2558   cp_token *token = cp_lexer_peek_token (parser->lexer);
2559
2560   /* Avoid duplicate error about ambiguous lookup.  */
2561   if (token->type == CPP_NESTED_NAME_SPECIFIER)
2562     {
2563       cp_token *next = cp_lexer_peek_nth_token (parser->lexer, 2);
2564       if (next->type == CPP_NAME && next->ambiguous_p)
2565         goto out;
2566     }
2567
2568   cp_parser_parse_tentatively (parser);
2569   id = cp_parser_id_expression (parser,
2570                                 /*template_keyword_p=*/false,
2571                                 /*check_dependency_p=*/true,
2572                                 /*template_p=*/NULL,
2573                                 /*declarator_p=*/true,
2574                                 /*optional_p=*/false);
2575   /* If the next token is a (, this is a function with no explicit return
2576      type, i.e. constructor, destructor or conversion op.  */
2577   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
2578       || TREE_CODE (id) == TYPE_DECL)
2579     {
2580       cp_parser_abort_tentative_parse (parser);
2581       return false;
2582     }
2583   if (!cp_parser_parse_definitely (parser))
2584     return false;
2585
2586   /* Emit a diagnostic for the invalid type.  */
2587   cp_parser_diagnose_invalid_type_name (parser, parser->scope,
2588                                         id, token->location);
2589  out:
2590   /* If we aren't in the middle of a declarator (i.e. in a
2591      parameter-declaration-clause), skip to the end of the declaration;
2592      there's no point in trying to process it.  */
2593   if (!parser->in_declarator_p)
2594     cp_parser_skip_to_end_of_block_or_statement (parser);
2595   return true;
2596 }
2597
2598 /* Consume tokens up to, and including, the next non-nested closing `)'.
2599    Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2600    are doing error recovery. Returns -1 if OR_COMMA is true and we
2601    found an unnested comma.  */
2602
2603 static int
2604 cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2605                                        bool recovering,
2606                                        bool or_comma,
2607                                        bool consume_paren)
2608 {
2609   unsigned paren_depth = 0;
2610   unsigned brace_depth = 0;
2611   unsigned square_depth = 0;
2612
2613   if (recovering && !or_comma
2614       && cp_parser_uncommitted_to_tentative_parse_p (parser))
2615     return 0;
2616
2617   while (true)
2618     {
2619       cp_token * token = cp_lexer_peek_token (parser->lexer);
2620
2621       switch (token->type)
2622         {
2623         case CPP_EOF:
2624         case CPP_PRAGMA_EOL:
2625           /* If we've run out of tokens, then there is no closing `)'.  */
2626           return 0;
2627
2628         /* This is good for lambda expression capture-lists.  */
2629         case CPP_OPEN_SQUARE:
2630           ++square_depth;
2631           break;
2632         case CPP_CLOSE_SQUARE:
2633           if (!square_depth--)
2634             return 0;
2635           break;
2636
2637         case CPP_SEMICOLON:
2638           /* This matches the processing in skip_to_end_of_statement.  */
2639           if (!brace_depth)
2640             return 0;
2641           break;
2642
2643         case CPP_OPEN_BRACE:
2644           ++brace_depth;
2645           break;
2646         case CPP_CLOSE_BRACE:
2647           if (!brace_depth--)
2648             return 0;
2649           break;
2650
2651         case CPP_COMMA:
2652           if (recovering && or_comma && !brace_depth && !paren_depth
2653               && !square_depth)
2654             return -1;
2655           break;
2656
2657         case CPP_OPEN_PAREN:
2658           if (!brace_depth)
2659             ++paren_depth;
2660           break;
2661
2662         case CPP_CLOSE_PAREN:
2663           if (!brace_depth && !paren_depth--)
2664             {
2665               if (consume_paren)
2666                 cp_lexer_consume_token (parser->lexer);
2667               return 1;
2668             }
2669           break;
2670
2671         default:
2672           break;
2673         }
2674
2675       /* Consume the token.  */
2676       cp_lexer_consume_token (parser->lexer);
2677     }
2678 }
2679
2680 /* Consume tokens until we reach the end of the current statement.
2681    Normally, that will be just before consuming a `;'.  However, if a
2682    non-nested `}' comes first, then we stop before consuming that.  */
2683
2684 static void
2685 cp_parser_skip_to_end_of_statement (cp_parser* parser)
2686 {
2687   unsigned nesting_depth = 0;
2688
2689   while (true)
2690     {
2691       cp_token *token = cp_lexer_peek_token (parser->lexer);
2692
2693       switch (token->type)
2694         {
2695         case CPP_EOF:
2696         case CPP_PRAGMA_EOL:
2697           /* If we've run out of tokens, stop.  */
2698           return;
2699
2700         case CPP_SEMICOLON:
2701           /* If the next token is a `;', we have reached the end of the
2702              statement.  */
2703           if (!nesting_depth)
2704             return;
2705           break;
2706
2707         case CPP_CLOSE_BRACE:
2708           /* If this is a non-nested '}', stop before consuming it.
2709              That way, when confronted with something like:
2710
2711                { 3 + }
2712
2713              we stop before consuming the closing '}', even though we
2714              have not yet reached a `;'.  */
2715           if (nesting_depth == 0)
2716             return;
2717
2718           /* If it is the closing '}' for a block that we have
2719              scanned, stop -- but only after consuming the token.
2720              That way given:
2721
2722                 void f g () { ... }
2723                 typedef int I;
2724
2725              we will stop after the body of the erroneously declared
2726              function, but before consuming the following `typedef'
2727              declaration.  */
2728           if (--nesting_depth == 0)
2729             {
2730               cp_lexer_consume_token (parser->lexer);
2731               return;
2732             }
2733
2734         case CPP_OPEN_BRACE:
2735           ++nesting_depth;
2736           break;
2737
2738         default:
2739           break;
2740         }
2741
2742       /* Consume the token.  */
2743       cp_lexer_consume_token (parser->lexer);
2744     }
2745 }
2746
2747 /* This function is called at the end of a statement or declaration.
2748    If the next token is a semicolon, it is consumed; otherwise, error
2749    recovery is attempted.  */
2750
2751 static void
2752 cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2753 {
2754   /* Look for the trailing `;'.  */
2755   if (!cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON))
2756     {
2757       /* If there is additional (erroneous) input, skip to the end of
2758          the statement.  */
2759       cp_parser_skip_to_end_of_statement (parser);
2760       /* If the next token is now a `;', consume it.  */
2761       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2762         cp_lexer_consume_token (parser->lexer);
2763     }
2764 }
2765
2766 /* Skip tokens until we have consumed an entire block, or until we
2767    have consumed a non-nested `;'.  */
2768
2769 static void
2770 cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2771 {
2772   int nesting_depth = 0;
2773
2774   while (nesting_depth >= 0)
2775     {
2776       cp_token *token = cp_lexer_peek_token (parser->lexer);
2777
2778       switch (token->type)
2779         {
2780         case CPP_EOF:
2781         case CPP_PRAGMA_EOL:
2782           /* If we've run out of tokens, stop.  */
2783           return;
2784
2785         case CPP_SEMICOLON:
2786           /* Stop if this is an unnested ';'. */
2787           if (!nesting_depth)
2788             nesting_depth = -1;
2789           break;
2790
2791         case CPP_CLOSE_BRACE:
2792           /* Stop if this is an unnested '}', or closes the outermost
2793              nesting level.  */
2794           nesting_depth--;
2795           if (nesting_depth < 0)
2796             return;
2797           if (!nesting_depth)
2798             nesting_depth = -1;
2799           break;
2800
2801         case CPP_OPEN_BRACE:
2802           /* Nest. */
2803           nesting_depth++;
2804           break;
2805
2806         default:
2807           break;
2808         }
2809
2810       /* Consume the token.  */
2811       cp_lexer_consume_token (parser->lexer);
2812     }
2813 }
2814
2815 /* Skip tokens until a non-nested closing curly brace is the next
2816    token, or there are no more tokens. Return true in the first case,
2817    false otherwise.  */
2818
2819 static bool
2820 cp_parser_skip_to_closing_brace (cp_parser *parser)
2821 {
2822   unsigned nesting_depth = 0;
2823
2824   while (true)
2825     {
2826       cp_token *token = cp_lexer_peek_token (parser->lexer);
2827
2828       switch (token->type)
2829         {
2830         case CPP_EOF:
2831         case CPP_PRAGMA_EOL:
2832           /* If we've run out of tokens, stop.  */
2833           return false;
2834
2835         case CPP_CLOSE_BRACE:
2836           /* If the next token is a non-nested `}', then we have reached
2837              the end of the current block.  */
2838           if (nesting_depth-- == 0)
2839             return true;
2840           break;
2841
2842         case CPP_OPEN_BRACE:
2843           /* If it the next token is a `{', then we are entering a new
2844              block.  Consume the entire block.  */
2845           ++nesting_depth;
2846           break;
2847
2848         default:
2849           break;
2850         }
2851
2852       /* Consume the token.  */
2853       cp_lexer_consume_token (parser->lexer);
2854     }
2855 }
2856
2857 /* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
2858    parameter is the PRAGMA token, allowing us to purge the entire pragma
2859    sequence.  */
2860
2861 static void
2862 cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
2863 {
2864   cp_token *token;
2865
2866   parser->lexer->in_pragma = false;
2867
2868   do
2869     token = cp_lexer_consume_token (parser->lexer);
2870   while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
2871
2872   /* Ensure that the pragma is not parsed again.  */
2873   cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
2874 }
2875
2876 /* Require pragma end of line, resyncing with it as necessary.  The
2877    arguments are as for cp_parser_skip_to_pragma_eol.  */
2878
2879 static void
2880 cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
2881 {
2882   parser->lexer->in_pragma = false;
2883   if (!cp_parser_require (parser, CPP_PRAGMA_EOL, RT_PRAGMA_EOL))
2884     cp_parser_skip_to_pragma_eol (parser, pragma_tok);
2885 }
2886
2887 /* This is a simple wrapper around make_typename_type. When the id is
2888    an unresolved identifier node, we can provide a superior diagnostic
2889    using cp_parser_diagnose_invalid_type_name.  */
2890
2891 static tree
2892 cp_parser_make_typename_type (cp_parser *parser, tree scope,
2893                               tree id, location_t id_location)
2894 {
2895   tree result;
2896   if (TREE_CODE (id) == IDENTIFIER_NODE)
2897     {
2898       result = make_typename_type (scope, id, typename_type,
2899                                    /*complain=*/tf_none);
2900       if (result == error_mark_node)
2901         cp_parser_diagnose_invalid_type_name (parser, scope, id, id_location);
2902       return result;
2903     }
2904   return make_typename_type (scope, id, typename_type, tf_error);
2905 }
2906
2907 /* This is a wrapper around the
2908    make_{pointer,ptrmem,reference}_declarator functions that decides
2909    which one to call based on the CODE and CLASS_TYPE arguments. The
2910    CODE argument should be one of the values returned by
2911    cp_parser_ptr_operator. */
2912 static cp_declarator *
2913 cp_parser_make_indirect_declarator (enum tree_code code, tree class_type,
2914                                     cp_cv_quals cv_qualifiers,
2915                                     cp_declarator *target)
2916 {
2917   if (code == ERROR_MARK)
2918     return cp_error_declarator;
2919
2920   if (code == INDIRECT_REF)
2921     if (class_type == NULL_TREE)
2922       return make_pointer_declarator (cv_qualifiers, target);
2923     else
2924       return make_ptrmem_declarator (cv_qualifiers, class_type, target);
2925   else if (code == ADDR_EXPR && class_type == NULL_TREE)
2926     return make_reference_declarator (cv_qualifiers, target, false);
2927   else if (code == NON_LVALUE_EXPR && class_type == NULL_TREE)
2928     return make_reference_declarator (cv_qualifiers, target, true);
2929   gcc_unreachable ();
2930 }
2931
2932 /* Create a new C++ parser.  */
2933
2934 static cp_parser *
2935 cp_parser_new (void)
2936 {
2937   cp_parser *parser;
2938   cp_lexer *lexer;
2939   unsigned i;
2940
2941   /* cp_lexer_new_main is called before doing GC allocation because
2942      cp_lexer_new_main might load a PCH file.  */
2943   lexer = cp_lexer_new_main ();
2944
2945   /* Initialize the binops_by_token so that we can get the tree
2946      directly from the token.  */
2947   for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2948     binops_by_token[binops[i].token_type] = binops[i];
2949
2950   parser = ggc_alloc_cleared_cp_parser ();
2951   parser->lexer = lexer;
2952   parser->context = cp_parser_context_new (NULL);
2953
2954   /* For now, we always accept GNU extensions.  */
2955   parser->allow_gnu_extensions_p = 1;
2956
2957   /* The `>' token is a greater-than operator, not the end of a
2958      template-id.  */
2959   parser->greater_than_is_operator_p = true;
2960
2961   parser->default_arg_ok_p = true;
2962
2963   /* We are not parsing a constant-expression.  */
2964   parser->integral_constant_expression_p = false;
2965   parser->allow_non_integral_constant_expression_p = false;
2966   parser->non_integral_constant_expression_p = false;
2967
2968   /* Local variable names are not forbidden.  */
2969   parser->local_variables_forbidden_p = false;
2970
2971   /* We are not processing an `extern "C"' declaration.  */
2972   parser->in_unbraced_linkage_specification_p = false;
2973
2974   /* We are not processing a declarator.  */
2975   parser->in_declarator_p = false;
2976
2977   /* We are not processing a template-argument-list.  */
2978   parser->in_template_argument_list_p = false;
2979
2980   /* We are not in an iteration statement.  */
2981   parser->in_statement = 0;
2982
2983   /* We are not in a switch statement.  */
2984   parser->in_switch_statement_p = false;
2985
2986   /* We are not parsing a type-id inside an expression.  */
2987   parser->in_type_id_in_expr_p = false;
2988
2989   /* Declarations aren't implicitly extern "C".  */
2990   parser->implicit_extern_c = false;
2991
2992   /* String literals should be translated to the execution character set.  */
2993   parser->translate_strings_p = true;
2994
2995   /* We are not parsing a function body.  */
2996   parser->in_function_body = false;
2997
2998   /* We can correct until told otherwise.  */
2999   parser->colon_corrects_to_scope_p = true;
3000
3001   /* The unparsed function queue is empty.  */
3002   push_unparsed_function_queues (parser);
3003
3004   /* There are no classes being defined.  */
3005   parser->num_classes_being_defined = 0;
3006
3007   /* No template parameters apply.  */
3008   parser->num_template_parameter_lists = 0;
3009
3010   return parser;
3011 }
3012
3013 /* Create a cp_lexer structure which will emit the tokens in CACHE
3014    and push it onto the parser's lexer stack.  This is used for delayed
3015    parsing of in-class method bodies and default arguments, and should
3016    not be confused with tentative parsing.  */
3017 static void
3018 cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
3019 {
3020   cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
3021   lexer->next = parser->lexer;
3022   parser->lexer = lexer;
3023
3024   /* Move the current source position to that of the first token in the
3025      new lexer.  */
3026   cp_lexer_set_source_position_from_token (lexer->next_token);
3027 }
3028
3029 /* Pop the top lexer off the parser stack.  This is never used for the
3030    "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
3031 static void
3032 cp_parser_pop_lexer (cp_parser *parser)
3033 {
3034   cp_lexer *lexer = parser->lexer;
3035   parser->lexer = lexer->next;
3036   cp_lexer_destroy (lexer);
3037
3038   /* Put the current source position back where it was before this
3039      lexer was pushed.  */
3040   cp_lexer_set_source_position_from_token (parser->lexer->next_token);
3041 }
3042
3043 /* Lexical conventions [gram.lex]  */
3044
3045 /* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
3046    identifier.  */
3047
3048 static tree
3049 cp_parser_identifier (cp_parser* parser)
3050 {
3051   cp_token *token;
3052
3053   /* Look for the identifier.  */
3054   token = cp_parser_require (parser, CPP_NAME, RT_NAME);
3055   /* Return the value.  */
3056   return token ? token->u.value : error_mark_node;
3057 }
3058
3059 /* Parse a sequence of adjacent string constants.  Returns a
3060    TREE_STRING representing the combined, nul-terminated string
3061    constant.  If TRANSLATE is true, translate the string to the
3062    execution character set.  If WIDE_OK is true, a wide string is
3063    invalid here.
3064
3065    C++98 [lex.string] says that if a narrow string literal token is
3066    adjacent to a wide string literal token, the behavior is undefined.
3067    However, C99 6.4.5p4 says that this results in a wide string literal.
3068    We follow C99 here, for consistency with the C front end.
3069
3070    This code is largely lifted from lex_string() in c-lex.c.
3071
3072    FUTURE: ObjC++ will need to handle @-strings here.  */
3073 static tree
3074 cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
3075 {
3076   tree value;
3077   size_t count;
3078   struct obstack str_ob;
3079   cpp_string str, istr, *strs;
3080   cp_token *tok;
3081   enum cpp_ttype type;
3082
3083   tok = cp_lexer_peek_token (parser->lexer);
3084   if (!cp_parser_is_string_literal (tok))
3085     {
3086       cp_parser_error (parser, "expected string-literal");
3087       return error_mark_node;
3088     }
3089
3090   type = tok->type;
3091
3092   /* Try to avoid the overhead of creating and destroying an obstack
3093      for the common case of just one string.  */
3094   if (!cp_parser_is_string_literal
3095       (cp_lexer_peek_nth_token (parser->lexer, 2)))
3096     {
3097       cp_lexer_consume_token (parser->lexer);
3098
3099       str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
3100       str.len = TREE_STRING_LENGTH (tok->u.value);
3101       count = 1;
3102
3103       strs = &str;
3104     }
3105   else
3106     {
3107       gcc_obstack_init (&str_ob);
3108       count = 0;
3109
3110       do
3111         {
3112           cp_lexer_consume_token (parser->lexer);
3113           count++;
3114           str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
3115           str.len = TREE_STRING_LENGTH (tok->u.value);
3116
3117           if (type != tok->type)
3118             {
3119               if (type == CPP_STRING)
3120                 type = tok->type;
3121               else if (tok->type != CPP_STRING)
3122                 error_at (tok->location,
3123                           "unsupported non-standard concatenation "
3124                           "of string literals");
3125             }
3126
3127           obstack_grow (&str_ob, &str, sizeof (cpp_string));
3128
3129           tok = cp_lexer_peek_token (parser->lexer);
3130         }
3131       while (cp_parser_is_string_literal (tok));
3132
3133       strs = (cpp_string *) obstack_finish (&str_ob);
3134     }
3135
3136   if (type != CPP_STRING && !wide_ok)
3137     {
3138       cp_parser_error (parser, "a wide string is invalid in this context");
3139       type = CPP_STRING;
3140     }
3141
3142   if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
3143       (parse_in, strs, count, &istr, type))
3144     {
3145       value = build_string (istr.len, (const char *)istr.text);
3146       free (CONST_CAST (unsigned char *, istr.text));
3147
3148       switch (type)
3149         {
3150         default:
3151         case CPP_STRING:
3152         case CPP_UTF8STRING:
3153           TREE_TYPE (value) = char_array_type_node;
3154           break;
3155         case CPP_STRING16:
3156           TREE_TYPE (value) = char16_array_type_node;
3157           break;
3158         case CPP_STRING32:
3159           TREE_TYPE (value) = char32_array_type_node;
3160           break;
3161         case CPP_WSTRING:
3162           TREE_TYPE (value) = wchar_array_type_node;
3163           break;
3164         }
3165
3166       value = fix_string_type (value);
3167     }
3168   else
3169     /* cpp_interpret_string has issued an error.  */
3170     value = error_mark_node;
3171
3172   if (count > 1)
3173     obstack_free (&str_ob, 0);
3174
3175   return value;
3176 }
3177
3178
3179 /* Basic concepts [gram.basic]  */
3180
3181 /* Parse a translation-unit.
3182
3183    translation-unit:
3184      declaration-seq [opt]
3185
3186    Returns TRUE if all went well.  */
3187
3188 static bool
3189 cp_parser_translation_unit (cp_parser* parser)
3190 {
3191   /* The address of the first non-permanent object on the declarator
3192      obstack.  */
3193   static void *declarator_obstack_base;
3194
3195   bool success;
3196
3197   /* Create the declarator obstack, if necessary.  */
3198   if (!cp_error_declarator)
3199     {
3200       gcc_obstack_init (&declarator_obstack);
3201       /* Create the error declarator.  */
3202       cp_error_declarator = make_declarator (cdk_error);
3203       /* Create the empty parameter list.  */
3204       no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
3205       /* Remember where the base of the declarator obstack lies.  */
3206       declarator_obstack_base = obstack_next_free (&declarator_obstack);
3207     }
3208
3209   cp_parser_declaration_seq_opt (parser);
3210
3211   /* If there are no tokens left then all went well.  */
3212   if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
3213     {
3214       /* Get rid of the token array; we don't need it any more.  */
3215       cp_lexer_destroy (parser->lexer);
3216       parser->lexer = NULL;
3217
3218       /* This file might have been a context that's implicitly extern
3219          "C".  If so, pop the lang context.  (Only relevant for PCH.) */
3220       if (parser->implicit_extern_c)
3221         {
3222           pop_lang_context ();
3223           parser->implicit_extern_c = false;
3224         }
3225
3226       /* Finish up.  */
3227       finish_translation_unit ();
3228
3229       success = true;
3230     }
3231   else
3232     {
3233       cp_parser_error (parser, "expected declaration");
3234       success = false;
3235     }
3236
3237   /* Make sure the declarator obstack was fully cleaned up.  */
3238   gcc_assert (obstack_next_free (&declarator_obstack)
3239               == declarator_obstack_base);
3240
3241   /* All went well.  */
3242   return success;
3243 }
3244
3245 /* Expressions [gram.expr] */
3246
3247 /* Parse a primary-expression.
3248
3249    primary-expression:
3250      literal
3251      this
3252      ( expression )
3253      id-expression
3254
3255    GNU Extensions:
3256
3257    primary-expression:
3258      ( compound-statement )
3259      __builtin_va_arg ( assignment-expression , type-id )
3260      __builtin_offsetof ( type-id , offsetof-expression )
3261
3262    C++ Extensions:
3263      __has_nothrow_assign ( type-id )   
3264      __has_nothrow_constructor ( type-id )
3265      __has_nothrow_copy ( type-id )
3266      __has_trivial_assign ( type-id )   
3267      __has_trivial_constructor ( type-id )
3268      __has_trivial_copy ( type-id )
3269      __has_trivial_destructor ( type-id )
3270      __has_virtual_destructor ( type-id )     
3271      __is_abstract ( type-id )
3272      __is_base_of ( type-id , type-id )
3273      __is_class ( type-id )
3274      __is_convertible_to ( type-id , type-id )     
3275      __is_empty ( type-id )
3276      __is_enum ( type-id )
3277      __is_literal_type ( type-id )
3278      __is_pod ( type-id )
3279      __is_polymorphic ( type-id )
3280      __is_std_layout ( type-id )
3281      __is_trivial ( type-id )
3282      __is_union ( type-id )
3283
3284    Objective-C++ Extension:
3285
3286    primary-expression:
3287      objc-expression
3288
3289    literal:
3290      __null
3291
3292    ADDRESS_P is true iff this expression was immediately preceded by
3293    "&" and therefore might denote a pointer-to-member.  CAST_P is true
3294    iff this expression is the target of a cast.  TEMPLATE_ARG_P is
3295    true iff this expression is a template argument.
3296
3297    Returns a representation of the expression.  Upon return, *IDK
3298    indicates what kind of id-expression (if any) was present.  */
3299
3300 static tree
3301 cp_parser_primary_expression (cp_parser *parser,
3302                               bool address_p,
3303                               bool cast_p,
3304                               bool template_arg_p,
3305                               cp_id_kind *idk)
3306 {
3307   cp_token *token = NULL;
3308
3309   /* Assume the primary expression is not an id-expression.  */
3310   *idk = CP_ID_KIND_NONE;
3311
3312   /* Peek at the next token.  */
3313   token = cp_lexer_peek_token (parser->lexer);
3314   switch (token->type)
3315     {
3316       /* literal:
3317            integer-literal
3318            character-literal
3319            floating-literal
3320            string-literal
3321            boolean-literal  */
3322     case CPP_CHAR:
3323     case CPP_CHAR16:
3324     case CPP_CHAR32:
3325     case CPP_WCHAR:
3326     case CPP_NUMBER:
3327       token = cp_lexer_consume_token (parser->lexer);
3328       if (TREE_CODE (token->u.value) == FIXED_CST)
3329         {
3330           error_at (token->location,
3331                     "fixed-point types not supported in C++");
3332           return error_mark_node;
3333         }
3334       /* Floating-point literals are only allowed in an integral
3335          constant expression if they are cast to an integral or
3336          enumeration type.  */
3337       if (TREE_CODE (token->u.value) == REAL_CST
3338           && parser->integral_constant_expression_p
3339           && pedantic)
3340         {
3341           /* CAST_P will be set even in invalid code like "int(2.7 +
3342              ...)".   Therefore, we have to check that the next token
3343              is sure to end the cast.  */
3344           if (cast_p)
3345             {
3346               cp_token *next_token;
3347
3348               next_token = cp_lexer_peek_token (parser->lexer);
3349               if (/* The comma at the end of an
3350                      enumerator-definition.  */
3351                   next_token->type != CPP_COMMA
3352                   /* The curly brace at the end of an enum-specifier.  */
3353                   && next_token->type != CPP_CLOSE_BRACE
3354                   /* The end of a statement.  */
3355                   && next_token->type != CPP_SEMICOLON
3356                   /* The end of the cast-expression.  */
3357                   && next_token->type != CPP_CLOSE_PAREN
3358                   /* The end of an array bound.  */
3359                   && next_token->type != CPP_CLOSE_SQUARE
3360                   /* The closing ">" in a template-argument-list.  */
3361                   && (next_token->type != CPP_GREATER
3362                       || parser->greater_than_is_operator_p)
3363                   /* C++0x only: A ">>" treated like two ">" tokens,
3364                      in a template-argument-list.  */
3365                   && (next_token->type != CPP_RSHIFT
3366                       || (cxx_dialect == cxx98)
3367                       || parser->greater_than_is_operator_p))
3368                 cast_p = false;
3369             }
3370
3371           /* If we are within a cast, then the constraint that the
3372              cast is to an integral or enumeration type will be
3373              checked at that point.  If we are not within a cast, then
3374              this code is invalid.  */
3375           if (!cast_p)
3376             cp_parser_non_integral_constant_expression (parser, NIC_FLOAT);
3377         }
3378       return token->u.value;
3379
3380     case CPP_STRING:
3381     case CPP_STRING16:
3382     case CPP_STRING32:
3383     case CPP_WSTRING:
3384     case CPP_UTF8STRING:
3385       /* ??? Should wide strings be allowed when parser->translate_strings_p
3386          is false (i.e. in attributes)?  If not, we can kill the third
3387          argument to cp_parser_string_literal.  */
3388       return cp_parser_string_literal (parser,
3389                                        parser->translate_strings_p,
3390                                        true);
3391
3392     case CPP_OPEN_PAREN:
3393       {
3394         tree expr;
3395         bool saved_greater_than_is_operator_p;
3396
3397         /* Consume the `('.  */
3398         cp_lexer_consume_token (parser->lexer);
3399         /* Within a parenthesized expression, a `>' token is always
3400            the greater-than operator.  */
3401         saved_greater_than_is_operator_p
3402           = parser->greater_than_is_operator_p;
3403         parser->greater_than_is_operator_p = true;
3404         /* If we see `( { ' then we are looking at the beginning of
3405            a GNU statement-expression.  */
3406         if (cp_parser_allow_gnu_extensions_p (parser)
3407             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
3408           {
3409             /* Statement-expressions are not allowed by the standard.  */
3410             pedwarn (token->location, OPT_pedantic, 
3411                      "ISO C++ forbids braced-groups within expressions");
3412
3413             /* And they're not allowed outside of a function-body; you
3414                cannot, for example, write:
3415
3416                  int i = ({ int j = 3; j + 1; });
3417
3418                at class or namespace scope.  */
3419             if (!parser->in_function_body
3420                 || parser->in_template_argument_list_p)
3421               {
3422                 error_at (token->location,
3423                           "statement-expressions are not allowed outside "
3424                           "functions nor in template-argument lists");
3425                 cp_parser_skip_to_end_of_block_or_statement (parser);
3426                 expr = error_mark_node;
3427               }
3428             else
3429               {
3430                 /* Start the statement-expression.  */
3431                 expr = begin_stmt_expr ();
3432                 /* Parse the compound-statement.  */
3433                 cp_parser_compound_statement (parser, expr, false, false);
3434                 /* Finish up.  */
3435                 expr = finish_stmt_expr (expr, false);
3436               }
3437           }
3438         else
3439           {
3440             /* Parse the parenthesized expression.  */
3441             expr = cp_parser_expression (parser, cast_p, idk);
3442             /* Let the front end know that this expression was
3443                enclosed in parentheses. This matters in case, for
3444                example, the expression is of the form `A::B', since
3445                `&A::B' might be a pointer-to-member, but `&(A::B)' is
3446                not.  */
3447             finish_parenthesized_expr (expr);
3448             /* DR 705: Wrapping an unqualified name in parentheses
3449                suppresses arg-dependent lookup.  We want to pass back
3450                CP_ID_KIND_QUALIFIED for suppressing vtable lookup
3451                (c++/37862), but none of the others.  */
3452             if (*idk != CP_ID_KIND_QUALIFIED)
3453               *idk = CP_ID_KIND_NONE;
3454           }
3455         /* The `>' token might be the end of a template-id or
3456            template-parameter-list now.  */
3457         parser->greater_than_is_operator_p
3458           = saved_greater_than_is_operator_p;
3459         /* Consume the `)'.  */
3460         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
3461           cp_parser_skip_to_end_of_statement (parser);
3462
3463         return expr;
3464       }
3465
3466     case CPP_OPEN_SQUARE:
3467       if (c_dialect_objc ())
3468         /* We have an Objective-C++ message. */
3469         return cp_parser_objc_expression (parser);
3470       {
3471         tree lam = cp_parser_lambda_expression (parser);
3472         /* Don't warn about a failed tentative parse.  */
3473         if (cp_parser_error_occurred (parser))
3474           return error_mark_node;
3475         maybe_warn_cpp0x (CPP0X_LAMBDA_EXPR);
3476         return lam;
3477       }
3478
3479     case CPP_OBJC_STRING:
3480       if (c_dialect_objc ())
3481         /* We have an Objective-C++ string literal. */
3482         return cp_parser_objc_expression (parser);
3483       cp_parser_error (parser, "expected primary-expression");
3484       return error_mark_node;
3485
3486     case CPP_KEYWORD:
3487       switch (token->keyword)
3488         {
3489           /* These two are the boolean literals.  */
3490         case RID_TRUE:
3491           cp_lexer_consume_token (parser->lexer);
3492           return boolean_true_node;
3493         case RID_FALSE:
3494           cp_lexer_consume_token (parser->lexer);
3495           return boolean_false_node;
3496
3497           /* The `__null' literal.  */
3498         case RID_NULL:
3499           cp_lexer_consume_token (parser->lexer);
3500           return null_node;
3501
3502           /* The `nullptr' literal.  */
3503         case RID_NULLPTR:
3504           cp_lexer_consume_token (parser->lexer);
3505           return nullptr_node;
3506
3507           /* Recognize the `this' keyword.  */
3508         case RID_THIS:
3509           cp_lexer_consume_token (parser->lexer);
3510           if (parser->local_variables_forbidden_p)
3511             {
3512               error_at (token->location,
3513                         "%<this%> may not be used in this context");
3514               return error_mark_node;
3515             }
3516           /* Pointers cannot appear in constant-expressions.  */
3517           if (cp_parser_non_integral_constant_expression (parser, NIC_THIS))
3518             return error_mark_node;
3519           return finish_this_expr ();
3520
3521           /* The `operator' keyword can be the beginning of an
3522              id-expression.  */
3523         case RID_OPERATOR:
3524           goto id_expression;
3525
3526         case RID_FUNCTION_NAME:
3527         case RID_PRETTY_FUNCTION_NAME:
3528         case RID_C99_FUNCTION_NAME:
3529           {
3530             non_integral_constant name;
3531
3532             /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
3533                __func__ are the names of variables -- but they are
3534                treated specially.  Therefore, they are handled here,
3535                rather than relying on the generic id-expression logic
3536                below.  Grammatically, these names are id-expressions.
3537
3538                Consume the token.  */
3539             token = cp_lexer_consume_token (parser->lexer);
3540
3541             switch (token->keyword)
3542               {
3543               case RID_FUNCTION_NAME:
3544                 name = NIC_FUNC_NAME;
3545                 break;
3546               case RID_PRETTY_FUNCTION_NAME:
3547                 name = NIC_PRETTY_FUNC;
3548                 break;
3549               case RID_C99_FUNCTION_NAME:
3550                 name = NIC_C99_FUNC;
3551                 break;
3552               default:
3553                 gcc_unreachable ();
3554               }
3555
3556             if (cp_parser_non_integral_constant_expression (parser, name))
3557               return error_mark_node;
3558
3559             /* Look up the name.  */
3560             return finish_fname (token->u.value);
3561           }
3562
3563         case RID_VA_ARG:
3564           {
3565             tree expression;
3566             tree type;
3567
3568             /* The `__builtin_va_arg' construct is used to handle
3569                `va_arg'.  Consume the `__builtin_va_arg' token.  */
3570             cp_lexer_consume_token (parser->lexer);
3571             /* Look for the opening `('.  */
3572             cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
3573             /* Now, parse the assignment-expression.  */
3574             expression = cp_parser_assignment_expression (parser,
3575                                                           /*cast_p=*/false, NULL);
3576             /* Look for the `,'.  */
3577             cp_parser_require (parser, CPP_COMMA, RT_COMMA);
3578             /* Parse the type-id.  */
3579             type = cp_parser_type_id (parser);
3580             /* Look for the closing `)'.  */
3581             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
3582             /* Using `va_arg' in a constant-expression is not
3583                allowed.  */
3584             if (cp_parser_non_integral_constant_expression (parser,
3585                                                             NIC_VA_ARG))
3586               return error_mark_node;
3587             return build_x_va_arg (expression, type);
3588           }
3589
3590         case RID_OFFSETOF:
3591           return cp_parser_builtin_offsetof (parser);
3592
3593         case RID_HAS_NOTHROW_ASSIGN:
3594         case RID_HAS_NOTHROW_CONSTRUCTOR:
3595         case RID_HAS_NOTHROW_COPY:        
3596         case RID_HAS_TRIVIAL_ASSIGN:
3597         case RID_HAS_TRIVIAL_CONSTRUCTOR:
3598         case RID_HAS_TRIVIAL_COPY:        
3599         case RID_HAS_TRIVIAL_DESTRUCTOR:
3600         case RID_HAS_VIRTUAL_DESTRUCTOR:
3601         case RID_IS_ABSTRACT:
3602         case RID_IS_BASE_OF:
3603         case RID_IS_CLASS:
3604         case RID_IS_CONVERTIBLE_TO:
3605         case RID_IS_EMPTY:
3606         case RID_IS_ENUM:
3607         case RID_IS_LITERAL_TYPE:
3608         case RID_IS_POD:
3609         case RID_IS_POLYMORPHIC:
3610         case RID_IS_STD_LAYOUT:
3611         case RID_IS_TRIVIAL:
3612         case RID_IS_UNION:
3613           return cp_parser_trait_expr (parser, token->keyword);
3614
3615         /* Objective-C++ expressions.  */
3616         case RID_AT_ENCODE:
3617         case RID_AT_PROTOCOL:
3618         case RID_AT_SELECTOR:
3619           return cp_parser_objc_expression (parser);
3620
3621         case RID_TEMPLATE:
3622           if (parser->in_function_body
3623               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3624                   == CPP_LESS))
3625             {
3626               error_at (token->location,
3627                         "a template declaration cannot appear at block scope");
3628               cp_parser_skip_to_end_of_block_or_statement (parser);
3629               return error_mark_node;
3630             }
3631         default:
3632           cp_parser_error (parser, "expected primary-expression");
3633           return error_mark_node;
3634         }
3635
3636       /* An id-expression can start with either an identifier, a
3637          `::' as the beginning of a qualified-id, or the "operator"
3638          keyword.  */
3639     case CPP_NAME:
3640     case CPP_SCOPE:
3641     case CPP_TEMPLATE_ID:
3642     case CPP_NESTED_NAME_SPECIFIER:
3643       {
3644         tree id_expression;
3645         tree decl;
3646         const char *error_msg;
3647         bool template_p;
3648         bool done;
3649         cp_token *id_expr_token;
3650
3651       id_expression:
3652         /* Parse the id-expression.  */
3653         id_expression
3654           = cp_parser_id_expression (parser,
3655                                      /*template_keyword_p=*/false,
3656                                      /*check_dependency_p=*/true,
3657                                      &template_p,
3658                                      /*declarator_p=*/false,
3659                                      /*optional_p=*/false);
3660         if (id_expression == error_mark_node)
3661           return error_mark_node;
3662         id_expr_token = token;
3663         token = cp_lexer_peek_token (parser->lexer);
3664         done = (token->type != CPP_OPEN_SQUARE
3665                 && token->type != CPP_OPEN_PAREN
3666                 && token->type != CPP_DOT
3667                 && token->type != CPP_DEREF
3668                 && token->type != CPP_PLUS_PLUS
3669                 && token->type != CPP_MINUS_MINUS);
3670         /* If we have a template-id, then no further lookup is
3671            required.  If the template-id was for a template-class, we
3672            will sometimes have a TYPE_DECL at this point.  */
3673         if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
3674                  || TREE_CODE (id_expression) == TYPE_DECL)
3675           decl = id_expression;
3676         /* Look up the name.  */
3677         else
3678           {
3679             tree ambiguous_decls;
3680
3681             /* If we already know that this lookup is ambiguous, then
3682                we've already issued an error message; there's no reason
3683                to check again.  */
3684             if (id_expr_token->type == CPP_NAME
3685                 && id_expr_token->ambiguous_p)
3686               {
3687                 cp_parser_simulate_error (parser);
3688                 return error_mark_node;
3689               }
3690
3691             decl = cp_parser_lookup_name (parser, id_expression,
3692                                           none_type,
3693                                           template_p,
3694                                           /*is_namespace=*/false,
3695                                           /*check_dependency=*/true,
3696                                           &ambiguous_decls,
3697                                           id_expr_token->location);
3698             /* If the lookup was ambiguous, an error will already have
3699                been issued.  */
3700             if (ambiguous_decls)
3701               return error_mark_node;
3702
3703             /* In Objective-C++, we may have an Objective-C 2.0
3704                dot-syntax for classes here.  */
3705             if (c_dialect_objc ()
3706                 && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT
3707                 && TREE_CODE (decl) == TYPE_DECL
3708                 && objc_is_class_name (decl))
3709               {
3710                 tree component;
3711                 cp_lexer_consume_token (parser->lexer);
3712                 component = cp_parser_identifier (parser);
3713                 if (component == error_mark_node)
3714                   return error_mark_node;
3715
3716                 return objc_build_class_component_ref (id_expression, component);
3717               }
3718
3719             /* In Objective-C++, an instance variable (ivar) may be preferred
3720                to whatever cp_parser_lookup_name() found.  */
3721             decl = objc_lookup_ivar (decl, id_expression);
3722
3723             /* If name lookup gives us a SCOPE_REF, then the
3724                qualifying scope was dependent.  */
3725             if (TREE_CODE (decl) == SCOPE_REF)
3726               {
3727                 /* At this point, we do not know if DECL is a valid
3728                    integral constant expression.  We assume that it is
3729                    in fact such an expression, so that code like:
3730
3731                       template <int N> struct A {
3732                         int a[B<N>::i];
3733                       };
3734                      
3735                    is accepted.  At template-instantiation time, we
3736                    will check that B<N>::i is actually a constant.  */
3737                 return decl;
3738               }
3739             /* Check to see if DECL is a local variable in a context
3740                where that is forbidden.  */
3741             if (parser->local_variables_forbidden_p
3742                 && local_variable_p (decl))
3743               {
3744                 /* It might be that we only found DECL because we are
3745                    trying to be generous with pre-ISO scoping rules.
3746                    For example, consider:
3747
3748                      int i;
3749                      void g() {
3750                        for (int i = 0; i < 10; ++i) {}
3751                        extern void f(int j = i);
3752                      }
3753
3754                    Here, name look up will originally find the out
3755                    of scope `i'.  We need to issue a warning message,
3756                    but then use the global `i'.  */
3757                 decl = check_for_out_of_scope_variable (decl);
3758                 if (local_variable_p (decl))
3759                   {
3760                     error_at (id_expr_token->location,
3761                               "local variable %qD may not appear in this context",
3762                               decl);
3763                     return error_mark_node;
3764                   }
3765               }
3766           }
3767
3768         decl = (finish_id_expression
3769                 (id_expression, decl, parser->scope,
3770                  idk,
3771                  parser->integral_constant_expression_p,
3772                  parser->allow_non_integral_constant_expression_p,
3773                  &parser->non_integral_constant_expression_p,
3774                  template_p, done, address_p,
3775                  template_arg_p,
3776                  &error_msg,
3777                  id_expr_token->location));
3778         if (error_msg)
3779           cp_parser_error (parser, error_msg);
3780         return decl;
3781       }
3782
3783       /* Anything else is an error.  */
3784     default:
3785       cp_parser_error (parser, "expected primary-expression");
3786       return error_mark_node;
3787     }
3788 }
3789
3790 /* Parse an id-expression.
3791
3792    id-expression:
3793      unqualified-id
3794      qualified-id
3795
3796    qualified-id:
3797      :: [opt] nested-name-specifier template [opt] unqualified-id
3798      :: identifier
3799      :: operator-function-id
3800      :: template-id
3801
3802    Return a representation of the unqualified portion of the
3803    identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
3804    a `::' or nested-name-specifier.
3805
3806    Often, if the id-expression was a qualified-id, the caller will
3807    want to make a SCOPE_REF to represent the qualified-id.  This
3808    function does not do this in order to avoid wastefully creating
3809    SCOPE_REFs when they are not required.
3810
3811    If TEMPLATE_KEYWORD_P is true, then we have just seen the
3812    `template' keyword.
3813
3814    If CHECK_DEPENDENCY_P is false, then names are looked up inside
3815    uninstantiated templates.
3816
3817    If *TEMPLATE_P is non-NULL, it is set to true iff the
3818    `template' keyword is used to explicitly indicate that the entity
3819    named is a template.
3820
3821    If DECLARATOR_P is true, the id-expression is appearing as part of
3822    a declarator, rather than as part of an expression.  */
3823
3824 static tree
3825 cp_parser_id_expression (cp_parser *parser,
3826                          bool template_keyword_p,
3827                          bool check_dependency_p,
3828                          bool *template_p,
3829                          bool declarator_p,
3830                          bool optional_p)
3831 {
3832   bool global_scope_p;
3833   bool nested_name_specifier_p;
3834
3835   /* Assume the `template' keyword was not used.  */
3836   if (template_p)
3837     *template_p = template_keyword_p;
3838
3839   /* Look for the optional `::' operator.  */
3840   global_scope_p
3841     = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3842        != NULL_TREE);
3843   /* Look for the optional nested-name-specifier.  */
3844   nested_name_specifier_p
3845     = (cp_parser_nested_name_specifier_opt (parser,
3846                                             /*typename_keyword_p=*/false,
3847                                             check_dependency_p,
3848                                             /*type_p=*/false,
3849                                             declarator_p)
3850        != NULL_TREE);
3851   /* If there is a nested-name-specifier, then we are looking at
3852      the first qualified-id production.  */
3853   if (nested_name_specifier_p)
3854     {
3855       tree saved_scope;
3856       tree saved_object_scope;
3857       tree saved_qualifying_scope;
3858       tree unqualified_id;
3859       bool is_template;
3860
3861       /* See if the next token is the `template' keyword.  */
3862       if (!template_p)
3863         template_p = &is_template;
3864       *template_p = cp_parser_optional_template_keyword (parser);
3865       /* Name lookup we do during the processing of the
3866          unqualified-id might obliterate SCOPE.  */
3867       saved_scope = parser->scope;
3868       saved_object_scope = parser->object_scope;
3869       saved_qualifying_scope = parser->qualifying_scope;
3870       /* Process the final unqualified-id.  */
3871       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3872                                                  check_dependency_p,
3873                                                  declarator_p,
3874                                                  /*optional_p=*/false);
3875       /* Restore the SAVED_SCOPE for our caller.  */
3876       parser->scope = saved_scope;
3877       parser->object_scope = saved_object_scope;
3878       parser->qualifying_scope = saved_qualifying_scope;
3879
3880       return unqualified_id;
3881     }
3882   /* Otherwise, if we are in global scope, then we are looking at one
3883      of the other qualified-id productions.  */
3884   else if (global_scope_p)
3885     {
3886       cp_token *token;
3887       tree id;
3888
3889       /* Peek at the next token.  */
3890       token = cp_lexer_peek_token (parser->lexer);
3891
3892       /* If it's an identifier, and the next token is not a "<", then
3893          we can avoid the template-id case.  This is an optimization
3894          for this common case.  */
3895       if (token->type == CPP_NAME
3896           && !cp_parser_nth_token_starts_template_argument_list_p
3897                (parser, 2))
3898         return cp_parser_identifier (parser);
3899
3900       cp_parser_parse_tentatively (parser);
3901       /* Try a template-id.  */
3902       id = cp_parser_template_id (parser,
3903                                   /*template_keyword_p=*/false,
3904                                   /*check_dependency_p=*/true,
3905                                   declarator_p);
3906       /* If that worked, we're done.  */
3907       if (cp_parser_parse_definitely (parser))
3908         return id;
3909
3910       /* Peek at the next token.  (Changes in the token buffer may
3911          have invalidated the pointer obtained above.)  */
3912       token = cp_lexer_peek_token (parser->lexer);
3913
3914       switch (token->type)
3915         {
3916         case CPP_NAME:
3917           return cp_parser_identifier (parser);
3918
3919         case CPP_KEYWORD:
3920           if (token->keyword == RID_OPERATOR)
3921             return cp_parser_operator_function_id (parser);
3922           /* Fall through.  */
3923
3924         default:
3925           cp_parser_error (parser, "expected id-expression");
3926           return error_mark_node;
3927         }
3928     }
3929   else
3930     return cp_parser_unqualified_id (parser, template_keyword_p,
3931                                      /*check_dependency_p=*/true,
3932                                      declarator_p,
3933                                      optional_p);
3934 }
3935
3936 /* Parse an unqualified-id.
3937
3938    unqualified-id:
3939      identifier
3940      operator-function-id
3941      conversion-function-id
3942      ~ class-name
3943      template-id
3944
3945    If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3946    keyword, in a construct like `A::template ...'.
3947
3948    Returns a representation of unqualified-id.  For the `identifier'
3949    production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3950    production a BIT_NOT_EXPR is returned; the operand of the
3951    BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3952    other productions, see the documentation accompanying the
3953    corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3954    names are looked up in uninstantiated templates.  If DECLARATOR_P
3955    is true, the unqualified-id is appearing as part of a declarator,
3956    rather than as part of an expression.  */
3957
3958 static tree
3959 cp_parser_unqualified_id (cp_parser* parser,
3960                           bool template_keyword_p,
3961                           bool check_dependency_p,
3962                           bool declarator_p,
3963                           bool optional_p)
3964 {
3965   cp_token *token;
3966
3967   /* Peek at the next token.  */
3968   token = cp_lexer_peek_token (parser->lexer);
3969
3970   switch (token->type)
3971     {
3972     case CPP_NAME:
3973       {
3974         tree id;
3975
3976         /* We don't know yet whether or not this will be a
3977            template-id.  */
3978         cp_parser_parse_tentatively (parser);
3979         /* Try a template-id.  */
3980         id = cp_parser_template_id (parser, template_keyword_p,
3981                                     check_dependency_p,
3982                                     declarator_p);
3983         /* If it worked, we're done.  */
3984         if (cp_parser_parse_definitely (parser))
3985           return id;
3986         /* Otherwise, it's an ordinary identifier.  */
3987         return cp_parser_identifier (parser);
3988       }
3989
3990     case CPP_TEMPLATE_ID:
3991       return cp_parser_template_id (parser, template_keyword_p,
3992                                     check_dependency_p,
3993                                     declarator_p);
3994
3995     case CPP_COMPL:
3996       {
3997         tree type_decl;
3998         tree qualifying_scope;
3999         tree object_scope;
4000         tree scope;
4001         bool done;
4002
4003         /* Consume the `~' token.  */
4004         cp_lexer_consume_token (parser->lexer);
4005         /* Parse the class-name.  The standard, as written, seems to
4006            say that:
4007
4008              template <typename T> struct S { ~S (); };
4009              template <typename T> S<T>::~S() {}
4010
4011            is invalid, since `~' must be followed by a class-name, but
4012            `S<T>' is dependent, and so not known to be a class.
4013            That's not right; we need to look in uninstantiated
4014            templates.  A further complication arises from:
4015
4016              template <typename T> void f(T t) {
4017                t.T::~T();
4018              }
4019
4020            Here, it is not possible to look up `T' in the scope of `T'
4021            itself.  We must look in both the current scope, and the
4022            scope of the containing complete expression.
4023
4024            Yet another issue is:
4025
4026              struct S {
4027                int S;
4028                ~S();
4029              };
4030
4031              S::~S() {}
4032
4033            The standard does not seem to say that the `S' in `~S'
4034            should refer to the type `S' and not the data member
4035            `S::S'.  */
4036
4037         /* DR 244 says that we look up the name after the "~" in the
4038            same scope as we looked up the qualifying name.  That idea
4039            isn't fully worked out; it's more complicated than that.  */
4040         scope = parser->scope;
4041         object_scope = parser->object_scope;
4042         qualifying_scope = parser->qualifying_scope;
4043
4044         /* Check for invalid scopes.  */
4045         if (scope == error_mark_node)
4046           {
4047             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
4048               cp_lexer_consume_token (parser->lexer);
4049             return error_mark_node;
4050           }
4051         if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
4052           {
4053             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
4054               error_at (token->location,
4055                         "scope %qT before %<~%> is not a class-name",
4056                         scope);
4057             cp_parser_simulate_error (parser);
4058             if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
4059               cp_lexer_consume_token (parser->lexer);
4060             return error_mark_node;
4061           }
4062         gcc_assert (!scope || TYPE_P (scope));
4063
4064         /* If the name is of the form "X::~X" it's OK even if X is a
4065            typedef.  */
4066         token = cp_lexer_peek_token (parser->lexer);
4067         if (scope
4068             && token->type == CPP_NAME
4069             && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4070                 != CPP_LESS)
4071             && (token->u.value == TYPE_IDENTIFIER (scope)
4072                 || (CLASS_TYPE_P (scope)
4073                     && constructor_name_p (token->u.value, scope))))
4074           {
4075             cp_lexer_consume_token (parser->lexer);
4076             return build_nt (BIT_NOT_EXPR, scope);
4077           }
4078
4079         /* If there was an explicit qualification (S::~T), first look
4080            in the scope given by the qualification (i.e., S).
4081
4082            Note: in the calls to cp_parser_class_name below we pass
4083            typename_type so that lookup finds the injected-class-name
4084            rather than the constructor.  */
4085         done = false;
4086         type_decl = NULL_TREE;
4087         if (scope)
4088           {
4089             cp_parser_parse_tentatively (parser);
4090             type_decl = cp_parser_class_name (parser,
4091                                               /*typename_keyword_p=*/false,
4092                                               /*template_keyword_p=*/false,
4093                                               typename_type,
4094                                               /*check_dependency=*/false,
4095                                               /*class_head_p=*/false,
4096                                               declarator_p);
4097             if (cp_parser_parse_definitely (parser))
4098               done = true;
4099           }
4100         /* In "N::S::~S", look in "N" as well.  */
4101         if (!done && scope && qualifying_scope)
4102           {
4103             cp_parser_parse_tentatively (parser);
4104             parser->scope = qualifying_scope;
4105             parser->object_scope = NULL_TREE;
4106             parser->qualifying_scope = NULL_TREE;
4107             type_decl
4108               = cp_parser_class_name (parser,
4109                                       /*typename_keyword_p=*/false,
4110                                       /*template_keyword_p=*/false,
4111                                       typename_type,
4112                                       /*check_dependency=*/false,
4113                                       /*class_head_p=*/false,
4114                                       declarator_p);
4115             if (cp_parser_parse_definitely (parser))
4116               done = true;
4117           }
4118         /* In "p->S::~T", look in the scope given by "*p" as well.  */
4119         else if (!done && object_scope)
4120           {
4121             cp_parser_parse_tentatively (parser);
4122             parser->scope = object_scope;
4123             parser->object_scope = NULL_TREE;
4124             parser->qualifying_scope = NULL_TREE;
4125             type_decl
4126               = cp_parser_class_name (parser,
4127                                       /*typename_keyword_p=*/false,
4128                                       /*template_keyword_p=*/false,
4129                                       typename_type,
4130                                       /*check_dependency=*/false,
4131                                       /*class_head_p=*/false,
4132                                       declarator_p);
4133             if (cp_parser_parse_definitely (parser))
4134               done = true;
4135           }
4136         /* Look in the surrounding context.  */
4137         if (!done)
4138           {
4139             parser->scope = NULL_TREE;
4140             parser->object_scope = NULL_TREE;
4141             parser->qualifying_scope = NULL_TREE;
4142             if (processing_template_decl)
4143               cp_parser_parse_tentatively (parser);
4144             type_decl
4145               = cp_parser_class_name (parser,
4146                                       /*typename_keyword_p=*/false,
4147                                       /*template_keyword_p=*/false,
4148                                       typename_type,
4149                                       /*check_dependency=*/false,
4150                                       /*class_head_p=*/false,
4151                                       declarator_p);
4152             if (processing_template_decl
4153                 && ! cp_parser_parse_definitely (parser))
4154               {
4155                 /* We couldn't find a type with this name, so just accept
4156                    it and check for a match at instantiation time.  */
4157                 type_decl = cp_parser_identifier (parser);
4158                 if (type_decl != error_mark_node)
4159                   type_decl = build_nt (BIT_NOT_EXPR, type_decl);
4160                 return type_decl;
4161               }
4162           }
4163         /* If an error occurred, assume that the name of the
4164            destructor is the same as the name of the qualifying
4165            class.  That allows us to keep parsing after running
4166            into ill-formed destructor names.  */
4167         if (type_decl == error_mark_node && scope)
4168           return build_nt (BIT_NOT_EXPR, scope);
4169         else if (type_decl == error_mark_node)
4170           return error_mark_node;
4171
4172         /* Check that destructor name and scope match.  */
4173         if (declarator_p && scope && !check_dtor_name (scope, type_decl))
4174           {
4175             if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
4176               error_at (token->location,
4177                         "declaration of %<~%T%> as member of %qT",
4178                         type_decl, scope);
4179             cp_parser_simulate_error (parser);
4180             return error_mark_node;
4181           }
4182
4183         /* [class.dtor]
4184
4185            A typedef-name that names a class shall not be used as the
4186            identifier in the declarator for a destructor declaration.  */
4187         if (declarator_p
4188             && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
4189             && !DECL_SELF_REFERENCE_P (type_decl)
4190             && !cp_parser_uncommitted_to_tentative_parse_p (parser))
4191           error_at (token->location,
4192                     "typedef-name %qD used as destructor declarator",
4193                     type_decl);
4194
4195         return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
4196       }
4197
4198     case CPP_KEYWORD:
4199       if (token->keyword == RID_OPERATOR)
4200         {
4201           tree id;
4202
4203           /* This could be a template-id, so we try that first.  */
4204           cp_parser_parse_tentatively (parser);
4205           /* Try a template-id.  */
4206           id = cp_parser_template_id (parser, template_keyword_p,
4207                                       /*check_dependency_p=*/true,
4208                                       declarator_p);
4209           /* If that worked, we're done.  */
4210           if (cp_parser_parse_definitely (parser))
4211             return id;
4212           /* We still don't know whether we're looking at an
4213              operator-function-id or a conversion-function-id.  */
4214           cp_parser_parse_tentatively (parser);
4215           /* Try an operator-function-id.  */
4216           id = cp_parser_operator_function_id (parser);
4217           /* If that didn't work, try a conversion-function-id.  */
4218           if (!cp_parser_parse_definitely (parser))
4219             id = cp_parser_conversion_function_id (parser);
4220
4221           return id;
4222         }
4223       /* Fall through.  */
4224
4225     default:
4226       if (optional_p)
4227         return NULL_TREE;
4228       cp_parser_error (parser, "expected unqualified-id");
4229       return error_mark_node;
4230     }
4231 }
4232
4233 /* Parse an (optional) nested-name-specifier.
4234
4235    nested-name-specifier: [C++98]
4236      class-or-namespace-name :: nested-name-specifier [opt]
4237      class-or-namespace-name :: template nested-name-specifier [opt]
4238
4239    nested-name-specifier: [C++0x]
4240      type-name ::
4241      namespace-name ::
4242      nested-name-specifier identifier ::
4243      nested-name-specifier template [opt] simple-template-id ::
4244
4245    PARSER->SCOPE should be set appropriately before this function is
4246    called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
4247    effect.  TYPE_P is TRUE if we non-type bindings should be ignored
4248    in name lookups.
4249
4250    Sets PARSER->SCOPE to the class (TYPE) or namespace
4251    (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
4252    it unchanged if there is no nested-name-specifier.  Returns the new
4253    scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
4254
4255    If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
4256    part of a declaration and/or decl-specifier.  */
4257
4258 static tree
4259 cp_parser_nested_name_specifier_opt (cp_parser *parser,
4260                                      bool typename_keyword_p,
4261                                      bool check_dependency_p,
4262                                      bool type_p,
4263                                      bool is_declaration)
4264 {
4265   bool success = false;
4266   cp_token_position start = 0;
4267   cp_token *token;
4268
4269   /* Remember where the nested-name-specifier starts.  */
4270   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4271     {
4272       start = cp_lexer_token_position (parser->lexer, false);
4273       push_deferring_access_checks (dk_deferred);
4274     }
4275
4276   while (true)
4277     {
4278       tree new_scope;
4279       tree old_scope;
4280       tree saved_qualifying_scope;
4281       bool template_keyword_p;
4282
4283       /* Spot cases that cannot be the beginning of a
4284          nested-name-specifier.  */
4285       token = cp_lexer_peek_token (parser->lexer);
4286
4287       /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
4288          the already parsed nested-name-specifier.  */
4289       if (token->type == CPP_NESTED_NAME_SPECIFIER)
4290         {
4291           /* Grab the nested-name-specifier and continue the loop.  */
4292           cp_parser_pre_parsed_nested_name_specifier (parser);
4293           /* If we originally encountered this nested-name-specifier
4294              with IS_DECLARATION set to false, we will not have
4295              resolved TYPENAME_TYPEs, so we must do so here.  */
4296           if (is_declaration
4297               && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4298             {
4299               new_scope = resolve_typename_type (parser->scope,
4300                                                  /*only_current_p=*/false);
4301               if (TREE_CODE (new_scope) != TYPENAME_TYPE)
4302                 parser->scope = new_scope;
4303             }
4304           success = true;
4305           continue;
4306         }
4307
4308       /* Spot cases that cannot be the beginning of a
4309          nested-name-specifier.  On the second and subsequent times
4310          through the loop, we look for the `template' keyword.  */
4311       if (success && token->keyword == RID_TEMPLATE)
4312         ;
4313       /* A template-id can start a nested-name-specifier.  */
4314       else if (token->type == CPP_TEMPLATE_ID)
4315         ;
4316       else
4317         {
4318           /* If the next token is not an identifier, then it is
4319              definitely not a type-name or namespace-name.  */
4320           if (token->type != CPP_NAME)
4321             break;
4322           /* If the following token is neither a `<' (to begin a
4323              template-id), nor a `::', then we are not looking at a
4324              nested-name-specifier.  */
4325           token = cp_lexer_peek_nth_token (parser->lexer, 2);
4326
4327           if (token->type == CPP_COLON
4328               && parser->colon_corrects_to_scope_p
4329               && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_NAME)
4330             {
4331               error_at (token->location,
4332                         "found %<:%> in nested-name-specifier, expected %<::%>");
4333               token->type = CPP_SCOPE;
4334             }
4335
4336           if (token->type != CPP_SCOPE
4337               && !cp_parser_nth_token_starts_template_argument_list_p
4338                   (parser, 2))
4339             break;
4340         }
4341
4342       /* The nested-name-specifier is optional, so we parse
4343          tentatively.  */
4344       cp_parser_parse_tentatively (parser);
4345
4346       /* Look for the optional `template' keyword, if this isn't the
4347          first time through the loop.  */
4348       if (success)
4349         template_keyword_p = cp_parser_optional_template_keyword (parser);
4350       else
4351         template_keyword_p = false;
4352
4353       /* Save the old scope since the name lookup we are about to do
4354          might destroy it.  */
4355       old_scope = parser->scope;
4356       saved_qualifying_scope = parser->qualifying_scope;
4357       /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
4358          look up names in "X<T>::I" in order to determine that "Y" is
4359          a template.  So, if we have a typename at this point, we make
4360          an effort to look through it.  */
4361       if (is_declaration
4362           && !typename_keyword_p
4363           && parser->scope
4364           && TREE_CODE (parser->scope) == TYPENAME_TYPE)
4365         parser->scope = resolve_typename_type (parser->scope,
4366                                                /*only_current_p=*/false);
4367       /* Parse the qualifying entity.  */
4368       new_scope
4369         = cp_parser_qualifying_entity (parser,
4370                                        typename_keyword_p,
4371                                        template_keyword_p,
4372                                        check_dependency_p,
4373                                        type_p,
4374                                        is_declaration);
4375       /* Look for the `::' token.  */
4376       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
4377
4378       /* If we found what we wanted, we keep going; otherwise, we're
4379          done.  */
4380       if (!cp_parser_parse_definitely (parser))
4381         {
4382           bool error_p = false;
4383
4384           /* Restore the OLD_SCOPE since it was valid before the
4385              failed attempt at finding the last
4386              class-or-namespace-name.  */
4387           parser->scope = old_scope;
4388           parser->qualifying_scope = saved_qualifying_scope;
4389           if (cp_parser_uncommitted_to_tentative_parse_p (parser))
4390             break;
4391           /* If the next token is an identifier, and the one after
4392              that is a `::', then any valid interpretation would have
4393              found a class-or-namespace-name.  */
4394           while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
4395                  && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
4396                      == CPP_SCOPE)
4397                  && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
4398                      != CPP_COMPL))
4399             {
4400               token = cp_lexer_consume_token (parser->lexer);
4401               if (!error_p)
4402                 {
4403                   if (!token->ambiguous_p)
4404                     {
4405                       tree decl;
4406                       tree ambiguous_decls;
4407
4408                       decl = cp_parser_lookup_name (parser, token->u.value,
4409                                                     none_type,
4410                                                     /*is_template=*/false,
4411                                                     /*is_namespace=*/false,
4412                                                     /*check_dependency=*/true,
4413                                                     &ambiguous_decls,
4414                                                     token->location);
4415                       if (TREE_CODE (decl) == TEMPLATE_DECL)
4416                         error_at (token->location,
4417                                   "%qD used without template parameters",
4418                                   decl);
4419                       else if (ambiguous_decls)
4420                         {
4421                           error_at (token->location,
4422                                     "reference to %qD is ambiguous",
4423                                     token->u.value);
4424                           print_candidates (ambiguous_decls);
4425                           decl = error_mark_node;
4426                         }
4427                       else
4428                         {
4429                           if (cxx_dialect != cxx98)
4430                             cp_parser_name_lookup_error
4431                             (parser, token->u.value, decl, NLE_NOT_CXX98,
4432                              token->location);
4433                           else
4434                             cp_parser_name_lookup_error
4435                             (parser, token->u.value, decl, NLE_CXX98,
4436                              token->location);
4437                         }
4438                     }
4439                   parser->scope = error_mark_node;
4440                   error_p = true;
4441                   /* Treat this as a successful nested-name-specifier
4442                      due to:
4443
4444                      [basic.lookup.qual]
4445
4446                      If the name found is not a class-name (clause
4447                      _class_) or namespace-name (_namespace.def_), the
4448                      program is ill-formed.  */
4449                   success = true;
4450                 }
4451               cp_lexer_consume_token (parser->lexer);
4452             }
4453           break;
4454         }
4455       /* We've found one valid nested-name-specifier.  */
4456       success = true;
4457       /* Name lookup always gives us a DECL.  */
4458       if (TREE_CODE (new_scope) == TYPE_DECL)
4459         new_scope = TREE_TYPE (new_scope);
4460       /* Uses of "template" must be followed by actual templates.  */
4461       if (template_keyword_p
4462           && !(CLASS_TYPE_P (new_scope)
4463                && ((CLASSTYPE_USE_TEMPLATE (new_scope)
4464                     && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
4465                    || CLASSTYPE_IS_TEMPLATE (new_scope)))
4466           && !(TREE_CODE (new_scope) == TYPENAME_TYPE
4467                && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
4468                    == TEMPLATE_ID_EXPR)))
4469         permerror (input_location, TYPE_P (new_scope)
4470                    ? "%qT is not a template"
4471                    : "%qD is not a template",
4472                    new_scope);
4473       /* If it is a class scope, try to complete it; we are about to
4474          be looking up names inside the class.  */
4475       if (TYPE_P (new_scope)
4476           /* Since checking types for dependency can be expensive,
4477              avoid doing it if the type is already complete.  */
4478           && !COMPLETE_TYPE_P (new_scope)
4479           /* Do not try to complete dependent types.  */
4480           && !dependent_type_p (new_scope))
4481         {
4482           new_scope = complete_type (new_scope);
4483           /* If it is a typedef to current class, use the current
4484              class instead, as the typedef won't have any names inside
4485              it yet.  */
4486           if (!COMPLETE_TYPE_P (new_scope)
4487               && currently_open_class (new_scope))
4488             new_scope = TYPE_MAIN_VARIANT (new_scope);
4489         }
4490       /* Make sure we look in the right scope the next time through
4491          the loop.  */
4492       parser->scope = new_scope;
4493     }
4494
4495   /* If parsing tentatively, replace the sequence of tokens that makes
4496      up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
4497      token.  That way, should we re-parse the token stream, we will
4498      not have to repeat the effort required to do the parse, nor will
4499      we issue duplicate error messages.  */
4500   if (success && start)
4501     {
4502       cp_token *token;
4503
4504       token = cp_lexer_token_at (parser->lexer, start);
4505       /* Reset the contents of the START token.  */
4506       token->type = CPP_NESTED_NAME_SPECIFIER;
4507       /* Retrieve any deferred checks.  Do not pop this access checks yet
4508          so the memory will not be reclaimed during token replacing below.  */
4509       token->u.tree_check_value = ggc_alloc_cleared_tree_check ();
4510       token->u.tree_check_value->value = parser->scope;
4511       token->u.tree_check_value->checks = get_deferred_access_checks ();
4512       token->u.tree_check_value->qualifying_scope =
4513         parser->qualifying_scope;
4514       token->keyword = RID_MAX;
4515
4516       /* Purge all subsequent tokens.  */
4517       cp_lexer_purge_tokens_after (parser->lexer, start);
4518     }
4519
4520   if (start)
4521     pop_to_parent_deferring_access_checks ();
4522
4523   return success ? parser->scope : NULL_TREE;
4524 }
4525
4526 /* Parse a nested-name-specifier.  See
4527    cp_parser_nested_name_specifier_opt for details.  This function
4528    behaves identically, except that it will an issue an error if no
4529    nested-name-specifier is present.  */
4530
4531 static tree
4532 cp_parser_nested_name_specifier (cp_parser *parser,
4533                                  bool typename_keyword_p,
4534                                  bool check_dependency_p,
4535                                  bool type_p,
4536                                  bool is_declaration)
4537 {
4538   tree scope;
4539
4540   /* Look for the nested-name-specifier.  */
4541   scope = cp_parser_nested_name_specifier_opt (parser,
4542                                                typename_keyword_p,
4543                                                check_dependency_p,
4544                                                type_p,
4545                                                is_declaration);
4546   /* If it was not present, issue an error message.  */
4547   if (!scope)
4548     {
4549       cp_parser_error (parser, "expected nested-name-specifier");
4550       parser->scope = NULL_TREE;
4551     }
4552
4553   return scope;
4554 }
4555
4556 /* Parse the qualifying entity in a nested-name-specifier. For C++98,
4557    this is either a class-name or a namespace-name (which corresponds
4558    to the class-or-namespace-name production in the grammar). For
4559    C++0x, it can also be a type-name that refers to an enumeration
4560    type.
4561
4562    TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
4563    TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
4564    CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
4565    TYPE_P is TRUE iff the next name should be taken as a class-name,
4566    even the same name is declared to be another entity in the same
4567    scope.
4568
4569    Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
4570    specified by the class-or-namespace-name.  If neither is found the
4571    ERROR_MARK_NODE is returned.  */
4572
4573 static tree
4574 cp_parser_qualifying_entity (cp_parser *parser,
4575                              bool typename_keyword_p,
4576                              bool template_keyword_p,
4577                              bool check_dependency_p,
4578                              bool type_p,
4579                              bool is_declaration)
4580 {
4581   tree saved_scope;
4582   tree saved_qualifying_scope;
4583   tree saved_object_scope;
4584   tree scope;
4585   bool only_class_p;
4586   bool successful_parse_p;
4587
4588   /* Before we try to parse the class-name, we must save away the
4589      current PARSER->SCOPE since cp_parser_class_name will destroy
4590      it.  */
4591   saved_scope = parser->scope;
4592   saved_qualifying_scope = parser->qualifying_scope;
4593   saved_object_scope = parser->object_scope;
4594   /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
4595      there is no need to look for a namespace-name.  */
4596   only_class_p = template_keyword_p 
4597     || (saved_scope && TYPE_P (saved_scope) && cxx_dialect == cxx98);
4598   if (!only_class_p)
4599     cp_parser_parse_tentatively (parser);
4600   scope = cp_parser_class_name (parser,
4601                                 typename_keyword_p,
4602                                 template_keyword_p,
4603                                 type_p ? class_type : none_type,
4604                                 check_dependency_p,
4605                                 /*class_head_p=*/false,
4606                                 is_declaration);
4607   successful_parse_p = only_class_p || cp_parser_parse_definitely (parser);
4608   /* If that didn't work and we're in C++0x mode, try for a type-name.  */
4609   if (!only_class_p 
4610       && cxx_dialect != cxx98
4611       && !successful_parse_p)
4612     {
4613       /* Restore the saved scope.  */
4614       parser->scope = saved_scope;
4615       parser->qualifying_scope = saved_qualifying_scope;
4616       parser->object_scope = saved_object_scope;
4617
4618       /* Parse tentatively.  */
4619       cp_parser_parse_tentatively (parser);
4620      
4621       /* Parse a typedef-name or enum-name.  */
4622       scope = cp_parser_nonclass_name (parser);
4623
4624       /* "If the name found does not designate a namespace or a class,
4625          enumeration, or dependent type, the program is ill-formed."
4626
4627          We cover classes and dependent types above and namespaces below,
4628          so this code is only looking for enums.  */
4629       if (!scope || TREE_CODE (scope) != TYPE_DECL
4630           || TREE_CODE (TREE_TYPE (scope)) != ENUMERAL_TYPE)
4631         cp_parser_simulate_error (parser);
4632
4633       successful_parse_p = cp_parser_parse_definitely (parser);
4634     }
4635   /* If that didn't work, try for a namespace-name.  */
4636   if (!only_class_p && !successful_parse_p)
4637     {
4638       /* Restore the saved scope.  */
4639       parser->scope = saved_scope;
4640       parser->qualifying_scope = saved_qualifying_scope;
4641       parser->object_scope = saved_object_scope;
4642       /* If we are not looking at an identifier followed by the scope
4643          resolution operator, then this is not part of a
4644          nested-name-specifier.  (Note that this function is only used
4645          to parse the components of a nested-name-specifier.)  */
4646       if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
4647           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
4648         return error_mark_node;
4649       scope = cp_parser_namespace_name (parser);
4650     }
4651
4652   return scope;
4653 }
4654
4655 /* Parse a postfix-expression.
4656
4657    postfix-expression:
4658      primary-expression
4659      postfix-expression [ expression ]
4660      postfix-expression ( expression-list [opt] )
4661      simple-type-specifier ( expression-list [opt] )
4662      typename :: [opt] nested-name-specifier identifier
4663        ( expression-list [opt] )
4664      typename :: [opt] nested-name-specifier template [opt] template-id
4665        ( expression-list [opt] )
4666      postfix-expression . template [opt] id-expression
4667      postfix-expression -> template [opt] id-expression
4668      postfix-expression . pseudo-destructor-name
4669      postfix-expression -> pseudo-destructor-name
4670      postfix-expression ++
4671      postfix-expression --
4672      dynamic_cast < type-id > ( expression )
4673      static_cast < type-id > ( expression )
4674      reinterpret_cast < type-id > ( expression )
4675      const_cast < type-id > ( expression )
4676      typeid ( expression )
4677      typeid ( type-id )
4678
4679    GNU Extension:
4680
4681    postfix-expression:
4682      ( type-id ) { initializer-list , [opt] }
4683
4684    This extension is a GNU version of the C99 compound-literal
4685    construct.  (The C99 grammar uses `type-name' instead of `type-id',
4686    but they are essentially the same concept.)
4687
4688    If ADDRESS_P is true, the postfix expression is the operand of the
4689    `&' operator.  CAST_P is true if this expression is the target of a
4690    cast.
4691
4692    If MEMBER_ACCESS_ONLY_P, we only allow postfix expressions that are
4693    class member access expressions [expr.ref].
4694
4695    Returns a representation of the expression.  */
4696
4697 static tree
4698 cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
4699                               bool member_access_only_p,
4700                               cp_id_kind * pidk_return)
4701 {
4702   cp_token *token;
4703   enum rid keyword;
4704   cp_id_kind idk = CP_ID_KIND_NONE;
4705   tree postfix_expression = NULL_TREE;
4706   bool is_member_access = false;
4707
4708   /* Peek at the next token.  */
4709   token = cp_lexer_peek_token (parser->lexer);
4710   /* Some of the productions are determined by keywords.  */
4711   keyword = token->keyword;
4712   switch (keyword)
4713     {
4714     case RID_DYNCAST:
4715     case RID_STATCAST:
4716     case RID_REINTCAST:
4717     case RID_CONSTCAST:
4718       {
4719         tree type;
4720         tree expression;
4721         const char *saved_message;
4722
4723         /* All of these can be handled in the same way from the point
4724            of view of parsing.  Begin by consuming the token
4725            identifying the cast.  */
4726         cp_lexer_consume_token (parser->lexer);
4727
4728         /* New types cannot be defined in the cast.  */
4729         saved_message = parser->type_definition_forbidden_message;
4730         parser->type_definition_forbidden_message
4731           = G_("types may not be defined in casts");
4732
4733         /* Look for the opening `<'.  */
4734         cp_parser_require (parser, CPP_LESS, RT_LESS);
4735         /* Parse the type to which we are casting.  */
4736         type = cp_parser_type_id (parser);
4737         /* Look for the closing `>'.  */
4738         cp_parser_require (parser, CPP_GREATER, RT_GREATER);
4739         /* Restore the old message.  */
4740         parser->type_definition_forbidden_message = saved_message;
4741
4742         /* And the expression which is being cast.  */
4743         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
4744         expression = cp_parser_expression (parser, /*cast_p=*/true, & idk);
4745         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
4746
4747         /* Only type conversions to integral or enumeration types
4748            can be used in constant-expressions.  */
4749         if (!cast_valid_in_integral_constant_expression_p (type)
4750             && cp_parser_non_integral_constant_expression (parser, NIC_CAST))
4751           return error_mark_node;
4752
4753         switch (keyword)
4754           {
4755           case RID_DYNCAST:
4756             postfix_expression
4757               = build_dynamic_cast (type, expression, tf_warning_or_error);
4758             break;
4759           case RID_STATCAST:
4760             postfix_expression
4761               = build_static_cast (type, expression, tf_warning_or_error);
4762             break;
4763           case RID_REINTCAST:
4764             postfix_expression
4765               = build_reinterpret_cast (type, expression, 
4766                                         tf_warning_or_error);
4767             break;
4768           case RID_CONSTCAST:
4769             postfix_expression
4770               = build_const_cast (type, expression, tf_warning_or_error);
4771             break;
4772           default:
4773             gcc_unreachable ();
4774           }
4775       }
4776       break;
4777
4778     case RID_TYPEID:
4779       {
4780         tree type;
4781         const char *saved_message;
4782         bool saved_in_type_id_in_expr_p;
4783
4784         /* Consume the `typeid' token.  */
4785         cp_lexer_consume_token (parser->lexer);
4786         /* Look for the `(' token.  */
4787         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
4788         /* Types cannot be defined in a `typeid' expression.  */
4789         saved_message = parser->type_definition_forbidden_message;
4790         parser->type_definition_forbidden_message
4791           = G_("types may not be defined in a %<typeid%> expression");
4792         /* We can't be sure yet whether we're looking at a type-id or an
4793            expression.  */
4794         cp_parser_parse_tentatively (parser);
4795         /* Try a type-id first.  */
4796         saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4797         parser->in_type_id_in_expr_p = true;
4798         type = cp_parser_type_id (parser);
4799         parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4800         /* Look for the `)' token.  Otherwise, we can't be sure that
4801            we're not looking at an expression: consider `typeid (int
4802            (3))', for example.  */
4803         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
4804         /* If all went well, simply lookup the type-id.  */
4805         if (cp_parser_parse_definitely (parser))
4806           postfix_expression = get_typeid (type);
4807         /* Otherwise, fall back to the expression variant.  */
4808         else
4809           {
4810             tree expression;
4811
4812             /* Look for an expression.  */
4813             expression = cp_parser_expression (parser, /*cast_p=*/false, & idk);
4814             /* Compute its typeid.  */
4815             postfix_expression = build_typeid (expression);
4816             /* Look for the `)' token.  */
4817             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
4818           }
4819         /* Restore the saved message.  */
4820         parser->type_definition_forbidden_message = saved_message;
4821         /* `typeid' may not appear in an integral constant expression.  */
4822         if (cp_parser_non_integral_constant_expression(parser, NIC_TYPEID))
4823           return error_mark_node;
4824       }
4825       break;
4826
4827     case RID_TYPENAME:
4828       {
4829         tree type;
4830         /* The syntax permitted here is the same permitted for an
4831            elaborated-type-specifier.  */
4832         type = cp_parser_elaborated_type_specifier (parser,
4833                                                     /*is_friend=*/false,
4834                                                     /*is_declaration=*/false);
4835         postfix_expression = cp_parser_functional_cast (parser, type);
4836       }
4837       break;
4838
4839     default:
4840       {
4841         tree type;
4842
4843         /* If the next thing is a simple-type-specifier, we may be
4844            looking at a functional cast.  We could also be looking at
4845            an id-expression.  So, we try the functional cast, and if
4846            that doesn't work we fall back to the primary-expression.  */
4847         cp_parser_parse_tentatively (parser);
4848         /* Look for the simple-type-specifier.  */
4849         type = cp_parser_simple_type_specifier (parser,
4850                                                 /*decl_specs=*/NULL,
4851                                                 CP_PARSER_FLAGS_NONE);
4852         /* Parse the cast itself.  */
4853         if (!cp_parser_error_occurred (parser))
4854           postfix_expression
4855             = cp_parser_functional_cast (parser, type);
4856         /* If that worked, we're done.  */
4857         if (cp_parser_parse_definitely (parser))
4858           break;
4859
4860         /* If the functional-cast didn't work out, try a
4861            compound-literal.  */
4862         if (cp_parser_allow_gnu_extensions_p (parser)
4863             && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4864           {
4865             VEC(constructor_elt,gc) *initializer_list = NULL;
4866             bool saved_in_type_id_in_expr_p;
4867
4868             cp_parser_parse_tentatively (parser);
4869             /* Consume the `('.  */
4870             cp_lexer_consume_token (parser->lexer);
4871             /* Parse the type.  */
4872             saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4873             parser->in_type_id_in_expr_p = true;
4874             type = cp_parser_type_id (parser);
4875             parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4876             /* Look for the `)'.  */
4877             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
4878             /* Look for the `{'.  */
4879             cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
4880             /* If things aren't going well, there's no need to
4881                keep going.  */
4882             if (!cp_parser_error_occurred (parser))
4883               {
4884                 bool non_constant_p;
4885                 /* Parse the initializer-list.  */
4886                 initializer_list
4887                   = cp_parser_initializer_list (parser, &non_constant_p);
4888                 /* Allow a trailing `,'.  */
4889                 if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
4890                   cp_lexer_consume_token (parser->lexer);
4891                 /* Look for the final `}'.  */
4892                 cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
4893               }
4894             /* If that worked, we're definitely looking at a
4895                compound-literal expression.  */
4896             if (cp_parser_parse_definitely (parser))
4897               {
4898                 /* Warn the user that a compound literal is not
4899                    allowed in standard C++.  */
4900                 pedwarn (input_location, OPT_pedantic, "ISO C++ forbids compound-literals");
4901                 /* For simplicity, we disallow compound literals in
4902                    constant-expressions.  We could
4903                    allow compound literals of integer type, whose
4904                    initializer was a constant, in constant
4905                    expressions.  Permitting that usage, as a further
4906                    extension, would not change the meaning of any
4907                    currently accepted programs.  (Of course, as
4908                    compound literals are not part of ISO C++, the
4909                    standard has nothing to say.)  */
4910                 if (cp_parser_non_integral_constant_expression (parser,
4911                                                                 NIC_NCC))
4912                   {
4913                     postfix_expression = error_mark_node;
4914                     break;
4915                   }
4916                 /* Form the representation of the compound-literal.  */
4917                 postfix_expression
4918                   = (finish_compound_literal
4919                      (type, build_constructor (init_list_type_node,
4920                                                initializer_list),
4921                       tf_warning_or_error));
4922                 break;
4923               }
4924           }
4925
4926         /* It must be a primary-expression.  */
4927         postfix_expression
4928           = cp_parser_primary_expression (parser, address_p, cast_p,
4929                                           /*template_arg_p=*/false,
4930                                           &idk);
4931       }
4932       break;
4933     }
4934
4935   /* Keep looping until the postfix-expression is complete.  */
4936   while (true)
4937     {
4938       if (idk == CP_ID_KIND_UNQUALIFIED
4939           && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
4940           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
4941         /* It is not a Koenig lookup function call.  */
4942         postfix_expression
4943           = unqualified_name_lookup_error (postfix_expression);
4944
4945       /* Peek at the next token.  */
4946       token = cp_lexer_peek_token (parser->lexer);
4947
4948       switch (token->type)
4949         {
4950         case CPP_OPEN_SQUARE:
4951           postfix_expression
4952             = cp_parser_postfix_open_square_expression (parser,
4953                                                         postfix_expression,
4954                                                         false);
4955           idk = CP_ID_KIND_NONE;
4956           is_member_access = false;
4957           break;
4958
4959         case CPP_OPEN_PAREN:
4960           /* postfix-expression ( expression-list [opt] ) */
4961           {
4962             bool koenig_p;
4963             bool is_builtin_constant_p;
4964             bool saved_integral_constant_expression_p = false;
4965             bool saved_non_integral_constant_expression_p = false;
4966             VEC(tree,gc) *args;
4967
4968             is_member_access = false;
4969
4970             is_builtin_constant_p
4971               = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
4972             if (is_builtin_constant_p)
4973               {
4974                 /* The whole point of __builtin_constant_p is to allow
4975                    non-constant expressions to appear as arguments.  */
4976                 saved_integral_constant_expression_p
4977                   = parser->integral_constant_expression_p;
4978                 saved_non_integral_constant_expression_p
4979                   = parser->non_integral_constant_expression_p;
4980                 parser->integral_constant_expression_p = false;
4981               }
4982             args = (cp_parser_parenthesized_expression_list
4983                     (parser, non_attr,
4984                      /*cast_p=*/false, /*allow_expansion_p=*/true,
4985                      /*non_constant_p=*/NULL));
4986             if (is_builtin_constant_p)
4987               {
4988                 parser->integral_constant_expression_p
4989                   = saved_integral_constant_expression_p;
4990                 parser->non_integral_constant_expression_p
4991                   = saved_non_integral_constant_expression_p;
4992               }
4993
4994             if (args == NULL)
4995               {
4996                 postfix_expression = error_mark_node;
4997                 break;
4998               }
4999
5000             /* Function calls are not permitted in
5001                constant-expressions.  */
5002             if (! builtin_valid_in_constant_expr_p (postfix_expression)
5003                 && cp_parser_non_integral_constant_expression (parser,
5004                                                                NIC_FUNC_CALL))
5005               {
5006                 postfix_expression = error_mark_node;
5007                 release_tree_vector (args);
5008                 break;
5009               }
5010
5011             koenig_p = false;
5012             if (idk == CP_ID_KIND_UNQUALIFIED
5013                 || idk == CP_ID_KIND_TEMPLATE_ID)
5014               {
5015                 if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
5016                   {
5017                     if (!VEC_empty (tree, args))
5018                       {
5019                         koenig_p = true;
5020                         if (!any_type_dependent_arguments_p (args))
5021                           postfix_expression
5022                             = perform_koenig_lookup (postfix_expression, args,
5023                                                      /*include_std=*/false,
5024                                                      tf_warning_or_error);
5025                       }
5026                     else
5027                       postfix_expression
5028                         = unqualified_fn_lookup_error (postfix_expression);
5029                   }
5030                 /* We do not perform argument-dependent lookup if
5031                    normal lookup finds a non-function, in accordance
5032                    with the expected resolution of DR 218.  */
5033                 else if (!VEC_empty (tree, args)
5034                          && is_overloaded_fn (postfix_expression))
5035                   {
5036                     tree fn = get_first_fn (postfix_expression);
5037                     fn = STRIP_TEMPLATE (fn);
5038
5039                     /* Do not do argument dependent lookup if regular
5040                        lookup finds a member function or a block-scope
5041                        function declaration.  [basic.lookup.argdep]/3  */
5042                     if (!DECL_FUNCTION_MEMBER_P (fn)
5043                         && !DECL_LOCAL_FUNCTION_P (fn))
5044                       {
5045                         koenig_p = true;
5046                         if (!any_type_dependent_arguments_p (args))
5047                           postfix_expression
5048                             = perform_koenig_lookup (postfix_expression, args,
5049                                                      /*include_std=*/false,
5050                                                      tf_warning_or_error);
5051                       }
5052                   }
5053               }
5054
5055             if (TREE_CODE (postfix_expression) == COMPONENT_REF)
5056               {
5057                 tree instance = TREE_OPERAND (postfix_expression, 0);
5058                 tree fn = TREE_OPERAND (postfix_expression, 1);
5059
5060                 if (processing_template_decl
5061                     && (type_dependent_expression_p (instance)
5062                         || (!BASELINK_P (fn)
5063                             && TREE_CODE (fn) != FIELD_DECL)
5064                         || type_dependent_expression_p (fn)
5065                         || any_type_dependent_arguments_p (args)))
5066                   {
5067                     postfix_expression
5068                       = build_nt_call_vec (postfix_expression, args);
5069                     release_tree_vector (args);
5070                     break;
5071                   }
5072
5073                 if (BASELINK_P (fn))
5074                   {
5075                   postfix_expression
5076                     = (build_new_method_call
5077                        (instance, fn, &args, NULL_TREE,
5078                         (idk == CP_ID_KIND_QUALIFIED
5079                          ? LOOKUP_NORMAL|LOOKUP_NONVIRTUAL
5080                          : LOOKUP_NORMAL),
5081                         /*fn_p=*/NULL,
5082                         tf_warning_or_error));
5083                   }
5084                 else
5085                   postfix_expression
5086                     = finish_call_expr (postfix_expression, &args,
5087                                         /*disallow_virtual=*/false,
5088                                         /*koenig_p=*/false,
5089                                         tf_warning_or_error);
5090               }
5091             else if (TREE_CODE (postfix_expression) == OFFSET_REF
5092                      || TREE_CODE (postfix_expression) == MEMBER_REF
5093                      || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
5094               postfix_expression = (build_offset_ref_call_from_tree
5095                                     (postfix_expression, &args));
5096             else if (idk == CP_ID_KIND_QUALIFIED)
5097               /* A call to a static class member, or a namespace-scope
5098                  function.  */
5099               postfix_expression
5100                 = finish_call_expr (postfix_expression, &args,
5101                                     /*disallow_virtual=*/true,
5102                                     koenig_p,
5103                                     tf_warning_or_error);
5104             else
5105               /* All other function calls.  */
5106               postfix_expression
5107                 = finish_call_expr (postfix_expression, &args,
5108                                     /*disallow_virtual=*/false,
5109                                     koenig_p,
5110                                     tf_warning_or_error);
5111
5112             /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
5113             idk = CP_ID_KIND_NONE;
5114
5115             release_tree_vector (args);
5116           }
5117           break;
5118
5119         case CPP_DOT:
5120         case CPP_DEREF:
5121           /* postfix-expression . template [opt] id-expression
5122              postfix-expression . pseudo-destructor-name
5123              postfix-expression -> template [opt] id-expression
5124              postfix-expression -> pseudo-destructor-name */
5125
5126           /* Consume the `.' or `->' operator.  */
5127           cp_lexer_consume_token (parser->lexer);
5128
5129           postfix_expression
5130             = cp_parser_postfix_dot_deref_expression (parser, token->type,
5131                                                       postfix_expression,
5132                                                       false, &idk,
5133                                                       token->location);
5134
5135           is_member_access = true;
5136           break;
5137
5138         case CPP_PLUS_PLUS:
5139           /* postfix-expression ++  */
5140           /* Consume the `++' token.  */
5141           cp_lexer_consume_token (parser->lexer);
5142           /* Generate a representation for the complete expression.  */
5143           postfix_expression
5144             = finish_increment_expr (postfix_expression,
5145                                      POSTINCREMENT_EXPR);
5146           /* Increments may not appear in constant-expressions.  */
5147           if (cp_parser_non_integral_constant_expression (parser, NIC_INC))
5148             postfix_expression = error_mark_node;
5149           idk = CP_ID_KIND_NONE;
5150           is_member_access = false;
5151           break;
5152
5153         case CPP_MINUS_MINUS:
5154           /* postfix-expression -- */
5155           /* Consume the `--' token.  */
5156           cp_lexer_consume_token (parser->lexer);
5157           /* Generate a representation for the complete expression.  */
5158           postfix_expression
5159             = finish_increment_expr (postfix_expression,
5160                                      POSTDECREMENT_EXPR);
5161           /* Decrements may not appear in constant-expressions.  */
5162           if (cp_parser_non_integral_constant_expression (parser, NIC_DEC))
5163             postfix_expression = error_mark_node;
5164           idk = CP_ID_KIND_NONE;
5165           is_member_access = false;
5166           break;
5167
5168         default:
5169           if (pidk_return != NULL)
5170             * pidk_return = idk;
5171           if (member_access_only_p)
5172             return is_member_access? postfix_expression : error_mark_node;
5173           else
5174             return postfix_expression;
5175         }
5176     }
5177
5178   /* We should never get here.  */
5179   gcc_unreachable ();
5180   return error_mark_node;
5181 }
5182
5183 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
5184    by cp_parser_builtin_offsetof.  We're looking for
5185
5186      postfix-expression [ expression ]
5187
5188    FOR_OFFSETOF is set if we're being called in that context, which
5189    changes how we deal with integer constant expressions.  */
5190
5191 static tree
5192 cp_parser_postfix_open_square_expression (cp_parser *parser,
5193                                           tree postfix_expression,
5194                                           bool for_offsetof)
5195 {
5196   tree index;
5197
5198   /* Consume the `[' token.  */
5199   cp_lexer_consume_token (parser->lexer);
5200
5201   /* Parse the index expression.  */
5202   /* ??? For offsetof, there is a question of what to allow here.  If
5203      offsetof is not being used in an integral constant expression context,
5204      then we *could* get the right answer by computing the value at runtime.
5205      If we are in an integral constant expression context, then we might
5206      could accept any constant expression; hard to say without analysis.
5207      Rather than open the barn door too wide right away, allow only integer
5208      constant expressions here.  */
5209   if (for_offsetof)
5210     index = cp_parser_constant_expression (parser, false, NULL);
5211   else
5212     index = cp_parser_expression (parser, /*cast_p=*/false, NULL);
5213
5214   /* Look for the closing `]'.  */
5215   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
5216
5217   /* Build the ARRAY_REF.  */
5218   postfix_expression = grok_array_decl (postfix_expression, index);
5219
5220   /* When not doing offsetof, array references are not permitted in
5221      constant-expressions.  */
5222   if (!for_offsetof
5223       && (cp_parser_non_integral_constant_expression (parser, NIC_ARRAY_REF)))
5224     postfix_expression = error_mark_node;
5225
5226   return postfix_expression;
5227 }
5228
5229 /* A subroutine of cp_parser_postfix_expression that also gets hijacked
5230    by cp_parser_builtin_offsetof.  We're looking for
5231
5232      postfix-expression . template [opt] id-expression
5233      postfix-expression . pseudo-destructor-name
5234      postfix-expression -> template [opt] id-expression
5235      postfix-expression -> pseudo-destructor-name
5236
5237    FOR_OFFSETOF is set if we're being called in that context.  That sorta
5238    limits what of the above we'll actually accept, but nevermind.
5239    TOKEN_TYPE is the "." or "->" token, which will already have been
5240    removed from the stream.  */
5241
5242 static tree
5243 cp_parser_postfix_dot_deref_expression (cp_parser *parser,
5244                                         enum cpp_ttype token_type,
5245                                         tree postfix_expression,
5246                                         bool for_offsetof, cp_id_kind *idk,
5247                                         location_t location)
5248 {
5249   tree name;
5250   bool dependent_p;
5251   bool pseudo_destructor_p;
5252   tree scope = NULL_TREE;
5253
5254   /* If this is a `->' operator, dereference the pointer.  */
5255   if (token_type == CPP_DEREF)
5256     postfix_expression = build_x_arrow (postfix_expression);
5257   /* Check to see whether or not the expression is type-dependent.  */
5258   dependent_p = type_dependent_expression_p (postfix_expression);
5259   /* The identifier following the `->' or `.' is not qualified.  */
5260   parser->scope = NULL_TREE;
5261   parser->qualifying_scope = NULL_TREE;
5262   parser->object_scope = NULL_TREE;
5263   *idk = CP_ID_KIND_NONE;
5264
5265   /* Enter the scope corresponding to the type of the object
5266      given by the POSTFIX_EXPRESSION.  */
5267   if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
5268     {
5269       scope = TREE_TYPE (postfix_expression);
5270       /* According to the standard, no expression should ever have
5271          reference type.  Unfortunately, we do not currently match
5272          the standard in this respect in that our internal representation
5273          of an expression may have reference type even when the standard
5274          says it does not.  Therefore, we have to manually obtain the
5275          underlying type here.  */
5276       scope = non_reference (scope);
5277       /* The type of the POSTFIX_EXPRESSION must be complete.  */
5278       if (scope == unknown_type_node)
5279         {
5280           error_at (location, "%qE does not have class type",
5281                     postfix_expression);
5282           scope = NULL_TREE;
5283         }
5284       else
5285         scope = complete_type_or_else (scope, NULL_TREE);
5286       /* Let the name lookup machinery know that we are processing a
5287          class member access expression.  */
5288       parser->context->object_type = scope;
5289       /* If something went wrong, we want to be able to discern that case,
5290          as opposed to the case where there was no SCOPE due to the type
5291          of expression being dependent.  */
5292       if (!scope)
5293         scope = error_mark_node;
5294       /* If the SCOPE was erroneous, make the various semantic analysis
5295          functions exit quickly -- and without issuing additional error
5296          messages.  */
5297       if (scope == error_mark_node)
5298         postfix_expression = error_mark_node;
5299     }
5300
5301   /* Assume this expression is not a pseudo-destructor access.  */
5302   pseudo_destructor_p = false;
5303
5304   /* If the SCOPE is a scalar type, then, if this is a valid program,
5305      we must be looking at a pseudo-destructor-name.  If POSTFIX_EXPRESSION
5306      is type dependent, it can be pseudo-destructor-name or something else.
5307      Try to parse it as pseudo-destructor-name first.  */
5308   if ((scope && SCALAR_TYPE_P (scope)) || dependent_p)
5309     {
5310       tree s;
5311       tree type;
5312
5313       cp_parser_parse_tentatively (parser);
5314       /* Parse the pseudo-destructor-name.  */
5315       s = NULL_TREE;
5316       cp_parser_pseudo_destructor_name (parser, &s, &type);
5317       if (dependent_p
5318           && (cp_parser_error_occurred (parser)
5319               || TREE_CODE (type) != TYPE_DECL
5320               || !SCALAR_TYPE_P (TREE_TYPE (type))))
5321         cp_parser_abort_tentative_parse (parser);
5322       else if (cp_parser_parse_definitely (parser))
5323         {
5324           pseudo_destructor_p = true;
5325           postfix_expression
5326             = finish_pseudo_destructor_expr (postfix_expression,
5327                                              s, TREE_TYPE (type));
5328         }
5329     }
5330
5331   if (!pseudo_destructor_p)
5332     {
5333       /* If the SCOPE is not a scalar type, we are looking at an
5334          ordinary class member access expression, rather than a
5335          pseudo-destructor-name.  */
5336       bool template_p;
5337       cp_token *token = cp_lexer_peek_token (parser->lexer);
5338       /* Parse the id-expression.  */
5339       name = (cp_parser_id_expression
5340               (parser,
5341                cp_parser_optional_template_keyword (parser),
5342                /*check_dependency_p=*/true,
5343                &template_p,
5344                /*declarator_p=*/false,
5345                /*optional_p=*/false));
5346       /* In general, build a SCOPE_REF if the member name is qualified.
5347          However, if the name was not dependent and has already been
5348          resolved; there is no need to build the SCOPE_REF.  For example;
5349
5350              struct X { void f(); };
5351              template <typename T> void f(T* t) { t->X::f(); }
5352
5353          Even though "t" is dependent, "X::f" is not and has been resolved
5354          to a BASELINK; there is no need to include scope information.  */
5355
5356       /* But we do need to remember that there was an explicit scope for
5357          virtual function calls.  */
5358       if (parser->scope)
5359         *idk = CP_ID_KIND_QUALIFIED;
5360
5361       /* If the name is a template-id that names a type, we will get a
5362          TYPE_DECL here.  That is invalid code.  */
5363       if (TREE_CODE (name) == TYPE_DECL)
5364         {
5365           error_at (token->location, "invalid use of %qD", name);
5366           postfix_expression = error_mark_node;
5367         }
5368       else
5369         {
5370           if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
5371             {
5372               name = build_qualified_name (/*type=*/NULL_TREE,
5373                                            parser->scope,
5374                                            name,
5375                                            template_p);
5376               parser->scope = NULL_TREE;
5377               parser->qualifying_scope = NULL_TREE;
5378               parser->object_scope = NULL_TREE;
5379             }
5380           if (scope && name && BASELINK_P (name))
5381             adjust_result_of_qualified_name_lookup
5382               (name, BINFO_TYPE (BASELINK_ACCESS_BINFO (name)), scope);
5383           postfix_expression
5384             = finish_class_member_access_expr (postfix_expression, name,
5385                                                template_p, 
5386                                                tf_warning_or_error);
5387         }
5388     }
5389
5390   /* We no longer need to look up names in the scope of the object on
5391      the left-hand side of the `.' or `->' operator.  */
5392   parser->context->object_type = NULL_TREE;
5393
5394   /* Outside of offsetof, these operators may not appear in
5395      constant-expressions.  */
5396   if (!for_offsetof
5397       && (cp_parser_non_integral_constant_expression
5398           (parser, token_type == CPP_DEREF ? NIC_ARROW : NIC_POINT)))
5399     postfix_expression = error_mark_node;
5400
5401   return postfix_expression;
5402 }
5403
5404 /* Parse a parenthesized expression-list.
5405
5406    expression-list:
5407      assignment-expression
5408      expression-list, assignment-expression
5409
5410    attribute-list:
5411      expression-list
5412      identifier
5413      identifier, expression-list
5414
5415    CAST_P is true if this expression is the target of a cast.
5416
5417    ALLOW_EXPANSION_P is true if this expression allows expansion of an
5418    argument pack.
5419
5420    Returns a vector of trees.  Each element is a representation of an
5421    assignment-expression.  NULL is returned if the ( and or ) are
5422    missing.  An empty, but allocated, vector is returned on no
5423    expressions.  The parentheses are eaten.  IS_ATTRIBUTE_LIST is id_attr
5424    if we are parsing an attribute list for an attribute that wants a
5425    plain identifier argument, normal_attr for an attribute that wants
5426    an expression, or non_attr if we aren't parsing an attribute list.  If
5427    NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P indicates whether or
5428    not all of the expressions in the list were constant.  */
5429
5430 static VEC(tree,gc) *
5431 cp_parser_parenthesized_expression_list (cp_parser* parser,
5432                                          int is_attribute_list,
5433                                          bool cast_p,
5434                                          bool allow_expansion_p,
5435                                          bool *non_constant_p)
5436 {
5437   VEC(tree,gc) *expression_list;
5438   bool fold_expr_p = is_attribute_list != non_attr;
5439   tree identifier = NULL_TREE;
5440   bool saved_greater_than_is_operator_p;
5441
5442   /* Assume all the expressions will be constant.  */
5443   if (non_constant_p)
5444     *non_constant_p = false;
5445
5446   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
5447     return NULL;
5448
5449   expression_list = make_tree_vector ();
5450
5451   /* Within a parenthesized expression, a `>' token is always
5452      the greater-than operator.  */
5453   saved_greater_than_is_operator_p
5454     = parser->greater_than_is_operator_p;
5455   parser->greater_than_is_operator_p = true;
5456
5457   /* Consume expressions until there are no more.  */
5458   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
5459     while (true)
5460       {
5461         tree expr;
5462
5463         /* At the beginning of attribute lists, check to see if the
5464            next token is an identifier.  */
5465         if (is_attribute_list == id_attr
5466             && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
5467           {
5468             cp_token *token;
5469
5470             /* Consume the identifier.  */
5471             token = cp_lexer_consume_token (parser->lexer);
5472             /* Save the identifier.  */
5473             identifier = token->u.value;
5474           }
5475         else
5476           {
5477             bool expr_non_constant_p;
5478
5479             /* Parse the next assignment-expression.  */
5480             if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
5481               {
5482                 /* A braced-init-list.  */
5483                 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5484                 expr = cp_parser_braced_list (parser, &expr_non_constant_p);
5485                 if (non_constant_p && expr_non_constant_p)
5486                   *non_constant_p = true;
5487               }
5488             else if (non_constant_p)
5489               {
5490                 expr = (cp_parser_constant_expression
5491                         (parser, /*allow_non_constant_p=*/true,
5492                          &expr_non_constant_p));
5493                 if (expr_non_constant_p)
5494                   *non_constant_p = true;
5495               }
5496             else
5497               expr = cp_parser_assignment_expression (parser, cast_p, NULL);
5498
5499             if (fold_expr_p)
5500               expr = fold_non_dependent_expr (expr);
5501
5502             /* If we have an ellipsis, then this is an expression
5503                expansion.  */
5504             if (allow_expansion_p
5505                 && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
5506               {
5507                 /* Consume the `...'.  */
5508                 cp_lexer_consume_token (parser->lexer);
5509
5510                 /* Build the argument pack.  */
5511                 expr = make_pack_expansion (expr);
5512               }
5513
5514              /* Add it to the list.  We add error_mark_node
5515                 expressions to the list, so that we can still tell if
5516                 the correct form for a parenthesized expression-list
5517                 is found. That gives better errors.  */
5518             VEC_safe_push (tree, gc, expression_list, expr);
5519
5520             if (expr == error_mark_node)
5521               goto skip_comma;
5522           }
5523
5524         /* After the first item, attribute lists look the same as
5525            expression lists.  */
5526         is_attribute_list = non_attr;
5527
5528       get_comma:;
5529         /* If the next token isn't a `,', then we are done.  */
5530         if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
5531           break;
5532
5533         /* Otherwise, consume the `,' and keep going.  */
5534         cp_lexer_consume_token (parser->lexer);
5535       }
5536
5537   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
5538     {
5539       int ending;
5540
5541     skip_comma:;
5542       /* We try and resync to an unnested comma, as that will give the
5543          user better diagnostics.  */
5544       ending = cp_parser_skip_to_closing_parenthesis (parser,
5545                                                       /*recovering=*/true,
5546                                                       /*or_comma=*/true,
5547                                                       /*consume_paren=*/true);
5548       if (ending < 0)
5549         goto get_comma;
5550       if (!ending)
5551         {
5552           parser->greater_than_is_operator_p
5553             = saved_greater_than_is_operator_p;
5554           return NULL;
5555         }
5556     }
5557
5558   parser->greater_than_is_operator_p
5559     = saved_greater_than_is_operator_p;
5560
5561   if (identifier)
5562     VEC_safe_insert (tree, gc, expression_list, 0, identifier);
5563
5564   return expression_list;
5565 }
5566
5567 /* Parse a pseudo-destructor-name.
5568
5569    pseudo-destructor-name:
5570      :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
5571      :: [opt] nested-name-specifier template template-id :: ~ type-name
5572      :: [opt] nested-name-specifier [opt] ~ type-name
5573
5574    If either of the first two productions is used, sets *SCOPE to the
5575    TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
5576    NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
5577    or ERROR_MARK_NODE if the parse fails.  */
5578
5579 static void
5580 cp_parser_pseudo_destructor_name (cp_parser* parser,
5581                                   tree* scope,
5582                                   tree* type)
5583 {
5584   bool nested_name_specifier_p;
5585
5586   /* Assume that things will not work out.  */
5587   *type = error_mark_node;
5588
5589   /* Look for the optional `::' operator.  */
5590   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
5591   /* Look for the optional nested-name-specifier.  */
5592   nested_name_specifier_p
5593     = (cp_parser_nested_name_specifier_opt (parser,
5594                                             /*typename_keyword_p=*/false,
5595                                             /*check_dependency_p=*/true,
5596                                             /*type_p=*/false,
5597                                             /*is_declaration=*/false)
5598        != NULL_TREE);
5599   /* Now, if we saw a nested-name-specifier, we might be doing the
5600      second production.  */
5601   if (nested_name_specifier_p
5602       && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
5603     {
5604       /* Consume the `template' keyword.  */
5605       cp_lexer_consume_token (parser->lexer);
5606       /* Parse the template-id.  */
5607       cp_parser_template_id (parser,
5608                              /*template_keyword_p=*/true,
5609                              /*check_dependency_p=*/false,
5610                              /*is_declaration=*/true);
5611       /* Look for the `::' token.  */
5612       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
5613     }
5614   /* If the next token is not a `~', then there might be some
5615      additional qualification.  */
5616   else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
5617     {
5618       /* At this point, we're looking for "type-name :: ~".  The type-name
5619          must not be a class-name, since this is a pseudo-destructor.  So,
5620          it must be either an enum-name, or a typedef-name -- both of which
5621          are just identifiers.  So, we peek ahead to check that the "::"
5622          and "~" tokens are present; if they are not, then we can avoid
5623          calling type_name.  */
5624       if (cp_lexer_peek_token (parser->lexer)->type != CPP_NAME
5625           || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE
5626           || cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_COMPL)
5627         {
5628           cp_parser_error (parser, "non-scalar type");
5629           return;
5630         }
5631
5632       /* Look for the type-name.  */
5633       *scope = TREE_TYPE (cp_parser_nonclass_name (parser));
5634       if (*scope == error_mark_node)
5635         return;
5636
5637       /* Look for the `::' token.  */
5638       cp_parser_require (parser, CPP_SCOPE, RT_SCOPE);
5639     }
5640   else
5641     *scope = NULL_TREE;
5642
5643   /* Look for the `~'.  */
5644   cp_parser_require (parser, CPP_COMPL, RT_COMPL);
5645
5646   /* Once we see the ~, this has to be a pseudo-destructor.  */
5647   if (!processing_template_decl && !cp_parser_error_occurred (parser))
5648     cp_parser_commit_to_tentative_parse (parser);
5649
5650   /* Look for the type-name again.  We are not responsible for
5651      checking that it matches the first type-name.  */
5652   *type = cp_parser_nonclass_name (parser);
5653 }
5654
5655 /* Parse a unary-expression.
5656
5657    unary-expression:
5658      postfix-expression
5659      ++ cast-expression
5660      -- cast-expression
5661      unary-operator cast-expression
5662      sizeof unary-expression
5663      sizeof ( type-id )
5664      alignof ( type-id )  [C++0x]
5665      new-expression
5666      delete-expression
5667
5668    GNU Extensions:
5669
5670    unary-expression:
5671      __extension__ cast-expression
5672      __alignof__ unary-expression
5673      __alignof__ ( type-id )
5674      alignof unary-expression  [C++0x]
5675      __real__ cast-expression
5676      __imag__ cast-expression
5677      && identifier
5678
5679    ADDRESS_P is true iff the unary-expression is appearing as the
5680    operand of the `&' operator.   CAST_P is true if this expression is
5681    the target of a cast.
5682
5683    Returns a representation of the expression.  */
5684
5685 static tree
5686 cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p,
5687                             cp_id_kind * pidk)
5688 {
5689   cp_token *token;
5690   enum tree_code unary_operator;
5691
5692   /* Peek at the next token.  */
5693   token = cp_lexer_peek_token (parser->lexer);
5694   /* Some keywords give away the kind of expression.  */
5695   if (token->type == CPP_KEYWORD)
5696     {
5697       enum rid keyword = token->keyword;
5698
5699       switch (keyword)
5700         {
5701         case RID_ALIGNOF:
5702         case RID_SIZEOF:
5703           {
5704             tree operand;
5705             enum tree_code op;
5706
5707             op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
5708             /* Consume the token.  */
5709             cp_lexer_consume_token (parser->lexer);
5710             /* Parse the operand.  */
5711             operand = cp_parser_sizeof_operand (parser, keyword);
5712
5713             if (TYPE_P (operand))
5714               return cxx_sizeof_or_alignof_type (operand, op, true);
5715             else
5716               {
5717                 /* ISO C++ defines alignof only with types, not with
5718                    expressions. So pedwarn if alignof is used with a non-
5719                    type expression. However, __alignof__ is ok.  */
5720                 if (!strcmp (IDENTIFIER_POINTER (token->u.value), "alignof"))
5721                   pedwarn (token->location, OPT_pedantic,
5722                            "ISO C++ does not allow %<alignof%> "
5723                            "with a non-type");
5724
5725                 return cxx_sizeof_or_alignof_expr (operand, op, true);
5726               }
5727           }
5728
5729         case RID_NEW:
5730           return cp_parser_new_expression (parser);
5731
5732         case RID_DELETE:
5733           return cp_parser_delete_expression (parser);
5734
5735         case RID_EXTENSION:
5736           {
5737             /* The saved value of the PEDANTIC flag.  */
5738             int saved_pedantic;
5739             tree expr;
5740
5741             /* Save away the PEDANTIC flag.  */
5742             cp_parser_extension_opt (parser, &saved_pedantic);
5743             /* Parse the cast-expression.  */
5744             expr = cp_parser_simple_cast_expression (parser);
5745             /* Restore the PEDANTIC flag.  */
5746             pedantic = saved_pedantic;
5747
5748             return expr;
5749           }
5750
5751         case RID_REALPART:
5752         case RID_IMAGPART:
5753           {
5754             tree expression;
5755
5756             /* Consume the `__real__' or `__imag__' token.  */
5757             cp_lexer_consume_token (parser->lexer);
5758             /* Parse the cast-expression.  */
5759             expression = cp_parser_simple_cast_expression (parser);
5760             /* Create the complete representation.  */
5761             return build_x_unary_op ((keyword == RID_REALPART
5762                                       ? REALPART_EXPR : IMAGPART_EXPR),
5763                                      expression,
5764                                      tf_warning_or_error);
5765           }
5766           break;
5767
5768         case RID_NOEXCEPT:
5769           {
5770             tree expr;
5771             const char *saved_message;
5772             bool saved_integral_constant_expression_p;
5773             bool saved_non_integral_constant_expression_p;
5774             bool saved_greater_than_is_operator_p;
5775
5776             cp_lexer_consume_token (parser->lexer);
5777             cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
5778
5779             saved_message = parser->type_definition_forbidden_message;
5780             parser->type_definition_forbidden_message
5781               = G_("types may not be defined in %<noexcept%> expressions");
5782
5783             saved_integral_constant_expression_p
5784               = parser->integral_constant_expression_p;
5785             saved_non_integral_constant_expression_p
5786               = parser->non_integral_constant_expression_p;
5787             parser->integral_constant_expression_p = false;
5788
5789             saved_greater_than_is_operator_p
5790               = parser->greater_than_is_operator_p;
5791             parser->greater_than_is_operator_p = true;
5792
5793             ++cp_unevaluated_operand;
5794             ++c_inhibit_evaluation_warnings;
5795             expr = cp_parser_expression (parser, false, NULL);
5796             --c_inhibit_evaluation_warnings;
5797             --cp_unevaluated_operand;
5798
5799             parser->greater_than_is_operator_p
5800               = saved_greater_than_is_operator_p;
5801
5802             parser->integral_constant_expression_p
5803               = saved_integral_constant_expression_p;
5804             parser->non_integral_constant_expression_p
5805               = saved_non_integral_constant_expression_p;
5806
5807             parser->type_definition_forbidden_message = saved_message;
5808
5809             cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
5810             return finish_noexcept_expr (expr, tf_warning_or_error);
5811           }
5812
5813         default:
5814           break;
5815         }
5816     }
5817
5818   /* Look for the `:: new' and `:: delete', which also signal the
5819      beginning of a new-expression, or delete-expression,
5820      respectively.  If the next token is `::', then it might be one of
5821      these.  */
5822   if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
5823     {
5824       enum rid keyword;
5825
5826       /* See if the token after the `::' is one of the keywords in
5827          which we're interested.  */
5828       keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
5829       /* If it's `new', we have a new-expression.  */
5830       if (keyword == RID_NEW)
5831         return cp_parser_new_expression (parser);
5832       /* Similarly, for `delete'.  */
5833       else if (keyword == RID_DELETE)
5834         return cp_parser_delete_expression (parser);
5835     }
5836
5837   /* Look for a unary operator.  */
5838   unary_operator = cp_parser_unary_operator (token);
5839   /* The `++' and `--' operators can be handled similarly, even though
5840      they are not technically unary-operators in the grammar.  */
5841   if (unary_operator == ERROR_MARK)
5842     {
5843       if (token->type == CPP_PLUS_PLUS)
5844         unary_operator = PREINCREMENT_EXPR;
5845       else if (token->type == CPP_MINUS_MINUS)
5846         unary_operator = PREDECREMENT_EXPR;
5847       /* Handle the GNU address-of-label extension.  */
5848       else if (cp_parser_allow_gnu_extensions_p (parser)
5849                && token->type == CPP_AND_AND)
5850         {
5851           tree identifier;
5852           tree expression;
5853           location_t loc = cp_lexer_peek_token (parser->lexer)->location;
5854
5855           /* Consume the '&&' token.  */
5856           cp_lexer_consume_token (parser->lexer);
5857           /* Look for the identifier.  */
5858           identifier = cp_parser_identifier (parser);
5859           /* Create an expression representing the address.  */
5860           expression = finish_label_address_expr (identifier, loc);
5861           if (cp_parser_non_integral_constant_expression (parser,
5862                                                           NIC_ADDR_LABEL))
5863             expression = error_mark_node;
5864           return expression;
5865         }
5866     }
5867   if (unary_operator != ERROR_MARK)
5868     {
5869       tree cast_expression;
5870       tree expression = error_mark_node;
5871       non_integral_constant non_constant_p = NIC_NONE;
5872
5873       /* Consume the operator token.  */
5874       token = cp_lexer_consume_token (parser->lexer);
5875       /* Parse the cast-expression.  */
5876       cast_expression
5877         = cp_parser_cast_expression (parser,
5878                                      unary_operator == ADDR_EXPR,
5879                                      /*cast_p=*/false, pidk);
5880       /* Now, build an appropriate representation.  */
5881       switch (unary_operator)
5882         {
5883         case INDIRECT_REF:
5884           non_constant_p = NIC_STAR;
5885           expression = build_x_indirect_ref (cast_expression, RO_UNARY_STAR,
5886                                              tf_warning_or_error);
5887           break;
5888
5889         case ADDR_EXPR:
5890            non_constant_p = NIC_ADDR;
5891           /* Fall through.  */
5892         case BIT_NOT_EXPR:
5893           expression = build_x_unary_op (unary_operator, cast_expression,
5894                                          tf_warning_or_error);
5895           break;
5896
5897         case PREINCREMENT_EXPR:
5898         case PREDECREMENT_EXPR:
5899           non_constant_p = unary_operator == PREINCREMENT_EXPR
5900                            ? NIC_PREINCREMENT : NIC_PREDECREMENT;
5901           /* Fall through.  */
5902         case UNARY_PLUS_EXPR:
5903         case NEGATE_EXPR:
5904         case TRUTH_NOT_EXPR:
5905           expression = finish_unary_op_expr (unary_operator, cast_expression);
5906           break;
5907
5908         default:
5909           gcc_unreachable ();
5910         }
5911
5912       if (non_constant_p != NIC_NONE
5913           && cp_parser_non_integral_constant_expression (parser,
5914                                                          non_constant_p))
5915         expression = error_mark_node;
5916
5917       return expression;
5918     }
5919
5920   return cp_parser_postfix_expression (parser, address_p, cast_p,
5921                                        /*member_access_only_p=*/false,
5922                                        pidk);
5923 }
5924
5925 /* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
5926    unary-operator, the corresponding tree code is returned.  */
5927
5928 static enum tree_code
5929 cp_parser_unary_operator (cp_token* token)
5930 {
5931   switch (token->type)
5932     {
5933     case CPP_MULT:
5934       return INDIRECT_REF;
5935
5936     case CPP_AND:
5937       return ADDR_EXPR;
5938
5939     case CPP_PLUS:
5940       return UNARY_PLUS_EXPR;
5941
5942     case CPP_MINUS:
5943       return NEGATE_EXPR;
5944
5945     case CPP_NOT:
5946       return TRUTH_NOT_EXPR;
5947
5948     case CPP_COMPL:
5949       return BIT_NOT_EXPR;
5950
5951     default:
5952       return ERROR_MARK;
5953     }
5954 }
5955
5956 /* Parse a new-expression.
5957
5958    new-expression:
5959      :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
5960      :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
5961
5962    Returns a representation of the expression.  */
5963
5964 static tree
5965 cp_parser_new_expression (cp_parser* parser)
5966 {
5967   bool global_scope_p;
5968   VEC(tree,gc) *placement;
5969   tree type;
5970   VEC(tree,gc) *initializer;
5971   tree nelts;
5972   tree ret;
5973
5974   /* Look for the optional `::' operator.  */
5975   global_scope_p
5976     = (cp_parser_global_scope_opt (parser,
5977                                    /*current_scope_valid_p=*/false)
5978        != NULL_TREE);
5979   /* Look for the `new' operator.  */
5980   cp_parser_require_keyword (parser, RID_NEW, RT_NEW);
5981   /* There's no easy way to tell a new-placement from the
5982      `( type-id )' construct.  */
5983   cp_parser_parse_tentatively (parser);
5984   /* Look for a new-placement.  */
5985   placement = cp_parser_new_placement (parser);
5986   /* If that didn't work out, there's no new-placement.  */
5987   if (!cp_parser_parse_definitely (parser))
5988     {
5989       if (placement != NULL)
5990         release_tree_vector (placement);
5991       placement = NULL;
5992     }
5993
5994   /* If the next token is a `(', then we have a parenthesized
5995      type-id.  */
5996   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5997     {
5998       cp_token *token;
5999       /* Consume the `('.  */
6000       cp_lexer_consume_token (parser->lexer);
6001       /* Parse the type-id.  */
6002       type = cp_parser_type_id (parser);
6003       /* Look for the closing `)'.  */
6004       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
6005       token = cp_lexer_peek_token (parser->lexer);
6006       /* There should not be a direct-new-declarator in this production,
6007          but GCC used to allowed this, so we check and emit a sensible error
6008          message for this case.  */
6009       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6010         {
6011           error_at (token->location,
6012                     "array bound forbidden after parenthesized type-id");
6013           inform (token->location, 
6014                   "try removing the parentheses around the type-id");
6015           cp_parser_direct_new_declarator (parser);
6016         }
6017       nelts = NULL_TREE;
6018     }
6019   /* Otherwise, there must be a new-type-id.  */
6020   else
6021     type = cp_parser_new_type_id (parser, &nelts);
6022
6023   /* If the next token is a `(' or '{', then we have a new-initializer.  */
6024   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
6025       || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6026     initializer = cp_parser_new_initializer (parser);
6027   else
6028     initializer = NULL;
6029
6030   /* A new-expression may not appear in an integral constant
6031      expression.  */
6032   if (cp_parser_non_integral_constant_expression (parser, NIC_NEW))
6033     ret = error_mark_node;
6034   else
6035     {
6036       /* Create a representation of the new-expression.  */
6037       ret = build_new (&placement, type, nelts, &initializer, global_scope_p,
6038                        tf_warning_or_error);
6039     }
6040
6041   if (placement != NULL)
6042     release_tree_vector (placement);
6043   if (initializer != NULL)
6044     release_tree_vector (initializer);
6045
6046   return ret;
6047 }
6048
6049 /* Parse a new-placement.
6050
6051    new-placement:
6052      ( expression-list )
6053
6054    Returns the same representation as for an expression-list.  */
6055
6056 static VEC(tree,gc) *
6057 cp_parser_new_placement (cp_parser* parser)
6058 {
6059   VEC(tree,gc) *expression_list;
6060
6061   /* Parse the expression-list.  */
6062   expression_list = (cp_parser_parenthesized_expression_list
6063                      (parser, non_attr, /*cast_p=*/false,
6064                       /*allow_expansion_p=*/true,
6065                       /*non_constant_p=*/NULL));
6066
6067   return expression_list;
6068 }
6069
6070 /* Parse a new-type-id.
6071
6072    new-type-id:
6073      type-specifier-seq new-declarator [opt]
6074
6075    Returns the TYPE allocated.  If the new-type-id indicates an array
6076    type, *NELTS is set to the number of elements in the last array
6077    bound; the TYPE will not include the last array bound.  */
6078
6079 static tree
6080 cp_parser_new_type_id (cp_parser* parser, tree *nelts)
6081 {
6082   cp_decl_specifier_seq type_specifier_seq;
6083   cp_declarator *new_declarator;
6084   cp_declarator *declarator;
6085   cp_declarator *outer_declarator;
6086   const char *saved_message;
6087   tree type;
6088
6089   /* The type-specifier sequence must not contain type definitions.
6090      (It cannot contain declarations of new types either, but if they
6091      are not definitions we will catch that because they are not
6092      complete.)  */
6093   saved_message = parser->type_definition_forbidden_message;
6094   parser->type_definition_forbidden_message
6095     = G_("types may not be defined in a new-type-id");
6096   /* Parse the type-specifier-seq.  */
6097   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
6098                                 /*is_trailing_return=*/false,
6099                                 &type_specifier_seq);
6100   /* Restore the old message.  */
6101   parser->type_definition_forbidden_message = saved_message;
6102   /* Parse the new-declarator.  */
6103   new_declarator = cp_parser_new_declarator_opt (parser);
6104
6105   /* Determine the number of elements in the last array dimension, if
6106      any.  */
6107   *nelts = NULL_TREE;
6108   /* Skip down to the last array dimension.  */
6109   declarator = new_declarator;
6110   outer_declarator = NULL;
6111   while (declarator && (declarator->kind == cdk_pointer
6112                         || declarator->kind == cdk_ptrmem))
6113     {
6114       outer_declarator = declarator;
6115       declarator = declarator->declarator;
6116     }
6117   while (declarator
6118          && declarator->kind == cdk_array
6119          && declarator->declarator
6120          && declarator->declarator->kind == cdk_array)
6121     {
6122       outer_declarator = declarator;
6123       declarator = declarator->declarator;
6124     }
6125
6126   if (declarator && declarator->kind == cdk_array)
6127     {
6128       *nelts = declarator->u.array.bounds;
6129       if (*nelts == error_mark_node)
6130         *nelts = integer_one_node;
6131
6132       if (outer_declarator)
6133         outer_declarator->declarator = declarator->declarator;
6134       else
6135         new_declarator = NULL;
6136     }
6137
6138   type = groktypename (&type_specifier_seq, new_declarator, false);
6139   return type;
6140 }
6141
6142 /* Parse an (optional) new-declarator.
6143
6144    new-declarator:
6145      ptr-operator new-declarator [opt]
6146      direct-new-declarator
6147
6148    Returns the declarator.  */
6149
6150 static cp_declarator *
6151 cp_parser_new_declarator_opt (cp_parser* parser)
6152 {
6153   enum tree_code code;
6154   tree type;
6155   cp_cv_quals cv_quals;
6156
6157   /* We don't know if there's a ptr-operator next, or not.  */
6158   cp_parser_parse_tentatively (parser);
6159   /* Look for a ptr-operator.  */
6160   code = cp_parser_ptr_operator (parser, &type, &cv_quals);
6161   /* If that worked, look for more new-declarators.  */
6162   if (cp_parser_parse_definitely (parser))
6163     {
6164       cp_declarator *declarator;
6165
6166       /* Parse another optional declarator.  */
6167       declarator = cp_parser_new_declarator_opt (parser);
6168
6169       return cp_parser_make_indirect_declarator
6170         (code, type, cv_quals, declarator);
6171     }
6172
6173   /* If the next token is a `[', there is a direct-new-declarator.  */
6174   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6175     return cp_parser_direct_new_declarator (parser);
6176
6177   return NULL;
6178 }
6179
6180 /* Parse a direct-new-declarator.
6181
6182    direct-new-declarator:
6183      [ expression ]
6184      direct-new-declarator [constant-expression]
6185
6186    */
6187
6188 static cp_declarator *
6189 cp_parser_direct_new_declarator (cp_parser* parser)
6190 {
6191   cp_declarator *declarator = NULL;
6192
6193   while (true)
6194     {
6195       tree expression;
6196
6197       /* Look for the opening `['.  */
6198       cp_parser_require (parser, CPP_OPEN_SQUARE, RT_OPEN_SQUARE);
6199       /* The first expression is not required to be constant.  */
6200       if (!declarator)
6201         {
6202           cp_token *token = cp_lexer_peek_token (parser->lexer);
6203           expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
6204           /* The standard requires that the expression have integral
6205              type.  DR 74 adds enumeration types.  We believe that the
6206              real intent is that these expressions be handled like the
6207              expression in a `switch' condition, which also allows
6208              classes with a single conversion to integral or
6209              enumeration type.  */
6210           if (!processing_template_decl)
6211             {
6212               expression
6213                 = build_expr_type_conversion (WANT_INT | WANT_ENUM,
6214                                               expression,
6215                                               /*complain=*/true);
6216               if (!expression)
6217                 {
6218                   error_at (token->location,
6219                             "expression in new-declarator must have integral "
6220                             "or enumeration type");
6221                   expression = error_mark_node;
6222                 }
6223             }
6224         }
6225       /* But all the other expressions must be.  */
6226       else
6227         expression
6228           = cp_parser_constant_expression (parser,
6229                                            /*allow_non_constant=*/false,
6230                                            NULL);
6231       /* Look for the closing `]'.  */
6232       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
6233
6234       /* Add this bound to the declarator.  */
6235       declarator = make_array_declarator (declarator, expression);
6236
6237       /* If the next token is not a `[', then there are no more
6238          bounds.  */
6239       if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
6240         break;
6241     }
6242
6243   return declarator;
6244 }
6245
6246 /* Parse a new-initializer.
6247
6248    new-initializer:
6249      ( expression-list [opt] )
6250      braced-init-list
6251
6252    Returns a representation of the expression-list.  */
6253
6254 static VEC(tree,gc) *
6255 cp_parser_new_initializer (cp_parser* parser)
6256 {
6257   VEC(tree,gc) *expression_list;
6258
6259   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
6260     {
6261       tree t;
6262       bool expr_non_constant_p;
6263       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6264       t = cp_parser_braced_list (parser, &expr_non_constant_p);
6265       CONSTRUCTOR_IS_DIRECT_INIT (t) = 1;
6266       expression_list = make_tree_vector_single (t);
6267     }
6268   else
6269     expression_list = (cp_parser_parenthesized_expression_list
6270                        (parser, non_attr, /*cast_p=*/false,
6271                         /*allow_expansion_p=*/true,
6272                         /*non_constant_p=*/NULL));
6273
6274   return expression_list;
6275 }
6276
6277 /* Parse a delete-expression.
6278
6279    delete-expression:
6280      :: [opt] delete cast-expression
6281      :: [opt] delete [ ] cast-expression
6282
6283    Returns a representation of the expression.  */
6284
6285 static tree
6286 cp_parser_delete_expression (cp_parser* parser)
6287 {
6288   bool global_scope_p;
6289   bool array_p;
6290   tree expression;
6291
6292   /* Look for the optional `::' operator.  */
6293   global_scope_p
6294     = (cp_parser_global_scope_opt (parser,
6295                                    /*current_scope_valid_p=*/false)
6296        != NULL_TREE);
6297   /* Look for the `delete' keyword.  */
6298   cp_parser_require_keyword (parser, RID_DELETE, RT_DELETE);
6299   /* See if the array syntax is in use.  */
6300   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
6301     {
6302       /* Consume the `[' token.  */
6303       cp_lexer_consume_token (parser->lexer);
6304       /* Look for the `]' token.  */
6305       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
6306       /* Remember that this is the `[]' construct.  */
6307       array_p = true;
6308     }
6309   else
6310     array_p = false;
6311
6312   /* Parse the cast-expression.  */
6313   expression = cp_parser_simple_cast_expression (parser);
6314
6315   /* A delete-expression may not appear in an integral constant
6316      expression.  */
6317   if (cp_parser_non_integral_constant_expression (parser, NIC_DEL))
6318     return error_mark_node;
6319
6320   return delete_sanity (expression, NULL_TREE, array_p, global_scope_p,
6321                         tf_warning_or_error);
6322 }
6323
6324 /* Returns true if TOKEN may start a cast-expression and false
6325    otherwise.  */
6326
6327 static bool
6328 cp_parser_token_starts_cast_expression (cp_token *token)
6329 {
6330   switch (token->type)
6331     {
6332     case CPP_COMMA:
6333     case CPP_SEMICOLON:
6334     case CPP_QUERY:
6335     case CPP_COLON:
6336     case CPP_CLOSE_SQUARE:
6337     case CPP_CLOSE_PAREN:
6338     case CPP_CLOSE_BRACE:
6339     case CPP_DOT:
6340     case CPP_DOT_STAR:
6341     case CPP_DEREF:
6342     case CPP_DEREF_STAR:
6343     case CPP_DIV:
6344     case CPP_MOD:
6345     case CPP_LSHIFT:
6346     case CPP_RSHIFT:
6347     case CPP_LESS:
6348     case CPP_GREATER:
6349     case CPP_LESS_EQ:
6350     case CPP_GREATER_EQ:
6351     case CPP_EQ_EQ:
6352     case CPP_NOT_EQ:
6353     case CPP_EQ:
6354     case CPP_MULT_EQ:
6355     case CPP_DIV_EQ:
6356     case CPP_MOD_EQ:
6357     case CPP_PLUS_EQ:
6358     case CPP_MINUS_EQ:
6359     case CPP_RSHIFT_EQ:
6360     case CPP_LSHIFT_EQ:
6361     case CPP_AND_EQ:
6362     case CPP_XOR_EQ:
6363     case CPP_OR_EQ:
6364     case CPP_XOR:
6365     case CPP_OR:
6366     case CPP_OR_OR:
6367     case CPP_EOF:
6368       return false;
6369
6370       /* '[' may start a primary-expression in obj-c++.  */
6371     case CPP_OPEN_SQUARE:
6372       return c_dialect_objc ();
6373
6374     default:
6375       return true;
6376     }
6377 }
6378
6379 /* Parse a cast-expression.
6380
6381    cast-expression:
6382      unary-expression
6383      ( type-id ) cast-expression
6384
6385    ADDRESS_P is true iff the unary-expression is appearing as the
6386    operand of the `&' operator.   CAST_P is true if this expression is
6387    the target of a cast.
6388
6389    Returns a representation of the expression.  */
6390
6391 static tree
6392 cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p,
6393                            cp_id_kind * pidk)
6394 {
6395   /* If it's a `(', then we might be looking at a cast.  */
6396   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
6397     {
6398       tree type = NULL_TREE;
6399       tree expr = NULL_TREE;
6400       bool compound_literal_p;
6401       const char *saved_message;
6402
6403       /* There's no way to know yet whether or not this is a cast.
6404          For example, `(int (3))' is a unary-expression, while `(int)
6405          3' is a cast.  So, we resort to parsing tentatively.  */
6406       cp_parser_parse_tentatively (parser);
6407       /* Types may not be defined in a cast.  */
6408       saved_message = parser->type_definition_forbidden_message;
6409       parser->type_definition_forbidden_message
6410         = G_("types may not be defined in casts");
6411       /* Consume the `('.  */
6412       cp_lexer_consume_token (parser->lexer);
6413       /* A very tricky bit is that `(struct S) { 3 }' is a
6414          compound-literal (which we permit in C++ as an extension).
6415          But, that construct is not a cast-expression -- it is a
6416          postfix-expression.  (The reason is that `(struct S) { 3 }.i'
6417          is legal; if the compound-literal were a cast-expression,
6418          you'd need an extra set of parentheses.)  But, if we parse
6419          the type-id, and it happens to be a class-specifier, then we
6420          will commit to the parse at that point, because we cannot
6421          undo the action that is done when creating a new class.  So,
6422          then we cannot back up and do a postfix-expression.
6423
6424          Therefore, we scan ahead to the closing `)', and check to see
6425          if the token after the `)' is a `{'.  If so, we are not
6426          looking at a cast-expression.
6427
6428          Save tokens so that we can put them back.  */
6429       cp_lexer_save_tokens (parser->lexer);
6430       /* Skip tokens until the next token is a closing parenthesis.
6431          If we find the closing `)', and the next token is a `{', then
6432          we are looking at a compound-literal.  */
6433       compound_literal_p
6434         = (cp_parser_skip_to_closing_parenthesis (parser, false, false,
6435                                                   /*consume_paren=*/true)
6436            && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
6437       /* Roll back the tokens we skipped.  */
6438       cp_lexer_rollback_tokens (parser->lexer);
6439       /* If we were looking at a compound-literal, simulate an error
6440          so that the call to cp_parser_parse_definitely below will
6441          fail.  */
6442       if (compound_literal_p)
6443         cp_parser_simulate_error (parser);
6444       else
6445         {
6446           bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
6447           parser->in_type_id_in_expr_p = true;
6448           /* Look for the type-id.  */
6449           type = cp_parser_type_id (parser);
6450           /* Look for the closing `)'.  */
6451           cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
6452           parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
6453         }
6454
6455       /* Restore the saved message.  */
6456       parser->type_definition_forbidden_message = saved_message;
6457
6458       /* At this point this can only be either a cast or a
6459          parenthesized ctor such as `(T ())' that looks like a cast to
6460          function returning T.  */
6461       if (!cp_parser_error_occurred (parser)
6462           && cp_parser_token_starts_cast_expression (cp_lexer_peek_token
6463                                                      (parser->lexer)))
6464         {
6465           cp_parser_parse_definitely (parser);
6466           expr = cp_parser_cast_expression (parser,
6467                                             /*address_p=*/false,
6468                                             /*cast_p=*/true, pidk);
6469
6470           /* Warn about old-style casts, if so requested.  */
6471           if (warn_old_style_cast
6472               && !in_system_header
6473               && !VOID_TYPE_P (type)
6474               && current_lang_name != lang_name_c)
6475             warning (OPT_Wold_style_cast, "use of old-style cast");
6476
6477           /* Only type conversions to integral or enumeration types
6478              can be used in constant-expressions.  */
6479           if (!cast_valid_in_integral_constant_expression_p (type)
6480               && cp_parser_non_integral_constant_expression (parser,
6481                                                              NIC_CAST))
6482             return error_mark_node;
6483
6484           /* Perform the cast.  */
6485           expr = build_c_cast (input_location, type, expr);
6486           return expr;
6487         }
6488       else 
6489         cp_parser_abort_tentative_parse (parser);
6490     }
6491
6492   /* If we get here, then it's not a cast, so it must be a
6493      unary-expression.  */
6494   return cp_parser_unary_expression (parser, address_p, cast_p, pidk);
6495 }
6496
6497 /* Parse a binary expression of the general form:
6498
6499    pm-expression:
6500      cast-expression
6501      pm-expression .* cast-expression
6502      pm-expression ->* cast-expression
6503
6504    multiplicative-expression:
6505      pm-expression
6506      multiplicative-expression * pm-expression
6507      multiplicative-expression / pm-expression
6508      multiplicative-expression % pm-expression
6509
6510    additive-expression:
6511      multiplicative-expression
6512      additive-expression + multiplicative-expression
6513      additive-expression - multiplicative-expression
6514
6515    shift-expression:
6516      additive-expression
6517      shift-expression << additive-expression
6518      shift-expression >> additive-expression
6519
6520    relational-expression:
6521      shift-expression
6522      relational-expression < shift-expression
6523      relational-expression > shift-expression
6524      relational-expression <= shift-expression
6525      relational-expression >= shift-expression
6526
6527   GNU Extension:
6528
6529    relational-expression:
6530      relational-expression <? shift-expression
6531      relational-expression >? shift-expression
6532
6533    equality-expression:
6534      relational-expression
6535      equality-expression == relational-expression
6536      equality-expression != relational-expression
6537
6538    and-expression:
6539      equality-expression
6540      and-expression & equality-expression
6541
6542    exclusive-or-expression:
6543      and-expression
6544      exclusive-or-expression ^ and-expression
6545
6546    inclusive-or-expression:
6547      exclusive-or-expression
6548      inclusive-or-expression | exclusive-or-expression
6549
6550    logical-and-expression:
6551      inclusive-or-expression
6552      logical-and-expression && inclusive-or-expression
6553
6554    logical-or-expression:
6555      logical-and-expression
6556      logical-or-expression || logical-and-expression
6557
6558    All these are implemented with a single function like:
6559
6560    binary-expression:
6561      simple-cast-expression
6562      binary-expression <token> binary-expression
6563
6564    CAST_P is true if this expression is the target of a cast.
6565
6566    The binops_by_token map is used to get the tree codes for each <token> type.
6567    binary-expressions are associated according to a precedence table.  */
6568
6569 #define TOKEN_PRECEDENCE(token)                              \
6570 (((token->type == CPP_GREATER                                \
6571    || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT)) \
6572   && !parser->greater_than_is_operator_p)                    \
6573  ? PREC_NOT_OPERATOR                                         \
6574  : binops_by_token[token->type].prec)
6575
6576 static tree
6577 cp_parser_binary_expression (cp_parser* parser, bool cast_p,
6578                              bool no_toplevel_fold_p,
6579                              enum cp_parser_prec prec,
6580                              cp_id_kind * pidk)
6581 {
6582   cp_parser_expression_stack stack;
6583   cp_parser_expression_stack_entry *sp = &stack[0];
6584   tree lhs, rhs;
6585   cp_token *token;
6586   enum tree_code tree_type, lhs_type, rhs_type;
6587   enum cp_parser_prec new_prec, lookahead_prec;
6588   tree overload;
6589
6590   /* Parse the first expression.  */
6591   lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p, pidk);
6592   lhs_type = ERROR_MARK;
6593
6594   for (;;)
6595     {
6596       /* Get an operator token.  */
6597       token = cp_lexer_peek_token (parser->lexer);
6598
6599       if (warn_cxx0x_compat
6600           && token->type == CPP_RSHIFT
6601           && !parser->greater_than_is_operator_p)
6602         {
6603           if (warning_at (token->location, OPT_Wc__0x_compat, 
6604                           "%<>>%> operator will be treated as"
6605                           " two right angle brackets in C++0x"))
6606             inform (token->location,
6607                     "suggest parentheses around %<>>%> expression");
6608         }
6609
6610       new_prec = TOKEN_PRECEDENCE (token);
6611
6612       /* Popping an entry off the stack means we completed a subexpression:
6613          - either we found a token which is not an operator (`>' where it is not
6614            an operator, or prec == PREC_NOT_OPERATOR), in which case popping
6615            will happen repeatedly;
6616          - or, we found an operator which has lower priority.  This is the case
6617            where the recursive descent *ascends*, as in `3 * 4 + 5' after
6618            parsing `3 * 4'.  */
6619       if (new_prec <= prec)
6620         {
6621           if (sp == stack)
6622             break;
6623           else
6624             goto pop;
6625         }
6626
6627      get_rhs:
6628       tree_type = binops_by_token[token->type].tree_type;
6629
6630       /* We used the operator token.  */
6631       cp_lexer_consume_token (parser->lexer);
6632
6633       /* For "false && x" or "true || x", x will never be executed;
6634          disable warnings while evaluating it.  */
6635       if (tree_type == TRUTH_ANDIF_EXPR)
6636         c_inhibit_evaluation_warnings += lhs == truthvalue_false_node;
6637       else if (tree_type == TRUTH_ORIF_EXPR)
6638         c_inhibit_evaluation_warnings += lhs == truthvalue_true_node;
6639
6640       /* Extract another operand.  It may be the RHS of this expression
6641          or the LHS of a new, higher priority expression.  */
6642       rhs = cp_parser_simple_cast_expression (parser);
6643       rhs_type = ERROR_MARK;
6644
6645       /* Get another operator token.  Look up its precedence to avoid
6646          building a useless (immediately popped) stack entry for common
6647          cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
6648       token = cp_lexer_peek_token (parser->lexer);
6649       lookahead_prec = TOKEN_PRECEDENCE (token);
6650       if (lookahead_prec > new_prec)
6651         {
6652           /* ... and prepare to parse the RHS of the new, higher priority
6653              expression.  Since precedence levels on the stack are
6654              monotonically increasing, we do not have to care about
6655              stack overflows.  */
6656           sp->prec = prec;
6657           sp->tree_type = tree_type;
6658           sp->lhs = lhs;
6659           sp->lhs_type = lhs_type;
6660           sp++;
6661           lhs = rhs;
6662           lhs_type = rhs_type;
6663           prec = new_prec;
6664           new_prec = lookahead_prec;
6665           goto get_rhs;
6666
6667          pop:
6668           lookahead_prec = new_prec;
6669           /* If the stack is not empty, we have parsed into LHS the right side
6670              (`4' in the example above) of an expression we had suspended.
6671              We can use the information on the stack to recover the LHS (`3')
6672              from the stack together with the tree code (`MULT_EXPR'), and
6673              the precedence of the higher level subexpression
6674              (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
6675              which will be used to actually build the additive expression.  */
6676           --sp;
6677           prec = sp->prec;
6678           tree_type = sp->tree_type;
6679           rhs = lhs;
6680           rhs_type = lhs_type;
6681           lhs = sp->lhs;
6682           lhs_type = sp->lhs_type;
6683         }
6684
6685       /* Undo the disabling of warnings done above.  */
6686       if (tree_type == TRUTH_ANDIF_EXPR)
6687         c_inhibit_evaluation_warnings -= lhs == truthvalue_false_node;
6688       else if (tree_type == TRUTH_ORIF_EXPR)
6689         c_inhibit_evaluation_warnings -= lhs == truthvalue_true_node;
6690
6691       overload = NULL;
6692       /* ??? Currently we pass lhs_type == ERROR_MARK and rhs_type ==
6693          ERROR_MARK for everything that is not a binary expression.
6694          This makes warn_about_parentheses miss some warnings that
6695          involve unary operators.  For unary expressions we should
6696          pass the correct tree_code unless the unary expression was
6697          surrounded by parentheses.
6698       */
6699       if (no_toplevel_fold_p
6700           && lookahead_prec <= prec
6701           && sp == stack
6702           && TREE_CODE_CLASS (tree_type) == tcc_comparison)
6703         lhs = build2 (tree_type, boolean_type_node, lhs, rhs);
6704       else
6705         lhs = build_x_binary_op (tree_type, lhs, lhs_type, rhs, rhs_type,
6706                                  &overload, tf_warning_or_error);
6707       lhs_type = tree_type;
6708
6709       /* If the binary operator required the use of an overloaded operator,
6710          then this expression cannot be an integral constant-expression.
6711          An overloaded operator can be used even if both operands are
6712          otherwise permissible in an integral constant-expression if at
6713          least one of the operands is of enumeration type.  */
6714
6715       if (overload
6716           && cp_parser_non_integral_constant_expression (parser,
6717                                                          NIC_OVERLOADED))
6718         return error_mark_node;
6719     }
6720
6721   return lhs;
6722 }
6723
6724
6725 /* Parse the `? expression : assignment-expression' part of a
6726    conditional-expression.  The LOGICAL_OR_EXPR is the
6727    logical-or-expression that started the conditional-expression.
6728    Returns a representation of the entire conditional-expression.
6729
6730    This routine is used by cp_parser_assignment_expression.
6731
6732      ? expression : assignment-expression
6733
6734    GNU Extensions:
6735
6736      ? : assignment-expression */
6737
6738 static tree
6739 cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
6740 {
6741   tree expr;
6742   tree assignment_expr;
6743   struct cp_token *token;
6744
6745   /* Consume the `?' token.  */
6746   cp_lexer_consume_token (parser->lexer);
6747   token = cp_lexer_peek_token (parser->lexer);
6748   if (cp_parser_allow_gnu_extensions_p (parser)
6749       && token->type == CPP_COLON)
6750     {
6751       pedwarn (token->location, OPT_pedantic, 
6752                "ISO C++ does not allow ?: with omitted middle operand");
6753       /* Implicit true clause.  */
6754       expr = NULL_TREE;
6755       c_inhibit_evaluation_warnings += logical_or_expr == truthvalue_true_node;
6756       warn_for_omitted_condop (token->location, logical_or_expr);
6757     }
6758   else
6759     {
6760       bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
6761       parser->colon_corrects_to_scope_p = false;
6762       /* Parse the expression.  */
6763       c_inhibit_evaluation_warnings += logical_or_expr == truthvalue_false_node;
6764       expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
6765       c_inhibit_evaluation_warnings +=
6766         ((logical_or_expr == truthvalue_true_node)
6767          - (logical_or_expr == truthvalue_false_node));
6768       parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
6769     }
6770
6771   /* The next token should be a `:'.  */
6772   cp_parser_require (parser, CPP_COLON, RT_COLON);
6773   /* Parse the assignment-expression.  */
6774   assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
6775   c_inhibit_evaluation_warnings -= logical_or_expr == truthvalue_true_node;
6776
6777   /* Build the conditional-expression.  */
6778   return build_x_conditional_expr (logical_or_expr,
6779                                    expr,
6780                                    assignment_expr,
6781                                    tf_warning_or_error);
6782 }
6783
6784 /* Parse an assignment-expression.
6785
6786    assignment-expression:
6787      conditional-expression
6788      logical-or-expression assignment-operator assignment_expression
6789      throw-expression
6790
6791    CAST_P is true if this expression is the target of a cast.
6792
6793    Returns a representation for the expression.  */
6794
6795 static tree
6796 cp_parser_assignment_expression (cp_parser* parser, bool cast_p,
6797                                  cp_id_kind * pidk)
6798 {
6799   tree expr;
6800
6801   /* If the next token is the `throw' keyword, then we're looking at
6802      a throw-expression.  */
6803   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
6804     expr = cp_parser_throw_expression (parser);
6805   /* Otherwise, it must be that we are looking at a
6806      logical-or-expression.  */
6807   else
6808     {
6809       /* Parse the binary expressions (logical-or-expression).  */
6810       expr = cp_parser_binary_expression (parser, cast_p, false,
6811                                           PREC_NOT_OPERATOR, pidk);
6812       /* If the next token is a `?' then we're actually looking at a
6813          conditional-expression.  */
6814       if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
6815         return cp_parser_question_colon_clause (parser, expr);
6816       else
6817         {
6818           enum tree_code assignment_operator;
6819
6820           /* If it's an assignment-operator, we're using the second
6821              production.  */
6822           assignment_operator
6823             = cp_parser_assignment_operator_opt (parser);
6824           if (assignment_operator != ERROR_MARK)
6825             {
6826               bool non_constant_p;
6827
6828               /* Parse the right-hand side of the assignment.  */
6829               tree rhs = cp_parser_initializer_clause (parser, &non_constant_p);
6830
6831               if (BRACE_ENCLOSED_INITIALIZER_P (rhs))
6832                 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6833
6834               /* An assignment may not appear in a
6835                  constant-expression.  */
6836               if (cp_parser_non_integral_constant_expression (parser,
6837                                                               NIC_ASSIGNMENT))
6838                 return error_mark_node;
6839               /* Build the assignment expression.  */
6840               expr = build_x_modify_expr (expr,
6841                                           assignment_operator,
6842                                           rhs,
6843                                           tf_warning_or_error);
6844             }
6845         }
6846     }
6847
6848   return expr;
6849 }
6850
6851 /* Parse an (optional) assignment-operator.
6852
6853    assignment-operator: one of
6854      = *= /= %= += -= >>= <<= &= ^= |=
6855
6856    GNU Extension:
6857
6858    assignment-operator: one of
6859      <?= >?=
6860
6861    If the next token is an assignment operator, the corresponding tree
6862    code is returned, and the token is consumed.  For example, for
6863    `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
6864    NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
6865    TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
6866    operator, ERROR_MARK is returned.  */
6867
6868 static enum tree_code
6869 cp_parser_assignment_operator_opt (cp_parser* parser)
6870 {
6871   enum tree_code op;
6872   cp_token *token;
6873
6874   /* Peek at the next token.  */
6875   token = cp_lexer_peek_token (parser->lexer);
6876
6877   switch (token->type)
6878     {
6879     case CPP_EQ:
6880       op = NOP_EXPR;
6881       break;
6882
6883     case CPP_MULT_EQ:
6884       op = MULT_EXPR;
6885       break;
6886
6887     case CPP_DIV_EQ:
6888       op = TRUNC_DIV_EXPR;
6889       break;
6890
6891     case CPP_MOD_EQ:
6892       op = TRUNC_MOD_EXPR;
6893       break;
6894
6895     case CPP_PLUS_EQ:
6896       op = PLUS_EXPR;
6897       break;
6898
6899     case CPP_MINUS_EQ:
6900       op = MINUS_EXPR;
6901       break;
6902
6903     case CPP_RSHIFT_EQ:
6904       op = RSHIFT_EXPR;
6905       break;
6906
6907     case CPP_LSHIFT_EQ:
6908       op = LSHIFT_EXPR;
6909       break;
6910
6911     case CPP_AND_EQ:
6912       op = BIT_AND_EXPR;
6913       break;
6914
6915     case CPP_XOR_EQ:
6916       op = BIT_XOR_EXPR;
6917       break;
6918
6919     case CPP_OR_EQ:
6920       op = BIT_IOR_EXPR;
6921       break;
6922
6923     default:
6924       /* Nothing else is an assignment operator.  */
6925       op = ERROR_MARK;
6926     }
6927
6928   /* If it was an assignment operator, consume it.  */
6929   if (op != ERROR_MARK)
6930     cp_lexer_consume_token (parser->lexer);
6931
6932   return op;
6933 }
6934
6935 /* Parse an expression.
6936
6937    expression:
6938      assignment-expression
6939      expression , assignment-expression
6940
6941    CAST_P is true if this expression is the target of a cast.
6942
6943    Returns a representation of the expression.  */
6944
6945 static tree
6946 cp_parser_expression (cp_parser* parser, bool cast_p, cp_id_kind * pidk)
6947 {
6948   tree expression = NULL_TREE;
6949
6950   while (true)
6951     {
6952       tree assignment_expression;
6953
6954       /* Parse the next assignment-expression.  */
6955       assignment_expression
6956         = cp_parser_assignment_expression (parser, cast_p, pidk);
6957       /* If this is the first assignment-expression, we can just
6958          save it away.  */
6959       if (!expression)
6960         expression = assignment_expression;
6961       else
6962         expression = build_x_compound_expr (expression,
6963                                             assignment_expression,
6964                                             tf_warning_or_error);
6965       /* If the next token is not a comma, then we are done with the
6966          expression.  */
6967       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
6968         break;
6969       /* Consume the `,'.  */
6970       cp_lexer_consume_token (parser->lexer);
6971       /* A comma operator cannot appear in a constant-expression.  */
6972       if (cp_parser_non_integral_constant_expression (parser, NIC_COMMA))
6973         expression = error_mark_node;
6974     }
6975
6976   return expression;
6977 }
6978
6979 /* Parse a constant-expression.
6980
6981    constant-expression:
6982      conditional-expression
6983
6984   If ALLOW_NON_CONSTANT_P a non-constant expression is silently
6985   accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
6986   constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
6987   is false, NON_CONSTANT_P should be NULL.  */
6988
6989 static tree
6990 cp_parser_constant_expression (cp_parser* parser,
6991                                bool allow_non_constant_p,
6992                                bool *non_constant_p)
6993 {
6994   bool saved_integral_constant_expression_p;
6995   bool saved_allow_non_integral_constant_expression_p;
6996   bool saved_non_integral_constant_expression_p;
6997   tree expression;
6998
6999   /* It might seem that we could simply parse the
7000      conditional-expression, and then check to see if it were
7001      TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
7002      one that the compiler can figure out is constant, possibly after
7003      doing some simplifications or optimizations.  The standard has a
7004      precise definition of constant-expression, and we must honor
7005      that, even though it is somewhat more restrictive.
7006
7007      For example:
7008
7009        int i[(2, 3)];
7010
7011      is not a legal declaration, because `(2, 3)' is not a
7012      constant-expression.  The `,' operator is forbidden in a
7013      constant-expression.  However, GCC's constant-folding machinery
7014      will fold this operation to an INTEGER_CST for `3'.  */
7015
7016   /* Save the old settings.  */
7017   saved_integral_constant_expression_p = parser->integral_constant_expression_p;
7018   saved_allow_non_integral_constant_expression_p
7019     = parser->allow_non_integral_constant_expression_p;
7020   saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
7021   /* We are now parsing a constant-expression.  */
7022   parser->integral_constant_expression_p = true;
7023   parser->allow_non_integral_constant_expression_p
7024     = (allow_non_constant_p || cxx_dialect >= cxx0x);
7025   parser->non_integral_constant_expression_p = false;
7026   /* Although the grammar says "conditional-expression", we parse an
7027      "assignment-expression", which also permits "throw-expression"
7028      and the use of assignment operators.  In the case that
7029      ALLOW_NON_CONSTANT_P is false, we get better errors than we would
7030      otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
7031      actually essential that we look for an assignment-expression.
7032      For example, cp_parser_initializer_clauses uses this function to
7033      determine whether a particular assignment-expression is in fact
7034      constant.  */
7035   expression = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
7036   /* Restore the old settings.  */
7037   parser->integral_constant_expression_p
7038     = saved_integral_constant_expression_p;
7039   parser->allow_non_integral_constant_expression_p
7040     = saved_allow_non_integral_constant_expression_p;
7041   if (cxx_dialect >= cxx0x)
7042     {
7043       /* Require an rvalue constant expression here; that's what our
7044          callers expect.  Reference constant expressions are handled
7045          separately in e.g. cp_parser_template_argument.  */
7046       bool is_const = potential_rvalue_constant_expression (expression);
7047       parser->non_integral_constant_expression_p = !is_const;
7048       if (!is_const && !allow_non_constant_p)
7049         require_potential_rvalue_constant_expression (expression);
7050     }
7051   if (allow_non_constant_p)
7052     *non_constant_p = parser->non_integral_constant_expression_p;
7053   parser->non_integral_constant_expression_p
7054     = saved_non_integral_constant_expression_p;
7055
7056   return expression;
7057 }
7058
7059 /* Parse __builtin_offsetof.
7060
7061    offsetof-expression:
7062      "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
7063
7064    offsetof-member-designator:
7065      id-expression
7066      | offsetof-member-designator "." id-expression
7067      | offsetof-member-designator "[" expression "]"
7068      | offsetof-member-designator "->" id-expression  */
7069
7070 static tree
7071 cp_parser_builtin_offsetof (cp_parser *parser)
7072 {
7073   int save_ice_p, save_non_ice_p;
7074   tree type, expr;
7075   cp_id_kind dummy;
7076   cp_token *token;
7077
7078   /* We're about to accept non-integral-constant things, but will
7079      definitely yield an integral constant expression.  Save and
7080      restore these values around our local parsing.  */
7081   save_ice_p = parser->integral_constant_expression_p;
7082   save_non_ice_p = parser->non_integral_constant_expression_p;
7083
7084   /* Consume the "__builtin_offsetof" token.  */
7085   cp_lexer_consume_token (parser->lexer);
7086   /* Consume the opening `('.  */
7087   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
7088   /* Parse the type-id.  */
7089   type = cp_parser_type_id (parser);
7090   /* Look for the `,'.  */
7091   cp_parser_require (parser, CPP_COMMA, RT_COMMA);
7092   token = cp_lexer_peek_token (parser->lexer);
7093
7094   /* Build the (type *)null that begins the traditional offsetof macro.  */
7095   expr = build_static_cast (build_pointer_type (type), null_pointer_node,
7096                             tf_warning_or_error);
7097
7098   /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
7099   expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
7100                                                  true, &dummy, token->location);
7101   while (true)
7102     {
7103       token = cp_lexer_peek_token (parser->lexer);
7104       switch (token->type)
7105         {
7106         case CPP_OPEN_SQUARE:
7107           /* offsetof-member-designator "[" expression "]" */
7108           expr = cp_parser_postfix_open_square_expression (parser, expr, true);
7109           break;
7110
7111         case CPP_DEREF:
7112           /* offsetof-member-designator "->" identifier */
7113           expr = grok_array_decl (expr, integer_zero_node);
7114           /* FALLTHRU */
7115
7116         case CPP_DOT:
7117           /* offsetof-member-designator "." identifier */
7118           cp_lexer_consume_token (parser->lexer);
7119           expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT,
7120                                                          expr, true, &dummy,
7121                                                          token->location);
7122           break;
7123
7124         case CPP_CLOSE_PAREN:
7125           /* Consume the ")" token.  */
7126           cp_lexer_consume_token (parser->lexer);
7127           goto success;
7128
7129         default:
7130           /* Error.  We know the following require will fail, but
7131              that gives the proper error message.  */
7132           cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7133           cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
7134           expr = error_mark_node;
7135           goto failure;
7136         }
7137     }
7138
7139  success:
7140   /* If we're processing a template, we can't finish the semantics yet.
7141      Otherwise we can fold the entire expression now.  */
7142   if (processing_template_decl)
7143     expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
7144   else
7145     expr = finish_offsetof (expr);
7146
7147  failure:
7148   parser->integral_constant_expression_p = save_ice_p;
7149   parser->non_integral_constant_expression_p = save_non_ice_p;
7150
7151   return expr;
7152 }
7153
7154 /* Parse a trait expression.
7155
7156    Returns a representation of the expression, the underlying type
7157    of the type at issue when KEYWORD is RID_UNDERLYING_TYPE.  */
7158
7159 static tree
7160 cp_parser_trait_expr (cp_parser* parser, enum rid keyword)
7161 {
7162   cp_trait_kind kind;
7163   tree type1, type2 = NULL_TREE;
7164   bool binary = false;
7165   cp_decl_specifier_seq decl_specs;
7166
7167   switch (keyword)
7168     {
7169     case RID_HAS_NOTHROW_ASSIGN:
7170       kind = CPTK_HAS_NOTHROW_ASSIGN;
7171       break;
7172     case RID_HAS_NOTHROW_CONSTRUCTOR:
7173       kind = CPTK_HAS_NOTHROW_CONSTRUCTOR;
7174       break;
7175     case RID_HAS_NOTHROW_COPY:
7176       kind = CPTK_HAS_NOTHROW_COPY;
7177       break;
7178     case RID_HAS_TRIVIAL_ASSIGN:
7179       kind = CPTK_HAS_TRIVIAL_ASSIGN;
7180       break;
7181     case RID_HAS_TRIVIAL_CONSTRUCTOR:
7182       kind = CPTK_HAS_TRIVIAL_CONSTRUCTOR;
7183       break;
7184     case RID_HAS_TRIVIAL_COPY:
7185       kind = CPTK_HAS_TRIVIAL_COPY;
7186       break;
7187     case RID_HAS_TRIVIAL_DESTRUCTOR:
7188       kind = CPTK_HAS_TRIVIAL_DESTRUCTOR;
7189       break;
7190     case RID_HAS_VIRTUAL_DESTRUCTOR:
7191       kind = CPTK_HAS_VIRTUAL_DESTRUCTOR;
7192       break;
7193     case RID_IS_ABSTRACT:
7194       kind = CPTK_IS_ABSTRACT;
7195       break;
7196     case RID_IS_BASE_OF:
7197       kind = CPTK_IS_BASE_OF;
7198       binary = true;
7199       break;
7200     case RID_IS_CLASS:
7201       kind = CPTK_IS_CLASS;
7202       break;
7203     case RID_IS_CONVERTIBLE_TO:
7204       kind = CPTK_IS_CONVERTIBLE_TO;
7205       binary = true;
7206       break;
7207     case RID_IS_EMPTY:
7208       kind = CPTK_IS_EMPTY;
7209       break;
7210     case RID_IS_ENUM:
7211       kind = CPTK_IS_ENUM;
7212       break;
7213     case RID_IS_LITERAL_TYPE:
7214       kind = CPTK_IS_LITERAL_TYPE;
7215       break;
7216     case RID_IS_POD:
7217       kind = CPTK_IS_POD;
7218       break;
7219     case RID_IS_POLYMORPHIC:
7220       kind = CPTK_IS_POLYMORPHIC;
7221       break;
7222     case RID_IS_STD_LAYOUT:
7223       kind = CPTK_IS_STD_LAYOUT;
7224       break;
7225     case RID_IS_TRIVIAL:
7226       kind = CPTK_IS_TRIVIAL;
7227       break;
7228     case RID_IS_UNION:
7229       kind = CPTK_IS_UNION;
7230       break;
7231     case RID_UNDERLYING_TYPE:
7232       kind = CPTK_UNDERLYING_TYPE;
7233       break;
7234     default:
7235       gcc_unreachable ();
7236     }
7237
7238   /* Consume the token.  */
7239   cp_lexer_consume_token (parser->lexer);
7240
7241   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
7242
7243   type1 = cp_parser_type_id (parser);
7244
7245   if (type1 == error_mark_node)
7246     return error_mark_node;
7247
7248   /* Build a trivial decl-specifier-seq.  */
7249   clear_decl_specs (&decl_specs);
7250   decl_specs.type = type1;
7251
7252   /* Call grokdeclarator to figure out what type this is.  */
7253   type1 = grokdeclarator (NULL, &decl_specs, TYPENAME,
7254                           /*initialized=*/0, /*attrlist=*/NULL);
7255
7256   if (binary)
7257     {
7258       cp_parser_require (parser, CPP_COMMA, RT_COMMA);
7259  
7260       type2 = cp_parser_type_id (parser);
7261
7262       if (type2 == error_mark_node)
7263         return error_mark_node;
7264
7265       /* Build a trivial decl-specifier-seq.  */
7266       clear_decl_specs (&decl_specs);
7267       decl_specs.type = type2;
7268
7269       /* Call grokdeclarator to figure out what type this is.  */
7270       type2 = grokdeclarator (NULL, &decl_specs, TYPENAME,
7271                               /*initialized=*/0, /*attrlist=*/NULL);
7272     }
7273
7274   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7275
7276   /* Complete the trait expression, which may mean either processing
7277      the trait expr now or saving it for template instantiation.  */
7278   return kind != CPTK_UNDERLYING_TYPE
7279     ? finish_trait_expr (kind, type1, type2)
7280     : finish_underlying_type (type1);
7281 }
7282
7283 /* Lambdas that appear in variable initializer or default argument scope
7284    get that in their mangling, so we need to record it.  We might as well
7285    use the count for function and namespace scopes as well.  */
7286 static GTY(()) tree lambda_scope;
7287 static GTY(()) int lambda_count;
7288 typedef struct GTY(()) tree_int
7289 {
7290   tree t;
7291   int i;
7292 } tree_int;
7293 DEF_VEC_O(tree_int);
7294 DEF_VEC_ALLOC_O(tree_int,gc);
7295 static GTY(()) VEC(tree_int,gc) *lambda_scope_stack;
7296
7297 static void
7298 start_lambda_scope (tree decl)
7299 {
7300   tree_int ti;
7301   gcc_assert (decl);
7302   /* Once we're inside a function, we ignore other scopes and just push
7303      the function again so that popping works properly.  */
7304   if (current_function_decl && TREE_CODE (decl) != FUNCTION_DECL)
7305     decl = current_function_decl;
7306   ti.t = lambda_scope;
7307   ti.i = lambda_count;
7308   VEC_safe_push (tree_int, gc, lambda_scope_stack, &ti);
7309   if (lambda_scope != decl)
7310     {
7311       /* Don't reset the count if we're still in the same function.  */
7312       lambda_scope = decl;
7313       lambda_count = 0;
7314     }
7315 }
7316
7317 static void
7318 record_lambda_scope (tree lambda)
7319 {
7320   LAMBDA_EXPR_EXTRA_SCOPE (lambda) = lambda_scope;
7321   LAMBDA_EXPR_DISCRIMINATOR (lambda) = lambda_count++;
7322 }
7323
7324 static void
7325 finish_lambda_scope (void)
7326 {
7327   tree_int *p = VEC_last (tree_int, lambda_scope_stack);
7328   if (lambda_scope != p->t)
7329     {
7330       lambda_scope = p->t;
7331       lambda_count = p->i;
7332     }
7333   VEC_pop (tree_int, lambda_scope_stack);
7334 }
7335
7336 /* Parse a lambda expression.
7337
7338    lambda-expression:
7339      lambda-introducer lambda-declarator [opt] compound-statement
7340
7341    Returns a representation of the expression.  */
7342
7343 static tree
7344 cp_parser_lambda_expression (cp_parser* parser)
7345 {
7346   tree lambda_expr = build_lambda_expr ();
7347   tree type;
7348   bool ok;
7349
7350   LAMBDA_EXPR_LOCATION (lambda_expr)
7351     = cp_lexer_peek_token (parser->lexer)->location;
7352
7353   if (cp_unevaluated_operand)
7354     error_at (LAMBDA_EXPR_LOCATION (lambda_expr),
7355               "lambda-expression in unevaluated context");
7356
7357   /* We may be in the middle of deferred access check.  Disable
7358      it now.  */
7359   push_deferring_access_checks (dk_no_deferred);
7360
7361   cp_parser_lambda_introducer (parser, lambda_expr);
7362
7363   type = begin_lambda_type (lambda_expr);
7364
7365   record_lambda_scope (lambda_expr);
7366
7367   /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
7368   determine_visibility (TYPE_NAME (type));
7369
7370   /* Now that we've started the type, add the capture fields for any
7371      explicit captures.  */
7372   register_capture_members (LAMBDA_EXPR_CAPTURE_LIST (lambda_expr));
7373
7374   {
7375     /* Inside the class, surrounding template-parameter-lists do not apply.  */
7376     unsigned int saved_num_template_parameter_lists
7377         = parser->num_template_parameter_lists;
7378
7379     parser->num_template_parameter_lists = 0;
7380
7381     /* By virtue of defining a local class, a lambda expression has access to
7382        the private variables of enclosing classes.  */
7383
7384     ok = cp_parser_lambda_declarator_opt (parser, lambda_expr);
7385
7386     if (ok)
7387       cp_parser_lambda_body (parser, lambda_expr);
7388     else if (cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
7389       cp_parser_skip_to_end_of_block_or_statement (parser);
7390
7391     /* The capture list was built up in reverse order; fix that now.  */
7392     {
7393       tree newlist = NULL_TREE;
7394       tree elt, next;
7395
7396       for (elt = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
7397            elt; elt = next)
7398         {
7399           tree field = TREE_PURPOSE (elt);
7400           char *buf;
7401
7402           next = TREE_CHAIN (elt);
7403           TREE_CHAIN (elt) = newlist;
7404           newlist = elt;
7405
7406           /* Also add __ to the beginning of the field name so that code
7407              outside the lambda body can't see the captured name.  We could
7408              just remove the name entirely, but this is more useful for
7409              debugging.  */
7410           if (field == LAMBDA_EXPR_THIS_CAPTURE (lambda_expr))
7411             /* The 'this' capture already starts with __.  */
7412             continue;
7413
7414           buf = (char *) alloca (IDENTIFIER_LENGTH (DECL_NAME (field)) + 3);
7415           buf[1] = buf[0] = '_';
7416           memcpy (buf + 2, IDENTIFIER_POINTER (DECL_NAME (field)),
7417                   IDENTIFIER_LENGTH (DECL_NAME (field)) + 1);
7418           DECL_NAME (field) = get_identifier (buf);
7419         }
7420       LAMBDA_EXPR_CAPTURE_LIST (lambda_expr) = newlist;
7421     }
7422
7423     if (ok)
7424       maybe_add_lambda_conv_op (type);
7425
7426     type = finish_struct (type, /*attributes=*/NULL_TREE);
7427
7428     parser->num_template_parameter_lists = saved_num_template_parameter_lists;
7429   }
7430
7431   pop_deferring_access_checks ();
7432
7433   if (ok)
7434     return build_lambda_object (lambda_expr);
7435   else
7436     return error_mark_node;
7437 }
7438
7439 /* Parse the beginning of a lambda expression.
7440
7441    lambda-introducer:
7442      [ lambda-capture [opt] ]
7443
7444    LAMBDA_EXPR is the current representation of the lambda expression.  */
7445
7446 static void
7447 cp_parser_lambda_introducer (cp_parser* parser, tree lambda_expr)
7448 {
7449   /* Need commas after the first capture.  */
7450   bool first = true;
7451
7452   /* Eat the leading `['.  */
7453   cp_parser_require (parser, CPP_OPEN_SQUARE, RT_OPEN_SQUARE);
7454
7455   /* Record default capture mode.  "[&" "[=" "[&," "[=,"  */
7456   if (cp_lexer_next_token_is (parser->lexer, CPP_AND)
7457       && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_NAME)
7458     LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) = CPLD_REFERENCE;
7459   else if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
7460     LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) = CPLD_COPY;
7461
7462   if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) != CPLD_NONE)
7463     {
7464       cp_lexer_consume_token (parser->lexer);
7465       first = false;
7466     }
7467
7468   while (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_SQUARE))
7469     {
7470       cp_token* capture_token;
7471       tree capture_id;
7472       tree capture_init_expr;
7473       cp_id_kind idk = CP_ID_KIND_NONE;
7474       bool explicit_init_p = false;
7475
7476       enum capture_kind_type
7477       {
7478         BY_COPY,
7479         BY_REFERENCE
7480       };
7481       enum capture_kind_type capture_kind = BY_COPY;
7482
7483       if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
7484         {
7485           error ("expected end of capture-list");
7486           return;
7487         }
7488
7489       if (first)
7490         first = false;
7491       else
7492         cp_parser_require (parser, CPP_COMMA, RT_COMMA);
7493
7494       /* Possibly capture `this'.  */
7495       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THIS))
7496         {
7497           cp_lexer_consume_token (parser->lexer);
7498           add_capture (lambda_expr,
7499                        /*id=*/get_identifier ("__this"),
7500                        /*initializer=*/finish_this_expr(),
7501                        /*by_reference_p=*/false,
7502                        explicit_init_p);
7503           continue;
7504         }
7505
7506       /* Remember whether we want to capture as a reference or not.  */
7507       if (cp_lexer_next_token_is (parser->lexer, CPP_AND))
7508         {
7509           capture_kind = BY_REFERENCE;
7510           cp_lexer_consume_token (parser->lexer);
7511         }
7512
7513       /* Get the identifier.  */
7514       capture_token = cp_lexer_peek_token (parser->lexer);
7515       capture_id = cp_parser_identifier (parser);
7516
7517       if (capture_id == error_mark_node)
7518         /* Would be nice to have a cp_parser_skip_to_closing_x for general
7519            delimiters, but I modified this to stop on unnested ']' as well.  It
7520            was already changed to stop on unnested '}', so the
7521            "closing_parenthesis" name is no more misleading with my change.  */
7522         {
7523           cp_parser_skip_to_closing_parenthesis (parser,
7524                                                  /*recovering=*/true,
7525                                                  /*or_comma=*/true,
7526                                                  /*consume_paren=*/true);
7527           break;
7528         }
7529
7530       /* Find the initializer for this capture.  */
7531       if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
7532         {
7533           /* An explicit expression exists.  */
7534           cp_lexer_consume_token (parser->lexer);
7535           pedwarn (input_location, OPT_pedantic,
7536                    "ISO C++ does not allow initializers "
7537                    "in lambda expression capture lists");
7538           capture_init_expr = cp_parser_assignment_expression (parser,
7539                                                                /*cast_p=*/true,
7540                                                                &idk);
7541           explicit_init_p = true;
7542         }
7543       else
7544         {
7545           const char* error_msg;
7546
7547           /* Turn the identifier into an id-expression.  */
7548           capture_init_expr
7549             = cp_parser_lookup_name
7550                 (parser,
7551                  capture_id,
7552                  none_type,
7553                  /*is_template=*/false,
7554                  /*is_namespace=*/false,
7555                  /*check_dependency=*/true,
7556                  /*ambiguous_decls=*/NULL,
7557                  capture_token->location);
7558
7559           capture_init_expr
7560             = finish_id_expression
7561                 (capture_id,
7562                  capture_init_expr,
7563                  parser->scope,
7564                  &idk,
7565                  /*integral_constant_expression_p=*/false,
7566                  /*allow_non_integral_constant_expression_p=*/false,
7567                  /*non_integral_constant_expression_p=*/NULL,
7568                  /*template_p=*/false,
7569                  /*done=*/true,
7570                  /*address_p=*/false,
7571                  /*template_arg_p=*/false,
7572                  &error_msg,
7573                  capture_token->location);
7574         }
7575
7576       if (TREE_CODE (capture_init_expr) == IDENTIFIER_NODE)
7577         capture_init_expr
7578           = unqualified_name_lookup_error (capture_init_expr);
7579
7580       add_capture (lambda_expr,
7581                    capture_id,
7582                    capture_init_expr,
7583                    /*by_reference_p=*/capture_kind == BY_REFERENCE,
7584                    explicit_init_p);
7585     }
7586
7587   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
7588 }
7589
7590 /* Parse the (optional) middle of a lambda expression.
7591
7592    lambda-declarator:
7593      ( parameter-declaration-clause [opt] )
7594        attribute-specifier [opt]
7595        mutable [opt]
7596        exception-specification [opt]
7597        lambda-return-type-clause [opt]
7598
7599    LAMBDA_EXPR is the current representation of the lambda expression.  */
7600
7601 static bool
7602 cp_parser_lambda_declarator_opt (cp_parser* parser, tree lambda_expr)
7603 {
7604   /* 5.1.1.4 of the standard says:
7605        If a lambda-expression does not include a lambda-declarator, it is as if
7606        the lambda-declarator were ().
7607      This means an empty parameter list, no attributes, and no exception
7608      specification.  */
7609   tree param_list = void_list_node;
7610   tree attributes = NULL_TREE;
7611   tree exception_spec = NULL_TREE;
7612   tree t;
7613
7614   /* The lambda-declarator is optional, but must begin with an opening
7615      parenthesis if present.  */
7616   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
7617     {
7618       cp_lexer_consume_token (parser->lexer);
7619
7620       begin_scope (sk_function_parms, /*entity=*/NULL_TREE);
7621
7622       /* Parse parameters.  */
7623       param_list = cp_parser_parameter_declaration_clause (parser);
7624
7625       /* Default arguments shall not be specified in the
7626          parameter-declaration-clause of a lambda-declarator.  */
7627       for (t = param_list; t; t = TREE_CHAIN (t))
7628         if (TREE_PURPOSE (t))
7629           pedwarn (DECL_SOURCE_LOCATION (TREE_VALUE (t)), OPT_pedantic,
7630                    "default argument specified for lambda parameter");
7631
7632       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
7633
7634       attributes = cp_parser_attributes_opt (parser);
7635
7636       /* Parse optional `mutable' keyword.  */
7637       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_MUTABLE))
7638         {
7639           cp_lexer_consume_token (parser->lexer);
7640           LAMBDA_EXPR_MUTABLE_P (lambda_expr) = 1;
7641         }
7642
7643       /* Parse optional exception specification.  */
7644       exception_spec = cp_parser_exception_specification_opt (parser);
7645
7646       /* Parse optional trailing return type.  */
7647       if (cp_lexer_next_token_is (parser->lexer, CPP_DEREF))
7648         {
7649           cp_lexer_consume_token (parser->lexer);
7650           LAMBDA_EXPR_RETURN_TYPE (lambda_expr) = cp_parser_type_id (parser);
7651         }
7652
7653       /* The function parameters must be in scope all the way until after the
7654          trailing-return-type in case of decltype.  */
7655       for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
7656         pop_binding (DECL_NAME (t), t);
7657
7658       leave_scope ();
7659     }
7660
7661   /* Create the function call operator.
7662
7663      Messing with declarators like this is no uglier than building up the
7664      FUNCTION_DECL by hand, and this is less likely to get out of sync with
7665      other code.  */
7666   {
7667     cp_decl_specifier_seq return_type_specs;
7668     cp_declarator* declarator;
7669     tree fco;
7670     int quals;
7671     void *p;
7672
7673     clear_decl_specs (&return_type_specs);
7674     if (LAMBDA_EXPR_RETURN_TYPE (lambda_expr))
7675       return_type_specs.type = LAMBDA_EXPR_RETURN_TYPE (lambda_expr);
7676     else
7677       /* Maybe we will deduce the return type later, but we can use void
7678          as a placeholder return type anyways.  */
7679       return_type_specs.type = void_type_node;
7680
7681     p = obstack_alloc (&declarator_obstack, 0);
7682
7683     declarator = make_id_declarator (NULL_TREE, ansi_opname (CALL_EXPR),
7684                                      sfk_none);
7685
7686     quals = (LAMBDA_EXPR_MUTABLE_P (lambda_expr)
7687              ? TYPE_UNQUALIFIED : TYPE_QUAL_CONST);
7688     declarator = make_call_declarator (declarator, param_list, quals,
7689                                        VIRT_SPEC_UNSPECIFIED,
7690                                        exception_spec,
7691                                        /*late_return_type=*/NULL_TREE);
7692     declarator->id_loc = LAMBDA_EXPR_LOCATION (lambda_expr);
7693
7694     fco = grokmethod (&return_type_specs,
7695                       declarator,
7696                       attributes);
7697     if (fco != error_mark_node)
7698       {
7699         DECL_INITIALIZED_IN_CLASS_P (fco) = 1;
7700         DECL_ARTIFICIAL (fco) = 1;
7701       }
7702
7703     finish_member_declaration (fco);
7704
7705     obstack_free (&declarator_obstack, p);
7706
7707     return (fco != error_mark_node);
7708   }
7709 }
7710
7711 /* Parse the body of a lambda expression, which is simply
7712
7713    compound-statement
7714
7715    but which requires special handling.
7716    LAMBDA_EXPR is the current representation of the lambda expression.  */
7717
7718 static void
7719 cp_parser_lambda_body (cp_parser* parser, tree lambda_expr)
7720 {
7721   bool nested = (current_function_decl != NULL_TREE);
7722   if (nested)
7723     push_function_context ();
7724
7725   /* Finish the function call operator
7726      - class_specifier
7727      + late_parsing_for_member
7728      + function_definition_after_declarator
7729      + ctor_initializer_opt_and_function_body  */
7730   {
7731     tree fco = lambda_function (lambda_expr);
7732     tree body;
7733     bool done = false;
7734     tree compound_stmt;
7735
7736     /* Let the front end know that we are going to be defining this
7737        function.  */
7738     start_preparsed_function (fco,
7739                               NULL_TREE,
7740                               SF_PRE_PARSED | SF_INCLASS_INLINE);
7741
7742     start_lambda_scope (fco);
7743     body = begin_function_body ();
7744
7745     if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
7746       goto out;
7747
7748     compound_stmt = begin_compound_stmt (0);
7749
7750     /* 5.1.1.4 of the standard says:
7751          If a lambda-expression does not include a trailing-return-type, it
7752          is as if the trailing-return-type denotes the following type:
7753           * if the compound-statement is of the form
7754                { return attribute-specifier [opt] expression ; }
7755              the type of the returned expression after lvalue-to-rvalue
7756              conversion (_conv.lval_ 4.1), array-to-pointer conversion
7757              (_conv.array_ 4.2), and function-to-pointer conversion
7758              (_conv.func_ 4.3);
7759           * otherwise, void.  */
7760
7761     /* In a lambda that has neither a lambda-return-type-clause
7762        nor a deducible form, errors should be reported for return statements
7763        in the body.  Since we used void as the placeholder return type, parsing
7764        the body as usual will give such desired behavior.  */
7765     if (!LAMBDA_EXPR_RETURN_TYPE (lambda_expr)
7766         && cp_lexer_peek_nth_token (parser->lexer, 1)->keyword == RID_RETURN
7767         && cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SEMICOLON)
7768       {
7769         tree expr = NULL_TREE;
7770         cp_id_kind idk = CP_ID_KIND_NONE;
7771
7772         /* Parse tentatively in case there's more after the initial return
7773            statement.  */
7774         cp_parser_parse_tentatively (parser);
7775
7776         cp_parser_require_keyword (parser, RID_RETURN, RT_RETURN);
7777
7778         expr = cp_parser_expression (parser, /*cast_p=*/false, &idk);
7779
7780         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
7781         cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
7782
7783         if (cp_parser_parse_definitely (parser))
7784           {
7785             apply_lambda_return_type (lambda_expr, lambda_return_type (expr));
7786
7787             /* Will get error here if type not deduced yet.  */
7788             finish_return_stmt (expr);
7789
7790             done = true;
7791           }
7792       }
7793
7794     if (!done)
7795       {
7796         if (!LAMBDA_EXPR_RETURN_TYPE (lambda_expr))
7797           LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda_expr) = true;
7798         while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
7799           cp_parser_label_declaration (parser);
7800         cp_parser_statement_seq_opt (parser, NULL_TREE);
7801         cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
7802         LAMBDA_EXPR_DEDUCE_RETURN_TYPE_P (lambda_expr) = false;
7803       }
7804
7805     finish_compound_stmt (compound_stmt);
7806
7807   out:
7808     finish_function_body (body);
7809     finish_lambda_scope ();
7810
7811     /* Finish the function and generate code for it if necessary.  */
7812     expand_or_defer_fn (finish_function (/*inline*/2));
7813   }
7814
7815   if (nested)
7816     pop_function_context();
7817 }
7818
7819 /* Statements [gram.stmt.stmt]  */
7820
7821 /* Parse a statement.
7822
7823    statement:
7824      labeled-statement
7825      expression-statement
7826      compound-statement
7827      selection-statement
7828      iteration-statement
7829      jump-statement
7830      declaration-statement
7831      try-block
7832
7833   IN_COMPOUND is true when the statement is nested inside a
7834   cp_parser_compound_statement; this matters for certain pragmas.
7835
7836   If IF_P is not NULL, *IF_P is set to indicate whether the statement
7837   is a (possibly labeled) if statement which is not enclosed in braces
7838   and has an else clause.  This is used to implement -Wparentheses.  */
7839
7840 static void
7841 cp_parser_statement (cp_parser* parser, tree in_statement_expr,
7842                      bool in_compound, bool *if_p)
7843 {
7844   tree statement;
7845   cp_token *token;
7846   location_t statement_location;
7847
7848  restart:
7849   if (if_p != NULL)
7850     *if_p = false;
7851   /* There is no statement yet.  */
7852   statement = NULL_TREE;
7853   /* Peek at the next token.  */
7854   token = cp_lexer_peek_token (parser->lexer);
7855   /* Remember the location of the first token in the statement.  */
7856   statement_location = token->location;
7857   /* If this is a keyword, then that will often determine what kind of
7858      statement we have.  */
7859   if (token->type == CPP_KEYWORD)
7860     {
7861       enum rid keyword = token->keyword;
7862
7863       switch (keyword)
7864         {
7865         case RID_CASE:
7866         case RID_DEFAULT:
7867           /* Looks like a labeled-statement with a case label.
7868              Parse the label, and then use tail recursion to parse
7869              the statement.  */
7870           cp_parser_label_for_labeled_statement (parser);
7871           goto restart;
7872
7873         case RID_IF:
7874         case RID_SWITCH:
7875           statement = cp_parser_selection_statement (parser, if_p);
7876           break;
7877
7878         case RID_WHILE:
7879         case RID_DO:
7880         case RID_FOR:
7881           statement = cp_parser_iteration_statement (parser);
7882           break;
7883
7884         case RID_BREAK:
7885         case RID_CONTINUE:
7886         case RID_RETURN:
7887         case RID_GOTO:
7888           statement = cp_parser_jump_statement (parser);
7889           break;
7890
7891           /* Objective-C++ exception-handling constructs.  */
7892         case RID_AT_TRY:
7893         case RID_AT_CATCH:
7894         case RID_AT_FINALLY:
7895         case RID_AT_SYNCHRONIZED:
7896         case RID_AT_THROW:
7897           statement = cp_parser_objc_statement (parser);
7898           break;
7899
7900         case RID_TRY:
7901           statement = cp_parser_try_block (parser);
7902           break;
7903
7904         case RID_NAMESPACE:
7905           /* This must be a namespace alias definition.  */
7906           cp_parser_declaration_statement (parser);
7907           return;
7908           
7909         default:
7910           /* It might be a keyword like `int' that can start a
7911              declaration-statement.  */
7912           break;
7913         }
7914     }
7915   else if (token->type == CPP_NAME)
7916     {
7917       /* If the next token is a `:', then we are looking at a
7918          labeled-statement.  */
7919       token = cp_lexer_peek_nth_token (parser->lexer, 2);
7920       if (token->type == CPP_COLON)
7921         {
7922           /* Looks like a labeled-statement with an ordinary label.
7923              Parse the label, and then use tail recursion to parse
7924              the statement.  */
7925           cp_parser_label_for_labeled_statement (parser);
7926           goto restart;
7927         }
7928     }
7929   /* Anything that starts with a `{' must be a compound-statement.  */
7930   else if (token->type == CPP_OPEN_BRACE)
7931     statement = cp_parser_compound_statement (parser, NULL, false, false);
7932   /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
7933      a statement all its own.  */
7934   else if (token->type == CPP_PRAGMA)
7935     {
7936       /* Only certain OpenMP pragmas are attached to statements, and thus
7937          are considered statements themselves.  All others are not.  In
7938          the context of a compound, accept the pragma as a "statement" and
7939          return so that we can check for a close brace.  Otherwise we
7940          require a real statement and must go back and read one.  */
7941       if (in_compound)
7942         cp_parser_pragma (parser, pragma_compound);
7943       else if (!cp_parser_pragma (parser, pragma_stmt))
7944         goto restart;
7945       return;
7946     }
7947   else if (token->type == CPP_EOF)
7948     {
7949       cp_parser_error (parser, "expected statement");
7950       return;
7951     }
7952
7953   /* Everything else must be a declaration-statement or an
7954      expression-statement.  Try for the declaration-statement
7955      first, unless we are looking at a `;', in which case we know that
7956      we have an expression-statement.  */
7957   if (!statement)
7958     {
7959       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7960         {
7961           cp_parser_parse_tentatively (parser);
7962           /* Try to parse the declaration-statement.  */
7963           cp_parser_declaration_statement (parser);
7964           /* If that worked, we're done.  */
7965           if (cp_parser_parse_definitely (parser))
7966             return;
7967         }
7968       /* Look for an expression-statement instead.  */
7969       statement = cp_parser_expression_statement (parser, in_statement_expr);
7970     }
7971
7972   /* Set the line number for the statement.  */
7973   if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
7974     SET_EXPR_LOCATION (statement, statement_location);
7975 }
7976
7977 /* Parse the label for a labeled-statement, i.e.
7978
7979    identifier :
7980    case constant-expression :
7981    default :
7982
7983    GNU Extension:
7984    case constant-expression ... constant-expression : statement
7985
7986    When a label is parsed without errors, the label is added to the
7987    parse tree by the finish_* functions, so this function doesn't
7988    have to return the label.  */
7989
7990 static void
7991 cp_parser_label_for_labeled_statement (cp_parser* parser)
7992 {
7993   cp_token *token;
7994   tree label = NULL_TREE;
7995   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
7996
7997   /* The next token should be an identifier.  */
7998   token = cp_lexer_peek_token (parser->lexer);
7999   if (token->type != CPP_NAME
8000       && token->type != CPP_KEYWORD)
8001     {
8002       cp_parser_error (parser, "expected labeled-statement");
8003       return;
8004     }
8005
8006   parser->colon_corrects_to_scope_p = false;
8007   switch (token->keyword)
8008     {
8009     case RID_CASE:
8010       {
8011         tree expr, expr_hi;
8012         cp_token *ellipsis;
8013
8014         /* Consume the `case' token.  */
8015         cp_lexer_consume_token (parser->lexer);
8016         /* Parse the constant-expression.  */
8017         expr = cp_parser_constant_expression (parser,
8018                                               /*allow_non_constant_p=*/false,
8019                                               NULL);
8020
8021         ellipsis = cp_lexer_peek_token (parser->lexer);
8022         if (ellipsis->type == CPP_ELLIPSIS)
8023           {
8024             /* Consume the `...' token.  */
8025             cp_lexer_consume_token (parser->lexer);
8026             expr_hi =
8027               cp_parser_constant_expression (parser,
8028                                              /*allow_non_constant_p=*/false,
8029                                              NULL);
8030             /* We don't need to emit warnings here, as the common code
8031                will do this for us.  */
8032           }
8033         else
8034           expr_hi = NULL_TREE;
8035
8036         if (parser->in_switch_statement_p)
8037           finish_case_label (token->location, expr, expr_hi);
8038         else
8039           error_at (token->location,
8040                     "case label %qE not within a switch statement",
8041                     expr);
8042       }
8043       break;
8044
8045     case RID_DEFAULT:
8046       /* Consume the `default' token.  */
8047       cp_lexer_consume_token (parser->lexer);
8048
8049       if (parser->in_switch_statement_p)
8050         finish_case_label (token->location, NULL_TREE, NULL_TREE);
8051       else
8052         error_at (token->location, "case label not within a switch statement");
8053       break;
8054
8055     default:
8056       /* Anything else must be an ordinary label.  */
8057       label = finish_label_stmt (cp_parser_identifier (parser));
8058       break;
8059     }
8060
8061   /* Require the `:' token.  */
8062   cp_parser_require (parser, CPP_COLON, RT_COLON);
8063
8064   /* An ordinary label may optionally be followed by attributes.
8065      However, this is only permitted if the attributes are then
8066      followed by a semicolon.  This is because, for backward
8067      compatibility, when parsing
8068        lab: __attribute__ ((unused)) int i;
8069      we want the attribute to attach to "i", not "lab".  */
8070   if (label != NULL_TREE
8071       && cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
8072     {
8073       tree attrs;
8074
8075       cp_parser_parse_tentatively (parser);
8076       attrs = cp_parser_attributes_opt (parser);
8077       if (attrs == NULL_TREE
8078           || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8079         cp_parser_abort_tentative_parse (parser);
8080       else if (!cp_parser_parse_definitely (parser))
8081         ;
8082       else
8083         cplus_decl_attributes (&label, attrs, 0);
8084     }
8085
8086   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
8087 }
8088
8089 /* Parse an expression-statement.
8090
8091    expression-statement:
8092      expression [opt] ;
8093
8094    Returns the new EXPR_STMT -- or NULL_TREE if the expression
8095    statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
8096    indicates whether this expression-statement is part of an
8097    expression statement.  */
8098
8099 static tree
8100 cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
8101 {
8102   tree statement = NULL_TREE;
8103   cp_token *token = cp_lexer_peek_token (parser->lexer);
8104
8105   /* If the next token is a ';', then there is no expression
8106      statement.  */
8107   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8108     statement = cp_parser_expression (parser, /*cast_p=*/false, NULL);
8109
8110   /* Give a helpful message for "A<T>::type t;" and the like.  */
8111   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
8112       && !cp_parser_uncommitted_to_tentative_parse_p (parser))
8113     {
8114       if (TREE_CODE (statement) == SCOPE_REF)
8115         error_at (token->location, "need %<typename%> before %qE because "
8116                   "%qT is a dependent scope",
8117                   statement, TREE_OPERAND (statement, 0));
8118       else if (is_overloaded_fn (statement)
8119                && DECL_CONSTRUCTOR_P (get_first_fn (statement)))
8120         {
8121           /* A::A a; */
8122           tree fn = get_first_fn (statement);
8123           error_at (token->location,
8124                     "%<%T::%D%> names the constructor, not the type",
8125                     DECL_CONTEXT (fn), DECL_NAME (fn));
8126         }
8127     }
8128
8129   /* Consume the final `;'.  */
8130   cp_parser_consume_semicolon_at_end_of_statement (parser);
8131
8132   if (in_statement_expr
8133       && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
8134     /* This is the final expression statement of a statement
8135        expression.  */
8136     statement = finish_stmt_expr_expr (statement, in_statement_expr);
8137   else if (statement)
8138     statement = finish_expr_stmt (statement);
8139   else
8140     finish_stmt ();
8141
8142   return statement;
8143 }
8144
8145 /* Parse a compound-statement.
8146
8147    compound-statement:
8148      { statement-seq [opt] }
8149
8150    GNU extension:
8151
8152    compound-statement:
8153      { label-declaration-seq [opt] statement-seq [opt] }
8154
8155    label-declaration-seq:
8156      label-declaration
8157      label-declaration-seq label-declaration
8158
8159    Returns a tree representing the statement.  */
8160
8161 static tree
8162 cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
8163                               bool in_try, bool function_body)
8164 {
8165   tree compound_stmt;
8166
8167   /* Consume the `{'.  */
8168   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
8169     return error_mark_node;
8170   if (DECL_DECLARED_CONSTEXPR_P (current_function_decl)
8171       && !function_body)
8172     pedwarn (input_location, OPT_pedantic,
8173              "compound-statement in constexpr function");
8174   /* Begin the compound-statement.  */
8175   compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
8176   /* If the next keyword is `__label__' we have a label declaration.  */
8177   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
8178     cp_parser_label_declaration (parser);
8179   /* Parse an (optional) statement-seq.  */
8180   cp_parser_statement_seq_opt (parser, in_statement_expr);
8181   /* Finish the compound-statement.  */
8182   finish_compound_stmt (compound_stmt);
8183   /* Consume the `}'.  */
8184   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
8185
8186   return compound_stmt;
8187 }
8188
8189 /* Parse an (optional) statement-seq.
8190
8191    statement-seq:
8192      statement
8193      statement-seq [opt] statement  */
8194
8195 static void
8196 cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
8197 {
8198   /* Scan statements until there aren't any more.  */
8199   while (true)
8200     {
8201       cp_token *token = cp_lexer_peek_token (parser->lexer);
8202
8203       /* If we are looking at a `}', then we have run out of
8204          statements; the same is true if we have reached the end
8205          of file, or have stumbled upon a stray '@end'.  */
8206       if (token->type == CPP_CLOSE_BRACE
8207           || token->type == CPP_EOF
8208           || token->type == CPP_PRAGMA_EOL
8209           || (token->type == CPP_KEYWORD && token->keyword == RID_AT_END))
8210         break;
8211       
8212       /* If we are in a compound statement and find 'else' then
8213          something went wrong.  */
8214       else if (token->type == CPP_KEYWORD && token->keyword == RID_ELSE)
8215         {
8216           if (parser->in_statement & IN_IF_STMT) 
8217             break;
8218           else
8219             {
8220               token = cp_lexer_consume_token (parser->lexer);
8221               error_at (token->location, "%<else%> without a previous %<if%>");
8222             }
8223         }
8224
8225       /* Parse the statement.  */
8226       cp_parser_statement (parser, in_statement_expr, true, NULL);
8227     }
8228 }
8229
8230 /* Parse a selection-statement.
8231
8232    selection-statement:
8233      if ( condition ) statement
8234      if ( condition ) statement else statement
8235      switch ( condition ) statement
8236
8237    Returns the new IF_STMT or SWITCH_STMT.
8238
8239    If IF_P is not NULL, *IF_P is set to indicate whether the statement
8240    is a (possibly labeled) if statement which is not enclosed in
8241    braces and has an else clause.  This is used to implement
8242    -Wparentheses.  */
8243
8244 static tree
8245 cp_parser_selection_statement (cp_parser* parser, bool *if_p)
8246 {
8247   cp_token *token;
8248   enum rid keyword;
8249
8250   if (if_p != NULL)
8251     *if_p = false;
8252
8253   /* Peek at the next token.  */
8254   token = cp_parser_require (parser, CPP_KEYWORD, RT_SELECT);
8255
8256   /* See what kind of keyword it is.  */
8257   keyword = token->keyword;
8258   switch (keyword)
8259     {
8260     case RID_IF:
8261     case RID_SWITCH:
8262       {
8263         tree statement;
8264         tree condition;
8265
8266         /* Look for the `('.  */
8267         if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
8268           {
8269             cp_parser_skip_to_end_of_statement (parser);
8270             return error_mark_node;
8271           }
8272
8273         /* Begin the selection-statement.  */
8274         if (keyword == RID_IF)
8275           statement = begin_if_stmt ();
8276         else
8277           statement = begin_switch_stmt ();
8278
8279         /* Parse the condition.  */
8280         condition = cp_parser_condition (parser);
8281         /* Look for the `)'.  */
8282         if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
8283           cp_parser_skip_to_closing_parenthesis (parser, true, false,
8284                                                  /*consume_paren=*/true);
8285
8286         if (keyword == RID_IF)
8287           {
8288             bool nested_if;
8289             unsigned char in_statement;
8290
8291             /* Add the condition.  */
8292             finish_if_stmt_cond (condition, statement);
8293
8294             /* Parse the then-clause.  */
8295             in_statement = parser->in_statement;
8296             parser->in_statement |= IN_IF_STMT;
8297             if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
8298               {
8299                 location_t loc = cp_lexer_peek_token (parser->lexer)->location;
8300                 add_stmt (build_empty_stmt (loc));
8301                 cp_lexer_consume_token (parser->lexer);
8302                 if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_ELSE))
8303                   warning_at (loc, OPT_Wempty_body, "suggest braces around "
8304                               "empty body in an %<if%> statement");
8305                 nested_if = false;
8306               }
8307             else
8308               cp_parser_implicitly_scoped_statement (parser, &nested_if);
8309             parser->in_statement = in_statement;
8310
8311             finish_then_clause (statement);
8312
8313             /* If the next token is `else', parse the else-clause.  */
8314             if (cp_lexer_next_token_is_keyword (parser->lexer,
8315                                                 RID_ELSE))
8316               {
8317                 /* Consume the `else' keyword.  */
8318                 cp_lexer_consume_token (parser->lexer);
8319                 begin_else_clause (statement);
8320                 /* Parse the else-clause.  */
8321                 if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
8322                   {
8323                     location_t loc;
8324                     loc = cp_lexer_peek_token (parser->lexer)->location;
8325                     warning_at (loc,
8326                                 OPT_Wempty_body, "suggest braces around "
8327                                 "empty body in an %<else%> statement");
8328                     add_stmt (build_empty_stmt (loc));
8329                     cp_lexer_consume_token (parser->lexer);
8330                   }
8331                 else
8332                   cp_parser_implicitly_scoped_statement (parser, NULL);
8333
8334                 finish_else_clause (statement);
8335
8336                 /* If we are currently parsing a then-clause, then
8337                    IF_P will not be NULL.  We set it to true to
8338                    indicate that this if statement has an else clause.
8339                    This may trigger the Wparentheses warning below
8340                    when we get back up to the parent if statement.  */
8341                 if (if_p != NULL)
8342                   *if_p = true;
8343               }
8344             else
8345               {
8346                 /* This if statement does not have an else clause.  If
8347                    NESTED_IF is true, then the then-clause is an if
8348                    statement which does have an else clause.  We warn
8349                    about the potential ambiguity.  */
8350                 if (nested_if)
8351                   warning_at (EXPR_LOCATION (statement), OPT_Wparentheses,
8352                               "suggest explicit braces to avoid ambiguous"
8353                               " %<else%>");
8354               }
8355
8356             /* Now we're all done with the if-statement.  */
8357             finish_if_stmt (statement);
8358           }
8359         else
8360           {
8361             bool in_switch_statement_p;
8362             unsigned char in_statement;
8363
8364             /* Add the condition.  */
8365             finish_switch_cond (condition, statement);
8366
8367             /* Parse the body of the switch-statement.  */
8368             in_switch_statement_p = parser->in_switch_statement_p;
8369             in_statement = parser->in_statement;
8370             parser->in_switch_statement_p = true;
8371             parser->in_statement |= IN_SWITCH_STMT;
8372             cp_parser_implicitly_scoped_statement (parser, NULL);
8373             parser->in_switch_statement_p = in_switch_statement_p;
8374             parser->in_statement = in_statement;
8375
8376             /* Now we're all done with the switch-statement.  */
8377             finish_switch_stmt (statement);
8378           }
8379
8380         return statement;
8381       }
8382       break;
8383
8384     default:
8385       cp_parser_error (parser, "expected selection-statement");
8386       return error_mark_node;
8387     }
8388 }
8389
8390 /* Parse a condition.
8391
8392    condition:
8393      expression
8394      type-specifier-seq declarator = initializer-clause
8395      type-specifier-seq declarator braced-init-list
8396
8397    GNU Extension:
8398
8399    condition:
8400      type-specifier-seq declarator asm-specification [opt]
8401        attributes [opt] = assignment-expression
8402
8403    Returns the expression that should be tested.  */
8404
8405 static tree
8406 cp_parser_condition (cp_parser* parser)
8407 {
8408   cp_decl_specifier_seq type_specifiers;
8409   const char *saved_message;
8410   int declares_class_or_enum;
8411
8412   /* Try the declaration first.  */
8413   cp_parser_parse_tentatively (parser);
8414   /* New types are not allowed in the type-specifier-seq for a
8415      condition.  */
8416   saved_message = parser->type_definition_forbidden_message;
8417   parser->type_definition_forbidden_message
8418     = G_("types may not be defined in conditions");
8419   /* Parse the type-specifier-seq.  */
8420   cp_parser_decl_specifier_seq (parser,
8421                                 CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR,
8422                                 &type_specifiers,
8423                                 &declares_class_or_enum);
8424   /* Restore the saved message.  */
8425   parser->type_definition_forbidden_message = saved_message;
8426   /* If all is well, we might be looking at a declaration.  */
8427   if (!cp_parser_error_occurred (parser))
8428     {
8429       tree decl;
8430       tree asm_specification;
8431       tree attributes;
8432       cp_declarator *declarator;
8433       tree initializer = NULL_TREE;
8434
8435       /* Parse the declarator.  */
8436       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
8437                                          /*ctor_dtor_or_conv_p=*/NULL,
8438                                          /*parenthesized_p=*/NULL,
8439                                          /*member_p=*/false);
8440       /* Parse the attributes.  */
8441       attributes = cp_parser_attributes_opt (parser);
8442       /* Parse the asm-specification.  */
8443       asm_specification = cp_parser_asm_specification_opt (parser);
8444       /* If the next token is not an `=' or '{', then we might still be
8445          looking at an expression.  For example:
8446
8447            if (A(a).x)
8448
8449          looks like a decl-specifier-seq and a declarator -- but then
8450          there is no `=', so this is an expression.  */
8451       if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
8452           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
8453         cp_parser_simulate_error (parser);
8454         
8455       /* If we did see an `=' or '{', then we are looking at a declaration
8456          for sure.  */
8457       if (cp_parser_parse_definitely (parser))
8458         {
8459           tree pushed_scope;
8460           bool non_constant_p;
8461           bool flags = LOOKUP_ONLYCONVERTING;
8462
8463           /* Create the declaration.  */
8464           decl = start_decl (declarator, &type_specifiers,
8465                              /*initialized_p=*/true,
8466                              attributes, /*prefix_attributes=*/NULL_TREE,
8467                              &pushed_scope);
8468
8469           /* Parse the initializer.  */
8470           if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
8471             {
8472               initializer = cp_parser_braced_list (parser, &non_constant_p);
8473               CONSTRUCTOR_IS_DIRECT_INIT (initializer) = 1;
8474               flags = 0;
8475             }
8476           else
8477             {
8478               /* Consume the `='.  */
8479               cp_parser_require (parser, CPP_EQ, RT_EQ);
8480               initializer = cp_parser_initializer_clause (parser, &non_constant_p);
8481             }
8482           if (BRACE_ENCLOSED_INITIALIZER_P (initializer))
8483             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
8484
8485           /* Process the initializer.  */
8486           cp_finish_decl (decl,
8487                           initializer, !non_constant_p,
8488                           asm_specification,
8489                           flags);
8490
8491           if (pushed_scope)
8492             pop_scope (pushed_scope);
8493
8494           return convert_from_reference (decl);
8495         }
8496     }
8497   /* If we didn't even get past the declarator successfully, we are
8498      definitely not looking at a declaration.  */
8499   else
8500     cp_parser_abort_tentative_parse (parser);
8501
8502   /* Otherwise, we are looking at an expression.  */
8503   return cp_parser_expression (parser, /*cast_p=*/false, NULL);
8504 }
8505
8506 /* Parses a for-statement or range-for-statement until the closing ')',
8507    not included. */
8508
8509 static tree
8510 cp_parser_for (cp_parser *parser)
8511 {
8512   tree init, scope, decl;
8513   bool is_range_for;
8514
8515   /* Begin the for-statement.  */
8516   scope = begin_for_scope (&init);
8517
8518   /* Parse the initialization.  */
8519   is_range_for = cp_parser_for_init_statement (parser, &decl);
8520
8521   if (is_range_for)
8522     return cp_parser_range_for (parser, scope, init, decl);
8523   else
8524     return cp_parser_c_for (parser, scope, init);
8525 }
8526
8527 static tree
8528 cp_parser_c_for (cp_parser *parser, tree scope, tree init)
8529 {
8530   /* Normal for loop */
8531   tree condition = NULL_TREE;
8532   tree expression = NULL_TREE;
8533   tree stmt;
8534
8535   stmt = begin_for_stmt (scope, init);
8536   /* The for-init-statement has already been parsed in
8537      cp_parser_for_init_statement, so no work is needed here.  */
8538   finish_for_init_stmt (stmt);
8539
8540   /* If there's a condition, process it.  */
8541   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8542     condition = cp_parser_condition (parser);
8543   finish_for_cond (condition, stmt);
8544   /* Look for the `;'.  */
8545   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
8546
8547   /* If there's an expression, process it.  */
8548   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
8549     expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
8550   finish_for_expr (expression, stmt);
8551
8552   return stmt;
8553 }
8554
8555 /* Tries to parse a range-based for-statement:
8556
8557   range-based-for:
8558     decl-specifier-seq declarator : expression
8559
8560   The decl-specifier-seq declarator and the `:' are already parsed by
8561   cp_parser_for_init_statement. If processing_template_decl it returns a
8562   newly created RANGE_FOR_STMT; if not, it is converted to a
8563   regular FOR_STMT.  */
8564
8565 static tree
8566 cp_parser_range_for (cp_parser *parser, tree scope, tree init, tree range_decl)
8567 {
8568   tree stmt, range_expr;
8569
8570   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
8571     {
8572       bool expr_non_constant_p;
8573       range_expr = cp_parser_braced_list (parser, &expr_non_constant_p);
8574     }
8575   else
8576     range_expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
8577
8578   /* If in template, STMT is converted to a normal for-statement
8579      at instantiation. If not, it is done just ahead. */
8580   if (processing_template_decl)
8581     {
8582       stmt = begin_range_for_stmt (scope, init);
8583       finish_range_for_decl (stmt, range_decl, range_expr);
8584     }
8585   else
8586     {
8587       stmt = begin_for_stmt (scope, init);
8588       stmt = cp_convert_range_for (stmt, range_decl, range_expr);
8589     }
8590   return stmt;
8591 }
8592
8593 /* Converts a range-based for-statement into a normal
8594    for-statement, as per the definition.
8595
8596       for (RANGE_DECL : RANGE_EXPR)
8597         BLOCK
8598
8599    should be equivalent to:
8600
8601       {
8602         auto &&__range = RANGE_EXPR;
8603         for (auto __begin = BEGIN_EXPR, end = END_EXPR;
8604               __begin != __end;
8605               ++__begin)
8606           {
8607               RANGE_DECL = *__begin;
8608               BLOCK
8609           }
8610       }
8611
8612    If RANGE_EXPR is an array:
8613         BEGIN_EXPR = __range
8614         END_EXPR = __range + ARRAY_SIZE(__range)
8615    Else if RANGE_EXPR has a member 'begin' or 'end':
8616         BEGIN_EXPR = __range.begin()
8617         END_EXPR = __range.end()
8618    Else:
8619         BEGIN_EXPR = begin(__range)
8620         END_EXPR = end(__range);
8621
8622    If __range has a member 'begin' but not 'end', or vice versa, we must
8623    still use the second alternative (it will surely fail, however).
8624    When calling begin()/end() in the third alternative we must use
8625    argument dependent lookup, but always considering 'std' as an associated
8626    namespace.  */
8627
8628 tree
8629 cp_convert_range_for (tree statement, tree range_decl, tree range_expr)
8630 {
8631   tree range_type, range_temp;
8632   tree begin, end;
8633   tree iter_type, begin_expr, end_expr;
8634   tree condition, expression;
8635
8636   if (range_decl == error_mark_node || range_expr == error_mark_node)
8637     /* If an error happened previously do nothing or else a lot of
8638        unhelpful errors would be issued.  */
8639     begin_expr = end_expr = iter_type = error_mark_node;
8640   else
8641     {
8642       /* Find out the type deduced by the declaration
8643          `auto &&__range = range_expr'.  */
8644       range_type = cp_build_reference_type (make_auto (), true);
8645       range_type = do_auto_deduction (range_type, range_expr,
8646                                       type_uses_auto (range_type));
8647
8648       /* Create the __range variable.  */
8649       range_temp = build_decl (input_location, VAR_DECL,
8650                                get_identifier ("__for_range"), range_type);
8651       TREE_USED (range_temp) = 1;
8652       DECL_ARTIFICIAL (range_temp) = 1;
8653       pushdecl (range_temp);
8654       cp_finish_decl (range_temp, range_expr,
8655                       /*is_constant_init*/false, NULL_TREE,
8656                       LOOKUP_ONLYCONVERTING);
8657
8658       range_temp = convert_from_reference (range_temp);
8659       iter_type = cp_parser_perform_range_for_lookup (range_temp,
8660                                                       &begin_expr, &end_expr);
8661     }
8662
8663   /* The new for initialization statement.  */
8664   begin = build_decl (input_location, VAR_DECL,
8665                       get_identifier ("__for_begin"), iter_type);
8666   TREE_USED (begin) = 1;
8667   DECL_ARTIFICIAL (begin) = 1;
8668   pushdecl (begin);
8669   cp_finish_decl (begin, begin_expr,
8670                   /*is_constant_init*/false, NULL_TREE,
8671                   LOOKUP_ONLYCONVERTING);
8672
8673   end = build_decl (input_location, VAR_DECL,
8674                     get_identifier ("__for_end"), iter_type);
8675   TREE_USED (end) = 1;
8676   DECL_ARTIFICIAL (end) = 1;
8677   pushdecl (end);
8678   cp_finish_decl (end, end_expr,
8679                   /*is_constant_init*/false, NULL_TREE,
8680                   LOOKUP_ONLYCONVERTING);
8681
8682   finish_for_init_stmt (statement);
8683
8684   /* The new for condition.  */
8685   condition = build_x_binary_op (NE_EXPR,
8686                                  begin, ERROR_MARK,
8687                                  end, ERROR_MARK,
8688                                  NULL, tf_warning_or_error);
8689   finish_for_cond (condition, statement);
8690
8691   /* The new increment expression.  */
8692   expression = finish_unary_op_expr (PREINCREMENT_EXPR, begin);
8693   finish_for_expr (expression, statement);
8694
8695   /* The declaration is initialized with *__begin inside the loop body.  */
8696   cp_finish_decl (range_decl,
8697                   build_x_indirect_ref (begin, RO_NULL, tf_warning_or_error),
8698                   /*is_constant_init*/false, NULL_TREE,
8699                   LOOKUP_ONLYCONVERTING);
8700
8701   return statement;
8702 }
8703
8704 /* Solves BEGIN_EXPR and END_EXPR as described in cp_convert_range_for.
8705    We need to solve both at the same time because the method used
8706    depends on the existence of members begin or end.
8707    Returns the type deduced for the iterator expression.  */
8708
8709 static tree
8710 cp_parser_perform_range_for_lookup (tree range, tree *begin, tree *end)
8711 {
8712   if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (range))))
8713     {
8714       error ("range-based %<for%> expression of type %qT "
8715              "has incomplete type", TREE_TYPE (range));
8716       *begin = *end = error_mark_node;
8717       return error_mark_node;
8718     }
8719   if (TREE_CODE (TREE_TYPE (range)) == ARRAY_TYPE)
8720     {
8721       /* If RANGE is an array, we will use pointer arithmetic.  */
8722       *begin = range;
8723       *end = build_binary_op (input_location, PLUS_EXPR,
8724                               range,
8725                               array_type_nelts_top (TREE_TYPE (range)),
8726                               0);
8727       return build_pointer_type (TREE_TYPE (TREE_TYPE (range)));
8728     }
8729   else
8730     {
8731       /* If it is not an array, we must do a bit of magic.  */
8732       tree id_begin, id_end;
8733       tree member_begin, member_end;
8734
8735       *begin = *end = error_mark_node;
8736
8737       id_begin = get_identifier ("begin");
8738       id_end = get_identifier ("end");
8739       member_begin = lookup_member (TREE_TYPE (range), id_begin,
8740                                     /*protect=*/2, /*want_type=*/false);
8741       member_end = lookup_member (TREE_TYPE (range), id_end,
8742                                   /*protect=*/2, /*want_type=*/false);
8743
8744       if (member_begin != NULL_TREE || member_end != NULL_TREE)
8745         {
8746           /* Use the member functions.  */
8747           if (member_begin != NULL_TREE)
8748             *begin = cp_parser_range_for_member_function (range, id_begin);
8749           else
8750             error ("range-based %<for%> expression of type %qT has an "
8751                    "%<end%> member but not a %<begin%>", TREE_TYPE (range));
8752
8753           if (member_end != NULL_TREE)
8754             *end = cp_parser_range_for_member_function (range, id_end);
8755           else
8756             error ("range-based %<for%> expression of type %qT has a "
8757                    "%<begin%> member but not an %<end%>", TREE_TYPE (range));
8758         }
8759       else
8760         {
8761           /* Use global functions with ADL.  */
8762           VEC(tree,gc) *vec;
8763           vec = make_tree_vector ();
8764
8765           VEC_safe_push (tree, gc, vec, range);
8766
8767           member_begin = perform_koenig_lookup (id_begin, vec,
8768                                                 /*include_std=*/true,
8769                                                 tf_warning_or_error);
8770           *begin = finish_call_expr (member_begin, &vec, false, true,
8771                                      tf_warning_or_error);
8772           member_end = perform_koenig_lookup (id_end, vec,
8773                                               /*include_std=*/true,
8774                                               tf_warning_or_error);
8775           *end = finish_call_expr (member_end, &vec, false, true,
8776                                    tf_warning_or_error);
8777
8778           release_tree_vector (vec);
8779         }
8780
8781       /* Last common checks.  */
8782       if (*begin == error_mark_node || *end == error_mark_node)
8783         {
8784           /* If one of the expressions is an error do no more checks.  */
8785           *begin = *end = error_mark_node;
8786           return error_mark_node;
8787         }
8788       else
8789         {
8790           tree iter_type = cv_unqualified (TREE_TYPE (*begin));
8791           /* The unqualified type of the __begin and __end temporaries should
8792              be the same, as required by the multiple auto declaration.  */
8793           if (!same_type_p (iter_type, cv_unqualified (TREE_TYPE (*end))))
8794             error ("inconsistent begin/end types in range-based %<for%> "
8795                    "statement: %qT and %qT",
8796                    TREE_TYPE (*begin), TREE_TYPE (*end));
8797           return iter_type;
8798         }
8799     }
8800 }
8801
8802 /* Helper function for cp_parser_perform_range_for_lookup.
8803    Builds a tree for RANGE.IDENTIFIER().  */
8804
8805 static tree
8806 cp_parser_range_for_member_function (tree range, tree identifier)
8807 {
8808   tree member, res;
8809   VEC(tree,gc) *vec;
8810
8811   member = finish_class_member_access_expr (range, identifier,
8812                                             false, tf_warning_or_error);
8813   if (member == error_mark_node)
8814     return error_mark_node;
8815
8816   vec = make_tree_vector ();
8817   res = finish_call_expr (member, &vec,
8818                           /*disallow_virtual=*/false,
8819                           /*koenig_p=*/false,
8820                           tf_warning_or_error);
8821   release_tree_vector (vec);
8822   return res;
8823 }
8824
8825 /* Parse an iteration-statement.
8826
8827    iteration-statement:
8828      while ( condition ) statement
8829      do statement while ( expression ) ;
8830      for ( for-init-statement condition [opt] ; expression [opt] )
8831        statement
8832
8833    Returns the new WHILE_STMT, DO_STMT, FOR_STMT or RANGE_FOR_STMT.  */
8834
8835 static tree
8836 cp_parser_iteration_statement (cp_parser* parser)
8837 {
8838   cp_token *token;
8839   enum rid keyword;
8840   tree statement;
8841   unsigned char in_statement;
8842
8843   /* Peek at the next token.  */
8844   token = cp_parser_require (parser, CPP_KEYWORD, RT_INTERATION);
8845   if (!token)
8846     return error_mark_node;
8847
8848   /* Remember whether or not we are already within an iteration
8849      statement.  */
8850   in_statement = parser->in_statement;
8851
8852   /* See what kind of keyword it is.  */
8853   keyword = token->keyword;
8854   switch (keyword)
8855     {
8856     case RID_WHILE:
8857       {
8858         tree condition;
8859
8860         /* Begin the while-statement.  */
8861         statement = begin_while_stmt ();
8862         /* Look for the `('.  */
8863         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
8864         /* Parse the condition.  */
8865         condition = cp_parser_condition (parser);
8866         finish_while_stmt_cond (condition, statement);
8867         /* Look for the `)'.  */
8868         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
8869         /* Parse the dependent statement.  */
8870         parser->in_statement = IN_ITERATION_STMT;
8871         cp_parser_already_scoped_statement (parser);
8872         parser->in_statement = in_statement;
8873         /* We're done with the while-statement.  */
8874         finish_while_stmt (statement);
8875       }
8876       break;
8877
8878     case RID_DO:
8879       {
8880         tree expression;
8881
8882         /* Begin the do-statement.  */
8883         statement = begin_do_stmt ();
8884         /* Parse the body of the do-statement.  */
8885         parser->in_statement = IN_ITERATION_STMT;
8886         cp_parser_implicitly_scoped_statement (parser, NULL);
8887         parser->in_statement = in_statement;
8888         finish_do_body (statement);
8889         /* Look for the `while' keyword.  */
8890         cp_parser_require_keyword (parser, RID_WHILE, RT_WHILE);
8891         /* Look for the `('.  */
8892         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
8893         /* Parse the expression.  */
8894         expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
8895         /* We're done with the do-statement.  */
8896         finish_do_stmt (expression, statement);
8897         /* Look for the `)'.  */
8898         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
8899         /* Look for the `;'.  */
8900         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
8901       }
8902       break;
8903
8904     case RID_FOR:
8905       {
8906         /* Look for the `('.  */
8907         cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
8908
8909         statement = cp_parser_for (parser);
8910
8911         /* Look for the `)'.  */
8912         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
8913
8914         /* Parse the body of the for-statement.  */
8915         parser->in_statement = IN_ITERATION_STMT;
8916         cp_parser_already_scoped_statement (parser);
8917         parser->in_statement = in_statement;
8918
8919         /* We're done with the for-statement.  */
8920         finish_for_stmt (statement);
8921       }
8922       break;
8923
8924     default:
8925       cp_parser_error (parser, "expected iteration-statement");
8926       statement = error_mark_node;
8927       break;
8928     }
8929
8930   return statement;
8931 }
8932
8933 /* Parse a for-init-statement or the declarator of a range-based-for.
8934    Returns true if a range-based-for declaration is seen.
8935
8936    for-init-statement:
8937      expression-statement
8938      simple-declaration  */
8939
8940 static bool
8941 cp_parser_for_init_statement (cp_parser* parser, tree *decl)
8942 {
8943   /* If the next token is a `;', then we have an empty
8944      expression-statement.  Grammatically, this is also a
8945      simple-declaration, but an invalid one, because it does not
8946      declare anything.  Therefore, if we did not handle this case
8947      specially, we would issue an error message about an invalid
8948      declaration.  */
8949   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
8950     {
8951       bool is_range_for = false;
8952       bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
8953
8954       parser->colon_corrects_to_scope_p = false;
8955
8956       /* We're going to speculatively look for a declaration, falling back
8957          to an expression, if necessary.  */
8958       cp_parser_parse_tentatively (parser);
8959       /* Parse the declaration.  */
8960       cp_parser_simple_declaration (parser,
8961                                     /*function_definition_allowed_p=*/false,
8962                                     decl);
8963       parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
8964       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
8965         {
8966           /* It is a range-for, consume the ':' */
8967           cp_lexer_consume_token (parser->lexer);
8968           is_range_for = true;
8969           if (cxx_dialect < cxx0x)
8970             {
8971               error_at (cp_lexer_peek_token (parser->lexer)->location,
8972                         "range-based %<for%> loops are not allowed "
8973                         "in C++98 mode");
8974               *decl = error_mark_node;
8975             }
8976         }
8977       else
8978           /* The ';' is not consumed yet because we told
8979              cp_parser_simple_declaration not to.  */
8980           cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
8981
8982       if (cp_parser_parse_definitely (parser))
8983         return is_range_for;
8984       /* If the tentative parse failed, then we shall need to look for an
8985          expression-statement.  */
8986     }
8987   /* If we are here, it is an expression-statement.  */
8988   cp_parser_expression_statement (parser, NULL_TREE);
8989   return false;
8990 }
8991
8992 /* Parse a jump-statement.
8993
8994    jump-statement:
8995      break ;
8996      continue ;
8997      return expression [opt] ;
8998      return braced-init-list ;
8999      goto identifier ;
9000
9001    GNU extension:
9002
9003    jump-statement:
9004      goto * expression ;
9005
9006    Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
9007
9008 static tree
9009 cp_parser_jump_statement (cp_parser* parser)
9010 {
9011   tree statement = error_mark_node;
9012   cp_token *token;
9013   enum rid keyword;
9014   unsigned char in_statement;
9015
9016   /* Peek at the next token.  */
9017   token = cp_parser_require (parser, CPP_KEYWORD, RT_JUMP);
9018   if (!token)
9019     return error_mark_node;
9020
9021   /* See what kind of keyword it is.  */
9022   keyword = token->keyword;
9023   switch (keyword)
9024     {
9025     case RID_BREAK:
9026       in_statement = parser->in_statement & ~IN_IF_STMT;      
9027       switch (in_statement)
9028         {
9029         case 0:
9030           error_at (token->location, "break statement not within loop or switch");
9031           break;
9032         default:
9033           gcc_assert ((in_statement & IN_SWITCH_STMT)
9034                       || in_statement == IN_ITERATION_STMT);
9035           statement = finish_break_stmt ();
9036           break;
9037         case IN_OMP_BLOCK:
9038           error_at (token->location, "invalid exit from OpenMP structured block");
9039           break;
9040         case IN_OMP_FOR:
9041           error_at (token->location, "break statement used with OpenMP for loop");
9042           break;
9043         }
9044       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9045       break;
9046
9047     case RID_CONTINUE:
9048       switch (parser->in_statement & ~(IN_SWITCH_STMT | IN_IF_STMT))
9049         {
9050         case 0:
9051           error_at (token->location, "continue statement not within a loop");
9052           break;
9053         case IN_ITERATION_STMT:
9054         case IN_OMP_FOR:
9055           statement = finish_continue_stmt ();
9056           break;
9057         case IN_OMP_BLOCK:
9058           error_at (token->location, "invalid exit from OpenMP structured block");
9059           break;
9060         default:
9061           gcc_unreachable ();
9062         }
9063       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9064       break;
9065
9066     case RID_RETURN:
9067       {
9068         tree expr;
9069         bool expr_non_constant_p;
9070
9071         if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9072           {
9073             maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
9074             expr = cp_parser_braced_list (parser, &expr_non_constant_p);
9075           }
9076         else if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
9077           expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
9078         else
9079           /* If the next token is a `;', then there is no
9080              expression.  */
9081           expr = NULL_TREE;
9082         /* Build the return-statement.  */
9083         statement = finish_return_stmt (expr);
9084         /* Look for the final `;'.  */
9085         cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9086       }
9087       break;
9088
9089     case RID_GOTO:
9090       /* Create the goto-statement.  */
9091       if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
9092         {
9093           /* Issue a warning about this use of a GNU extension.  */
9094           pedwarn (token->location, OPT_pedantic, "ISO C++ forbids computed gotos");
9095           /* Consume the '*' token.  */
9096           cp_lexer_consume_token (parser->lexer);
9097           /* Parse the dependent expression.  */
9098           finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false, NULL));
9099         }
9100       else
9101         finish_goto_stmt (cp_parser_identifier (parser));
9102       /* Look for the final `;'.  */
9103       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9104       break;
9105
9106     default:
9107       cp_parser_error (parser, "expected jump-statement");
9108       break;
9109     }
9110
9111   return statement;
9112 }
9113
9114 /* Parse a declaration-statement.
9115
9116    declaration-statement:
9117      block-declaration  */
9118
9119 static void
9120 cp_parser_declaration_statement (cp_parser* parser)
9121 {
9122   void *p;
9123
9124   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
9125   p = obstack_alloc (&declarator_obstack, 0);
9126
9127  /* Parse the block-declaration.  */
9128   cp_parser_block_declaration (parser, /*statement_p=*/true);
9129
9130   /* Free any declarators allocated.  */
9131   obstack_free (&declarator_obstack, p);
9132
9133   /* Finish off the statement.  */
9134   finish_stmt ();
9135 }
9136
9137 /* Some dependent statements (like `if (cond) statement'), are
9138    implicitly in their own scope.  In other words, if the statement is
9139    a single statement (as opposed to a compound-statement), it is
9140    none-the-less treated as if it were enclosed in braces.  Any
9141    declarations appearing in the dependent statement are out of scope
9142    after control passes that point.  This function parses a statement,
9143    but ensures that is in its own scope, even if it is not a
9144    compound-statement.
9145
9146    If IF_P is not NULL, *IF_P is set to indicate whether the statement
9147    is a (possibly labeled) if statement which is not enclosed in
9148    braces and has an else clause.  This is used to implement
9149    -Wparentheses.
9150
9151    Returns the new statement.  */
9152
9153 static tree
9154 cp_parser_implicitly_scoped_statement (cp_parser* parser, bool *if_p)
9155 {
9156   tree statement;
9157
9158   if (if_p != NULL)
9159     *if_p = false;
9160
9161   /* Mark if () ; with a special NOP_EXPR.  */
9162   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9163     {
9164       location_t loc = cp_lexer_peek_token (parser->lexer)->location;
9165       cp_lexer_consume_token (parser->lexer);
9166       statement = add_stmt (build_empty_stmt (loc));
9167     }
9168   /* if a compound is opened, we simply parse the statement directly.  */
9169   else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
9170     statement = cp_parser_compound_statement (parser, NULL, false, false);
9171   /* If the token is not a `{', then we must take special action.  */
9172   else
9173     {
9174       /* Create a compound-statement.  */
9175       statement = begin_compound_stmt (0);
9176       /* Parse the dependent-statement.  */
9177       cp_parser_statement (parser, NULL_TREE, false, if_p);
9178       /* Finish the dummy compound-statement.  */
9179       finish_compound_stmt (statement);
9180     }
9181
9182   /* Return the statement.  */
9183   return statement;
9184 }
9185
9186 /* For some dependent statements (like `while (cond) statement'), we
9187    have already created a scope.  Therefore, even if the dependent
9188    statement is a compound-statement, we do not want to create another
9189    scope.  */
9190
9191 static void
9192 cp_parser_already_scoped_statement (cp_parser* parser)
9193 {
9194   /* If the token is a `{', then we must take special action.  */
9195   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
9196     cp_parser_statement (parser, NULL_TREE, false, NULL);
9197   else
9198     {
9199       /* Avoid calling cp_parser_compound_statement, so that we
9200          don't create a new scope.  Do everything else by hand.  */
9201       cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
9202       /* If the next keyword is `__label__' we have a label declaration.  */
9203       while (cp_lexer_next_token_is_keyword (parser->lexer, RID_LABEL))
9204         cp_parser_label_declaration (parser);
9205       /* Parse an (optional) statement-seq.  */
9206       cp_parser_statement_seq_opt (parser, NULL_TREE);
9207       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
9208     }
9209 }
9210
9211 /* Declarations [gram.dcl.dcl] */
9212
9213 /* Parse an optional declaration-sequence.
9214
9215    declaration-seq:
9216      declaration
9217      declaration-seq declaration  */
9218
9219 static void
9220 cp_parser_declaration_seq_opt (cp_parser* parser)
9221 {
9222   while (true)
9223     {
9224       cp_token *token;
9225
9226       token = cp_lexer_peek_token (parser->lexer);
9227
9228       if (token->type == CPP_CLOSE_BRACE
9229           || token->type == CPP_EOF
9230           || token->type == CPP_PRAGMA_EOL)
9231         break;
9232
9233       if (token->type == CPP_SEMICOLON)
9234         {
9235           /* A declaration consisting of a single semicolon is
9236              invalid.  Allow it unless we're being pedantic.  */
9237           cp_lexer_consume_token (parser->lexer);
9238           if (!in_system_header)
9239             pedwarn (input_location, OPT_pedantic, "extra %<;%>");
9240           continue;
9241         }
9242
9243       /* If we're entering or exiting a region that's implicitly
9244          extern "C", modify the lang context appropriately.  */
9245       if (!parser->implicit_extern_c && token->implicit_extern_c)
9246         {
9247           push_lang_context (lang_name_c);
9248           parser->implicit_extern_c = true;
9249         }
9250       else if (parser->implicit_extern_c && !token->implicit_extern_c)
9251         {
9252           pop_lang_context ();
9253           parser->implicit_extern_c = false;
9254         }
9255
9256       if (token->type == CPP_PRAGMA)
9257         {
9258           /* A top-level declaration can consist solely of a #pragma.
9259              A nested declaration cannot, so this is done here and not
9260              in cp_parser_declaration.  (A #pragma at block scope is
9261              handled in cp_parser_statement.)  */
9262           cp_parser_pragma (parser, pragma_external);
9263           continue;
9264         }
9265
9266       /* Parse the declaration itself.  */
9267       cp_parser_declaration (parser);
9268     }
9269 }
9270
9271 /* Parse a declaration.
9272
9273    declaration:
9274      block-declaration
9275      function-definition
9276      template-declaration
9277      explicit-instantiation
9278      explicit-specialization
9279      linkage-specification
9280      namespace-definition
9281
9282    GNU extension:
9283
9284    declaration:
9285       __extension__ declaration */
9286
9287 static void
9288 cp_parser_declaration (cp_parser* parser)
9289 {
9290   cp_token token1;
9291   cp_token token2;
9292   int saved_pedantic;
9293   void *p;
9294   tree attributes = NULL_TREE;
9295
9296   /* Check for the `__extension__' keyword.  */
9297   if (cp_parser_extension_opt (parser, &saved_pedantic))
9298     {
9299       /* Parse the qualified declaration.  */
9300       cp_parser_declaration (parser);
9301       /* Restore the PEDANTIC flag.  */
9302       pedantic = saved_pedantic;
9303
9304       return;
9305     }
9306
9307   /* Try to figure out what kind of declaration is present.  */
9308   token1 = *cp_lexer_peek_token (parser->lexer);
9309
9310   if (token1.type != CPP_EOF)
9311     token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
9312   else
9313     {
9314       token2.type = CPP_EOF;
9315       token2.keyword = RID_MAX;
9316     }
9317
9318   /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
9319   p = obstack_alloc (&declarator_obstack, 0);
9320
9321   /* If the next token is `extern' and the following token is a string
9322      literal, then we have a linkage specification.  */
9323   if (token1.keyword == RID_EXTERN
9324       && cp_parser_is_string_literal (&token2))
9325     cp_parser_linkage_specification (parser);
9326   /* If the next token is `template', then we have either a template
9327      declaration, an explicit instantiation, or an explicit
9328      specialization.  */
9329   else if (token1.keyword == RID_TEMPLATE)
9330     {
9331       /* `template <>' indicates a template specialization.  */
9332       if (token2.type == CPP_LESS
9333           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
9334         cp_parser_explicit_specialization (parser);
9335       /* `template <' indicates a template declaration.  */
9336       else if (token2.type == CPP_LESS)
9337         cp_parser_template_declaration (parser, /*member_p=*/false);
9338       /* Anything else must be an explicit instantiation.  */
9339       else
9340         cp_parser_explicit_instantiation (parser);
9341     }
9342   /* If the next token is `export', then we have a template
9343      declaration.  */
9344   else if (token1.keyword == RID_EXPORT)
9345     cp_parser_template_declaration (parser, /*member_p=*/false);
9346   /* If the next token is `extern', 'static' or 'inline' and the one
9347      after that is `template', we have a GNU extended explicit
9348      instantiation directive.  */
9349   else if (cp_parser_allow_gnu_extensions_p (parser)
9350            && (token1.keyword == RID_EXTERN
9351                || token1.keyword == RID_STATIC
9352                || token1.keyword == RID_INLINE)
9353            && token2.keyword == RID_TEMPLATE)
9354     cp_parser_explicit_instantiation (parser);
9355   /* If the next token is `namespace', check for a named or unnamed
9356      namespace definition.  */
9357   else if (token1.keyword == RID_NAMESPACE
9358            && (/* A named namespace definition.  */
9359                (token2.type == CPP_NAME
9360                 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
9361                     != CPP_EQ))
9362                /* An unnamed namespace definition.  */
9363                || token2.type == CPP_OPEN_BRACE
9364                || token2.keyword == RID_ATTRIBUTE))
9365     cp_parser_namespace_definition (parser);
9366   /* An inline (associated) namespace definition.  */
9367   else if (token1.keyword == RID_INLINE
9368            && token2.keyword == RID_NAMESPACE)
9369     cp_parser_namespace_definition (parser);
9370   /* Objective-C++ declaration/definition.  */
9371   else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
9372     cp_parser_objc_declaration (parser, NULL_TREE);
9373   else if (c_dialect_objc ()
9374            && token1.keyword == RID_ATTRIBUTE
9375            && cp_parser_objc_valid_prefix_attributes (parser, &attributes))
9376     cp_parser_objc_declaration (parser, attributes);
9377   /* We must have either a block declaration or a function
9378      definition.  */
9379   else
9380     /* Try to parse a block-declaration, or a function-definition.  */
9381     cp_parser_block_declaration (parser, /*statement_p=*/false);
9382
9383   /* Free any declarators allocated.  */
9384   obstack_free (&declarator_obstack, p);
9385 }
9386
9387 /* Parse a block-declaration.
9388
9389    block-declaration:
9390      simple-declaration
9391      asm-definition
9392      namespace-alias-definition
9393      using-declaration
9394      using-directive
9395
9396    GNU Extension:
9397
9398    block-declaration:
9399      __extension__ block-declaration
9400
9401    C++0x Extension:
9402
9403    block-declaration:
9404      static_assert-declaration
9405
9406    If STATEMENT_P is TRUE, then this block-declaration is occurring as
9407    part of a declaration-statement.  */
9408
9409 static void
9410 cp_parser_block_declaration (cp_parser *parser,
9411                              bool      statement_p)
9412 {
9413   cp_token *token1;
9414   int saved_pedantic;
9415
9416   /* Check for the `__extension__' keyword.  */
9417   if (cp_parser_extension_opt (parser, &saved_pedantic))
9418     {
9419       /* Parse the qualified declaration.  */
9420       cp_parser_block_declaration (parser, statement_p);
9421       /* Restore the PEDANTIC flag.  */
9422       pedantic = saved_pedantic;
9423
9424       return;
9425     }
9426
9427   /* Peek at the next token to figure out which kind of declaration is
9428      present.  */
9429   token1 = cp_lexer_peek_token (parser->lexer);
9430
9431   /* If the next keyword is `asm', we have an asm-definition.  */
9432   if (token1->keyword == RID_ASM)
9433     {
9434       if (statement_p)
9435         cp_parser_commit_to_tentative_parse (parser);
9436       cp_parser_asm_definition (parser);
9437     }
9438   /* If the next keyword is `namespace', we have a
9439      namespace-alias-definition.  */
9440   else if (token1->keyword == RID_NAMESPACE)
9441     cp_parser_namespace_alias_definition (parser);
9442   /* If the next keyword is `using', we have either a
9443      using-declaration or a using-directive.  */
9444   else if (token1->keyword == RID_USING)
9445     {
9446       cp_token *token2;
9447
9448       if (statement_p)
9449         cp_parser_commit_to_tentative_parse (parser);
9450       /* If the token after `using' is `namespace', then we have a
9451          using-directive.  */
9452       token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
9453       if (token2->keyword == RID_NAMESPACE)
9454         cp_parser_using_directive (parser);
9455       /* Otherwise, it's a using-declaration.  */
9456       else
9457         cp_parser_using_declaration (parser,
9458                                      /*access_declaration_p=*/false);
9459     }
9460   /* If the next keyword is `__label__' we have a misplaced label
9461      declaration.  */
9462   else if (token1->keyword == RID_LABEL)
9463     {
9464       cp_lexer_consume_token (parser->lexer);
9465       error_at (token1->location, "%<__label__%> not at the beginning of a block");
9466       cp_parser_skip_to_end_of_statement (parser);
9467       /* If the next token is now a `;', consume it.  */
9468       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9469         cp_lexer_consume_token (parser->lexer);
9470     }
9471   /* If the next token is `static_assert' we have a static assertion.  */
9472   else if (token1->keyword == RID_STATIC_ASSERT)
9473     cp_parser_static_assert (parser, /*member_p=*/false);
9474   /* Anything else must be a simple-declaration.  */
9475   else
9476     cp_parser_simple_declaration (parser, !statement_p,
9477                                   /*maybe_range_for_decl*/NULL);
9478 }
9479
9480 /* Parse a simple-declaration.
9481
9482    simple-declaration:
9483      decl-specifier-seq [opt] init-declarator-list [opt] ;
9484
9485    init-declarator-list:
9486      init-declarator
9487      init-declarator-list , init-declarator
9488
9489    If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
9490    function-definition as a simple-declaration.
9491
9492    If MAYBE_RANGE_FOR_DECL is not NULL, the pointed tree will be set to the
9493    parsed declaration if it is an uninitialized single declarator not followed
9494    by a `;', or to error_mark_node otherwise. Either way, the trailing `;',
9495    if present, will not be consumed.  */
9496
9497 static void
9498 cp_parser_simple_declaration (cp_parser* parser,
9499                               bool function_definition_allowed_p,
9500                               tree *maybe_range_for_decl)
9501 {
9502   cp_decl_specifier_seq decl_specifiers;
9503   int declares_class_or_enum;
9504   bool saw_declarator;
9505
9506   if (maybe_range_for_decl)
9507     *maybe_range_for_decl = NULL_TREE;
9508
9509   /* Defer access checks until we know what is being declared; the
9510      checks for names appearing in the decl-specifier-seq should be
9511      done as if we were in the scope of the thing being declared.  */
9512   push_deferring_access_checks (dk_deferred);
9513
9514   /* Parse the decl-specifier-seq.  We have to keep track of whether
9515      or not the decl-specifier-seq declares a named class or
9516      enumeration type, since that is the only case in which the
9517      init-declarator-list is allowed to be empty.
9518
9519      [dcl.dcl]
9520
9521      In a simple-declaration, the optional init-declarator-list can be
9522      omitted only when declaring a class or enumeration, that is when
9523      the decl-specifier-seq contains either a class-specifier, an
9524      elaborated-type-specifier, or an enum-specifier.  */
9525   cp_parser_decl_specifier_seq (parser,
9526                                 CP_PARSER_FLAGS_OPTIONAL,
9527                                 &decl_specifiers,
9528                                 &declares_class_or_enum);
9529   /* We no longer need to defer access checks.  */
9530   stop_deferring_access_checks ();
9531
9532   /* In a block scope, a valid declaration must always have a
9533      decl-specifier-seq.  By not trying to parse declarators, we can
9534      resolve the declaration/expression ambiguity more quickly.  */
9535   if (!function_definition_allowed_p
9536       && !decl_specifiers.any_specifiers_p)
9537     {
9538       cp_parser_error (parser, "expected declaration");
9539       goto done;
9540     }
9541
9542   /* If the next two tokens are both identifiers, the code is
9543      erroneous. The usual cause of this situation is code like:
9544
9545        T t;
9546
9547      where "T" should name a type -- but does not.  */
9548   if (!decl_specifiers.any_type_specifiers_p
9549       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
9550     {
9551       /* If parsing tentatively, we should commit; we really are
9552          looking at a declaration.  */
9553       cp_parser_commit_to_tentative_parse (parser);
9554       /* Give up.  */
9555       goto done;
9556     }
9557
9558   /* If we have seen at least one decl-specifier, and the next token
9559      is not a parenthesis, then we must be looking at a declaration.
9560      (After "int (" we might be looking at a functional cast.)  */
9561   if (decl_specifiers.any_specifiers_p
9562       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN)
9563       && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
9564       && !cp_parser_error_occurred (parser))
9565     cp_parser_commit_to_tentative_parse (parser);
9566
9567   /* Keep going until we hit the `;' at the end of the simple
9568      declaration.  */
9569   saw_declarator = false;
9570   while (cp_lexer_next_token_is_not (parser->lexer,
9571                                      CPP_SEMICOLON))
9572     {
9573       cp_token *token;
9574       bool function_definition_p;
9575       tree decl;
9576
9577       if (saw_declarator)
9578         {
9579           /* If we are processing next declarator, coma is expected */
9580           token = cp_lexer_peek_token (parser->lexer);
9581           gcc_assert (token->type == CPP_COMMA);
9582           cp_lexer_consume_token (parser->lexer);
9583           if (maybe_range_for_decl)
9584             *maybe_range_for_decl = error_mark_node;
9585         }
9586       else
9587         saw_declarator = true;
9588
9589       /* Parse the init-declarator.  */
9590       decl = cp_parser_init_declarator (parser, &decl_specifiers,
9591                                         /*checks=*/NULL,
9592                                         function_definition_allowed_p,
9593                                         /*member_p=*/false,
9594                                         declares_class_or_enum,
9595                                         &function_definition_p,
9596                                         maybe_range_for_decl);
9597       /* If an error occurred while parsing tentatively, exit quickly.
9598          (That usually happens when in the body of a function; each
9599          statement is treated as a declaration-statement until proven
9600          otherwise.)  */
9601       if (cp_parser_error_occurred (parser))
9602         goto done;
9603       /* Handle function definitions specially.  */
9604       if (function_definition_p)
9605         {
9606           /* If the next token is a `,', then we are probably
9607              processing something like:
9608
9609                void f() {}, *p;
9610
9611              which is erroneous.  */
9612           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
9613             {
9614               cp_token *token = cp_lexer_peek_token (parser->lexer);
9615               error_at (token->location,
9616                         "mixing"
9617                         " declarations and function-definitions is forbidden");
9618             }
9619           /* Otherwise, we're done with the list of declarators.  */
9620           else
9621             {
9622               pop_deferring_access_checks ();
9623               return;
9624             }
9625         }
9626       if (maybe_range_for_decl && *maybe_range_for_decl == NULL_TREE)
9627         *maybe_range_for_decl = decl;
9628       /* The next token should be either a `,' or a `;'.  */
9629       token = cp_lexer_peek_token (parser->lexer);
9630       /* If it's a `,', there are more declarators to come.  */
9631       if (token->type == CPP_COMMA)
9632         /* will be consumed next time around */;
9633       /* If it's a `;', we are done.  */
9634       else if (token->type == CPP_SEMICOLON || maybe_range_for_decl)
9635         break;
9636       /* Anything else is an error.  */
9637       else
9638         {
9639           /* If we have already issued an error message we don't need
9640              to issue another one.  */
9641           if (decl != error_mark_node
9642               || cp_parser_uncommitted_to_tentative_parse_p (parser))
9643             cp_parser_error (parser, "expected %<,%> or %<;%>");
9644           /* Skip tokens until we reach the end of the statement.  */
9645           cp_parser_skip_to_end_of_statement (parser);
9646           /* If the next token is now a `;', consume it.  */
9647           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
9648             cp_lexer_consume_token (parser->lexer);
9649           goto done;
9650         }
9651       /* After the first time around, a function-definition is not
9652          allowed -- even if it was OK at first.  For example:
9653
9654            int i, f() {}
9655
9656          is not valid.  */
9657       function_definition_allowed_p = false;
9658     }
9659
9660   /* Issue an error message if no declarators are present, and the
9661      decl-specifier-seq does not itself declare a class or
9662      enumeration.  */
9663   if (!saw_declarator)
9664     {
9665       if (cp_parser_declares_only_class_p (parser))
9666         shadow_tag (&decl_specifiers);
9667       /* Perform any deferred access checks.  */
9668       perform_deferred_access_checks ();
9669     }
9670
9671   /* Consume the `;'.  */
9672   if (!maybe_range_for_decl)
9673       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
9674
9675  done:
9676   pop_deferring_access_checks ();
9677 }
9678
9679 /* Parse a decl-specifier-seq.
9680
9681    decl-specifier-seq:
9682      decl-specifier-seq [opt] decl-specifier
9683
9684    decl-specifier:
9685      storage-class-specifier
9686      type-specifier
9687      function-specifier
9688      friend
9689      typedef
9690
9691    GNU Extension:
9692
9693    decl-specifier:
9694      attributes
9695
9696    Set *DECL_SPECS to a representation of the decl-specifier-seq.
9697
9698    The parser flags FLAGS is used to control type-specifier parsing.
9699
9700    *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
9701    flags:
9702
9703      1: one of the decl-specifiers is an elaborated-type-specifier
9704         (i.e., a type declaration)
9705      2: one of the decl-specifiers is an enum-specifier or a
9706         class-specifier (i.e., a type definition)
9707
9708    */
9709
9710 static void
9711 cp_parser_decl_specifier_seq (cp_parser* parser,
9712                               cp_parser_flags flags,
9713                               cp_decl_specifier_seq *decl_specs,
9714                               int* declares_class_or_enum)
9715 {
9716   bool constructor_possible_p = !parser->in_declarator_p;
9717   cp_token *start_token = NULL;
9718
9719   /* Clear DECL_SPECS.  */
9720   clear_decl_specs (decl_specs);
9721
9722   /* Assume no class or enumeration type is declared.  */
9723   *declares_class_or_enum = 0;
9724
9725   /* Keep reading specifiers until there are no more to read.  */
9726   while (true)
9727     {
9728       bool constructor_p;
9729       bool found_decl_spec;
9730       cp_token *token;
9731
9732       /* Peek at the next token.  */
9733       token = cp_lexer_peek_token (parser->lexer);
9734
9735       /* Save the first token of the decl spec list for error
9736          reporting.  */
9737       if (!start_token)
9738         start_token = token;
9739       /* Handle attributes.  */
9740       if (token->keyword == RID_ATTRIBUTE)
9741         {
9742           /* Parse the attributes.  */
9743           decl_specs->attributes
9744             = chainon (decl_specs->attributes,
9745                        cp_parser_attributes_opt (parser));
9746           continue;
9747         }
9748       /* Assume we will find a decl-specifier keyword.  */
9749       found_decl_spec = true;
9750       /* If the next token is an appropriate keyword, we can simply
9751          add it to the list.  */
9752       switch (token->keyword)
9753         {
9754           /* decl-specifier:
9755                friend
9756                constexpr */
9757         case RID_FRIEND:
9758           if (!at_class_scope_p ())
9759             {
9760               error_at (token->location, "%<friend%> used outside of class");
9761               cp_lexer_purge_token (parser->lexer);
9762             }
9763           else
9764             {
9765               ++decl_specs->specs[(int) ds_friend];
9766               /* Consume the token.  */
9767               cp_lexer_consume_token (parser->lexer);
9768             }
9769           break;
9770
9771         case RID_CONSTEXPR:
9772           ++decl_specs->specs[(int) ds_constexpr];
9773           cp_lexer_consume_token (parser->lexer);
9774           break;
9775
9776           /* function-specifier:
9777                inline
9778                virtual
9779                explicit  */
9780         case RID_INLINE:
9781         case RID_VIRTUAL:
9782         case RID_EXPLICIT:
9783           cp_parser_function_specifier_opt (parser, decl_specs);
9784           break;
9785
9786           /* decl-specifier:
9787                typedef  */
9788         case RID_TYPEDEF:
9789           ++decl_specs->specs[(int) ds_typedef];
9790           /* Consume the token.  */
9791           cp_lexer_consume_token (parser->lexer);
9792           /* A constructor declarator cannot appear in a typedef.  */
9793           constructor_possible_p = false;
9794           /* The "typedef" keyword can only occur in a declaration; we
9795              may as well commit at this point.  */
9796           cp_parser_commit_to_tentative_parse (parser);
9797
9798           if (decl_specs->storage_class != sc_none)
9799             decl_specs->conflicting_specifiers_p = true;
9800           break;
9801
9802           /* storage-class-specifier:
9803                auto
9804                register
9805                static
9806                extern
9807                mutable
9808
9809              GNU Extension:
9810                thread  */
9811         case RID_AUTO:
9812           if (cxx_dialect == cxx98) 
9813             {
9814               /* Consume the token.  */
9815               cp_lexer_consume_token (parser->lexer);
9816
9817               /* Complain about `auto' as a storage specifier, if
9818                  we're complaining about C++0x compatibility.  */
9819               warning_at (token->location, OPT_Wc__0x_compat, "%<auto%>"
9820                           " will change meaning in C++0x; please remove it");
9821
9822               /* Set the storage class anyway.  */
9823               cp_parser_set_storage_class (parser, decl_specs, RID_AUTO,
9824                                            token->location);
9825             }
9826           else
9827             /* C++0x auto type-specifier.  */
9828             found_decl_spec = false;
9829           break;
9830
9831         case RID_REGISTER:
9832         case RID_STATIC:
9833         case RID_EXTERN:
9834         case RID_MUTABLE:
9835           /* Consume the token.  */
9836           cp_lexer_consume_token (parser->lexer);
9837           cp_parser_set_storage_class (parser, decl_specs, token->keyword,
9838                                        token->location);
9839           break;
9840         case RID_THREAD:
9841           /* Consume the token.  */
9842           cp_lexer_consume_token (parser->lexer);
9843           ++decl_specs->specs[(int) ds_thread];
9844           break;
9845
9846         default:
9847           /* We did not yet find a decl-specifier yet.  */
9848           found_decl_spec = false;
9849           break;
9850         }
9851
9852       if (found_decl_spec
9853           && (flags & CP_PARSER_FLAGS_ONLY_TYPE_OR_CONSTEXPR)
9854           && token->keyword != RID_CONSTEXPR)
9855         error ("decl-specifier invalid in condition");
9856
9857       /* Constructors are a special case.  The `S' in `S()' is not a
9858          decl-specifier; it is the beginning of the declarator.  */
9859       constructor_p
9860         = (!found_decl_spec
9861            && constructor_possible_p
9862            && (cp_parser_constructor_declarator_p
9863                (parser, decl_specs->specs[(int) ds_friend] != 0)));
9864
9865       /* If we don't have a DECL_SPEC yet, then we must be looking at
9866          a type-specifier.  */
9867       if (!found_decl_spec && !constructor_p)
9868         {
9869           int decl_spec_declares_class_or_enum;
9870           bool is_cv_qualifier;
9871           tree type_spec;
9872
9873           type_spec
9874             = cp_parser_type_specifier (parser, flags,
9875                                         decl_specs,
9876                                         /*is_declaration=*/true,
9877                                         &decl_spec_declares_class_or_enum,
9878                                         &is_cv_qualifier);
9879           *declares_class_or_enum |= decl_spec_declares_class_or_enum;
9880
9881           /* If this type-specifier referenced a user-defined type
9882              (a typedef, class-name, etc.), then we can't allow any
9883              more such type-specifiers henceforth.
9884
9885              [dcl.spec]
9886
9887              The longest sequence of decl-specifiers that could
9888              possibly be a type name is taken as the
9889              decl-specifier-seq of a declaration.  The sequence shall
9890              be self-consistent as described below.
9891
9892              [dcl.type]
9893
9894              As a general rule, at most one type-specifier is allowed
9895              in the complete decl-specifier-seq of a declaration.  The
9896              only exceptions are the following:
9897
9898              -- const or volatile can be combined with any other
9899                 type-specifier.
9900
9901              -- signed or unsigned can be combined with char, long,
9902                 short, or int.
9903
9904              -- ..
9905
9906              Example:
9907
9908                typedef char* Pc;
9909                void g (const int Pc);
9910
9911              Here, Pc is *not* part of the decl-specifier seq; it's
9912              the declarator.  Therefore, once we see a type-specifier
9913              (other than a cv-qualifier), we forbid any additional
9914              user-defined types.  We *do* still allow things like `int
9915              int' to be considered a decl-specifier-seq, and issue the
9916              error message later.  */
9917           if (type_spec && !is_cv_qualifier)
9918             flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
9919           /* A constructor declarator cannot follow a type-specifier.  */
9920           if (type_spec)
9921             {
9922               constructor_possible_p = false;
9923               found_decl_spec = true;
9924               if (!is_cv_qualifier)
9925                 decl_specs->any_type_specifiers_p = true;
9926             }
9927         }
9928
9929       /* If we still do not have a DECL_SPEC, then there are no more
9930          decl-specifiers.  */
9931       if (!found_decl_spec)
9932         break;
9933
9934       decl_specs->any_specifiers_p = true;
9935       /* After we see one decl-specifier, further decl-specifiers are
9936          always optional.  */
9937       flags |= CP_PARSER_FLAGS_OPTIONAL;
9938     }
9939
9940   cp_parser_check_decl_spec (decl_specs, start_token->location);
9941
9942   /* Don't allow a friend specifier with a class definition.  */
9943   if (decl_specs->specs[(int) ds_friend] != 0
9944       && (*declares_class_or_enum & 2))
9945     error_at (start_token->location,
9946               "class definition may not be declared a friend");
9947 }
9948
9949 /* Parse an (optional) storage-class-specifier.
9950
9951    storage-class-specifier:
9952      auto
9953      register
9954      static
9955      extern
9956      mutable
9957
9958    GNU Extension:
9959
9960    storage-class-specifier:
9961      thread
9962
9963    Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
9964
9965 static tree
9966 cp_parser_storage_class_specifier_opt (cp_parser* parser)
9967 {
9968   switch (cp_lexer_peek_token (parser->lexer)->keyword)
9969     {
9970     case RID_AUTO:
9971       if (cxx_dialect != cxx98)
9972         return NULL_TREE;
9973       /* Fall through for C++98.  */
9974
9975     case RID_REGISTER:
9976     case RID_STATIC:
9977     case RID_EXTERN:
9978     case RID_MUTABLE:
9979     case RID_THREAD:
9980       /* Consume the token.  */
9981       return cp_lexer_consume_token (parser->lexer)->u.value;
9982
9983     default:
9984       return NULL_TREE;
9985     }
9986 }
9987
9988 /* Parse an (optional) function-specifier.
9989
9990    function-specifier:
9991      inline
9992      virtual
9993      explicit
9994
9995    Returns an IDENTIFIER_NODE corresponding to the keyword used.
9996    Updates DECL_SPECS, if it is non-NULL.  */
9997
9998 static tree
9999 cp_parser_function_specifier_opt (cp_parser* parser,
10000                                   cp_decl_specifier_seq *decl_specs)
10001 {
10002   cp_token *token = cp_lexer_peek_token (parser->lexer);
10003   switch (token->keyword)
10004     {
10005     case RID_INLINE:
10006       if (decl_specs)
10007         ++decl_specs->specs[(int) ds_inline];
10008       break;
10009
10010     case RID_VIRTUAL:
10011       /* 14.5.2.3 [temp.mem]
10012
10013          A member function template shall not be virtual.  */
10014       if (PROCESSING_REAL_TEMPLATE_DECL_P ())
10015         error_at (token->location, "templates may not be %<virtual%>");
10016       else if (decl_specs)
10017         ++decl_specs->specs[(int) ds_virtual];
10018       break;
10019
10020     case RID_EXPLICIT:
10021       if (decl_specs)
10022         ++decl_specs->specs[(int) ds_explicit];
10023       break;
10024
10025     default:
10026       return NULL_TREE;
10027     }
10028
10029   /* Consume the token.  */
10030   return cp_lexer_consume_token (parser->lexer)->u.value;
10031 }
10032
10033 /* Parse a linkage-specification.
10034
10035    linkage-specification:
10036      extern string-literal { declaration-seq [opt] }
10037      extern string-literal declaration  */
10038
10039 static void
10040 cp_parser_linkage_specification (cp_parser* parser)
10041 {
10042   tree linkage;
10043
10044   /* Look for the `extern' keyword.  */
10045   cp_parser_require_keyword (parser, RID_EXTERN, RT_EXTERN);
10046
10047   /* Look for the string-literal.  */
10048   linkage = cp_parser_string_literal (parser, false, false);
10049
10050   /* Transform the literal into an identifier.  If the literal is a
10051      wide-character string, or contains embedded NULs, then we can't
10052      handle it as the user wants.  */
10053   if (strlen (TREE_STRING_POINTER (linkage))
10054       != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
10055     {
10056       cp_parser_error (parser, "invalid linkage-specification");
10057       /* Assume C++ linkage.  */
10058       linkage = lang_name_cplusplus;
10059     }
10060   else
10061     linkage = get_identifier (TREE_STRING_POINTER (linkage));
10062
10063   /* We're now using the new linkage.  */
10064   push_lang_context (linkage);
10065
10066   /* If the next token is a `{', then we're using the first
10067      production.  */
10068   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
10069     {
10070       /* Consume the `{' token.  */
10071       cp_lexer_consume_token (parser->lexer);
10072       /* Parse the declarations.  */
10073       cp_parser_declaration_seq_opt (parser);
10074       /* Look for the closing `}'.  */
10075       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
10076     }
10077   /* Otherwise, there's just one declaration.  */
10078   else
10079     {
10080       bool saved_in_unbraced_linkage_specification_p;
10081
10082       saved_in_unbraced_linkage_specification_p
10083         = parser->in_unbraced_linkage_specification_p;
10084       parser->in_unbraced_linkage_specification_p = true;
10085       cp_parser_declaration (parser);
10086       parser->in_unbraced_linkage_specification_p
10087         = saved_in_unbraced_linkage_specification_p;
10088     }
10089
10090   /* We're done with the linkage-specification.  */
10091   pop_lang_context ();
10092 }
10093
10094 /* Parse a static_assert-declaration.
10095
10096    static_assert-declaration:
10097      static_assert ( constant-expression , string-literal ) ; 
10098
10099    If MEMBER_P, this static_assert is a class member.  */
10100
10101 static void 
10102 cp_parser_static_assert(cp_parser *parser, bool member_p)
10103 {
10104   tree condition;
10105   tree message;
10106   cp_token *token;
10107   location_t saved_loc;
10108   bool dummy;
10109
10110   /* Peek at the `static_assert' token so we can keep track of exactly
10111      where the static assertion started.  */
10112   token = cp_lexer_peek_token (parser->lexer);
10113   saved_loc = token->location;
10114
10115   /* Look for the `static_assert' keyword.  */
10116   if (!cp_parser_require_keyword (parser, RID_STATIC_ASSERT, 
10117                                   RT_STATIC_ASSERT))
10118     return;
10119
10120   /*  We know we are in a static assertion; commit to any tentative
10121       parse.  */
10122   if (cp_parser_parsing_tentatively (parser))
10123     cp_parser_commit_to_tentative_parse (parser);
10124
10125   /* Parse the `(' starting the static assertion condition.  */
10126   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
10127
10128   /* Parse the constant-expression.  Allow a non-constant expression
10129      here in order to give better diagnostics in finish_static_assert.  */
10130   condition = 
10131     cp_parser_constant_expression (parser,
10132                                    /*allow_non_constant_p=*/true,
10133                                    /*non_constant_p=*/&dummy);
10134
10135   /* Parse the separating `,'.  */
10136   cp_parser_require (parser, CPP_COMMA, RT_COMMA);
10137
10138   /* Parse the string-literal message.  */
10139   message = cp_parser_string_literal (parser, 
10140                                       /*translate=*/false,
10141                                       /*wide_ok=*/true);
10142
10143   /* A `)' completes the static assertion.  */
10144   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
10145     cp_parser_skip_to_closing_parenthesis (parser, 
10146                                            /*recovering=*/true, 
10147                                            /*or_comma=*/false,
10148                                            /*consume_paren=*/true);
10149
10150   /* A semicolon terminates the declaration.  */
10151   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
10152
10153   /* Complete the static assertion, which may mean either processing 
10154      the static assert now or saving it for template instantiation.  */
10155   finish_static_assert (condition, message, saved_loc, member_p);
10156 }
10157
10158 /* Parse a `decltype' type. Returns the type. 
10159
10160    simple-type-specifier:
10161      decltype ( expression )  */
10162
10163 static tree
10164 cp_parser_decltype (cp_parser *parser)
10165 {
10166   tree expr;
10167   bool id_expression_or_member_access_p = false;
10168   const char *saved_message;
10169   bool saved_integral_constant_expression_p;
10170   bool saved_non_integral_constant_expression_p;
10171   cp_token *id_expr_start_token;
10172
10173   /* Look for the `decltype' token.  */
10174   if (!cp_parser_require_keyword (parser, RID_DECLTYPE, RT_DECLTYPE))
10175     return error_mark_node;
10176
10177   /* Types cannot be defined in a `decltype' expression.  Save away the
10178      old message.  */
10179   saved_message = parser->type_definition_forbidden_message;
10180
10181   /* And create the new one.  */
10182   parser->type_definition_forbidden_message
10183     = G_("types may not be defined in %<decltype%> expressions");
10184
10185   /* The restrictions on constant-expressions do not apply inside
10186      decltype expressions.  */
10187   saved_integral_constant_expression_p
10188     = parser->integral_constant_expression_p;
10189   saved_non_integral_constant_expression_p
10190     = parser->non_integral_constant_expression_p;
10191   parser->integral_constant_expression_p = false;
10192
10193   /* Do not actually evaluate the expression.  */
10194   ++cp_unevaluated_operand;
10195
10196   /* Do not warn about problems with the expression.  */
10197   ++c_inhibit_evaluation_warnings;
10198
10199   /* Parse the opening `('.  */
10200   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
10201     return error_mark_node;
10202   
10203   /* First, try parsing an id-expression.  */
10204   id_expr_start_token = cp_lexer_peek_token (parser->lexer);
10205   cp_parser_parse_tentatively (parser);
10206   expr = cp_parser_id_expression (parser,
10207                                   /*template_keyword_p=*/false,
10208                                   /*check_dependency_p=*/true,
10209                                   /*template_p=*/NULL,
10210                                   /*declarator_p=*/false,
10211                                   /*optional_p=*/false);
10212
10213   if (!cp_parser_error_occurred (parser) && expr != error_mark_node)
10214     {
10215       bool non_integral_constant_expression_p = false;
10216       tree id_expression = expr;
10217       cp_id_kind idk;
10218       const char *error_msg;
10219
10220       if (TREE_CODE (expr) == IDENTIFIER_NODE)
10221         /* Lookup the name we got back from the id-expression.  */
10222         expr = cp_parser_lookup_name (parser, expr,
10223                                       none_type,
10224                                       /*is_template=*/false,
10225                                       /*is_namespace=*/false,
10226                                       /*check_dependency=*/true,
10227                                       /*ambiguous_decls=*/NULL,
10228                                       id_expr_start_token->location);
10229
10230       if (expr
10231           && expr != error_mark_node
10232           && TREE_CODE (expr) != TEMPLATE_ID_EXPR
10233           && TREE_CODE (expr) != TYPE_DECL
10234           && (TREE_CODE (expr) != BIT_NOT_EXPR
10235               || !TYPE_P (TREE_OPERAND (expr, 0)))
10236           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
10237         {
10238           /* Complete lookup of the id-expression.  */
10239           expr = (finish_id_expression
10240                   (id_expression, expr, parser->scope, &idk,
10241                    /*integral_constant_expression_p=*/false,
10242                    /*allow_non_integral_constant_expression_p=*/true,
10243                    &non_integral_constant_expression_p,
10244                    /*template_p=*/false,
10245                    /*done=*/true,
10246                    /*address_p=*/false,
10247                    /*template_arg_p=*/false,
10248                    &error_msg,
10249                    id_expr_start_token->location));
10250
10251           if (expr == error_mark_node)
10252             /* We found an id-expression, but it was something that we
10253                should not have found. This is an error, not something
10254                we can recover from, so note that we found an
10255                id-expression and we'll recover as gracefully as
10256                possible.  */
10257             id_expression_or_member_access_p = true;
10258         }
10259
10260       if (expr 
10261           && expr != error_mark_node
10262           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
10263         /* We have an id-expression.  */
10264         id_expression_or_member_access_p = true;
10265     }
10266
10267   if (!id_expression_or_member_access_p)
10268     {
10269       /* Abort the id-expression parse.  */
10270       cp_parser_abort_tentative_parse (parser);
10271
10272       /* Parsing tentatively, again.  */
10273       cp_parser_parse_tentatively (parser);
10274
10275       /* Parse a class member access.  */
10276       expr = cp_parser_postfix_expression (parser, /*address_p=*/false,
10277                                            /*cast_p=*/false,
10278                                            /*member_access_only_p=*/true, NULL);
10279
10280       if (expr 
10281           && expr != error_mark_node
10282           && cp_lexer_peek_token (parser->lexer)->type == CPP_CLOSE_PAREN)
10283         /* We have an id-expression.  */
10284         id_expression_or_member_access_p = true;
10285     }
10286
10287   if (id_expression_or_member_access_p)
10288     /* We have parsed the complete id-expression or member access.  */
10289     cp_parser_parse_definitely (parser);
10290   else
10291     {
10292       bool saved_greater_than_is_operator_p;
10293
10294       /* Abort our attempt to parse an id-expression or member access
10295          expression.  */
10296       cp_parser_abort_tentative_parse (parser);
10297
10298       /* Within a parenthesized expression, a `>' token is always
10299          the greater-than operator.  */
10300       saved_greater_than_is_operator_p
10301         = parser->greater_than_is_operator_p;
10302       parser->greater_than_is_operator_p = true;
10303
10304       /* Parse a full expression.  */
10305       expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
10306
10307       /* The `>' token might be the end of a template-id or
10308          template-parameter-list now.  */
10309       parser->greater_than_is_operator_p
10310         = saved_greater_than_is_operator_p;
10311     }
10312
10313   /* Go back to evaluating expressions.  */
10314   --cp_unevaluated_operand;
10315   --c_inhibit_evaluation_warnings;
10316
10317   /* Restore the old message and the integral constant expression
10318      flags.  */
10319   parser->type_definition_forbidden_message = saved_message;
10320   parser->integral_constant_expression_p
10321     = saved_integral_constant_expression_p;
10322   parser->non_integral_constant_expression_p
10323     = saved_non_integral_constant_expression_p;
10324
10325   if (expr == error_mark_node)
10326     {
10327       /* Skip everything up to the closing `)'.  */
10328       cp_parser_skip_to_closing_parenthesis (parser, true, false,
10329                                              /*consume_paren=*/true);
10330       return error_mark_node;
10331     }
10332   
10333   /* Parse to the closing `)'.  */
10334   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
10335     {
10336       cp_parser_skip_to_closing_parenthesis (parser, true, false,
10337                                              /*consume_paren=*/true);
10338       return error_mark_node;
10339     }
10340
10341   return finish_decltype_type (expr, id_expression_or_member_access_p,
10342                                tf_warning_or_error);
10343 }
10344
10345 /* Special member functions [gram.special] */
10346
10347 /* Parse a conversion-function-id.
10348
10349    conversion-function-id:
10350      operator conversion-type-id
10351
10352    Returns an IDENTIFIER_NODE representing the operator.  */
10353
10354 static tree
10355 cp_parser_conversion_function_id (cp_parser* parser)
10356 {
10357   tree type;
10358   tree saved_scope;
10359   tree saved_qualifying_scope;
10360   tree saved_object_scope;
10361   tree pushed_scope = NULL_TREE;
10362
10363   /* Look for the `operator' token.  */
10364   if (!cp_parser_require_keyword (parser, RID_OPERATOR, RT_OPERATOR))
10365     return error_mark_node;
10366   /* When we parse the conversion-type-id, the current scope will be
10367      reset.  However, we need that information in able to look up the
10368      conversion function later, so we save it here.  */
10369   saved_scope = parser->scope;
10370   saved_qualifying_scope = parser->qualifying_scope;
10371   saved_object_scope = parser->object_scope;
10372   /* We must enter the scope of the class so that the names of
10373      entities declared within the class are available in the
10374      conversion-type-id.  For example, consider:
10375
10376        struct S {
10377          typedef int I;
10378          operator I();
10379        };
10380
10381        S::operator I() { ... }
10382
10383      In order to see that `I' is a type-name in the definition, we
10384      must be in the scope of `S'.  */
10385   if (saved_scope)
10386     pushed_scope = push_scope (saved_scope);
10387   /* Parse the conversion-type-id.  */
10388   type = cp_parser_conversion_type_id (parser);
10389   /* Leave the scope of the class, if any.  */
10390   if (pushed_scope)
10391     pop_scope (pushed_scope);
10392   /* Restore the saved scope.  */
10393   parser->scope = saved_scope;
10394   parser->qualifying_scope = saved_qualifying_scope;
10395   parser->object_scope = saved_object_scope;
10396   /* If the TYPE is invalid, indicate failure.  */
10397   if (type == error_mark_node)
10398     return error_mark_node;
10399   return mangle_conv_op_name_for_type (type);
10400 }
10401
10402 /* Parse a conversion-type-id:
10403
10404    conversion-type-id:
10405      type-specifier-seq conversion-declarator [opt]
10406
10407    Returns the TYPE specified.  */
10408
10409 static tree
10410 cp_parser_conversion_type_id (cp_parser* parser)
10411 {
10412   tree attributes;
10413   cp_decl_specifier_seq type_specifiers;
10414   cp_declarator *declarator;
10415   tree type_specified;
10416
10417   /* Parse the attributes.  */
10418   attributes = cp_parser_attributes_opt (parser);
10419   /* Parse the type-specifiers.  */
10420   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
10421                                 /*is_trailing_return=*/false,
10422                                 &type_specifiers);
10423   /* If that didn't work, stop.  */
10424   if (type_specifiers.type == error_mark_node)
10425     return error_mark_node;
10426   /* Parse the conversion-declarator.  */
10427   declarator = cp_parser_conversion_declarator_opt (parser);
10428
10429   type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
10430                                     /*initialized=*/0, &attributes);
10431   if (attributes)
10432     cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
10433
10434   /* Don't give this error when parsing tentatively.  This happens to
10435      work because we always parse this definitively once.  */
10436   if (! cp_parser_uncommitted_to_tentative_parse_p (parser)
10437       && type_uses_auto (type_specified))
10438     {
10439       error ("invalid use of %<auto%> in conversion operator");
10440       return error_mark_node;
10441     }
10442
10443   return type_specified;
10444 }
10445
10446 /* Parse an (optional) conversion-declarator.
10447
10448    conversion-declarator:
10449      ptr-operator conversion-declarator [opt]
10450
10451    */
10452
10453 static cp_declarator *
10454 cp_parser_conversion_declarator_opt (cp_parser* parser)
10455 {
10456   enum tree_code code;
10457   tree class_type;
10458   cp_cv_quals cv_quals;
10459
10460   /* We don't know if there's a ptr-operator next, or not.  */
10461   cp_parser_parse_tentatively (parser);
10462   /* Try the ptr-operator.  */
10463   code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
10464   /* If it worked, look for more conversion-declarators.  */
10465   if (cp_parser_parse_definitely (parser))
10466     {
10467       cp_declarator *declarator;
10468
10469       /* Parse another optional declarator.  */
10470       declarator = cp_parser_conversion_declarator_opt (parser);
10471
10472       return cp_parser_make_indirect_declarator
10473         (code, class_type, cv_quals, declarator);
10474    }
10475
10476   return NULL;
10477 }
10478
10479 /* Parse an (optional) ctor-initializer.
10480
10481    ctor-initializer:
10482      : mem-initializer-list
10483
10484    Returns TRUE iff the ctor-initializer was actually present.  */
10485
10486 static bool
10487 cp_parser_ctor_initializer_opt (cp_parser* parser)
10488 {
10489   /* If the next token is not a `:', then there is no
10490      ctor-initializer.  */
10491   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
10492     {
10493       /* Do default initialization of any bases and members.  */
10494       if (DECL_CONSTRUCTOR_P (current_function_decl))
10495         finish_mem_initializers (NULL_TREE);
10496
10497       return false;
10498     }
10499
10500   /* Consume the `:' token.  */
10501   cp_lexer_consume_token (parser->lexer);
10502   /* And the mem-initializer-list.  */
10503   cp_parser_mem_initializer_list (parser);
10504
10505   return true;
10506 }
10507
10508 /* Parse a mem-initializer-list.
10509
10510    mem-initializer-list:
10511      mem-initializer ... [opt]
10512      mem-initializer ... [opt] , mem-initializer-list  */
10513
10514 static void
10515 cp_parser_mem_initializer_list (cp_parser* parser)
10516 {
10517   tree mem_initializer_list = NULL_TREE;
10518   cp_token *token = cp_lexer_peek_token (parser->lexer);
10519
10520   /* Let the semantic analysis code know that we are starting the
10521      mem-initializer-list.  */
10522   if (!DECL_CONSTRUCTOR_P (current_function_decl))
10523     error_at (token->location,
10524               "only constructors take member initializers");
10525
10526   /* Loop through the list.  */
10527   while (true)
10528     {
10529       tree mem_initializer;
10530
10531       token = cp_lexer_peek_token (parser->lexer);
10532       /* Parse the mem-initializer.  */
10533       mem_initializer = cp_parser_mem_initializer (parser);
10534       /* If the next token is a `...', we're expanding member initializers. */
10535       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
10536         {
10537           /* Consume the `...'. */
10538           cp_lexer_consume_token (parser->lexer);
10539
10540           /* The TREE_PURPOSE must be a _TYPE, because base-specifiers
10541              can be expanded but members cannot. */
10542           if (mem_initializer != error_mark_node
10543               && !TYPE_P (TREE_PURPOSE (mem_initializer)))
10544             {
10545               error_at (token->location,
10546                         "cannot expand initializer for member %<%D%>",
10547                         TREE_PURPOSE (mem_initializer));
10548               mem_initializer = error_mark_node;
10549             }
10550
10551           /* Construct the pack expansion type. */
10552           if (mem_initializer != error_mark_node)
10553             mem_initializer = make_pack_expansion (mem_initializer);
10554         }
10555       /* Add it to the list, unless it was erroneous.  */
10556       if (mem_initializer != error_mark_node)
10557         {
10558           TREE_CHAIN (mem_initializer) = mem_initializer_list;
10559           mem_initializer_list = mem_initializer;
10560         }
10561       /* If the next token is not a `,', we're done.  */
10562       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
10563         break;
10564       /* Consume the `,' token.  */
10565       cp_lexer_consume_token (parser->lexer);
10566     }
10567
10568   /* Perform semantic analysis.  */
10569   if (DECL_CONSTRUCTOR_P (current_function_decl))
10570     finish_mem_initializers (mem_initializer_list);
10571 }
10572
10573 /* Parse a mem-initializer.
10574
10575    mem-initializer:
10576      mem-initializer-id ( expression-list [opt] )
10577      mem-initializer-id braced-init-list
10578
10579    GNU extension:
10580
10581    mem-initializer:
10582      ( expression-list [opt] )
10583
10584    Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
10585    class) or FIELD_DECL (for a non-static data member) to initialize;
10586    the TREE_VALUE is the expression-list.  An empty initialization
10587    list is represented by void_list_node.  */
10588
10589 static tree
10590 cp_parser_mem_initializer (cp_parser* parser)
10591 {
10592   tree mem_initializer_id;
10593   tree expression_list;
10594   tree member;
10595   cp_token *token = cp_lexer_peek_token (parser->lexer);
10596
10597   /* Find out what is being initialized.  */
10598   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
10599     {
10600       permerror (token->location,
10601                  "anachronistic old-style base class initializer");
10602       mem_initializer_id = NULL_TREE;
10603     }
10604   else
10605     {
10606       mem_initializer_id = cp_parser_mem_initializer_id (parser);
10607       if (mem_initializer_id == error_mark_node)
10608         return mem_initializer_id;
10609     }
10610   member = expand_member_init (mem_initializer_id);
10611   if (member && !DECL_P (member))
10612     in_base_initializer = 1;
10613
10614   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
10615     {
10616       bool expr_non_constant_p;
10617       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
10618       expression_list = cp_parser_braced_list (parser, &expr_non_constant_p);
10619       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
10620       expression_list = build_tree_list (NULL_TREE, expression_list);
10621     }
10622   else
10623     {
10624       VEC(tree,gc)* vec;
10625       vec = cp_parser_parenthesized_expression_list (parser, non_attr,
10626                                                      /*cast_p=*/false,
10627                                                      /*allow_expansion_p=*/true,
10628                                                      /*non_constant_p=*/NULL);
10629       if (vec == NULL)
10630         return error_mark_node;
10631       expression_list = build_tree_list_vec (vec);
10632       release_tree_vector (vec);
10633     }
10634
10635   if (expression_list == error_mark_node)
10636     return error_mark_node;
10637   if (!expression_list)
10638     expression_list = void_type_node;
10639
10640   in_base_initializer = 0;
10641
10642   return member ? build_tree_list (member, expression_list) : error_mark_node;
10643 }
10644
10645 /* Parse a mem-initializer-id.
10646
10647    mem-initializer-id:
10648      :: [opt] nested-name-specifier [opt] class-name
10649      identifier
10650
10651    Returns a TYPE indicating the class to be initializer for the first
10652    production.  Returns an IDENTIFIER_NODE indicating the data member
10653    to be initialized for the second production.  */
10654
10655 static tree
10656 cp_parser_mem_initializer_id (cp_parser* parser)
10657 {
10658   bool global_scope_p;
10659   bool nested_name_specifier_p;
10660   bool template_p = false;
10661   tree id;
10662
10663   cp_token *token = cp_lexer_peek_token (parser->lexer);
10664
10665   /* `typename' is not allowed in this context ([temp.res]).  */
10666   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
10667     {
10668       error_at (token->location, 
10669                 "keyword %<typename%> not allowed in this context (a qualified "
10670                 "member initializer is implicitly a type)");
10671       cp_lexer_consume_token (parser->lexer);
10672     }
10673   /* Look for the optional `::' operator.  */
10674   global_scope_p
10675     = (cp_parser_global_scope_opt (parser,
10676                                    /*current_scope_valid_p=*/false)
10677        != NULL_TREE);
10678   /* Look for the optional nested-name-specifier.  The simplest way to
10679      implement:
10680
10681        [temp.res]
10682
10683        The keyword `typename' is not permitted in a base-specifier or
10684        mem-initializer; in these contexts a qualified name that
10685        depends on a template-parameter is implicitly assumed to be a
10686        type name.
10687
10688      is to assume that we have seen the `typename' keyword at this
10689      point.  */
10690   nested_name_specifier_p
10691     = (cp_parser_nested_name_specifier_opt (parser,
10692                                             /*typename_keyword_p=*/true,
10693                                             /*check_dependency_p=*/true,
10694                                             /*type_p=*/true,
10695                                             /*is_declaration=*/true)
10696        != NULL_TREE);
10697   if (nested_name_specifier_p)
10698     template_p = cp_parser_optional_template_keyword (parser);
10699   /* If there is a `::' operator or a nested-name-specifier, then we
10700      are definitely looking for a class-name.  */
10701   if (global_scope_p || nested_name_specifier_p)
10702     return cp_parser_class_name (parser,
10703                                  /*typename_keyword_p=*/true,
10704                                  /*template_keyword_p=*/template_p,
10705                                  typename_type,
10706                                  /*check_dependency_p=*/true,
10707                                  /*class_head_p=*/false,
10708                                  /*is_declaration=*/true);
10709   /* Otherwise, we could also be looking for an ordinary identifier.  */
10710   cp_parser_parse_tentatively (parser);
10711   /* Try a class-name.  */
10712   id = cp_parser_class_name (parser,
10713                              /*typename_keyword_p=*/true,
10714                              /*template_keyword_p=*/false,
10715                              none_type,
10716                              /*check_dependency_p=*/true,
10717                              /*class_head_p=*/false,
10718                              /*is_declaration=*/true);
10719   /* If we found one, we're done.  */
10720   if (cp_parser_parse_definitely (parser))
10721     return id;
10722   /* Otherwise, look for an ordinary identifier.  */
10723   return cp_parser_identifier (parser);
10724 }
10725
10726 /* Overloading [gram.over] */
10727
10728 /* Parse an operator-function-id.
10729
10730    operator-function-id:
10731      operator operator
10732
10733    Returns an IDENTIFIER_NODE for the operator which is a
10734    human-readable spelling of the identifier, e.g., `operator +'.  */
10735
10736 static tree
10737 cp_parser_operator_function_id (cp_parser* parser)
10738 {
10739   /* Look for the `operator' keyword.  */
10740   if (!cp_parser_require_keyword (parser, RID_OPERATOR, RT_OPERATOR))
10741     return error_mark_node;
10742   /* And then the name of the operator itself.  */
10743   return cp_parser_operator (parser);
10744 }
10745
10746 /* Parse an operator.
10747
10748    operator:
10749      new delete new[] delete[] + - * / % ^ & | ~ ! = < >
10750      += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
10751      || ++ -- , ->* -> () []
10752
10753    GNU Extensions:
10754
10755    operator:
10756      <? >? <?= >?=
10757
10758    Returns an IDENTIFIER_NODE for the operator which is a
10759    human-readable spelling of the identifier, e.g., `operator +'.  */
10760
10761 static tree
10762 cp_parser_operator (cp_parser* parser)
10763 {
10764   tree id = NULL_TREE;
10765   cp_token *token;
10766
10767   /* Peek at the next token.  */
10768   token = cp_lexer_peek_token (parser->lexer);
10769   /* Figure out which operator we have.  */
10770   switch (token->type)
10771     {
10772     case CPP_KEYWORD:
10773       {
10774         enum tree_code op;
10775
10776         /* The keyword should be either `new' or `delete'.  */
10777         if (token->keyword == RID_NEW)
10778           op = NEW_EXPR;
10779         else if (token->keyword == RID_DELETE)
10780           op = DELETE_EXPR;
10781         else
10782           break;
10783
10784         /* Consume the `new' or `delete' token.  */
10785         cp_lexer_consume_token (parser->lexer);
10786
10787         /* Peek at the next token.  */
10788         token = cp_lexer_peek_token (parser->lexer);
10789         /* If it's a `[' token then this is the array variant of the
10790            operator.  */
10791         if (token->type == CPP_OPEN_SQUARE)
10792           {
10793             /* Consume the `[' token.  */
10794             cp_lexer_consume_token (parser->lexer);
10795             /* Look for the `]' token.  */
10796             cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
10797             id = ansi_opname (op == NEW_EXPR
10798                               ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
10799           }
10800         /* Otherwise, we have the non-array variant.  */
10801         else
10802           id = ansi_opname (op);
10803
10804         return id;
10805       }
10806
10807     case CPP_PLUS:
10808       id = ansi_opname (PLUS_EXPR);
10809       break;
10810
10811     case CPP_MINUS:
10812       id = ansi_opname (MINUS_EXPR);
10813       break;
10814
10815     case CPP_MULT:
10816       id = ansi_opname (MULT_EXPR);
10817       break;
10818
10819     case CPP_DIV:
10820       id = ansi_opname (TRUNC_DIV_EXPR);
10821       break;
10822
10823     case CPP_MOD:
10824       id = ansi_opname (TRUNC_MOD_EXPR);
10825       break;
10826
10827     case CPP_XOR:
10828       id = ansi_opname (BIT_XOR_EXPR);
10829       break;
10830
10831     case CPP_AND:
10832       id = ansi_opname (BIT_AND_EXPR);
10833       break;
10834
10835     case CPP_OR:
10836       id = ansi_opname (BIT_IOR_EXPR);
10837       break;
10838
10839     case CPP_COMPL:
10840       id = ansi_opname (BIT_NOT_EXPR);
10841       break;
10842
10843     case CPP_NOT:
10844       id = ansi_opname (TRUTH_NOT_EXPR);
10845       break;
10846
10847     case CPP_EQ:
10848       id = ansi_assopname (NOP_EXPR);
10849       break;
10850
10851     case CPP_LESS:
10852       id = ansi_opname (LT_EXPR);
10853       break;
10854
10855     case CPP_GREATER:
10856       id = ansi_opname (GT_EXPR);
10857       break;
10858
10859     case CPP_PLUS_EQ:
10860       id = ansi_assopname (PLUS_EXPR);
10861       break;
10862
10863     case CPP_MINUS_EQ:
10864       id = ansi_assopname (MINUS_EXPR);
10865       break;
10866
10867     case CPP_MULT_EQ:
10868       id = ansi_assopname (MULT_EXPR);
10869       break;
10870
10871     case CPP_DIV_EQ:
10872       id = ansi_assopname (TRUNC_DIV_EXPR);
10873       break;
10874
10875     case CPP_MOD_EQ:
10876       id = ansi_assopname (TRUNC_MOD_EXPR);
10877       break;
10878
10879     case CPP_XOR_EQ:
10880       id = ansi_assopname (BIT_XOR_EXPR);
10881       break;
10882
10883     case CPP_AND_EQ:
10884       id = ansi_assopname (BIT_AND_EXPR);
10885       break;
10886
10887     case CPP_OR_EQ:
10888       id = ansi_assopname (BIT_IOR_EXPR);
10889       break;
10890
10891     case CPP_LSHIFT:
10892       id = ansi_opname (LSHIFT_EXPR);
10893       break;
10894
10895     case CPP_RSHIFT:
10896       id = ansi_opname (RSHIFT_EXPR);
10897       break;
10898
10899     case CPP_LSHIFT_EQ:
10900       id = ansi_assopname (LSHIFT_EXPR);
10901       break;
10902
10903     case CPP_RSHIFT_EQ:
10904       id = ansi_assopname (RSHIFT_EXPR);
10905       break;
10906
10907     case CPP_EQ_EQ:
10908       id = ansi_opname (EQ_EXPR);
10909       break;
10910
10911     case CPP_NOT_EQ:
10912       id = ansi_opname (NE_EXPR);
10913       break;
10914
10915     case CPP_LESS_EQ:
10916       id = ansi_opname (LE_EXPR);
10917       break;
10918
10919     case CPP_GREATER_EQ:
10920       id = ansi_opname (GE_EXPR);
10921       break;
10922
10923     case CPP_AND_AND:
10924       id = ansi_opname (TRUTH_ANDIF_EXPR);
10925       break;
10926
10927     case CPP_OR_OR:
10928       id = ansi_opname (TRUTH_ORIF_EXPR);
10929       break;
10930
10931     case CPP_PLUS_PLUS:
10932       id = ansi_opname (POSTINCREMENT_EXPR);
10933       break;
10934
10935     case CPP_MINUS_MINUS:
10936       id = ansi_opname (PREDECREMENT_EXPR);
10937       break;
10938
10939     case CPP_COMMA:
10940       id = ansi_opname (COMPOUND_EXPR);
10941       break;
10942
10943     case CPP_DEREF_STAR:
10944       id = ansi_opname (MEMBER_REF);
10945       break;
10946
10947     case CPP_DEREF:
10948       id = ansi_opname (COMPONENT_REF);
10949       break;
10950
10951     case CPP_OPEN_PAREN:
10952       /* Consume the `('.  */
10953       cp_lexer_consume_token (parser->lexer);
10954       /* Look for the matching `)'.  */
10955       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
10956       return ansi_opname (CALL_EXPR);
10957
10958     case CPP_OPEN_SQUARE:
10959       /* Consume the `['.  */
10960       cp_lexer_consume_token (parser->lexer);
10961       /* Look for the matching `]'.  */
10962       cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
10963       return ansi_opname (ARRAY_REF);
10964
10965     default:
10966       /* Anything else is an error.  */
10967       break;
10968     }
10969
10970   /* If we have selected an identifier, we need to consume the
10971      operator token.  */
10972   if (id)
10973     cp_lexer_consume_token (parser->lexer);
10974   /* Otherwise, no valid operator name was present.  */
10975   else
10976     {
10977       cp_parser_error (parser, "expected operator");
10978       id = error_mark_node;
10979     }
10980
10981   return id;
10982 }
10983
10984 /* Parse a template-declaration.
10985
10986    template-declaration:
10987      export [opt] template < template-parameter-list > declaration
10988
10989    If MEMBER_P is TRUE, this template-declaration occurs within a
10990    class-specifier.
10991
10992    The grammar rule given by the standard isn't correct.  What
10993    is really meant is:
10994
10995    template-declaration:
10996      export [opt] template-parameter-list-seq
10997        decl-specifier-seq [opt] init-declarator [opt] ;
10998      export [opt] template-parameter-list-seq
10999        function-definition
11000
11001    template-parameter-list-seq:
11002      template-parameter-list-seq [opt]
11003      template < template-parameter-list >  */
11004
11005 static void
11006 cp_parser_template_declaration (cp_parser* parser, bool member_p)
11007 {
11008   /* Check for `export'.  */
11009   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
11010     {
11011       /* Consume the `export' token.  */
11012       cp_lexer_consume_token (parser->lexer);
11013       /* Warn that we do not support `export'.  */
11014       warning (0, "keyword %<export%> not implemented, and will be ignored");
11015     }
11016
11017   cp_parser_template_declaration_after_export (parser, member_p);
11018 }
11019
11020 /* Parse a template-parameter-list.
11021
11022    template-parameter-list:
11023      template-parameter
11024      template-parameter-list , template-parameter
11025
11026    Returns a TREE_LIST.  Each node represents a template parameter.
11027    The nodes are connected via their TREE_CHAINs.  */
11028
11029 static tree
11030 cp_parser_template_parameter_list (cp_parser* parser)
11031 {
11032   tree parameter_list = NULL_TREE;
11033
11034   begin_template_parm_list ();
11035
11036   /* The loop below parses the template parms.  We first need to know
11037      the total number of template parms to be able to compute proper
11038      canonical types of each dependent type. So after the loop, when
11039      we know the total number of template parms,
11040      end_template_parm_list computes the proper canonical types and
11041      fixes up the dependent types accordingly.  */
11042   while (true)
11043     {
11044       tree parameter;
11045       bool is_non_type;
11046       bool is_parameter_pack;
11047       location_t parm_loc;
11048
11049       /* Parse the template-parameter.  */
11050       parm_loc = cp_lexer_peek_token (parser->lexer)->location;
11051       parameter = cp_parser_template_parameter (parser, 
11052                                                 &is_non_type,
11053                                                 &is_parameter_pack);
11054       /* Add it to the list.  */
11055       if (parameter != error_mark_node)
11056         parameter_list = process_template_parm (parameter_list,
11057                                                 parm_loc,
11058                                                 parameter,
11059                                                 is_non_type,
11060                                                 is_parameter_pack,
11061                                                 0);
11062       else
11063        {
11064          tree err_parm = build_tree_list (parameter, parameter);
11065          parameter_list = chainon (parameter_list, err_parm);
11066        }
11067
11068       /* If the next token is not a `,', we're done.  */
11069       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11070         break;
11071       /* Otherwise, consume the `,' token.  */
11072       cp_lexer_consume_token (parser->lexer);
11073     }
11074
11075   return end_template_parm_list (parameter_list);
11076 }
11077
11078 /* Parse a template-parameter.
11079
11080    template-parameter:
11081      type-parameter
11082      parameter-declaration
11083
11084    If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
11085    the parameter.  The TREE_PURPOSE is the default value, if any.
11086    Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
11087    iff this parameter is a non-type parameter.  *IS_PARAMETER_PACK is
11088    set to true iff this parameter is a parameter pack. */
11089
11090 static tree
11091 cp_parser_template_parameter (cp_parser* parser, bool *is_non_type,
11092                               bool *is_parameter_pack)
11093 {
11094   cp_token *token;
11095   cp_parameter_declarator *parameter_declarator;
11096   cp_declarator *id_declarator;
11097   tree parm;
11098
11099   /* Assume it is a type parameter or a template parameter.  */
11100   *is_non_type = false;
11101   /* Assume it not a parameter pack. */
11102   *is_parameter_pack = false;
11103   /* Peek at the next token.  */
11104   token = cp_lexer_peek_token (parser->lexer);
11105   /* If it is `class' or `template', we have a type-parameter.  */
11106   if (token->keyword == RID_TEMPLATE)
11107     return cp_parser_type_parameter (parser, is_parameter_pack);
11108   /* If it is `class' or `typename' we do not know yet whether it is a
11109      type parameter or a non-type parameter.  Consider:
11110
11111        template <typename T, typename T::X X> ...
11112
11113      or:
11114
11115        template <class C, class D*> ...
11116
11117      Here, the first parameter is a type parameter, and the second is
11118      a non-type parameter.  We can tell by looking at the token after
11119      the identifier -- if it is a `,', `=', or `>' then we have a type
11120      parameter.  */
11121   if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
11122     {
11123       /* Peek at the token after `class' or `typename'.  */
11124       token = cp_lexer_peek_nth_token (parser->lexer, 2);
11125       /* If it's an ellipsis, we have a template type parameter
11126          pack. */
11127       if (token->type == CPP_ELLIPSIS)
11128         return cp_parser_type_parameter (parser, is_parameter_pack);
11129       /* If it's an identifier, skip it.  */
11130       if (token->type == CPP_NAME)
11131         token = cp_lexer_peek_nth_token (parser->lexer, 3);
11132       /* Now, see if the token looks like the end of a template
11133          parameter.  */
11134       if (token->type == CPP_COMMA
11135           || token->type == CPP_EQ
11136           || token->type == CPP_GREATER)
11137         return cp_parser_type_parameter (parser, is_parameter_pack);
11138     }
11139
11140   /* Otherwise, it is a non-type parameter.
11141
11142      [temp.param]
11143
11144      When parsing a default template-argument for a non-type
11145      template-parameter, the first non-nested `>' is taken as the end
11146      of the template parameter-list rather than a greater-than
11147      operator.  */
11148   *is_non_type = true;
11149   parameter_declarator
11150      = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
11151                                         /*parenthesized_p=*/NULL);
11152
11153   /* If the parameter declaration is marked as a parameter pack, set
11154      *IS_PARAMETER_PACK to notify the caller. Also, unmark the
11155      declarator's PACK_EXPANSION_P, otherwise we'll get errors from
11156      grokdeclarator. */
11157   if (parameter_declarator
11158       && parameter_declarator->declarator
11159       && parameter_declarator->declarator->parameter_pack_p)
11160     {
11161       *is_parameter_pack = true;
11162       parameter_declarator->declarator->parameter_pack_p = false;
11163     }
11164
11165   /* If the next token is an ellipsis, and we don't already have it
11166      marked as a parameter pack, then we have a parameter pack (that
11167      has no declarator).  */
11168   if (!*is_parameter_pack
11169       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
11170       && declarator_can_be_parameter_pack (parameter_declarator->declarator))
11171     {
11172       /* Consume the `...'.  */
11173       cp_lexer_consume_token (parser->lexer);
11174       maybe_warn_variadic_templates ();
11175       
11176       *is_parameter_pack = true;
11177     }
11178   /* We might end up with a pack expansion as the type of the non-type
11179      template parameter, in which case this is a non-type template
11180      parameter pack.  */
11181   else if (parameter_declarator
11182            && parameter_declarator->decl_specifiers.type
11183            && PACK_EXPANSION_P (parameter_declarator->decl_specifiers.type))
11184     {
11185       *is_parameter_pack = true;
11186       parameter_declarator->decl_specifiers.type = 
11187         PACK_EXPANSION_PATTERN (parameter_declarator->decl_specifiers.type);
11188     }
11189
11190   if (*is_parameter_pack && cp_lexer_next_token_is (parser->lexer, CPP_EQ))
11191     {
11192       /* Parameter packs cannot have default arguments.  However, a
11193          user may try to do so, so we'll parse them and give an
11194          appropriate diagnostic here.  */
11195
11196       /* Consume the `='.  */
11197       cp_token *start_token = cp_lexer_peek_token (parser->lexer);
11198       cp_lexer_consume_token (parser->lexer);
11199       
11200       /* Find the name of the parameter pack.  */     
11201       id_declarator = parameter_declarator->declarator;
11202       while (id_declarator && id_declarator->kind != cdk_id)
11203         id_declarator = id_declarator->declarator;
11204       
11205       if (id_declarator && id_declarator->kind == cdk_id)
11206         error_at (start_token->location,
11207                   "template parameter pack %qD cannot have a default argument",
11208                   id_declarator->u.id.unqualified_name);
11209       else
11210         error_at (start_token->location,
11211                   "template parameter pack cannot have a default argument");
11212       
11213       /* Parse the default argument, but throw away the result.  */
11214       cp_parser_default_argument (parser, /*template_parm_p=*/true);
11215     }
11216
11217   parm = grokdeclarator (parameter_declarator->declarator,
11218                          &parameter_declarator->decl_specifiers,
11219                          TPARM, /*initialized=*/0,
11220                          /*attrlist=*/NULL);
11221   if (parm == error_mark_node)
11222     return error_mark_node;
11223
11224   return build_tree_list (parameter_declarator->default_argument, parm);
11225 }
11226
11227 /* Parse a type-parameter.
11228
11229    type-parameter:
11230      class identifier [opt]
11231      class identifier [opt] = type-id
11232      typename identifier [opt]
11233      typename identifier [opt] = type-id
11234      template < template-parameter-list > class identifier [opt]
11235      template < template-parameter-list > class identifier [opt]
11236        = id-expression
11237
11238    GNU Extension (variadic templates):
11239
11240    type-parameter:
11241      class ... identifier [opt]
11242      typename ... identifier [opt]
11243
11244    Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
11245    TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
11246    the declaration of the parameter.
11247
11248    Sets *IS_PARAMETER_PACK if this is a template parameter pack. */
11249
11250 static tree
11251 cp_parser_type_parameter (cp_parser* parser, bool *is_parameter_pack)
11252 {
11253   cp_token *token;
11254   tree parameter;
11255
11256   /* Look for a keyword to tell us what kind of parameter this is.  */
11257   token = cp_parser_require (parser, CPP_KEYWORD, RT_CLASS_TYPENAME_TEMPLATE);
11258   if (!token)
11259     return error_mark_node;
11260
11261   switch (token->keyword)
11262     {
11263     case RID_CLASS:
11264     case RID_TYPENAME:
11265       {
11266         tree identifier;
11267         tree default_argument;
11268
11269         /* If the next token is an ellipsis, we have a template
11270            argument pack. */
11271         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
11272           {
11273             /* Consume the `...' token. */
11274             cp_lexer_consume_token (parser->lexer);
11275             maybe_warn_variadic_templates ();
11276
11277             *is_parameter_pack = true;
11278           }
11279
11280         /* If the next token is an identifier, then it names the
11281            parameter.  */
11282         if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
11283           identifier = cp_parser_identifier (parser);
11284         else
11285           identifier = NULL_TREE;
11286
11287         /* Create the parameter.  */
11288         parameter = finish_template_type_parm (class_type_node, identifier);
11289
11290         /* If the next token is an `=', we have a default argument.  */
11291         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
11292           {
11293             /* Consume the `=' token.  */
11294             cp_lexer_consume_token (parser->lexer);
11295             /* Parse the default-argument.  */
11296             push_deferring_access_checks (dk_no_deferred);
11297             default_argument = cp_parser_type_id (parser);
11298
11299             /* Template parameter packs cannot have default
11300                arguments. */
11301             if (*is_parameter_pack)
11302               {
11303                 if (identifier)
11304                   error_at (token->location,
11305                             "template parameter pack %qD cannot have a "
11306                             "default argument", identifier);
11307                 else
11308                   error_at (token->location,
11309                             "template parameter packs cannot have "
11310                             "default arguments");
11311                 default_argument = NULL_TREE;
11312               }
11313             pop_deferring_access_checks ();
11314           }
11315         else
11316           default_argument = NULL_TREE;
11317
11318         /* Create the combined representation of the parameter and the
11319            default argument.  */
11320         parameter = build_tree_list (default_argument, parameter);
11321       }
11322       break;
11323
11324     case RID_TEMPLATE:
11325       {
11326         tree identifier;
11327         tree default_argument;
11328
11329         /* Look for the `<'.  */
11330         cp_parser_require (parser, CPP_LESS, RT_LESS);
11331         /* Parse the template-parameter-list.  */
11332         cp_parser_template_parameter_list (parser);
11333         /* Look for the `>'.  */
11334         cp_parser_require (parser, CPP_GREATER, RT_GREATER);
11335         /* Look for the `class' keyword.  */
11336         cp_parser_require_keyword (parser, RID_CLASS, RT_CLASS);
11337         /* If the next token is an ellipsis, we have a template
11338            argument pack. */
11339         if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
11340           {
11341             /* Consume the `...' token. */
11342             cp_lexer_consume_token (parser->lexer);
11343             maybe_warn_variadic_templates ();
11344
11345             *is_parameter_pack = true;
11346           }
11347         /* If the next token is an `=', then there is a
11348            default-argument.  If the next token is a `>', we are at
11349            the end of the parameter-list.  If the next token is a `,',
11350            then we are at the end of this parameter.  */
11351         if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
11352             && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
11353             && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
11354           {
11355             identifier = cp_parser_identifier (parser);
11356             /* Treat invalid names as if the parameter were nameless.  */
11357             if (identifier == error_mark_node)
11358               identifier = NULL_TREE;
11359           }
11360         else
11361           identifier = NULL_TREE;
11362
11363         /* Create the template parameter.  */
11364         parameter = finish_template_template_parm (class_type_node,
11365                                                    identifier);
11366
11367         /* If the next token is an `=', then there is a
11368            default-argument.  */
11369         if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
11370           {
11371             bool is_template;
11372
11373             /* Consume the `='.  */
11374             cp_lexer_consume_token (parser->lexer);
11375             /* Parse the id-expression.  */
11376             push_deferring_access_checks (dk_no_deferred);
11377             /* save token before parsing the id-expression, for error
11378                reporting */
11379             token = cp_lexer_peek_token (parser->lexer);
11380             default_argument
11381               = cp_parser_id_expression (parser,
11382                                          /*template_keyword_p=*/false,
11383                                          /*check_dependency_p=*/true,
11384                                          /*template_p=*/&is_template,
11385                                          /*declarator_p=*/false,
11386                                          /*optional_p=*/false);
11387             if (TREE_CODE (default_argument) == TYPE_DECL)
11388               /* If the id-expression was a template-id that refers to
11389                  a template-class, we already have the declaration here,
11390                  so no further lookup is needed.  */
11391                  ;
11392             else
11393               /* Look up the name.  */
11394               default_argument
11395                 = cp_parser_lookup_name (parser, default_argument,
11396                                          none_type,
11397                                          /*is_template=*/is_template,
11398                                          /*is_namespace=*/false,
11399                                          /*check_dependency=*/true,
11400                                          /*ambiguous_decls=*/NULL,
11401                                          token->location);
11402             /* See if the default argument is valid.  */
11403             default_argument
11404               = check_template_template_default_arg (default_argument);
11405
11406             /* Template parameter packs cannot have default
11407                arguments. */
11408             if (*is_parameter_pack)
11409               {
11410                 if (identifier)
11411                   error_at (token->location,
11412                             "template parameter pack %qD cannot "
11413                             "have a default argument",
11414                             identifier);
11415                 else
11416                   error_at (token->location, "template parameter packs cannot "
11417                             "have default arguments");
11418                 default_argument = NULL_TREE;
11419               }
11420             pop_deferring_access_checks ();
11421           }
11422         else
11423           default_argument = NULL_TREE;
11424
11425         /* Create the combined representation of the parameter and the
11426            default argument.  */
11427         parameter = build_tree_list (default_argument, parameter);
11428       }
11429       break;
11430
11431     default:
11432       gcc_unreachable ();
11433       break;
11434     }
11435
11436   return parameter;
11437 }
11438
11439 /* Parse a template-id.
11440
11441    template-id:
11442      template-name < template-argument-list [opt] >
11443
11444    If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
11445    `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
11446    returned.  Otherwise, if the template-name names a function, or set
11447    of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
11448    names a class, returns a TYPE_DECL for the specialization.
11449
11450    If CHECK_DEPENDENCY_P is FALSE, names are looked up in
11451    uninstantiated templates.  */
11452
11453 static tree
11454 cp_parser_template_id (cp_parser *parser,
11455                        bool template_keyword_p,
11456                        bool check_dependency_p,
11457                        bool is_declaration)
11458 {
11459   int i;
11460   tree templ;
11461   tree arguments;
11462   tree template_id;
11463   cp_token_position start_of_id = 0;
11464   deferred_access_check *chk;
11465   VEC (deferred_access_check,gc) *access_check;
11466   cp_token *next_token = NULL, *next_token_2 = NULL;
11467   bool is_identifier;
11468
11469   /* If the next token corresponds to a template-id, there is no need
11470      to reparse it.  */
11471   next_token = cp_lexer_peek_token (parser->lexer);
11472   if (next_token->type == CPP_TEMPLATE_ID)
11473     {
11474       struct tree_check *check_value;
11475
11476       /* Get the stored value.  */
11477       check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
11478       /* Perform any access checks that were deferred.  */
11479       access_check = check_value->checks;
11480       if (access_check)
11481         {
11482           FOR_EACH_VEC_ELT (deferred_access_check, access_check, i, chk)
11483             perform_or_defer_access_check (chk->binfo,
11484                                            chk->decl,
11485                                            chk->diag_decl);
11486         }
11487       /* Return the stored value.  */
11488       return check_value->value;
11489     }
11490
11491   /* Avoid performing name lookup if there is no possibility of
11492      finding a template-id.  */
11493   if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
11494       || (next_token->type == CPP_NAME
11495           && !cp_parser_nth_token_starts_template_argument_list_p
11496                (parser, 2)))
11497     {
11498       cp_parser_error (parser, "expected template-id");
11499       return error_mark_node;
11500     }
11501
11502   /* Remember where the template-id starts.  */
11503   if (cp_parser_uncommitted_to_tentative_parse_p (parser))
11504     start_of_id = cp_lexer_token_position (parser->lexer, false);
11505
11506   push_deferring_access_checks (dk_deferred);
11507
11508   /* Parse the template-name.  */
11509   is_identifier = false;
11510   templ = cp_parser_template_name (parser, template_keyword_p,
11511                                    check_dependency_p,
11512                                    is_declaration,
11513                                    &is_identifier);
11514   if (templ == error_mark_node || is_identifier)
11515     {
11516       pop_deferring_access_checks ();
11517       return templ;
11518     }
11519
11520   /* If we find the sequence `[:' after a template-name, it's probably
11521      a digraph-typo for `< ::'. Substitute the tokens and check if we can
11522      parse correctly the argument list.  */
11523   next_token = cp_lexer_peek_token (parser->lexer);
11524   next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
11525   if (next_token->type == CPP_OPEN_SQUARE
11526       && next_token->flags & DIGRAPH
11527       && next_token_2->type == CPP_COLON
11528       && !(next_token_2->flags & PREV_WHITE))
11529     {
11530       cp_parser_parse_tentatively (parser);
11531       /* Change `:' into `::'.  */
11532       next_token_2->type = CPP_SCOPE;
11533       /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
11534          CPP_LESS.  */
11535       cp_lexer_consume_token (parser->lexer);
11536
11537       /* Parse the arguments.  */
11538       arguments = cp_parser_enclosed_template_argument_list (parser);
11539       if (!cp_parser_parse_definitely (parser))
11540         {
11541           /* If we couldn't parse an argument list, then we revert our changes
11542              and return simply an error. Maybe this is not a template-id
11543              after all.  */
11544           next_token_2->type = CPP_COLON;
11545           cp_parser_error (parser, "expected %<<%>");
11546           pop_deferring_access_checks ();
11547           return error_mark_node;
11548         }
11549       /* Otherwise, emit an error about the invalid digraph, but continue
11550          parsing because we got our argument list.  */
11551       if (permerror (next_token->location,
11552                      "%<<::%> cannot begin a template-argument list"))
11553         {
11554           static bool hint = false;
11555           inform (next_token->location,
11556                   "%<<:%> is an alternate spelling for %<[%>."
11557                   " Insert whitespace between %<<%> and %<::%>");
11558           if (!hint && !flag_permissive)
11559             {
11560               inform (next_token->location, "(if you use %<-fpermissive%>"
11561                       " G++ will accept your code)");
11562               hint = true;
11563             }
11564         }
11565     }
11566   else
11567     {
11568       /* Look for the `<' that starts the template-argument-list.  */
11569       if (!cp_parser_require (parser, CPP_LESS, RT_LESS))
11570         {
11571           pop_deferring_access_checks ();
11572           return error_mark_node;
11573         }
11574       /* Parse the arguments.  */
11575       arguments = cp_parser_enclosed_template_argument_list (parser);
11576     }
11577
11578   /* Build a representation of the specialization.  */
11579   if (TREE_CODE (templ) == IDENTIFIER_NODE)
11580     template_id = build_min_nt (TEMPLATE_ID_EXPR, templ, arguments);
11581   else if (DECL_CLASS_TEMPLATE_P (templ)
11582            || DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
11583     {
11584       bool entering_scope;
11585       /* In "template <typename T> ... A<T>::", A<T> is the abstract A
11586          template (rather than some instantiation thereof) only if
11587          is not nested within some other construct.  For example, in
11588          "template <typename T> void f(T) { A<T>::", A<T> is just an
11589          instantiation of A.  */
11590       entering_scope = (template_parm_scope_p ()
11591                         && cp_lexer_next_token_is (parser->lexer,
11592                                                    CPP_SCOPE));
11593       template_id
11594         = finish_template_type (templ, arguments, entering_scope);
11595     }
11596   else
11597     {
11598       /* If it's not a class-template or a template-template, it should be
11599          a function-template.  */
11600       gcc_assert ((DECL_FUNCTION_TEMPLATE_P (templ)
11601                    || TREE_CODE (templ) == OVERLOAD
11602                    || BASELINK_P (templ)));
11603
11604       template_id = lookup_template_function (templ, arguments);
11605     }
11606
11607   /* If parsing tentatively, replace the sequence of tokens that makes
11608      up the template-id with a CPP_TEMPLATE_ID token.  That way,
11609      should we re-parse the token stream, we will not have to repeat
11610      the effort required to do the parse, nor will we issue duplicate
11611      error messages about problems during instantiation of the
11612      template.  */
11613   if (start_of_id)
11614     {
11615       cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
11616
11617       /* Reset the contents of the START_OF_ID token.  */
11618       token->type = CPP_TEMPLATE_ID;
11619       /* Retrieve any deferred checks.  Do not pop this access checks yet
11620          so the memory will not be reclaimed during token replacing below.  */
11621       token->u.tree_check_value = ggc_alloc_cleared_tree_check ();
11622       token->u.tree_check_value->value = template_id;
11623       token->u.tree_check_value->checks = get_deferred_access_checks ();
11624       token->keyword = RID_MAX;
11625
11626       /* Purge all subsequent tokens.  */
11627       cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
11628
11629       /* ??? Can we actually assume that, if template_id ==
11630          error_mark_node, we will have issued a diagnostic to the
11631          user, as opposed to simply marking the tentative parse as
11632          failed?  */
11633       if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
11634         error_at (token->location, "parse error in template argument list");
11635     }
11636
11637   pop_deferring_access_checks ();
11638   return template_id;
11639 }
11640
11641 /* Parse a template-name.
11642
11643    template-name:
11644      identifier
11645
11646    The standard should actually say:
11647
11648    template-name:
11649      identifier
11650      operator-function-id
11651
11652    A defect report has been filed about this issue.
11653
11654    A conversion-function-id cannot be a template name because they cannot
11655    be part of a template-id. In fact, looking at this code:
11656
11657    a.operator K<int>()
11658
11659    the conversion-function-id is "operator K<int>", and K<int> is a type-id.
11660    It is impossible to call a templated conversion-function-id with an
11661    explicit argument list, since the only allowed template parameter is
11662    the type to which it is converting.
11663
11664    If TEMPLATE_KEYWORD_P is true, then we have just seen the
11665    `template' keyword, in a construction like:
11666
11667      T::template f<3>()
11668
11669    In that case `f' is taken to be a template-name, even though there
11670    is no way of knowing for sure.
11671
11672    Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
11673    name refers to a set of overloaded functions, at least one of which
11674    is a template, or an IDENTIFIER_NODE with the name of the template,
11675    if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
11676    names are looked up inside uninstantiated templates.  */
11677
11678 static tree
11679 cp_parser_template_name (cp_parser* parser,
11680                          bool template_keyword_p,
11681                          bool check_dependency_p,
11682                          bool is_declaration,
11683                          bool *is_identifier)
11684 {
11685   tree identifier;
11686   tree decl;
11687   tree fns;
11688   cp_token *token = cp_lexer_peek_token (parser->lexer);
11689
11690   /* If the next token is `operator', then we have either an
11691      operator-function-id or a conversion-function-id.  */
11692   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
11693     {
11694       /* We don't know whether we're looking at an
11695          operator-function-id or a conversion-function-id.  */
11696       cp_parser_parse_tentatively (parser);
11697       /* Try an operator-function-id.  */
11698       identifier = cp_parser_operator_function_id (parser);
11699       /* If that didn't work, try a conversion-function-id.  */
11700       if (!cp_parser_parse_definitely (parser))
11701         {
11702           cp_parser_error (parser, "expected template-name");
11703           return error_mark_node;
11704         }
11705     }
11706   /* Look for the identifier.  */
11707   else
11708     identifier = cp_parser_identifier (parser);
11709
11710   /* If we didn't find an identifier, we don't have a template-id.  */
11711   if (identifier == error_mark_node)
11712     return error_mark_node;
11713
11714   /* If the name immediately followed the `template' keyword, then it
11715      is a template-name.  However, if the next token is not `<', then
11716      we do not treat it as a template-name, since it is not being used
11717      as part of a template-id.  This enables us to handle constructs
11718      like:
11719
11720        template <typename T> struct S { S(); };
11721        template <typename T> S<T>::S();
11722
11723      correctly.  We would treat `S' as a template -- if it were `S<T>'
11724      -- but we do not if there is no `<'.  */
11725
11726   if (processing_template_decl
11727       && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
11728     {
11729       /* In a declaration, in a dependent context, we pretend that the
11730          "template" keyword was present in order to improve error
11731          recovery.  For example, given:
11732
11733            template <typename T> void f(T::X<int>);
11734
11735          we want to treat "X<int>" as a template-id.  */
11736       if (is_declaration
11737           && !template_keyword_p
11738           && parser->scope && TYPE_P (parser->scope)
11739           && check_dependency_p
11740           && dependent_scope_p (parser->scope)
11741           /* Do not do this for dtors (or ctors), since they never
11742              need the template keyword before their name.  */
11743           && !constructor_name_p (identifier, parser->scope))
11744         {
11745           cp_token_position start = 0;
11746
11747           /* Explain what went wrong.  */
11748           error_at (token->location, "non-template %qD used as template",
11749                     identifier);
11750           inform (token->location, "use %<%T::template %D%> to indicate that it is a template",
11751                   parser->scope, identifier);
11752           /* If parsing tentatively, find the location of the "<" token.  */
11753           if (cp_parser_simulate_error (parser))
11754             start = cp_lexer_token_position (parser->lexer, true);
11755           /* Parse the template arguments so that we can issue error
11756              messages about them.  */
11757           cp_lexer_consume_token (parser->lexer);
11758           cp_parser_enclosed_template_argument_list (parser);
11759           /* Skip tokens until we find a good place from which to
11760              continue parsing.  */
11761           cp_parser_skip_to_closing_parenthesis (parser,
11762                                                  /*recovering=*/true,
11763                                                  /*or_comma=*/true,
11764                                                  /*consume_paren=*/false);
11765           /* If parsing tentatively, permanently remove the
11766              template argument list.  That will prevent duplicate
11767              error messages from being issued about the missing
11768              "template" keyword.  */
11769           if (start)
11770             cp_lexer_purge_tokens_after (parser->lexer, start);
11771           if (is_identifier)
11772             *is_identifier = true;
11773           return identifier;
11774         }
11775
11776       /* If the "template" keyword is present, then there is generally
11777          no point in doing name-lookup, so we just return IDENTIFIER.
11778          But, if the qualifying scope is non-dependent then we can
11779          (and must) do name-lookup normally.  */
11780       if (template_keyword_p
11781           && (!parser->scope
11782               || (TYPE_P (parser->scope)
11783                   && dependent_type_p (parser->scope))))
11784         return identifier;
11785     }
11786
11787   /* Look up the name.  */
11788   decl = cp_parser_lookup_name (parser, identifier,
11789                                 none_type,
11790                                 /*is_template=*/true,
11791                                 /*is_namespace=*/false,
11792                                 check_dependency_p,
11793                                 /*ambiguous_decls=*/NULL,
11794                                 token->location);
11795
11796   /* If DECL is a template, then the name was a template-name.  */
11797   if (TREE_CODE (decl) == TEMPLATE_DECL)
11798     ;
11799   else
11800     {
11801       tree fn = NULL_TREE;
11802
11803       /* The standard does not explicitly indicate whether a name that
11804          names a set of overloaded declarations, some of which are
11805          templates, is a template-name.  However, such a name should
11806          be a template-name; otherwise, there is no way to form a
11807          template-id for the overloaded templates.  */
11808       fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
11809       if (TREE_CODE (fns) == OVERLOAD)
11810         for (fn = fns; fn; fn = OVL_NEXT (fn))
11811           if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
11812             break;
11813
11814       if (!fn)
11815         {
11816           /* The name does not name a template.  */
11817           cp_parser_error (parser, "expected template-name");
11818           return error_mark_node;
11819         }
11820     }
11821
11822   /* If DECL is dependent, and refers to a function, then just return
11823      its name; we will look it up again during template instantiation.  */
11824   if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
11825     {
11826       tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
11827       if (TYPE_P (scope) && dependent_type_p (scope))
11828         return identifier;
11829     }
11830
11831   return decl;
11832 }
11833
11834 /* Parse a template-argument-list.
11835
11836    template-argument-list:
11837      template-argument ... [opt]
11838      template-argument-list , template-argument ... [opt]
11839
11840    Returns a TREE_VEC containing the arguments.  */
11841
11842 static tree
11843 cp_parser_template_argument_list (cp_parser* parser)
11844 {
11845   tree fixed_args[10];
11846   unsigned n_args = 0;
11847   unsigned alloced = 10;
11848   tree *arg_ary = fixed_args;
11849   tree vec;
11850   bool saved_in_template_argument_list_p;
11851   bool saved_ice_p;
11852   bool saved_non_ice_p;
11853
11854   saved_in_template_argument_list_p = parser->in_template_argument_list_p;
11855   parser->in_template_argument_list_p = true;
11856   /* Even if the template-id appears in an integral
11857      constant-expression, the contents of the argument list do
11858      not.  */
11859   saved_ice_p = parser->integral_constant_expression_p;
11860   parser->integral_constant_expression_p = false;
11861   saved_non_ice_p = parser->non_integral_constant_expression_p;
11862   parser->non_integral_constant_expression_p = false;
11863   /* Parse the arguments.  */
11864   do
11865     {
11866       tree argument;
11867
11868       if (n_args)
11869         /* Consume the comma.  */
11870         cp_lexer_consume_token (parser->lexer);
11871
11872       /* Parse the template-argument.  */
11873       argument = cp_parser_template_argument (parser);
11874
11875       /* If the next token is an ellipsis, we're expanding a template
11876          argument pack. */
11877       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
11878         {
11879           if (argument == error_mark_node)
11880             {
11881               cp_token *token = cp_lexer_peek_token (parser->lexer);
11882               error_at (token->location,
11883                         "expected parameter pack before %<...%>");
11884             }
11885           /* Consume the `...' token. */
11886           cp_lexer_consume_token (parser->lexer);
11887
11888           /* Make the argument into a TYPE_PACK_EXPANSION or
11889              EXPR_PACK_EXPANSION. */
11890           argument = make_pack_expansion (argument);
11891         }
11892
11893       if (n_args == alloced)
11894         {
11895           alloced *= 2;
11896
11897           if (arg_ary == fixed_args)
11898             {
11899               arg_ary = XNEWVEC (tree, alloced);
11900               memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
11901             }
11902           else
11903             arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
11904         }
11905       arg_ary[n_args++] = argument;
11906     }
11907   while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
11908
11909   vec = make_tree_vec (n_args);
11910
11911   while (n_args--)
11912     TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
11913
11914   if (arg_ary != fixed_args)
11915     free (arg_ary);
11916   parser->non_integral_constant_expression_p = saved_non_ice_p;
11917   parser->integral_constant_expression_p = saved_ice_p;
11918   parser->in_template_argument_list_p = saved_in_template_argument_list_p;
11919 #ifdef ENABLE_CHECKING
11920   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
11921 #endif
11922   return vec;
11923 }
11924
11925 /* Parse a template-argument.
11926
11927    template-argument:
11928      assignment-expression
11929      type-id
11930      id-expression
11931
11932    The representation is that of an assignment-expression, type-id, or
11933    id-expression -- except that the qualified id-expression is
11934    evaluated, so that the value returned is either a DECL or an
11935    OVERLOAD.
11936
11937    Although the standard says "assignment-expression", it forbids
11938    throw-expressions or assignments in the template argument.
11939    Therefore, we use "conditional-expression" instead.  */
11940
11941 static tree
11942 cp_parser_template_argument (cp_parser* parser)
11943 {
11944   tree argument;
11945   bool template_p;
11946   bool address_p;
11947   bool maybe_type_id = false;
11948   cp_token *token = NULL, *argument_start_token = NULL;
11949   cp_id_kind idk;
11950
11951   /* There's really no way to know what we're looking at, so we just
11952      try each alternative in order.
11953
11954        [temp.arg]
11955
11956        In a template-argument, an ambiguity between a type-id and an
11957        expression is resolved to a type-id, regardless of the form of
11958        the corresponding template-parameter.
11959
11960      Therefore, we try a type-id first.  */
11961   cp_parser_parse_tentatively (parser);
11962   argument = cp_parser_template_type_arg (parser);
11963   /* If there was no error parsing the type-id but the next token is a
11964      '>>', our behavior depends on which dialect of C++ we're
11965      parsing. In C++98, we probably found a typo for '> >'. But there
11966      are type-id which are also valid expressions. For instance:
11967
11968      struct X { int operator >> (int); };
11969      template <int V> struct Foo {};
11970      Foo<X () >> 5> r;
11971
11972      Here 'X()' is a valid type-id of a function type, but the user just
11973      wanted to write the expression "X() >> 5". Thus, we remember that we
11974      found a valid type-id, but we still try to parse the argument as an
11975      expression to see what happens. 
11976
11977      In C++0x, the '>>' will be considered two separate '>'
11978      tokens.  */
11979   if (!cp_parser_error_occurred (parser)
11980       && cxx_dialect == cxx98
11981       && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
11982     {
11983       maybe_type_id = true;
11984       cp_parser_abort_tentative_parse (parser);
11985     }
11986   else
11987     {
11988       /* If the next token isn't a `,' or a `>', then this argument wasn't
11989       really finished. This means that the argument is not a valid
11990       type-id.  */
11991       if (!cp_parser_next_token_ends_template_argument_p (parser))
11992         cp_parser_error (parser, "expected template-argument");
11993       /* If that worked, we're done.  */
11994       if (cp_parser_parse_definitely (parser))
11995         return argument;
11996     }
11997   /* We're still not sure what the argument will be.  */
11998   cp_parser_parse_tentatively (parser);
11999   /* Try a template.  */
12000   argument_start_token = cp_lexer_peek_token (parser->lexer);
12001   argument = cp_parser_id_expression (parser,
12002                                       /*template_keyword_p=*/false,
12003                                       /*check_dependency_p=*/true,
12004                                       &template_p,
12005                                       /*declarator_p=*/false,
12006                                       /*optional_p=*/false);
12007   /* If the next token isn't a `,' or a `>', then this argument wasn't
12008      really finished.  */
12009   if (!cp_parser_next_token_ends_template_argument_p (parser))
12010     cp_parser_error (parser, "expected template-argument");
12011   if (!cp_parser_error_occurred (parser))
12012     {
12013       /* Figure out what is being referred to.  If the id-expression
12014          was for a class template specialization, then we will have a
12015          TYPE_DECL at this point.  There is no need to do name lookup
12016          at this point in that case.  */
12017       if (TREE_CODE (argument) != TYPE_DECL)
12018         argument = cp_parser_lookup_name (parser, argument,
12019                                           none_type,
12020                                           /*is_template=*/template_p,
12021                                           /*is_namespace=*/false,
12022                                           /*check_dependency=*/true,
12023                                           /*ambiguous_decls=*/NULL,
12024                                           argument_start_token->location);
12025       if (TREE_CODE (argument) != TEMPLATE_DECL
12026           && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
12027         cp_parser_error (parser, "expected template-name");
12028     }
12029   if (cp_parser_parse_definitely (parser))
12030     return argument;
12031   /* It must be a non-type argument.  There permitted cases are given
12032      in [temp.arg.nontype]:
12033
12034      -- an integral constant-expression of integral or enumeration
12035         type; or
12036
12037      -- the name of a non-type template-parameter; or
12038
12039      -- the name of an object or function with external linkage...
12040
12041      -- the address of an object or function with external linkage...
12042
12043      -- a pointer to member...  */
12044   /* Look for a non-type template parameter.  */
12045   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
12046     {
12047       cp_parser_parse_tentatively (parser);
12048       argument = cp_parser_primary_expression (parser,
12049                                                /*address_p=*/false,
12050                                                /*cast_p=*/false,
12051                                                /*template_arg_p=*/true,
12052                                                &idk);
12053       if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
12054           || !cp_parser_next_token_ends_template_argument_p (parser))
12055         cp_parser_simulate_error (parser);
12056       if (cp_parser_parse_definitely (parser))
12057         return argument;
12058     }
12059
12060   /* If the next token is "&", the argument must be the address of an
12061      object or function with external linkage.  */
12062   address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
12063   if (address_p)
12064     cp_lexer_consume_token (parser->lexer);
12065   /* See if we might have an id-expression.  */
12066   token = cp_lexer_peek_token (parser->lexer);
12067   if (token->type == CPP_NAME
12068       || token->keyword == RID_OPERATOR
12069       || token->type == CPP_SCOPE
12070       || token->type == CPP_TEMPLATE_ID
12071       || token->type == CPP_NESTED_NAME_SPECIFIER)
12072     {
12073       cp_parser_parse_tentatively (parser);
12074       argument = cp_parser_primary_expression (parser,
12075                                                address_p,
12076                                                /*cast_p=*/false,
12077                                                /*template_arg_p=*/true,
12078                                                &idk);
12079       if (cp_parser_error_occurred (parser)
12080           || !cp_parser_next_token_ends_template_argument_p (parser))
12081         cp_parser_abort_tentative_parse (parser);
12082       else
12083         {
12084           tree probe;
12085
12086           if (TREE_CODE (argument) == INDIRECT_REF)
12087             {
12088               gcc_assert (REFERENCE_REF_P (argument));
12089               argument = TREE_OPERAND (argument, 0);
12090             }
12091
12092           /* If we're in a template, we represent a qualified-id referring
12093              to a static data member as a SCOPE_REF even if the scope isn't
12094              dependent so that we can check access control later.  */
12095           probe = argument;
12096           if (TREE_CODE (probe) == SCOPE_REF)
12097             probe = TREE_OPERAND (probe, 1);
12098           if (TREE_CODE (probe) == VAR_DECL)
12099             {
12100               /* A variable without external linkage might still be a
12101                  valid constant-expression, so no error is issued here
12102                  if the external-linkage check fails.  */
12103               if (!address_p && !DECL_EXTERNAL_LINKAGE_P (probe))
12104                 cp_parser_simulate_error (parser);
12105             }
12106           else if (is_overloaded_fn (argument))
12107             /* All overloaded functions are allowed; if the external
12108                linkage test does not pass, an error will be issued
12109                later.  */
12110             ;
12111           else if (address_p
12112                    && (TREE_CODE (argument) == OFFSET_REF
12113                        || TREE_CODE (argument) == SCOPE_REF))
12114             /* A pointer-to-member.  */
12115             ;
12116           else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
12117             ;
12118           else
12119             cp_parser_simulate_error (parser);
12120
12121           if (cp_parser_parse_definitely (parser))
12122             {
12123               if (address_p)
12124                 argument = build_x_unary_op (ADDR_EXPR, argument,
12125                                              tf_warning_or_error);
12126               return argument;
12127             }
12128         }
12129     }
12130   /* If the argument started with "&", there are no other valid
12131      alternatives at this point.  */
12132   if (address_p)
12133     {
12134       cp_parser_error (parser, "invalid non-type template argument");
12135       return error_mark_node;
12136     }
12137
12138   /* If the argument wasn't successfully parsed as a type-id followed
12139      by '>>', the argument can only be a constant expression now.
12140      Otherwise, we try parsing the constant-expression tentatively,
12141      because the argument could really be a type-id.  */
12142   if (maybe_type_id)
12143     cp_parser_parse_tentatively (parser);
12144   argument = cp_parser_constant_expression (parser,
12145                                             /*allow_non_constant_p=*/false,
12146                                             /*non_constant_p=*/NULL);
12147   argument = fold_non_dependent_expr (argument);
12148   if (!maybe_type_id)
12149     return argument;
12150   if (!cp_parser_next_token_ends_template_argument_p (parser))
12151     cp_parser_error (parser, "expected template-argument");
12152   if (cp_parser_parse_definitely (parser))
12153     return argument;
12154   /* We did our best to parse the argument as a non type-id, but that
12155      was the only alternative that matched (albeit with a '>' after
12156      it). We can assume it's just a typo from the user, and a
12157      diagnostic will then be issued.  */
12158   return cp_parser_template_type_arg (parser);
12159 }
12160
12161 /* Parse an explicit-instantiation.
12162
12163    explicit-instantiation:
12164      template declaration
12165
12166    Although the standard says `declaration', what it really means is:
12167
12168    explicit-instantiation:
12169      template decl-specifier-seq [opt] declarator [opt] ;
12170
12171    Things like `template int S<int>::i = 5, int S<double>::j;' are not
12172    supposed to be allowed.  A defect report has been filed about this
12173    issue.
12174
12175    GNU Extension:
12176
12177    explicit-instantiation:
12178      storage-class-specifier template
12179        decl-specifier-seq [opt] declarator [opt] ;
12180      function-specifier template
12181        decl-specifier-seq [opt] declarator [opt] ;  */
12182
12183 static void
12184 cp_parser_explicit_instantiation (cp_parser* parser)
12185 {
12186   int declares_class_or_enum;
12187   cp_decl_specifier_seq decl_specifiers;
12188   tree extension_specifier = NULL_TREE;
12189
12190   timevar_push (TV_TEMPLATE_INST);
12191
12192   /* Look for an (optional) storage-class-specifier or
12193      function-specifier.  */
12194   if (cp_parser_allow_gnu_extensions_p (parser))
12195     {
12196       extension_specifier
12197         = cp_parser_storage_class_specifier_opt (parser);
12198       if (!extension_specifier)
12199         extension_specifier
12200           = cp_parser_function_specifier_opt (parser,
12201                                               /*decl_specs=*/NULL);
12202     }
12203
12204   /* Look for the `template' keyword.  */
12205   cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE);
12206   /* Let the front end know that we are processing an explicit
12207      instantiation.  */
12208   begin_explicit_instantiation ();
12209   /* [temp.explicit] says that we are supposed to ignore access
12210      control while processing explicit instantiation directives.  */
12211   push_deferring_access_checks (dk_no_check);
12212   /* Parse a decl-specifier-seq.  */
12213   cp_parser_decl_specifier_seq (parser,
12214                                 CP_PARSER_FLAGS_OPTIONAL,
12215                                 &decl_specifiers,
12216                                 &declares_class_or_enum);
12217   /* If there was exactly one decl-specifier, and it declared a class,
12218      and there's no declarator, then we have an explicit type
12219      instantiation.  */
12220   if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
12221     {
12222       tree type;
12223
12224       type = check_tag_decl (&decl_specifiers);
12225       /* Turn access control back on for names used during
12226          template instantiation.  */
12227       pop_deferring_access_checks ();
12228       if (type)
12229         do_type_instantiation (type, extension_specifier,
12230                                /*complain=*/tf_error);
12231     }
12232   else
12233     {
12234       cp_declarator *declarator;
12235       tree decl;
12236
12237       /* Parse the declarator.  */
12238       declarator
12239         = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
12240                                 /*ctor_dtor_or_conv_p=*/NULL,
12241                                 /*parenthesized_p=*/NULL,
12242                                 /*member_p=*/false);
12243       if (declares_class_or_enum & 2)
12244         cp_parser_check_for_definition_in_return_type (declarator,
12245                                                        decl_specifiers.type,
12246                                                        decl_specifiers.type_location);
12247       if (declarator != cp_error_declarator)
12248         {
12249           if (decl_specifiers.specs[(int)ds_inline])
12250             permerror (input_location, "explicit instantiation shall not use"
12251                        " %<inline%> specifier");
12252           if (decl_specifiers.specs[(int)ds_constexpr])
12253             permerror (input_location, "explicit instantiation shall not use"
12254                        " %<constexpr%> specifier");
12255
12256           decl = grokdeclarator (declarator, &decl_specifiers,
12257                                  NORMAL, 0, &decl_specifiers.attributes);
12258           /* Turn access control back on for names used during
12259              template instantiation.  */
12260           pop_deferring_access_checks ();
12261           /* Do the explicit instantiation.  */
12262           do_decl_instantiation (decl, extension_specifier);
12263         }
12264       else
12265         {
12266           pop_deferring_access_checks ();
12267           /* Skip the body of the explicit instantiation.  */
12268           cp_parser_skip_to_end_of_statement (parser);
12269         }
12270     }
12271   /* We're done with the instantiation.  */
12272   end_explicit_instantiation ();
12273
12274   cp_parser_consume_semicolon_at_end_of_statement (parser);
12275
12276   timevar_pop (TV_TEMPLATE_INST);
12277 }
12278
12279 /* Parse an explicit-specialization.
12280
12281    explicit-specialization:
12282      template < > declaration
12283
12284    Although the standard says `declaration', what it really means is:
12285
12286    explicit-specialization:
12287      template <> decl-specifier [opt] init-declarator [opt] ;
12288      template <> function-definition
12289      template <> explicit-specialization
12290      template <> template-declaration  */
12291
12292 static void
12293 cp_parser_explicit_specialization (cp_parser* parser)
12294 {
12295   bool need_lang_pop;
12296   cp_token *token = cp_lexer_peek_token (parser->lexer);
12297
12298   /* Look for the `template' keyword.  */
12299   cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE);
12300   /* Look for the `<'.  */
12301   cp_parser_require (parser, CPP_LESS, RT_LESS);
12302   /* Look for the `>'.  */
12303   cp_parser_require (parser, CPP_GREATER, RT_GREATER);
12304   /* We have processed another parameter list.  */
12305   ++parser->num_template_parameter_lists;
12306   /* [temp]
12307
12308      A template ... explicit specialization ... shall not have C
12309      linkage.  */
12310   if (current_lang_name == lang_name_c)
12311     {
12312       error_at (token->location, "template specialization with C linkage");
12313       /* Give it C++ linkage to avoid confusing other parts of the
12314          front end.  */
12315       push_lang_context (lang_name_cplusplus);
12316       need_lang_pop = true;
12317     }
12318   else
12319     need_lang_pop = false;
12320   /* Let the front end know that we are beginning a specialization.  */
12321   if (!begin_specialization ())
12322     {
12323       end_specialization ();
12324       return;
12325     }
12326
12327   /* If the next keyword is `template', we need to figure out whether
12328      or not we're looking a template-declaration.  */
12329   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
12330     {
12331       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
12332           && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
12333         cp_parser_template_declaration_after_export (parser,
12334                                                      /*member_p=*/false);
12335       else
12336         cp_parser_explicit_specialization (parser);
12337     }
12338   else
12339     /* Parse the dependent declaration.  */
12340     cp_parser_single_declaration (parser,
12341                                   /*checks=*/NULL,
12342                                   /*member_p=*/false,
12343                                   /*explicit_specialization_p=*/true,
12344                                   /*friend_p=*/NULL);
12345   /* We're done with the specialization.  */
12346   end_specialization ();
12347   /* For the erroneous case of a template with C linkage, we pushed an
12348      implicit C++ linkage scope; exit that scope now.  */
12349   if (need_lang_pop)
12350     pop_lang_context ();
12351   /* We're done with this parameter list.  */
12352   --parser->num_template_parameter_lists;
12353 }
12354
12355 /* Parse a type-specifier.
12356
12357    type-specifier:
12358      simple-type-specifier
12359      class-specifier
12360      enum-specifier
12361      elaborated-type-specifier
12362      cv-qualifier
12363
12364    GNU Extension:
12365
12366    type-specifier:
12367      __complex__
12368
12369    Returns a representation of the type-specifier.  For a
12370    class-specifier, enum-specifier, or elaborated-type-specifier, a
12371    TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
12372
12373    The parser flags FLAGS is used to control type-specifier parsing.
12374
12375    If IS_DECLARATION is TRUE, then this type-specifier is appearing
12376    in a decl-specifier-seq.
12377
12378    If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
12379    class-specifier, enum-specifier, or elaborated-type-specifier, then
12380    *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
12381    if a type is declared; 2 if it is defined.  Otherwise, it is set to
12382    zero.
12383
12384    If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
12385    cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
12386    is set to FALSE.  */
12387
12388 static tree
12389 cp_parser_type_specifier (cp_parser* parser,
12390                           cp_parser_flags flags,
12391                           cp_decl_specifier_seq *decl_specs,
12392                           bool is_declaration,
12393                           int* declares_class_or_enum,
12394                           bool* is_cv_qualifier)
12395 {
12396   tree type_spec = NULL_TREE;
12397   cp_token *token;
12398   enum rid keyword;
12399   cp_decl_spec ds = ds_last;
12400
12401   /* Assume this type-specifier does not declare a new type.  */
12402   if (declares_class_or_enum)
12403     *declares_class_or_enum = 0;
12404   /* And that it does not specify a cv-qualifier.  */
12405   if (is_cv_qualifier)
12406     *is_cv_qualifier = false;
12407   /* Peek at the next token.  */
12408   token = cp_lexer_peek_token (parser->lexer);
12409
12410   /* If we're looking at a keyword, we can use that to guide the
12411      production we choose.  */
12412   keyword = token->keyword;
12413   switch (keyword)
12414     {
12415     case RID_ENUM:
12416       if ((flags & CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS))
12417         goto elaborated_type_specifier;
12418
12419       /* Look for the enum-specifier.  */
12420       type_spec = cp_parser_enum_specifier (parser);
12421       /* If that worked, we're done.  */
12422       if (type_spec)
12423         {
12424           if (declares_class_or_enum)
12425             *declares_class_or_enum = 2;
12426           if (decl_specs)
12427             cp_parser_set_decl_spec_type (decl_specs,
12428                                           type_spec,
12429                                           token->location,
12430                                           /*user_defined_p=*/true);
12431           return type_spec;
12432         }
12433       else
12434         goto elaborated_type_specifier;
12435
12436       /* Any of these indicate either a class-specifier, or an
12437          elaborated-type-specifier.  */
12438     case RID_CLASS:
12439     case RID_STRUCT:
12440     case RID_UNION:
12441       if ((flags & CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS))
12442         goto elaborated_type_specifier;
12443
12444       /* Parse tentatively so that we can back up if we don't find a
12445          class-specifier.  */
12446       cp_parser_parse_tentatively (parser);
12447       /* Look for the class-specifier.  */
12448       type_spec = cp_parser_class_specifier (parser);
12449       invoke_plugin_callbacks (PLUGIN_FINISH_TYPE, type_spec);
12450       /* If that worked, we're done.  */
12451       if (cp_parser_parse_definitely (parser))
12452         {
12453           if (declares_class_or_enum)
12454             *declares_class_or_enum = 2;
12455           if (decl_specs)
12456             cp_parser_set_decl_spec_type (decl_specs,
12457                                           type_spec,
12458                                           token->location,
12459                                           /*user_defined_p=*/true);
12460           return type_spec;
12461         }
12462
12463       /* Fall through.  */
12464     elaborated_type_specifier:
12465       /* We're declaring (not defining) a class or enum.  */
12466       if (declares_class_or_enum)
12467         *declares_class_or_enum = 1;
12468
12469       /* Fall through.  */
12470     case RID_TYPENAME:
12471       /* Look for an elaborated-type-specifier.  */
12472       type_spec
12473         = (cp_parser_elaborated_type_specifier
12474            (parser,
12475             decl_specs && decl_specs->specs[(int) ds_friend],
12476             is_declaration));
12477       if (decl_specs)
12478         cp_parser_set_decl_spec_type (decl_specs,
12479                                       type_spec,
12480                                       token->location,
12481                                       /*user_defined_p=*/true);
12482       return type_spec;
12483
12484     case RID_CONST:
12485       ds = ds_const;
12486       if (is_cv_qualifier)
12487         *is_cv_qualifier = true;
12488       break;
12489
12490     case RID_VOLATILE:
12491       ds = ds_volatile;
12492       if (is_cv_qualifier)
12493         *is_cv_qualifier = true;
12494       break;
12495
12496     case RID_RESTRICT:
12497       ds = ds_restrict;
12498       if (is_cv_qualifier)
12499         *is_cv_qualifier = true;
12500       break;
12501
12502     case RID_COMPLEX:
12503       /* The `__complex__' keyword is a GNU extension.  */
12504       ds = ds_complex;
12505       break;
12506
12507     default:
12508       break;
12509     }
12510
12511   /* Handle simple keywords.  */
12512   if (ds != ds_last)
12513     {
12514       if (decl_specs)
12515         {
12516           ++decl_specs->specs[(int)ds];
12517           decl_specs->any_specifiers_p = true;
12518         }
12519       return cp_lexer_consume_token (parser->lexer)->u.value;
12520     }
12521
12522   /* If we do not already have a type-specifier, assume we are looking
12523      at a simple-type-specifier.  */
12524   type_spec = cp_parser_simple_type_specifier (parser,
12525                                                decl_specs,
12526                                                flags);
12527
12528   /* If we didn't find a type-specifier, and a type-specifier was not
12529      optional in this context, issue an error message.  */
12530   if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
12531     {
12532       cp_parser_error (parser, "expected type specifier");
12533       return error_mark_node;
12534     }
12535
12536   return type_spec;
12537 }
12538
12539 /* Parse a simple-type-specifier.
12540
12541    simple-type-specifier:
12542      :: [opt] nested-name-specifier [opt] type-name
12543      :: [opt] nested-name-specifier template template-id
12544      char
12545      wchar_t
12546      bool
12547      short
12548      int
12549      long
12550      signed
12551      unsigned
12552      float
12553      double
12554      void
12555
12556    C++0x Extension:
12557
12558    simple-type-specifier:
12559      auto
12560      decltype ( expression )   
12561      char16_t
12562      char32_t
12563      __underlying_type ( type-id )
12564
12565    GNU Extension:
12566
12567    simple-type-specifier:
12568      __int128
12569      __typeof__ unary-expression
12570      __typeof__ ( type-id )
12571
12572    Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
12573    appropriately updated.  */
12574
12575 static tree
12576 cp_parser_simple_type_specifier (cp_parser* parser,
12577                                  cp_decl_specifier_seq *decl_specs,
12578                                  cp_parser_flags flags)
12579 {
12580   tree type = NULL_TREE;
12581   cp_token *token;
12582
12583   /* Peek at the next token.  */
12584   token = cp_lexer_peek_token (parser->lexer);
12585
12586   /* If we're looking at a keyword, things are easy.  */
12587   switch (token->keyword)
12588     {
12589     case RID_CHAR:
12590       if (decl_specs)
12591         decl_specs->explicit_char_p = true;
12592       type = char_type_node;
12593       break;
12594     case RID_CHAR16:
12595       type = char16_type_node;
12596       break;
12597     case RID_CHAR32:
12598       type = char32_type_node;
12599       break;
12600     case RID_WCHAR:
12601       type = wchar_type_node;
12602       break;
12603     case RID_BOOL:
12604       type = boolean_type_node;
12605       break;
12606     case RID_SHORT:
12607       if (decl_specs)
12608         ++decl_specs->specs[(int) ds_short];
12609       type = short_integer_type_node;
12610       break;
12611     case RID_INT:
12612       if (decl_specs)
12613         decl_specs->explicit_int_p = true;
12614       type = integer_type_node;
12615       break;
12616     case RID_INT128:
12617       if (!int128_integer_type_node)
12618         break;
12619       if (decl_specs)
12620         decl_specs->explicit_int128_p = true;
12621       type = int128_integer_type_node;
12622       break;
12623     case RID_LONG:
12624       if (decl_specs)
12625         ++decl_specs->specs[(int) ds_long];
12626       type = long_integer_type_node;
12627       break;
12628     case RID_SIGNED:
12629       if (decl_specs)
12630         ++decl_specs->specs[(int) ds_signed];
12631       type = integer_type_node;
12632       break;
12633     case RID_UNSIGNED:
12634       if (decl_specs)
12635         ++decl_specs->specs[(int) ds_unsigned];
12636       type = unsigned_type_node;
12637       break;
12638     case RID_FLOAT:
12639       type = float_type_node;
12640       break;
12641     case RID_DOUBLE:
12642       type = double_type_node;
12643       break;
12644     case RID_VOID:
12645       type = void_type_node;
12646       break;
12647       
12648     case RID_AUTO:
12649       maybe_warn_cpp0x (CPP0X_AUTO);
12650       type = make_auto ();
12651       break;
12652
12653     case RID_DECLTYPE:
12654       /* Parse the `decltype' type.  */
12655       type = cp_parser_decltype (parser);
12656
12657       if (decl_specs)
12658         cp_parser_set_decl_spec_type (decl_specs, type,
12659                                       token->location,
12660                                       /*user_defined_p=*/true);
12661
12662       return type;
12663
12664     case RID_TYPEOF:
12665       /* Consume the `typeof' token.  */
12666       cp_lexer_consume_token (parser->lexer);
12667       /* Parse the operand to `typeof'.  */
12668       type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
12669       /* If it is not already a TYPE, take its type.  */
12670       if (!TYPE_P (type))
12671         type = finish_typeof (type);
12672
12673       if (decl_specs)
12674         cp_parser_set_decl_spec_type (decl_specs, type,
12675                                       token->location,
12676                                       /*user_defined_p=*/true);
12677
12678       return type;
12679
12680     case RID_UNDERLYING_TYPE:
12681       type = cp_parser_trait_expr (parser, RID_UNDERLYING_TYPE);
12682
12683       if (decl_specs)
12684         cp_parser_set_decl_spec_type (decl_specs, type,
12685                                       token->location,
12686                                       /*user_defined_p=*/true);
12687
12688       return type;
12689
12690     default:
12691       break;
12692     }
12693
12694   /* If the type-specifier was for a built-in type, we're done.  */
12695   if (type)
12696     {
12697       /* Record the type.  */
12698       if (decl_specs
12699           && (token->keyword != RID_SIGNED
12700               && token->keyword != RID_UNSIGNED
12701               && token->keyword != RID_SHORT
12702               && token->keyword != RID_LONG))
12703         cp_parser_set_decl_spec_type (decl_specs,
12704                                       type,
12705                                       token->location,
12706                                       /*user_defined=*/false);
12707       if (decl_specs)
12708         decl_specs->any_specifiers_p = true;
12709
12710       /* Consume the token.  */
12711       cp_lexer_consume_token (parser->lexer);
12712
12713       /* There is no valid C++ program where a non-template type is
12714          followed by a "<".  That usually indicates that the user thought
12715          that the type was a template.  */
12716       cp_parser_check_for_invalid_template_id (parser, type, token->location);
12717
12718       return TYPE_NAME (type);
12719     }
12720
12721   /* The type-specifier must be a user-defined type.  */
12722   if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
12723     {
12724       bool qualified_p;
12725       bool global_p;
12726
12727       /* Don't gobble tokens or issue error messages if this is an
12728          optional type-specifier.  */
12729       if (flags & CP_PARSER_FLAGS_OPTIONAL)
12730         cp_parser_parse_tentatively (parser);
12731
12732       /* Look for the optional `::' operator.  */
12733       global_p
12734         = (cp_parser_global_scope_opt (parser,
12735                                        /*current_scope_valid_p=*/false)
12736            != NULL_TREE);
12737       /* Look for the nested-name specifier.  */
12738       qualified_p
12739         = (cp_parser_nested_name_specifier_opt (parser,
12740                                                 /*typename_keyword_p=*/false,
12741                                                 /*check_dependency_p=*/true,
12742                                                 /*type_p=*/false,
12743                                                 /*is_declaration=*/false)
12744            != NULL_TREE);
12745       token = cp_lexer_peek_token (parser->lexer);
12746       /* If we have seen a nested-name-specifier, and the next token
12747          is `template', then we are using the template-id production.  */
12748       if (parser->scope
12749           && cp_parser_optional_template_keyword (parser))
12750         {
12751           /* Look for the template-id.  */
12752           type = cp_parser_template_id (parser,
12753                                         /*template_keyword_p=*/true,
12754                                         /*check_dependency_p=*/true,
12755                                         /*is_declaration=*/false);
12756           /* If the template-id did not name a type, we are out of
12757              luck.  */
12758           if (TREE_CODE (type) != TYPE_DECL)
12759             {
12760               cp_parser_error (parser, "expected template-id for type");
12761               type = NULL_TREE;
12762             }
12763         }
12764       /* Otherwise, look for a type-name.  */
12765       else
12766         type = cp_parser_type_name (parser);
12767       /* Keep track of all name-lookups performed in class scopes.  */
12768       if (type
12769           && !global_p
12770           && !qualified_p
12771           && TREE_CODE (type) == TYPE_DECL
12772           && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
12773         maybe_note_name_used_in_class (DECL_NAME (type), type);
12774       /* If it didn't work out, we don't have a TYPE.  */
12775       if ((flags & CP_PARSER_FLAGS_OPTIONAL)
12776           && !cp_parser_parse_definitely (parser))
12777         type = NULL_TREE;
12778       if (type && decl_specs)
12779         cp_parser_set_decl_spec_type (decl_specs, type,
12780                                       token->location,
12781                                       /*user_defined=*/true);
12782     }
12783
12784   /* If we didn't get a type-name, issue an error message.  */
12785   if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
12786     {
12787       cp_parser_error (parser, "expected type-name");
12788       return error_mark_node;
12789     }
12790
12791   if (type && type != error_mark_node)
12792     {
12793       /* See if TYPE is an Objective-C type, and if so, parse and
12794          accept any protocol references following it.  Do this before
12795          the cp_parser_check_for_invalid_template_id() call, because
12796          Objective-C types can be followed by '<...>' which would
12797          enclose protocol names rather than template arguments, and so
12798          everything is fine.  */
12799       if (c_dialect_objc () && !parser->scope
12800           && (objc_is_id (type) || objc_is_class_name (type)))
12801         {
12802           tree protos = cp_parser_objc_protocol_refs_opt (parser);
12803           tree qual_type = objc_get_protocol_qualified_type (type, protos);
12804
12805           /* Clobber the "unqualified" type previously entered into
12806              DECL_SPECS with the new, improved protocol-qualified version.  */
12807           if (decl_specs)
12808             decl_specs->type = qual_type;
12809
12810           return qual_type;
12811         }
12812
12813       /* There is no valid C++ program where a non-template type is
12814          followed by a "<".  That usually indicates that the user
12815          thought that the type was a template.  */
12816       cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type),
12817                                                token->location);
12818     }
12819
12820   return type;
12821 }
12822
12823 /* Parse a type-name.
12824
12825    type-name:
12826      class-name
12827      enum-name
12828      typedef-name
12829
12830    enum-name:
12831      identifier
12832
12833    typedef-name:
12834      identifier
12835
12836    Returns a TYPE_DECL for the type.  */
12837
12838 static tree
12839 cp_parser_type_name (cp_parser* parser)
12840 {
12841   tree type_decl;
12842
12843   /* We can't know yet whether it is a class-name or not.  */
12844   cp_parser_parse_tentatively (parser);
12845   /* Try a class-name.  */
12846   type_decl = cp_parser_class_name (parser,
12847                                     /*typename_keyword_p=*/false,
12848                                     /*template_keyword_p=*/false,
12849                                     none_type,
12850                                     /*check_dependency_p=*/true,
12851                                     /*class_head_p=*/false,
12852                                     /*is_declaration=*/false);
12853   /* If it's not a class-name, keep looking.  */
12854   if (!cp_parser_parse_definitely (parser))
12855     {
12856       /* It must be a typedef-name or an enum-name.  */
12857       return cp_parser_nonclass_name (parser);
12858     }
12859
12860   return type_decl;
12861 }
12862
12863 /* Parse a non-class type-name, that is, either an enum-name or a typedef-name.
12864
12865    enum-name:
12866      identifier
12867
12868    typedef-name:
12869      identifier
12870
12871    Returns a TYPE_DECL for the type.  */
12872
12873 static tree
12874 cp_parser_nonclass_name (cp_parser* parser)
12875 {
12876   tree type_decl;
12877   tree identifier;
12878
12879   cp_token *token = cp_lexer_peek_token (parser->lexer);
12880   identifier = cp_parser_identifier (parser);
12881   if (identifier == error_mark_node)
12882     return error_mark_node;
12883
12884   /* Look up the type-name.  */
12885   type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
12886
12887   if (TREE_CODE (type_decl) != TYPE_DECL
12888       && (objc_is_id (identifier) || objc_is_class_name (identifier)))
12889     {
12890       /* See if this is an Objective-C type.  */
12891       tree protos = cp_parser_objc_protocol_refs_opt (parser);
12892       tree type = objc_get_protocol_qualified_type (identifier, protos);
12893       if (type)
12894         type_decl = TYPE_NAME (type);
12895     }
12896
12897   /* Issue an error if we did not find a type-name.  */
12898   if (TREE_CODE (type_decl) != TYPE_DECL
12899       /* In Objective-C, we have the complication that class names are
12900          normally type names and start declarations (eg, the
12901          "NSObject" in "NSObject *object;"), but can be used in an
12902          Objective-C 2.0 dot-syntax (as in "NSObject.version") which
12903          is an expression.  So, a classname followed by a dot is not a
12904          valid type-name.  */
12905       || (objc_is_class_name (TREE_TYPE (type_decl))
12906           && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT))
12907     {
12908       if (!cp_parser_simulate_error (parser))
12909         cp_parser_name_lookup_error (parser, identifier, type_decl,
12910                                      NLE_TYPE, token->location);
12911       return error_mark_node;
12912     }
12913   /* Remember that the name was used in the definition of the
12914      current class so that we can check later to see if the
12915      meaning would have been different after the class was
12916      entirely defined.  */
12917   else if (type_decl != error_mark_node
12918            && !parser->scope)
12919     maybe_note_name_used_in_class (identifier, type_decl);
12920   
12921   return type_decl;
12922 }
12923
12924 /* Parse an elaborated-type-specifier.  Note that the grammar given
12925    here incorporates the resolution to DR68.
12926
12927    elaborated-type-specifier:
12928      class-key :: [opt] nested-name-specifier [opt] identifier
12929      class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
12930      enum-key :: [opt] nested-name-specifier [opt] identifier
12931      typename :: [opt] nested-name-specifier identifier
12932      typename :: [opt] nested-name-specifier template [opt]
12933        template-id
12934
12935    GNU extension:
12936
12937    elaborated-type-specifier:
12938      class-key attributes :: [opt] nested-name-specifier [opt] identifier
12939      class-key attributes :: [opt] nested-name-specifier [opt]
12940                template [opt] template-id
12941      enum attributes :: [opt] nested-name-specifier [opt] identifier
12942
12943    If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
12944    declared `friend'.  If IS_DECLARATION is TRUE, then this
12945    elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
12946    something is being declared.
12947
12948    Returns the TYPE specified.  */
12949
12950 static tree
12951 cp_parser_elaborated_type_specifier (cp_parser* parser,
12952                                      bool is_friend,
12953                                      bool is_declaration)
12954 {
12955   enum tag_types tag_type;
12956   tree identifier;
12957   tree type = NULL_TREE;
12958   tree attributes = NULL_TREE;
12959   tree globalscope;
12960   cp_token *token = NULL;
12961
12962   /* See if we're looking at the `enum' keyword.  */
12963   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
12964     {
12965       /* Consume the `enum' token.  */
12966       cp_lexer_consume_token (parser->lexer);
12967       /* Remember that it's an enumeration type.  */
12968       tag_type = enum_type;
12969       /* Issue a warning if the `struct' or `class' key (for C++0x scoped
12970          enums) is used here.  */
12971       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
12972           || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
12973         {
12974             pedwarn (input_location, 0, "elaborated-type-specifier "
12975                       "for a scoped enum must not use the %<%D%> keyword",
12976                       cp_lexer_peek_token (parser->lexer)->u.value);
12977           /* Consume the `struct' or `class' and parse it anyway.  */
12978           cp_lexer_consume_token (parser->lexer);
12979         }
12980       /* Parse the attributes.  */
12981       attributes = cp_parser_attributes_opt (parser);
12982     }
12983   /* Or, it might be `typename'.  */
12984   else if (cp_lexer_next_token_is_keyword (parser->lexer,
12985                                            RID_TYPENAME))
12986     {
12987       /* Consume the `typename' token.  */
12988       cp_lexer_consume_token (parser->lexer);
12989       /* Remember that it's a `typename' type.  */
12990       tag_type = typename_type;
12991     }
12992   /* Otherwise it must be a class-key.  */
12993   else
12994     {
12995       tag_type = cp_parser_class_key (parser);
12996       if (tag_type == none_type)
12997         return error_mark_node;
12998       /* Parse the attributes.  */
12999       attributes = cp_parser_attributes_opt (parser);
13000     }
13001
13002   /* Look for the `::' operator.  */
13003   globalscope =  cp_parser_global_scope_opt (parser,
13004                                              /*current_scope_valid_p=*/false);
13005   /* Look for the nested-name-specifier.  */
13006   if (tag_type == typename_type && !globalscope)
13007     {
13008       if (!cp_parser_nested_name_specifier (parser,
13009                                            /*typename_keyword_p=*/true,
13010                                            /*check_dependency_p=*/true,
13011                                            /*type_p=*/true,
13012                                             is_declaration))
13013         return error_mark_node;
13014     }
13015   else
13016     /* Even though `typename' is not present, the proposed resolution
13017        to Core Issue 180 says that in `class A<T>::B', `B' should be
13018        considered a type-name, even if `A<T>' is dependent.  */
13019     cp_parser_nested_name_specifier_opt (parser,
13020                                          /*typename_keyword_p=*/true,
13021                                          /*check_dependency_p=*/true,
13022                                          /*type_p=*/true,
13023                                          is_declaration);
13024  /* For everything but enumeration types, consider a template-id.
13025     For an enumeration type, consider only a plain identifier.  */
13026   if (tag_type != enum_type)
13027     {
13028       bool template_p = false;
13029       tree decl;
13030
13031       /* Allow the `template' keyword.  */
13032       template_p = cp_parser_optional_template_keyword (parser);
13033       /* If we didn't see `template', we don't know if there's a
13034          template-id or not.  */
13035       if (!template_p)
13036         cp_parser_parse_tentatively (parser);
13037       /* Parse the template-id.  */
13038       token = cp_lexer_peek_token (parser->lexer);
13039       decl = cp_parser_template_id (parser, template_p,
13040                                     /*check_dependency_p=*/true,
13041                                     is_declaration);
13042       /* If we didn't find a template-id, look for an ordinary
13043          identifier.  */
13044       if (!template_p && !cp_parser_parse_definitely (parser))
13045         ;
13046       /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
13047          in effect, then we must assume that, upon instantiation, the
13048          template will correspond to a class.  */
13049       else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
13050                && tag_type == typename_type)
13051         type = make_typename_type (parser->scope, decl,
13052                                    typename_type,
13053                                    /*complain=*/tf_error);
13054       /* If the `typename' keyword is in effect and DECL is not a type
13055          decl. Then type is non existant.   */
13056       else if (tag_type == typename_type && TREE_CODE (decl) != TYPE_DECL)
13057         type = NULL_TREE; 
13058       else 
13059         type = TREE_TYPE (decl);
13060     }
13061
13062   if (!type)
13063     {
13064       token = cp_lexer_peek_token (parser->lexer);
13065       identifier = cp_parser_identifier (parser);
13066
13067       if (identifier == error_mark_node)
13068         {
13069           parser->scope = NULL_TREE;
13070           return error_mark_node;
13071         }
13072
13073       /* For a `typename', we needn't call xref_tag.  */
13074       if (tag_type == typename_type
13075           && TREE_CODE (parser->scope) != NAMESPACE_DECL)
13076         return cp_parser_make_typename_type (parser, parser->scope,
13077                                              identifier,
13078                                              token->location);
13079       /* Look up a qualified name in the usual way.  */
13080       if (parser->scope)
13081         {
13082           tree decl;
13083           tree ambiguous_decls;
13084
13085           decl = cp_parser_lookup_name (parser, identifier,
13086                                         tag_type,
13087                                         /*is_template=*/false,
13088                                         /*is_namespace=*/false,
13089                                         /*check_dependency=*/true,
13090                                         &ambiguous_decls,
13091                                         token->location);
13092
13093           /* If the lookup was ambiguous, an error will already have been
13094              issued.  */
13095           if (ambiguous_decls)
13096             return error_mark_node;
13097
13098           /* If we are parsing friend declaration, DECL may be a
13099              TEMPLATE_DECL tree node here.  However, we need to check
13100              whether this TEMPLATE_DECL results in valid code.  Consider
13101              the following example:
13102
13103                namespace N {
13104                  template <class T> class C {};
13105                }
13106                class X {
13107                  template <class T> friend class N::C; // #1, valid code
13108                };
13109                template <class T> class Y {
13110                  friend class N::C;                    // #2, invalid code
13111                };
13112
13113              For both case #1 and #2, we arrive at a TEMPLATE_DECL after
13114              name lookup of `N::C'.  We see that friend declaration must
13115              be template for the code to be valid.  Note that
13116              processing_template_decl does not work here since it is
13117              always 1 for the above two cases.  */
13118
13119           decl = (cp_parser_maybe_treat_template_as_class
13120                   (decl, /*tag_name_p=*/is_friend
13121                          && parser->num_template_parameter_lists));
13122
13123           if (TREE_CODE (decl) != TYPE_DECL)
13124             {
13125               cp_parser_diagnose_invalid_type_name (parser,
13126                                                     parser->scope,
13127                                                     identifier,
13128                                                     token->location);
13129               return error_mark_node;
13130             }
13131
13132           if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
13133             {
13134               bool allow_template = (parser->num_template_parameter_lists
13135                                       || DECL_SELF_REFERENCE_P (decl));
13136               type = check_elaborated_type_specifier (tag_type, decl, 
13137                                                       allow_template);
13138
13139               if (type == error_mark_node)
13140                 return error_mark_node;
13141             }
13142
13143           /* Forward declarations of nested types, such as
13144
13145                class C1::C2;
13146                class C1::C2::C3;
13147
13148              are invalid unless all components preceding the final '::'
13149              are complete.  If all enclosing types are complete, these
13150              declarations become merely pointless.
13151
13152              Invalid forward declarations of nested types are errors
13153              caught elsewhere in parsing.  Those that are pointless arrive
13154              here.  */
13155
13156           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
13157               && !is_friend && !processing_explicit_instantiation)
13158             warning (0, "declaration %qD does not declare anything", decl);
13159
13160           type = TREE_TYPE (decl);
13161         }
13162       else
13163         {
13164           /* An elaborated-type-specifier sometimes introduces a new type and
13165              sometimes names an existing type.  Normally, the rule is that it
13166              introduces a new type only if there is not an existing type of
13167              the same name already in scope.  For example, given:
13168
13169                struct S {};
13170                void f() { struct S s; }
13171
13172              the `struct S' in the body of `f' is the same `struct S' as in
13173              the global scope; the existing definition is used.  However, if
13174              there were no global declaration, this would introduce a new
13175              local class named `S'.
13176
13177              An exception to this rule applies to the following code:
13178
13179                namespace N { struct S; }
13180
13181              Here, the elaborated-type-specifier names a new type
13182              unconditionally; even if there is already an `S' in the
13183              containing scope this declaration names a new type.
13184              This exception only applies if the elaborated-type-specifier
13185              forms the complete declaration:
13186
13187                [class.name]
13188
13189                A declaration consisting solely of `class-key identifier ;' is
13190                either a redeclaration of the name in the current scope or a
13191                forward declaration of the identifier as a class name.  It
13192                introduces the name into the current scope.
13193
13194              We are in this situation precisely when the next token is a `;'.
13195
13196              An exception to the exception is that a `friend' declaration does
13197              *not* name a new type; i.e., given:
13198
13199                struct S { friend struct T; };
13200
13201              `T' is not a new type in the scope of `S'.
13202
13203              Also, `new struct S' or `sizeof (struct S)' never results in the
13204              definition of a new type; a new type can only be declared in a
13205              declaration context.  */
13206
13207           tag_scope ts;
13208           bool template_p;
13209
13210           if (is_friend)
13211             /* Friends have special name lookup rules.  */
13212             ts = ts_within_enclosing_non_class;
13213           else if (is_declaration
13214                    && cp_lexer_next_token_is (parser->lexer,
13215                                               CPP_SEMICOLON))
13216             /* This is a `class-key identifier ;' */
13217             ts = ts_current;
13218           else
13219             ts = ts_global;
13220
13221           template_p =
13222             (parser->num_template_parameter_lists
13223              && (cp_parser_next_token_starts_class_definition_p (parser)
13224                  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
13225           /* An unqualified name was used to reference this type, so
13226              there were no qualifying templates.  */
13227           if (!cp_parser_check_template_parameters (parser,
13228                                                     /*num_templates=*/0,
13229                                                     token->location,
13230                                                     /*declarator=*/NULL))
13231             return error_mark_node;
13232           type = xref_tag (tag_type, identifier, ts, template_p);
13233         }
13234     }
13235
13236   if (type == error_mark_node)
13237     return error_mark_node;
13238
13239   /* Allow attributes on forward declarations of classes.  */
13240   if (attributes)
13241     {
13242       if (TREE_CODE (type) == TYPENAME_TYPE)
13243         warning (OPT_Wattributes,
13244                  "attributes ignored on uninstantiated type");
13245       else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
13246                && ! processing_explicit_instantiation)
13247         warning (OPT_Wattributes,
13248                  "attributes ignored on template instantiation");
13249       else if (is_declaration && cp_parser_declares_only_class_p (parser))
13250         cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
13251       else
13252         warning (OPT_Wattributes,
13253                  "attributes ignored on elaborated-type-specifier that is not a forward declaration");
13254     }
13255
13256   if (tag_type != enum_type)
13257     cp_parser_check_class_key (tag_type, type);
13258
13259   /* A "<" cannot follow an elaborated type specifier.  If that
13260      happens, the user was probably trying to form a template-id.  */
13261   cp_parser_check_for_invalid_template_id (parser, type, token->location);
13262
13263   return type;
13264 }
13265
13266 /* Parse an enum-specifier.
13267
13268    enum-specifier:
13269      enum-head { enumerator-list [opt] }
13270
13271    enum-head:
13272      enum-key identifier [opt] enum-base [opt]
13273      enum-key nested-name-specifier identifier enum-base [opt]
13274
13275    enum-key:
13276      enum
13277      enum class   [C++0x]
13278      enum struct  [C++0x]
13279
13280    enum-base:   [C++0x]
13281      : type-specifier-seq
13282
13283    opaque-enum-specifier:
13284      enum-key identifier enum-base [opt] ;
13285
13286    GNU Extensions:
13287      enum-key attributes[opt] identifier [opt] enum-base [opt] 
13288        { enumerator-list [opt] }attributes[opt]
13289
13290    Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
13291    if the token stream isn't an enum-specifier after all.  */
13292
13293 static tree
13294 cp_parser_enum_specifier (cp_parser* parser)
13295 {
13296   tree identifier;
13297   tree type = NULL_TREE;
13298   tree prev_scope;
13299   tree nested_name_specifier = NULL_TREE;
13300   tree attributes;
13301   bool scoped_enum_p = false;
13302   bool has_underlying_type = false;
13303   bool nested_being_defined = false;
13304   bool new_value_list = false;
13305   bool is_new_type = false;
13306   bool is_anonymous = false;
13307   tree underlying_type = NULL_TREE;
13308   cp_token *type_start_token = NULL;
13309   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
13310
13311   parser->colon_corrects_to_scope_p = false;
13312
13313   /* Parse tentatively so that we can back up if we don't find a
13314      enum-specifier.  */
13315   cp_parser_parse_tentatively (parser);
13316
13317   /* Caller guarantees that the current token is 'enum', an identifier
13318      possibly follows, and the token after that is an opening brace.
13319      If we don't have an identifier, fabricate an anonymous name for
13320      the enumeration being defined.  */
13321   cp_lexer_consume_token (parser->lexer);
13322
13323   /* Parse the "class" or "struct", which indicates a scoped
13324      enumeration type in C++0x.  */
13325   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_CLASS)
13326       || cp_lexer_next_token_is_keyword (parser->lexer, RID_STRUCT))
13327     {
13328       if (cxx_dialect < cxx0x)
13329         maybe_warn_cpp0x (CPP0X_SCOPED_ENUMS);
13330
13331       /* Consume the `struct' or `class' token.  */
13332       cp_lexer_consume_token (parser->lexer);
13333
13334       scoped_enum_p = true;
13335     }
13336
13337   attributes = cp_parser_attributes_opt (parser);
13338
13339   /* Clear the qualification.  */
13340   parser->scope = NULL_TREE;
13341   parser->qualifying_scope = NULL_TREE;
13342   parser->object_scope = NULL_TREE;
13343
13344   /* Figure out in what scope the declaration is being placed.  */
13345   prev_scope = current_scope ();
13346
13347   type_start_token = cp_lexer_peek_token (parser->lexer);
13348
13349   push_deferring_access_checks (dk_no_check);
13350   nested_name_specifier
13351       = cp_parser_nested_name_specifier_opt (parser,
13352                                              /*typename_keyword_p=*/true,
13353                                              /*check_dependency_p=*/false,
13354                                              /*type_p=*/false,
13355                                              /*is_declaration=*/false);
13356
13357   if (nested_name_specifier)
13358     {
13359       tree name;
13360
13361       identifier = cp_parser_identifier (parser);
13362       name =  cp_parser_lookup_name (parser, identifier,
13363                                      enum_type,
13364                                      /*is_template=*/false,
13365                                      /*is_namespace=*/false,
13366                                      /*check_dependency=*/true,
13367                                      /*ambiguous_decls=*/NULL,
13368                                      input_location);
13369       if (name)
13370         {
13371           type = TREE_TYPE (name);
13372           if (TREE_CODE (type) == TYPENAME_TYPE)
13373             {
13374               /* Are template enums allowed in ISO? */
13375               if (template_parm_scope_p ())
13376                 pedwarn (type_start_token->location, OPT_pedantic,
13377                          "%qD is an enumeration template", name);
13378               /* ignore a typename reference, for it will be solved by name
13379                  in start_enum.  */
13380               type = NULL_TREE;
13381             }
13382         }
13383       else
13384         error_at (type_start_token->location,
13385                   "%qD is not an enumerator-name", identifier);
13386     }
13387   else
13388     {
13389       if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
13390         identifier = cp_parser_identifier (parser);
13391       else
13392         {
13393           identifier = make_anon_name ();
13394           is_anonymous = true;
13395         }
13396     }
13397   pop_deferring_access_checks ();
13398
13399   /* Check for the `:' that denotes a specified underlying type in C++0x.
13400      Note that a ':' could also indicate a bitfield width, however.  */
13401   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
13402     {
13403       cp_decl_specifier_seq type_specifiers;
13404
13405       /* Consume the `:'.  */
13406       cp_lexer_consume_token (parser->lexer);
13407
13408       /* Parse the type-specifier-seq.  */
13409       cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
13410                                     /*is_trailing_return=*/false,
13411                                     &type_specifiers);
13412
13413       /* At this point this is surely not elaborated type specifier.  */
13414       if (!cp_parser_parse_definitely (parser))
13415         return NULL_TREE;
13416
13417       if (cxx_dialect < cxx0x)
13418         maybe_warn_cpp0x (CPP0X_SCOPED_ENUMS);
13419
13420       has_underlying_type = true;
13421
13422       /* If that didn't work, stop.  */
13423       if (type_specifiers.type != error_mark_node)
13424         {
13425           underlying_type = grokdeclarator (NULL, &type_specifiers, TYPENAME,
13426                                             /*initialized=*/0, NULL);
13427           if (underlying_type == error_mark_node)
13428             underlying_type = NULL_TREE;
13429         }
13430     }
13431
13432   /* Look for the `{' but don't consume it yet.  */
13433   if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
13434     {
13435       if (cxx_dialect < cxx0x || (!scoped_enum_p && !underlying_type))
13436         {
13437           cp_parser_error (parser, "expected %<{%>");
13438           if (has_underlying_type)
13439             {
13440               type = NULL_TREE;
13441               goto out;
13442             }
13443         }
13444       /* An opaque-enum-specifier must have a ';' here.  */
13445       if ((scoped_enum_p || underlying_type)
13446           && cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
13447         {
13448           cp_parser_error (parser, "expected %<;%> or %<{%>");
13449           if (has_underlying_type)
13450             {
13451               type = NULL_TREE;
13452               goto out;
13453             }
13454         }
13455     }
13456
13457   if (!has_underlying_type && !cp_parser_parse_definitely (parser))
13458     return NULL_TREE;
13459
13460   if (nested_name_specifier)
13461     {
13462       if (CLASS_TYPE_P (nested_name_specifier))
13463         {
13464           nested_being_defined = TYPE_BEING_DEFINED (nested_name_specifier);
13465           TYPE_BEING_DEFINED (nested_name_specifier) = 1;
13466           push_scope (nested_name_specifier);
13467         }
13468       else if (TREE_CODE (nested_name_specifier) == NAMESPACE_DECL)
13469         {
13470           push_nested_namespace (nested_name_specifier);
13471         }
13472     }
13473
13474   /* Issue an error message if type-definitions are forbidden here.  */
13475   if (!cp_parser_check_type_definition (parser))
13476     type = error_mark_node;
13477   else
13478     /* Create the new type.  We do this before consuming the opening
13479        brace so the enum will be recorded as being on the line of its
13480        tag (or the 'enum' keyword, if there is no tag).  */
13481     type = start_enum (identifier, type, underlying_type,
13482                        scoped_enum_p, &is_new_type);
13483
13484   /* If the next token is not '{' it is an opaque-enum-specifier or an
13485      elaborated-type-specifier.  */
13486   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
13487     {
13488       timevar_push (TV_PARSE_ENUM);
13489       if (nested_name_specifier)
13490         {
13491           /* The following catches invalid code such as:
13492              enum class S<int>::E { A, B, C }; */
13493           if (!processing_specialization
13494               && CLASS_TYPE_P (nested_name_specifier)
13495               && CLASSTYPE_USE_TEMPLATE (nested_name_specifier))
13496             error_at (type_start_token->location, "cannot add an enumerator "
13497                       "list to a template instantiation");
13498
13499           /* If that scope does not contain the scope in which the
13500              class was originally declared, the program is invalid.  */
13501           if (prev_scope && !is_ancestor (prev_scope, nested_name_specifier))
13502             {
13503               if (at_namespace_scope_p ())
13504                 error_at (type_start_token->location,
13505                           "declaration of %qD in namespace %qD which does not "
13506                           "enclose %qD",
13507                           type, prev_scope, nested_name_specifier);
13508               else
13509                 error_at (type_start_token->location,
13510                           "declaration of %qD in %qD which does not enclose %qD",
13511                           type, prev_scope, nested_name_specifier);
13512               type = error_mark_node;
13513             }
13514         }
13515
13516       if (scoped_enum_p)
13517         begin_scope (sk_scoped_enum, type);
13518
13519       /* Consume the opening brace.  */
13520       cp_lexer_consume_token (parser->lexer);
13521
13522       if (type == error_mark_node)
13523         ; /* Nothing to add */
13524       else if (OPAQUE_ENUM_P (type)
13525                || (cxx_dialect > cxx98 && processing_specialization))
13526         {
13527           new_value_list = true;
13528           SET_OPAQUE_ENUM_P (type, false);
13529           DECL_SOURCE_LOCATION (TYPE_NAME (type)) = type_start_token->location;
13530         }
13531       else
13532         {
13533           error_at (type_start_token->location, "multiple definition of %q#T", type);
13534           error_at (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
13535                     "previous definition here");
13536           type = error_mark_node;
13537         }
13538
13539       if (type == error_mark_node)
13540         cp_parser_skip_to_end_of_block_or_statement (parser);
13541       /* If the next token is not '}', then there are some enumerators.  */
13542       else if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
13543         cp_parser_enumerator_list (parser, type);
13544
13545       /* Consume the final '}'.  */
13546       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
13547
13548       if (scoped_enum_p)
13549         finish_scope ();
13550       timevar_pop (TV_PARSE_ENUM);
13551     }
13552   else
13553     {
13554       /* If a ';' follows, then it is an opaque-enum-specifier
13555         and additional restrictions apply.  */
13556       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
13557         {
13558           if (is_anonymous)
13559             error_at (type_start_token->location,
13560                       "opaque-enum-specifier without name");
13561           else if (nested_name_specifier)
13562             error_at (type_start_token->location,
13563                       "opaque-enum-specifier must use a simple identifier");
13564         }
13565     }
13566
13567   /* Look for trailing attributes to apply to this enumeration, and
13568      apply them if appropriate.  */
13569   if (cp_parser_allow_gnu_extensions_p (parser))
13570     {
13571       tree trailing_attr = cp_parser_attributes_opt (parser);
13572       trailing_attr = chainon (trailing_attr, attributes);
13573       cplus_decl_attributes (&type,
13574                              trailing_attr,
13575                              (int) ATTR_FLAG_TYPE_IN_PLACE);
13576     }
13577
13578   /* Finish up the enumeration.  */
13579   if (type != error_mark_node)
13580     {
13581       if (new_value_list)
13582         finish_enum_value_list (type);
13583       if (is_new_type)
13584         finish_enum (type);
13585     }
13586
13587   if (nested_name_specifier)
13588     {
13589       if (CLASS_TYPE_P (nested_name_specifier))
13590         {
13591           TYPE_BEING_DEFINED (nested_name_specifier) = nested_being_defined;
13592           pop_scope (nested_name_specifier);
13593         }
13594       else if (TREE_CODE (nested_name_specifier) == NAMESPACE_DECL)
13595         {
13596           pop_nested_namespace (nested_name_specifier);
13597         }
13598     }
13599  out:
13600   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
13601   return type;
13602 }
13603
13604 /* Parse an enumerator-list.  The enumerators all have the indicated
13605    TYPE.
13606
13607    enumerator-list:
13608      enumerator-definition
13609      enumerator-list , enumerator-definition  */
13610
13611 static void
13612 cp_parser_enumerator_list (cp_parser* parser, tree type)
13613 {
13614   while (true)
13615     {
13616       /* Parse an enumerator-definition.  */
13617       cp_parser_enumerator_definition (parser, type);
13618
13619       /* If the next token is not a ',', we've reached the end of
13620          the list.  */
13621       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
13622         break;
13623       /* Otherwise, consume the `,' and keep going.  */
13624       cp_lexer_consume_token (parser->lexer);
13625       /* If the next token is a `}', there is a trailing comma.  */
13626       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
13627         {
13628           if (!in_system_header)
13629             pedwarn (input_location, OPT_pedantic, "comma at end of enumerator list");
13630           break;
13631         }
13632     }
13633 }
13634
13635 /* Parse an enumerator-definition.  The enumerator has the indicated
13636    TYPE.
13637
13638    enumerator-definition:
13639      enumerator
13640      enumerator = constant-expression
13641
13642    enumerator:
13643      identifier  */
13644
13645 static void
13646 cp_parser_enumerator_definition (cp_parser* parser, tree type)
13647 {
13648   tree identifier;
13649   tree value;
13650   location_t loc;
13651
13652   /* Save the input location because we are interested in the location
13653      of the identifier and not the location of the explicit value.  */
13654   loc = cp_lexer_peek_token (parser->lexer)->location;
13655
13656   /* Look for the identifier.  */
13657   identifier = cp_parser_identifier (parser);
13658   if (identifier == error_mark_node)
13659     return;
13660
13661   /* If the next token is an '=', then there is an explicit value.  */
13662   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
13663     {
13664       /* Consume the `=' token.  */
13665       cp_lexer_consume_token (parser->lexer);
13666       /* Parse the value.  */
13667       value = cp_parser_constant_expression (parser,
13668                                              /*allow_non_constant_p=*/false,
13669                                              NULL);
13670     }
13671   else
13672     value = NULL_TREE;
13673
13674   /* If we are processing a template, make sure the initializer of the
13675      enumerator doesn't contain any bare template parameter pack.  */
13676   if (check_for_bare_parameter_packs (value))
13677     value = error_mark_node;
13678
13679   /* integral_constant_value will pull out this expression, so make sure
13680      it's folded as appropriate.  */
13681   value = fold_non_dependent_expr (value);
13682
13683   /* Create the enumerator.  */
13684   build_enumerator (identifier, value, type, loc);
13685 }
13686
13687 /* Parse a namespace-name.
13688
13689    namespace-name:
13690      original-namespace-name
13691      namespace-alias
13692
13693    Returns the NAMESPACE_DECL for the namespace.  */
13694
13695 static tree
13696 cp_parser_namespace_name (cp_parser* parser)
13697 {
13698   tree identifier;
13699   tree namespace_decl;
13700
13701   cp_token *token = cp_lexer_peek_token (parser->lexer);
13702
13703   /* Get the name of the namespace.  */
13704   identifier = cp_parser_identifier (parser);
13705   if (identifier == error_mark_node)
13706     return error_mark_node;
13707
13708   /* Look up the identifier in the currently active scope.  Look only
13709      for namespaces, due to:
13710
13711        [basic.lookup.udir]
13712
13713        When looking up a namespace-name in a using-directive or alias
13714        definition, only namespace names are considered.
13715
13716      And:
13717
13718        [basic.lookup.qual]
13719
13720        During the lookup of a name preceding the :: scope resolution
13721        operator, object, function, and enumerator names are ignored.
13722
13723      (Note that cp_parser_qualifying_entity only calls this
13724      function if the token after the name is the scope resolution
13725      operator.)  */
13726   namespace_decl = cp_parser_lookup_name (parser, identifier,
13727                                           none_type,
13728                                           /*is_template=*/false,
13729                                           /*is_namespace=*/true,
13730                                           /*check_dependency=*/true,
13731                                           /*ambiguous_decls=*/NULL,
13732                                           token->location);
13733   /* If it's not a namespace, issue an error.  */
13734   if (namespace_decl == error_mark_node
13735       || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
13736     {
13737       if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
13738         error_at (token->location, "%qD is not a namespace-name", identifier);
13739       cp_parser_error (parser, "expected namespace-name");
13740       namespace_decl = error_mark_node;
13741     }
13742
13743   return namespace_decl;
13744 }
13745
13746 /* Parse a namespace-definition.
13747
13748    namespace-definition:
13749      named-namespace-definition
13750      unnamed-namespace-definition
13751
13752    named-namespace-definition:
13753      original-namespace-definition
13754      extension-namespace-definition
13755
13756    original-namespace-definition:
13757      namespace identifier { namespace-body }
13758
13759    extension-namespace-definition:
13760      namespace original-namespace-name { namespace-body }
13761
13762    unnamed-namespace-definition:
13763      namespace { namespace-body } */
13764
13765 static void
13766 cp_parser_namespace_definition (cp_parser* parser)
13767 {
13768   tree identifier, attribs;
13769   bool has_visibility;
13770   bool is_inline;
13771
13772   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_INLINE))
13773     {
13774       maybe_warn_cpp0x (CPP0X_INLINE_NAMESPACES);
13775       is_inline = true;
13776       cp_lexer_consume_token (parser->lexer);
13777     }
13778   else
13779     is_inline = false;
13780
13781   /* Look for the `namespace' keyword.  */
13782   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
13783
13784   /* Get the name of the namespace.  We do not attempt to distinguish
13785      between an original-namespace-definition and an
13786      extension-namespace-definition at this point.  The semantic
13787      analysis routines are responsible for that.  */
13788   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
13789     identifier = cp_parser_identifier (parser);
13790   else
13791     identifier = NULL_TREE;
13792
13793   /* Parse any specified attributes.  */
13794   attribs = cp_parser_attributes_opt (parser);
13795
13796   /* Look for the `{' to start the namespace.  */
13797   cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
13798   /* Start the namespace.  */
13799   push_namespace (identifier);
13800
13801   /* "inline namespace" is equivalent to a stub namespace definition
13802      followed by a strong using directive.  */
13803   if (is_inline)
13804     {
13805       tree name_space = current_namespace;
13806       /* Set up namespace association.  */
13807       DECL_NAMESPACE_ASSOCIATIONS (name_space)
13808         = tree_cons (CP_DECL_CONTEXT (name_space), NULL_TREE,
13809                      DECL_NAMESPACE_ASSOCIATIONS (name_space));
13810       /* Import the contents of the inline namespace.  */
13811       pop_namespace ();
13812       do_using_directive (name_space);
13813       push_namespace (identifier);
13814     }
13815
13816   has_visibility = handle_namespace_attrs (current_namespace, attribs);
13817
13818   /* Parse the body of the namespace.  */
13819   cp_parser_namespace_body (parser);
13820
13821   if (has_visibility)
13822     pop_visibility (1);
13823
13824   /* Finish the namespace.  */
13825   pop_namespace ();
13826   /* Look for the final `}'.  */
13827   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
13828 }
13829
13830 /* Parse a namespace-body.
13831
13832    namespace-body:
13833      declaration-seq [opt]  */
13834
13835 static void
13836 cp_parser_namespace_body (cp_parser* parser)
13837 {
13838   cp_parser_declaration_seq_opt (parser);
13839 }
13840
13841 /* Parse a namespace-alias-definition.
13842
13843    namespace-alias-definition:
13844      namespace identifier = qualified-namespace-specifier ;  */
13845
13846 static void
13847 cp_parser_namespace_alias_definition (cp_parser* parser)
13848 {
13849   tree identifier;
13850   tree namespace_specifier;
13851
13852   cp_token *token = cp_lexer_peek_token (parser->lexer);
13853
13854   /* Look for the `namespace' keyword.  */
13855   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
13856   /* Look for the identifier.  */
13857   identifier = cp_parser_identifier (parser);
13858   if (identifier == error_mark_node)
13859     return;
13860   /* Look for the `=' token.  */
13861   if (!cp_parser_uncommitted_to_tentative_parse_p (parser)
13862       && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) 
13863     {
13864       error_at (token->location, "%<namespace%> definition is not allowed here");
13865       /* Skip the definition.  */
13866       cp_lexer_consume_token (parser->lexer);
13867       if (cp_parser_skip_to_closing_brace (parser))
13868         cp_lexer_consume_token (parser->lexer);
13869       return;
13870     }
13871   cp_parser_require (parser, CPP_EQ, RT_EQ);
13872   /* Look for the qualified-namespace-specifier.  */
13873   namespace_specifier
13874     = cp_parser_qualified_namespace_specifier (parser);
13875   /* Look for the `;' token.  */
13876   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
13877
13878   /* Register the alias in the symbol table.  */
13879   do_namespace_alias (identifier, namespace_specifier);
13880 }
13881
13882 /* Parse a qualified-namespace-specifier.
13883
13884    qualified-namespace-specifier:
13885      :: [opt] nested-name-specifier [opt] namespace-name
13886
13887    Returns a NAMESPACE_DECL corresponding to the specified
13888    namespace.  */
13889
13890 static tree
13891 cp_parser_qualified_namespace_specifier (cp_parser* parser)
13892 {
13893   /* Look for the optional `::'.  */
13894   cp_parser_global_scope_opt (parser,
13895                               /*current_scope_valid_p=*/false);
13896
13897   /* Look for the optional nested-name-specifier.  */
13898   cp_parser_nested_name_specifier_opt (parser,
13899                                        /*typename_keyword_p=*/false,
13900                                        /*check_dependency_p=*/true,
13901                                        /*type_p=*/false,
13902                                        /*is_declaration=*/true);
13903
13904   return cp_parser_namespace_name (parser);
13905 }
13906
13907 /* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
13908    access declaration.
13909
13910    using-declaration:
13911      using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
13912      using :: unqualified-id ;  
13913
13914    access-declaration:
13915      qualified-id ;  
13916
13917    */
13918
13919 static bool
13920 cp_parser_using_declaration (cp_parser* parser, 
13921                              bool access_declaration_p)
13922 {
13923   cp_token *token;
13924   bool typename_p = false;
13925   bool global_scope_p;
13926   tree decl;
13927   tree identifier;
13928   tree qscope;
13929
13930   if (access_declaration_p)
13931     cp_parser_parse_tentatively (parser);
13932   else
13933     {
13934       /* Look for the `using' keyword.  */
13935       cp_parser_require_keyword (parser, RID_USING, RT_USING);
13936       
13937       /* Peek at the next token.  */
13938       token = cp_lexer_peek_token (parser->lexer);
13939       /* See if it's `typename'.  */
13940       if (token->keyword == RID_TYPENAME)
13941         {
13942           /* Remember that we've seen it.  */
13943           typename_p = true;
13944           /* Consume the `typename' token.  */
13945           cp_lexer_consume_token (parser->lexer);
13946         }
13947     }
13948
13949   /* Look for the optional global scope qualification.  */
13950   global_scope_p
13951     = (cp_parser_global_scope_opt (parser,
13952                                    /*current_scope_valid_p=*/false)
13953        != NULL_TREE);
13954
13955   /* If we saw `typename', or didn't see `::', then there must be a
13956      nested-name-specifier present.  */
13957   if (typename_p || !global_scope_p)
13958     qscope = cp_parser_nested_name_specifier (parser, typename_p,
13959                                               /*check_dependency_p=*/true,
13960                                               /*type_p=*/false,
13961                                               /*is_declaration=*/true);
13962   /* Otherwise, we could be in either of the two productions.  In that
13963      case, treat the nested-name-specifier as optional.  */
13964   else
13965     qscope = cp_parser_nested_name_specifier_opt (parser,
13966                                                   /*typename_keyword_p=*/false,
13967                                                   /*check_dependency_p=*/true,
13968                                                   /*type_p=*/false,
13969                                                   /*is_declaration=*/true);
13970   if (!qscope)
13971     qscope = global_namespace;
13972
13973   if (access_declaration_p && cp_parser_error_occurred (parser))
13974     /* Something has already gone wrong; there's no need to parse
13975        further.  Since an error has occurred, the return value of
13976        cp_parser_parse_definitely will be false, as required.  */
13977     return cp_parser_parse_definitely (parser);
13978
13979   token = cp_lexer_peek_token (parser->lexer);
13980   /* Parse the unqualified-id.  */
13981   identifier = cp_parser_unqualified_id (parser,
13982                                          /*template_keyword_p=*/false,
13983                                          /*check_dependency_p=*/true,
13984                                          /*declarator_p=*/true,
13985                                          /*optional_p=*/false);
13986
13987   if (access_declaration_p)
13988     {
13989       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
13990         cp_parser_simulate_error (parser);
13991       if (!cp_parser_parse_definitely (parser))
13992         return false;
13993     }
13994
13995   /* The function we call to handle a using-declaration is different
13996      depending on what scope we are in.  */
13997   if (qscope == error_mark_node || identifier == error_mark_node)
13998     ;
13999   else if (TREE_CODE (identifier) != IDENTIFIER_NODE
14000            && TREE_CODE (identifier) != BIT_NOT_EXPR)
14001     /* [namespace.udecl]
14002
14003        A using declaration shall not name a template-id.  */
14004     error_at (token->location,
14005               "a template-id may not appear in a using-declaration");
14006   else
14007     {
14008       if (at_class_scope_p ())
14009         {
14010           /* Create the USING_DECL.  */
14011           decl = do_class_using_decl (parser->scope, identifier);
14012
14013           if (check_for_bare_parameter_packs (decl))
14014             return false;
14015           else
14016             /* Add it to the list of members in this class.  */
14017             finish_member_declaration (decl);
14018         }
14019       else
14020         {
14021           decl = cp_parser_lookup_name_simple (parser,
14022                                                identifier,
14023                                                token->location);
14024           if (decl == error_mark_node)
14025             cp_parser_name_lookup_error (parser, identifier,
14026                                          decl, NLE_NULL,
14027                                          token->location);
14028           else if (check_for_bare_parameter_packs (decl))
14029             return false;
14030           else if (!at_namespace_scope_p ())
14031             do_local_using_decl (decl, qscope, identifier);
14032           else
14033             do_toplevel_using_decl (decl, qscope, identifier);
14034         }
14035     }
14036
14037   /* Look for the final `;'.  */
14038   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
14039   
14040   return true;
14041 }
14042
14043 /* Parse a using-directive.
14044
14045    using-directive:
14046      using namespace :: [opt] nested-name-specifier [opt]
14047        namespace-name ;  */
14048
14049 static void
14050 cp_parser_using_directive (cp_parser* parser)
14051 {
14052   tree namespace_decl;
14053   tree attribs;
14054
14055   /* Look for the `using' keyword.  */
14056   cp_parser_require_keyword (parser, RID_USING, RT_USING);
14057   /* And the `namespace' keyword.  */
14058   cp_parser_require_keyword (parser, RID_NAMESPACE, RT_NAMESPACE);
14059   /* Look for the optional `::' operator.  */
14060   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
14061   /* And the optional nested-name-specifier.  */
14062   cp_parser_nested_name_specifier_opt (parser,
14063                                        /*typename_keyword_p=*/false,
14064                                        /*check_dependency_p=*/true,
14065                                        /*type_p=*/false,
14066                                        /*is_declaration=*/true);
14067   /* Get the namespace being used.  */
14068   namespace_decl = cp_parser_namespace_name (parser);
14069   /* And any specified attributes.  */
14070   attribs = cp_parser_attributes_opt (parser);
14071   /* Update the symbol table.  */
14072   parse_using_directive (namespace_decl, attribs);
14073   /* Look for the final `;'.  */
14074   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
14075 }
14076
14077 /* Parse an asm-definition.
14078
14079    asm-definition:
14080      asm ( string-literal ) ;
14081
14082    GNU Extension:
14083
14084    asm-definition:
14085      asm volatile [opt] ( string-literal ) ;
14086      asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
14087      asm volatile [opt] ( string-literal : asm-operand-list [opt]
14088                           : asm-operand-list [opt] ) ;
14089      asm volatile [opt] ( string-literal : asm-operand-list [opt]
14090                           : asm-operand-list [opt]
14091                           : asm-clobber-list [opt] ) ;
14092      asm volatile [opt] goto ( string-literal : : asm-operand-list [opt]
14093                                : asm-clobber-list [opt]
14094                                : asm-goto-list ) ;  */
14095
14096 static void
14097 cp_parser_asm_definition (cp_parser* parser)
14098 {
14099   tree string;
14100   tree outputs = NULL_TREE;
14101   tree inputs = NULL_TREE;
14102   tree clobbers = NULL_TREE;
14103   tree labels = NULL_TREE;
14104   tree asm_stmt;
14105   bool volatile_p = false;
14106   bool extended_p = false;
14107   bool invalid_inputs_p = false;
14108   bool invalid_outputs_p = false;
14109   bool goto_p = false;
14110   required_token missing = RT_NONE;
14111
14112   /* Look for the `asm' keyword.  */
14113   cp_parser_require_keyword (parser, RID_ASM, RT_ASM);
14114   /* See if the next token is `volatile'.  */
14115   if (cp_parser_allow_gnu_extensions_p (parser)
14116       && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
14117     {
14118       /* Remember that we saw the `volatile' keyword.  */
14119       volatile_p = true;
14120       /* Consume the token.  */
14121       cp_lexer_consume_token (parser->lexer);
14122     }
14123   if (cp_parser_allow_gnu_extensions_p (parser)
14124       && parser->in_function_body
14125       && cp_lexer_next_token_is_keyword (parser->lexer, RID_GOTO))
14126     {
14127       /* Remember that we saw the `goto' keyword.  */
14128       goto_p = true;
14129       /* Consume the token.  */
14130       cp_lexer_consume_token (parser->lexer);
14131     }
14132   /* Look for the opening `('.  */
14133   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
14134     return;
14135   /* Look for the string.  */
14136   string = cp_parser_string_literal (parser, false, false);
14137   if (string == error_mark_node)
14138     {
14139       cp_parser_skip_to_closing_parenthesis (parser, true, false,
14140                                              /*consume_paren=*/true);
14141       return;
14142     }
14143
14144   /* If we're allowing GNU extensions, check for the extended assembly
14145      syntax.  Unfortunately, the `:' tokens need not be separated by
14146      a space in C, and so, for compatibility, we tolerate that here
14147      too.  Doing that means that we have to treat the `::' operator as
14148      two `:' tokens.  */
14149   if (cp_parser_allow_gnu_extensions_p (parser)
14150       && parser->in_function_body
14151       && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
14152           || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
14153     {
14154       bool inputs_p = false;
14155       bool clobbers_p = false;
14156       bool labels_p = false;
14157
14158       /* The extended syntax was used.  */
14159       extended_p = true;
14160
14161       /* Look for outputs.  */
14162       if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
14163         {
14164           /* Consume the `:'.  */
14165           cp_lexer_consume_token (parser->lexer);
14166           /* Parse the output-operands.  */
14167           if (cp_lexer_next_token_is_not (parser->lexer,
14168                                           CPP_COLON)
14169               && cp_lexer_next_token_is_not (parser->lexer,
14170                                              CPP_SCOPE)
14171               && cp_lexer_next_token_is_not (parser->lexer,
14172                                              CPP_CLOSE_PAREN)
14173               && !goto_p)
14174             outputs = cp_parser_asm_operand_list (parser);
14175
14176             if (outputs == error_mark_node)
14177               invalid_outputs_p = true;
14178         }
14179       /* If the next token is `::', there are no outputs, and the
14180          next token is the beginning of the inputs.  */
14181       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
14182         /* The inputs are coming next.  */
14183         inputs_p = true;
14184
14185       /* Look for inputs.  */
14186       if (inputs_p
14187           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
14188         {
14189           /* Consume the `:' or `::'.  */
14190           cp_lexer_consume_token (parser->lexer);
14191           /* Parse the output-operands.  */
14192           if (cp_lexer_next_token_is_not (parser->lexer,
14193                                           CPP_COLON)
14194               && cp_lexer_next_token_is_not (parser->lexer,
14195                                              CPP_SCOPE)
14196               && cp_lexer_next_token_is_not (parser->lexer,
14197                                              CPP_CLOSE_PAREN))
14198             inputs = cp_parser_asm_operand_list (parser);
14199
14200             if (inputs == error_mark_node)
14201               invalid_inputs_p = true;
14202         }
14203       else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
14204         /* The clobbers are coming next.  */
14205         clobbers_p = true;
14206
14207       /* Look for clobbers.  */
14208       if (clobbers_p
14209           || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
14210         {
14211           clobbers_p = true;
14212           /* Consume the `:' or `::'.  */
14213           cp_lexer_consume_token (parser->lexer);
14214           /* Parse the clobbers.  */
14215           if (cp_lexer_next_token_is_not (parser->lexer,
14216                                           CPP_COLON)
14217               && cp_lexer_next_token_is_not (parser->lexer,
14218                                              CPP_CLOSE_PAREN))
14219             clobbers = cp_parser_asm_clobber_list (parser);
14220         }
14221       else if (goto_p
14222                && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
14223         /* The labels are coming next.  */
14224         labels_p = true;
14225
14226       /* Look for labels.  */
14227       if (labels_p
14228           || (goto_p && cp_lexer_next_token_is (parser->lexer, CPP_COLON)))
14229         {
14230           labels_p = true;
14231           /* Consume the `:' or `::'.  */
14232           cp_lexer_consume_token (parser->lexer);
14233           /* Parse the labels.  */
14234           labels = cp_parser_asm_label_list (parser);
14235         }
14236
14237       if (goto_p && !labels_p)
14238         missing = clobbers_p ? RT_COLON : RT_COLON_SCOPE;
14239     }
14240   else if (goto_p)
14241     missing = RT_COLON_SCOPE;
14242
14243   /* Look for the closing `)'.  */
14244   if (!cp_parser_require (parser, missing ? CPP_COLON : CPP_CLOSE_PAREN,
14245                           missing ? missing : RT_CLOSE_PAREN))
14246     cp_parser_skip_to_closing_parenthesis (parser, true, false,
14247                                            /*consume_paren=*/true);
14248   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
14249
14250   if (!invalid_inputs_p && !invalid_outputs_p)
14251     {
14252       /* Create the ASM_EXPR.  */
14253       if (parser->in_function_body)
14254         {
14255           asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
14256                                       inputs, clobbers, labels);
14257           /* If the extended syntax was not used, mark the ASM_EXPR.  */
14258           if (!extended_p)
14259             {
14260               tree temp = asm_stmt;
14261               if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
14262                 temp = TREE_OPERAND (temp, 0);
14263
14264               ASM_INPUT_P (temp) = 1;
14265             }
14266         }
14267       else
14268         cgraph_add_asm_node (string);
14269     }
14270 }
14271
14272 /* Declarators [gram.dcl.decl] */
14273
14274 /* Parse an init-declarator.
14275
14276    init-declarator:
14277      declarator initializer [opt]
14278
14279    GNU Extension:
14280
14281    init-declarator:
14282      declarator asm-specification [opt] attributes [opt] initializer [opt]
14283
14284    function-definition:
14285      decl-specifier-seq [opt] declarator ctor-initializer [opt]
14286        function-body
14287      decl-specifier-seq [opt] declarator function-try-block
14288
14289    GNU Extension:
14290
14291    function-definition:
14292      __extension__ function-definition
14293
14294    The DECL_SPECIFIERS apply to this declarator.  Returns a
14295    representation of the entity declared.  If MEMBER_P is TRUE, then
14296    this declarator appears in a class scope.  The new DECL created by
14297    this declarator is returned.
14298
14299    The CHECKS are access checks that should be performed once we know
14300    what entity is being declared (and, therefore, what classes have
14301    befriended it).
14302
14303    If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
14304    for a function-definition here as well.  If the declarator is a
14305    declarator for a function-definition, *FUNCTION_DEFINITION_P will
14306    be TRUE upon return.  By that point, the function-definition will
14307    have been completely parsed.
14308
14309    FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
14310    is FALSE.
14311
14312    If MAYBE_RANGE_FOR_DECL is not NULL, the pointed tree will be set to the
14313    parsed declaration if it is an uninitialized single declarator not followed
14314    by a `;', or to error_mark_node otherwise. Either way, the trailing `;',
14315    if present, will not be consumed.  If returned, this declarator will be
14316    created with SD_INITIALIZED but will not call cp_finish_decl.  */
14317
14318 static tree
14319 cp_parser_init_declarator (cp_parser* parser,
14320                            cp_decl_specifier_seq *decl_specifiers,
14321                            VEC (deferred_access_check,gc)* checks,
14322                            bool function_definition_allowed_p,
14323                            bool member_p,
14324                            int declares_class_or_enum,
14325                            bool* function_definition_p,
14326                            tree* maybe_range_for_decl)
14327 {
14328   cp_token *token = NULL, *asm_spec_start_token = NULL,
14329            *attributes_start_token = NULL;
14330   cp_declarator *declarator;
14331   tree prefix_attributes;
14332   tree attributes;
14333   tree asm_specification;
14334   tree initializer;
14335   tree decl = NULL_TREE;
14336   tree scope;
14337   int is_initialized;
14338   /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
14339      initialized with "= ..", CPP_OPEN_PAREN if initialized with
14340      "(...)".  */
14341   enum cpp_ttype initialization_kind;
14342   bool is_direct_init = false;
14343   bool is_non_constant_init;
14344   int ctor_dtor_or_conv_p;
14345   bool friend_p;
14346   tree pushed_scope = NULL_TREE;
14347   bool range_for_decl_p = false;
14348
14349   /* Gather the attributes that were provided with the
14350      decl-specifiers.  */
14351   prefix_attributes = decl_specifiers->attributes;
14352
14353   /* Assume that this is not the declarator for a function
14354      definition.  */
14355   if (function_definition_p)
14356     *function_definition_p = false;
14357
14358   /* Defer access checks while parsing the declarator; we cannot know
14359      what names are accessible until we know what is being
14360      declared.  */
14361   resume_deferring_access_checks ();
14362
14363   /* Parse the declarator.  */
14364   token = cp_lexer_peek_token (parser->lexer);
14365   declarator
14366     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
14367                             &ctor_dtor_or_conv_p,
14368                             /*parenthesized_p=*/NULL,
14369                             /*member_p=*/false);
14370   /* Gather up the deferred checks.  */
14371   stop_deferring_access_checks ();
14372
14373   /* If the DECLARATOR was erroneous, there's no need to go
14374      further.  */
14375   if (declarator == cp_error_declarator)
14376     return error_mark_node;
14377
14378   /* Check that the number of template-parameter-lists is OK.  */
14379   if (!cp_parser_check_declarator_template_parameters (parser, declarator,
14380                                                        token->location))
14381     return error_mark_node;
14382
14383   if (declares_class_or_enum & 2)
14384     cp_parser_check_for_definition_in_return_type (declarator,
14385                                                    decl_specifiers->type,
14386                                                    decl_specifiers->type_location);
14387
14388   /* Figure out what scope the entity declared by the DECLARATOR is
14389      located in.  `grokdeclarator' sometimes changes the scope, so
14390      we compute it now.  */
14391   scope = get_scope_of_declarator (declarator);
14392
14393   /* Perform any lookups in the declared type which were thought to be
14394      dependent, but are not in the scope of the declarator.  */
14395   decl_specifiers->type
14396     = maybe_update_decl_type (decl_specifiers->type, scope);
14397
14398   /* If we're allowing GNU extensions, look for an asm-specification
14399      and attributes.  */
14400   if (cp_parser_allow_gnu_extensions_p (parser))
14401     {
14402       /* Look for an asm-specification.  */
14403       asm_spec_start_token = cp_lexer_peek_token (parser->lexer);
14404       asm_specification = cp_parser_asm_specification_opt (parser);
14405       /* And attributes.  */
14406       attributes_start_token = cp_lexer_peek_token (parser->lexer);
14407       attributes = cp_parser_attributes_opt (parser);
14408     }
14409   else
14410     {
14411       asm_specification = NULL_TREE;
14412       attributes = NULL_TREE;
14413     }
14414
14415   /* Peek at the next token.  */
14416   token = cp_lexer_peek_token (parser->lexer);
14417   /* Check to see if the token indicates the start of a
14418      function-definition.  */
14419   if (function_declarator_p (declarator)
14420       && cp_parser_token_starts_function_definition_p (token))
14421     {
14422       if (!function_definition_allowed_p)
14423         {
14424           /* If a function-definition should not appear here, issue an
14425              error message.  */
14426           cp_parser_error (parser,
14427                            "a function-definition is not allowed here");
14428           return error_mark_node;
14429         }
14430       else
14431         {
14432           location_t func_brace_location
14433             = cp_lexer_peek_token (parser->lexer)->location;
14434
14435           /* Neither attributes nor an asm-specification are allowed
14436              on a function-definition.  */
14437           if (asm_specification)
14438             error_at (asm_spec_start_token->location,
14439                       "an asm-specification is not allowed "
14440                       "on a function-definition");
14441           if (attributes)
14442             error_at (attributes_start_token->location,
14443                       "attributes are not allowed on a function-definition");
14444           /* This is a function-definition.  */
14445           *function_definition_p = true;
14446
14447           /* Parse the function definition.  */
14448           if (member_p)
14449             decl = cp_parser_save_member_function_body (parser,
14450                                                         decl_specifiers,
14451                                                         declarator,
14452                                                         prefix_attributes);
14453           else
14454             decl
14455               = (cp_parser_function_definition_from_specifiers_and_declarator
14456                  (parser, decl_specifiers, prefix_attributes, declarator));
14457
14458           if (decl != error_mark_node && DECL_STRUCT_FUNCTION (decl))
14459             {
14460               /* This is where the prologue starts...  */
14461               DECL_STRUCT_FUNCTION (decl)->function_start_locus
14462                 = func_brace_location;
14463             }
14464
14465           return decl;
14466         }
14467     }
14468
14469   /* [dcl.dcl]
14470
14471      Only in function declarations for constructors, destructors, and
14472      type conversions can the decl-specifier-seq be omitted.
14473
14474      We explicitly postpone this check past the point where we handle
14475      function-definitions because we tolerate function-definitions
14476      that are missing their return types in some modes.  */
14477   if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
14478     {
14479       cp_parser_error (parser,
14480                        "expected constructor, destructor, or type conversion");
14481       return error_mark_node;
14482     }
14483
14484   /* An `=' or an `(', or an '{' in C++0x, indicates an initializer.  */
14485   if (token->type == CPP_EQ
14486       || token->type == CPP_OPEN_PAREN
14487       || token->type == CPP_OPEN_BRACE)
14488     {
14489       is_initialized = SD_INITIALIZED;
14490       initialization_kind = token->type;
14491       if (maybe_range_for_decl)
14492         *maybe_range_for_decl = error_mark_node;
14493
14494       if (token->type == CPP_EQ
14495           && function_declarator_p (declarator))
14496         {
14497           cp_token *t2 = cp_lexer_peek_nth_token (parser->lexer, 2);
14498           if (t2->keyword == RID_DEFAULT)
14499             is_initialized = SD_DEFAULTED;
14500           else if (t2->keyword == RID_DELETE)
14501             is_initialized = SD_DELETED;
14502         }
14503     }
14504   else
14505     {
14506       /* If the init-declarator isn't initialized and isn't followed by a
14507          `,' or `;', it's not a valid init-declarator.  */
14508       if (token->type != CPP_COMMA
14509           && token->type != CPP_SEMICOLON)
14510         {
14511           if (maybe_range_for_decl && *maybe_range_for_decl != error_mark_node)
14512             range_for_decl_p = true;
14513           else
14514             {
14515               cp_parser_error (parser, "expected initializer");
14516               return error_mark_node;
14517             }
14518         }
14519       is_initialized = SD_UNINITIALIZED;
14520       initialization_kind = CPP_EOF;
14521     }
14522
14523   /* Because start_decl has side-effects, we should only call it if we
14524      know we're going ahead.  By this point, we know that we cannot
14525      possibly be looking at any other construct.  */
14526   cp_parser_commit_to_tentative_parse (parser);
14527
14528   /* If the decl specifiers were bad, issue an error now that we're
14529      sure this was intended to be a declarator.  Then continue
14530      declaring the variable(s), as int, to try to cut down on further
14531      errors.  */
14532   if (decl_specifiers->any_specifiers_p
14533       && decl_specifiers->type == error_mark_node)
14534     {
14535       cp_parser_error (parser, "invalid type in declaration");
14536       decl_specifiers->type = integer_type_node;
14537     }
14538
14539   /* Check to see whether or not this declaration is a friend.  */
14540   friend_p = cp_parser_friend_p (decl_specifiers);
14541
14542   /* Enter the newly declared entry in the symbol table.  If we're
14543      processing a declaration in a class-specifier, we wait until
14544      after processing the initializer.  */
14545   if (!member_p)
14546     {
14547       if (parser->in_unbraced_linkage_specification_p)
14548         decl_specifiers->storage_class = sc_extern;
14549       decl = start_decl (declarator, decl_specifiers,
14550                          range_for_decl_p? SD_INITIALIZED : is_initialized,
14551                          attributes, prefix_attributes,
14552                          &pushed_scope);
14553       /* Adjust location of decl if declarator->id_loc is more appropriate:
14554          set, and decl wasn't merged with another decl, in which case its
14555          location would be different from input_location, and more accurate.  */
14556       if (DECL_P (decl)
14557           && declarator->id_loc != UNKNOWN_LOCATION
14558           && DECL_SOURCE_LOCATION (decl) == input_location)
14559         DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
14560     }
14561   else if (scope)
14562     /* Enter the SCOPE.  That way unqualified names appearing in the
14563        initializer will be looked up in SCOPE.  */
14564     pushed_scope = push_scope (scope);
14565
14566   /* Perform deferred access control checks, now that we know in which
14567      SCOPE the declared entity resides.  */
14568   if (!member_p && decl)
14569     {
14570       tree saved_current_function_decl = NULL_TREE;
14571
14572       /* If the entity being declared is a function, pretend that we
14573          are in its scope.  If it is a `friend', it may have access to
14574          things that would not otherwise be accessible.  */
14575       if (TREE_CODE (decl) == FUNCTION_DECL)
14576         {
14577           saved_current_function_decl = current_function_decl;
14578           current_function_decl = decl;
14579         }
14580
14581       /* Perform access checks for template parameters.  */
14582       cp_parser_perform_template_parameter_access_checks (checks);
14583
14584       /* Perform the access control checks for the declarator and the
14585          decl-specifiers.  */
14586       perform_deferred_access_checks ();
14587
14588       /* Restore the saved value.  */
14589       if (TREE_CODE (decl) == FUNCTION_DECL)
14590         current_function_decl = saved_current_function_decl;
14591     }
14592
14593   /* Parse the initializer.  */
14594   initializer = NULL_TREE;
14595   is_direct_init = false;
14596   is_non_constant_init = true;
14597   if (is_initialized)
14598     {
14599       if (function_declarator_p (declarator))
14600         {
14601           cp_token *initializer_start_token = cp_lexer_peek_token (parser->lexer);
14602            if (initialization_kind == CPP_EQ)
14603              initializer = cp_parser_pure_specifier (parser);
14604            else
14605              {
14606                /* If the declaration was erroneous, we don't really
14607                   know what the user intended, so just silently
14608                   consume the initializer.  */
14609                if (decl != error_mark_node)
14610                  error_at (initializer_start_token->location,
14611                            "initializer provided for function");
14612                cp_parser_skip_to_closing_parenthesis (parser,
14613                                                       /*recovering=*/true,
14614                                                       /*or_comma=*/false,
14615                                                       /*consume_paren=*/true);
14616              }
14617         }
14618       else
14619         {
14620           /* We want to record the extra mangling scope for in-class
14621              initializers of class members and initializers of static data
14622              member templates.  The former is a C++0x feature which isn't
14623              implemented yet, and I expect it will involve deferring
14624              parsing of the initializer until end of class as with default
14625              arguments.  So right here we only handle the latter.  */
14626           if (!member_p && processing_template_decl)
14627             start_lambda_scope (decl);
14628           initializer = cp_parser_initializer (parser,
14629                                                &is_direct_init,
14630                                                &is_non_constant_init);
14631           if (!member_p && processing_template_decl)
14632             finish_lambda_scope ();
14633         }
14634     }
14635
14636   /* The old parser allows attributes to appear after a parenthesized
14637      initializer.  Mark Mitchell proposed removing this functionality
14638      on the GCC mailing lists on 2002-08-13.  This parser accepts the
14639      attributes -- but ignores them.  */
14640   if (cp_parser_allow_gnu_extensions_p (parser)
14641       && initialization_kind == CPP_OPEN_PAREN)
14642     if (cp_parser_attributes_opt (parser))
14643       warning (OPT_Wattributes,
14644                "attributes after parenthesized initializer ignored");
14645
14646   /* For an in-class declaration, use `grokfield' to create the
14647      declaration.  */
14648   if (member_p)
14649     {
14650       if (pushed_scope)
14651         {
14652           pop_scope (pushed_scope);
14653           pushed_scope = NULL_TREE;
14654         }
14655       decl = grokfield (declarator, decl_specifiers,
14656                         initializer, !is_non_constant_init,
14657                         /*asmspec=*/NULL_TREE,
14658                         prefix_attributes);
14659       if (decl && TREE_CODE (decl) == FUNCTION_DECL)
14660         cp_parser_save_default_args (parser, decl);
14661     }
14662
14663   /* Finish processing the declaration.  But, skip member
14664      declarations.  */
14665   if (!member_p && decl && decl != error_mark_node && !range_for_decl_p)
14666     {
14667       cp_finish_decl (decl,
14668                       initializer, !is_non_constant_init,
14669                       asm_specification,
14670                       /* If the initializer is in parentheses, then this is
14671                          a direct-initialization, which means that an
14672                          `explicit' constructor is OK.  Otherwise, an
14673                          `explicit' constructor cannot be used.  */
14674                       ((is_direct_init || !is_initialized)
14675                        ? LOOKUP_NORMAL : LOOKUP_IMPLICIT));
14676     }
14677   else if ((cxx_dialect != cxx98) && friend_p
14678            && decl && TREE_CODE (decl) == FUNCTION_DECL)
14679     /* Core issue #226 (C++0x only): A default template-argument
14680        shall not be specified in a friend class template
14681        declaration. */
14682     check_default_tmpl_args (decl, current_template_parms, /*is_primary=*/1, 
14683                              /*is_partial=*/0, /*is_friend_decl=*/1);
14684
14685   if (!friend_p && pushed_scope)
14686     pop_scope (pushed_scope);
14687
14688   return decl;
14689 }
14690
14691 /* Parse a declarator.
14692
14693    declarator:
14694      direct-declarator
14695      ptr-operator declarator
14696
14697    abstract-declarator:
14698      ptr-operator abstract-declarator [opt]
14699      direct-abstract-declarator
14700
14701    GNU Extensions:
14702
14703    declarator:
14704      attributes [opt] direct-declarator
14705      attributes [opt] ptr-operator declarator
14706
14707    abstract-declarator:
14708      attributes [opt] ptr-operator abstract-declarator [opt]
14709      attributes [opt] direct-abstract-declarator
14710
14711    If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
14712    detect constructor, destructor or conversion operators. It is set
14713    to -1 if the declarator is a name, and +1 if it is a
14714    function. Otherwise it is set to zero. Usually you just want to
14715    test for >0, but internally the negative value is used.
14716
14717    (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
14718    a decl-specifier-seq unless it declares a constructor, destructor,
14719    or conversion.  It might seem that we could check this condition in
14720    semantic analysis, rather than parsing, but that makes it difficult
14721    to handle something like `f()'.  We want to notice that there are
14722    no decl-specifiers, and therefore realize that this is an
14723    expression, not a declaration.)
14724
14725    If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
14726    the declarator is a direct-declarator of the form "(...)".
14727
14728    MEMBER_P is true iff this declarator is a member-declarator.  */
14729
14730 static cp_declarator *
14731 cp_parser_declarator (cp_parser* parser,
14732                       cp_parser_declarator_kind dcl_kind,
14733                       int* ctor_dtor_or_conv_p,
14734                       bool* parenthesized_p,
14735                       bool member_p)
14736 {
14737   cp_declarator *declarator;
14738   enum tree_code code;
14739   cp_cv_quals cv_quals;
14740   tree class_type;
14741   tree attributes = NULL_TREE;
14742
14743   /* Assume this is not a constructor, destructor, or type-conversion
14744      operator.  */
14745   if (ctor_dtor_or_conv_p)
14746     *ctor_dtor_or_conv_p = 0;
14747
14748   if (cp_parser_allow_gnu_extensions_p (parser))
14749     attributes = cp_parser_attributes_opt (parser);
14750
14751   /* Check for the ptr-operator production.  */
14752   cp_parser_parse_tentatively (parser);
14753   /* Parse the ptr-operator.  */
14754   code = cp_parser_ptr_operator (parser,
14755                                  &class_type,
14756                                  &cv_quals);
14757   /* If that worked, then we have a ptr-operator.  */
14758   if (cp_parser_parse_definitely (parser))
14759     {
14760       /* If a ptr-operator was found, then this declarator was not
14761          parenthesized.  */
14762       if (parenthesized_p)
14763         *parenthesized_p = true;
14764       /* The dependent declarator is optional if we are parsing an
14765          abstract-declarator.  */
14766       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
14767         cp_parser_parse_tentatively (parser);
14768
14769       /* Parse the dependent declarator.  */
14770       declarator = cp_parser_declarator (parser, dcl_kind,
14771                                          /*ctor_dtor_or_conv_p=*/NULL,
14772                                          /*parenthesized_p=*/NULL,
14773                                          /*member_p=*/false);
14774
14775       /* If we are parsing an abstract-declarator, we must handle the
14776          case where the dependent declarator is absent.  */
14777       if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
14778           && !cp_parser_parse_definitely (parser))
14779         declarator = NULL;
14780
14781       declarator = cp_parser_make_indirect_declarator
14782         (code, class_type, cv_quals, declarator);
14783     }
14784   /* Everything else is a direct-declarator.  */
14785   else
14786     {
14787       if (parenthesized_p)
14788         *parenthesized_p = cp_lexer_next_token_is (parser->lexer,
14789                                                    CPP_OPEN_PAREN);
14790       declarator = cp_parser_direct_declarator (parser, dcl_kind,
14791                                                 ctor_dtor_or_conv_p,
14792                                                 member_p);
14793     }
14794
14795   if (attributes && declarator && declarator != cp_error_declarator)
14796     declarator->attributes = attributes;
14797
14798   return declarator;
14799 }
14800
14801 /* Parse a direct-declarator or direct-abstract-declarator.
14802
14803    direct-declarator:
14804      declarator-id
14805      direct-declarator ( parameter-declaration-clause )
14806        cv-qualifier-seq [opt]
14807        exception-specification [opt]
14808      direct-declarator [ constant-expression [opt] ]
14809      ( declarator )
14810
14811    direct-abstract-declarator:
14812      direct-abstract-declarator [opt]
14813        ( parameter-declaration-clause )
14814        cv-qualifier-seq [opt]
14815        exception-specification [opt]
14816      direct-abstract-declarator [opt] [ constant-expression [opt] ]
14817      ( abstract-declarator )
14818
14819    Returns a representation of the declarator.  DCL_KIND is
14820    CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
14821    direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
14822    we are parsing a direct-declarator.  It is
14823    CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
14824    of ambiguity we prefer an abstract declarator, as per
14825    [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
14826    cp_parser_declarator.  */
14827
14828 static cp_declarator *
14829 cp_parser_direct_declarator (cp_parser* parser,
14830                              cp_parser_declarator_kind dcl_kind,
14831                              int* ctor_dtor_or_conv_p,
14832                              bool member_p)
14833 {
14834   cp_token *token;
14835   cp_declarator *declarator = NULL;
14836   tree scope = NULL_TREE;
14837   bool saved_default_arg_ok_p = parser->default_arg_ok_p;
14838   bool saved_in_declarator_p = parser->in_declarator_p;
14839   bool first = true;
14840   tree pushed_scope = NULL_TREE;
14841
14842   while (true)
14843     {
14844       /* Peek at the next token.  */
14845       token = cp_lexer_peek_token (parser->lexer);
14846       if (token->type == CPP_OPEN_PAREN)
14847         {
14848           /* This is either a parameter-declaration-clause, or a
14849              parenthesized declarator. When we know we are parsing a
14850              named declarator, it must be a parenthesized declarator
14851              if FIRST is true. For instance, `(int)' is a
14852              parameter-declaration-clause, with an omitted
14853              direct-abstract-declarator. But `((*))', is a
14854              parenthesized abstract declarator. Finally, when T is a
14855              template parameter `(T)' is a
14856              parameter-declaration-clause, and not a parenthesized
14857              named declarator.
14858
14859              We first try and parse a parameter-declaration-clause,
14860              and then try a nested declarator (if FIRST is true).
14861
14862              It is not an error for it not to be a
14863              parameter-declaration-clause, even when FIRST is
14864              false. Consider,
14865
14866                int i (int);
14867                int i (3);
14868
14869              The first is the declaration of a function while the
14870              second is the definition of a variable, including its
14871              initializer.
14872
14873              Having seen only the parenthesis, we cannot know which of
14874              these two alternatives should be selected.  Even more
14875              complex are examples like:
14876
14877                int i (int (a));
14878                int i (int (3));
14879
14880              The former is a function-declaration; the latter is a
14881              variable initialization.
14882
14883              Thus again, we try a parameter-declaration-clause, and if
14884              that fails, we back out and return.  */
14885
14886           if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
14887             {
14888               tree params;
14889               unsigned saved_num_template_parameter_lists;
14890               bool is_declarator = false;
14891               tree t;
14892
14893               /* In a member-declarator, the only valid interpretation
14894                  of a parenthesis is the start of a
14895                  parameter-declaration-clause.  (It is invalid to
14896                  initialize a static data member with a parenthesized
14897                  initializer; only the "=" form of initialization is
14898                  permitted.)  */
14899               if (!member_p)
14900                 cp_parser_parse_tentatively (parser);
14901
14902               /* Consume the `('.  */
14903               cp_lexer_consume_token (parser->lexer);
14904               if (first)
14905                 {
14906                   /* If this is going to be an abstract declarator, we're
14907                      in a declarator and we can't have default args.  */
14908                   parser->default_arg_ok_p = false;
14909                   parser->in_declarator_p = true;
14910                 }
14911
14912               /* Inside the function parameter list, surrounding
14913                  template-parameter-lists do not apply.  */
14914               saved_num_template_parameter_lists
14915                 = parser->num_template_parameter_lists;
14916               parser->num_template_parameter_lists = 0;
14917
14918               begin_scope (sk_function_parms, NULL_TREE);
14919
14920               /* Parse the parameter-declaration-clause.  */
14921               params = cp_parser_parameter_declaration_clause (parser);
14922
14923               parser->num_template_parameter_lists
14924                 = saved_num_template_parameter_lists;
14925
14926               /* Consume the `)'.  */
14927               cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
14928
14929               /* If all went well, parse the cv-qualifier-seq and the
14930                  exception-specification.  */
14931               if (member_p || cp_parser_parse_definitely (parser))
14932                 {
14933                   cp_cv_quals cv_quals;
14934                   cp_virt_specifiers virt_specifiers;
14935                   tree exception_specification;
14936                   tree late_return;
14937
14938                   is_declarator = true;
14939
14940                   if (ctor_dtor_or_conv_p)
14941                     *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
14942                   first = false;
14943
14944                   /* Parse the cv-qualifier-seq.  */
14945                   cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
14946                   /* And the exception-specification.  */
14947                   exception_specification
14948                     = cp_parser_exception_specification_opt (parser);
14949                   /* Parse the virt-specifier-seq.  */
14950                   virt_specifiers = cp_parser_virt_specifier_seq_opt (parser);
14951
14952                   late_return
14953                     = cp_parser_late_return_type_opt (parser);
14954
14955                   /* Create the function-declarator.  */
14956                   declarator = make_call_declarator (declarator,
14957                                                      params,
14958                                                      cv_quals,
14959                                                      virt_specifiers,
14960                                                      exception_specification,
14961                                                      late_return);
14962                   /* Any subsequent parameter lists are to do with
14963                      return type, so are not those of the declared
14964                      function.  */
14965                   parser->default_arg_ok_p = false;
14966                 }
14967
14968               /* Remove the function parms from scope.  */
14969               for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
14970                 pop_binding (DECL_NAME (t), t);
14971               leave_scope();
14972
14973               if (is_declarator)
14974                 /* Repeat the main loop.  */
14975                 continue;
14976             }
14977
14978           /* If this is the first, we can try a parenthesized
14979              declarator.  */
14980           if (first)
14981             {
14982               bool saved_in_type_id_in_expr_p;
14983
14984               parser->default_arg_ok_p = saved_default_arg_ok_p;
14985               parser->in_declarator_p = saved_in_declarator_p;
14986
14987               /* Consume the `('.  */
14988               cp_lexer_consume_token (parser->lexer);
14989               /* Parse the nested declarator.  */
14990               saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
14991               parser->in_type_id_in_expr_p = true;
14992               declarator
14993                 = cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
14994                                         /*parenthesized_p=*/NULL,
14995                                         member_p);
14996               parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
14997               first = false;
14998               /* Expect a `)'.  */
14999               if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
15000                 declarator = cp_error_declarator;
15001               if (declarator == cp_error_declarator)
15002                 break;
15003
15004               goto handle_declarator;
15005             }
15006           /* Otherwise, we must be done.  */
15007           else
15008             break;
15009         }
15010       else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
15011                && token->type == CPP_OPEN_SQUARE)
15012         {
15013           /* Parse an array-declarator.  */
15014           tree bounds;
15015
15016           if (ctor_dtor_or_conv_p)
15017             *ctor_dtor_or_conv_p = 0;
15018
15019           first = false;
15020           parser->default_arg_ok_p = false;
15021           parser->in_declarator_p = true;
15022           /* Consume the `['.  */
15023           cp_lexer_consume_token (parser->lexer);
15024           /* Peek at the next token.  */
15025           token = cp_lexer_peek_token (parser->lexer);
15026           /* If the next token is `]', then there is no
15027              constant-expression.  */
15028           if (token->type != CPP_CLOSE_SQUARE)
15029             {
15030               bool non_constant_p;
15031
15032               bounds
15033                 = cp_parser_constant_expression (parser,
15034                                                  /*allow_non_constant=*/true,
15035                                                  &non_constant_p);
15036               if (!non_constant_p)
15037                 /* OK */;
15038               /* Normally, the array bound must be an integral constant
15039                  expression.  However, as an extension, we allow VLAs
15040                  in function scopes as long as they aren't part of a
15041                  parameter declaration.  */
15042               else if (!parser->in_function_body
15043                        || current_binding_level->kind == sk_function_parms)
15044                 {
15045                   cp_parser_error (parser,
15046                                    "array bound is not an integer constant");
15047                   bounds = error_mark_node;
15048                 }
15049               else if (processing_template_decl && !error_operand_p (bounds))
15050                 {
15051                   /* Remember this wasn't a constant-expression.  */
15052                   bounds = build_nop (TREE_TYPE (bounds), bounds);
15053                   TREE_SIDE_EFFECTS (bounds) = 1;
15054                 }
15055             }
15056           else
15057             bounds = NULL_TREE;
15058           /* Look for the closing `]'.  */
15059           if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE))
15060             {
15061               declarator = cp_error_declarator;
15062               break;
15063             }
15064
15065           declarator = make_array_declarator (declarator, bounds);
15066         }
15067       else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
15068         {
15069           {
15070             tree qualifying_scope;
15071             tree unqualified_name;
15072             special_function_kind sfk;
15073             bool abstract_ok;
15074             bool pack_expansion_p = false;
15075             cp_token *declarator_id_start_token;
15076
15077             /* Parse a declarator-id */
15078             abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
15079             if (abstract_ok)
15080               {
15081                 cp_parser_parse_tentatively (parser);
15082
15083                 /* If we see an ellipsis, we should be looking at a
15084                    parameter pack. */
15085                 if (token->type == CPP_ELLIPSIS)
15086                   {
15087                     /* Consume the `...' */
15088                     cp_lexer_consume_token (parser->lexer);
15089
15090                     pack_expansion_p = true;
15091                   }
15092               }
15093
15094             declarator_id_start_token = cp_lexer_peek_token (parser->lexer);
15095             unqualified_name
15096               = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
15097             qualifying_scope = parser->scope;
15098             if (abstract_ok)
15099               {
15100                 bool okay = false;
15101
15102                 if (!unqualified_name && pack_expansion_p)
15103                   {
15104                     /* Check whether an error occurred. */
15105                     okay = !cp_parser_error_occurred (parser);
15106
15107                     /* We already consumed the ellipsis to mark a
15108                        parameter pack, but we have no way to report it,
15109                        so abort the tentative parse. We will be exiting
15110                        immediately anyway. */
15111                     cp_parser_abort_tentative_parse (parser);
15112                   }
15113                 else
15114                   okay = cp_parser_parse_definitely (parser);
15115
15116                 if (!okay)
15117                   unqualified_name = error_mark_node;
15118                 else if (unqualified_name
15119                          && (qualifying_scope
15120                              || (TREE_CODE (unqualified_name)
15121                                  != IDENTIFIER_NODE)))
15122                   {
15123                     cp_parser_error (parser, "expected unqualified-id");
15124                     unqualified_name = error_mark_node;
15125                   }
15126               }
15127
15128             if (!unqualified_name)
15129               return NULL;
15130             if (unqualified_name == error_mark_node)
15131               {
15132                 declarator = cp_error_declarator;
15133                 pack_expansion_p = false;
15134                 declarator->parameter_pack_p = false;
15135                 break;
15136               }
15137
15138             if (qualifying_scope && at_namespace_scope_p ()
15139                 && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
15140               {
15141                 /* In the declaration of a member of a template class
15142                    outside of the class itself, the SCOPE will sometimes
15143                    be a TYPENAME_TYPE.  For example, given:
15144
15145                    template <typename T>
15146                    int S<T>::R::i = 3;
15147
15148                    the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
15149                    this context, we must resolve S<T>::R to an ordinary
15150                    type, rather than a typename type.
15151
15152                    The reason we normally avoid resolving TYPENAME_TYPEs
15153                    is that a specialization of `S' might render
15154                    `S<T>::R' not a type.  However, if `S' is
15155                    specialized, then this `i' will not be used, so there
15156                    is no harm in resolving the types here.  */
15157                 tree type;
15158
15159                 /* Resolve the TYPENAME_TYPE.  */
15160                 type = resolve_typename_type (qualifying_scope,
15161                                               /*only_current_p=*/false);
15162                 /* If that failed, the declarator is invalid.  */
15163                 if (TREE_CODE (type) == TYPENAME_TYPE)
15164                   {
15165                     if (typedef_variant_p (type))
15166                       error_at (declarator_id_start_token->location,
15167                                 "cannot define member of dependent typedef "
15168                                 "%qT", type);
15169                     else
15170                       error_at (declarator_id_start_token->location,
15171                                 "%<%T::%E%> is not a type",
15172                                 TYPE_CONTEXT (qualifying_scope),
15173                                 TYPE_IDENTIFIER (qualifying_scope));
15174                   }
15175                 qualifying_scope = type;
15176               }
15177
15178             sfk = sfk_none;
15179
15180             if (unqualified_name)
15181               {
15182                 tree class_type;
15183
15184                 if (qualifying_scope
15185                     && CLASS_TYPE_P (qualifying_scope))
15186                   class_type = qualifying_scope;
15187                 else
15188                   class_type = current_class_type;
15189
15190                 if (TREE_CODE (unqualified_name) == TYPE_DECL)
15191                   {
15192                     tree name_type = TREE_TYPE (unqualified_name);
15193                     if (class_type && same_type_p (name_type, class_type))
15194                       {
15195                         if (qualifying_scope
15196                             && CLASSTYPE_USE_TEMPLATE (name_type))
15197                           {
15198                             error_at (declarator_id_start_token->location,
15199                                       "invalid use of constructor as a template");
15200                             inform (declarator_id_start_token->location,
15201                                     "use %<%T::%D%> instead of %<%T::%D%> to "
15202                                     "name the constructor in a qualified name",
15203                                     class_type,
15204                                     DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
15205                                     class_type, name_type);
15206                             declarator = cp_error_declarator;
15207                             break;
15208                           }
15209                         else
15210                           unqualified_name = constructor_name (class_type);
15211                       }
15212                     else
15213                       {
15214                         /* We do not attempt to print the declarator
15215                            here because we do not have enough
15216                            information about its original syntactic
15217                            form.  */
15218                         cp_parser_error (parser, "invalid declarator");
15219                         declarator = cp_error_declarator;
15220                         break;
15221                       }
15222                   }
15223
15224                 if (class_type)
15225                   {
15226                     if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
15227                       sfk = sfk_destructor;
15228                     else if (IDENTIFIER_TYPENAME_P (unqualified_name))
15229                       sfk = sfk_conversion;
15230                     else if (/* There's no way to declare a constructor
15231                                 for an anonymous type, even if the type
15232                                 got a name for linkage purposes.  */
15233                              !TYPE_WAS_ANONYMOUS (class_type)
15234                              && constructor_name_p (unqualified_name,
15235                                                     class_type))
15236                       {
15237                         unqualified_name = constructor_name (class_type);
15238                         sfk = sfk_constructor;
15239                       }
15240                     else if (is_overloaded_fn (unqualified_name)
15241                              && DECL_CONSTRUCTOR_P (get_first_fn
15242                                                     (unqualified_name)))
15243                       sfk = sfk_constructor;
15244
15245                     if (ctor_dtor_or_conv_p && sfk != sfk_none)
15246                       *ctor_dtor_or_conv_p = -1;
15247                   }
15248               }
15249             declarator = make_id_declarator (qualifying_scope,
15250                                              unqualified_name,
15251                                              sfk);
15252             declarator->id_loc = token->location;
15253             declarator->parameter_pack_p = pack_expansion_p;
15254
15255             if (pack_expansion_p)
15256               maybe_warn_variadic_templates ();
15257           }
15258
15259         handle_declarator:;
15260           scope = get_scope_of_declarator (declarator);
15261           if (scope)
15262             /* Any names that appear after the declarator-id for a
15263                member are looked up in the containing scope.  */
15264             pushed_scope = push_scope (scope);
15265           parser->in_declarator_p = true;
15266           if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
15267               || (declarator && declarator->kind == cdk_id))
15268             /* Default args are only allowed on function
15269                declarations.  */
15270             parser->default_arg_ok_p = saved_default_arg_ok_p;
15271           else
15272             parser->default_arg_ok_p = false;
15273
15274           first = false;
15275         }
15276       /* We're done.  */
15277       else
15278         break;
15279     }
15280
15281   /* For an abstract declarator, we might wind up with nothing at this
15282      point.  That's an error; the declarator is not optional.  */
15283   if (!declarator)
15284     cp_parser_error (parser, "expected declarator");
15285
15286   /* If we entered a scope, we must exit it now.  */
15287   if (pushed_scope)
15288     pop_scope (pushed_scope);
15289
15290   parser->default_arg_ok_p = saved_default_arg_ok_p;
15291   parser->in_declarator_p = saved_in_declarator_p;
15292
15293   return declarator;
15294 }
15295
15296 /* Parse a ptr-operator.
15297
15298    ptr-operator:
15299      * cv-qualifier-seq [opt]
15300      &
15301      :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
15302
15303    GNU Extension:
15304
15305    ptr-operator:
15306      & cv-qualifier-seq [opt]
15307
15308    Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
15309    Returns ADDR_EXPR if a reference was used, or NON_LVALUE_EXPR for
15310    an rvalue reference. In the case of a pointer-to-member, *TYPE is
15311    filled in with the TYPE containing the member.  *CV_QUALS is
15312    filled in with the cv-qualifier-seq, or TYPE_UNQUALIFIED, if there
15313    are no cv-qualifiers.  Returns ERROR_MARK if an error occurred.
15314    Note that the tree codes returned by this function have nothing
15315    to do with the types of trees that will be eventually be created
15316    to represent the pointer or reference type being parsed. They are
15317    just constants with suggestive names. */
15318 static enum tree_code
15319 cp_parser_ptr_operator (cp_parser* parser,
15320                         tree* type,
15321                         cp_cv_quals *cv_quals)
15322 {
15323   enum tree_code code = ERROR_MARK;
15324   cp_token *token;
15325
15326   /* Assume that it's not a pointer-to-member.  */
15327   *type = NULL_TREE;
15328   /* And that there are no cv-qualifiers.  */
15329   *cv_quals = TYPE_UNQUALIFIED;
15330
15331   /* Peek at the next token.  */
15332   token = cp_lexer_peek_token (parser->lexer);
15333
15334   /* If it's a `*', `&' or `&&' we have a pointer or reference.  */
15335   if (token->type == CPP_MULT)
15336     code = INDIRECT_REF;
15337   else if (token->type == CPP_AND)
15338     code = ADDR_EXPR;
15339   else if ((cxx_dialect != cxx98) &&
15340            token->type == CPP_AND_AND) /* C++0x only */
15341     code = NON_LVALUE_EXPR;
15342
15343   if (code != ERROR_MARK)
15344     {
15345       /* Consume the `*', `&' or `&&'.  */
15346       cp_lexer_consume_token (parser->lexer);
15347
15348       /* A `*' can be followed by a cv-qualifier-seq, and so can a
15349          `&', if we are allowing GNU extensions.  (The only qualifier
15350          that can legally appear after `&' is `restrict', but that is
15351          enforced during semantic analysis.  */
15352       if (code == INDIRECT_REF
15353           || cp_parser_allow_gnu_extensions_p (parser))
15354         *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
15355     }
15356   else
15357     {
15358       /* Try the pointer-to-member case.  */
15359       cp_parser_parse_tentatively (parser);
15360       /* Look for the optional `::' operator.  */
15361       cp_parser_global_scope_opt (parser,
15362                                   /*current_scope_valid_p=*/false);
15363       /* Look for the nested-name specifier.  */
15364       token = cp_lexer_peek_token (parser->lexer);
15365       cp_parser_nested_name_specifier (parser,
15366                                        /*typename_keyword_p=*/false,
15367                                        /*check_dependency_p=*/true,
15368                                        /*type_p=*/false,
15369                                        /*is_declaration=*/false);
15370       /* If we found it, and the next token is a `*', then we are
15371          indeed looking at a pointer-to-member operator.  */
15372       if (!cp_parser_error_occurred (parser)
15373           && cp_parser_require (parser, CPP_MULT, RT_MULT))
15374         {
15375           /* Indicate that the `*' operator was used.  */
15376           code = INDIRECT_REF;
15377
15378           if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
15379             error_at (token->location, "%qD is a namespace", parser->scope);
15380           else
15381             {
15382               /* The type of which the member is a member is given by the
15383                  current SCOPE.  */
15384               *type = parser->scope;
15385               /* The next name will not be qualified.  */
15386               parser->scope = NULL_TREE;
15387               parser->qualifying_scope = NULL_TREE;
15388               parser->object_scope = NULL_TREE;
15389               /* Look for the optional cv-qualifier-seq.  */
15390               *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
15391             }
15392         }
15393       /* If that didn't work we don't have a ptr-operator.  */
15394       if (!cp_parser_parse_definitely (parser))
15395         cp_parser_error (parser, "expected ptr-operator");
15396     }
15397
15398   return code;
15399 }
15400
15401 /* Parse an (optional) cv-qualifier-seq.
15402
15403    cv-qualifier-seq:
15404      cv-qualifier cv-qualifier-seq [opt]
15405
15406    cv-qualifier:
15407      const
15408      volatile
15409
15410    GNU Extension:
15411
15412    cv-qualifier:
15413      __restrict__
15414
15415    Returns a bitmask representing the cv-qualifiers.  */
15416
15417 static cp_cv_quals
15418 cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
15419 {
15420   cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
15421
15422   while (true)
15423     {
15424       cp_token *token;
15425       cp_cv_quals cv_qualifier;
15426
15427       /* Peek at the next token.  */
15428       token = cp_lexer_peek_token (parser->lexer);
15429       /* See if it's a cv-qualifier.  */
15430       switch (token->keyword)
15431         {
15432         case RID_CONST:
15433           cv_qualifier = TYPE_QUAL_CONST;
15434           break;
15435
15436         case RID_VOLATILE:
15437           cv_qualifier = TYPE_QUAL_VOLATILE;
15438           break;
15439
15440         case RID_RESTRICT:
15441           cv_qualifier = TYPE_QUAL_RESTRICT;
15442           break;
15443
15444         default:
15445           cv_qualifier = TYPE_UNQUALIFIED;
15446           break;
15447         }
15448
15449       if (!cv_qualifier)
15450         break;
15451
15452       if (cv_quals & cv_qualifier)
15453         {
15454           error_at (token->location, "duplicate cv-qualifier");
15455           cp_lexer_purge_token (parser->lexer);
15456         }
15457       else
15458         {
15459           cp_lexer_consume_token (parser->lexer);
15460           cv_quals |= cv_qualifier;
15461         }
15462     }
15463
15464   return cv_quals;
15465 }
15466
15467 /* Parse an (optional) virt-specifier-seq.
15468
15469    virt-specifier-seq:
15470      virt-specifier virt-specifier-seq [opt]
15471
15472    virt-specifier:
15473      override
15474      final
15475
15476    Returns a bitmask representing the virt-specifiers.  */
15477
15478 static cp_virt_specifiers
15479 cp_parser_virt_specifier_seq_opt (cp_parser* parser)
15480 {
15481   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
15482
15483   while (true)
15484     {
15485       cp_token *token;
15486       cp_virt_specifiers virt_specifier;
15487
15488       /* Peek at the next token.  */
15489       token = cp_lexer_peek_token (parser->lexer);
15490       /* See if it's a virt-specifier-qualifier.  */
15491       if (token->type != CPP_NAME)
15492         break;
15493       if (!strcmp (IDENTIFIER_POINTER(token->u.value), "override"))
15494         virt_specifier = VIRT_SPEC_OVERRIDE;
15495       else if (!strcmp (IDENTIFIER_POINTER(token->u.value), "final"))
15496         virt_specifier = VIRT_SPEC_FINAL;
15497       else
15498         break;
15499
15500       if (virt_specifiers & virt_specifier)
15501         {
15502           error_at (token->location, "duplicate virt-specifier");
15503           cp_lexer_purge_token (parser->lexer);
15504         }
15505       else
15506         {
15507           cp_lexer_consume_token (parser->lexer);
15508           virt_specifiers |= virt_specifier;
15509         }
15510     }
15511   return virt_specifiers;
15512 }
15513
15514 /* Parse a late-specified return type, if any.  This is not a separate
15515    non-terminal, but part of a function declarator, which looks like
15516
15517    -> trailing-type-specifier-seq abstract-declarator(opt)
15518
15519    Returns the type indicated by the type-id.  */
15520
15521 static tree
15522 cp_parser_late_return_type_opt (cp_parser* parser)
15523 {
15524   cp_token *token;
15525
15526   /* Peek at the next token.  */
15527   token = cp_lexer_peek_token (parser->lexer);
15528   /* A late-specified return type is indicated by an initial '->'. */
15529   if (token->type != CPP_DEREF)
15530     return NULL_TREE;
15531
15532   /* Consume the ->.  */
15533   cp_lexer_consume_token (parser->lexer);
15534
15535   return cp_parser_trailing_type_id (parser);
15536 }
15537
15538 /* Parse a declarator-id.
15539
15540    declarator-id:
15541      id-expression
15542      :: [opt] nested-name-specifier [opt] type-name
15543
15544    In the `id-expression' case, the value returned is as for
15545    cp_parser_id_expression if the id-expression was an unqualified-id.
15546    If the id-expression was a qualified-id, then a SCOPE_REF is
15547    returned.  The first operand is the scope (either a NAMESPACE_DECL
15548    or TREE_TYPE), but the second is still just a representation of an
15549    unqualified-id.  */
15550
15551 static tree
15552 cp_parser_declarator_id (cp_parser* parser, bool optional_p)
15553 {
15554   tree id;
15555   /* The expression must be an id-expression.  Assume that qualified
15556      names are the names of types so that:
15557
15558        template <class T>
15559        int S<T>::R::i = 3;
15560
15561      will work; we must treat `S<T>::R' as the name of a type.
15562      Similarly, assume that qualified names are templates, where
15563      required, so that:
15564
15565        template <class T>
15566        int S<T>::R<T>::i = 3;
15567
15568      will work, too.  */
15569   id = cp_parser_id_expression (parser,
15570                                 /*template_keyword_p=*/false,
15571                                 /*check_dependency_p=*/false,
15572                                 /*template_p=*/NULL,
15573                                 /*declarator_p=*/true,
15574                                 optional_p);
15575   if (id && BASELINK_P (id))
15576     id = BASELINK_FUNCTIONS (id);
15577   return id;
15578 }
15579
15580 /* Parse a type-id.
15581
15582    type-id:
15583      type-specifier-seq abstract-declarator [opt]
15584
15585    Returns the TYPE specified.  */
15586
15587 static tree
15588 cp_parser_type_id_1 (cp_parser* parser, bool is_template_arg,
15589                      bool is_trailing_return)
15590 {
15591   cp_decl_specifier_seq type_specifier_seq;
15592   cp_declarator *abstract_declarator;
15593
15594   /* Parse the type-specifier-seq.  */
15595   cp_parser_type_specifier_seq (parser, /*is_declaration=*/false,
15596                                 is_trailing_return,
15597                                 &type_specifier_seq);
15598   if (type_specifier_seq.type == error_mark_node)
15599     return error_mark_node;
15600
15601   /* There might or might not be an abstract declarator.  */
15602   cp_parser_parse_tentatively (parser);
15603   /* Look for the declarator.  */
15604   abstract_declarator
15605     = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
15606                             /*parenthesized_p=*/NULL,
15607                             /*member_p=*/false);
15608   /* Check to see if there really was a declarator.  */
15609   if (!cp_parser_parse_definitely (parser))
15610     abstract_declarator = NULL;
15611
15612   if (type_specifier_seq.type
15613       && type_uses_auto (type_specifier_seq.type))
15614     {
15615       /* A type-id with type 'auto' is only ok if the abstract declarator
15616          is a function declarator with a late-specified return type.  */
15617       if (abstract_declarator
15618           && abstract_declarator->kind == cdk_function
15619           && abstract_declarator->u.function.late_return_type)
15620         /* OK */;
15621       else
15622         {
15623           error ("invalid use of %<auto%>");
15624           return error_mark_node;
15625         }
15626     }
15627   
15628   return groktypename (&type_specifier_seq, abstract_declarator,
15629                        is_template_arg);
15630 }
15631
15632 static tree cp_parser_type_id (cp_parser *parser)
15633 {
15634   return cp_parser_type_id_1 (parser, false, false);
15635 }
15636
15637 static tree cp_parser_template_type_arg (cp_parser *parser)
15638 {
15639   tree r;
15640   const char *saved_message = parser->type_definition_forbidden_message;
15641   parser->type_definition_forbidden_message
15642     = G_("types may not be defined in template arguments");
15643   r = cp_parser_type_id_1 (parser, true, false);
15644   parser->type_definition_forbidden_message = saved_message;
15645   return r;
15646 }
15647
15648 static tree cp_parser_trailing_type_id (cp_parser *parser)
15649 {
15650   return cp_parser_type_id_1 (parser, false, true);
15651 }
15652
15653 /* Parse a type-specifier-seq.
15654
15655    type-specifier-seq:
15656      type-specifier type-specifier-seq [opt]
15657
15658    GNU extension:
15659
15660    type-specifier-seq:
15661      attributes type-specifier-seq [opt]
15662
15663    If IS_DECLARATION is true, we are at the start of a "condition" or
15664    exception-declaration, so we might be followed by a declarator-id.
15665
15666    If IS_TRAILING_RETURN is true, we are in a trailing-return-type,
15667    i.e. we've just seen "->".
15668
15669    Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
15670
15671 static void
15672 cp_parser_type_specifier_seq (cp_parser* parser,
15673                               bool is_declaration,
15674                               bool is_trailing_return,
15675                               cp_decl_specifier_seq *type_specifier_seq)
15676 {
15677   bool seen_type_specifier = false;
15678   cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
15679   cp_token *start_token = NULL;
15680
15681   /* Clear the TYPE_SPECIFIER_SEQ.  */
15682   clear_decl_specs (type_specifier_seq);
15683
15684   /* In the context of a trailing return type, enum E { } is an
15685      elaborated-type-specifier followed by a function-body, not an
15686      enum-specifier.  */
15687   if (is_trailing_return)
15688     flags |= CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS;
15689
15690   /* Parse the type-specifiers and attributes.  */
15691   while (true)
15692     {
15693       tree type_specifier;
15694       bool is_cv_qualifier;
15695
15696       /* Check for attributes first.  */
15697       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
15698         {
15699           type_specifier_seq->attributes =
15700             chainon (type_specifier_seq->attributes,
15701                      cp_parser_attributes_opt (parser));
15702           continue;
15703         }
15704
15705       /* record the token of the beginning of the type specifier seq,
15706          for error reporting purposes*/
15707      if (!start_token)
15708        start_token = cp_lexer_peek_token (parser->lexer);
15709
15710       /* Look for the type-specifier.  */
15711       type_specifier = cp_parser_type_specifier (parser,
15712                                                  flags,
15713                                                  type_specifier_seq,
15714                                                  /*is_declaration=*/false,
15715                                                  NULL,
15716                                                  &is_cv_qualifier);
15717       if (!type_specifier)
15718         {
15719           /* If the first type-specifier could not be found, this is not a
15720              type-specifier-seq at all.  */
15721           if (!seen_type_specifier)
15722             {
15723               cp_parser_error (parser, "expected type-specifier");
15724               type_specifier_seq->type = error_mark_node;
15725               return;
15726             }
15727           /* If subsequent type-specifiers could not be found, the
15728              type-specifier-seq is complete.  */
15729           break;
15730         }
15731
15732       seen_type_specifier = true;
15733       /* The standard says that a condition can be:
15734
15735             type-specifier-seq declarator = assignment-expression
15736
15737          However, given:
15738
15739            struct S {};
15740            if (int S = ...)
15741
15742          we should treat the "S" as a declarator, not as a
15743          type-specifier.  The standard doesn't say that explicitly for
15744          type-specifier-seq, but it does say that for
15745          decl-specifier-seq in an ordinary declaration.  Perhaps it
15746          would be clearer just to allow a decl-specifier-seq here, and
15747          then add a semantic restriction that if any decl-specifiers
15748          that are not type-specifiers appear, the program is invalid.  */
15749       if (is_declaration && !is_cv_qualifier)
15750         flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
15751     }
15752
15753   cp_parser_check_decl_spec (type_specifier_seq, start_token->location);
15754 }
15755
15756 /* Parse a parameter-declaration-clause.
15757
15758    parameter-declaration-clause:
15759      parameter-declaration-list [opt] ... [opt]
15760      parameter-declaration-list , ...
15761
15762    Returns a representation for the parameter declarations.  A return
15763    value of NULL indicates a parameter-declaration-clause consisting
15764    only of an ellipsis.  */
15765
15766 static tree
15767 cp_parser_parameter_declaration_clause (cp_parser* parser)
15768 {
15769   tree parameters;
15770   cp_token *token;
15771   bool ellipsis_p;
15772   bool is_error;
15773
15774   /* Peek at the next token.  */
15775   token = cp_lexer_peek_token (parser->lexer);
15776   /* Check for trivial parameter-declaration-clauses.  */
15777   if (token->type == CPP_ELLIPSIS)
15778     {
15779       /* Consume the `...' token.  */
15780       cp_lexer_consume_token (parser->lexer);
15781       return NULL_TREE;
15782     }
15783   else if (token->type == CPP_CLOSE_PAREN)
15784     /* There are no parameters.  */
15785     {
15786 #ifndef NO_IMPLICIT_EXTERN_C
15787       if (in_system_header && current_class_type == NULL
15788           && current_lang_name == lang_name_c)
15789         return NULL_TREE;
15790       else
15791 #endif
15792         return void_list_node;
15793     }
15794   /* Check for `(void)', too, which is a special case.  */
15795   else if (token->keyword == RID_VOID
15796            && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
15797                == CPP_CLOSE_PAREN))
15798     {
15799       /* Consume the `void' token.  */
15800       cp_lexer_consume_token (parser->lexer);
15801       /* There are no parameters.  */
15802       return void_list_node;
15803     }
15804
15805   /* Parse the parameter-declaration-list.  */
15806   parameters = cp_parser_parameter_declaration_list (parser, &is_error);
15807   /* If a parse error occurred while parsing the
15808      parameter-declaration-list, then the entire
15809      parameter-declaration-clause is erroneous.  */
15810   if (is_error)
15811     return NULL;
15812
15813   /* Peek at the next token.  */
15814   token = cp_lexer_peek_token (parser->lexer);
15815   /* If it's a `,', the clause should terminate with an ellipsis.  */
15816   if (token->type == CPP_COMMA)
15817     {
15818       /* Consume the `,'.  */
15819       cp_lexer_consume_token (parser->lexer);
15820       /* Expect an ellipsis.  */
15821       ellipsis_p
15822         = (cp_parser_require (parser, CPP_ELLIPSIS, RT_ELLIPSIS) != NULL);
15823     }
15824   /* It might also be `...' if the optional trailing `,' was
15825      omitted.  */
15826   else if (token->type == CPP_ELLIPSIS)
15827     {
15828       /* Consume the `...' token.  */
15829       cp_lexer_consume_token (parser->lexer);
15830       /* And remember that we saw it.  */
15831       ellipsis_p = true;
15832     }
15833   else
15834     ellipsis_p = false;
15835
15836   /* Finish the parameter list.  */
15837   if (!ellipsis_p)
15838     parameters = chainon (parameters, void_list_node);
15839
15840   return parameters;
15841 }
15842
15843 /* Parse a parameter-declaration-list.
15844
15845    parameter-declaration-list:
15846      parameter-declaration
15847      parameter-declaration-list , parameter-declaration
15848
15849    Returns a representation of the parameter-declaration-list, as for
15850    cp_parser_parameter_declaration_clause.  However, the
15851    `void_list_node' is never appended to the list.  Upon return,
15852    *IS_ERROR will be true iff an error occurred.  */
15853
15854 static tree
15855 cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
15856 {
15857   tree parameters = NULL_TREE;
15858   tree *tail = &parameters; 
15859   bool saved_in_unbraced_linkage_specification_p;
15860   int index = 0;
15861
15862   /* Assume all will go well.  */
15863   *is_error = false;
15864   /* The special considerations that apply to a function within an
15865      unbraced linkage specifications do not apply to the parameters
15866      to the function.  */
15867   saved_in_unbraced_linkage_specification_p 
15868     = parser->in_unbraced_linkage_specification_p;
15869   parser->in_unbraced_linkage_specification_p = false;
15870
15871   /* Look for more parameters.  */
15872   while (true)
15873     {
15874       cp_parameter_declarator *parameter;
15875       tree decl = error_mark_node;
15876       bool parenthesized_p;
15877       /* Parse the parameter.  */
15878       parameter
15879         = cp_parser_parameter_declaration (parser,
15880                                            /*template_parm_p=*/false,
15881                                            &parenthesized_p);
15882
15883       /* We don't know yet if the enclosing context is deprecated, so wait
15884          and warn in grokparms if appropriate.  */
15885       deprecated_state = DEPRECATED_SUPPRESS;
15886
15887       if (parameter)
15888         decl = grokdeclarator (parameter->declarator,
15889                                &parameter->decl_specifiers,
15890                                PARM,
15891                                parameter->default_argument != NULL_TREE,
15892                                &parameter->decl_specifiers.attributes);
15893
15894       deprecated_state = DEPRECATED_NORMAL;
15895
15896       /* If a parse error occurred parsing the parameter declaration,
15897          then the entire parameter-declaration-list is erroneous.  */
15898       if (decl == error_mark_node)
15899         {
15900           *is_error = true;
15901           parameters = error_mark_node;
15902           break;
15903         }
15904
15905       if (parameter->decl_specifiers.attributes)
15906         cplus_decl_attributes (&decl,
15907                                parameter->decl_specifiers.attributes,
15908                                0);
15909       if (DECL_NAME (decl))
15910         decl = pushdecl (decl);
15911
15912       if (decl != error_mark_node)
15913         {
15914           retrofit_lang_decl (decl);
15915           DECL_PARM_INDEX (decl) = ++index;
15916           DECL_PARM_LEVEL (decl) = function_parm_depth ();
15917         }
15918
15919       /* Add the new parameter to the list.  */
15920       *tail = build_tree_list (parameter->default_argument, decl);
15921       tail = &TREE_CHAIN (*tail);
15922
15923       /* Peek at the next token.  */
15924       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
15925           || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
15926           /* These are for Objective-C++ */
15927           || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
15928           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
15929         /* The parameter-declaration-list is complete.  */
15930         break;
15931       else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
15932         {
15933           cp_token *token;
15934
15935           /* Peek at the next token.  */
15936           token = cp_lexer_peek_nth_token (parser->lexer, 2);
15937           /* If it's an ellipsis, then the list is complete.  */
15938           if (token->type == CPP_ELLIPSIS)
15939             break;
15940           /* Otherwise, there must be more parameters.  Consume the
15941              `,'.  */
15942           cp_lexer_consume_token (parser->lexer);
15943           /* When parsing something like:
15944
15945                 int i(float f, double d)
15946
15947              we can tell after seeing the declaration for "f" that we
15948              are not looking at an initialization of a variable "i",
15949              but rather at the declaration of a function "i".
15950
15951              Due to the fact that the parsing of template arguments
15952              (as specified to a template-id) requires backtracking we
15953              cannot use this technique when inside a template argument
15954              list.  */
15955           if (!parser->in_template_argument_list_p
15956               && !parser->in_type_id_in_expr_p
15957               && cp_parser_uncommitted_to_tentative_parse_p (parser)
15958               /* However, a parameter-declaration of the form
15959                  "foat(f)" (which is a valid declaration of a
15960                  parameter "f") can also be interpreted as an
15961                  expression (the conversion of "f" to "float").  */
15962               && !parenthesized_p)
15963             cp_parser_commit_to_tentative_parse (parser);
15964         }
15965       else
15966         {
15967           cp_parser_error (parser, "expected %<,%> or %<...%>");
15968           if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
15969             cp_parser_skip_to_closing_parenthesis (parser,
15970                                                    /*recovering=*/true,
15971                                                    /*or_comma=*/false,
15972                                                    /*consume_paren=*/false);
15973           break;
15974         }
15975     }
15976
15977   parser->in_unbraced_linkage_specification_p
15978     = saved_in_unbraced_linkage_specification_p;
15979
15980   return parameters;
15981 }
15982
15983 /* Parse a parameter declaration.
15984
15985    parameter-declaration:
15986      decl-specifier-seq ... [opt] declarator
15987      decl-specifier-seq declarator = assignment-expression
15988      decl-specifier-seq ... [opt] abstract-declarator [opt]
15989      decl-specifier-seq abstract-declarator [opt] = assignment-expression
15990
15991    If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
15992    declares a template parameter.  (In that case, a non-nested `>'
15993    token encountered during the parsing of the assignment-expression
15994    is not interpreted as a greater-than operator.)
15995
15996    Returns a representation of the parameter, or NULL if an error
15997    occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
15998    true iff the declarator is of the form "(p)".  */
15999
16000 static cp_parameter_declarator *
16001 cp_parser_parameter_declaration (cp_parser *parser,
16002                                  bool template_parm_p,
16003                                  bool *parenthesized_p)
16004 {
16005   int declares_class_or_enum;
16006   cp_decl_specifier_seq decl_specifiers;
16007   cp_declarator *declarator;
16008   tree default_argument;
16009   cp_token *token = NULL, *declarator_token_start = NULL;
16010   const char *saved_message;
16011
16012   /* In a template parameter, `>' is not an operator.
16013
16014      [temp.param]
16015
16016      When parsing a default template-argument for a non-type
16017      template-parameter, the first non-nested `>' is taken as the end
16018      of the template parameter-list rather than a greater-than
16019      operator.  */
16020
16021   /* Type definitions may not appear in parameter types.  */
16022   saved_message = parser->type_definition_forbidden_message;
16023   parser->type_definition_forbidden_message
16024     = G_("types may not be defined in parameter types");
16025
16026   /* Parse the declaration-specifiers.  */
16027   cp_parser_decl_specifier_seq (parser,
16028                                 CP_PARSER_FLAGS_NONE,
16029                                 &decl_specifiers,
16030                                 &declares_class_or_enum);
16031
16032   /* Complain about missing 'typename' or other invalid type names.  */
16033   if (!decl_specifiers.any_type_specifiers_p)
16034     cp_parser_parse_and_diagnose_invalid_type_name (parser);
16035
16036   /* If an error occurred, there's no reason to attempt to parse the
16037      rest of the declaration.  */
16038   if (cp_parser_error_occurred (parser))
16039     {
16040       parser->type_definition_forbidden_message = saved_message;
16041       return NULL;
16042     }
16043
16044   /* Peek at the next token.  */
16045   token = cp_lexer_peek_token (parser->lexer);
16046
16047   /* If the next token is a `)', `,', `=', `>', or `...', then there
16048      is no declarator. However, when variadic templates are enabled,
16049      there may be a declarator following `...'.  */
16050   if (token->type == CPP_CLOSE_PAREN
16051       || token->type == CPP_COMMA
16052       || token->type == CPP_EQ
16053       || token->type == CPP_GREATER)
16054     {
16055       declarator = NULL;
16056       if (parenthesized_p)
16057         *parenthesized_p = false;
16058     }
16059   /* Otherwise, there should be a declarator.  */
16060   else
16061     {
16062       bool saved_default_arg_ok_p = parser->default_arg_ok_p;
16063       parser->default_arg_ok_p = false;
16064
16065       /* After seeing a decl-specifier-seq, if the next token is not a
16066          "(", there is no possibility that the code is a valid
16067          expression.  Therefore, if parsing tentatively, we commit at
16068          this point.  */
16069       if (!parser->in_template_argument_list_p
16070           /* In an expression context, having seen:
16071
16072                (int((char ...
16073
16074              we cannot be sure whether we are looking at a
16075              function-type (taking a "char" as a parameter) or a cast
16076              of some object of type "char" to "int".  */
16077           && !parser->in_type_id_in_expr_p
16078           && cp_parser_uncommitted_to_tentative_parse_p (parser)
16079           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
16080           && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
16081         cp_parser_commit_to_tentative_parse (parser);
16082       /* Parse the declarator.  */
16083       declarator_token_start = token;
16084       declarator = cp_parser_declarator (parser,
16085                                          CP_PARSER_DECLARATOR_EITHER,
16086                                          /*ctor_dtor_or_conv_p=*/NULL,
16087                                          parenthesized_p,
16088                                          /*member_p=*/false);
16089       parser->default_arg_ok_p = saved_default_arg_ok_p;
16090       /* After the declarator, allow more attributes.  */
16091       decl_specifiers.attributes
16092         = chainon (decl_specifiers.attributes,
16093                    cp_parser_attributes_opt (parser));
16094     }
16095
16096   /* If the next token is an ellipsis, and we have not seen a
16097      declarator name, and the type of the declarator contains parameter
16098      packs but it is not a TYPE_PACK_EXPANSION, then we actually have
16099      a parameter pack expansion expression. Otherwise, leave the
16100      ellipsis for a C-style variadic function. */
16101   token = cp_lexer_peek_token (parser->lexer);
16102   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
16103     {
16104       tree type = decl_specifiers.type;
16105
16106       if (type && DECL_P (type))
16107         type = TREE_TYPE (type);
16108
16109       if (type
16110           && TREE_CODE (type) != TYPE_PACK_EXPANSION
16111           && declarator_can_be_parameter_pack (declarator)
16112           && (!declarator || !declarator->parameter_pack_p)
16113           && uses_parameter_packs (type))
16114         {
16115           /* Consume the `...'. */
16116           cp_lexer_consume_token (parser->lexer);
16117           maybe_warn_variadic_templates ();
16118           
16119           /* Build a pack expansion type */
16120           if (declarator)
16121             declarator->parameter_pack_p = true;
16122           else
16123             decl_specifiers.type = make_pack_expansion (type);
16124         }
16125     }
16126
16127   /* The restriction on defining new types applies only to the type
16128      of the parameter, not to the default argument.  */
16129   parser->type_definition_forbidden_message = saved_message;
16130
16131   /* If the next token is `=', then process a default argument.  */
16132   if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
16133     {
16134       /* Consume the `='.  */
16135       cp_lexer_consume_token (parser->lexer);
16136
16137       /* If we are defining a class, then the tokens that make up the
16138          default argument must be saved and processed later.  */
16139       if (!template_parm_p && at_class_scope_p ()
16140           && TYPE_BEING_DEFINED (current_class_type)
16141           && !LAMBDA_TYPE_P (current_class_type))
16142         {
16143           unsigned depth = 0;
16144           int maybe_template_id = 0;
16145           cp_token *first_token;
16146           cp_token *token;
16147
16148           /* Add tokens until we have processed the entire default
16149              argument.  We add the range [first_token, token).  */
16150           first_token = cp_lexer_peek_token (parser->lexer);
16151           while (true)
16152             {
16153               bool done = false;
16154
16155               /* Peek at the next token.  */
16156               token = cp_lexer_peek_token (parser->lexer);
16157               /* What we do depends on what token we have.  */
16158               switch (token->type)
16159                 {
16160                   /* In valid code, a default argument must be
16161                      immediately followed by a `,' `)', or `...'.  */
16162                 case CPP_COMMA:
16163                   if (depth == 0 && maybe_template_id)
16164                     {
16165                       /* If we've seen a '<', we might be in a
16166                          template-argument-list.  Until Core issue 325 is
16167                          resolved, we don't know how this situation ought
16168                          to be handled, so try to DTRT.  We check whether
16169                          what comes after the comma is a valid parameter
16170                          declaration list.  If it is, then the comma ends
16171                          the default argument; otherwise the default
16172                          argument continues.  */
16173                       bool error = false;
16174                       tree t;
16175
16176                       /* Set ITALP so cp_parser_parameter_declaration_list
16177                          doesn't decide to commit to this parse.  */
16178                       bool saved_italp = parser->in_template_argument_list_p;
16179                       parser->in_template_argument_list_p = true;
16180
16181                       cp_parser_parse_tentatively (parser);
16182                       cp_lexer_consume_token (parser->lexer);
16183                       begin_scope (sk_function_parms, NULL_TREE);
16184                       cp_parser_parameter_declaration_list (parser, &error);
16185                       for (t = current_binding_level->names; t; t = DECL_CHAIN (t))
16186                         pop_binding (DECL_NAME (t), t);
16187                       leave_scope ();
16188                       if (!cp_parser_error_occurred (parser) && !error)
16189                         done = true;
16190                       cp_parser_abort_tentative_parse (parser);
16191
16192                       parser->in_template_argument_list_p = saved_italp;
16193                       break;
16194                     }
16195                 case CPP_CLOSE_PAREN:
16196                 case CPP_ELLIPSIS:
16197                   /* If we run into a non-nested `;', `}', or `]',
16198                      then the code is invalid -- but the default
16199                      argument is certainly over.  */
16200                 case CPP_SEMICOLON:
16201                 case CPP_CLOSE_BRACE:
16202                 case CPP_CLOSE_SQUARE:
16203                   if (depth == 0)
16204                     done = true;
16205                   /* Update DEPTH, if necessary.  */
16206                   else if (token->type == CPP_CLOSE_PAREN
16207                            || token->type == CPP_CLOSE_BRACE
16208                            || token->type == CPP_CLOSE_SQUARE)
16209                     --depth;
16210                   break;
16211
16212                 case CPP_OPEN_PAREN:
16213                 case CPP_OPEN_SQUARE:
16214                 case CPP_OPEN_BRACE:
16215                   ++depth;
16216                   break;
16217
16218                 case CPP_LESS:
16219                   if (depth == 0)
16220                     /* This might be the comparison operator, or it might
16221                        start a template argument list.  */
16222                     ++maybe_template_id;
16223                   break;
16224
16225                 case CPP_RSHIFT:
16226                   if (cxx_dialect == cxx98)
16227                     break;
16228                   /* Fall through for C++0x, which treats the `>>'
16229                      operator like two `>' tokens in certain
16230                      cases.  */
16231
16232                 case CPP_GREATER:
16233                   if (depth == 0)
16234                     {
16235                       /* This might be an operator, or it might close a
16236                          template argument list.  But if a previous '<'
16237                          started a template argument list, this will have
16238                          closed it, so we can't be in one anymore.  */
16239                       maybe_template_id -= 1 + (token->type == CPP_RSHIFT);
16240                       if (maybe_template_id < 0)
16241                         maybe_template_id = 0;
16242                     }
16243                   break;
16244
16245                   /* If we run out of tokens, issue an error message.  */
16246                 case CPP_EOF:
16247                 case CPP_PRAGMA_EOL:
16248                   error_at (token->location, "file ends in default argument");
16249                   done = true;
16250                   break;
16251
16252                 case CPP_NAME:
16253                 case CPP_SCOPE:
16254                   /* In these cases, we should look for template-ids.
16255                      For example, if the default argument is
16256                      `X<int, double>()', we need to do name lookup to
16257                      figure out whether or not `X' is a template; if
16258                      so, the `,' does not end the default argument.
16259
16260                      That is not yet done.  */
16261                   break;
16262
16263                 default:
16264                   break;
16265                 }
16266
16267               /* If we've reached the end, stop.  */
16268               if (done)
16269                 break;
16270
16271               /* Add the token to the token block.  */
16272               token = cp_lexer_consume_token (parser->lexer);
16273             }
16274
16275           /* Create a DEFAULT_ARG to represent the unparsed default
16276              argument.  */
16277           default_argument = make_node (DEFAULT_ARG);
16278           DEFARG_TOKENS (default_argument)
16279             = cp_token_cache_new (first_token, token);
16280           DEFARG_INSTANTIATIONS (default_argument) = NULL;
16281         }
16282       /* Outside of a class definition, we can just parse the
16283          assignment-expression.  */
16284       else
16285         {
16286           token = cp_lexer_peek_token (parser->lexer);
16287           default_argument 
16288             = cp_parser_default_argument (parser, template_parm_p);
16289         }
16290
16291       if (!parser->default_arg_ok_p)
16292         {
16293           if (flag_permissive)
16294             warning (0, "deprecated use of default argument for parameter of non-function");
16295           else
16296             {
16297               error_at (token->location,
16298                         "default arguments are only "
16299                         "permitted for function parameters");
16300               default_argument = NULL_TREE;
16301             }
16302         }
16303       else if ((declarator && declarator->parameter_pack_p)
16304                || (decl_specifiers.type
16305                    && PACK_EXPANSION_P (decl_specifiers.type)))
16306         {
16307           /* Find the name of the parameter pack.  */     
16308           cp_declarator *id_declarator = declarator;
16309           while (id_declarator && id_declarator->kind != cdk_id)
16310             id_declarator = id_declarator->declarator;
16311           
16312           if (id_declarator && id_declarator->kind == cdk_id)
16313             error_at (declarator_token_start->location,
16314                       template_parm_p 
16315                       ? "template parameter pack %qD"
16316                       " cannot have a default argument"
16317                       : "parameter pack %qD cannot have a default argument",
16318                       id_declarator->u.id.unqualified_name);
16319           else
16320             error_at (declarator_token_start->location,
16321                       template_parm_p 
16322                       ? "template parameter pack cannot have a default argument"
16323                       : "parameter pack cannot have a default argument");
16324           
16325           default_argument = NULL_TREE;
16326         }
16327     }
16328   else
16329     default_argument = NULL_TREE;
16330
16331   return make_parameter_declarator (&decl_specifiers,
16332                                     declarator,
16333                                     default_argument);
16334 }
16335
16336 /* Parse a default argument and return it.
16337
16338    TEMPLATE_PARM_P is true if this is a default argument for a
16339    non-type template parameter.  */
16340 static tree
16341 cp_parser_default_argument (cp_parser *parser, bool template_parm_p)
16342 {
16343   tree default_argument = NULL_TREE;
16344   bool saved_greater_than_is_operator_p;
16345   bool saved_local_variables_forbidden_p;
16346
16347   /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
16348      set correctly.  */
16349   saved_greater_than_is_operator_p = parser->greater_than_is_operator_p;
16350   parser->greater_than_is_operator_p = !template_parm_p;
16351   /* Local variable names (and the `this' keyword) may not
16352      appear in a default argument.  */
16353   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
16354   parser->local_variables_forbidden_p = true;
16355   /* Parse the assignment-expression.  */
16356   if (template_parm_p)
16357     push_deferring_access_checks (dk_no_deferred);
16358   default_argument
16359     = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
16360   if (template_parm_p)
16361     pop_deferring_access_checks ();
16362   parser->greater_than_is_operator_p = saved_greater_than_is_operator_p;
16363   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
16364
16365   return default_argument;
16366 }
16367
16368 /* Parse a function-body.
16369
16370    function-body:
16371      compound_statement  */
16372
16373 static void
16374 cp_parser_function_body (cp_parser *parser)
16375 {
16376   cp_parser_compound_statement (parser, NULL, false, true);
16377 }
16378
16379 /* Parse a ctor-initializer-opt followed by a function-body.  Return
16380    true if a ctor-initializer was present.  */
16381
16382 static bool
16383 cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
16384 {
16385   tree body, list;
16386   bool ctor_initializer_p;
16387   const bool check_body_p =
16388      DECL_CONSTRUCTOR_P (current_function_decl)
16389      && DECL_DECLARED_CONSTEXPR_P (current_function_decl);
16390   tree last = NULL;
16391
16392   /* Begin the function body.  */
16393   body = begin_function_body ();
16394   /* Parse the optional ctor-initializer.  */
16395   ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
16396
16397   /* If we're parsing a constexpr constructor definition, we need
16398      to check that the constructor body is indeed empty.  However,
16399      before we get to cp_parser_function_body lot of junk has been
16400      generated, so we can't just check that we have an empty block.
16401      Rather we take a snapshot of the outermost block, and check whether
16402      cp_parser_function_body changed its state.  */
16403   if (check_body_p)
16404     {
16405       list = body;
16406       if (TREE_CODE (list) == BIND_EXPR)
16407         list = BIND_EXPR_BODY (list);
16408       if (TREE_CODE (list) == STATEMENT_LIST
16409           && STATEMENT_LIST_TAIL (list) != NULL)
16410         last = STATEMENT_LIST_TAIL (list)->stmt;
16411     }
16412   /* Parse the function-body.  */
16413   cp_parser_function_body (parser);
16414   if (check_body_p)
16415     check_constexpr_ctor_body (last, list);
16416   /* Finish the function body.  */
16417   finish_function_body (body);
16418
16419   return ctor_initializer_p;
16420 }
16421
16422 /* Parse an initializer.
16423
16424    initializer:
16425      = initializer-clause
16426      ( expression-list )
16427
16428    Returns an expression representing the initializer.  If no
16429    initializer is present, NULL_TREE is returned.
16430
16431    *IS_DIRECT_INIT is set to FALSE if the `= initializer-clause'
16432    production is used, and TRUE otherwise.  *IS_DIRECT_INIT is
16433    set to TRUE if there is no initializer present.  If there is an
16434    initializer, and it is not a constant-expression, *NON_CONSTANT_P
16435    is set to true; otherwise it is set to false.  */
16436
16437 static tree
16438 cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
16439                        bool* non_constant_p)
16440 {
16441   cp_token *token;
16442   tree init;
16443
16444   /* Peek at the next token.  */
16445   token = cp_lexer_peek_token (parser->lexer);
16446
16447   /* Let our caller know whether or not this initializer was
16448      parenthesized.  */
16449   *is_direct_init = (token->type != CPP_EQ);
16450   /* Assume that the initializer is constant.  */
16451   *non_constant_p = false;
16452
16453   if (token->type == CPP_EQ)
16454     {
16455       /* Consume the `='.  */
16456       cp_lexer_consume_token (parser->lexer);
16457       /* Parse the initializer-clause.  */
16458       init = cp_parser_initializer_clause (parser, non_constant_p);
16459     }
16460   else if (token->type == CPP_OPEN_PAREN)
16461     {
16462       VEC(tree,gc) *vec;
16463       vec = cp_parser_parenthesized_expression_list (parser, non_attr,
16464                                                      /*cast_p=*/false,
16465                                                      /*allow_expansion_p=*/true,
16466                                                      non_constant_p);
16467       if (vec == NULL)
16468         return error_mark_node;
16469       init = build_tree_list_vec (vec);
16470       release_tree_vector (vec);
16471     }
16472   else if (token->type == CPP_OPEN_BRACE)
16473     {
16474       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
16475       init = cp_parser_braced_list (parser, non_constant_p);
16476       CONSTRUCTOR_IS_DIRECT_INIT (init) = 1;
16477     }
16478   else
16479     {
16480       /* Anything else is an error.  */
16481       cp_parser_error (parser, "expected initializer");
16482       init = error_mark_node;
16483     }
16484
16485   return init;
16486 }
16487
16488 /* Parse an initializer-clause.
16489
16490    initializer-clause:
16491      assignment-expression
16492      braced-init-list
16493
16494    Returns an expression representing the initializer.
16495
16496    If the `assignment-expression' production is used the value
16497    returned is simply a representation for the expression.
16498
16499    Otherwise, calls cp_parser_braced_list.  */
16500
16501 static tree
16502 cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
16503 {
16504   tree initializer;
16505
16506   /* Assume the expression is constant.  */
16507   *non_constant_p = false;
16508
16509   /* If it is not a `{', then we are looking at an
16510      assignment-expression.  */
16511   if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
16512     {
16513       initializer
16514         = cp_parser_constant_expression (parser,
16515                                         /*allow_non_constant_p=*/true,
16516                                         non_constant_p);
16517       if (!*non_constant_p)
16518         {
16519           /* We only want to fold if this is really a constant
16520              expression.  FIXME Actually, we don't want to fold here, but in
16521              cp_finish_decl.  */
16522           tree folded = fold_non_dependent_expr (initializer);
16523           folded = maybe_constant_value (folded);
16524           if (TREE_CONSTANT (folded))
16525             initializer = folded;
16526         }
16527     }
16528   else
16529     initializer = cp_parser_braced_list (parser, non_constant_p);
16530
16531   return initializer;
16532 }
16533
16534 /* Parse a brace-enclosed initializer list.
16535
16536    braced-init-list:
16537      { initializer-list , [opt] }
16538      { }
16539
16540    Returns a CONSTRUCTOR.  The CONSTRUCTOR_ELTS will be
16541    the elements of the initializer-list (or NULL, if the last
16542    production is used).  The TREE_TYPE for the CONSTRUCTOR will be
16543    NULL_TREE.  There is no way to detect whether or not the optional
16544    trailing `,' was provided.  NON_CONSTANT_P is as for
16545    cp_parser_initializer.  */     
16546
16547 static tree
16548 cp_parser_braced_list (cp_parser* parser, bool* non_constant_p)
16549 {
16550   tree initializer;
16551
16552   /* Consume the `{' token.  */
16553   cp_lexer_consume_token (parser->lexer);
16554   /* Create a CONSTRUCTOR to represent the braced-initializer.  */
16555   initializer = make_node (CONSTRUCTOR);
16556   /* If it's not a `}', then there is a non-trivial initializer.  */
16557   if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
16558     {
16559       /* Parse the initializer list.  */
16560       CONSTRUCTOR_ELTS (initializer)
16561         = cp_parser_initializer_list (parser, non_constant_p);
16562       /* A trailing `,' token is allowed.  */
16563       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
16564         cp_lexer_consume_token (parser->lexer);
16565     }
16566   /* Now, there should be a trailing `}'.  */
16567   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
16568   TREE_TYPE (initializer) = init_list_type_node;
16569   return initializer;
16570 }
16571
16572 /* Parse an initializer-list.
16573
16574    initializer-list:
16575      initializer-clause ... [opt]
16576      initializer-list , initializer-clause ... [opt]
16577
16578    GNU Extension:
16579
16580    initializer-list:
16581      identifier : initializer-clause
16582      initializer-list, identifier : initializer-clause
16583
16584    Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
16585    for the initializer.  If the INDEX of the elt is non-NULL, it is the
16586    IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
16587    as for cp_parser_initializer.  */
16588
16589 static VEC(constructor_elt,gc) *
16590 cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
16591 {
16592   VEC(constructor_elt,gc) *v = NULL;
16593
16594   /* Assume all of the expressions are constant.  */
16595   *non_constant_p = false;
16596
16597   /* Parse the rest of the list.  */
16598   while (true)
16599     {
16600       cp_token *token;
16601       tree identifier;
16602       tree initializer;
16603       bool clause_non_constant_p;
16604
16605       /* If the next token is an identifier and the following one is a
16606          colon, we are looking at the GNU designated-initializer
16607          syntax.  */
16608       if (cp_parser_allow_gnu_extensions_p (parser)
16609           && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
16610           && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
16611         {
16612           /* Warn the user that they are using an extension.  */
16613           pedwarn (input_location, OPT_pedantic, 
16614                    "ISO C++ does not allow designated initializers");
16615           /* Consume the identifier.  */
16616           identifier = cp_lexer_consume_token (parser->lexer)->u.value;
16617           /* Consume the `:'.  */
16618           cp_lexer_consume_token (parser->lexer);
16619         }
16620       else
16621         identifier = NULL_TREE;
16622
16623       /* Parse the initializer.  */
16624       initializer = cp_parser_initializer_clause (parser,
16625                                                   &clause_non_constant_p);
16626       /* If any clause is non-constant, so is the entire initializer.  */
16627       if (clause_non_constant_p)
16628         *non_constant_p = true;
16629
16630       /* If we have an ellipsis, this is an initializer pack
16631          expansion.  */
16632       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
16633         {
16634           /* Consume the `...'.  */
16635           cp_lexer_consume_token (parser->lexer);
16636
16637           /* Turn the initializer into an initializer expansion.  */
16638           initializer = make_pack_expansion (initializer);
16639         }
16640
16641       /* Add it to the vector.  */
16642       CONSTRUCTOR_APPEND_ELT(v, identifier, initializer);
16643
16644       /* If the next token is not a comma, we have reached the end of
16645          the list.  */
16646       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
16647         break;
16648
16649       /* Peek at the next token.  */
16650       token = cp_lexer_peek_nth_token (parser->lexer, 2);
16651       /* If the next token is a `}', then we're still done.  An
16652          initializer-clause can have a trailing `,' after the
16653          initializer-list and before the closing `}'.  */
16654       if (token->type == CPP_CLOSE_BRACE)
16655         break;
16656
16657       /* Consume the `,' token.  */
16658       cp_lexer_consume_token (parser->lexer);
16659     }
16660
16661   return v;
16662 }
16663
16664 /* Classes [gram.class] */
16665
16666 /* Parse a class-name.
16667
16668    class-name:
16669      identifier
16670      template-id
16671
16672    TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
16673    to indicate that names looked up in dependent types should be
16674    assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
16675    keyword has been used to indicate that the name that appears next
16676    is a template.  TAG_TYPE indicates the explicit tag given before
16677    the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
16678    looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
16679    is the class being defined in a class-head.
16680
16681    Returns the TYPE_DECL representing the class.  */
16682
16683 static tree
16684 cp_parser_class_name (cp_parser *parser,
16685                       bool typename_keyword_p,
16686                       bool template_keyword_p,
16687                       enum tag_types tag_type,
16688                       bool check_dependency_p,
16689                       bool class_head_p,
16690                       bool is_declaration)
16691 {
16692   tree decl;
16693   tree scope;
16694   bool typename_p;
16695   cp_token *token;
16696   tree identifier = NULL_TREE;
16697
16698   /* All class-names start with an identifier.  */
16699   token = cp_lexer_peek_token (parser->lexer);
16700   if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
16701     {
16702       cp_parser_error (parser, "expected class-name");
16703       return error_mark_node;
16704     }
16705
16706   /* PARSER->SCOPE can be cleared when parsing the template-arguments
16707      to a template-id, so we save it here.  */
16708   scope = parser->scope;
16709   if (scope == error_mark_node)
16710     return error_mark_node;
16711
16712   /* Any name names a type if we're following the `typename' keyword
16713      in a qualified name where the enclosing scope is type-dependent.  */
16714   typename_p = (typename_keyword_p && scope && TYPE_P (scope)
16715                 && dependent_type_p (scope));
16716   /* Handle the common case (an identifier, but not a template-id)
16717      efficiently.  */
16718   if (token->type == CPP_NAME
16719       && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
16720     {
16721       cp_token *identifier_token;
16722       bool ambiguous_p;
16723
16724       /* Look for the identifier.  */
16725       identifier_token = cp_lexer_peek_token (parser->lexer);
16726       ambiguous_p = identifier_token->ambiguous_p;
16727       identifier = cp_parser_identifier (parser);
16728       /* If the next token isn't an identifier, we are certainly not
16729          looking at a class-name.  */
16730       if (identifier == error_mark_node)
16731         decl = error_mark_node;
16732       /* If we know this is a type-name, there's no need to look it
16733          up.  */
16734       else if (typename_p)
16735         decl = identifier;
16736       else
16737         {
16738           tree ambiguous_decls;
16739           /* If we already know that this lookup is ambiguous, then
16740              we've already issued an error message; there's no reason
16741              to check again.  */
16742           if (ambiguous_p)
16743             {
16744               cp_parser_simulate_error (parser);
16745               return error_mark_node;
16746             }
16747           /* If the next token is a `::', then the name must be a type
16748              name.
16749
16750              [basic.lookup.qual]
16751
16752              During the lookup for a name preceding the :: scope
16753              resolution operator, object, function, and enumerator
16754              names are ignored.  */
16755           if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
16756             tag_type = typename_type;
16757           /* Look up the name.  */
16758           decl = cp_parser_lookup_name (parser, identifier,
16759                                         tag_type,
16760                                         /*is_template=*/false,
16761                                         /*is_namespace=*/false,
16762                                         check_dependency_p,
16763                                         &ambiguous_decls,
16764                                         identifier_token->location);
16765           if (ambiguous_decls)
16766             {
16767               if (cp_parser_parsing_tentatively (parser))
16768                 cp_parser_simulate_error (parser);
16769               return error_mark_node;
16770             }
16771         }
16772     }
16773   else
16774     {
16775       /* Try a template-id.  */
16776       decl = cp_parser_template_id (parser, template_keyword_p,
16777                                     check_dependency_p,
16778                                     is_declaration);
16779       if (decl == error_mark_node)
16780         return error_mark_node;
16781     }
16782
16783   decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
16784
16785   /* If this is a typename, create a TYPENAME_TYPE.  */
16786   if (typename_p && decl != error_mark_node)
16787     {
16788       decl = make_typename_type (scope, decl, typename_type,
16789                                  /*complain=*/tf_error);
16790       if (decl != error_mark_node)
16791         decl = TYPE_NAME (decl);
16792     }
16793
16794   /* Check to see that it is really the name of a class.  */
16795   if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
16796       && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
16797       && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
16798     /* Situations like this:
16799
16800          template <typename T> struct A {
16801            typename T::template X<int>::I i;
16802          };
16803
16804        are problematic.  Is `T::template X<int>' a class-name?  The
16805        standard does not seem to be definitive, but there is no other
16806        valid interpretation of the following `::'.  Therefore, those
16807        names are considered class-names.  */
16808     {
16809       decl = make_typename_type (scope, decl, tag_type, tf_error);
16810       if (decl != error_mark_node)
16811         decl = TYPE_NAME (decl);
16812     }
16813   else if (TREE_CODE (decl) != TYPE_DECL
16814            || TREE_TYPE (decl) == error_mark_node
16815            || !MAYBE_CLASS_TYPE_P (TREE_TYPE (decl))
16816            /* In Objective-C 2.0, a classname followed by '.' starts a
16817               dot-syntax expression, and it's not a type-name.  */
16818            || (c_dialect_objc ()
16819                && cp_lexer_peek_token (parser->lexer)->type == CPP_DOT 
16820                && objc_is_class_name (decl)))
16821     decl = error_mark_node;
16822
16823   if (decl == error_mark_node)
16824     cp_parser_error (parser, "expected class-name");
16825   else if (identifier && !parser->scope)
16826     maybe_note_name_used_in_class (identifier, decl);
16827
16828   return decl;
16829 }
16830
16831 /* Parse a class-specifier.
16832
16833    class-specifier:
16834      class-head { member-specification [opt] }
16835
16836    Returns the TREE_TYPE representing the class.  */
16837
16838 static tree
16839 cp_parser_class_specifier_1 (cp_parser* parser)
16840 {
16841   tree type;
16842   tree attributes = NULL_TREE;
16843   bool nested_name_specifier_p;
16844   unsigned saved_num_template_parameter_lists;
16845   bool saved_in_function_body;
16846   bool saved_in_unbraced_linkage_specification_p;
16847   tree old_scope = NULL_TREE;
16848   tree scope = NULL_TREE;
16849   tree bases;
16850   cp_token *closing_brace;
16851
16852   push_deferring_access_checks (dk_no_deferred);
16853
16854   /* Parse the class-head.  */
16855   type = cp_parser_class_head (parser,
16856                                &nested_name_specifier_p,
16857                                &attributes,
16858                                &bases);
16859   /* If the class-head was a semantic disaster, skip the entire body
16860      of the class.  */
16861   if (!type)
16862     {
16863       cp_parser_skip_to_end_of_block_or_statement (parser);
16864       pop_deferring_access_checks ();
16865       return error_mark_node;
16866     }
16867
16868   /* Look for the `{'.  */
16869   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
16870     {
16871       pop_deferring_access_checks ();
16872       return error_mark_node;
16873     }
16874
16875   /* Process the base classes. If they're invalid, skip the 
16876      entire class body.  */
16877   if (!xref_basetypes (type, bases))
16878     {
16879       /* Consuming the closing brace yields better error messages
16880          later on.  */
16881       if (cp_parser_skip_to_closing_brace (parser))
16882         cp_lexer_consume_token (parser->lexer);
16883       pop_deferring_access_checks ();
16884       return error_mark_node;
16885     }
16886
16887   /* Issue an error message if type-definitions are forbidden here.  */
16888   cp_parser_check_type_definition (parser);
16889   /* Remember that we are defining one more class.  */
16890   ++parser->num_classes_being_defined;
16891   /* Inside the class, surrounding template-parameter-lists do not
16892      apply.  */
16893   saved_num_template_parameter_lists
16894     = parser->num_template_parameter_lists;
16895   parser->num_template_parameter_lists = 0;
16896   /* We are not in a function body.  */
16897   saved_in_function_body = parser->in_function_body;
16898   parser->in_function_body = false;
16899   /* We are not immediately inside an extern "lang" block.  */
16900   saved_in_unbraced_linkage_specification_p
16901     = parser->in_unbraced_linkage_specification_p;
16902   parser->in_unbraced_linkage_specification_p = false;
16903
16904   /* Start the class.  */
16905   if (nested_name_specifier_p)
16906     {
16907       scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
16908       old_scope = push_inner_scope (scope);
16909     }
16910   type = begin_class_definition (type, attributes);
16911
16912   if (type == error_mark_node)
16913     /* If the type is erroneous, skip the entire body of the class.  */
16914     cp_parser_skip_to_closing_brace (parser);
16915   else
16916     /* Parse the member-specification.  */
16917     cp_parser_member_specification_opt (parser);
16918
16919   /* Look for the trailing `}'.  */
16920   closing_brace = cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
16921   /* Look for trailing attributes to apply to this class.  */
16922   if (cp_parser_allow_gnu_extensions_p (parser))
16923     attributes = cp_parser_attributes_opt (parser);
16924   if (type != error_mark_node)
16925     type = finish_struct (type, attributes);
16926   if (nested_name_specifier_p)
16927     pop_inner_scope (old_scope, scope);
16928
16929   /* We've finished a type definition.  Check for the common syntax
16930      error of forgetting a semicolon after the definition.  We need to
16931      be careful, as we can't just check for not-a-semicolon and be done
16932      with it; the user might have typed:
16933
16934      class X { } c = ...;
16935      class X { } *p = ...;
16936
16937      and so forth.  Instead, enumerate all the possible tokens that
16938      might follow this production; if we don't see one of them, then
16939      complain and silently insert the semicolon.  */
16940   {
16941     cp_token *token = cp_lexer_peek_token (parser->lexer);
16942     bool want_semicolon = true;
16943
16944     switch (token->type)
16945       {
16946       case CPP_NAME:
16947       case CPP_SEMICOLON:
16948       case CPP_MULT:
16949       case CPP_AND:
16950       case CPP_OPEN_PAREN:
16951       case CPP_CLOSE_PAREN:
16952       case CPP_COMMA:
16953         want_semicolon = false;
16954         break;
16955
16956         /* While it's legal for type qualifiers and storage class
16957            specifiers to follow type definitions in the grammar, only
16958            compiler testsuites contain code like that.  Assume that if
16959            we see such code, then what we're really seeing is a case
16960            like:
16961
16962            class X { }
16963            const <type> var = ...;
16964
16965            or
16966
16967            class Y { }
16968            static <type> func (...) ...
16969
16970            i.e. the qualifier or specifier applies to the next
16971            declaration.  To do so, however, we need to look ahead one
16972            more token to see if *that* token is a type specifier.
16973
16974            This code could be improved to handle:
16975
16976            class Z { }
16977            static const <type> var = ...;  */
16978       case CPP_KEYWORD:
16979         if (keyword_is_decl_specifier (token->keyword))
16980           {
16981             cp_token *lookahead = cp_lexer_peek_nth_token (parser->lexer, 2);
16982
16983             /* Handling user-defined types here would be nice, but very
16984                tricky.  */
16985             want_semicolon
16986               = (lookahead->type == CPP_KEYWORD
16987                  && keyword_begins_type_specifier (lookahead->keyword));
16988           }
16989         break;
16990       default:
16991         break;
16992       }
16993
16994     /* If we don't have a type, then something is very wrong and we
16995        shouldn't try to do anything clever.  Likewise for not seeing the
16996        closing brace.  */
16997     if (closing_brace && TYPE_P (type) && want_semicolon)
16998       {
16999         cp_token_position prev
17000           = cp_lexer_previous_token_position (parser->lexer);
17001         cp_token *prev_token = cp_lexer_token_at (parser->lexer, prev);
17002         location_t loc = prev_token->location;
17003
17004         if (CLASSTYPE_DECLARED_CLASS (type))
17005           error_at (loc, "expected %<;%> after class definition");
17006         else if (TREE_CODE (type) == RECORD_TYPE)
17007           error_at (loc, "expected %<;%> after struct definition");
17008         else if (TREE_CODE (type) == UNION_TYPE)
17009           error_at (loc, "expected %<;%> after union definition");
17010         else
17011           gcc_unreachable ();
17012
17013         /* Unget one token and smash it to look as though we encountered
17014            a semicolon in the input stream.  */
17015         cp_lexer_set_token_position (parser->lexer, prev);
17016         token = cp_lexer_peek_token (parser->lexer);
17017         token->type = CPP_SEMICOLON;
17018         token->keyword = RID_MAX;
17019       }
17020   }
17021
17022   /* If this class is not itself within the scope of another class,
17023      then we need to parse the bodies of all of the queued function
17024      definitions.  Note that the queued functions defined in a class
17025      are not always processed immediately following the
17026      class-specifier for that class.  Consider:
17027
17028        struct A {
17029          struct B { void f() { sizeof (A); } };
17030        };
17031
17032      If `f' were processed before the processing of `A' were
17033      completed, there would be no way to compute the size of `A'.
17034      Note that the nesting we are interested in here is lexical --
17035      not the semantic nesting given by TYPE_CONTEXT.  In particular,
17036      for:
17037
17038        struct A { struct B; };
17039        struct A::B { void f() { } };
17040
17041      there is no need to delay the parsing of `A::B::f'.  */
17042   if (--parser->num_classes_being_defined == 0)
17043     {
17044       tree fn;
17045       tree class_type = NULL_TREE;
17046       tree pushed_scope = NULL_TREE;
17047       unsigned ix;
17048       cp_default_arg_entry *e;
17049
17050       /* In a first pass, parse default arguments to the functions.
17051          Then, in a second pass, parse the bodies of the functions.
17052          This two-phased approach handles cases like:
17053
17054             struct S {
17055               void f() { g(); }
17056               void g(int i = 3);
17057             };
17058
17059          */
17060       FOR_EACH_VEC_ELT (cp_default_arg_entry, unparsed_funs_with_default_args,
17061                         ix, e)
17062         {
17063           fn = e->decl;
17064           /* If there are default arguments that have not yet been processed,
17065              take care of them now.  */
17066           if (class_type != e->class_type)
17067             {
17068               if (pushed_scope)
17069                 pop_scope (pushed_scope);
17070               class_type = e->class_type;
17071               pushed_scope = push_scope (class_type);
17072             }
17073           /* Make sure that any template parameters are in scope.  */
17074           maybe_begin_member_template_processing (fn);
17075           /* Parse the default argument expressions.  */
17076           cp_parser_late_parsing_default_args (parser, fn);
17077           /* Remove any template parameters from the symbol table.  */
17078           maybe_end_member_template_processing ();
17079         }
17080       if (pushed_scope)
17081         pop_scope (pushed_scope);
17082       VEC_truncate (cp_default_arg_entry, unparsed_funs_with_default_args, 0);
17083       /* Now parse the body of the functions.  */
17084       FOR_EACH_VEC_ELT (tree, unparsed_funs_with_definitions, ix, fn)
17085         cp_parser_late_parsing_for_member (parser, fn);
17086       VEC_truncate (tree, unparsed_funs_with_definitions, 0);
17087     }
17088
17089   /* Put back any saved access checks.  */
17090   pop_deferring_access_checks ();
17091
17092   /* Restore saved state.  */
17093   parser->in_function_body = saved_in_function_body;
17094   parser->num_template_parameter_lists
17095     = saved_num_template_parameter_lists;
17096   parser->in_unbraced_linkage_specification_p
17097     = saved_in_unbraced_linkage_specification_p;
17098
17099   return type;
17100 }
17101
17102 static tree
17103 cp_parser_class_specifier (cp_parser* parser)
17104 {
17105   tree ret;
17106   timevar_push (TV_PARSE_STRUCT);
17107   ret = cp_parser_class_specifier_1 (parser);
17108   timevar_pop (TV_PARSE_STRUCT);
17109   return ret;
17110 }
17111
17112 /* Parse a class-head.
17113
17114    class-head:
17115      class-key identifier [opt] base-clause [opt]
17116      class-key nested-name-specifier identifier class-virt-specifier [opt] base-clause [opt]
17117      class-key nested-name-specifier [opt] template-id
17118        base-clause [opt]
17119
17120    class-virt-specifier:
17121      final
17122
17123    GNU Extensions:
17124      class-key attributes identifier [opt] base-clause [opt]
17125      class-key attributes nested-name-specifier identifier base-clause [opt]
17126      class-key attributes nested-name-specifier [opt] template-id
17127        base-clause [opt]
17128
17129    Upon return BASES is initialized to the list of base classes (or
17130    NULL, if there are none) in the same form returned by
17131    cp_parser_base_clause.
17132
17133    Returns the TYPE of the indicated class.  Sets
17134    *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
17135    involving a nested-name-specifier was used, and FALSE otherwise.
17136
17137    Returns error_mark_node if this is not a class-head.
17138
17139    Returns NULL_TREE if the class-head is syntactically valid, but
17140    semantically invalid in a way that means we should skip the entire
17141    body of the class.  */
17142
17143 static tree
17144 cp_parser_class_head (cp_parser* parser,
17145                       bool* nested_name_specifier_p,
17146                       tree *attributes_p,
17147                       tree *bases)
17148 {
17149   tree nested_name_specifier;
17150   enum tag_types class_key;
17151   tree id = NULL_TREE;
17152   tree type = NULL_TREE;
17153   tree attributes;
17154   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
17155   bool template_id_p = false;
17156   bool qualified_p = false;
17157   bool invalid_nested_name_p = false;
17158   bool invalid_explicit_specialization_p = false;
17159   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
17160   tree pushed_scope = NULL_TREE;
17161   unsigned num_templates;
17162   cp_token *type_start_token = NULL, *nested_name_specifier_token_start = NULL;
17163   /* Assume no nested-name-specifier will be present.  */
17164   *nested_name_specifier_p = false;
17165   /* Assume no template parameter lists will be used in defining the
17166      type.  */
17167   num_templates = 0;
17168   parser->colon_corrects_to_scope_p = false;
17169
17170   *bases = NULL_TREE;
17171
17172   /* Look for the class-key.  */
17173   class_key = cp_parser_class_key (parser);
17174   if (class_key == none_type)
17175     return error_mark_node;
17176
17177   /* Parse the attributes.  */
17178   attributes = cp_parser_attributes_opt (parser);
17179
17180   /* If the next token is `::', that is invalid -- but sometimes
17181      people do try to write:
17182
17183        struct ::S {};
17184
17185      Handle this gracefully by accepting the extra qualifier, and then
17186      issuing an error about it later if this really is a
17187      class-head.  If it turns out just to be an elaborated type
17188      specifier, remain silent.  */
17189   if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
17190     qualified_p = true;
17191
17192   push_deferring_access_checks (dk_no_check);
17193
17194   /* Determine the name of the class.  Begin by looking for an
17195      optional nested-name-specifier.  */
17196   nested_name_specifier_token_start = cp_lexer_peek_token (parser->lexer);
17197   nested_name_specifier
17198     = cp_parser_nested_name_specifier_opt (parser,
17199                                            /*typename_keyword_p=*/false,
17200                                            /*check_dependency_p=*/false,
17201                                            /*type_p=*/false,
17202                                            /*is_declaration=*/false);
17203   /* If there was a nested-name-specifier, then there *must* be an
17204      identifier.  */
17205   if (nested_name_specifier)
17206     {
17207       type_start_token = cp_lexer_peek_token (parser->lexer);
17208       /* Although the grammar says `identifier', it really means
17209          `class-name' or `template-name'.  You are only allowed to
17210          define a class that has already been declared with this
17211          syntax.
17212
17213          The proposed resolution for Core Issue 180 says that wherever
17214          you see `class T::X' you should treat `X' as a type-name.
17215
17216          It is OK to define an inaccessible class; for example:
17217
17218            class A { class B; };
17219            class A::B {};
17220
17221          We do not know if we will see a class-name, or a
17222          template-name.  We look for a class-name first, in case the
17223          class-name is a template-id; if we looked for the
17224          template-name first we would stop after the template-name.  */
17225       cp_parser_parse_tentatively (parser);
17226       type = cp_parser_class_name (parser,
17227                                    /*typename_keyword_p=*/false,
17228                                    /*template_keyword_p=*/false,
17229                                    class_type,
17230                                    /*check_dependency_p=*/false,
17231                                    /*class_head_p=*/true,
17232                                    /*is_declaration=*/false);
17233       /* If that didn't work, ignore the nested-name-specifier.  */
17234       if (!cp_parser_parse_definitely (parser))
17235         {
17236           invalid_nested_name_p = true;
17237           type_start_token = cp_lexer_peek_token (parser->lexer);
17238           id = cp_parser_identifier (parser);
17239           if (id == error_mark_node)
17240             id = NULL_TREE;
17241         }
17242       /* If we could not find a corresponding TYPE, treat this
17243          declaration like an unqualified declaration.  */
17244       if (type == error_mark_node)
17245         nested_name_specifier = NULL_TREE;
17246       /* Otherwise, count the number of templates used in TYPE and its
17247          containing scopes.  */
17248       else
17249         {
17250           tree scope;
17251
17252           for (scope = TREE_TYPE (type);
17253                scope && TREE_CODE (scope) != NAMESPACE_DECL;
17254                scope = (TYPE_P (scope)
17255                         ? TYPE_CONTEXT (scope)
17256                         : DECL_CONTEXT (scope)))
17257             if (TYPE_P (scope)
17258                 && CLASS_TYPE_P (scope)
17259                 && CLASSTYPE_TEMPLATE_INFO (scope)
17260                 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
17261                 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
17262               ++num_templates;
17263         }
17264     }
17265   /* Otherwise, the identifier is optional.  */
17266   else
17267     {
17268       /* We don't know whether what comes next is a template-id,
17269          an identifier, or nothing at all.  */
17270       cp_parser_parse_tentatively (parser);
17271       /* Check for a template-id.  */
17272       type_start_token = cp_lexer_peek_token (parser->lexer);
17273       id = cp_parser_template_id (parser,
17274                                   /*template_keyword_p=*/false,
17275                                   /*check_dependency_p=*/true,
17276                                   /*is_declaration=*/true);
17277       /* If that didn't work, it could still be an identifier.  */
17278       if (!cp_parser_parse_definitely (parser))
17279         {
17280           if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
17281             {
17282               type_start_token = cp_lexer_peek_token (parser->lexer);
17283               id = cp_parser_identifier (parser);
17284             }
17285           else
17286             id = NULL_TREE;
17287         }
17288       else
17289         {
17290           template_id_p = true;
17291           ++num_templates;
17292         }
17293     }
17294
17295   pop_deferring_access_checks ();
17296
17297   if (id)
17298     {
17299       cp_parser_check_for_invalid_template_id (parser, id,
17300                                                type_start_token->location);
17301       virt_specifiers = cp_parser_virt_specifier_seq_opt (parser);
17302     }
17303
17304   /* If it's not a `:' or a `{' then we can't really be looking at a
17305      class-head, since a class-head only appears as part of a
17306      class-specifier.  We have to detect this situation before calling
17307      xref_tag, since that has irreversible side-effects.  */
17308   if (!cp_parser_next_token_starts_class_definition_p (parser))
17309     {
17310       cp_parser_error (parser, "expected %<{%> or %<:%>");
17311       type = error_mark_node;
17312       goto out;
17313     }
17314
17315   /* At this point, we're going ahead with the class-specifier, even
17316      if some other problem occurs.  */
17317   cp_parser_commit_to_tentative_parse (parser);
17318   if (virt_specifiers & VIRT_SPEC_OVERRIDE)
17319     {
17320       cp_parser_error (parser,
17321                        "cannot specify %<override%> for a class");
17322       type = error_mark_node;
17323       goto out;
17324     }
17325   /* Issue the error about the overly-qualified name now.  */
17326   if (qualified_p)
17327     {
17328       cp_parser_error (parser,
17329                        "global qualification of class name is invalid");
17330       type = error_mark_node;
17331       goto out;
17332     }
17333   else if (invalid_nested_name_p)
17334     {
17335       cp_parser_error (parser,
17336                        "qualified name does not name a class");
17337       type = error_mark_node;
17338       goto out;
17339     }
17340   else if (nested_name_specifier)
17341     {
17342       tree scope;
17343
17344       /* Reject typedef-names in class heads.  */
17345       if (!DECL_IMPLICIT_TYPEDEF_P (type))
17346         {
17347           error_at (type_start_token->location,
17348                     "invalid class name in declaration of %qD",
17349                     type);
17350           type = NULL_TREE;
17351           goto done;
17352         }
17353
17354       /* Figure out in what scope the declaration is being placed.  */
17355       scope = current_scope ();
17356       /* If that scope does not contain the scope in which the
17357          class was originally declared, the program is invalid.  */
17358       if (scope && !is_ancestor (scope, nested_name_specifier))
17359         {
17360           if (at_namespace_scope_p ())
17361             error_at (type_start_token->location,
17362                       "declaration of %qD in namespace %qD which does not "
17363                       "enclose %qD",
17364                       type, scope, nested_name_specifier);
17365           else
17366             error_at (type_start_token->location,
17367                       "declaration of %qD in %qD which does not enclose %qD",
17368                       type, scope, nested_name_specifier);
17369           type = NULL_TREE;
17370           goto done;
17371         }
17372       /* [dcl.meaning]
17373
17374          A declarator-id shall not be qualified except for the
17375          definition of a ... nested class outside of its class
17376          ... [or] the definition or explicit instantiation of a
17377          class member of a namespace outside of its namespace.  */
17378       if (scope == nested_name_specifier)
17379         {
17380           permerror (nested_name_specifier_token_start->location,
17381                      "extra qualification not allowed");
17382           nested_name_specifier = NULL_TREE;
17383           num_templates = 0;
17384         }
17385     }
17386   /* An explicit-specialization must be preceded by "template <>".  If
17387      it is not, try to recover gracefully.  */
17388   if (at_namespace_scope_p ()
17389       && parser->num_template_parameter_lists == 0
17390       && template_id_p)
17391     {
17392       error_at (type_start_token->location,
17393                 "an explicit specialization must be preceded by %<template <>%>");
17394       invalid_explicit_specialization_p = true;
17395       /* Take the same action that would have been taken by
17396          cp_parser_explicit_specialization.  */
17397       ++parser->num_template_parameter_lists;
17398       begin_specialization ();
17399     }
17400   /* There must be no "return" statements between this point and the
17401      end of this function; set "type "to the correct return value and
17402      use "goto done;" to return.  */
17403   /* Make sure that the right number of template parameters were
17404      present.  */
17405   if (!cp_parser_check_template_parameters (parser, num_templates,
17406                                             type_start_token->location,
17407                                             /*declarator=*/NULL))
17408     {
17409       /* If something went wrong, there is no point in even trying to
17410          process the class-definition.  */
17411       type = NULL_TREE;
17412       goto done;
17413     }
17414
17415   /* Look up the type.  */
17416   if (template_id_p)
17417     {
17418       if (TREE_CODE (id) == TEMPLATE_ID_EXPR
17419           && (DECL_FUNCTION_TEMPLATE_P (TREE_OPERAND (id, 0))
17420               || TREE_CODE (TREE_OPERAND (id, 0)) == OVERLOAD))
17421         {
17422           error_at (type_start_token->location,
17423                     "function template %qD redeclared as a class template", id);
17424           type = error_mark_node;
17425         }
17426       else
17427         {
17428           type = TREE_TYPE (id);
17429           type = maybe_process_partial_specialization (type);
17430         }
17431       if (nested_name_specifier)
17432         pushed_scope = push_scope (nested_name_specifier);
17433     }
17434   else if (nested_name_specifier)
17435     {
17436       tree class_type;
17437
17438       /* Given:
17439
17440             template <typename T> struct S { struct T };
17441             template <typename T> struct S<T>::T { };
17442
17443          we will get a TYPENAME_TYPE when processing the definition of
17444          `S::T'.  We need to resolve it to the actual type before we
17445          try to define it.  */
17446       if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
17447         {
17448           class_type = resolve_typename_type (TREE_TYPE (type),
17449                                               /*only_current_p=*/false);
17450           if (TREE_CODE (class_type) != TYPENAME_TYPE)
17451             type = TYPE_NAME (class_type);
17452           else
17453             {
17454               cp_parser_error (parser, "could not resolve typename type");
17455               type = error_mark_node;
17456             }
17457         }
17458
17459       if (maybe_process_partial_specialization (TREE_TYPE (type))
17460           == error_mark_node)
17461         {
17462           type = NULL_TREE;
17463           goto done;
17464         }
17465
17466       class_type = current_class_type;
17467       /* Enter the scope indicated by the nested-name-specifier.  */
17468       pushed_scope = push_scope (nested_name_specifier);
17469       /* Get the canonical version of this type.  */
17470       type = TYPE_MAIN_DECL (TREE_TYPE (type));
17471       if (PROCESSING_REAL_TEMPLATE_DECL_P ()
17472           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
17473         {
17474           type = push_template_decl (type);
17475           if (type == error_mark_node)
17476             {
17477               type = NULL_TREE;
17478               goto done;
17479             }
17480         }
17481
17482       type = TREE_TYPE (type);
17483       *nested_name_specifier_p = true;
17484     }
17485   else      /* The name is not a nested name.  */
17486     {
17487       /* If the class was unnamed, create a dummy name.  */
17488       if (!id)
17489         id = make_anon_name ();
17490       type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
17491                        parser->num_template_parameter_lists);
17492     }
17493
17494   /* Indicate whether this class was declared as a `class' or as a
17495      `struct'.  */
17496   if (TREE_CODE (type) == RECORD_TYPE)
17497     CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
17498   cp_parser_check_class_key (class_key, type);
17499
17500   /* If this type was already complete, and we see another definition,
17501      that's an error.  */
17502   if (type != error_mark_node && COMPLETE_TYPE_P (type))
17503     {
17504       error_at (type_start_token->location, "redefinition of %q#T",
17505                 type);
17506       error_at (type_start_token->location, "previous definition of %q+#T",
17507                 type);
17508       type = NULL_TREE;
17509       goto done;
17510     }
17511   else if (type == error_mark_node)
17512     type = NULL_TREE;
17513
17514   /* We will have entered the scope containing the class; the names of
17515      base classes should be looked up in that context.  For example:
17516
17517        struct A { struct B {}; struct C; };
17518        struct A::C : B {};
17519
17520      is valid.  */
17521
17522   /* Get the list of base-classes, if there is one.  */
17523   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
17524     *bases = cp_parser_base_clause (parser);
17525
17526  done:
17527   /* Leave the scope given by the nested-name-specifier.  We will
17528      enter the class scope itself while processing the members.  */
17529   if (pushed_scope)
17530     pop_scope (pushed_scope);
17531
17532   if (invalid_explicit_specialization_p)
17533     {
17534       end_specialization ();
17535       --parser->num_template_parameter_lists;
17536     }
17537
17538   if (type)
17539     DECL_SOURCE_LOCATION (TYPE_NAME (type)) = type_start_token->location;
17540   *attributes_p = attributes;
17541   if (type && (virt_specifiers & VIRT_SPEC_FINAL))
17542     CLASSTYPE_FINAL (type) = 1;
17543  out:
17544   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
17545   return type;
17546 }
17547
17548 /* Parse a class-key.
17549
17550    class-key:
17551      class
17552      struct
17553      union
17554
17555    Returns the kind of class-key specified, or none_type to indicate
17556    error.  */
17557
17558 static enum tag_types
17559 cp_parser_class_key (cp_parser* parser)
17560 {
17561   cp_token *token;
17562   enum tag_types tag_type;
17563
17564   /* Look for the class-key.  */
17565   token = cp_parser_require (parser, CPP_KEYWORD, RT_CLASS_KEY);
17566   if (!token)
17567     return none_type;
17568
17569   /* Check to see if the TOKEN is a class-key.  */
17570   tag_type = cp_parser_token_is_class_key (token);
17571   if (!tag_type)
17572     cp_parser_error (parser, "expected class-key");
17573   return tag_type;
17574 }
17575
17576 /* Parse an (optional) member-specification.
17577
17578    member-specification:
17579      member-declaration member-specification [opt]
17580      access-specifier : member-specification [opt]  */
17581
17582 static void
17583 cp_parser_member_specification_opt (cp_parser* parser)
17584 {
17585   while (true)
17586     {
17587       cp_token *token;
17588       enum rid keyword;
17589
17590       /* Peek at the next token.  */
17591       token = cp_lexer_peek_token (parser->lexer);
17592       /* If it's a `}', or EOF then we've seen all the members.  */
17593       if (token->type == CPP_CLOSE_BRACE
17594           || token->type == CPP_EOF
17595           || token->type == CPP_PRAGMA_EOL)
17596         break;
17597
17598       /* See if this token is a keyword.  */
17599       keyword = token->keyword;
17600       switch (keyword)
17601         {
17602         case RID_PUBLIC:
17603         case RID_PROTECTED:
17604         case RID_PRIVATE:
17605           /* Consume the access-specifier.  */
17606           cp_lexer_consume_token (parser->lexer);
17607           /* Remember which access-specifier is active.  */
17608           current_access_specifier = token->u.value;
17609           /* Look for the `:'.  */
17610           cp_parser_require (parser, CPP_COLON, RT_COLON);
17611           break;
17612
17613         default:
17614           /* Accept #pragmas at class scope.  */
17615           if (token->type == CPP_PRAGMA)
17616             {
17617               cp_parser_pragma (parser, pragma_external);
17618               break;
17619             }
17620
17621           /* Otherwise, the next construction must be a
17622              member-declaration.  */
17623           cp_parser_member_declaration (parser);
17624         }
17625     }
17626 }
17627
17628 /* Parse a member-declaration.
17629
17630    member-declaration:
17631      decl-specifier-seq [opt] member-declarator-list [opt] ;
17632      function-definition ; [opt]
17633      :: [opt] nested-name-specifier template [opt] unqualified-id ;
17634      using-declaration
17635      template-declaration
17636
17637    member-declarator-list:
17638      member-declarator
17639      member-declarator-list , member-declarator
17640
17641    member-declarator:
17642      declarator pure-specifier [opt]
17643      declarator constant-initializer [opt]
17644      identifier [opt] : constant-expression
17645
17646    GNU Extensions:
17647
17648    member-declaration:
17649      __extension__ member-declaration
17650
17651    member-declarator:
17652      declarator attributes [opt] pure-specifier [opt]
17653      declarator attributes [opt] constant-initializer [opt]
17654      identifier [opt] attributes [opt] : constant-expression  
17655
17656    C++0x Extensions:
17657
17658    member-declaration:
17659      static_assert-declaration  */
17660
17661 static void
17662 cp_parser_member_declaration (cp_parser* parser)
17663 {
17664   cp_decl_specifier_seq decl_specifiers;
17665   tree prefix_attributes;
17666   tree decl;
17667   int declares_class_or_enum;
17668   bool friend_p;
17669   cp_token *token = NULL;
17670   cp_token *decl_spec_token_start = NULL;
17671   cp_token *initializer_token_start = NULL;
17672   int saved_pedantic;
17673   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
17674
17675   /* Check for the `__extension__' keyword.  */
17676   if (cp_parser_extension_opt (parser, &saved_pedantic))
17677     {
17678       /* Recurse.  */
17679       cp_parser_member_declaration (parser);
17680       /* Restore the old value of the PEDANTIC flag.  */
17681       pedantic = saved_pedantic;
17682
17683       return;
17684     }
17685
17686   /* Check for a template-declaration.  */
17687   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
17688     {
17689       /* An explicit specialization here is an error condition, and we
17690          expect the specialization handler to detect and report this.  */
17691       if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
17692           && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
17693         cp_parser_explicit_specialization (parser);
17694       else
17695         cp_parser_template_declaration (parser, /*member_p=*/true);
17696
17697       return;
17698     }
17699
17700   /* Check for a using-declaration.  */
17701   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
17702     {
17703       /* Parse the using-declaration.  */
17704       cp_parser_using_declaration (parser,
17705                                    /*access_declaration_p=*/false);
17706       return;
17707     }
17708
17709   /* Check for @defs.  */
17710   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
17711     {
17712       tree ivar, member;
17713       tree ivar_chains = cp_parser_objc_defs_expression (parser);
17714       ivar = ivar_chains;
17715       while (ivar)
17716         {
17717           member = ivar;
17718           ivar = TREE_CHAIN (member);
17719           TREE_CHAIN (member) = NULL_TREE;
17720           finish_member_declaration (member);
17721         }
17722       return;
17723     }
17724
17725   /* If the next token is `static_assert' we have a static assertion.  */
17726   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC_ASSERT))
17727     {
17728       cp_parser_static_assert (parser, /*member_p=*/true);
17729       return;
17730     }
17731
17732   parser->colon_corrects_to_scope_p = false;
17733
17734   if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
17735     goto out;
17736
17737   /* Parse the decl-specifier-seq.  */
17738   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
17739   cp_parser_decl_specifier_seq (parser,
17740                                 CP_PARSER_FLAGS_OPTIONAL,
17741                                 &decl_specifiers,
17742                                 &declares_class_or_enum);
17743   prefix_attributes = decl_specifiers.attributes;
17744   decl_specifiers.attributes = NULL_TREE;
17745   /* Check for an invalid type-name.  */
17746   if (!decl_specifiers.any_type_specifiers_p
17747       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
17748     goto out;
17749   /* If there is no declarator, then the decl-specifier-seq should
17750      specify a type.  */
17751   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17752     {
17753       /* If there was no decl-specifier-seq, and the next token is a
17754          `;', then we have something like:
17755
17756            struct S { ; };
17757
17758          [class.mem]
17759
17760          Each member-declaration shall declare at least one member
17761          name of the class.  */
17762       if (!decl_specifiers.any_specifiers_p)
17763         {
17764           cp_token *token = cp_lexer_peek_token (parser->lexer);
17765           if (!in_system_header_at (token->location))
17766             pedwarn (token->location, OPT_pedantic, "extra %<;%>");
17767         }
17768       else
17769         {
17770           tree type;
17771
17772           /* See if this declaration is a friend.  */
17773           friend_p = cp_parser_friend_p (&decl_specifiers);
17774           /* If there were decl-specifiers, check to see if there was
17775              a class-declaration.  */
17776           type = check_tag_decl (&decl_specifiers);
17777           /* Nested classes have already been added to the class, but
17778              a `friend' needs to be explicitly registered.  */
17779           if (friend_p)
17780             {
17781               /* If the `friend' keyword was present, the friend must
17782                  be introduced with a class-key.  */
17783                if (!declares_class_or_enum && cxx_dialect < cxx0x)
17784                  pedwarn (decl_spec_token_start->location, OPT_pedantic,
17785                           "in C++03 a class-key must be used "
17786                           "when declaring a friend");
17787                /* In this case:
17788
17789                     template <typename T> struct A {
17790                       friend struct A<T>::B;
17791                     };
17792
17793                   A<T>::B will be represented by a TYPENAME_TYPE, and
17794                   therefore not recognized by check_tag_decl.  */
17795                if (!type)
17796                  {
17797                    type = decl_specifiers.type;
17798                    if (type && TREE_CODE (type) == TYPE_DECL)
17799                      type = TREE_TYPE (type);
17800                  }
17801                if (!type || !TYPE_P (type))
17802                  error_at (decl_spec_token_start->location,
17803                            "friend declaration does not name a class or "
17804                            "function");
17805                else
17806                  make_friend_class (current_class_type, type,
17807                                     /*complain=*/true);
17808             }
17809           /* If there is no TYPE, an error message will already have
17810              been issued.  */
17811           else if (!type || type == error_mark_node)
17812             ;
17813           /* An anonymous aggregate has to be handled specially; such
17814              a declaration really declares a data member (with a
17815              particular type), as opposed to a nested class.  */
17816           else if (ANON_AGGR_TYPE_P (type))
17817             {
17818               /* Remove constructors and such from TYPE, now that we
17819                  know it is an anonymous aggregate.  */
17820               fixup_anonymous_aggr (type);
17821               /* And make the corresponding data member.  */
17822               decl = build_decl (decl_spec_token_start->location,
17823                                  FIELD_DECL, NULL_TREE, type);
17824               /* Add it to the class.  */
17825               finish_member_declaration (decl);
17826             }
17827           else
17828             cp_parser_check_access_in_redeclaration
17829                                               (TYPE_NAME (type),
17830                                                decl_spec_token_start->location);
17831         }
17832     }
17833   else
17834     {
17835       bool assume_semicolon = false;
17836
17837       /* See if these declarations will be friends.  */
17838       friend_p = cp_parser_friend_p (&decl_specifiers);
17839
17840       /* Keep going until we hit the `;' at the end of the
17841          declaration.  */
17842       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
17843         {
17844           tree attributes = NULL_TREE;
17845           tree first_attribute;
17846
17847           /* Peek at the next token.  */
17848           token = cp_lexer_peek_token (parser->lexer);
17849
17850           /* Check for a bitfield declaration.  */
17851           if (token->type == CPP_COLON
17852               || (token->type == CPP_NAME
17853                   && cp_lexer_peek_nth_token (parser->lexer, 2)->type
17854                   == CPP_COLON))
17855             {
17856               tree identifier;
17857               tree width;
17858
17859               /* Get the name of the bitfield.  Note that we cannot just
17860                  check TOKEN here because it may have been invalidated by
17861                  the call to cp_lexer_peek_nth_token above.  */
17862               if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
17863                 identifier = cp_parser_identifier (parser);
17864               else
17865                 identifier = NULL_TREE;
17866
17867               /* Consume the `:' token.  */
17868               cp_lexer_consume_token (parser->lexer);
17869               /* Get the width of the bitfield.  */
17870               width
17871                 = cp_parser_constant_expression (parser,
17872                                                  /*allow_non_constant=*/false,
17873                                                  NULL);
17874
17875               /* Look for attributes that apply to the bitfield.  */
17876               attributes = cp_parser_attributes_opt (parser);
17877               /* Remember which attributes are prefix attributes and
17878                  which are not.  */
17879               first_attribute = attributes;
17880               /* Combine the attributes.  */
17881               attributes = chainon (prefix_attributes, attributes);
17882
17883               /* Create the bitfield declaration.  */
17884               decl = grokbitfield (identifier
17885                                    ? make_id_declarator (NULL_TREE,
17886                                                          identifier,
17887                                                          sfk_none)
17888                                    : NULL,
17889                                    &decl_specifiers,
17890                                    width,
17891                                    attributes);
17892             }
17893           else
17894             {
17895               cp_declarator *declarator;
17896               tree initializer;
17897               tree asm_specification;
17898               int ctor_dtor_or_conv_p;
17899
17900               /* Parse the declarator.  */
17901               declarator
17902                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
17903                                         &ctor_dtor_or_conv_p,
17904                                         /*parenthesized_p=*/NULL,
17905                                         /*member_p=*/true);
17906
17907               /* If something went wrong parsing the declarator, make sure
17908                  that we at least consume some tokens.  */
17909               if (declarator == cp_error_declarator)
17910                 {
17911                   /* Skip to the end of the statement.  */
17912                   cp_parser_skip_to_end_of_statement (parser);
17913                   /* If the next token is not a semicolon, that is
17914                      probably because we just skipped over the body of
17915                      a function.  So, we consume a semicolon if
17916                      present, but do not issue an error message if it
17917                      is not present.  */
17918                   if (cp_lexer_next_token_is (parser->lexer,
17919                                               CPP_SEMICOLON))
17920                     cp_lexer_consume_token (parser->lexer);
17921                   goto out;
17922                 }
17923
17924               if (declares_class_or_enum & 2)
17925                 cp_parser_check_for_definition_in_return_type
17926                                             (declarator, decl_specifiers.type,
17927                                              decl_specifiers.type_location);
17928
17929               /* Look for an asm-specification.  */
17930               asm_specification = cp_parser_asm_specification_opt (parser);
17931               /* Look for attributes that apply to the declaration.  */
17932               attributes = cp_parser_attributes_opt (parser);
17933               /* Remember which attributes are prefix attributes and
17934                  which are not.  */
17935               first_attribute = attributes;
17936               /* Combine the attributes.  */
17937               attributes = chainon (prefix_attributes, attributes);
17938
17939               /* If it's an `=', then we have a constant-initializer or a
17940                  pure-specifier.  It is not correct to parse the
17941                  initializer before registering the member declaration
17942                  since the member declaration should be in scope while
17943                  its initializer is processed.  However, the rest of the
17944                  front end does not yet provide an interface that allows
17945                  us to handle this correctly.  */
17946               if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
17947                 {
17948                   /* In [class.mem]:
17949
17950                      A pure-specifier shall be used only in the declaration of
17951                      a virtual function.
17952
17953                      A member-declarator can contain a constant-initializer
17954                      only if it declares a static member of integral or
17955                      enumeration type.
17956
17957                      Therefore, if the DECLARATOR is for a function, we look
17958                      for a pure-specifier; otherwise, we look for a
17959                      constant-initializer.  When we call `grokfield', it will
17960                      perform more stringent semantics checks.  */
17961                   initializer_token_start = cp_lexer_peek_token (parser->lexer);
17962                   if (function_declarator_p (declarator))
17963                     initializer = cp_parser_pure_specifier (parser);
17964                   else
17965                     /* Parse the initializer.  */
17966                     initializer = cp_parser_constant_initializer (parser);
17967                 }
17968               /* Otherwise, there is no initializer.  */
17969               else
17970                 initializer = NULL_TREE;
17971
17972               /* See if we are probably looking at a function
17973                  definition.  We are certainly not looking at a
17974                  member-declarator.  Calling `grokfield' has
17975                  side-effects, so we must not do it unless we are sure
17976                  that we are looking at a member-declarator.  */
17977               if (cp_parser_token_starts_function_definition_p
17978                   (cp_lexer_peek_token (parser->lexer)))
17979                 {
17980                   /* The grammar does not allow a pure-specifier to be
17981                      used when a member function is defined.  (It is
17982                      possible that this fact is an oversight in the
17983                      standard, since a pure function may be defined
17984                      outside of the class-specifier.  */
17985                   if (initializer)
17986                     error_at (initializer_token_start->location,
17987                               "pure-specifier on function-definition");
17988                   decl = cp_parser_save_member_function_body (parser,
17989                                                               &decl_specifiers,
17990                                                               declarator,
17991                                                               attributes);
17992                   /* If the member was not a friend, declare it here.  */
17993                   if (!friend_p)
17994                     finish_member_declaration (decl);
17995                   /* Peek at the next token.  */
17996                   token = cp_lexer_peek_token (parser->lexer);
17997                   /* If the next token is a semicolon, consume it.  */
17998                   if (token->type == CPP_SEMICOLON)
17999                     cp_lexer_consume_token (parser->lexer);
18000                   goto out;
18001                 }
18002               else
18003                 if (declarator->kind == cdk_function)
18004                   declarator->id_loc = token->location;
18005                 /* Create the declaration.  */
18006                 decl = grokfield (declarator, &decl_specifiers,
18007                                   initializer, /*init_const_expr_p=*/true,
18008                                   asm_specification,
18009                                   attributes);
18010             }
18011
18012           /* Reset PREFIX_ATTRIBUTES.  */
18013           while (attributes && TREE_CHAIN (attributes) != first_attribute)
18014             attributes = TREE_CHAIN (attributes);
18015           if (attributes)
18016             TREE_CHAIN (attributes) = NULL_TREE;
18017
18018           /* If there is any qualification still in effect, clear it
18019              now; we will be starting fresh with the next declarator.  */
18020           parser->scope = NULL_TREE;
18021           parser->qualifying_scope = NULL_TREE;
18022           parser->object_scope = NULL_TREE;
18023           /* If it's a `,', then there are more declarators.  */
18024           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
18025             cp_lexer_consume_token (parser->lexer);
18026           /* If the next token isn't a `;', then we have a parse error.  */
18027           else if (cp_lexer_next_token_is_not (parser->lexer,
18028                                                CPP_SEMICOLON))
18029             {
18030               /* The next token might be a ways away from where the
18031                  actual semicolon is missing.  Find the previous token
18032                  and use that for our error position.  */
18033               cp_token *token = cp_lexer_previous_token (parser->lexer);
18034               error_at (token->location,
18035                         "expected %<;%> at end of member declaration");
18036
18037               /* Assume that the user meant to provide a semicolon.  If
18038                  we were to cp_parser_skip_to_end_of_statement, we might
18039                  skip to a semicolon inside a member function definition
18040                  and issue nonsensical error messages.  */
18041               assume_semicolon = true;
18042             }
18043
18044           if (decl)
18045             {
18046               /* Add DECL to the list of members.  */
18047               if (!friend_p)
18048                 finish_member_declaration (decl);
18049
18050               if (TREE_CODE (decl) == FUNCTION_DECL)
18051                 cp_parser_save_default_args (parser, decl);
18052             }
18053
18054           if (assume_semicolon)
18055             goto out;
18056         }
18057     }
18058
18059   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
18060  out:
18061   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
18062 }
18063
18064 /* Parse a pure-specifier.
18065
18066    pure-specifier:
18067      = 0
18068
18069    Returns INTEGER_ZERO_NODE if a pure specifier is found.
18070    Otherwise, ERROR_MARK_NODE is returned.  */
18071
18072 static tree
18073 cp_parser_pure_specifier (cp_parser* parser)
18074 {
18075   cp_token *token;
18076
18077   /* Look for the `=' token.  */
18078   if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
18079     return error_mark_node;
18080   /* Look for the `0' token.  */
18081   token = cp_lexer_peek_token (parser->lexer);
18082
18083   if (token->type == CPP_EOF
18084       || token->type == CPP_PRAGMA_EOL)
18085     return error_mark_node;
18086
18087   cp_lexer_consume_token (parser->lexer);
18088
18089   /* Accept = default or = delete in c++0x mode.  */
18090   if (token->keyword == RID_DEFAULT
18091       || token->keyword == RID_DELETE)
18092     {
18093       maybe_warn_cpp0x (CPP0X_DEFAULTED_DELETED);
18094       return token->u.value;
18095     }
18096
18097   /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
18098   if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
18099     {
18100       cp_parser_error (parser,
18101                        "invalid pure specifier (only %<= 0%> is allowed)");
18102       cp_parser_skip_to_end_of_statement (parser);
18103       return error_mark_node;
18104     }
18105   if (PROCESSING_REAL_TEMPLATE_DECL_P ())
18106     {
18107       error_at (token->location, "templates may not be %<virtual%>");
18108       return error_mark_node;
18109     }
18110
18111   return integer_zero_node;
18112 }
18113
18114 /* Parse a constant-initializer.
18115
18116    constant-initializer:
18117      = constant-expression
18118
18119    Returns a representation of the constant-expression.  */
18120
18121 static tree
18122 cp_parser_constant_initializer (cp_parser* parser)
18123 {
18124   /* Look for the `=' token.  */
18125   if (!cp_parser_require (parser, CPP_EQ, RT_EQ))
18126     return error_mark_node;
18127
18128   /* It is invalid to write:
18129
18130        struct S { static const int i = { 7 }; };
18131
18132      */
18133   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
18134     {
18135       cp_parser_error (parser,
18136                        "a brace-enclosed initializer is not allowed here");
18137       /* Consume the opening brace.  */
18138       cp_lexer_consume_token (parser->lexer);
18139       /* Skip the initializer.  */
18140       cp_parser_skip_to_closing_brace (parser);
18141       /* Look for the trailing `}'.  */
18142       cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
18143
18144       return error_mark_node;
18145     }
18146
18147   return cp_parser_constant_expression (parser,
18148                                         /*allow_non_constant=*/false,
18149                                         NULL);
18150 }
18151
18152 /* Derived classes [gram.class.derived] */
18153
18154 /* Parse a base-clause.
18155
18156    base-clause:
18157      : base-specifier-list
18158
18159    base-specifier-list:
18160      base-specifier ... [opt]
18161      base-specifier-list , base-specifier ... [opt]
18162
18163    Returns a TREE_LIST representing the base-classes, in the order in
18164    which they were declared.  The representation of each node is as
18165    described by cp_parser_base_specifier.
18166
18167    In the case that no bases are specified, this function will return
18168    NULL_TREE, not ERROR_MARK_NODE.  */
18169
18170 static tree
18171 cp_parser_base_clause (cp_parser* parser)
18172 {
18173   tree bases = NULL_TREE;
18174
18175   /* Look for the `:' that begins the list.  */
18176   cp_parser_require (parser, CPP_COLON, RT_COLON);
18177
18178   /* Scan the base-specifier-list.  */
18179   while (true)
18180     {
18181       cp_token *token;
18182       tree base;
18183       bool pack_expansion_p = false;
18184
18185       /* Look for the base-specifier.  */
18186       base = cp_parser_base_specifier (parser);
18187       /* Look for the (optional) ellipsis. */
18188       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
18189         {
18190           /* Consume the `...'. */
18191           cp_lexer_consume_token (parser->lexer);
18192
18193           pack_expansion_p = true;
18194         }
18195
18196       /* Add BASE to the front of the list.  */
18197       if (base != error_mark_node)
18198         {
18199           if (pack_expansion_p)
18200             /* Make this a pack expansion type. */
18201             TREE_VALUE (base) = make_pack_expansion (TREE_VALUE (base));
18202           
18203
18204           if (!check_for_bare_parameter_packs (TREE_VALUE (base)))
18205             {
18206               TREE_CHAIN (base) = bases;
18207               bases = base;
18208             }
18209         }
18210       /* Peek at the next token.  */
18211       token = cp_lexer_peek_token (parser->lexer);
18212       /* If it's not a comma, then the list is complete.  */
18213       if (token->type != CPP_COMMA)
18214         break;
18215       /* Consume the `,'.  */
18216       cp_lexer_consume_token (parser->lexer);
18217     }
18218
18219   /* PARSER->SCOPE may still be non-NULL at this point, if the last
18220      base class had a qualified name.  However, the next name that
18221      appears is certainly not qualified.  */
18222   parser->scope = NULL_TREE;
18223   parser->qualifying_scope = NULL_TREE;
18224   parser->object_scope = NULL_TREE;
18225
18226   return nreverse (bases);
18227 }
18228
18229 /* Parse a base-specifier.
18230
18231    base-specifier:
18232      :: [opt] nested-name-specifier [opt] class-name
18233      virtual access-specifier [opt] :: [opt] nested-name-specifier
18234        [opt] class-name
18235      access-specifier virtual [opt] :: [opt] nested-name-specifier
18236        [opt] class-name
18237
18238    Returns a TREE_LIST.  The TREE_PURPOSE will be one of
18239    ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
18240    indicate the specifiers provided.  The TREE_VALUE will be a TYPE
18241    (or the ERROR_MARK_NODE) indicating the type that was specified.  */
18242
18243 static tree
18244 cp_parser_base_specifier (cp_parser* parser)
18245 {
18246   cp_token *token;
18247   bool done = false;
18248   bool virtual_p = false;
18249   bool duplicate_virtual_error_issued_p = false;
18250   bool duplicate_access_error_issued_p = false;
18251   bool class_scope_p, template_p;
18252   tree access = access_default_node;
18253   tree type;
18254
18255   /* Process the optional `virtual' and `access-specifier'.  */
18256   while (!done)
18257     {
18258       /* Peek at the next token.  */
18259       token = cp_lexer_peek_token (parser->lexer);
18260       /* Process `virtual'.  */
18261       switch (token->keyword)
18262         {
18263         case RID_VIRTUAL:
18264           /* If `virtual' appears more than once, issue an error.  */
18265           if (virtual_p && !duplicate_virtual_error_issued_p)
18266             {
18267               cp_parser_error (parser,
18268                                "%<virtual%> specified more than once in base-specified");
18269               duplicate_virtual_error_issued_p = true;
18270             }
18271
18272           virtual_p = true;
18273
18274           /* Consume the `virtual' token.  */
18275           cp_lexer_consume_token (parser->lexer);
18276
18277           break;
18278
18279         case RID_PUBLIC:
18280         case RID_PROTECTED:
18281         case RID_PRIVATE:
18282           /* If more than one access specifier appears, issue an
18283              error.  */
18284           if (access != access_default_node
18285               && !duplicate_access_error_issued_p)
18286             {
18287               cp_parser_error (parser,
18288                                "more than one access specifier in base-specified");
18289               duplicate_access_error_issued_p = true;
18290             }
18291
18292           access = ridpointers[(int) token->keyword];
18293
18294           /* Consume the access-specifier.  */
18295           cp_lexer_consume_token (parser->lexer);
18296
18297           break;
18298
18299         default:
18300           done = true;
18301           break;
18302         }
18303     }
18304   /* It is not uncommon to see programs mechanically, erroneously, use
18305      the 'typename' keyword to denote (dependent) qualified types
18306      as base classes.  */
18307   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
18308     {
18309       token = cp_lexer_peek_token (parser->lexer);
18310       if (!processing_template_decl)
18311         error_at (token->location,
18312                   "keyword %<typename%> not allowed outside of templates");
18313       else
18314         error_at (token->location,
18315                   "keyword %<typename%> not allowed in this context "
18316                   "(the base class is implicitly a type)");
18317       cp_lexer_consume_token (parser->lexer);
18318     }
18319
18320   /* Look for the optional `::' operator.  */
18321   cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
18322   /* Look for the nested-name-specifier.  The simplest way to
18323      implement:
18324
18325        [temp.res]
18326
18327        The keyword `typename' is not permitted in a base-specifier or
18328        mem-initializer; in these contexts a qualified name that
18329        depends on a template-parameter is implicitly assumed to be a
18330        type name.
18331
18332      is to pretend that we have seen the `typename' keyword at this
18333      point.  */
18334   cp_parser_nested_name_specifier_opt (parser,
18335                                        /*typename_keyword_p=*/true,
18336                                        /*check_dependency_p=*/true,
18337                                        typename_type,
18338                                        /*is_declaration=*/true);
18339   /* If the base class is given by a qualified name, assume that names
18340      we see are type names or templates, as appropriate.  */
18341   class_scope_p = (parser->scope && TYPE_P (parser->scope));
18342   template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
18343
18344   /* Finally, look for the class-name.  */
18345   type = cp_parser_class_name (parser,
18346                                class_scope_p,
18347                                template_p,
18348                                typename_type,
18349                                /*check_dependency_p=*/true,
18350                                /*class_head_p=*/false,
18351                                /*is_declaration=*/true);
18352
18353   if (type == error_mark_node)
18354     return error_mark_node;
18355
18356   return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
18357 }
18358
18359 /* Exception handling [gram.exception] */
18360
18361 /* Parse an (optional) exception-specification.
18362
18363    exception-specification:
18364      throw ( type-id-list [opt] )
18365
18366    Returns a TREE_LIST representing the exception-specification.  The
18367    TREE_VALUE of each node is a type.  */
18368
18369 static tree
18370 cp_parser_exception_specification_opt (cp_parser* parser)
18371 {
18372   cp_token *token;
18373   tree type_id_list;
18374   const char *saved_message;
18375
18376   /* Peek at the next token.  */
18377   token = cp_lexer_peek_token (parser->lexer);
18378
18379   /* Is it a noexcept-specification?  */
18380   if (cp_parser_is_keyword (token, RID_NOEXCEPT))
18381     {
18382       tree expr;
18383       cp_lexer_consume_token (parser->lexer);
18384
18385       if (cp_lexer_peek_token (parser->lexer)->type == CPP_OPEN_PAREN)
18386         {
18387           cp_lexer_consume_token (parser->lexer);
18388
18389           /* Types may not be defined in an exception-specification.  */
18390           saved_message = parser->type_definition_forbidden_message;
18391           parser->type_definition_forbidden_message
18392             = G_("types may not be defined in an exception-specification");
18393
18394           expr = cp_parser_constant_expression (parser, false, NULL);
18395
18396           /* Restore the saved message.  */
18397           parser->type_definition_forbidden_message = saved_message;
18398
18399           cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
18400         }
18401       else
18402         expr = boolean_true_node;
18403
18404       return build_noexcept_spec (expr, tf_warning_or_error);
18405     }
18406
18407   /* If it's not `throw', then there's no exception-specification.  */
18408   if (!cp_parser_is_keyword (token, RID_THROW))
18409     return NULL_TREE;
18410
18411 #if 0
18412   /* Enable this once a lot of code has transitioned to noexcept?  */
18413   if (cxx_dialect == cxx0x && !in_system_header)
18414     warning (OPT_Wdeprecated, "dynamic exception specifications are "
18415              "deprecated in C++0x; use %<noexcept%> instead");
18416 #endif
18417
18418   /* Consume the `throw'.  */
18419   cp_lexer_consume_token (parser->lexer);
18420
18421   /* Look for the `('.  */
18422   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
18423
18424   /* Peek at the next token.  */
18425   token = cp_lexer_peek_token (parser->lexer);
18426   /* If it's not a `)', then there is a type-id-list.  */
18427   if (token->type != CPP_CLOSE_PAREN)
18428     {
18429       /* Types may not be defined in an exception-specification.  */
18430       saved_message = parser->type_definition_forbidden_message;
18431       parser->type_definition_forbidden_message
18432         = G_("types may not be defined in an exception-specification");
18433       /* Parse the type-id-list.  */
18434       type_id_list = cp_parser_type_id_list (parser);
18435       /* Restore the saved message.  */
18436       parser->type_definition_forbidden_message = saved_message;
18437     }
18438   else
18439     type_id_list = empty_except_spec;
18440
18441   /* Look for the `)'.  */
18442   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
18443
18444   return type_id_list;
18445 }
18446
18447 /* Parse an (optional) type-id-list.
18448
18449    type-id-list:
18450      type-id ... [opt]
18451      type-id-list , type-id ... [opt]
18452
18453    Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
18454    in the order that the types were presented.  */
18455
18456 static tree
18457 cp_parser_type_id_list (cp_parser* parser)
18458 {
18459   tree types = NULL_TREE;
18460
18461   while (true)
18462     {
18463       cp_token *token;
18464       tree type;
18465
18466       /* Get the next type-id.  */
18467       type = cp_parser_type_id (parser);
18468       /* Parse the optional ellipsis. */
18469       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
18470         {
18471           /* Consume the `...'. */
18472           cp_lexer_consume_token (parser->lexer);
18473
18474           /* Turn the type into a pack expansion expression. */
18475           type = make_pack_expansion (type);
18476         }
18477       /* Add it to the list.  */
18478       types = add_exception_specifier (types, type, /*complain=*/1);
18479       /* Peek at the next token.  */
18480       token = cp_lexer_peek_token (parser->lexer);
18481       /* If it is not a `,', we are done.  */
18482       if (token->type != CPP_COMMA)
18483         break;
18484       /* Consume the `,'.  */
18485       cp_lexer_consume_token (parser->lexer);
18486     }
18487
18488   return nreverse (types);
18489 }
18490
18491 /* Parse a try-block.
18492
18493    try-block:
18494      try compound-statement handler-seq  */
18495
18496 static tree
18497 cp_parser_try_block (cp_parser* parser)
18498 {
18499   tree try_block;
18500
18501   cp_parser_require_keyword (parser, RID_TRY, RT_TRY);
18502   try_block = begin_try_block ();
18503   cp_parser_compound_statement (parser, NULL, true, false);
18504   finish_try_block (try_block);
18505   cp_parser_handler_seq (parser);
18506   finish_handler_sequence (try_block);
18507
18508   return try_block;
18509 }
18510
18511 /* Parse a function-try-block.
18512
18513    function-try-block:
18514      try ctor-initializer [opt] function-body handler-seq  */
18515
18516 static bool
18517 cp_parser_function_try_block (cp_parser* parser)
18518 {
18519   tree compound_stmt;
18520   tree try_block;
18521   bool ctor_initializer_p;
18522
18523   /* Look for the `try' keyword.  */
18524   if (!cp_parser_require_keyword (parser, RID_TRY, RT_TRY))
18525     return false;
18526   /* Let the rest of the front end know where we are.  */
18527   try_block = begin_function_try_block (&compound_stmt);
18528   /* Parse the function-body.  */
18529   ctor_initializer_p
18530     = cp_parser_ctor_initializer_opt_and_function_body (parser);
18531   /* We're done with the `try' part.  */
18532   finish_function_try_block (try_block);
18533   /* Parse the handlers.  */
18534   cp_parser_handler_seq (parser);
18535   /* We're done with the handlers.  */
18536   finish_function_handler_sequence (try_block, compound_stmt);
18537
18538   return ctor_initializer_p;
18539 }
18540
18541 /* Parse a handler-seq.
18542
18543    handler-seq:
18544      handler handler-seq [opt]  */
18545
18546 static void
18547 cp_parser_handler_seq (cp_parser* parser)
18548 {
18549   while (true)
18550     {
18551       cp_token *token;
18552
18553       /* Parse the handler.  */
18554       cp_parser_handler (parser);
18555       /* Peek at the next token.  */
18556       token = cp_lexer_peek_token (parser->lexer);
18557       /* If it's not `catch' then there are no more handlers.  */
18558       if (!cp_parser_is_keyword (token, RID_CATCH))
18559         break;
18560     }
18561 }
18562
18563 /* Parse a handler.
18564
18565    handler:
18566      catch ( exception-declaration ) compound-statement  */
18567
18568 static void
18569 cp_parser_handler (cp_parser* parser)
18570 {
18571   tree handler;
18572   tree declaration;
18573
18574   cp_parser_require_keyword (parser, RID_CATCH, RT_CATCH);
18575   handler = begin_handler ();
18576   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
18577   declaration = cp_parser_exception_declaration (parser);
18578   finish_handler_parms (declaration, handler);
18579   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
18580   cp_parser_compound_statement (parser, NULL, false, false);
18581   finish_handler (handler);
18582 }
18583
18584 /* Parse an exception-declaration.
18585
18586    exception-declaration:
18587      type-specifier-seq declarator
18588      type-specifier-seq abstract-declarator
18589      type-specifier-seq
18590      ...
18591
18592    Returns a VAR_DECL for the declaration, or NULL_TREE if the
18593    ellipsis variant is used.  */
18594
18595 static tree
18596 cp_parser_exception_declaration (cp_parser* parser)
18597 {
18598   cp_decl_specifier_seq type_specifiers;
18599   cp_declarator *declarator;
18600   const char *saved_message;
18601
18602   /* If it's an ellipsis, it's easy to handle.  */
18603   if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
18604     {
18605       /* Consume the `...' token.  */
18606       cp_lexer_consume_token (parser->lexer);
18607       return NULL_TREE;
18608     }
18609
18610   /* Types may not be defined in exception-declarations.  */
18611   saved_message = parser->type_definition_forbidden_message;
18612   parser->type_definition_forbidden_message
18613     = G_("types may not be defined in exception-declarations");
18614
18615   /* Parse the type-specifier-seq.  */
18616   cp_parser_type_specifier_seq (parser, /*is_declaration=*/true,
18617                                 /*is_trailing_return=*/false,
18618                                 &type_specifiers);
18619   /* If it's a `)', then there is no declarator.  */
18620   if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
18621     declarator = NULL;
18622   else
18623     declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
18624                                        /*ctor_dtor_or_conv_p=*/NULL,
18625                                        /*parenthesized_p=*/NULL,
18626                                        /*member_p=*/false);
18627
18628   /* Restore the saved message.  */
18629   parser->type_definition_forbidden_message = saved_message;
18630
18631   if (!type_specifiers.any_specifiers_p)
18632     return error_mark_node;
18633
18634   return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
18635 }
18636
18637 /* Parse a throw-expression.
18638
18639    throw-expression:
18640      throw assignment-expression [opt]
18641
18642    Returns a THROW_EXPR representing the throw-expression.  */
18643
18644 static tree
18645 cp_parser_throw_expression (cp_parser* parser)
18646 {
18647   tree expression;
18648   cp_token* token;
18649
18650   cp_parser_require_keyword (parser, RID_THROW, RT_THROW);
18651   token = cp_lexer_peek_token (parser->lexer);
18652   /* Figure out whether or not there is an assignment-expression
18653      following the "throw" keyword.  */
18654   if (token->type == CPP_COMMA
18655       || token->type == CPP_SEMICOLON
18656       || token->type == CPP_CLOSE_PAREN
18657       || token->type == CPP_CLOSE_SQUARE
18658       || token->type == CPP_CLOSE_BRACE
18659       || token->type == CPP_COLON)
18660     expression = NULL_TREE;
18661   else
18662     expression = cp_parser_assignment_expression (parser,
18663                                                   /*cast_p=*/false, NULL);
18664
18665   return build_throw (expression);
18666 }
18667
18668 /* GNU Extensions */
18669
18670 /* Parse an (optional) asm-specification.
18671
18672    asm-specification:
18673      asm ( string-literal )
18674
18675    If the asm-specification is present, returns a STRING_CST
18676    corresponding to the string-literal.  Otherwise, returns
18677    NULL_TREE.  */
18678
18679 static tree
18680 cp_parser_asm_specification_opt (cp_parser* parser)
18681 {
18682   cp_token *token;
18683   tree asm_specification;
18684
18685   /* Peek at the next token.  */
18686   token = cp_lexer_peek_token (parser->lexer);
18687   /* If the next token isn't the `asm' keyword, then there's no
18688      asm-specification.  */
18689   if (!cp_parser_is_keyword (token, RID_ASM))
18690     return NULL_TREE;
18691
18692   /* Consume the `asm' token.  */
18693   cp_lexer_consume_token (parser->lexer);
18694   /* Look for the `('.  */
18695   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
18696
18697   /* Look for the string-literal.  */
18698   asm_specification = cp_parser_string_literal (parser, false, false);
18699
18700   /* Look for the `)'.  */
18701   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
18702
18703   return asm_specification;
18704 }
18705
18706 /* Parse an asm-operand-list.
18707
18708    asm-operand-list:
18709      asm-operand
18710      asm-operand-list , asm-operand
18711
18712    asm-operand:
18713      string-literal ( expression )
18714      [ string-literal ] string-literal ( expression )
18715
18716    Returns a TREE_LIST representing the operands.  The TREE_VALUE of
18717    each node is the expression.  The TREE_PURPOSE is itself a
18718    TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
18719    string-literal (or NULL_TREE if not present) and whose TREE_VALUE
18720    is a STRING_CST for the string literal before the parenthesis. Returns
18721    ERROR_MARK_NODE if any of the operands are invalid.  */
18722
18723 static tree
18724 cp_parser_asm_operand_list (cp_parser* parser)
18725 {
18726   tree asm_operands = NULL_TREE;
18727   bool invalid_operands = false;
18728
18729   while (true)
18730     {
18731       tree string_literal;
18732       tree expression;
18733       tree name;
18734
18735       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
18736         {
18737           /* Consume the `[' token.  */
18738           cp_lexer_consume_token (parser->lexer);
18739           /* Read the operand name.  */
18740           name = cp_parser_identifier (parser);
18741           if (name != error_mark_node)
18742             name = build_string (IDENTIFIER_LENGTH (name),
18743                                  IDENTIFIER_POINTER (name));
18744           /* Look for the closing `]'.  */
18745           cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
18746         }
18747       else
18748         name = NULL_TREE;
18749       /* Look for the string-literal.  */
18750       string_literal = cp_parser_string_literal (parser, false, false);
18751
18752       /* Look for the `('.  */
18753       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
18754       /* Parse the expression.  */
18755       expression = cp_parser_expression (parser, /*cast_p=*/false, NULL);
18756       /* Look for the `)'.  */
18757       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
18758
18759       if (name == error_mark_node 
18760           || string_literal == error_mark_node 
18761           || expression == error_mark_node)
18762         invalid_operands = true;
18763
18764       /* Add this operand to the list.  */
18765       asm_operands = tree_cons (build_tree_list (name, string_literal),
18766                                 expression,
18767                                 asm_operands);
18768       /* If the next token is not a `,', there are no more
18769          operands.  */
18770       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
18771         break;
18772       /* Consume the `,'.  */
18773       cp_lexer_consume_token (parser->lexer);
18774     }
18775
18776   return invalid_operands ? error_mark_node : nreverse (asm_operands);
18777 }
18778
18779 /* Parse an asm-clobber-list.
18780
18781    asm-clobber-list:
18782      string-literal
18783      asm-clobber-list , string-literal
18784
18785    Returns a TREE_LIST, indicating the clobbers in the order that they
18786    appeared.  The TREE_VALUE of each node is a STRING_CST.  */
18787
18788 static tree
18789 cp_parser_asm_clobber_list (cp_parser* parser)
18790 {
18791   tree clobbers = NULL_TREE;
18792
18793   while (true)
18794     {
18795       tree string_literal;
18796
18797       /* Look for the string literal.  */
18798       string_literal = cp_parser_string_literal (parser, false, false);
18799       /* Add it to the list.  */
18800       clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
18801       /* If the next token is not a `,', then the list is
18802          complete.  */
18803       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
18804         break;
18805       /* Consume the `,' token.  */
18806       cp_lexer_consume_token (parser->lexer);
18807     }
18808
18809   return clobbers;
18810 }
18811
18812 /* Parse an asm-label-list.
18813
18814    asm-label-list:
18815      identifier
18816      asm-label-list , identifier
18817
18818    Returns a TREE_LIST, indicating the labels in the order that they
18819    appeared.  The TREE_VALUE of each node is a label.  */
18820
18821 static tree
18822 cp_parser_asm_label_list (cp_parser* parser)
18823 {
18824   tree labels = NULL_TREE;
18825
18826   while (true)
18827     {
18828       tree identifier, label, name;
18829
18830       /* Look for the identifier.  */
18831       identifier = cp_parser_identifier (parser);
18832       if (!error_operand_p (identifier))
18833         {
18834           label = lookup_label (identifier);
18835           if (TREE_CODE (label) == LABEL_DECL)
18836             {
18837               TREE_USED (label) = 1;
18838               check_goto (label);
18839               name = build_string (IDENTIFIER_LENGTH (identifier),
18840                                    IDENTIFIER_POINTER (identifier));
18841               labels = tree_cons (name, label, labels);
18842             }
18843         }
18844       /* If the next token is not a `,', then the list is
18845          complete.  */
18846       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
18847         break;
18848       /* Consume the `,' token.  */
18849       cp_lexer_consume_token (parser->lexer);
18850     }
18851
18852   return nreverse (labels);
18853 }
18854
18855 /* Parse an (optional) series of attributes.
18856
18857    attributes:
18858      attributes attribute
18859
18860    attribute:
18861      __attribute__ (( attribute-list [opt] ))
18862
18863    The return value is as for cp_parser_attribute_list.  */
18864
18865 static tree
18866 cp_parser_attributes_opt (cp_parser* parser)
18867 {
18868   tree attributes = NULL_TREE;
18869
18870   while (true)
18871     {
18872       cp_token *token;
18873       tree attribute_list;
18874
18875       /* Peek at the next token.  */
18876       token = cp_lexer_peek_token (parser->lexer);
18877       /* If it's not `__attribute__', then we're done.  */
18878       if (token->keyword != RID_ATTRIBUTE)
18879         break;
18880
18881       /* Consume the `__attribute__' keyword.  */
18882       cp_lexer_consume_token (parser->lexer);
18883       /* Look for the two `(' tokens.  */
18884       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
18885       cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
18886
18887       /* Peek at the next token.  */
18888       token = cp_lexer_peek_token (parser->lexer);
18889       if (token->type != CPP_CLOSE_PAREN)
18890         /* Parse the attribute-list.  */
18891         attribute_list = cp_parser_attribute_list (parser);
18892       else
18893         /* If the next token is a `)', then there is no attribute
18894            list.  */
18895         attribute_list = NULL;
18896
18897       /* Look for the two `)' tokens.  */
18898       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
18899       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
18900
18901       /* Add these new attributes to the list.  */
18902       attributes = chainon (attributes, attribute_list);
18903     }
18904
18905   return attributes;
18906 }
18907
18908 /* Parse an attribute-list.
18909
18910    attribute-list:
18911      attribute
18912      attribute-list , attribute
18913
18914    attribute:
18915      identifier
18916      identifier ( identifier )
18917      identifier ( identifier , expression-list )
18918      identifier ( expression-list )
18919
18920    Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
18921    to an attribute.  The TREE_PURPOSE of each node is the identifier
18922    indicating which attribute is in use.  The TREE_VALUE represents
18923    the arguments, if any.  */
18924
18925 static tree
18926 cp_parser_attribute_list (cp_parser* parser)
18927 {
18928   tree attribute_list = NULL_TREE;
18929   bool save_translate_strings_p = parser->translate_strings_p;
18930
18931   parser->translate_strings_p = false;
18932   while (true)
18933     {
18934       cp_token *token;
18935       tree identifier;
18936       tree attribute;
18937
18938       /* Look for the identifier.  We also allow keywords here; for
18939          example `__attribute__ ((const))' is legal.  */
18940       token = cp_lexer_peek_token (parser->lexer);
18941       if (token->type == CPP_NAME
18942           || token->type == CPP_KEYWORD)
18943         {
18944           tree arguments = NULL_TREE;
18945
18946           /* Consume the token.  */
18947           token = cp_lexer_consume_token (parser->lexer);
18948
18949           /* Save away the identifier that indicates which attribute
18950              this is.  */
18951           identifier = (token->type == CPP_KEYWORD) 
18952             /* For keywords, use the canonical spelling, not the
18953                parsed identifier.  */
18954             ? ridpointers[(int) token->keyword]
18955             : token->u.value;
18956           
18957           attribute = build_tree_list (identifier, NULL_TREE);
18958
18959           /* Peek at the next token.  */
18960           token = cp_lexer_peek_token (parser->lexer);
18961           /* If it's an `(', then parse the attribute arguments.  */
18962           if (token->type == CPP_OPEN_PAREN)
18963             {
18964               VEC(tree,gc) *vec;
18965               int attr_flag = (attribute_takes_identifier_p (identifier)
18966                                ? id_attr : normal_attr);
18967               vec = cp_parser_parenthesized_expression_list
18968                     (parser, attr_flag, /*cast_p=*/false,
18969                      /*allow_expansion_p=*/false,
18970                      /*non_constant_p=*/NULL);
18971               if (vec == NULL)
18972                 arguments = error_mark_node;
18973               else
18974                 {
18975                   arguments = build_tree_list_vec (vec);
18976                   release_tree_vector (vec);
18977                 }
18978               /* Save the arguments away.  */
18979               TREE_VALUE (attribute) = arguments;
18980             }
18981
18982           if (arguments != error_mark_node)
18983             {
18984               /* Add this attribute to the list.  */
18985               TREE_CHAIN (attribute) = attribute_list;
18986               attribute_list = attribute;
18987             }
18988
18989           token = cp_lexer_peek_token (parser->lexer);
18990         }
18991       /* Now, look for more attributes.  If the next token isn't a
18992          `,', we're done.  */
18993       if (token->type != CPP_COMMA)
18994         break;
18995
18996       /* Consume the comma and keep going.  */
18997       cp_lexer_consume_token (parser->lexer);
18998     }
18999   parser->translate_strings_p = save_translate_strings_p;
19000
19001   /* We built up the list in reverse order.  */
19002   return nreverse (attribute_list);
19003 }
19004
19005 /* Parse an optional `__extension__' keyword.  Returns TRUE if it is
19006    present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
19007    current value of the PEDANTIC flag, regardless of whether or not
19008    the `__extension__' keyword is present.  The caller is responsible
19009    for restoring the value of the PEDANTIC flag.  */
19010
19011 static bool
19012 cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
19013 {
19014   /* Save the old value of the PEDANTIC flag.  */
19015   *saved_pedantic = pedantic;
19016
19017   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
19018     {
19019       /* Consume the `__extension__' token.  */
19020       cp_lexer_consume_token (parser->lexer);
19021       /* We're not being pedantic while the `__extension__' keyword is
19022          in effect.  */
19023       pedantic = 0;
19024
19025       return true;
19026     }
19027
19028   return false;
19029 }
19030
19031 /* Parse a label declaration.
19032
19033    label-declaration:
19034      __label__ label-declarator-seq ;
19035
19036    label-declarator-seq:
19037      identifier , label-declarator-seq
19038      identifier  */
19039
19040 static void
19041 cp_parser_label_declaration (cp_parser* parser)
19042 {
19043   /* Look for the `__label__' keyword.  */
19044   cp_parser_require_keyword (parser, RID_LABEL, RT_LABEL);
19045
19046   while (true)
19047     {
19048       tree identifier;
19049
19050       /* Look for an identifier.  */
19051       identifier = cp_parser_identifier (parser);
19052       /* If we failed, stop.  */
19053       if (identifier == error_mark_node)
19054         break;
19055       /* Declare it as a label.  */
19056       finish_label_decl (identifier);
19057       /* If the next token is a `;', stop.  */
19058       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
19059         break;
19060       /* Look for the `,' separating the label declarations.  */
19061       cp_parser_require (parser, CPP_COMMA, RT_COMMA);
19062     }
19063
19064   /* Look for the final `;'.  */
19065   cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
19066 }
19067
19068 /* Support Functions */
19069
19070 /* Looks up NAME in the current scope, as given by PARSER->SCOPE.
19071    NAME should have one of the representations used for an
19072    id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
19073    is returned.  If PARSER->SCOPE is a dependent type, then a
19074    SCOPE_REF is returned.
19075
19076    If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
19077    returned; the name was already resolved when the TEMPLATE_ID_EXPR
19078    was formed.  Abstractly, such entities should not be passed to this
19079    function, because they do not need to be looked up, but it is
19080    simpler to check for this special case here, rather than at the
19081    call-sites.
19082
19083    In cases not explicitly covered above, this function returns a
19084    DECL, OVERLOAD, or baselink representing the result of the lookup.
19085    If there was no entity with the indicated NAME, the ERROR_MARK_NODE
19086    is returned.
19087
19088    If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
19089    (e.g., "struct") that was used.  In that case bindings that do not
19090    refer to types are ignored.
19091
19092    If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
19093    ignored.
19094
19095    If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
19096    are ignored.
19097
19098    If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
19099    types.
19100
19101    If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
19102    TREE_LIST of candidates if name-lookup results in an ambiguity, and
19103    NULL_TREE otherwise.  */
19104
19105 static tree
19106 cp_parser_lookup_name (cp_parser *parser, tree name,
19107                        enum tag_types tag_type,
19108                        bool is_template,
19109                        bool is_namespace,
19110                        bool check_dependency,
19111                        tree *ambiguous_decls,
19112                        location_t name_location)
19113 {
19114   int flags = 0;
19115   tree decl;
19116   tree object_type = parser->context->object_type;
19117
19118   if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
19119     flags |= LOOKUP_COMPLAIN;
19120
19121   /* Assume that the lookup will be unambiguous.  */
19122   if (ambiguous_decls)
19123     *ambiguous_decls = NULL_TREE;
19124
19125   /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
19126      no longer valid.  Note that if we are parsing tentatively, and
19127      the parse fails, OBJECT_TYPE will be automatically restored.  */
19128   parser->context->object_type = NULL_TREE;
19129
19130   if (name == error_mark_node)
19131     return error_mark_node;
19132
19133   /* A template-id has already been resolved; there is no lookup to
19134      do.  */
19135   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
19136     return name;
19137   if (BASELINK_P (name))
19138     {
19139       gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
19140                   == TEMPLATE_ID_EXPR);
19141       return name;
19142     }
19143
19144   /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
19145      it should already have been checked to make sure that the name
19146      used matches the type being destroyed.  */
19147   if (TREE_CODE (name) == BIT_NOT_EXPR)
19148     {
19149       tree type;
19150
19151       /* Figure out to which type this destructor applies.  */
19152       if (parser->scope)
19153         type = parser->scope;
19154       else if (object_type)
19155         type = object_type;
19156       else
19157         type = current_class_type;
19158       /* If that's not a class type, there is no destructor.  */
19159       if (!type || !CLASS_TYPE_P (type))
19160         return error_mark_node;
19161       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
19162         lazily_declare_fn (sfk_destructor, type);
19163       if (!CLASSTYPE_DESTRUCTORS (type))
19164           return error_mark_node;
19165       /* If it was a class type, return the destructor.  */
19166       return CLASSTYPE_DESTRUCTORS (type);
19167     }
19168
19169   /* By this point, the NAME should be an ordinary identifier.  If
19170      the id-expression was a qualified name, the qualifying scope is
19171      stored in PARSER->SCOPE at this point.  */
19172   gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
19173
19174   /* Perform the lookup.  */
19175   if (parser->scope)
19176     {
19177       bool dependent_p;
19178
19179       if (parser->scope == error_mark_node)
19180         return error_mark_node;
19181
19182       /* If the SCOPE is dependent, the lookup must be deferred until
19183          the template is instantiated -- unless we are explicitly
19184          looking up names in uninstantiated templates.  Even then, we
19185          cannot look up the name if the scope is not a class type; it
19186          might, for example, be a template type parameter.  */
19187       dependent_p = (TYPE_P (parser->scope)
19188                      && dependent_scope_p (parser->scope));
19189       if ((check_dependency || !CLASS_TYPE_P (parser->scope))
19190           && dependent_p)
19191         /* Defer lookup.  */
19192         decl = error_mark_node;
19193       else
19194         {
19195           tree pushed_scope = NULL_TREE;
19196
19197           /* If PARSER->SCOPE is a dependent type, then it must be a
19198              class type, and we must not be checking dependencies;
19199              otherwise, we would have processed this lookup above.  So
19200              that PARSER->SCOPE is not considered a dependent base by
19201              lookup_member, we must enter the scope here.  */
19202           if (dependent_p)
19203             pushed_scope = push_scope (parser->scope);
19204
19205           /* If the PARSER->SCOPE is a template specialization, it
19206              may be instantiated during name lookup.  In that case,
19207              errors may be issued.  Even if we rollback the current
19208              tentative parse, those errors are valid.  */
19209           decl = lookup_qualified_name (parser->scope, name,
19210                                         tag_type != none_type,
19211                                         /*complain=*/true);
19212
19213           /* 3.4.3.1: In a lookup in which the constructor is an acceptable
19214              lookup result and the nested-name-specifier nominates a class C:
19215                * if the name specified after the nested-name-specifier, when
19216                looked up in C, is the injected-class-name of C (Clause 9), or
19217                * if the name specified after the nested-name-specifier is the
19218                same as the identifier or the simple-template-id's template-
19219                name in the last component of the nested-name-specifier,
19220              the name is instead considered to name the constructor of
19221              class C. [ Note: for example, the constructor is not an
19222              acceptable lookup result in an elaborated-type-specifier so
19223              the constructor would not be used in place of the
19224              injected-class-name. --end note ] Such a constructor name
19225              shall be used only in the declarator-id of a declaration that
19226              names a constructor or in a using-declaration.  */
19227           if (tag_type == none_type
19228               && DECL_SELF_REFERENCE_P (decl)
19229               && same_type_p (DECL_CONTEXT (decl), parser->scope))
19230             decl = lookup_qualified_name (parser->scope, ctor_identifier,
19231                                           tag_type != none_type,
19232                                           /*complain=*/true);
19233
19234           /* If we have a single function from a using decl, pull it out.  */
19235           if (TREE_CODE (decl) == OVERLOAD
19236               && !really_overloaded_fn (decl))
19237             decl = OVL_FUNCTION (decl);
19238
19239           if (pushed_scope)
19240             pop_scope (pushed_scope);
19241         }
19242
19243       /* If the scope is a dependent type and either we deferred lookup or
19244          we did lookup but didn't find the name, rememeber the name.  */
19245       if (decl == error_mark_node && TYPE_P (parser->scope)
19246           && dependent_type_p (parser->scope))
19247         {
19248           if (tag_type)
19249             {
19250               tree type;
19251
19252               /* The resolution to Core Issue 180 says that `struct
19253                  A::B' should be considered a type-name, even if `A'
19254                  is dependent.  */
19255               type = make_typename_type (parser->scope, name, tag_type,
19256                                          /*complain=*/tf_error);
19257               decl = TYPE_NAME (type);
19258             }
19259           else if (is_template
19260                    && (cp_parser_next_token_ends_template_argument_p (parser)
19261                        || cp_lexer_next_token_is (parser->lexer,
19262                                                   CPP_CLOSE_PAREN)))
19263             decl = make_unbound_class_template (parser->scope,
19264                                                 name, NULL_TREE,
19265                                                 /*complain=*/tf_error);
19266           else
19267             decl = build_qualified_name (/*type=*/NULL_TREE,
19268                                          parser->scope, name,
19269                                          is_template);
19270         }
19271       parser->qualifying_scope = parser->scope;
19272       parser->object_scope = NULL_TREE;
19273     }
19274   else if (object_type)
19275     {
19276       tree object_decl = NULL_TREE;
19277       /* Look up the name in the scope of the OBJECT_TYPE, unless the
19278          OBJECT_TYPE is not a class.  */
19279       if (CLASS_TYPE_P (object_type))
19280         /* If the OBJECT_TYPE is a template specialization, it may
19281            be instantiated during name lookup.  In that case, errors
19282            may be issued.  Even if we rollback the current tentative
19283            parse, those errors are valid.  */
19284         object_decl = lookup_member (object_type,
19285                                      name,
19286                                      /*protect=*/0,
19287                                      tag_type != none_type);
19288       /* Look it up in the enclosing context, too.  */
19289       decl = lookup_name_real (name, tag_type != none_type,
19290                                /*nonclass=*/0,
19291                                /*block_p=*/true, is_namespace, flags);
19292       parser->object_scope = object_type;
19293       parser->qualifying_scope = NULL_TREE;
19294       if (object_decl)
19295         decl = object_decl;
19296     }
19297   else
19298     {
19299       decl = lookup_name_real (name, tag_type != none_type,
19300                                /*nonclass=*/0,
19301                                /*block_p=*/true, is_namespace, flags);
19302       parser->qualifying_scope = NULL_TREE;
19303       parser->object_scope = NULL_TREE;
19304     }
19305
19306   /* If the lookup failed, let our caller know.  */
19307   if (!decl || decl == error_mark_node)
19308     return error_mark_node;
19309
19310   /* Pull out the template from an injected-class-name (or multiple).  */
19311   if (is_template)
19312     decl = maybe_get_template_decl_from_type_decl (decl);
19313
19314   /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
19315   if (TREE_CODE (decl) == TREE_LIST)
19316     {
19317       if (ambiguous_decls)
19318         *ambiguous_decls = decl;
19319       /* The error message we have to print is too complicated for
19320          cp_parser_error, so we incorporate its actions directly.  */
19321       if (!cp_parser_simulate_error (parser))
19322         {
19323           error_at (name_location, "reference to %qD is ambiguous",
19324                     name);
19325           print_candidates (decl);
19326         }
19327       return error_mark_node;
19328     }
19329
19330   gcc_assert (DECL_P (decl)
19331               || TREE_CODE (decl) == OVERLOAD
19332               || TREE_CODE (decl) == SCOPE_REF
19333               || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
19334               || BASELINK_P (decl));
19335
19336   /* If we have resolved the name of a member declaration, check to
19337      see if the declaration is accessible.  When the name resolves to
19338      set of overloaded functions, accessibility is checked when
19339      overload resolution is done.
19340
19341      During an explicit instantiation, access is not checked at all,
19342      as per [temp.explicit].  */
19343   if (DECL_P (decl))
19344     check_accessibility_of_qualified_id (decl, object_type, parser->scope);
19345
19346   return decl;
19347 }
19348
19349 /* Like cp_parser_lookup_name, but for use in the typical case where
19350    CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
19351    IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
19352
19353 static tree
19354 cp_parser_lookup_name_simple (cp_parser* parser, tree name, location_t location)
19355 {
19356   return cp_parser_lookup_name (parser, name,
19357                                 none_type,
19358                                 /*is_template=*/false,
19359                                 /*is_namespace=*/false,
19360                                 /*check_dependency=*/true,
19361                                 /*ambiguous_decls=*/NULL,
19362                                 location);
19363 }
19364
19365 /* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
19366    the current context, return the TYPE_DECL.  If TAG_NAME_P is
19367    true, the DECL indicates the class being defined in a class-head,
19368    or declared in an elaborated-type-specifier.
19369
19370    Otherwise, return DECL.  */
19371
19372 static tree
19373 cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
19374 {
19375   /* If the TEMPLATE_DECL is being declared as part of a class-head,
19376      the translation from TEMPLATE_DECL to TYPE_DECL occurs:
19377
19378        struct A {
19379          template <typename T> struct B;
19380        };
19381
19382        template <typename T> struct A::B {};
19383
19384      Similarly, in an elaborated-type-specifier:
19385
19386        namespace N { struct X{}; }
19387
19388        struct A {
19389          template <typename T> friend struct N::X;
19390        };
19391
19392      However, if the DECL refers to a class type, and we are in
19393      the scope of the class, then the name lookup automatically
19394      finds the TYPE_DECL created by build_self_reference rather
19395      than a TEMPLATE_DECL.  For example, in:
19396
19397        template <class T> struct S {
19398          S s;
19399        };
19400
19401      there is no need to handle such case.  */
19402
19403   if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
19404     return DECL_TEMPLATE_RESULT (decl);
19405
19406   return decl;
19407 }
19408
19409 /* If too many, or too few, template-parameter lists apply to the
19410    declarator, issue an error message.  Returns TRUE if all went well,
19411    and FALSE otherwise.  */
19412
19413 static bool
19414 cp_parser_check_declarator_template_parameters (cp_parser* parser,
19415                                                 cp_declarator *declarator,
19416                                                 location_t declarator_location)
19417 {
19418   unsigned num_templates;
19419
19420   /* We haven't seen any classes that involve template parameters yet.  */
19421   num_templates = 0;
19422
19423   switch (declarator->kind)
19424     {
19425     case cdk_id:
19426       if (declarator->u.id.qualifying_scope)
19427         {
19428           tree scope;
19429
19430           scope = declarator->u.id.qualifying_scope;
19431
19432           while (scope && CLASS_TYPE_P (scope))
19433             {
19434               /* You're supposed to have one `template <...>'
19435                  for every template class, but you don't need one
19436                  for a full specialization.  For example:
19437
19438                  template <class T> struct S{};
19439                  template <> struct S<int> { void f(); };
19440                  void S<int>::f () {}
19441
19442                  is correct; there shouldn't be a `template <>' for
19443                  the definition of `S<int>::f'.  */
19444               if (!CLASSTYPE_TEMPLATE_INFO (scope))
19445                 /* If SCOPE does not have template information of any
19446                    kind, then it is not a template, nor is it nested
19447                    within a template.  */
19448                 break;
19449               if (explicit_class_specialization_p (scope))
19450                 break;
19451               if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
19452                 ++num_templates;
19453
19454               scope = TYPE_CONTEXT (scope);
19455             }
19456         }
19457       else if (TREE_CODE (declarator->u.id.unqualified_name)
19458                == TEMPLATE_ID_EXPR)
19459         /* If the DECLARATOR has the form `X<y>' then it uses one
19460            additional level of template parameters.  */
19461         ++num_templates;
19462
19463       return cp_parser_check_template_parameters 
19464         (parser, num_templates, declarator_location, declarator);
19465
19466
19467     case cdk_function:
19468     case cdk_array:
19469     case cdk_pointer:
19470     case cdk_reference:
19471     case cdk_ptrmem:
19472       return (cp_parser_check_declarator_template_parameters
19473               (parser, declarator->declarator, declarator_location));
19474
19475     case cdk_error:
19476       return true;
19477
19478     default:
19479       gcc_unreachable ();
19480     }
19481   return false;
19482 }
19483
19484 /* NUM_TEMPLATES were used in the current declaration.  If that is
19485    invalid, return FALSE and issue an error messages.  Otherwise,
19486    return TRUE.  If DECLARATOR is non-NULL, then we are checking a
19487    declarator and we can print more accurate diagnostics.  */
19488
19489 static bool
19490 cp_parser_check_template_parameters (cp_parser* parser,
19491                                      unsigned num_templates,
19492                                      location_t location,
19493                                      cp_declarator *declarator)
19494 {
19495   /* If there are the same number of template classes and parameter
19496      lists, that's OK.  */
19497   if (parser->num_template_parameter_lists == num_templates)
19498     return true;
19499   /* If there are more, but only one more, then we are referring to a
19500      member template.  That's OK too.  */
19501   if (parser->num_template_parameter_lists == num_templates + 1)
19502     return true;
19503   /* If there are more template classes than parameter lists, we have
19504      something like:
19505
19506        template <class T> void S<T>::R<T>::f ();  */
19507   if (parser->num_template_parameter_lists < num_templates)
19508     {
19509       if (declarator && !current_function_decl)
19510         error_at (location, "specializing member %<%T::%E%> "
19511                   "requires %<template<>%> syntax", 
19512                   declarator->u.id.qualifying_scope,
19513                   declarator->u.id.unqualified_name);
19514       else if (declarator)
19515         error_at (location, "invalid declaration of %<%T::%E%>",
19516                   declarator->u.id.qualifying_scope,
19517                   declarator->u.id.unqualified_name);
19518       else 
19519         error_at (location, "too few template-parameter-lists");
19520       return false;
19521     }
19522   /* Otherwise, there are too many template parameter lists.  We have
19523      something like:
19524
19525      template <class T> template <class U> void S::f();  */
19526   error_at (location, "too many template-parameter-lists");
19527   return false;
19528 }
19529
19530 /* Parse an optional `::' token indicating that the following name is
19531    from the global namespace.  If so, PARSER->SCOPE is set to the
19532    GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
19533    unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
19534    Returns the new value of PARSER->SCOPE, if the `::' token is
19535    present, and NULL_TREE otherwise.  */
19536
19537 static tree
19538 cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
19539 {
19540   cp_token *token;
19541
19542   /* Peek at the next token.  */
19543   token = cp_lexer_peek_token (parser->lexer);
19544   /* If we're looking at a `::' token then we're starting from the
19545      global namespace, not our current location.  */
19546   if (token->type == CPP_SCOPE)
19547     {
19548       /* Consume the `::' token.  */
19549       cp_lexer_consume_token (parser->lexer);
19550       /* Set the SCOPE so that we know where to start the lookup.  */
19551       parser->scope = global_namespace;
19552       parser->qualifying_scope = global_namespace;
19553       parser->object_scope = NULL_TREE;
19554
19555       return parser->scope;
19556     }
19557   else if (!current_scope_valid_p)
19558     {
19559       parser->scope = NULL_TREE;
19560       parser->qualifying_scope = NULL_TREE;
19561       parser->object_scope = NULL_TREE;
19562     }
19563
19564   return NULL_TREE;
19565 }
19566
19567 /* Returns TRUE if the upcoming token sequence is the start of a
19568    constructor declarator.  If FRIEND_P is true, the declarator is
19569    preceded by the `friend' specifier.  */
19570
19571 static bool
19572 cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
19573 {
19574   bool constructor_p;
19575   tree nested_name_specifier;
19576   cp_token *next_token;
19577
19578   /* The common case is that this is not a constructor declarator, so
19579      try to avoid doing lots of work if at all possible.  It's not
19580      valid declare a constructor at function scope.  */
19581   if (parser->in_function_body)
19582     return false;
19583   /* And only certain tokens can begin a constructor declarator.  */
19584   next_token = cp_lexer_peek_token (parser->lexer);
19585   if (next_token->type != CPP_NAME
19586       && next_token->type != CPP_SCOPE
19587       && next_token->type != CPP_NESTED_NAME_SPECIFIER
19588       && next_token->type != CPP_TEMPLATE_ID)
19589     return false;
19590
19591   /* Parse tentatively; we are going to roll back all of the tokens
19592      consumed here.  */
19593   cp_parser_parse_tentatively (parser);
19594   /* Assume that we are looking at a constructor declarator.  */
19595   constructor_p = true;
19596
19597   /* Look for the optional `::' operator.  */
19598   cp_parser_global_scope_opt (parser,
19599                               /*current_scope_valid_p=*/false);
19600   /* Look for the nested-name-specifier.  */
19601   nested_name_specifier
19602     = (cp_parser_nested_name_specifier_opt (parser,
19603                                             /*typename_keyword_p=*/false,
19604                                             /*check_dependency_p=*/false,
19605                                             /*type_p=*/false,
19606                                             /*is_declaration=*/false));
19607   /* Outside of a class-specifier, there must be a
19608      nested-name-specifier.  */
19609   if (!nested_name_specifier &&
19610       (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
19611        || friend_p))
19612     constructor_p = false;
19613   else if (nested_name_specifier == error_mark_node)
19614     constructor_p = false;
19615
19616   /* If we have a class scope, this is easy; DR 147 says that S::S always
19617      names the constructor, and no other qualified name could.  */
19618   if (constructor_p && nested_name_specifier
19619       && CLASS_TYPE_P (nested_name_specifier))
19620     {
19621       tree id = cp_parser_unqualified_id (parser,
19622                                           /*template_keyword_p=*/false,
19623                                           /*check_dependency_p=*/false,
19624                                           /*declarator_p=*/true,
19625                                           /*optional_p=*/false);
19626       if (is_overloaded_fn (id))
19627         id = DECL_NAME (get_first_fn (id));
19628       if (!constructor_name_p (id, nested_name_specifier))
19629         constructor_p = false;
19630     }
19631   /* If we still think that this might be a constructor-declarator,
19632      look for a class-name.  */
19633   else if (constructor_p)
19634     {
19635       /* If we have:
19636
19637            template <typename T> struct S {
19638              S();
19639            };
19640
19641          we must recognize that the nested `S' names a class.  */
19642       tree type_decl;
19643       type_decl = cp_parser_class_name (parser,
19644                                         /*typename_keyword_p=*/false,
19645                                         /*template_keyword_p=*/false,
19646                                         none_type,
19647                                         /*check_dependency_p=*/false,
19648                                         /*class_head_p=*/false,
19649                                         /*is_declaration=*/false);
19650       /* If there was no class-name, then this is not a constructor.  */
19651       constructor_p = !cp_parser_error_occurred (parser);
19652
19653       /* If we're still considering a constructor, we have to see a `(',
19654          to begin the parameter-declaration-clause, followed by either a
19655          `)', an `...', or a decl-specifier.  We need to check for a
19656          type-specifier to avoid being fooled into thinking that:
19657
19658            S (f) (int);
19659
19660          is a constructor.  (It is actually a function named `f' that
19661          takes one parameter (of type `int') and returns a value of type
19662          `S'.  */
19663       if (constructor_p
19664           && !cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
19665         constructor_p = false;
19666
19667       if (constructor_p
19668           && cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
19669           && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
19670           /* A parameter declaration begins with a decl-specifier,
19671              which is either the "attribute" keyword, a storage class
19672              specifier, or (usually) a type-specifier.  */
19673           && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
19674         {
19675           tree type;
19676           tree pushed_scope = NULL_TREE;
19677           unsigned saved_num_template_parameter_lists;
19678
19679           /* Names appearing in the type-specifier should be looked up
19680              in the scope of the class.  */
19681           if (current_class_type)
19682             type = NULL_TREE;
19683           else
19684             {
19685               type = TREE_TYPE (type_decl);
19686               if (TREE_CODE (type) == TYPENAME_TYPE)
19687                 {
19688                   type = resolve_typename_type (type,
19689                                                 /*only_current_p=*/false);
19690                   if (TREE_CODE (type) == TYPENAME_TYPE)
19691                     {
19692                       cp_parser_abort_tentative_parse (parser);
19693                       return false;
19694                     }
19695                 }
19696               pushed_scope = push_scope (type);
19697             }
19698
19699           /* Inside the constructor parameter list, surrounding
19700              template-parameter-lists do not apply.  */
19701           saved_num_template_parameter_lists
19702             = parser->num_template_parameter_lists;
19703           parser->num_template_parameter_lists = 0;
19704
19705           /* Look for the type-specifier.  */
19706           cp_parser_type_specifier (parser,
19707                                     CP_PARSER_FLAGS_NONE,
19708                                     /*decl_specs=*/NULL,
19709                                     /*is_declarator=*/true,
19710                                     /*declares_class_or_enum=*/NULL,
19711                                     /*is_cv_qualifier=*/NULL);
19712
19713           parser->num_template_parameter_lists
19714             = saved_num_template_parameter_lists;
19715
19716           /* Leave the scope of the class.  */
19717           if (pushed_scope)
19718             pop_scope (pushed_scope);
19719
19720           constructor_p = !cp_parser_error_occurred (parser);
19721         }
19722     }
19723
19724   /* We did not really want to consume any tokens.  */
19725   cp_parser_abort_tentative_parse (parser);
19726
19727   return constructor_p;
19728 }
19729
19730 /* Parse the definition of the function given by the DECL_SPECIFIERS,
19731    ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
19732    they must be performed once we are in the scope of the function.
19733
19734    Returns the function defined.  */
19735
19736 static tree
19737 cp_parser_function_definition_from_specifiers_and_declarator
19738   (cp_parser* parser,
19739    cp_decl_specifier_seq *decl_specifiers,
19740    tree attributes,
19741    const cp_declarator *declarator)
19742 {
19743   tree fn;
19744   bool success_p;
19745
19746   /* Begin the function-definition.  */
19747   success_p = start_function (decl_specifiers, declarator, attributes);
19748
19749   /* The things we're about to see are not directly qualified by any
19750      template headers we've seen thus far.  */
19751   reset_specialization ();
19752
19753   /* If there were names looked up in the decl-specifier-seq that we
19754      did not check, check them now.  We must wait until we are in the
19755      scope of the function to perform the checks, since the function
19756      might be a friend.  */
19757   perform_deferred_access_checks ();
19758
19759   if (!success_p)
19760     {
19761       /* Skip the entire function.  */
19762       cp_parser_skip_to_end_of_block_or_statement (parser);
19763       fn = error_mark_node;
19764     }
19765   else if (DECL_INITIAL (current_function_decl) != error_mark_node)
19766     {
19767       /* Seen already, skip it.  An error message has already been output.  */
19768       cp_parser_skip_to_end_of_block_or_statement (parser);
19769       fn = current_function_decl;
19770       current_function_decl = NULL_TREE;
19771       /* If this is a function from a class, pop the nested class.  */
19772       if (current_class_name)
19773         pop_nested_class ();
19774     }
19775   else
19776     {
19777       timevar_id_t tv;
19778       if (DECL_DECLARED_INLINE_P (current_function_decl))
19779         tv = TV_PARSE_INLINE;
19780       else
19781         tv = TV_PARSE_FUNC;
19782       timevar_push (tv);
19783       fn = cp_parser_function_definition_after_declarator (parser,
19784                                                          /*inline_p=*/false);
19785       timevar_pop (tv);
19786     }
19787
19788   return fn;
19789 }
19790
19791 /* Parse the part of a function-definition that follows the
19792    declarator.  INLINE_P is TRUE iff this function is an inline
19793    function defined within a class-specifier.
19794
19795    Returns the function defined.  */
19796
19797 static tree
19798 cp_parser_function_definition_after_declarator (cp_parser* parser,
19799                                                 bool inline_p)
19800 {
19801   tree fn;
19802   bool ctor_initializer_p = false;
19803   bool saved_in_unbraced_linkage_specification_p;
19804   bool saved_in_function_body;
19805   unsigned saved_num_template_parameter_lists;
19806   cp_token *token;
19807
19808   saved_in_function_body = parser->in_function_body;
19809   parser->in_function_body = true;
19810   /* If the next token is `return', then the code may be trying to
19811      make use of the "named return value" extension that G++ used to
19812      support.  */
19813   token = cp_lexer_peek_token (parser->lexer);
19814   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
19815     {
19816       /* Consume the `return' keyword.  */
19817       cp_lexer_consume_token (parser->lexer);
19818       /* Look for the identifier that indicates what value is to be
19819          returned.  */
19820       cp_parser_identifier (parser);
19821       /* Issue an error message.  */
19822       error_at (token->location,
19823                 "named return values are no longer supported");
19824       /* Skip tokens until we reach the start of the function body.  */
19825       while (true)
19826         {
19827           cp_token *token = cp_lexer_peek_token (parser->lexer);
19828           if (token->type == CPP_OPEN_BRACE
19829               || token->type == CPP_EOF
19830               || token->type == CPP_PRAGMA_EOL)
19831             break;
19832           cp_lexer_consume_token (parser->lexer);
19833         }
19834     }
19835   /* The `extern' in `extern "C" void f () { ... }' does not apply to
19836      anything declared inside `f'.  */
19837   saved_in_unbraced_linkage_specification_p
19838     = parser->in_unbraced_linkage_specification_p;
19839   parser->in_unbraced_linkage_specification_p = false;
19840   /* Inside the function, surrounding template-parameter-lists do not
19841      apply.  */
19842   saved_num_template_parameter_lists
19843     = parser->num_template_parameter_lists;
19844   parser->num_template_parameter_lists = 0;
19845
19846   start_lambda_scope (current_function_decl);
19847
19848   /* If the next token is `try', then we are looking at a
19849      function-try-block.  */
19850   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
19851     ctor_initializer_p = cp_parser_function_try_block (parser);
19852   /* A function-try-block includes the function-body, so we only do
19853      this next part if we're not processing a function-try-block.  */
19854   else
19855     ctor_initializer_p
19856       = cp_parser_ctor_initializer_opt_and_function_body (parser);
19857
19858   finish_lambda_scope ();
19859
19860   /* Finish the function.  */
19861   fn = finish_function ((ctor_initializer_p ? 1 : 0) |
19862                         (inline_p ? 2 : 0));
19863   /* Generate code for it, if necessary.  */
19864   expand_or_defer_fn (fn);
19865   /* Restore the saved values.  */
19866   parser->in_unbraced_linkage_specification_p
19867     = saved_in_unbraced_linkage_specification_p;
19868   parser->num_template_parameter_lists
19869     = saved_num_template_parameter_lists;
19870   parser->in_function_body = saved_in_function_body;
19871
19872   return fn;
19873 }
19874
19875 /* Parse a template-declaration, assuming that the `export' (and
19876    `extern') keywords, if present, has already been scanned.  MEMBER_P
19877    is as for cp_parser_template_declaration.  */
19878
19879 static void
19880 cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
19881 {
19882   tree decl = NULL_TREE;
19883   VEC (deferred_access_check,gc) *checks;
19884   tree parameter_list;
19885   bool friend_p = false;
19886   bool need_lang_pop;
19887   cp_token *token;
19888
19889   /* Look for the `template' keyword.  */
19890   token = cp_lexer_peek_token (parser->lexer);
19891   if (!cp_parser_require_keyword (parser, RID_TEMPLATE, RT_TEMPLATE))
19892     return;
19893
19894   /* And the `<'.  */
19895   if (!cp_parser_require (parser, CPP_LESS, RT_LESS))
19896     return;
19897   if (at_class_scope_p () && current_function_decl)
19898     {
19899       /* 14.5.2.2 [temp.mem]
19900
19901          A local class shall not have member templates.  */
19902       error_at (token->location,
19903                 "invalid declaration of member template in local class");
19904       cp_parser_skip_to_end_of_block_or_statement (parser);
19905       return;
19906     }
19907   /* [temp]
19908
19909      A template ... shall not have C linkage.  */
19910   if (current_lang_name == lang_name_c)
19911     {
19912       error_at (token->location, "template with C linkage");
19913       /* Give it C++ linkage to avoid confusing other parts of the
19914          front end.  */
19915       push_lang_context (lang_name_cplusplus);
19916       need_lang_pop = true;
19917     }
19918   else
19919     need_lang_pop = false;
19920
19921   /* We cannot perform access checks on the template parameter
19922      declarations until we know what is being declared, just as we
19923      cannot check the decl-specifier list.  */
19924   push_deferring_access_checks (dk_deferred);
19925
19926   /* If the next token is `>', then we have an invalid
19927      specialization.  Rather than complain about an invalid template
19928      parameter, issue an error message here.  */
19929   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
19930     {
19931       cp_parser_error (parser, "invalid explicit specialization");
19932       begin_specialization ();
19933       parameter_list = NULL_TREE;
19934     }
19935   else
19936     {
19937       /* Parse the template parameters.  */
19938       parameter_list = cp_parser_template_parameter_list (parser);
19939       fixup_template_parms ();
19940     }
19941
19942   /* Get the deferred access checks from the parameter list.  These
19943      will be checked once we know what is being declared, as for a
19944      member template the checks must be performed in the scope of the
19945      class containing the member.  */
19946   checks = get_deferred_access_checks ();
19947
19948   /* Look for the `>'.  */
19949   cp_parser_skip_to_end_of_template_parameter_list (parser);
19950   /* We just processed one more parameter list.  */
19951   ++parser->num_template_parameter_lists;
19952   /* If the next token is `template', there are more template
19953      parameters.  */
19954   if (cp_lexer_next_token_is_keyword (parser->lexer,
19955                                       RID_TEMPLATE))
19956     cp_parser_template_declaration_after_export (parser, member_p);
19957   else
19958     {
19959       /* There are no access checks when parsing a template, as we do not
19960          know if a specialization will be a friend.  */
19961       push_deferring_access_checks (dk_no_check);
19962       token = cp_lexer_peek_token (parser->lexer);
19963       decl = cp_parser_single_declaration (parser,
19964                                            checks,
19965                                            member_p,
19966                                            /*explicit_specialization_p=*/false,
19967                                            &friend_p);
19968       pop_deferring_access_checks ();
19969
19970       /* If this is a member template declaration, let the front
19971          end know.  */
19972       if (member_p && !friend_p && decl)
19973         {
19974           if (TREE_CODE (decl) == TYPE_DECL)
19975             cp_parser_check_access_in_redeclaration (decl, token->location);
19976
19977           decl = finish_member_template_decl (decl);
19978         }
19979       else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
19980         make_friend_class (current_class_type, TREE_TYPE (decl),
19981                            /*complain=*/true);
19982     }
19983   /* We are done with the current parameter list.  */
19984   --parser->num_template_parameter_lists;
19985
19986   pop_deferring_access_checks ();
19987
19988   /* Finish up.  */
19989   finish_template_decl (parameter_list);
19990
19991   /* Register member declarations.  */
19992   if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
19993     finish_member_declaration (decl);
19994   /* For the erroneous case of a template with C linkage, we pushed an
19995      implicit C++ linkage scope; exit that scope now.  */
19996   if (need_lang_pop)
19997     pop_lang_context ();
19998   /* If DECL is a function template, we must return to parse it later.
19999      (Even though there is no definition, there might be default
20000      arguments that need handling.)  */
20001   if (member_p && decl
20002       && (TREE_CODE (decl) == FUNCTION_DECL
20003           || DECL_FUNCTION_TEMPLATE_P (decl)))
20004     VEC_safe_push (tree, gc, unparsed_funs_with_definitions, decl);
20005 }
20006
20007 /* Perform the deferred access checks from a template-parameter-list.
20008    CHECKS is a TREE_LIST of access checks, as returned by
20009    get_deferred_access_checks.  */
20010
20011 static void
20012 cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
20013 {
20014   ++processing_template_parmlist;
20015   perform_access_checks (checks);
20016   --processing_template_parmlist;
20017 }
20018
20019 /* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
20020    `function-definition' sequence.  MEMBER_P is true, this declaration
20021    appears in a class scope.
20022
20023    Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
20024    *FRIEND_P is set to TRUE iff the declaration is a friend.  */
20025
20026 static tree
20027 cp_parser_single_declaration (cp_parser* parser,
20028                               VEC (deferred_access_check,gc)* checks,
20029                               bool member_p,
20030                               bool explicit_specialization_p,
20031                               bool* friend_p)
20032 {
20033   int declares_class_or_enum;
20034   tree decl = NULL_TREE;
20035   cp_decl_specifier_seq decl_specifiers;
20036   bool function_definition_p = false;
20037   cp_token *decl_spec_token_start;
20038
20039   /* This function is only used when processing a template
20040      declaration.  */
20041   gcc_assert (innermost_scope_kind () == sk_template_parms
20042               || innermost_scope_kind () == sk_template_spec);
20043
20044   /* Defer access checks until we know what is being declared.  */
20045   push_deferring_access_checks (dk_deferred);
20046
20047   /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
20048      alternative.  */
20049   decl_spec_token_start = cp_lexer_peek_token (parser->lexer);
20050   cp_parser_decl_specifier_seq (parser,
20051                                 CP_PARSER_FLAGS_OPTIONAL,
20052                                 &decl_specifiers,
20053                                 &declares_class_or_enum);
20054   if (friend_p)
20055     *friend_p = cp_parser_friend_p (&decl_specifiers);
20056
20057   /* There are no template typedefs.  */
20058   if (decl_specifiers.specs[(int) ds_typedef])
20059     {
20060       error_at (decl_spec_token_start->location,
20061                 "template declaration of %<typedef%>");
20062       decl = error_mark_node;
20063     }
20064
20065   /* Gather up the access checks that occurred the
20066      decl-specifier-seq.  */
20067   stop_deferring_access_checks ();
20068
20069   /* Check for the declaration of a template class.  */
20070   if (declares_class_or_enum)
20071     {
20072       if (cp_parser_declares_only_class_p (parser))
20073         {
20074           decl = shadow_tag (&decl_specifiers);
20075
20076           /* In this case:
20077
20078                struct C {
20079                  friend template <typename T> struct A<T>::B;
20080                };
20081
20082              A<T>::B will be represented by a TYPENAME_TYPE, and
20083              therefore not recognized by shadow_tag.  */
20084           if (friend_p && *friend_p
20085               && !decl
20086               && decl_specifiers.type
20087               && TYPE_P (decl_specifiers.type))
20088             decl = decl_specifiers.type;
20089
20090           if (decl && decl != error_mark_node)
20091             decl = TYPE_NAME (decl);
20092           else
20093             decl = error_mark_node;
20094
20095           /* Perform access checks for template parameters.  */
20096           cp_parser_perform_template_parameter_access_checks (checks);
20097         }
20098     }
20099
20100   /* Complain about missing 'typename' or other invalid type names.  */
20101   if (!decl_specifiers.any_type_specifiers_p
20102       && cp_parser_parse_and_diagnose_invalid_type_name (parser))
20103     {
20104       /* cp_parser_parse_and_diagnose_invalid_type_name calls
20105          cp_parser_skip_to_end_of_block_or_statement, so don't try to parse
20106          the rest of this declaration.  */
20107       decl = error_mark_node;
20108       goto out;
20109     }
20110
20111   /* If it's not a template class, try for a template function.  If
20112      the next token is a `;', then this declaration does not declare
20113      anything.  But, if there were errors in the decl-specifiers, then
20114      the error might well have come from an attempted class-specifier.
20115      In that case, there's no need to warn about a missing declarator.  */
20116   if (!decl
20117       && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
20118           || decl_specifiers.type != error_mark_node))
20119     {
20120       decl = cp_parser_init_declarator (parser,
20121                                         &decl_specifiers,
20122                                         checks,
20123                                         /*function_definition_allowed_p=*/true,
20124                                         member_p,
20125                                         declares_class_or_enum,
20126                                         &function_definition_p,
20127                                         NULL);
20128
20129     /* 7.1.1-1 [dcl.stc]
20130
20131        A storage-class-specifier shall not be specified in an explicit
20132        specialization...  */
20133     if (decl
20134         && explicit_specialization_p
20135         && decl_specifiers.storage_class != sc_none)
20136       {
20137         error_at (decl_spec_token_start->location,
20138                   "explicit template specialization cannot have a storage class");
20139         decl = error_mark_node;
20140       }
20141     }
20142
20143   /* Look for a trailing `;' after the declaration.  */
20144   if (!function_definition_p
20145       && (decl == error_mark_node
20146           || !cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON)))
20147     cp_parser_skip_to_end_of_block_or_statement (parser);
20148
20149  out:
20150   pop_deferring_access_checks ();
20151
20152   /* Clear any current qualification; whatever comes next is the start
20153      of something new.  */
20154   parser->scope = NULL_TREE;
20155   parser->qualifying_scope = NULL_TREE;
20156   parser->object_scope = NULL_TREE;
20157
20158   return decl;
20159 }
20160
20161 /* Parse a cast-expression that is not the operand of a unary "&".  */
20162
20163 static tree
20164 cp_parser_simple_cast_expression (cp_parser *parser)
20165 {
20166   return cp_parser_cast_expression (parser, /*address_p=*/false,
20167                                     /*cast_p=*/false, NULL);
20168 }
20169
20170 /* Parse a functional cast to TYPE.  Returns an expression
20171    representing the cast.  */
20172
20173 static tree
20174 cp_parser_functional_cast (cp_parser* parser, tree type)
20175 {
20176   VEC(tree,gc) *vec;
20177   tree expression_list;
20178   tree cast;
20179   bool nonconst_p;
20180
20181   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
20182     {
20183       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
20184       expression_list = cp_parser_braced_list (parser, &nonconst_p);
20185       CONSTRUCTOR_IS_DIRECT_INIT (expression_list) = 1;
20186       if (TREE_CODE (type) == TYPE_DECL)
20187         type = TREE_TYPE (type);
20188       return finish_compound_literal (type, expression_list,
20189                                       tf_warning_or_error);
20190     }
20191
20192
20193   vec = cp_parser_parenthesized_expression_list (parser, non_attr,
20194                                                  /*cast_p=*/true,
20195                                                  /*allow_expansion_p=*/true,
20196                                                  /*non_constant_p=*/NULL);
20197   if (vec == NULL)
20198     expression_list = error_mark_node;
20199   else
20200     {
20201       expression_list = build_tree_list_vec (vec);
20202       release_tree_vector (vec);
20203     }
20204
20205   cast = build_functional_cast (type, expression_list,
20206                                 tf_warning_or_error);
20207   /* [expr.const]/1: In an integral constant expression "only type
20208      conversions to integral or enumeration type can be used".  */
20209   if (TREE_CODE (type) == TYPE_DECL)
20210     type = TREE_TYPE (type);
20211   if (cast != error_mark_node
20212       && !cast_valid_in_integral_constant_expression_p (type)
20213       && cp_parser_non_integral_constant_expression (parser,
20214                                                      NIC_CONSTRUCTOR))
20215     return error_mark_node;
20216   return cast;
20217 }
20218
20219 /* Save the tokens that make up the body of a member function defined
20220    in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
20221    already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
20222    specifiers applied to the declaration.  Returns the FUNCTION_DECL
20223    for the member function.  */
20224
20225 static tree
20226 cp_parser_save_member_function_body (cp_parser* parser,
20227                                      cp_decl_specifier_seq *decl_specifiers,
20228                                      cp_declarator *declarator,
20229                                      tree attributes)
20230 {
20231   cp_token *first;
20232   cp_token *last;
20233   tree fn;
20234
20235   /* Create the FUNCTION_DECL.  */
20236   fn = grokmethod (decl_specifiers, declarator, attributes);
20237   /* If something went badly wrong, bail out now.  */
20238   if (fn == error_mark_node)
20239     {
20240       /* If there's a function-body, skip it.  */
20241       if (cp_parser_token_starts_function_definition_p
20242           (cp_lexer_peek_token (parser->lexer)))
20243         cp_parser_skip_to_end_of_block_or_statement (parser);
20244       return error_mark_node;
20245     }
20246
20247   /* Remember it, if there default args to post process.  */
20248   cp_parser_save_default_args (parser, fn);
20249
20250   /* Save away the tokens that make up the body of the
20251      function.  */
20252   first = parser->lexer->next_token;
20253   /* We can have braced-init-list mem-initializers before the fn body.  */
20254   if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
20255     {
20256       cp_lexer_consume_token (parser->lexer);
20257       while (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE)
20258              && cp_lexer_next_token_is_not_keyword (parser->lexer, RID_TRY))
20259         {
20260           /* cache_group will stop after an un-nested { } pair, too.  */
20261           if (cp_parser_cache_group (parser, CPP_CLOSE_PAREN, /*depth=*/0))
20262             break;
20263
20264           /* variadic mem-inits have ... after the ')'.  */
20265           if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
20266             cp_lexer_consume_token (parser->lexer);
20267         }
20268     }
20269   cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
20270   /* Handle function try blocks.  */
20271   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
20272     cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
20273   last = parser->lexer->next_token;
20274
20275   /* Save away the inline definition; we will process it when the
20276      class is complete.  */
20277   DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
20278   DECL_PENDING_INLINE_P (fn) = 1;
20279
20280   /* We need to know that this was defined in the class, so that
20281      friend templates are handled correctly.  */
20282   DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
20283
20284   /* Add FN to the queue of functions to be parsed later.  */
20285   VEC_safe_push (tree, gc, unparsed_funs_with_definitions, fn);
20286
20287   return fn;
20288 }
20289
20290 /* Parse a template-argument-list, as well as the trailing ">" (but
20291    not the opening ">").  See cp_parser_template_argument_list for the
20292    return value.  */
20293
20294 static tree
20295 cp_parser_enclosed_template_argument_list (cp_parser* parser)
20296 {
20297   tree arguments;
20298   tree saved_scope;
20299   tree saved_qualifying_scope;
20300   tree saved_object_scope;
20301   bool saved_greater_than_is_operator_p;
20302   int saved_unevaluated_operand;
20303   int saved_inhibit_evaluation_warnings;
20304
20305   /* [temp.names]
20306
20307      When parsing a template-id, the first non-nested `>' is taken as
20308      the end of the template-argument-list rather than a greater-than
20309      operator.  */
20310   saved_greater_than_is_operator_p
20311     = parser->greater_than_is_operator_p;
20312   parser->greater_than_is_operator_p = false;
20313   /* Parsing the argument list may modify SCOPE, so we save it
20314      here.  */
20315   saved_scope = parser->scope;
20316   saved_qualifying_scope = parser->qualifying_scope;
20317   saved_object_scope = parser->object_scope;
20318   /* We need to evaluate the template arguments, even though this
20319      template-id may be nested within a "sizeof".  */
20320   saved_unevaluated_operand = cp_unevaluated_operand;
20321   cp_unevaluated_operand = 0;
20322   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
20323   c_inhibit_evaluation_warnings = 0;
20324   /* Parse the template-argument-list itself.  */
20325   if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER)
20326       || cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
20327     arguments = NULL_TREE;
20328   else
20329     arguments = cp_parser_template_argument_list (parser);
20330   /* Look for the `>' that ends the template-argument-list. If we find
20331      a '>>' instead, it's probably just a typo.  */
20332   if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
20333     {
20334       if (cxx_dialect != cxx98)
20335         {
20336           /* In C++0x, a `>>' in a template argument list or cast
20337              expression is considered to be two separate `>'
20338              tokens. So, change the current token to a `>', but don't
20339              consume it: it will be consumed later when the outer
20340              template argument list (or cast expression) is parsed.
20341              Note that this replacement of `>' for `>>' is necessary
20342              even if we are parsing tentatively: in the tentative
20343              case, after calling
20344              cp_parser_enclosed_template_argument_list we will always
20345              throw away all of the template arguments and the first
20346              closing `>', either because the template argument list
20347              was erroneous or because we are replacing those tokens
20348              with a CPP_TEMPLATE_ID token.  The second `>' (which will
20349              not have been thrown away) is needed either to close an
20350              outer template argument list or to complete a new-style
20351              cast.  */
20352           cp_token *token = cp_lexer_peek_token (parser->lexer);
20353           token->type = CPP_GREATER;
20354         }
20355       else if (!saved_greater_than_is_operator_p)
20356         {
20357           /* If we're in a nested template argument list, the '>>' has
20358             to be a typo for '> >'. We emit the error message, but we
20359             continue parsing and we push a '>' as next token, so that
20360             the argument list will be parsed correctly.  Note that the
20361             global source location is still on the token before the
20362             '>>', so we need to say explicitly where we want it.  */
20363           cp_token *token = cp_lexer_peek_token (parser->lexer);
20364           error_at (token->location, "%<>>%> should be %<> >%> "
20365                     "within a nested template argument list");
20366
20367           token->type = CPP_GREATER;
20368         }
20369       else
20370         {
20371           /* If this is not a nested template argument list, the '>>'
20372             is a typo for '>'. Emit an error message and continue.
20373             Same deal about the token location, but here we can get it
20374             right by consuming the '>>' before issuing the diagnostic.  */
20375           cp_token *token = cp_lexer_consume_token (parser->lexer);
20376           error_at (token->location,
20377                     "spurious %<>>%>, use %<>%> to terminate "
20378                     "a template argument list");
20379         }
20380     }
20381   else
20382     cp_parser_skip_to_end_of_template_parameter_list (parser);
20383   /* The `>' token might be a greater-than operator again now.  */
20384   parser->greater_than_is_operator_p
20385     = saved_greater_than_is_operator_p;
20386   /* Restore the SAVED_SCOPE.  */
20387   parser->scope = saved_scope;
20388   parser->qualifying_scope = saved_qualifying_scope;
20389   parser->object_scope = saved_object_scope;
20390   cp_unevaluated_operand = saved_unevaluated_operand;
20391   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
20392
20393   return arguments;
20394 }
20395
20396 /* MEMBER_FUNCTION is a member function, or a friend.  If default
20397    arguments, or the body of the function have not yet been parsed,
20398    parse them now.  */
20399
20400 static void
20401 cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
20402 {
20403   timevar_push (TV_PARSE_INMETH);
20404   /* If this member is a template, get the underlying
20405      FUNCTION_DECL.  */
20406   if (DECL_FUNCTION_TEMPLATE_P (member_function))
20407     member_function = DECL_TEMPLATE_RESULT (member_function);
20408
20409   /* There should not be any class definitions in progress at this
20410      point; the bodies of members are only parsed outside of all class
20411      definitions.  */
20412   gcc_assert (parser->num_classes_being_defined == 0);
20413   /* While we're parsing the member functions we might encounter more
20414      classes.  We want to handle them right away, but we don't want
20415      them getting mixed up with functions that are currently in the
20416      queue.  */
20417   push_unparsed_function_queues (parser);
20418
20419   /* Make sure that any template parameters are in scope.  */
20420   maybe_begin_member_template_processing (member_function);
20421
20422   /* If the body of the function has not yet been parsed, parse it
20423      now.  */
20424   if (DECL_PENDING_INLINE_P (member_function))
20425     {
20426       tree function_scope;
20427       cp_token_cache *tokens;
20428
20429       /* The function is no longer pending; we are processing it.  */
20430       tokens = DECL_PENDING_INLINE_INFO (member_function);
20431       DECL_PENDING_INLINE_INFO (member_function) = NULL;
20432       DECL_PENDING_INLINE_P (member_function) = 0;
20433
20434       /* If this is a local class, enter the scope of the containing
20435          function.  */
20436       function_scope = current_function_decl;
20437       if (function_scope)
20438         push_function_context ();
20439
20440       /* Push the body of the function onto the lexer stack.  */
20441       cp_parser_push_lexer_for_tokens (parser, tokens);
20442
20443       /* Let the front end know that we going to be defining this
20444          function.  */
20445       start_preparsed_function (member_function, NULL_TREE,
20446                                 SF_PRE_PARSED | SF_INCLASS_INLINE);
20447
20448       /* Don't do access checking if it is a templated function.  */
20449       if (processing_template_decl)
20450         push_deferring_access_checks (dk_no_check);
20451
20452       /* Now, parse the body of the function.  */
20453       cp_parser_function_definition_after_declarator (parser,
20454                                                       /*inline_p=*/true);
20455
20456       if (processing_template_decl)
20457         pop_deferring_access_checks ();
20458
20459       /* Leave the scope of the containing function.  */
20460       if (function_scope)
20461         pop_function_context ();
20462       cp_parser_pop_lexer (parser);
20463     }
20464
20465   /* Remove any template parameters from the symbol table.  */
20466   maybe_end_member_template_processing ();
20467
20468   /* Restore the queue.  */
20469   pop_unparsed_function_queues (parser);
20470   timevar_pop (TV_PARSE_INMETH);
20471 }
20472
20473 /* If DECL contains any default args, remember it on the unparsed
20474    functions queue.  */
20475
20476 static void
20477 cp_parser_save_default_args (cp_parser* parser, tree decl)
20478 {
20479   tree probe;
20480
20481   for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
20482        probe;
20483        probe = TREE_CHAIN (probe))
20484     if (TREE_PURPOSE (probe))
20485       {
20486         cp_default_arg_entry *entry
20487           = VEC_safe_push (cp_default_arg_entry, gc,
20488                            unparsed_funs_with_default_args, NULL);
20489         entry->class_type = current_class_type;
20490         entry->decl = decl;
20491         break;
20492       }
20493 }
20494
20495 /* FN is a FUNCTION_DECL which may contains a parameter with an
20496    unparsed DEFAULT_ARG.  Parse the default args now.  This function
20497    assumes that the current scope is the scope in which the default
20498    argument should be processed.  */
20499
20500 static void
20501 cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
20502 {
20503   bool saved_local_variables_forbidden_p;
20504   tree parm, parmdecl;
20505
20506   /* While we're parsing the default args, we might (due to the
20507      statement expression extension) encounter more classes.  We want
20508      to handle them right away, but we don't want them getting mixed
20509      up with default args that are currently in the queue.  */
20510   push_unparsed_function_queues (parser);
20511
20512   /* Local variable names (and the `this' keyword) may not appear
20513      in a default argument.  */
20514   saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
20515   parser->local_variables_forbidden_p = true;
20516
20517   push_defarg_context (fn);
20518
20519   for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn)),
20520          parmdecl = DECL_ARGUMENTS (fn);
20521        parm && parm != void_list_node;
20522        parm = TREE_CHAIN (parm),
20523          parmdecl = DECL_CHAIN (parmdecl))
20524     {
20525       cp_token_cache *tokens;
20526       tree default_arg = TREE_PURPOSE (parm);
20527       tree parsed_arg;
20528       VEC(tree,gc) *insts;
20529       tree copy;
20530       unsigned ix;
20531
20532       if (!default_arg)
20533         continue;
20534
20535       if (TREE_CODE (default_arg) != DEFAULT_ARG)
20536         /* This can happen for a friend declaration for a function
20537            already declared with default arguments.  */
20538         continue;
20539
20540        /* Push the saved tokens for the default argument onto the parser's
20541           lexer stack.  */
20542       tokens = DEFARG_TOKENS (default_arg);
20543       cp_parser_push_lexer_for_tokens (parser, tokens);
20544
20545       start_lambda_scope (parmdecl);
20546
20547       /* Parse the assignment-expression.  */
20548       parsed_arg = cp_parser_assignment_expression (parser, /*cast_p=*/false, NULL);
20549       if (parsed_arg == error_mark_node)
20550         {
20551           cp_parser_pop_lexer (parser);
20552           continue;
20553         }
20554
20555       if (!processing_template_decl)
20556         parsed_arg = check_default_argument (TREE_VALUE (parm), parsed_arg);
20557
20558       TREE_PURPOSE (parm) = parsed_arg;
20559
20560       /* Update any instantiations we've already created.  */
20561       for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
20562            VEC_iterate (tree, insts, ix, copy); ix++)
20563         TREE_PURPOSE (copy) = parsed_arg;
20564
20565       finish_lambda_scope ();
20566
20567       /* If the token stream has not been completely used up, then
20568          there was extra junk after the end of the default
20569          argument.  */
20570       if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
20571         cp_parser_error (parser, "expected %<,%>");
20572
20573       /* Revert to the main lexer.  */
20574       cp_parser_pop_lexer (parser);
20575     }
20576
20577   pop_defarg_context ();
20578
20579   /* Make sure no default arg is missing.  */
20580   check_default_args (fn);
20581
20582   /* Restore the state of local_variables_forbidden_p.  */
20583   parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
20584
20585   /* Restore the queue.  */
20586   pop_unparsed_function_queues (parser);
20587 }
20588
20589 /* Parse the operand of `sizeof' (or a similar operator).  Returns
20590    either a TYPE or an expression, depending on the form of the
20591    input.  The KEYWORD indicates which kind of expression we have
20592    encountered.  */
20593
20594 static tree
20595 cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
20596 {
20597   tree expr = NULL_TREE;
20598   const char *saved_message;
20599   char *tmp;
20600   bool saved_integral_constant_expression_p;
20601   bool saved_non_integral_constant_expression_p;
20602   bool pack_expansion_p = false;
20603
20604   /* Types cannot be defined in a `sizeof' expression.  Save away the
20605      old message.  */
20606   saved_message = parser->type_definition_forbidden_message;
20607   /* And create the new one.  */
20608   tmp = concat ("types may not be defined in %<",
20609                 IDENTIFIER_POINTER (ridpointers[keyword]),
20610                 "%> expressions", NULL);
20611   parser->type_definition_forbidden_message = tmp;
20612
20613   /* The restrictions on constant-expressions do not apply inside
20614      sizeof expressions.  */
20615   saved_integral_constant_expression_p
20616     = parser->integral_constant_expression_p;
20617   saved_non_integral_constant_expression_p
20618     = parser->non_integral_constant_expression_p;
20619   parser->integral_constant_expression_p = false;
20620
20621   /* If it's a `...', then we are computing the length of a parameter
20622      pack.  */
20623   if (keyword == RID_SIZEOF
20624       && cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
20625     {
20626       /* Consume the `...'.  */
20627       cp_lexer_consume_token (parser->lexer);
20628       maybe_warn_variadic_templates ();
20629
20630       /* Note that this is an expansion.  */
20631       pack_expansion_p = true;
20632     }
20633
20634   /* Do not actually evaluate the expression.  */
20635   ++cp_unevaluated_operand;
20636   ++c_inhibit_evaluation_warnings;
20637   /* If it's a `(', then we might be looking at the type-id
20638      construction.  */
20639   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
20640     {
20641       tree type;
20642       bool saved_in_type_id_in_expr_p;
20643
20644       /* We can't be sure yet whether we're looking at a type-id or an
20645          expression.  */
20646       cp_parser_parse_tentatively (parser);
20647       /* Consume the `('.  */
20648       cp_lexer_consume_token (parser->lexer);
20649       /* Parse the type-id.  */
20650       saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
20651       parser->in_type_id_in_expr_p = true;
20652       type = cp_parser_type_id (parser);
20653       parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
20654       /* Now, look for the trailing `)'.  */
20655       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
20656       /* If all went well, then we're done.  */
20657       if (cp_parser_parse_definitely (parser))
20658         {
20659           cp_decl_specifier_seq decl_specs;
20660
20661           /* Build a trivial decl-specifier-seq.  */
20662           clear_decl_specs (&decl_specs);
20663           decl_specs.type = type;
20664
20665           /* Call grokdeclarator to figure out what type this is.  */
20666           expr = grokdeclarator (NULL,
20667                                  &decl_specs,
20668                                  TYPENAME,
20669                                  /*initialized=*/0,
20670                                  /*attrlist=*/NULL);
20671         }
20672     }
20673
20674   /* If the type-id production did not work out, then we must be
20675      looking at the unary-expression production.  */
20676   if (!expr)
20677     expr = cp_parser_unary_expression (parser, /*address_p=*/false,
20678                                        /*cast_p=*/false, NULL);
20679
20680   if (pack_expansion_p)
20681     /* Build a pack expansion. */
20682     expr = make_pack_expansion (expr);
20683
20684   /* Go back to evaluating expressions.  */
20685   --cp_unevaluated_operand;
20686   --c_inhibit_evaluation_warnings;
20687
20688   /* Free the message we created.  */
20689   free (tmp);
20690   /* And restore the old one.  */
20691   parser->type_definition_forbidden_message = saved_message;
20692   parser->integral_constant_expression_p
20693     = saved_integral_constant_expression_p;
20694   parser->non_integral_constant_expression_p
20695     = saved_non_integral_constant_expression_p;
20696
20697   return expr;
20698 }
20699
20700 /* If the current declaration has no declarator, return true.  */
20701
20702 static bool
20703 cp_parser_declares_only_class_p (cp_parser *parser)
20704 {
20705   /* If the next token is a `;' or a `,' then there is no
20706      declarator.  */
20707   return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
20708           || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
20709 }
20710
20711 /* Update the DECL_SPECS to reflect the storage class indicated by
20712    KEYWORD.  */
20713
20714 static void
20715 cp_parser_set_storage_class (cp_parser *parser,
20716                              cp_decl_specifier_seq *decl_specs,
20717                              enum rid keyword,
20718                              location_t location)
20719 {
20720   cp_storage_class storage_class;
20721
20722   if (parser->in_unbraced_linkage_specification_p)
20723     {
20724       error_at (location, "invalid use of %qD in linkage specification",
20725                 ridpointers[keyword]);
20726       return;
20727     }
20728   else if (decl_specs->storage_class != sc_none)
20729     {
20730       decl_specs->conflicting_specifiers_p = true;
20731       return;
20732     }
20733
20734   if ((keyword == RID_EXTERN || keyword == RID_STATIC)
20735       && decl_specs->specs[(int) ds_thread])
20736     {
20737       error_at (location, "%<__thread%> before %qD", ridpointers[keyword]);
20738       decl_specs->specs[(int) ds_thread] = 0;
20739     }
20740
20741   switch (keyword)
20742     {
20743     case RID_AUTO:
20744       storage_class = sc_auto;
20745       break;
20746     case RID_REGISTER:
20747       storage_class = sc_register;
20748       break;
20749     case RID_STATIC:
20750       storage_class = sc_static;
20751       break;
20752     case RID_EXTERN:
20753       storage_class = sc_extern;
20754       break;
20755     case RID_MUTABLE:
20756       storage_class = sc_mutable;
20757       break;
20758     default:
20759       gcc_unreachable ();
20760     }
20761   decl_specs->storage_class = storage_class;
20762
20763   /* A storage class specifier cannot be applied alongside a typedef 
20764      specifier. If there is a typedef specifier present then set 
20765      conflicting_specifiers_p which will trigger an error later
20766      on in grokdeclarator. */
20767   if (decl_specs->specs[(int)ds_typedef])
20768     decl_specs->conflicting_specifiers_p = true;
20769 }
20770
20771 /* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
20772    is true, the type is a user-defined type; otherwise it is a
20773    built-in type specified by a keyword.  */
20774
20775 static void
20776 cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
20777                               tree type_spec,
20778                               location_t location,
20779                               bool user_defined_p)
20780 {
20781   decl_specs->any_specifiers_p = true;
20782
20783   /* If the user tries to redeclare bool, char16_t, char32_t, or wchar_t
20784      (with, for example, in "typedef int wchar_t;") we remember that
20785      this is what happened.  In system headers, we ignore these
20786      declarations so that G++ can work with system headers that are not
20787      C++-safe.  */
20788   if (decl_specs->specs[(int) ds_typedef]
20789       && !user_defined_p
20790       && (type_spec == boolean_type_node
20791           || type_spec == char16_type_node
20792           || type_spec == char32_type_node
20793           || type_spec == wchar_type_node)
20794       && (decl_specs->type
20795           || decl_specs->specs[(int) ds_long]
20796           || decl_specs->specs[(int) ds_short]
20797           || decl_specs->specs[(int) ds_unsigned]
20798           || decl_specs->specs[(int) ds_signed]))
20799     {
20800       decl_specs->redefined_builtin_type = type_spec;
20801       if (!decl_specs->type)
20802         {
20803           decl_specs->type = type_spec;
20804           decl_specs->user_defined_type_p = false;
20805           decl_specs->type_location = location;
20806         }
20807     }
20808   else if (decl_specs->type)
20809     decl_specs->multiple_types_p = true;
20810   else
20811     {
20812       decl_specs->type = type_spec;
20813       decl_specs->user_defined_type_p = user_defined_p;
20814       decl_specs->redefined_builtin_type = NULL_TREE;
20815       decl_specs->type_location = location;
20816     }
20817 }
20818
20819 /* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
20820    Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
20821
20822 static bool
20823 cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
20824 {
20825   return decl_specifiers->specs[(int) ds_friend] != 0;
20826 }
20827
20828 /* Issue an error message indicating that TOKEN_DESC was expected.
20829    If KEYWORD is true, it indicated this function is called by
20830    cp_parser_require_keword and the required token can only be
20831    a indicated keyword. */
20832
20833 static void
20834 cp_parser_required_error (cp_parser *parser,
20835                           required_token token_desc,
20836                           bool keyword)
20837 {
20838   switch (token_desc)
20839     {
20840       case RT_NEW:
20841         cp_parser_error (parser, "expected %<new%>");
20842         return;
20843       case RT_DELETE:
20844         cp_parser_error (parser, "expected %<delete%>");
20845         return;
20846       case RT_RETURN:
20847         cp_parser_error (parser, "expected %<return%>");
20848         return;
20849       case RT_WHILE:
20850         cp_parser_error (parser, "expected %<while%>");
20851         return;
20852       case RT_EXTERN:
20853         cp_parser_error (parser, "expected %<extern%>");
20854         return;
20855       case RT_STATIC_ASSERT:
20856         cp_parser_error (parser, "expected %<static_assert%>");
20857         return;
20858       case RT_DECLTYPE:
20859         cp_parser_error (parser, "expected %<decltype%>");
20860         return;
20861       case RT_OPERATOR:
20862         cp_parser_error (parser, "expected %<operator%>");
20863         return;
20864       case RT_CLASS:
20865         cp_parser_error (parser, "expected %<class%>");
20866         return;
20867       case RT_TEMPLATE:
20868         cp_parser_error (parser, "expected %<template%>");
20869         return;
20870       case RT_NAMESPACE:
20871         cp_parser_error (parser, "expected %<namespace%>");
20872         return;
20873       case RT_USING:
20874         cp_parser_error (parser, "expected %<using%>");
20875         return;
20876       case RT_ASM:
20877         cp_parser_error (parser, "expected %<asm%>");
20878         return;
20879       case RT_TRY:
20880         cp_parser_error (parser, "expected %<try%>");
20881         return;
20882       case RT_CATCH:
20883         cp_parser_error (parser, "expected %<catch%>");
20884         return;
20885       case RT_THROW:
20886         cp_parser_error (parser, "expected %<throw%>");
20887         return;
20888       case RT_LABEL:
20889         cp_parser_error (parser, "expected %<__label__%>");
20890         return;
20891       case RT_AT_TRY:
20892         cp_parser_error (parser, "expected %<@try%>");
20893         return;
20894       case RT_AT_SYNCHRONIZED:
20895         cp_parser_error (parser, "expected %<@synchronized%>");
20896         return;
20897       case RT_AT_THROW:
20898         cp_parser_error (parser, "expected %<@throw%>");
20899         return;
20900       default:
20901         break;
20902     }
20903   if (!keyword)
20904     {
20905       switch (token_desc)
20906         {
20907           case RT_SEMICOLON:
20908             cp_parser_error (parser, "expected %<;%>");
20909             return;
20910           case RT_OPEN_PAREN:
20911             cp_parser_error (parser, "expected %<(%>");
20912             return;
20913           case RT_CLOSE_BRACE:
20914             cp_parser_error (parser, "expected %<}%>");
20915             return;
20916           case RT_OPEN_BRACE:
20917             cp_parser_error (parser, "expected %<{%>");
20918             return;
20919           case RT_CLOSE_SQUARE:
20920             cp_parser_error (parser, "expected %<]%>");
20921             return;
20922           case RT_OPEN_SQUARE:
20923             cp_parser_error (parser, "expected %<[%>");
20924             return;
20925           case RT_COMMA:
20926             cp_parser_error (parser, "expected %<,%>");
20927             return;
20928           case RT_SCOPE:
20929             cp_parser_error (parser, "expected %<::%>");
20930             return;
20931           case RT_LESS:
20932             cp_parser_error (parser, "expected %<<%>");
20933             return;
20934           case RT_GREATER:
20935             cp_parser_error (parser, "expected %<>%>");
20936             return;
20937           case RT_EQ:
20938             cp_parser_error (parser, "expected %<=%>");
20939             return;
20940           case RT_ELLIPSIS:
20941             cp_parser_error (parser, "expected %<...%>");
20942             return;
20943           case RT_MULT:
20944             cp_parser_error (parser, "expected %<*%>");
20945             return;
20946           case RT_COMPL:
20947             cp_parser_error (parser, "expected %<~%>");
20948             return;
20949           case RT_COLON:
20950             cp_parser_error (parser, "expected %<:%>");
20951             return;
20952           case RT_COLON_SCOPE:
20953             cp_parser_error (parser, "expected %<:%> or %<::%>");
20954             return;
20955           case RT_CLOSE_PAREN:
20956             cp_parser_error (parser, "expected %<)%>");
20957             return;
20958           case RT_COMMA_CLOSE_PAREN:
20959             cp_parser_error (parser, "expected %<,%> or %<)%>");
20960             return;
20961           case RT_PRAGMA_EOL:
20962             cp_parser_error (parser, "expected end of line");
20963             return;
20964           case RT_NAME:
20965             cp_parser_error (parser, "expected identifier");
20966             return;
20967           case RT_SELECT:
20968             cp_parser_error (parser, "expected selection-statement");
20969             return;
20970           case RT_INTERATION:
20971             cp_parser_error (parser, "expected iteration-statement");
20972             return;
20973           case RT_JUMP:
20974             cp_parser_error (parser, "expected jump-statement");
20975             return;
20976           case RT_CLASS_KEY:
20977             cp_parser_error (parser, "expected class-key");
20978             return;
20979           case RT_CLASS_TYPENAME_TEMPLATE:
20980             cp_parser_error (parser,
20981                  "expected %<class%>, %<typename%>, or %<template%>");
20982             return;
20983           default:
20984             gcc_unreachable ();
20985         }
20986     }
20987   else
20988     gcc_unreachable ();
20989 }
20990
20991
20992
20993 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
20994    issue an error message indicating that TOKEN_DESC was expected.
20995
20996    Returns the token consumed, if the token had the appropriate type.
20997    Otherwise, returns NULL.  */
20998
20999 static cp_token *
21000 cp_parser_require (cp_parser* parser,
21001                    enum cpp_ttype type,
21002                    required_token token_desc)
21003 {
21004   if (cp_lexer_next_token_is (parser->lexer, type))
21005     return cp_lexer_consume_token (parser->lexer);
21006   else
21007     {
21008       /* Output the MESSAGE -- unless we're parsing tentatively.  */
21009       if (!cp_parser_simulate_error (parser))
21010         cp_parser_required_error (parser, token_desc, /*keyword=*/false);
21011       return NULL;
21012     }
21013 }
21014
21015 /* An error message is produced if the next token is not '>'.
21016    All further tokens are skipped until the desired token is
21017    found or '{', '}', ';' or an unbalanced ')' or ']'.  */
21018
21019 static void
21020 cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
21021 {
21022   /* Current level of '< ... >'.  */
21023   unsigned level = 0;
21024   /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
21025   unsigned nesting_depth = 0;
21026
21027   /* Are we ready, yet?  If not, issue error message.  */
21028   if (cp_parser_require (parser, CPP_GREATER, RT_GREATER))
21029     return;
21030
21031   /* Skip tokens until the desired token is found.  */
21032   while (true)
21033     {
21034       /* Peek at the next token.  */
21035       switch (cp_lexer_peek_token (parser->lexer)->type)
21036         {
21037         case CPP_LESS:
21038           if (!nesting_depth)
21039             ++level;
21040           break;
21041
21042         case CPP_RSHIFT:
21043           if (cxx_dialect == cxx98)
21044             /* C++0x views the `>>' operator as two `>' tokens, but
21045                C++98 does not. */
21046             break;
21047           else if (!nesting_depth && level-- == 0)
21048             {
21049               /* We've hit a `>>' where the first `>' closes the
21050                  template argument list, and the second `>' is
21051                  spurious.  Just consume the `>>' and stop; we've
21052                  already produced at least one error.  */
21053               cp_lexer_consume_token (parser->lexer);
21054               return;
21055             }
21056           /* Fall through for C++0x, so we handle the second `>' in
21057              the `>>'.  */
21058
21059         case CPP_GREATER:
21060           if (!nesting_depth && level-- == 0)
21061             {
21062               /* We've reached the token we want, consume it and stop.  */
21063               cp_lexer_consume_token (parser->lexer);
21064               return;
21065             }
21066           break;
21067
21068         case CPP_OPEN_PAREN:
21069         case CPP_OPEN_SQUARE:
21070           ++nesting_depth;
21071           break;
21072
21073         case CPP_CLOSE_PAREN:
21074         case CPP_CLOSE_SQUARE:
21075           if (nesting_depth-- == 0)
21076             return;
21077           break;
21078
21079         case CPP_EOF:
21080         case CPP_PRAGMA_EOL:
21081         case CPP_SEMICOLON:
21082         case CPP_OPEN_BRACE:
21083         case CPP_CLOSE_BRACE:
21084           /* The '>' was probably forgotten, don't look further.  */
21085           return;
21086
21087         default:
21088           break;
21089         }
21090
21091       /* Consume this token.  */
21092       cp_lexer_consume_token (parser->lexer);
21093     }
21094 }
21095
21096 /* If the next token is the indicated keyword, consume it.  Otherwise,
21097    issue an error message indicating that TOKEN_DESC was expected.
21098
21099    Returns the token consumed, if the token had the appropriate type.
21100    Otherwise, returns NULL.  */
21101
21102 static cp_token *
21103 cp_parser_require_keyword (cp_parser* parser,
21104                            enum rid keyword,
21105                            required_token token_desc)
21106 {
21107   cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
21108
21109   if (token && token->keyword != keyword)
21110     {
21111       cp_parser_required_error (parser, token_desc, /*keyword=*/true); 
21112       return NULL;
21113     }
21114
21115   return token;
21116 }
21117
21118 /* Returns TRUE iff TOKEN is a token that can begin the body of a
21119    function-definition.  */
21120
21121 static bool
21122 cp_parser_token_starts_function_definition_p (cp_token* token)
21123 {
21124   return (/* An ordinary function-body begins with an `{'.  */
21125           token->type == CPP_OPEN_BRACE
21126           /* A ctor-initializer begins with a `:'.  */
21127           || token->type == CPP_COLON
21128           /* A function-try-block begins with `try'.  */
21129           || token->keyword == RID_TRY
21130           /* The named return value extension begins with `return'.  */
21131           || token->keyword == RID_RETURN);
21132 }
21133
21134 /* Returns TRUE iff the next token is the ":" or "{" beginning a class
21135    definition.  */
21136
21137 static bool
21138 cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
21139 {
21140   cp_token *token;
21141
21142   token = cp_lexer_peek_token (parser->lexer);
21143   return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
21144 }
21145
21146 /* Returns TRUE iff the next token is the "," or ">" (or `>>', in
21147    C++0x) ending a template-argument.  */
21148
21149 static bool
21150 cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
21151 {
21152   cp_token *token;
21153
21154   token = cp_lexer_peek_token (parser->lexer);
21155   return (token->type == CPP_COMMA 
21156           || token->type == CPP_GREATER
21157           || token->type == CPP_ELLIPSIS
21158           || ((cxx_dialect != cxx98) && token->type == CPP_RSHIFT));
21159 }
21160
21161 /* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
21162    (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
21163
21164 static bool
21165 cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
21166                                                      size_t n)
21167 {
21168   cp_token *token;
21169
21170   token = cp_lexer_peek_nth_token (parser->lexer, n);
21171   if (token->type == CPP_LESS)
21172     return true;
21173   /* Check for the sequence `<::' in the original code. It would be lexed as
21174      `[:', where `[' is a digraph, and there is no whitespace before
21175      `:'.  */
21176   if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
21177     {
21178       cp_token *token2;
21179       token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
21180       if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
21181         return true;
21182     }
21183   return false;
21184 }
21185
21186 /* Returns the kind of tag indicated by TOKEN, if it is a class-key,
21187    or none_type otherwise.  */
21188
21189 static enum tag_types
21190 cp_parser_token_is_class_key (cp_token* token)
21191 {
21192   switch (token->keyword)
21193     {
21194     case RID_CLASS:
21195       return class_type;
21196     case RID_STRUCT:
21197       return record_type;
21198     case RID_UNION:
21199       return union_type;
21200
21201     default:
21202       return none_type;
21203     }
21204 }
21205
21206 /* Issue an error message if the CLASS_KEY does not match the TYPE.  */
21207
21208 static void
21209 cp_parser_check_class_key (enum tag_types class_key, tree type)
21210 {
21211   if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
21212     permerror (input_location, "%qs tag used in naming %q#T",
21213             class_key == union_type ? "union"
21214              : class_key == record_type ? "struct" : "class",
21215              type);
21216 }
21217
21218 /* Issue an error message if DECL is redeclared with different
21219    access than its original declaration [class.access.spec/3].
21220    This applies to nested classes and nested class templates.
21221    [class.mem/1].  */
21222
21223 static void
21224 cp_parser_check_access_in_redeclaration (tree decl, location_t location)
21225 {
21226   if (!decl || !CLASS_TYPE_P (TREE_TYPE (decl)))
21227     return;
21228
21229   if ((TREE_PRIVATE (decl)
21230        != (current_access_specifier == access_private_node))
21231       || (TREE_PROTECTED (decl)
21232           != (current_access_specifier == access_protected_node)))
21233     error_at (location, "%qD redeclared with different access", decl);
21234 }
21235
21236 /* Look for the `template' keyword, as a syntactic disambiguator.
21237    Return TRUE iff it is present, in which case it will be
21238    consumed.  */
21239
21240 static bool
21241 cp_parser_optional_template_keyword (cp_parser *parser)
21242 {
21243   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
21244     {
21245       /* The `template' keyword can only be used within templates;
21246          outside templates the parser can always figure out what is a
21247          template and what is not.  */
21248       if (!processing_template_decl)
21249         {
21250           cp_token *token = cp_lexer_peek_token (parser->lexer);
21251           error_at (token->location,
21252                     "%<template%> (as a disambiguator) is only allowed "
21253                     "within templates");
21254           /* If this part of the token stream is rescanned, the same
21255              error message would be generated.  So, we purge the token
21256              from the stream.  */
21257           cp_lexer_purge_token (parser->lexer);
21258           return false;
21259         }
21260       else
21261         {
21262           /* Consume the `template' keyword.  */
21263           cp_lexer_consume_token (parser->lexer);
21264           return true;
21265         }
21266     }
21267
21268   return false;
21269 }
21270
21271 /* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
21272    set PARSER->SCOPE, and perform other related actions.  */
21273
21274 static void
21275 cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
21276 {
21277   int i;
21278   struct tree_check *check_value;
21279   deferred_access_check *chk;
21280   VEC (deferred_access_check,gc) *checks;
21281
21282   /* Get the stored value.  */
21283   check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
21284   /* Perform any access checks that were deferred.  */
21285   checks = check_value->checks;
21286   if (checks)
21287     {
21288       FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
21289         perform_or_defer_access_check (chk->binfo,
21290                                        chk->decl,
21291                                        chk->diag_decl);
21292     }
21293   /* Set the scope from the stored value.  */
21294   parser->scope = check_value->value;
21295   parser->qualifying_scope = check_value->qualifying_scope;
21296   parser->object_scope = NULL_TREE;
21297 }
21298
21299 /* Consume tokens up through a non-nested END token.  Returns TRUE if we
21300    encounter the end of a block before what we were looking for.  */
21301
21302 static bool
21303 cp_parser_cache_group (cp_parser *parser,
21304                        enum cpp_ttype end,
21305                        unsigned depth)
21306 {
21307   while (true)
21308     {
21309       cp_token *token = cp_lexer_peek_token (parser->lexer);
21310
21311       /* Abort a parenthesized expression if we encounter a semicolon.  */
21312       if ((end == CPP_CLOSE_PAREN || depth == 0)
21313           && token->type == CPP_SEMICOLON)
21314         return true;
21315       /* If we've reached the end of the file, stop.  */
21316       if (token->type == CPP_EOF
21317           || (end != CPP_PRAGMA_EOL
21318               && token->type == CPP_PRAGMA_EOL))
21319         return true;
21320       if (token->type == CPP_CLOSE_BRACE && depth == 0)
21321         /* We've hit the end of an enclosing block, so there's been some
21322            kind of syntax error.  */
21323         return true;
21324
21325       /* Consume the token.  */
21326       cp_lexer_consume_token (parser->lexer);
21327       /* See if it starts a new group.  */
21328       if (token->type == CPP_OPEN_BRACE)
21329         {
21330           cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
21331           /* In theory this should probably check end == '}', but
21332              cp_parser_save_member_function_body needs it to exit
21333              after either '}' or ')' when called with ')'.  */
21334           if (depth == 0)
21335             return false;
21336         }
21337       else if (token->type == CPP_OPEN_PAREN)
21338         {
21339           cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
21340           if (depth == 0 && end == CPP_CLOSE_PAREN)
21341             return false;
21342         }
21343       else if (token->type == CPP_PRAGMA)
21344         cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
21345       else if (token->type == end)
21346         return false;
21347     }
21348 }
21349
21350 /* Begin parsing tentatively.  We always save tokens while parsing
21351    tentatively so that if the tentative parsing fails we can restore the
21352    tokens.  */
21353
21354 static void
21355 cp_parser_parse_tentatively (cp_parser* parser)
21356 {
21357   /* Enter a new parsing context.  */
21358   parser->context = cp_parser_context_new (parser->context);
21359   /* Begin saving tokens.  */
21360   cp_lexer_save_tokens (parser->lexer);
21361   /* In order to avoid repetitive access control error messages,
21362      access checks are queued up until we are no longer parsing
21363      tentatively.  */
21364   push_deferring_access_checks (dk_deferred);
21365 }
21366
21367 /* Commit to the currently active tentative parse.  */
21368
21369 static void
21370 cp_parser_commit_to_tentative_parse (cp_parser* parser)
21371 {
21372   cp_parser_context *context;
21373   cp_lexer *lexer;
21374
21375   /* Mark all of the levels as committed.  */
21376   lexer = parser->lexer;
21377   for (context = parser->context; context->next; context = context->next)
21378     {
21379       if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
21380         break;
21381       context->status = CP_PARSER_STATUS_KIND_COMMITTED;
21382       while (!cp_lexer_saving_tokens (lexer))
21383         lexer = lexer->next;
21384       cp_lexer_commit_tokens (lexer);
21385     }
21386 }
21387
21388 /* Abort the currently active tentative parse.  All consumed tokens
21389    will be rolled back, and no diagnostics will be issued.  */
21390
21391 static void
21392 cp_parser_abort_tentative_parse (cp_parser* parser)
21393 {
21394   gcc_assert (parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED
21395               || errorcount > 0);
21396   cp_parser_simulate_error (parser);
21397   /* Now, pretend that we want to see if the construct was
21398      successfully parsed.  */
21399   cp_parser_parse_definitely (parser);
21400 }
21401
21402 /* Stop parsing tentatively.  If a parse error has occurred, restore the
21403    token stream.  Otherwise, commit to the tokens we have consumed.
21404    Returns true if no error occurred; false otherwise.  */
21405
21406 static bool
21407 cp_parser_parse_definitely (cp_parser* parser)
21408 {
21409   bool error_occurred;
21410   cp_parser_context *context;
21411
21412   /* Remember whether or not an error occurred, since we are about to
21413      destroy that information.  */
21414   error_occurred = cp_parser_error_occurred (parser);
21415   /* Remove the topmost context from the stack.  */
21416   context = parser->context;
21417   parser->context = context->next;
21418   /* If no parse errors occurred, commit to the tentative parse.  */
21419   if (!error_occurred)
21420     {
21421       /* Commit to the tokens read tentatively, unless that was
21422          already done.  */
21423       if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
21424         cp_lexer_commit_tokens (parser->lexer);
21425
21426       pop_to_parent_deferring_access_checks ();
21427     }
21428   /* Otherwise, if errors occurred, roll back our state so that things
21429      are just as they were before we began the tentative parse.  */
21430   else
21431     {
21432       cp_lexer_rollback_tokens (parser->lexer);
21433       pop_deferring_access_checks ();
21434     }
21435   /* Add the context to the front of the free list.  */
21436   context->next = cp_parser_context_free_list;
21437   cp_parser_context_free_list = context;
21438
21439   return !error_occurred;
21440 }
21441
21442 /* Returns true if we are parsing tentatively and are not committed to
21443    this tentative parse.  */
21444
21445 static bool
21446 cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
21447 {
21448   return (cp_parser_parsing_tentatively (parser)
21449           && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
21450 }
21451
21452 /* Returns nonzero iff an error has occurred during the most recent
21453    tentative parse.  */
21454
21455 static bool
21456 cp_parser_error_occurred (cp_parser* parser)
21457 {
21458   return (cp_parser_parsing_tentatively (parser)
21459           && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
21460 }
21461
21462 /* Returns nonzero if GNU extensions are allowed.  */
21463
21464 static bool
21465 cp_parser_allow_gnu_extensions_p (cp_parser* parser)
21466 {
21467   return parser->allow_gnu_extensions_p;
21468 }
21469 \f
21470 /* Objective-C++ Productions */
21471
21472
21473 /* Parse an Objective-C expression, which feeds into a primary-expression
21474    above.
21475
21476    objc-expression:
21477      objc-message-expression
21478      objc-string-literal
21479      objc-encode-expression
21480      objc-protocol-expression
21481      objc-selector-expression
21482
21483   Returns a tree representation of the expression.  */
21484
21485 static tree
21486 cp_parser_objc_expression (cp_parser* parser)
21487 {
21488   /* Try to figure out what kind of declaration is present.  */
21489   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
21490
21491   switch (kwd->type)
21492     {
21493     case CPP_OPEN_SQUARE:
21494       return cp_parser_objc_message_expression (parser);
21495
21496     case CPP_OBJC_STRING:
21497       kwd = cp_lexer_consume_token (parser->lexer);
21498       return objc_build_string_object (kwd->u.value);
21499
21500     case CPP_KEYWORD:
21501       switch (kwd->keyword)
21502         {
21503         case RID_AT_ENCODE:
21504           return cp_parser_objc_encode_expression (parser);
21505
21506         case RID_AT_PROTOCOL:
21507           return cp_parser_objc_protocol_expression (parser);
21508
21509         case RID_AT_SELECTOR:
21510           return cp_parser_objc_selector_expression (parser);
21511
21512         default:
21513           break;
21514         }
21515     default:
21516       error_at (kwd->location,
21517                 "misplaced %<@%D%> Objective-C++ construct",
21518                 kwd->u.value);
21519       cp_parser_skip_to_end_of_block_or_statement (parser);
21520     }
21521
21522   return error_mark_node;
21523 }
21524
21525 /* Parse an Objective-C message expression.
21526
21527    objc-message-expression:
21528      [ objc-message-receiver objc-message-args ]
21529
21530    Returns a representation of an Objective-C message.  */
21531
21532 static tree
21533 cp_parser_objc_message_expression (cp_parser* parser)
21534 {
21535   tree receiver, messageargs;
21536
21537   cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
21538   receiver = cp_parser_objc_message_receiver (parser);
21539   messageargs = cp_parser_objc_message_args (parser);
21540   cp_parser_require (parser, CPP_CLOSE_SQUARE, RT_CLOSE_SQUARE);
21541
21542   return objc_build_message_expr (receiver, messageargs);
21543 }
21544
21545 /* Parse an objc-message-receiver.
21546
21547    objc-message-receiver:
21548      expression
21549      simple-type-specifier
21550
21551   Returns a representation of the type or expression.  */
21552
21553 static tree
21554 cp_parser_objc_message_receiver (cp_parser* parser)
21555 {
21556   tree rcv;
21557
21558   /* An Objective-C message receiver may be either (1) a type
21559      or (2) an expression.  */
21560   cp_parser_parse_tentatively (parser);
21561   rcv = cp_parser_expression (parser, false, NULL);
21562
21563   if (cp_parser_parse_definitely (parser))
21564     return rcv;
21565
21566   rcv = cp_parser_simple_type_specifier (parser,
21567                                          /*decl_specs=*/NULL,
21568                                          CP_PARSER_FLAGS_NONE);
21569
21570   return objc_get_class_reference (rcv);
21571 }
21572
21573 /* Parse the arguments and selectors comprising an Objective-C message.
21574
21575    objc-message-args:
21576      objc-selector
21577      objc-selector-args
21578      objc-selector-args , objc-comma-args
21579
21580    objc-selector-args:
21581      objc-selector [opt] : assignment-expression
21582      objc-selector-args objc-selector [opt] : assignment-expression
21583
21584    objc-comma-args:
21585      assignment-expression
21586      objc-comma-args , assignment-expression
21587
21588    Returns a TREE_LIST, with TREE_PURPOSE containing a list of
21589    selector arguments and TREE_VALUE containing a list of comma
21590    arguments.  */
21591
21592 static tree
21593 cp_parser_objc_message_args (cp_parser* parser)
21594 {
21595   tree sel_args = NULL_TREE, addl_args = NULL_TREE;
21596   bool maybe_unary_selector_p = true;
21597   cp_token *token = cp_lexer_peek_token (parser->lexer);
21598
21599   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
21600     {
21601       tree selector = NULL_TREE, arg;
21602
21603       if (token->type != CPP_COLON)
21604         selector = cp_parser_objc_selector (parser);
21605
21606       /* Detect if we have a unary selector.  */
21607       if (maybe_unary_selector_p
21608           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
21609         return build_tree_list (selector, NULL_TREE);
21610
21611       maybe_unary_selector_p = false;
21612       cp_parser_require (parser, CPP_COLON, RT_COLON);
21613       arg = cp_parser_assignment_expression (parser, false, NULL);
21614
21615       sel_args
21616         = chainon (sel_args,
21617                    build_tree_list (selector, arg));
21618
21619       token = cp_lexer_peek_token (parser->lexer);
21620     }
21621
21622   /* Handle non-selector arguments, if any. */
21623   while (token->type == CPP_COMMA)
21624     {
21625       tree arg;
21626
21627       cp_lexer_consume_token (parser->lexer);
21628       arg = cp_parser_assignment_expression (parser, false, NULL);
21629
21630       addl_args
21631         = chainon (addl_args,
21632                    build_tree_list (NULL_TREE, arg));
21633
21634       token = cp_lexer_peek_token (parser->lexer);
21635     }
21636
21637   if (sel_args == NULL_TREE && addl_args == NULL_TREE)
21638     {
21639       cp_parser_error (parser, "objective-c++ message argument(s) are expected");
21640       return build_tree_list (error_mark_node, error_mark_node);
21641     }
21642
21643   return build_tree_list (sel_args, addl_args);
21644 }
21645
21646 /* Parse an Objective-C encode expression.
21647
21648    objc-encode-expression:
21649      @encode objc-typename
21650
21651    Returns an encoded representation of the type argument.  */
21652
21653 static tree
21654 cp_parser_objc_encode_expression (cp_parser* parser)
21655 {
21656   tree type;
21657   cp_token *token;
21658
21659   cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
21660   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
21661   token = cp_lexer_peek_token (parser->lexer);
21662   type = complete_type (cp_parser_type_id (parser));
21663   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
21664
21665   if (!type)
21666     {
21667       error_at (token->location, 
21668                 "%<@encode%> must specify a type as an argument");
21669       return error_mark_node;
21670     }
21671
21672   /* This happens if we find @encode(T) (where T is a template
21673      typename or something dependent on a template typename) when
21674      parsing a template.  In that case, we can't compile it
21675      immediately, but we rather create an AT_ENCODE_EXPR which will
21676      need to be instantiated when the template is used.
21677   */
21678   if (dependent_type_p (type))
21679     {
21680       tree value = build_min (AT_ENCODE_EXPR, size_type_node, type);
21681       TREE_READONLY (value) = 1;
21682       return value;
21683     }
21684
21685   return objc_build_encode_expr (type);
21686 }
21687
21688 /* Parse an Objective-C @defs expression.  */
21689
21690 static tree
21691 cp_parser_objc_defs_expression (cp_parser *parser)
21692 {
21693   tree name;
21694
21695   cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
21696   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
21697   name = cp_parser_identifier (parser);
21698   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
21699
21700   return objc_get_class_ivars (name);
21701 }
21702
21703 /* Parse an Objective-C protocol expression.
21704
21705   objc-protocol-expression:
21706     @protocol ( identifier )
21707
21708   Returns a representation of the protocol expression.  */
21709
21710 static tree
21711 cp_parser_objc_protocol_expression (cp_parser* parser)
21712 {
21713   tree proto;
21714
21715   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
21716   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
21717   proto = cp_parser_identifier (parser);
21718   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
21719
21720   return objc_build_protocol_expr (proto);
21721 }
21722
21723 /* Parse an Objective-C selector expression.
21724
21725    objc-selector-expression:
21726      @selector ( objc-method-signature )
21727
21728    objc-method-signature:
21729      objc-selector
21730      objc-selector-seq
21731
21732    objc-selector-seq:
21733      objc-selector :
21734      objc-selector-seq objc-selector :
21735
21736   Returns a representation of the method selector.  */
21737
21738 static tree
21739 cp_parser_objc_selector_expression (cp_parser* parser)
21740 {
21741   tree sel_seq = NULL_TREE;
21742   bool maybe_unary_selector_p = true;
21743   cp_token *token;
21744   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
21745
21746   cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
21747   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
21748   token = cp_lexer_peek_token (parser->lexer);
21749
21750   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
21751          || token->type == CPP_SCOPE)
21752     {
21753       tree selector = NULL_TREE;
21754
21755       if (token->type != CPP_COLON
21756           || token->type == CPP_SCOPE)
21757         selector = cp_parser_objc_selector (parser);
21758
21759       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
21760           && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
21761         {
21762           /* Detect if we have a unary selector.  */
21763           if (maybe_unary_selector_p)
21764             {
21765               sel_seq = selector;
21766               goto finish_selector;
21767             }
21768           else
21769             {
21770               cp_parser_error (parser, "expected %<:%>");
21771             }
21772         }
21773       maybe_unary_selector_p = false;
21774       token = cp_lexer_consume_token (parser->lexer);
21775
21776       if (token->type == CPP_SCOPE)
21777         {
21778           sel_seq
21779             = chainon (sel_seq,
21780                        build_tree_list (selector, NULL_TREE));
21781           sel_seq
21782             = chainon (sel_seq,
21783                        build_tree_list (NULL_TREE, NULL_TREE));
21784         }
21785       else
21786         sel_seq
21787           = chainon (sel_seq,
21788                      build_tree_list (selector, NULL_TREE));
21789
21790       token = cp_lexer_peek_token (parser->lexer);
21791     }
21792
21793  finish_selector:
21794   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
21795
21796   return objc_build_selector_expr (loc, sel_seq);
21797 }
21798
21799 /* Parse a list of identifiers.
21800
21801    objc-identifier-list:
21802      identifier
21803      objc-identifier-list , identifier
21804
21805    Returns a TREE_LIST of identifier nodes.  */
21806
21807 static tree
21808 cp_parser_objc_identifier_list (cp_parser* parser)
21809 {
21810   tree identifier;
21811   tree list;
21812   cp_token *sep;
21813
21814   identifier = cp_parser_identifier (parser);
21815   if (identifier == error_mark_node)
21816     return error_mark_node;      
21817
21818   list = build_tree_list (NULL_TREE, identifier);
21819   sep = cp_lexer_peek_token (parser->lexer);
21820
21821   while (sep->type == CPP_COMMA)
21822     {
21823       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
21824       identifier = cp_parser_identifier (parser);
21825       if (identifier == error_mark_node)
21826         return list;
21827
21828       list = chainon (list, build_tree_list (NULL_TREE,
21829                                              identifier));
21830       sep = cp_lexer_peek_token (parser->lexer);
21831     }
21832   
21833   return list;
21834 }
21835
21836 /* Parse an Objective-C alias declaration.
21837
21838    objc-alias-declaration:
21839      @compatibility_alias identifier identifier ;
21840
21841    This function registers the alias mapping with the Objective-C front end.
21842    It returns nothing.  */
21843
21844 static void
21845 cp_parser_objc_alias_declaration (cp_parser* parser)
21846 {
21847   tree alias, orig;
21848
21849   cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
21850   alias = cp_parser_identifier (parser);
21851   orig = cp_parser_identifier (parser);
21852   objc_declare_alias (alias, orig);
21853   cp_parser_consume_semicolon_at_end_of_statement (parser);
21854 }
21855
21856 /* Parse an Objective-C class forward-declaration.
21857
21858    objc-class-declaration:
21859      @class objc-identifier-list ;
21860
21861    The function registers the forward declarations with the Objective-C
21862    front end.  It returns nothing.  */
21863
21864 static void
21865 cp_parser_objc_class_declaration (cp_parser* parser)
21866 {
21867   cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
21868   while (true)
21869     {
21870       tree id;
21871       
21872       id = cp_parser_identifier (parser);
21873       if (id == error_mark_node)
21874         break;
21875       
21876       objc_declare_class (id);
21877
21878       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
21879         cp_lexer_consume_token (parser->lexer);
21880       else
21881         break;
21882     }
21883   cp_parser_consume_semicolon_at_end_of_statement (parser);
21884 }
21885
21886 /* Parse a list of Objective-C protocol references.
21887
21888    objc-protocol-refs-opt:
21889      objc-protocol-refs [opt]
21890
21891    objc-protocol-refs:
21892      < objc-identifier-list >
21893
21894    Returns a TREE_LIST of identifiers, if any.  */
21895
21896 static tree
21897 cp_parser_objc_protocol_refs_opt (cp_parser* parser)
21898 {
21899   tree protorefs = NULL_TREE;
21900
21901   if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
21902     {
21903       cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
21904       protorefs = cp_parser_objc_identifier_list (parser);
21905       cp_parser_require (parser, CPP_GREATER, RT_GREATER);
21906     }
21907
21908   return protorefs;
21909 }
21910
21911 /* Parse a Objective-C visibility specification.  */
21912
21913 static void
21914 cp_parser_objc_visibility_spec (cp_parser* parser)
21915 {
21916   cp_token *vis = cp_lexer_peek_token (parser->lexer);
21917
21918   switch (vis->keyword)
21919     {
21920     case RID_AT_PRIVATE:
21921       objc_set_visibility (OBJC_IVAR_VIS_PRIVATE);
21922       break;
21923     case RID_AT_PROTECTED:
21924       objc_set_visibility (OBJC_IVAR_VIS_PROTECTED);
21925       break;
21926     case RID_AT_PUBLIC:
21927       objc_set_visibility (OBJC_IVAR_VIS_PUBLIC);
21928       break;
21929     case RID_AT_PACKAGE:
21930       objc_set_visibility (OBJC_IVAR_VIS_PACKAGE);
21931       break;
21932     default:
21933       return;
21934     }
21935
21936   /* Eat '@private'/'@protected'/'@public'.  */
21937   cp_lexer_consume_token (parser->lexer);
21938 }
21939
21940 /* Parse an Objective-C method type.  Return 'true' if it is a class
21941    (+) method, and 'false' if it is an instance (-) method.  */
21942
21943 static inline bool
21944 cp_parser_objc_method_type (cp_parser* parser)
21945 {
21946   if (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS)
21947     return true;
21948   else
21949     return false;
21950 }
21951
21952 /* Parse an Objective-C protocol qualifier.  */
21953
21954 static tree
21955 cp_parser_objc_protocol_qualifiers (cp_parser* parser)
21956 {
21957   tree quals = NULL_TREE, node;
21958   cp_token *token = cp_lexer_peek_token (parser->lexer);
21959
21960   node = token->u.value;
21961
21962   while (node && TREE_CODE (node) == IDENTIFIER_NODE
21963          && (node == ridpointers [(int) RID_IN]
21964              || node == ridpointers [(int) RID_OUT]
21965              || node == ridpointers [(int) RID_INOUT]
21966              || node == ridpointers [(int) RID_BYCOPY]
21967              || node == ridpointers [(int) RID_BYREF]
21968              || node == ridpointers [(int) RID_ONEWAY]))
21969     {
21970       quals = tree_cons (NULL_TREE, node, quals);
21971       cp_lexer_consume_token (parser->lexer);
21972       token = cp_lexer_peek_token (parser->lexer);
21973       node = token->u.value;
21974     }
21975
21976   return quals;
21977 }
21978
21979 /* Parse an Objective-C typename.  */
21980
21981 static tree
21982 cp_parser_objc_typename (cp_parser* parser)
21983 {
21984   tree type_name = NULL_TREE;
21985
21986   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
21987     {
21988       tree proto_quals, cp_type = NULL_TREE;
21989
21990       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
21991       proto_quals = cp_parser_objc_protocol_qualifiers (parser);
21992
21993       /* An ObjC type name may consist of just protocol qualifiers, in which
21994          case the type shall default to 'id'.  */
21995       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
21996         {
21997           cp_type = cp_parser_type_id (parser);
21998           
21999           /* If the type could not be parsed, an error has already
22000              been produced.  For error recovery, behave as if it had
22001              not been specified, which will use the default type
22002              'id'.  */
22003           if (cp_type == error_mark_node)
22004             {
22005               cp_type = NULL_TREE;
22006               /* We need to skip to the closing parenthesis as
22007                  cp_parser_type_id() does not seem to do it for
22008                  us.  */
22009               cp_parser_skip_to_closing_parenthesis (parser,
22010                                                      /*recovering=*/true,
22011                                                      /*or_comma=*/false,
22012                                                      /*consume_paren=*/false);
22013             }
22014         }
22015
22016       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22017       type_name = build_tree_list (proto_quals, cp_type);
22018     }
22019
22020   return type_name;
22021 }
22022
22023 /* Check to see if TYPE refers to an Objective-C selector name.  */
22024
22025 static bool
22026 cp_parser_objc_selector_p (enum cpp_ttype type)
22027 {
22028   return (type == CPP_NAME || type == CPP_KEYWORD
22029           || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
22030           || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
22031           || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
22032           || type == CPP_XOR || type == CPP_XOR_EQ);
22033 }
22034
22035 /* Parse an Objective-C selector.  */
22036
22037 static tree
22038 cp_parser_objc_selector (cp_parser* parser)
22039 {
22040   cp_token *token = cp_lexer_consume_token (parser->lexer);
22041
22042   if (!cp_parser_objc_selector_p (token->type))
22043     {
22044       error_at (token->location, "invalid Objective-C++ selector name");
22045       return error_mark_node;
22046     }
22047
22048   /* C++ operator names are allowed to appear in ObjC selectors.  */
22049   switch (token->type)
22050     {
22051     case CPP_AND_AND: return get_identifier ("and");
22052     case CPP_AND_EQ: return get_identifier ("and_eq");
22053     case CPP_AND: return get_identifier ("bitand");
22054     case CPP_OR: return get_identifier ("bitor");
22055     case CPP_COMPL: return get_identifier ("compl");
22056     case CPP_NOT: return get_identifier ("not");
22057     case CPP_NOT_EQ: return get_identifier ("not_eq");
22058     case CPP_OR_OR: return get_identifier ("or");
22059     case CPP_OR_EQ: return get_identifier ("or_eq");
22060     case CPP_XOR: return get_identifier ("xor");
22061     case CPP_XOR_EQ: return get_identifier ("xor_eq");
22062     default: return token->u.value;
22063     }
22064 }
22065
22066 /* Parse an Objective-C params list.  */
22067
22068 static tree
22069 cp_parser_objc_method_keyword_params (cp_parser* parser, tree* attributes)
22070 {
22071   tree params = NULL_TREE;
22072   bool maybe_unary_selector_p = true;
22073   cp_token *token = cp_lexer_peek_token (parser->lexer);
22074
22075   while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
22076     {
22077       tree selector = NULL_TREE, type_name, identifier;
22078       tree parm_attr = NULL_TREE;
22079
22080       if (token->keyword == RID_ATTRIBUTE)
22081         break;
22082
22083       if (token->type != CPP_COLON)
22084         selector = cp_parser_objc_selector (parser);
22085
22086       /* Detect if we have a unary selector.  */
22087       if (maybe_unary_selector_p
22088           && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
22089         {
22090           params = selector; /* Might be followed by attributes.  */
22091           break;
22092         }
22093
22094       maybe_unary_selector_p = false;
22095       if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
22096         {
22097           /* Something went quite wrong.  There should be a colon
22098              here, but there is not.  Stop parsing parameters.  */
22099           break;
22100         }
22101       type_name = cp_parser_objc_typename (parser);
22102       /* New ObjC allows attributes on parameters too.  */
22103       if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
22104         parm_attr = cp_parser_attributes_opt (parser);
22105       identifier = cp_parser_identifier (parser);
22106
22107       params
22108         = chainon (params,
22109                    objc_build_keyword_decl (selector,
22110                                             type_name,
22111                                             identifier,
22112                                             parm_attr));
22113
22114       token = cp_lexer_peek_token (parser->lexer);
22115     }
22116
22117   if (params == NULL_TREE)
22118     {
22119       cp_parser_error (parser, "objective-c++ method declaration is expected");
22120       return error_mark_node;
22121     }
22122
22123   /* We allow tail attributes for the method.  */
22124   if (token->keyword == RID_ATTRIBUTE)
22125     {
22126       *attributes = cp_parser_attributes_opt (parser);
22127       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
22128           || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
22129         return params;
22130       cp_parser_error (parser, 
22131                        "method attributes must be specified at the end");
22132       return error_mark_node;
22133     }
22134
22135   if (params == NULL_TREE)
22136     {
22137       cp_parser_error (parser, "objective-c++ method declaration is expected");
22138       return error_mark_node;
22139     }
22140   return params;
22141 }
22142
22143 /* Parse the non-keyword Objective-C params.  */
22144
22145 static tree
22146 cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp, 
22147                                        tree* attributes)
22148 {
22149   tree params = make_node (TREE_LIST);
22150   cp_token *token = cp_lexer_peek_token (parser->lexer);
22151   *ellipsisp = false;  /* Initially, assume no ellipsis.  */
22152
22153   while (token->type == CPP_COMMA)
22154     {
22155       cp_parameter_declarator *parmdecl;
22156       tree parm;
22157
22158       cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
22159       token = cp_lexer_peek_token (parser->lexer);
22160
22161       if (token->type == CPP_ELLIPSIS)
22162         {
22163           cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
22164           *ellipsisp = true;
22165           token = cp_lexer_peek_token (parser->lexer);
22166           break;
22167         }
22168
22169       /* TODO: parse attributes for tail parameters.  */
22170       parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
22171       parm = grokdeclarator (parmdecl->declarator,
22172                              &parmdecl->decl_specifiers,
22173                              PARM, /*initialized=*/0,
22174                              /*attrlist=*/NULL);
22175
22176       chainon (params, build_tree_list (NULL_TREE, parm));
22177       token = cp_lexer_peek_token (parser->lexer);
22178     }
22179
22180   /* We allow tail attributes for the method.  */
22181   if (token->keyword == RID_ATTRIBUTE)
22182     {
22183       if (*attributes == NULL_TREE)
22184         {
22185           *attributes = cp_parser_attributes_opt (parser);
22186           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
22187               || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
22188             return params;
22189         }
22190       else        
22191         /* We have an error, but parse the attributes, so that we can 
22192            carry on.  */
22193         *attributes = cp_parser_attributes_opt (parser);
22194
22195       cp_parser_error (parser, 
22196                        "method attributes must be specified at the end");
22197       return error_mark_node;
22198     }
22199
22200   return params;
22201 }
22202
22203 /* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
22204
22205 static void
22206 cp_parser_objc_interstitial_code (cp_parser* parser)
22207 {
22208   cp_token *token = cp_lexer_peek_token (parser->lexer);
22209
22210   /* If the next token is `extern' and the following token is a string
22211      literal, then we have a linkage specification.  */
22212   if (token->keyword == RID_EXTERN
22213       && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser->lexer, 2)))
22214     cp_parser_linkage_specification (parser);
22215   /* Handle #pragma, if any.  */
22216   else if (token->type == CPP_PRAGMA)
22217     cp_parser_pragma (parser, pragma_external);
22218   /* Allow stray semicolons.  */
22219   else if (token->type == CPP_SEMICOLON)
22220     cp_lexer_consume_token (parser->lexer);
22221   /* Mark methods as optional or required, when building protocols.  */
22222   else if (token->keyword == RID_AT_OPTIONAL)
22223     {
22224       cp_lexer_consume_token (parser->lexer);
22225       objc_set_method_opt (true);
22226     }
22227   else if (token->keyword == RID_AT_REQUIRED)
22228     {
22229       cp_lexer_consume_token (parser->lexer);
22230       objc_set_method_opt (false);
22231     }
22232   else if (token->keyword == RID_NAMESPACE)
22233     cp_parser_namespace_definition (parser);
22234   /* Other stray characters must generate errors.  */
22235   else if (token->type == CPP_OPEN_BRACE || token->type == CPP_CLOSE_BRACE)
22236     {
22237       cp_lexer_consume_token (parser->lexer);
22238       error ("stray %qs between Objective-C++ methods",
22239              token->type == CPP_OPEN_BRACE ? "{" : "}");
22240     }
22241   /* Finally, try to parse a block-declaration, or a function-definition.  */
22242   else
22243     cp_parser_block_declaration (parser, /*statement_p=*/false);
22244 }
22245
22246 /* Parse a method signature.  */
22247
22248 static tree
22249 cp_parser_objc_method_signature (cp_parser* parser, tree* attributes)
22250 {
22251   tree rettype, kwdparms, optparms;
22252   bool ellipsis = false;
22253   bool is_class_method;
22254
22255   is_class_method = cp_parser_objc_method_type (parser);
22256   rettype = cp_parser_objc_typename (parser);
22257   *attributes = NULL_TREE;
22258   kwdparms = cp_parser_objc_method_keyword_params (parser, attributes);
22259   if (kwdparms == error_mark_node)
22260     return error_mark_node;
22261   optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis, attributes);
22262   if (optparms == error_mark_node)
22263     return error_mark_node;
22264
22265   return objc_build_method_signature (is_class_method, rettype, kwdparms, optparms, ellipsis);
22266 }
22267
22268 static bool
22269 cp_parser_objc_method_maybe_bad_prefix_attributes (cp_parser* parser)
22270 {
22271   tree tattr;  
22272   cp_lexer_save_tokens (parser->lexer);
22273   tattr = cp_parser_attributes_opt (parser);
22274   gcc_assert (tattr) ;
22275   
22276   /* If the attributes are followed by a method introducer, this is not allowed.
22277      Dump the attributes and flag the situation.  */
22278   if (cp_lexer_next_token_is (parser->lexer, CPP_PLUS)
22279       || cp_lexer_next_token_is (parser->lexer, CPP_MINUS))
22280     return true;
22281
22282   /* Otherwise, the attributes introduce some interstitial code, possibly so
22283      rewind to allow that check.  */
22284   cp_lexer_rollback_tokens (parser->lexer);
22285   return false;  
22286 }
22287
22288 /* Parse an Objective-C method prototype list.  */
22289
22290 static void
22291 cp_parser_objc_method_prototype_list (cp_parser* parser)
22292 {
22293   cp_token *token = cp_lexer_peek_token (parser->lexer);
22294
22295   while (token->keyword != RID_AT_END && token->type != CPP_EOF)
22296     {
22297       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
22298         {
22299           tree attributes, sig;
22300           bool is_class_method;
22301           if (token->type == CPP_PLUS)
22302             is_class_method = true;
22303           else
22304             is_class_method = false;
22305           sig = cp_parser_objc_method_signature (parser, &attributes);
22306           if (sig == error_mark_node)
22307             {
22308               cp_parser_skip_to_end_of_block_or_statement (parser);
22309               token = cp_lexer_peek_token (parser->lexer);
22310               continue;
22311             }
22312           objc_add_method_declaration (is_class_method, sig, attributes);
22313           cp_parser_consume_semicolon_at_end_of_statement (parser);
22314         }
22315       else if (token->keyword == RID_AT_PROPERTY)
22316         cp_parser_objc_at_property_declaration (parser);
22317       else if (token->keyword == RID_ATTRIBUTE 
22318                && cp_parser_objc_method_maybe_bad_prefix_attributes(parser))
22319         warning_at (cp_lexer_peek_token (parser->lexer)->location, 
22320                     OPT_Wattributes, 
22321                     "prefix attributes are ignored for methods");
22322       else
22323         /* Allow for interspersed non-ObjC++ code.  */
22324         cp_parser_objc_interstitial_code (parser);
22325
22326       token = cp_lexer_peek_token (parser->lexer);
22327     }
22328
22329   if (token->type != CPP_EOF)
22330     cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
22331   else
22332     cp_parser_error (parser, "expected %<@end%>");
22333
22334   objc_finish_interface ();
22335 }
22336
22337 /* Parse an Objective-C method definition list.  */
22338
22339 static void
22340 cp_parser_objc_method_definition_list (cp_parser* parser)
22341 {
22342   cp_token *token = cp_lexer_peek_token (parser->lexer);
22343
22344   while (token->keyword != RID_AT_END && token->type != CPP_EOF)
22345     {
22346       tree meth;
22347
22348       if (token->type == CPP_PLUS || token->type == CPP_MINUS)
22349         {
22350           cp_token *ptk;
22351           tree sig, attribute;
22352           bool is_class_method;
22353           if (token->type == CPP_PLUS)
22354             is_class_method = true;
22355           else
22356             is_class_method = false;
22357           push_deferring_access_checks (dk_deferred);
22358           sig = cp_parser_objc_method_signature (parser, &attribute);
22359           if (sig == error_mark_node)
22360             {
22361               cp_parser_skip_to_end_of_block_or_statement (parser);
22362               token = cp_lexer_peek_token (parser->lexer);
22363               continue;
22364             }
22365           objc_start_method_definition (is_class_method, sig, attribute,
22366                                         NULL_TREE);
22367
22368           /* For historical reasons, we accept an optional semicolon.  */
22369           if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
22370             cp_lexer_consume_token (parser->lexer);
22371
22372           ptk = cp_lexer_peek_token (parser->lexer);
22373           if (!(ptk->type == CPP_PLUS || ptk->type == CPP_MINUS 
22374                 || ptk->type == CPP_EOF || ptk->keyword == RID_AT_END))
22375             {
22376               perform_deferred_access_checks ();
22377               stop_deferring_access_checks ();
22378               meth = cp_parser_function_definition_after_declarator (parser,
22379                                                                      false);
22380               pop_deferring_access_checks ();
22381               objc_finish_method_definition (meth);
22382             }
22383         }
22384       /* The following case will be removed once @synthesize is
22385          completely implemented.  */
22386       else if (token->keyword == RID_AT_PROPERTY)
22387         cp_parser_objc_at_property_declaration (parser);
22388       else if (token->keyword == RID_AT_SYNTHESIZE)
22389         cp_parser_objc_at_synthesize_declaration (parser);
22390       else if (token->keyword == RID_AT_DYNAMIC)
22391         cp_parser_objc_at_dynamic_declaration (parser);
22392       else if (token->keyword == RID_ATTRIBUTE 
22393                && cp_parser_objc_method_maybe_bad_prefix_attributes(parser))
22394         warning_at (token->location, OPT_Wattributes,
22395                     "prefix attributes are ignored for methods");
22396       else
22397         /* Allow for interspersed non-ObjC++ code.  */
22398         cp_parser_objc_interstitial_code (parser);
22399
22400       token = cp_lexer_peek_token (parser->lexer);
22401     }
22402
22403   if (token->type != CPP_EOF)
22404     cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
22405   else
22406     cp_parser_error (parser, "expected %<@end%>");
22407
22408   objc_finish_implementation ();
22409 }
22410
22411 /* Parse Objective-C ivars.  */
22412
22413 static void
22414 cp_parser_objc_class_ivars (cp_parser* parser)
22415 {
22416   cp_token *token = cp_lexer_peek_token (parser->lexer);
22417
22418   if (token->type != CPP_OPEN_BRACE)
22419     return;     /* No ivars specified.  */
22420
22421   cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
22422   token = cp_lexer_peek_token (parser->lexer);
22423
22424   while (token->type != CPP_CLOSE_BRACE 
22425         && token->keyword != RID_AT_END && token->type != CPP_EOF)
22426     {
22427       cp_decl_specifier_seq declspecs;
22428       int decl_class_or_enum_p;
22429       tree prefix_attributes;
22430
22431       cp_parser_objc_visibility_spec (parser);
22432
22433       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
22434         break;
22435
22436       cp_parser_decl_specifier_seq (parser,
22437                                     CP_PARSER_FLAGS_OPTIONAL,
22438                                     &declspecs,
22439                                     &decl_class_or_enum_p);
22440
22441       /* auto, register, static, extern, mutable.  */
22442       if (declspecs.storage_class != sc_none)
22443         {
22444           cp_parser_error (parser, "invalid type for instance variable");         
22445           declspecs.storage_class = sc_none;
22446         }
22447
22448       /* __thread.  */
22449       if (declspecs.specs[(int) ds_thread])
22450         {
22451           cp_parser_error (parser, "invalid type for instance variable");
22452           declspecs.specs[(int) ds_thread] = 0;
22453         }
22454       
22455       /* typedef.  */
22456       if (declspecs.specs[(int) ds_typedef])
22457         {
22458           cp_parser_error (parser, "invalid type for instance variable");
22459           declspecs.specs[(int) ds_typedef] = 0;
22460         }
22461
22462       prefix_attributes = declspecs.attributes;
22463       declspecs.attributes = NULL_TREE;
22464
22465       /* Keep going until we hit the `;' at the end of the
22466          declaration.  */
22467       while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
22468         {
22469           tree width = NULL_TREE, attributes, first_attribute, decl;
22470           cp_declarator *declarator = NULL;
22471           int ctor_dtor_or_conv_p;
22472
22473           /* Check for a (possibly unnamed) bitfield declaration.  */
22474           token = cp_lexer_peek_token (parser->lexer);
22475           if (token->type == CPP_COLON)
22476             goto eat_colon;
22477
22478           if (token->type == CPP_NAME
22479               && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
22480                   == CPP_COLON))
22481             {
22482               /* Get the name of the bitfield.  */
22483               declarator = make_id_declarator (NULL_TREE,
22484                                                cp_parser_identifier (parser),
22485                                                sfk_none);
22486
22487              eat_colon:
22488               cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
22489               /* Get the width of the bitfield.  */
22490               width
22491                 = cp_parser_constant_expression (parser,
22492                                                  /*allow_non_constant=*/false,
22493                                                  NULL);
22494             }
22495           else
22496             {
22497               /* Parse the declarator.  */
22498               declarator
22499                 = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
22500                                         &ctor_dtor_or_conv_p,
22501                                         /*parenthesized_p=*/NULL,
22502                                         /*member_p=*/false);
22503             }
22504
22505           /* Look for attributes that apply to the ivar.  */
22506           attributes = cp_parser_attributes_opt (parser);
22507           /* Remember which attributes are prefix attributes and
22508              which are not.  */
22509           first_attribute = attributes;
22510           /* Combine the attributes.  */
22511           attributes = chainon (prefix_attributes, attributes);
22512
22513           if (width)
22514               /* Create the bitfield declaration.  */
22515               decl = grokbitfield (declarator, &declspecs,
22516                                    width,
22517                                    attributes);
22518           else
22519             decl = grokfield (declarator, &declspecs,
22520                               NULL_TREE, /*init_const_expr_p=*/false,
22521                               NULL_TREE, attributes);
22522
22523           /* Add the instance variable.  */
22524           if (decl != error_mark_node && decl != NULL_TREE)
22525             objc_add_instance_variable (decl);
22526
22527           /* Reset PREFIX_ATTRIBUTES.  */
22528           while (attributes && TREE_CHAIN (attributes) != first_attribute)
22529             attributes = TREE_CHAIN (attributes);
22530           if (attributes)
22531             TREE_CHAIN (attributes) = NULL_TREE;
22532
22533           token = cp_lexer_peek_token (parser->lexer);
22534
22535           if (token->type == CPP_COMMA)
22536             {
22537               cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
22538               continue;
22539             }
22540           break;
22541         }
22542
22543       cp_parser_consume_semicolon_at_end_of_statement (parser);
22544       token = cp_lexer_peek_token (parser->lexer);
22545     }
22546
22547   if (token->keyword == RID_AT_END)
22548     cp_parser_error (parser, "expected %<}%>");
22549
22550   /* Do not consume the RID_AT_END, so it will be read again as terminating
22551      the @interface of @implementation.  */ 
22552   if (token->keyword != RID_AT_END && token->type != CPP_EOF)
22553     cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
22554     
22555   /* For historical reasons, we accept an optional semicolon.  */
22556   if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
22557     cp_lexer_consume_token (parser->lexer);
22558 }
22559
22560 /* Parse an Objective-C protocol declaration.  */
22561
22562 static void
22563 cp_parser_objc_protocol_declaration (cp_parser* parser, tree attributes)
22564 {
22565   tree proto, protorefs;
22566   cp_token *tok;
22567
22568   cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
22569   if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
22570     {
22571       tok = cp_lexer_peek_token (parser->lexer);
22572       error_at (tok->location, "identifier expected after %<@protocol%>");
22573       cp_parser_consume_semicolon_at_end_of_statement (parser);
22574       return;
22575     }
22576
22577   /* See if we have a forward declaration or a definition.  */
22578   tok = cp_lexer_peek_nth_token (parser->lexer, 2);
22579
22580   /* Try a forward declaration first.  */
22581   if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
22582     {
22583       while (true)
22584         {
22585           tree id;
22586           
22587           id = cp_parser_identifier (parser);
22588           if (id == error_mark_node)
22589             break;
22590           
22591           objc_declare_protocol (id, attributes);
22592           
22593           if(cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
22594             cp_lexer_consume_token (parser->lexer);
22595           else
22596             break;
22597         }
22598       cp_parser_consume_semicolon_at_end_of_statement (parser);
22599     }
22600
22601   /* Ok, we got a full-fledged definition (or at least should).  */
22602   else
22603     {
22604       proto = cp_parser_identifier (parser);
22605       protorefs = cp_parser_objc_protocol_refs_opt (parser);
22606       objc_start_protocol (proto, protorefs, attributes);
22607       cp_parser_objc_method_prototype_list (parser);
22608     }
22609 }
22610
22611 /* Parse an Objective-C superclass or category.  */
22612
22613 static void
22614 cp_parser_objc_superclass_or_category (cp_parser *parser, 
22615                                        bool iface_p,
22616                                        tree *super,
22617                                        tree *categ, bool *is_class_extension)
22618 {
22619   cp_token *next = cp_lexer_peek_token (parser->lexer);
22620
22621   *super = *categ = NULL_TREE;
22622   *is_class_extension = false;
22623   if (next->type == CPP_COLON)
22624     {
22625       cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
22626       *super = cp_parser_identifier (parser);
22627     }
22628   else if (next->type == CPP_OPEN_PAREN)
22629     {
22630       cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
22631
22632       /* If there is no category name, and this is an @interface, we
22633          have a class extension.  */
22634       if (iface_p && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
22635         {
22636           *categ = NULL_TREE;
22637           *is_class_extension = true;
22638         }
22639       else
22640         *categ = cp_parser_identifier (parser);
22641
22642       cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22643     }
22644 }
22645
22646 /* Parse an Objective-C class interface.  */
22647
22648 static void
22649 cp_parser_objc_class_interface (cp_parser* parser, tree attributes)
22650 {
22651   tree name, super, categ, protos;
22652   bool is_class_extension;
22653
22654   cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
22655   name = cp_parser_identifier (parser);
22656   if (name == error_mark_node)
22657     {
22658       /* It's hard to recover because even if valid @interface stuff
22659          is to follow, we can't compile it (or validate it) if we
22660          don't even know which class it refers to.  Let's assume this
22661          was a stray '@interface' token in the stream and skip it.
22662       */
22663       return;
22664     }
22665   cp_parser_objc_superclass_or_category (parser, true, &super, &categ,
22666                                          &is_class_extension);
22667   protos = cp_parser_objc_protocol_refs_opt (parser);
22668
22669   /* We have either a class or a category on our hands.  */
22670   if (categ || is_class_extension)
22671     objc_start_category_interface (name, categ, protos, attributes);
22672   else
22673     {
22674       objc_start_class_interface (name, super, protos, attributes);
22675       /* Handle instance variable declarations, if any.  */
22676       cp_parser_objc_class_ivars (parser);
22677       objc_continue_interface ();
22678     }
22679
22680   cp_parser_objc_method_prototype_list (parser);
22681 }
22682
22683 /* Parse an Objective-C class implementation.  */
22684
22685 static void
22686 cp_parser_objc_class_implementation (cp_parser* parser)
22687 {
22688   tree name, super, categ;
22689   bool is_class_extension;
22690
22691   cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
22692   name = cp_parser_identifier (parser);
22693   if (name == error_mark_node)
22694     {
22695       /* It's hard to recover because even if valid @implementation
22696          stuff is to follow, we can't compile it (or validate it) if
22697          we don't even know which class it refers to.  Let's assume
22698          this was a stray '@implementation' token in the stream and
22699          skip it.
22700       */
22701       return;
22702     }
22703   cp_parser_objc_superclass_or_category (parser, false, &super, &categ,
22704                                          &is_class_extension);
22705
22706   /* We have either a class or a category on our hands.  */
22707   if (categ)
22708     objc_start_category_implementation (name, categ);
22709   else
22710     {
22711       objc_start_class_implementation (name, super);
22712       /* Handle instance variable declarations, if any.  */
22713       cp_parser_objc_class_ivars (parser);
22714       objc_continue_implementation ();
22715     }
22716
22717   cp_parser_objc_method_definition_list (parser);
22718 }
22719
22720 /* Consume the @end token and finish off the implementation.  */
22721
22722 static void
22723 cp_parser_objc_end_implementation (cp_parser* parser)
22724 {
22725   cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
22726   objc_finish_implementation ();
22727 }
22728
22729 /* Parse an Objective-C declaration.  */
22730
22731 static void
22732 cp_parser_objc_declaration (cp_parser* parser, tree attributes)
22733 {
22734   /* Try to figure out what kind of declaration is present.  */
22735   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
22736
22737   if (attributes)
22738     switch (kwd->keyword)
22739       {
22740         case RID_AT_ALIAS:
22741         case RID_AT_CLASS:
22742         case RID_AT_END:
22743           error_at (kwd->location, "attributes may not be specified before"
22744                     " the %<@%D%> Objective-C++ keyword",
22745                     kwd->u.value);
22746           attributes = NULL;
22747           break;
22748         case RID_AT_IMPLEMENTATION:
22749           warning_at (kwd->location, OPT_Wattributes,
22750                       "prefix attributes are ignored before %<@%D%>",
22751                       kwd->u.value);
22752           attributes = NULL;
22753         default:
22754           break;
22755       }
22756
22757   switch (kwd->keyword)
22758     {
22759     case RID_AT_ALIAS:
22760       cp_parser_objc_alias_declaration (parser);
22761       break;
22762     case RID_AT_CLASS:
22763       cp_parser_objc_class_declaration (parser);
22764       break;
22765     case RID_AT_PROTOCOL:
22766       cp_parser_objc_protocol_declaration (parser, attributes);
22767       break;
22768     case RID_AT_INTERFACE:
22769       cp_parser_objc_class_interface (parser, attributes);
22770       break;
22771     case RID_AT_IMPLEMENTATION:
22772       cp_parser_objc_class_implementation (parser);
22773       break;
22774     case RID_AT_END:
22775       cp_parser_objc_end_implementation (parser);
22776       break;
22777     default:
22778       error_at (kwd->location, "misplaced %<@%D%> Objective-C++ construct",
22779                 kwd->u.value);
22780       cp_parser_skip_to_end_of_block_or_statement (parser);
22781     }
22782 }
22783
22784 /* Parse an Objective-C try-catch-finally statement.
22785
22786    objc-try-catch-finally-stmt:
22787      @try compound-statement objc-catch-clause-seq [opt]
22788        objc-finally-clause [opt]
22789
22790    objc-catch-clause-seq:
22791      objc-catch-clause objc-catch-clause-seq [opt]
22792
22793    objc-catch-clause:
22794      @catch ( objc-exception-declaration ) compound-statement
22795
22796    objc-finally-clause:
22797      @finally compound-statement
22798
22799    objc-exception-declaration:
22800      parameter-declaration
22801      '...'
22802
22803    where '...' is to be interpreted literally, that is, it means CPP_ELLIPSIS.
22804
22805    Returns NULL_TREE.
22806
22807    PS: This function is identical to c_parser_objc_try_catch_finally_statement
22808    for C.  Keep them in sync.  */   
22809
22810 static tree
22811 cp_parser_objc_try_catch_finally_statement (cp_parser *parser)
22812 {
22813   location_t location;
22814   tree stmt;
22815
22816   cp_parser_require_keyword (parser, RID_AT_TRY, RT_AT_TRY);
22817   location = cp_lexer_peek_token (parser->lexer)->location;
22818   objc_maybe_warn_exceptions (location);
22819   /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
22820      node, lest it get absorbed into the surrounding block.  */
22821   stmt = push_stmt_list ();
22822   cp_parser_compound_statement (parser, NULL, false, false);
22823   objc_begin_try_stmt (location, pop_stmt_list (stmt));
22824
22825   while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
22826     {
22827       cp_parameter_declarator *parm;
22828       tree parameter_declaration = error_mark_node;
22829       bool seen_open_paren = false;
22830
22831       cp_lexer_consume_token (parser->lexer);
22832       if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
22833         seen_open_paren = true;
22834       if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
22835         {
22836           /* We have "@catch (...)" (where the '...' are literally
22837              what is in the code).  Skip the '...'.
22838              parameter_declaration is set to NULL_TREE, and
22839              objc_being_catch_clauses() knows that that means
22840              '...'.  */
22841           cp_lexer_consume_token (parser->lexer);
22842           parameter_declaration = NULL_TREE;
22843         }
22844       else
22845         {
22846           /* We have "@catch (NSException *exception)" or something
22847              like that.  Parse the parameter declaration.  */
22848           parm = cp_parser_parameter_declaration (parser, false, NULL);
22849           if (parm == NULL)
22850             parameter_declaration = error_mark_node;
22851           else
22852             parameter_declaration = grokdeclarator (parm->declarator,
22853                                                     &parm->decl_specifiers,
22854                                                     PARM, /*initialized=*/0,
22855                                                     /*attrlist=*/NULL);
22856         }
22857       if (seen_open_paren)
22858         cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22859       else
22860         {
22861           /* If there was no open parenthesis, we are recovering from
22862              an error, and we are trying to figure out what mistake
22863              the user has made.  */
22864
22865           /* If there is an immediate closing parenthesis, the user
22866              probably forgot the opening one (ie, they typed "@catch
22867              NSException *e)".  Parse the closing parenthesis and keep
22868              going.  */
22869           if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
22870             cp_lexer_consume_token (parser->lexer);
22871           
22872           /* If these is no immediate closing parenthesis, the user
22873              probably doesn't know that parenthesis are required at
22874              all (ie, they typed "@catch NSException *e").  So, just
22875              forget about the closing parenthesis and keep going.  */
22876         }
22877       objc_begin_catch_clause (parameter_declaration);
22878       cp_parser_compound_statement (parser, NULL, false, false);
22879       objc_finish_catch_clause ();
22880     }
22881   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
22882     {
22883       cp_lexer_consume_token (parser->lexer);
22884       location = cp_lexer_peek_token (parser->lexer)->location;
22885       /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
22886          node, lest it get absorbed into the surrounding block.  */
22887       stmt = push_stmt_list ();
22888       cp_parser_compound_statement (parser, NULL, false, false);
22889       objc_build_finally_clause (location, pop_stmt_list (stmt));
22890     }
22891
22892   return objc_finish_try_stmt ();
22893 }
22894
22895 /* Parse an Objective-C synchronized statement.
22896
22897    objc-synchronized-stmt:
22898      @synchronized ( expression ) compound-statement
22899
22900    Returns NULL_TREE.  */
22901
22902 static tree
22903 cp_parser_objc_synchronized_statement (cp_parser *parser)
22904 {
22905   location_t location;
22906   tree lock, stmt;
22907
22908   cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, RT_AT_SYNCHRONIZED);
22909
22910   location = cp_lexer_peek_token (parser->lexer)->location;
22911   objc_maybe_warn_exceptions (location);
22912   cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
22913   lock = cp_parser_expression (parser, false, NULL);
22914   cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
22915
22916   /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
22917      node, lest it get absorbed into the surrounding block.  */
22918   stmt = push_stmt_list ();
22919   cp_parser_compound_statement (parser, NULL, false, false);
22920
22921   return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
22922 }
22923
22924 /* Parse an Objective-C throw statement.
22925
22926    objc-throw-stmt:
22927      @throw assignment-expression [opt] ;
22928
22929    Returns a constructed '@throw' statement.  */
22930
22931 static tree
22932 cp_parser_objc_throw_statement (cp_parser *parser)
22933 {
22934   tree expr = NULL_TREE;
22935   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
22936
22937   cp_parser_require_keyword (parser, RID_AT_THROW, RT_AT_THROW);
22938
22939   if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
22940     expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
22941
22942   cp_parser_consume_semicolon_at_end_of_statement (parser);
22943
22944   return objc_build_throw_stmt (loc, expr);
22945 }
22946
22947 /* Parse an Objective-C statement.  */
22948
22949 static tree
22950 cp_parser_objc_statement (cp_parser * parser)
22951 {
22952   /* Try to figure out what kind of declaration is present.  */
22953   cp_token *kwd = cp_lexer_peek_token (parser->lexer);
22954
22955   switch (kwd->keyword)
22956     {
22957     case RID_AT_TRY:
22958       return cp_parser_objc_try_catch_finally_statement (parser);
22959     case RID_AT_SYNCHRONIZED:
22960       return cp_parser_objc_synchronized_statement (parser);
22961     case RID_AT_THROW:
22962       return cp_parser_objc_throw_statement (parser);
22963     default:
22964       error_at (kwd->location, "misplaced %<@%D%> Objective-C++ construct",
22965                kwd->u.value);
22966       cp_parser_skip_to_end_of_block_or_statement (parser);
22967     }
22968
22969   return error_mark_node;
22970 }
22971
22972 /* If we are compiling ObjC++ and we see an __attribute__ we neeed to 
22973    look ahead to see if an objc keyword follows the attributes.  This
22974    is to detect the use of prefix attributes on ObjC @interface and 
22975    @protocol.  */
22976
22977 static bool
22978 cp_parser_objc_valid_prefix_attributes (cp_parser* parser, tree *attrib)
22979 {
22980   cp_lexer_save_tokens (parser->lexer);
22981   *attrib = cp_parser_attributes_opt (parser);
22982   gcc_assert (*attrib);
22983   if (OBJC_IS_AT_KEYWORD (cp_lexer_peek_token (parser->lexer)->keyword))
22984     {
22985       cp_lexer_commit_tokens (parser->lexer);
22986       return true;
22987     }
22988   cp_lexer_rollback_tokens (parser->lexer);
22989   return false;  
22990 }
22991
22992 /* This routine is a minimal replacement for
22993    c_parser_struct_declaration () used when parsing the list of
22994    types/names or ObjC++ properties.  For example, when parsing the
22995    code
22996
22997    @property (readonly) int a, b, c;
22998
22999    this function is responsible for parsing "int a, int b, int c" and
23000    returning the declarations as CHAIN of DECLs.
23001
23002    TODO: Share this code with cp_parser_objc_class_ivars.  It's very
23003    similar parsing.  */
23004 static tree
23005 cp_parser_objc_struct_declaration (cp_parser *parser)
23006 {
23007   tree decls = NULL_TREE;
23008   cp_decl_specifier_seq declspecs;
23009   int decl_class_or_enum_p;
23010   tree prefix_attributes;
23011
23012   cp_parser_decl_specifier_seq (parser,
23013                                 CP_PARSER_FLAGS_NONE,
23014                                 &declspecs,
23015                                 &decl_class_or_enum_p);
23016
23017   if (declspecs.type == error_mark_node)
23018     return error_mark_node;
23019
23020   /* auto, register, static, extern, mutable.  */
23021   if (declspecs.storage_class != sc_none)
23022     {
23023       cp_parser_error (parser, "invalid type for property");
23024       declspecs.storage_class = sc_none;
23025     }
23026   
23027   /* __thread.  */
23028   if (declspecs.specs[(int) ds_thread])
23029     {
23030       cp_parser_error (parser, "invalid type for property");
23031       declspecs.specs[(int) ds_thread] = 0;
23032     }
23033   
23034   /* typedef.  */
23035   if (declspecs.specs[(int) ds_typedef])
23036     {
23037       cp_parser_error (parser, "invalid type for property");
23038       declspecs.specs[(int) ds_typedef] = 0;
23039     }
23040
23041   prefix_attributes = declspecs.attributes;
23042   declspecs.attributes = NULL_TREE;
23043
23044   /* Keep going until we hit the `;' at the end of the declaration. */
23045   while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
23046     {
23047       tree attributes, first_attribute, decl;
23048       cp_declarator *declarator;
23049       cp_token *token;
23050
23051       /* Parse the declarator.  */
23052       declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
23053                                          NULL, NULL, false);
23054
23055       /* Look for attributes that apply to the ivar.  */
23056       attributes = cp_parser_attributes_opt (parser);
23057       /* Remember which attributes are prefix attributes and
23058          which are not.  */
23059       first_attribute = attributes;
23060       /* Combine the attributes.  */
23061       attributes = chainon (prefix_attributes, attributes);
23062       
23063       decl = grokfield (declarator, &declspecs,
23064                         NULL_TREE, /*init_const_expr_p=*/false,
23065                         NULL_TREE, attributes);
23066
23067       if (decl == error_mark_node || decl == NULL_TREE)
23068         return error_mark_node;
23069       
23070       /* Reset PREFIX_ATTRIBUTES.  */
23071       while (attributes && TREE_CHAIN (attributes) != first_attribute)
23072         attributes = TREE_CHAIN (attributes);
23073       if (attributes)
23074         TREE_CHAIN (attributes) = NULL_TREE;
23075
23076       DECL_CHAIN (decl) = decls;
23077       decls = decl;
23078
23079       token = cp_lexer_peek_token (parser->lexer);
23080       if (token->type == CPP_COMMA)
23081         {
23082           cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
23083           continue;
23084         }
23085       else
23086         break;
23087     }
23088   return decls;
23089 }
23090
23091 /* Parse an Objective-C @property declaration.  The syntax is:
23092
23093    objc-property-declaration:
23094      '@property' objc-property-attributes[opt] struct-declaration ;
23095
23096    objc-property-attributes:
23097     '(' objc-property-attribute-list ')'
23098
23099    objc-property-attribute-list:
23100      objc-property-attribute
23101      objc-property-attribute-list, objc-property-attribute
23102
23103    objc-property-attribute
23104      'getter' = identifier
23105      'setter' = identifier
23106      'readonly'
23107      'readwrite'
23108      'assign'
23109      'retain'
23110      'copy'
23111      'nonatomic'
23112
23113   For example:
23114     @property NSString *name;
23115     @property (readonly) id object;
23116     @property (retain, nonatomic, getter=getTheName) id name;
23117     @property int a, b, c;
23118
23119    PS: This function is identical to
23120    c_parser_objc_at_property_declaration for C.  Keep them in sync.  */
23121 static void 
23122 cp_parser_objc_at_property_declaration (cp_parser *parser)
23123 {
23124   /* The following variables hold the attributes of the properties as
23125      parsed.  They are 'false' or 'NULL_TREE' if the attribute was not
23126      seen.  When we see an attribute, we set them to 'true' (if they
23127      are boolean properties) or to the identifier (if they have an
23128      argument, ie, for getter and setter).  Note that here we only
23129      parse the list of attributes, check the syntax and accumulate the
23130      attributes that we find.  objc_add_property_declaration() will
23131      then process the information.  */
23132   bool property_assign = false;
23133   bool property_copy = false;
23134   tree property_getter_ident = NULL_TREE;
23135   bool property_nonatomic = false;
23136   bool property_readonly = false;
23137   bool property_readwrite = false;
23138   bool property_retain = false;
23139   tree property_setter_ident = NULL_TREE;
23140
23141   /* 'properties' is the list of properties that we read.  Usually a
23142      single one, but maybe more (eg, in "@property int a, b, c;" there
23143      are three).  */
23144   tree properties;
23145   location_t loc;
23146
23147   loc = cp_lexer_peek_token (parser->lexer)->location;
23148
23149   cp_lexer_consume_token (parser->lexer);  /* Eat '@property'.  */
23150
23151   /* Parse the optional attribute list...  */
23152   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
23153     {
23154       /* Eat the '('.  */
23155       cp_lexer_consume_token (parser->lexer);
23156
23157       while (true)
23158         {
23159           bool syntax_error = false;
23160           cp_token *token = cp_lexer_peek_token (parser->lexer);
23161           enum rid keyword;
23162
23163           if (token->type != CPP_NAME)
23164             {
23165               cp_parser_error (parser, "expected identifier");
23166               break;
23167             }
23168           keyword = C_RID_CODE (token->u.value);
23169           cp_lexer_consume_token (parser->lexer);
23170           switch (keyword)
23171             {
23172             case RID_ASSIGN:    property_assign = true;    break;
23173             case RID_COPY:      property_copy = true;      break;
23174             case RID_NONATOMIC: property_nonatomic = true; break;
23175             case RID_READONLY:  property_readonly = true;  break;
23176             case RID_READWRITE: property_readwrite = true; break;
23177             case RID_RETAIN:    property_retain = true;    break;
23178
23179             case RID_GETTER:
23180             case RID_SETTER:
23181               if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
23182                 {
23183                   if (keyword == RID_GETTER)
23184                     cp_parser_error (parser,
23185                                      "missing %<=%> (after %<getter%> attribute)");
23186                   else
23187                     cp_parser_error (parser,
23188                                      "missing %<=%> (after %<setter%> attribute)");
23189                   syntax_error = true;
23190                   break;
23191                 }
23192               cp_lexer_consume_token (parser->lexer); /* eat the = */
23193               if (!cp_parser_objc_selector_p (cp_lexer_peek_token (parser->lexer)->type))
23194                 {
23195                   cp_parser_error (parser, "expected identifier");
23196                   syntax_error = true;
23197                   break;
23198                 }
23199               if (keyword == RID_SETTER)
23200                 {
23201                   if (property_setter_ident != NULL_TREE)
23202                     {
23203                       cp_parser_error (parser, "the %<setter%> attribute may only be specified once");
23204                       cp_lexer_consume_token (parser->lexer);
23205                     }
23206                   else
23207                     property_setter_ident = cp_parser_objc_selector (parser);
23208                   if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
23209                     cp_parser_error (parser, "setter name must terminate with %<:%>");
23210                   else
23211                     cp_lexer_consume_token (parser->lexer);
23212                 }
23213               else
23214                 {
23215                   if (property_getter_ident != NULL_TREE)
23216                     {
23217                       cp_parser_error (parser, "the %<getter%> attribute may only be specified once");
23218                       cp_lexer_consume_token (parser->lexer);
23219                     }
23220                   else
23221                     property_getter_ident = cp_parser_objc_selector (parser);
23222                 }
23223               break;
23224             default:
23225               cp_parser_error (parser, "unknown property attribute");
23226               syntax_error = true;
23227               break;
23228             }
23229
23230           if (syntax_error)
23231             break;
23232
23233           if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23234             cp_lexer_consume_token (parser->lexer);
23235           else
23236             break;
23237         }
23238
23239       /* FIXME: "@property (setter, assign);" will generate a spurious
23240          "error: expected â€˜)’ before â€˜,’ token".  This is because
23241          cp_parser_require, unlike the C counterpart, will produce an
23242          error even if we are in error recovery.  */
23243       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
23244         {
23245           cp_parser_skip_to_closing_parenthesis (parser,
23246                                                  /*recovering=*/true,
23247                                                  /*or_comma=*/false,
23248                                                  /*consume_paren=*/true);
23249         }
23250     }
23251
23252   /* ... and the property declaration(s).  */
23253   properties = cp_parser_objc_struct_declaration (parser);
23254
23255   if (properties == error_mark_node)
23256     {
23257       cp_parser_skip_to_end_of_statement (parser);
23258       /* If the next token is now a `;', consume it.  */
23259       if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
23260         cp_lexer_consume_token (parser->lexer);
23261       return;
23262     }
23263
23264   if (properties == NULL_TREE)
23265     cp_parser_error (parser, "expected identifier");
23266   else
23267     {
23268       /* Comma-separated properties are chained together in
23269          reverse order; add them one by one.  */
23270       properties = nreverse (properties);
23271       
23272       for (; properties; properties = TREE_CHAIN (properties))
23273         objc_add_property_declaration (loc, copy_node (properties),
23274                                        property_readonly, property_readwrite,
23275                                        property_assign, property_retain,
23276                                        property_copy, property_nonatomic,
23277                                        property_getter_ident, property_setter_ident);
23278     }
23279   
23280   cp_parser_consume_semicolon_at_end_of_statement (parser);
23281 }
23282
23283 /* Parse an Objective-C++ @synthesize declaration.  The syntax is:
23284
23285    objc-synthesize-declaration:
23286      @synthesize objc-synthesize-identifier-list ;
23287
23288    objc-synthesize-identifier-list:
23289      objc-synthesize-identifier
23290      objc-synthesize-identifier-list, objc-synthesize-identifier
23291
23292    objc-synthesize-identifier
23293      identifier
23294      identifier = identifier
23295
23296   For example:
23297     @synthesize MyProperty;
23298     @synthesize OneProperty, AnotherProperty=MyIvar, YetAnotherProperty;
23299
23300   PS: This function is identical to c_parser_objc_at_synthesize_declaration
23301   for C.  Keep them in sync.
23302 */
23303 static void 
23304 cp_parser_objc_at_synthesize_declaration (cp_parser *parser)
23305 {
23306   tree list = NULL_TREE;
23307   location_t loc;
23308   loc = cp_lexer_peek_token (parser->lexer)->location;
23309
23310   cp_lexer_consume_token (parser->lexer);  /* Eat '@synthesize'.  */
23311   while (true)
23312     {
23313       tree property, ivar;
23314       property = cp_parser_identifier (parser);
23315       if (property == error_mark_node)
23316         {
23317           cp_parser_consume_semicolon_at_end_of_statement (parser);
23318           return;
23319         }
23320       if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
23321         {
23322           cp_lexer_consume_token (parser->lexer);
23323           ivar = cp_parser_identifier (parser);
23324           if (ivar == error_mark_node)
23325             {
23326               cp_parser_consume_semicolon_at_end_of_statement (parser);
23327               return;
23328             }
23329         }
23330       else
23331         ivar = NULL_TREE;
23332       list = chainon (list, build_tree_list (ivar, property));
23333       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23334         cp_lexer_consume_token (parser->lexer);
23335       else
23336         break;
23337     }
23338   cp_parser_consume_semicolon_at_end_of_statement (parser);
23339   objc_add_synthesize_declaration (loc, list);
23340 }
23341
23342 /* Parse an Objective-C++ @dynamic declaration.  The syntax is:
23343
23344    objc-dynamic-declaration:
23345      @dynamic identifier-list ;
23346
23347    For example:
23348      @dynamic MyProperty;
23349      @dynamic MyProperty, AnotherProperty;
23350
23351   PS: This function is identical to c_parser_objc_at_dynamic_declaration
23352   for C.  Keep them in sync.
23353 */
23354 static void 
23355 cp_parser_objc_at_dynamic_declaration (cp_parser *parser)
23356 {
23357   tree list = NULL_TREE;
23358   location_t loc;
23359   loc = cp_lexer_peek_token (parser->lexer)->location;
23360
23361   cp_lexer_consume_token (parser->lexer);  /* Eat '@dynamic'.  */
23362   while (true)
23363     {
23364       tree property;
23365       property = cp_parser_identifier (parser);
23366       if (property == error_mark_node)
23367         {
23368           cp_parser_consume_semicolon_at_end_of_statement (parser);
23369           return;
23370         }
23371       list = chainon (list, build_tree_list (NULL, property));
23372       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23373         cp_lexer_consume_token (parser->lexer);
23374       else
23375         break;
23376     }
23377   cp_parser_consume_semicolon_at_end_of_statement (parser);
23378   objc_add_dynamic_declaration (loc, list);
23379 }
23380
23381 \f
23382 /* OpenMP 2.5 parsing routines.  */
23383
23384 /* Returns name of the next clause.
23385    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
23386    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
23387    returned and the token is consumed.  */
23388
23389 static pragma_omp_clause
23390 cp_parser_omp_clause_name (cp_parser *parser)
23391 {
23392   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
23393
23394   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
23395     result = PRAGMA_OMP_CLAUSE_IF;
23396   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
23397     result = PRAGMA_OMP_CLAUSE_DEFAULT;
23398   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
23399     result = PRAGMA_OMP_CLAUSE_PRIVATE;
23400   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
23401     {
23402       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
23403       const char *p = IDENTIFIER_POINTER (id);
23404
23405       switch (p[0])
23406         {
23407         case 'c':
23408           if (!strcmp ("collapse", p))
23409             result = PRAGMA_OMP_CLAUSE_COLLAPSE;
23410           else if (!strcmp ("copyin", p))
23411             result = PRAGMA_OMP_CLAUSE_COPYIN;
23412           else if (!strcmp ("copyprivate", p))
23413             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
23414           break;
23415         case 'f':
23416           if (!strcmp ("firstprivate", p))
23417             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
23418           break;
23419         case 'l':
23420           if (!strcmp ("lastprivate", p))
23421             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
23422           break;
23423         case 'n':
23424           if (!strcmp ("nowait", p))
23425             result = PRAGMA_OMP_CLAUSE_NOWAIT;
23426           else if (!strcmp ("num_threads", p))
23427             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
23428           break;
23429         case 'o':
23430           if (!strcmp ("ordered", p))
23431             result = PRAGMA_OMP_CLAUSE_ORDERED;
23432           break;
23433         case 'r':
23434           if (!strcmp ("reduction", p))
23435             result = PRAGMA_OMP_CLAUSE_REDUCTION;
23436           break;
23437         case 's':
23438           if (!strcmp ("schedule", p))
23439             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
23440           else if (!strcmp ("shared", p))
23441             result = PRAGMA_OMP_CLAUSE_SHARED;
23442           break;
23443         case 'u':
23444           if (!strcmp ("untied", p))
23445             result = PRAGMA_OMP_CLAUSE_UNTIED;
23446           break;
23447         }
23448     }
23449
23450   if (result != PRAGMA_OMP_CLAUSE_NONE)
23451     cp_lexer_consume_token (parser->lexer);
23452
23453   return result;
23454 }
23455
23456 /* Validate that a clause of the given type does not already exist.  */
23457
23458 static void
23459 check_no_duplicate_clause (tree clauses, enum omp_clause_code code,
23460                            const char *name, location_t location)
23461 {
23462   tree c;
23463
23464   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
23465     if (OMP_CLAUSE_CODE (c) == code)
23466       {
23467         error_at (location, "too many %qs clauses", name);
23468         break;
23469       }
23470 }
23471
23472 /* OpenMP 2.5:
23473    variable-list:
23474      identifier
23475      variable-list , identifier
23476
23477    In addition, we match a closing parenthesis.  An opening parenthesis
23478    will have been consumed by the caller.
23479
23480    If KIND is nonzero, create the appropriate node and install the decl
23481    in OMP_CLAUSE_DECL and add the node to the head of the list.
23482
23483    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
23484    return the list created.  */
23485
23486 static tree
23487 cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
23488                                 tree list)
23489 {
23490   cp_token *token;
23491   while (1)
23492     {
23493       tree name, decl;
23494
23495       token = cp_lexer_peek_token (parser->lexer);
23496       name = cp_parser_id_expression (parser, /*template_p=*/false,
23497                                       /*check_dependency_p=*/true,
23498                                       /*template_p=*/NULL,
23499                                       /*declarator_p=*/false,
23500                                       /*optional_p=*/false);
23501       if (name == error_mark_node)
23502         goto skip_comma;
23503
23504       decl = cp_parser_lookup_name_simple (parser, name, token->location);
23505       if (decl == error_mark_node)
23506         cp_parser_name_lookup_error (parser, name, decl, NLE_NULL,
23507                                      token->location);
23508       else if (kind != 0)
23509         {
23510           tree u = build_omp_clause (token->location, kind);
23511           OMP_CLAUSE_DECL (u) = decl;
23512           OMP_CLAUSE_CHAIN (u) = list;
23513           list = u;
23514         }
23515       else
23516         list = tree_cons (decl, NULL_TREE, list);
23517
23518     get_comma:
23519       if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
23520         break;
23521       cp_lexer_consume_token (parser->lexer);
23522     }
23523
23524   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
23525     {
23526       int ending;
23527
23528       /* Try to resync to an unnested comma.  Copied from
23529          cp_parser_parenthesized_expression_list.  */
23530     skip_comma:
23531       ending = cp_parser_skip_to_closing_parenthesis (parser,
23532                                                       /*recovering=*/true,
23533                                                       /*or_comma=*/true,
23534                                                       /*consume_paren=*/true);
23535       if (ending < 0)
23536         goto get_comma;
23537     }
23538
23539   return list;
23540 }
23541
23542 /* Similarly, but expect leading and trailing parenthesis.  This is a very
23543    common case for omp clauses.  */
23544
23545 static tree
23546 cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
23547 {
23548   if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
23549     return cp_parser_omp_var_list_no_open (parser, kind, list);
23550   return list;
23551 }
23552
23553 /* OpenMP 3.0:
23554    collapse ( constant-expression ) */
23555
23556 static tree
23557 cp_parser_omp_clause_collapse (cp_parser *parser, tree list, location_t location)
23558 {
23559   tree c, num;
23560   location_t loc;
23561   HOST_WIDE_INT n;
23562
23563   loc = cp_lexer_peek_token (parser->lexer)->location;
23564   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
23565     return list;
23566
23567   num = cp_parser_constant_expression (parser, false, NULL);
23568
23569   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
23570     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
23571                                            /*or_comma=*/false,
23572                                            /*consume_paren=*/true);
23573
23574   if (num == error_mark_node)
23575     return list;
23576   num = fold_non_dependent_expr (num);
23577   if (!INTEGRAL_TYPE_P (TREE_TYPE (num))
23578       || !host_integerp (num, 0)
23579       || (n = tree_low_cst (num, 0)) <= 0
23580       || (int) n != n)
23581     {
23582       error_at (loc, "collapse argument needs positive constant integer expression");
23583       return list;
23584     }
23585
23586   check_no_duplicate_clause (list, OMP_CLAUSE_COLLAPSE, "collapse", location);
23587   c = build_omp_clause (loc, OMP_CLAUSE_COLLAPSE);
23588   OMP_CLAUSE_CHAIN (c) = list;
23589   OMP_CLAUSE_COLLAPSE_EXPR (c) = num;
23590
23591   return c;
23592 }
23593
23594 /* OpenMP 2.5:
23595    default ( shared | none ) */
23596
23597 static tree
23598 cp_parser_omp_clause_default (cp_parser *parser, tree list, location_t location)
23599 {
23600   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
23601   tree c;
23602
23603   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
23604     return list;
23605   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
23606     {
23607       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
23608       const char *p = IDENTIFIER_POINTER (id);
23609
23610       switch (p[0])
23611         {
23612         case 'n':
23613           if (strcmp ("none", p) != 0)
23614             goto invalid_kind;
23615           kind = OMP_CLAUSE_DEFAULT_NONE;
23616           break;
23617
23618         case 's':
23619           if (strcmp ("shared", p) != 0)
23620             goto invalid_kind;
23621           kind = OMP_CLAUSE_DEFAULT_SHARED;
23622           break;
23623
23624         default:
23625           goto invalid_kind;
23626         }
23627
23628       cp_lexer_consume_token (parser->lexer);
23629     }
23630   else
23631     {
23632     invalid_kind:
23633       cp_parser_error (parser, "expected %<none%> or %<shared%>");
23634     }
23635
23636   if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
23637     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
23638                                            /*or_comma=*/false,
23639                                            /*consume_paren=*/true);
23640
23641   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
23642     return list;
23643
23644   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default", location);
23645   c = build_omp_clause (location, OMP_CLAUSE_DEFAULT);
23646   OMP_CLAUSE_CHAIN (c) = list;
23647   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
23648
23649   return c;
23650 }
23651
23652 /* OpenMP 2.5:
23653    if ( expression ) */
23654
23655 static tree
23656 cp_parser_omp_clause_if (cp_parser *parser, tree list, location_t location)
23657 {
23658   tree t, c;
23659
23660   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
23661     return list;
23662
23663   t = cp_parser_condition (parser);
23664
23665   if (t == error_mark_node
23666       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
23667     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
23668                                            /*or_comma=*/false,
23669                                            /*consume_paren=*/true);
23670
23671   check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if", location);
23672
23673   c = build_omp_clause (location, OMP_CLAUSE_IF);
23674   OMP_CLAUSE_IF_EXPR (c) = t;
23675   OMP_CLAUSE_CHAIN (c) = list;
23676
23677   return c;
23678 }
23679
23680 /* OpenMP 2.5:
23681    nowait */
23682
23683 static tree
23684 cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED,
23685                              tree list, location_t location)
23686 {
23687   tree c;
23688
23689   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait", location);
23690
23691   c = build_omp_clause (location, OMP_CLAUSE_NOWAIT);
23692   OMP_CLAUSE_CHAIN (c) = list;
23693   return c;
23694 }
23695
23696 /* OpenMP 2.5:
23697    num_threads ( expression ) */
23698
23699 static tree
23700 cp_parser_omp_clause_num_threads (cp_parser *parser, tree list,
23701                                   location_t location)
23702 {
23703   tree t, c;
23704
23705   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
23706     return list;
23707
23708   t = cp_parser_expression (parser, false, NULL);
23709
23710   if (t == error_mark_node
23711       || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
23712     cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
23713                                            /*or_comma=*/false,
23714                                            /*consume_paren=*/true);
23715
23716   check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS,
23717                              "num_threads", location);
23718
23719   c = build_omp_clause (location, OMP_CLAUSE_NUM_THREADS);
23720   OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
23721   OMP_CLAUSE_CHAIN (c) = list;
23722
23723   return c;
23724 }
23725
23726 /* OpenMP 2.5:
23727    ordered */
23728
23729 static tree
23730 cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED,
23731                               tree list, location_t location)
23732 {
23733   tree c;
23734
23735   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED,
23736                              "ordered", location);
23737
23738   c = build_omp_clause (location, OMP_CLAUSE_ORDERED);
23739   OMP_CLAUSE_CHAIN (c) = list;
23740   return c;
23741 }
23742
23743 /* OpenMP 2.5:
23744    reduction ( reduction-operator : variable-list )
23745
23746    reduction-operator:
23747      One of: + * - & ^ | && || */
23748
23749 static tree
23750 cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
23751 {
23752   enum tree_code code;
23753   tree nlist, c;
23754
23755   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
23756     return list;
23757
23758   switch (cp_lexer_peek_token (parser->lexer)->type)
23759     {
23760     case CPP_PLUS:
23761       code = PLUS_EXPR;
23762       break;
23763     case CPP_MULT:
23764       code = MULT_EXPR;
23765       break;
23766     case CPP_MINUS:
23767       code = MINUS_EXPR;
23768       break;
23769     case CPP_AND:
23770       code = BIT_AND_EXPR;
23771       break;
23772     case CPP_XOR:
23773       code = BIT_XOR_EXPR;
23774       break;
23775     case CPP_OR:
23776       code = BIT_IOR_EXPR;
23777       break;
23778     case CPP_AND_AND:
23779       code = TRUTH_ANDIF_EXPR;
23780       break;
23781     case CPP_OR_OR:
23782       code = TRUTH_ORIF_EXPR;
23783       break;
23784     default:
23785       cp_parser_error (parser, "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, "
23786                                "%<|%>, %<&&%>, or %<||%>");
23787     resync_fail:
23788       cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
23789                                              /*or_comma=*/false,
23790                                              /*consume_paren=*/true);
23791       return list;
23792     }
23793   cp_lexer_consume_token (parser->lexer);
23794
23795   if (!cp_parser_require (parser, CPP_COLON, RT_COLON))
23796     goto resync_fail;
23797
23798   nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
23799   for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
23800     OMP_CLAUSE_REDUCTION_CODE (c) = code;
23801
23802   return nlist;
23803 }
23804
23805 /* OpenMP 2.5:
23806    schedule ( schedule-kind )
23807    schedule ( schedule-kind , expression )
23808
23809    schedule-kind:
23810      static | dynamic | guided | runtime | auto  */
23811
23812 static tree
23813 cp_parser_omp_clause_schedule (cp_parser *parser, tree list, location_t location)
23814 {
23815   tree c, t;
23816
23817   if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
23818     return list;
23819
23820   c = build_omp_clause (location, OMP_CLAUSE_SCHEDULE);
23821
23822   if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
23823     {
23824       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
23825       const char *p = IDENTIFIER_POINTER (id);
23826
23827       switch (p[0])
23828         {
23829         case 'd':
23830           if (strcmp ("dynamic", p) != 0)
23831             goto invalid_kind;
23832           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
23833           break;
23834
23835         case 'g':
23836           if (strcmp ("guided", p) != 0)
23837             goto invalid_kind;
23838           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
23839           break;
23840
23841         case 'r':
23842           if (strcmp ("runtime", p) != 0)
23843             goto invalid_kind;
23844           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
23845           break;
23846
23847         default:
23848           goto invalid_kind;
23849         }
23850     }
23851   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
23852     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
23853   else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AUTO))
23854     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_AUTO;
23855   else
23856     goto invalid_kind;
23857   cp_lexer_consume_token (parser->lexer);
23858
23859   if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23860     {
23861       cp_token *token;
23862       cp_lexer_consume_token (parser->lexer);
23863
23864       token = cp_lexer_peek_token (parser->lexer);
23865       t = cp_parser_assignment_expression (parser, false, NULL);
23866
23867       if (t == error_mark_node)
23868         goto resync_fail;
23869       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
23870         error_at (token->location, "schedule %<runtime%> does not take "
23871                   "a %<chunk_size%> parameter");
23872       else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_AUTO)
23873         error_at (token->location, "schedule %<auto%> does not take "
23874                   "a %<chunk_size%> parameter");
23875       else
23876         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
23877
23878       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
23879         goto resync_fail;
23880     }
23881   else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_COMMA_CLOSE_PAREN))
23882     goto resync_fail;
23883
23884   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule", location);
23885   OMP_CLAUSE_CHAIN (c) = list;
23886   return c;
23887
23888  invalid_kind:
23889   cp_parser_error (parser, "invalid schedule kind");
23890  resync_fail:
23891   cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
23892                                          /*or_comma=*/false,
23893                                          /*consume_paren=*/true);
23894   return list;
23895 }
23896
23897 /* OpenMP 3.0:
23898    untied */
23899
23900 static tree
23901 cp_parser_omp_clause_untied (cp_parser *parser ATTRIBUTE_UNUSED,
23902                              tree list, location_t location)
23903 {
23904   tree c;
23905
23906   check_no_duplicate_clause (list, OMP_CLAUSE_UNTIED, "untied", location);
23907
23908   c = build_omp_clause (location, OMP_CLAUSE_UNTIED);
23909   OMP_CLAUSE_CHAIN (c) = list;
23910   return c;
23911 }
23912
23913 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
23914    is a bitmask in MASK.  Return the list of clauses found; the result
23915    of clause default goes in *pdefault.  */
23916
23917 static tree
23918 cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
23919                            const char *where, cp_token *pragma_tok)
23920 {
23921   tree clauses = NULL;
23922   bool first = true;
23923   cp_token *token = NULL;
23924
23925   while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
23926     {
23927       pragma_omp_clause c_kind;
23928       const char *c_name;
23929       tree prev = clauses;
23930
23931       if (!first && cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
23932         cp_lexer_consume_token (parser->lexer);
23933
23934       token = cp_lexer_peek_token (parser->lexer);
23935       c_kind = cp_parser_omp_clause_name (parser);
23936       first = false;
23937
23938       switch (c_kind)
23939         {
23940         case PRAGMA_OMP_CLAUSE_COLLAPSE:
23941           clauses = cp_parser_omp_clause_collapse (parser, clauses,
23942                                                    token->location);
23943           c_name = "collapse";
23944           break;
23945         case PRAGMA_OMP_CLAUSE_COPYIN:
23946           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
23947           c_name = "copyin";
23948           break;
23949         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
23950           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
23951                                             clauses);
23952           c_name = "copyprivate";
23953           break;
23954         case PRAGMA_OMP_CLAUSE_DEFAULT:
23955           clauses = cp_parser_omp_clause_default (parser, clauses,
23956                                                   token->location);
23957           c_name = "default";
23958           break;
23959         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
23960           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
23961                                             clauses);
23962           c_name = "firstprivate";
23963           break;
23964         case PRAGMA_OMP_CLAUSE_IF:
23965           clauses = cp_parser_omp_clause_if (parser, clauses, token->location);
23966           c_name = "if";
23967           break;
23968         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
23969           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
23970                                             clauses);
23971           c_name = "lastprivate";
23972           break;
23973         case PRAGMA_OMP_CLAUSE_NOWAIT:
23974           clauses = cp_parser_omp_clause_nowait (parser, clauses, token->location);
23975           c_name = "nowait";
23976           break;
23977         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
23978           clauses = cp_parser_omp_clause_num_threads (parser, clauses,
23979                                                       token->location);
23980           c_name = "num_threads";
23981           break;
23982         case PRAGMA_OMP_CLAUSE_ORDERED:
23983           clauses = cp_parser_omp_clause_ordered (parser, clauses,
23984                                                   token->location);
23985           c_name = "ordered";
23986           break;
23987         case PRAGMA_OMP_CLAUSE_PRIVATE:
23988           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
23989                                             clauses);
23990           c_name = "private";
23991           break;
23992         case PRAGMA_OMP_CLAUSE_REDUCTION:
23993           clauses = cp_parser_omp_clause_reduction (parser, clauses);
23994           c_name = "reduction";
23995           break;
23996         case PRAGMA_OMP_CLAUSE_SCHEDULE:
23997           clauses = cp_parser_omp_clause_schedule (parser, clauses,
23998                                                    token->location);
23999           c_name = "schedule";
24000           break;
24001         case PRAGMA_OMP_CLAUSE_SHARED:
24002           clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
24003                                             clauses);
24004           c_name = "shared";
24005           break;
24006         case PRAGMA_OMP_CLAUSE_UNTIED:
24007           clauses = cp_parser_omp_clause_untied (parser, clauses,
24008                                                  token->location);
24009           c_name = "nowait";
24010           break;
24011         default:
24012           cp_parser_error (parser, "expected %<#pragma omp%> clause");
24013           goto saw_error;
24014         }
24015
24016       if (((mask >> c_kind) & 1) == 0)
24017         {
24018           /* Remove the invalid clause(s) from the list to avoid
24019              confusing the rest of the compiler.  */
24020           clauses = prev;
24021           error_at (token->location, "%qs is not valid for %qs", c_name, where);
24022         }
24023     }
24024  saw_error:
24025   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
24026   return finish_omp_clauses (clauses);
24027 }
24028
24029 /* OpenMP 2.5:
24030    structured-block:
24031      statement
24032
24033    In practice, we're also interested in adding the statement to an
24034    outer node.  So it is convenient if we work around the fact that
24035    cp_parser_statement calls add_stmt.  */
24036
24037 static unsigned
24038 cp_parser_begin_omp_structured_block (cp_parser *parser)
24039 {
24040   unsigned save = parser->in_statement;
24041
24042   /* Only move the values to IN_OMP_BLOCK if they weren't false.
24043      This preserves the "not within loop or switch" style error messages
24044      for nonsense cases like
24045         void foo() {
24046         #pragma omp single
24047           break;
24048         }
24049   */
24050   if (parser->in_statement)
24051     parser->in_statement = IN_OMP_BLOCK;
24052
24053   return save;
24054 }
24055
24056 static void
24057 cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
24058 {
24059   parser->in_statement = save;
24060 }
24061
24062 static tree
24063 cp_parser_omp_structured_block (cp_parser *parser)
24064 {
24065   tree stmt = begin_omp_structured_block ();
24066   unsigned int save = cp_parser_begin_omp_structured_block (parser);
24067
24068   cp_parser_statement (parser, NULL_TREE, false, NULL);
24069
24070   cp_parser_end_omp_structured_block (parser, save);
24071   return finish_omp_structured_block (stmt);
24072 }
24073
24074 /* OpenMP 2.5:
24075    # pragma omp atomic new-line
24076      expression-stmt
24077
24078    expression-stmt:
24079      x binop= expr | x++ | ++x | x-- | --x
24080    binop:
24081      +, *, -, /, &, ^, |, <<, >>
24082
24083   where x is an lvalue expression with scalar type.  */
24084
24085 static void
24086 cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
24087 {
24088   tree lhs, rhs;
24089   enum tree_code code;
24090
24091   cp_parser_require_pragma_eol (parser, pragma_tok);
24092
24093   lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
24094                                     /*cast_p=*/false, NULL);
24095   switch (TREE_CODE (lhs))
24096     {
24097     case ERROR_MARK:
24098       goto saw_error;
24099
24100     case PREINCREMENT_EXPR:
24101     case POSTINCREMENT_EXPR:
24102       lhs = TREE_OPERAND (lhs, 0);
24103       code = PLUS_EXPR;
24104       rhs = integer_one_node;
24105       break;
24106
24107     case PREDECREMENT_EXPR:
24108     case POSTDECREMENT_EXPR:
24109       lhs = TREE_OPERAND (lhs, 0);
24110       code = MINUS_EXPR;
24111       rhs = integer_one_node;
24112       break;
24113
24114     case COMPOUND_EXPR:
24115       if (TREE_CODE (TREE_OPERAND (lhs, 0)) == SAVE_EXPR
24116          && TREE_CODE (TREE_OPERAND (lhs, 1)) == COMPOUND_EXPR
24117          && TREE_CODE (TREE_OPERAND (TREE_OPERAND (lhs, 1), 0)) == MODIFY_EXPR
24118          && TREE_OPERAND (TREE_OPERAND (lhs, 1), 1) == TREE_OPERAND (lhs, 0)
24119          && TREE_CODE (TREE_TYPE (TREE_OPERAND (TREE_OPERAND
24120                                              (TREE_OPERAND (lhs, 1), 0), 0)))
24121             == BOOLEAN_TYPE)
24122        /* Undo effects of boolean_increment for post {in,de}crement.  */
24123        lhs = TREE_OPERAND (TREE_OPERAND (lhs, 1), 0);
24124       /* FALLTHRU */
24125     case MODIFY_EXPR:
24126       if (TREE_CODE (lhs) == MODIFY_EXPR
24127          && TREE_CODE (TREE_TYPE (TREE_OPERAND (lhs, 0))) == BOOLEAN_TYPE)
24128        {
24129          /* Undo effects of boolean_increment.  */
24130          if (integer_onep (TREE_OPERAND (lhs, 1)))
24131            {
24132              /* This is pre or post increment.  */
24133              rhs = TREE_OPERAND (lhs, 1);
24134              lhs = TREE_OPERAND (lhs, 0);
24135              code = NOP_EXPR;
24136              break;
24137            }
24138        }
24139       /* FALLTHRU */
24140     default:
24141       switch (cp_lexer_peek_token (parser->lexer)->type)
24142         {
24143         case CPP_MULT_EQ:
24144           code = MULT_EXPR;
24145           break;
24146         case CPP_DIV_EQ:
24147           code = TRUNC_DIV_EXPR;
24148           break;
24149         case CPP_PLUS_EQ:
24150           code = PLUS_EXPR;
24151           break;
24152         case CPP_MINUS_EQ:
24153           code = MINUS_EXPR;
24154           break;
24155         case CPP_LSHIFT_EQ:
24156           code = LSHIFT_EXPR;
24157           break;
24158         case CPP_RSHIFT_EQ:
24159           code = RSHIFT_EXPR;
24160           break;
24161         case CPP_AND_EQ:
24162           code = BIT_AND_EXPR;
24163           break;
24164         case CPP_OR_EQ:
24165           code = BIT_IOR_EXPR;
24166           break;
24167         case CPP_XOR_EQ:
24168           code = BIT_XOR_EXPR;
24169           break;
24170         default:
24171           cp_parser_error (parser,
24172                            "invalid operator for %<#pragma omp atomic%>");
24173           goto saw_error;
24174         }
24175       cp_lexer_consume_token (parser->lexer);
24176
24177       rhs = cp_parser_expression (parser, false, NULL);
24178       if (rhs == error_mark_node)
24179         goto saw_error;
24180       break;
24181     }
24182   finish_omp_atomic (code, lhs, rhs);
24183   cp_parser_consume_semicolon_at_end_of_statement (parser);
24184   return;
24185
24186  saw_error:
24187   cp_parser_skip_to_end_of_block_or_statement (parser);
24188 }
24189
24190
24191 /* OpenMP 2.5:
24192    # pragma omp barrier new-line  */
24193
24194 static void
24195 cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
24196 {
24197   cp_parser_require_pragma_eol (parser, pragma_tok);
24198   finish_omp_barrier ();
24199 }
24200
24201 /* OpenMP 2.5:
24202    # pragma omp critical [(name)] new-line
24203      structured-block  */
24204
24205 static tree
24206 cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
24207 {
24208   tree stmt, name = NULL;
24209
24210   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
24211     {
24212       cp_lexer_consume_token (parser->lexer);
24213
24214       name = cp_parser_identifier (parser);
24215
24216       if (name == error_mark_node
24217           || !cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24218         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24219                                                /*or_comma=*/false,
24220                                                /*consume_paren=*/true);
24221       if (name == error_mark_node)
24222         name = NULL;
24223     }
24224   cp_parser_require_pragma_eol (parser, pragma_tok);
24225
24226   stmt = cp_parser_omp_structured_block (parser);
24227   return c_finish_omp_critical (input_location, stmt, name);
24228 }
24229
24230 /* OpenMP 2.5:
24231    # pragma omp flush flush-vars[opt] new-line
24232
24233    flush-vars:
24234      ( variable-list ) */
24235
24236 static void
24237 cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
24238 {
24239   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
24240     (void) cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
24241   cp_parser_require_pragma_eol (parser, pragma_tok);
24242
24243   finish_omp_flush ();
24244 }
24245
24246 /* Helper function, to parse omp for increment expression.  */
24247
24248 static tree
24249 cp_parser_omp_for_cond (cp_parser *parser, tree decl)
24250 {
24251   tree cond = cp_parser_binary_expression (parser, false, true,
24252                                            PREC_NOT_OPERATOR, NULL);
24253   if (cond == error_mark_node
24254       || cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
24255     {
24256       cp_parser_skip_to_end_of_statement (parser);
24257       return error_mark_node;
24258     }
24259
24260   switch (TREE_CODE (cond))
24261     {
24262     case GT_EXPR:
24263     case GE_EXPR:
24264     case LT_EXPR:
24265     case LE_EXPR:
24266       break;
24267     default:
24268       return error_mark_node;
24269     }
24270
24271   /* If decl is an iterator, preserve LHS and RHS of the relational
24272      expr until finish_omp_for.  */
24273   if (decl
24274       && (type_dependent_expression_p (decl)
24275           || CLASS_TYPE_P (TREE_TYPE (decl))))
24276     return cond;
24277
24278   return build_x_binary_op (TREE_CODE (cond),
24279                             TREE_OPERAND (cond, 0), ERROR_MARK,
24280                             TREE_OPERAND (cond, 1), ERROR_MARK,
24281                             /*overload=*/NULL, tf_warning_or_error);
24282 }
24283
24284 /* Helper function, to parse omp for increment expression.  */
24285
24286 static tree
24287 cp_parser_omp_for_incr (cp_parser *parser, tree decl)
24288 {
24289   cp_token *token = cp_lexer_peek_token (parser->lexer);
24290   enum tree_code op;
24291   tree lhs, rhs;
24292   cp_id_kind idk;
24293   bool decl_first;
24294
24295   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
24296     {
24297       op = (token->type == CPP_PLUS_PLUS
24298             ? PREINCREMENT_EXPR : PREDECREMENT_EXPR);
24299       cp_lexer_consume_token (parser->lexer);
24300       lhs = cp_parser_cast_expression (parser, false, false, NULL);
24301       if (lhs != decl)
24302         return error_mark_node;
24303       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
24304     }
24305
24306   lhs = cp_parser_primary_expression (parser, false, false, false, &idk);
24307   if (lhs != decl)
24308     return error_mark_node;
24309
24310   token = cp_lexer_peek_token (parser->lexer);
24311   if (token->type == CPP_PLUS_PLUS || token->type == CPP_MINUS_MINUS)
24312     {
24313       op = (token->type == CPP_PLUS_PLUS
24314             ? POSTINCREMENT_EXPR : POSTDECREMENT_EXPR);
24315       cp_lexer_consume_token (parser->lexer);
24316       return build2 (op, TREE_TYPE (decl), decl, NULL_TREE);
24317     }
24318
24319   op = cp_parser_assignment_operator_opt (parser);
24320   if (op == ERROR_MARK)
24321     return error_mark_node;
24322
24323   if (op != NOP_EXPR)
24324     {
24325       rhs = cp_parser_assignment_expression (parser, false, NULL);
24326       rhs = build2 (op, TREE_TYPE (decl), decl, rhs);
24327       return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
24328     }
24329
24330   lhs = cp_parser_binary_expression (parser, false, false,
24331                                      PREC_ADDITIVE_EXPRESSION, NULL);
24332   token = cp_lexer_peek_token (parser->lexer);
24333   decl_first = lhs == decl;
24334   if (decl_first)
24335     lhs = NULL_TREE;
24336   if (token->type != CPP_PLUS
24337       && token->type != CPP_MINUS)
24338     return error_mark_node;
24339
24340   do
24341     {
24342       op = token->type == CPP_PLUS ? PLUS_EXPR : MINUS_EXPR;
24343       cp_lexer_consume_token (parser->lexer);
24344       rhs = cp_parser_binary_expression (parser, false, false,
24345                                          PREC_ADDITIVE_EXPRESSION, NULL);
24346       token = cp_lexer_peek_token (parser->lexer);
24347       if (token->type == CPP_PLUS || token->type == CPP_MINUS || decl_first)
24348         {
24349           if (lhs == NULL_TREE)
24350             {
24351               if (op == PLUS_EXPR)
24352                 lhs = rhs;
24353               else
24354                 lhs = build_x_unary_op (NEGATE_EXPR, rhs, tf_warning_or_error);
24355             }
24356           else
24357             lhs = build_x_binary_op (op, lhs, ERROR_MARK, rhs, ERROR_MARK,
24358                                      NULL, tf_warning_or_error);
24359         }
24360     }
24361   while (token->type == CPP_PLUS || token->type == CPP_MINUS);
24362
24363   if (!decl_first)
24364     {
24365       if (rhs != decl || op == MINUS_EXPR)
24366         return error_mark_node;
24367       rhs = build2 (op, TREE_TYPE (decl), lhs, decl);
24368     }
24369   else
24370     rhs = build2 (PLUS_EXPR, TREE_TYPE (decl), decl, lhs);
24371
24372   return build2 (MODIFY_EXPR, TREE_TYPE (decl), decl, rhs);
24373 }
24374
24375 /* Parse the restricted form of the for statement allowed by OpenMP.  */
24376
24377 static tree
24378 cp_parser_omp_for_loop (cp_parser *parser, tree clauses, tree *par_clauses)
24379 {
24380   tree init, cond, incr, body, decl, pre_body = NULL_TREE, ret;
24381   tree real_decl, initv, condv, incrv, declv;
24382   tree this_pre_body, cl;
24383   location_t loc_first;
24384   bool collapse_err = false;
24385   int i, collapse = 1, nbraces = 0;
24386   VEC(tree,gc) *for_block = make_tree_vector ();
24387
24388   for (cl = clauses; cl; cl = OMP_CLAUSE_CHAIN (cl))
24389     if (OMP_CLAUSE_CODE (cl) == OMP_CLAUSE_COLLAPSE)
24390       collapse = tree_low_cst (OMP_CLAUSE_COLLAPSE_EXPR (cl), 0);
24391
24392   gcc_assert (collapse >= 1);
24393
24394   declv = make_tree_vec (collapse);
24395   initv = make_tree_vec (collapse);
24396   condv = make_tree_vec (collapse);
24397   incrv = make_tree_vec (collapse);
24398
24399   loc_first = cp_lexer_peek_token (parser->lexer)->location;
24400
24401   for (i = 0; i < collapse; i++)
24402     {
24403       int bracecount = 0;
24404       bool add_private_clause = false;
24405       location_t loc;
24406
24407       if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
24408         {
24409           cp_parser_error (parser, "for statement expected");
24410           return NULL;
24411         }
24412       loc = cp_lexer_consume_token (parser->lexer)->location;
24413
24414       if (!cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN))
24415         return NULL;
24416
24417       init = decl = real_decl = NULL;
24418       this_pre_body = push_stmt_list ();
24419       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
24420         {
24421           /* See 2.5.1 (in OpenMP 3.0, similar wording is in 2.5 standard too):
24422
24423              init-expr:
24424                        var = lb
24425                        integer-type var = lb
24426                        random-access-iterator-type var = lb
24427                        pointer-type var = lb
24428           */
24429           cp_decl_specifier_seq type_specifiers;
24430
24431           /* First, try to parse as an initialized declaration.  See
24432              cp_parser_condition, from whence the bulk of this is copied.  */
24433
24434           cp_parser_parse_tentatively (parser);
24435           cp_parser_type_specifier_seq (parser, /*is_declaration=*/true,
24436                                         /*is_trailing_return=*/false,
24437                                         &type_specifiers);
24438           if (cp_parser_parse_definitely (parser))
24439             {
24440               /* If parsing a type specifier seq succeeded, then this
24441                  MUST be a initialized declaration.  */
24442               tree asm_specification, attributes;
24443               cp_declarator *declarator;
24444
24445               declarator = cp_parser_declarator (parser,
24446                                                  CP_PARSER_DECLARATOR_NAMED,
24447                                                  /*ctor_dtor_or_conv_p=*/NULL,
24448                                                  /*parenthesized_p=*/NULL,
24449                                                  /*member_p=*/false);
24450               attributes = cp_parser_attributes_opt (parser);
24451               asm_specification = cp_parser_asm_specification_opt (parser);
24452
24453               if (declarator == cp_error_declarator) 
24454                 cp_parser_skip_to_end_of_statement (parser);
24455
24456               else 
24457                 {
24458                   tree pushed_scope, auto_node;
24459
24460                   decl = start_decl (declarator, &type_specifiers,
24461                                      SD_INITIALIZED, attributes,
24462                                      /*prefix_attributes=*/NULL_TREE,
24463                                      &pushed_scope);
24464
24465                   auto_node = type_uses_auto (TREE_TYPE (decl));
24466                   if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
24467                     {
24468                       if (cp_lexer_next_token_is (parser->lexer, 
24469                                                   CPP_OPEN_PAREN))
24470                         error ("parenthesized initialization is not allowed in "
24471                                "OpenMP %<for%> loop");
24472                       else
24473                         /* Trigger an error.  */
24474                         cp_parser_require (parser, CPP_EQ, RT_EQ);
24475
24476                       init = error_mark_node;
24477                       cp_parser_skip_to_end_of_statement (parser);
24478                     }
24479                   else if (CLASS_TYPE_P (TREE_TYPE (decl))
24480                            || type_dependent_expression_p (decl)
24481                            || auto_node)
24482                     {
24483                       bool is_direct_init, is_non_constant_init;
24484
24485                       init = cp_parser_initializer (parser,
24486                                                     &is_direct_init,
24487                                                     &is_non_constant_init);
24488
24489                       if (auto_node && describable_type (init))
24490                         {
24491                           TREE_TYPE (decl)
24492                             = do_auto_deduction (TREE_TYPE (decl), init,
24493                                                  auto_node);
24494
24495                           if (!CLASS_TYPE_P (TREE_TYPE (decl))
24496                               && !type_dependent_expression_p (decl))
24497                             goto non_class;
24498                         }
24499                       
24500                       cp_finish_decl (decl, init, !is_non_constant_init,
24501                                       asm_specification,
24502                                       LOOKUP_ONLYCONVERTING);
24503                       if (CLASS_TYPE_P (TREE_TYPE (decl)))
24504                         {
24505                           VEC_safe_push (tree, gc, for_block, this_pre_body);
24506                           init = NULL_TREE;
24507                         }
24508                       else
24509                         init = pop_stmt_list (this_pre_body);
24510                       this_pre_body = NULL_TREE;
24511                     }
24512                   else
24513                     {
24514                       /* Consume '='.  */
24515                       cp_lexer_consume_token (parser->lexer);
24516                       init = cp_parser_assignment_expression (parser, false, NULL);
24517
24518                     non_class:
24519                       if (TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
24520                         init = error_mark_node;
24521                       else
24522                         cp_finish_decl (decl, NULL_TREE,
24523                                         /*init_const_expr_p=*/false,
24524                                         asm_specification,
24525                                         LOOKUP_ONLYCONVERTING);
24526                     }
24527
24528                   if (pushed_scope)
24529                     pop_scope (pushed_scope);
24530                 }
24531             }
24532           else 
24533             {
24534               cp_id_kind idk;
24535               /* If parsing a type specifier sequence failed, then
24536                  this MUST be a simple expression.  */
24537               cp_parser_parse_tentatively (parser);
24538               decl = cp_parser_primary_expression (parser, false, false,
24539                                                    false, &idk);
24540               if (!cp_parser_error_occurred (parser)
24541                   && decl
24542                   && DECL_P (decl)
24543                   && CLASS_TYPE_P (TREE_TYPE (decl)))
24544                 {
24545                   tree rhs;
24546
24547                   cp_parser_parse_definitely (parser);
24548                   cp_parser_require (parser, CPP_EQ, RT_EQ);
24549                   rhs = cp_parser_assignment_expression (parser, false, NULL);
24550                   finish_expr_stmt (build_x_modify_expr (decl, NOP_EXPR,
24551                                                          rhs,
24552                                                          tf_warning_or_error));
24553                   add_private_clause = true;
24554                 }
24555               else
24556                 {
24557                   decl = NULL;
24558                   cp_parser_abort_tentative_parse (parser);
24559                   init = cp_parser_expression (parser, false, NULL);
24560                   if (init)
24561                     {
24562                       if (TREE_CODE (init) == MODIFY_EXPR
24563                           || TREE_CODE (init) == MODOP_EXPR)
24564                         real_decl = TREE_OPERAND (init, 0);
24565                     }
24566                 }
24567             }
24568         }
24569       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
24570       if (this_pre_body)
24571         {
24572           this_pre_body = pop_stmt_list (this_pre_body);
24573           if (pre_body)
24574             {
24575               tree t = pre_body;
24576               pre_body = push_stmt_list ();
24577               add_stmt (t);
24578               add_stmt (this_pre_body);
24579               pre_body = pop_stmt_list (pre_body);
24580             }
24581           else
24582             pre_body = this_pre_body;
24583         }
24584
24585       if (decl)
24586         real_decl = decl;
24587       if (par_clauses != NULL && real_decl != NULL_TREE)
24588         {
24589           tree *c;
24590           for (c = par_clauses; *c ; )
24591             if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_FIRSTPRIVATE
24592                 && OMP_CLAUSE_DECL (*c) == real_decl)
24593               {
24594                 error_at (loc, "iteration variable %qD"
24595                           " should not be firstprivate", real_decl);
24596                 *c = OMP_CLAUSE_CHAIN (*c);
24597               }
24598             else if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_LASTPRIVATE
24599                      && OMP_CLAUSE_DECL (*c) == real_decl)
24600               {
24601                 /* Add lastprivate (decl) clause to OMP_FOR_CLAUSES,
24602                    change it to shared (decl) in OMP_PARALLEL_CLAUSES.  */
24603                 tree l = build_omp_clause (loc, OMP_CLAUSE_LASTPRIVATE);
24604                 OMP_CLAUSE_DECL (l) = real_decl;
24605                 OMP_CLAUSE_CHAIN (l) = clauses;
24606                 CP_OMP_CLAUSE_INFO (l) = CP_OMP_CLAUSE_INFO (*c);
24607                 clauses = l;
24608                 OMP_CLAUSE_SET_CODE (*c, OMP_CLAUSE_SHARED);
24609                 CP_OMP_CLAUSE_INFO (*c) = NULL;
24610                 add_private_clause = false;
24611               }
24612             else
24613               {
24614                 if (OMP_CLAUSE_CODE (*c) == OMP_CLAUSE_PRIVATE
24615                     && OMP_CLAUSE_DECL (*c) == real_decl)
24616                   add_private_clause = false;
24617                 c = &OMP_CLAUSE_CHAIN (*c);
24618               }
24619         }
24620
24621       if (add_private_clause)
24622         {
24623           tree c;
24624           for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
24625             {
24626               if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
24627                    || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
24628                   && OMP_CLAUSE_DECL (c) == decl)
24629                 break;
24630               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
24631                        && OMP_CLAUSE_DECL (c) == decl)
24632                 error_at (loc, "iteration variable %qD "
24633                           "should not be firstprivate",
24634                           decl);
24635               else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
24636                        && OMP_CLAUSE_DECL (c) == decl)
24637                 error_at (loc, "iteration variable %qD should not be reduction",
24638                           decl);
24639             }
24640           if (c == NULL)
24641             {
24642               c = build_omp_clause (loc, OMP_CLAUSE_PRIVATE);
24643               OMP_CLAUSE_DECL (c) = decl;
24644               c = finish_omp_clauses (c);
24645               if (c)
24646                 {
24647                   OMP_CLAUSE_CHAIN (c) = clauses;
24648                   clauses = c;
24649                 }
24650             }
24651         }
24652
24653       cond = NULL;
24654       if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
24655         cond = cp_parser_omp_for_cond (parser, decl);
24656       cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
24657
24658       incr = NULL;
24659       if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
24660         {
24661           /* If decl is an iterator, preserve the operator on decl
24662              until finish_omp_for.  */
24663           if (decl
24664               && ((type_dependent_expression_p (decl)
24665                    && !POINTER_TYPE_P (TREE_TYPE (decl)))
24666                   || CLASS_TYPE_P (TREE_TYPE (decl))))
24667             incr = cp_parser_omp_for_incr (parser, decl);
24668           else
24669             incr = cp_parser_expression (parser, false, NULL);
24670         }
24671
24672       if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
24673         cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
24674                                                /*or_comma=*/false,
24675                                                /*consume_paren=*/true);
24676
24677       TREE_VEC_ELT (declv, i) = decl;
24678       TREE_VEC_ELT (initv, i) = init;
24679       TREE_VEC_ELT (condv, i) = cond;
24680       TREE_VEC_ELT (incrv, i) = incr;
24681
24682       if (i == collapse - 1)
24683         break;
24684
24685       /* FIXME: OpenMP 3.0 draft isn't very clear on what exactly is allowed
24686          in between the collapsed for loops to be still considered perfectly
24687          nested.  Hopefully the final version clarifies this.
24688          For now handle (multiple) {'s and empty statements.  */
24689       cp_parser_parse_tentatively (parser);
24690       do
24691         {
24692           if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
24693             break;
24694           else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
24695             {
24696               cp_lexer_consume_token (parser->lexer);
24697               bracecount++;
24698             }
24699           else if (bracecount
24700                    && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
24701             cp_lexer_consume_token (parser->lexer);
24702           else
24703             {
24704               loc = cp_lexer_peek_token (parser->lexer)->location;
24705               error_at (loc, "not enough collapsed for loops");
24706               collapse_err = true;
24707               cp_parser_abort_tentative_parse (parser);
24708               declv = NULL_TREE;
24709               break;
24710             }
24711         }
24712       while (1);
24713
24714       if (declv)
24715         {
24716           cp_parser_parse_definitely (parser);
24717           nbraces += bracecount;
24718         }
24719     }
24720
24721   /* Note that we saved the original contents of this flag when we entered
24722      the structured block, and so we don't need to re-save it here.  */
24723   parser->in_statement = IN_OMP_FOR;
24724
24725   /* Note that the grammar doesn't call for a structured block here,
24726      though the loop as a whole is a structured block.  */
24727   body = push_stmt_list ();
24728   cp_parser_statement (parser, NULL_TREE, false, NULL);
24729   body = pop_stmt_list (body);
24730
24731   if (declv == NULL_TREE)
24732     ret = NULL_TREE;
24733   else
24734     ret = finish_omp_for (loc_first, declv, initv, condv, incrv, body,
24735                           pre_body, clauses);
24736
24737   while (nbraces)
24738     {
24739       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
24740         {
24741           cp_lexer_consume_token (parser->lexer);
24742           nbraces--;
24743         }
24744       else if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
24745         cp_lexer_consume_token (parser->lexer);
24746       else
24747         {
24748           if (!collapse_err)
24749             {
24750               error_at (cp_lexer_peek_token (parser->lexer)->location,
24751                         "collapsed loops not perfectly nested");
24752             }
24753           collapse_err = true;
24754           cp_parser_statement_seq_opt (parser, NULL);
24755           if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
24756             break;
24757         }
24758     }
24759
24760   while (!VEC_empty (tree, for_block))
24761     add_stmt (pop_stmt_list (VEC_pop (tree, for_block)));
24762   release_tree_vector (for_block);
24763
24764   return ret;
24765 }
24766
24767 /* OpenMP 2.5:
24768    #pragma omp for for-clause[optseq] new-line
24769      for-loop  */
24770
24771 #define OMP_FOR_CLAUSE_MASK                             \
24772         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
24773         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
24774         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
24775         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
24776         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
24777         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
24778         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT)              \
24779         | (1u << PRAGMA_OMP_CLAUSE_COLLAPSE))
24780
24781 static tree
24782 cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
24783 {
24784   tree clauses, sb, ret;
24785   unsigned int save;
24786
24787   clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
24788                                        "#pragma omp for", pragma_tok);
24789
24790   sb = begin_omp_structured_block ();
24791   save = cp_parser_begin_omp_structured_block (parser);
24792
24793   ret = cp_parser_omp_for_loop (parser, clauses, NULL);
24794
24795   cp_parser_end_omp_structured_block (parser, save);
24796   add_stmt (finish_omp_structured_block (sb));
24797
24798   return ret;
24799 }
24800
24801 /* OpenMP 2.5:
24802    # pragma omp master new-line
24803      structured-block  */
24804
24805 static tree
24806 cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
24807 {
24808   cp_parser_require_pragma_eol (parser, pragma_tok);
24809   return c_finish_omp_master (input_location,
24810                               cp_parser_omp_structured_block (parser));
24811 }
24812
24813 /* OpenMP 2.5:
24814    # pragma omp ordered new-line
24815      structured-block  */
24816
24817 static tree
24818 cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
24819 {
24820   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
24821   cp_parser_require_pragma_eol (parser, pragma_tok);
24822   return c_finish_omp_ordered (loc, cp_parser_omp_structured_block (parser));
24823 }
24824
24825 /* OpenMP 2.5:
24826
24827    section-scope:
24828      { section-sequence }
24829
24830    section-sequence:
24831      section-directive[opt] structured-block
24832      section-sequence section-directive structured-block  */
24833
24834 static tree
24835 cp_parser_omp_sections_scope (cp_parser *parser)
24836 {
24837   tree stmt, substmt;
24838   bool error_suppress = false;
24839   cp_token *tok;
24840
24841   if (!cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE))
24842     return NULL_TREE;
24843
24844   stmt = push_stmt_list ();
24845
24846   if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
24847     {
24848       unsigned save;
24849
24850       substmt = begin_omp_structured_block ();
24851       save = cp_parser_begin_omp_structured_block (parser);
24852
24853       while (1)
24854         {
24855           cp_parser_statement (parser, NULL_TREE, false, NULL);
24856
24857           tok = cp_lexer_peek_token (parser->lexer);
24858           if (tok->pragma_kind == PRAGMA_OMP_SECTION)
24859             break;
24860           if (tok->type == CPP_CLOSE_BRACE)
24861             break;
24862           if (tok->type == CPP_EOF)
24863             break;
24864         }
24865
24866       cp_parser_end_omp_structured_block (parser, save);
24867       substmt = finish_omp_structured_block (substmt);
24868       substmt = build1 (OMP_SECTION, void_type_node, substmt);
24869       add_stmt (substmt);
24870     }
24871
24872   while (1)
24873     {
24874       tok = cp_lexer_peek_token (parser->lexer);
24875       if (tok->type == CPP_CLOSE_BRACE)
24876         break;
24877       if (tok->type == CPP_EOF)
24878         break;
24879
24880       if (tok->pragma_kind == PRAGMA_OMP_SECTION)
24881         {
24882           cp_lexer_consume_token (parser->lexer);
24883           cp_parser_require_pragma_eol (parser, tok);
24884           error_suppress = false;
24885         }
24886       else if (!error_suppress)
24887         {
24888           cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
24889           error_suppress = true;
24890         }
24891
24892       substmt = cp_parser_omp_structured_block (parser);
24893       substmt = build1 (OMP_SECTION, void_type_node, substmt);
24894       add_stmt (substmt);
24895     }
24896   cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
24897
24898   substmt = pop_stmt_list (stmt);
24899
24900   stmt = make_node (OMP_SECTIONS);
24901   TREE_TYPE (stmt) = void_type_node;
24902   OMP_SECTIONS_BODY (stmt) = substmt;
24903
24904   add_stmt (stmt);
24905   return stmt;
24906 }
24907
24908 /* OpenMP 2.5:
24909    # pragma omp sections sections-clause[optseq] newline
24910      sections-scope  */
24911
24912 #define OMP_SECTIONS_CLAUSE_MASK                        \
24913         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
24914         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
24915         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
24916         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
24917         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
24918
24919 static tree
24920 cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
24921 {
24922   tree clauses, ret;
24923
24924   clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
24925                                        "#pragma omp sections", pragma_tok);
24926
24927   ret = cp_parser_omp_sections_scope (parser);
24928   if (ret)
24929     OMP_SECTIONS_CLAUSES (ret) = clauses;
24930
24931   return ret;
24932 }
24933
24934 /* OpenMP 2.5:
24935    # pragma parallel parallel-clause new-line
24936    # pragma parallel for parallel-for-clause new-line
24937    # pragma parallel sections parallel-sections-clause new-line  */
24938
24939 #define OMP_PARALLEL_CLAUSE_MASK                        \
24940         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
24941         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
24942         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
24943         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
24944         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
24945         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
24946         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
24947         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
24948
24949 static tree
24950 cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
24951 {
24952   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
24953   const char *p_name = "#pragma omp parallel";
24954   tree stmt, clauses, par_clause, ws_clause, block;
24955   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
24956   unsigned int save;
24957   location_t loc = cp_lexer_peek_token (parser->lexer)->location;
24958
24959   if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
24960     {
24961       cp_lexer_consume_token (parser->lexer);
24962       p_kind = PRAGMA_OMP_PARALLEL_FOR;
24963       p_name = "#pragma omp parallel for";
24964       mask |= OMP_FOR_CLAUSE_MASK;
24965       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
24966     }
24967   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
24968     {
24969       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
24970       const char *p = IDENTIFIER_POINTER (id);
24971       if (strcmp (p, "sections") == 0)
24972         {
24973           cp_lexer_consume_token (parser->lexer);
24974           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
24975           p_name = "#pragma omp parallel sections";
24976           mask |= OMP_SECTIONS_CLAUSE_MASK;
24977           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
24978         }
24979     }
24980
24981   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
24982   block = begin_omp_parallel ();
24983   save = cp_parser_begin_omp_structured_block (parser);
24984
24985   switch (p_kind)
24986     {
24987     case PRAGMA_OMP_PARALLEL:
24988       cp_parser_statement (parser, NULL_TREE, false, NULL);
24989       par_clause = clauses;
24990       break;
24991
24992     case PRAGMA_OMP_PARALLEL_FOR:
24993       c_split_parallel_clauses (loc, clauses, &par_clause, &ws_clause);
24994       cp_parser_omp_for_loop (parser, ws_clause, &par_clause);
24995       break;
24996
24997     case PRAGMA_OMP_PARALLEL_SECTIONS:
24998       c_split_parallel_clauses (loc, clauses, &par_clause, &ws_clause);
24999       stmt = cp_parser_omp_sections_scope (parser);
25000       if (stmt)
25001         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
25002       break;
25003
25004     default:
25005       gcc_unreachable ();
25006     }
25007
25008   cp_parser_end_omp_structured_block (parser, save);
25009   stmt = finish_omp_parallel (par_clause, block);
25010   if (p_kind != PRAGMA_OMP_PARALLEL)
25011     OMP_PARALLEL_COMBINED (stmt) = 1;
25012   return stmt;
25013 }
25014
25015 /* OpenMP 2.5:
25016    # pragma omp single single-clause[optseq] new-line
25017      structured-block  */
25018
25019 #define OMP_SINGLE_CLAUSE_MASK                          \
25020         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
25021         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
25022         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
25023         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
25024
25025 static tree
25026 cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
25027 {
25028   tree stmt = make_node (OMP_SINGLE);
25029   TREE_TYPE (stmt) = void_type_node;
25030
25031   OMP_SINGLE_CLAUSES (stmt)
25032     = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
25033                                  "#pragma omp single", pragma_tok);
25034   OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
25035
25036   return add_stmt (stmt);
25037 }
25038
25039 /* OpenMP 3.0:
25040    # pragma omp task task-clause[optseq] new-line
25041      structured-block  */
25042
25043 #define OMP_TASK_CLAUSE_MASK                            \
25044         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
25045         | (1u << PRAGMA_OMP_CLAUSE_UNTIED)              \
25046         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
25047         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
25048         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
25049         | (1u << PRAGMA_OMP_CLAUSE_SHARED))
25050
25051 static tree
25052 cp_parser_omp_task (cp_parser *parser, cp_token *pragma_tok)
25053 {
25054   tree clauses, block;
25055   unsigned int save;
25056
25057   clauses = cp_parser_omp_all_clauses (parser, OMP_TASK_CLAUSE_MASK,
25058                                        "#pragma omp task", pragma_tok);
25059   block = begin_omp_task ();
25060   save = cp_parser_begin_omp_structured_block (parser);
25061   cp_parser_statement (parser, NULL_TREE, false, NULL);
25062   cp_parser_end_omp_structured_block (parser, save);
25063   return finish_omp_task (clauses, block);
25064 }
25065
25066 /* OpenMP 3.0:
25067    # pragma omp taskwait new-line  */
25068
25069 static void
25070 cp_parser_omp_taskwait (cp_parser *parser, cp_token *pragma_tok)
25071 {
25072   cp_parser_require_pragma_eol (parser, pragma_tok);
25073   finish_omp_taskwait ();
25074 }
25075
25076 /* OpenMP 2.5:
25077    # pragma omp threadprivate (variable-list) */
25078
25079 static void
25080 cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
25081 {
25082   tree vars;
25083
25084   vars = cp_parser_omp_var_list (parser, OMP_CLAUSE_ERROR, NULL);
25085   cp_parser_require_pragma_eol (parser, pragma_tok);
25086
25087   finish_omp_threadprivate (vars);
25088 }
25089
25090 /* Main entry point to OpenMP statement pragmas.  */
25091
25092 static void
25093 cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
25094 {
25095   tree stmt;
25096
25097   switch (pragma_tok->pragma_kind)
25098     {
25099     case PRAGMA_OMP_ATOMIC:
25100       cp_parser_omp_atomic (parser, pragma_tok);
25101       return;
25102     case PRAGMA_OMP_CRITICAL:
25103       stmt = cp_parser_omp_critical (parser, pragma_tok);
25104       break;
25105     case PRAGMA_OMP_FOR:
25106       stmt = cp_parser_omp_for (parser, pragma_tok);
25107       break;
25108     case PRAGMA_OMP_MASTER:
25109       stmt = cp_parser_omp_master (parser, pragma_tok);
25110       break;
25111     case PRAGMA_OMP_ORDERED:
25112       stmt = cp_parser_omp_ordered (parser, pragma_tok);
25113       break;
25114     case PRAGMA_OMP_PARALLEL:
25115       stmt = cp_parser_omp_parallel (parser, pragma_tok);
25116       break;
25117     case PRAGMA_OMP_SECTIONS:
25118       stmt = cp_parser_omp_sections (parser, pragma_tok);
25119       break;
25120     case PRAGMA_OMP_SINGLE:
25121       stmt = cp_parser_omp_single (parser, pragma_tok);
25122       break;
25123     case PRAGMA_OMP_TASK:
25124       stmt = cp_parser_omp_task (parser, pragma_tok);
25125       break;
25126     default:
25127       gcc_unreachable ();
25128     }
25129
25130   if (stmt)
25131     SET_EXPR_LOCATION (stmt, pragma_tok->location);
25132 }
25133 \f
25134 /* The parser.  */
25135
25136 static GTY (()) cp_parser *the_parser;
25137
25138 \f
25139 /* Special handling for the first token or line in the file.  The first
25140    thing in the file might be #pragma GCC pch_preprocess, which loads a
25141    PCH file, which is a GC collection point.  So we need to handle this
25142    first pragma without benefit of an existing lexer structure.
25143
25144    Always returns one token to the caller in *FIRST_TOKEN.  This is
25145    either the true first token of the file, or the first token after
25146    the initial pragma.  */
25147
25148 static void
25149 cp_parser_initial_pragma (cp_token *first_token)
25150 {
25151   tree name = NULL;
25152
25153   cp_lexer_get_preprocessor_token (NULL, first_token);
25154   if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
25155     return;
25156
25157   cp_lexer_get_preprocessor_token (NULL, first_token);
25158   if (first_token->type == CPP_STRING)
25159     {
25160       name = first_token->u.value;
25161
25162       cp_lexer_get_preprocessor_token (NULL, first_token);
25163       if (first_token->type != CPP_PRAGMA_EOL)
25164         error_at (first_token->location,
25165                   "junk at end of %<#pragma GCC pch_preprocess%>");
25166     }
25167   else
25168     error_at (first_token->location, "expected string literal");
25169
25170   /* Skip to the end of the pragma.  */
25171   while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
25172     cp_lexer_get_preprocessor_token (NULL, first_token);
25173
25174   /* Now actually load the PCH file.  */
25175   if (name)
25176     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
25177
25178   /* Read one more token to return to our caller.  We have to do this
25179      after reading the PCH file in, since its pointers have to be
25180      live.  */
25181   cp_lexer_get_preprocessor_token (NULL, first_token);
25182 }
25183
25184 /* Normal parsing of a pragma token.  Here we can (and must) use the
25185    regular lexer.  */
25186
25187 static bool
25188 cp_parser_pragma (cp_parser *parser, enum pragma_context context)
25189 {
25190   cp_token *pragma_tok;
25191   unsigned int id;
25192
25193   pragma_tok = cp_lexer_consume_token (parser->lexer);
25194   gcc_assert (pragma_tok->type == CPP_PRAGMA);
25195   parser->lexer->in_pragma = true;
25196
25197   id = pragma_tok->pragma_kind;
25198   switch (id)
25199     {
25200     case PRAGMA_GCC_PCH_PREPROCESS:
25201       error_at (pragma_tok->location,
25202                 "%<#pragma GCC pch_preprocess%> must be first");
25203       break;
25204
25205     case PRAGMA_OMP_BARRIER:
25206       switch (context)
25207         {
25208         case pragma_compound:
25209           cp_parser_omp_barrier (parser, pragma_tok);
25210           return false;
25211         case pragma_stmt:
25212           error_at (pragma_tok->location, "%<#pragma omp barrier%> may only be "
25213                     "used in compound statements");
25214           break;
25215         default:
25216           goto bad_stmt;
25217         }
25218       break;
25219
25220     case PRAGMA_OMP_FLUSH:
25221       switch (context)
25222         {
25223         case pragma_compound:
25224           cp_parser_omp_flush (parser, pragma_tok);
25225           return false;
25226         case pragma_stmt:
25227           error_at (pragma_tok->location, "%<#pragma omp flush%> may only be "
25228                     "used in compound statements");
25229           break;
25230         default:
25231           goto bad_stmt;
25232         }
25233       break;
25234
25235     case PRAGMA_OMP_TASKWAIT:
25236       switch (context)
25237         {
25238         case pragma_compound:
25239           cp_parser_omp_taskwait (parser, pragma_tok);
25240           return false;
25241         case pragma_stmt:
25242           error_at (pragma_tok->location,
25243                     "%<#pragma omp taskwait%> may only be "
25244                     "used in compound statements");
25245           break;
25246         default:
25247           goto bad_stmt;
25248         }
25249       break;
25250
25251     case PRAGMA_OMP_THREADPRIVATE:
25252       cp_parser_omp_threadprivate (parser, pragma_tok);
25253       return false;
25254
25255     case PRAGMA_OMP_ATOMIC:
25256     case PRAGMA_OMP_CRITICAL:
25257     case PRAGMA_OMP_FOR:
25258     case PRAGMA_OMP_MASTER:
25259     case PRAGMA_OMP_ORDERED:
25260     case PRAGMA_OMP_PARALLEL:
25261     case PRAGMA_OMP_SECTIONS:
25262     case PRAGMA_OMP_SINGLE:
25263     case PRAGMA_OMP_TASK:
25264       if (context == pragma_external)
25265         goto bad_stmt;
25266       cp_parser_omp_construct (parser, pragma_tok);
25267       return true;
25268
25269     case PRAGMA_OMP_SECTION:
25270       error_at (pragma_tok->location, 
25271                 "%<#pragma omp section%> may only be used in "
25272                 "%<#pragma omp sections%> construct");
25273       break;
25274
25275     default:
25276       gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
25277       c_invoke_pragma_handler (id);
25278       break;
25279
25280     bad_stmt:
25281       cp_parser_error (parser, "expected declaration specifiers");
25282       break;
25283     }
25284
25285   cp_parser_skip_to_pragma_eol (parser, pragma_tok);
25286   return false;
25287 }
25288
25289 /* The interface the pragma parsers have to the lexer.  */
25290
25291 enum cpp_ttype
25292 pragma_lex (tree *value)
25293 {
25294   cp_token *tok;
25295   enum cpp_ttype ret;
25296
25297   tok = cp_lexer_peek_token (the_parser->lexer);
25298
25299   ret = tok->type;
25300   *value = tok->u.value;
25301
25302   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
25303     ret = CPP_EOF;
25304   else if (ret == CPP_STRING)
25305     *value = cp_parser_string_literal (the_parser, false, false);
25306   else
25307     {
25308       cp_lexer_consume_token (the_parser->lexer);
25309       if (ret == CPP_KEYWORD)
25310         ret = CPP_NAME;
25311     }
25312
25313   return ret;
25314 }
25315
25316 \f
25317 /* External interface.  */
25318
25319 /* Parse one entire translation unit.  */
25320
25321 void
25322 c_parse_file (void)
25323 {
25324   static bool already_called = false;
25325
25326   if (already_called)
25327     {
25328       sorry ("inter-module optimizations not implemented for C++");
25329       return;
25330     }
25331   already_called = true;
25332
25333   the_parser = cp_parser_new ();
25334   push_deferring_access_checks (flag_access_control
25335                                 ? dk_no_deferred : dk_no_check);
25336   cp_parser_translation_unit (the_parser);
25337   the_parser = NULL;
25338 }
25339
25340 #include "gt-cp-parser.h"