1/* C++ Parser.
2   Copyright (C) 2000, 2001, 2002, 2003, 2004,
3   2005  Free Software Foundation, Inc.
4   Written by Mark Mitchell <mark@codesourcery.com>.
5
6   This file is part of GCC.
7
8   GCC is free software; you can redistribute it and/or modify it
9   under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 2, or (at your option)
11   any later version.
12
13   GCC is distributed in the hope that it will be useful, but
14   WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16   General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with GCC; see the file COPYING.  If not, write to the Free
20   Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
21   02110-1301, USA.  */
22
23#include "config.h"
24#include "system.h"
25#include "coretypes.h"
26#include "tm.h"
27#include "dyn-string.h"
28#include "varray.h"
29#include "cpplib.h"
30#include "tree.h"
31#include "cp-tree.h"
32#include "c-pragma.h"
33#include "decl.h"
34#include "flags.h"
35#include "diagnostic.h"
36#include "toplev.h"
37#include "output.h"
38#include "target.h"
39#include "cgraph.h"
40#include "c-common.h"
41
42
43/* The lexer.  */
44
45/* The cp_lexer_* routines mediate between the lexer proper (in libcpp
46   and c-lex.c) and the C++ parser.  */
47
48/* A token's value and its associated deferred access checks and
49   qualifying scope.  */
50
51struct tree_check GTY(())
52{
53  /* The value associated with the token.  */
54  tree value;
55  /* The checks that have been associated with value.  */
56  VEC (deferred_access_check, gc)* checks;
57  /* The token's qualifying scope (used when it is a
58     CPP_NESTED_NAME_SPECIFIER).  */
59  tree qualifying_scope;
60};
61
62/* A C++ token.  */
63
64typedef struct cp_token GTY (())
65{
66  /* The kind of token.  */
67  ENUM_BITFIELD (cpp_ttype) type : 8;
68  /* If this token is a keyword, this value indicates which keyword.
69     Otherwise, this value is RID_MAX.  */
70  ENUM_BITFIELD (rid) keyword : 8;
71  /* Token flags.  */
72  unsigned char flags;
73  /* Identifier for the pragma.  */
74  ENUM_BITFIELD (pragma_kind) pragma_kind : 6;
75  /* True if this token is from a system header.  */
76  BOOL_BITFIELD in_system_header : 1;
77  /* True if this token is from a context where it is implicitly extern "C" */
78  BOOL_BITFIELD implicit_extern_c : 1;
79  /* True for a CPP_NAME token that is not a keyword (i.e., for which
80     KEYWORD is RID_MAX) iff this name was looked up and found to be
81     ambiguous.  An error has already been reported.  */
82  BOOL_BITFIELD ambiguous_p : 1;
83  /* The input file stack index at which this token was found.  */
84  unsigned input_file_stack_index : INPUT_FILE_STACK_BITS;
85  /* The value associated with this token, if any.  */
86  union cp_token_value {
87    /* Used for CPP_NESTED_NAME_SPECIFIER and CPP_TEMPLATE_ID.  */
88    struct tree_check* GTY((tag ("1"))) tree_check_value;
89    /* Use for all other tokens.  */
90    tree GTY((tag ("0"))) value;
91  } GTY((desc ("(%1.type == CPP_TEMPLATE_ID) || (%1.type == CPP_NESTED_NAME_SPECIFIER)"))) u;
92  /* The location at which this token was found.  */
93  location_t location;
94} cp_token;
95
96/* We use a stack of token pointer for saving token sets.  */
97typedef struct cp_token *cp_token_position;
98DEF_VEC_P (cp_token_position);
99DEF_VEC_ALLOC_P (cp_token_position,heap);
100
101static const cp_token eof_token =
102{
103  CPP_EOF, RID_MAX, 0, PRAGMA_NONE, 0, 0, false, 0, { NULL },
104#if USE_MAPPED_LOCATION
105  0
106#else
107  {0, 0}
108#endif
109};
110
111/* The cp_lexer structure represents the C++ lexer.  It is responsible
112   for managing the token stream from the preprocessor and supplying
113   it to the parser.  Tokens are never added to the cp_lexer after
114   it is created.  */
115
116typedef struct cp_lexer GTY (())
117{
118  /* The memory allocated for the buffer.  NULL if this lexer does not
119     own the token buffer.  */
120  cp_token * GTY ((length ("%h.buffer_length"))) buffer;
121  /* If the lexer owns the buffer, this is the number of tokens in the
122     buffer.  */
123  size_t buffer_length;
124
125  /* A pointer just past the last available token.  The tokens
126     in this lexer are [buffer, last_token).  */
127  cp_token_position GTY ((skip)) last_token;
128
129  /* The next available token.  If NEXT_TOKEN is &eof_token, then there are
130     no more available tokens.  */
131  cp_token_position GTY ((skip)) next_token;
132
133  /* A stack indicating positions at which cp_lexer_save_tokens was
134     called.  The top entry is the most recent position at which we
135     began saving tokens.  If the stack is non-empty, we are saving
136     tokens.  */
137  VEC(cp_token_position,heap) *GTY ((skip)) saved_tokens;
138
139  /* The next lexer in a linked list of lexers.  */
140  struct cp_lexer *next;
141
142  /* True if we should output debugging information.  */
143  bool debugging_p;
144
145  /* True if we're in the context of parsing a pragma, and should not
146     increment past the end-of-line marker.  */
147  bool in_pragma;
148} cp_lexer;
149
150/* cp_token_cache is a range of tokens.  There is no need to represent
151   allocate heap memory for it, since tokens are never removed from the
152   lexer's array.  There is also no need for the GC to walk through
153   a cp_token_cache, since everything in here is referenced through
154   a lexer.  */
155
156typedef struct cp_token_cache GTY(())
157{
158  /* The beginning of the token range.  */
159  cp_token * GTY((skip)) first;
160
161  /* Points immediately after the last token in the range.  */
162  cp_token * GTY ((skip)) last;
163} cp_token_cache;
164
165/* Prototypes.  */
166
167static cp_lexer *cp_lexer_new_main
168  (void);
169static cp_lexer *cp_lexer_new_from_tokens
170  (cp_token_cache *tokens);
171static void cp_lexer_destroy
172  (cp_lexer *);
173static int cp_lexer_saving_tokens
174  (const cp_lexer *);
175static cp_token_position cp_lexer_token_position
176  (cp_lexer *, bool);
177static cp_token *cp_lexer_token_at
178  (cp_lexer *, cp_token_position);
179static void cp_lexer_get_preprocessor_token
180  (cp_lexer *, cp_token *);
181static inline cp_token *cp_lexer_peek_token
182  (cp_lexer *);
183static cp_token *cp_lexer_peek_nth_token
184  (cp_lexer *, size_t);
185static inline bool cp_lexer_next_token_is
186  (cp_lexer *, enum cpp_ttype);
187static bool cp_lexer_next_token_is_not
188  (cp_lexer *, enum cpp_ttype);
189static bool cp_lexer_next_token_is_keyword
190  (cp_lexer *, enum rid);
191static cp_token *cp_lexer_consume_token
192  (cp_lexer *);
193static void cp_lexer_purge_token
194  (cp_lexer *);
195static void cp_lexer_purge_tokens_after
196  (cp_lexer *, cp_token_position);
197static void cp_lexer_save_tokens
198  (cp_lexer *);
199static void cp_lexer_commit_tokens
200  (cp_lexer *);
201static void cp_lexer_rollback_tokens
202  (cp_lexer *);
203#ifdef ENABLE_CHECKING
204static void cp_lexer_print_token
205  (FILE *, cp_token *);
206static inline bool cp_lexer_debugging_p
207  (cp_lexer *);
208static void cp_lexer_start_debugging
209  (cp_lexer *) ATTRIBUTE_UNUSED;
210static void cp_lexer_stop_debugging
211  (cp_lexer *) ATTRIBUTE_UNUSED;
212#else
213/* If we define cp_lexer_debug_stream to NULL it will provoke warnings
214   about passing NULL to functions that require non-NULL arguments
215   (fputs, fprintf).  It will never be used, so all we need is a value
216   of the right type that's guaranteed not to be NULL.  */
217#define cp_lexer_debug_stream stdout
218#define cp_lexer_print_token(str, tok) (void) 0
219#define cp_lexer_debugging_p(lexer) 0
220#endif /* ENABLE_CHECKING */
221
222static cp_token_cache *cp_token_cache_new
223  (cp_token *, cp_token *);
224
225static void cp_parser_initial_pragma
226  (cp_token *);
227
228/* Manifest constants.  */
229#define CP_LEXER_BUFFER_SIZE ((256 * 1024) / sizeof (cp_token))
230#define CP_SAVED_TOKEN_STACK 5
231
232/* A token type for keywords, as opposed to ordinary identifiers.  */
233#define CPP_KEYWORD ((enum cpp_ttype) (N_TTYPES + 1))
234
235/* A token type for template-ids.  If a template-id is processed while
236   parsing tentatively, it is replaced with a CPP_TEMPLATE_ID token;
237   the value of the CPP_TEMPLATE_ID is whatever was returned by
238   cp_parser_template_id.  */
239#define CPP_TEMPLATE_ID ((enum cpp_ttype) (CPP_KEYWORD + 1))
240
241/* A token type for nested-name-specifiers.  If a
242   nested-name-specifier is processed while parsing tentatively, it is
243   replaced with a CPP_NESTED_NAME_SPECIFIER token; the value of the
244   CPP_NESTED_NAME_SPECIFIER is whatever was returned by
245   cp_parser_nested_name_specifier_opt.  */
246#define CPP_NESTED_NAME_SPECIFIER ((enum cpp_ttype) (CPP_TEMPLATE_ID + 1))
247
248/* A token type for tokens that are not tokens at all; these are used
249   to represent slots in the array where there used to be a token
250   that has now been deleted.  */
251#define CPP_PURGED ((enum cpp_ttype) (CPP_NESTED_NAME_SPECIFIER + 1))
252
253/* The number of token types, including C++-specific ones.  */
254#define N_CP_TTYPES ((int) (CPP_PURGED + 1))
255
256/* Variables.  */
257
258#ifdef ENABLE_CHECKING
259/* The stream to which debugging output should be written.  */
260static FILE *cp_lexer_debug_stream;
261#endif /* ENABLE_CHECKING */
262
263/* Create a new main C++ lexer, the lexer that gets tokens from the
264   preprocessor.  */
265
266static cp_lexer *
267cp_lexer_new_main (void)
268{
269  cp_token first_token;
270  cp_lexer *lexer;
271  cp_token *pos;
272  size_t alloc;
273  size_t space;
274  cp_token *buffer;
275
276  /* It's possible that parsing the first pragma will load a PCH file,
277     which is a GC collection point.  So we have to do that before
278     allocating any memory.  */
279  cp_parser_initial_pragma (&first_token);
280
281  /* Tell c_lex_with_flags not to merge string constants.  */
282  c_lex_return_raw_strings = true;
283
284  c_common_no_more_pch ();
285
286  /* Allocate the memory.  */
287  lexer = GGC_CNEW (cp_lexer);
288
289#ifdef ENABLE_CHECKING
290  /* Initially we are not debugging.  */
291  lexer->debugging_p = false;
292#endif /* ENABLE_CHECKING */
293  lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
294				   CP_SAVED_TOKEN_STACK);
295
296  /* Create the buffer.  */
297  alloc = CP_LEXER_BUFFER_SIZE;
298  buffer = GGC_NEWVEC (cp_token, alloc);
299
300  /* Put the first token in the buffer.  */
301  space = alloc;
302  pos = buffer;
303  *pos = first_token;
304
305  /* Get the remaining tokens from the preprocessor.  */
306  while (pos->type != CPP_EOF)
307    {
308      pos++;
309      if (!--space)
310	{
311	  space = alloc;
312	  alloc *= 2;
313	  buffer = GGC_RESIZEVEC (cp_token, buffer, alloc);
314	  pos = buffer + space;
315	}
316      cp_lexer_get_preprocessor_token (lexer, pos);
317    }
318  lexer->buffer = buffer;
319  lexer->buffer_length = alloc - space;
320  lexer->last_token = pos;
321  lexer->next_token = lexer->buffer_length ? buffer : (cp_token *)&eof_token;
322
323  /* Subsequent preprocessor diagnostics should use compiler
324     diagnostic functions to get the compiler source location.  */
325  cpp_get_options (parse_in)->client_diagnostic = true;
326  cpp_get_callbacks (parse_in)->error = cp_cpp_error;
327
328  gcc_assert (lexer->next_token->type != CPP_PURGED);
329  return lexer;
330}
331
332/* Create a new lexer whose token stream is primed with the tokens in
333   CACHE.  When these tokens are exhausted, no new tokens will be read.  */
334
335static cp_lexer *
336cp_lexer_new_from_tokens (cp_token_cache *cache)
337{
338  cp_token *first = cache->first;
339  cp_token *last = cache->last;
340  cp_lexer *lexer = GGC_CNEW (cp_lexer);
341
342  /* We do not own the buffer.  */
343  lexer->buffer = NULL;
344  lexer->buffer_length = 0;
345  lexer->next_token = first == last ? (cp_token *)&eof_token : first;
346  lexer->last_token = last;
347
348  lexer->saved_tokens = VEC_alloc (cp_token_position, heap,
349				   CP_SAVED_TOKEN_STACK);
350
351#ifdef ENABLE_CHECKING
352  /* Initially we are not debugging.  */
353  lexer->debugging_p = false;
354#endif
355
356  gcc_assert (lexer->next_token->type != CPP_PURGED);
357  return lexer;
358}
359
360/* Frees all resources associated with LEXER.  */
361
362static void
363cp_lexer_destroy (cp_lexer *lexer)
364{
365  if (lexer->buffer)
366    ggc_free (lexer->buffer);
367  VEC_free (cp_token_position, heap, lexer->saved_tokens);
368  ggc_free (lexer);
369}
370
371/* Returns nonzero if debugging information should be output.  */
372
373#ifdef ENABLE_CHECKING
374
375static inline bool
376cp_lexer_debugging_p (cp_lexer *lexer)
377{
378  return lexer->debugging_p;
379}
380
381#endif /* ENABLE_CHECKING */
382
383static inline cp_token_position
384cp_lexer_token_position (cp_lexer *lexer, bool previous_p)
385{
386  gcc_assert (!previous_p || lexer->next_token != &eof_token);
387
388  return lexer->next_token - previous_p;
389}
390
391static inline cp_token *
392cp_lexer_token_at (cp_lexer *lexer ATTRIBUTE_UNUSED, cp_token_position pos)
393{
394  return pos;
395}
396
397/* nonzero if we are presently saving tokens.  */
398
399static inline int
400cp_lexer_saving_tokens (const cp_lexer* lexer)
401{
402  return VEC_length (cp_token_position, lexer->saved_tokens) != 0;
403}
404
405/* Store the next token from the preprocessor in *TOKEN.  Return true
406   if we reach EOF.  */
407
408static void
409cp_lexer_get_preprocessor_token (cp_lexer *lexer ATTRIBUTE_UNUSED ,
410				 cp_token *token)
411{
412  static int is_extern_c = 0;
413
414   /* Get a new token from the preprocessor.  */
415  token->type
416    = c_lex_with_flags (&token->u.value, &token->location, &token->flags);
417  token->input_file_stack_index = input_file_stack_tick;
418  token->keyword = RID_MAX;
419  token->pragma_kind = PRAGMA_NONE;
420  token->in_system_header = in_system_header;
421
422  /* On some systems, some header files are surrounded by an
423     implicit extern "C" block.  Set a flag in the token if it
424     comes from such a header.  */
425  is_extern_c += pending_lang_change;
426  pending_lang_change = 0;
427  token->implicit_extern_c = is_extern_c > 0;
428
429  /* Check to see if this token is a keyword.  */
430  if (token->type == CPP_NAME)
431    {
432      if (C_IS_RESERVED_WORD (token->u.value))
433	{
434	  /* Mark this token as a keyword.  */
435	  token->type = CPP_KEYWORD;
436	  /* Record which keyword.  */
437	  token->keyword = C_RID_CODE (token->u.value);
438	  /* Update the value.  Some keywords are mapped to particular
439	     entities, rather than simply having the value of the
440	     corresponding IDENTIFIER_NODE.  For example, `__const' is
441	     mapped to `const'.  */
442	  token->u.value = ridpointers[token->keyword];
443	}
444      else
445	{
446	  token->ambiguous_p = false;
447	  token->keyword = RID_MAX;
448	}
449    }
450  /* Handle Objective-C++ keywords.  */
451  else if (token->type == CPP_AT_NAME)
452    {
453      token->type = CPP_KEYWORD;
454      switch (C_RID_CODE (token->u.value))
455	{
456	/* Map 'class' to '@class', 'private' to '@private', etc.  */
457	case RID_CLASS: token->keyword = RID_AT_CLASS; break;
458	case RID_PRIVATE: token->keyword = RID_AT_PRIVATE; break;
459	case RID_PROTECTED: token->keyword = RID_AT_PROTECTED; break;
460	case RID_PUBLIC: token->keyword = RID_AT_PUBLIC; break;
461	case RID_THROW: token->keyword = RID_AT_THROW; break;
462	case RID_TRY: token->keyword = RID_AT_TRY; break;
463	case RID_CATCH: token->keyword = RID_AT_CATCH; break;
464	default: token->keyword = C_RID_CODE (token->u.value);
465	}
466    }
467  else if (token->type == CPP_PRAGMA)
468    {
469      /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST.  */
470      token->pragma_kind = TREE_INT_CST_LOW (token->u.value);
471      token->u.value = NULL_TREE;
472    }
473}
474
475/* Update the globals input_location and in_system_header and the
476   input file stack from TOKEN.  */
477static inline void
478cp_lexer_set_source_position_from_token (cp_token *token)
479{
480  if (token->type != CPP_EOF)
481    {
482      input_location = token->location;
483      in_system_header = token->in_system_header;
484      restore_input_file_stack (token->input_file_stack_index);
485    }
486}
487
488/* Return a pointer to the next token in the token stream, but do not
489   consume it.  */
490
491static inline cp_token *
492cp_lexer_peek_token (cp_lexer *lexer)
493{
494  if (cp_lexer_debugging_p (lexer))
495    {
496      fputs ("cp_lexer: peeking at token: ", cp_lexer_debug_stream);
497      cp_lexer_print_token (cp_lexer_debug_stream, lexer->next_token);
498      putc ('\n', cp_lexer_debug_stream);
499    }
500  return lexer->next_token;
501}
502
503/* Return true if the next token has the indicated TYPE.  */
504
505static inline bool
506cp_lexer_next_token_is (cp_lexer* lexer, enum cpp_ttype type)
507{
508  return cp_lexer_peek_token (lexer)->type == type;
509}
510
511/* Return true if the next token does not have the indicated TYPE.  */
512
513static inline bool
514cp_lexer_next_token_is_not (cp_lexer* lexer, enum cpp_ttype type)
515{
516  return !cp_lexer_next_token_is (lexer, type);
517}
518
519/* Return true if the next token is the indicated KEYWORD.  */
520
521static inline bool
522cp_lexer_next_token_is_keyword (cp_lexer* lexer, enum rid keyword)
523{
524  return cp_lexer_peek_token (lexer)->keyword == keyword;
525}
526
527/* Return true if the next token is a keyword for a decl-specifier.  */
528
529static bool
530cp_lexer_next_token_is_decl_specifier_keyword (cp_lexer *lexer)
531{
532  cp_token *token;
533
534  token = cp_lexer_peek_token (lexer);
535  switch (token->keyword)
536    {
537      /* Storage classes.  */
538    case RID_AUTO:
539    case RID_REGISTER:
540    case RID_STATIC:
541    case RID_EXTERN:
542    case RID_MUTABLE:
543    case RID_THREAD:
544      /* Elaborated type specifiers.  */
545    case RID_ENUM:
546    case RID_CLASS:
547    case RID_STRUCT:
548    case RID_UNION:
549    case RID_TYPENAME:
550      /* Simple type specifiers.  */
551    case RID_CHAR:
552    case RID_WCHAR:
553    case RID_BOOL:
554    case RID_SHORT:
555    case RID_INT:
556    case RID_LONG:
557    case RID_SIGNED:
558    case RID_UNSIGNED:
559    case RID_FLOAT:
560    case RID_DOUBLE:
561    case RID_VOID:
562      /* GNU extensions.  */
563    case RID_ATTRIBUTE:
564    case RID_TYPEOF:
565      return true;
566
567    default:
568      return false;
569    }
570}
571
572/* Return a pointer to the Nth token in the token stream.  If N is 1,
573   then this is precisely equivalent to cp_lexer_peek_token (except
574   that it is not inline).  One would like to disallow that case, but
575   there is one case (cp_parser_nth_token_starts_template_id) where
576   the caller passes a variable for N and it might be 1.  */
577
578static cp_token *
579cp_lexer_peek_nth_token (cp_lexer* lexer, size_t n)
580{
581  cp_token *token;
582
583  /* N is 1-based, not zero-based.  */
584  gcc_assert (n > 0);
585
586  if (cp_lexer_debugging_p (lexer))
587    fprintf (cp_lexer_debug_stream,
588	     "cp_lexer: peeking ahead %ld at token: ", (long)n);
589
590  --n;
591  token = lexer->next_token;
592  gcc_assert (!n || token != &eof_token);
593  while (n != 0)
594    {
595      ++token;
596      if (token == lexer->last_token)
597	{
598	  token = (cp_token *)&eof_token;
599	  break;
600	}
601
602      if (token->type != CPP_PURGED)
603	--n;
604    }
605
606  if (cp_lexer_debugging_p (lexer))
607    {
608      cp_lexer_print_token (cp_lexer_debug_stream, token);
609      putc ('\n', cp_lexer_debug_stream);
610    }
611
612  return token;
613}
614
615/* Return the next token, and advance the lexer's next_token pointer
616   to point to the next non-purged token.  */
617
618static cp_token *
619cp_lexer_consume_token (cp_lexer* lexer)
620{
621  cp_token *token = lexer->next_token;
622
623  gcc_assert (token != &eof_token);
624  gcc_assert (!lexer->in_pragma || token->type != CPP_PRAGMA_EOL);
625
626  do
627    {
628      lexer->next_token++;
629      if (lexer->next_token == lexer->last_token)
630	{
631	  lexer->next_token = (cp_token *)&eof_token;
632	  break;
633	}
634
635    }
636  while (lexer->next_token->type == CPP_PURGED);
637
638  cp_lexer_set_source_position_from_token (token);
639
640  /* Provide debugging output.  */
641  if (cp_lexer_debugging_p (lexer))
642    {
643      fputs ("cp_lexer: consuming token: ", cp_lexer_debug_stream);
644      cp_lexer_print_token (cp_lexer_debug_stream, token);
645      putc ('\n', cp_lexer_debug_stream);
646    }
647
648  return token;
649}
650
651/* Permanently remove the next token from the token stream, and
652   advance the next_token pointer to refer to the next non-purged
653   token.  */
654
655static void
656cp_lexer_purge_token (cp_lexer *lexer)
657{
658  cp_token *tok = lexer->next_token;
659
660  gcc_assert (tok != &eof_token);
661  tok->type = CPP_PURGED;
662  tok->location = UNKNOWN_LOCATION;
663  tok->u.value = NULL_TREE;
664  tok->keyword = RID_MAX;
665
666  do
667    {
668      tok++;
669      if (tok == lexer->last_token)
670	{
671	  tok = (cp_token *)&eof_token;
672	  break;
673	}
674    }
675  while (tok->type == CPP_PURGED);
676  lexer->next_token = tok;
677}
678
679/* Permanently remove all tokens after TOK, up to, but not
680   including, the token that will be returned next by
681   cp_lexer_peek_token.  */
682
683static void
684cp_lexer_purge_tokens_after (cp_lexer *lexer, cp_token *tok)
685{
686  cp_token *peek = lexer->next_token;
687
688  if (peek == &eof_token)
689    peek = lexer->last_token;
690
691  gcc_assert (tok < peek);
692
693  for ( tok += 1; tok != peek; tok += 1)
694    {
695      tok->type = CPP_PURGED;
696      tok->location = UNKNOWN_LOCATION;
697      tok->u.value = NULL_TREE;
698      tok->keyword = RID_MAX;
699    }
700}
701
702/* Begin saving tokens.  All tokens consumed after this point will be
703   preserved.  */
704
705static void
706cp_lexer_save_tokens (cp_lexer* lexer)
707{
708  /* Provide debugging output.  */
709  if (cp_lexer_debugging_p (lexer))
710    fprintf (cp_lexer_debug_stream, "cp_lexer: saving tokens\n");
711
712  VEC_safe_push (cp_token_position, heap,
713		 lexer->saved_tokens, lexer->next_token);
714}
715
716/* Commit to the portion of the token stream most recently saved.  */
717
718static void
719cp_lexer_commit_tokens (cp_lexer* lexer)
720{
721  /* Provide debugging output.  */
722  if (cp_lexer_debugging_p (lexer))
723    fprintf (cp_lexer_debug_stream, "cp_lexer: committing tokens\n");
724
725  VEC_pop (cp_token_position, lexer->saved_tokens);
726}
727
728/* Return all tokens saved since the last call to cp_lexer_save_tokens
729   to the token stream.  Stop saving tokens.  */
730
731static void
732cp_lexer_rollback_tokens (cp_lexer* lexer)
733{
734  /* Provide debugging output.  */
735  if (cp_lexer_debugging_p (lexer))
736    fprintf (cp_lexer_debug_stream, "cp_lexer: restoring tokens\n");
737
738  lexer->next_token = VEC_pop (cp_token_position, lexer->saved_tokens);
739}
740
741/* Print a representation of the TOKEN on the STREAM.  */
742
743#ifdef ENABLE_CHECKING
744
745static void
746cp_lexer_print_token (FILE * stream, cp_token *token)
747{
748  /* We don't use cpp_type2name here because the parser defines
749     a few tokens of its own.  */
750  static const char *const token_names[] = {
751    /* cpplib-defined token types */
752#define OP(e, s) #e,
753#define TK(e, s) #e,
754    TTYPE_TABLE
755#undef OP
756#undef TK
757    /* C++ parser token types - see "Manifest constants", above.  */
758    "KEYWORD",
759    "TEMPLATE_ID",
760    "NESTED_NAME_SPECIFIER",
761    "PURGED"
762  };
763
764  /* If we have a name for the token, print it out.  Otherwise, we
765     simply give the numeric code.  */
766  gcc_assert (token->type < ARRAY_SIZE(token_names));
767  fputs (token_names[token->type], stream);
768
769  /* For some tokens, print the associated data.  */
770  switch (token->type)
771    {
772    case CPP_KEYWORD:
773      /* Some keywords have a value that is not an IDENTIFIER_NODE.
774	 For example, `struct' is mapped to an INTEGER_CST.  */
775      if (TREE_CODE (token->u.value) != IDENTIFIER_NODE)
776	break;
777      /* else fall through */
778    case CPP_NAME:
779      fputs (IDENTIFIER_POINTER (token->u.value), stream);
780      break;
781
782    case CPP_STRING:
783    case CPP_WSTRING:
784      fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->u.value));
785      break;
786
787    default:
788      break;
789    }
790}
791
792/* Start emitting debugging information.  */
793
794static void
795cp_lexer_start_debugging (cp_lexer* lexer)
796{
797  lexer->debugging_p = true;
798}
799
800/* Stop emitting debugging information.  */
801
802static void
803cp_lexer_stop_debugging (cp_lexer* lexer)
804{
805  lexer->debugging_p = false;
806}
807
808#endif /* ENABLE_CHECKING */
809
810/* Create a new cp_token_cache, representing a range of tokens.  */
811
812static cp_token_cache *
813cp_token_cache_new (cp_token *first, cp_token *last)
814{
815  cp_token_cache *cache = GGC_NEW (cp_token_cache);
816  cache->first = first;
817  cache->last = last;
818  return cache;
819}
820
821
822/* Decl-specifiers.  */
823
824/* Set *DECL_SPECS to represent an empty decl-specifier-seq.  */
825
826static void
827clear_decl_specs (cp_decl_specifier_seq *decl_specs)
828{
829  memset (decl_specs, 0, sizeof (cp_decl_specifier_seq));
830}
831
832/* Declarators.  */
833
834/* Nothing other than the parser should be creating declarators;
835   declarators are a semi-syntactic representation of C++ entities.
836   Other parts of the front end that need to create entities (like
837   VAR_DECLs or FUNCTION_DECLs) should do that directly.  */
838
839static cp_declarator *make_call_declarator
840  (cp_declarator *, cp_parameter_declarator *, cp_cv_quals, tree);
841static cp_declarator *make_array_declarator
842  (cp_declarator *, tree);
843static cp_declarator *make_pointer_declarator
844  (cp_cv_quals, cp_declarator *);
845static cp_declarator *make_reference_declarator
846  (cp_cv_quals, cp_declarator *);
847static cp_parameter_declarator *make_parameter_declarator
848  (cp_decl_specifier_seq *, cp_declarator *, tree);
849static cp_declarator *make_ptrmem_declarator
850  (cp_cv_quals, tree, cp_declarator *);
851
852/* An erroneous declarator.  */
853static cp_declarator *cp_error_declarator;
854
855/* The obstack on which declarators and related data structures are
856   allocated.  */
857static struct obstack declarator_obstack;
858
859/* Alloc BYTES from the declarator memory pool.  */
860
861static inline void *
862alloc_declarator (size_t bytes)
863{
864  return obstack_alloc (&declarator_obstack, bytes);
865}
866
867/* Allocate a declarator of the indicated KIND.  Clear fields that are
868   common to all declarators.  */
869
870static cp_declarator *
871make_declarator (cp_declarator_kind kind)
872{
873  cp_declarator *declarator;
874
875  declarator = (cp_declarator *) alloc_declarator (sizeof (cp_declarator));
876  declarator->kind = kind;
877  declarator->attributes = NULL_TREE;
878  declarator->declarator = NULL;
879
880  return declarator;
881}
882
883/* Make a declarator for a generalized identifier.  If
884   QUALIFYING_SCOPE is non-NULL, the identifier is
885   QUALIFYING_SCOPE::UNQUALIFIED_NAME; otherwise, it is just
886   UNQUALIFIED_NAME.  SFK indicates the kind of special function this
887   is, if any.   */
888
889static cp_declarator *
890make_id_declarator (tree qualifying_scope, tree unqualified_name,
891		    special_function_kind sfk)
892{
893  cp_declarator *declarator;
894
895  /* It is valid to write:
896
897       class C { void f(); };
898       typedef C D;
899       void D::f();
900
901     The standard is not clear about whether `typedef const C D' is
902     legal; as of 2002-09-15 the committee is considering that
903     question.  EDG 3.0 allows that syntax.  Therefore, we do as
904     well.  */
905  if (qualifying_scope && TYPE_P (qualifying_scope))
906    qualifying_scope = TYPE_MAIN_VARIANT (qualifying_scope);
907
908  gcc_assert (TREE_CODE (unqualified_name) == IDENTIFIER_NODE
909	      || TREE_CODE (unqualified_name) == BIT_NOT_EXPR
910	      || TREE_CODE (unqualified_name) == TEMPLATE_ID_EXPR);
911
912  declarator = make_declarator (cdk_id);
913  declarator->u.id.qualifying_scope = qualifying_scope;
914  declarator->u.id.unqualified_name = unqualified_name;
915  declarator->u.id.sfk = sfk;
916
917  return declarator;
918}
919
920/* Make a declarator for a pointer to TARGET.  CV_QUALIFIERS is a list
921   of modifiers such as const or volatile to apply to the pointer
922   type, represented as identifiers.  */
923
924cp_declarator *
925make_pointer_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
926{
927  cp_declarator *declarator;
928
929  declarator = make_declarator (cdk_pointer);
930  declarator->declarator = target;
931  declarator->u.pointer.qualifiers = cv_qualifiers;
932  declarator->u.pointer.class_type = NULL_TREE;
933
934  return declarator;
935}
936
937/* Like make_pointer_declarator -- but for references.  */
938
939cp_declarator *
940make_reference_declarator (cp_cv_quals cv_qualifiers, cp_declarator *target)
941{
942  cp_declarator *declarator;
943
944  declarator = make_declarator (cdk_reference);
945  declarator->declarator = target;
946  declarator->u.pointer.qualifiers = cv_qualifiers;
947  declarator->u.pointer.class_type = NULL_TREE;
948
949  return declarator;
950}
951
952/* Like make_pointer_declarator -- but for a pointer to a non-static
953   member of CLASS_TYPE.  */
954
955cp_declarator *
956make_ptrmem_declarator (cp_cv_quals cv_qualifiers, tree class_type,
957			cp_declarator *pointee)
958{
959  cp_declarator *declarator;
960
961  declarator = make_declarator (cdk_ptrmem);
962  declarator->declarator = pointee;
963  declarator->u.pointer.qualifiers = cv_qualifiers;
964  declarator->u.pointer.class_type = class_type;
965
966  return declarator;
967}
968
969/* Make a declarator for the function given by TARGET, with the
970   indicated PARMS.  The CV_QUALIFIERS aply to the function, as in
971   "const"-qualified member function.  The EXCEPTION_SPECIFICATION
972   indicates what exceptions can be thrown.  */
973
974cp_declarator *
975make_call_declarator (cp_declarator *target,
976		      cp_parameter_declarator *parms,
977		      cp_cv_quals cv_qualifiers,
978		      tree exception_specification)
979{
980  cp_declarator *declarator;
981
982  declarator = make_declarator (cdk_function);
983  declarator->declarator = target;
984  declarator->u.function.parameters = parms;
985  declarator->u.function.qualifiers = cv_qualifiers;
986  declarator->u.function.exception_specification = exception_specification;
987
988  return declarator;
989}
990
991/* Make a declarator for an array of BOUNDS elements, each of which is
992   defined by ELEMENT.  */
993
994cp_declarator *
995make_array_declarator (cp_declarator *element, tree bounds)
996{
997  cp_declarator *declarator;
998
999  declarator = make_declarator (cdk_array);
1000  declarator->declarator = element;
1001  declarator->u.array.bounds = bounds;
1002
1003  return declarator;
1004}
1005
1006cp_parameter_declarator *no_parameters;
1007
1008/* Create a parameter declarator with the indicated DECL_SPECIFIERS,
1009   DECLARATOR and DEFAULT_ARGUMENT.  */
1010
1011cp_parameter_declarator *
1012make_parameter_declarator (cp_decl_specifier_seq *decl_specifiers,
1013			   cp_declarator *declarator,
1014			   tree default_argument)
1015{
1016  cp_parameter_declarator *parameter;
1017
1018  parameter = ((cp_parameter_declarator *)
1019	       alloc_declarator (sizeof (cp_parameter_declarator)));
1020  parameter->next = NULL;
1021  if (decl_specifiers)
1022    parameter->decl_specifiers = *decl_specifiers;
1023  else
1024    clear_decl_specs (&parameter->decl_specifiers);
1025  parameter->declarator = declarator;
1026  parameter->default_argument = default_argument;
1027  parameter->ellipsis_p = false;
1028
1029  return parameter;
1030}
1031
1032/* Returns true iff DECLARATOR  is a declaration for a function.  */
1033
1034static bool
1035function_declarator_p (const cp_declarator *declarator)
1036{
1037  while (declarator)
1038    {
1039      if (declarator->kind == cdk_function
1040	  && declarator->declarator->kind == cdk_id)
1041	return true;
1042      if (declarator->kind == cdk_id
1043	  || declarator->kind == cdk_error)
1044	return false;
1045      declarator = declarator->declarator;
1046    }
1047  return false;
1048}
1049
1050/* The parser.  */
1051
1052/* Overview
1053   --------
1054
1055   A cp_parser parses the token stream as specified by the C++
1056   grammar.  Its job is purely parsing, not semantic analysis.  For
1057   example, the parser breaks the token stream into declarators,
1058   expressions, statements, and other similar syntactic constructs.
1059   It does not check that the types of the expressions on either side
1060   of an assignment-statement are compatible, or that a function is
1061   not declared with a parameter of type `void'.
1062
1063   The parser invokes routines elsewhere in the compiler to perform
1064   semantic analysis and to build up the abstract syntax tree for the
1065   code processed.
1066
1067   The parser (and the template instantiation code, which is, in a
1068   way, a close relative of parsing) are the only parts of the
1069   compiler that should be calling push_scope and pop_scope, or
1070   related functions.  The parser (and template instantiation code)
1071   keeps track of what scope is presently active; everything else
1072   should simply honor that.  (The code that generates static
1073   initializers may also need to set the scope, in order to check
1074   access control correctly when emitting the initializers.)
1075
1076   Methodology
1077   -----------
1078
1079   The parser is of the standard recursive-descent variety.  Upcoming
1080   tokens in the token stream are examined in order to determine which
1081   production to use when parsing a non-terminal.  Some C++ constructs
1082   require arbitrary look ahead to disambiguate.  For example, it is
1083   impossible, in the general case, to tell whether a statement is an
1084   expression or declaration without scanning the entire statement.
1085   Therefore, the parser is capable of "parsing tentatively."  When the
1086   parser is not sure what construct comes next, it enters this mode.
1087   Then, while we attempt to parse the construct, the parser queues up
1088   error messages, rather than issuing them immediately, and saves the
1089   tokens it consumes.  If the construct is parsed successfully, the
1090   parser "commits", i.e., it issues any queued error messages and
1091   the tokens that were being preserved are permanently discarded.
1092   If, however, the construct is not parsed successfully, the parser
1093   rolls back its state completely so that it can resume parsing using
1094   a different alternative.
1095
1096   Future Improvements
1097   -------------------
1098
1099   The performance of the parser could probably be improved substantially.
1100   We could often eliminate the need to parse tentatively by looking ahead
1101   a little bit.  In some places, this approach might not entirely eliminate
1102   the need to parse tentatively, but it might still speed up the average
1103   case.  */
1104
1105/* Flags that are passed to some parsing functions.  These values can
1106   be bitwise-ored together.  */
1107
1108typedef enum cp_parser_flags
1109{
1110  /* No flags.  */
1111  CP_PARSER_FLAGS_NONE = 0x0,
1112  /* The construct is optional.  If it is not present, then no error
1113     should be issued.  */
1114  CP_PARSER_FLAGS_OPTIONAL = 0x1,
1115  /* When parsing a type-specifier, do not allow user-defined types.  */
1116  CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2
1117} cp_parser_flags;
1118
1119/* The different kinds of declarators we want to parse.  */
1120
1121typedef enum cp_parser_declarator_kind
1122{
1123  /* We want an abstract declarator.  */
1124  CP_PARSER_DECLARATOR_ABSTRACT,
1125  /* We want a named declarator.  */
1126  CP_PARSER_DECLARATOR_NAMED,
1127  /* We don't mind, but the name must be an unqualified-id.  */
1128  CP_PARSER_DECLARATOR_EITHER
1129} cp_parser_declarator_kind;
1130
1131/* The precedence values used to parse binary expressions.  The minimum value
1132   of PREC must be 1, because zero is reserved to quickly discriminate
1133   binary operators from other tokens.  */
1134
1135enum cp_parser_prec
1136{
1137  PREC_NOT_OPERATOR,
1138  PREC_LOGICAL_OR_EXPRESSION,
1139  PREC_LOGICAL_AND_EXPRESSION,
1140  PREC_INCLUSIVE_OR_EXPRESSION,
1141  PREC_EXCLUSIVE_OR_EXPRESSION,
1142  PREC_AND_EXPRESSION,
1143  PREC_EQUALITY_EXPRESSION,
1144  PREC_RELATIONAL_EXPRESSION,
1145  PREC_SHIFT_EXPRESSION,
1146  PREC_ADDITIVE_EXPRESSION,
1147  PREC_MULTIPLICATIVE_EXPRESSION,
1148  PREC_PM_EXPRESSION,
1149  NUM_PREC_VALUES = PREC_PM_EXPRESSION
1150};
1151
1152/* A mapping from a token type to a corresponding tree node type, with a
1153   precedence value.  */
1154
1155typedef struct cp_parser_binary_operations_map_node
1156{
1157  /* The token type.  */
1158  enum cpp_ttype token_type;
1159  /* The corresponding tree code.  */
1160  enum tree_code tree_type;
1161  /* The precedence of this operator.  */
1162  enum cp_parser_prec prec;
1163} cp_parser_binary_operations_map_node;
1164
1165/* The status of a tentative parse.  */
1166
1167typedef enum cp_parser_status_kind
1168{
1169  /* No errors have occurred.  */
1170  CP_PARSER_STATUS_KIND_NO_ERROR,
1171  /* An error has occurred.  */
1172  CP_PARSER_STATUS_KIND_ERROR,
1173  /* We are committed to this tentative parse, whether or not an error
1174     has occurred.  */
1175  CP_PARSER_STATUS_KIND_COMMITTED
1176} cp_parser_status_kind;
1177
1178typedef struct cp_parser_expression_stack_entry
1179{
1180  tree lhs;
1181  enum tree_code tree_type;
1182  int prec;
1183} cp_parser_expression_stack_entry;
1184
1185/* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1186   entries because precedence levels on the stack are monotonically
1187   increasing.  */
1188typedef struct cp_parser_expression_stack_entry
1189  cp_parser_expression_stack[NUM_PREC_VALUES];
1190
1191/* Context that is saved and restored when parsing tentatively.  */
1192typedef struct cp_parser_context GTY (())
1193{
1194  /* If this is a tentative parsing context, the status of the
1195     tentative parse.  */
1196  enum cp_parser_status_kind status;
1197  /* If non-NULL, we have just seen a `x->' or `x.' expression.  Names
1198     that are looked up in this context must be looked up both in the
1199     scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1200     the context of the containing expression.  */
1201  tree object_type;
1202
1203  /* The next parsing context in the stack.  */
1204  struct cp_parser_context *next;
1205} cp_parser_context;
1206
1207/* Prototypes.  */
1208
1209/* Constructors and destructors.  */
1210
1211static cp_parser_context *cp_parser_context_new
1212  (cp_parser_context *);
1213
1214/* Class variables.  */
1215
1216static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1217
1218/* The operator-precedence table used by cp_parser_binary_expression.
1219   Transformed into an associative array (binops_by_token) by
1220   cp_parser_new.  */
1221
1222static const cp_parser_binary_operations_map_node binops[] = {
1223  { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1224  { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1225
1226  { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1227  { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1228  { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1229
1230  { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1231  { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1232
1233  { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1234  { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1235
1236  { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1237  { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1238  { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1239  { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1240
1241  { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1242  { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1243
1244  { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1245
1246  { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1247
1248  { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1249
1250  { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1251
1252  { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1253};
1254
1255/* The same as binops, but initialized by cp_parser_new so that
1256   binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1257   for speed.  */
1258static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1259
1260/* Constructors and destructors.  */
1261
1262/* Construct a new context.  The context below this one on the stack
1263   is given by NEXT.  */
1264
1265static cp_parser_context *
1266cp_parser_context_new (cp_parser_context* next)
1267{
1268  cp_parser_context *context;
1269
1270  /* Allocate the storage.  */
1271  if (cp_parser_context_free_list != NULL)
1272    {
1273      /* Pull the first entry from the free list.  */
1274      context = cp_parser_context_free_list;
1275      cp_parser_context_free_list = context->next;
1276      memset (context, 0, sizeof (*context));
1277    }
1278  else
1279    context = GGC_CNEW (cp_parser_context);
1280
1281  /* No errors have occurred yet in this context.  */
1282  context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1283  /* If this is not the bottomost context, copy information that we
1284     need from the previous context.  */
1285  if (next)
1286    {
1287      /* If, in the NEXT context, we are parsing an `x->' or `x.'
1288	 expression, then we are parsing one in this context, too.  */
1289      context->object_type = next->object_type;
1290      /* Thread the stack.  */
1291      context->next = next;
1292    }
1293
1294  return context;
1295}
1296
1297/* The cp_parser structure represents the C++ parser.  */
1298
1299typedef struct cp_parser GTY(())
1300{
1301  /* The lexer from which we are obtaining tokens.  */
1302  cp_lexer *lexer;
1303
1304  /* The scope in which names should be looked up.  If NULL_TREE, then
1305     we look up names in the scope that is currently open in the
1306     source program.  If non-NULL, this is either a TYPE or
1307     NAMESPACE_DECL for the scope in which we should look.  It can
1308     also be ERROR_MARK, when we've parsed a bogus scope.
1309
1310     This value is not cleared automatically after a name is looked
1311     up, so we must be careful to clear it before starting a new look
1312     up sequence.  (If it is not cleared, then `X::Y' followed by `Z'
1313     will look up `Z' in the scope of `X', rather than the current
1314     scope.)  Unfortunately, it is difficult to tell when name lookup
1315     is complete, because we sometimes peek at a token, look it up,
1316     and then decide not to consume it.   */
1317  tree scope;
1318
1319  /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1320     last lookup took place.  OBJECT_SCOPE is used if an expression
1321     like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1322     respectively.  QUALIFYING_SCOPE is used for an expression of the
1323     form "X::Y"; it refers to X.  */
1324  tree object_scope;
1325  tree qualifying_scope;
1326
1327  /* A stack of parsing contexts.  All but the bottom entry on the
1328     stack will be tentative contexts.
1329
1330     We parse tentatively in order to determine which construct is in
1331     use in some situations.  For example, in order to determine
1332     whether a statement is an expression-statement or a
1333     declaration-statement we parse it tentatively as a
1334     declaration-statement.  If that fails, we then reparse the same
1335     token stream as an expression-statement.  */
1336  cp_parser_context *context;
1337
1338  /* True if we are parsing GNU C++.  If this flag is not set, then
1339     GNU extensions are not recognized.  */
1340  bool allow_gnu_extensions_p;
1341
1342  /* TRUE if the `>' token should be interpreted as the greater-than
1343     operator.  FALSE if it is the end of a template-id or
1344     template-parameter-list.  */
1345  bool greater_than_is_operator_p;
1346
1347  /* TRUE if default arguments are allowed within a parameter list
1348     that starts at this point. FALSE if only a gnu extension makes
1349     them permissible.  */
1350  bool default_arg_ok_p;
1351
1352  /* TRUE if we are parsing an integral constant-expression.  See
1353     [expr.const] for a precise definition.  */
1354  bool integral_constant_expression_p;
1355
1356  /* TRUE if we are parsing an integral constant-expression -- but a
1357     non-constant expression should be permitted as well.  This flag
1358     is used when parsing an array bound so that GNU variable-length
1359     arrays are tolerated.  */
1360  bool allow_non_integral_constant_expression_p;
1361
1362  /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1363     been seen that makes the expression non-constant.  */
1364  bool non_integral_constant_expression_p;
1365
1366  /* TRUE if local variable names and `this' are forbidden in the
1367     current context.  */
1368  bool local_variables_forbidden_p;
1369
1370  /* TRUE if the declaration we are parsing is part of a
1371     linkage-specification of the form `extern string-literal
1372     declaration'.  */
1373  bool in_unbraced_linkage_specification_p;
1374
1375  /* TRUE if we are presently parsing a declarator, after the
1376     direct-declarator.  */
1377  bool in_declarator_p;
1378
1379  /* TRUE if we are presently parsing a template-argument-list.  */
1380  bool in_template_argument_list_p;
1381
1382  /* Set to IN_ITERATION_STMT if parsing an iteration-statement,
1383     to IN_OMP_BLOCK if parsing OpenMP structured block and
1384     IN_OMP_FOR if parsing OpenMP loop.  If parsing a switch statement,
1385     this is bitwise ORed with IN_SWITCH_STMT, unless parsing an
1386     iteration-statement, OpenMP block or loop within that switch.  */
1387#define IN_SWITCH_STMT		1
1388#define IN_ITERATION_STMT	2
1389#define IN_OMP_BLOCK		4
1390#define IN_OMP_FOR		8
1391  unsigned char in_statement;
1392
1393  /* TRUE if we are presently parsing the body of a switch statement.
1394     Note that this doesn't quite overlap with in_statement above.
1395     The difference relates to giving the right sets of error messages:
1396     "case not in switch" vs "break statement used with OpenMP...".  */
1397  bool in_switch_statement_p;
1398
1399  /* TRUE if we are parsing a type-id in an expression context.  In
1400     such a situation, both "type (expr)" and "type (type)" are valid
1401     alternatives.  */
1402  bool in_type_id_in_expr_p;
1403
1404  /* TRUE if we are currently in a header file where declarations are
1405     implicitly extern "C".  */
1406  bool implicit_extern_c;
1407
1408  /* TRUE if strings in expressions should be translated to the execution
1409     character set.  */
1410  bool translate_strings_p;
1411
1412  /* TRUE if we are presently parsing the body of a function, but not
1413     a local class.  */
1414  bool in_function_body;
1415
1416  /* If non-NULL, then we are parsing a construct where new type
1417     definitions are not permitted.  The string stored here will be
1418     issued as an error message if a type is defined.  */
1419  const char *type_definition_forbidden_message;
1420
1421  /* A list of lists. The outer list is a stack, used for member
1422     functions of local classes. At each level there are two sub-list,
1423     one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1424     sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1425     TREE_VALUE's. The functions are chained in reverse declaration
1426     order.
1427
1428     The TREE_PURPOSE sublist contains those functions with default
1429     arguments that need post processing, and the TREE_VALUE sublist
1430     contains those functions with definitions that need post
1431     processing.
1432
1433     These lists can only be processed once the outermost class being
1434     defined is complete.  */
1435  tree unparsed_functions_queues;
1436
1437  /* The number of classes whose definitions are currently in
1438     progress.  */
1439  unsigned num_classes_being_defined;
1440
1441  /* The number of template parameter lists that apply directly to the
1442     current declaration.  */
1443  unsigned num_template_parameter_lists;
1444} cp_parser;
1445
1446/* Prototypes.  */
1447
1448/* Constructors and destructors.  */
1449
1450static cp_parser *cp_parser_new
1451  (void);
1452
1453/* Routines to parse various constructs.
1454
1455   Those that return `tree' will return the error_mark_node (rather
1456   than NULL_TREE) if a parse error occurs, unless otherwise noted.
1457   Sometimes, they will return an ordinary node if error-recovery was
1458   attempted, even though a parse error occurred.  So, to check
1459   whether or not a parse error occurred, you should always use
1460   cp_parser_error_occurred.  If the construct is optional (indicated
1461   either by an `_opt' in the name of the function that does the
1462   parsing or via a FLAGS parameter), then NULL_TREE is returned if
1463   the construct is not present.  */
1464
1465/* Lexical conventions [gram.lex]  */
1466
1467static tree cp_parser_identifier
1468  (cp_parser *);
1469static tree cp_parser_string_literal
1470  (cp_parser *, bool, bool);
1471
1472/* Basic concepts [gram.basic]  */
1473
1474static bool cp_parser_translation_unit
1475  (cp_parser *);
1476
1477/* Expressions [gram.expr]  */
1478
1479static tree cp_parser_primary_expression
1480  (cp_parser *, bool, bool, bool, cp_id_kind *);
1481static tree cp_parser_id_expression
1482  (cp_parser *, bool, bool, bool *, bool, bool);
1483static tree cp_parser_unqualified_id
1484  (cp_parser *, bool, bool, bool, bool);
1485static tree cp_parser_nested_name_specifier_opt
1486  (cp_parser *, bool, bool, bool, bool);
1487static tree cp_parser_nested_name_specifier
1488  (cp_parser *, bool, bool, bool, bool);
1489static tree cp_parser_class_or_namespace_name
1490  (cp_parser *, bool, bool, bool, bool, bool);
1491static tree cp_parser_postfix_expression
1492  (cp_parser *, bool, bool);
1493static tree cp_parser_postfix_open_square_expression
1494  (cp_parser *, tree, bool);
1495static tree cp_parser_postfix_dot_deref_expression
1496  (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *);
1497static tree cp_parser_parenthesized_expression_list
1498  (cp_parser *, bool, bool, bool *);
1499static void cp_parser_pseudo_destructor_name
1500  (cp_parser *, tree *, tree *);
1501static tree cp_parser_unary_expression
1502  (cp_parser *, bool, bool);
1503static enum tree_code cp_parser_unary_operator
1504  (cp_token *);
1505static tree cp_parser_new_expression
1506  (cp_parser *);
1507static tree cp_parser_new_placement
1508  (cp_parser *);
1509static tree cp_parser_new_type_id
1510  (cp_parser *, tree *);
1511static cp_declarator *cp_parser_new_declarator_opt
1512  (cp_parser *);
1513static cp_declarator *cp_parser_direct_new_declarator
1514  (cp_parser *);
1515static tree cp_parser_new_initializer
1516  (cp_parser *);
1517static tree cp_parser_delete_expression
1518  (cp_parser *);
1519static tree cp_parser_cast_expression
1520  (cp_parser *, bool, bool);
1521static tree cp_parser_binary_expression
1522  (cp_parser *, bool);
1523static tree cp_parser_question_colon_clause
1524  (cp_parser *, tree);
1525static tree cp_parser_assignment_expression
1526  (cp_parser *, bool);
1527static enum tree_code cp_parser_assignment_operator_opt
1528  (cp_parser *);
1529static tree cp_parser_expression
1530  (cp_parser *, bool);
1531static tree cp_parser_constant_expression
1532  (cp_parser *, bool, bool *);
1533static tree cp_parser_builtin_offsetof
1534  (cp_parser *);
1535
1536/* Statements [gram.stmt.stmt]  */
1537
1538static void cp_parser_statement
1539  (cp_parser *, tree, bool);
1540static void cp_parser_label_for_labeled_statement
1541  (cp_parser *);
1542static tree cp_parser_expression_statement
1543  (cp_parser *, tree);
1544static tree cp_parser_compound_statement
1545  (cp_parser *, tree, bool);
1546static void cp_parser_statement_seq_opt
1547  (cp_parser *, tree);
1548static tree cp_parser_selection_statement
1549  (cp_parser *);
1550static tree cp_parser_condition
1551  (cp_parser *);
1552static tree cp_parser_iteration_statement
1553  (cp_parser *);
1554static void cp_parser_for_init_statement
1555  (cp_parser *);
1556static tree cp_parser_jump_statement
1557  (cp_parser *);
1558static void cp_parser_declaration_statement
1559  (cp_parser *);
1560
1561static tree cp_parser_implicitly_scoped_statement
1562  (cp_parser *);
1563static void cp_parser_already_scoped_statement
1564  (cp_parser *);
1565
1566/* Declarations [gram.dcl.dcl] */
1567
1568static void cp_parser_declaration_seq_opt
1569  (cp_parser *);
1570static void cp_parser_declaration
1571  (cp_parser *);
1572static void cp_parser_block_declaration
1573  (cp_parser *, bool);
1574static void cp_parser_simple_declaration
1575  (cp_parser *, bool);
1576static void cp_parser_decl_specifier_seq
1577  (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1578static tree cp_parser_storage_class_specifier_opt
1579  (cp_parser *);
1580static tree cp_parser_function_specifier_opt
1581  (cp_parser *, cp_decl_specifier_seq *);
1582static tree cp_parser_type_specifier
1583  (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1584   int *, bool *);
1585static tree cp_parser_simple_type_specifier
1586  (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1587static tree cp_parser_type_name
1588  (cp_parser *);
1589static tree cp_parser_elaborated_type_specifier
1590  (cp_parser *, bool, bool);
1591static tree cp_parser_enum_specifier
1592  (cp_parser *);
1593static void cp_parser_enumerator_list
1594  (cp_parser *, tree);
1595static void cp_parser_enumerator_definition
1596  (cp_parser *, tree);
1597static tree cp_parser_namespace_name
1598  (cp_parser *);
1599static void cp_parser_namespace_definition
1600  (cp_parser *);
1601static void cp_parser_namespace_body
1602  (cp_parser *);
1603static tree cp_parser_qualified_namespace_specifier
1604  (cp_parser *);
1605static void cp_parser_namespace_alias_definition
1606  (cp_parser *);
1607static bool cp_parser_using_declaration
1608  (cp_parser *, bool);
1609static void cp_parser_using_directive
1610  (cp_parser *);
1611static void cp_parser_asm_definition
1612  (cp_parser *);
1613static void cp_parser_linkage_specification
1614  (cp_parser *);
1615
1616/* Declarators [gram.dcl.decl] */
1617
1618static tree cp_parser_init_declarator
1619  (cp_parser *, cp_decl_specifier_seq *, VEC (deferred_access_check,gc)*, bool, bool, int, bool *);
1620static cp_declarator *cp_parser_declarator
1621  (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1622static cp_declarator *cp_parser_direct_declarator
1623  (cp_parser *, cp_parser_declarator_kind, int *, bool);
1624static enum tree_code cp_parser_ptr_operator
1625  (cp_parser *, tree *, cp_cv_quals *);
1626static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1627  (cp_parser *);
1628static tree cp_parser_declarator_id
1629  (cp_parser *, bool);
1630static tree cp_parser_type_id
1631  (cp_parser *);
1632static void cp_parser_type_specifier_seq
1633  (cp_parser *, bool, cp_decl_specifier_seq *);
1634static cp_parameter_declarator *cp_parser_parameter_declaration_clause
1635  (cp_parser *);
1636static cp_parameter_declarator *cp_parser_parameter_declaration_list
1637  (cp_parser *, bool *);
1638static cp_parameter_declarator *cp_parser_parameter_declaration
1639  (cp_parser *, bool, bool *);
1640static void cp_parser_function_body
1641  (cp_parser *);
1642static tree cp_parser_initializer
1643  (cp_parser *, bool *, bool *);
1644static tree cp_parser_initializer_clause
1645  (cp_parser *, bool *);
1646static VEC(constructor_elt,gc) *cp_parser_initializer_list
1647  (cp_parser *, bool *);
1648
1649static bool cp_parser_ctor_initializer_opt_and_function_body
1650  (cp_parser *);
1651
1652/* Classes [gram.class] */
1653
1654static tree cp_parser_class_name
1655  (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
1656static tree cp_parser_class_specifier
1657  (cp_parser *);
1658static tree cp_parser_class_head
1659  (cp_parser *, bool *, tree *, tree *);
1660static enum tag_types cp_parser_class_key
1661  (cp_parser *);
1662static void cp_parser_member_specification_opt
1663  (cp_parser *);
1664static void cp_parser_member_declaration
1665  (cp_parser *);
1666static tree cp_parser_pure_specifier
1667  (cp_parser *);
1668static tree cp_parser_constant_initializer
1669  (cp_parser *);
1670
1671/* Derived classes [gram.class.derived] */
1672
1673static tree cp_parser_base_clause
1674  (cp_parser *);
1675static tree cp_parser_base_specifier
1676  (cp_parser *);
1677
1678/* Special member functions [gram.special] */
1679
1680static tree cp_parser_conversion_function_id
1681  (cp_parser *);
1682static tree cp_parser_conversion_type_id
1683  (cp_parser *);
1684static cp_declarator *cp_parser_conversion_declarator_opt
1685  (cp_parser *);
1686static bool cp_parser_ctor_initializer_opt
1687  (cp_parser *);
1688static void cp_parser_mem_initializer_list
1689  (cp_parser *);
1690static tree cp_parser_mem_initializer
1691  (cp_parser *);
1692static tree cp_parser_mem_initializer_id
1693  (cp_parser *);
1694
1695/* Overloading [gram.over] */
1696
1697static tree cp_parser_operator_function_id
1698  (cp_parser *);
1699static tree cp_parser_operator
1700  (cp_parser *);
1701
1702/* Templates [gram.temp] */
1703
1704static void cp_parser_template_declaration
1705  (cp_parser *, bool);
1706static tree cp_parser_template_parameter_list
1707  (cp_parser *);
1708static tree cp_parser_template_parameter
1709  (cp_parser *, bool *);
1710static tree cp_parser_type_parameter
1711  (cp_parser *);
1712static tree cp_parser_template_id
1713  (cp_parser *, bool, bool, bool);
1714static tree cp_parser_template_name
1715  (cp_parser *, bool, bool, bool, bool *);
1716static tree cp_parser_template_argument_list
1717  (cp_parser *);
1718static tree cp_parser_template_argument
1719  (cp_parser *);
1720static void cp_parser_explicit_instantiation
1721  (cp_parser *);
1722static void cp_parser_explicit_specialization
1723  (cp_parser *);
1724
1725/* Exception handling [gram.exception] */
1726
1727static tree cp_parser_try_block
1728  (cp_parser *);
1729static bool cp_parser_function_try_block
1730  (cp_parser *);
1731static void cp_parser_handler_seq
1732  (cp_parser *);
1733static void cp_parser_handler
1734  (cp_parser *);
1735static tree cp_parser_exception_declaration
1736  (cp_parser *);
1737static tree cp_parser_throw_expression
1738  (cp_parser *);
1739static tree cp_parser_exception_specification_opt
1740  (cp_parser *);
1741static tree cp_parser_type_id_list
1742  (cp_parser *);
1743
1744/* GNU Extensions */
1745
1746static tree cp_parser_asm_specification_opt
1747  (cp_parser *);
1748static tree cp_parser_asm_operand_list
1749  (cp_parser *);
1750static tree cp_parser_asm_clobber_list
1751  (cp_parser *);
1752static tree cp_parser_attributes_opt
1753  (cp_parser *);
1754static tree cp_parser_attribute_list
1755  (cp_parser *);
1756static bool cp_parser_extension_opt
1757  (cp_parser *, int *);
1758static void cp_parser_label_declaration
1759  (cp_parser *);
1760
1761enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1762static bool cp_parser_pragma
1763  (cp_parser *, enum pragma_context);
1764
1765/* Objective-C++ Productions */
1766
1767static tree cp_parser_objc_message_receiver
1768  (cp_parser *);
1769static tree cp_parser_objc_message_args
1770  (cp_parser *);
1771static tree cp_parser_objc_message_expression
1772  (cp_parser *);
1773static tree cp_parser_objc_encode_expression
1774  (cp_parser *);
1775static tree cp_parser_objc_defs_expression
1776  (cp_parser *);
1777static tree cp_parser_objc_protocol_expression
1778  (cp_parser *);
1779static tree cp_parser_objc_selector_expression
1780  (cp_parser *);
1781static tree cp_parser_objc_expression
1782  (cp_parser *);
1783static bool cp_parser_objc_selector_p
1784  (enum cpp_ttype);
1785static tree cp_parser_objc_selector
1786  (cp_parser *);
1787static tree cp_parser_objc_protocol_refs_opt
1788  (cp_parser *);
1789static void cp_parser_objc_declaration
1790  (cp_parser *);
1791static tree cp_parser_objc_statement
1792  (cp_parser *);
1793
1794/* Utility Routines */
1795
1796static tree cp_parser_lookup_name
1797  (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *);
1798static tree cp_parser_lookup_name_simple
1799  (cp_parser *, tree);
1800static tree cp_parser_maybe_treat_template_as_class
1801  (tree, bool);
1802static bool cp_parser_check_declarator_template_parameters
1803  (cp_parser *, cp_declarator *);
1804static bool cp_parser_check_template_parameters
1805  (cp_parser *, unsigned);
1806static tree cp_parser_simple_cast_expression
1807  (cp_parser *);
1808static tree cp_parser_global_scope_opt
1809  (cp_parser *, bool);
1810static bool cp_parser_constructor_declarator_p
1811  (cp_parser *, bool);
1812static tree cp_parser_function_definition_from_specifiers_and_declarator
1813  (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1814static tree cp_parser_function_definition_after_declarator
1815  (cp_parser *, bool);
1816static void cp_parser_template_declaration_after_export
1817  (cp_parser *, bool);
1818static void cp_parser_perform_template_parameter_access_checks
1819  (VEC (deferred_access_check,gc)*);
1820static tree cp_parser_single_declaration
1821  (cp_parser *, VEC (deferred_access_check,gc)*, bool, bool *);
1822static tree cp_parser_functional_cast
1823  (cp_parser *, tree);
1824static tree cp_parser_save_member_function_body
1825  (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1826static tree cp_parser_enclosed_template_argument_list
1827  (cp_parser *);
1828static void cp_parser_save_default_args
1829  (cp_parser *, tree);
1830static void cp_parser_late_parsing_for_member
1831  (cp_parser *, tree);
1832static void cp_parser_late_parsing_default_args
1833  (cp_parser *, tree);
1834static tree cp_parser_sizeof_operand
1835  (cp_parser *, enum rid);
1836static bool cp_parser_declares_only_class_p
1837  (cp_parser *);
1838static void cp_parser_set_storage_class
1839  (cp_parser *, cp_decl_specifier_seq *, enum rid);
1840static void cp_parser_set_decl_spec_type
1841  (cp_decl_specifier_seq *, tree, bool);
1842static bool cp_parser_friend_p
1843  (const cp_decl_specifier_seq *);
1844static cp_token *cp_parser_require
1845  (cp_parser *, enum cpp_ttype, const char *);
1846static cp_token *cp_parser_require_keyword
1847  (cp_parser *, enum rid, const char *);
1848static bool cp_parser_token_starts_function_definition_p
1849  (cp_token *);
1850static bool cp_parser_next_token_starts_class_definition_p
1851  (cp_parser *);
1852static bool cp_parser_next_token_ends_template_argument_p
1853  (cp_parser *);
1854static bool cp_parser_nth_token_starts_template_argument_list_p
1855  (cp_parser *, size_t);
1856static enum tag_types cp_parser_token_is_class_key
1857  (cp_token *);
1858static void cp_parser_check_class_key
1859  (enum tag_types, tree type);
1860static void cp_parser_check_access_in_redeclaration
1861  (tree type);
1862static bool cp_parser_optional_template_keyword
1863  (cp_parser *);
1864static void cp_parser_pre_parsed_nested_name_specifier
1865  (cp_parser *);
1866static void cp_parser_cache_group
1867  (cp_parser *, enum cpp_ttype, unsigned);
1868static void cp_parser_parse_tentatively
1869  (cp_parser *);
1870static void cp_parser_commit_to_tentative_parse
1871  (cp_parser *);
1872static void cp_parser_abort_tentative_parse
1873  (cp_parser *);
1874static bool cp_parser_parse_definitely
1875  (cp_parser *);
1876static inline bool cp_parser_parsing_tentatively
1877  (cp_parser *);
1878static bool cp_parser_uncommitted_to_tentative_parse_p
1879  (cp_parser *);
1880static void cp_parser_error
1881  (cp_parser *, const char *);
1882static void cp_parser_name_lookup_error
1883  (cp_parser *, tree, tree, const char *);
1884static bool cp_parser_simulate_error
1885  (cp_parser *);
1886static bool cp_parser_check_type_definition
1887  (cp_parser *);
1888static void cp_parser_check_for_definition_in_return_type
1889  (cp_declarator *, tree);
1890static void cp_parser_check_for_invalid_template_id
1891  (cp_parser *, tree);
1892static bool cp_parser_non_integral_constant_expression
1893  (cp_parser *, const char *);
1894static void cp_parser_diagnose_invalid_type_name
1895  (cp_parser *, tree, tree);
1896static bool cp_parser_parse_and_diagnose_invalid_type_name
1897  (cp_parser *);
1898static int cp_parser_skip_to_closing_parenthesis
1899  (cp_parser *, bool, bool, bool);
1900static void cp_parser_skip_to_end_of_statement
1901  (cp_parser *);
1902static void cp_parser_consume_semicolon_at_end_of_statement
1903  (cp_parser *);
1904static void cp_parser_skip_to_end_of_block_or_statement
1905  (cp_parser *);
1906static void cp_parser_skip_to_closing_brace
1907  (cp_parser *);
1908static void cp_parser_skip_to_end_of_template_parameter_list
1909  (cp_parser *);
1910static void cp_parser_skip_to_pragma_eol
1911  (cp_parser*, cp_token *);
1912static bool cp_parser_error_occurred
1913  (cp_parser *);
1914static bool cp_parser_allow_gnu_extensions_p
1915  (cp_parser *);
1916static bool cp_parser_is_string_literal
1917  (cp_token *);
1918static bool cp_parser_is_keyword
1919  (cp_token *, enum rid);
1920static tree cp_parser_make_typename_type
1921  (cp_parser *, tree, tree);
1922
1923/* Returns nonzero if we are parsing tentatively.  */
1924
1925static inline bool
1926cp_parser_parsing_tentatively (cp_parser* parser)
1927{
1928  return parser->context->next != NULL;
1929}
1930
1931/* Returns nonzero if TOKEN is a string literal.  */
1932
1933static bool
1934cp_parser_is_string_literal (cp_token* token)
1935{
1936  return (token->type == CPP_STRING || token->type == CPP_WSTRING);
1937}
1938
1939/* Returns nonzero if TOKEN is the indicated KEYWORD.  */
1940
1941static bool
1942cp_parser_is_keyword (cp_token* token, enum rid keyword)
1943{
1944  return token->keyword == keyword;
1945}
1946
1947/* If not parsing tentatively, issue a diagnostic of the form
1948      FILE:LINE: MESSAGE before TOKEN
1949   where TOKEN is the next token in the input stream.  MESSAGE
1950   (specified by the caller) is usually of the form "expected
1951   OTHER-TOKEN".  */
1952
1953static void
1954cp_parser_error (cp_parser* parser, const char* message)
1955{
1956  if (!cp_parser_simulate_error (parser))
1957    {
1958      cp_token *token = cp_lexer_peek_token (parser->lexer);
1959      /* This diagnostic makes more sense if it is tagged to the line
1960	 of the token we just peeked at.  */
1961      cp_lexer_set_source_position_from_token (token);
1962
1963      if (token->type == CPP_PRAGMA)
1964	{
1965	  error ("%<#pragma%> is not allowed here");
1966	  cp_parser_skip_to_pragma_eol (parser, token);
1967	  return;
1968	}
1969
1970      c_parse_error (message,
1971		     /* Because c_parser_error does not understand
1972			CPP_KEYWORD, keywords are treated like
1973			identifiers.  */
1974		     (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
1975		     token->u.value);
1976    }
1977}
1978
1979/* Issue an error about name-lookup failing.  NAME is the
1980   IDENTIFIER_NODE DECL is the result of
1981   the lookup (as returned from cp_parser_lookup_name).  DESIRED is
1982   the thing that we hoped to find.  */
1983
1984static void
1985cp_parser_name_lookup_error (cp_parser* parser,
1986			     tree name,
1987			     tree decl,
1988			     const char* desired)
1989{
1990  /* If name lookup completely failed, tell the user that NAME was not
1991     declared.  */
1992  if (decl == error_mark_node)
1993    {
1994      if (parser->scope && parser->scope != global_namespace)
1995	error ("%<%D::%D%> has not been declared",
1996	       parser->scope, name);
1997      else if (parser->scope == global_namespace)
1998	error ("%<::%D%> has not been declared", name);
1999      else if (parser->object_scope
2000	       && !CLASS_TYPE_P (parser->object_scope))
2001	error ("request for member %qD in non-class type %qT",
2002	       name, parser->object_scope);
2003      else if (parser->object_scope)
2004	error ("%<%T::%D%> has not been declared",
2005	       parser->object_scope, name);
2006      else
2007	error ("%qD has not been declared", name);
2008    }
2009  else if (parser->scope && parser->scope != global_namespace)
2010    error ("%<%D::%D%> %s", parser->scope, name, desired);
2011  else if (parser->scope == global_namespace)
2012    error ("%<::%D%> %s", name, desired);
2013  else
2014    error ("%qD %s", name, desired);
2015}
2016
2017/* If we are parsing tentatively, remember that an error has occurred
2018   during this tentative parse.  Returns true if the error was
2019   simulated; false if a message should be issued by the caller.  */
2020
2021static bool
2022cp_parser_simulate_error (cp_parser* parser)
2023{
2024  if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2025    {
2026      parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2027      return true;
2028    }
2029  return false;
2030}
2031
2032/* Check for repeated decl-specifiers.  */
2033
2034static void
2035cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs)
2036{
2037  cp_decl_spec ds;
2038
2039  for (ds = ds_first; ds != ds_last; ++ds)
2040    {
2041      unsigned count = decl_specs->specs[(int)ds];
2042      if (count < 2)
2043	continue;
2044      /* The "long" specifier is a special case because of "long long".  */
2045      if (ds == ds_long)
2046	{
2047	  if (count > 2)
2048	    error ("%<long long long%> is too long for GCC");
2049	  else if (pedantic && !in_system_header && warn_long_long)
2050	    pedwarn ("ISO C++ does not support %<long long%>");
2051	}
2052      else if (count > 1)
2053	{
2054	  static const char *const decl_spec_names[] = {
2055	    "signed",
2056	    "unsigned",
2057	    "short",
2058	    "long",
2059	    "const",
2060	    "volatile",
2061	    "restrict",
2062	    "inline",
2063	    "virtual",
2064	    "explicit",
2065	    "friend",
2066	    "typedef",
2067	    "__complex",
2068	    "__thread"
2069	  };
2070	  error ("duplicate %qs", decl_spec_names[(int)ds]);
2071	}
2072    }
2073}
2074
2075/* This function is called when a type is defined.  If type
2076   definitions are forbidden at this point, an error message is
2077   issued.  */
2078
2079static bool
2080cp_parser_check_type_definition (cp_parser* parser)
2081{
2082  /* If types are forbidden here, issue a message.  */
2083  if (parser->type_definition_forbidden_message)
2084    {
2085      /* Use `%s' to print the string in case there are any escape
2086	 characters in the message.  */
2087      error ("%s", parser->type_definition_forbidden_message);
2088      return false;
2089    }
2090  return true;
2091}
2092
2093/* This function is called when the DECLARATOR is processed.  The TYPE
2094   was a type defined in the decl-specifiers.  If it is invalid to
2095   define a type in the decl-specifiers for DECLARATOR, an error is
2096   issued.  */
2097
2098static void
2099cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2100					       tree type)
2101{
2102  /* [dcl.fct] forbids type definitions in return types.
2103     Unfortunately, it's not easy to know whether or not we are
2104     processing a return type until after the fact.  */
2105  while (declarator
2106	 && (declarator->kind == cdk_pointer
2107	     || declarator->kind == cdk_reference
2108	     || declarator->kind == cdk_ptrmem))
2109    declarator = declarator->declarator;
2110  if (declarator
2111      && declarator->kind == cdk_function)
2112    {
2113      error ("new types may not be defined in a return type");
2114      inform ("(perhaps a semicolon is missing after the definition of %qT)",
2115	      type);
2116    }
2117}
2118
2119/* A type-specifier (TYPE) has been parsed which cannot be followed by
2120   "<" in any valid C++ program.  If the next token is indeed "<",
2121   issue a message warning the user about what appears to be an
2122   invalid attempt to form a template-id.  */
2123
2124static void
2125cp_parser_check_for_invalid_template_id (cp_parser* parser,
2126					 tree type)
2127{
2128  cp_token_position start = 0;
2129
2130  if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2131    {
2132      if (TYPE_P (type))
2133	error ("%qT is not a template", type);
2134      else if (TREE_CODE (type) == IDENTIFIER_NODE)
2135	error ("%qE is not a template", type);
2136      else
2137	error ("invalid template-id");
2138      /* Remember the location of the invalid "<".  */
2139      if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2140	start = cp_lexer_token_position (parser->lexer, true);
2141      /* Consume the "<".  */
2142      cp_lexer_consume_token (parser->lexer);
2143      /* Parse the template arguments.  */
2144      cp_parser_enclosed_template_argument_list (parser);
2145      /* Permanently remove the invalid template arguments so that
2146	 this error message is not issued again.  */
2147      if (start)
2148	cp_lexer_purge_tokens_after (parser->lexer, start);
2149    }
2150}
2151
2152/* If parsing an integral constant-expression, issue an error message
2153   about the fact that THING appeared and return true.  Otherwise,
2154   return false.  In either case, set
2155   PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2156
2157static bool
2158cp_parser_non_integral_constant_expression (cp_parser  *parser,
2159					    const char *thing)
2160{
2161  parser->non_integral_constant_expression_p = true;
2162  if (parser->integral_constant_expression_p)
2163    {
2164      if (!parser->allow_non_integral_constant_expression_p)
2165	{
2166	  error ("%s cannot appear in a constant-expression", thing);
2167	  return true;
2168	}
2169    }
2170  return false;
2171}
2172
2173/* Emit a diagnostic for an invalid type name.  SCOPE is the
2174   qualifying scope (or NULL, if none) for ID.  This function commits
2175   to the current active tentative parse, if any.  (Otherwise, the
2176   problematic construct might be encountered again later, resulting
2177   in duplicate error messages.)  */
2178
2179static void
2180cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
2181{
2182  tree decl, old_scope;
2183  /* Try to lookup the identifier.  */
2184  old_scope = parser->scope;
2185  parser->scope = scope;
2186  decl = cp_parser_lookup_name_simple (parser, id);
2187  parser->scope = old_scope;
2188  /* If the lookup found a template-name, it means that the user forgot
2189  to specify an argument list. Emit a useful error message.  */
2190  if (TREE_CODE (decl) == TEMPLATE_DECL)
2191    error ("invalid use of template-name %qE without an argument list", decl);
2192  else if (TREE_CODE (id) == BIT_NOT_EXPR)
2193    error ("invalid use of destructor %qD as a type", id);
2194  else if (TREE_CODE (decl) == TYPE_DECL)
2195    /* Something like 'unsigned A a;'  */
2196    error ("invalid combination of multiple type-specifiers");
2197  else if (!parser->scope)
2198    {
2199      /* Issue an error message.  */
2200      error ("%qE does not name a type", id);
2201      /* If we're in a template class, it's possible that the user was
2202	 referring to a type from a base class.  For example:
2203
2204	   template <typename T> struct A { typedef T X; };
2205	   template <typename T> struct B : public A<T> { X x; };
2206
2207	 The user should have said "typename A<T>::X".  */
2208      if (processing_template_decl && current_class_type
2209	  && TYPE_BINFO (current_class_type))
2210	{
2211	  tree b;
2212
2213	  for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2214	       b;
2215	       b = TREE_CHAIN (b))
2216	    {
2217	      tree base_type = BINFO_TYPE (b);
2218	      if (CLASS_TYPE_P (base_type)
2219		  && dependent_type_p (base_type))
2220		{
2221		  tree field;
2222		  /* Go from a particular instantiation of the
2223		     template (which will have an empty TYPE_FIELDs),
2224		     to the main version.  */
2225		  base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2226		  for (field = TYPE_FIELDS (base_type);
2227		       field;
2228		       field = TREE_CHAIN (field))
2229		    if (TREE_CODE (field) == TYPE_DECL
2230			&& DECL_NAME (field) == id)
2231		      {
2232			inform ("(perhaps %<typename %T::%E%> was intended)",
2233				BINFO_TYPE (b), id);
2234			break;
2235		      }
2236		  if (field)
2237		    break;
2238		}
2239	    }
2240	}
2241    }
2242  /* Here we diagnose qualified-ids where the scope is actually correct,
2243     but the identifier does not resolve to a valid type name.  */
2244  else if (parser->scope != error_mark_node)
2245    {
2246      if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2247	error ("%qE in namespace %qE does not name a type",
2248	       id, parser->scope);
2249      else if (TYPE_P (parser->scope))
2250	error ("%qE in class %qT does not name a type", id, parser->scope);
2251      else
2252	gcc_unreachable ();
2253    }
2254  cp_parser_commit_to_tentative_parse (parser);
2255}
2256
2257/* Check for a common situation where a type-name should be present,
2258   but is not, and issue a sensible error message.  Returns true if an
2259   invalid type-name was detected.
2260
2261   The situation handled by this function are variable declarations of the
2262   form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2263   Usually, `ID' should name a type, but if we got here it means that it
2264   does not. We try to emit the best possible error message depending on
2265   how exactly the id-expression looks like.  */
2266
2267static bool
2268cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2269{
2270  tree id;
2271
2272  cp_parser_parse_tentatively (parser);
2273  id = cp_parser_id_expression (parser,
2274				/*template_keyword_p=*/false,
2275				/*check_dependency_p=*/true,
2276				/*template_p=*/NULL,
2277				/*declarator_p=*/true,
2278				/*optional_p=*/false);
2279  /* After the id-expression, there should be a plain identifier,
2280     otherwise this is not a simple variable declaration. Also, if
2281     the scope is dependent, we cannot do much.  */
2282  if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2283      || (parser->scope && TYPE_P (parser->scope)
2284	  && dependent_type_p (parser->scope))
2285      || TREE_CODE (id) == TYPE_DECL)
2286    {
2287      cp_parser_abort_tentative_parse (parser);
2288      return false;
2289    }
2290  if (!cp_parser_parse_definitely (parser))
2291    return false;
2292
2293  /* Emit a diagnostic for the invalid type.  */
2294  cp_parser_diagnose_invalid_type_name (parser, parser->scope, id);
2295  /* Skip to the end of the declaration; there's no point in
2296     trying to process it.  */
2297  cp_parser_skip_to_end_of_block_or_statement (parser);
2298  return true;
2299}
2300
2301/* Consume tokens up to, and including, the next non-nested closing `)'.
2302   Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2303   are doing error recovery. Returns -1 if OR_COMMA is true and we
2304   found an unnested comma.  */
2305
2306static int
2307cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2308				       bool recovering,
2309				       bool or_comma,
2310				       bool consume_paren)
2311{
2312  unsigned paren_depth = 0;
2313  unsigned brace_depth = 0;
2314
2315  if (recovering && !or_comma
2316      && cp_parser_uncommitted_to_tentative_parse_p (parser))
2317    return 0;
2318
2319  while (true)
2320    {
2321      cp_token * token = cp_lexer_peek_token (parser->lexer);
2322
2323      switch (token->type)
2324	{
2325	case CPP_EOF:
2326	case CPP_PRAGMA_EOL:
2327	  /* If we've run out of tokens, then there is no closing `)'.  */
2328	  return 0;
2329
2330	case CPP_SEMICOLON:
2331	  /* This matches the processing in skip_to_end_of_statement.  */
2332	  if (!brace_depth)
2333	    return 0;
2334	  break;
2335
2336	case CPP_OPEN_BRACE:
2337	  ++brace_depth;
2338	  break;
2339	case CPP_CLOSE_BRACE:
2340	  if (!brace_depth--)
2341	    return 0;
2342	  break;
2343
2344	case CPP_COMMA:
2345	  if (recovering && or_comma && !brace_depth && !paren_depth)
2346	    return -1;
2347	  break;
2348
2349	case CPP_OPEN_PAREN:
2350	  if (!brace_depth)
2351	    ++paren_depth;
2352	  break;
2353
2354	case CPP_CLOSE_PAREN:
2355	  if (!brace_depth && !paren_depth--)
2356	    {
2357	      if (consume_paren)
2358		cp_lexer_consume_token (parser->lexer);
2359	      return 1;
2360	    }
2361	  break;
2362
2363	default:
2364	  break;
2365	}
2366
2367      /* Consume the token.  */
2368      cp_lexer_consume_token (parser->lexer);
2369    }
2370}
2371
2372/* Consume tokens until we reach the end of the current statement.
2373   Normally, that will be just before consuming a `;'.  However, if a
2374   non-nested `}' comes first, then we stop before consuming that.  */
2375
2376static void
2377cp_parser_skip_to_end_of_statement (cp_parser* parser)
2378{
2379  unsigned nesting_depth = 0;
2380
2381  while (true)
2382    {
2383      cp_token *token = cp_lexer_peek_token (parser->lexer);
2384
2385      switch (token->type)
2386	{
2387	case CPP_EOF:
2388	case CPP_PRAGMA_EOL:
2389	  /* If we've run out of tokens, stop.  */
2390	  return;
2391
2392	case CPP_SEMICOLON:
2393	  /* If the next token is a `;', we have reached the end of the
2394	     statement.  */
2395	  if (!nesting_depth)
2396	    return;
2397	  break;
2398
2399	case CPP_CLOSE_BRACE:
2400	  /* If this is a non-nested '}', stop before consuming it.
2401	     That way, when confronted with something like:
2402
2403	       { 3 + }
2404
2405	     we stop before consuming the closing '}', even though we
2406	     have not yet reached a `;'.  */
2407	  if (nesting_depth == 0)
2408	    return;
2409
2410	  /* If it is the closing '}' for a block that we have
2411	     scanned, stop -- but only after consuming the token.
2412	     That way given:
2413
2414		void f g () { ... }
2415		typedef int I;
2416
2417	     we will stop after the body of the erroneously declared
2418	     function, but before consuming the following `typedef'
2419	     declaration.  */
2420	  if (--nesting_depth == 0)
2421	    {
2422	      cp_lexer_consume_token (parser->lexer);
2423	      return;
2424	    }
2425
2426	case CPP_OPEN_BRACE:
2427	  ++nesting_depth;
2428	  break;
2429
2430	default:
2431	  break;
2432	}
2433
2434      /* Consume the token.  */
2435      cp_lexer_consume_token (parser->lexer);
2436    }
2437}
2438
2439/* This function is called at the end of a statement or declaration.
2440   If the next token is a semicolon, it is consumed; otherwise, error
2441   recovery is attempted.  */
2442
2443static void
2444cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2445{
2446  /* Look for the trailing `;'.  */
2447  if (!cp_parser_require (parser, CPP_SEMICOLON, "`;'"))
2448    {
2449      /* If there is additional (erroneous) input, skip to the end of
2450	 the statement.  */
2451      cp_parser_skip_to_end_of_statement (parser);
2452      /* If the next token is now a `;', consume it.  */
2453      if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2454	cp_lexer_consume_token (parser->lexer);
2455    }
2456}
2457
2458/* Skip tokens until we have consumed an entire block, or until we
2459   have consumed a non-nested `;'.  */
2460
2461static void
2462cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2463{
2464  int nesting_depth = 0;
2465
2466  while (nesting_depth >= 0)
2467    {
2468      cp_token *token = cp_lexer_peek_token (parser->lexer);
2469
2470      switch (token->type)
2471	{
2472	case CPP_EOF:
2473	case CPP_PRAGMA_EOL:
2474	  /* If we've run out of tokens, stop.  */
2475	  return;
2476
2477	case CPP_SEMICOLON:
2478	  /* Stop if this is an unnested ';'. */
2479	  if (!nesting_depth)
2480	    nesting_depth = -1;
2481	  break;
2482
2483	case CPP_CLOSE_BRACE:
2484	  /* Stop if this is an unnested '}', or closes the outermost
2485	     nesting level.  */
2486	  nesting_depth--;
2487	  if (!nesting_depth)
2488	    nesting_depth = -1;
2489	  break;
2490
2491	case CPP_OPEN_BRACE:
2492	  /* Nest. */
2493	  nesting_depth++;
2494	  break;
2495
2496	default:
2497	  break;
2498	}
2499
2500      /* Consume the token.  */
2501      cp_lexer_consume_token (parser->lexer);
2502    }
2503}
2504
2505/* Skip tokens until a non-nested closing curly brace is the next
2506   token.  */
2507
2508static void
2509cp_parser_skip_to_closing_brace (cp_parser *parser)
2510{
2511  unsigned nesting_depth = 0;
2512
2513  while (true)
2514    {
2515      cp_token *token = cp_lexer_peek_token (parser->lexer);
2516
2517      switch (token->type)
2518	{
2519	case CPP_EOF:
2520	case CPP_PRAGMA_EOL:
2521	  /* If we've run out of tokens, stop.  */
2522	  return;
2523
2524	case CPP_CLOSE_BRACE:
2525	  /* If the next token is a non-nested `}', then we have reached
2526	     the end of the current block.  */
2527	  if (nesting_depth-- == 0)
2528	    return;
2529	  break;
2530
2531	case CPP_OPEN_BRACE:
2532	  /* If it the next token is a `{', then we are entering a new
2533	     block.  Consume the entire block.  */
2534	  ++nesting_depth;
2535	  break;
2536
2537	default:
2538	  break;
2539	}
2540
2541      /* Consume the token.  */
2542      cp_lexer_consume_token (parser->lexer);
2543    }
2544}
2545
2546/* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
2547   parameter is the PRAGMA token, allowing us to purge the entire pragma
2548   sequence.  */
2549
2550static void
2551cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
2552{
2553  cp_token *token;
2554
2555  parser->lexer->in_pragma = false;
2556
2557  do
2558    token = cp_lexer_consume_token (parser->lexer);
2559  while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
2560
2561  /* Ensure that the pragma is not parsed again.  */
2562  cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
2563}
2564
2565/* Require pragma end of line, resyncing with it as necessary.  The
2566   arguments are as for cp_parser_skip_to_pragma_eol.  */
2567
2568static void
2569cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
2570{
2571  parser->lexer->in_pragma = false;
2572  if (!cp_parser_require (parser, CPP_PRAGMA_EOL, "end of line"))
2573    cp_parser_skip_to_pragma_eol (parser, pragma_tok);
2574}
2575
2576/* This is a simple wrapper around make_typename_type. When the id is
2577   an unresolved identifier node, we can provide a superior diagnostic
2578   using cp_parser_diagnose_invalid_type_name.  */
2579
2580static tree
2581cp_parser_make_typename_type (cp_parser *parser, tree scope, tree id)
2582{
2583  tree result;
2584  if (TREE_CODE (id) == IDENTIFIER_NODE)
2585    {
2586      result = make_typename_type (scope, id, typename_type,
2587				   /*complain=*/tf_none);
2588      if (result == error_mark_node)
2589	cp_parser_diagnose_invalid_type_name (parser, scope, id);
2590      return result;
2591    }
2592  return make_typename_type (scope, id, typename_type, tf_error);
2593}
2594
2595
2596/* Create a new C++ parser.  */
2597
2598static cp_parser *
2599cp_parser_new (void)
2600{
2601  cp_parser *parser;
2602  cp_lexer *lexer;
2603  unsigned i;
2604
2605  /* cp_lexer_new_main is called before calling ggc_alloc because
2606     cp_lexer_new_main might load a PCH file.  */
2607  lexer = cp_lexer_new_main ();
2608
2609  /* Initialize the binops_by_token so that we can get the tree
2610     directly from the token.  */
2611  for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2612    binops_by_token[binops[i].token_type] = binops[i];
2613
2614  parser = GGC_CNEW (cp_parser);
2615  parser->lexer = lexer;
2616  parser->context = cp_parser_context_new (NULL);
2617
2618  /* For now, we always accept GNU extensions.  */
2619  parser->allow_gnu_extensions_p = 1;
2620
2621  /* The `>' token is a greater-than operator, not the end of a
2622     template-id.  */
2623  parser->greater_than_is_operator_p = true;
2624
2625  parser->default_arg_ok_p = true;
2626
2627  /* We are not parsing a constant-expression.  */
2628  parser->integral_constant_expression_p = false;
2629  parser->allow_non_integral_constant_expression_p = false;
2630  parser->non_integral_constant_expression_p = false;
2631
2632  /* Local variable names are not forbidden.  */
2633  parser->local_variables_forbidden_p = false;
2634
2635  /* We are not processing an `extern "C"' declaration.  */
2636  parser->in_unbraced_linkage_specification_p = false;
2637
2638  /* We are not processing a declarator.  */
2639  parser->in_declarator_p = false;
2640
2641  /* We are not processing a template-argument-list.  */
2642  parser->in_template_argument_list_p = false;
2643
2644  /* We are not in an iteration statement.  */
2645  parser->in_statement = 0;
2646
2647  /* We are not in a switch statement.  */
2648  parser->in_switch_statement_p = false;
2649
2650  /* We are not parsing a type-id inside an expression.  */
2651  parser->in_type_id_in_expr_p = false;
2652
2653  /* Declarations aren't implicitly extern "C".  */
2654  parser->implicit_extern_c = false;
2655
2656  /* String literals should be translated to the execution character set.  */
2657  parser->translate_strings_p = true;
2658
2659  /* We are not parsing a function body.  */
2660  parser->in_function_body = false;
2661
2662  /* The unparsed function queue is empty.  */
2663  parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE);
2664
2665  /* There are no classes being defined.  */
2666  parser->num_classes_being_defined = 0;
2667
2668  /* No template parameters apply.  */
2669  parser->num_template_parameter_lists = 0;
2670
2671  return parser;
2672}
2673
2674/* Create a cp_lexer structure which will emit the tokens in CACHE
2675   and push it onto the parser's lexer stack.  This is used for delayed
2676   parsing of in-class method bodies and default arguments, and should
2677   not be confused with tentative parsing.  */
2678static void
2679cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
2680{
2681  cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
2682  lexer->next = parser->lexer;
2683  parser->lexer = lexer;
2684
2685  /* Move the current source position to that of the first token in the
2686     new lexer.  */
2687  cp_lexer_set_source_position_from_token (lexer->next_token);
2688}
2689
2690/* Pop the top lexer off the parser stack.  This is never used for the
2691   "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
2692static void
2693cp_parser_pop_lexer (cp_parser *parser)
2694{
2695  cp_lexer *lexer = parser->lexer;
2696  parser->lexer = lexer->next;
2697  cp_lexer_destroy (lexer);
2698
2699  /* Put the current source position back where it was before this
2700     lexer was pushed.  */
2701  cp_lexer_set_source_position_from_token (parser->lexer->next_token);
2702}
2703
2704/* Lexical conventions [gram.lex]  */
2705
2706/* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
2707   identifier.  */
2708
2709static tree
2710cp_parser_identifier (cp_parser* parser)
2711{
2712  cp_token *token;
2713
2714  /* Look for the identifier.  */
2715  token = cp_parser_require (parser, CPP_NAME, "identifier");
2716  /* Return the value.  */
2717  return token ? token->u.value : error_mark_node;
2718}
2719
2720/* Parse a sequence of adjacent string constants.  Returns a
2721   TREE_STRING representing the combined, nul-terminated string
2722   constant.  If TRANSLATE is true, translate the string to the
2723   execution character set.  If WIDE_OK is true, a wide string is
2724   invalid here.
2725
2726   C++98 [lex.string] says that if a narrow string literal token is
2727   adjacent to a wide string literal token, the behavior is undefined.
2728   However, C99 6.4.5p4 says that this results in a wide string literal.
2729   We follow C99 here, for consistency with the C front end.
2730
2731   This code is largely lifted from lex_string() in c-lex.c.
2732
2733   FUTURE: ObjC++ will need to handle @-strings here.  */
2734static tree
2735cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
2736{
2737  tree value;
2738  bool wide = false;
2739  size_t count;
2740  struct obstack str_ob;
2741  cpp_string str, istr, *strs;
2742  cp_token *tok;
2743
2744  tok = cp_lexer_peek_token (parser->lexer);
2745  if (!cp_parser_is_string_literal (tok))
2746    {
2747      cp_parser_error (parser, "expected string-literal");
2748      return error_mark_node;
2749    }
2750
2751  /* Try to avoid the overhead of creating and destroying an obstack
2752     for the common case of just one string.  */
2753  if (!cp_parser_is_string_literal
2754      (cp_lexer_peek_nth_token (parser->lexer, 2)))
2755    {
2756      cp_lexer_consume_token (parser->lexer);
2757
2758      str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
2759      str.len = TREE_STRING_LENGTH (tok->u.value);
2760      count = 1;
2761      if (tok->type == CPP_WSTRING)
2762	wide = true;
2763
2764      strs = &str;
2765    }
2766  else
2767    {
2768      gcc_obstack_init (&str_ob);
2769      count = 0;
2770
2771      do
2772	{
2773	  cp_lexer_consume_token (parser->lexer);
2774	  count++;
2775	  str.text = (unsigned char *)TREE_STRING_POINTER (tok->u.value);
2776	  str.len = TREE_STRING_LENGTH (tok->u.value);
2777	  if (tok->type == CPP_WSTRING)
2778	    wide = true;
2779
2780	  obstack_grow (&str_ob, &str, sizeof (cpp_string));
2781
2782	  tok = cp_lexer_peek_token (parser->lexer);
2783	}
2784      while (cp_parser_is_string_literal (tok));
2785
2786      strs = (cpp_string *) obstack_finish (&str_ob);
2787    }
2788
2789  if (wide && !wide_ok)
2790    {
2791      cp_parser_error (parser, "a wide string is invalid in this context");
2792      wide = false;
2793    }
2794
2795  if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
2796      (parse_in, strs, count, &istr, wide))
2797    {
2798      value = build_string (istr.len, (char *)istr.text);
2799      free ((void *)istr.text);
2800
2801      TREE_TYPE (value) = wide ? wchar_array_type_node : char_array_type_node;
2802      value = fix_string_type (value);
2803    }
2804  else
2805    /* cpp_interpret_string has issued an error.  */
2806    value = error_mark_node;
2807
2808  if (count > 1)
2809    obstack_free (&str_ob, 0);
2810
2811  return value;
2812}
2813
2814
2815/* Basic concepts [gram.basic]  */
2816
2817/* Parse a translation-unit.
2818
2819   translation-unit:
2820     declaration-seq [opt]
2821
2822   Returns TRUE if all went well.  */
2823
2824static bool
2825cp_parser_translation_unit (cp_parser* parser)
2826{
2827  /* The address of the first non-permanent object on the declarator
2828     obstack.  */
2829  static void *declarator_obstack_base;
2830
2831  bool success;
2832
2833  /* Create the declarator obstack, if necessary.  */
2834  if (!cp_error_declarator)
2835    {
2836      gcc_obstack_init (&declarator_obstack);
2837      /* Create the error declarator.  */
2838      cp_error_declarator = make_declarator (cdk_error);
2839      /* Create the empty parameter list.  */
2840      no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
2841      /* Remember where the base of the declarator obstack lies.  */
2842      declarator_obstack_base = obstack_next_free (&declarator_obstack);
2843    }
2844
2845  cp_parser_declaration_seq_opt (parser);
2846
2847  /* If there are no tokens left then all went well.  */
2848  if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
2849    {
2850      /* Get rid of the token array; we don't need it any more.  */
2851      cp_lexer_destroy (parser->lexer);
2852      parser->lexer = NULL;
2853
2854      /* This file might have been a context that's implicitly extern
2855	 "C".  If so, pop the lang context.  (Only relevant for PCH.) */
2856      if (parser->implicit_extern_c)
2857	{
2858	  pop_lang_context ();
2859	  parser->implicit_extern_c = false;
2860	}
2861
2862      /* Finish up.  */
2863      finish_translation_unit ();
2864
2865      success = true;
2866    }
2867  else
2868    {
2869      cp_parser_error (parser, "expected declaration");
2870      success = false;
2871    }
2872
2873  /* Make sure the declarator obstack was fully cleaned up.  */
2874  gcc_assert (obstack_next_free (&declarator_obstack)
2875	      == declarator_obstack_base);
2876
2877  /* All went well.  */
2878  return success;
2879}
2880
2881/* Expressions [gram.expr] */
2882
2883/* Parse a primary-expression.
2884
2885   primary-expression:
2886     literal
2887     this
2888     ( expression )
2889     id-expression
2890
2891   GNU Extensions:
2892
2893   primary-expression:
2894     ( compound-statement )
2895     __builtin_va_arg ( assignment-expression , type-id )
2896     __builtin_offsetof ( type-id , offsetof-expression )
2897
2898   Objective-C++ Extension:
2899
2900   primary-expression:
2901     objc-expression
2902
2903   literal:
2904     __null
2905
2906   ADDRESS_P is true iff this expression was immediately preceded by
2907   "&" and therefore might denote a pointer-to-member.  CAST_P is true
2908   iff this expression is the target of a cast.  TEMPLATE_ARG_P is
2909   true iff this expression is a template argument.
2910
2911   Returns a representation of the expression.  Upon return, *IDK
2912   indicates what kind of id-expression (if any) was present.  */
2913
2914static tree
2915cp_parser_primary_expression (cp_parser *parser,
2916			      bool address_p,
2917			      bool cast_p,
2918			      bool template_arg_p,
2919			      cp_id_kind *idk)
2920{
2921  cp_token *token;
2922
2923  /* Assume the primary expression is not an id-expression.  */
2924  *idk = CP_ID_KIND_NONE;
2925
2926  /* Peek at the next token.  */
2927  token = cp_lexer_peek_token (parser->lexer);
2928  switch (token->type)
2929    {
2930      /* literal:
2931	   integer-literal
2932	   character-literal
2933	   floating-literal
2934	   string-literal
2935	   boolean-literal  */
2936    case CPP_CHAR:
2937    case CPP_WCHAR:
2938    case CPP_NUMBER:
2939      token = cp_lexer_consume_token (parser->lexer);
2940      /* Floating-point literals are only allowed in an integral
2941	 constant expression if they are cast to an integral or
2942	 enumeration type.  */
2943      if (TREE_CODE (token->u.value) == REAL_CST
2944	  && parser->integral_constant_expression_p
2945	  && pedantic)
2946	{
2947	  /* CAST_P will be set even in invalid code like "int(2.7 +
2948	     ...)".   Therefore, we have to check that the next token
2949	     is sure to end the cast.  */
2950	  if (cast_p)
2951	    {
2952	      cp_token *next_token;
2953
2954	      next_token = cp_lexer_peek_token (parser->lexer);
2955	      if (/* The comma at the end of an
2956		     enumerator-definition.  */
2957		  next_token->type != CPP_COMMA
2958		  /* The curly brace at the end of an enum-specifier.  */
2959		  && next_token->type != CPP_CLOSE_BRACE
2960		  /* The end of a statement.  */
2961		  && next_token->type != CPP_SEMICOLON
2962		  /* The end of the cast-expression.  */
2963		  && next_token->type != CPP_CLOSE_PAREN
2964		  /* The end of an array bound.  */
2965		  && next_token->type != CPP_CLOSE_SQUARE
2966		  /* The closing ">" in a template-argument-list.  */
2967		  && (next_token->type != CPP_GREATER
2968		      || parser->greater_than_is_operator_p))
2969		cast_p = false;
2970	    }
2971
2972	  /* If we are within a cast, then the constraint that the
2973	     cast is to an integral or enumeration type will be
2974	     checked at that point.  If we are not within a cast, then
2975	     this code is invalid.  */
2976	  if (!cast_p)
2977	    cp_parser_non_integral_constant_expression
2978	      (parser, "floating-point literal");
2979	}
2980      return token->u.value;
2981
2982    case CPP_STRING:
2983    case CPP_WSTRING:
2984      /* ??? Should wide strings be allowed when parser->translate_strings_p
2985	 is false (i.e. in attributes)?  If not, we can kill the third
2986	 argument to cp_parser_string_literal.  */
2987      return cp_parser_string_literal (parser,
2988				       parser->translate_strings_p,
2989				       true);
2990
2991    case CPP_OPEN_PAREN:
2992      {
2993	tree expr;
2994	bool saved_greater_than_is_operator_p;
2995
2996	/* Consume the `('.  */
2997	cp_lexer_consume_token (parser->lexer);
2998	/* Within a parenthesized expression, a `>' token is always
2999	   the greater-than operator.  */
3000	saved_greater_than_is_operator_p
3001	  = parser->greater_than_is_operator_p;
3002	parser->greater_than_is_operator_p = true;
3003	/* If we see `( { ' then we are looking at the beginning of
3004	   a GNU statement-expression.  */
3005	if (cp_parser_allow_gnu_extensions_p (parser)
3006	    && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
3007	  {
3008	    /* Statement-expressions are not allowed by the standard.  */
3009	    if (pedantic)
3010	      pedwarn ("ISO C++ forbids braced-groups within expressions");
3011
3012	    /* And they're not allowed outside of a function-body; you
3013	       cannot, for example, write:
3014
3015		 int i = ({ int j = 3; j + 1; });
3016
3017	       at class or namespace scope.  */
3018	    if (!parser->in_function_body)
3019	      error ("statement-expressions are allowed only inside functions");
3020	    /* Start the statement-expression.  */
3021	    expr = begin_stmt_expr ();
3022	    /* Parse the compound-statement.  */
3023	    cp_parser_compound_statement (parser, expr, false);
3024	    /* Finish up.  */
3025	    expr = finish_stmt_expr (expr, false);
3026	  }
3027	else
3028	  {
3029	    /* Parse the parenthesized expression.  */
3030	    expr = cp_parser_expression (parser, cast_p);
3031	    /* Let the front end know that this expression was
3032	       enclosed in parentheses. This matters in case, for
3033	       example, the expression is of the form `A::B', since
3034	       `&A::B' might be a pointer-to-member, but `&(A::B)' is
3035	       not.  */
3036	    finish_parenthesized_expr (expr);
3037	  }
3038	/* The `>' token might be the end of a template-id or
3039	   template-parameter-list now.  */
3040	parser->greater_than_is_operator_p
3041	  = saved_greater_than_is_operator_p;
3042	/* Consume the `)'.  */
3043	if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
3044	  cp_parser_skip_to_end_of_statement (parser);
3045
3046	return expr;
3047      }
3048
3049    case CPP_KEYWORD:
3050      switch (token->keyword)
3051	{
3052	  /* These two are the boolean literals.  */
3053	case RID_TRUE:
3054	  cp_lexer_consume_token (parser->lexer);
3055	  return boolean_true_node;
3056	case RID_FALSE:
3057	  cp_lexer_consume_token (parser->lexer);
3058	  return boolean_false_node;
3059
3060	  /* The `__null' literal.  */
3061	case RID_NULL:
3062	  cp_lexer_consume_token (parser->lexer);
3063	  return null_node;
3064
3065	  /* Recognize the `this' keyword.  */
3066	case RID_THIS:
3067	  cp_lexer_consume_token (parser->lexer);
3068	  if (parser->local_variables_forbidden_p)
3069	    {
3070	      error ("%<this%> may not be used in this context");
3071	      return error_mark_node;
3072	    }
3073	  /* Pointers cannot appear in constant-expressions.  */
3074	  if (cp_parser_non_integral_constant_expression (parser,
3075							  "`this'"))
3076	    return error_mark_node;
3077	  return finish_this_expr ();
3078
3079	  /* The `operator' keyword can be the beginning of an
3080	     id-expression.  */
3081	case RID_OPERATOR:
3082	  goto id_expression;
3083
3084	case RID_FUNCTION_NAME:
3085	case RID_PRETTY_FUNCTION_NAME:
3086	case RID_C99_FUNCTION_NAME:
3087	  /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
3088	     __func__ are the names of variables -- but they are
3089	     treated specially.  Therefore, they are handled here,
3090	     rather than relying on the generic id-expression logic
3091	     below.  Grammatically, these names are id-expressions.
3092
3093	     Consume the token.  */
3094	  token = cp_lexer_consume_token (parser->lexer);
3095	  /* Look up the name.  */
3096	  return finish_fname (token->u.value);
3097
3098	case RID_VA_ARG:
3099	  {
3100	    tree expression;
3101	    tree type;
3102
3103	    /* The `__builtin_va_arg' construct is used to handle
3104	       `va_arg'.  Consume the `__builtin_va_arg' token.  */
3105	    cp_lexer_consume_token (parser->lexer);
3106	    /* Look for the opening `('.  */
3107	    cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
3108	    /* Now, parse the assignment-expression.  */
3109	    expression = cp_parser_assignment_expression (parser,
3110							  /*cast_p=*/false);
3111	    /* Look for the `,'.  */
3112	    cp_parser_require (parser, CPP_COMMA, "`,'");
3113	    /* Parse the type-id.  */
3114	    type = cp_parser_type_id (parser);
3115	    /* Look for the closing `)'.  */
3116	    cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3117	    /* Using `va_arg' in a constant-expression is not
3118	       allowed.  */
3119	    if (cp_parser_non_integral_constant_expression (parser,
3120							    "`va_arg'"))
3121	      return error_mark_node;
3122	    return build_x_va_arg (expression, type);
3123	  }
3124
3125	case RID_OFFSETOF:
3126	  return cp_parser_builtin_offsetof (parser);
3127
3128	  /* Objective-C++ expressions.  */
3129	case RID_AT_ENCODE:
3130	case RID_AT_PROTOCOL:
3131	case RID_AT_SELECTOR:
3132	  return cp_parser_objc_expression (parser);
3133
3134	default:
3135	  cp_parser_error (parser, "expected primary-expression");
3136	  return error_mark_node;
3137	}
3138
3139      /* An id-expression can start with either an identifier, a
3140	 `::' as the beginning of a qualified-id, or the "operator"
3141	 keyword.  */
3142    case CPP_NAME:
3143    case CPP_SCOPE:
3144    case CPP_TEMPLATE_ID:
3145    case CPP_NESTED_NAME_SPECIFIER:
3146      {
3147	tree id_expression;
3148	tree decl;
3149	const char *error_msg;
3150	bool template_p;
3151	bool done;
3152
3153      id_expression:
3154	/* Parse the id-expression.  */
3155	id_expression
3156	  = cp_parser_id_expression (parser,
3157				     /*template_keyword_p=*/false,
3158				     /*check_dependency_p=*/true,
3159				     &template_p,
3160				     /*declarator_p=*/false,
3161				     /*optional_p=*/false);
3162	if (id_expression == error_mark_node)
3163	  return error_mark_node;
3164	token = cp_lexer_peek_token (parser->lexer);
3165	done = (token->type != CPP_OPEN_SQUARE
3166		&& token->type != CPP_OPEN_PAREN
3167		&& token->type != CPP_DOT
3168		&& token->type != CPP_DEREF
3169		&& token->type != CPP_PLUS_PLUS
3170		&& token->type != CPP_MINUS_MINUS);
3171	/* If we have a template-id, then no further lookup is
3172	   required.  If the template-id was for a template-class, we
3173	   will sometimes have a TYPE_DECL at this point.  */
3174	if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
3175		 || TREE_CODE (id_expression) == TYPE_DECL)
3176	  decl = id_expression;
3177	/* Look up the name.  */
3178	else
3179	  {
3180	    tree ambiguous_decls;
3181
3182	    decl = cp_parser_lookup_name (parser, id_expression,
3183					  none_type,
3184					  template_p,
3185					  /*is_namespace=*/false,
3186					  /*check_dependency=*/true,
3187					  &ambiguous_decls);
3188	    /* If the lookup was ambiguous, an error will already have
3189	       been issued.  */
3190	    if (ambiguous_decls)
3191	      return error_mark_node;
3192
3193	    /* In Objective-C++, an instance variable (ivar) may be preferred
3194	       to whatever cp_parser_lookup_name() found.  */
3195	    decl = objc_lookup_ivar (decl, id_expression);
3196
3197	    /* If name lookup gives us a SCOPE_REF, then the
3198	       qualifying scope was dependent.  */
3199	    if (TREE_CODE (decl) == SCOPE_REF)
3200	      {
3201		/* At this point, we do not know if DECL is a valid
3202		   integral constant expression.  We assume that it is
3203		   in fact such an expression, so that code like:
3204
3205		      template <int N> struct A {
3206			int a[B<N>::i];
3207		      };
3208
3209		   is accepted.  At template-instantiation time, we
3210		   will check that B<N>::i is actually a constant.  */
3211		return decl;
3212	      }
3213	    /* Check to see if DECL is a local variable in a context
3214	       where that is forbidden.  */
3215	    if (parser->local_variables_forbidden_p
3216		&& local_variable_p (decl))
3217	      {
3218		/* It might be that we only found DECL because we are
3219		   trying to be generous with pre-ISO scoping rules.
3220		   For example, consider:
3221
3222		     int i;
3223		     void g() {
3224		       for (int i = 0; i < 10; ++i) {}
3225		       extern void f(int j = i);
3226		     }
3227
3228		   Here, name look up will originally find the out
3229		   of scope `i'.  We need to issue a warning message,
3230		   but then use the global `i'.  */
3231		decl = check_for_out_of_scope_variable (decl);
3232		if (local_variable_p (decl))
3233		  {
3234		    error ("local variable %qD may not appear in this context",
3235			   decl);
3236		    return error_mark_node;
3237		  }
3238	      }
3239	  }
3240
3241	decl = (finish_id_expression
3242		(id_expression, decl, parser->scope,
3243		 idk,
3244		 parser->integral_constant_expression_p,
3245		 parser->allow_non_integral_constant_expression_p,
3246		 &parser->non_integral_constant_expression_p,
3247		 template_p, done, address_p,
3248		 template_arg_p,
3249		 &error_msg));
3250	if (error_msg)
3251	  cp_parser_error (parser, error_msg);
3252	return decl;
3253      }
3254
3255      /* Anything else is an error.  */
3256    default:
3257      /* ...unless we have an Objective-C++ message or string literal, that is.  */
3258      if (c_dialect_objc ()
3259	  && (token->type == CPP_OPEN_SQUARE || token->type == CPP_OBJC_STRING))
3260	return cp_parser_objc_expression (parser);
3261
3262      cp_parser_error (parser, "expected primary-expression");
3263      return error_mark_node;
3264    }
3265}
3266
3267/* Parse an id-expression.
3268
3269   id-expression:
3270     unqualified-id
3271     qualified-id
3272
3273   qualified-id:
3274     :: [opt] nested-name-specifier template [opt] unqualified-id
3275     :: identifier
3276     :: operator-function-id
3277     :: template-id
3278
3279   Return a representation of the unqualified portion of the
3280   identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
3281   a `::' or nested-name-specifier.
3282
3283   Often, if the id-expression was a qualified-id, the caller will
3284   want to make a SCOPE_REF to represent the qualified-id.  This
3285   function does not do this in order to avoid wastefully creating
3286   SCOPE_REFs when they are not required.
3287
3288   If TEMPLATE_KEYWORD_P is true, then we have just seen the
3289   `template' keyword.
3290
3291   If CHECK_DEPENDENCY_P is false, then names are looked up inside
3292   uninstantiated templates.
3293
3294   If *TEMPLATE_P is non-NULL, it is set to true iff the
3295   `template' keyword is used to explicitly indicate that the entity
3296   named is a template.
3297
3298   If DECLARATOR_P is true, the id-expression is appearing as part of
3299   a declarator, rather than as part of an expression.  */
3300
3301static tree
3302cp_parser_id_expression (cp_parser *parser,
3303			 bool template_keyword_p,
3304			 bool check_dependency_p,
3305			 bool *template_p,
3306			 bool declarator_p,
3307			 bool optional_p)
3308{
3309  bool global_scope_p;
3310  bool nested_name_specifier_p;
3311
3312  /* Assume the `template' keyword was not used.  */
3313  if (template_p)
3314    *template_p = template_keyword_p;
3315
3316  /* Look for the optional `::' operator.  */
3317  global_scope_p
3318    = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3319       != NULL_TREE);
3320  /* Look for the optional nested-name-specifier.  */
3321  nested_name_specifier_p
3322    = (cp_parser_nested_name_specifier_opt (parser,
3323					    /*typename_keyword_p=*/false,
3324					    check_dependency_p,
3325					    /*type_p=*/false,
3326					    declarator_p)
3327       != NULL_TREE);
3328  /* If there is a nested-name-specifier, then we are looking at
3329     the first qualified-id production.  */
3330  if (nested_name_specifier_p)
3331    {
3332      tree saved_scope;
3333      tree saved_object_scope;
3334      tree saved_qualifying_scope;
3335      tree unqualified_id;
3336      bool is_template;
3337
3338      /* See if the next token is the `template' keyword.  */
3339      if (!template_p)
3340	template_p = &is_template;
3341      *template_p = cp_parser_optional_template_keyword (parser);
3342      /* Name lookup we do during the processing of the
3343	 unqualified-id might obliterate SCOPE.  */
3344      saved_scope = parser->scope;
3345      saved_object_scope = parser->object_scope;
3346      saved_qualifying_scope = parser->qualifying_scope;
3347      /* Process the final unqualified-id.  */
3348      unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3349						 check_dependency_p,
3350						 declarator_p,
3351						 /*optional_p=*/false);
3352      /* Restore the SAVED_SCOPE for our caller.  */
3353      parser->scope = saved_scope;
3354      parser->object_scope = saved_object_scope;
3355      parser->qualifying_scope = saved_qualifying_scope;
3356
3357      return unqualified_id;
3358    }
3359  /* Otherwise, if we are in global scope, then we are looking at one
3360     of the other qualified-id productions.  */
3361  else if (global_scope_p)
3362    {
3363      cp_token *token;
3364      tree id;
3365
3366      /* Peek at the next token.  */
3367      token = cp_lexer_peek_token (parser->lexer);
3368
3369      /* If it's an identifier, and the next token is not a "<", then
3370	 we can avoid the template-id case.  This is an optimization
3371	 for this common case.  */
3372      if (token->type == CPP_NAME
3373	  && !cp_parser_nth_token_starts_template_argument_list_p
3374	       (parser, 2))
3375	return cp_parser_identifier (parser);
3376
3377      cp_parser_parse_tentatively (parser);
3378      /* Try a template-id.  */
3379      id = cp_parser_template_id (parser,
3380				  /*template_keyword_p=*/false,
3381				  /*check_dependency_p=*/true,
3382				  declarator_p);
3383      /* If that worked, we're done.  */
3384      if (cp_parser_parse_definitely (parser))
3385	return id;
3386
3387      /* Peek at the next token.  (Changes in the token buffer may
3388	 have invalidated the pointer obtained above.)  */
3389      token = cp_lexer_peek_token (parser->lexer);
3390
3391      switch (token->type)
3392	{
3393	case CPP_NAME:
3394	  return cp_parser_identifier (parser);
3395
3396	case CPP_KEYWORD:
3397	  if (token->keyword == RID_OPERATOR)
3398	    return cp_parser_operator_function_id (parser);
3399	  /* Fall through.  */
3400
3401	default:
3402	  cp_parser_error (parser, "expected id-expression");
3403	  return error_mark_node;
3404	}
3405    }
3406  else
3407    return cp_parser_unqualified_id (parser, template_keyword_p,
3408				     /*check_dependency_p=*/true,
3409				     declarator_p,
3410				     optional_p);
3411}
3412
3413/* Parse an unqualified-id.
3414
3415   unqualified-id:
3416     identifier
3417     operator-function-id
3418     conversion-function-id
3419     ~ class-name
3420     template-id
3421
3422   If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3423   keyword, in a construct like `A::template ...'.
3424
3425   Returns a representation of unqualified-id.  For the `identifier'
3426   production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3427   production a BIT_NOT_EXPR is returned; the operand of the
3428   BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3429   other productions, see the documentation accompanying the
3430   corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3431   names are looked up in uninstantiated templates.  If DECLARATOR_P
3432   is true, the unqualified-id is appearing as part of a declarator,
3433   rather than as part of an expression.  */
3434
3435static tree
3436cp_parser_unqualified_id (cp_parser* parser,
3437			  bool template_keyword_p,
3438			  bool check_dependency_p,
3439			  bool declarator_p,
3440			  bool optional_p)
3441{
3442  cp_token *token;
3443
3444  /* Peek at the next token.  */
3445  token = cp_lexer_peek_token (parser->lexer);
3446
3447  switch (token->type)
3448    {
3449    case CPP_NAME:
3450      {
3451	tree id;
3452
3453	/* We don't know yet whether or not this will be a
3454	   template-id.  */
3455	cp_parser_parse_tentatively (parser);
3456	/* Try a template-id.  */
3457	id = cp_parser_template_id (parser, template_keyword_p,
3458				    check_dependency_p,
3459				    declarator_p);
3460	/* If it worked, we're done.  */
3461	if (cp_parser_parse_definitely (parser))
3462	  return id;
3463	/* Otherwise, it's an ordinary identifier.  */
3464	return cp_parser_identifier (parser);
3465      }
3466
3467    case CPP_TEMPLATE_ID:
3468      return cp_parser_template_id (parser, template_keyword_p,
3469				    check_dependency_p,
3470				    declarator_p);
3471
3472    case CPP_COMPL:
3473      {
3474	tree type_decl;
3475	tree qualifying_scope;
3476	tree object_scope;
3477	tree scope;
3478	bool done;
3479
3480	/* Consume the `~' token.  */
3481	cp_lexer_consume_token (parser->lexer);
3482	/* Parse the class-name.  The standard, as written, seems to
3483	   say that:
3484
3485	     template <typename T> struct S { ~S (); };
3486	     template <typename T> S<T>::~S() {}
3487
3488	   is invalid, since `~' must be followed by a class-name, but
3489	   `S<T>' is dependent, and so not known to be a class.
3490	   That's not right; we need to look in uninstantiated
3491	   templates.  A further complication arises from:
3492
3493	     template <typename T> void f(T t) {
3494	       t.T::~T();
3495	     }
3496
3497	   Here, it is not possible to look up `T' in the scope of `T'
3498	   itself.  We must look in both the current scope, and the
3499	   scope of the containing complete expression.
3500
3501	   Yet another issue is:
3502
3503	     struct S {
3504	       int S;
3505	       ~S();
3506	     };
3507
3508	     S::~S() {}
3509
3510	   The standard does not seem to say that the `S' in `~S'
3511	   should refer to the type `S' and not the data member
3512	   `S::S'.  */
3513
3514	/* DR 244 says that we look up the name after the "~" in the
3515	   same scope as we looked up the qualifying name.  That idea
3516	   isn't fully worked out; it's more complicated than that.  */
3517	scope = parser->scope;
3518	object_scope = parser->object_scope;
3519	qualifying_scope = parser->qualifying_scope;
3520
3521	/* Check for invalid scopes.  */
3522	if (scope == error_mark_node)
3523	  {
3524	    if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3525	      cp_lexer_consume_token (parser->lexer);
3526	    return error_mark_node;
3527	  }
3528	if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
3529	  {
3530	    if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3531	      error ("scope %qT before %<~%> is not a class-name", scope);
3532	    cp_parser_simulate_error (parser);
3533	    if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3534	      cp_lexer_consume_token (parser->lexer);
3535	    return error_mark_node;
3536	  }
3537	gcc_assert (!scope || TYPE_P (scope));
3538
3539	/* If the name is of the form "X::~X" it's OK.  */
3540	token = cp_lexer_peek_token (parser->lexer);
3541	if (scope
3542	    && token->type == CPP_NAME
3543	    && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3544		== CPP_OPEN_PAREN)
3545	    && constructor_name_p (token->u.value, scope))
3546	  {
3547	    cp_lexer_consume_token (parser->lexer);
3548	    return build_nt (BIT_NOT_EXPR, scope);
3549	  }
3550
3551	/* If there was an explicit qualification (S::~T), first look
3552	   in the scope given by the qualification (i.e., S).  */
3553	done = false;
3554	type_decl = NULL_TREE;
3555	if (scope)
3556	  {
3557	    cp_parser_parse_tentatively (parser);
3558	    type_decl = cp_parser_class_name (parser,
3559					      /*typename_keyword_p=*/false,
3560					      /*template_keyword_p=*/false,
3561					      none_type,
3562					      /*check_dependency=*/false,
3563					      /*class_head_p=*/false,
3564					      declarator_p);
3565	    if (cp_parser_parse_definitely (parser))
3566	      done = true;
3567	  }
3568	/* In "N::S::~S", look in "N" as well.  */
3569	if (!done && scope && qualifying_scope)
3570	  {
3571	    cp_parser_parse_tentatively (parser);
3572	    parser->scope = qualifying_scope;
3573	    parser->object_scope = NULL_TREE;
3574	    parser->qualifying_scope = NULL_TREE;
3575	    type_decl
3576	      = cp_parser_class_name (parser,
3577				      /*typename_keyword_p=*/false,
3578				      /*template_keyword_p=*/false,
3579				      none_type,
3580				      /*check_dependency=*/false,
3581				      /*class_head_p=*/false,
3582				      declarator_p);
3583	    if (cp_parser_parse_definitely (parser))
3584	      done = true;
3585	  }
3586	/* In "p->S::~T", look in the scope given by "*p" as well.  */
3587	else if (!done && object_scope)
3588	  {
3589	    cp_parser_parse_tentatively (parser);
3590	    parser->scope = object_scope;
3591	    parser->object_scope = NULL_TREE;
3592	    parser->qualifying_scope = NULL_TREE;
3593	    type_decl
3594	      = cp_parser_class_name (parser,
3595				      /*typename_keyword_p=*/false,
3596				      /*template_keyword_p=*/false,
3597				      none_type,
3598				      /*check_dependency=*/false,
3599				      /*class_head_p=*/false,
3600				      declarator_p);
3601	    if (cp_parser_parse_definitely (parser))
3602	      done = true;
3603	  }
3604	/* Look in the surrounding context.  */
3605	if (!done)
3606	  {
3607	    parser->scope = NULL_TREE;
3608	    parser->object_scope = NULL_TREE;
3609	    parser->qualifying_scope = NULL_TREE;
3610	    type_decl
3611	      = cp_parser_class_name (parser,
3612				      /*typename_keyword_p=*/false,
3613				      /*template_keyword_p=*/false,
3614				      none_type,
3615				      /*check_dependency=*/false,
3616				      /*class_head_p=*/false,
3617				      declarator_p);
3618	  }
3619	/* If an error occurred, assume that the name of the
3620	   destructor is the same as the name of the qualifying
3621	   class.  That allows us to keep parsing after running
3622	   into ill-formed destructor names.  */
3623	if (type_decl == error_mark_node && scope)
3624	  return build_nt (BIT_NOT_EXPR, scope);
3625	else if (type_decl == error_mark_node)
3626	  return error_mark_node;
3627
3628	/* Check that destructor name and scope match.  */
3629	if (declarator_p && scope && !check_dtor_name (scope, type_decl))
3630	  {
3631	    if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3632	      error ("declaration of %<~%T%> as member of %qT",
3633		     type_decl, scope);
3634	    cp_parser_simulate_error (parser);
3635	    return error_mark_node;
3636	  }
3637
3638	/* [class.dtor]
3639
3640	   A typedef-name that names a class shall not be used as the
3641	   identifier in the declarator for a destructor declaration.  */
3642	if (declarator_p
3643	    && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
3644	    && !DECL_SELF_REFERENCE_P (type_decl)
3645	    && !cp_parser_uncommitted_to_tentative_parse_p (parser))
3646	  error ("typedef-name %qD used as destructor declarator",
3647		 type_decl);
3648
3649	return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3650      }
3651
3652    case CPP_KEYWORD:
3653      if (token->keyword == RID_OPERATOR)
3654	{
3655	  tree id;
3656
3657	  /* This could be a template-id, so we try that first.  */
3658	  cp_parser_parse_tentatively (parser);
3659	  /* Try a template-id.  */
3660	  id = cp_parser_template_id (parser, template_keyword_p,
3661				      /*check_dependency_p=*/true,
3662				      declarator_p);
3663	  /* If that worked, we're done.  */
3664	  if (cp_parser_parse_definitely (parser))
3665	    return id;
3666	  /* We still don't know whether we're looking at an
3667	     operator-function-id or a conversion-function-id.  */
3668	  cp_parser_parse_tentatively (parser);
3669	  /* Try an operator-function-id.  */
3670	  id = cp_parser_operator_function_id (parser);
3671	  /* If that didn't work, try a conversion-function-id.  */
3672	  if (!cp_parser_parse_definitely (parser))
3673	    id = cp_parser_conversion_function_id (parser);
3674
3675	  return id;
3676	}
3677      /* Fall through.  */
3678
3679    default:
3680      if (optional_p)
3681	return NULL_TREE;
3682      cp_parser_error (parser, "expected unqualified-id");
3683      return error_mark_node;
3684    }
3685}
3686
3687/* Parse an (optional) nested-name-specifier.
3688
3689   nested-name-specifier:
3690     class-or-namespace-name :: nested-name-specifier [opt]
3691     class-or-namespace-name :: template nested-name-specifier [opt]
3692
3693   PARSER->SCOPE should be set appropriately before this function is
3694   called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
3695   effect.  TYPE_P is TRUE if we non-type bindings should be ignored
3696   in name lookups.
3697
3698   Sets PARSER->SCOPE to the class (TYPE) or namespace
3699   (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
3700   it unchanged if there is no nested-name-specifier.  Returns the new
3701   scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
3702
3703   If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
3704   part of a declaration and/or decl-specifier.  */
3705
3706static tree
3707cp_parser_nested_name_specifier_opt (cp_parser *parser,
3708				     bool typename_keyword_p,
3709				     bool check_dependency_p,
3710				     bool type_p,
3711				     bool is_declaration)
3712{
3713  bool success = false;
3714  cp_token_position start = 0;
3715  cp_token *token;
3716
3717  /* Remember where the nested-name-specifier starts.  */
3718  if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3719    {
3720      start = cp_lexer_token_position (parser->lexer, false);
3721      push_deferring_access_checks (dk_deferred);
3722    }
3723
3724  while (true)
3725    {
3726      tree new_scope;
3727      tree old_scope;
3728      tree saved_qualifying_scope;
3729      bool template_keyword_p;
3730
3731      /* Spot cases that cannot be the beginning of a
3732	 nested-name-specifier.  */
3733      token = cp_lexer_peek_token (parser->lexer);
3734
3735      /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
3736	 the already parsed nested-name-specifier.  */
3737      if (token->type == CPP_NESTED_NAME_SPECIFIER)
3738	{
3739	  /* Grab the nested-name-specifier and continue the loop.  */
3740	  cp_parser_pre_parsed_nested_name_specifier (parser);
3741	  /* If we originally encountered this nested-name-specifier
3742	     with IS_DECLARATION set to false, we will not have
3743	     resolved TYPENAME_TYPEs, so we must do so here.  */
3744	  if (is_declaration
3745	      && TREE_CODE (parser->scope) == TYPENAME_TYPE)
3746	    {
3747	      new_scope = resolve_typename_type (parser->scope,
3748						 /*only_current_p=*/false);
3749	      if (new_scope != error_mark_node)
3750		parser->scope = new_scope;
3751	    }
3752	  success = true;
3753	  continue;
3754	}
3755
3756      /* Spot cases that cannot be the beginning of a
3757	 nested-name-specifier.  On the second and subsequent times
3758	 through the loop, we look for the `template' keyword.  */
3759      if (success && token->keyword == RID_TEMPLATE)
3760	;
3761      /* A template-id can start a nested-name-specifier.  */
3762      else if (token->type == CPP_TEMPLATE_ID)
3763	;
3764      else
3765	{
3766	  /* If the next token is not an identifier, then it is
3767	     definitely not a class-or-namespace-name.  */
3768	  if (token->type != CPP_NAME)
3769	    break;
3770	  /* If the following token is neither a `<' (to begin a
3771	     template-id), nor a `::', then we are not looking at a
3772	     nested-name-specifier.  */
3773	  token = cp_lexer_peek_nth_token (parser->lexer, 2);
3774	  if (token->type != CPP_SCOPE
3775	      && !cp_parser_nth_token_starts_template_argument_list_p
3776		  (parser, 2))
3777	    break;
3778	}
3779
3780      /* The nested-name-specifier is optional, so we parse
3781	 tentatively.  */
3782      cp_parser_parse_tentatively (parser);
3783
3784      /* Look for the optional `template' keyword, if this isn't the
3785	 first time through the loop.  */
3786      if (success)
3787	template_keyword_p = cp_parser_optional_template_keyword (parser);
3788      else
3789	template_keyword_p = false;
3790
3791      /* Save the old scope since the name lookup we are about to do
3792	 might destroy it.  */
3793      old_scope = parser->scope;
3794      saved_qualifying_scope = parser->qualifying_scope;
3795      /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
3796	 look up names in "X<T>::I" in order to determine that "Y" is
3797	 a template.  So, if we have a typename at this point, we make
3798	 an effort to look through it.  */
3799      if (is_declaration
3800	  && !typename_keyword_p
3801	  && parser->scope
3802	  && TREE_CODE (parser->scope) == TYPENAME_TYPE)
3803	parser->scope = resolve_typename_type (parser->scope,
3804					       /*only_current_p=*/false);
3805      /* Parse the qualifying entity.  */
3806      new_scope
3807	= cp_parser_class_or_namespace_name (parser,
3808					     typename_keyword_p,
3809					     template_keyword_p,
3810					     check_dependency_p,
3811					     type_p,
3812					     is_declaration);
3813      /* Look for the `::' token.  */
3814      cp_parser_require (parser, CPP_SCOPE, "`::'");
3815
3816      /* If we found what we wanted, we keep going; otherwise, we're
3817	 done.  */
3818      if (!cp_parser_parse_definitely (parser))
3819	{
3820	  bool error_p = false;
3821
3822	  /* Restore the OLD_SCOPE since it was valid before the
3823	     failed attempt at finding the last
3824	     class-or-namespace-name.  */
3825	  parser->scope = old_scope;
3826	  parser->qualifying_scope = saved_qualifying_scope;
3827	  if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3828	    break;
3829	  /* If the next token is an identifier, and the one after
3830	     that is a `::', then any valid interpretation would have
3831	     found a class-or-namespace-name.  */
3832	  while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
3833		 && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3834		     == CPP_SCOPE)
3835		 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
3836		     != CPP_COMPL))
3837	    {
3838	      token = cp_lexer_consume_token (parser->lexer);
3839	      if (!error_p)
3840		{
3841		  if (!token->ambiguous_p)
3842		    {
3843		      tree decl;
3844		      tree ambiguous_decls;
3845
3846		      decl = cp_parser_lookup_name (parser, token->u.value,
3847						    none_type,
3848						    /*is_template=*/false,
3849						    /*is_namespace=*/false,
3850						    /*check_dependency=*/true,
3851						    &ambiguous_decls);
3852		      if (TREE_CODE (decl) == TEMPLATE_DECL)
3853			error ("%qD used without template parameters", decl);
3854		      else if (ambiguous_decls)
3855			{
3856			  error ("reference to %qD is ambiguous",
3857				 token->u.value);
3858			  print_candidates (ambiguous_decls);
3859			  decl = error_mark_node;
3860			}
3861		      else
3862			cp_parser_name_lookup_error
3863			  (parser, token->u.value, decl,
3864			   "is not a class or namespace");
3865		    }
3866		  parser->scope = error_mark_node;
3867		  error_p = true;
3868		  /* Treat this as a successful nested-name-specifier
3869		     due to:
3870
3871		     [basic.lookup.qual]
3872
3873		     If the name found is not a class-name (clause
3874		     _class_) or namespace-name (_namespace.def_), the
3875		     program is ill-formed.  */
3876		  success = true;
3877		}
3878	      cp_lexer_consume_token (parser->lexer);
3879	    }
3880	  break;
3881	}
3882      /* We've found one valid nested-name-specifier.  */
3883      success = true;
3884      /* Name lookup always gives us a DECL.  */
3885      if (TREE_CODE (new_scope) == TYPE_DECL)
3886	new_scope = TREE_TYPE (new_scope);
3887      /* Uses of "template" must be followed by actual templates.  */
3888      if (template_keyword_p
3889	  && !(CLASS_TYPE_P (new_scope)
3890	       && ((CLASSTYPE_USE_TEMPLATE (new_scope)
3891		    && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
3892		   || CLASSTYPE_IS_TEMPLATE (new_scope)))
3893	  && !(TREE_CODE (new_scope) == TYPENAME_TYPE
3894	       && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
3895		   == TEMPLATE_ID_EXPR)))
3896	pedwarn (TYPE_P (new_scope)
3897		 ? "%qT is not a template"
3898		 : "%qD is not a template",
3899		 new_scope);
3900      /* If it is a class scope, try to complete it; we are about to
3901	 be looking up names inside the class.  */
3902      if (TYPE_P (new_scope)
3903	  /* Since checking types for dependency can be expensive,
3904	     avoid doing it if the type is already complete.  */
3905	  && !COMPLETE_TYPE_P (new_scope)
3906	  /* Do not try to complete dependent types.  */
3907	  && !dependent_type_p (new_scope))
3908	new_scope = complete_type (new_scope);
3909      /* Make sure we look in the right scope the next time through
3910	 the loop.  */
3911      parser->scope = new_scope;
3912    }
3913
3914  /* If parsing tentatively, replace the sequence of tokens that makes
3915     up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
3916     token.  That way, should we re-parse the token stream, we will
3917     not have to repeat the effort required to do the parse, nor will
3918     we issue duplicate error messages.  */
3919  if (success && start)
3920    {
3921      cp_token *token;
3922
3923      token = cp_lexer_token_at (parser->lexer, start);
3924      /* Reset the contents of the START token.  */
3925      token->type = CPP_NESTED_NAME_SPECIFIER;
3926      /* Retrieve any deferred checks.  Do not pop this access checks yet
3927	 so the memory will not be reclaimed during token replacing below.  */
3928      token->u.tree_check_value = GGC_CNEW (struct tree_check);
3929      token->u.tree_check_value->value = parser->scope;
3930      token->u.tree_check_value->checks = get_deferred_access_checks ();
3931      token->u.tree_check_value->qualifying_scope =
3932	parser->qualifying_scope;
3933      token->keyword = RID_MAX;
3934
3935      /* Purge all subsequent tokens.  */
3936      cp_lexer_purge_tokens_after (parser->lexer, start);
3937    }
3938
3939  if (start)
3940    pop_to_parent_deferring_access_checks ();
3941
3942  return success ? parser->scope : NULL_TREE;
3943}
3944
3945/* Parse a nested-name-specifier.  See
3946   cp_parser_nested_name_specifier_opt for details.  This function
3947   behaves identically, except that it will an issue an error if no
3948   nested-name-specifier is present.  */
3949
3950static tree
3951cp_parser_nested_name_specifier (cp_parser *parser,
3952				 bool typename_keyword_p,
3953				 bool check_dependency_p,
3954				 bool type_p,
3955				 bool is_declaration)
3956{
3957  tree scope;
3958
3959  /* Look for the nested-name-specifier.  */
3960  scope = cp_parser_nested_name_specifier_opt (parser,
3961					       typename_keyword_p,
3962					       check_dependency_p,
3963					       type_p,
3964					       is_declaration);
3965  /* If it was not present, issue an error message.  */
3966  if (!scope)
3967    {
3968      cp_parser_error (parser, "expected nested-name-specifier");
3969      parser->scope = NULL_TREE;
3970    }
3971
3972  return scope;
3973}
3974
3975/* Parse a class-or-namespace-name.
3976
3977   class-or-namespace-name:
3978     class-name
3979     namespace-name
3980
3981   TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
3982   TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
3983   CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
3984   TYPE_P is TRUE iff the next name should be taken as a class-name,
3985   even the same name is declared to be another entity in the same
3986   scope.
3987
3988   Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
3989   specified by the class-or-namespace-name.  If neither is found the
3990   ERROR_MARK_NODE is returned.  */
3991
3992static tree
3993cp_parser_class_or_namespace_name (cp_parser *parser,
3994				   bool typename_keyword_p,
3995				   bool template_keyword_p,
3996				   bool check_dependency_p,
3997				   bool type_p,
3998				   bool is_declaration)
3999{
4000  tree saved_scope;
4001  tree saved_qualifying_scope;
4002  tree saved_object_scope;
4003  tree scope;
4004  bool only_class_p;
4005
4006  /* Before we try to parse the class-name, we must save away the
4007     current PARSER->SCOPE since cp_parser_class_name will destroy
4008     it.  */
4009  saved_scope = parser->scope;
4010  saved_qualifying_scope = parser->qualifying_scope;
4011  saved_object_scope = parser->object_scope;
4012  /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
4013     there is no need to look for a namespace-name.  */
4014  only_class_p = template_keyword_p || (saved_scope && TYPE_P (saved_scope));
4015  if (!only_class_p)
4016    cp_parser_parse_tentatively (parser);
4017  scope = cp_parser_class_name (parser,
4018				typename_keyword_p,
4019				template_keyword_p,
4020				type_p ? class_type : none_type,
4021				check_dependency_p,
4022				/*class_head_p=*/false,
4023				is_declaration);
4024  /* If that didn't work, try for a namespace-name.  */
4025  if (!only_class_p && !cp_parser_parse_definitely (parser))
4026    {
4027      /* Restore the saved scope.  */
4028      parser->scope = saved_scope;
4029      parser->qualifying_scope = saved_qualifying_scope;
4030      parser->object_scope = saved_object_scope;
4031      /* If we are not looking at an identifier followed by the scope
4032	 resolution operator, then this is not part of a
4033	 nested-name-specifier.  (Note that this function is only used
4034	 to parse the components of a nested-name-specifier.)  */
4035      if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
4036	  || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
4037	return error_mark_node;
4038      scope = cp_parser_namespace_name (parser);
4039    }
4040
4041  return scope;
4042}
4043
4044/* Parse a postfix-expression.
4045
4046   postfix-expression:
4047     primary-expression
4048     postfix-expression [ expression ]
4049     postfix-expression ( expression-list [opt] )
4050     simple-type-specifier ( expression-list [opt] )
4051     typename :: [opt] nested-name-specifier identifier
4052       ( expression-list [opt] )
4053     typename :: [opt] nested-name-specifier template [opt] template-id
4054       ( expression-list [opt] )
4055     postfix-expression . template [opt] id-expression
4056     postfix-expression -> template [opt] id-expression
4057     postfix-expression . pseudo-destructor-name
4058     postfix-expression -> pseudo-destructor-name
4059     postfix-expression ++
4060     postfix-expression --
4061     dynamic_cast < type-id > ( expression )
4062     static_cast < type-id > ( expression )
4063     reinterpret_cast < type-id > ( expression )
4064     const_cast < type-id > ( expression )
4065     typeid ( expression )
4066     typeid ( type-id )
4067
4068   GNU Extension:
4069
4070   postfix-expression:
4071     ( type-id ) { initializer-list , [opt] }
4072
4073   This extension is a GNU version of the C99 compound-literal
4074   construct.  (The C99 grammar uses `type-name' instead of `type-id',
4075   but they are essentially the same concept.)
4076
4077   If ADDRESS_P is true, the postfix expression is the operand of the
4078   `&' operator.  CAST_P is true if this expression is the target of a
4079   cast.
4080
4081   Returns a representation of the expression.  */
4082
4083static tree
4084cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p)
4085{
4086  cp_token *token;
4087  enum rid keyword;
4088  cp_id_kind idk = CP_ID_KIND_NONE;
4089  tree postfix_expression = NULL_TREE;
4090
4091  /* Peek at the next token.  */
4092  token = cp_lexer_peek_token (parser->lexer);
4093  /* Some of the productions are determined by keywords.  */
4094  keyword = token->keyword;
4095  switch (keyword)
4096    {
4097    case RID_DYNCAST:
4098    case RID_STATCAST:
4099    case RID_REINTCAST:
4100    case RID_CONSTCAST:
4101      {
4102	tree type;
4103	tree expression;
4104	const char *saved_message;
4105
4106	/* All of these can be handled in the same way from the point
4107	   of view of parsing.  Begin by consuming the token
4108	   identifying the cast.  */
4109	cp_lexer_consume_token (parser->lexer);
4110
4111	/* New types cannot be defined in the cast.  */
4112	saved_message = parser->type_definition_forbidden_message;
4113	parser->type_definition_forbidden_message
4114	  = "types may not be defined in casts";
4115
4116	/* Look for the opening `<'.  */
4117	cp_parser_require (parser, CPP_LESS, "`<'");
4118	/* Parse the type to which we are casting.  */
4119	type = cp_parser_type_id (parser);
4120	/* Look for the closing `>'.  */
4121	cp_parser_require (parser, CPP_GREATER, "`>'");
4122	/* Restore the old message.  */
4123	parser->type_definition_forbidden_message = saved_message;
4124
4125	/* And the expression which is being cast.  */
4126	cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
4127	expression = cp_parser_expression (parser, /*cast_p=*/true);
4128	cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4129
4130	/* Only type conversions to integral or enumeration types
4131	   can be used in constant-expressions.  */
4132	if (!cast_valid_in_integral_constant_expression_p (type)
4133	    && (cp_parser_non_integral_constant_expression
4134		(parser,
4135		 "a cast to a type other than an integral or "
4136		 "enumeration type")))
4137	  return error_mark_node;
4138
4139	switch (keyword)
4140	  {
4141	  case RID_DYNCAST:
4142	    postfix_expression
4143	      = build_dynamic_cast (type, expression);
4144	    break;
4145	  case RID_STATCAST:
4146	    postfix_expression
4147	      = build_static_cast (type, expression);
4148	    break;
4149	  case RID_REINTCAST:
4150	    postfix_expression
4151	      = build_reinterpret_cast (type, expression);
4152	    break;
4153	  case RID_CONSTCAST:
4154	    postfix_expression
4155	      = build_const_cast (type, expression);
4156	    break;
4157	  default:
4158	    gcc_unreachable ();
4159	  }
4160      }
4161      break;
4162
4163    case RID_TYPEID:
4164      {
4165	tree type;
4166	const char *saved_message;
4167	bool saved_in_type_id_in_expr_p;
4168
4169	/* Consume the `typeid' token.  */
4170	cp_lexer_consume_token (parser->lexer);
4171	/* Look for the `(' token.  */
4172	cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
4173	/* Types cannot be defined in a `typeid' expression.  */
4174	saved_message = parser->type_definition_forbidden_message;
4175	parser->type_definition_forbidden_message
4176	  = "types may not be defined in a `typeid\' expression";
4177	/* We can't be sure yet whether we're looking at a type-id or an
4178	   expression.  */
4179	cp_parser_parse_tentatively (parser);
4180	/* Try a type-id first.  */
4181	saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4182	parser->in_type_id_in_expr_p = true;
4183	type = cp_parser_type_id (parser);
4184	parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4185	/* Look for the `)' token.  Otherwise, we can't be sure that
4186	   we're not looking at an expression: consider `typeid (int
4187	   (3))', for example.  */
4188	cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4189	/* If all went well, simply lookup the type-id.  */
4190	if (cp_parser_parse_definitely (parser))
4191	  postfix_expression = get_typeid (type);
4192	/* Otherwise, fall back to the expression variant.  */
4193	else
4194	  {
4195	    tree expression;
4196
4197	    /* Look for an expression.  */
4198	    expression = cp_parser_expression (parser, /*cast_p=*/false);
4199	    /* Compute its typeid.  */
4200	    postfix_expression = build_typeid (expression);
4201	    /* Look for the `)' token.  */
4202	    cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4203	  }
4204	/* Restore the saved message.  */
4205	parser->type_definition_forbidden_message = saved_message;
4206	/* `typeid' may not appear in an integral constant expression.  */
4207	if (cp_parser_non_integral_constant_expression(parser,
4208						       "`typeid' operator"))
4209	  return error_mark_node;
4210      }
4211      break;
4212
4213    case RID_TYPENAME:
4214      {
4215	tree type;
4216	/* The syntax permitted here is the same permitted for an
4217	   elaborated-type-specifier.  */
4218	type = cp_parser_elaborated_type_specifier (parser,
4219						    /*is_friend=*/false,
4220						    /*is_declaration=*/false);
4221	postfix_expression = cp_parser_functional_cast (parser, type);
4222      }
4223      break;
4224
4225    default:
4226      {
4227	tree type;
4228
4229	/* If the next thing is a simple-type-specifier, we may be
4230	   looking at a functional cast.  We could also be looking at
4231	   an id-expression.  So, we try the functional cast, and if
4232	   that doesn't work we fall back to the primary-expression.  */
4233	cp_parser_parse_tentatively (parser);
4234	/* Look for the simple-type-specifier.  */
4235	type = cp_parser_simple_type_specifier (parser,
4236						/*decl_specs=*/NULL,
4237						CP_PARSER_FLAGS_NONE);
4238	/* Parse the cast itself.  */
4239	if (!cp_parser_error_occurred (parser))
4240	  postfix_expression
4241	    = cp_parser_functional_cast (parser, type);
4242	/* If that worked, we're done.  */
4243	if (cp_parser_parse_definitely (parser))
4244	  break;
4245
4246	/* If the functional-cast didn't work out, try a
4247	   compound-literal.  */
4248	if (cp_parser_allow_gnu_extensions_p (parser)
4249	    && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4250	  {
4251	    VEC(constructor_elt,gc) *initializer_list = NULL;
4252	    bool saved_in_type_id_in_expr_p;
4253
4254	    cp_parser_parse_tentatively (parser);
4255	    /* Consume the `('.  */
4256	    cp_lexer_consume_token (parser->lexer);
4257	    /* Parse the type.  */
4258	    saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4259	    parser->in_type_id_in_expr_p = true;
4260	    type = cp_parser_type_id (parser);
4261	    parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4262	    /* Look for the `)'.  */
4263	    cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4264	    /* Look for the `{'.  */
4265	    cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
4266	    /* If things aren't going well, there's no need to
4267	       keep going.  */
4268	    if (!cp_parser_error_occurred (parser))
4269	      {
4270		bool non_constant_p;
4271		/* Parse the initializer-list.  */
4272		initializer_list
4273		  = cp_parser_initializer_list (parser, &non_constant_p);
4274		/* Allow a trailing `,'.  */
4275		if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
4276		  cp_lexer_consume_token (parser->lexer);
4277		/* Look for the final `}'.  */
4278		cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
4279	      }
4280	    /* If that worked, we're definitely looking at a
4281	       compound-literal expression.  */
4282	    if (cp_parser_parse_definitely (parser))
4283	      {
4284		/* Warn the user that a compound literal is not
4285		   allowed in standard C++.  */
4286		if (pedantic)
4287		  pedwarn ("ISO C++ forbids compound-literals");
4288		/* For simplicitly, we disallow compound literals in
4289		   constant-expressions for simpliicitly.  We could
4290		   allow compound literals of integer type, whose
4291		   initializer was a constant, in constant
4292		   expressions.  Permitting that usage, as a further
4293		   extension, would not change the meaning of any
4294		   currently accepted programs.  (Of course, as
4295		   compound literals are not part of ISO C++, the
4296		   standard has nothing to say.)  */
4297		if (cp_parser_non_integral_constant_expression
4298		    (parser, "non-constant compound literals"))
4299		  {
4300		    postfix_expression = error_mark_node;
4301		    break;
4302		  }
4303		/* Form the representation of the compound-literal.  */
4304		postfix_expression
4305		  = finish_compound_literal (type, initializer_list);
4306		break;
4307	      }
4308	  }
4309
4310	/* It must be a primary-expression.  */
4311	postfix_expression
4312	  = cp_parser_primary_expression (parser, address_p, cast_p,
4313					  /*template_arg_p=*/false,
4314					  &idk);
4315      }
4316      break;
4317    }
4318
4319  /* Keep looping until the postfix-expression is complete.  */
4320  while (true)
4321    {
4322      if (idk == CP_ID_KIND_UNQUALIFIED
4323	  && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
4324	  && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
4325	/* It is not a Koenig lookup function call.  */
4326	postfix_expression
4327	  = unqualified_name_lookup_error (postfix_expression);
4328
4329      /* Peek at the next token.  */
4330      token = cp_lexer_peek_token (parser->lexer);
4331
4332      switch (token->type)
4333	{
4334	case CPP_OPEN_SQUARE:
4335	  postfix_expression
4336	    = cp_parser_postfix_open_square_expression (parser,
4337							postfix_expression,
4338							false);
4339	  idk = CP_ID_KIND_NONE;
4340	  break;
4341
4342	case CPP_OPEN_PAREN:
4343	  /* postfix-expression ( expression-list [opt] ) */
4344	  {
4345	    bool koenig_p;
4346	    bool is_builtin_constant_p;
4347	    bool saved_integral_constant_expression_p = false;
4348	    bool saved_non_integral_constant_expression_p = false;
4349	    tree args;
4350
4351	    is_builtin_constant_p
4352	      = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
4353	    if (is_builtin_constant_p)
4354	      {
4355		/* The whole point of __builtin_constant_p is to allow
4356		   non-constant expressions to appear as arguments.  */
4357		saved_integral_constant_expression_p
4358		  = parser->integral_constant_expression_p;
4359		saved_non_integral_constant_expression_p
4360		  = parser->non_integral_constant_expression_p;
4361		parser->integral_constant_expression_p = false;
4362	      }
4363	    args = (cp_parser_parenthesized_expression_list
4364		    (parser, /*is_attribute_list=*/false,
4365		     /*cast_p=*/false,
4366		     /*non_constant_p=*/NULL));
4367	    if (is_builtin_constant_p)
4368	      {
4369		parser->integral_constant_expression_p
4370		  = saved_integral_constant_expression_p;
4371		parser->non_integral_constant_expression_p
4372		  = saved_non_integral_constant_expression_p;
4373	      }
4374
4375	    if (args == error_mark_node)
4376	      {
4377		postfix_expression = error_mark_node;
4378		break;
4379	      }
4380
4381	    /* Function calls are not permitted in
4382	       constant-expressions.  */
4383	    if (! builtin_valid_in_constant_expr_p (postfix_expression)
4384		&& cp_parser_non_integral_constant_expression (parser,
4385							       "a function call"))
4386	      {
4387		postfix_expression = error_mark_node;
4388		break;
4389	      }
4390
4391	    koenig_p = false;
4392	    if (idk == CP_ID_KIND_UNQUALIFIED)
4393	      {
4394		if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
4395		  {
4396		    if (args)
4397		      {
4398			koenig_p = true;
4399			postfix_expression
4400			  = perform_koenig_lookup (postfix_expression, args);
4401		      }
4402		    else
4403		      postfix_expression
4404			= unqualified_fn_lookup_error (postfix_expression);
4405		  }
4406		/* We do not perform argument-dependent lookup if
4407		   normal lookup finds a non-function, in accordance
4408		   with the expected resolution of DR 218.  */
4409		else if (args && is_overloaded_fn (postfix_expression))
4410		  {
4411		    tree fn = get_first_fn (postfix_expression);
4412
4413		    if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4414		      fn = OVL_CURRENT (TREE_OPERAND (fn, 0));
4415
4416		    /* Only do argument dependent lookup if regular
4417		       lookup does not find a set of member functions.
4418		       [basic.lookup.koenig]/2a  */
4419		    if (!DECL_FUNCTION_MEMBER_P (fn))
4420		      {
4421			koenig_p = true;
4422			postfix_expression
4423			  = perform_koenig_lookup (postfix_expression, args);
4424		      }
4425		  }
4426	      }
4427
4428	    if (TREE_CODE (postfix_expression) == COMPONENT_REF)
4429	      {
4430		tree instance = TREE_OPERAND (postfix_expression, 0);
4431		tree fn = TREE_OPERAND (postfix_expression, 1);
4432
4433		if (processing_template_decl
4434		    && (type_dependent_expression_p (instance)
4435			|| (!BASELINK_P (fn)
4436			    && TREE_CODE (fn) != FIELD_DECL)
4437			|| type_dependent_expression_p (fn)
4438			|| any_type_dependent_arguments_p (args)))
4439		  {
4440		    postfix_expression
4441		      = build_min_nt (CALL_EXPR, postfix_expression,
4442				      args, NULL_TREE);
4443		    break;
4444		  }
4445
4446		if (BASELINK_P (fn))
4447		  postfix_expression
4448		    = (build_new_method_call
4449		       (instance, fn, args, NULL_TREE,
4450			(idk == CP_ID_KIND_QUALIFIED
4451			 ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL),
4452			/*fn_p=*/NULL));
4453		else
4454		  postfix_expression
4455		    = finish_call_expr (postfix_expression, args,
4456					/*disallow_virtual=*/false,
4457					/*koenig_p=*/false);
4458	      }
4459	    else if (TREE_CODE (postfix_expression) == OFFSET_REF
4460		     || TREE_CODE (postfix_expression) == MEMBER_REF
4461		     || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
4462	      postfix_expression = (build_offset_ref_call_from_tree
4463				    (postfix_expression, args));
4464	    else if (idk == CP_ID_KIND_QUALIFIED)
4465	      /* A call to a static class member, or a namespace-scope
4466		 function.  */
4467	      postfix_expression
4468		= finish_call_expr (postfix_expression, args,
4469				    /*disallow_virtual=*/true,
4470				    koenig_p);
4471	    else
4472	      /* All other function calls.  */
4473	      postfix_expression
4474		= finish_call_expr (postfix_expression, args,
4475				    /*disallow_virtual=*/false,
4476				    koenig_p);
4477
4478	    /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
4479	    idk = CP_ID_KIND_NONE;
4480	  }
4481	  break;
4482
4483	case CPP_DOT:
4484	case CPP_DEREF:
4485	  /* postfix-expression . template [opt] id-expression
4486	     postfix-expression . pseudo-destructor-name
4487	     postfix-expression -> template [opt] id-expression
4488	     postfix-expression -> pseudo-destructor-name */
4489
4490	  /* Consume the `.' or `->' operator.  */
4491	  cp_lexer_consume_token (parser->lexer);
4492
4493	  postfix_expression
4494	    = cp_parser_postfix_dot_deref_expression (parser, token->type,
4495						      postfix_expression,
4496						      false, &idk);
4497	  break;
4498
4499	case CPP_PLUS_PLUS:
4500	  /* postfix-expression ++  */
4501	  /* Consume the `++' token.  */
4502	  cp_lexer_consume_token (parser->lexer);
4503	  /* Generate a representation for the complete expression.  */
4504	  postfix_expression
4505	    = finish_increment_expr (postfix_expression,
4506				     POSTINCREMENT_EXPR);
4507	  /* Increments may not appear in constant-expressions.  */
4508	  if (cp_parser_non_integral_constant_expression (parser,
4509							  "an increment"))
4510	    postfix_expression = error_mark_node;
4511	  idk = CP_ID_KIND_NONE;
4512	  break;
4513
4514	case CPP_MINUS_MINUS:
4515	  /* postfix-expression -- */
4516	  /* Consume the `--' token.  */
4517	  cp_lexer_consume_token (parser->lexer);
4518	  /* Generate a representation for the complete expression.  */
4519	  postfix_expression
4520	    = finish_increment_expr (postfix_expression,
4521				     POSTDECREMENT_EXPR);
4522	  /* Decrements may not appear in constant-expressions.  */
4523	  if (cp_parser_non_integral_constant_expression (parser,
4524							  "a decrement"))
4525	    postfix_expression = error_mark_node;
4526	  idk = CP_ID_KIND_NONE;
4527	  break;
4528
4529	default:
4530	  return postfix_expression;
4531	}
4532    }
4533
4534  /* We should never get here.  */
4535  gcc_unreachable ();
4536  return error_mark_node;
4537}
4538
4539/* A subroutine of cp_parser_postfix_expression that also gets hijacked
4540   by cp_parser_builtin_offsetof.  We're looking for
4541
4542     postfix-expression [ expression ]
4543
4544   FOR_OFFSETOF is set if we're being called in that context, which
4545   changes how we deal with integer constant expressions.  */
4546
4547static tree
4548cp_parser_postfix_open_square_expression (cp_parser *parser,
4549					  tree postfix_expression,
4550					  bool for_offsetof)
4551{
4552  tree index;
4553
4554  /* Consume the `[' token.  */
4555  cp_lexer_consume_token (parser->lexer);
4556
4557  /* Parse the index expression.  */
4558  /* ??? For offsetof, there is a question of what to allow here.  If
4559     offsetof is not being used in an integral constant expression context,
4560     then we *could* get the right answer by computing the value at runtime.
4561     If we are in an integral constant expression context, then we might
4562     could accept any constant expression; hard to say without analysis.
4563     Rather than open the barn door too wide right away, allow only integer
4564     constant expressions here.  */
4565  if (for_offsetof)
4566    index = cp_parser_constant_expression (parser, false, NULL);
4567  else
4568    index = cp_parser_expression (parser, /*cast_p=*/false);
4569
4570  /* Look for the closing `]'.  */
4571  cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
4572
4573  /* Build the ARRAY_REF.  */
4574  postfix_expression = grok_array_decl (postfix_expression, index);
4575
4576  /* When not doing offsetof, array references are not permitted in
4577     constant-expressions.  */
4578  if (!for_offsetof
4579      && (cp_parser_non_integral_constant_expression
4580	  (parser, "an array reference")))
4581    postfix_expression = error_mark_node;
4582
4583  return postfix_expression;
4584}
4585
4586/* A subroutine of cp_parser_postfix_expression that also gets hijacked
4587   by cp_parser_builtin_offsetof.  We're looking for
4588
4589     postfix-expression . template [opt] id-expression
4590     postfix-expression . pseudo-destructor-name
4591     postfix-expression -> template [opt] id-expression
4592     postfix-expression -> pseudo-destructor-name
4593
4594   FOR_OFFSETOF is set if we're being called in that context.  That sorta
4595   limits what of the above we'll actually accept, but nevermind.
4596   TOKEN_TYPE is the "." or "->" token, which will already have been
4597   removed from the stream.  */
4598
4599static tree
4600cp_parser_postfix_dot_deref_expression (cp_parser *parser,
4601					enum cpp_ttype token_type,
4602					tree postfix_expression,
4603					bool for_offsetof, cp_id_kind *idk)
4604{
4605  tree name;
4606  bool dependent_p;
4607  bool pseudo_destructor_p;
4608  tree scope = NULL_TREE;
4609
4610  /* If this is a `->' operator, dereference the pointer.  */
4611  if (token_type == CPP_DEREF)
4612    postfix_expression = build_x_arrow (postfix_expression);
4613  /* Check to see whether or not the expression is type-dependent.  */
4614  dependent_p = type_dependent_expression_p (postfix_expression);
4615  /* The identifier following the `->' or `.' is not qualified.  */
4616  parser->scope = NULL_TREE;
4617  parser->qualifying_scope = NULL_TREE;
4618  parser->object_scope = NULL_TREE;
4619  *idk = CP_ID_KIND_NONE;
4620  /* Enter the scope corresponding to the type of the object
4621     given by the POSTFIX_EXPRESSION.  */
4622  if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
4623    {
4624      scope = TREE_TYPE (postfix_expression);
4625      /* According to the standard, no expression should ever have
4626	 reference type.  Unfortunately, we do not currently match
4627	 the standard in this respect in that our internal representation
4628	 of an expression may have reference type even when the standard
4629	 says it does not.  Therefore, we have to manually obtain the
4630	 underlying type here.  */
4631      scope = non_reference (scope);
4632      /* The type of the POSTFIX_EXPRESSION must be complete.  */
4633      if (scope == unknown_type_node)
4634	{
4635	  error ("%qE does not have class type", postfix_expression);
4636	  scope = NULL_TREE;
4637	}
4638      else
4639	scope = complete_type_or_else (scope, NULL_TREE);
4640      /* Let the name lookup machinery know that we are processing a
4641	 class member access expression.  */
4642      parser->context->object_type = scope;
4643      /* If something went wrong, we want to be able to discern that case,
4644	 as opposed to the case where there was no SCOPE due to the type
4645	 of expression being dependent.  */
4646      if (!scope)
4647	scope = error_mark_node;
4648      /* If the SCOPE was erroneous, make the various semantic analysis
4649	 functions exit quickly -- and without issuing additional error
4650	 messages.  */
4651      if (scope == error_mark_node)
4652	postfix_expression = error_mark_node;
4653    }
4654
4655  /* Assume this expression is not a pseudo-destructor access.  */
4656  pseudo_destructor_p = false;
4657
4658  /* If the SCOPE is a scalar type, then, if this is a valid program,
4659     we must be looking at a pseudo-destructor-name.  */
4660  if (scope && SCALAR_TYPE_P (scope))
4661    {
4662      tree s;
4663      tree type;
4664
4665      cp_parser_parse_tentatively (parser);
4666      /* Parse the pseudo-destructor-name.  */
4667      s = NULL_TREE;
4668      cp_parser_pseudo_destructor_name (parser, &s, &type);
4669      if (cp_parser_parse_definitely (parser))
4670	{
4671	  pseudo_destructor_p = true;
4672	  postfix_expression
4673	    = finish_pseudo_destructor_expr (postfix_expression,
4674					     s, TREE_TYPE (type));
4675	}
4676    }
4677
4678  if (!pseudo_destructor_p)
4679    {
4680      /* If the SCOPE is not a scalar type, we are looking at an
4681	 ordinary class member access expression, rather than a
4682	 pseudo-destructor-name.  */
4683      bool template_p;
4684      /* Parse the id-expression.  */
4685      name = (cp_parser_id_expression
4686	      (parser,
4687	       cp_parser_optional_template_keyword (parser),
4688	       /*check_dependency_p=*/true,
4689	       &template_p,
4690	       /*declarator_p=*/false,
4691	       /*optional_p=*/false));
4692      /* In general, build a SCOPE_REF if the member name is qualified.
4693	 However, if the name was not dependent and has already been
4694	 resolved; there is no need to build the SCOPE_REF.  For example;
4695
4696	     struct X { void f(); };
4697	     template <typename T> void f(T* t) { t->X::f(); }
4698
4699	 Even though "t" is dependent, "X::f" is not and has been resolved
4700	 to a BASELINK; there is no need to include scope information.  */
4701
4702      /* But we do need to remember that there was an explicit scope for
4703	 virtual function calls.  */
4704      if (parser->scope)
4705	*idk = CP_ID_KIND_QUALIFIED;
4706
4707      /* If the name is a template-id that names a type, we will get a
4708	 TYPE_DECL here.  That is invalid code.  */
4709      if (TREE_CODE (name) == TYPE_DECL)
4710	{
4711	  error ("invalid use of %qD", name);
4712	  postfix_expression = error_mark_node;
4713	}
4714      else
4715	{
4716	  if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
4717	    {
4718	      name = build_qualified_name (/*type=*/NULL_TREE,
4719					   parser->scope,
4720					   name,
4721					   template_p);
4722	      parser->scope = NULL_TREE;
4723	      parser->qualifying_scope = NULL_TREE;
4724	      parser->object_scope = NULL_TREE;
4725	    }
4726	  if (scope && name && BASELINK_P (name))
4727	    adjust_result_of_qualified_name_lookup
4728	      (name, BINFO_TYPE (BASELINK_ACCESS_BINFO (name)), scope);
4729	  postfix_expression
4730	    = finish_class_member_access_expr (postfix_expression, name,
4731					       template_p);
4732	}
4733    }
4734
4735  /* We no longer need to look up names in the scope of the object on
4736     the left-hand side of the `.' or `->' operator.  */
4737  parser->context->object_type = NULL_TREE;
4738
4739  /* Outside of offsetof, these operators may not appear in
4740     constant-expressions.  */
4741  if (!for_offsetof
4742      && (cp_parser_non_integral_constant_expression
4743	  (parser, token_type == CPP_DEREF ? "'->'" : "`.'")))
4744    postfix_expression = error_mark_node;
4745
4746  return postfix_expression;
4747}
4748
4749/* Parse a parenthesized expression-list.
4750
4751   expression-list:
4752     assignment-expression
4753     expression-list, assignment-expression
4754
4755   attribute-list:
4756     expression-list
4757     identifier
4758     identifier, expression-list
4759
4760   CAST_P is true if this expression is the target of a cast.
4761
4762   Returns a TREE_LIST.  The TREE_VALUE of each node is a
4763   representation of an assignment-expression.  Note that a TREE_LIST
4764   is returned even if there is only a single expression in the list.
4765   error_mark_node is returned if the ( and or ) are
4766   missing. NULL_TREE is returned on no expressions. The parentheses
4767   are eaten. IS_ATTRIBUTE_LIST is true if this is really an attribute
4768   list being parsed.  If NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P
4769   indicates whether or not all of the expressions in the list were
4770   constant.  */
4771
4772static tree
4773cp_parser_parenthesized_expression_list (cp_parser* parser,
4774					 bool is_attribute_list,
4775					 bool cast_p,
4776					 bool *non_constant_p)
4777{
4778  tree expression_list = NULL_TREE;
4779  bool fold_expr_p = is_attribute_list;
4780  tree identifier = NULL_TREE;
4781
4782  /* Assume all the expressions will be constant.  */
4783  if (non_constant_p)
4784    *non_constant_p = false;
4785
4786  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
4787    return error_mark_node;
4788
4789  /* Consume expressions until there are no more.  */
4790  if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
4791    while (true)
4792      {
4793	tree expr;
4794
4795	/* At the beginning of attribute lists, check to see if the
4796	   next token is an identifier.  */
4797	if (is_attribute_list
4798	    && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
4799	  {
4800	    cp_token *token;
4801
4802	    /* Consume the identifier.  */
4803	    token = cp_lexer_consume_token (parser->lexer);
4804	    /* Save the identifier.  */
4805	    identifier = token->u.value;
4806	  }
4807	else
4808	  {
4809	    /* Parse the next assignment-expression.  */
4810	    if (non_constant_p)
4811	      {
4812		bool expr_non_constant_p;
4813		expr = (cp_parser_constant_expression
4814			(parser, /*allow_non_constant_p=*/true,
4815			 &expr_non_constant_p));
4816		if (expr_non_constant_p)
4817		  *non_constant_p = true;
4818	      }
4819	    else
4820	      expr = cp_parser_assignment_expression (parser, cast_p);
4821
4822	    if (fold_expr_p)
4823	      expr = fold_non_dependent_expr (expr);
4824
4825	     /* Add it to the list.  We add error_mark_node
4826		expressions to the list, so that we can still tell if
4827		the correct form for a parenthesized expression-list
4828		is found. That gives better errors.  */
4829	    expression_list = tree_cons (NULL_TREE, expr, expression_list);
4830
4831	    if (expr == error_mark_node)
4832	      goto skip_comma;
4833	  }
4834
4835	/* After the first item, attribute lists look the same as
4836	   expression lists.  */
4837	is_attribute_list = false;
4838
4839      get_comma:;
4840	/* If the next token isn't a `,', then we are done.  */
4841	if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
4842	  break;
4843
4844	/* Otherwise, consume the `,' and keep going.  */
4845	cp_lexer_consume_token (parser->lexer);
4846      }
4847
4848  if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
4849    {
4850      int ending;
4851
4852    skip_comma:;
4853      /* We try and resync to an unnested comma, as that will give the
4854	 user better diagnostics.  */
4855      ending = cp_parser_skip_to_closing_parenthesis (parser,
4856						      /*recovering=*/true,
4857						      /*or_comma=*/true,
4858						      /*consume_paren=*/true);
4859      if (ending < 0)
4860	goto get_comma;
4861      if (!ending)
4862	return error_mark_node;
4863    }
4864
4865  /* We built up the list in reverse order so we must reverse it now.  */
4866  expression_list = nreverse (expression_list);
4867  if (identifier)
4868    expression_list = tree_cons (NULL_TREE, identifier, expression_list);
4869
4870  return expression_list;
4871}
4872
4873/* Parse a pseudo-destructor-name.
4874
4875   pseudo-destructor-name:
4876     :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
4877     :: [opt] nested-name-specifier template template-id :: ~ type-name
4878     :: [opt] nested-name-specifier [opt] ~ type-name
4879
4880   If either of the first two productions is used, sets *SCOPE to the
4881   TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
4882   NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
4883   or ERROR_MARK_NODE if the parse fails.  */
4884
4885static void
4886cp_parser_pseudo_destructor_name (cp_parser* parser,
4887				  tree* scope,
4888				  tree* type)
4889{
4890  bool nested_name_specifier_p;
4891
4892  /* Assume that things will not work out.  */
4893  *type = error_mark_node;
4894
4895  /* Look for the optional `::' operator.  */
4896  cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
4897  /* Look for the optional nested-name-specifier.  */
4898  nested_name_specifier_p
4899    = (cp_parser_nested_name_specifier_opt (parser,
4900					    /*typename_keyword_p=*/false,
4901					    /*check_dependency_p=*/true,
4902					    /*type_p=*/false,
4903					    /*is_declaration=*/true)
4904       != NULL_TREE);
4905  /* Now, if we saw a nested-name-specifier, we might be doing the
4906     second production.  */
4907  if (nested_name_specifier_p
4908      && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
4909    {
4910      /* Consume the `template' keyword.  */
4911      cp_lexer_consume_token (parser->lexer);
4912      /* Parse the template-id.  */
4913      cp_parser_template_id (parser,
4914			     /*template_keyword_p=*/true,
4915			     /*check_dependency_p=*/false,
4916			     /*is_declaration=*/true);
4917      /* Look for the `::' token.  */
4918      cp_parser_require (parser, CPP_SCOPE, "`::'");
4919    }
4920  /* If the next token is not a `~', then there might be some
4921     additional qualification.  */
4922  else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
4923    {
4924      /* Look for the type-name.  */
4925      *scope = TREE_TYPE (cp_parser_type_name (parser));
4926
4927      if (*scope == error_mark_node)
4928	return;
4929
4930      /* If we don't have ::~, then something has gone wrong.  Since
4931	 the only caller of this function is looking for something
4932	 after `.' or `->' after a scalar type, most likely the
4933	 program is trying to get a member of a non-aggregate
4934	 type.  */
4935      if (cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE)
4936	  || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_COMPL)
4937	{
4938	  cp_parser_error (parser, "request for member of non-aggregate type");
4939	  return;
4940	}
4941
4942      /* Look for the `::' token.  */
4943      cp_parser_require (parser, CPP_SCOPE, "`::'");
4944    }
4945  else
4946    *scope = NULL_TREE;
4947
4948  /* Look for the `~'.  */
4949  cp_parser_require (parser, CPP_COMPL, "`~'");
4950  /* Look for the type-name again.  We are not responsible for
4951     checking that it matches the first type-name.  */
4952  *type = cp_parser_type_name (parser);
4953}
4954
4955/* Parse a unary-expression.
4956
4957   unary-expression:
4958     postfix-expression
4959     ++ cast-expression
4960     -- cast-expression
4961     unary-operator cast-expression
4962     sizeof unary-expression
4963     sizeof ( type-id )
4964     new-expression
4965     delete-expression
4966
4967   GNU Extensions:
4968
4969   unary-expression:
4970     __extension__ cast-expression
4971     __alignof__ unary-expression
4972     __alignof__ ( type-id )
4973     __real__ cast-expression
4974     __imag__ cast-expression
4975     && identifier
4976
4977   ADDRESS_P is true iff the unary-expression is appearing as the
4978   operand of the `&' operator.   CAST_P is true if this expression is
4979   the target of a cast.
4980
4981   Returns a representation of the expression.  */
4982
4983static tree
4984cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p)
4985{
4986  cp_token *token;
4987  enum tree_code unary_operator;
4988
4989  /* Peek at the next token.  */
4990  token = cp_lexer_peek_token (parser->lexer);
4991  /* Some keywords give away the kind of expression.  */
4992  if (token->type == CPP_KEYWORD)
4993    {
4994      enum rid keyword = token->keyword;
4995
4996      switch (keyword)
4997	{
4998	case RID_ALIGNOF:
4999	case RID_SIZEOF:
5000	  {
5001	    tree operand;
5002	    enum tree_code op;
5003
5004	    op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
5005	    /* Consume the token.  */
5006	    cp_lexer_consume_token (parser->lexer);
5007	    /* Parse the operand.  */
5008	    operand = cp_parser_sizeof_operand (parser, keyword);
5009
5010	    if (TYPE_P (operand))
5011	      return cxx_sizeof_or_alignof_type (operand, op, true);
5012	    else
5013	      return cxx_sizeof_or_alignof_expr (operand, op);
5014	  }
5015
5016	case RID_NEW:
5017	  return cp_parser_new_expression (parser);
5018
5019	case RID_DELETE:
5020	  return cp_parser_delete_expression (parser);
5021
5022	case RID_EXTENSION:
5023	  {
5024	    /* The saved value of the PEDANTIC flag.  */
5025	    int saved_pedantic;
5026	    tree expr;
5027
5028	    /* Save away the PEDANTIC flag.  */
5029	    cp_parser_extension_opt (parser, &saved_pedantic);
5030	    /* Parse the cast-expression.  */
5031	    expr = cp_parser_simple_cast_expression (parser);
5032	    /* Restore the PEDANTIC flag.  */
5033	    pedantic = saved_pedantic;
5034
5035	    return expr;
5036	  }
5037
5038	case RID_REALPART:
5039	case RID_IMAGPART:
5040	  {
5041	    tree expression;
5042
5043	    /* Consume the `__real__' or `__imag__' token.  */
5044	    cp_lexer_consume_token (parser->lexer);
5045	    /* Parse the cast-expression.  */
5046	    expression = cp_parser_simple_cast_expression (parser);
5047	    /* Create the complete representation.  */
5048	    return build_x_unary_op ((keyword == RID_REALPART
5049				      ? REALPART_EXPR : IMAGPART_EXPR),
5050				     expression);
5051	  }
5052	  break;
5053
5054	default:
5055	  break;
5056	}
5057    }
5058
5059  /* Look for the `:: new' and `:: delete', which also signal the
5060     beginning of a new-expression, or delete-expression,
5061     respectively.  If the next token is `::', then it might be one of
5062     these.  */
5063  if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
5064    {
5065      enum rid keyword;
5066
5067      /* See if the token after the `::' is one of the keywords in
5068	 which we're interested.  */
5069      keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
5070      /* If it's `new', we have a new-expression.  */
5071      if (keyword == RID_NEW)
5072	return cp_parser_new_expression (parser);
5073      /* Similarly, for `delete'.  */
5074      else if (keyword == RID_DELETE)
5075	return cp_parser_delete_expression (parser);
5076    }
5077
5078  /* Look for a unary operator.  */
5079  unary_operator = cp_parser_unary_operator (token);
5080  /* The `++' and `--' operators can be handled similarly, even though
5081     they are not technically unary-operators in the grammar.  */
5082  if (unary_operator == ERROR_MARK)
5083    {
5084      if (token->type == CPP_PLUS_PLUS)
5085	unary_operator = PREINCREMENT_EXPR;
5086      else if (token->type == CPP_MINUS_MINUS)
5087	unary_operator = PREDECREMENT_EXPR;
5088      /* Handle the GNU address-of-label extension.  */
5089      else if (cp_parser_allow_gnu_extensions_p (parser)
5090	       && token->type == CPP_AND_AND)
5091	{
5092	  tree identifier;
5093
5094	  /* Consume the '&&' token.  */
5095	  cp_lexer_consume_token (parser->lexer);
5096	  /* Look for the identifier.  */
5097	  identifier = cp_parser_identifier (parser);
5098	  /* Create an expression representing the address.  */
5099	  return finish_label_address_expr (identifier);
5100	}
5101    }
5102  if (unary_operator != ERROR_MARK)
5103    {
5104      tree cast_expression;
5105      tree expression = error_mark_node;
5106      const char *non_constant_p = NULL;
5107
5108      /* Consume the operator token.  */
5109      token = cp_lexer_consume_token (parser->lexer);
5110      /* Parse the cast-expression.  */
5111      cast_expression
5112	= cp_parser_cast_expression (parser,
5113				     unary_operator == ADDR_EXPR,
5114				     /*cast_p=*/false);
5115      /* Now, build an appropriate representation.  */
5116      switch (unary_operator)
5117	{
5118	case INDIRECT_REF:
5119	  non_constant_p = "`*'";
5120	  expression = build_x_indirect_ref (cast_expression, "unary *");
5121	  break;
5122
5123	case ADDR_EXPR:
5124	  non_constant_p = "`&'";
5125	  /* Fall through.  */
5126	case BIT_NOT_EXPR:
5127	  expression = build_x_unary_op (unary_operator, cast_expression);
5128	  break;
5129
5130	case PREINCREMENT_EXPR:
5131	case PREDECREMENT_EXPR:
5132	  non_constant_p = (unary_operator == PREINCREMENT_EXPR
5133			    ? "`++'" : "`--'");
5134	  /* Fall through.  */
5135	case UNARY_PLUS_EXPR:
5136	case NEGATE_EXPR:
5137	case TRUTH_NOT_EXPR:
5138	  expression = finish_unary_op_expr (unary_operator, cast_expression);
5139	  break;
5140
5141	default:
5142	  gcc_unreachable ();
5143	}
5144
5145      if (non_constant_p
5146	  && cp_parser_non_integral_constant_expression (parser,
5147							 non_constant_p))
5148	expression = error_mark_node;
5149
5150      return expression;
5151    }
5152
5153  return cp_parser_postfix_expression (parser, address_p, cast_p);
5154}
5155
5156/* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
5157   unary-operator, the corresponding tree code is returned.  */
5158
5159static enum tree_code
5160cp_parser_unary_operator (cp_token* token)
5161{
5162  switch (token->type)
5163    {
5164    case CPP_MULT:
5165      return INDIRECT_REF;
5166
5167    case CPP_AND:
5168      return ADDR_EXPR;
5169
5170    case CPP_PLUS:
5171      return UNARY_PLUS_EXPR;
5172
5173    case CPP_MINUS:
5174      return NEGATE_EXPR;
5175
5176    case CPP_NOT:
5177      return TRUTH_NOT_EXPR;
5178
5179    case CPP_COMPL:
5180      return BIT_NOT_EXPR;
5181
5182    default:
5183      return ERROR_MARK;
5184    }
5185}
5186
5187/* Parse a new-expression.
5188
5189   new-expression:
5190     :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
5191     :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
5192
5193   Returns a representation of the expression.  */
5194
5195static tree
5196cp_parser_new_expression (cp_parser* parser)
5197{
5198  bool global_scope_p;
5199  tree placement;
5200  tree type;
5201  tree initializer;
5202  tree nelts;
5203
5204  /* Look for the optional `::' operator.  */
5205  global_scope_p
5206    = (cp_parser_global_scope_opt (parser,
5207				   /*current_scope_valid_p=*/false)
5208       != NULL_TREE);
5209  /* Look for the `new' operator.  */
5210  cp_parser_require_keyword (parser, RID_NEW, "`new'");
5211  /* There's no easy way to tell a new-placement from the
5212     `( type-id )' construct.  */
5213  cp_parser_parse_tentatively (parser);
5214  /* Look for a new-placement.  */
5215  placement = cp_parser_new_placement (parser);
5216  /* If that didn't work out, there's no new-placement.  */
5217  if (!cp_parser_parse_definitely (parser))
5218    placement = NULL_TREE;
5219
5220  /* If the next token is a `(', then we have a parenthesized
5221     type-id.  */
5222  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5223    {
5224      /* Consume the `('.  */
5225      cp_lexer_consume_token (parser->lexer);
5226      /* Parse the type-id.  */
5227      type = cp_parser_type_id (parser);
5228      /* Look for the closing `)'.  */
5229      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5230      /* There should not be a direct-new-declarator in this production,
5231	 but GCC used to allowed this, so we check and emit a sensible error
5232	 message for this case.  */
5233      if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5234	{
5235	  error ("array bound forbidden after parenthesized type-id");
5236	  inform ("try removing the parentheses around the type-id");
5237	  cp_parser_direct_new_declarator (parser);
5238	}
5239      nelts = NULL_TREE;
5240    }
5241  /* Otherwise, there must be a new-type-id.  */
5242  else
5243    type = cp_parser_new_type_id (parser, &nelts);
5244
5245  /* If the next token is a `(', then we have a new-initializer.  */
5246  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5247    initializer = cp_parser_new_initializer (parser);
5248  else
5249    initializer = NULL_TREE;
5250
5251  /* A new-expression may not appear in an integral constant
5252     expression.  */
5253  if (cp_parser_non_integral_constant_expression (parser, "`new'"))
5254    return error_mark_node;
5255
5256  /* Create a representation of the new-expression.  */
5257  return build_new (placement, type, nelts, initializer, global_scope_p);
5258}
5259
5260/* Parse a new-placement.
5261
5262   new-placement:
5263     ( expression-list )
5264
5265   Returns the same representation as for an expression-list.  */
5266
5267static tree
5268cp_parser_new_placement (cp_parser* parser)
5269{
5270  tree expression_list;
5271
5272  /* Parse the expression-list.  */
5273  expression_list = (cp_parser_parenthesized_expression_list
5274		     (parser, false, /*cast_p=*/false,
5275		      /*non_constant_p=*/NULL));
5276
5277  return expression_list;
5278}
5279
5280/* Parse a new-type-id.
5281
5282   new-type-id:
5283     type-specifier-seq new-declarator [opt]
5284
5285   Returns the TYPE allocated.  If the new-type-id indicates an array
5286   type, *NELTS is set to the number of elements in the last array
5287   bound; the TYPE will not include the last array bound.  */
5288
5289static tree
5290cp_parser_new_type_id (cp_parser* parser, tree *nelts)
5291{
5292  cp_decl_specifier_seq type_specifier_seq;
5293  cp_declarator *new_declarator;
5294  cp_declarator *declarator;
5295  cp_declarator *outer_declarator;
5296  const char *saved_message;
5297  tree type;
5298
5299  /* The type-specifier sequence must not contain type definitions.
5300     (It cannot contain declarations of new types either, but if they
5301     are not definitions we will catch that because they are not
5302     complete.)  */
5303  saved_message = parser->type_definition_forbidden_message;
5304  parser->type_definition_forbidden_message
5305    = "types may not be defined in a new-type-id";
5306  /* Parse the type-specifier-seq.  */
5307  cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
5308				&type_specifier_seq);
5309  /* Restore the old message.  */
5310  parser->type_definition_forbidden_message = saved_message;
5311  /* Parse the new-declarator.  */
5312  new_declarator = cp_parser_new_declarator_opt (parser);
5313
5314  /* Determine the number of elements in the last array dimension, if
5315     any.  */
5316  *nelts = NULL_TREE;
5317  /* Skip down to the last array dimension.  */
5318  declarator = new_declarator;
5319  outer_declarator = NULL;
5320  while (declarator && (declarator->kind == cdk_pointer
5321			|| declarator->kind == cdk_ptrmem))
5322    {
5323      outer_declarator = declarator;
5324      declarator = declarator->declarator;
5325    }
5326  while (declarator
5327	 && declarator->kind == cdk_array
5328	 && declarator->declarator
5329	 && declarator->declarator->kind == cdk_array)
5330    {
5331      outer_declarator = declarator;
5332      declarator = declarator->declarator;
5333    }
5334
5335  if (declarator && declarator->kind == cdk_array)
5336    {
5337      *nelts = declarator->u.array.bounds;
5338      if (*nelts == error_mark_node)
5339	*nelts = integer_one_node;
5340
5341      if (outer_declarator)
5342	outer_declarator->declarator = declarator->declarator;
5343      else
5344	new_declarator = NULL;
5345    }
5346
5347  type = groktypename (&type_specifier_seq, new_declarator);
5348  if (TREE_CODE (type) == ARRAY_TYPE && *nelts == NULL_TREE)
5349    {
5350      *nelts = array_type_nelts_top (type);
5351      type = TREE_TYPE (type);
5352    }
5353  return type;
5354}
5355
5356/* Parse an (optional) new-declarator.
5357
5358   new-declarator:
5359     ptr-operator new-declarator [opt]
5360     direct-new-declarator
5361
5362   Returns the declarator.  */
5363
5364static cp_declarator *
5365cp_parser_new_declarator_opt (cp_parser* parser)
5366{
5367  enum tree_code code;
5368  tree type;
5369  cp_cv_quals cv_quals;
5370
5371  /* We don't know if there's a ptr-operator next, or not.  */
5372  cp_parser_parse_tentatively (parser);
5373  /* Look for a ptr-operator.  */
5374  code = cp_parser_ptr_operator (parser, &type, &cv_quals);
5375  /* If that worked, look for more new-declarators.  */
5376  if (cp_parser_parse_definitely (parser))
5377    {
5378      cp_declarator *declarator;
5379
5380      /* Parse another optional declarator.  */
5381      declarator = cp_parser_new_declarator_opt (parser);
5382
5383      /* Create the representation of the declarator.  */
5384      if (type)
5385	declarator = make_ptrmem_declarator (cv_quals, type, declarator);
5386      else if (code == INDIRECT_REF)
5387	declarator = make_pointer_declarator (cv_quals, declarator);
5388      else
5389	declarator = make_reference_declarator (cv_quals, declarator);
5390
5391      return declarator;
5392    }
5393
5394  /* If the next token is a `[', there is a direct-new-declarator.  */
5395  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5396    return cp_parser_direct_new_declarator (parser);
5397
5398  return NULL;
5399}
5400
5401/* Parse a direct-new-declarator.
5402
5403   direct-new-declarator:
5404     [ expression ]
5405     direct-new-declarator [constant-expression]
5406
5407   */
5408
5409static cp_declarator *
5410cp_parser_direct_new_declarator (cp_parser* parser)
5411{
5412  cp_declarator *declarator = NULL;
5413
5414  while (true)
5415    {
5416      tree expression;
5417
5418      /* Look for the opening `['.  */
5419      cp_parser_require (parser, CPP_OPEN_SQUARE, "`['");
5420      /* The first expression is not required to be constant.  */
5421      if (!declarator)
5422	{
5423	  expression = cp_parser_expression (parser, /*cast_p=*/false);
5424	  /* The standard requires that the expression have integral
5425	     type.  DR 74 adds enumeration types.  We believe that the
5426	     real intent is that these expressions be handled like the
5427	     expression in a `switch' condition, which also allows
5428	     classes with a single conversion to integral or
5429	     enumeration type.  */
5430	  if (!processing_template_decl)
5431	    {
5432	      expression
5433		= build_expr_type_conversion (WANT_INT | WANT_ENUM,
5434					      expression,
5435					      /*complain=*/true);
5436	      if (!expression)
5437		{
5438		  error ("expression in new-declarator must have integral "
5439			 "or enumeration type");
5440		  expression = error_mark_node;
5441		}
5442	    }
5443	}
5444      /* But all the other expressions must be.  */
5445      else
5446	expression
5447	  = cp_parser_constant_expression (parser,
5448					   /*allow_non_constant=*/false,
5449					   NULL);
5450      /* Look for the closing `]'.  */
5451      cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5452
5453      /* Add this bound to the declarator.  */
5454      declarator = make_array_declarator (declarator, expression);
5455
5456      /* If the next token is not a `[', then there are no more
5457	 bounds.  */
5458      if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
5459	break;
5460    }
5461
5462  return declarator;
5463}
5464
5465/* Parse a new-initializer.
5466
5467   new-initializer:
5468     ( expression-list [opt] )
5469
5470   Returns a representation of the expression-list.  If there is no
5471   expression-list, VOID_ZERO_NODE is returned.  */
5472
5473static tree
5474cp_parser_new_initializer (cp_parser* parser)
5475{
5476  tree expression_list;
5477
5478  expression_list = (cp_parser_parenthesized_expression_list
5479		     (parser, false, /*cast_p=*/false,
5480		      /*non_constant_p=*/NULL));
5481  if (!expression_list)
5482    expression_list = void_zero_node;
5483
5484  return expression_list;
5485}
5486
5487/* Parse a delete-expression.
5488
5489   delete-expression:
5490     :: [opt] delete cast-expression
5491     :: [opt] delete [ ] cast-expression
5492
5493   Returns a representation of the expression.  */
5494
5495static tree
5496cp_parser_delete_expression (cp_parser* parser)
5497{
5498  bool global_scope_p;
5499  bool array_p;
5500  tree expression;
5501
5502  /* Look for the optional `::' operator.  */
5503  global_scope_p
5504    = (cp_parser_global_scope_opt (parser,
5505				   /*current_scope_valid_p=*/false)
5506       != NULL_TREE);
5507  /* Look for the `delete' keyword.  */
5508  cp_parser_require_keyword (parser, RID_DELETE, "`delete'");
5509  /* See if the array syntax is in use.  */
5510  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5511    {
5512      /* Consume the `[' token.  */
5513      cp_lexer_consume_token (parser->lexer);
5514      /* Look for the `]' token.  */
5515      cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5516      /* Remember that this is the `[]' construct.  */
5517      array_p = true;
5518    }
5519  else
5520    array_p = false;
5521
5522  /* Parse the cast-expression.  */
5523  expression = cp_parser_simple_cast_expression (parser);
5524
5525  /* A delete-expression may not appear in an integral constant
5526     expression.  */
5527  if (cp_parser_non_integral_constant_expression (parser, "`delete'"))
5528    return error_mark_node;
5529
5530  return delete_sanity (expression, NULL_TREE, array_p, global_scope_p);
5531}
5532
5533/* Parse a cast-expression.
5534
5535   cast-expression:
5536     unary-expression
5537     ( type-id ) cast-expression
5538
5539   ADDRESS_P is true iff the unary-expression is appearing as the
5540   operand of the `&' operator.   CAST_P is true if this expression is
5541   the target of a cast.
5542
5543   Returns a representation of the expression.  */
5544
5545static tree
5546cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p)
5547{
5548  /* If it's a `(', then we might be looking at a cast.  */
5549  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5550    {
5551      tree type = NULL_TREE;
5552      tree expr = NULL_TREE;
5553      bool compound_literal_p;
5554      const char *saved_message;
5555
5556      /* There's no way to know yet whether or not this is a cast.
5557	 For example, `(int (3))' is a unary-expression, while `(int)
5558	 3' is a cast.  So, we resort to parsing tentatively.  */
5559      cp_parser_parse_tentatively (parser);
5560      /* Types may not be defined in a cast.  */
5561      saved_message = parser->type_definition_forbidden_message;
5562      parser->type_definition_forbidden_message
5563	= "types may not be defined in casts";
5564      /* Consume the `('.  */
5565      cp_lexer_consume_token (parser->lexer);
5566      /* A very tricky bit is that `(struct S) { 3 }' is a
5567	 compound-literal (which we permit in C++ as an extension).
5568	 But, that construct is not a cast-expression -- it is a
5569	 postfix-expression.  (The reason is that `(struct S) { 3 }.i'
5570	 is legal; if the compound-literal were a cast-expression,
5571	 you'd need an extra set of parentheses.)  But, if we parse
5572	 the type-id, and it happens to be a class-specifier, then we
5573	 will commit to the parse at that point, because we cannot
5574	 undo the action that is done when creating a new class.  So,
5575	 then we cannot back up and do a postfix-expression.
5576
5577	 Therefore, we scan ahead to the closing `)', and check to see
5578	 if the token after the `)' is a `{'.  If so, we are not
5579	 looking at a cast-expression.
5580
5581	 Save tokens so that we can put them back.  */
5582      cp_lexer_save_tokens (parser->lexer);
5583      /* Skip tokens until the next token is a closing parenthesis.
5584	 If we find the closing `)', and the next token is a `{', then
5585	 we are looking at a compound-literal.  */
5586      compound_literal_p
5587	= (cp_parser_skip_to_closing_parenthesis (parser, false, false,
5588						  /*consume_paren=*/true)
5589	   && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
5590      /* Roll back the tokens we skipped.  */
5591      cp_lexer_rollback_tokens (parser->lexer);
5592      /* If we were looking at a compound-literal, simulate an error
5593	 so that the call to cp_parser_parse_definitely below will
5594	 fail.  */
5595      if (compound_literal_p)
5596	cp_parser_simulate_error (parser);
5597      else
5598	{
5599	  bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5600	  parser->in_type_id_in_expr_p = true;
5601	  /* Look for the type-id.  */
5602	  type = cp_parser_type_id (parser);
5603	  /* Look for the closing `)'.  */
5604	  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5605	  parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5606	}
5607
5608      /* Restore the saved message.  */
5609      parser->type_definition_forbidden_message = saved_message;
5610
5611      /* If ok so far, parse the dependent expression. We cannot be
5612	 sure it is a cast. Consider `(T ())'.  It is a parenthesized
5613	 ctor of T, but looks like a cast to function returning T
5614	 without a dependent expression.  */
5615      if (!cp_parser_error_occurred (parser))
5616	expr = cp_parser_cast_expression (parser,
5617					  /*address_p=*/false,
5618					  /*cast_p=*/true);
5619
5620      if (cp_parser_parse_definitely (parser))
5621	{
5622	  /* Warn about old-style casts, if so requested.  */
5623	  if (warn_old_style_cast
5624	      && !in_system_header
5625	      && !VOID_TYPE_P (type)
5626	      && current_lang_name != lang_name_c)
5627	    warning (OPT_Wold_style_cast, "use of old-style cast");
5628
5629	  /* Only type conversions to integral or enumeration types
5630	     can be used in constant-expressions.  */
5631	  if (!cast_valid_in_integral_constant_expression_p (type)
5632	      && (cp_parser_non_integral_constant_expression
5633		  (parser,
5634		   "a cast to a type other than an integral or "
5635		   "enumeration type")))
5636	    return error_mark_node;
5637
5638	  /* Perform the cast.  */
5639	  expr = build_c_cast (type, expr);
5640	  return expr;
5641	}
5642    }
5643
5644  /* If we get here, then it's not a cast, so it must be a
5645     unary-expression.  */
5646  return cp_parser_unary_expression (parser, address_p, cast_p);
5647}
5648
5649/* Parse a binary expression of the general form:
5650
5651   pm-expression:
5652     cast-expression
5653     pm-expression .* cast-expression
5654     pm-expression ->* cast-expression
5655
5656   multiplicative-expression:
5657     pm-expression
5658     multiplicative-expression * pm-expression
5659     multiplicative-expression / pm-expression
5660     multiplicative-expression % pm-expression
5661
5662   additive-expression:
5663     multiplicative-expression
5664     additive-expression + multiplicative-expression
5665     additive-expression - multiplicative-expression
5666
5667   shift-expression:
5668     additive-expression
5669     shift-expression << additive-expression
5670     shift-expression >> additive-expression
5671
5672   relational-expression:
5673     shift-expression
5674     relational-expression < shift-expression
5675     relational-expression > shift-expression
5676     relational-expression <= shift-expression
5677     relational-expression >= shift-expression
5678
5679  GNU Extension:
5680
5681   relational-expression:
5682     relational-expression <? shift-expression
5683     relational-expression >? shift-expression
5684
5685   equality-expression:
5686     relational-expression
5687     equality-expression == relational-expression
5688     equality-expression != relational-expression
5689
5690   and-expression:
5691     equality-expression
5692     and-expression & equality-expression
5693
5694   exclusive-or-expression:
5695     and-expression
5696     exclusive-or-expression ^ and-expression
5697
5698   inclusive-or-expression:
5699     exclusive-or-expression
5700     inclusive-or-expression | exclusive-or-expression
5701
5702   logical-and-expression:
5703     inclusive-or-expression
5704     logical-and-expression && inclusive-or-expression
5705
5706   logical-or-expression:
5707     logical-and-expression
5708     logical-or-expression || logical-and-expression
5709
5710   All these are implemented with a single function like:
5711
5712   binary-expression:
5713     simple-cast-expression
5714     binary-expression <token> binary-expression
5715
5716   CAST_P is true if this expression is the target of a cast.
5717
5718   The binops_by_token map is used to get the tree codes for each <token> type.
5719   binary-expressions are associated according to a precedence table.  */
5720
5721#define TOKEN_PRECEDENCE(token) \
5722  ((token->type == CPP_GREATER && !parser->greater_than_is_operator_p) \
5723   ? PREC_NOT_OPERATOR \
5724   : binops_by_token[token->type].prec)
5725
5726static tree
5727cp_parser_binary_expression (cp_parser* parser, bool cast_p)
5728{
5729  cp_parser_expression_stack stack;
5730  cp_parser_expression_stack_entry *sp = &stack[0];
5731  tree lhs, rhs;
5732  cp_token *token;
5733  enum tree_code tree_type;
5734  enum cp_parser_prec prec = PREC_NOT_OPERATOR, new_prec, lookahead_prec;
5735  bool overloaded_p;
5736
5737  /* Parse the first expression.  */
5738  lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p);
5739
5740  for (;;)
5741    {
5742      /* Get an operator token.  */
5743      token = cp_lexer_peek_token (parser->lexer);
5744
5745      new_prec = TOKEN_PRECEDENCE (token);
5746
5747      /* Popping an entry off the stack means we completed a subexpression:
5748	 - either we found a token which is not an operator (`>' where it is not
5749	   an operator, or prec == PREC_NOT_OPERATOR), in which case popping
5750	   will happen repeatedly;
5751	 - or, we found an operator which has lower priority.  This is the case
5752	   where the recursive descent *ascends*, as in `3 * 4 + 5' after
5753	   parsing `3 * 4'.  */
5754      if (new_prec <= prec)
5755	{
5756	  if (sp == stack)
5757	    break;
5758	  else
5759	    goto pop;
5760	}
5761
5762     get_rhs:
5763      tree_type = binops_by_token[token->type].tree_type;
5764
5765      /* We used the operator token.  */
5766      cp_lexer_consume_token (parser->lexer);
5767
5768      /* Extract another operand.  It may be the RHS of this expression
5769	 or the LHS of a new, higher priority expression.  */
5770      rhs = cp_parser_simple_cast_expression (parser);
5771
5772      /* Get another operator token.  Look up its precedence to avoid
5773	 building a useless (immediately popped) stack entry for common
5774	 cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
5775      token = cp_lexer_peek_token (parser->lexer);
5776      lookahead_prec = TOKEN_PRECEDENCE (token);
5777      if (lookahead_prec > new_prec)
5778	{
5779	  /* ... and prepare to parse the RHS of the new, higher priority
5780	     expression.  Since precedence levels on the stack are
5781	     monotonically increasing, we do not have to care about
5782	     stack overflows.  */
5783	  sp->prec = prec;
5784	  sp->tree_type = tree_type;
5785	  sp->lhs = lhs;
5786	  sp++;
5787	  lhs = rhs;
5788	  prec = new_prec;
5789	  new_prec = lookahead_prec;
5790	  goto get_rhs;
5791
5792	 pop:
5793	  /* If the stack is not empty, we have parsed into LHS the right side
5794	     (`4' in the example above) of an expression we had suspended.
5795	     We can use the information on the stack to recover the LHS (`3')
5796	     from the stack together with the tree code (`MULT_EXPR'), and
5797	     the precedence of the higher level subexpression
5798	     (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
5799	     which will be used to actually build the additive expression.  */
5800	  --sp;
5801	  prec = sp->prec;
5802	  tree_type = sp->tree_type;
5803	  rhs = lhs;
5804	  lhs = sp->lhs;
5805	}
5806
5807      overloaded_p = false;
5808      lhs = build_x_binary_op (tree_type, lhs, rhs, &overloaded_p);
5809
5810      /* If the binary operator required the use of an overloaded operator,
5811	 then this expression cannot be an integral constant-expression.
5812	 An overloaded operator can be used even if both operands are
5813	 otherwise permissible in an integral constant-expression if at
5814	 least one of the operands is of enumeration type.  */
5815
5816      if (overloaded_p
5817	  && (cp_parser_non_integral_constant_expression
5818	      (parser, "calls to overloaded operators")))
5819	return error_mark_node;
5820    }
5821
5822  return lhs;
5823}
5824
5825
5826/* Parse the `? expression : assignment-expression' part of a
5827   conditional-expression.  The LOGICAL_OR_EXPR is the
5828   logical-or-expression that started the conditional-expression.
5829   Returns a representation of the entire conditional-expression.
5830
5831   This routine is used by cp_parser_assignment_expression.
5832
5833     ? expression : assignment-expression
5834
5835   GNU Extensions:
5836
5837     ? : assignment-expression */
5838
5839static tree
5840cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
5841{
5842  tree expr;
5843  tree assignment_expr;
5844
5845  /* Consume the `?' token.  */
5846  cp_lexer_consume_token (parser->lexer);
5847  if (cp_parser_allow_gnu_extensions_p (parser)
5848      && cp_lexer_next_token_is (parser->lexer, CPP_COLON))
5849    /* Implicit true clause.  */
5850    expr = NULL_TREE;
5851  else
5852    /* Parse the expression.  */
5853    expr = cp_parser_expression (parser, /*cast_p=*/false);
5854
5855  /* The next token should be a `:'.  */
5856  cp_parser_require (parser, CPP_COLON, "`:'");
5857  /* Parse the assignment-expression.  */
5858  assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false);
5859
5860  /* Build the conditional-expression.  */
5861  return build_x_conditional_expr (logical_or_expr,
5862				   expr,
5863				   assignment_expr);
5864}
5865
5866/* Parse an assignment-expression.
5867
5868   assignment-expression:
5869     conditional-expression
5870     logical-or-expression assignment-operator assignment_expression
5871     throw-expression
5872
5873   CAST_P is true if this expression is the target of a cast.
5874
5875   Returns a representation for the expression.  */
5876
5877static tree
5878cp_parser_assignment_expression (cp_parser* parser, bool cast_p)
5879{
5880  tree expr;
5881
5882  /* If the next token is the `throw' keyword, then we're looking at
5883     a throw-expression.  */
5884  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
5885    expr = cp_parser_throw_expression (parser);
5886  /* Otherwise, it must be that we are looking at a
5887     logical-or-expression.  */
5888  else
5889    {
5890      /* Parse the binary expressions (logical-or-expression).  */
5891      expr = cp_parser_binary_expression (parser, cast_p);
5892      /* If the next token is a `?' then we're actually looking at a
5893	 conditional-expression.  */
5894      if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
5895	return cp_parser_question_colon_clause (parser, expr);
5896      else
5897	{
5898	  enum tree_code assignment_operator;
5899
5900	  /* If it's an assignment-operator, we're using the second
5901	     production.  */
5902	  assignment_operator
5903	    = cp_parser_assignment_operator_opt (parser);
5904	  if (assignment_operator != ERROR_MARK)
5905	    {
5906	      tree rhs;
5907
5908	      /* Parse the right-hand side of the assignment.  */
5909	      rhs = cp_parser_assignment_expression (parser, cast_p);
5910	      /* An assignment may not appear in a
5911		 constant-expression.  */
5912	      if (cp_parser_non_integral_constant_expression (parser,
5913							      "an assignment"))
5914		return error_mark_node;
5915	      /* Build the assignment expression.  */
5916	      expr = build_x_modify_expr (expr,
5917					  assignment_operator,
5918					  rhs);
5919	    }
5920	}
5921    }
5922
5923  return expr;
5924}
5925
5926/* Parse an (optional) assignment-operator.
5927
5928   assignment-operator: one of
5929     = *= /= %= += -= >>= <<= &= ^= |=
5930
5931   GNU Extension:
5932
5933   assignment-operator: one of
5934     <?= >?=
5935
5936   If the next token is an assignment operator, the corresponding tree
5937   code is returned, and the token is consumed.  For example, for
5938   `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
5939   NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
5940   TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
5941   operator, ERROR_MARK is returned.  */
5942
5943static enum tree_code
5944cp_parser_assignment_operator_opt (cp_parser* parser)
5945{
5946  enum tree_code op;
5947  cp_token *token;
5948
5949  /* Peek at the next toen.  */
5950  token = cp_lexer_peek_token (parser->lexer);
5951
5952  switch (token->type)
5953    {
5954    case CPP_EQ:
5955      op = NOP_EXPR;
5956      break;
5957
5958    case CPP_MULT_EQ:
5959      op = MULT_EXPR;
5960      break;
5961
5962    case CPP_DIV_EQ:
5963      op = TRUNC_DIV_EXPR;
5964      break;
5965
5966    case CPP_MOD_EQ:
5967      op = TRUNC_MOD_EXPR;
5968      break;
5969
5970    case CPP_PLUS_EQ:
5971      op = PLUS_EXPR;
5972      break;
5973
5974    case CPP_MINUS_EQ:
5975      op = MINUS_EXPR;
5976      break;
5977
5978    case CPP_RSHIFT_EQ:
5979      op = RSHIFT_EXPR;
5980      break;
5981
5982    case CPP_LSHIFT_EQ:
5983      op = LSHIFT_EXPR;
5984      break;
5985
5986    case CPP_AND_EQ:
5987      op = BIT_AND_EXPR;
5988      break;
5989
5990    case CPP_XOR_EQ:
5991      op = BIT_XOR_EXPR;
5992      break;
5993
5994    case CPP_OR_EQ:
5995      op = BIT_IOR_EXPR;
5996      break;
5997
5998    default:
5999      /* Nothing else is an assignment operator.  */
6000      op = ERROR_MARK;
6001    }
6002
6003  /* If it was an assignment operator, consume it.  */
6004  if (op != ERROR_MARK)
6005    cp_lexer_consume_token (parser->lexer);
6006
6007  return op;
6008}
6009
6010/* Parse an expression.
6011
6012   expression:
6013     assignment-expression
6014     expression , assignment-expression
6015
6016   CAST_P is true if this expression is the target of a cast.
6017
6018   Returns a representation of the expression.  */
6019
6020static tree
6021cp_parser_expression (cp_parser* parser, bool cast_p)
6022{
6023  tree expression = NULL_TREE;
6024
6025  while (true)
6026    {
6027      tree assignment_expression;
6028
6029      /* Parse the next assignment-expression.  */
6030      assignment_expression
6031	= cp_parser_assignment_expression (parser, cast_p);
6032      /* If this is the first assignment-expression, we can just
6033	 save it away.  */
6034      if (!expression)
6035	expression = assignment_expression;
6036      else
6037	expression = build_x_compound_expr (expression,
6038					    assignment_expression);
6039      /* If the next token is not a comma, then we are done with the
6040	 expression.  */
6041      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
6042	break;
6043      /* Consume the `,'.  */
6044      cp_lexer_consume_token (parser->lexer);
6045      /* A comma operator cannot appear in a constant-expression.  */
6046      if (cp_parser_non_integral_constant_expression (parser,
6047						      "a comma operator"))
6048	expression = error_mark_node;
6049    }
6050
6051  return expression;
6052}
6053
6054/* Parse a constant-expression.
6055
6056   constant-expression:
6057     conditional-expression
6058
6059  If ALLOW_NON_CONSTANT_P a non-constant expression is silently
6060  accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
6061  constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
6062  is false, NON_CONSTANT_P should be NULL.  */
6063
6064static tree
6065cp_parser_constant_expression (cp_parser* parser,
6066			       bool allow_non_constant_p,
6067			       bool *non_constant_p)
6068{
6069  bool saved_integral_constant_expression_p;
6070  bool saved_allow_non_integral_constant_expression_p;
6071  bool saved_non_integral_constant_expression_p;
6072  tree expression;
6073
6074  /* It might seem that we could simply parse the
6075     conditional-expression, and then check to see if it were
6076     TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
6077     one that the compiler can figure out is constant, possibly after
6078     doing some simplifications or optimizations.  The standard has a
6079     precise definition of constant-expression, and we must honor
6080     that, even though it is somewhat more restrictive.
6081
6082     For example:
6083
6084       int i[(2, 3)];
6085
6086     is not a legal declaration, because `(2, 3)' is not a
6087     constant-expression.  The `,' operator is forbidden in a
6088     constant-expression.  However, GCC's constant-folding machinery
6089     will fold this operation to an INTEGER_CST for `3'.  */
6090
6091  /* Save the old settings.  */
6092  saved_integral_constant_expression_p = parser->integral_constant_expression_p;
6093  saved_allow_non_integral_constant_expression_p
6094    = parser->allow_non_integral_constant_expression_p;
6095  saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
6096  /* We are now parsing a constant-expression.  */
6097  parser->integral_constant_expression_p = true;
6098  parser->allow_non_integral_constant_expression_p = allow_non_constant_p;
6099  parser->non_integral_constant_expression_p = false;
6100  /* Although the grammar says "conditional-expression", we parse an
6101     "assignment-expression", which also permits "throw-expression"
6102     and the use of assignment operators.  In the case that
6103     ALLOW_NON_CONSTANT_P is false, we get better errors than we would
6104     otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
6105     actually essential that we look for an assignment-expression.
6106     For example, cp_parser_initializer_clauses uses this function to
6107     determine whether a particular assignment-expression is in fact
6108     constant.  */
6109  expression = cp_parser_assignment_expression (parser, /*cast_p=*/false);
6110  /* Restore the old settings.  */
6111  parser->integral_constant_expression_p
6112    = saved_integral_constant_expression_p;
6113  parser->allow_non_integral_constant_expression_p
6114    = saved_allow_non_integral_constant_expression_p;
6115  if (allow_non_constant_p)
6116    *non_constant_p = parser->non_integral_constant_expression_p;
6117  else if (parser->non_integral_constant_expression_p)
6118    expression = error_mark_node;
6119  parser->non_integral_constant_expression_p
6120    = saved_non_integral_constant_expression_p;
6121
6122  return expression;
6123}
6124
6125/* Parse __builtin_offsetof.
6126
6127   offsetof-expression:
6128     "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
6129
6130   offsetof-member-designator:
6131     id-expression
6132     | offsetof-member-designator "." id-expression
6133     | offsetof-member-designator "[" expression "]"  */
6134
6135static tree
6136cp_parser_builtin_offsetof (cp_parser *parser)
6137{
6138  int save_ice_p, save_non_ice_p;
6139  tree type, expr;
6140  cp_id_kind dummy;
6141
6142  /* We're about to accept non-integral-constant things, but will
6143     definitely yield an integral constant expression.  Save and
6144     restore these values around our local parsing.  */
6145  save_ice_p = parser->integral_constant_expression_p;
6146  save_non_ice_p = parser->non_integral_constant_expression_p;
6147
6148  /* Consume the "__builtin_offsetof" token.  */
6149  cp_lexer_consume_token (parser->lexer);
6150  /* Consume the opening `('.  */
6151  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6152  /* Parse the type-id.  */
6153  type = cp_parser_type_id (parser);
6154  /* Look for the `,'.  */
6155  cp_parser_require (parser, CPP_COMMA, "`,'");
6156
6157  /* Build the (type *)null that begins the traditional offsetof macro.  */
6158  expr = build_static_cast (build_pointer_type (type), null_pointer_node);
6159
6160  /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
6161  expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
6162						 true, &dummy);
6163  while (true)
6164    {
6165      cp_token *token = cp_lexer_peek_token (parser->lexer);
6166      switch (token->type)
6167	{
6168	case CPP_OPEN_SQUARE:
6169	  /* offsetof-member-designator "[" expression "]" */
6170	  expr = cp_parser_postfix_open_square_expression (parser, expr, true);
6171	  break;
6172
6173	case CPP_DOT:
6174	  /* offsetof-member-designator "." identifier */
6175	  cp_lexer_consume_token (parser->lexer);
6176	  expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT, expr,
6177							 true, &dummy);
6178	  break;
6179
6180	case CPP_CLOSE_PAREN:
6181	  /* Consume the ")" token.  */
6182	  cp_lexer_consume_token (parser->lexer);
6183	  goto success;
6184
6185	default:
6186	  /* Error.  We know the following require will fail, but
6187	     that gives the proper error message.  */
6188	  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6189	  cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
6190	  expr = error_mark_node;
6191	  goto failure;
6192	}
6193    }
6194
6195 success:
6196  /* If we're processing a template, we can't finish the semantics yet.
6197     Otherwise we can fold the entire expression now.  */
6198  if (processing_template_decl)
6199    expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
6200  else
6201    expr = finish_offsetof (expr);
6202
6203 failure:
6204  parser->integral_constant_expression_p = save_ice_p;
6205  parser->non_integral_constant_expression_p = save_non_ice_p;
6206
6207  return expr;
6208}
6209
6210/* Statements [gram.stmt.stmt]  */
6211
6212/* Parse a statement.
6213
6214   statement:
6215     labeled-statement
6216     expression-statement
6217     compound-statement
6218     selection-statement
6219     iteration-statement
6220     jump-statement
6221     declaration-statement
6222     try-block
6223
6224  IN_COMPOUND is true when the statement is nested inside a
6225  cp_parser_compound_statement; this matters for certain pragmas.  */
6226
6227static void
6228cp_parser_statement (cp_parser* parser, tree in_statement_expr,
6229		     bool in_compound)
6230{
6231  tree statement;
6232  cp_token *token;
6233  location_t statement_location;
6234
6235 restart:
6236  /* There is no statement yet.  */
6237  statement = NULL_TREE;
6238  /* Peek at the next token.  */
6239  token = cp_lexer_peek_token (parser->lexer);
6240  /* Remember the location of the first token in the statement.  */
6241  statement_location = token->location;
6242  /* If this is a keyword, then that will often determine what kind of
6243     statement we have.  */
6244  if (token->type == CPP_KEYWORD)
6245    {
6246      enum rid keyword = token->keyword;
6247
6248      switch (keyword)
6249	{
6250	case RID_CASE:
6251	case RID_DEFAULT:
6252	  /* Looks like a labeled-statement with a case label.
6253	     Parse the label, and then use tail recursion to parse
6254	     the statement.  */
6255	  cp_parser_label_for_labeled_statement (parser);
6256	  goto restart;
6257
6258	case RID_IF:
6259	case RID_SWITCH:
6260	  statement = cp_parser_selection_statement (parser);
6261	  break;
6262
6263	case RID_WHILE:
6264	case RID_DO:
6265	case RID_FOR:
6266	  statement = cp_parser_iteration_statement (parser);
6267	  break;
6268
6269	case RID_BREAK:
6270	case RID_CONTINUE:
6271	case RID_RETURN:
6272	case RID_GOTO:
6273	  statement = cp_parser_jump_statement (parser);
6274	  break;
6275
6276	  /* Objective-C++ exception-handling constructs.  */
6277	case RID_AT_TRY:
6278	case RID_AT_CATCH:
6279	case RID_AT_FINALLY:
6280	case RID_AT_SYNCHRONIZED:
6281	case RID_AT_THROW:
6282	  statement = cp_parser_objc_statement (parser);
6283	  break;
6284
6285	case RID_TRY:
6286	  statement = cp_parser_try_block (parser);
6287	  break;
6288
6289	default:
6290	  /* It might be a keyword like `int' that can start a
6291	     declaration-statement.  */
6292	  break;
6293	}
6294    }
6295  else if (token->type == CPP_NAME)
6296    {
6297      /* If the next token is a `:', then we are looking at a
6298	 labeled-statement.  */
6299      token = cp_lexer_peek_nth_token (parser->lexer, 2);
6300      if (token->type == CPP_COLON)
6301	{
6302	  /* Looks like a labeled-statement with an ordinary label.
6303	     Parse the label, and then use tail recursion to parse
6304	     the statement.  */
6305	  cp_parser_label_for_labeled_statement (parser);
6306	  goto restart;
6307	}
6308    }
6309  /* Anything that starts with a `{' must be a compound-statement.  */
6310  else if (token->type == CPP_OPEN_BRACE)
6311    statement = cp_parser_compound_statement (parser, NULL, false);
6312  /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
6313     a statement all its own.  */
6314  else if (token->type == CPP_PRAGMA)
6315    {
6316      /* Only certain OpenMP pragmas are attached to statements, and thus
6317	 are considered statements themselves.  All others are not.  In
6318	 the context of a compound, accept the pragma as a "statement" and
6319	 return so that we can check for a close brace.  Otherwise we
6320	 require a real statement and must go back and read one.  */
6321      if (in_compound)
6322	cp_parser_pragma (parser, pragma_compound);
6323      else if (!cp_parser_pragma (parser, pragma_stmt))
6324	goto restart;
6325      return;
6326    }
6327  else if (token->type == CPP_EOF)
6328    {
6329      cp_parser_error (parser, "expected statement");
6330      return;
6331    }
6332
6333  /* Everything else must be a declaration-statement or an
6334     expression-statement.  Try for the declaration-statement
6335     first, unless we are looking at a `;', in which case we know that
6336     we have an expression-statement.  */
6337  if (!statement)
6338    {
6339      if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6340	{
6341	  cp_parser_parse_tentatively (parser);
6342	  /* Try to parse the declaration-statement.  */
6343	  cp_parser_declaration_statement (parser);
6344	  /* If that worked, we're done.  */
6345	  if (cp_parser_parse_definitely (parser))
6346	    return;
6347	}
6348      /* Look for an expression-statement instead.  */
6349      statement = cp_parser_expression_statement (parser, in_statement_expr);
6350    }
6351
6352  /* Set the line number for the statement.  */
6353  if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
6354    SET_EXPR_LOCATION (statement, statement_location);
6355}
6356
6357/* Parse the label for a labeled-statement, i.e.
6358
6359   identifier :
6360   case constant-expression :
6361   default :
6362
6363   GNU Extension:
6364   case constant-expression ... constant-expression : statement
6365
6366   When a label is parsed without errors, the label is added to the
6367   parse tree by the finish_* functions, so this function doesn't
6368   have to return the label.  */
6369
6370static void
6371cp_parser_label_for_labeled_statement (cp_parser* parser)
6372{
6373  cp_token *token;
6374
6375  /* The next token should be an identifier.  */
6376  token = cp_lexer_peek_token (parser->lexer);
6377  if (token->type != CPP_NAME
6378      && token->type != CPP_KEYWORD)
6379    {
6380      cp_parser_error (parser, "expected labeled-statement");
6381      return;
6382    }
6383
6384  switch (token->keyword)
6385    {
6386    case RID_CASE:
6387      {
6388	tree expr, expr_hi;
6389	cp_token *ellipsis;
6390
6391	/* Consume the `case' token.  */
6392	cp_lexer_consume_token (parser->lexer);
6393	/* Parse the constant-expression.  */
6394	expr = cp_parser_constant_expression (parser,
6395					      /*allow_non_constant_p=*/false,
6396					      NULL);
6397
6398	ellipsis = cp_lexer_peek_token (parser->lexer);
6399	if (ellipsis->type == CPP_ELLIPSIS)
6400	  {
6401	    /* Consume the `...' token.  */
6402	    cp_lexer_consume_token (parser->lexer);
6403	    expr_hi =
6404	      cp_parser_constant_expression (parser,
6405					     /*allow_non_constant_p=*/false,
6406					     NULL);
6407	    /* We don't need to emit warnings here, as the common code
6408	       will do this for us.  */
6409	  }
6410	else
6411	  expr_hi = NULL_TREE;
6412
6413	if (parser->in_switch_statement_p)
6414	  finish_case_label (expr, expr_hi);
6415	else
6416	  error ("case label %qE not within a switch statement", expr);
6417      }
6418      break;
6419
6420    case RID_DEFAULT:
6421      /* Consume the `default' token.  */
6422      cp_lexer_consume_token (parser->lexer);
6423
6424      if (parser->in_switch_statement_p)
6425	finish_case_label (NULL_TREE, NULL_TREE);
6426      else
6427	error ("case label not within a switch statement");
6428      break;
6429
6430    default:
6431      /* Anything else must be an ordinary label.  */
6432      finish_label_stmt (cp_parser_identifier (parser));
6433      break;
6434    }
6435
6436  /* Require the `:' token.  */
6437  cp_parser_require (parser, CPP_COLON, "`:'");
6438}
6439
6440/* Parse an expression-statement.
6441
6442   expression-statement:
6443     expression [opt] ;
6444
6445   Returns the new EXPR_STMT -- or NULL_TREE if the expression
6446   statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
6447   indicates whether this expression-statement is part of an
6448   expression statement.  */
6449
6450static tree
6451cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
6452{
6453  tree statement = NULL_TREE;
6454
6455  /* If the next token is a ';', then there is no expression
6456     statement.  */
6457  if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6458    statement = cp_parser_expression (parser, /*cast_p=*/false);
6459
6460  /* Consume the final `;'.  */
6461  cp_parser_consume_semicolon_at_end_of_statement (parser);
6462
6463  if (in_statement_expr
6464      && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
6465    /* This is the final expression statement of a statement
6466       expression.  */
6467    statement = finish_stmt_expr_expr (statement, in_statement_expr);
6468  else if (statement)
6469    statement = finish_expr_stmt (statement);
6470  else
6471    finish_stmt ();
6472
6473  return statement;
6474}
6475
6476/* Parse a compound-statement.
6477
6478   compound-statement:
6479     { statement-seq [opt] }
6480
6481   Returns a tree representing the statement.  */
6482
6483static tree
6484cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
6485			      bool in_try)
6486{
6487  tree compound_stmt;
6488
6489  /* Consume the `{'.  */
6490  if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
6491    return error_mark_node;
6492  /* Begin the compound-statement.  */
6493  compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
6494  /* Parse an (optional) statement-seq.  */
6495  cp_parser_statement_seq_opt (parser, in_statement_expr);
6496  /* Finish the compound-statement.  */
6497  finish_compound_stmt (compound_stmt);
6498  /* Consume the `}'.  */
6499  cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6500
6501  return compound_stmt;
6502}
6503
6504/* Parse an (optional) statement-seq.
6505
6506   statement-seq:
6507     statement
6508     statement-seq [opt] statement  */
6509
6510static void
6511cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
6512{
6513  /* Scan statements until there aren't any more.  */
6514  while (true)
6515    {
6516      cp_token *token = cp_lexer_peek_token (parser->lexer);
6517
6518      /* If we're looking at a `}', then we've run out of statements.  */
6519      if (token->type == CPP_CLOSE_BRACE
6520	  || token->type == CPP_EOF
6521	  || token->type == CPP_PRAGMA_EOL)
6522	break;
6523
6524      /* Parse the statement.  */
6525      cp_parser_statement (parser, in_statement_expr, true);
6526    }
6527}
6528
6529/* Parse a selection-statement.
6530
6531   selection-statement:
6532     if ( condition ) statement
6533     if ( condition ) statement else statement
6534     switch ( condition ) statement
6535
6536   Returns the new IF_STMT or SWITCH_STMT.  */
6537
6538static tree
6539cp_parser_selection_statement (cp_parser* parser)
6540{
6541  cp_token *token;
6542  enum rid keyword;
6543
6544  /* Peek at the next token.  */
6545  token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
6546
6547  /* See what kind of keyword it is.  */
6548  keyword = token->keyword;
6549  switch (keyword)
6550    {
6551    case RID_IF:
6552    case RID_SWITCH:
6553      {
6554	tree statement;
6555	tree condition;
6556
6557	/* Look for the `('.  */
6558	if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
6559	  {
6560	    cp_parser_skip_to_end_of_statement (parser);
6561	    return error_mark_node;
6562	  }
6563
6564	/* Begin the selection-statement.  */
6565	if (keyword == RID_IF)
6566	  statement = begin_if_stmt ();
6567	else
6568	  statement = begin_switch_stmt ();
6569
6570	/* Parse the condition.  */
6571	condition = cp_parser_condition (parser);
6572	/* Look for the `)'.  */
6573	if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
6574	  cp_parser_skip_to_closing_parenthesis (parser, true, false,
6575						 /*consume_paren=*/true);
6576
6577	if (keyword == RID_IF)
6578	  {
6579	    /* Add the condition.  */
6580	    finish_if_stmt_cond (condition, statement);
6581
6582	    /* Parse the then-clause.  */
6583	    cp_parser_implicitly_scoped_statement (parser);
6584	    finish_then_clause (statement);
6585
6586	    /* If the next token is `else', parse the else-clause.  */
6587	    if (cp_lexer_next_token_is_keyword (parser->lexer,
6588						RID_ELSE))
6589	      {
6590		/* Consume the `else' keyword.  */
6591		cp_lexer_consume_token (parser->lexer);
6592		begin_else_clause (statement);
6593		/* Parse the else-clause.  */
6594		cp_parser_implicitly_scoped_statement (parser);
6595		finish_else_clause (statement);
6596	      }
6597
6598	    /* Now we're all done with the if-statement.  */
6599	    finish_if_stmt (statement);
6600	  }
6601	else
6602	  {
6603	    bool in_switch_statement_p;
6604	    unsigned char in_statement;
6605
6606	    /* Add the condition.  */
6607	    finish_switch_cond (condition, statement);
6608
6609	    /* Parse the body of the switch-statement.  */
6610	    in_switch_statement_p = parser->in_switch_statement_p;
6611	    in_statement = parser->in_statement;
6612	    parser->in_switch_statement_p = true;
6613	    parser->in_statement |= IN_SWITCH_STMT;
6614	    cp_parser_implicitly_scoped_statement (parser);
6615	    parser->in_switch_statement_p = in_switch_statement_p;
6616	    parser->in_statement = in_statement;
6617
6618	    /* Now we're all done with the switch-statement.  */
6619	    finish_switch_stmt (statement);
6620	  }
6621
6622	return statement;
6623      }
6624      break;
6625
6626    default:
6627      cp_parser_error (parser, "expected selection-statement");
6628      return error_mark_node;
6629    }
6630}
6631
6632/* Parse a condition.
6633
6634   condition:
6635     expression
6636     type-specifier-seq declarator = assignment-expression
6637
6638   GNU Extension:
6639
6640   condition:
6641     type-specifier-seq declarator asm-specification [opt]
6642       attributes [opt] = assignment-expression
6643
6644   Returns the expression that should be tested.  */
6645
6646static tree
6647cp_parser_condition (cp_parser* parser)
6648{
6649  cp_decl_specifier_seq type_specifiers;
6650  const char *saved_message;
6651
6652  /* Try the declaration first.  */
6653  cp_parser_parse_tentatively (parser);
6654  /* New types are not allowed in the type-specifier-seq for a
6655     condition.  */
6656  saved_message = parser->type_definition_forbidden_message;
6657  parser->type_definition_forbidden_message
6658    = "types may not be defined in conditions";
6659  /* Parse the type-specifier-seq.  */
6660  cp_parser_type_specifier_seq (parser, /*is_condition==*/true,
6661				&type_specifiers);
6662  /* Restore the saved message.  */
6663  parser->type_definition_forbidden_message = saved_message;
6664  /* If all is well, we might be looking at a declaration.  */
6665  if (!cp_parser_error_occurred (parser))
6666    {
6667      tree decl;
6668      tree asm_specification;
6669      tree attributes;
6670      cp_declarator *declarator;
6671      tree initializer = NULL_TREE;
6672
6673      /* Parse the declarator.  */
6674      declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
6675					 /*ctor_dtor_or_conv_p=*/NULL,
6676					 /*parenthesized_p=*/NULL,
6677					 /*member_p=*/false);
6678      /* Parse the attributes.  */
6679      attributes = cp_parser_attributes_opt (parser);
6680      /* Parse the asm-specification.  */
6681      asm_specification = cp_parser_asm_specification_opt (parser);
6682      /* If the next token is not an `=', then we might still be
6683	 looking at an expression.  For example:
6684
6685	   if (A(a).x)
6686
6687	 looks like a decl-specifier-seq and a declarator -- but then
6688	 there is no `=', so this is an expression.  */
6689      cp_parser_require (parser, CPP_EQ, "`='");
6690      /* If we did see an `=', then we are looking at a declaration
6691	 for sure.  */
6692      if (cp_parser_parse_definitely (parser))
6693	{
6694	  tree pushed_scope;
6695	  bool non_constant_p;
6696
6697	  /* Create the declaration.  */
6698	  decl = start_decl (declarator, &type_specifiers,
6699			     /*initialized_p=*/true,
6700			     attributes, /*prefix_attributes=*/NULL_TREE,
6701			     &pushed_scope);
6702	  /* Parse the assignment-expression.  */
6703	  initializer
6704	    = cp_parser_constant_expression (parser,
6705					     /*allow_non_constant_p=*/true,
6706					     &non_constant_p);
6707	  if (!non_constant_p)
6708	    initializer = fold_non_dependent_expr (initializer);
6709
6710	  /* Process the initializer.  */
6711	  cp_finish_decl (decl,
6712			  initializer, !non_constant_p,
6713			  asm_specification,
6714			  LOOKUP_ONLYCONVERTING);
6715
6716	  if (pushed_scope)
6717	    pop_scope (pushed_scope);
6718
6719	  return convert_from_reference (decl);
6720	}
6721    }
6722  /* If we didn't even get past the declarator successfully, we are
6723     definitely not looking at a declaration.  */
6724  else
6725    cp_parser_abort_tentative_parse (parser);
6726
6727  /* Otherwise, we are looking at an expression.  */
6728  return cp_parser_expression (parser, /*cast_p=*/false);
6729}
6730
6731/* Parse an iteration-statement.
6732
6733   iteration-statement:
6734     while ( condition ) statement
6735     do statement while ( expression ) ;
6736     for ( for-init-statement condition [opt] ; expression [opt] )
6737       statement
6738
6739   Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
6740
6741static tree
6742cp_parser_iteration_statement (cp_parser* parser)
6743{
6744  cp_token *token;
6745  enum rid keyword;
6746  tree statement;
6747  unsigned char in_statement;
6748
6749  /* Peek at the next token.  */
6750  token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
6751  if (!token)
6752    return error_mark_node;
6753
6754  /* Remember whether or not we are already within an iteration
6755     statement.  */
6756  in_statement = parser->in_statement;
6757
6758  /* See what kind of keyword it is.  */
6759  keyword = token->keyword;
6760  switch (keyword)
6761    {
6762    case RID_WHILE:
6763      {
6764	tree condition;
6765
6766	/* Begin the while-statement.  */
6767	statement = begin_while_stmt ();
6768	/* Look for the `('.  */
6769	cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6770	/* Parse the condition.  */
6771	condition = cp_parser_condition (parser);
6772	finish_while_stmt_cond (condition, statement);
6773	/* Look for the `)'.  */
6774	cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6775	/* Parse the dependent statement.  */
6776	parser->in_statement = IN_ITERATION_STMT;
6777	cp_parser_already_scoped_statement (parser);
6778	parser->in_statement = in_statement;
6779	/* We're done with the while-statement.  */
6780	finish_while_stmt (statement);
6781      }
6782      break;
6783
6784    case RID_DO:
6785      {
6786	tree expression;
6787
6788	/* Begin the do-statement.  */
6789	statement = begin_do_stmt ();
6790	/* Parse the body of the do-statement.  */
6791	parser->in_statement = IN_ITERATION_STMT;
6792	cp_parser_implicitly_scoped_statement (parser);
6793	parser->in_statement = in_statement;
6794	finish_do_body (statement);
6795	/* Look for the `while' keyword.  */
6796	cp_parser_require_keyword (parser, RID_WHILE, "`while'");
6797	/* Look for the `('.  */
6798	cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6799	/* Parse the expression.  */
6800	expression = cp_parser_expression (parser, /*cast_p=*/false);
6801	/* We're done with the do-statement.  */
6802	finish_do_stmt (expression, statement);
6803	/* Look for the `)'.  */
6804	cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6805	/* Look for the `;'.  */
6806	cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6807      }
6808      break;
6809
6810    case RID_FOR:
6811      {
6812	tree condition = NULL_TREE;
6813	tree expression = NULL_TREE;
6814
6815	/* Begin the for-statement.  */
6816	statement = begin_for_stmt ();
6817	/* Look for the `('.  */
6818	cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6819	/* Parse the initialization.  */
6820	cp_parser_for_init_statement (parser);
6821	finish_for_init_stmt (statement);
6822
6823	/* If there's a condition, process it.  */
6824	if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6825	  condition = cp_parser_condition (parser);
6826	finish_for_cond (condition, statement);
6827	/* Look for the `;'.  */
6828	cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6829
6830	/* If there's an expression, process it.  */
6831	if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
6832	  expression = cp_parser_expression (parser, /*cast_p=*/false);
6833	finish_for_expr (expression, statement);
6834	/* Look for the `)'.  */
6835	cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6836
6837	/* Parse the body of the for-statement.  */
6838	parser->in_statement = IN_ITERATION_STMT;
6839	cp_parser_already_scoped_statement (parser);
6840	parser->in_statement = in_statement;
6841
6842	/* We're done with the for-statement.  */
6843	finish_for_stmt (statement);
6844      }
6845      break;
6846
6847    default:
6848      cp_parser_error (parser, "expected iteration-statement");
6849      statement = error_mark_node;
6850      break;
6851    }
6852
6853  return statement;
6854}
6855
6856/* Parse a for-init-statement.
6857
6858   for-init-statement:
6859     expression-statement
6860     simple-declaration  */
6861
6862static void
6863cp_parser_for_init_statement (cp_parser* parser)
6864{
6865  /* If the next token is a `;', then we have an empty
6866     expression-statement.  Grammatically, this is also a
6867     simple-declaration, but an invalid one, because it does not
6868     declare anything.  Therefore, if we did not handle this case
6869     specially, we would issue an error message about an invalid
6870     declaration.  */
6871  if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6872    {
6873      /* We're going to speculatively look for a declaration, falling back
6874	 to an expression, if necessary.  */
6875      cp_parser_parse_tentatively (parser);
6876      /* Parse the declaration.  */
6877      cp_parser_simple_declaration (parser,
6878				    /*function_definition_allowed_p=*/false);
6879      /* If the tentative parse failed, then we shall need to look for an
6880	 expression-statement.  */
6881      if (cp_parser_parse_definitely (parser))
6882	return;
6883    }
6884
6885  cp_parser_expression_statement (parser, false);
6886}
6887
6888/* Parse a jump-statement.
6889
6890   jump-statement:
6891     break ;
6892     continue ;
6893     return expression [opt] ;
6894     goto identifier ;
6895
6896   GNU extension:
6897
6898   jump-statement:
6899     goto * expression ;
6900
6901   Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
6902
6903static tree
6904cp_parser_jump_statement (cp_parser* parser)
6905{
6906  tree statement = error_mark_node;
6907  cp_token *token;
6908  enum rid keyword;
6909
6910  /* Peek at the next token.  */
6911  token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
6912  if (!token)
6913    return error_mark_node;
6914
6915  /* See what kind of keyword it is.  */
6916  keyword = token->keyword;
6917  switch (keyword)
6918    {
6919    case RID_BREAK:
6920      switch (parser->in_statement)
6921	{
6922	case 0:
6923	  error ("break statement not within loop or switch");
6924	  break;
6925	default:
6926	  gcc_assert ((parser->in_statement & IN_SWITCH_STMT)
6927		      || parser->in_statement == IN_ITERATION_STMT);
6928	  statement = finish_break_stmt ();
6929	  break;
6930	case IN_OMP_BLOCK:
6931	  error ("invalid exit from OpenMP structured block");
6932	  break;
6933	case IN_OMP_FOR:
6934	  error ("break statement used with OpenMP for loop");
6935	  break;
6936	}
6937      cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6938      break;
6939
6940    case RID_CONTINUE:
6941      switch (parser->in_statement & ~IN_SWITCH_STMT)
6942	{
6943	case 0:
6944	  error ("continue statement not within a loop");
6945	  break;
6946	case IN_ITERATION_STMT:
6947	case IN_OMP_FOR:
6948	  statement = finish_continue_stmt ();
6949	  break;
6950	case IN_OMP_BLOCK:
6951	  error ("invalid exit from OpenMP structured block");
6952	  break;
6953	default:
6954	  gcc_unreachable ();
6955	}
6956      cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6957      break;
6958
6959    case RID_RETURN:
6960      {
6961	tree expr;
6962
6963	/* If the next token is a `;', then there is no
6964	   expression.  */
6965	if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6966	  expr = cp_parser_expression (parser, /*cast_p=*/false);
6967	else
6968	  expr = NULL_TREE;
6969	/* Build the return-statement.  */
6970	statement = finish_return_stmt (expr);
6971	/* Look for the final `;'.  */
6972	cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6973      }
6974      break;
6975
6976    case RID_GOTO:
6977      /* Create the goto-statement.  */
6978      if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
6979	{
6980	  /* Issue a warning about this use of a GNU extension.  */
6981	  if (pedantic)
6982	    pedwarn ("ISO C++ forbids computed gotos");
6983	  /* Consume the '*' token.  */
6984	  cp_lexer_consume_token (parser->lexer);
6985	  /* Parse the dependent expression.  */
6986	  finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false));
6987	}
6988      else
6989	finish_goto_stmt (cp_parser_identifier (parser));
6990      /* Look for the final `;'.  */
6991      cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6992      break;
6993
6994    default:
6995      cp_parser_error (parser, "expected jump-statement");
6996      break;
6997    }
6998
6999  return statement;
7000}
7001
7002/* Parse a declaration-statement.
7003
7004   declaration-statement:
7005     block-declaration  */
7006
7007static void
7008cp_parser_declaration_statement (cp_parser* parser)
7009{
7010  void *p;
7011
7012  /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7013  p = obstack_alloc (&declarator_obstack, 0);
7014
7015 /* Parse the block-declaration.  */
7016  cp_parser_block_declaration (parser, /*statement_p=*/true);
7017
7018  /* Free any declarators allocated.  */
7019  obstack_free (&declarator_obstack, p);
7020
7021  /* Finish off the statement.  */
7022  finish_stmt ();
7023}
7024
7025/* Some dependent statements (like `if (cond) statement'), are
7026   implicitly in their own scope.  In other words, if the statement is
7027   a single statement (as opposed to a compound-statement), it is
7028   none-the-less treated as if it were enclosed in braces.  Any
7029   declarations appearing in the dependent statement are out of scope
7030   after control passes that point.  This function parses a statement,
7031   but ensures that is in its own scope, even if it is not a
7032   compound-statement.
7033
7034   Returns the new statement.  */
7035
7036static tree
7037cp_parser_implicitly_scoped_statement (cp_parser* parser)
7038{
7039  tree statement;
7040
7041  /* Mark if () ; with a special NOP_EXPR.  */
7042  if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7043    {
7044      cp_lexer_consume_token (parser->lexer);
7045      statement = add_stmt (build_empty_stmt ());
7046    }
7047  /* if a compound is opened, we simply parse the statement directly.  */
7048  else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7049    statement = cp_parser_compound_statement (parser, NULL, false);
7050  /* If the token is not a `{', then we must take special action.  */
7051  else
7052    {
7053      /* Create a compound-statement.  */
7054      statement = begin_compound_stmt (0);
7055      /* Parse the dependent-statement.  */
7056      cp_parser_statement (parser, NULL_TREE, false);
7057      /* Finish the dummy compound-statement.  */
7058      finish_compound_stmt (statement);
7059    }
7060
7061  /* Return the statement.  */
7062  return statement;
7063}
7064
7065/* For some dependent statements (like `while (cond) statement'), we
7066   have already created a scope.  Therefore, even if the dependent
7067   statement is a compound-statement, we do not want to create another
7068   scope.  */
7069
7070static void
7071cp_parser_already_scoped_statement (cp_parser* parser)
7072{
7073  /* If the token is a `{', then we must take special action.  */
7074  if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
7075    cp_parser_statement (parser, NULL_TREE, false);
7076  else
7077    {
7078      /* Avoid calling cp_parser_compound_statement, so that we
7079	 don't create a new scope.  Do everything else by hand.  */
7080      cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
7081      cp_parser_statement_seq_opt (parser, NULL_TREE);
7082      cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7083    }
7084}
7085
7086/* Declarations [gram.dcl.dcl] */
7087
7088/* Parse an optional declaration-sequence.
7089
7090   declaration-seq:
7091     declaration
7092     declaration-seq declaration  */
7093
7094static void
7095cp_parser_declaration_seq_opt (cp_parser* parser)
7096{
7097  while (true)
7098    {
7099      cp_token *token;
7100
7101      token = cp_lexer_peek_token (parser->lexer);
7102
7103      if (token->type == CPP_CLOSE_BRACE
7104	  || token->type == CPP_EOF
7105	  || token->type == CPP_PRAGMA_EOL)
7106	break;
7107
7108      if (token->type == CPP_SEMICOLON)
7109	{
7110	  /* A declaration consisting of a single semicolon is
7111	     invalid.  Allow it unless we're being pedantic.  */
7112	  cp_lexer_consume_token (parser->lexer);
7113	  if (pedantic && !in_system_header)
7114	    pedwarn ("extra %<;%>");
7115	  continue;
7116	}
7117
7118      /* If we're entering or exiting a region that's implicitly
7119	 extern "C", modify the lang context appropriately.  */
7120      if (!parser->implicit_extern_c && token->implicit_extern_c)
7121	{
7122	  push_lang_context (lang_name_c);
7123	  parser->implicit_extern_c = true;
7124	}
7125      else if (parser->implicit_extern_c && !token->implicit_extern_c)
7126	{
7127	  pop_lang_context ();
7128	  parser->implicit_extern_c = false;
7129	}
7130
7131      if (token->type == CPP_PRAGMA)
7132	{
7133	  /* A top-level declaration can consist solely of a #pragma.
7134	     A nested declaration cannot, so this is done here and not
7135	     in cp_parser_declaration.  (A #pragma at block scope is
7136	     handled in cp_parser_statement.)  */
7137	  cp_parser_pragma (parser, pragma_external);
7138	  continue;
7139	}
7140
7141      /* Parse the declaration itself.  */
7142      cp_parser_declaration (parser);
7143    }
7144}
7145
7146/* Parse a declaration.
7147
7148   declaration:
7149     block-declaration
7150     function-definition
7151     template-declaration
7152     explicit-instantiation
7153     explicit-specialization
7154     linkage-specification
7155     namespace-definition
7156
7157   GNU extension:
7158
7159   declaration:
7160      __extension__ declaration */
7161
7162static void
7163cp_parser_declaration (cp_parser* parser)
7164{
7165  cp_token token1;
7166  cp_token token2;
7167  int saved_pedantic;
7168  void *p;
7169
7170  /* Check for the `__extension__' keyword.  */
7171  if (cp_parser_extension_opt (parser, &saved_pedantic))
7172    {
7173      /* Parse the qualified declaration.  */
7174      cp_parser_declaration (parser);
7175      /* Restore the PEDANTIC flag.  */
7176      pedantic = saved_pedantic;
7177
7178      return;
7179    }
7180
7181  /* Try to figure out what kind of declaration is present.  */
7182  token1 = *cp_lexer_peek_token (parser->lexer);
7183
7184  if (token1.type != CPP_EOF)
7185    token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
7186  else
7187    {
7188      token2.type = CPP_EOF;
7189      token2.keyword = RID_MAX;
7190    }
7191
7192  /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7193  p = obstack_alloc (&declarator_obstack, 0);
7194
7195  /* If the next token is `extern' and the following token is a string
7196     literal, then we have a linkage specification.  */
7197  if (token1.keyword == RID_EXTERN
7198      && cp_parser_is_string_literal (&token2))
7199    cp_parser_linkage_specification (parser);
7200  /* If the next token is `template', then we have either a template
7201     declaration, an explicit instantiation, or an explicit
7202     specialization.  */
7203  else if (token1.keyword == RID_TEMPLATE)
7204    {
7205      /* `template <>' indicates a template specialization.  */
7206      if (token2.type == CPP_LESS
7207	  && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
7208	cp_parser_explicit_specialization (parser);
7209      /* `template <' indicates a template declaration.  */
7210      else if (token2.type == CPP_LESS)
7211	cp_parser_template_declaration (parser, /*member_p=*/false);
7212      /* Anything else must be an explicit instantiation.  */
7213      else
7214	cp_parser_explicit_instantiation (parser);
7215    }
7216  /* If the next token is `export', then we have a template
7217     declaration.  */
7218  else if (token1.keyword == RID_EXPORT)
7219    cp_parser_template_declaration (parser, /*member_p=*/false);
7220  /* If the next token is `extern', 'static' or 'inline' and the one
7221     after that is `template', we have a GNU extended explicit
7222     instantiation directive.  */
7223  else if (cp_parser_allow_gnu_extensions_p (parser)
7224	   && (token1.keyword == RID_EXTERN
7225	       || token1.keyword == RID_STATIC
7226	       || token1.keyword == RID_INLINE)
7227	   && token2.keyword == RID_TEMPLATE)
7228    cp_parser_explicit_instantiation (parser);
7229  /* If the next token is `namespace', check for a named or unnamed
7230     namespace definition.  */
7231  else if (token1.keyword == RID_NAMESPACE
7232	   && (/* A named namespace definition.  */
7233	       (token2.type == CPP_NAME
7234		&& (cp_lexer_peek_nth_token (parser->lexer, 3)->type
7235		    != CPP_EQ))
7236	       /* An unnamed namespace definition.  */
7237	       || token2.type == CPP_OPEN_BRACE
7238	       || token2.keyword == RID_ATTRIBUTE))
7239    cp_parser_namespace_definition (parser);
7240  /* Objective-C++ declaration/definition.  */
7241  else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
7242    cp_parser_objc_declaration (parser);
7243  /* We must have either a block declaration or a function
7244     definition.  */
7245  else
7246    /* Try to parse a block-declaration, or a function-definition.  */
7247    cp_parser_block_declaration (parser, /*statement_p=*/false);
7248
7249  /* Free any declarators allocated.  */
7250  obstack_free (&declarator_obstack, p);
7251}
7252
7253/* Parse a block-declaration.
7254
7255   block-declaration:
7256     simple-declaration
7257     asm-definition
7258     namespace-alias-definition
7259     using-declaration
7260     using-directive
7261
7262   GNU Extension:
7263
7264   block-declaration:
7265     __extension__ block-declaration
7266     label-declaration
7267
7268   If STATEMENT_P is TRUE, then this block-declaration is occurring as
7269   part of a declaration-statement.  */
7270
7271static void
7272cp_parser_block_declaration (cp_parser *parser,
7273			     bool      statement_p)
7274{
7275  cp_token *token1;
7276  int saved_pedantic;
7277
7278  /* Check for the `__extension__' keyword.  */
7279  if (cp_parser_extension_opt (parser, &saved_pedantic))
7280    {
7281      /* Parse the qualified declaration.  */
7282      cp_parser_block_declaration (parser, statement_p);
7283      /* Restore the PEDANTIC flag.  */
7284      pedantic = saved_pedantic;
7285
7286      return;
7287    }
7288
7289  /* Peek at the next token to figure out which kind of declaration is
7290     present.  */
7291  token1 = cp_lexer_peek_token (parser->lexer);
7292
7293  /* If the next keyword is `asm', we have an asm-definition.  */
7294  if (token1->keyword == RID_ASM)
7295    {
7296      if (statement_p)
7297	cp_parser_commit_to_tentative_parse (parser);
7298      cp_parser_asm_definition (parser);
7299    }
7300  /* If the next keyword is `namespace', we have a
7301     namespace-alias-definition.  */
7302  else if (token1->keyword == RID_NAMESPACE)
7303    cp_parser_namespace_alias_definition (parser);
7304  /* If the next keyword is `using', we have either a
7305     using-declaration or a using-directive.  */
7306  else if (token1->keyword == RID_USING)
7307    {
7308      cp_token *token2;
7309
7310      if (statement_p)
7311	cp_parser_commit_to_tentative_parse (parser);
7312      /* If the token after `using' is `namespace', then we have a
7313	 using-directive.  */
7314      token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
7315      if (token2->keyword == RID_NAMESPACE)
7316	cp_parser_using_directive (parser);
7317      /* Otherwise, it's a using-declaration.  */
7318      else
7319	cp_parser_using_declaration (parser,
7320				     /*access_declaration_p=*/false);
7321    }
7322  /* If the next keyword is `__label__' we have a label declaration.  */
7323  else if (token1->keyword == RID_LABEL)
7324    {
7325      if (statement_p)
7326	cp_parser_commit_to_tentative_parse (parser);
7327      cp_parser_label_declaration (parser);
7328    }
7329  /* Anything else must be a simple-declaration.  */
7330  else
7331    cp_parser_simple_declaration (parser, !statement_p);
7332}
7333
7334/* Parse a simple-declaration.
7335
7336   simple-declaration:
7337     decl-specifier-seq [opt] init-declarator-list [opt] ;
7338
7339   init-declarator-list:
7340     init-declarator
7341     init-declarator-list , init-declarator
7342
7343   If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
7344   function-definition as a simple-declaration.  */
7345
7346static void
7347cp_parser_simple_declaration (cp_parser* parser,
7348			      bool function_definition_allowed_p)
7349{
7350  cp_decl_specifier_seq decl_specifiers;
7351  int declares_class_or_enum;
7352  bool saw_declarator;
7353
7354  /* Defer access checks until we know what is being declared; the
7355     checks for names appearing in the decl-specifier-seq should be
7356     done as if we were in the scope of the thing being declared.  */
7357  push_deferring_access_checks (dk_deferred);
7358
7359  /* Parse the decl-specifier-seq.  We have to keep track of whether
7360     or not the decl-specifier-seq declares a named class or
7361     enumeration type, since that is the only case in which the
7362     init-declarator-list is allowed to be empty.
7363
7364     [dcl.dcl]
7365
7366     In a simple-declaration, the optional init-declarator-list can be
7367     omitted only when declaring a class or enumeration, that is when
7368     the decl-specifier-seq contains either a class-specifier, an
7369     elaborated-type-specifier, or an enum-specifier.  */
7370  cp_parser_decl_specifier_seq (parser,
7371				CP_PARSER_FLAGS_OPTIONAL,
7372				&decl_specifiers,
7373				&declares_class_or_enum);
7374  /* We no longer need to defer access checks.  */
7375  stop_deferring_access_checks ();
7376
7377  /* In a block scope, a valid declaration must always have a
7378     decl-specifier-seq.  By not trying to parse declarators, we can
7379     resolve the declaration/expression ambiguity more quickly.  */
7380  if (!function_definition_allowed_p
7381      && !decl_specifiers.any_specifiers_p)
7382    {
7383      cp_parser_error (parser, "expected declaration");
7384      goto done;
7385    }
7386
7387  /* If the next two tokens are both identifiers, the code is
7388     erroneous. The usual cause of this situation is code like:
7389
7390       T t;
7391
7392     where "T" should name a type -- but does not.  */
7393  if (!decl_specifiers.type
7394      && cp_parser_parse_and_diagnose_invalid_type_name (parser))
7395    {
7396      /* If parsing tentatively, we should commit; we really are
7397	 looking at a declaration.  */
7398      cp_parser_commit_to_tentative_parse (parser);
7399      /* Give up.  */
7400      goto done;
7401    }
7402
7403  /* If we have seen at least one decl-specifier, and the next token
7404     is not a parenthesis, then we must be looking at a declaration.
7405     (After "int (" we might be looking at a functional cast.)  */
7406  if (decl_specifiers.any_specifiers_p
7407      && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
7408    cp_parser_commit_to_tentative_parse (parser);
7409
7410  /* Keep going until we hit the `;' at the end of the simple
7411     declaration.  */
7412  saw_declarator = false;
7413  while (cp_lexer_next_token_is_not (parser->lexer,
7414				     CPP_SEMICOLON))
7415    {
7416      cp_token *token;
7417      bool function_definition_p;
7418      tree decl;
7419
7420      if (saw_declarator)
7421	{
7422	  /* If we are processing next declarator, coma is expected */
7423	  token = cp_lexer_peek_token (parser->lexer);
7424	  gcc_assert (token->type == CPP_COMMA);
7425	  cp_lexer_consume_token (parser->lexer);
7426	}
7427      else
7428	saw_declarator = true;
7429
7430      /* Parse the init-declarator.  */
7431      decl = cp_parser_init_declarator (parser, &decl_specifiers,
7432					/*checks=*/NULL,
7433					function_definition_allowed_p,
7434					/*member_p=*/false,
7435					declares_class_or_enum,
7436					&function_definition_p);
7437      /* If an error occurred while parsing tentatively, exit quickly.
7438	 (That usually happens when in the body of a function; each
7439	 statement is treated as a declaration-statement until proven
7440	 otherwise.)  */
7441      if (cp_parser_error_occurred (parser))
7442	goto done;
7443      /* Handle function definitions specially.  */
7444      if (function_definition_p)
7445	{
7446	  /* If the next token is a `,', then we are probably
7447	     processing something like:
7448
7449	       void f() {}, *p;
7450
7451	     which is erroneous.  */
7452	  if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
7453	    error ("mixing declarations and function-definitions is forbidden");
7454	  /* Otherwise, we're done with the list of declarators.  */
7455	  else
7456	    {
7457	      pop_deferring_access_checks ();
7458	      return;
7459	    }
7460	}
7461      /* The next token should be either a `,' or a `;'.  */
7462      token = cp_lexer_peek_token (parser->lexer);
7463      /* If it's a `,', there are more declarators to come.  */
7464      if (token->type == CPP_COMMA)
7465	/* will be consumed next time around */;
7466      /* If it's a `;', we are done.  */
7467      else if (token->type == CPP_SEMICOLON)
7468	break;
7469      /* Anything else is an error.  */
7470      else
7471	{
7472	  /* If we have already issued an error message we don't need
7473	     to issue another one.  */
7474	  if (decl != error_mark_node
7475	      || cp_parser_uncommitted_to_tentative_parse_p (parser))
7476	    cp_parser_error (parser, "expected %<,%> or %<;%>");
7477	  /* Skip tokens until we reach the end of the statement.  */
7478	  cp_parser_skip_to_end_of_statement (parser);
7479	  /* If the next token is now a `;', consume it.  */
7480	  if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7481	    cp_lexer_consume_token (parser->lexer);
7482	  goto done;
7483	}
7484      /* After the first time around, a function-definition is not
7485	 allowed -- even if it was OK at first.  For example:
7486
7487	   int i, f() {}
7488
7489	 is not valid.  */
7490      function_definition_allowed_p = false;
7491    }
7492
7493  /* Issue an error message if no declarators are present, and the
7494     decl-specifier-seq does not itself declare a class or
7495     enumeration.  */
7496  if (!saw_declarator)
7497    {
7498      if (cp_parser_declares_only_class_p (parser))
7499	shadow_tag (&decl_specifiers);
7500      /* Perform any deferred access checks.  */
7501      perform_deferred_access_checks ();
7502    }
7503
7504  /* Consume the `;'.  */
7505  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
7506
7507 done:
7508  pop_deferring_access_checks ();
7509}
7510
7511/* Parse a decl-specifier-seq.
7512
7513   decl-specifier-seq:
7514     decl-specifier-seq [opt] decl-specifier
7515
7516   decl-specifier:
7517     storage-class-specifier
7518     type-specifier
7519     function-specifier
7520     friend
7521     typedef
7522
7523   GNU Extension:
7524
7525   decl-specifier:
7526     attributes
7527
7528   Set *DECL_SPECS to a representation of the decl-specifier-seq.
7529
7530   The parser flags FLAGS is used to control type-specifier parsing.
7531
7532   *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
7533   flags:
7534
7535     1: one of the decl-specifiers is an elaborated-type-specifier
7536	(i.e., a type declaration)
7537     2: one of the decl-specifiers is an enum-specifier or a
7538	class-specifier (i.e., a type definition)
7539
7540   */
7541
7542static void
7543cp_parser_decl_specifier_seq (cp_parser* parser,
7544			      cp_parser_flags flags,
7545			      cp_decl_specifier_seq *decl_specs,
7546			      int* declares_class_or_enum)
7547{
7548  bool constructor_possible_p = !parser->in_declarator_p;
7549
7550  /* Clear DECL_SPECS.  */
7551  clear_decl_specs (decl_specs);
7552
7553  /* Assume no class or enumeration type is declared.  */
7554  *declares_class_or_enum = 0;
7555
7556  /* Keep reading specifiers until there are no more to read.  */
7557  while (true)
7558    {
7559      bool constructor_p;
7560      bool found_decl_spec;
7561      cp_token *token;
7562
7563      /* Peek at the next token.  */
7564      token = cp_lexer_peek_token (parser->lexer);
7565      /* Handle attributes.  */
7566      if (token->keyword == RID_ATTRIBUTE)
7567	{
7568	  /* Parse the attributes.  */
7569	  decl_specs->attributes
7570	    = chainon (decl_specs->attributes,
7571		       cp_parser_attributes_opt (parser));
7572	  continue;
7573	}
7574      /* Assume we will find a decl-specifier keyword.  */
7575      found_decl_spec = true;
7576      /* If the next token is an appropriate keyword, we can simply
7577	 add it to the list.  */
7578      switch (token->keyword)
7579	{
7580	  /* decl-specifier:
7581	       friend  */
7582	case RID_FRIEND:
7583	  if (!at_class_scope_p ())
7584	    {
7585	      error ("%<friend%> used outside of class");
7586	      cp_lexer_purge_token (parser->lexer);
7587	    }
7588	  else
7589	    {
7590	      ++decl_specs->specs[(int) ds_friend];
7591	      /* Consume the token.  */
7592	      cp_lexer_consume_token (parser->lexer);
7593	    }
7594	  break;
7595
7596	  /* function-specifier:
7597	       inline
7598	       virtual
7599	       explicit  */
7600	case RID_INLINE:
7601	case RID_VIRTUAL:
7602	case RID_EXPLICIT:
7603	  cp_parser_function_specifier_opt (parser, decl_specs);
7604	  break;
7605
7606	  /* decl-specifier:
7607	       typedef  */
7608	case RID_TYPEDEF:
7609	  ++decl_specs->specs[(int) ds_typedef];
7610	  /* Consume the token.  */
7611	  cp_lexer_consume_token (parser->lexer);
7612	  /* A constructor declarator cannot appear in a typedef.  */
7613	  constructor_possible_p = false;
7614	  /* The "typedef" keyword can only occur in a declaration; we
7615	     may as well commit at this point.  */
7616	  cp_parser_commit_to_tentative_parse (parser);
7617
7618          if (decl_specs->storage_class != sc_none)
7619            decl_specs->conflicting_specifiers_p = true;
7620	  break;
7621
7622	  /* storage-class-specifier:
7623	       auto
7624	       register
7625	       static
7626	       extern
7627	       mutable
7628
7629	     GNU Extension:
7630	       thread  */
7631	case RID_AUTO:
7632	case RID_REGISTER:
7633	case RID_STATIC:
7634	case RID_EXTERN:
7635	case RID_MUTABLE:
7636	  /* Consume the token.  */
7637	  cp_lexer_consume_token (parser->lexer);
7638	  cp_parser_set_storage_class (parser, decl_specs, token->keyword);
7639	  break;
7640	case RID_THREAD:
7641	  /* Consume the token.  */
7642	  cp_lexer_consume_token (parser->lexer);
7643	  ++decl_specs->specs[(int) ds_thread];
7644	  break;
7645
7646	default:
7647	  /* We did not yet find a decl-specifier yet.  */
7648	  found_decl_spec = false;
7649	  break;
7650	}
7651
7652      /* Constructors are a special case.  The `S' in `S()' is not a
7653	 decl-specifier; it is the beginning of the declarator.  */
7654      constructor_p
7655	= (!found_decl_spec
7656	   && constructor_possible_p
7657	   && (cp_parser_constructor_declarator_p
7658	       (parser, decl_specs->specs[(int) ds_friend] != 0)));
7659
7660      /* If we don't have a DECL_SPEC yet, then we must be looking at
7661	 a type-specifier.  */
7662      if (!found_decl_spec && !constructor_p)
7663	{
7664	  int decl_spec_declares_class_or_enum;
7665	  bool is_cv_qualifier;
7666	  tree type_spec;
7667
7668	  type_spec
7669	    = cp_parser_type_specifier (parser, flags,
7670					decl_specs,
7671					/*is_declaration=*/true,
7672					&decl_spec_declares_class_or_enum,
7673					&is_cv_qualifier);
7674
7675	  *declares_class_or_enum |= decl_spec_declares_class_or_enum;
7676
7677	  /* If this type-specifier referenced a user-defined type
7678	     (a typedef, class-name, etc.), then we can't allow any
7679	     more such type-specifiers henceforth.
7680
7681	     [dcl.spec]
7682
7683	     The longest sequence of decl-specifiers that could
7684	     possibly be a type name is taken as the
7685	     decl-specifier-seq of a declaration.  The sequence shall
7686	     be self-consistent as described below.
7687
7688	     [dcl.type]
7689
7690	     As a general rule, at most one type-specifier is allowed
7691	     in the complete decl-specifier-seq of a declaration.  The
7692	     only exceptions are the following:
7693
7694	     -- const or volatile can be combined with any other
7695		type-specifier.
7696
7697	     -- signed or unsigned can be combined with char, long,
7698		short, or int.
7699
7700	     -- ..
7701
7702	     Example:
7703
7704	       typedef char* Pc;
7705	       void g (const int Pc);
7706
7707	     Here, Pc is *not* part of the decl-specifier seq; it's
7708	     the declarator.  Therefore, once we see a type-specifier
7709	     (other than a cv-qualifier), we forbid any additional
7710	     user-defined types.  We *do* still allow things like `int
7711	     int' to be considered a decl-specifier-seq, and issue the
7712	     error message later.  */
7713	  if (type_spec && !is_cv_qualifier)
7714	    flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
7715	  /* A constructor declarator cannot follow a type-specifier.  */
7716	  if (type_spec)
7717	    {
7718	      constructor_possible_p = false;
7719	      found_decl_spec = true;
7720	    }
7721	}
7722
7723      /* If we still do not have a DECL_SPEC, then there are no more
7724	 decl-specifiers.  */
7725      if (!found_decl_spec)
7726	break;
7727
7728      decl_specs->any_specifiers_p = true;
7729      /* After we see one decl-specifier, further decl-specifiers are
7730	 always optional.  */
7731      flags |= CP_PARSER_FLAGS_OPTIONAL;
7732    }
7733
7734  cp_parser_check_decl_spec (decl_specs);
7735
7736  /* Don't allow a friend specifier with a class definition.  */
7737  if (decl_specs->specs[(int) ds_friend] != 0
7738      && (*declares_class_or_enum & 2))
7739    error ("class definition may not be declared a friend");
7740}
7741
7742/* Parse an (optional) storage-class-specifier.
7743
7744   storage-class-specifier:
7745     auto
7746     register
7747     static
7748     extern
7749     mutable
7750
7751   GNU Extension:
7752
7753   storage-class-specifier:
7754     thread
7755
7756   Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
7757
7758static tree
7759cp_parser_storage_class_specifier_opt (cp_parser* parser)
7760{
7761  switch (cp_lexer_peek_token (parser->lexer)->keyword)
7762    {
7763    case RID_AUTO:
7764    case RID_REGISTER:
7765    case RID_STATIC:
7766    case RID_EXTERN:
7767    case RID_MUTABLE:
7768    case RID_THREAD:
7769      /* Consume the token.  */
7770      return cp_lexer_consume_token (parser->lexer)->u.value;
7771
7772    default:
7773      return NULL_TREE;
7774    }
7775}
7776
7777/* Parse an (optional) function-specifier.
7778
7779   function-specifier:
7780     inline
7781     virtual
7782     explicit
7783
7784   Returns an IDENTIFIER_NODE corresponding to the keyword used.
7785   Updates DECL_SPECS, if it is non-NULL.  */
7786
7787static tree
7788cp_parser_function_specifier_opt (cp_parser* parser,
7789				  cp_decl_specifier_seq *decl_specs)
7790{
7791  switch (cp_lexer_peek_token (parser->lexer)->keyword)
7792    {
7793    case RID_INLINE:
7794      if (decl_specs)
7795	++decl_specs->specs[(int) ds_inline];
7796      break;
7797
7798    case RID_VIRTUAL:
7799      /* 14.5.2.3 [temp.mem]
7800
7801	 A member function template shall not be virtual.  */
7802      if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7803	error ("templates may not be %<virtual%>");
7804      else if (decl_specs)
7805	++decl_specs->specs[(int) ds_virtual];
7806      break;
7807
7808    case RID_EXPLICIT:
7809      if (decl_specs)
7810	++decl_specs->specs[(int) ds_explicit];
7811      break;
7812
7813    default:
7814      return NULL_TREE;
7815    }
7816
7817  /* Consume the token.  */
7818  return cp_lexer_consume_token (parser->lexer)->u.value;
7819}
7820
7821/* Parse a linkage-specification.
7822
7823   linkage-specification:
7824     extern string-literal { declaration-seq [opt] }
7825     extern string-literal declaration  */
7826
7827static void
7828cp_parser_linkage_specification (cp_parser* parser)
7829{
7830  tree linkage;
7831
7832  /* Look for the `extern' keyword.  */
7833  cp_parser_require_keyword (parser, RID_EXTERN, "`extern'");
7834
7835  /* Look for the string-literal.  */
7836  linkage = cp_parser_string_literal (parser, false, false);
7837
7838  /* Transform the literal into an identifier.  If the literal is a
7839     wide-character string, or contains embedded NULs, then we can't
7840     handle it as the user wants.  */
7841  if (strlen (TREE_STRING_POINTER (linkage))
7842      != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
7843    {
7844      cp_parser_error (parser, "invalid linkage-specification");
7845      /* Assume C++ linkage.  */
7846      linkage = lang_name_cplusplus;
7847    }
7848  else
7849    linkage = get_identifier (TREE_STRING_POINTER (linkage));
7850
7851  /* We're now using the new linkage.  */
7852  push_lang_context (linkage);
7853
7854  /* If the next token is a `{', then we're using the first
7855     production.  */
7856  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7857    {
7858      /* Consume the `{' token.  */
7859      cp_lexer_consume_token (parser->lexer);
7860      /* Parse the declarations.  */
7861      cp_parser_declaration_seq_opt (parser);
7862      /* Look for the closing `}'.  */
7863      cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7864    }
7865  /* Otherwise, there's just one declaration.  */
7866  else
7867    {
7868      bool saved_in_unbraced_linkage_specification_p;
7869
7870      saved_in_unbraced_linkage_specification_p
7871	= parser->in_unbraced_linkage_specification_p;
7872      parser->in_unbraced_linkage_specification_p = true;
7873      cp_parser_declaration (parser);
7874      parser->in_unbraced_linkage_specification_p
7875	= saved_in_unbraced_linkage_specification_p;
7876    }
7877
7878  /* We're done with the linkage-specification.  */
7879  pop_lang_context ();
7880}
7881
7882/* Special member functions [gram.special] */
7883
7884/* Parse a conversion-function-id.
7885
7886   conversion-function-id:
7887     operator conversion-type-id
7888
7889   Returns an IDENTIFIER_NODE representing the operator.  */
7890
7891static tree
7892cp_parser_conversion_function_id (cp_parser* parser)
7893{
7894  tree type;
7895  tree saved_scope;
7896  tree saved_qualifying_scope;
7897  tree saved_object_scope;
7898  tree pushed_scope = NULL_TREE;
7899
7900  /* Look for the `operator' token.  */
7901  if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
7902    return error_mark_node;
7903  /* When we parse the conversion-type-id, the current scope will be
7904     reset.  However, we need that information in able to look up the
7905     conversion function later, so we save it here.  */
7906  saved_scope = parser->scope;
7907  saved_qualifying_scope = parser->qualifying_scope;
7908  saved_object_scope = parser->object_scope;
7909  /* We must enter the scope of the class so that the names of
7910     entities declared within the class are available in the
7911     conversion-type-id.  For example, consider:
7912
7913       struct S {
7914	 typedef int I;
7915	 operator I();
7916       };
7917
7918       S::operator I() { ... }
7919
7920     In order to see that `I' is a type-name in the definition, we
7921     must be in the scope of `S'.  */
7922  if (saved_scope)
7923    pushed_scope = push_scope (saved_scope);
7924  /* Parse the conversion-type-id.  */
7925  type = cp_parser_conversion_type_id (parser);
7926  /* Leave the scope of the class, if any.  */
7927  if (pushed_scope)
7928    pop_scope (pushed_scope);
7929  /* Restore the saved scope.  */
7930  parser->scope = saved_scope;
7931  parser->qualifying_scope = saved_qualifying_scope;
7932  parser->object_scope = saved_object_scope;
7933  /* If the TYPE is invalid, indicate failure.  */
7934  if (type == error_mark_node)
7935    return error_mark_node;
7936  return mangle_conv_op_name_for_type (type);
7937}
7938
7939/* Parse a conversion-type-id:
7940
7941   conversion-type-id:
7942     type-specifier-seq conversion-declarator [opt]
7943
7944   Returns the TYPE specified.  */
7945
7946static tree
7947cp_parser_conversion_type_id (cp_parser* parser)
7948{
7949  tree attributes;
7950  cp_decl_specifier_seq type_specifiers;
7951  cp_declarator *declarator;
7952  tree type_specified;
7953
7954  /* Parse the attributes.  */
7955  attributes = cp_parser_attributes_opt (parser);
7956  /* Parse the type-specifiers.  */
7957  cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
7958				&type_specifiers);
7959  /* If that didn't work, stop.  */
7960  if (type_specifiers.type == error_mark_node)
7961    return error_mark_node;
7962  /* Parse the conversion-declarator.  */
7963  declarator = cp_parser_conversion_declarator_opt (parser);
7964
7965  type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
7966				    /*initialized=*/0, &attributes);
7967  if (attributes)
7968    cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
7969  return type_specified;
7970}
7971
7972/* Parse an (optional) conversion-declarator.
7973
7974   conversion-declarator:
7975     ptr-operator conversion-declarator [opt]
7976
7977   */
7978
7979static cp_declarator *
7980cp_parser_conversion_declarator_opt (cp_parser* parser)
7981{
7982  enum tree_code code;
7983  tree class_type;
7984  cp_cv_quals cv_quals;
7985
7986  /* We don't know if there's a ptr-operator next, or not.  */
7987  cp_parser_parse_tentatively (parser);
7988  /* Try the ptr-operator.  */
7989  code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
7990  /* If it worked, look for more conversion-declarators.  */
7991  if (cp_parser_parse_definitely (parser))
7992    {
7993      cp_declarator *declarator;
7994
7995      /* Parse another optional declarator.  */
7996      declarator = cp_parser_conversion_declarator_opt (parser);
7997
7998      /* Create the representation of the declarator.  */
7999      if (class_type)
8000	declarator = make_ptrmem_declarator (cv_quals, class_type,
8001					     declarator);
8002      else if (code == INDIRECT_REF)
8003	declarator = make_pointer_declarator (cv_quals, declarator);
8004      else
8005	declarator = make_reference_declarator (cv_quals, declarator);
8006
8007      return declarator;
8008   }
8009
8010  return NULL;
8011}
8012
8013/* Parse an (optional) ctor-initializer.
8014
8015   ctor-initializer:
8016     : mem-initializer-list
8017
8018   Returns TRUE iff the ctor-initializer was actually present.  */
8019
8020static bool
8021cp_parser_ctor_initializer_opt (cp_parser* parser)
8022{
8023  /* If the next token is not a `:', then there is no
8024     ctor-initializer.  */
8025  if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
8026    {
8027      /* Do default initialization of any bases and members.  */
8028      if (DECL_CONSTRUCTOR_P (current_function_decl))
8029	finish_mem_initializers (NULL_TREE);
8030
8031      return false;
8032    }
8033
8034  /* Consume the `:' token.  */
8035  cp_lexer_consume_token (parser->lexer);
8036  /* And the mem-initializer-list.  */
8037  cp_parser_mem_initializer_list (parser);
8038
8039  return true;
8040}
8041
8042/* Parse a mem-initializer-list.
8043
8044   mem-initializer-list:
8045     mem-initializer
8046     mem-initializer , mem-initializer-list  */
8047
8048static void
8049cp_parser_mem_initializer_list (cp_parser* parser)
8050{
8051  tree mem_initializer_list = NULL_TREE;
8052
8053  /* Let the semantic analysis code know that we are starting the
8054     mem-initializer-list.  */
8055  if (!DECL_CONSTRUCTOR_P (current_function_decl))
8056    error ("only constructors take base initializers");
8057
8058  /* Loop through the list.  */
8059  while (true)
8060    {
8061      tree mem_initializer;
8062
8063      /* Parse the mem-initializer.  */
8064      mem_initializer = cp_parser_mem_initializer (parser);
8065      /* Add it to the list, unless it was erroneous.  */
8066      if (mem_initializer != error_mark_node)
8067	{
8068	  TREE_CHAIN (mem_initializer) = mem_initializer_list;
8069	  mem_initializer_list = mem_initializer;
8070	}
8071      /* If the next token is not a `,', we're done.  */
8072      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8073	break;
8074      /* Consume the `,' token.  */
8075      cp_lexer_consume_token (parser->lexer);
8076    }
8077
8078  /* Perform semantic analysis.  */
8079  if (DECL_CONSTRUCTOR_P (current_function_decl))
8080    finish_mem_initializers (mem_initializer_list);
8081}
8082
8083/* Parse a mem-initializer.
8084
8085   mem-initializer:
8086     mem-initializer-id ( expression-list [opt] )
8087
8088   GNU extension:
8089
8090   mem-initializer:
8091     ( expression-list [opt] )
8092
8093   Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
8094   class) or FIELD_DECL (for a non-static data member) to initialize;
8095   the TREE_VALUE is the expression-list.  An empty initialization
8096   list is represented by void_list_node.  */
8097
8098static tree
8099cp_parser_mem_initializer (cp_parser* parser)
8100{
8101  tree mem_initializer_id;
8102  tree expression_list;
8103  tree member;
8104
8105  /* Find out what is being initialized.  */
8106  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
8107    {
8108      pedwarn ("anachronistic old-style base class initializer");
8109      mem_initializer_id = NULL_TREE;
8110    }
8111  else
8112    mem_initializer_id = cp_parser_mem_initializer_id (parser);
8113  member = expand_member_init (mem_initializer_id);
8114  if (member && !DECL_P (member))
8115    in_base_initializer = 1;
8116
8117  expression_list
8118    = cp_parser_parenthesized_expression_list (parser, false,
8119					       /*cast_p=*/false,
8120					       /*non_constant_p=*/NULL);
8121  if (expression_list == error_mark_node)
8122    return error_mark_node;
8123  if (!expression_list)
8124    expression_list = void_type_node;
8125
8126  in_base_initializer = 0;
8127
8128  return member ? build_tree_list (member, expression_list) : error_mark_node;
8129}
8130
8131/* Parse a mem-initializer-id.
8132
8133   mem-initializer-id:
8134     :: [opt] nested-name-specifier [opt] class-name
8135     identifier
8136
8137   Returns a TYPE indicating the class to be initializer for the first
8138   production.  Returns an IDENTIFIER_NODE indicating the data member
8139   to be initialized for the second production.  */
8140
8141static tree
8142cp_parser_mem_initializer_id (cp_parser* parser)
8143{
8144  bool global_scope_p;
8145  bool nested_name_specifier_p;
8146  bool template_p = false;
8147  tree id;
8148
8149  /* `typename' is not allowed in this context ([temp.res]).  */
8150  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
8151    {
8152      error ("keyword %<typename%> not allowed in this context (a qualified "
8153	     "member initializer is implicitly a type)");
8154      cp_lexer_consume_token (parser->lexer);
8155    }
8156  /* Look for the optional `::' operator.  */
8157  global_scope_p
8158    = (cp_parser_global_scope_opt (parser,
8159				   /*current_scope_valid_p=*/false)
8160       != NULL_TREE);
8161  /* Look for the optional nested-name-specifier.  The simplest way to
8162     implement:
8163
8164       [temp.res]
8165
8166       The keyword `typename' is not permitted in a base-specifier or
8167       mem-initializer; in these contexts a qualified name that
8168       depends on a template-parameter is implicitly assumed to be a
8169       type name.
8170
8171     is to assume that we have seen the `typename' keyword at this
8172     point.  */
8173  nested_name_specifier_p
8174    = (cp_parser_nested_name_specifier_opt (parser,
8175					    /*typename_keyword_p=*/true,
8176					    /*check_dependency_p=*/true,
8177					    /*type_p=*/true,
8178					    /*is_declaration=*/true)
8179       != NULL_TREE);
8180  if (nested_name_specifier_p)
8181    template_p = cp_parser_optional_template_keyword (parser);
8182  /* If there is a `::' operator or a nested-name-specifier, then we
8183     are definitely looking for a class-name.  */
8184  if (global_scope_p || nested_name_specifier_p)
8185    return cp_parser_class_name (parser,
8186				 /*typename_keyword_p=*/true,
8187				 /*template_keyword_p=*/template_p,
8188				 none_type,
8189				 /*check_dependency_p=*/true,
8190				 /*class_head_p=*/false,
8191				 /*is_declaration=*/true);
8192  /* Otherwise, we could also be looking for an ordinary identifier.  */
8193  cp_parser_parse_tentatively (parser);
8194  /* Try a class-name.  */
8195  id = cp_parser_class_name (parser,
8196			     /*typename_keyword_p=*/true,
8197			     /*template_keyword_p=*/false,
8198			     none_type,
8199			     /*check_dependency_p=*/true,
8200			     /*class_head_p=*/false,
8201			     /*is_declaration=*/true);
8202  /* If we found one, we're done.  */
8203  if (cp_parser_parse_definitely (parser))
8204    return id;
8205  /* Otherwise, look for an ordinary identifier.  */
8206  return cp_parser_identifier (parser);
8207}
8208
8209/* Overloading [gram.over] */
8210
8211/* Parse an operator-function-id.
8212
8213   operator-function-id:
8214     operator operator
8215
8216   Returns an IDENTIFIER_NODE for the operator which is a
8217   human-readable spelling of the identifier, e.g., `operator +'.  */
8218
8219static tree
8220cp_parser_operator_function_id (cp_parser* parser)
8221{
8222  /* Look for the `operator' keyword.  */
8223  if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
8224    return error_mark_node;
8225  /* And then the name of the operator itself.  */
8226  return cp_parser_operator (parser);
8227}
8228
8229/* Parse an operator.
8230
8231   operator:
8232     new delete new[] delete[] + - * / % ^ & | ~ ! = < >
8233     += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
8234     || ++ -- , ->* -> () []
8235
8236   GNU Extensions:
8237
8238   operator:
8239     <? >? <?= >?=
8240
8241   Returns an IDENTIFIER_NODE for the operator which is a
8242   human-readable spelling of the identifier, e.g., `operator +'.  */
8243
8244static tree
8245cp_parser_operator (cp_parser* parser)
8246{
8247  tree id = NULL_TREE;
8248  cp_token *token;
8249
8250  /* Peek at the next token.  */
8251  token = cp_lexer_peek_token (parser->lexer);
8252  /* Figure out which operator we have.  */
8253  switch (token->type)
8254    {
8255    case CPP_KEYWORD:
8256      {
8257	enum tree_code op;
8258
8259	/* The keyword should be either `new' or `delete'.  */
8260	if (token->keyword == RID_NEW)
8261	  op = NEW_EXPR;
8262	else if (token->keyword == RID_DELETE)
8263	  op = DELETE_EXPR;
8264	else
8265	  break;
8266
8267	/* Consume the `new' or `delete' token.  */
8268	cp_lexer_consume_token (parser->lexer);
8269
8270	/* Peek at the next token.  */
8271	token = cp_lexer_peek_token (parser->lexer);
8272	/* If it's a `[' token then this is the array variant of the
8273	   operator.  */
8274	if (token->type == CPP_OPEN_SQUARE)
8275	  {
8276	    /* Consume the `[' token.  */
8277	    cp_lexer_consume_token (parser->lexer);
8278	    /* Look for the `]' token.  */
8279	    cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8280	    id = ansi_opname (op == NEW_EXPR
8281			      ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
8282	  }
8283	/* Otherwise, we have the non-array variant.  */
8284	else
8285	  id = ansi_opname (op);
8286
8287	return id;
8288      }
8289
8290    case CPP_PLUS:
8291      id = ansi_opname (PLUS_EXPR);
8292      break;
8293
8294    case CPP_MINUS:
8295      id = ansi_opname (MINUS_EXPR);
8296      break;
8297
8298    case CPP_MULT:
8299      id = ansi_opname (MULT_EXPR);
8300      break;
8301
8302    case CPP_DIV:
8303      id = ansi_opname (TRUNC_DIV_EXPR);
8304      break;
8305
8306    case CPP_MOD:
8307      id = ansi_opname (TRUNC_MOD_EXPR);
8308      break;
8309
8310    case CPP_XOR:
8311      id = ansi_opname (BIT_XOR_EXPR);
8312      break;
8313
8314    case CPP_AND:
8315      id = ansi_opname (BIT_AND_EXPR);
8316      break;
8317
8318    case CPP_OR:
8319      id = ansi_opname (BIT_IOR_EXPR);
8320      break;
8321
8322    case CPP_COMPL:
8323      id = ansi_opname (BIT_NOT_EXPR);
8324      break;
8325
8326    case CPP_NOT:
8327      id = ansi_opname (TRUTH_NOT_EXPR);
8328      break;
8329
8330    case CPP_EQ:
8331      id = ansi_assopname (NOP_EXPR);
8332      break;
8333
8334    case CPP_LESS:
8335      id = ansi_opname (LT_EXPR);
8336      break;
8337
8338    case CPP_GREATER:
8339      id = ansi_opname (GT_EXPR);
8340      break;
8341
8342    case CPP_PLUS_EQ:
8343      id = ansi_assopname (PLUS_EXPR);
8344      break;
8345
8346    case CPP_MINUS_EQ:
8347      id = ansi_assopname (MINUS_EXPR);
8348      break;
8349
8350    case CPP_MULT_EQ:
8351      id = ansi_assopname (MULT_EXPR);
8352      break;
8353
8354    case CPP_DIV_EQ:
8355      id = ansi_assopname (TRUNC_DIV_EXPR);
8356      break;
8357
8358    case CPP_MOD_EQ:
8359      id = ansi_assopname (TRUNC_MOD_EXPR);
8360      break;
8361
8362    case CPP_XOR_EQ:
8363      id = ansi_assopname (BIT_XOR_EXPR);
8364      break;
8365
8366    case CPP_AND_EQ:
8367      id = ansi_assopname (BIT_AND_EXPR);
8368      break;
8369
8370    case CPP_OR_EQ:
8371      id = ansi_assopname (BIT_IOR_EXPR);
8372      break;
8373
8374    case CPP_LSHIFT:
8375      id = ansi_opname (LSHIFT_EXPR);
8376      break;
8377
8378    case CPP_RSHIFT:
8379      id = ansi_opname (RSHIFT_EXPR);
8380      break;
8381
8382    case CPP_LSHIFT_EQ:
8383      id = ansi_assopname (LSHIFT_EXPR);
8384      break;
8385
8386    case CPP_RSHIFT_EQ:
8387      id = ansi_assopname (RSHIFT_EXPR);
8388      break;
8389
8390    case CPP_EQ_EQ:
8391      id = ansi_opname (EQ_EXPR);
8392      break;
8393
8394    case CPP_NOT_EQ:
8395      id = ansi_opname (NE_EXPR);
8396      break;
8397
8398    case CPP_LESS_EQ:
8399      id = ansi_opname (LE_EXPR);
8400      break;
8401
8402    case CPP_GREATER_EQ:
8403      id = ansi_opname (GE_EXPR);
8404      break;
8405
8406    case CPP_AND_AND:
8407      id = ansi_opname (TRUTH_ANDIF_EXPR);
8408      break;
8409
8410    case CPP_OR_OR:
8411      id = ansi_opname (TRUTH_ORIF_EXPR);
8412      break;
8413
8414    case CPP_PLUS_PLUS:
8415      id = ansi_opname (POSTINCREMENT_EXPR);
8416      break;
8417
8418    case CPP_MINUS_MINUS:
8419      id = ansi_opname (PREDECREMENT_EXPR);
8420      break;
8421
8422    case CPP_COMMA:
8423      id = ansi_opname (COMPOUND_EXPR);
8424      break;
8425
8426    case CPP_DEREF_STAR:
8427      id = ansi_opname (MEMBER_REF);
8428      break;
8429
8430    case CPP_DEREF:
8431      id = ansi_opname (COMPONENT_REF);
8432      break;
8433
8434    case CPP_OPEN_PAREN:
8435      /* Consume the `('.  */
8436      cp_lexer_consume_token (parser->lexer);
8437      /* Look for the matching `)'.  */
8438      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
8439      return ansi_opname (CALL_EXPR);
8440
8441    case CPP_OPEN_SQUARE:
8442      /* Consume the `['.  */
8443      cp_lexer_consume_token (parser->lexer);
8444      /* Look for the matching `]'.  */
8445      cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8446      return ansi_opname (ARRAY_REF);
8447
8448    default:
8449      /* Anything else is an error.  */
8450      break;
8451    }
8452
8453  /* If we have selected an identifier, we need to consume the
8454     operator token.  */
8455  if (id)
8456    cp_lexer_consume_token (parser->lexer);
8457  /* Otherwise, no valid operator name was present.  */
8458  else
8459    {
8460      cp_parser_error (parser, "expected operator");
8461      id = error_mark_node;
8462    }
8463
8464  return id;
8465}
8466
8467/* Parse a template-declaration.
8468
8469   template-declaration:
8470     export [opt] template < template-parameter-list > declaration
8471
8472   If MEMBER_P is TRUE, this template-declaration occurs within a
8473   class-specifier.
8474
8475   The grammar rule given by the standard isn't correct.  What
8476   is really meant is:
8477
8478   template-declaration:
8479     export [opt] template-parameter-list-seq
8480       decl-specifier-seq [opt] init-declarator [opt] ;
8481     export [opt] template-parameter-list-seq
8482       function-definition
8483
8484   template-parameter-list-seq:
8485     template-parameter-list-seq [opt]
8486     template < template-parameter-list >  */
8487
8488static void
8489cp_parser_template_declaration (cp_parser* parser, bool member_p)
8490{
8491  /* Check for `export'.  */
8492  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
8493    {
8494      /* Consume the `export' token.  */
8495      cp_lexer_consume_token (parser->lexer);
8496      /* Warn that we do not support `export'.  */
8497      warning (0, "keyword %<export%> not implemented, and will be ignored");
8498    }
8499
8500  cp_parser_template_declaration_after_export (parser, member_p);
8501}
8502
8503/* Parse a template-parameter-list.
8504
8505   template-parameter-list:
8506     template-parameter
8507     template-parameter-list , template-parameter
8508
8509   Returns a TREE_LIST.  Each node represents a template parameter.
8510   The nodes are connected via their TREE_CHAINs.  */
8511
8512static tree
8513cp_parser_template_parameter_list (cp_parser* parser)
8514{
8515  tree parameter_list = NULL_TREE;
8516
8517  begin_template_parm_list ();
8518  while (true)
8519    {
8520      tree parameter;
8521      cp_token *token;
8522      bool is_non_type;
8523
8524      /* Parse the template-parameter.  */
8525      parameter = cp_parser_template_parameter (parser, &is_non_type);
8526      /* Add it to the list.  */
8527      if (parameter != error_mark_node)
8528	parameter_list = process_template_parm (parameter_list,
8529						parameter,
8530						is_non_type);
8531      else
8532       {
8533         tree err_parm = build_tree_list (parameter, parameter);
8534         TREE_VALUE (err_parm) = error_mark_node;
8535         parameter_list = chainon (parameter_list, err_parm);
8536       }
8537
8538      /* Peek at the next token.  */
8539      token = cp_lexer_peek_token (parser->lexer);
8540      /* If it's not a `,', we're done.  */
8541      if (token->type != CPP_COMMA)
8542	break;
8543      /* Otherwise, consume the `,' token.  */
8544      cp_lexer_consume_token (parser->lexer);
8545    }
8546
8547  return end_template_parm_list (parameter_list);
8548}
8549
8550/* Parse a template-parameter.
8551
8552   template-parameter:
8553     type-parameter
8554     parameter-declaration
8555
8556   If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
8557   the parameter.  The TREE_PURPOSE is the default value, if any.
8558   Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
8559   iff this parameter is a non-type parameter.  */
8560
8561static tree
8562cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
8563{
8564  cp_token *token;
8565  cp_parameter_declarator *parameter_declarator;
8566  tree parm;
8567
8568  /* Assume it is a type parameter or a template parameter.  */
8569  *is_non_type = false;
8570  /* Peek at the next token.  */
8571  token = cp_lexer_peek_token (parser->lexer);
8572  /* If it is `class' or `template', we have a type-parameter.  */
8573  if (token->keyword == RID_TEMPLATE)
8574    return cp_parser_type_parameter (parser);
8575  /* If it is `class' or `typename' we do not know yet whether it is a
8576     type parameter or a non-type parameter.  Consider:
8577
8578       template <typename T, typename T::X X> ...
8579
8580     or:
8581
8582       template <class C, class D*> ...
8583
8584     Here, the first parameter is a type parameter, and the second is
8585     a non-type parameter.  We can tell by looking at the token after
8586     the identifier -- if it is a `,', `=', or `>' then we have a type
8587     parameter.  */
8588  if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
8589    {
8590      /* Peek at the token after `class' or `typename'.  */
8591      token = cp_lexer_peek_nth_token (parser->lexer, 2);
8592      /* If it's an identifier, skip it.  */
8593      if (token->type == CPP_NAME)
8594	token = cp_lexer_peek_nth_token (parser->lexer, 3);
8595      /* Now, see if the token looks like the end of a template
8596	 parameter.  */
8597      if (token->type == CPP_COMMA
8598	  || token->type == CPP_EQ
8599	  || token->type == CPP_GREATER)
8600	return cp_parser_type_parameter (parser);
8601    }
8602
8603  /* Otherwise, it is a non-type parameter.
8604
8605     [temp.param]
8606
8607     When parsing a default template-argument for a non-type
8608     template-parameter, the first non-nested `>' is taken as the end
8609     of the template parameter-list rather than a greater-than
8610     operator.  */
8611  *is_non_type = true;
8612  parameter_declarator
8613     = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
8614					/*parenthesized_p=*/NULL);
8615  parm = grokdeclarator (parameter_declarator->declarator,
8616			 &parameter_declarator->decl_specifiers,
8617			 PARM, /*initialized=*/0,
8618			 /*attrlist=*/NULL);
8619  if (parm == error_mark_node)
8620    return error_mark_node;
8621  return build_tree_list (parameter_declarator->default_argument, parm);
8622}
8623
8624/* Parse a type-parameter.
8625
8626   type-parameter:
8627     class identifier [opt]
8628     class identifier [opt] = type-id
8629     typename identifier [opt]
8630     typename identifier [opt] = type-id
8631     template < template-parameter-list > class identifier [opt]
8632     template < template-parameter-list > class identifier [opt]
8633       = id-expression
8634
8635   Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
8636   TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
8637   the declaration of the parameter.  */
8638
8639static tree
8640cp_parser_type_parameter (cp_parser* parser)
8641{
8642  cp_token *token;
8643  tree parameter;
8644
8645  /* Look for a keyword to tell us what kind of parameter this is.  */
8646  token = cp_parser_require (parser, CPP_KEYWORD,
8647			     "`class', `typename', or `template'");
8648  if (!token)
8649    return error_mark_node;
8650
8651  switch (token->keyword)
8652    {
8653    case RID_CLASS:
8654    case RID_TYPENAME:
8655      {
8656	tree identifier;
8657	tree default_argument;
8658
8659	/* If the next token is an identifier, then it names the
8660	   parameter.  */
8661	if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
8662	  identifier = cp_parser_identifier (parser);
8663	else
8664	  identifier = NULL_TREE;
8665
8666	/* Create the parameter.  */
8667	parameter = finish_template_type_parm (class_type_node, identifier);
8668
8669	/* If the next token is an `=', we have a default argument.  */
8670	if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8671	  {
8672	    /* Consume the `=' token.  */
8673	    cp_lexer_consume_token (parser->lexer);
8674	    /* Parse the default-argument.  */
8675	    push_deferring_access_checks (dk_no_deferred);
8676	    default_argument = cp_parser_type_id (parser);
8677	    pop_deferring_access_checks ();
8678	  }
8679	else
8680	  default_argument = NULL_TREE;
8681
8682	/* Create the combined representation of the parameter and the
8683	   default argument.  */
8684	parameter = build_tree_list (default_argument, parameter);
8685      }
8686      break;
8687
8688    case RID_TEMPLATE:
8689      {
8690	tree parameter_list;
8691	tree identifier;
8692	tree default_argument;
8693
8694	/* Look for the `<'.  */
8695	cp_parser_require (parser, CPP_LESS, "`<'");
8696	/* Parse the template-parameter-list.  */
8697	parameter_list = cp_parser_template_parameter_list (parser);
8698	/* Look for the `>'.  */
8699	cp_parser_require (parser, CPP_GREATER, "`>'");
8700	/* Look for the `class' keyword.  */
8701	cp_parser_require_keyword (parser, RID_CLASS, "`class'");
8702	/* If the next token is an `=', then there is a
8703	   default-argument.  If the next token is a `>', we are at
8704	   the end of the parameter-list.  If the next token is a `,',
8705	   then we are at the end of this parameter.  */
8706	if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
8707	    && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
8708	    && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8709	  {
8710	    identifier = cp_parser_identifier (parser);
8711	    /* Treat invalid names as if the parameter were nameless.  */
8712	    if (identifier == error_mark_node)
8713	      identifier = NULL_TREE;
8714	  }
8715	else
8716	  identifier = NULL_TREE;
8717
8718	/* Create the template parameter.  */
8719	parameter = finish_template_template_parm (class_type_node,
8720						   identifier);
8721
8722	/* If the next token is an `=', then there is a
8723	   default-argument.  */
8724	if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8725	  {
8726	    bool is_template;
8727
8728	    /* Consume the `='.  */
8729	    cp_lexer_consume_token (parser->lexer);
8730	    /* Parse the id-expression.  */
8731	    push_deferring_access_checks (dk_no_deferred);
8732	    default_argument
8733	      = cp_parser_id_expression (parser,
8734					 /*template_keyword_p=*/false,
8735					 /*check_dependency_p=*/true,
8736					 /*template_p=*/&is_template,
8737					 /*declarator_p=*/false,
8738					 /*optional_p=*/false);
8739	    if (TREE_CODE (default_argument) == TYPE_DECL)
8740	      /* If the id-expression was a template-id that refers to
8741		 a template-class, we already have the declaration here,
8742		 so no further lookup is needed.  */
8743		 ;
8744	    else
8745	      /* Look up the name.  */
8746	      default_argument
8747		= cp_parser_lookup_name (parser, default_argument,
8748					 none_type,
8749					 /*is_template=*/is_template,
8750					 /*is_namespace=*/false,
8751					 /*check_dependency=*/true,
8752					 /*ambiguous_decls=*/NULL);
8753	    /* See if the default argument is valid.  */
8754	    default_argument
8755	      = check_template_template_default_arg (default_argument);
8756	    pop_deferring_access_checks ();
8757	  }
8758	else
8759	  default_argument = NULL_TREE;
8760
8761	/* Create the combined representation of the parameter and the
8762	   default argument.  */
8763	parameter = build_tree_list (default_argument, parameter);
8764      }
8765      break;
8766
8767    default:
8768      gcc_unreachable ();
8769      break;
8770    }
8771
8772  return parameter;
8773}
8774
8775/* Parse a template-id.
8776
8777   template-id:
8778     template-name < template-argument-list [opt] >
8779
8780   If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
8781   `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
8782   returned.  Otherwise, if the template-name names a function, or set
8783   of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
8784   names a class, returns a TYPE_DECL for the specialization.
8785
8786   If CHECK_DEPENDENCY_P is FALSE, names are looked up in
8787   uninstantiated templates.  */
8788
8789static tree
8790cp_parser_template_id (cp_parser *parser,
8791		       bool template_keyword_p,
8792		       bool check_dependency_p,
8793		       bool is_declaration)
8794{
8795  int i;
8796  tree template;
8797  tree arguments;
8798  tree template_id;
8799  cp_token_position start_of_id = 0;
8800  deferred_access_check *chk;
8801  VEC (deferred_access_check,gc) *access_check;
8802  cp_token *next_token, *next_token_2;
8803  bool is_identifier;
8804
8805  /* If the next token corresponds to a template-id, there is no need
8806     to reparse it.  */
8807  next_token = cp_lexer_peek_token (parser->lexer);
8808  if (next_token->type == CPP_TEMPLATE_ID)
8809    {
8810      struct tree_check *check_value;
8811
8812      /* Get the stored value.  */
8813      check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
8814      /* Perform any access checks that were deferred.  */
8815      access_check = check_value->checks;
8816      if (access_check)
8817	{
8818	  for (i = 0 ;
8819	       VEC_iterate (deferred_access_check, access_check, i, chk) ;
8820	       ++i)
8821	    {
8822	      perform_or_defer_access_check (chk->binfo,
8823					     chk->decl,
8824					     chk->diag_decl);
8825	    }
8826	}
8827      /* Return the stored value.  */
8828      return check_value->value;
8829    }
8830
8831  /* Avoid performing name lookup if there is no possibility of
8832     finding a template-id.  */
8833  if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
8834      || (next_token->type == CPP_NAME
8835	  && !cp_parser_nth_token_starts_template_argument_list_p
8836	       (parser, 2)))
8837    {
8838      cp_parser_error (parser, "expected template-id");
8839      return error_mark_node;
8840    }
8841
8842  /* Remember where the template-id starts.  */
8843  if (cp_parser_uncommitted_to_tentative_parse_p (parser))
8844    start_of_id = cp_lexer_token_position (parser->lexer, false);
8845
8846  push_deferring_access_checks (dk_deferred);
8847
8848  /* Parse the template-name.  */
8849  is_identifier = false;
8850  template = cp_parser_template_name (parser, template_keyword_p,
8851				      check_dependency_p,
8852				      is_declaration,
8853				      &is_identifier);
8854  if (template == error_mark_node || is_identifier)
8855    {
8856      pop_deferring_access_checks ();
8857      return template;
8858    }
8859
8860  /* If we find the sequence `[:' after a template-name, it's probably
8861     a digraph-typo for `< ::'. Substitute the tokens and check if we can
8862     parse correctly the argument list.  */
8863  next_token = cp_lexer_peek_token (parser->lexer);
8864  next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
8865  if (next_token->type == CPP_OPEN_SQUARE
8866      && next_token->flags & DIGRAPH
8867      && next_token_2->type == CPP_COLON
8868      && !(next_token_2->flags & PREV_WHITE))
8869    {
8870      cp_parser_parse_tentatively (parser);
8871      /* Change `:' into `::'.  */
8872      next_token_2->type = CPP_SCOPE;
8873      /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
8874	 CPP_LESS.  */
8875      cp_lexer_consume_token (parser->lexer);
8876      /* Parse the arguments.  */
8877      arguments = cp_parser_enclosed_template_argument_list (parser);
8878      if (!cp_parser_parse_definitely (parser))
8879	{
8880	  /* If we couldn't parse an argument list, then we revert our changes
8881	     and return simply an error. Maybe this is not a template-id
8882	     after all.  */
8883	  next_token_2->type = CPP_COLON;
8884	  cp_parser_error (parser, "expected %<<%>");
8885	  pop_deferring_access_checks ();
8886	  return error_mark_node;
8887	}
8888      /* Otherwise, emit an error about the invalid digraph, but continue
8889	 parsing because we got our argument list.  */
8890      pedwarn ("%<<::%> cannot begin a template-argument list");
8891      inform ("%<<:%> is an alternate spelling for %<[%>. Insert whitespace "
8892	      "between %<<%> and %<::%>");
8893      if (!flag_permissive)
8894	{
8895	  static bool hint;
8896	  if (!hint)
8897	    {
8898	      inform ("(if you use -fpermissive G++ will accept your code)");
8899	      hint = true;
8900	    }
8901	}
8902    }
8903  else
8904    {
8905      /* Look for the `<' that starts the template-argument-list.  */
8906      if (!cp_parser_require (parser, CPP_LESS, "`<'"))
8907	{
8908	  pop_deferring_access_checks ();
8909	  return error_mark_node;
8910	}
8911      /* Parse the arguments.  */
8912      arguments = cp_parser_enclosed_template_argument_list (parser);
8913    }
8914
8915  /* Build a representation of the specialization.  */
8916  if (TREE_CODE (template) == IDENTIFIER_NODE)
8917    template_id = build_min_nt (TEMPLATE_ID_EXPR, template, arguments);
8918  else if (DECL_CLASS_TEMPLATE_P (template)
8919	   || DECL_TEMPLATE_TEMPLATE_PARM_P (template))
8920    {
8921      bool entering_scope;
8922      /* In "template <typename T> ... A<T>::", A<T> is the abstract A
8923	 template (rather than some instantiation thereof) only if
8924	 is not nested within some other construct.  For example, in
8925	 "template <typename T> void f(T) { A<T>::", A<T> is just an
8926	 instantiation of A.  */
8927      entering_scope = (template_parm_scope_p ()
8928			&& cp_lexer_next_token_is (parser->lexer,
8929						   CPP_SCOPE));
8930      template_id
8931	= finish_template_type (template, arguments, entering_scope);
8932    }
8933  else
8934    {
8935      /* If it's not a class-template or a template-template, it should be
8936	 a function-template.  */
8937      gcc_assert ((DECL_FUNCTION_TEMPLATE_P (template)
8938		   || TREE_CODE (template) == OVERLOAD
8939		   || BASELINK_P (template)));
8940
8941      template_id = lookup_template_function (template, arguments);
8942    }
8943
8944  /* If parsing tentatively, replace the sequence of tokens that makes
8945     up the template-id with a CPP_TEMPLATE_ID token.  That way,
8946     should we re-parse the token stream, we will not have to repeat
8947     the effort required to do the parse, nor will we issue duplicate
8948     error messages about problems during instantiation of the
8949     template.  */
8950  if (start_of_id)
8951    {
8952      cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
8953
8954      /* Reset the contents of the START_OF_ID token.  */
8955      token->type = CPP_TEMPLATE_ID;
8956      /* Retrieve any deferred checks.  Do not pop this access checks yet
8957	 so the memory will not be reclaimed during token replacing below.  */
8958      token->u.tree_check_value = GGC_CNEW (struct tree_check);
8959      token->u.tree_check_value->value = template_id;
8960      token->u.tree_check_value->checks = get_deferred_access_checks ();
8961      token->keyword = RID_MAX;
8962
8963      /* Purge all subsequent tokens.  */
8964      cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
8965
8966      /* ??? Can we actually assume that, if template_id ==
8967	 error_mark_node, we will have issued a diagnostic to the
8968	 user, as opposed to simply marking the tentative parse as
8969	 failed?  */
8970      if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
8971	error ("parse error in template argument list");
8972    }
8973
8974  pop_deferring_access_checks ();
8975  return template_id;
8976}
8977
8978/* Parse a template-name.
8979
8980   template-name:
8981     identifier
8982
8983   The standard should actually say:
8984
8985   template-name:
8986     identifier
8987     operator-function-id
8988
8989   A defect report has been filed about this issue.
8990
8991   A conversion-function-id cannot be a template name because they cannot
8992   be part of a template-id. In fact, looking at this code:
8993
8994   a.operator K<int>()
8995
8996   the conversion-function-id is "operator K<int>", and K<int> is a type-id.
8997   It is impossible to call a templated conversion-function-id with an
8998   explicit argument list, since the only allowed template parameter is
8999   the type to which it is converting.
9000
9001   If TEMPLATE_KEYWORD_P is true, then we have just seen the
9002   `template' keyword, in a construction like:
9003
9004     T::template f<3>()
9005
9006   In that case `f' is taken to be a template-name, even though there
9007   is no way of knowing for sure.
9008
9009   Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
9010   name refers to a set of overloaded functions, at least one of which
9011   is a template, or an IDENTIFIER_NODE with the name of the template,
9012   if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
9013   names are looked up inside uninstantiated templates.  */
9014
9015static tree
9016cp_parser_template_name (cp_parser* parser,
9017			 bool template_keyword_p,
9018			 bool check_dependency_p,
9019			 bool is_declaration,
9020			 bool *is_identifier)
9021{
9022  tree identifier;
9023  tree decl;
9024  tree fns;
9025
9026  /* If the next token is `operator', then we have either an
9027     operator-function-id or a conversion-function-id.  */
9028  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
9029    {
9030      /* We don't know whether we're looking at an
9031	 operator-function-id or a conversion-function-id.  */
9032      cp_parser_parse_tentatively (parser);
9033      /* Try an operator-function-id.  */
9034      identifier = cp_parser_operator_function_id (parser);
9035      /* If that didn't work, try a conversion-function-id.  */
9036      if (!cp_parser_parse_definitely (parser))
9037	{
9038	  cp_parser_error (parser, "expected template-name");
9039	  return error_mark_node;
9040	}
9041    }
9042  /* Look for the identifier.  */
9043  else
9044    identifier = cp_parser_identifier (parser);
9045
9046  /* If we didn't find an identifier, we don't have a template-id.  */
9047  if (identifier == error_mark_node)
9048    return error_mark_node;
9049
9050  /* If the name immediately followed the `template' keyword, then it
9051     is a template-name.  However, if the next token is not `<', then
9052     we do not treat it as a template-name, since it is not being used
9053     as part of a template-id.  This enables us to handle constructs
9054     like:
9055
9056       template <typename T> struct S { S(); };
9057       template <typename T> S<T>::S();
9058
9059     correctly.  We would treat `S' as a template -- if it were `S<T>'
9060     -- but we do not if there is no `<'.  */
9061
9062  if (processing_template_decl
9063      && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
9064    {
9065      /* In a declaration, in a dependent context, we pretend that the
9066	 "template" keyword was present in order to improve error
9067	 recovery.  For example, given:
9068
9069	   template <typename T> void f(T::X<int>);
9070
9071	 we want to treat "X<int>" as a template-id.  */
9072      if (is_declaration
9073	  && !template_keyword_p
9074	  && parser->scope && TYPE_P (parser->scope)
9075	  && check_dependency_p
9076	  && dependent_type_p (parser->scope)
9077	  /* Do not do this for dtors (or ctors), since they never
9078	     need the template keyword before their name.  */
9079	  && !constructor_name_p (identifier, parser->scope))
9080	{
9081	  cp_token_position start = 0;
9082
9083	  /* Explain what went wrong.  */
9084	  error ("non-template %qD used as template", identifier);
9085	  inform ("use %<%T::template %D%> to indicate that it is a template",
9086		  parser->scope, identifier);
9087	  /* If parsing tentatively, find the location of the "<" token.  */
9088	  if (cp_parser_simulate_error (parser))
9089	    start = cp_lexer_token_position (parser->lexer, true);
9090	  /* Parse the template arguments so that we can issue error
9091	     messages about them.  */
9092	  cp_lexer_consume_token (parser->lexer);
9093	  cp_parser_enclosed_template_argument_list (parser);
9094	  /* Skip tokens until we find a good place from which to
9095	     continue parsing.  */
9096	  cp_parser_skip_to_closing_parenthesis (parser,
9097						 /*recovering=*/true,
9098						 /*or_comma=*/true,
9099						 /*consume_paren=*/false);
9100	  /* If parsing tentatively, permanently remove the
9101	     template argument list.  That will prevent duplicate
9102	     error messages from being issued about the missing
9103	     "template" keyword.  */
9104	  if (start)
9105	    cp_lexer_purge_tokens_after (parser->lexer, start);
9106	  if (is_identifier)
9107	    *is_identifier = true;
9108	  return identifier;
9109	}
9110
9111      /* If the "template" keyword is present, then there is generally
9112	 no point in doing name-lookup, so we just return IDENTIFIER.
9113	 But, if the qualifying scope is non-dependent then we can
9114	 (and must) do name-lookup normally.  */
9115      if (template_keyword_p
9116	  && (!parser->scope
9117	      || (TYPE_P (parser->scope)
9118		  && dependent_type_p (parser->scope))))
9119	return identifier;
9120    }
9121
9122  /* Look up the name.  */
9123  decl = cp_parser_lookup_name (parser, identifier,
9124				none_type,
9125				/*is_template=*/false,
9126				/*is_namespace=*/false,
9127				check_dependency_p,
9128				/*ambiguous_decls=*/NULL);
9129  decl = maybe_get_template_decl_from_type_decl (decl);
9130
9131  /* If DECL is a template, then the name was a template-name.  */
9132  if (TREE_CODE (decl) == TEMPLATE_DECL)
9133    ;
9134  else
9135    {
9136      tree fn = NULL_TREE;
9137
9138      /* The standard does not explicitly indicate whether a name that
9139	 names a set of overloaded declarations, some of which are
9140	 templates, is a template-name.  However, such a name should
9141	 be a template-name; otherwise, there is no way to form a
9142	 template-id for the overloaded templates.  */
9143      fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
9144      if (TREE_CODE (fns) == OVERLOAD)
9145	for (fn = fns; fn; fn = OVL_NEXT (fn))
9146	  if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
9147	    break;
9148
9149      if (!fn)
9150	{
9151	  /* The name does not name a template.  */
9152	  cp_parser_error (parser, "expected template-name");
9153	  return error_mark_node;
9154	}
9155    }
9156
9157  /* If DECL is dependent, and refers to a function, then just return
9158     its name; we will look it up again during template instantiation.  */
9159  if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
9160    {
9161      tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
9162      if (TYPE_P (scope) && dependent_type_p (scope))
9163	return identifier;
9164    }
9165
9166  return decl;
9167}
9168
9169/* Parse a template-argument-list.
9170
9171   template-argument-list:
9172     template-argument
9173     template-argument-list , template-argument
9174
9175   Returns a TREE_VEC containing the arguments.  */
9176
9177static tree
9178cp_parser_template_argument_list (cp_parser* parser)
9179{
9180  tree fixed_args[10];
9181  unsigned n_args = 0;
9182  unsigned alloced = 10;
9183  tree *arg_ary = fixed_args;
9184  tree vec;
9185  bool saved_in_template_argument_list_p;
9186  bool saved_ice_p;
9187  bool saved_non_ice_p;
9188
9189  saved_in_template_argument_list_p = parser->in_template_argument_list_p;
9190  parser->in_template_argument_list_p = true;
9191  /* Even if the template-id appears in an integral
9192     constant-expression, the contents of the argument list do
9193     not.  */
9194  saved_ice_p = parser->integral_constant_expression_p;
9195  parser->integral_constant_expression_p = false;
9196  saved_non_ice_p = parser->non_integral_constant_expression_p;
9197  parser->non_integral_constant_expression_p = false;
9198  /* Parse the arguments.  */
9199  do
9200    {
9201      tree argument;
9202
9203      if (n_args)
9204	/* Consume the comma.  */
9205	cp_lexer_consume_token (parser->lexer);
9206
9207      /* Parse the template-argument.  */
9208      argument = cp_parser_template_argument (parser);
9209      if (n_args == alloced)
9210	{
9211	  alloced *= 2;
9212
9213	  if (arg_ary == fixed_args)
9214	    {
9215	      arg_ary = XNEWVEC (tree, alloced);
9216	      memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
9217	    }
9218	  else
9219	    arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
9220	}
9221      arg_ary[n_args++] = argument;
9222    }
9223  while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
9224
9225  vec = make_tree_vec (n_args);
9226
9227  while (n_args--)
9228    TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
9229
9230  if (arg_ary != fixed_args)
9231    free (arg_ary);
9232  parser->non_integral_constant_expression_p = saved_non_ice_p;
9233  parser->integral_constant_expression_p = saved_ice_p;
9234  parser->in_template_argument_list_p = saved_in_template_argument_list_p;
9235  return vec;
9236}
9237
9238/* Parse a template-argument.
9239
9240   template-argument:
9241     assignment-expression
9242     type-id
9243     id-expression
9244
9245   The representation is that of an assignment-expression, type-id, or
9246   id-expression -- except that the qualified id-expression is
9247   evaluated, so that the value returned is either a DECL or an
9248   OVERLOAD.
9249
9250   Although the standard says "assignment-expression", it forbids
9251   throw-expressions or assignments in the template argument.
9252   Therefore, we use "conditional-expression" instead.  */
9253
9254static tree
9255cp_parser_template_argument (cp_parser* parser)
9256{
9257  tree argument;
9258  bool template_p;
9259  bool address_p;
9260  bool maybe_type_id = false;
9261  cp_token *token;
9262  cp_id_kind idk;
9263
9264  /* There's really no way to know what we're looking at, so we just
9265     try each alternative in order.
9266
9267       [temp.arg]
9268
9269       In a template-argument, an ambiguity between a type-id and an
9270       expression is resolved to a type-id, regardless of the form of
9271       the corresponding template-parameter.
9272
9273     Therefore, we try a type-id first.  */
9274  cp_parser_parse_tentatively (parser);
9275  argument = cp_parser_type_id (parser);
9276  /* If there was no error parsing the type-id but the next token is a '>>',
9277     we probably found a typo for '> >'. But there are type-id which are
9278     also valid expressions. For instance:
9279
9280     struct X { int operator >> (int); };
9281     template <int V> struct Foo {};
9282     Foo<X () >> 5> r;
9283
9284     Here 'X()' is a valid type-id of a function type, but the user just
9285     wanted to write the expression "X() >> 5". Thus, we remember that we
9286     found a valid type-id, but we still try to parse the argument as an
9287     expression to see what happens.  */
9288  if (!cp_parser_error_occurred (parser)
9289      && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
9290    {
9291      maybe_type_id = true;
9292      cp_parser_abort_tentative_parse (parser);
9293    }
9294  else
9295    {
9296      /* If the next token isn't a `,' or a `>', then this argument wasn't
9297      really finished. This means that the argument is not a valid
9298      type-id.  */
9299      if (!cp_parser_next_token_ends_template_argument_p (parser))
9300	cp_parser_error (parser, "expected template-argument");
9301      /* If that worked, we're done.  */
9302      if (cp_parser_parse_definitely (parser))
9303	return argument;
9304    }
9305  /* We're still not sure what the argument will be.  */
9306  cp_parser_parse_tentatively (parser);
9307  /* Try a template.  */
9308  argument = cp_parser_id_expression (parser,
9309				      /*template_keyword_p=*/false,
9310				      /*check_dependency_p=*/true,
9311				      &template_p,
9312				      /*declarator_p=*/false,
9313				      /*optional_p=*/false);
9314  /* If the next token isn't a `,' or a `>', then this argument wasn't
9315     really finished.  */
9316  if (!cp_parser_next_token_ends_template_argument_p (parser))
9317    cp_parser_error (parser, "expected template-argument");
9318  if (!cp_parser_error_occurred (parser))
9319    {
9320      /* Figure out what is being referred to.  If the id-expression
9321	 was for a class template specialization, then we will have a
9322	 TYPE_DECL at this point.  There is no need to do name lookup
9323	 at this point in that case.  */
9324      if (TREE_CODE (argument) != TYPE_DECL)
9325	argument = cp_parser_lookup_name (parser, argument,
9326					  none_type,
9327					  /*is_template=*/template_p,
9328					  /*is_namespace=*/false,
9329					  /*check_dependency=*/true,
9330					  /*ambiguous_decls=*/NULL);
9331      if (TREE_CODE (argument) != TEMPLATE_DECL
9332	  && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
9333	cp_parser_error (parser, "expected template-name");
9334    }
9335  if (cp_parser_parse_definitely (parser))
9336    return argument;
9337  /* It must be a non-type argument.  There permitted cases are given
9338     in [temp.arg.nontype]:
9339
9340     -- an integral constant-expression of integral or enumeration
9341	type; or
9342
9343     -- the name of a non-type template-parameter; or
9344
9345     -- the name of an object or function with external linkage...
9346
9347     -- the address of an object or function with external linkage...
9348
9349     -- a pointer to member...  */
9350  /* Look for a non-type template parameter.  */
9351  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
9352    {
9353      cp_parser_parse_tentatively (parser);
9354      argument = cp_parser_primary_expression (parser,
9355					       /*adress_p=*/false,
9356					       /*cast_p=*/false,
9357					       /*template_arg_p=*/true,
9358					       &idk);
9359      if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
9360	  || !cp_parser_next_token_ends_template_argument_p (parser))
9361	cp_parser_simulate_error (parser);
9362      if (cp_parser_parse_definitely (parser))
9363	return argument;
9364    }
9365
9366  /* If the next token is "&", the argument must be the address of an
9367     object or function with external linkage.  */
9368  address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
9369  if (address_p)
9370    cp_lexer_consume_token (parser->lexer);
9371  /* See if we might have an id-expression.  */
9372  token = cp_lexer_peek_token (parser->lexer);
9373  if (token->type == CPP_NAME
9374      || token->keyword == RID_OPERATOR
9375      || token->type == CPP_SCOPE
9376      || token->type == CPP_TEMPLATE_ID
9377      || token->type == CPP_NESTED_NAME_SPECIFIER)
9378    {
9379      cp_parser_parse_tentatively (parser);
9380      argument = cp_parser_primary_expression (parser,
9381					       address_p,
9382					       /*cast_p=*/false,
9383					       /*template_arg_p=*/true,
9384					       &idk);
9385      if (cp_parser_error_occurred (parser)
9386	  || !cp_parser_next_token_ends_template_argument_p (parser))
9387	cp_parser_abort_tentative_parse (parser);
9388      else
9389	{
9390	  if (TREE_CODE (argument) == INDIRECT_REF)
9391	    {
9392	      gcc_assert (REFERENCE_REF_P (argument));
9393	      argument = TREE_OPERAND (argument, 0);
9394	    }
9395
9396	  if (TREE_CODE (argument) == VAR_DECL)
9397	    {
9398	      /* A variable without external linkage might still be a
9399		 valid constant-expression, so no error is issued here
9400		 if the external-linkage check fails.  */
9401	      if (!address_p && !DECL_EXTERNAL_LINKAGE_P (argument))
9402		cp_parser_simulate_error (parser);
9403	    }
9404	  else if (is_overloaded_fn (argument))
9405	    /* All overloaded functions are allowed; if the external
9406	       linkage test does not pass, an error will be issued
9407	       later.  */
9408	    ;
9409	  else if (address_p
9410		   && (TREE_CODE (argument) == OFFSET_REF
9411		       || TREE_CODE (argument) == SCOPE_REF))
9412	    /* A pointer-to-member.  */
9413	    ;
9414	  else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
9415	    ;
9416	  else
9417	    cp_parser_simulate_error (parser);
9418
9419	  if (cp_parser_parse_definitely (parser))
9420	    {
9421	      if (address_p)
9422		argument = build_x_unary_op (ADDR_EXPR, argument);
9423	      return argument;
9424	    }
9425	}
9426    }
9427  /* If the argument started with "&", there are no other valid
9428     alternatives at this point.  */
9429  if (address_p)
9430    {
9431      cp_parser_error (parser, "invalid non-type template argument");
9432      return error_mark_node;
9433    }
9434
9435  /* If the argument wasn't successfully parsed as a type-id followed
9436     by '>>', the argument can only be a constant expression now.
9437     Otherwise, we try parsing the constant-expression tentatively,
9438     because the argument could really be a type-id.  */
9439  if (maybe_type_id)
9440    cp_parser_parse_tentatively (parser);
9441  argument = cp_parser_constant_expression (parser,
9442					    /*allow_non_constant_p=*/false,
9443					    /*non_constant_p=*/NULL);
9444  argument = fold_non_dependent_expr (argument);
9445  if (!maybe_type_id)
9446    return argument;
9447  if (!cp_parser_next_token_ends_template_argument_p (parser))
9448    cp_parser_error (parser, "expected template-argument");
9449  if (cp_parser_parse_definitely (parser))
9450    return argument;
9451  /* We did our best to parse the argument as a non type-id, but that
9452     was the only alternative that matched (albeit with a '>' after
9453     it). We can assume it's just a typo from the user, and a
9454     diagnostic will then be issued.  */
9455  return cp_parser_type_id (parser);
9456}
9457
9458/* Parse an explicit-instantiation.
9459
9460   explicit-instantiation:
9461     template declaration
9462
9463   Although the standard says `declaration', what it really means is:
9464
9465   explicit-instantiation:
9466     template decl-specifier-seq [opt] declarator [opt] ;
9467
9468   Things like `template int S<int>::i = 5, int S<double>::j;' are not
9469   supposed to be allowed.  A defect report has been filed about this
9470   issue.
9471
9472   GNU Extension:
9473
9474   explicit-instantiation:
9475     storage-class-specifier template
9476       decl-specifier-seq [opt] declarator [opt] ;
9477     function-specifier template
9478       decl-specifier-seq [opt] declarator [opt] ;  */
9479
9480static void
9481cp_parser_explicit_instantiation (cp_parser* parser)
9482{
9483  int declares_class_or_enum;
9484  cp_decl_specifier_seq decl_specifiers;
9485  tree extension_specifier = NULL_TREE;
9486
9487  /* Look for an (optional) storage-class-specifier or
9488     function-specifier.  */
9489  if (cp_parser_allow_gnu_extensions_p (parser))
9490    {
9491      extension_specifier
9492	= cp_parser_storage_class_specifier_opt (parser);
9493      if (!extension_specifier)
9494	extension_specifier
9495	  = cp_parser_function_specifier_opt (parser,
9496					      /*decl_specs=*/NULL);
9497    }
9498
9499  /* Look for the `template' keyword.  */
9500  cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9501  /* Let the front end know that we are processing an explicit
9502     instantiation.  */
9503  begin_explicit_instantiation ();
9504  /* [temp.explicit] says that we are supposed to ignore access
9505     control while processing explicit instantiation directives.  */
9506  push_deferring_access_checks (dk_no_check);
9507  /* Parse a decl-specifier-seq.  */
9508  cp_parser_decl_specifier_seq (parser,
9509				CP_PARSER_FLAGS_OPTIONAL,
9510				&decl_specifiers,
9511				&declares_class_or_enum);
9512  /* If there was exactly one decl-specifier, and it declared a class,
9513     and there's no declarator, then we have an explicit type
9514     instantiation.  */
9515  if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
9516    {
9517      tree type;
9518
9519      type = check_tag_decl (&decl_specifiers);
9520      /* Turn access control back on for names used during
9521	 template instantiation.  */
9522      pop_deferring_access_checks ();
9523      if (type)
9524	do_type_instantiation (type, extension_specifier,
9525			       /*complain=*/tf_error);
9526    }
9527  else
9528    {
9529      cp_declarator *declarator;
9530      tree decl;
9531
9532      /* Parse the declarator.  */
9533      declarator
9534	= cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
9535				/*ctor_dtor_or_conv_p=*/NULL,
9536				/*parenthesized_p=*/NULL,
9537				/*member_p=*/false);
9538      if (declares_class_or_enum & 2)
9539	cp_parser_check_for_definition_in_return_type (declarator,
9540						       decl_specifiers.type);
9541      if (declarator != cp_error_declarator)
9542	{
9543	  decl = grokdeclarator (declarator, &decl_specifiers,
9544				 NORMAL, 0, &decl_specifiers.attributes);
9545	  /* Turn access control back on for names used during
9546	     template instantiation.  */
9547	  pop_deferring_access_checks ();
9548	  /* Do the explicit instantiation.  */
9549	  do_decl_instantiation (decl, extension_specifier);
9550	}
9551      else
9552	{
9553	  pop_deferring_access_checks ();
9554	  /* Skip the body of the explicit instantiation.  */
9555	  cp_parser_skip_to_end_of_statement (parser);
9556	}
9557    }
9558  /* We're done with the instantiation.  */
9559  end_explicit_instantiation ();
9560
9561  cp_parser_consume_semicolon_at_end_of_statement (parser);
9562}
9563
9564/* Parse an explicit-specialization.
9565
9566   explicit-specialization:
9567     template < > declaration
9568
9569   Although the standard says `declaration', what it really means is:
9570
9571   explicit-specialization:
9572     template <> decl-specifier [opt] init-declarator [opt] ;
9573     template <> function-definition
9574     template <> explicit-specialization
9575     template <> template-declaration  */
9576
9577static void
9578cp_parser_explicit_specialization (cp_parser* parser)
9579{
9580  bool need_lang_pop;
9581  /* Look for the `template' keyword.  */
9582  cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9583  /* Look for the `<'.  */
9584  cp_parser_require (parser, CPP_LESS, "`<'");
9585  /* Look for the `>'.  */
9586  cp_parser_require (parser, CPP_GREATER, "`>'");
9587  /* We have processed another parameter list.  */
9588  ++parser->num_template_parameter_lists;
9589  /* [temp]
9590
9591     A template ... explicit specialization ... shall not have C
9592     linkage.  */
9593  if (current_lang_name == lang_name_c)
9594    {
9595      error ("template specialization with C linkage");
9596      /* Give it C++ linkage to avoid confusing other parts of the
9597	 front end.  */
9598      push_lang_context (lang_name_cplusplus);
9599      need_lang_pop = true;
9600    }
9601  else
9602    need_lang_pop = false;
9603  /* Let the front end know that we are beginning a specialization.  */
9604  if (!begin_specialization ())
9605    {
9606      end_specialization ();
9607      cp_parser_skip_to_end_of_block_or_statement (parser);
9608      return;
9609    }
9610
9611  /* If the next keyword is `template', we need to figure out whether
9612     or not we're looking a template-declaration.  */
9613  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
9614    {
9615      if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
9616	  && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
9617	cp_parser_template_declaration_after_export (parser,
9618						     /*member_p=*/false);
9619      else
9620	cp_parser_explicit_specialization (parser);
9621    }
9622  else
9623    /* Parse the dependent declaration.  */
9624    cp_parser_single_declaration (parser,
9625				  /*checks=*/NULL,
9626				  /*member_p=*/false,
9627				  /*friend_p=*/NULL);
9628  /* We're done with the specialization.  */
9629  end_specialization ();
9630  /* For the erroneous case of a template with C linkage, we pushed an
9631     implicit C++ linkage scope; exit that scope now.  */
9632  if (need_lang_pop)
9633    pop_lang_context ();
9634  /* We're done with this parameter list.  */
9635  --parser->num_template_parameter_lists;
9636}
9637
9638/* Parse a type-specifier.
9639
9640   type-specifier:
9641     simple-type-specifier
9642     class-specifier
9643     enum-specifier
9644     elaborated-type-specifier
9645     cv-qualifier
9646
9647   GNU Extension:
9648
9649   type-specifier:
9650     __complex__
9651
9652   Returns a representation of the type-specifier.  For a
9653   class-specifier, enum-specifier, or elaborated-type-specifier, a
9654   TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
9655
9656   The parser flags FLAGS is used to control type-specifier parsing.
9657
9658   If IS_DECLARATION is TRUE, then this type-specifier is appearing
9659   in a decl-specifier-seq.
9660
9661   If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
9662   class-specifier, enum-specifier, or elaborated-type-specifier, then
9663   *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
9664   if a type is declared; 2 if it is defined.  Otherwise, it is set to
9665   zero.
9666
9667   If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
9668   cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
9669   is set to FALSE.  */
9670
9671static tree
9672cp_parser_type_specifier (cp_parser* parser,
9673			  cp_parser_flags flags,
9674			  cp_decl_specifier_seq *decl_specs,
9675			  bool is_declaration,
9676			  int* declares_class_or_enum,
9677			  bool* is_cv_qualifier)
9678{
9679  tree type_spec = NULL_TREE;
9680  cp_token *token;
9681  enum rid keyword;
9682  cp_decl_spec ds = ds_last;
9683
9684  /* Assume this type-specifier does not declare a new type.  */
9685  if (declares_class_or_enum)
9686    *declares_class_or_enum = 0;
9687  /* And that it does not specify a cv-qualifier.  */
9688  if (is_cv_qualifier)
9689    *is_cv_qualifier = false;
9690  /* Peek at the next token.  */
9691  token = cp_lexer_peek_token (parser->lexer);
9692
9693  /* If we're looking at a keyword, we can use that to guide the
9694     production we choose.  */
9695  keyword = token->keyword;
9696  switch (keyword)
9697    {
9698    case RID_ENUM:
9699      /* Look for the enum-specifier.  */
9700      type_spec = cp_parser_enum_specifier (parser);
9701      /* If that worked, we're done.  */
9702      if (type_spec)
9703	{
9704	  if (declares_class_or_enum)
9705	    *declares_class_or_enum = 2;
9706	  if (decl_specs)
9707	    cp_parser_set_decl_spec_type (decl_specs,
9708					  type_spec,
9709					  /*user_defined_p=*/true);
9710	  return type_spec;
9711	}
9712      else
9713	goto elaborated_type_specifier;
9714
9715      /* Any of these indicate either a class-specifier, or an
9716	 elaborated-type-specifier.  */
9717    case RID_CLASS:
9718    case RID_STRUCT:
9719    case RID_UNION:
9720      /* Parse tentatively so that we can back up if we don't find a
9721	 class-specifier.  */
9722      cp_parser_parse_tentatively (parser);
9723      /* Look for the class-specifier.  */
9724      type_spec = cp_parser_class_specifier (parser);
9725      /* If that worked, we're done.  */
9726      if (cp_parser_parse_definitely (parser))
9727	{
9728	  if (declares_class_or_enum)
9729	    *declares_class_or_enum = 2;
9730	  if (decl_specs)
9731	    cp_parser_set_decl_spec_type (decl_specs,
9732					  type_spec,
9733					  /*user_defined_p=*/true);
9734	  return type_spec;
9735	}
9736
9737      /* Fall through.  */
9738    elaborated_type_specifier:
9739      /* We're declaring (not defining) a class or enum.  */
9740      if (declares_class_or_enum)
9741	*declares_class_or_enum = 1;
9742
9743      /* Fall through.  */
9744    case RID_TYPENAME:
9745      /* Look for an elaborated-type-specifier.  */
9746      type_spec
9747	= (cp_parser_elaborated_type_specifier
9748	   (parser,
9749	    decl_specs && decl_specs->specs[(int) ds_friend],
9750	    is_declaration));
9751      if (decl_specs)
9752	cp_parser_set_decl_spec_type (decl_specs,
9753				      type_spec,
9754				      /*user_defined_p=*/true);
9755      return type_spec;
9756
9757    case RID_CONST:
9758      ds = ds_const;
9759      if (is_cv_qualifier)
9760	*is_cv_qualifier = true;
9761      break;
9762
9763    case RID_VOLATILE:
9764      ds = ds_volatile;
9765      if (is_cv_qualifier)
9766	*is_cv_qualifier = true;
9767      break;
9768
9769    case RID_RESTRICT:
9770      ds = ds_restrict;
9771      if (is_cv_qualifier)
9772	*is_cv_qualifier = true;
9773      break;
9774
9775    case RID_COMPLEX:
9776      /* The `__complex__' keyword is a GNU extension.  */
9777      ds = ds_complex;
9778      break;
9779
9780    default:
9781      break;
9782    }
9783
9784  /* Handle simple keywords.  */
9785  if (ds != ds_last)
9786    {
9787      if (decl_specs)
9788	{
9789	  ++decl_specs->specs[(int)ds];
9790	  decl_specs->any_specifiers_p = true;
9791	}
9792      return cp_lexer_consume_token (parser->lexer)->u.value;
9793    }
9794
9795  /* If we do not already have a type-specifier, assume we are looking
9796     at a simple-type-specifier.  */
9797  type_spec = cp_parser_simple_type_specifier (parser,
9798					       decl_specs,
9799					       flags);
9800
9801  /* If we didn't find a type-specifier, and a type-specifier was not
9802     optional in this context, issue an error message.  */
9803  if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9804    {
9805      cp_parser_error (parser, "expected type specifier");
9806      return error_mark_node;
9807    }
9808
9809  return type_spec;
9810}
9811
9812/* Parse a simple-type-specifier.
9813
9814   simple-type-specifier:
9815     :: [opt] nested-name-specifier [opt] type-name
9816     :: [opt] nested-name-specifier template template-id
9817     char
9818     wchar_t
9819     bool
9820     short
9821     int
9822     long
9823     signed
9824     unsigned
9825     float
9826     double
9827     void
9828
9829   GNU Extension:
9830
9831   simple-type-specifier:
9832     __typeof__ unary-expression
9833     __typeof__ ( type-id )
9834
9835   Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
9836   appropriately updated.  */
9837
9838static tree
9839cp_parser_simple_type_specifier (cp_parser* parser,
9840				 cp_decl_specifier_seq *decl_specs,
9841				 cp_parser_flags flags)
9842{
9843  tree type = NULL_TREE;
9844  cp_token *token;
9845
9846  /* Peek at the next token.  */
9847  token = cp_lexer_peek_token (parser->lexer);
9848
9849  /* If we're looking at a keyword, things are easy.  */
9850  switch (token->keyword)
9851    {
9852    case RID_CHAR:
9853      if (decl_specs)
9854	decl_specs->explicit_char_p = true;
9855      type = char_type_node;
9856      break;
9857    case RID_WCHAR:
9858      type = wchar_type_node;
9859      break;
9860    case RID_BOOL:
9861      type = boolean_type_node;
9862      break;
9863    case RID_SHORT:
9864      if (decl_specs)
9865	++decl_specs->specs[(int) ds_short];
9866      type = short_integer_type_node;
9867      break;
9868    case RID_INT:
9869      if (decl_specs)
9870	decl_specs->explicit_int_p = true;
9871      type = integer_type_node;
9872      break;
9873    case RID_LONG:
9874      if (decl_specs)
9875	++decl_specs->specs[(int) ds_long];
9876      type = long_integer_type_node;
9877      break;
9878    case RID_SIGNED:
9879      if (decl_specs)
9880	++decl_specs->specs[(int) ds_signed];
9881      type = integer_type_node;
9882      break;
9883    case RID_UNSIGNED:
9884      if (decl_specs)
9885	++decl_specs->specs[(int) ds_unsigned];
9886      type = unsigned_type_node;
9887      break;
9888    case RID_FLOAT:
9889      type = float_type_node;
9890      break;
9891    case RID_DOUBLE:
9892      type = double_type_node;
9893      break;
9894    case RID_VOID:
9895      type = void_type_node;
9896      break;
9897
9898    case RID_TYPEOF:
9899      /* Consume the `typeof' token.  */
9900      cp_lexer_consume_token (parser->lexer);
9901      /* Parse the operand to `typeof'.  */
9902      type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
9903      /* If it is not already a TYPE, take its type.  */
9904      if (!TYPE_P (type))
9905	type = finish_typeof (type);
9906
9907      if (decl_specs)
9908	cp_parser_set_decl_spec_type (decl_specs, type,
9909				      /*user_defined_p=*/true);
9910
9911      return type;
9912
9913    default:
9914      break;
9915    }
9916
9917  /* If the type-specifier was for a built-in type, we're done.  */
9918  if (type)
9919    {
9920      tree id;
9921
9922      /* Record the type.  */
9923      if (decl_specs
9924	  && (token->keyword != RID_SIGNED
9925	      && token->keyword != RID_UNSIGNED
9926	      && token->keyword != RID_SHORT
9927	      && token->keyword != RID_LONG))
9928	cp_parser_set_decl_spec_type (decl_specs,
9929				      type,
9930				      /*user_defined=*/false);
9931      if (decl_specs)
9932	decl_specs->any_specifiers_p = true;
9933
9934      /* Consume the token.  */
9935      id = cp_lexer_consume_token (parser->lexer)->u.value;
9936
9937      /* There is no valid C++ program where a non-template type is
9938	 followed by a "<".  That usually indicates that the user thought
9939	 that the type was a template.  */
9940      cp_parser_check_for_invalid_template_id (parser, type);
9941
9942      return TYPE_NAME (type);
9943    }
9944
9945  /* The type-specifier must be a user-defined type.  */
9946  if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
9947    {
9948      bool qualified_p;
9949      bool global_p;
9950
9951      /* Don't gobble tokens or issue error messages if this is an
9952	 optional type-specifier.  */
9953      if (flags & CP_PARSER_FLAGS_OPTIONAL)
9954	cp_parser_parse_tentatively (parser);
9955
9956      /* Look for the optional `::' operator.  */
9957      global_p
9958	= (cp_parser_global_scope_opt (parser,
9959				       /*current_scope_valid_p=*/false)
9960	   != NULL_TREE);
9961      /* Look for the nested-name specifier.  */
9962      qualified_p
9963	= (cp_parser_nested_name_specifier_opt (parser,
9964						/*typename_keyword_p=*/false,
9965						/*check_dependency_p=*/true,
9966						/*type_p=*/false,
9967						/*is_declaration=*/false)
9968	   != NULL_TREE);
9969      /* If we have seen a nested-name-specifier, and the next token
9970	 is `template', then we are using the template-id production.  */
9971      if (parser->scope
9972	  && cp_parser_optional_template_keyword (parser))
9973	{
9974	  /* Look for the template-id.  */
9975	  type = cp_parser_template_id (parser,
9976					/*template_keyword_p=*/true,
9977					/*check_dependency_p=*/true,
9978					/*is_declaration=*/false);
9979	  /* If the template-id did not name a type, we are out of
9980	     luck.  */
9981	  if (TREE_CODE (type) != TYPE_DECL)
9982	    {
9983	      cp_parser_error (parser, "expected template-id for type");
9984	      type = NULL_TREE;
9985	    }
9986	}
9987      /* Otherwise, look for a type-name.  */
9988      else
9989	type = cp_parser_type_name (parser);
9990      /* Keep track of all name-lookups performed in class scopes.  */
9991      if (type
9992	  && !global_p
9993	  && !qualified_p
9994	  && TREE_CODE (type) == TYPE_DECL
9995	  && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
9996	maybe_note_name_used_in_class (DECL_NAME (type), type);
9997      /* If it didn't work out, we don't have a TYPE.  */
9998      if ((flags & CP_PARSER_FLAGS_OPTIONAL)
9999	  && !cp_parser_parse_definitely (parser))
10000	type = NULL_TREE;
10001      if (type && decl_specs)
10002	cp_parser_set_decl_spec_type (decl_specs, type,
10003				      /*user_defined=*/true);
10004    }
10005
10006  /* If we didn't get a type-name, issue an error message.  */
10007  if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
10008    {
10009      cp_parser_error (parser, "expected type-name");
10010      return error_mark_node;
10011    }
10012
10013  /* There is no valid C++ program where a non-template type is
10014     followed by a "<".  That usually indicates that the user thought
10015     that the type was a template.  */
10016  if (type && type != error_mark_node)
10017    {
10018      /* As a last-ditch effort, see if TYPE is an Objective-C type.
10019	 If it is, then the '<'...'>' enclose protocol names rather than
10020	 template arguments, and so everything is fine.  */
10021      if (c_dialect_objc ()
10022	  && (objc_is_id (type) || objc_is_class_name (type)))
10023	{
10024	  tree protos = cp_parser_objc_protocol_refs_opt (parser);
10025	  tree qual_type = objc_get_protocol_qualified_type (type, protos);
10026
10027	  /* Clobber the "unqualified" type previously entered into
10028	     DECL_SPECS with the new, improved protocol-qualified version.  */
10029	  if (decl_specs)
10030	    decl_specs->type = qual_type;
10031
10032	  return qual_type;
10033	}
10034
10035      cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type));
10036    }
10037
10038  return type;
10039}
10040
10041/* Parse a type-name.
10042
10043   type-name:
10044     class-name
10045     enum-name
10046     typedef-name
10047
10048   enum-name:
10049     identifier
10050
10051   typedef-name:
10052     identifier
10053
10054   Returns a TYPE_DECL for the type.  */
10055
10056static tree
10057cp_parser_type_name (cp_parser* parser)
10058{
10059  tree type_decl;
10060  tree identifier;
10061
10062  /* We can't know yet whether it is a class-name or not.  */
10063  cp_parser_parse_tentatively (parser);
10064  /* Try a class-name.  */
10065  type_decl = cp_parser_class_name (parser,
10066				    /*typename_keyword_p=*/false,
10067				    /*template_keyword_p=*/false,
10068				    none_type,
10069				    /*check_dependency_p=*/true,
10070				    /*class_head_p=*/false,
10071				    /*is_declaration=*/false);
10072  /* If it's not a class-name, keep looking.  */
10073  if (!cp_parser_parse_definitely (parser))
10074    {
10075      /* It must be a typedef-name or an enum-name.  */
10076      identifier = cp_parser_identifier (parser);
10077      if (identifier == error_mark_node)
10078	return error_mark_node;
10079
10080      /* Look up the type-name.  */
10081      type_decl = cp_parser_lookup_name_simple (parser, identifier);
10082
10083      if (TREE_CODE (type_decl) != TYPE_DECL
10084	  && (objc_is_id (identifier) || objc_is_class_name (identifier)))
10085	{
10086	  /* See if this is an Objective-C type.  */
10087	  tree protos = cp_parser_objc_protocol_refs_opt (parser);
10088	  tree type = objc_get_protocol_qualified_type (identifier, protos);
10089	  if (type)
10090	    type_decl = TYPE_NAME (type);
10091	}
10092
10093      /* Issue an error if we did not find a type-name.  */
10094      if (TREE_CODE (type_decl) != TYPE_DECL)
10095	{
10096	  if (!cp_parser_simulate_error (parser))
10097	    cp_parser_name_lookup_error (parser, identifier, type_decl,
10098					 "is not a type");
10099	  type_decl = error_mark_node;
10100	}
10101      /* Remember that the name was used in the definition of the
10102	 current class so that we can check later to see if the
10103	 meaning would have been different after the class was
10104	 entirely defined.  */
10105      else if (type_decl != error_mark_node
10106	       && !parser->scope)
10107	maybe_note_name_used_in_class (identifier, type_decl);
10108    }
10109
10110  return type_decl;
10111}
10112
10113
10114/* Parse an elaborated-type-specifier.  Note that the grammar given
10115   here incorporates the resolution to DR68.
10116
10117   elaborated-type-specifier:
10118     class-key :: [opt] nested-name-specifier [opt] identifier
10119     class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
10120     enum :: [opt] nested-name-specifier [opt] identifier
10121     typename :: [opt] nested-name-specifier identifier
10122     typename :: [opt] nested-name-specifier template [opt]
10123       template-id
10124
10125   GNU extension:
10126
10127   elaborated-type-specifier:
10128     class-key attributes :: [opt] nested-name-specifier [opt] identifier
10129     class-key attributes :: [opt] nested-name-specifier [opt]
10130	       template [opt] template-id
10131     enum attributes :: [opt] nested-name-specifier [opt] identifier
10132
10133   If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
10134   declared `friend'.  If IS_DECLARATION is TRUE, then this
10135   elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
10136   something is being declared.
10137
10138   Returns the TYPE specified.  */
10139
10140static tree
10141cp_parser_elaborated_type_specifier (cp_parser* parser,
10142				     bool is_friend,
10143				     bool is_declaration)
10144{
10145  enum tag_types tag_type;
10146  tree identifier;
10147  tree type = NULL_TREE;
10148  tree attributes = NULL_TREE;
10149
10150  /* See if we're looking at the `enum' keyword.  */
10151  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
10152    {
10153      /* Consume the `enum' token.  */
10154      cp_lexer_consume_token (parser->lexer);
10155      /* Remember that it's an enumeration type.  */
10156      tag_type = enum_type;
10157      /* Parse the attributes.  */
10158      attributes = cp_parser_attributes_opt (parser);
10159    }
10160  /* Or, it might be `typename'.  */
10161  else if (cp_lexer_next_token_is_keyword (parser->lexer,
10162					   RID_TYPENAME))
10163    {
10164      /* Consume the `typename' token.  */
10165      cp_lexer_consume_token (parser->lexer);
10166      /* Remember that it's a `typename' type.  */
10167      tag_type = typename_type;
10168      /* The `typename' keyword is only allowed in templates.  */
10169      if (!processing_template_decl)
10170	pedwarn ("using %<typename%> outside of template");
10171    }
10172  /* Otherwise it must be a class-key.  */
10173  else
10174    {
10175      tag_type = cp_parser_class_key (parser);
10176      if (tag_type == none_type)
10177	return error_mark_node;
10178      /* Parse the attributes.  */
10179      attributes = cp_parser_attributes_opt (parser);
10180    }
10181
10182  /* Look for the `::' operator.  */
10183  cp_parser_global_scope_opt (parser,
10184			      /*current_scope_valid_p=*/false);
10185  /* Look for the nested-name-specifier.  */
10186  if (tag_type == typename_type)
10187    {
10188      if (!cp_parser_nested_name_specifier (parser,
10189					   /*typename_keyword_p=*/true,
10190					   /*check_dependency_p=*/true,
10191					   /*type_p=*/true,
10192					    is_declaration))
10193	return error_mark_node;
10194    }
10195  else
10196    /* Even though `typename' is not present, the proposed resolution
10197       to Core Issue 180 says that in `class A<T>::B', `B' should be
10198       considered a type-name, even if `A<T>' is dependent.  */
10199    cp_parser_nested_name_specifier_opt (parser,
10200					 /*typename_keyword_p=*/true,
10201					 /*check_dependency_p=*/true,
10202					 /*type_p=*/true,
10203					 is_declaration);
10204  /* For everything but enumeration types, consider a template-id.
10205     For an enumeration type, consider only a plain identifier.  */
10206  if (tag_type != enum_type)
10207    {
10208      bool template_p = false;
10209      tree decl;
10210
10211      /* Allow the `template' keyword.  */
10212      template_p = cp_parser_optional_template_keyword (parser);
10213      /* If we didn't see `template', we don't know if there's a
10214	 template-id or not.  */
10215      if (!template_p)
10216	cp_parser_parse_tentatively (parser);
10217      /* Parse the template-id.  */
10218      decl = cp_parser_template_id (parser, template_p,
10219				    /*check_dependency_p=*/true,
10220				    is_declaration);
10221      /* If we didn't find a template-id, look for an ordinary
10222	 identifier.  */
10223      if (!template_p && !cp_parser_parse_definitely (parser))
10224	;
10225      /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
10226	 in effect, then we must assume that, upon instantiation, the
10227	 template will correspond to a class.  */
10228      else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
10229	       && tag_type == typename_type)
10230	type = make_typename_type (parser->scope, decl,
10231				   typename_type,
10232				   /*complain=*/tf_error);
10233      else
10234	type = TREE_TYPE (decl);
10235    }
10236
10237  if (!type)
10238    {
10239      identifier = cp_parser_identifier (parser);
10240
10241      if (identifier == error_mark_node)
10242	{
10243	  parser->scope = NULL_TREE;
10244	  return error_mark_node;
10245	}
10246
10247      /* For a `typename', we needn't call xref_tag.  */
10248      if (tag_type == typename_type
10249	  && TREE_CODE (parser->scope) != NAMESPACE_DECL)
10250	return cp_parser_make_typename_type (parser, parser->scope,
10251					     identifier);
10252      /* Look up a qualified name in the usual way.  */
10253      if (parser->scope)
10254	{
10255	  tree decl;
10256
10257	  decl = cp_parser_lookup_name (parser, identifier,
10258					tag_type,
10259					/*is_template=*/false,
10260					/*is_namespace=*/false,
10261					/*check_dependency=*/true,
10262					/*ambiguous_decls=*/NULL);
10263
10264	  /* If we are parsing friend declaration, DECL may be a
10265	     TEMPLATE_DECL tree node here.  However, we need to check
10266	     whether this TEMPLATE_DECL results in valid code.  Consider
10267	     the following example:
10268
10269	       namespace N {
10270		 template <class T> class C {};
10271	       }
10272	       class X {
10273		 template <class T> friend class N::C; // #1, valid code
10274	       };
10275	       template <class T> class Y {
10276		 friend class N::C;		       // #2, invalid code
10277	       };
10278
10279	     For both case #1 and #2, we arrive at a TEMPLATE_DECL after
10280	     name lookup of `N::C'.  We see that friend declaration must
10281	     be template for the code to be valid.  Note that
10282	     processing_template_decl does not work here since it is
10283	     always 1 for the above two cases.  */
10284
10285	  decl = (cp_parser_maybe_treat_template_as_class
10286		  (decl, /*tag_name_p=*/is_friend
10287			 && parser->num_template_parameter_lists));
10288
10289	  if (TREE_CODE (decl) != TYPE_DECL)
10290	    {
10291	      cp_parser_diagnose_invalid_type_name (parser,
10292						    parser->scope,
10293						    identifier);
10294	      return error_mark_node;
10295	    }
10296
10297	  if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
10298            {
10299              bool allow_template = (parser->num_template_parameter_lists
10300		                      || DECL_SELF_REFERENCE_P (decl));
10301              type = check_elaborated_type_specifier (tag_type, decl,
10302                                                      allow_template);
10303
10304              if (type == error_mark_node)
10305                return error_mark_node;
10306            }
10307
10308	  type = TREE_TYPE (decl);
10309	}
10310      else
10311	{
10312	  /* An elaborated-type-specifier sometimes introduces a new type and
10313	     sometimes names an existing type.  Normally, the rule is that it
10314	     introduces a new type only if there is not an existing type of
10315	     the same name already in scope.  For example, given:
10316
10317	       struct S {};
10318	       void f() { struct S s; }
10319
10320	     the `struct S' in the body of `f' is the same `struct S' as in
10321	     the global scope; the existing definition is used.  However, if
10322	     there were no global declaration, this would introduce a new
10323	     local class named `S'.
10324
10325	     An exception to this rule applies to the following code:
10326
10327	       namespace N { struct S; }
10328
10329	     Here, the elaborated-type-specifier names a new type
10330	     unconditionally; even if there is already an `S' in the
10331	     containing scope this declaration names a new type.
10332	     This exception only applies if the elaborated-type-specifier
10333	     forms the complete declaration:
10334
10335	       [class.name]
10336
10337	       A declaration consisting solely of `class-key identifier ;' is
10338	       either a redeclaration of the name in the current scope or a
10339	       forward declaration of the identifier as a class name.  It
10340	       introduces the name into the current scope.
10341
10342	     We are in this situation precisely when the next token is a `;'.
10343
10344	     An exception to the exception is that a `friend' declaration does
10345	     *not* name a new type; i.e., given:
10346
10347	       struct S { friend struct T; };
10348
10349	     `T' is not a new type in the scope of `S'.
10350
10351	     Also, `new struct S' or `sizeof (struct S)' never results in the
10352	     definition of a new type; a new type can only be declared in a
10353	     declaration context.  */
10354
10355	  tag_scope ts;
10356	  bool template_p;
10357
10358	  if (is_friend)
10359	    /* Friends have special name lookup rules.  */
10360	    ts = ts_within_enclosing_non_class;
10361	  else if (is_declaration
10362		   && cp_lexer_next_token_is (parser->lexer,
10363					      CPP_SEMICOLON))
10364	    /* This is a `class-key identifier ;' */
10365	    ts = ts_current;
10366	  else
10367	    ts = ts_global;
10368
10369	  template_p =
10370	    (parser->num_template_parameter_lists
10371	     && (cp_parser_next_token_starts_class_definition_p (parser)
10372		 || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
10373	  /* An unqualified name was used to reference this type, so
10374	     there were no qualifying templates.  */
10375	  if (!cp_parser_check_template_parameters (parser,
10376						    /*num_templates=*/0))
10377	    return error_mark_node;
10378	  type = xref_tag (tag_type, identifier, ts, template_p);
10379	}
10380    }
10381
10382  if (type == error_mark_node)
10383    return error_mark_node;
10384
10385  /* Allow attributes on forward declarations of classes.  */
10386  if (attributes)
10387    {
10388      if (TREE_CODE (type) == TYPENAME_TYPE)
10389	warning (OPT_Wattributes,
10390		 "attributes ignored on uninstantiated type");
10391      else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
10392	       && ! processing_explicit_instantiation)
10393	warning (OPT_Wattributes,
10394		 "attributes ignored on template instantiation");
10395      else if (is_declaration && cp_parser_declares_only_class_p (parser))
10396	cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
10397      else
10398	warning (OPT_Wattributes,
10399		 "attributes ignored on elaborated-type-specifier that is not a forward declaration");
10400    }
10401
10402  if (tag_type != enum_type)
10403    cp_parser_check_class_key (tag_type, type);
10404
10405  /* A "<" cannot follow an elaborated type specifier.  If that
10406     happens, the user was probably trying to form a template-id.  */
10407  cp_parser_check_for_invalid_template_id (parser, type);
10408
10409  return type;
10410}
10411
10412/* Parse an enum-specifier.
10413
10414   enum-specifier:
10415     enum identifier [opt] { enumerator-list [opt] }
10416
10417   GNU Extensions:
10418     enum attributes[opt] identifier [opt] { enumerator-list [opt] }
10419       attributes[opt]
10420
10421   Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
10422   if the token stream isn't an enum-specifier after all.  */
10423
10424static tree
10425cp_parser_enum_specifier (cp_parser* parser)
10426{
10427  tree identifier;
10428  tree type;
10429  tree attributes;
10430
10431  /* Parse tentatively so that we can back up if we don't find a
10432     enum-specifier.  */
10433  cp_parser_parse_tentatively (parser);
10434
10435  /* Caller guarantees that the current token is 'enum', an identifier
10436     possibly follows, and the token after that is an opening brace.
10437     If we don't have an identifier, fabricate an anonymous name for
10438     the enumeration being defined.  */
10439  cp_lexer_consume_token (parser->lexer);
10440
10441  attributes = cp_parser_attributes_opt (parser);
10442
10443  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10444    identifier = cp_parser_identifier (parser);
10445  else
10446    identifier = make_anon_name ();
10447
10448  /* Look for the `{' but don't consume it yet.  */
10449  if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
10450    cp_parser_simulate_error (parser);
10451
10452  if (!cp_parser_parse_definitely (parser))
10453    return NULL_TREE;
10454
10455  /* Issue an error message if type-definitions are forbidden here.  */
10456  if (!cp_parser_check_type_definition (parser))
10457    type = error_mark_node;
10458  else
10459    /* Create the new type.  We do this before consuming the opening
10460       brace so the enum will be recorded as being on the line of its
10461       tag (or the 'enum' keyword, if there is no tag).  */
10462    type = start_enum (identifier);
10463
10464  /* Consume the opening brace.  */
10465  cp_lexer_consume_token (parser->lexer);
10466
10467  if (type == error_mark_node)
10468    {
10469      cp_parser_skip_to_end_of_block_or_statement (parser);
10470      return error_mark_node;
10471    }
10472
10473  /* If the next token is not '}', then there are some enumerators.  */
10474  if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
10475    cp_parser_enumerator_list (parser, type);
10476
10477  /* Consume the final '}'.  */
10478  cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10479
10480  /* Look for trailing attributes to apply to this enumeration, and
10481     apply them if appropriate.  */
10482  if (cp_parser_allow_gnu_extensions_p (parser))
10483    {
10484      tree trailing_attr = cp_parser_attributes_opt (parser);
10485      cplus_decl_attributes (&type,
10486			     trailing_attr,
10487			     (int) ATTR_FLAG_TYPE_IN_PLACE);
10488    }
10489
10490  /* Finish up the enumeration.  */
10491  finish_enum (type);
10492
10493  return type;
10494}
10495
10496/* Parse an enumerator-list.  The enumerators all have the indicated
10497   TYPE.
10498
10499   enumerator-list:
10500     enumerator-definition
10501     enumerator-list , enumerator-definition  */
10502
10503static void
10504cp_parser_enumerator_list (cp_parser* parser, tree type)
10505{
10506  while (true)
10507    {
10508      /* Parse an enumerator-definition.  */
10509      cp_parser_enumerator_definition (parser, type);
10510
10511      /* If the next token is not a ',', we've reached the end of
10512	 the list.  */
10513      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
10514	break;
10515      /* Otherwise, consume the `,' and keep going.  */
10516      cp_lexer_consume_token (parser->lexer);
10517      /* If the next token is a `}', there is a trailing comma.  */
10518      if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
10519	{
10520	  if (pedantic && !in_system_header)
10521	    pedwarn ("comma at end of enumerator list");
10522	  break;
10523	}
10524    }
10525}
10526
10527/* Parse an enumerator-definition.  The enumerator has the indicated
10528   TYPE.
10529
10530   enumerator-definition:
10531     enumerator
10532     enumerator = constant-expression
10533
10534   enumerator:
10535     identifier  */
10536
10537static void
10538cp_parser_enumerator_definition (cp_parser* parser, tree type)
10539{
10540  tree identifier;
10541  tree value;
10542
10543  /* Look for the identifier.  */
10544  identifier = cp_parser_identifier (parser);
10545  if (identifier == error_mark_node)
10546    return;
10547
10548  /* If the next token is an '=', then there is an explicit value.  */
10549  if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
10550    {
10551      /* Consume the `=' token.  */
10552      cp_lexer_consume_token (parser->lexer);
10553      /* Parse the value.  */
10554      value = cp_parser_constant_expression (parser,
10555					     /*allow_non_constant_p=*/false,
10556					     NULL);
10557    }
10558  else
10559    value = NULL_TREE;
10560
10561  /* Create the enumerator.  */
10562  build_enumerator (identifier, value, type);
10563}
10564
10565/* Parse a namespace-name.
10566
10567   namespace-name:
10568     original-namespace-name
10569     namespace-alias
10570
10571   Returns the NAMESPACE_DECL for the namespace.  */
10572
10573static tree
10574cp_parser_namespace_name (cp_parser* parser)
10575{
10576  tree identifier;
10577  tree namespace_decl;
10578
10579  /* Get the name of the namespace.  */
10580  identifier = cp_parser_identifier (parser);
10581  if (identifier == error_mark_node)
10582    return error_mark_node;
10583
10584  /* Look up the identifier in the currently active scope.  Look only
10585     for namespaces, due to:
10586
10587       [basic.lookup.udir]
10588
10589       When looking up a namespace-name in a using-directive or alias
10590       definition, only namespace names are considered.
10591
10592     And:
10593
10594       [basic.lookup.qual]
10595
10596       During the lookup of a name preceding the :: scope resolution
10597       operator, object, function, and enumerator names are ignored.
10598
10599     (Note that cp_parser_class_or_namespace_name only calls this
10600     function if the token after the name is the scope resolution
10601     operator.)  */
10602  namespace_decl = cp_parser_lookup_name (parser, identifier,
10603					  none_type,
10604					  /*is_template=*/false,
10605					  /*is_namespace=*/true,
10606					  /*check_dependency=*/true,
10607					  /*ambiguous_decls=*/NULL);
10608  /* If it's not a namespace, issue an error.  */
10609  if (namespace_decl == error_mark_node
10610      || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
10611    {
10612      if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
10613	error ("%qD is not a namespace-name", identifier);
10614      cp_parser_error (parser, "expected namespace-name");
10615      namespace_decl = error_mark_node;
10616    }
10617
10618  return namespace_decl;
10619}
10620
10621/* Parse a namespace-definition.
10622
10623   namespace-definition:
10624     named-namespace-definition
10625     unnamed-namespace-definition
10626
10627   named-namespace-definition:
10628     original-namespace-definition
10629     extension-namespace-definition
10630
10631   original-namespace-definition:
10632     namespace identifier { namespace-body }
10633
10634   extension-namespace-definition:
10635     namespace original-namespace-name { namespace-body }
10636
10637   unnamed-namespace-definition:
10638     namespace { namespace-body } */
10639
10640static void
10641cp_parser_namespace_definition (cp_parser* parser)
10642{
10643  tree identifier, attribs;
10644
10645  /* Look for the `namespace' keyword.  */
10646  cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10647
10648  /* Get the name of the namespace.  We do not attempt to distinguish
10649     between an original-namespace-definition and an
10650     extension-namespace-definition at this point.  The semantic
10651     analysis routines are responsible for that.  */
10652  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10653    identifier = cp_parser_identifier (parser);
10654  else
10655    identifier = NULL_TREE;
10656
10657  /* Parse any specified attributes.  */
10658  attribs = cp_parser_attributes_opt (parser);
10659
10660  /* Look for the `{' to start the namespace.  */
10661  cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
10662  /* Start the namespace.  */
10663  push_namespace_with_attribs (identifier, attribs);
10664  /* Parse the body of the namespace.  */
10665  cp_parser_namespace_body (parser);
10666  /* Finish the namespace.  */
10667  pop_namespace ();
10668  /* Look for the final `}'.  */
10669  cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10670}
10671
10672/* Parse a namespace-body.
10673
10674   namespace-body:
10675     declaration-seq [opt]  */
10676
10677static void
10678cp_parser_namespace_body (cp_parser* parser)
10679{
10680  cp_parser_declaration_seq_opt (parser);
10681}
10682
10683/* Parse a namespace-alias-definition.
10684
10685   namespace-alias-definition:
10686     namespace identifier = qualified-namespace-specifier ;  */
10687
10688static void
10689cp_parser_namespace_alias_definition (cp_parser* parser)
10690{
10691  tree identifier;
10692  tree namespace_specifier;
10693
10694  /* Look for the `namespace' keyword.  */
10695  cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10696  /* Look for the identifier.  */
10697  identifier = cp_parser_identifier (parser);
10698  if (identifier == error_mark_node)
10699    return;
10700  /* Look for the `=' token.  */
10701  cp_parser_require (parser, CPP_EQ, "`='");
10702  /* Look for the qualified-namespace-specifier.  */
10703  namespace_specifier
10704    = cp_parser_qualified_namespace_specifier (parser);
10705  /* Look for the `;' token.  */
10706  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10707
10708  /* Register the alias in the symbol table.  */
10709  do_namespace_alias (identifier, namespace_specifier);
10710}
10711
10712/* Parse a qualified-namespace-specifier.
10713
10714   qualified-namespace-specifier:
10715     :: [opt] nested-name-specifier [opt] namespace-name
10716
10717   Returns a NAMESPACE_DECL corresponding to the specified
10718   namespace.  */
10719
10720static tree
10721cp_parser_qualified_namespace_specifier (cp_parser* parser)
10722{
10723  /* Look for the optional `::'.  */
10724  cp_parser_global_scope_opt (parser,
10725			      /*current_scope_valid_p=*/false);
10726
10727  /* Look for the optional nested-name-specifier.  */
10728  cp_parser_nested_name_specifier_opt (parser,
10729				       /*typename_keyword_p=*/false,
10730				       /*check_dependency_p=*/true,
10731				       /*type_p=*/false,
10732				       /*is_declaration=*/true);
10733
10734  return cp_parser_namespace_name (parser);
10735}
10736
10737/* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
10738   access declaration.
10739
10740   using-declaration:
10741     using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
10742     using :: unqualified-id ;
10743
10744   access-declaration:
10745     qualified-id ;
10746
10747   */
10748
10749static bool
10750cp_parser_using_declaration (cp_parser* parser,
10751			     bool access_declaration_p)
10752{
10753  cp_token *token;
10754  bool typename_p = false;
10755  bool global_scope_p;
10756  tree decl;
10757  tree identifier;
10758  tree qscope;
10759
10760  if (access_declaration_p)
10761    cp_parser_parse_tentatively (parser);
10762  else
10763    {
10764      /* Look for the `using' keyword.  */
10765      cp_parser_require_keyword (parser, RID_USING, "`using'");
10766
10767      /* Peek at the next token.  */
10768      token = cp_lexer_peek_token (parser->lexer);
10769      /* See if it's `typename'.  */
10770      if (token->keyword == RID_TYPENAME)
10771	{
10772	  /* Remember that we've seen it.  */
10773	  typename_p = true;
10774	  /* Consume the `typename' token.  */
10775	  cp_lexer_consume_token (parser->lexer);
10776	}
10777    }
10778
10779  /* Look for the optional global scope qualification.  */
10780  global_scope_p
10781    = (cp_parser_global_scope_opt (parser,
10782				   /*current_scope_valid_p=*/false)
10783       != NULL_TREE);
10784
10785  /* If we saw `typename', or didn't see `::', then there must be a
10786     nested-name-specifier present.  */
10787  if (typename_p || !global_scope_p)
10788    qscope = cp_parser_nested_name_specifier (parser, typename_p,
10789					      /*check_dependency_p=*/true,
10790					      /*type_p=*/false,
10791					      /*is_declaration=*/true);
10792  /* Otherwise, we could be in either of the two productions.  In that
10793     case, treat the nested-name-specifier as optional.  */
10794  else
10795    qscope = cp_parser_nested_name_specifier_opt (parser,
10796						  /*typename_keyword_p=*/false,
10797						  /*check_dependency_p=*/true,
10798						  /*type_p=*/false,
10799						  /*is_declaration=*/true);
10800  if (!qscope)
10801    qscope = global_namespace;
10802
10803  if (access_declaration_p && cp_parser_error_occurred (parser))
10804    /* Something has already gone wrong; there's no need to parse
10805       further.  Since an error has occurred, the return value of
10806       cp_parser_parse_definitely will be false, as required.  */
10807    return cp_parser_parse_definitely (parser);
10808
10809  /* Parse the unqualified-id.  */
10810  identifier = cp_parser_unqualified_id (parser,
10811					 /*template_keyword_p=*/false,
10812					 /*check_dependency_p=*/true,
10813					 /*declarator_p=*/true,
10814					 /*optional_p=*/false);
10815
10816  if (access_declaration_p)
10817    {
10818      if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
10819	cp_parser_simulate_error (parser);
10820      if (!cp_parser_parse_definitely (parser))
10821	return false;
10822    }
10823
10824  /* The function we call to handle a using-declaration is different
10825     depending on what scope we are in.  */
10826  if (qscope == error_mark_node || identifier == error_mark_node)
10827    ;
10828  else if (TREE_CODE (identifier) != IDENTIFIER_NODE
10829	   && TREE_CODE (identifier) != BIT_NOT_EXPR)
10830    /* [namespace.udecl]
10831
10832       A using declaration shall not name a template-id.  */
10833    error ("a template-id may not appear in a using-declaration");
10834  else
10835    {
10836      if (at_class_scope_p ())
10837	{
10838	  /* Create the USING_DECL.  */
10839	  decl = do_class_using_decl (parser->scope, identifier);
10840	  /* Add it to the list of members in this class.  */
10841	  finish_member_declaration (decl);
10842	}
10843      else
10844	{
10845	  decl = cp_parser_lookup_name_simple (parser, identifier);
10846	  if (decl == error_mark_node)
10847	    cp_parser_name_lookup_error (parser, identifier, decl, NULL);
10848	  else if (!at_namespace_scope_p ())
10849	    do_local_using_decl (decl, qscope, identifier);
10850	  else
10851	    do_toplevel_using_decl (decl, qscope, identifier);
10852	}
10853    }
10854
10855  /* Look for the final `;'.  */
10856  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10857
10858  return true;
10859}
10860
10861/* Parse a using-directive.
10862
10863   using-directive:
10864     using namespace :: [opt] nested-name-specifier [opt]
10865       namespace-name ;  */
10866
10867static void
10868cp_parser_using_directive (cp_parser* parser)
10869{
10870  tree namespace_decl;
10871  tree attribs;
10872
10873  /* Look for the `using' keyword.  */
10874  cp_parser_require_keyword (parser, RID_USING, "`using'");
10875  /* And the `namespace' keyword.  */
10876  cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10877  /* Look for the optional `::' operator.  */
10878  cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
10879  /* And the optional nested-name-specifier.  */
10880  cp_parser_nested_name_specifier_opt (parser,
10881				       /*typename_keyword_p=*/false,
10882				       /*check_dependency_p=*/true,
10883				       /*type_p=*/false,
10884				       /*is_declaration=*/true);
10885  /* Get the namespace being used.  */
10886  namespace_decl = cp_parser_namespace_name (parser);
10887  /* And any specified attributes.  */
10888  attribs = cp_parser_attributes_opt (parser);
10889  /* Update the symbol table.  */
10890  parse_using_directive (namespace_decl, attribs);
10891  /* Look for the final `;'.  */
10892  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10893}
10894
10895/* Parse an asm-definition.
10896
10897   asm-definition:
10898     asm ( string-literal ) ;
10899
10900   GNU Extension:
10901
10902   asm-definition:
10903     asm volatile [opt] ( string-literal ) ;
10904     asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
10905     asm volatile [opt] ( string-literal : asm-operand-list [opt]
10906			  : asm-operand-list [opt] ) ;
10907     asm volatile [opt] ( string-literal : asm-operand-list [opt]
10908			  : asm-operand-list [opt]
10909			  : asm-operand-list [opt] ) ;  */
10910
10911static void
10912cp_parser_asm_definition (cp_parser* parser)
10913{
10914  tree string;
10915  tree outputs = NULL_TREE;
10916  tree inputs = NULL_TREE;
10917  tree clobbers = NULL_TREE;
10918  tree asm_stmt;
10919  bool volatile_p = false;
10920  bool extended_p = false;
10921
10922  /* Look for the `asm' keyword.  */
10923  cp_parser_require_keyword (parser, RID_ASM, "`asm'");
10924  /* See if the next token is `volatile'.  */
10925  if (cp_parser_allow_gnu_extensions_p (parser)
10926      && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
10927    {
10928      /* Remember that we saw the `volatile' keyword.  */
10929      volatile_p = true;
10930      /* Consume the token.  */
10931      cp_lexer_consume_token (parser->lexer);
10932    }
10933  /* Look for the opening `('.  */
10934  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
10935    return;
10936  /* Look for the string.  */
10937  string = cp_parser_string_literal (parser, false, false);
10938  if (string == error_mark_node)
10939    {
10940      cp_parser_skip_to_closing_parenthesis (parser, true, false,
10941					     /*consume_paren=*/true);
10942      return;
10943    }
10944
10945  /* If we're allowing GNU extensions, check for the extended assembly
10946     syntax.  Unfortunately, the `:' tokens need not be separated by
10947     a space in C, and so, for compatibility, we tolerate that here
10948     too.  Doing that means that we have to treat the `::' operator as
10949     two `:' tokens.  */
10950  if (cp_parser_allow_gnu_extensions_p (parser)
10951      && parser->in_function_body
10952      && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
10953	  || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
10954    {
10955      bool inputs_p = false;
10956      bool clobbers_p = false;
10957
10958      /* The extended syntax was used.  */
10959      extended_p = true;
10960
10961      /* Look for outputs.  */
10962      if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10963	{
10964	  /* Consume the `:'.  */
10965	  cp_lexer_consume_token (parser->lexer);
10966	  /* Parse the output-operands.  */
10967	  if (cp_lexer_next_token_is_not (parser->lexer,
10968					  CPP_COLON)
10969	      && cp_lexer_next_token_is_not (parser->lexer,
10970					     CPP_SCOPE)
10971	      && cp_lexer_next_token_is_not (parser->lexer,
10972					     CPP_CLOSE_PAREN))
10973	    outputs = cp_parser_asm_operand_list (parser);
10974	}
10975      /* If the next token is `::', there are no outputs, and the
10976	 next token is the beginning of the inputs.  */
10977      else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10978	/* The inputs are coming next.  */
10979	inputs_p = true;
10980
10981      /* Look for inputs.  */
10982      if (inputs_p
10983	  || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
10984	{
10985	  /* Consume the `:' or `::'.  */
10986	  cp_lexer_consume_token (parser->lexer);
10987	  /* Parse the output-operands.  */
10988	  if (cp_lexer_next_token_is_not (parser->lexer,
10989					  CPP_COLON)
10990	      && cp_lexer_next_token_is_not (parser->lexer,
10991					     CPP_CLOSE_PAREN))
10992	    inputs = cp_parser_asm_operand_list (parser);
10993	}
10994      else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
10995	/* The clobbers are coming next.  */
10996	clobbers_p = true;
10997
10998      /* Look for clobbers.  */
10999      if (clobbers_p
11000	  || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
11001	{
11002	  /* Consume the `:' or `::'.  */
11003	  cp_lexer_consume_token (parser->lexer);
11004	  /* Parse the clobbers.  */
11005	  if (cp_lexer_next_token_is_not (parser->lexer,
11006					  CPP_CLOSE_PAREN))
11007	    clobbers = cp_parser_asm_clobber_list (parser);
11008	}
11009    }
11010  /* Look for the closing `)'.  */
11011  if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
11012    cp_parser_skip_to_closing_parenthesis (parser, true, false,
11013					   /*consume_paren=*/true);
11014  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
11015
11016  /* Create the ASM_EXPR.  */
11017  if (parser->in_function_body)
11018    {
11019      asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
11020				  inputs, clobbers);
11021      /* If the extended syntax was not used, mark the ASM_EXPR.  */
11022      if (!extended_p)
11023	{
11024	  tree temp = asm_stmt;
11025	  if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
11026	    temp = TREE_OPERAND (temp, 0);
11027
11028	  ASM_INPUT_P (temp) = 1;
11029	}
11030    }
11031  else
11032    cgraph_add_asm_node (string);
11033}
11034
11035/* Declarators [gram.dcl.decl] */
11036
11037/* Parse an init-declarator.
11038
11039   init-declarator:
11040     declarator initializer [opt]
11041
11042   GNU Extension:
11043
11044   init-declarator:
11045     declarator asm-specification [opt] attributes [opt] initializer [opt]
11046
11047   function-definition:
11048     decl-specifier-seq [opt] declarator ctor-initializer [opt]
11049       function-body
11050     decl-specifier-seq [opt] declarator function-try-block
11051
11052   GNU Extension:
11053
11054   function-definition:
11055     __extension__ function-definition
11056
11057   The DECL_SPECIFIERS apply to this declarator.  Returns a
11058   representation of the entity declared.  If MEMBER_P is TRUE, then
11059   this declarator appears in a class scope.  The new DECL created by
11060   this declarator is returned.
11061
11062   The CHECKS are access checks that should be performed once we know
11063   what entity is being declared (and, therefore, what classes have
11064   befriended it).
11065
11066   If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
11067   for a function-definition here as well.  If the declarator is a
11068   declarator for a function-definition, *FUNCTION_DEFINITION_P will
11069   be TRUE upon return.  By that point, the function-definition will
11070   have been completely parsed.
11071
11072   FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
11073   is FALSE.  */
11074
11075static tree
11076cp_parser_init_declarator (cp_parser* parser,
11077			   cp_decl_specifier_seq *decl_specifiers,
11078			   VEC (deferred_access_check,gc)* checks,
11079			   bool function_definition_allowed_p,
11080			   bool member_p,
11081			   int declares_class_or_enum,
11082			   bool* function_definition_p)
11083{
11084  cp_token *token;
11085  cp_declarator *declarator;
11086  tree prefix_attributes;
11087  tree attributes;
11088  tree asm_specification;
11089  tree initializer;
11090  tree decl = NULL_TREE;
11091  tree scope;
11092  bool is_initialized;
11093  /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
11094     initialized with "= ..", CPP_OPEN_PAREN if initialized with
11095     "(...)".  */
11096  enum cpp_ttype initialization_kind;
11097  bool is_parenthesized_init = false;
11098  bool is_non_constant_init;
11099  int ctor_dtor_or_conv_p;
11100  bool friend_p;
11101  tree pushed_scope = NULL;
11102
11103  /* Gather the attributes that were provided with the
11104     decl-specifiers.  */
11105  prefix_attributes = decl_specifiers->attributes;
11106
11107  /* Assume that this is not the declarator for a function
11108     definition.  */
11109  if (function_definition_p)
11110    *function_definition_p = false;
11111
11112  /* Defer access checks while parsing the declarator; we cannot know
11113     what names are accessible until we know what is being
11114     declared.  */
11115  resume_deferring_access_checks ();
11116
11117  /* Parse the declarator.  */
11118  declarator
11119    = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
11120			    &ctor_dtor_or_conv_p,
11121			    /*parenthesized_p=*/NULL,
11122			    /*member_p=*/false);
11123  /* Gather up the deferred checks.  */
11124  stop_deferring_access_checks ();
11125
11126  /* If the DECLARATOR was erroneous, there's no need to go
11127     further.  */
11128  if (declarator == cp_error_declarator)
11129    return error_mark_node;
11130
11131  /* Check that the number of template-parameter-lists is OK.  */
11132  if (!cp_parser_check_declarator_template_parameters (parser, declarator))
11133    return error_mark_node;
11134
11135  if (declares_class_or_enum & 2)
11136    cp_parser_check_for_definition_in_return_type (declarator,
11137						   decl_specifiers->type);
11138
11139  /* Figure out what scope the entity declared by the DECLARATOR is
11140     located in.  `grokdeclarator' sometimes changes the scope, so
11141     we compute it now.  */
11142  scope = get_scope_of_declarator (declarator);
11143
11144  /* If we're allowing GNU extensions, look for an asm-specification
11145     and attributes.  */
11146  if (cp_parser_allow_gnu_extensions_p (parser))
11147    {
11148      /* Look for an asm-specification.  */
11149      asm_specification = cp_parser_asm_specification_opt (parser);
11150      /* And attributes.  */
11151      attributes = cp_parser_attributes_opt (parser);
11152    }
11153  else
11154    {
11155      asm_specification = NULL_TREE;
11156      attributes = NULL_TREE;
11157    }
11158
11159  /* Peek at the next token.  */
11160  token = cp_lexer_peek_token (parser->lexer);
11161  /* Check to see if the token indicates the start of a
11162     function-definition.  */
11163  if (cp_parser_token_starts_function_definition_p (token))
11164    {
11165      if (!function_definition_allowed_p)
11166	{
11167	  /* If a function-definition should not appear here, issue an
11168	     error message.  */
11169	  cp_parser_error (parser,
11170			   "a function-definition is not allowed here");
11171	  return error_mark_node;
11172	}
11173      else
11174	{
11175	  /* Neither attributes nor an asm-specification are allowed
11176	     on a function-definition.  */
11177	  if (asm_specification)
11178	    error ("an asm-specification is not allowed on a function-definition");
11179	  if (attributes)
11180	    error ("attributes are not allowed on a function-definition");
11181	  /* This is a function-definition.  */
11182	  *function_definition_p = true;
11183
11184	  /* Parse the function definition.  */
11185	  if (member_p)
11186	    decl = cp_parser_save_member_function_body (parser,
11187							decl_specifiers,
11188							declarator,
11189							prefix_attributes);
11190	  else
11191	    decl
11192	      = (cp_parser_function_definition_from_specifiers_and_declarator
11193		 (parser, decl_specifiers, prefix_attributes, declarator));
11194
11195	  return decl;
11196	}
11197    }
11198
11199  /* [dcl.dcl]
11200
11201     Only in function declarations for constructors, destructors, and
11202     type conversions can the decl-specifier-seq be omitted.
11203
11204     We explicitly postpone this check past the point where we handle
11205     function-definitions because we tolerate function-definitions
11206     that are missing their return types in some modes.  */
11207  if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
11208    {
11209      cp_parser_error (parser,
11210		       "expected constructor, destructor, or type conversion");
11211      return error_mark_node;
11212    }
11213
11214  /* An `=' or an `(' indicates an initializer.  */
11215  if (token->type == CPP_EQ
11216      || token->type == CPP_OPEN_PAREN)
11217    {
11218      is_initialized = true;
11219      initialization_kind = token->type;
11220    }
11221  else
11222    {
11223      /* If the init-declarator isn't initialized and isn't followed by a
11224	 `,' or `;', it's not a valid init-declarator.  */
11225      if (token->type != CPP_COMMA
11226	  && token->type != CPP_SEMICOLON)
11227	{
11228	  cp_parser_error (parser, "expected initializer");
11229	  return error_mark_node;
11230	}
11231      is_initialized = false;
11232      initialization_kind = CPP_EOF;
11233    }
11234
11235  /* Because start_decl has side-effects, we should only call it if we
11236     know we're going ahead.  By this point, we know that we cannot
11237     possibly be looking at any other construct.  */
11238  cp_parser_commit_to_tentative_parse (parser);
11239
11240  /* If the decl specifiers were bad, issue an error now that we're
11241     sure this was intended to be a declarator.  Then continue
11242     declaring the variable(s), as int, to try to cut down on further
11243     errors.  */
11244  if (decl_specifiers->any_specifiers_p
11245      && decl_specifiers->type == error_mark_node)
11246    {
11247      cp_parser_error (parser, "invalid type in declaration");
11248      decl_specifiers->type = integer_type_node;
11249    }
11250
11251  /* Check to see whether or not this declaration is a friend.  */
11252  friend_p = cp_parser_friend_p (decl_specifiers);
11253
11254  /* Enter the newly declared entry in the symbol table.  If we're
11255     processing a declaration in a class-specifier, we wait until
11256     after processing the initializer.  */
11257  if (!member_p)
11258    {
11259      if (parser->in_unbraced_linkage_specification_p)
11260	decl_specifiers->storage_class = sc_extern;
11261      decl = start_decl (declarator, decl_specifiers,
11262			 is_initialized, attributes, prefix_attributes,
11263			 &pushed_scope);
11264    }
11265  else if (scope)
11266    /* Enter the SCOPE.  That way unqualified names appearing in the
11267       initializer will be looked up in SCOPE.  */
11268    pushed_scope = push_scope (scope);
11269
11270  /* Perform deferred access control checks, now that we know in which
11271     SCOPE the declared entity resides.  */
11272  if (!member_p && decl)
11273    {
11274      tree saved_current_function_decl = NULL_TREE;
11275
11276      /* If the entity being declared is a function, pretend that we
11277	 are in its scope.  If it is a `friend', it may have access to
11278	 things that would not otherwise be accessible.  */
11279      if (TREE_CODE (decl) == FUNCTION_DECL)
11280	{
11281	  saved_current_function_decl = current_function_decl;
11282	  current_function_decl = decl;
11283	}
11284
11285      /* Perform access checks for template parameters.  */
11286      cp_parser_perform_template_parameter_access_checks (checks);
11287
11288      /* Perform the access control checks for the declarator and the
11289	 the decl-specifiers.  */
11290      perform_deferred_access_checks ();
11291
11292      /* Restore the saved value.  */
11293      if (TREE_CODE (decl) == FUNCTION_DECL)
11294	current_function_decl = saved_current_function_decl;
11295    }
11296
11297  /* Parse the initializer.  */
11298  initializer = NULL_TREE;
11299  is_parenthesized_init = false;
11300  is_non_constant_init = true;
11301  if (is_initialized)
11302    {
11303      if (function_declarator_p (declarator))
11304	{
11305	   if (initialization_kind == CPP_EQ)
11306	     initializer = cp_parser_pure_specifier (parser);
11307	   else
11308	     {
11309	       /* If the declaration was erroneous, we don't really
11310		  know what the user intended, so just silently
11311		  consume the initializer.  */
11312	       if (decl != error_mark_node)
11313		 error ("initializer provided for function");
11314	       cp_parser_skip_to_closing_parenthesis (parser,
11315						      /*recovering=*/true,
11316						      /*or_comma=*/false,
11317						      /*consume_paren=*/true);
11318	     }
11319	}
11320      else
11321	initializer = cp_parser_initializer (parser,
11322					     &is_parenthesized_init,
11323					     &is_non_constant_init);
11324    }
11325
11326  /* The old parser allows attributes to appear after a parenthesized
11327     initializer.  Mark Mitchell proposed removing this functionality
11328     on the GCC mailing lists on 2002-08-13.  This parser accepts the
11329     attributes -- but ignores them.  */
11330  if (cp_parser_allow_gnu_extensions_p (parser) && is_parenthesized_init)
11331    if (cp_parser_attributes_opt (parser))
11332      warning (OPT_Wattributes,
11333	       "attributes after parenthesized initializer ignored");
11334
11335  /* For an in-class declaration, use `grokfield' to create the
11336     declaration.  */
11337  if (member_p)
11338    {
11339      if (pushed_scope)
11340	{
11341	  pop_scope (pushed_scope);
11342	  pushed_scope = false;
11343	}
11344      decl = grokfield (declarator, decl_specifiers,
11345			initializer, !is_non_constant_init,
11346			/*asmspec=*/NULL_TREE,
11347			prefix_attributes);
11348      if (decl && TREE_CODE (decl) == FUNCTION_DECL)
11349	cp_parser_save_default_args (parser, decl);
11350    }
11351
11352  /* Finish processing the declaration.  But, skip friend
11353     declarations.  */
11354  if (!friend_p && decl && decl != error_mark_node)
11355    {
11356      cp_finish_decl (decl,
11357		      initializer, !is_non_constant_init,
11358		      asm_specification,
11359		      /* If the initializer is in parentheses, then this is
11360			 a direct-initialization, which means that an
11361			 `explicit' constructor is OK.  Otherwise, an
11362			 `explicit' constructor cannot be used.  */
11363		      ((is_parenthesized_init || !is_initialized)
11364		     ? 0 : LOOKUP_ONLYCONVERTING));
11365    }
11366  if (!friend_p && pushed_scope)
11367    pop_scope (pushed_scope);
11368
11369  return decl;
11370}
11371
11372/* Parse a declarator.
11373
11374   declarator:
11375     direct-declarator
11376     ptr-operator declarator
11377
11378   abstract-declarator:
11379     ptr-operator abstract-declarator [opt]
11380     direct-abstract-declarator
11381
11382   GNU Extensions:
11383
11384   declarator:
11385     attributes [opt] direct-declarator
11386     attributes [opt] ptr-operator declarator
11387
11388   abstract-declarator:
11389     attributes [opt] ptr-operator abstract-declarator [opt]
11390     attributes [opt] direct-abstract-declarator
11391
11392   If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
11393   detect constructor, destructor or conversion operators. It is set
11394   to -1 if the declarator is a name, and +1 if it is a
11395   function. Otherwise it is set to zero. Usually you just want to
11396   test for >0, but internally the negative value is used.
11397
11398   (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
11399   a decl-specifier-seq unless it declares a constructor, destructor,
11400   or conversion.  It might seem that we could check this condition in
11401   semantic analysis, rather than parsing, but that makes it difficult
11402   to handle something like `f()'.  We want to notice that there are
11403   no decl-specifiers, and therefore realize that this is an
11404   expression, not a declaration.)
11405
11406   If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
11407   the declarator is a direct-declarator of the form "(...)".
11408
11409   MEMBER_P is true iff this declarator is a member-declarator.  */
11410
11411static cp_declarator *
11412cp_parser_declarator (cp_parser* parser,
11413		      cp_parser_declarator_kind dcl_kind,
11414		      int* ctor_dtor_or_conv_p,
11415		      bool* parenthesized_p,
11416		      bool member_p)
11417{
11418  cp_token *token;
11419  cp_declarator *declarator;
11420  enum tree_code code;
11421  cp_cv_quals cv_quals;
11422  tree class_type;
11423  tree attributes = NULL_TREE;
11424
11425  /* Assume this is not a constructor, destructor, or type-conversion
11426     operator.  */
11427  if (ctor_dtor_or_conv_p)
11428    *ctor_dtor_or_conv_p = 0;
11429
11430  if (cp_parser_allow_gnu_extensions_p (parser))
11431    attributes = cp_parser_attributes_opt (parser);
11432
11433  /* Peek at the next token.  */
11434  token = cp_lexer_peek_token (parser->lexer);
11435
11436  /* Check for the ptr-operator production.  */
11437  cp_parser_parse_tentatively (parser);
11438  /* Parse the ptr-operator.  */
11439  code = cp_parser_ptr_operator (parser,
11440				 &class_type,
11441				 &cv_quals);
11442  /* If that worked, then we have a ptr-operator.  */
11443  if (cp_parser_parse_definitely (parser))
11444    {
11445      /* If a ptr-operator was found, then this declarator was not
11446	 parenthesized.  */
11447      if (parenthesized_p)
11448	*parenthesized_p = true;
11449      /* The dependent declarator is optional if we are parsing an
11450	 abstract-declarator.  */
11451      if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11452	cp_parser_parse_tentatively (parser);
11453
11454      /* Parse the dependent declarator.  */
11455      declarator = cp_parser_declarator (parser, dcl_kind,
11456					 /*ctor_dtor_or_conv_p=*/NULL,
11457					 /*parenthesized_p=*/NULL,
11458					 /*member_p=*/false);
11459
11460      /* If we are parsing an abstract-declarator, we must handle the
11461	 case where the dependent declarator is absent.  */
11462      if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
11463	  && !cp_parser_parse_definitely (parser))
11464	declarator = NULL;
11465
11466      /* Build the representation of the ptr-operator.  */
11467      if (class_type)
11468	declarator = make_ptrmem_declarator (cv_quals,
11469					     class_type,
11470					     declarator);
11471      else if (code == INDIRECT_REF)
11472	declarator = make_pointer_declarator (cv_quals, declarator);
11473      else
11474	declarator = make_reference_declarator (cv_quals, declarator);
11475    }
11476  /* Everything else is a direct-declarator.  */
11477  else
11478    {
11479      if (parenthesized_p)
11480	*parenthesized_p = cp_lexer_next_token_is (parser->lexer,
11481						   CPP_OPEN_PAREN);
11482      declarator = cp_parser_direct_declarator (parser, dcl_kind,
11483						ctor_dtor_or_conv_p,
11484						member_p);
11485    }
11486
11487  if (attributes && declarator && declarator != cp_error_declarator)
11488    declarator->attributes = attributes;
11489
11490  return declarator;
11491}
11492
11493/* Parse a direct-declarator or direct-abstract-declarator.
11494
11495   direct-declarator:
11496     declarator-id
11497     direct-declarator ( parameter-declaration-clause )
11498       cv-qualifier-seq [opt]
11499       exception-specification [opt]
11500     direct-declarator [ constant-expression [opt] ]
11501     ( declarator )
11502
11503   direct-abstract-declarator:
11504     direct-abstract-declarator [opt]
11505       ( parameter-declaration-clause )
11506       cv-qualifier-seq [opt]
11507       exception-specification [opt]
11508     direct-abstract-declarator [opt] [ constant-expression [opt] ]
11509     ( abstract-declarator )
11510
11511   Returns a representation of the declarator.  DCL_KIND is
11512   CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
11513   direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
11514   we are parsing a direct-declarator.  It is
11515   CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
11516   of ambiguity we prefer an abstract declarator, as per
11517   [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
11518   cp_parser_declarator.  */
11519
11520static cp_declarator *
11521cp_parser_direct_declarator (cp_parser* parser,
11522			     cp_parser_declarator_kind dcl_kind,
11523			     int* ctor_dtor_or_conv_p,
11524			     bool member_p)
11525{
11526  cp_token *token;
11527  cp_declarator *declarator = NULL;
11528  tree scope = NULL_TREE;
11529  bool saved_default_arg_ok_p = parser->default_arg_ok_p;
11530  bool saved_in_declarator_p = parser->in_declarator_p;
11531  bool first = true;
11532  tree pushed_scope = NULL_TREE;
11533
11534  while (true)
11535    {
11536      /* Peek at the next token.  */
11537      token = cp_lexer_peek_token (parser->lexer);
11538      if (token->type == CPP_OPEN_PAREN)
11539	{
11540	  /* This is either a parameter-declaration-clause, or a
11541	     parenthesized declarator. When we know we are parsing a
11542	     named declarator, it must be a parenthesized declarator
11543	     if FIRST is true. For instance, `(int)' is a
11544	     parameter-declaration-clause, with an omitted
11545	     direct-abstract-declarator. But `((*))', is a
11546	     parenthesized abstract declarator. Finally, when T is a
11547	     template parameter `(T)' is a
11548	     parameter-declaration-clause, and not a parenthesized
11549	     named declarator.
11550
11551	     We first try and parse a parameter-declaration-clause,
11552	     and then try a nested declarator (if FIRST is true).
11553
11554	     It is not an error for it not to be a
11555	     parameter-declaration-clause, even when FIRST is
11556	     false. Consider,
11557
11558	       int i (int);
11559	       int i (3);
11560
11561	     The first is the declaration of a function while the
11562	     second is a the definition of a variable, including its
11563	     initializer.
11564
11565	     Having seen only the parenthesis, we cannot know which of
11566	     these two alternatives should be selected.  Even more
11567	     complex are examples like:
11568
11569	       int i (int (a));
11570	       int i (int (3));
11571
11572	     The former is a function-declaration; the latter is a
11573	     variable initialization.
11574
11575	     Thus again, we try a parameter-declaration-clause, and if
11576	     that fails, we back out and return.  */
11577
11578	  if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11579	    {
11580	      cp_parameter_declarator *params;
11581	      unsigned saved_num_template_parameter_lists;
11582
11583	      /* In a member-declarator, the only valid interpretation
11584		 of a parenthesis is the start of a
11585		 parameter-declaration-clause.  (It is invalid to
11586		 initialize a static data member with a parenthesized
11587		 initializer; only the "=" form of initialization is
11588		 permitted.)  */
11589	      if (!member_p)
11590		cp_parser_parse_tentatively (parser);
11591
11592	      /* Consume the `('.  */
11593	      cp_lexer_consume_token (parser->lexer);
11594	      if (first)
11595		{
11596		  /* If this is going to be an abstract declarator, we're
11597		     in a declarator and we can't have default args.  */
11598		  parser->default_arg_ok_p = false;
11599		  parser->in_declarator_p = true;
11600		}
11601
11602	      /* Inside the function parameter list, surrounding
11603		 template-parameter-lists do not apply.  */
11604	      saved_num_template_parameter_lists
11605		= parser->num_template_parameter_lists;
11606	      parser->num_template_parameter_lists = 0;
11607
11608	      /* Parse the parameter-declaration-clause.  */
11609	      params = cp_parser_parameter_declaration_clause (parser);
11610
11611	      parser->num_template_parameter_lists
11612		= saved_num_template_parameter_lists;
11613
11614	      /* If all went well, parse the cv-qualifier-seq and the
11615		 exception-specification.  */
11616	      if (member_p || cp_parser_parse_definitely (parser))
11617		{
11618		  cp_cv_quals cv_quals;
11619		  tree exception_specification;
11620
11621		  if (ctor_dtor_or_conv_p)
11622		    *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
11623		  first = false;
11624		  /* Consume the `)'.  */
11625		  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
11626
11627		  /* Parse the cv-qualifier-seq.  */
11628		  cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11629		  /* And the exception-specification.  */
11630		  exception_specification
11631		    = cp_parser_exception_specification_opt (parser);
11632
11633		  /* Create the function-declarator.  */
11634		  declarator = make_call_declarator (declarator,
11635						     params,
11636						     cv_quals,
11637						     exception_specification);
11638		  /* Any subsequent parameter lists are to do with
11639		     return type, so are not those of the declared
11640		     function.  */
11641		  parser->default_arg_ok_p = false;
11642
11643		  /* Repeat the main loop.  */
11644		  continue;
11645		}
11646	    }
11647
11648	  /* If this is the first, we can try a parenthesized
11649	     declarator.  */
11650	  if (first)
11651	    {
11652	      bool saved_in_type_id_in_expr_p;
11653
11654	      parser->default_arg_ok_p = saved_default_arg_ok_p;
11655	      parser->in_declarator_p = saved_in_declarator_p;
11656
11657	      /* Consume the `('.  */
11658	      cp_lexer_consume_token (parser->lexer);
11659	      /* Parse the nested declarator.  */
11660	      saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
11661	      parser->in_type_id_in_expr_p = true;
11662	      declarator
11663		= cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
11664					/*parenthesized_p=*/NULL,
11665					member_p);
11666	      parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
11667	      first = false;
11668	      /* Expect a `)'.  */
11669	      if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
11670		declarator = cp_error_declarator;
11671	      if (declarator == cp_error_declarator)
11672		break;
11673
11674	      goto handle_declarator;
11675	    }
11676	  /* Otherwise, we must be done.  */
11677	  else
11678	    break;
11679	}
11680      else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11681	       && token->type == CPP_OPEN_SQUARE)
11682	{
11683	  /* Parse an array-declarator.  */
11684	  tree bounds;
11685
11686	  if (ctor_dtor_or_conv_p)
11687	    *ctor_dtor_or_conv_p = 0;
11688
11689	  first = false;
11690	  parser->default_arg_ok_p = false;
11691	  parser->in_declarator_p = true;
11692	  /* Consume the `['.  */
11693	  cp_lexer_consume_token (parser->lexer);
11694	  /* Peek at the next token.  */
11695	  token = cp_lexer_peek_token (parser->lexer);
11696	  /* If the next token is `]', then there is no
11697	     constant-expression.  */
11698	  if (token->type != CPP_CLOSE_SQUARE)
11699	    {
11700	      bool non_constant_p;
11701
11702	      bounds
11703		= cp_parser_constant_expression (parser,
11704						 /*allow_non_constant=*/true,
11705						 &non_constant_p);
11706	      if (!non_constant_p)
11707		bounds = fold_non_dependent_expr (bounds);
11708	      /* Normally, the array bound must be an integral constant
11709		 expression.  However, as an extension, we allow VLAs
11710		 in function scopes.  */
11711	      else if (!parser->in_function_body)
11712		{
11713		  error ("array bound is not an integer constant");
11714		  bounds = error_mark_node;
11715		}
11716	    }
11717	  else
11718	    bounds = NULL_TREE;
11719	  /* Look for the closing `]'.  */
11720	  if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"))
11721	    {
11722	      declarator = cp_error_declarator;
11723	      break;
11724	    }
11725
11726	  declarator = make_array_declarator (declarator, bounds);
11727	}
11728      else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
11729	{
11730	  tree qualifying_scope;
11731	  tree unqualified_name;
11732	  special_function_kind sfk;
11733	  bool abstract_ok;
11734
11735	  /* Parse a declarator-id */
11736	  abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
11737	  if (abstract_ok)
11738	    cp_parser_parse_tentatively (parser);
11739	  unqualified_name
11740	    = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
11741	  qualifying_scope = parser->scope;
11742	  if (abstract_ok)
11743	    {
11744	      if (!cp_parser_parse_definitely (parser))
11745		unqualified_name = error_mark_node;
11746	      else if (unqualified_name
11747		       && (qualifying_scope
11748			   || (TREE_CODE (unqualified_name)
11749			       != IDENTIFIER_NODE)))
11750		{
11751		  cp_parser_error (parser, "expected unqualified-id");
11752		  unqualified_name = error_mark_node;
11753		}
11754	    }
11755
11756	  if (!unqualified_name)
11757	    return NULL;
11758	  if (unqualified_name == error_mark_node)
11759	    {
11760	      declarator = cp_error_declarator;
11761	      break;
11762	    }
11763
11764	  if (qualifying_scope && at_namespace_scope_p ()
11765	      && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
11766	    {
11767	      /* In the declaration of a member of a template class
11768		 outside of the class itself, the SCOPE will sometimes
11769		 be a TYPENAME_TYPE.  For example, given:
11770
11771		 template <typename T>
11772		 int S<T>::R::i = 3;
11773
11774		 the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
11775		 this context, we must resolve S<T>::R to an ordinary
11776		 type, rather than a typename type.
11777
11778		 The reason we normally avoid resolving TYPENAME_TYPEs
11779		 is that a specialization of `S' might render
11780		 `S<T>::R' not a type.  However, if `S' is
11781		 specialized, then this `i' will not be used, so there
11782		 is no harm in resolving the types here.  */
11783	      tree type;
11784
11785	      /* Resolve the TYPENAME_TYPE.  */
11786	      type = resolve_typename_type (qualifying_scope,
11787					    /*only_current_p=*/false);
11788	      /* If that failed, the declarator is invalid.  */
11789	      if (type == error_mark_node)
11790		error ("%<%T::%D%> is not a type",
11791		       TYPE_CONTEXT (qualifying_scope),
11792		       TYPE_IDENTIFIER (qualifying_scope));
11793	      qualifying_scope = type;
11794	    }
11795
11796	  sfk = sfk_none;
11797	  if (unqualified_name)
11798	    {
11799	      tree class_type;
11800
11801	      if (qualifying_scope
11802		  && CLASS_TYPE_P (qualifying_scope))
11803		class_type = qualifying_scope;
11804	      else
11805		class_type = current_class_type;
11806
11807	      if (TREE_CODE (unqualified_name) == TYPE_DECL)
11808		{
11809		  tree name_type = TREE_TYPE (unqualified_name);
11810		  if (class_type && same_type_p (name_type, class_type))
11811		    {
11812		      if (qualifying_scope
11813			  && CLASSTYPE_USE_TEMPLATE (name_type))
11814			{
11815			  error ("invalid use of constructor as a template");
11816			  inform ("use %<%T::%D%> instead of %<%T::%D%> to "
11817				  "name the constructor in a qualified name",
11818				  class_type,
11819				  DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
11820				  class_type, name_type);
11821			  declarator = cp_error_declarator;
11822			  break;
11823			}
11824		      else
11825			unqualified_name = constructor_name (class_type);
11826		    }
11827		  else
11828		    {
11829		      /* We do not attempt to print the declarator
11830			 here because we do not have enough
11831			 information about its original syntactic
11832			 form.  */
11833		      cp_parser_error (parser, "invalid declarator");
11834		      declarator = cp_error_declarator;
11835		      break;
11836		    }
11837		}
11838
11839	      if (class_type)
11840		{
11841		  if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
11842		    sfk = sfk_destructor;
11843		  else if (IDENTIFIER_TYPENAME_P (unqualified_name))
11844		    sfk = sfk_conversion;
11845		  else if (/* There's no way to declare a constructor
11846			      for an anonymous type, even if the type
11847			      got a name for linkage purposes.  */
11848			   !TYPE_WAS_ANONYMOUS (class_type)
11849			   && constructor_name_p (unqualified_name,
11850						  class_type))
11851		    {
11852		      unqualified_name = constructor_name (class_type);
11853		      sfk = sfk_constructor;
11854		    }
11855
11856		  if (ctor_dtor_or_conv_p && sfk != sfk_none)
11857		    *ctor_dtor_or_conv_p = -1;
11858		}
11859	    }
11860	  declarator = make_id_declarator (qualifying_scope,
11861					   unqualified_name,
11862					   sfk);
11863	  declarator->id_loc = token->location;
11864
11865	handle_declarator:;
11866	  scope = get_scope_of_declarator (declarator);
11867	  if (scope)
11868	    /* Any names that appear after the declarator-id for a
11869	       member are looked up in the containing scope.  */
11870	    pushed_scope = push_scope (scope);
11871	  parser->in_declarator_p = true;
11872	  if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
11873	      || (declarator && declarator->kind == cdk_id))
11874	    /* Default args are only allowed on function
11875	       declarations.  */
11876	    parser->default_arg_ok_p = saved_default_arg_ok_p;
11877	  else
11878	    parser->default_arg_ok_p = false;
11879
11880	  first = false;
11881	}
11882      /* We're done.  */
11883      else
11884	break;
11885    }
11886
11887  /* For an abstract declarator, we might wind up with nothing at this
11888     point.  That's an error; the declarator is not optional.  */
11889  if (!declarator)
11890    cp_parser_error (parser, "expected declarator");
11891
11892  /* If we entered a scope, we must exit it now.  */
11893  if (pushed_scope)
11894    pop_scope (pushed_scope);
11895
11896  parser->default_arg_ok_p = saved_default_arg_ok_p;
11897  parser->in_declarator_p = saved_in_declarator_p;
11898
11899  return declarator;
11900}
11901
11902/* Parse a ptr-operator.
11903
11904   ptr-operator:
11905     * cv-qualifier-seq [opt]
11906     &
11907     :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
11908
11909   GNU Extension:
11910
11911   ptr-operator:
11912     & cv-qualifier-seq [opt]
11913
11914   Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
11915   Returns ADDR_EXPR if a reference was used.  In the case of a
11916   pointer-to-member, *TYPE is filled in with the TYPE containing the
11917   member.  *CV_QUALS is filled in with the cv-qualifier-seq, or
11918   TYPE_UNQUALIFIED, if there are no cv-qualifiers.  Returns
11919   ERROR_MARK if an error occurred.  */
11920
11921static enum tree_code
11922cp_parser_ptr_operator (cp_parser* parser,
11923			tree* type,
11924			cp_cv_quals *cv_quals)
11925{
11926  enum tree_code code = ERROR_MARK;
11927  cp_token *token;
11928
11929  /* Assume that it's not a pointer-to-member.  */
11930  *type = NULL_TREE;
11931  /* And that there are no cv-qualifiers.  */
11932  *cv_quals = TYPE_UNQUALIFIED;
11933
11934  /* Peek at the next token.  */
11935  token = cp_lexer_peek_token (parser->lexer);
11936  /* If it's a `*' or `&' we have a pointer or reference.  */
11937  if (token->type == CPP_MULT || token->type == CPP_AND)
11938    {
11939      /* Remember which ptr-operator we were processing.  */
11940      code = (token->type == CPP_AND ? ADDR_EXPR : INDIRECT_REF);
11941
11942      /* Consume the `*' or `&'.  */
11943      cp_lexer_consume_token (parser->lexer);
11944
11945      /* A `*' can be followed by a cv-qualifier-seq, and so can a
11946	 `&', if we are allowing GNU extensions.  (The only qualifier
11947	 that can legally appear after `&' is `restrict', but that is
11948	 enforced during semantic analysis.  */
11949      if (code == INDIRECT_REF
11950	  || cp_parser_allow_gnu_extensions_p (parser))
11951	*cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11952    }
11953  else
11954    {
11955      /* Try the pointer-to-member case.  */
11956      cp_parser_parse_tentatively (parser);
11957      /* Look for the optional `::' operator.  */
11958      cp_parser_global_scope_opt (parser,
11959				  /*current_scope_valid_p=*/false);
11960      /* Look for the nested-name specifier.  */
11961      cp_parser_nested_name_specifier (parser,
11962				       /*typename_keyword_p=*/false,
11963				       /*check_dependency_p=*/true,
11964				       /*type_p=*/false,
11965				       /*is_declaration=*/false);
11966      /* If we found it, and the next token is a `*', then we are
11967	 indeed looking at a pointer-to-member operator.  */
11968      if (!cp_parser_error_occurred (parser)
11969	  && cp_parser_require (parser, CPP_MULT, "`*'"))
11970	{
11971	  /* Indicate that the `*' operator was used.  */
11972	  code = INDIRECT_REF;
11973
11974	  if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
11975	    error ("%qD is a namespace", parser->scope);
11976	  else
11977	    {
11978	      /* The type of which the member is a member is given by the
11979		 current SCOPE.  */
11980	      *type = parser->scope;
11981	      /* The next name will not be qualified.  */
11982	      parser->scope = NULL_TREE;
11983	      parser->qualifying_scope = NULL_TREE;
11984	      parser->object_scope = NULL_TREE;
11985	      /* Look for the optional cv-qualifier-seq.  */
11986	      *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11987	    }
11988	}
11989      /* If that didn't work we don't have a ptr-operator.  */
11990      if (!cp_parser_parse_definitely (parser))
11991	cp_parser_error (parser, "expected ptr-operator");
11992    }
11993
11994  return code;
11995}
11996
11997/* Parse an (optional) cv-qualifier-seq.
11998
11999   cv-qualifier-seq:
12000     cv-qualifier cv-qualifier-seq [opt]
12001
12002   cv-qualifier:
12003     const
12004     volatile
12005
12006   GNU Extension:
12007
12008   cv-qualifier:
12009     __restrict__
12010
12011   Returns a bitmask representing the cv-qualifiers.  */
12012
12013static cp_cv_quals
12014cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
12015{
12016  cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
12017
12018  while (true)
12019    {
12020      cp_token *token;
12021      cp_cv_quals cv_qualifier;
12022
12023      /* Peek at the next token.  */
12024      token = cp_lexer_peek_token (parser->lexer);
12025      /* See if it's a cv-qualifier.  */
12026      switch (token->keyword)
12027	{
12028	case RID_CONST:
12029	  cv_qualifier = TYPE_QUAL_CONST;
12030	  break;
12031
12032	case RID_VOLATILE:
12033	  cv_qualifier = TYPE_QUAL_VOLATILE;
12034	  break;
12035
12036	case RID_RESTRICT:
12037	  cv_qualifier = TYPE_QUAL_RESTRICT;
12038	  break;
12039
12040	default:
12041	  cv_qualifier = TYPE_UNQUALIFIED;
12042	  break;
12043	}
12044
12045      if (!cv_qualifier)
12046	break;
12047
12048      if (cv_quals & cv_qualifier)
12049	{
12050	  error ("duplicate cv-qualifier");
12051	  cp_lexer_purge_token (parser->lexer);
12052	}
12053      else
12054	{
12055	  cp_lexer_consume_token (parser->lexer);
12056	  cv_quals |= cv_qualifier;
12057	}
12058    }
12059
12060  return cv_quals;
12061}
12062
12063/* Parse a declarator-id.
12064
12065   declarator-id:
12066     id-expression
12067     :: [opt] nested-name-specifier [opt] type-name
12068
12069   In the `id-expression' case, the value returned is as for
12070   cp_parser_id_expression if the id-expression was an unqualified-id.
12071   If the id-expression was a qualified-id, then a SCOPE_REF is
12072   returned.  The first operand is the scope (either a NAMESPACE_DECL
12073   or TREE_TYPE), but the second is still just a representation of an
12074   unqualified-id.  */
12075
12076static tree
12077cp_parser_declarator_id (cp_parser* parser, bool optional_p)
12078{
12079  tree id;
12080  /* The expression must be an id-expression.  Assume that qualified
12081     names are the names of types so that:
12082
12083       template <class T>
12084       int S<T>::R::i = 3;
12085
12086     will work; we must treat `S<T>::R' as the name of a type.
12087     Similarly, assume that qualified names are templates, where
12088     required, so that:
12089
12090       template <class T>
12091       int S<T>::R<T>::i = 3;
12092
12093     will work, too.  */
12094  id = cp_parser_id_expression (parser,
12095				/*template_keyword_p=*/false,
12096				/*check_dependency_p=*/false,
12097				/*template_p=*/NULL,
12098				/*declarator_p=*/true,
12099				optional_p);
12100  if (id && BASELINK_P (id))
12101    id = BASELINK_FUNCTIONS (id);
12102  return id;
12103}
12104
12105/* Parse a type-id.
12106
12107   type-id:
12108     type-specifier-seq abstract-declarator [opt]
12109
12110   Returns the TYPE specified.  */
12111
12112static tree
12113cp_parser_type_id (cp_parser* parser)
12114{
12115  cp_decl_specifier_seq type_specifier_seq;
12116  cp_declarator *abstract_declarator;
12117
12118  /* Parse the type-specifier-seq.  */
12119  cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
12120				&type_specifier_seq);
12121  if (type_specifier_seq.type == error_mark_node)
12122    return error_mark_node;
12123
12124  /* There might or might not be an abstract declarator.  */
12125  cp_parser_parse_tentatively (parser);
12126  /* Look for the declarator.  */
12127  abstract_declarator
12128    = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
12129			    /*parenthesized_p=*/NULL,
12130			    /*member_p=*/false);
12131  /* Check to see if there really was a declarator.  */
12132  if (!cp_parser_parse_definitely (parser))
12133    abstract_declarator = NULL;
12134
12135  return groktypename (&type_specifier_seq, abstract_declarator);
12136}
12137
12138/* Parse a type-specifier-seq.
12139
12140   type-specifier-seq:
12141     type-specifier type-specifier-seq [opt]
12142
12143   GNU extension:
12144
12145   type-specifier-seq:
12146     attributes type-specifier-seq [opt]
12147
12148   If IS_CONDITION is true, we are at the start of a "condition",
12149   e.g., we've just seen "if (".
12150
12151   Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
12152
12153static void
12154cp_parser_type_specifier_seq (cp_parser* parser,
12155			      bool is_condition,
12156			      cp_decl_specifier_seq *type_specifier_seq)
12157{
12158  bool seen_type_specifier = false;
12159  cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
12160
12161  /* Clear the TYPE_SPECIFIER_SEQ.  */
12162  clear_decl_specs (type_specifier_seq);
12163
12164  /* Parse the type-specifiers and attributes.  */
12165  while (true)
12166    {
12167      tree type_specifier;
12168      bool is_cv_qualifier;
12169
12170      /* Check for attributes first.  */
12171      if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
12172	{
12173	  type_specifier_seq->attributes =
12174	    chainon (type_specifier_seq->attributes,
12175		     cp_parser_attributes_opt (parser));
12176	  continue;
12177	}
12178
12179      /* Look for the type-specifier.  */
12180      type_specifier = cp_parser_type_specifier (parser,
12181						 flags,
12182						 type_specifier_seq,
12183						 /*is_declaration=*/false,
12184						 NULL,
12185						 &is_cv_qualifier);
12186      if (!type_specifier)
12187	{
12188	  /* If the first type-specifier could not be found, this is not a
12189	     type-specifier-seq at all.  */
12190	  if (!seen_type_specifier)
12191	    {
12192	      cp_parser_error (parser, "expected type-specifier");
12193	      type_specifier_seq->type = error_mark_node;
12194	      return;
12195	    }
12196	  /* If subsequent type-specifiers could not be found, the
12197	     type-specifier-seq is complete.  */
12198	  break;
12199	}
12200
12201      seen_type_specifier = true;
12202      /* The standard says that a condition can be:
12203
12204	    type-specifier-seq declarator = assignment-expression
12205
12206	 However, given:
12207
12208	   struct S {};
12209	   if (int S = ...)
12210
12211	 we should treat the "S" as a declarator, not as a
12212	 type-specifier.  The standard doesn't say that explicitly for
12213	 type-specifier-seq, but it does say that for
12214	 decl-specifier-seq in an ordinary declaration.  Perhaps it
12215	 would be clearer just to allow a decl-specifier-seq here, and
12216	 then add a semantic restriction that if any decl-specifiers
12217	 that are not type-specifiers appear, the program is invalid.  */
12218      if (is_condition && !is_cv_qualifier)
12219	flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
12220    }
12221
12222  cp_parser_check_decl_spec (type_specifier_seq);
12223}
12224
12225/* Parse a parameter-declaration-clause.
12226
12227   parameter-declaration-clause:
12228     parameter-declaration-list [opt] ... [opt]
12229     parameter-declaration-list , ...
12230
12231   Returns a representation for the parameter declarations.  A return
12232   value of NULL indicates a parameter-declaration-clause consisting
12233   only of an ellipsis.  */
12234
12235static cp_parameter_declarator *
12236cp_parser_parameter_declaration_clause (cp_parser* parser)
12237{
12238  cp_parameter_declarator *parameters;
12239  cp_token *token;
12240  bool ellipsis_p;
12241  bool is_error;
12242
12243  /* Peek at the next token.  */
12244  token = cp_lexer_peek_token (parser->lexer);
12245  /* Check for trivial parameter-declaration-clauses.  */
12246  if (token->type == CPP_ELLIPSIS)
12247    {
12248      /* Consume the `...' token.  */
12249      cp_lexer_consume_token (parser->lexer);
12250      return NULL;
12251    }
12252  else if (token->type == CPP_CLOSE_PAREN)
12253    /* There are no parameters.  */
12254    {
12255#ifndef NO_IMPLICIT_EXTERN_C
12256      if (in_system_header && current_class_type == NULL
12257	  && current_lang_name == lang_name_c)
12258	return NULL;
12259      else
12260#endif
12261	return no_parameters;
12262    }
12263  /* Check for `(void)', too, which is a special case.  */
12264  else if (token->keyword == RID_VOID
12265	   && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
12266	       == CPP_CLOSE_PAREN))
12267    {
12268      /* Consume the `void' token.  */
12269      cp_lexer_consume_token (parser->lexer);
12270      /* There are no parameters.  */
12271      return no_parameters;
12272    }
12273
12274  /* Parse the parameter-declaration-list.  */
12275  parameters = cp_parser_parameter_declaration_list (parser, &is_error);
12276  /* If a parse error occurred while parsing the
12277     parameter-declaration-list, then the entire
12278     parameter-declaration-clause is erroneous.  */
12279  if (is_error)
12280    return NULL;
12281
12282  /* Peek at the next token.  */
12283  token = cp_lexer_peek_token (parser->lexer);
12284  /* If it's a `,', the clause should terminate with an ellipsis.  */
12285  if (token->type == CPP_COMMA)
12286    {
12287      /* Consume the `,'.  */
12288      cp_lexer_consume_token (parser->lexer);
12289      /* Expect an ellipsis.  */
12290      ellipsis_p
12291	= (cp_parser_require (parser, CPP_ELLIPSIS, "`...'") != NULL);
12292    }
12293  /* It might also be `...' if the optional trailing `,' was
12294     omitted.  */
12295  else if (token->type == CPP_ELLIPSIS)
12296    {
12297      /* Consume the `...' token.  */
12298      cp_lexer_consume_token (parser->lexer);
12299      /* And remember that we saw it.  */
12300      ellipsis_p = true;
12301    }
12302  else
12303    ellipsis_p = false;
12304
12305  /* Finish the parameter list.  */
12306  if (parameters && ellipsis_p)
12307    parameters->ellipsis_p = true;
12308
12309  return parameters;
12310}
12311
12312/* Parse a parameter-declaration-list.
12313
12314   parameter-declaration-list:
12315     parameter-declaration
12316     parameter-declaration-list , parameter-declaration
12317
12318   Returns a representation of the parameter-declaration-list, as for
12319   cp_parser_parameter_declaration_clause.  However, the
12320   `void_list_node' is never appended to the list.  Upon return,
12321   *IS_ERROR will be true iff an error occurred.  */
12322
12323static cp_parameter_declarator *
12324cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
12325{
12326  cp_parameter_declarator *parameters = NULL;
12327  cp_parameter_declarator **tail = &parameters;
12328  bool saved_in_unbraced_linkage_specification_p;
12329
12330  /* Assume all will go well.  */
12331  *is_error = false;
12332  /* The special considerations that apply to a function within an
12333     unbraced linkage specifications do not apply to the parameters
12334     to the function.  */
12335  saved_in_unbraced_linkage_specification_p
12336    = parser->in_unbraced_linkage_specification_p;
12337  parser->in_unbraced_linkage_specification_p = false;
12338
12339  /* Look for more parameters.  */
12340  while (true)
12341    {
12342      cp_parameter_declarator *parameter;
12343      bool parenthesized_p;
12344      /* Parse the parameter.  */
12345      parameter
12346	= cp_parser_parameter_declaration (parser,
12347					   /*template_parm_p=*/false,
12348					   &parenthesized_p);
12349
12350      /* If a parse error occurred parsing the parameter declaration,
12351	 then the entire parameter-declaration-list is erroneous.  */
12352      if (!parameter)
12353	{
12354	  *is_error = true;
12355	  parameters = NULL;
12356	  break;
12357	}
12358      /* Add the new parameter to the list.  */
12359      *tail = parameter;
12360      tail = &parameter->next;
12361
12362      /* Peek at the next token.  */
12363      if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
12364	  || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
12365	  /* These are for Objective-C++ */
12366	  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
12367	  || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
12368	/* The parameter-declaration-list is complete.  */
12369	break;
12370      else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12371	{
12372	  cp_token *token;
12373
12374	  /* Peek at the next token.  */
12375	  token = cp_lexer_peek_nth_token (parser->lexer, 2);
12376	  /* If it's an ellipsis, then the list is complete.  */
12377	  if (token->type == CPP_ELLIPSIS)
12378	    break;
12379	  /* Otherwise, there must be more parameters.  Consume the
12380	     `,'.  */
12381	  cp_lexer_consume_token (parser->lexer);
12382	  /* When parsing something like:
12383
12384		int i(float f, double d)
12385
12386	     we can tell after seeing the declaration for "f" that we
12387	     are not looking at an initialization of a variable "i",
12388	     but rather at the declaration of a function "i".
12389
12390	     Due to the fact that the parsing of template arguments
12391	     (as specified to a template-id) requires backtracking we
12392	     cannot use this technique when inside a template argument
12393	     list.  */
12394	  if (!parser->in_template_argument_list_p
12395	      && !parser->in_type_id_in_expr_p
12396	      && cp_parser_uncommitted_to_tentative_parse_p (parser)
12397	      /* However, a parameter-declaration of the form
12398		 "foat(f)" (which is a valid declaration of a
12399		 parameter "f") can also be interpreted as an
12400		 expression (the conversion of "f" to "float").  */
12401	      && !parenthesized_p)
12402	    cp_parser_commit_to_tentative_parse (parser);
12403	}
12404      else
12405	{
12406	  cp_parser_error (parser, "expected %<,%> or %<...%>");
12407	  if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
12408	    cp_parser_skip_to_closing_parenthesis (parser,
12409						   /*recovering=*/true,
12410						   /*or_comma=*/false,
12411						   /*consume_paren=*/false);
12412	  break;
12413	}
12414    }
12415
12416  parser->in_unbraced_linkage_specification_p
12417    = saved_in_unbraced_linkage_specification_p;
12418
12419  return parameters;
12420}
12421
12422/* Parse a parameter declaration.
12423
12424   parameter-declaration:
12425     decl-specifier-seq declarator
12426     decl-specifier-seq declarator = assignment-expression
12427     decl-specifier-seq abstract-declarator [opt]
12428     decl-specifier-seq abstract-declarator [opt] = assignment-expression
12429
12430   If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
12431   declares a template parameter.  (In that case, a non-nested `>'
12432   token encountered during the parsing of the assignment-expression
12433   is not interpreted as a greater-than operator.)
12434
12435   Returns a representation of the parameter, or NULL if an error
12436   occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
12437   true iff the declarator is of the form "(p)".  */
12438
12439static cp_parameter_declarator *
12440cp_parser_parameter_declaration (cp_parser *parser,
12441				 bool template_parm_p,
12442				 bool *parenthesized_p)
12443{
12444  int declares_class_or_enum;
12445  bool greater_than_is_operator_p;
12446  cp_decl_specifier_seq decl_specifiers;
12447  cp_declarator *declarator;
12448  tree default_argument;
12449  cp_token *token;
12450  const char *saved_message;
12451
12452  /* In a template parameter, `>' is not an operator.
12453
12454     [temp.param]
12455
12456     When parsing a default template-argument for a non-type
12457     template-parameter, the first non-nested `>' is taken as the end
12458     of the template parameter-list rather than a greater-than
12459     operator.  */
12460  greater_than_is_operator_p = !template_parm_p;
12461
12462  /* Type definitions may not appear in parameter types.  */
12463  saved_message = parser->type_definition_forbidden_message;
12464  parser->type_definition_forbidden_message
12465    = "types may not be defined in parameter types";
12466
12467  /* Parse the declaration-specifiers.  */
12468  cp_parser_decl_specifier_seq (parser,
12469				CP_PARSER_FLAGS_NONE,
12470				&decl_specifiers,
12471				&declares_class_or_enum);
12472  /* If an error occurred, there's no reason to attempt to parse the
12473     rest of the declaration.  */
12474  if (cp_parser_error_occurred (parser))
12475    {
12476      parser->type_definition_forbidden_message = saved_message;
12477      return NULL;
12478    }
12479
12480  /* Peek at the next token.  */
12481  token = cp_lexer_peek_token (parser->lexer);
12482  /* If the next token is a `)', `,', `=', `>', or `...', then there
12483     is no declarator.  */
12484  if (token->type == CPP_CLOSE_PAREN
12485      || token->type == CPP_COMMA
12486      || token->type == CPP_EQ
12487      || token->type == CPP_ELLIPSIS
12488      || token->type == CPP_GREATER)
12489    {
12490      declarator = NULL;
12491      if (parenthesized_p)
12492	*parenthesized_p = false;
12493    }
12494  /* Otherwise, there should be a declarator.  */
12495  else
12496    {
12497      bool saved_default_arg_ok_p = parser->default_arg_ok_p;
12498      parser->default_arg_ok_p = false;
12499
12500      /* After seeing a decl-specifier-seq, if the next token is not a
12501	 "(", there is no possibility that the code is a valid
12502	 expression.  Therefore, if parsing tentatively, we commit at
12503	 this point.  */
12504      if (!parser->in_template_argument_list_p
12505	  /* In an expression context, having seen:
12506
12507	       (int((char ...
12508
12509	     we cannot be sure whether we are looking at a
12510	     function-type (taking a "char" as a parameter) or a cast
12511	     of some object of type "char" to "int".  */
12512	  && !parser->in_type_id_in_expr_p
12513	  && cp_parser_uncommitted_to_tentative_parse_p (parser)
12514	  && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
12515	cp_parser_commit_to_tentative_parse (parser);
12516      /* Parse the declarator.  */
12517      declarator = cp_parser_declarator (parser,
12518					 CP_PARSER_DECLARATOR_EITHER,
12519					 /*ctor_dtor_or_conv_p=*/NULL,
12520					 parenthesized_p,
12521					 /*member_p=*/false);
12522      parser->default_arg_ok_p = saved_default_arg_ok_p;
12523      /* After the declarator, allow more attributes.  */
12524      decl_specifiers.attributes
12525	= chainon (decl_specifiers.attributes,
12526		   cp_parser_attributes_opt (parser));
12527    }
12528
12529  /* The restriction on defining new types applies only to the type
12530     of the parameter, not to the default argument.  */
12531  parser->type_definition_forbidden_message = saved_message;
12532
12533  /* If the next token is `=', then process a default argument.  */
12534  if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12535    {
12536      bool saved_greater_than_is_operator_p;
12537      /* Consume the `='.  */
12538      cp_lexer_consume_token (parser->lexer);
12539
12540      /* If we are defining a class, then the tokens that make up the
12541	 default argument must be saved and processed later.  */
12542      if (!template_parm_p && at_class_scope_p ()
12543	  && TYPE_BEING_DEFINED (current_class_type))
12544	{
12545	  unsigned depth = 0;
12546	  cp_token *first_token;
12547	  cp_token *token;
12548
12549	  /* Add tokens until we have processed the entire default
12550	     argument.  We add the range [first_token, token).  */
12551	  first_token = cp_lexer_peek_token (parser->lexer);
12552	  while (true)
12553	    {
12554	      bool done = false;
12555
12556	      /* Peek at the next token.  */
12557	      token = cp_lexer_peek_token (parser->lexer);
12558	      /* What we do depends on what token we have.  */
12559	      switch (token->type)
12560		{
12561		  /* In valid code, a default argument must be
12562		     immediately followed by a `,' `)', or `...'.  */
12563		case CPP_COMMA:
12564		case CPP_CLOSE_PAREN:
12565		case CPP_ELLIPSIS:
12566		  /* If we run into a non-nested `;', `}', or `]',
12567		     then the code is invalid -- but the default
12568		     argument is certainly over.  */
12569		case CPP_SEMICOLON:
12570		case CPP_CLOSE_BRACE:
12571		case CPP_CLOSE_SQUARE:
12572		  if (depth == 0)
12573		    done = true;
12574		  /* Update DEPTH, if necessary.  */
12575		  else if (token->type == CPP_CLOSE_PAREN
12576			   || token->type == CPP_CLOSE_BRACE
12577			   || token->type == CPP_CLOSE_SQUARE)
12578		    --depth;
12579		  break;
12580
12581		case CPP_OPEN_PAREN:
12582		case CPP_OPEN_SQUARE:
12583		case CPP_OPEN_BRACE:
12584		  ++depth;
12585		  break;
12586
12587		case CPP_GREATER:
12588		  /* If we see a non-nested `>', and `>' is not an
12589		     operator, then it marks the end of the default
12590		     argument.  */
12591		  if (!depth && !greater_than_is_operator_p)
12592		    done = true;
12593		  break;
12594
12595		  /* If we run out of tokens, issue an error message.  */
12596		case CPP_EOF:
12597		case CPP_PRAGMA_EOL:
12598		  error ("file ends in default argument");
12599		  done = true;
12600		  break;
12601
12602		case CPP_NAME:
12603		case CPP_SCOPE:
12604		  /* In these cases, we should look for template-ids.
12605		     For example, if the default argument is
12606		     `X<int, double>()', we need to do name lookup to
12607		     figure out whether or not `X' is a template; if
12608		     so, the `,' does not end the default argument.
12609
12610		     That is not yet done.  */
12611		  break;
12612
12613		default:
12614		  break;
12615		}
12616
12617	      /* If we've reached the end, stop.  */
12618	      if (done)
12619		break;
12620
12621	      /* Add the token to the token block.  */
12622	      token = cp_lexer_consume_token (parser->lexer);
12623	    }
12624
12625	  /* Create a DEFAULT_ARG to represented the unparsed default
12626	     argument.  */
12627	  default_argument = make_node (DEFAULT_ARG);
12628	  DEFARG_TOKENS (default_argument)
12629	    = cp_token_cache_new (first_token, token);
12630	  DEFARG_INSTANTIATIONS (default_argument) = NULL;
12631	}
12632      /* Outside of a class definition, we can just parse the
12633	 assignment-expression.  */
12634      else
12635	{
12636	  bool saved_local_variables_forbidden_p;
12637
12638	  /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
12639	     set correctly.  */
12640	  saved_greater_than_is_operator_p
12641	    = parser->greater_than_is_operator_p;
12642	  parser->greater_than_is_operator_p = greater_than_is_operator_p;
12643	  /* Local variable names (and the `this' keyword) may not
12644	     appear in a default argument.  */
12645	  saved_local_variables_forbidden_p
12646	    = parser->local_variables_forbidden_p;
12647	  parser->local_variables_forbidden_p = true;
12648	  /* The default argument expression may cause implicitly
12649	     defined member functions to be synthesized, which will
12650	     result in garbage collection.  We must treat this
12651	     situation as if we were within the body of function so as
12652	     to avoid collecting live data on the stack.  */
12653	  ++function_depth;
12654	  /* Parse the assignment-expression.  */
12655	  if (template_parm_p)
12656	    push_deferring_access_checks (dk_no_deferred);
12657	  default_argument
12658	    = cp_parser_assignment_expression (parser, /*cast_p=*/false);
12659	  if (template_parm_p)
12660	    pop_deferring_access_checks ();
12661	  /* Restore saved state.  */
12662	  --function_depth;
12663	  parser->greater_than_is_operator_p
12664	    = saved_greater_than_is_operator_p;
12665	  parser->local_variables_forbidden_p
12666	    = saved_local_variables_forbidden_p;
12667	}
12668      if (!parser->default_arg_ok_p)
12669	{
12670	  if (!flag_pedantic_errors)
12671	    warning (0, "deprecated use of default argument for parameter of non-function");
12672	  else
12673	    {
12674	      error ("default arguments are only permitted for function parameters");
12675	      default_argument = NULL_TREE;
12676	    }
12677	}
12678    }
12679  else
12680    default_argument = NULL_TREE;
12681
12682  return make_parameter_declarator (&decl_specifiers,
12683				    declarator,
12684				    default_argument);
12685}
12686
12687/* Parse a function-body.
12688
12689   function-body:
12690     compound_statement  */
12691
12692static void
12693cp_parser_function_body (cp_parser *parser)
12694{
12695  cp_parser_compound_statement (parser, NULL, false);
12696}
12697
12698/* Parse a ctor-initializer-opt followed by a function-body.  Return
12699   true if a ctor-initializer was present.  */
12700
12701static bool
12702cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
12703{
12704  tree body;
12705  bool ctor_initializer_p;
12706
12707  /* Begin the function body.  */
12708  body = begin_function_body ();
12709  /* Parse the optional ctor-initializer.  */
12710  ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
12711  /* Parse the function-body.  */
12712  cp_parser_function_body (parser);
12713  /* Finish the function body.  */
12714  finish_function_body (body);
12715
12716  return ctor_initializer_p;
12717}
12718
12719/* Parse an initializer.
12720
12721   initializer:
12722     = initializer-clause
12723     ( expression-list )
12724
12725   Returns an expression representing the initializer.  If no
12726   initializer is present, NULL_TREE is returned.
12727
12728   *IS_PARENTHESIZED_INIT is set to TRUE if the `( expression-list )'
12729   production is used, and zero otherwise.  *IS_PARENTHESIZED_INIT is
12730   set to FALSE if there is no initializer present.  If there is an
12731   initializer, and it is not a constant-expression, *NON_CONSTANT_P
12732   is set to true; otherwise it is set to false.  */
12733
12734static tree
12735cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init,
12736		       bool* non_constant_p)
12737{
12738  cp_token *token;
12739  tree init;
12740
12741  /* Peek at the next token.  */
12742  token = cp_lexer_peek_token (parser->lexer);
12743
12744  /* Let our caller know whether or not this initializer was
12745     parenthesized.  */
12746  *is_parenthesized_init = (token->type == CPP_OPEN_PAREN);
12747  /* Assume that the initializer is constant.  */
12748  *non_constant_p = false;
12749
12750  if (token->type == CPP_EQ)
12751    {
12752      /* Consume the `='.  */
12753      cp_lexer_consume_token (parser->lexer);
12754      /* Parse the initializer-clause.  */
12755      init = cp_parser_initializer_clause (parser, non_constant_p);
12756    }
12757  else if (token->type == CPP_OPEN_PAREN)
12758    init = cp_parser_parenthesized_expression_list (parser, false,
12759						    /*cast_p=*/false,
12760						    non_constant_p);
12761  else
12762    {
12763      /* Anything else is an error.  */
12764      cp_parser_error (parser, "expected initializer");
12765      init = error_mark_node;
12766    }
12767
12768  return init;
12769}
12770
12771/* Parse an initializer-clause.
12772
12773   initializer-clause:
12774     assignment-expression
12775     { initializer-list , [opt] }
12776     { }
12777
12778   Returns an expression representing the initializer.
12779
12780   If the `assignment-expression' production is used the value
12781   returned is simply a representation for the expression.
12782
12783   Otherwise, a CONSTRUCTOR is returned.  The CONSTRUCTOR_ELTS will be
12784   the elements of the initializer-list (or NULL, if the last
12785   production is used).  The TREE_TYPE for the CONSTRUCTOR will be
12786   NULL_TREE.  There is no way to detect whether or not the optional
12787   trailing `,' was provided.  NON_CONSTANT_P is as for
12788   cp_parser_initializer.  */
12789
12790static tree
12791cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
12792{
12793  tree initializer;
12794
12795  /* Assume the expression is constant.  */
12796  *non_constant_p = false;
12797
12798  /* If it is not a `{', then we are looking at an
12799     assignment-expression.  */
12800  if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
12801    {
12802      initializer
12803	= cp_parser_constant_expression (parser,
12804					/*allow_non_constant_p=*/true,
12805					non_constant_p);
12806      if (!*non_constant_p)
12807	initializer = fold_non_dependent_expr (initializer);
12808    }
12809  else
12810    {
12811      /* Consume the `{' token.  */
12812      cp_lexer_consume_token (parser->lexer);
12813      /* Create a CONSTRUCTOR to represent the braced-initializer.  */
12814      initializer = make_node (CONSTRUCTOR);
12815      /* If it's not a `}', then there is a non-trivial initializer.  */
12816      if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
12817	{
12818	  /* Parse the initializer list.  */
12819	  CONSTRUCTOR_ELTS (initializer)
12820	    = cp_parser_initializer_list (parser, non_constant_p);
12821	  /* A trailing `,' token is allowed.  */
12822	  if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12823	    cp_lexer_consume_token (parser->lexer);
12824	}
12825      /* Now, there should be a trailing `}'.  */
12826      cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12827    }
12828
12829  return initializer;
12830}
12831
12832/* Parse an initializer-list.
12833
12834   initializer-list:
12835     initializer-clause
12836     initializer-list , initializer-clause
12837
12838   GNU Extension:
12839
12840   initializer-list:
12841     identifier : initializer-clause
12842     initializer-list, identifier : initializer-clause
12843
12844   Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
12845   for the initializer.  If the INDEX of the elt is non-NULL, it is the
12846   IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
12847   as for cp_parser_initializer.  */
12848
12849static VEC(constructor_elt,gc) *
12850cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
12851{
12852  VEC(constructor_elt,gc) *v = NULL;
12853
12854  /* Assume all of the expressions are constant.  */
12855  *non_constant_p = false;
12856
12857  /* Parse the rest of the list.  */
12858  while (true)
12859    {
12860      cp_token *token;
12861      tree identifier;
12862      tree initializer;
12863      bool clause_non_constant_p;
12864
12865      /* If the next token is an identifier and the following one is a
12866	 colon, we are looking at the GNU designated-initializer
12867	 syntax.  */
12868      if (cp_parser_allow_gnu_extensions_p (parser)
12869	  && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
12870	  && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
12871	{
12872	  /* Warn the user that they are using an extension.  */
12873	  if (pedantic)
12874	    pedwarn ("ISO C++ does not allow designated initializers");
12875	  /* Consume the identifier.  */
12876	  identifier = cp_lexer_consume_token (parser->lexer)->u.value;
12877	  /* Consume the `:'.  */
12878	  cp_lexer_consume_token (parser->lexer);
12879	}
12880      else
12881	identifier = NULL_TREE;
12882
12883      /* Parse the initializer.  */
12884      initializer = cp_parser_initializer_clause (parser,
12885						  &clause_non_constant_p);
12886      /* If any clause is non-constant, so is the entire initializer.  */
12887      if (clause_non_constant_p)
12888	*non_constant_p = true;
12889
12890      /* Add it to the vector.  */
12891      CONSTRUCTOR_APPEND_ELT(v, identifier, initializer);
12892
12893      /* If the next token is not a comma, we have reached the end of
12894	 the list.  */
12895      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
12896	break;
12897
12898      /* Peek at the next token.  */
12899      token = cp_lexer_peek_nth_token (parser->lexer, 2);
12900      /* If the next token is a `}', then we're still done.  An
12901	 initializer-clause can have a trailing `,' after the
12902	 initializer-list and before the closing `}'.  */
12903      if (token->type == CPP_CLOSE_BRACE)
12904	break;
12905
12906      /* Consume the `,' token.  */
12907      cp_lexer_consume_token (parser->lexer);
12908    }
12909
12910  return v;
12911}
12912
12913/* Classes [gram.class] */
12914
12915/* Parse a class-name.
12916
12917   class-name:
12918     identifier
12919     template-id
12920
12921   TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
12922   to indicate that names looked up in dependent types should be
12923   assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
12924   keyword has been used to indicate that the name that appears next
12925   is a template.  TAG_TYPE indicates the explicit tag given before
12926   the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
12927   looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
12928   is the class being defined in a class-head.
12929
12930   Returns the TYPE_DECL representing the class.  */
12931
12932static tree
12933cp_parser_class_name (cp_parser *parser,
12934		      bool typename_keyword_p,
12935		      bool template_keyword_p,
12936		      enum tag_types tag_type,
12937		      bool check_dependency_p,
12938		      bool class_head_p,
12939		      bool is_declaration)
12940{
12941  tree decl;
12942  tree scope;
12943  bool typename_p;
12944  cp_token *token;
12945
12946  /* All class-names start with an identifier.  */
12947  token = cp_lexer_peek_token (parser->lexer);
12948  if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
12949    {
12950      cp_parser_error (parser, "expected class-name");
12951      return error_mark_node;
12952    }
12953
12954  /* PARSER->SCOPE can be cleared when parsing the template-arguments
12955     to a template-id, so we save it here.  */
12956  scope = parser->scope;
12957  if (scope == error_mark_node)
12958    return error_mark_node;
12959
12960  /* Any name names a type if we're following the `typename' keyword
12961     in a qualified name where the enclosing scope is type-dependent.  */
12962  typename_p = (typename_keyword_p && scope && TYPE_P (scope)
12963		&& dependent_type_p (scope));
12964  /* Handle the common case (an identifier, but not a template-id)
12965     efficiently.  */
12966  if (token->type == CPP_NAME
12967      && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
12968    {
12969      cp_token *identifier_token;
12970      tree identifier;
12971      bool ambiguous_p;
12972
12973      /* Look for the identifier.  */
12974      identifier_token = cp_lexer_peek_token (parser->lexer);
12975      ambiguous_p = identifier_token->ambiguous_p;
12976      identifier = cp_parser_identifier (parser);
12977      /* If the next token isn't an identifier, we are certainly not
12978	 looking at a class-name.  */
12979      if (identifier == error_mark_node)
12980	decl = error_mark_node;
12981      /* If we know this is a type-name, there's no need to look it
12982	 up.  */
12983      else if (typename_p)
12984	decl = identifier;
12985      else
12986	{
12987	  tree ambiguous_decls;
12988	  /* If we already know that this lookup is ambiguous, then
12989	     we've already issued an error message; there's no reason
12990	     to check again.  */
12991	  if (ambiguous_p)
12992	    {
12993	      cp_parser_simulate_error (parser);
12994	      return error_mark_node;
12995	    }
12996	  /* If the next token is a `::', then the name must be a type
12997	     name.
12998
12999	     [basic.lookup.qual]
13000
13001	     During the lookup for a name preceding the :: scope
13002	     resolution operator, object, function, and enumerator
13003	     names are ignored.  */
13004	  if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
13005	    tag_type = typename_type;
13006	  /* Look up the name.  */
13007	  decl = cp_parser_lookup_name (parser, identifier,
13008					tag_type,
13009					/*is_template=*/false,
13010					/*is_namespace=*/false,
13011					check_dependency_p,
13012					&ambiguous_decls);
13013	  if (ambiguous_decls)
13014	    {
13015	      error ("reference to %qD is ambiguous", identifier);
13016	      print_candidates (ambiguous_decls);
13017	      if (cp_parser_parsing_tentatively (parser))
13018		{
13019		  identifier_token->ambiguous_p = true;
13020		  cp_parser_simulate_error (parser);
13021		}
13022	      return error_mark_node;
13023	    }
13024	}
13025    }
13026  else
13027    {
13028      /* Try a template-id.  */
13029      decl = cp_parser_template_id (parser, template_keyword_p,
13030				    check_dependency_p,
13031				    is_declaration);
13032      if (decl == error_mark_node)
13033	return error_mark_node;
13034    }
13035
13036  decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
13037
13038  /* If this is a typename, create a TYPENAME_TYPE.  */
13039  if (typename_p && decl != error_mark_node)
13040    {
13041      decl = make_typename_type (scope, decl, typename_type,
13042				 /*complain=*/tf_error);
13043      if (decl != error_mark_node)
13044	decl = TYPE_NAME (decl);
13045    }
13046
13047  /* Check to see that it is really the name of a class.  */
13048  if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
13049      && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
13050      && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
13051    /* Situations like this:
13052
13053	 template <typename T> struct A {
13054	   typename T::template X<int>::I i;
13055	 };
13056
13057       are problematic.  Is `T::template X<int>' a class-name?  The
13058       standard does not seem to be definitive, but there is no other
13059       valid interpretation of the following `::'.  Therefore, those
13060       names are considered class-names.  */
13061    {
13062      decl = make_typename_type (scope, decl, tag_type, tf_error);
13063      if (decl != error_mark_node)
13064	decl = TYPE_NAME (decl);
13065    }
13066  else if (TREE_CODE (decl) != TYPE_DECL
13067	   || TREE_TYPE (decl) == error_mark_node
13068	   || !IS_AGGR_TYPE (TREE_TYPE (decl)))
13069    decl = error_mark_node;
13070
13071  if (decl == error_mark_node)
13072    cp_parser_error (parser, "expected class-name");
13073
13074  return decl;
13075}
13076
13077/* Parse a class-specifier.
13078
13079   class-specifier:
13080     class-head { member-specification [opt] }
13081
13082   Returns the TREE_TYPE representing the class.  */
13083
13084static tree
13085cp_parser_class_specifier (cp_parser* parser)
13086{
13087  cp_token *token;
13088  tree type;
13089  tree attributes = NULL_TREE;
13090  int has_trailing_semicolon;
13091  bool nested_name_specifier_p;
13092  unsigned saved_num_template_parameter_lists;
13093  bool saved_in_function_body;
13094  tree old_scope = NULL_TREE;
13095  tree scope = NULL_TREE;
13096  tree bases;
13097
13098  push_deferring_access_checks (dk_no_deferred);
13099
13100  /* Parse the class-head.  */
13101  type = cp_parser_class_head (parser,
13102			       &nested_name_specifier_p,
13103			       &attributes,
13104			       &bases);
13105  /* If the class-head was a semantic disaster, skip the entire body
13106     of the class.  */
13107  if (!type)
13108    {
13109      cp_parser_skip_to_end_of_block_or_statement (parser);
13110      pop_deferring_access_checks ();
13111      return error_mark_node;
13112    }
13113
13114  /* Look for the `{'.  */
13115  if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
13116    {
13117      pop_deferring_access_checks ();
13118      return error_mark_node;
13119    }
13120
13121  /* Process the base classes. If they're invalid, skip the
13122     entire class body.  */
13123  if (!xref_basetypes (type, bases))
13124    {
13125      cp_parser_skip_to_closing_brace (parser);
13126
13127      /* Consuming the closing brace yields better error messages
13128         later on.  */
13129      cp_lexer_consume_token (parser->lexer);
13130      pop_deferring_access_checks ();
13131      return error_mark_node;
13132    }
13133
13134  /* Issue an error message if type-definitions are forbidden here.  */
13135  cp_parser_check_type_definition (parser);
13136  /* Remember that we are defining one more class.  */
13137  ++parser->num_classes_being_defined;
13138  /* Inside the class, surrounding template-parameter-lists do not
13139     apply.  */
13140  saved_num_template_parameter_lists
13141    = parser->num_template_parameter_lists;
13142  parser->num_template_parameter_lists = 0;
13143  /* We are not in a function body.  */
13144  saved_in_function_body = parser->in_function_body;
13145  parser->in_function_body = false;
13146
13147  /* Start the class.  */
13148  if (nested_name_specifier_p)
13149    {
13150      scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
13151      old_scope = push_inner_scope (scope);
13152    }
13153  type = begin_class_definition (type, attributes);
13154
13155  if (type == error_mark_node)
13156    /* If the type is erroneous, skip the entire body of the class.  */
13157    cp_parser_skip_to_closing_brace (parser);
13158  else
13159    /* Parse the member-specification.  */
13160    cp_parser_member_specification_opt (parser);
13161
13162  /* Look for the trailing `}'.  */
13163  cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
13164  /* We get better error messages by noticing a common problem: a
13165     missing trailing `;'.  */
13166  token = cp_lexer_peek_token (parser->lexer);
13167  has_trailing_semicolon = (token->type == CPP_SEMICOLON);
13168  /* Look for trailing attributes to apply to this class.  */
13169  if (cp_parser_allow_gnu_extensions_p (parser))
13170    attributes = cp_parser_attributes_opt (parser);
13171  if (type != error_mark_node)
13172    type = finish_struct (type, attributes);
13173  if (nested_name_specifier_p)
13174    pop_inner_scope (old_scope, scope);
13175  /* If this class is not itself within the scope of another class,
13176     then we need to parse the bodies of all of the queued function
13177     definitions.  Note that the queued functions defined in a class
13178     are not always processed immediately following the
13179     class-specifier for that class.  Consider:
13180
13181       struct A {
13182	 struct B { void f() { sizeof (A); } };
13183       };
13184
13185     If `f' were processed before the processing of `A' were
13186     completed, there would be no way to compute the size of `A'.
13187     Note that the nesting we are interested in here is lexical --
13188     not the semantic nesting given by TYPE_CONTEXT.  In particular,
13189     for:
13190
13191       struct A { struct B; };
13192       struct A::B { void f() { } };
13193
13194     there is no need to delay the parsing of `A::B::f'.  */
13195  if (--parser->num_classes_being_defined == 0)
13196    {
13197      tree queue_entry;
13198      tree fn;
13199      tree class_type = NULL_TREE;
13200      tree pushed_scope = NULL_TREE;
13201
13202      /* In a first pass, parse default arguments to the functions.
13203	 Then, in a second pass, parse the bodies of the functions.
13204	 This two-phased approach handles cases like:
13205
13206	    struct S {
13207	      void f() { g(); }
13208	      void g(int i = 3);
13209	    };
13210
13211	 */
13212      for (TREE_PURPOSE (parser->unparsed_functions_queues)
13213	     = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
13214	   (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
13215	   TREE_PURPOSE (parser->unparsed_functions_queues)
13216	     = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
13217	{
13218	  fn = TREE_VALUE (queue_entry);
13219	  /* If there are default arguments that have not yet been processed,
13220	     take care of them now.  */
13221	  if (class_type != TREE_PURPOSE (queue_entry))
13222	    {
13223	      if (pushed_scope)
13224		pop_scope (pushed_scope);
13225	      class_type = TREE_PURPOSE (queue_entry);
13226	      pushed_scope = push_scope (class_type);
13227	    }
13228	  /* Make sure that any template parameters are in scope.  */
13229	  maybe_begin_member_template_processing (fn);
13230	  /* Parse the default argument expressions.  */
13231	  cp_parser_late_parsing_default_args (parser, fn);
13232	  /* Remove any template parameters from the symbol table.  */
13233	  maybe_end_member_template_processing ();
13234	}
13235      if (pushed_scope)
13236	pop_scope (pushed_scope);
13237      /* Now parse the body of the functions.  */
13238      for (TREE_VALUE (parser->unparsed_functions_queues)
13239	     = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
13240	   (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
13241	   TREE_VALUE (parser->unparsed_functions_queues)
13242	     = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
13243	{
13244	  /* Figure out which function we need to process.  */
13245	  fn = TREE_VALUE (queue_entry);
13246	  /* Parse the function.  */
13247	  cp_parser_late_parsing_for_member (parser, fn);
13248	}
13249    }
13250
13251  /* Put back any saved access checks.  */
13252  pop_deferring_access_checks ();
13253
13254  /* Restore saved state.  */
13255  parser->in_function_body = saved_in_function_body;
13256  parser->num_template_parameter_lists
13257    = saved_num_template_parameter_lists;
13258
13259  return type;
13260}
13261
13262/* Parse a class-head.
13263
13264   class-head:
13265     class-key identifier [opt] base-clause [opt]
13266     class-key nested-name-specifier identifier base-clause [opt]
13267     class-key nested-name-specifier [opt] template-id
13268       base-clause [opt]
13269
13270   GNU Extensions:
13271     class-key attributes identifier [opt] base-clause [opt]
13272     class-key attributes nested-name-specifier identifier base-clause [opt]
13273     class-key attributes nested-name-specifier [opt] template-id
13274       base-clause [opt]
13275
13276   Returns the TYPE of the indicated class.  Sets
13277   *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
13278   involving a nested-name-specifier was used, and FALSE otherwise.
13279
13280   Returns error_mark_node if this is not a class-head.
13281
13282   Returns NULL_TREE if the class-head is syntactically valid, but
13283   semantically invalid in a way that means we should skip the entire
13284   body of the class.  */
13285
13286static tree
13287cp_parser_class_head (cp_parser* parser,
13288		      bool* nested_name_specifier_p,
13289		      tree *attributes_p,
13290		      tree *bases)
13291{
13292  tree nested_name_specifier;
13293  enum tag_types class_key;
13294  tree id = NULL_TREE;
13295  tree type = NULL_TREE;
13296  tree attributes;
13297  bool template_id_p = false;
13298  bool qualified_p = false;
13299  bool invalid_nested_name_p = false;
13300  bool invalid_explicit_specialization_p = false;
13301  tree pushed_scope = NULL_TREE;
13302  unsigned num_templates;
13303
13304  /* Assume no nested-name-specifier will be present.  */
13305  *nested_name_specifier_p = false;
13306  /* Assume no template parameter lists will be used in defining the
13307     type.  */
13308  num_templates = 0;
13309
13310  /* Look for the class-key.  */
13311  class_key = cp_parser_class_key (parser);
13312  if (class_key == none_type)
13313    return error_mark_node;
13314
13315  /* Parse the attributes.  */
13316  attributes = cp_parser_attributes_opt (parser);
13317
13318  /* If the next token is `::', that is invalid -- but sometimes
13319     people do try to write:
13320
13321       struct ::S {};
13322
13323     Handle this gracefully by accepting the extra qualifier, and then
13324     issuing an error about it later if this really is a
13325     class-head.  If it turns out just to be an elaborated type
13326     specifier, remain silent.  */
13327  if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
13328    qualified_p = true;
13329
13330  push_deferring_access_checks (dk_no_check);
13331
13332  /* Determine the name of the class.  Begin by looking for an
13333     optional nested-name-specifier.  */
13334  nested_name_specifier
13335    = cp_parser_nested_name_specifier_opt (parser,
13336					   /*typename_keyword_p=*/false,
13337					   /*check_dependency_p=*/false,
13338					   /*type_p=*/false,
13339					   /*is_declaration=*/false);
13340  /* If there was a nested-name-specifier, then there *must* be an
13341     identifier.  */
13342  if (nested_name_specifier)
13343    {
13344      /* Although the grammar says `identifier', it really means
13345	 `class-name' or `template-name'.  You are only allowed to
13346	 define a class that has already been declared with this
13347	 syntax.
13348
13349	 The proposed resolution for Core Issue 180 says that wherever
13350	 you see `class T::X' you should treat `X' as a type-name.
13351
13352	 It is OK to define an inaccessible class; for example:
13353
13354	   class A { class B; };
13355	   class A::B {};
13356
13357	 We do not know if we will see a class-name, or a
13358	 template-name.  We look for a class-name first, in case the
13359	 class-name is a template-id; if we looked for the
13360	 template-name first we would stop after the template-name.  */
13361      cp_parser_parse_tentatively (parser);
13362      type = cp_parser_class_name (parser,
13363				   /*typename_keyword_p=*/false,
13364				   /*template_keyword_p=*/false,
13365				   class_type,
13366				   /*check_dependency_p=*/false,
13367				   /*class_head_p=*/true,
13368				   /*is_declaration=*/false);
13369      /* If that didn't work, ignore the nested-name-specifier.  */
13370      if (!cp_parser_parse_definitely (parser))
13371	{
13372	  invalid_nested_name_p = true;
13373	  id = cp_parser_identifier (parser);
13374	  if (id == error_mark_node)
13375	    id = NULL_TREE;
13376	}
13377      /* If we could not find a corresponding TYPE, treat this
13378	 declaration like an unqualified declaration.  */
13379      if (type == error_mark_node)
13380	nested_name_specifier = NULL_TREE;
13381      /* Otherwise, count the number of templates used in TYPE and its
13382	 containing scopes.  */
13383      else
13384	{
13385	  tree scope;
13386
13387	  for (scope = TREE_TYPE (type);
13388	       scope && TREE_CODE (scope) != NAMESPACE_DECL;
13389	       scope = (TYPE_P (scope)
13390			? TYPE_CONTEXT (scope)
13391			: DECL_CONTEXT (scope)))
13392	    if (TYPE_P (scope)
13393		&& CLASS_TYPE_P (scope)
13394		&& CLASSTYPE_TEMPLATE_INFO (scope)
13395		&& PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
13396		&& !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
13397	      ++num_templates;
13398	}
13399    }
13400  /* Otherwise, the identifier is optional.  */
13401  else
13402    {
13403      /* We don't know whether what comes next is a template-id,
13404	 an identifier, or nothing at all.  */
13405      cp_parser_parse_tentatively (parser);
13406      /* Check for a template-id.  */
13407      id = cp_parser_template_id (parser,
13408				  /*template_keyword_p=*/false,
13409				  /*check_dependency_p=*/true,
13410				  /*is_declaration=*/true);
13411      /* If that didn't work, it could still be an identifier.  */
13412      if (!cp_parser_parse_definitely (parser))
13413	{
13414	  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
13415	    id = cp_parser_identifier (parser);
13416	  else
13417	    id = NULL_TREE;
13418	}
13419      else
13420	{
13421	  template_id_p = true;
13422	  ++num_templates;
13423	}
13424    }
13425
13426  pop_deferring_access_checks ();
13427
13428  if (id)
13429    cp_parser_check_for_invalid_template_id (parser, id);
13430
13431  /* If it's not a `:' or a `{' then we can't really be looking at a
13432     class-head, since a class-head only appears as part of a
13433     class-specifier.  We have to detect this situation before calling
13434     xref_tag, since that has irreversible side-effects.  */
13435  if (!cp_parser_next_token_starts_class_definition_p (parser))
13436    {
13437      cp_parser_error (parser, "expected %<{%> or %<:%>");
13438      return error_mark_node;
13439    }
13440
13441  /* At this point, we're going ahead with the class-specifier, even
13442     if some other problem occurs.  */
13443  cp_parser_commit_to_tentative_parse (parser);
13444  /* Issue the error about the overly-qualified name now.  */
13445  if (qualified_p)
13446    cp_parser_error (parser,
13447		     "global qualification of class name is invalid");
13448  else if (invalid_nested_name_p)
13449    cp_parser_error (parser,
13450		     "qualified name does not name a class");
13451  else if (nested_name_specifier)
13452    {
13453      tree scope;
13454
13455      /* Reject typedef-names in class heads.  */
13456      if (!DECL_IMPLICIT_TYPEDEF_P (type))
13457	{
13458	  error ("invalid class name in declaration of %qD", type);
13459	  type = NULL_TREE;
13460	  goto done;
13461	}
13462
13463      /* Figure out in what scope the declaration is being placed.  */
13464      scope = current_scope ();
13465      /* If that scope does not contain the scope in which the
13466	 class was originally declared, the program is invalid.  */
13467      if (scope && !is_ancestor (scope, nested_name_specifier))
13468	{
13469	  error ("declaration of %qD in %qD which does not enclose %qD",
13470		 type, scope, nested_name_specifier);
13471	  type = NULL_TREE;
13472	  goto done;
13473	}
13474      /* [dcl.meaning]
13475
13476	 A declarator-id shall not be qualified exception of the
13477	 definition of a ... nested class outside of its class
13478	 ... [or] a the definition or explicit instantiation of a
13479	 class member of a namespace outside of its namespace.  */
13480      if (scope == nested_name_specifier)
13481	{
13482	  pedwarn ("extra qualification ignored");
13483	  nested_name_specifier = NULL_TREE;
13484	  num_templates = 0;
13485	}
13486    }
13487  /* An explicit-specialization must be preceded by "template <>".  If
13488     it is not, try to recover gracefully.  */
13489  if (at_namespace_scope_p ()
13490      && parser->num_template_parameter_lists == 0
13491      && template_id_p)
13492    {
13493      error ("an explicit specialization must be preceded by %<template <>%>");
13494      invalid_explicit_specialization_p = true;
13495      /* Take the same action that would have been taken by
13496	 cp_parser_explicit_specialization.  */
13497      ++parser->num_template_parameter_lists;
13498      begin_specialization ();
13499    }
13500  /* There must be no "return" statements between this point and the
13501     end of this function; set "type "to the correct return value and
13502     use "goto done;" to return.  */
13503  /* Make sure that the right number of template parameters were
13504     present.  */
13505  if (!cp_parser_check_template_parameters (parser, num_templates))
13506    {
13507      /* If something went wrong, there is no point in even trying to
13508	 process the class-definition.  */
13509      type = NULL_TREE;
13510      goto done;
13511    }
13512
13513  /* Look up the type.  */
13514  if (template_id_p)
13515    {
13516      type = TREE_TYPE (id);
13517      type = maybe_process_partial_specialization (type);
13518      if (nested_name_specifier)
13519	pushed_scope = push_scope (nested_name_specifier);
13520    }
13521  else if (nested_name_specifier)
13522    {
13523      tree class_type;
13524
13525      /* Given:
13526
13527	    template <typename T> struct S { struct T };
13528	    template <typename T> struct S<T>::T { };
13529
13530	 we will get a TYPENAME_TYPE when processing the definition of
13531	 `S::T'.  We need to resolve it to the actual type before we
13532	 try to define it.  */
13533      if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
13534	{
13535	  class_type = resolve_typename_type (TREE_TYPE (type),
13536					      /*only_current_p=*/false);
13537	  if (class_type != error_mark_node)
13538	    type = TYPE_NAME (class_type);
13539	  else
13540	    {
13541	      cp_parser_error (parser, "could not resolve typename type");
13542	      type = error_mark_node;
13543	    }
13544	}
13545
13546      maybe_process_partial_specialization (TREE_TYPE (type));
13547      class_type = current_class_type;
13548      /* Enter the scope indicated by the nested-name-specifier.  */
13549      pushed_scope = push_scope (nested_name_specifier);
13550      /* Get the canonical version of this type.  */
13551      type = TYPE_MAIN_DECL (TREE_TYPE (type));
13552      if (PROCESSING_REAL_TEMPLATE_DECL_P ()
13553	  && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
13554	{
13555	  type = push_template_decl (type);
13556	  if (type == error_mark_node)
13557	    {
13558	      type = NULL_TREE;
13559	      goto done;
13560	    }
13561	}
13562
13563      type = TREE_TYPE (type);
13564      *nested_name_specifier_p = true;
13565    }
13566  else      /* The name is not a nested name.  */
13567    {
13568      /* If the class was unnamed, create a dummy name.  */
13569      if (!id)
13570	id = make_anon_name ();
13571      type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
13572		       parser->num_template_parameter_lists);
13573    }
13574
13575  /* Indicate whether this class was declared as a `class' or as a
13576     `struct'.  */
13577  if (TREE_CODE (type) == RECORD_TYPE)
13578    CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
13579  cp_parser_check_class_key (class_key, type);
13580
13581  /* If this type was already complete, and we see another definition,
13582     that's an error.  */
13583  if (type != error_mark_node && COMPLETE_TYPE_P (type))
13584    {
13585      error ("redefinition of %q#T", type);
13586      error ("previous definition of %q+#T", type);
13587      type = NULL_TREE;
13588      goto done;
13589    }
13590  else if (type == error_mark_node)
13591    type = NULL_TREE;
13592
13593  /* We will have entered the scope containing the class; the names of
13594     base classes should be looked up in that context.  For example:
13595
13596       struct A { struct B {}; struct C; };
13597       struct A::C : B {};
13598
13599     is valid.  */
13600  *bases = NULL_TREE;
13601
13602  /* Get the list of base-classes, if there is one.  */
13603  if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
13604    *bases = cp_parser_base_clause (parser);
13605
13606 done:
13607  /* Leave the scope given by the nested-name-specifier.  We will
13608     enter the class scope itself while processing the members.  */
13609  if (pushed_scope)
13610    pop_scope (pushed_scope);
13611
13612  if (invalid_explicit_specialization_p)
13613    {
13614      end_specialization ();
13615      --parser->num_template_parameter_lists;
13616    }
13617  *attributes_p = attributes;
13618  return type;
13619}
13620
13621/* Parse a class-key.
13622
13623   class-key:
13624     class
13625     struct
13626     union
13627
13628   Returns the kind of class-key specified, or none_type to indicate
13629   error.  */
13630
13631static enum tag_types
13632cp_parser_class_key (cp_parser* parser)
13633{
13634  cp_token *token;
13635  enum tag_types tag_type;
13636
13637  /* Look for the class-key.  */
13638  token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
13639  if (!token)
13640    return none_type;
13641
13642  /* Check to see if the TOKEN is a class-key.  */
13643  tag_type = cp_parser_token_is_class_key (token);
13644  if (!tag_type)
13645    cp_parser_error (parser, "expected class-key");
13646  return tag_type;
13647}
13648
13649/* Parse an (optional) member-specification.
13650
13651   member-specification:
13652     member-declaration member-specification [opt]
13653     access-specifier : member-specification [opt]  */
13654
13655static void
13656cp_parser_member_specification_opt (cp_parser* parser)
13657{
13658  while (true)
13659    {
13660      cp_token *token;
13661      enum rid keyword;
13662
13663      /* Peek at the next token.  */
13664      token = cp_lexer_peek_token (parser->lexer);
13665      /* If it's a `}', or EOF then we've seen all the members.  */
13666      if (token->type == CPP_CLOSE_BRACE
13667	  || token->type == CPP_EOF
13668	  || token->type == CPP_PRAGMA_EOL)
13669	break;
13670
13671      /* See if this token is a keyword.  */
13672      keyword = token->keyword;
13673      switch (keyword)
13674	{
13675	case RID_PUBLIC:
13676	case RID_PROTECTED:
13677	case RID_PRIVATE:
13678	  /* Consume the access-specifier.  */
13679	  cp_lexer_consume_token (parser->lexer);
13680	  /* Remember which access-specifier is active.  */
13681	  current_access_specifier = token->u.value;
13682	  /* Look for the `:'.  */
13683	  cp_parser_require (parser, CPP_COLON, "`:'");
13684	  break;
13685
13686	default:
13687	  /* Accept #pragmas at class scope.  */
13688	  if (token->type == CPP_PRAGMA)
13689	    {
13690	      cp_parser_pragma (parser, pragma_external);
13691	      break;
13692	    }
13693
13694	  /* Otherwise, the next construction must be a
13695	     member-declaration.  */
13696	  cp_parser_member_declaration (parser);
13697	}
13698    }
13699}
13700
13701/* Parse a member-declaration.
13702
13703   member-declaration:
13704     decl-specifier-seq [opt] member-declarator-list [opt] ;
13705     function-definition ; [opt]
13706     :: [opt] nested-name-specifier template [opt] unqualified-id ;
13707     using-declaration
13708     template-declaration
13709
13710   member-declarator-list:
13711     member-declarator
13712     member-declarator-list , member-declarator
13713
13714   member-declarator:
13715     declarator pure-specifier [opt]
13716     declarator constant-initializer [opt]
13717     identifier [opt] : constant-expression
13718
13719   GNU Extensions:
13720
13721   member-declaration:
13722     __extension__ member-declaration
13723
13724   member-declarator:
13725     declarator attributes [opt] pure-specifier [opt]
13726     declarator attributes [opt] constant-initializer [opt]
13727     identifier [opt] attributes [opt] : constant-expression  */
13728
13729static void
13730cp_parser_member_declaration (cp_parser* parser)
13731{
13732  cp_decl_specifier_seq decl_specifiers;
13733  tree prefix_attributes;
13734  tree decl;
13735  int declares_class_or_enum;
13736  bool friend_p;
13737  cp_token *token;
13738  int saved_pedantic;
13739
13740  /* Check for the `__extension__' keyword.  */
13741  if (cp_parser_extension_opt (parser, &saved_pedantic))
13742    {
13743      /* Recurse.  */
13744      cp_parser_member_declaration (parser);
13745      /* Restore the old value of the PEDANTIC flag.  */
13746      pedantic = saved_pedantic;
13747
13748      return;
13749    }
13750
13751  /* Check for a template-declaration.  */
13752  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
13753    {
13754      /* An explicit specialization here is an error condition, and we
13755	 expect the specialization handler to detect and report this.  */
13756      if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
13757	  && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
13758	cp_parser_explicit_specialization (parser);
13759      else
13760	cp_parser_template_declaration (parser, /*member_p=*/true);
13761
13762      return;
13763    }
13764
13765  /* Check for a using-declaration.  */
13766  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
13767    {
13768      /* Parse the using-declaration.  */
13769      cp_parser_using_declaration (parser,
13770				   /*access_declaration_p=*/false);
13771      return;
13772    }
13773
13774  /* Check for @defs.  */
13775  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
13776    {
13777      tree ivar, member;
13778      tree ivar_chains = cp_parser_objc_defs_expression (parser);
13779      ivar = ivar_chains;
13780      while (ivar)
13781	{
13782	  member = ivar;
13783	  ivar = TREE_CHAIN (member);
13784	  TREE_CHAIN (member) = NULL_TREE;
13785	  finish_member_declaration (member);
13786	}
13787      return;
13788    }
13789
13790  if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
13791    return;
13792
13793  /* Parse the decl-specifier-seq.  */
13794  cp_parser_decl_specifier_seq (parser,
13795				CP_PARSER_FLAGS_OPTIONAL,
13796				&decl_specifiers,
13797				&declares_class_or_enum);
13798  prefix_attributes = decl_specifiers.attributes;
13799  decl_specifiers.attributes = NULL_TREE;
13800  /* Check for an invalid type-name.  */
13801  if (!decl_specifiers.type
13802      && cp_parser_parse_and_diagnose_invalid_type_name (parser))
13803    return;
13804  /* If there is no declarator, then the decl-specifier-seq should
13805     specify a type.  */
13806  if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
13807    {
13808      /* If there was no decl-specifier-seq, and the next token is a
13809	 `;', then we have something like:
13810
13811	   struct S { ; };
13812
13813	 [class.mem]
13814
13815	 Each member-declaration shall declare at least one member
13816	 name of the class.  */
13817      if (!decl_specifiers.any_specifiers_p)
13818	{
13819	  cp_token *token = cp_lexer_peek_token (parser->lexer);
13820	  if (pedantic && !token->in_system_header)
13821	    pedwarn ("%Hextra %<;%>", &token->location);
13822	}
13823      else
13824	{
13825	  tree type;
13826
13827	  /* See if this declaration is a friend.  */
13828	  friend_p = cp_parser_friend_p (&decl_specifiers);
13829	  /* If there were decl-specifiers, check to see if there was
13830	     a class-declaration.  */
13831	  type = check_tag_decl (&decl_specifiers);
13832	  /* Nested classes have already been added to the class, but
13833	     a `friend' needs to be explicitly registered.  */
13834	  if (friend_p)
13835	    {
13836	      /* If the `friend' keyword was present, the friend must
13837		 be introduced with a class-key.  */
13838	       if (!declares_class_or_enum)
13839		 error ("a class-key must be used when declaring a friend");
13840	       /* In this case:
13841
13842		    template <typename T> struct A {
13843		      friend struct A<T>::B;
13844		    };
13845
13846		  A<T>::B will be represented by a TYPENAME_TYPE, and
13847		  therefore not recognized by check_tag_decl.  */
13848	       if (!type
13849		   && decl_specifiers.type
13850		   && TYPE_P (decl_specifiers.type))
13851		 type = decl_specifiers.type;
13852	       if (!type || !TYPE_P (type))
13853		 error ("friend declaration does not name a class or "
13854			"function");
13855	       else
13856		 make_friend_class (current_class_type, type,
13857				    /*complain=*/true);
13858	    }
13859	  /* If there is no TYPE, an error message will already have
13860	     been issued.  */
13861	  else if (!type || type == error_mark_node)
13862	    ;
13863	  /* An anonymous aggregate has to be handled specially; such
13864	     a declaration really declares a data member (with a
13865	     particular type), as opposed to a nested class.  */
13866	  else if (ANON_AGGR_TYPE_P (type))
13867	    {
13868	      /* Remove constructors and such from TYPE, now that we
13869		 know it is an anonymous aggregate.  */
13870	      fixup_anonymous_aggr (type);
13871	      /* And make the corresponding data member.  */
13872	      decl = build_decl (FIELD_DECL, NULL_TREE, type);
13873	      /* Add it to the class.  */
13874	      finish_member_declaration (decl);
13875	    }
13876	  else
13877	    cp_parser_check_access_in_redeclaration (TYPE_NAME (type));
13878	}
13879    }
13880  else
13881    {
13882      /* See if these declarations will be friends.  */
13883      friend_p = cp_parser_friend_p (&decl_specifiers);
13884
13885      /* Keep going until we hit the `;' at the end of the
13886	 declaration.  */
13887      while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
13888	{
13889	  tree attributes = NULL_TREE;
13890	  tree first_attribute;
13891
13892	  /* Peek at the next token.  */
13893	  token = cp_lexer_peek_token (parser->lexer);
13894
13895	  /* Check for a bitfield declaration.  */
13896	  if (token->type == CPP_COLON
13897	      || (token->type == CPP_NAME
13898		  && cp_lexer_peek_nth_token (parser->lexer, 2)->type
13899		  == CPP_COLON))
13900	    {
13901	      tree identifier;
13902	      tree width;
13903
13904	      /* Get the name of the bitfield.  Note that we cannot just
13905		 check TOKEN here because it may have been invalidated by
13906		 the call to cp_lexer_peek_nth_token above.  */
13907	      if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
13908		identifier = cp_parser_identifier (parser);
13909	      else
13910		identifier = NULL_TREE;
13911
13912	      /* Consume the `:' token.  */
13913	      cp_lexer_consume_token (parser->lexer);
13914	      /* Get the width of the bitfield.  */
13915	      width
13916		= cp_parser_constant_expression (parser,
13917						 /*allow_non_constant=*/false,
13918						 NULL);
13919
13920	      /* Look for attributes that apply to the bitfield.  */
13921	      attributes = cp_parser_attributes_opt (parser);
13922	      /* Remember which attributes are prefix attributes and
13923		 which are not.  */
13924	      first_attribute = attributes;
13925	      /* Combine the attributes.  */
13926	      attributes = chainon (prefix_attributes, attributes);
13927
13928	      /* Create the bitfield declaration.  */
13929	      decl = grokbitfield (identifier
13930				   ? make_id_declarator (NULL_TREE,
13931							 identifier,
13932							 sfk_none)
13933				   : NULL,
13934				   &decl_specifiers,
13935				   width);
13936	      /* Apply the attributes.  */
13937	      cplus_decl_attributes (&decl, attributes, /*flags=*/0);
13938	    }
13939	  else
13940	    {
13941	      cp_declarator *declarator;
13942	      tree initializer;
13943	      tree asm_specification;
13944	      int ctor_dtor_or_conv_p;
13945
13946	      /* Parse the declarator.  */
13947	      declarator
13948		= cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
13949					&ctor_dtor_or_conv_p,
13950					/*parenthesized_p=*/NULL,
13951					/*member_p=*/true);
13952
13953	      /* If something went wrong parsing the declarator, make sure
13954		 that we at least consume some tokens.  */
13955	      if (declarator == cp_error_declarator)
13956		{
13957		  /* Skip to the end of the statement.  */
13958		  cp_parser_skip_to_end_of_statement (parser);
13959		  /* If the next token is not a semicolon, that is
13960		     probably because we just skipped over the body of
13961		     a function.  So, we consume a semicolon if
13962		     present, but do not issue an error message if it
13963		     is not present.  */
13964		  if (cp_lexer_next_token_is (parser->lexer,
13965					      CPP_SEMICOLON))
13966		    cp_lexer_consume_token (parser->lexer);
13967		  return;
13968		}
13969
13970	      if (declares_class_or_enum & 2)
13971		cp_parser_check_for_definition_in_return_type
13972		  (declarator, decl_specifiers.type);
13973
13974	      /* Look for an asm-specification.  */
13975	      asm_specification = cp_parser_asm_specification_opt (parser);
13976	      /* Look for attributes that apply to the declaration.  */
13977	      attributes = cp_parser_attributes_opt (parser);
13978	      /* Remember which attributes are prefix attributes and
13979		 which are not.  */
13980	      first_attribute = attributes;
13981	      /* Combine the attributes.  */
13982	      attributes = chainon (prefix_attributes, attributes);
13983
13984	      /* If it's an `=', then we have a constant-initializer or a
13985		 pure-specifier.  It is not correct to parse the
13986		 initializer before registering the member declaration
13987		 since the member declaration should be in scope while
13988		 its initializer is processed.  However, the rest of the
13989		 front end does not yet provide an interface that allows
13990		 us to handle this correctly.  */
13991	      if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
13992		{
13993		  /* In [class.mem]:
13994
13995		     A pure-specifier shall be used only in the declaration of
13996		     a virtual function.
13997
13998		     A member-declarator can contain a constant-initializer
13999		     only if it declares a static member of integral or
14000		     enumeration type.
14001
14002		     Therefore, if the DECLARATOR is for a function, we look
14003		     for a pure-specifier; otherwise, we look for a
14004		     constant-initializer.  When we call `grokfield', it will
14005		     perform more stringent semantics checks.  */
14006		  if (function_declarator_p (declarator))
14007		    initializer = cp_parser_pure_specifier (parser);
14008		  else
14009		    /* Parse the initializer.  */
14010		    initializer = cp_parser_constant_initializer (parser);
14011		}
14012	      /* Otherwise, there is no initializer.  */
14013	      else
14014		initializer = NULL_TREE;
14015
14016	      /* See if we are probably looking at a function
14017		 definition.  We are certainly not looking at a
14018		 member-declarator.  Calling `grokfield' has
14019		 side-effects, so we must not do it unless we are sure
14020		 that we are looking at a member-declarator.  */
14021	      if (cp_parser_token_starts_function_definition_p
14022		  (cp_lexer_peek_token (parser->lexer)))
14023		{
14024		  /* The grammar does not allow a pure-specifier to be
14025		     used when a member function is defined.  (It is
14026		     possible that this fact is an oversight in the
14027		     standard, since a pure function may be defined
14028		     outside of the class-specifier.  */
14029		  if (initializer)
14030		    error ("pure-specifier on function-definition");
14031		  decl = cp_parser_save_member_function_body (parser,
14032							      &decl_specifiers,
14033							      declarator,
14034							      attributes);
14035		  /* If the member was not a friend, declare it here.  */
14036		  if (!friend_p)
14037		    finish_member_declaration (decl);
14038		  /* Peek at the next token.  */
14039		  token = cp_lexer_peek_token (parser->lexer);
14040		  /* If the next token is a semicolon, consume it.  */
14041		  if (token->type == CPP_SEMICOLON)
14042		    cp_lexer_consume_token (parser->lexer);
14043		  return;
14044		}
14045	      else
14046		/* Create the declaration.  */
14047		decl = grokfield (declarator, &decl_specifiers,
14048				  initializer, /*init_const_expr_p=*/true,
14049				  asm_specification,
14050				  attributes);
14051	    }
14052
14053	  /* Reset PREFIX_ATTRIBUTES.  */
14054	  while (attributes && TREE_CHAIN (attributes) != first_attribute)
14055	    attributes = TREE_CHAIN (attributes);
14056	  if (attributes)
14057	    TREE_CHAIN (attributes) = NULL_TREE;
14058
14059	  /* If there is any qualification still in effect, clear it
14060	     now; we will be starting fresh with the next declarator.  */
14061	  parser->scope = NULL_TREE;
14062	  parser->qualifying_scope = NULL_TREE;
14063	  parser->object_scope = NULL_TREE;
14064	  /* If it's a `,', then there are more declarators.  */
14065	  if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
14066	    cp_lexer_consume_token (parser->lexer);
14067	  /* If the next token isn't a `;', then we have a parse error.  */
14068	  else if (cp_lexer_next_token_is_not (parser->lexer,
14069					       CPP_SEMICOLON))
14070	    {
14071	      cp_parser_error (parser, "expected %<;%>");
14072	      /* Skip tokens until we find a `;'.  */
14073	      cp_parser_skip_to_end_of_statement (parser);
14074
14075	      break;
14076	    }
14077
14078	  if (decl)
14079	    {
14080	      /* Add DECL to the list of members.  */
14081	      if (!friend_p)
14082		finish_member_declaration (decl);
14083
14084	      if (TREE_CODE (decl) == FUNCTION_DECL)
14085		cp_parser_save_default_args (parser, decl);
14086	    }
14087	}
14088    }
14089
14090  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
14091}
14092
14093/* Parse a pure-specifier.
14094
14095   pure-specifier:
14096     = 0
14097
14098   Returns INTEGER_ZERO_NODE if a pure specifier is found.
14099   Otherwise, ERROR_MARK_NODE is returned.  */
14100
14101static tree
14102cp_parser_pure_specifier (cp_parser* parser)
14103{
14104  cp_token *token;
14105
14106  /* Look for the `=' token.  */
14107  if (!cp_parser_require (parser, CPP_EQ, "`='"))
14108    return error_mark_node;
14109  /* Look for the `0' token.  */
14110  token = cp_lexer_consume_token (parser->lexer);
14111  /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
14112  if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
14113    {
14114      cp_parser_error (parser,
14115		       "invalid pure specifier (only `= 0' is allowed)");
14116      cp_parser_skip_to_end_of_statement (parser);
14117      return error_mark_node;
14118    }
14119  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
14120    {
14121      error ("templates may not be %<virtual%>");
14122      return error_mark_node;
14123    }
14124
14125  return integer_zero_node;
14126}
14127
14128/* Parse a constant-initializer.
14129
14130   constant-initializer:
14131     = constant-expression
14132
14133   Returns a representation of the constant-expression.  */
14134
14135static tree
14136cp_parser_constant_initializer (cp_parser* parser)
14137{
14138  /* Look for the `=' token.  */
14139  if (!cp_parser_require (parser, CPP_EQ, "`='"))
14140    return error_mark_node;
14141
14142  /* It is invalid to write:
14143
14144       struct S { static const int i = { 7 }; };
14145
14146     */
14147  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
14148    {
14149      cp_parser_error (parser,
14150		       "a brace-enclosed initializer is not allowed here");
14151      /* Consume the opening brace.  */
14152      cp_lexer_consume_token (parser->lexer);
14153      /* Skip the initializer.  */
14154      cp_parser_skip_to_closing_brace (parser);
14155      /* Look for the trailing `}'.  */
14156      cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
14157
14158      return error_mark_node;
14159    }
14160
14161  return cp_parser_constant_expression (parser,
14162					/*allow_non_constant=*/false,
14163					NULL);
14164}
14165
14166/* Derived classes [gram.class.derived] */
14167
14168/* Parse a base-clause.
14169
14170   base-clause:
14171     : base-specifier-list
14172
14173   base-specifier-list:
14174     base-specifier
14175     base-specifier-list , base-specifier
14176
14177   Returns a TREE_LIST representing the base-classes, in the order in
14178   which they were declared.  The representation of each node is as
14179   described by cp_parser_base_specifier.
14180
14181   In the case that no bases are specified, this function will return
14182   NULL_TREE, not ERROR_MARK_NODE.  */
14183
14184static tree
14185cp_parser_base_clause (cp_parser* parser)
14186{
14187  tree bases = NULL_TREE;
14188
14189  /* Look for the `:' that begins the list.  */
14190  cp_parser_require (parser, CPP_COLON, "`:'");
14191
14192  /* Scan the base-specifier-list.  */
14193  while (true)
14194    {
14195      cp_token *token;
14196      tree base;
14197
14198      /* Look for the base-specifier.  */
14199      base = cp_parser_base_specifier (parser);
14200      /* Add BASE to the front of the list.  */
14201      if (base != error_mark_node)
14202	{
14203	  TREE_CHAIN (base) = bases;
14204	  bases = base;
14205	}
14206      /* Peek at the next token.  */
14207      token = cp_lexer_peek_token (parser->lexer);
14208      /* If it's not a comma, then the list is complete.  */
14209      if (token->type != CPP_COMMA)
14210	break;
14211      /* Consume the `,'.  */
14212      cp_lexer_consume_token (parser->lexer);
14213    }
14214
14215  /* PARSER->SCOPE may still be non-NULL at this point, if the last
14216     base class had a qualified name.  However, the next name that
14217     appears is certainly not qualified.  */
14218  parser->scope = NULL_TREE;
14219  parser->qualifying_scope = NULL_TREE;
14220  parser->object_scope = NULL_TREE;
14221
14222  return nreverse (bases);
14223}
14224
14225/* Parse a base-specifier.
14226
14227   base-specifier:
14228     :: [opt] nested-name-specifier [opt] class-name
14229     virtual access-specifier [opt] :: [opt] nested-name-specifier
14230       [opt] class-name
14231     access-specifier virtual [opt] :: [opt] nested-name-specifier
14232       [opt] class-name
14233
14234   Returns a TREE_LIST.  The TREE_PURPOSE will be one of
14235   ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
14236   indicate the specifiers provided.  The TREE_VALUE will be a TYPE
14237   (or the ERROR_MARK_NODE) indicating the type that was specified.  */
14238
14239static tree
14240cp_parser_base_specifier (cp_parser* parser)
14241{
14242  cp_token *token;
14243  bool done = false;
14244  bool virtual_p = false;
14245  bool duplicate_virtual_error_issued_p = false;
14246  bool duplicate_access_error_issued_p = false;
14247  bool class_scope_p, template_p;
14248  tree access = access_default_node;
14249  tree type;
14250
14251  /* Process the optional `virtual' and `access-specifier'.  */
14252  while (!done)
14253    {
14254      /* Peek at the next token.  */
14255      token = cp_lexer_peek_token (parser->lexer);
14256      /* Process `virtual'.  */
14257      switch (token->keyword)
14258	{
14259	case RID_VIRTUAL:
14260	  /* If `virtual' appears more than once, issue an error.  */
14261	  if (virtual_p && !duplicate_virtual_error_issued_p)
14262	    {
14263	      cp_parser_error (parser,
14264			       "%<virtual%> specified more than once in base-specified");
14265	      duplicate_virtual_error_issued_p = true;
14266	    }
14267
14268	  virtual_p = true;
14269
14270	  /* Consume the `virtual' token.  */
14271	  cp_lexer_consume_token (parser->lexer);
14272
14273	  break;
14274
14275	case RID_PUBLIC:
14276	case RID_PROTECTED:
14277	case RID_PRIVATE:
14278	  /* If more than one access specifier appears, issue an
14279	     error.  */
14280	  if (access != access_default_node
14281	      && !duplicate_access_error_issued_p)
14282	    {
14283	      cp_parser_error (parser,
14284			       "more than one access specifier in base-specified");
14285	      duplicate_access_error_issued_p = true;
14286	    }
14287
14288	  access = ridpointers[(int) token->keyword];
14289
14290	  /* Consume the access-specifier.  */
14291	  cp_lexer_consume_token (parser->lexer);
14292
14293	  break;
14294
14295	default:
14296	  done = true;
14297	  break;
14298	}
14299    }
14300  /* It is not uncommon to see programs mechanically, erroneously, use
14301     the 'typename' keyword to denote (dependent) qualified types
14302     as base classes.  */
14303  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
14304    {
14305      if (!processing_template_decl)
14306	error ("keyword %<typename%> not allowed outside of templates");
14307      else
14308	error ("keyword %<typename%> not allowed in this context "
14309	       "(the base class is implicitly a type)");
14310      cp_lexer_consume_token (parser->lexer);
14311    }
14312
14313  /* Look for the optional `::' operator.  */
14314  cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
14315  /* Look for the nested-name-specifier.  The simplest way to
14316     implement:
14317
14318       [temp.res]
14319
14320       The keyword `typename' is not permitted in a base-specifier or
14321       mem-initializer; in these contexts a qualified name that
14322       depends on a template-parameter is implicitly assumed to be a
14323       type name.
14324
14325     is to pretend that we have seen the `typename' keyword at this
14326     point.  */
14327  cp_parser_nested_name_specifier_opt (parser,
14328				       /*typename_keyword_p=*/true,
14329				       /*check_dependency_p=*/true,
14330				       typename_type,
14331				       /*is_declaration=*/true);
14332  /* If the base class is given by a qualified name, assume that names
14333     we see are type names or templates, as appropriate.  */
14334  class_scope_p = (parser->scope && TYPE_P (parser->scope));
14335  template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
14336
14337  /* Finally, look for the class-name.  */
14338  type = cp_parser_class_name (parser,
14339			       class_scope_p,
14340			       template_p,
14341			       typename_type,
14342			       /*check_dependency_p=*/true,
14343			       /*class_head_p=*/false,
14344			       /*is_declaration=*/true);
14345
14346  if (type == error_mark_node)
14347    return error_mark_node;
14348
14349  return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
14350}
14351
14352/* Exception handling [gram.exception] */
14353
14354/* Parse an (optional) exception-specification.
14355
14356   exception-specification:
14357     throw ( type-id-list [opt] )
14358
14359   Returns a TREE_LIST representing the exception-specification.  The
14360   TREE_VALUE of each node is a type.  */
14361
14362static tree
14363cp_parser_exception_specification_opt (cp_parser* parser)
14364{
14365  cp_token *token;
14366  tree type_id_list;
14367
14368  /* Peek at the next token.  */
14369  token = cp_lexer_peek_token (parser->lexer);
14370  /* If it's not `throw', then there's no exception-specification.  */
14371  if (!cp_parser_is_keyword (token, RID_THROW))
14372    return NULL_TREE;
14373
14374  /* Consume the `throw'.  */
14375  cp_lexer_consume_token (parser->lexer);
14376
14377  /* Look for the `('.  */
14378  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14379
14380  /* Peek at the next token.  */
14381  token = cp_lexer_peek_token (parser->lexer);
14382  /* If it's not a `)', then there is a type-id-list.  */
14383  if (token->type != CPP_CLOSE_PAREN)
14384    {
14385      const char *saved_message;
14386
14387      /* Types may not be defined in an exception-specification.  */
14388      saved_message = parser->type_definition_forbidden_message;
14389      parser->type_definition_forbidden_message
14390	= "types may not be defined in an exception-specification";
14391      /* Parse the type-id-list.  */
14392      type_id_list = cp_parser_type_id_list (parser);
14393      /* Restore the saved message.  */
14394      parser->type_definition_forbidden_message = saved_message;
14395    }
14396  else
14397    type_id_list = empty_except_spec;
14398
14399  /* Look for the `)'.  */
14400  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14401
14402  return type_id_list;
14403}
14404
14405/* Parse an (optional) type-id-list.
14406
14407   type-id-list:
14408     type-id
14409     type-id-list , type-id
14410
14411   Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
14412   in the order that the types were presented.  */
14413
14414static tree
14415cp_parser_type_id_list (cp_parser* parser)
14416{
14417  tree types = NULL_TREE;
14418
14419  while (true)
14420    {
14421      cp_token *token;
14422      tree type;
14423
14424      /* Get the next type-id.  */
14425      type = cp_parser_type_id (parser);
14426      /* Add it to the list.  */
14427      types = add_exception_specifier (types, type, /*complain=*/1);
14428      /* Peek at the next token.  */
14429      token = cp_lexer_peek_token (parser->lexer);
14430      /* If it is not a `,', we are done.  */
14431      if (token->type != CPP_COMMA)
14432	break;
14433      /* Consume the `,'.  */
14434      cp_lexer_consume_token (parser->lexer);
14435    }
14436
14437  return nreverse (types);
14438}
14439
14440/* Parse a try-block.
14441
14442   try-block:
14443     try compound-statement handler-seq  */
14444
14445static tree
14446cp_parser_try_block (cp_parser* parser)
14447{
14448  tree try_block;
14449
14450  cp_parser_require_keyword (parser, RID_TRY, "`try'");
14451  try_block = begin_try_block ();
14452  cp_parser_compound_statement (parser, NULL, true);
14453  finish_try_block (try_block);
14454  cp_parser_handler_seq (parser);
14455  finish_handler_sequence (try_block);
14456
14457  return try_block;
14458}
14459
14460/* Parse a function-try-block.
14461
14462   function-try-block:
14463     try ctor-initializer [opt] function-body handler-seq  */
14464
14465static bool
14466cp_parser_function_try_block (cp_parser* parser)
14467{
14468  tree compound_stmt;
14469  tree try_block;
14470  bool ctor_initializer_p;
14471
14472  /* Look for the `try' keyword.  */
14473  if (!cp_parser_require_keyword (parser, RID_TRY, "`try'"))
14474    return false;
14475  /* Let the rest of the front-end know where we are.  */
14476  try_block = begin_function_try_block (&compound_stmt);
14477  /* Parse the function-body.  */
14478  ctor_initializer_p
14479    = cp_parser_ctor_initializer_opt_and_function_body (parser);
14480  /* We're done with the `try' part.  */
14481  finish_function_try_block (try_block);
14482  /* Parse the handlers.  */
14483  cp_parser_handler_seq (parser);
14484  /* We're done with the handlers.  */
14485  finish_function_handler_sequence (try_block, compound_stmt);
14486
14487  return ctor_initializer_p;
14488}
14489
14490/* Parse a handler-seq.
14491
14492   handler-seq:
14493     handler handler-seq [opt]  */
14494
14495static void
14496cp_parser_handler_seq (cp_parser* parser)
14497{
14498  while (true)
14499    {
14500      cp_token *token;
14501
14502      /* Parse the handler.  */
14503      cp_parser_handler (parser);
14504      /* Peek at the next token.  */
14505      token = cp_lexer_peek_token (parser->lexer);
14506      /* If it's not `catch' then there are no more handlers.  */
14507      if (!cp_parser_is_keyword (token, RID_CATCH))
14508	break;
14509    }
14510}
14511
14512/* Parse a handler.
14513
14514   handler:
14515     catch ( exception-declaration ) compound-statement  */
14516
14517static void
14518cp_parser_handler (cp_parser* parser)
14519{
14520  tree handler;
14521  tree declaration;
14522
14523  cp_parser_require_keyword (parser, RID_CATCH, "`catch'");
14524  handler = begin_handler ();
14525  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14526  declaration = cp_parser_exception_declaration (parser);
14527  finish_handler_parms (declaration, handler);
14528  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14529  cp_parser_compound_statement (parser, NULL, false);
14530  finish_handler (handler);
14531}
14532
14533/* Parse an exception-declaration.
14534
14535   exception-declaration:
14536     type-specifier-seq declarator
14537     type-specifier-seq abstract-declarator
14538     type-specifier-seq
14539     ...
14540
14541   Returns a VAR_DECL for the declaration, or NULL_TREE if the
14542   ellipsis variant is used.  */
14543
14544static tree
14545cp_parser_exception_declaration (cp_parser* parser)
14546{
14547  cp_decl_specifier_seq type_specifiers;
14548  cp_declarator *declarator;
14549  const char *saved_message;
14550
14551  /* If it's an ellipsis, it's easy to handle.  */
14552  if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
14553    {
14554      /* Consume the `...' token.  */
14555      cp_lexer_consume_token (parser->lexer);
14556      return NULL_TREE;
14557    }
14558
14559  /* Types may not be defined in exception-declarations.  */
14560  saved_message = parser->type_definition_forbidden_message;
14561  parser->type_definition_forbidden_message
14562    = "types may not be defined in exception-declarations";
14563
14564  /* Parse the type-specifier-seq.  */
14565  cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
14566				&type_specifiers);
14567  /* If it's a `)', then there is no declarator.  */
14568  if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
14569    declarator = NULL;
14570  else
14571    declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
14572				       /*ctor_dtor_or_conv_p=*/NULL,
14573				       /*parenthesized_p=*/NULL,
14574				       /*member_p=*/false);
14575
14576  /* Restore the saved message.  */
14577  parser->type_definition_forbidden_message = saved_message;
14578
14579  if (!type_specifiers.any_specifiers_p)
14580    return error_mark_node;
14581
14582  return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
14583}
14584
14585/* Parse a throw-expression.
14586
14587   throw-expression:
14588     throw assignment-expression [opt]
14589
14590   Returns a THROW_EXPR representing the throw-expression.  */
14591
14592static tree
14593cp_parser_throw_expression (cp_parser* parser)
14594{
14595  tree expression;
14596  cp_token* token;
14597
14598  cp_parser_require_keyword (parser, RID_THROW, "`throw'");
14599  token = cp_lexer_peek_token (parser->lexer);
14600  /* Figure out whether or not there is an assignment-expression
14601     following the "throw" keyword.  */
14602  if (token->type == CPP_COMMA
14603      || token->type == CPP_SEMICOLON
14604      || token->type == CPP_CLOSE_PAREN
14605      || token->type == CPP_CLOSE_SQUARE
14606      || token->type == CPP_CLOSE_BRACE
14607      || token->type == CPP_COLON)
14608    expression = NULL_TREE;
14609  else
14610    expression = cp_parser_assignment_expression (parser,
14611						  /*cast_p=*/false);
14612
14613  return build_throw (expression);
14614}
14615
14616/* GNU Extensions */
14617
14618/* Parse an (optional) asm-specification.
14619
14620   asm-specification:
14621     asm ( string-literal )
14622
14623   If the asm-specification is present, returns a STRING_CST
14624   corresponding to the string-literal.  Otherwise, returns
14625   NULL_TREE.  */
14626
14627static tree
14628cp_parser_asm_specification_opt (cp_parser* parser)
14629{
14630  cp_token *token;
14631  tree asm_specification;
14632
14633  /* Peek at the next token.  */
14634  token = cp_lexer_peek_token (parser->lexer);
14635  /* If the next token isn't the `asm' keyword, then there's no
14636     asm-specification.  */
14637  if (!cp_parser_is_keyword (token, RID_ASM))
14638    return NULL_TREE;
14639
14640  /* Consume the `asm' token.  */
14641  cp_lexer_consume_token (parser->lexer);
14642  /* Look for the `('.  */
14643  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14644
14645  /* Look for the string-literal.  */
14646  asm_specification = cp_parser_string_literal (parser, false, false);
14647
14648  /* Look for the `)'.  */
14649  cp_parser_require (parser, CPP_CLOSE_PAREN, "`('");
14650
14651  return asm_specification;
14652}
14653
14654/* Parse an asm-operand-list.
14655
14656   asm-operand-list:
14657     asm-operand
14658     asm-operand-list , asm-operand
14659
14660   asm-operand:
14661     string-literal ( expression )
14662     [ string-literal ] string-literal ( expression )
14663
14664   Returns a TREE_LIST representing the operands.  The TREE_VALUE of
14665   each node is the expression.  The TREE_PURPOSE is itself a
14666   TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
14667   string-literal (or NULL_TREE if not present) and whose TREE_VALUE
14668   is a STRING_CST for the string literal before the parenthesis.  */
14669
14670static tree
14671cp_parser_asm_operand_list (cp_parser* parser)
14672{
14673  tree asm_operands = NULL_TREE;
14674
14675  while (true)
14676    {
14677      tree string_literal;
14678      tree expression;
14679      tree name;
14680
14681      if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
14682	{
14683	  /* Consume the `[' token.  */
14684	  cp_lexer_consume_token (parser->lexer);
14685	  /* Read the operand name.  */
14686	  name = cp_parser_identifier (parser);
14687	  if (name != error_mark_node)
14688	    name = build_string (IDENTIFIER_LENGTH (name),
14689				 IDENTIFIER_POINTER (name));
14690	  /* Look for the closing `]'.  */
14691	  cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
14692	}
14693      else
14694	name = NULL_TREE;
14695      /* Look for the string-literal.  */
14696      string_literal = cp_parser_string_literal (parser, false, false);
14697
14698      /* Look for the `('.  */
14699      cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14700      /* Parse the expression.  */
14701      expression = cp_parser_expression (parser, /*cast_p=*/false);
14702      /* Look for the `)'.  */
14703      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14704
14705      /* Add this operand to the list.  */
14706      asm_operands = tree_cons (build_tree_list (name, string_literal),
14707				expression,
14708				asm_operands);
14709      /* If the next token is not a `,', there are no more
14710	 operands.  */
14711      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14712	break;
14713      /* Consume the `,'.  */
14714      cp_lexer_consume_token (parser->lexer);
14715    }
14716
14717  return nreverse (asm_operands);
14718}
14719
14720/* Parse an asm-clobber-list.
14721
14722   asm-clobber-list:
14723     string-literal
14724     asm-clobber-list , string-literal
14725
14726   Returns a TREE_LIST, indicating the clobbers in the order that they
14727   appeared.  The TREE_VALUE of each node is a STRING_CST.  */
14728
14729static tree
14730cp_parser_asm_clobber_list (cp_parser* parser)
14731{
14732  tree clobbers = NULL_TREE;
14733
14734  while (true)
14735    {
14736      tree string_literal;
14737
14738      /* Look for the string literal.  */
14739      string_literal = cp_parser_string_literal (parser, false, false);
14740      /* Add it to the list.  */
14741      clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
14742      /* If the next token is not a `,', then the list is
14743	 complete.  */
14744      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14745	break;
14746      /* Consume the `,' token.  */
14747      cp_lexer_consume_token (parser->lexer);
14748    }
14749
14750  return clobbers;
14751}
14752
14753/* Parse an (optional) series of attributes.
14754
14755   attributes:
14756     attributes attribute
14757
14758   attribute:
14759     __attribute__ (( attribute-list [opt] ))
14760
14761   The return value is as for cp_parser_attribute_list.  */
14762
14763static tree
14764cp_parser_attributes_opt (cp_parser* parser)
14765{
14766  tree attributes = NULL_TREE;
14767
14768  while (true)
14769    {
14770      cp_token *token;
14771      tree attribute_list;
14772
14773      /* Peek at the next token.  */
14774      token = cp_lexer_peek_token (parser->lexer);
14775      /* If it's not `__attribute__', then we're done.  */
14776      if (token->keyword != RID_ATTRIBUTE)
14777	break;
14778
14779      /* Consume the `__attribute__' keyword.  */
14780      cp_lexer_consume_token (parser->lexer);
14781      /* Look for the two `(' tokens.  */
14782      cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14783      cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14784
14785      /* Peek at the next token.  */
14786      token = cp_lexer_peek_token (parser->lexer);
14787      if (token->type != CPP_CLOSE_PAREN)
14788	/* Parse the attribute-list.  */
14789	attribute_list = cp_parser_attribute_list (parser);
14790      else
14791	/* If the next token is a `)', then there is no attribute
14792	   list.  */
14793	attribute_list = NULL;
14794
14795      /* Look for the two `)' tokens.  */
14796      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14797      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14798
14799      /* Add these new attributes to the list.  */
14800      attributes = chainon (attributes, attribute_list);
14801    }
14802
14803  return attributes;
14804}
14805
14806/* Parse an attribute-list.
14807
14808   attribute-list:
14809     attribute
14810     attribute-list , attribute
14811
14812   attribute:
14813     identifier
14814     identifier ( identifier )
14815     identifier ( identifier , expression-list )
14816     identifier ( expression-list )
14817
14818   Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
14819   to an attribute.  The TREE_PURPOSE of each node is the identifier
14820   indicating which attribute is in use.  The TREE_VALUE represents
14821   the arguments, if any.  */
14822
14823static tree
14824cp_parser_attribute_list (cp_parser* parser)
14825{
14826  tree attribute_list = NULL_TREE;
14827  bool save_translate_strings_p = parser->translate_strings_p;
14828
14829  parser->translate_strings_p = false;
14830  while (true)
14831    {
14832      cp_token *token;
14833      tree identifier;
14834      tree attribute;
14835
14836      /* Look for the identifier.  We also allow keywords here; for
14837	 example `__attribute__ ((const))' is legal.  */
14838      token = cp_lexer_peek_token (parser->lexer);
14839      if (token->type == CPP_NAME
14840	  || token->type == CPP_KEYWORD)
14841	{
14842	  tree arguments = NULL_TREE;
14843
14844	  /* Consume the token.  */
14845	  token = cp_lexer_consume_token (parser->lexer);
14846
14847	  /* Save away the identifier that indicates which attribute
14848	     this is.  */
14849	  identifier = token->u.value;
14850	  attribute = build_tree_list (identifier, NULL_TREE);
14851
14852	  /* Peek at the next token.  */
14853	  token = cp_lexer_peek_token (parser->lexer);
14854	  /* If it's an `(', then parse the attribute arguments.  */
14855	  if (token->type == CPP_OPEN_PAREN)
14856	    {
14857	      arguments = cp_parser_parenthesized_expression_list
14858			  (parser, true, /*cast_p=*/false,
14859			   /*non_constant_p=*/NULL);
14860	      /* Save the arguments away.  */
14861	      TREE_VALUE (attribute) = arguments;
14862	    }
14863
14864	  if (arguments != error_mark_node)
14865	    {
14866	      /* Add this attribute to the list.  */
14867	      TREE_CHAIN (attribute) = attribute_list;
14868	      attribute_list = attribute;
14869	    }
14870
14871	  token = cp_lexer_peek_token (parser->lexer);
14872	}
14873      /* Now, look for more attributes.  If the next token isn't a
14874	 `,', we're done.  */
14875      if (token->type != CPP_COMMA)
14876	break;
14877
14878      /* Consume the comma and keep going.  */
14879      cp_lexer_consume_token (parser->lexer);
14880    }
14881  parser->translate_strings_p = save_translate_strings_p;
14882
14883  /* We built up the list in reverse order.  */
14884  return nreverse (attribute_list);
14885}
14886
14887/* Parse an optional `__extension__' keyword.  Returns TRUE if it is
14888   present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
14889   current value of the PEDANTIC flag, regardless of whether or not
14890   the `__extension__' keyword is present.  The caller is responsible
14891   for restoring the value of the PEDANTIC flag.  */
14892
14893static bool
14894cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
14895{
14896  /* Save the old value of the PEDANTIC flag.  */
14897  *saved_pedantic = pedantic;
14898
14899  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
14900    {
14901      /* Consume the `__extension__' token.  */
14902      cp_lexer_consume_token (parser->lexer);
14903      /* We're not being pedantic while the `__extension__' keyword is
14904	 in effect.  */
14905      pedantic = 0;
14906
14907      return true;
14908    }
14909
14910  return false;
14911}
14912
14913/* Parse a label declaration.
14914
14915   label-declaration:
14916     __label__ label-declarator-seq ;
14917
14918   label-declarator-seq:
14919     identifier , label-declarator-seq
14920     identifier  */
14921
14922static void
14923cp_parser_label_declaration (cp_parser* parser)
14924{
14925  /* Look for the `__label__' keyword.  */
14926  cp_parser_require_keyword (parser, RID_LABEL, "`__label__'");
14927
14928  while (true)
14929    {
14930      tree identifier;
14931
14932      /* Look for an identifier.  */
14933      identifier = cp_parser_identifier (parser);
14934      /* If we failed, stop.  */
14935      if (identifier == error_mark_node)
14936	break;
14937      /* Declare it as a label.  */
14938      finish_label_decl (identifier);
14939      /* If the next token is a `;', stop.  */
14940      if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
14941	break;
14942      /* Look for the `,' separating the label declarations.  */
14943      cp_parser_require (parser, CPP_COMMA, "`,'");
14944    }
14945
14946  /* Look for the final `;'.  */
14947  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
14948}
14949
14950/* Support Functions */
14951
14952/* Looks up NAME in the current scope, as given by PARSER->SCOPE.
14953   NAME should have one of the representations used for an
14954   id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
14955   is returned.  If PARSER->SCOPE is a dependent type, then a
14956   SCOPE_REF is returned.
14957
14958   If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
14959   returned; the name was already resolved when the TEMPLATE_ID_EXPR
14960   was formed.  Abstractly, such entities should not be passed to this
14961   function, because they do not need to be looked up, but it is
14962   simpler to check for this special case here, rather than at the
14963   call-sites.
14964
14965   In cases not explicitly covered above, this function returns a
14966   DECL, OVERLOAD, or baselink representing the result of the lookup.
14967   If there was no entity with the indicated NAME, the ERROR_MARK_NODE
14968   is returned.
14969
14970   If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
14971   (e.g., "struct") that was used.  In that case bindings that do not
14972   refer to types are ignored.
14973
14974   If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
14975   ignored.
14976
14977   If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
14978   are ignored.
14979
14980   If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
14981   types.
14982
14983   If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
14984   TREE_LIST of candidates if name-lookup results in an ambiguity, and
14985   NULL_TREE otherwise.  */
14986
14987static tree
14988cp_parser_lookup_name (cp_parser *parser, tree name,
14989		       enum tag_types tag_type,
14990		       bool is_template,
14991		       bool is_namespace,
14992		       bool check_dependency,
14993		       tree *ambiguous_decls)
14994{
14995  int flags = 0;
14996  tree decl;
14997  tree object_type = parser->context->object_type;
14998
14999  if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
15000    flags |= LOOKUP_COMPLAIN;
15001
15002  /* Assume that the lookup will be unambiguous.  */
15003  if (ambiguous_decls)
15004    *ambiguous_decls = NULL_TREE;
15005
15006  /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
15007     no longer valid.  Note that if we are parsing tentatively, and
15008     the parse fails, OBJECT_TYPE will be automatically restored.  */
15009  parser->context->object_type = NULL_TREE;
15010
15011  if (name == error_mark_node)
15012    return error_mark_node;
15013
15014  /* A template-id has already been resolved; there is no lookup to
15015     do.  */
15016  if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
15017    return name;
15018  if (BASELINK_P (name))
15019    {
15020      gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
15021		  == TEMPLATE_ID_EXPR);
15022      return name;
15023    }
15024
15025  /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
15026     it should already have been checked to make sure that the name
15027     used matches the type being destroyed.  */
15028  if (TREE_CODE (name) == BIT_NOT_EXPR)
15029    {
15030      tree type;
15031
15032      /* Figure out to which type this destructor applies.  */
15033      if (parser->scope)
15034	type = parser->scope;
15035      else if (object_type)
15036	type = object_type;
15037      else
15038	type = current_class_type;
15039      /* If that's not a class type, there is no destructor.  */
15040      if (!type || !CLASS_TYPE_P (type))
15041	return error_mark_node;
15042      if (CLASSTYPE_LAZY_DESTRUCTOR (type))
15043	lazily_declare_fn (sfk_destructor, type);
15044      if (!CLASSTYPE_DESTRUCTORS (type))
15045	  return error_mark_node;
15046      /* If it was a class type, return the destructor.  */
15047      return CLASSTYPE_DESTRUCTORS (type);
15048    }
15049
15050  /* By this point, the NAME should be an ordinary identifier.  If
15051     the id-expression was a qualified name, the qualifying scope is
15052     stored in PARSER->SCOPE at this point.  */
15053  gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
15054
15055  /* Perform the lookup.  */
15056  if (parser->scope)
15057    {
15058      bool dependent_p;
15059
15060      if (parser->scope == error_mark_node)
15061	return error_mark_node;
15062
15063      /* If the SCOPE is dependent, the lookup must be deferred until
15064	 the template is instantiated -- unless we are explicitly
15065	 looking up names in uninstantiated templates.  Even then, we
15066	 cannot look up the name if the scope is not a class type; it
15067	 might, for example, be a template type parameter.  */
15068      dependent_p = (TYPE_P (parser->scope)
15069		     && !(parser->in_declarator_p
15070			  && currently_open_class (parser->scope))
15071		     && dependent_type_p (parser->scope));
15072      if ((check_dependency || !CLASS_TYPE_P (parser->scope))
15073	   && dependent_p)
15074	{
15075	  if (tag_type)
15076	    {
15077	      tree type;
15078
15079	      /* The resolution to Core Issue 180 says that `struct
15080		 A::B' should be considered a type-name, even if `A'
15081		 is dependent.  */
15082	      type = make_typename_type (parser->scope, name, tag_type,
15083					 /*complain=*/tf_error);
15084	      decl = TYPE_NAME (type);
15085	    }
15086	  else if (is_template
15087		   && (cp_parser_next_token_ends_template_argument_p (parser)
15088		       || cp_lexer_next_token_is (parser->lexer,
15089						  CPP_CLOSE_PAREN)))
15090	    decl = make_unbound_class_template (parser->scope,
15091						name, NULL_TREE,
15092						/*complain=*/tf_error);
15093	  else
15094	    decl = build_qualified_name (/*type=*/NULL_TREE,
15095					 parser->scope, name,
15096					 is_template);
15097	}
15098      else
15099	{
15100	  tree pushed_scope = NULL_TREE;
15101
15102	  /* If PARSER->SCOPE is a dependent type, then it must be a
15103	     class type, and we must not be checking dependencies;
15104	     otherwise, we would have processed this lookup above.  So
15105	     that PARSER->SCOPE is not considered a dependent base by
15106	     lookup_member, we must enter the scope here.  */
15107	  if (dependent_p)
15108	    pushed_scope = push_scope (parser->scope);
15109	  /* If the PARSER->SCOPE is a template specialization, it
15110	     may be instantiated during name lookup.  In that case,
15111	     errors may be issued.  Even if we rollback the current
15112	     tentative parse, those errors are valid.  */
15113	  decl = lookup_qualified_name (parser->scope, name,
15114					tag_type != none_type,
15115					/*complain=*/true);
15116	  if (pushed_scope)
15117	    pop_scope (pushed_scope);
15118	}
15119      parser->qualifying_scope = parser->scope;
15120      parser->object_scope = NULL_TREE;
15121    }
15122  else if (object_type)
15123    {
15124      tree object_decl = NULL_TREE;
15125      /* Look up the name in the scope of the OBJECT_TYPE, unless the
15126	 OBJECT_TYPE is not a class.  */
15127      if (CLASS_TYPE_P (object_type))
15128	/* If the OBJECT_TYPE is a template specialization, it may
15129	   be instantiated during name lookup.  In that case, errors
15130	   may be issued.  Even if we rollback the current tentative
15131	   parse, those errors are valid.  */
15132	object_decl = lookup_member (object_type,
15133				     name,
15134				     /*protect=*/0,
15135				     tag_type != none_type);
15136      /* Look it up in the enclosing context, too.  */
15137      decl = lookup_name_real (name, tag_type != none_type,
15138			       /*nonclass=*/0,
15139			       /*block_p=*/true, is_namespace, flags);
15140      parser->object_scope = object_type;
15141      parser->qualifying_scope = NULL_TREE;
15142      if (object_decl)
15143	decl = object_decl;
15144    }
15145  else
15146    {
15147      decl = lookup_name_real (name, tag_type != none_type,
15148			       /*nonclass=*/0,
15149			       /*block_p=*/true, is_namespace, flags);
15150      parser->qualifying_scope = NULL_TREE;
15151      parser->object_scope = NULL_TREE;
15152    }
15153
15154  /* If the lookup failed, let our caller know.  */
15155  if (!decl || decl == error_mark_node)
15156    return error_mark_node;
15157
15158  /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
15159  if (TREE_CODE (decl) == TREE_LIST)
15160    {
15161      if (ambiguous_decls)
15162	*ambiguous_decls = decl;
15163      /* The error message we have to print is too complicated for
15164	 cp_parser_error, so we incorporate its actions directly.  */
15165      if (!cp_parser_simulate_error (parser))
15166	{
15167	  error ("reference to %qD is ambiguous", name);
15168	  print_candidates (decl);
15169	}
15170      return error_mark_node;
15171    }
15172
15173  gcc_assert (DECL_P (decl)
15174	      || TREE_CODE (decl) == OVERLOAD
15175	      || TREE_CODE (decl) == SCOPE_REF
15176	      || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
15177	      || BASELINK_P (decl));
15178
15179  /* If we have resolved the name of a member declaration, check to
15180     see if the declaration is accessible.  When the name resolves to
15181     set of overloaded functions, accessibility is checked when
15182     overload resolution is done.
15183
15184     During an explicit instantiation, access is not checked at all,
15185     as per [temp.explicit].  */
15186  if (DECL_P (decl))
15187    check_accessibility_of_qualified_id (decl, object_type, parser->scope);
15188
15189  return decl;
15190}
15191
15192/* Like cp_parser_lookup_name, but for use in the typical case where
15193   CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
15194   IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
15195
15196static tree
15197cp_parser_lookup_name_simple (cp_parser* parser, tree name)
15198{
15199  return cp_parser_lookup_name (parser, name,
15200				none_type,
15201				/*is_template=*/false,
15202				/*is_namespace=*/false,
15203				/*check_dependency=*/true,
15204				/*ambiguous_decls=*/NULL);
15205}
15206
15207/* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
15208   the current context, return the TYPE_DECL.  If TAG_NAME_P is
15209   true, the DECL indicates the class being defined in a class-head,
15210   or declared in an elaborated-type-specifier.
15211
15212   Otherwise, return DECL.  */
15213
15214static tree
15215cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
15216{
15217  /* If the TEMPLATE_DECL is being declared as part of a class-head,
15218     the translation from TEMPLATE_DECL to TYPE_DECL occurs:
15219
15220       struct A {
15221	 template <typename T> struct B;
15222       };
15223
15224       template <typename T> struct A::B {};
15225
15226     Similarly, in an elaborated-type-specifier:
15227
15228       namespace N { struct X{}; }
15229
15230       struct A {
15231	 template <typename T> friend struct N::X;
15232       };
15233
15234     However, if the DECL refers to a class type, and we are in
15235     the scope of the class, then the name lookup automatically
15236     finds the TYPE_DECL created by build_self_reference rather
15237     than a TEMPLATE_DECL.  For example, in:
15238
15239       template <class T> struct S {
15240	 S s;
15241       };
15242
15243     there is no need to handle such case.  */
15244
15245  if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
15246    return DECL_TEMPLATE_RESULT (decl);
15247
15248  return decl;
15249}
15250
15251/* If too many, or too few, template-parameter lists apply to the
15252   declarator, issue an error message.  Returns TRUE if all went well,
15253   and FALSE otherwise.  */
15254
15255static bool
15256cp_parser_check_declarator_template_parameters (cp_parser* parser,
15257						cp_declarator *declarator)
15258{
15259  unsigned num_templates;
15260
15261  /* We haven't seen any classes that involve template parameters yet.  */
15262  num_templates = 0;
15263
15264  switch (declarator->kind)
15265    {
15266    case cdk_id:
15267      if (declarator->u.id.qualifying_scope)
15268	{
15269	  tree scope;
15270	  tree member;
15271
15272	  scope = declarator->u.id.qualifying_scope;
15273	  member = declarator->u.id.unqualified_name;
15274
15275	  while (scope && CLASS_TYPE_P (scope))
15276	    {
15277	      /* You're supposed to have one `template <...>'
15278		 for every template class, but you don't need one
15279		 for a full specialization.  For example:
15280
15281		 template <class T> struct S{};
15282		 template <> struct S<int> { void f(); };
15283		 void S<int>::f () {}
15284
15285		 is correct; there shouldn't be a `template <>' for
15286		 the definition of `S<int>::f'.  */
15287	      if (!CLASSTYPE_TEMPLATE_INFO (scope))
15288		/* If SCOPE does not have template information of any
15289		   kind, then it is not a template, nor is it nested
15290		   within a template.  */
15291		break;
15292	      if (explicit_class_specialization_p (scope))
15293		break;
15294	      if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
15295		++num_templates;
15296
15297	      scope = TYPE_CONTEXT (scope);
15298	    }
15299	}
15300      else if (TREE_CODE (declarator->u.id.unqualified_name)
15301	       == TEMPLATE_ID_EXPR)
15302	/* If the DECLARATOR has the form `X<y>' then it uses one
15303	   additional level of template parameters.  */
15304	++num_templates;
15305
15306      return cp_parser_check_template_parameters (parser,
15307						  num_templates);
15308
15309    case cdk_function:
15310    case cdk_array:
15311    case cdk_pointer:
15312    case cdk_reference:
15313    case cdk_ptrmem:
15314      return (cp_parser_check_declarator_template_parameters
15315	      (parser, declarator->declarator));
15316
15317    case cdk_error:
15318      return true;
15319
15320    default:
15321      gcc_unreachable ();
15322    }
15323  return false;
15324}
15325
15326/* NUM_TEMPLATES were used in the current declaration.  If that is
15327   invalid, return FALSE and issue an error messages.  Otherwise,
15328   return TRUE.  */
15329
15330static bool
15331cp_parser_check_template_parameters (cp_parser* parser,
15332				     unsigned num_templates)
15333{
15334  /* If there are more template classes than parameter lists, we have
15335     something like:
15336
15337       template <class T> void S<T>::R<T>::f ();  */
15338  if (parser->num_template_parameter_lists < num_templates)
15339    {
15340      error ("too few template-parameter-lists");
15341      return false;
15342    }
15343  /* If there are the same number of template classes and parameter
15344     lists, that's OK.  */
15345  if (parser->num_template_parameter_lists == num_templates)
15346    return true;
15347  /* If there are more, but only one more, then we are referring to a
15348     member template.  That's OK too.  */
15349  if (parser->num_template_parameter_lists == num_templates + 1)
15350      return true;
15351  /* Otherwise, there are too many template parameter lists.  We have
15352     something like:
15353
15354     template <class T> template <class U> void S::f();  */
15355  error ("too many template-parameter-lists");
15356  return false;
15357}
15358
15359/* Parse an optional `::' token indicating that the following name is
15360   from the global namespace.  If so, PARSER->SCOPE is set to the
15361   GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
15362   unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
15363   Returns the new value of PARSER->SCOPE, if the `::' token is
15364   present, and NULL_TREE otherwise.  */
15365
15366static tree
15367cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
15368{
15369  cp_token *token;
15370
15371  /* Peek at the next token.  */
15372  token = cp_lexer_peek_token (parser->lexer);
15373  /* If we're looking at a `::' token then we're starting from the
15374     global namespace, not our current location.  */
15375  if (token->type == CPP_SCOPE)
15376    {
15377      /* Consume the `::' token.  */
15378      cp_lexer_consume_token (parser->lexer);
15379      /* Set the SCOPE so that we know where to start the lookup.  */
15380      parser->scope = global_namespace;
15381      parser->qualifying_scope = global_namespace;
15382      parser->object_scope = NULL_TREE;
15383
15384      return parser->scope;
15385    }
15386  else if (!current_scope_valid_p)
15387    {
15388      parser->scope = NULL_TREE;
15389      parser->qualifying_scope = NULL_TREE;
15390      parser->object_scope = NULL_TREE;
15391    }
15392
15393  return NULL_TREE;
15394}
15395
15396/* Returns TRUE if the upcoming token sequence is the start of a
15397   constructor declarator.  If FRIEND_P is true, the declarator is
15398   preceded by the `friend' specifier.  */
15399
15400static bool
15401cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
15402{
15403  bool constructor_p;
15404  tree type_decl = NULL_TREE;
15405  bool nested_name_p;
15406  cp_token *next_token;
15407
15408  /* The common case is that this is not a constructor declarator, so
15409     try to avoid doing lots of work if at all possible.  It's not
15410     valid declare a constructor at function scope.  */
15411  if (parser->in_function_body)
15412    return false;
15413  /* And only certain tokens can begin a constructor declarator.  */
15414  next_token = cp_lexer_peek_token (parser->lexer);
15415  if (next_token->type != CPP_NAME
15416      && next_token->type != CPP_SCOPE
15417      && next_token->type != CPP_NESTED_NAME_SPECIFIER
15418      && next_token->type != CPP_TEMPLATE_ID)
15419    return false;
15420
15421  /* Parse tentatively; we are going to roll back all of the tokens
15422     consumed here.  */
15423  cp_parser_parse_tentatively (parser);
15424  /* Assume that we are looking at a constructor declarator.  */
15425  constructor_p = true;
15426
15427  /* Look for the optional `::' operator.  */
15428  cp_parser_global_scope_opt (parser,
15429			      /*current_scope_valid_p=*/false);
15430  /* Look for the nested-name-specifier.  */
15431  nested_name_p
15432    = (cp_parser_nested_name_specifier_opt (parser,
15433					    /*typename_keyword_p=*/false,
15434					    /*check_dependency_p=*/false,
15435					    /*type_p=*/false,
15436					    /*is_declaration=*/false)
15437       != NULL_TREE);
15438  /* Outside of a class-specifier, there must be a
15439     nested-name-specifier.  */
15440  if (!nested_name_p &&
15441      (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
15442       || friend_p))
15443    constructor_p = false;
15444  /* If we still think that this might be a constructor-declarator,
15445     look for a class-name.  */
15446  if (constructor_p)
15447    {
15448      /* If we have:
15449
15450	   template <typename T> struct S { S(); };
15451	   template <typename T> S<T>::S ();
15452
15453	 we must recognize that the nested `S' names a class.
15454	 Similarly, for:
15455
15456	   template <typename T> S<T>::S<T> ();
15457
15458	 we must recognize that the nested `S' names a template.  */
15459      type_decl = cp_parser_class_name (parser,
15460					/*typename_keyword_p=*/false,
15461					/*template_keyword_p=*/false,
15462					none_type,
15463					/*check_dependency_p=*/false,
15464					/*class_head_p=*/false,
15465					/*is_declaration=*/false);
15466      /* If there was no class-name, then this is not a constructor.  */
15467      constructor_p = !cp_parser_error_occurred (parser);
15468    }
15469
15470  /* If we're still considering a constructor, we have to see a `(',
15471     to begin the parameter-declaration-clause, followed by either a
15472     `)', an `...', or a decl-specifier.  We need to check for a
15473     type-specifier to avoid being fooled into thinking that:
15474
15475       S::S (f) (int);
15476
15477     is a constructor.  (It is actually a function named `f' that
15478     takes one parameter (of type `int') and returns a value of type
15479     `S::S'.  */
15480  if (constructor_p
15481      && cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
15482    {
15483      if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
15484	  && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
15485	  /* A parameter declaration begins with a decl-specifier,
15486	     which is either the "attribute" keyword, a storage class
15487	     specifier, or (usually) a type-specifier.  */
15488	  && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
15489	{
15490	  tree type;
15491	  tree pushed_scope = NULL_TREE;
15492	  unsigned saved_num_template_parameter_lists;
15493
15494	  /* Names appearing in the type-specifier should be looked up
15495	     in the scope of the class.  */
15496	  if (current_class_type)
15497	    type = NULL_TREE;
15498	  else
15499	    {
15500	      type = TREE_TYPE (type_decl);
15501	      if (TREE_CODE (type) == TYPENAME_TYPE)
15502		{
15503		  type = resolve_typename_type (type,
15504						/*only_current_p=*/false);
15505		  if (type == error_mark_node)
15506		    {
15507		      cp_parser_abort_tentative_parse (parser);
15508		      return false;
15509		    }
15510		}
15511	      pushed_scope = push_scope (type);
15512	    }
15513
15514	  /* Inside the constructor parameter list, surrounding
15515	     template-parameter-lists do not apply.  */
15516	  saved_num_template_parameter_lists
15517	    = parser->num_template_parameter_lists;
15518	  parser->num_template_parameter_lists = 0;
15519
15520	  /* Look for the type-specifier.  */
15521	  cp_parser_type_specifier (parser,
15522				    CP_PARSER_FLAGS_NONE,
15523				    /*decl_specs=*/NULL,
15524				    /*is_declarator=*/true,
15525				    /*declares_class_or_enum=*/NULL,
15526				    /*is_cv_qualifier=*/NULL);
15527
15528	  parser->num_template_parameter_lists
15529	    = saved_num_template_parameter_lists;
15530
15531	  /* Leave the scope of the class.  */
15532	  if (pushed_scope)
15533	    pop_scope (pushed_scope);
15534
15535	  constructor_p = !cp_parser_error_occurred (parser);
15536	}
15537    }
15538  else
15539    constructor_p = false;
15540  /* We did not really want to consume any tokens.  */
15541  cp_parser_abort_tentative_parse (parser);
15542
15543  return constructor_p;
15544}
15545
15546/* Parse the definition of the function given by the DECL_SPECIFIERS,
15547   ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
15548   they must be performed once we are in the scope of the function.
15549
15550   Returns the function defined.  */
15551
15552static tree
15553cp_parser_function_definition_from_specifiers_and_declarator
15554  (cp_parser* parser,
15555   cp_decl_specifier_seq *decl_specifiers,
15556   tree attributes,
15557   const cp_declarator *declarator)
15558{
15559  tree fn;
15560  bool success_p;
15561
15562  /* Begin the function-definition.  */
15563  success_p = start_function (decl_specifiers, declarator, attributes);
15564
15565  /* The things we're about to see are not directly qualified by any
15566     template headers we've seen thus far.  */
15567  reset_specialization ();
15568
15569  /* If there were names looked up in the decl-specifier-seq that we
15570     did not check, check them now.  We must wait until we are in the
15571     scope of the function to perform the checks, since the function
15572     might be a friend.  */
15573  perform_deferred_access_checks ();
15574
15575  if (!success_p)
15576    {
15577      /* Skip the entire function.  */
15578      cp_parser_skip_to_end_of_block_or_statement (parser);
15579      fn = error_mark_node;
15580    }
15581  else
15582    fn = cp_parser_function_definition_after_declarator (parser,
15583							 /*inline_p=*/false);
15584
15585  return fn;
15586}
15587
15588/* Parse the part of a function-definition that follows the
15589   declarator.  INLINE_P is TRUE iff this function is an inline
15590   function defined with a class-specifier.
15591
15592   Returns the function defined.  */
15593
15594static tree
15595cp_parser_function_definition_after_declarator (cp_parser* parser,
15596						bool inline_p)
15597{
15598  tree fn;
15599  bool ctor_initializer_p = false;
15600  bool saved_in_unbraced_linkage_specification_p;
15601  bool saved_in_function_body;
15602  unsigned saved_num_template_parameter_lists;
15603
15604  saved_in_function_body = parser->in_function_body;
15605  parser->in_function_body = true;
15606  /* If the next token is `return', then the code may be trying to
15607     make use of the "named return value" extension that G++ used to
15608     support.  */
15609  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
15610    {
15611      /* Consume the `return' keyword.  */
15612      cp_lexer_consume_token (parser->lexer);
15613      /* Look for the identifier that indicates what value is to be
15614	 returned.  */
15615      cp_parser_identifier (parser);
15616      /* Issue an error message.  */
15617      error ("named return values are no longer supported");
15618      /* Skip tokens until we reach the start of the function body.  */
15619      while (true)
15620	{
15621	  cp_token *token = cp_lexer_peek_token (parser->lexer);
15622	  if (token->type == CPP_OPEN_BRACE
15623	      || token->type == CPP_EOF
15624	      || token->type == CPP_PRAGMA_EOL)
15625	    break;
15626	  cp_lexer_consume_token (parser->lexer);
15627	}
15628    }
15629  /* The `extern' in `extern "C" void f () { ... }' does not apply to
15630     anything declared inside `f'.  */
15631  saved_in_unbraced_linkage_specification_p
15632    = parser->in_unbraced_linkage_specification_p;
15633  parser->in_unbraced_linkage_specification_p = false;
15634  /* Inside the function, surrounding template-parameter-lists do not
15635     apply.  */
15636  saved_num_template_parameter_lists
15637    = parser->num_template_parameter_lists;
15638  parser->num_template_parameter_lists = 0;
15639  /* If the next token is `try', then we are looking at a
15640     function-try-block.  */
15641  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
15642    ctor_initializer_p = cp_parser_function_try_block (parser);
15643  /* A function-try-block includes the function-body, so we only do
15644     this next part if we're not processing a function-try-block.  */
15645  else
15646    ctor_initializer_p
15647      = cp_parser_ctor_initializer_opt_and_function_body (parser);
15648
15649  /* Finish the function.  */
15650  fn = finish_function ((ctor_initializer_p ? 1 : 0) |
15651			(inline_p ? 2 : 0));
15652  /* Generate code for it, if necessary.  */
15653  expand_or_defer_fn (fn);
15654  /* Restore the saved values.  */
15655  parser->in_unbraced_linkage_specification_p
15656    = saved_in_unbraced_linkage_specification_p;
15657  parser->num_template_parameter_lists
15658    = saved_num_template_parameter_lists;
15659  parser->in_function_body = saved_in_function_body;
15660
15661  return fn;
15662}
15663
15664/* Parse a template-declaration, assuming that the `export' (and
15665   `extern') keywords, if present, has already been scanned.  MEMBER_P
15666   is as for cp_parser_template_declaration.  */
15667
15668static void
15669cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
15670{
15671  tree decl = NULL_TREE;
15672  VEC (deferred_access_check,gc) *checks;
15673  tree parameter_list;
15674  bool friend_p = false;
15675  bool need_lang_pop;
15676
15677  /* Look for the `template' keyword.  */
15678  if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"))
15679    return;
15680
15681  /* And the `<'.  */
15682  if (!cp_parser_require (parser, CPP_LESS, "`<'"))
15683    return;
15684  if (at_class_scope_p () && current_function_decl)
15685    {
15686      /* 14.5.2.2 [temp.mem]
15687
15688         A local class shall not have member templates.  */
15689      error ("invalid declaration of member template in local class");
15690      cp_parser_skip_to_end_of_block_or_statement (parser);
15691      return;
15692    }
15693  /* [temp]
15694
15695     A template ... shall not have C linkage.  */
15696  if (current_lang_name == lang_name_c)
15697    {
15698      error ("template with C linkage");
15699      /* Give it C++ linkage to avoid confusing other parts of the
15700	 front end.  */
15701      push_lang_context (lang_name_cplusplus);
15702      need_lang_pop = true;
15703    }
15704  else
15705    need_lang_pop = false;
15706
15707  /* We cannot perform access checks on the template parameter
15708     declarations until we know what is being declared, just as we
15709     cannot check the decl-specifier list.  */
15710  push_deferring_access_checks (dk_deferred);
15711
15712  /* If the next token is `>', then we have an invalid
15713     specialization.  Rather than complain about an invalid template
15714     parameter, issue an error message here.  */
15715  if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
15716    {
15717      cp_parser_error (parser, "invalid explicit specialization");
15718      begin_specialization ();
15719      parameter_list = NULL_TREE;
15720    }
15721  else
15722    /* Parse the template parameters.  */
15723    parameter_list = cp_parser_template_parameter_list (parser);
15724
15725  /* Get the deferred access checks from the parameter list.  These
15726     will be checked once we know what is being declared, as for a
15727     member template the checks must be performed in the scope of the
15728     class containing the member.  */
15729  checks = get_deferred_access_checks ();
15730
15731  /* Look for the `>'.  */
15732  cp_parser_skip_to_end_of_template_parameter_list (parser);
15733  /* We just processed one more parameter list.  */
15734  ++parser->num_template_parameter_lists;
15735  /* If the next token is `template', there are more template
15736     parameters.  */
15737  if (cp_lexer_next_token_is_keyword (parser->lexer,
15738				      RID_TEMPLATE))
15739    cp_parser_template_declaration_after_export (parser, member_p);
15740  else
15741    {
15742      /* There are no access checks when parsing a template, as we do not
15743	 know if a specialization will be a friend.  */
15744      push_deferring_access_checks (dk_no_check);
15745      decl = cp_parser_single_declaration (parser,
15746					   checks,
15747					   member_p,
15748					   &friend_p);
15749      pop_deferring_access_checks ();
15750
15751      /* If this is a member template declaration, let the front
15752	 end know.  */
15753      if (member_p && !friend_p && decl)
15754	{
15755	  if (TREE_CODE (decl) == TYPE_DECL)
15756	    cp_parser_check_access_in_redeclaration (decl);
15757
15758	  decl = finish_member_template_decl (decl);
15759	}
15760      else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
15761	make_friend_class (current_class_type, TREE_TYPE (decl),
15762			   /*complain=*/true);
15763    }
15764  /* We are done with the current parameter list.  */
15765  --parser->num_template_parameter_lists;
15766
15767  pop_deferring_access_checks ();
15768
15769  /* Finish up.  */
15770  finish_template_decl (parameter_list);
15771
15772  /* Register member declarations.  */
15773  if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
15774    finish_member_declaration (decl);
15775  /* For the erroneous case of a template with C linkage, we pushed an
15776     implicit C++ linkage scope; exit that scope now.  */
15777  if (need_lang_pop)
15778    pop_lang_context ();
15779  /* If DECL is a function template, we must return to parse it later.
15780     (Even though there is no definition, there might be default
15781     arguments that need handling.)  */
15782  if (member_p && decl
15783      && (TREE_CODE (decl) == FUNCTION_DECL
15784	  || DECL_FUNCTION_TEMPLATE_P (decl)))
15785    TREE_VALUE (parser->unparsed_functions_queues)
15786      = tree_cons (NULL_TREE, decl,
15787		   TREE_VALUE (parser->unparsed_functions_queues));
15788}
15789
15790/* Perform the deferred access checks from a template-parameter-list.
15791   CHECKS is a TREE_LIST of access checks, as returned by
15792   get_deferred_access_checks.  */
15793
15794static void
15795cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
15796{
15797  ++processing_template_parmlist;
15798  perform_access_checks (checks);
15799  --processing_template_parmlist;
15800}
15801
15802/* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
15803   `function-definition' sequence.  MEMBER_P is true, this declaration
15804   appears in a class scope.
15805
15806   Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
15807   *FRIEND_P is set to TRUE iff the declaration is a friend.  */
15808
15809static tree
15810cp_parser_single_declaration (cp_parser* parser,
15811			      VEC (deferred_access_check,gc)* checks,
15812			      bool member_p,
15813			      bool* friend_p)
15814{
15815  int declares_class_or_enum;
15816  tree decl = NULL_TREE;
15817  cp_decl_specifier_seq decl_specifiers;
15818  bool function_definition_p = false;
15819
15820  /* This function is only used when processing a template
15821     declaration.  */
15822  gcc_assert (innermost_scope_kind () == sk_template_parms
15823	      || innermost_scope_kind () == sk_template_spec);
15824
15825  /* Defer access checks until we know what is being declared.  */
15826  push_deferring_access_checks (dk_deferred);
15827
15828  /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
15829     alternative.  */
15830  cp_parser_decl_specifier_seq (parser,
15831				CP_PARSER_FLAGS_OPTIONAL,
15832				&decl_specifiers,
15833				&declares_class_or_enum);
15834  if (friend_p)
15835    *friend_p = cp_parser_friend_p (&decl_specifiers);
15836
15837  /* There are no template typedefs.  */
15838  if (decl_specifiers.specs[(int) ds_typedef])
15839    {
15840      error ("template declaration of %qs", "typedef");
15841      decl = error_mark_node;
15842    }
15843
15844  /* Gather up the access checks that occurred the
15845     decl-specifier-seq.  */
15846  stop_deferring_access_checks ();
15847
15848  /* Check for the declaration of a template class.  */
15849  if (declares_class_or_enum)
15850    {
15851      if (cp_parser_declares_only_class_p (parser))
15852	{
15853	  decl = shadow_tag (&decl_specifiers);
15854
15855	  /* In this case:
15856
15857	       struct C {
15858		 friend template <typename T> struct A<T>::B;
15859	       };
15860
15861	     A<T>::B will be represented by a TYPENAME_TYPE, and
15862	     therefore not recognized by shadow_tag.  */
15863	  if (friend_p && *friend_p
15864	      && !decl
15865	      && decl_specifiers.type
15866	      && TYPE_P (decl_specifiers.type))
15867	    decl = decl_specifiers.type;
15868
15869	  if (decl && decl != error_mark_node)
15870	    decl = TYPE_NAME (decl);
15871	  else
15872	    decl = error_mark_node;
15873
15874	  /* Perform access checks for template parameters.  */
15875	  cp_parser_perform_template_parameter_access_checks (checks);
15876	}
15877    }
15878  /* If it's not a template class, try for a template function.  If
15879     the next token is a `;', then this declaration does not declare
15880     anything.  But, if there were errors in the decl-specifiers, then
15881     the error might well have come from an attempted class-specifier.
15882     In that case, there's no need to warn about a missing declarator.  */
15883  if (!decl
15884      && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
15885	  || decl_specifiers.type != error_mark_node))
15886    decl = cp_parser_init_declarator (parser,
15887				      &decl_specifiers,
15888				      checks,
15889				      /*function_definition_allowed_p=*/true,
15890				      member_p,
15891				      declares_class_or_enum,
15892				      &function_definition_p);
15893
15894  pop_deferring_access_checks ();
15895
15896  /* Clear any current qualification; whatever comes next is the start
15897     of something new.  */
15898  parser->scope = NULL_TREE;
15899  parser->qualifying_scope = NULL_TREE;
15900  parser->object_scope = NULL_TREE;
15901  /* Look for a trailing `;' after the declaration.  */
15902  if (!function_definition_p
15903      && (decl == error_mark_node
15904	  || !cp_parser_require (parser, CPP_SEMICOLON, "`;'")))
15905    cp_parser_skip_to_end_of_block_or_statement (parser);
15906
15907  return decl;
15908}
15909
15910/* Parse a cast-expression that is not the operand of a unary "&".  */
15911
15912static tree
15913cp_parser_simple_cast_expression (cp_parser *parser)
15914{
15915  return cp_parser_cast_expression (parser, /*address_p=*/false,
15916				    /*cast_p=*/false);
15917}
15918
15919/* Parse a functional cast to TYPE.  Returns an expression
15920   representing the cast.  */
15921
15922static tree
15923cp_parser_functional_cast (cp_parser* parser, tree type)
15924{
15925  tree expression_list;
15926  tree cast;
15927
15928  expression_list
15929    = cp_parser_parenthesized_expression_list (parser, false,
15930					       /*cast_p=*/true,
15931					       /*non_constant_p=*/NULL);
15932
15933  cast = build_functional_cast (type, expression_list);
15934  /* [expr.const]/1: In an integral constant expression "only type
15935     conversions to integral or enumeration type can be used".  */
15936  if (TREE_CODE (type) == TYPE_DECL)
15937    type = TREE_TYPE (type);
15938  if (cast != error_mark_node
15939      && !cast_valid_in_integral_constant_expression_p (type)
15940      && (cp_parser_non_integral_constant_expression
15941	  (parser, "a call to a constructor")))
15942    return error_mark_node;
15943  return cast;
15944}
15945
15946/* Save the tokens that make up the body of a member function defined
15947   in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
15948   already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
15949   specifiers applied to the declaration.  Returns the FUNCTION_DECL
15950   for the member function.  */
15951
15952static tree
15953cp_parser_save_member_function_body (cp_parser* parser,
15954				     cp_decl_specifier_seq *decl_specifiers,
15955				     cp_declarator *declarator,
15956				     tree attributes)
15957{
15958  cp_token *first;
15959  cp_token *last;
15960  tree fn;
15961
15962  /* Create the function-declaration.  */
15963  fn = start_method (decl_specifiers, declarator, attributes);
15964  /* If something went badly wrong, bail out now.  */
15965  if (fn == error_mark_node)
15966    {
15967      /* If there's a function-body, skip it.  */
15968      if (cp_parser_token_starts_function_definition_p
15969	  (cp_lexer_peek_token (parser->lexer)))
15970	cp_parser_skip_to_end_of_block_or_statement (parser);
15971      return error_mark_node;
15972    }
15973
15974  /* Remember it, if there default args to post process.  */
15975  cp_parser_save_default_args (parser, fn);
15976
15977  /* Save away the tokens that make up the body of the
15978     function.  */
15979  first = parser->lexer->next_token;
15980  cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
15981  /* Handle function try blocks.  */
15982  while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
15983    cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
15984  last = parser->lexer->next_token;
15985
15986  /* Save away the inline definition; we will process it when the
15987     class is complete.  */
15988  DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
15989  DECL_PENDING_INLINE_P (fn) = 1;
15990
15991  /* We need to know that this was defined in the class, so that
15992     friend templates are handled correctly.  */
15993  DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
15994
15995  /* We're done with the inline definition.  */
15996  finish_method (fn);
15997
15998  /* Add FN to the queue of functions to be parsed later.  */
15999  TREE_VALUE (parser->unparsed_functions_queues)
16000    = tree_cons (NULL_TREE, fn,
16001		 TREE_VALUE (parser->unparsed_functions_queues));
16002
16003  return fn;
16004}
16005
16006/* Parse a template-argument-list, as well as the trailing ">" (but
16007   not the opening ">").  See cp_parser_template_argument_list for the
16008   return value.  */
16009
16010static tree
16011cp_parser_enclosed_template_argument_list (cp_parser* parser)
16012{
16013  tree arguments;
16014  tree saved_scope;
16015  tree saved_qualifying_scope;
16016  tree saved_object_scope;
16017  bool saved_greater_than_is_operator_p;
16018  bool saved_skip_evaluation;
16019
16020  /* [temp.names]
16021
16022     When parsing a template-id, the first non-nested `>' is taken as
16023     the end of the template-argument-list rather than a greater-than
16024     operator.  */
16025  saved_greater_than_is_operator_p
16026    = parser->greater_than_is_operator_p;
16027  parser->greater_than_is_operator_p = false;
16028  /* Parsing the argument list may modify SCOPE, so we save it
16029     here.  */
16030  saved_scope = parser->scope;
16031  saved_qualifying_scope = parser->qualifying_scope;
16032  saved_object_scope = parser->object_scope;
16033  /* We need to evaluate the template arguments, even though this
16034     template-id may be nested within a "sizeof".  */
16035  saved_skip_evaluation = skip_evaluation;
16036  skip_evaluation = false;
16037  /* Parse the template-argument-list itself.  */
16038  if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
16039    arguments = NULL_TREE;
16040  else
16041    arguments = cp_parser_template_argument_list (parser);
16042  /* Look for the `>' that ends the template-argument-list. If we find
16043     a '>>' instead, it's probably just a typo.  */
16044  if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
16045    {
16046      if (!saved_greater_than_is_operator_p)
16047	{
16048	  /* If we're in a nested template argument list, the '>>' has
16049	    to be a typo for '> >'. We emit the error message, but we
16050	    continue parsing and we push a '>' as next token, so that
16051	    the argument list will be parsed correctly.  Note that the
16052	    global source location is still on the token before the
16053	    '>>', so we need to say explicitly where we want it.  */
16054	  cp_token *token = cp_lexer_peek_token (parser->lexer);
16055	  error ("%H%<>>%> should be %<> >%> "
16056		 "within a nested template argument list",
16057		 &token->location);
16058
16059	  /* ??? Proper recovery should terminate two levels of
16060	     template argument list here.  */
16061	  token->type = CPP_GREATER;
16062	}
16063      else
16064	{
16065	  /* If this is not a nested template argument list, the '>>'
16066	    is a typo for '>'. Emit an error message and continue.
16067	    Same deal about the token location, but here we can get it
16068	    right by consuming the '>>' before issuing the diagnostic.  */
16069	  cp_lexer_consume_token (parser->lexer);
16070	  error ("spurious %<>>%>, use %<>%> to terminate "
16071		 "a template argument list");
16072	}
16073    }
16074  else
16075    cp_parser_skip_to_end_of_template_parameter_list (parser);
16076  /* The `>' token might be a greater-than operator again now.  */
16077  parser->greater_than_is_operator_p
16078    = saved_greater_than_is_operator_p;
16079  /* Restore the SAVED_SCOPE.  */
16080  parser->scope = saved_scope;
16081  parser->qualifying_scope = saved_qualifying_scope;
16082  parser->object_scope = saved_object_scope;
16083  skip_evaluation = saved_skip_evaluation;
16084
16085  return arguments;
16086}
16087
16088/* MEMBER_FUNCTION is a member function, or a friend.  If default
16089   arguments, or the body of the function have not yet been parsed,
16090   parse them now.  */
16091
16092static void
16093cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
16094{
16095  /* If this member is a template, get the underlying
16096     FUNCTION_DECL.  */
16097  if (DECL_FUNCTION_TEMPLATE_P (member_function))
16098    member_function = DECL_TEMPLATE_RESULT (member_function);
16099
16100  /* There should not be any class definitions in progress at this
16101     point; the bodies of members are only parsed outside of all class
16102     definitions.  */
16103  gcc_assert (parser->num_classes_being_defined == 0);
16104  /* While we're parsing the member functions we might encounter more
16105     classes.  We want to handle them right away, but we don't want
16106     them getting mixed up with functions that are currently in the
16107     queue.  */
16108  parser->unparsed_functions_queues
16109    = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
16110
16111  /* Make sure that any template parameters are in scope.  */
16112  maybe_begin_member_template_processing (member_function);
16113
16114  /* If the body of the function has not yet been parsed, parse it
16115     now.  */
16116  if (DECL_PENDING_INLINE_P (member_function))
16117    {
16118      tree function_scope;
16119      cp_token_cache *tokens;
16120
16121      /* The function is no longer pending; we are processing it.  */
16122      tokens = DECL_PENDING_INLINE_INFO (member_function);
16123      DECL_PENDING_INLINE_INFO (member_function) = NULL;
16124      DECL_PENDING_INLINE_P (member_function) = 0;
16125
16126      /* If this is a local class, enter the scope of the containing
16127	 function.  */
16128      function_scope = current_function_decl;
16129      if (function_scope)
16130	push_function_context_to (function_scope);
16131
16132
16133      /* Push the body of the function onto the lexer stack.  */
16134      cp_parser_push_lexer_for_tokens (parser, tokens);
16135
16136      /* Let the front end know that we going to be defining this
16137	 function.  */
16138      start_preparsed_function (member_function, NULL_TREE,
16139				SF_PRE_PARSED | SF_INCLASS_INLINE);
16140
16141      /* Don't do access checking if it is a templated function.  */
16142      if (processing_template_decl)
16143	push_deferring_access_checks (dk_no_check);
16144
16145      /* Now, parse the body of the function.  */
16146      cp_parser_function_definition_after_declarator (parser,
16147						      /*inline_p=*/true);
16148
16149      if (processing_template_decl)
16150	pop_deferring_access_checks ();
16151
16152      /* Leave the scope of the containing function.  */
16153      if (function_scope)
16154	pop_function_context_from (function_scope);
16155      cp_parser_pop_lexer (parser);
16156    }
16157
16158  /* Remove any template parameters from the symbol table.  */
16159  maybe_end_member_template_processing ();
16160
16161  /* Restore the queue.  */
16162  parser->unparsed_functions_queues
16163    = TREE_CHAIN (parser->unparsed_functions_queues);
16164}
16165
16166/* If DECL contains any default args, remember it on the unparsed
16167   functions queue.  */
16168
16169static void
16170cp_parser_save_default_args (cp_parser* parser, tree decl)
16171{
16172  tree probe;
16173
16174  for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
16175       probe;
16176       probe = TREE_CHAIN (probe))
16177    if (TREE_PURPOSE (probe))
16178      {
16179	TREE_PURPOSE (parser->unparsed_functions_queues)
16180	  = tree_cons (current_class_type, decl,
16181		       TREE_PURPOSE (parser->unparsed_functions_queues));
16182	break;
16183      }
16184}
16185
16186/* FN is a FUNCTION_DECL which may contains a parameter with an
16187   unparsed DEFAULT_ARG.  Parse the default args now.  This function
16188   assumes that the current scope is the scope in which the default
16189   argument should be processed.  */
16190
16191static void
16192cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
16193{
16194  bool saved_local_variables_forbidden_p;
16195  tree parm;
16196
16197  /* While we're parsing the default args, we might (due to the
16198     statement expression extension) encounter more classes.  We want
16199     to handle them right away, but we don't want them getting mixed
16200     up with default args that are currently in the queue.  */
16201  parser->unparsed_functions_queues
16202    = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
16203
16204  /* Local variable names (and the `this' keyword) may not appear
16205     in a default argument.  */
16206  saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
16207  parser->local_variables_forbidden_p = true;
16208
16209  for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
16210       parm;
16211       parm = TREE_CHAIN (parm))
16212    {
16213      cp_token_cache *tokens;
16214      tree default_arg = TREE_PURPOSE (parm);
16215      tree parsed_arg;
16216      VEC(tree,gc) *insts;
16217      tree copy;
16218      unsigned ix;
16219
16220      if (!default_arg)
16221	continue;
16222
16223      if (TREE_CODE (default_arg) != DEFAULT_ARG)
16224	/* This can happen for a friend declaration for a function
16225	   already declared with default arguments.  */
16226	continue;
16227
16228       /* Push the saved tokens for the default argument onto the parser's
16229	  lexer stack.  */
16230      tokens = DEFARG_TOKENS (default_arg);
16231      cp_parser_push_lexer_for_tokens (parser, tokens);
16232
16233      /* Parse the assignment-expression.  */
16234      parsed_arg = cp_parser_assignment_expression (parser, /*cast_p=*/false);
16235
16236      if (!processing_template_decl)
16237	parsed_arg = check_default_argument (TREE_VALUE (parm), parsed_arg);
16238
16239      TREE_PURPOSE (parm) = parsed_arg;
16240
16241      /* Update any instantiations we've already created.  */
16242      for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
16243	   VEC_iterate (tree, insts, ix, copy); ix++)
16244	TREE_PURPOSE (copy) = parsed_arg;
16245
16246      /* If the token stream has not been completely used up, then
16247	 there was extra junk after the end of the default
16248	 argument.  */
16249      if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
16250	cp_parser_error (parser, "expected %<,%>");
16251
16252      /* Revert to the main lexer.  */
16253      cp_parser_pop_lexer (parser);
16254    }
16255
16256  /* Make sure no default arg is missing.  */
16257  check_default_args (fn);
16258
16259  /* Restore the state of local_variables_forbidden_p.  */
16260  parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
16261
16262  /* Restore the queue.  */
16263  parser->unparsed_functions_queues
16264    = TREE_CHAIN (parser->unparsed_functions_queues);
16265}
16266
16267/* Parse the operand of `sizeof' (or a similar operator).  Returns
16268   either a TYPE or an expression, depending on the form of the
16269   input.  The KEYWORD indicates which kind of expression we have
16270   encountered.  */
16271
16272static tree
16273cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
16274{
16275  static const char *format;
16276  tree expr = NULL_TREE;
16277  const char *saved_message;
16278  bool saved_integral_constant_expression_p;
16279  bool saved_non_integral_constant_expression_p;
16280
16281  /* Initialize FORMAT the first time we get here.  */
16282  if (!format)
16283    format = "types may not be defined in '%s' expressions";
16284
16285  /* Types cannot be defined in a `sizeof' expression.  Save away the
16286     old message.  */
16287  saved_message = parser->type_definition_forbidden_message;
16288  /* And create the new one.  */
16289  parser->type_definition_forbidden_message
16290    = XNEWVEC (const char, strlen (format)
16291	       + strlen (IDENTIFIER_POINTER (ridpointers[keyword]))
16292	       + 1 /* `\0' */);
16293  sprintf ((char *) parser->type_definition_forbidden_message,
16294	   format, IDENTIFIER_POINTER (ridpointers[keyword]));
16295
16296  /* The restrictions on constant-expressions do not apply inside
16297     sizeof expressions.  */
16298  saved_integral_constant_expression_p
16299    = parser->integral_constant_expression_p;
16300  saved_non_integral_constant_expression_p
16301    = parser->non_integral_constant_expression_p;
16302  parser->integral_constant_expression_p = false;
16303
16304  /* Do not actually evaluate the expression.  */
16305  ++skip_evaluation;
16306  /* If it's a `(', then we might be looking at the type-id
16307     construction.  */
16308  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
16309    {
16310      tree type;
16311      bool saved_in_type_id_in_expr_p;
16312
16313      /* We can't be sure yet whether we're looking at a type-id or an
16314	 expression.  */
16315      cp_parser_parse_tentatively (parser);
16316      /* Consume the `('.  */
16317      cp_lexer_consume_token (parser->lexer);
16318      /* Parse the type-id.  */
16319      saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
16320      parser->in_type_id_in_expr_p = true;
16321      type = cp_parser_type_id (parser);
16322      parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
16323      /* Now, look for the trailing `)'.  */
16324      cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16325      /* If all went well, then we're done.  */
16326      if (cp_parser_parse_definitely (parser))
16327	{
16328	  cp_decl_specifier_seq decl_specs;
16329
16330	  /* Build a trivial decl-specifier-seq.  */
16331	  clear_decl_specs (&decl_specs);
16332	  decl_specs.type = type;
16333
16334	  /* Call grokdeclarator to figure out what type this is.  */
16335	  expr = grokdeclarator (NULL,
16336				 &decl_specs,
16337				 TYPENAME,
16338				 /*initialized=*/0,
16339				 /*attrlist=*/NULL);
16340	}
16341    }
16342
16343  /* If the type-id production did not work out, then we must be
16344     looking at the unary-expression production.  */
16345  if (!expr)
16346    expr = cp_parser_unary_expression (parser, /*address_p=*/false,
16347				       /*cast_p=*/false);
16348  /* Go back to evaluating expressions.  */
16349  --skip_evaluation;
16350
16351  /* Free the message we created.  */
16352  free ((char *) parser->type_definition_forbidden_message);
16353  /* And restore the old one.  */
16354  parser->type_definition_forbidden_message = saved_message;
16355  parser->integral_constant_expression_p
16356    = saved_integral_constant_expression_p;
16357  parser->non_integral_constant_expression_p
16358    = saved_non_integral_constant_expression_p;
16359
16360  return expr;
16361}
16362
16363/* If the current declaration has no declarator, return true.  */
16364
16365static bool
16366cp_parser_declares_only_class_p (cp_parser *parser)
16367{
16368  /* If the next token is a `;' or a `,' then there is no
16369     declarator.  */
16370  return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
16371	  || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
16372}
16373
16374/* Update the DECL_SPECS to reflect the storage class indicated by
16375   KEYWORD.  */
16376
16377static void
16378cp_parser_set_storage_class (cp_parser *parser,
16379			     cp_decl_specifier_seq *decl_specs,
16380			     enum rid keyword)
16381{
16382  cp_storage_class storage_class;
16383
16384  if (parser->in_unbraced_linkage_specification_p)
16385    {
16386      error ("invalid use of %qD in linkage specification",
16387	     ridpointers[keyword]);
16388      return;
16389    }
16390  else if (decl_specs->storage_class != sc_none)
16391    {
16392      decl_specs->conflicting_specifiers_p = true;
16393      return;
16394    }
16395
16396  if ((keyword == RID_EXTERN || keyword == RID_STATIC)
16397      && decl_specs->specs[(int) ds_thread])
16398    {
16399      error ("%<__thread%> before %qD", ridpointers[keyword]);
16400      decl_specs->specs[(int) ds_thread] = 0;
16401    }
16402
16403  switch (keyword)
16404    {
16405    case RID_AUTO:
16406      storage_class = sc_auto;
16407      break;
16408    case RID_REGISTER:
16409      storage_class = sc_register;
16410      break;
16411    case RID_STATIC:
16412      storage_class = sc_static;
16413      break;
16414    case RID_EXTERN:
16415      storage_class = sc_extern;
16416      break;
16417    case RID_MUTABLE:
16418      storage_class = sc_mutable;
16419      break;
16420    default:
16421      gcc_unreachable ();
16422    }
16423  decl_specs->storage_class = storage_class;
16424
16425  /* A storage class specifier cannot be applied alongside a typedef
16426     specifier. If there is a typedef specifier present then set
16427     conflicting_specifiers_p which will trigger an error later
16428     on in grokdeclarator. */
16429  if (decl_specs->specs[(int)ds_typedef])
16430    decl_specs->conflicting_specifiers_p = true;
16431}
16432
16433/* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
16434   is true, the type is a user-defined type; otherwise it is a
16435   built-in type specified by a keyword.  */
16436
16437static void
16438cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
16439			      tree type_spec,
16440			      bool user_defined_p)
16441{
16442  decl_specs->any_specifiers_p = true;
16443
16444  /* If the user tries to redeclare bool or wchar_t (with, for
16445     example, in "typedef int wchar_t;") we remember that this is what
16446     happened.  In system headers, we ignore these declarations so
16447     that G++ can work with system headers that are not C++-safe.  */
16448  if (decl_specs->specs[(int) ds_typedef]
16449      && !user_defined_p
16450      && (type_spec == boolean_type_node
16451	  || type_spec == wchar_type_node)
16452      && (decl_specs->type
16453	  || decl_specs->specs[(int) ds_long]
16454	  || decl_specs->specs[(int) ds_short]
16455	  || decl_specs->specs[(int) ds_unsigned]
16456	  || decl_specs->specs[(int) ds_signed]))
16457    {
16458      decl_specs->redefined_builtin_type = type_spec;
16459      if (!decl_specs->type)
16460	{
16461	  decl_specs->type = type_spec;
16462	  decl_specs->user_defined_type_p = false;
16463	}
16464    }
16465  else if (decl_specs->type)
16466    decl_specs->multiple_types_p = true;
16467  else
16468    {
16469      decl_specs->type = type_spec;
16470      decl_specs->user_defined_type_p = user_defined_p;
16471      decl_specs->redefined_builtin_type = NULL_TREE;
16472    }
16473}
16474
16475/* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
16476   Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
16477
16478static bool
16479cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
16480{
16481  return decl_specifiers->specs[(int) ds_friend] != 0;
16482}
16483
16484/* If the next token is of the indicated TYPE, consume it.  Otherwise,
16485   issue an error message indicating that TOKEN_DESC was expected.
16486
16487   Returns the token consumed, if the token had the appropriate type.
16488   Otherwise, returns NULL.  */
16489
16490static cp_token *
16491cp_parser_require (cp_parser* parser,
16492		   enum cpp_ttype type,
16493		   const char* token_desc)
16494{
16495  if (cp_lexer_next_token_is (parser->lexer, type))
16496    return cp_lexer_consume_token (parser->lexer);
16497  else
16498    {
16499      /* Output the MESSAGE -- unless we're parsing tentatively.  */
16500      if (!cp_parser_simulate_error (parser))
16501	{
16502	  char *message = concat ("expected ", token_desc, NULL);
16503	  cp_parser_error (parser, message);
16504	  free (message);
16505	}
16506      return NULL;
16507    }
16508}
16509
16510/* An error message is produced if the next token is not '>'.
16511   All further tokens are skipped until the desired token is
16512   found or '{', '}', ';' or an unbalanced ')' or ']'.  */
16513
16514static void
16515cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
16516{
16517  /* Current level of '< ... >'.  */
16518  unsigned level = 0;
16519  /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
16520  unsigned nesting_depth = 0;
16521
16522  /* Are we ready, yet?  If not, issue error message.  */
16523  if (cp_parser_require (parser, CPP_GREATER, "%<>%>"))
16524    return;
16525
16526  /* Skip tokens until the desired token is found.  */
16527  while (true)
16528    {
16529      /* Peek at the next token.  */
16530      switch (cp_lexer_peek_token (parser->lexer)->type)
16531	{
16532	case CPP_LESS:
16533	  if (!nesting_depth)
16534	    ++level;
16535	  break;
16536
16537	case CPP_GREATER:
16538	  if (!nesting_depth && level-- == 0)
16539	    {
16540	      /* We've reached the token we want, consume it and stop.  */
16541	      cp_lexer_consume_token (parser->lexer);
16542	      return;
16543	    }
16544	  break;
16545
16546	case CPP_OPEN_PAREN:
16547	case CPP_OPEN_SQUARE:
16548	  ++nesting_depth;
16549	  break;
16550
16551	case CPP_CLOSE_PAREN:
16552	case CPP_CLOSE_SQUARE:
16553	  if (nesting_depth-- == 0)
16554	    return;
16555	  break;
16556
16557	case CPP_EOF:
16558	case CPP_PRAGMA_EOL:
16559	case CPP_SEMICOLON:
16560	case CPP_OPEN_BRACE:
16561	case CPP_CLOSE_BRACE:
16562	  /* The '>' was probably forgotten, don't look further.  */
16563	  return;
16564
16565	default:
16566	  break;
16567	}
16568
16569      /* Consume this token.  */
16570      cp_lexer_consume_token (parser->lexer);
16571    }
16572}
16573
16574/* If the next token is the indicated keyword, consume it.  Otherwise,
16575   issue an error message indicating that TOKEN_DESC was expected.
16576
16577   Returns the token consumed, if the token had the appropriate type.
16578   Otherwise, returns NULL.  */
16579
16580static cp_token *
16581cp_parser_require_keyword (cp_parser* parser,
16582			   enum rid keyword,
16583			   const char* token_desc)
16584{
16585  cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
16586
16587  if (token && token->keyword != keyword)
16588    {
16589      dyn_string_t error_msg;
16590
16591      /* Format the error message.  */
16592      error_msg = dyn_string_new (0);
16593      dyn_string_append_cstr (error_msg, "expected ");
16594      dyn_string_append_cstr (error_msg, token_desc);
16595      cp_parser_error (parser, error_msg->s);
16596      dyn_string_delete (error_msg);
16597      return NULL;
16598    }
16599
16600  return token;
16601}
16602
16603/* Returns TRUE iff TOKEN is a token that can begin the body of a
16604   function-definition.  */
16605
16606static bool
16607cp_parser_token_starts_function_definition_p (cp_token* token)
16608{
16609  return (/* An ordinary function-body begins with an `{'.  */
16610	  token->type == CPP_OPEN_BRACE
16611	  /* A ctor-initializer begins with a `:'.  */
16612	  || token->type == CPP_COLON
16613	  /* A function-try-block begins with `try'.  */
16614	  || token->keyword == RID_TRY
16615	  /* The named return value extension begins with `return'.  */
16616	  || token->keyword == RID_RETURN);
16617}
16618
16619/* Returns TRUE iff the next token is the ":" or "{" beginning a class
16620   definition.  */
16621
16622static bool
16623cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
16624{
16625  cp_token *token;
16626
16627  token = cp_lexer_peek_token (parser->lexer);
16628  return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
16629}
16630
16631/* Returns TRUE iff the next token is the "," or ">" ending a
16632   template-argument.  */
16633
16634static bool
16635cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
16636{
16637  cp_token *token;
16638
16639  token = cp_lexer_peek_token (parser->lexer);
16640  return (token->type == CPP_COMMA || token->type == CPP_GREATER);
16641}
16642
16643/* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
16644   (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
16645
16646static bool
16647cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
16648						     size_t n)
16649{
16650  cp_token *token;
16651
16652  token = cp_lexer_peek_nth_token (parser->lexer, n);
16653  if (token->type == CPP_LESS)
16654    return true;
16655  /* Check for the sequence `<::' in the original code. It would be lexed as
16656     `[:', where `[' is a digraph, and there is no whitespace before
16657     `:'.  */
16658  if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
16659    {
16660      cp_token *token2;
16661      token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
16662      if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
16663	return true;
16664    }
16665  return false;
16666}
16667
16668/* Returns the kind of tag indicated by TOKEN, if it is a class-key,
16669   or none_type otherwise.  */
16670
16671static enum tag_types
16672cp_parser_token_is_class_key (cp_token* token)
16673{
16674  switch (token->keyword)
16675    {
16676    case RID_CLASS:
16677      return class_type;
16678    case RID_STRUCT:
16679      return record_type;
16680    case RID_UNION:
16681      return union_type;
16682
16683    default:
16684      return none_type;
16685    }
16686}
16687
16688/* Issue an error message if the CLASS_KEY does not match the TYPE.  */
16689
16690static void
16691cp_parser_check_class_key (enum tag_types class_key, tree type)
16692{
16693  if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
16694    pedwarn ("%qs tag used in naming %q#T",
16695	    class_key == union_type ? "union"
16696	     : class_key == record_type ? "struct" : "class",
16697	     type);
16698}
16699
16700/* Issue an error message if DECL is redeclared with different
16701   access than its original declaration [class.access.spec/3].
16702   This applies to nested classes and nested class templates.
16703   [class.mem/1].  */
16704
16705static void
16706cp_parser_check_access_in_redeclaration (tree decl)
16707{
16708  if (!CLASS_TYPE_P (TREE_TYPE (decl)))
16709    return;
16710
16711  if ((TREE_PRIVATE (decl)
16712       != (current_access_specifier == access_private_node))
16713      || (TREE_PROTECTED (decl)
16714	  != (current_access_specifier == access_protected_node)))
16715    error ("%qD redeclared with different access", decl);
16716}
16717
16718/* Look for the `template' keyword, as a syntactic disambiguator.
16719   Return TRUE iff it is present, in which case it will be
16720   consumed.  */
16721
16722static bool
16723cp_parser_optional_template_keyword (cp_parser *parser)
16724{
16725  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
16726    {
16727      /* The `template' keyword can only be used within templates;
16728	 outside templates the parser can always figure out what is a
16729	 template and what is not.  */
16730      if (!processing_template_decl)
16731	{
16732	  error ("%<template%> (as a disambiguator) is only allowed "
16733		 "within templates");
16734	  /* If this part of the token stream is rescanned, the same
16735	     error message would be generated.  So, we purge the token
16736	     from the stream.  */
16737	  cp_lexer_purge_token (parser->lexer);
16738	  return false;
16739	}
16740      else
16741	{
16742	  /* Consume the `template' keyword.  */
16743	  cp_lexer_consume_token (parser->lexer);
16744	  return true;
16745	}
16746    }
16747
16748  return false;
16749}
16750
16751/* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
16752   set PARSER->SCOPE, and perform other related actions.  */
16753
16754static void
16755cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
16756{
16757  int i;
16758  struct tree_check *check_value;
16759  deferred_access_check *chk;
16760  VEC (deferred_access_check,gc) *checks;
16761
16762  /* Get the stored value.  */
16763  check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
16764  /* Perform any access checks that were deferred.  */
16765  checks = check_value->checks;
16766  if (checks)
16767    {
16768      for (i = 0 ;
16769	   VEC_iterate (deferred_access_check, checks, i, chk) ;
16770	   ++i)
16771	{
16772	  perform_or_defer_access_check (chk->binfo,
16773					 chk->decl,
16774					 chk->diag_decl);
16775	}
16776    }
16777  /* Set the scope from the stored value.  */
16778  parser->scope = check_value->value;
16779  parser->qualifying_scope = check_value->qualifying_scope;
16780  parser->object_scope = NULL_TREE;
16781}
16782
16783/* Consume tokens up through a non-nested END token.  */
16784
16785static void
16786cp_parser_cache_group (cp_parser *parser,
16787		       enum cpp_ttype end,
16788		       unsigned depth)
16789{
16790  while (true)
16791    {
16792      cp_token *token;
16793
16794      /* Abort a parenthesized expression if we encounter a brace.  */
16795      if ((end == CPP_CLOSE_PAREN || depth == 0)
16796	  && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
16797	return;
16798      /* If we've reached the end of the file, stop.  */
16799      if (cp_lexer_next_token_is (parser->lexer, CPP_EOF)
16800	  || (end != CPP_PRAGMA_EOL
16801	      && cp_lexer_next_token_is (parser->lexer, CPP_PRAGMA_EOL)))
16802	return;
16803      /* Consume the next token.  */
16804      token = cp_lexer_consume_token (parser->lexer);
16805      /* See if it starts a new group.  */
16806      if (token->type == CPP_OPEN_BRACE)
16807	{
16808	  cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
16809	  if (depth == 0)
16810	    return;
16811	}
16812      else if (token->type == CPP_OPEN_PAREN)
16813	cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
16814      else if (token->type == CPP_PRAGMA)
16815	cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
16816      else if (token->type == end)
16817	return;
16818    }
16819}
16820
16821/* Begin parsing tentatively.  We always save tokens while parsing
16822   tentatively so that if the tentative parsing fails we can restore the
16823   tokens.  */
16824
16825static void
16826cp_parser_parse_tentatively (cp_parser* parser)
16827{
16828  /* Enter a new parsing context.  */
16829  parser->context = cp_parser_context_new (parser->context);
16830  /* Begin saving tokens.  */
16831  cp_lexer_save_tokens (parser->lexer);
16832  /* In order to avoid repetitive access control error messages,
16833     access checks are queued up until we are no longer parsing
16834     tentatively.  */
16835  push_deferring_access_checks (dk_deferred);
16836}
16837
16838/* Commit to the currently active tentative parse.  */
16839
16840static void
16841cp_parser_commit_to_tentative_parse (cp_parser* parser)
16842{
16843  cp_parser_context *context;
16844  cp_lexer *lexer;
16845
16846  /* Mark all of the levels as committed.  */
16847  lexer = parser->lexer;
16848  for (context = parser->context; context->next; context = context->next)
16849    {
16850      if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
16851	break;
16852      context->status = CP_PARSER_STATUS_KIND_COMMITTED;
16853      while (!cp_lexer_saving_tokens (lexer))
16854	lexer = lexer->next;
16855      cp_lexer_commit_tokens (lexer);
16856    }
16857}
16858
16859/* Abort the currently active tentative parse.  All consumed tokens
16860   will be rolled back, and no diagnostics will be issued.  */
16861
16862static void
16863cp_parser_abort_tentative_parse (cp_parser* parser)
16864{
16865  cp_parser_simulate_error (parser);
16866  /* Now, pretend that we want to see if the construct was
16867     successfully parsed.  */
16868  cp_parser_parse_definitely (parser);
16869}
16870
16871/* Stop parsing tentatively.  If a parse error has occurred, restore the
16872   token stream.  Otherwise, commit to the tokens we have consumed.
16873   Returns true if no error occurred; false otherwise.  */
16874
16875static bool
16876cp_parser_parse_definitely (cp_parser* parser)
16877{
16878  bool error_occurred;
16879  cp_parser_context *context;
16880
16881  /* Remember whether or not an error occurred, since we are about to
16882     destroy that information.  */
16883  error_occurred = cp_parser_error_occurred (parser);
16884  /* Remove the topmost context from the stack.  */
16885  context = parser->context;
16886  parser->context = context->next;
16887  /* If no parse errors occurred, commit to the tentative parse.  */
16888  if (!error_occurred)
16889    {
16890      /* Commit to the tokens read tentatively, unless that was
16891	 already done.  */
16892      if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
16893	cp_lexer_commit_tokens (parser->lexer);
16894
16895      pop_to_parent_deferring_access_checks ();
16896    }
16897  /* Otherwise, if errors occurred, roll back our state so that things
16898     are just as they were before we began the tentative parse.  */
16899  else
16900    {
16901      cp_lexer_rollback_tokens (parser->lexer);
16902      pop_deferring_access_checks ();
16903    }
16904  /* Add the context to the front of the free list.  */
16905  context->next = cp_parser_context_free_list;
16906  cp_parser_context_free_list = context;
16907
16908  return !error_occurred;
16909}
16910
16911/* Returns true if we are parsing tentatively and are not committed to
16912   this tentative parse.  */
16913
16914static bool
16915cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
16916{
16917  return (cp_parser_parsing_tentatively (parser)
16918	  && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
16919}
16920
16921/* Returns nonzero iff an error has occurred during the most recent
16922   tentative parse.  */
16923
16924static bool
16925cp_parser_error_occurred (cp_parser* parser)
16926{
16927  return (cp_parser_parsing_tentatively (parser)
16928	  && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
16929}
16930
16931/* Returns nonzero if GNU extensions are allowed.  */
16932
16933static bool
16934cp_parser_allow_gnu_extensions_p (cp_parser* parser)
16935{
16936  return parser->allow_gnu_extensions_p;
16937}
16938
16939/* Objective-C++ Productions */
16940
16941
16942/* Parse an Objective-C expression, which feeds into a primary-expression
16943   above.
16944
16945   objc-expression:
16946     objc-message-expression
16947     objc-string-literal
16948     objc-encode-expression
16949     objc-protocol-expression
16950     objc-selector-expression
16951
16952  Returns a tree representation of the expression.  */
16953
16954static tree
16955cp_parser_objc_expression (cp_parser* parser)
16956{
16957  /* Try to figure out what kind of declaration is present.  */
16958  cp_token *kwd = cp_lexer_peek_token (parser->lexer);
16959
16960  switch (kwd->type)
16961    {
16962    case CPP_OPEN_SQUARE:
16963      return cp_parser_objc_message_expression (parser);
16964
16965    case CPP_OBJC_STRING:
16966      kwd = cp_lexer_consume_token (parser->lexer);
16967      return objc_build_string_object (kwd->u.value);
16968
16969    case CPP_KEYWORD:
16970      switch (kwd->keyword)
16971	{
16972	case RID_AT_ENCODE:
16973	  return cp_parser_objc_encode_expression (parser);
16974
16975	case RID_AT_PROTOCOL:
16976	  return cp_parser_objc_protocol_expression (parser);
16977
16978	case RID_AT_SELECTOR:
16979	  return cp_parser_objc_selector_expression (parser);
16980
16981	default:
16982	  break;
16983	}
16984    default:
16985      error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
16986      cp_parser_skip_to_end_of_block_or_statement (parser);
16987    }
16988
16989  return error_mark_node;
16990}
16991
16992/* Parse an Objective-C message expression.
16993
16994   objc-message-expression:
16995     [ objc-message-receiver objc-message-args ]
16996
16997   Returns a representation of an Objective-C message.  */
16998
16999static tree
17000cp_parser_objc_message_expression (cp_parser* parser)
17001{
17002  tree receiver, messageargs;
17003
17004  cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
17005  receiver = cp_parser_objc_message_receiver (parser);
17006  messageargs = cp_parser_objc_message_args (parser);
17007  cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
17008
17009  return objc_build_message_expr (build_tree_list (receiver, messageargs));
17010}
17011
17012/* Parse an objc-message-receiver.
17013
17014   objc-message-receiver:
17015     expression
17016     simple-type-specifier
17017
17018  Returns a representation of the type or expression.  */
17019
17020static tree
17021cp_parser_objc_message_receiver (cp_parser* parser)
17022{
17023  tree rcv;
17024
17025  /* An Objective-C message receiver may be either (1) a type
17026     or (2) an expression.  */
17027  cp_parser_parse_tentatively (parser);
17028  rcv = cp_parser_expression (parser, false);
17029
17030  if (cp_parser_parse_definitely (parser))
17031    return rcv;
17032
17033  rcv = cp_parser_simple_type_specifier (parser,
17034					 /*decl_specs=*/NULL,
17035					 CP_PARSER_FLAGS_NONE);
17036
17037  return objc_get_class_reference (rcv);
17038}
17039
17040/* Parse the arguments and selectors comprising an Objective-C message.
17041
17042   objc-message-args:
17043     objc-selector
17044     objc-selector-args
17045     objc-selector-args , objc-comma-args
17046
17047   objc-selector-args:
17048     objc-selector [opt] : assignment-expression
17049     objc-selector-args objc-selector [opt] : assignment-expression
17050
17051   objc-comma-args:
17052     assignment-expression
17053     objc-comma-args , assignment-expression
17054
17055   Returns a TREE_LIST, with TREE_PURPOSE containing a list of
17056   selector arguments and TREE_VALUE containing a list of comma
17057   arguments.  */
17058
17059static tree
17060cp_parser_objc_message_args (cp_parser* parser)
17061{
17062  tree sel_args = NULL_TREE, addl_args = NULL_TREE;
17063  bool maybe_unary_selector_p = true;
17064  cp_token *token = cp_lexer_peek_token (parser->lexer);
17065
17066  while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
17067    {
17068      tree selector = NULL_TREE, arg;
17069
17070      if (token->type != CPP_COLON)
17071	selector = cp_parser_objc_selector (parser);
17072
17073      /* Detect if we have a unary selector.  */
17074      if (maybe_unary_selector_p
17075	  && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
17076	return build_tree_list (selector, NULL_TREE);
17077
17078      maybe_unary_selector_p = false;
17079      cp_parser_require (parser, CPP_COLON, "`:'");
17080      arg = cp_parser_assignment_expression (parser, false);
17081
17082      sel_args
17083	= chainon (sel_args,
17084		   build_tree_list (selector, arg));
17085
17086      token = cp_lexer_peek_token (parser->lexer);
17087    }
17088
17089  /* Handle non-selector arguments, if any. */
17090  while (token->type == CPP_COMMA)
17091    {
17092      tree arg;
17093
17094      cp_lexer_consume_token (parser->lexer);
17095      arg = cp_parser_assignment_expression (parser, false);
17096
17097      addl_args
17098	= chainon (addl_args,
17099		   build_tree_list (NULL_TREE, arg));
17100
17101      token = cp_lexer_peek_token (parser->lexer);
17102    }
17103
17104  return build_tree_list (sel_args, addl_args);
17105}
17106
17107/* Parse an Objective-C encode expression.
17108
17109   objc-encode-expression:
17110     @encode objc-typename
17111
17112   Returns an encoded representation of the type argument.  */
17113
17114static tree
17115cp_parser_objc_encode_expression (cp_parser* parser)
17116{
17117  tree type;
17118
17119  cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
17120  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17121  type = complete_type (cp_parser_type_id (parser));
17122  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17123
17124  if (!type)
17125    {
17126      error ("%<@encode%> must specify a type as an argument");
17127      return error_mark_node;
17128    }
17129
17130  return objc_build_encode_expr (type);
17131}
17132
17133/* Parse an Objective-C @defs expression.  */
17134
17135static tree
17136cp_parser_objc_defs_expression (cp_parser *parser)
17137{
17138  tree name;
17139
17140  cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
17141  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17142  name = cp_parser_identifier (parser);
17143  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17144
17145  return objc_get_class_ivars (name);
17146}
17147
17148/* Parse an Objective-C protocol expression.
17149
17150  objc-protocol-expression:
17151    @protocol ( identifier )
17152
17153  Returns a representation of the protocol expression.  */
17154
17155static tree
17156cp_parser_objc_protocol_expression (cp_parser* parser)
17157{
17158  tree proto;
17159
17160  cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
17161  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17162  proto = cp_parser_identifier (parser);
17163  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17164
17165  return objc_build_protocol_expr (proto);
17166}
17167
17168/* Parse an Objective-C selector expression.
17169
17170   objc-selector-expression:
17171     @selector ( objc-method-signature )
17172
17173   objc-method-signature:
17174     objc-selector
17175     objc-selector-seq
17176
17177   objc-selector-seq:
17178     objc-selector :
17179     objc-selector-seq objc-selector :
17180
17181  Returns a representation of the method selector.  */
17182
17183static tree
17184cp_parser_objc_selector_expression (cp_parser* parser)
17185{
17186  tree sel_seq = NULL_TREE;
17187  bool maybe_unary_selector_p = true;
17188  cp_token *token;
17189
17190  cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
17191  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17192  token = cp_lexer_peek_token (parser->lexer);
17193
17194  while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
17195	 || token->type == CPP_SCOPE)
17196    {
17197      tree selector = NULL_TREE;
17198
17199      if (token->type != CPP_COLON
17200	  || token->type == CPP_SCOPE)
17201	selector = cp_parser_objc_selector (parser);
17202
17203      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
17204	  && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
17205	{
17206	  /* Detect if we have a unary selector.  */
17207	  if (maybe_unary_selector_p)
17208	    {
17209	      sel_seq = selector;
17210	      goto finish_selector;
17211	    }
17212	  else
17213	    {
17214	      cp_parser_error (parser, "expected %<:%>");
17215	    }
17216	}
17217      maybe_unary_selector_p = false;
17218      token = cp_lexer_consume_token (parser->lexer);
17219
17220      if (token->type == CPP_SCOPE)
17221	{
17222	  sel_seq
17223	    = chainon (sel_seq,
17224		       build_tree_list (selector, NULL_TREE));
17225	  sel_seq
17226	    = chainon (sel_seq,
17227		       build_tree_list (NULL_TREE, NULL_TREE));
17228	}
17229      else
17230	sel_seq
17231	  = chainon (sel_seq,
17232		     build_tree_list (selector, NULL_TREE));
17233
17234      token = cp_lexer_peek_token (parser->lexer);
17235    }
17236
17237 finish_selector:
17238  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17239
17240  return objc_build_selector_expr (sel_seq);
17241}
17242
17243/* Parse a list of identifiers.
17244
17245   objc-identifier-list:
17246     identifier
17247     objc-identifier-list , identifier
17248
17249   Returns a TREE_LIST of identifier nodes.  */
17250
17251static tree
17252cp_parser_objc_identifier_list (cp_parser* parser)
17253{
17254  tree list = build_tree_list (NULL_TREE, cp_parser_identifier (parser));
17255  cp_token *sep = cp_lexer_peek_token (parser->lexer);
17256
17257  while (sep->type == CPP_COMMA)
17258    {
17259      cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17260      list = chainon (list,
17261		      build_tree_list (NULL_TREE,
17262				       cp_parser_identifier (parser)));
17263      sep = cp_lexer_peek_token (parser->lexer);
17264    }
17265
17266  return list;
17267}
17268
17269/* Parse an Objective-C alias declaration.
17270
17271   objc-alias-declaration:
17272     @compatibility_alias identifier identifier ;
17273
17274   This function registers the alias mapping with the Objective-C front-end.
17275   It returns nothing.  */
17276
17277static void
17278cp_parser_objc_alias_declaration (cp_parser* parser)
17279{
17280  tree alias, orig;
17281
17282  cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
17283  alias = cp_parser_identifier (parser);
17284  orig = cp_parser_identifier (parser);
17285  objc_declare_alias (alias, orig);
17286  cp_parser_consume_semicolon_at_end_of_statement (parser);
17287}
17288
17289/* Parse an Objective-C class forward-declaration.
17290
17291   objc-class-declaration:
17292     @class objc-identifier-list ;
17293
17294   The function registers the forward declarations with the Objective-C
17295   front-end.  It returns nothing.  */
17296
17297static void
17298cp_parser_objc_class_declaration (cp_parser* parser)
17299{
17300  cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
17301  objc_declare_class (cp_parser_objc_identifier_list (parser));
17302  cp_parser_consume_semicolon_at_end_of_statement (parser);
17303}
17304
17305/* Parse a list of Objective-C protocol references.
17306
17307   objc-protocol-refs-opt:
17308     objc-protocol-refs [opt]
17309
17310   objc-protocol-refs:
17311     < objc-identifier-list >
17312
17313   Returns a TREE_LIST of identifiers, if any.  */
17314
17315static tree
17316cp_parser_objc_protocol_refs_opt (cp_parser* parser)
17317{
17318  tree protorefs = NULL_TREE;
17319
17320  if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
17321    {
17322      cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
17323      protorefs = cp_parser_objc_identifier_list (parser);
17324      cp_parser_require (parser, CPP_GREATER, "`>'");
17325    }
17326
17327  return protorefs;
17328}
17329
17330/* Parse a Objective-C visibility specification.  */
17331
17332static void
17333cp_parser_objc_visibility_spec (cp_parser* parser)
17334{
17335  cp_token *vis = cp_lexer_peek_token (parser->lexer);
17336
17337  switch (vis->keyword)
17338    {
17339    case RID_AT_PRIVATE:
17340      objc_set_visibility (2);
17341      break;
17342    case RID_AT_PROTECTED:
17343      objc_set_visibility (0);
17344      break;
17345    case RID_AT_PUBLIC:
17346      objc_set_visibility (1);
17347      break;
17348    default:
17349      return;
17350    }
17351
17352  /* Eat '@private'/'@protected'/'@public'.  */
17353  cp_lexer_consume_token (parser->lexer);
17354}
17355
17356/* Parse an Objective-C method type.  */
17357
17358static void
17359cp_parser_objc_method_type (cp_parser* parser)
17360{
17361  objc_set_method_type
17362   (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS
17363    ? PLUS_EXPR
17364    : MINUS_EXPR);
17365}
17366
17367/* Parse an Objective-C protocol qualifier.  */
17368
17369static tree
17370cp_parser_objc_protocol_qualifiers (cp_parser* parser)
17371{
17372  tree quals = NULL_TREE, node;
17373  cp_token *token = cp_lexer_peek_token (parser->lexer);
17374
17375  node = token->u.value;
17376
17377  while (node && TREE_CODE (node) == IDENTIFIER_NODE
17378	 && (node == ridpointers [(int) RID_IN]
17379	     || node == ridpointers [(int) RID_OUT]
17380	     || node == ridpointers [(int) RID_INOUT]
17381	     || node == ridpointers [(int) RID_BYCOPY]
17382	     || node == ridpointers [(int) RID_BYREF]
17383	     || node == ridpointers [(int) RID_ONEWAY]))
17384    {
17385      quals = tree_cons (NULL_TREE, node, quals);
17386      cp_lexer_consume_token (parser->lexer);
17387      token = cp_lexer_peek_token (parser->lexer);
17388      node = token->u.value;
17389    }
17390
17391  return quals;
17392}
17393
17394/* Parse an Objective-C typename.  */
17395
17396static tree
17397cp_parser_objc_typename (cp_parser* parser)
17398{
17399  tree typename = NULL_TREE;
17400
17401  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
17402    {
17403      tree proto_quals, cp_type = NULL_TREE;
17404
17405      cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
17406      proto_quals = cp_parser_objc_protocol_qualifiers (parser);
17407
17408      /* An ObjC type name may consist of just protocol qualifiers, in which
17409	 case the type shall default to 'id'.  */
17410      if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
17411	cp_type = cp_parser_type_id (parser);
17412
17413      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17414      typename = build_tree_list (proto_quals, cp_type);
17415    }
17416
17417  return typename;
17418}
17419
17420/* Check to see if TYPE refers to an Objective-C selector name.  */
17421
17422static bool
17423cp_parser_objc_selector_p (enum cpp_ttype type)
17424{
17425  return (type == CPP_NAME || type == CPP_KEYWORD
17426	  || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
17427	  || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
17428	  || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
17429	  || type == CPP_XOR || type == CPP_XOR_EQ);
17430}
17431
17432/* Parse an Objective-C selector.  */
17433
17434static tree
17435cp_parser_objc_selector (cp_parser* parser)
17436{
17437  cp_token *token = cp_lexer_consume_token (parser->lexer);
17438
17439  if (!cp_parser_objc_selector_p (token->type))
17440    {
17441      error ("invalid Objective-C++ selector name");
17442      return error_mark_node;
17443    }
17444
17445  /* C++ operator names are allowed to appear in ObjC selectors.  */
17446  switch (token->type)
17447    {
17448    case CPP_AND_AND: return get_identifier ("and");
17449    case CPP_AND_EQ: return get_identifier ("and_eq");
17450    case CPP_AND: return get_identifier ("bitand");
17451    case CPP_OR: return get_identifier ("bitor");
17452    case CPP_COMPL: return get_identifier ("compl");
17453    case CPP_NOT: return get_identifier ("not");
17454    case CPP_NOT_EQ: return get_identifier ("not_eq");
17455    case CPP_OR_OR: return get_identifier ("or");
17456    case CPP_OR_EQ: return get_identifier ("or_eq");
17457    case CPP_XOR: return get_identifier ("xor");
17458    case CPP_XOR_EQ: return get_identifier ("xor_eq");
17459    default: return token->u.value;
17460    }
17461}
17462
17463/* Parse an Objective-C params list.  */
17464
17465static tree
17466cp_parser_objc_method_keyword_params (cp_parser* parser)
17467{
17468  tree params = NULL_TREE;
17469  bool maybe_unary_selector_p = true;
17470  cp_token *token = cp_lexer_peek_token (parser->lexer);
17471
17472  while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
17473    {
17474      tree selector = NULL_TREE, typename, identifier;
17475
17476      if (token->type != CPP_COLON)
17477	selector = cp_parser_objc_selector (parser);
17478
17479      /* Detect if we have a unary selector.  */
17480      if (maybe_unary_selector_p
17481	  && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
17482	return selector;
17483
17484      maybe_unary_selector_p = false;
17485      cp_parser_require (parser, CPP_COLON, "`:'");
17486      typename = cp_parser_objc_typename (parser);
17487      identifier = cp_parser_identifier (parser);
17488
17489      params
17490	= chainon (params,
17491		   objc_build_keyword_decl (selector,
17492					    typename,
17493					    identifier));
17494
17495      token = cp_lexer_peek_token (parser->lexer);
17496    }
17497
17498  return params;
17499}
17500
17501/* Parse the non-keyword Objective-C params.  */
17502
17503static tree
17504cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp)
17505{
17506  tree params = make_node (TREE_LIST);
17507  cp_token *token = cp_lexer_peek_token (parser->lexer);
17508  *ellipsisp = false;  /* Initially, assume no ellipsis.  */
17509
17510  while (token->type == CPP_COMMA)
17511    {
17512      cp_parameter_declarator *parmdecl;
17513      tree parm;
17514
17515      cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17516      token = cp_lexer_peek_token (parser->lexer);
17517
17518      if (token->type == CPP_ELLIPSIS)
17519	{
17520	  cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
17521	  *ellipsisp = true;
17522	  break;
17523	}
17524
17525      parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
17526      parm = grokdeclarator (parmdecl->declarator,
17527			     &parmdecl->decl_specifiers,
17528			     PARM, /*initialized=*/0,
17529			     /*attrlist=*/NULL);
17530
17531      chainon (params, build_tree_list (NULL_TREE, parm));
17532      token = cp_lexer_peek_token (parser->lexer);
17533    }
17534
17535  return params;
17536}
17537
17538/* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
17539
17540static void
17541cp_parser_objc_interstitial_code (cp_parser* parser)
17542{
17543  cp_token *token = cp_lexer_peek_token (parser->lexer);
17544
17545  /* If the next token is `extern' and the following token is a string
17546     literal, then we have a linkage specification.  */
17547  if (token->keyword == RID_EXTERN
17548      && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser->lexer, 2)))
17549    cp_parser_linkage_specification (parser);
17550  /* Handle #pragma, if any.  */
17551  else if (token->type == CPP_PRAGMA)
17552    cp_parser_pragma (parser, pragma_external);
17553  /* Allow stray semicolons.  */
17554  else if (token->type == CPP_SEMICOLON)
17555    cp_lexer_consume_token (parser->lexer);
17556  /* Finally, try to parse a block-declaration, or a function-definition.  */
17557  else
17558    cp_parser_block_declaration (parser, /*statement_p=*/false);
17559}
17560
17561/* Parse a method signature.  */
17562
17563static tree
17564cp_parser_objc_method_signature (cp_parser* parser)
17565{
17566  tree rettype, kwdparms, optparms;
17567  bool ellipsis = false;
17568
17569  cp_parser_objc_method_type (parser);
17570  rettype = cp_parser_objc_typename (parser);
17571  kwdparms = cp_parser_objc_method_keyword_params (parser);
17572  optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis);
17573
17574  return objc_build_method_signature (rettype, kwdparms, optparms, ellipsis);
17575}
17576
17577/* Pars an Objective-C method prototype list.  */
17578
17579static void
17580cp_parser_objc_method_prototype_list (cp_parser* parser)
17581{
17582  cp_token *token = cp_lexer_peek_token (parser->lexer);
17583
17584  while (token->keyword != RID_AT_END)
17585    {
17586      if (token->type == CPP_PLUS || token->type == CPP_MINUS)
17587	{
17588	  objc_add_method_declaration
17589	   (cp_parser_objc_method_signature (parser));
17590	  cp_parser_consume_semicolon_at_end_of_statement (parser);
17591	}
17592      else
17593	/* Allow for interspersed non-ObjC++ code.  */
17594	cp_parser_objc_interstitial_code (parser);
17595
17596      token = cp_lexer_peek_token (parser->lexer);
17597    }
17598
17599  cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17600  objc_finish_interface ();
17601}
17602
17603/* Parse an Objective-C method definition list.  */
17604
17605static void
17606cp_parser_objc_method_definition_list (cp_parser* parser)
17607{
17608  cp_token *token = cp_lexer_peek_token (parser->lexer);
17609
17610  while (token->keyword != RID_AT_END)
17611    {
17612      tree meth;
17613
17614      if (token->type == CPP_PLUS || token->type == CPP_MINUS)
17615	{
17616	  push_deferring_access_checks (dk_deferred);
17617	  objc_start_method_definition
17618	   (cp_parser_objc_method_signature (parser));
17619
17620	  /* For historical reasons, we accept an optional semicolon.  */
17621	  if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17622	    cp_lexer_consume_token (parser->lexer);
17623
17624	  perform_deferred_access_checks ();
17625	  stop_deferring_access_checks ();
17626	  meth = cp_parser_function_definition_after_declarator (parser,
17627								 false);
17628	  pop_deferring_access_checks ();
17629	  objc_finish_method_definition (meth);
17630	}
17631      else
17632	/* Allow for interspersed non-ObjC++ code.  */
17633	cp_parser_objc_interstitial_code (parser);
17634
17635      token = cp_lexer_peek_token (parser->lexer);
17636    }
17637
17638  cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17639  objc_finish_implementation ();
17640}
17641
17642/* Parse Objective-C ivars.  */
17643
17644static void
17645cp_parser_objc_class_ivars (cp_parser* parser)
17646{
17647  cp_token *token = cp_lexer_peek_token (parser->lexer);
17648
17649  if (token->type != CPP_OPEN_BRACE)
17650    return;	/* No ivars specified.  */
17651
17652  cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
17653  token = cp_lexer_peek_token (parser->lexer);
17654
17655  while (token->type != CPP_CLOSE_BRACE)
17656    {
17657      cp_decl_specifier_seq declspecs;
17658      int decl_class_or_enum_p;
17659      tree prefix_attributes;
17660
17661      cp_parser_objc_visibility_spec (parser);
17662
17663      if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
17664	break;
17665
17666      cp_parser_decl_specifier_seq (parser,
17667				    CP_PARSER_FLAGS_OPTIONAL,
17668				    &declspecs,
17669				    &decl_class_or_enum_p);
17670      prefix_attributes = declspecs.attributes;
17671      declspecs.attributes = NULL_TREE;
17672
17673      /* Keep going until we hit the `;' at the end of the
17674	 declaration.  */
17675      while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
17676	{
17677	  tree width = NULL_TREE, attributes, first_attribute, decl;
17678	  cp_declarator *declarator = NULL;
17679	  int ctor_dtor_or_conv_p;
17680
17681	  /* Check for a (possibly unnamed) bitfield declaration.  */
17682	  token = cp_lexer_peek_token (parser->lexer);
17683	  if (token->type == CPP_COLON)
17684	    goto eat_colon;
17685
17686	  if (token->type == CPP_NAME
17687	      && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
17688		  == CPP_COLON))
17689	    {
17690	      /* Get the name of the bitfield.  */
17691	      declarator = make_id_declarator (NULL_TREE,
17692					       cp_parser_identifier (parser),
17693					       sfk_none);
17694
17695	     eat_colon:
17696	      cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
17697	      /* Get the width of the bitfield.  */
17698	      width
17699		= cp_parser_constant_expression (parser,
17700						 /*allow_non_constant=*/false,
17701						 NULL);
17702	    }
17703	  else
17704	    {
17705	      /* Parse the declarator.  */
17706	      declarator
17707		= cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
17708					&ctor_dtor_or_conv_p,
17709					/*parenthesized_p=*/NULL,
17710					/*member_p=*/false);
17711	    }
17712
17713	  /* Look for attributes that apply to the ivar.  */
17714	  attributes = cp_parser_attributes_opt (parser);
17715	  /* Remember which attributes are prefix attributes and
17716	     which are not.  */
17717	  first_attribute = attributes;
17718	  /* Combine the attributes.  */
17719	  attributes = chainon (prefix_attributes, attributes);
17720
17721	  if (width)
17722	    {
17723	      /* Create the bitfield declaration.  */
17724	      decl = grokbitfield (declarator, &declspecs, width);
17725	      cplus_decl_attributes (&decl, attributes, /*flags=*/0);
17726	    }
17727	  else
17728	    decl = grokfield (declarator, &declspecs,
17729			      NULL_TREE, /*init_const_expr_p=*/false,
17730			      NULL_TREE, attributes);
17731
17732	  /* Add the instance variable.  */
17733	  objc_add_instance_variable (decl);
17734
17735	  /* Reset PREFIX_ATTRIBUTES.  */
17736	  while (attributes && TREE_CHAIN (attributes) != first_attribute)
17737	    attributes = TREE_CHAIN (attributes);
17738	  if (attributes)
17739	    TREE_CHAIN (attributes) = NULL_TREE;
17740
17741	  token = cp_lexer_peek_token (parser->lexer);
17742
17743	  if (token->type == CPP_COMMA)
17744	    {
17745	      cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17746	      continue;
17747	    }
17748	  break;
17749	}
17750
17751      cp_parser_consume_semicolon_at_end_of_statement (parser);
17752      token = cp_lexer_peek_token (parser->lexer);
17753    }
17754
17755  cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
17756  /* For historical reasons, we accept an optional semicolon.  */
17757  if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17758    cp_lexer_consume_token (parser->lexer);
17759}
17760
17761/* Parse an Objective-C protocol declaration.  */
17762
17763static void
17764cp_parser_objc_protocol_declaration (cp_parser* parser)
17765{
17766  tree proto, protorefs;
17767  cp_token *tok;
17768
17769  cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
17770  if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
17771    {
17772      error ("identifier expected after %<@protocol%>");
17773      goto finish;
17774    }
17775
17776  /* See if we have a forward declaration or a definition.  */
17777  tok = cp_lexer_peek_nth_token (parser->lexer, 2);
17778
17779  /* Try a forward declaration first.  */
17780  if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
17781    {
17782      objc_declare_protocols (cp_parser_objc_identifier_list (parser));
17783     finish:
17784      cp_parser_consume_semicolon_at_end_of_statement (parser);
17785    }
17786
17787  /* Ok, we got a full-fledged definition (or at least should).  */
17788  else
17789    {
17790      proto = cp_parser_identifier (parser);
17791      protorefs = cp_parser_objc_protocol_refs_opt (parser);
17792      objc_start_protocol (proto, protorefs);
17793      cp_parser_objc_method_prototype_list (parser);
17794    }
17795}
17796
17797/* Parse an Objective-C superclass or category.  */
17798
17799static void
17800cp_parser_objc_superclass_or_category (cp_parser *parser, tree *super,
17801							  tree *categ)
17802{
17803  cp_token *next = cp_lexer_peek_token (parser->lexer);
17804
17805  *super = *categ = NULL_TREE;
17806  if (next->type == CPP_COLON)
17807    {
17808      cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
17809      *super = cp_parser_identifier (parser);
17810    }
17811  else if (next->type == CPP_OPEN_PAREN)
17812    {
17813      cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
17814      *categ = cp_parser_identifier (parser);
17815      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17816    }
17817}
17818
17819/* Parse an Objective-C class interface.  */
17820
17821static void
17822cp_parser_objc_class_interface (cp_parser* parser)
17823{
17824  tree name, super, categ, protos;
17825
17826  cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
17827  name = cp_parser_identifier (parser);
17828  cp_parser_objc_superclass_or_category (parser, &super, &categ);
17829  protos = cp_parser_objc_protocol_refs_opt (parser);
17830
17831  /* We have either a class or a category on our hands.  */
17832  if (categ)
17833    objc_start_category_interface (name, categ, protos);
17834  else
17835    {
17836      objc_start_class_interface (name, super, protos);
17837      /* Handle instance variable declarations, if any.  */
17838      cp_parser_objc_class_ivars (parser);
17839      objc_continue_interface ();
17840    }
17841
17842  cp_parser_objc_method_prototype_list (parser);
17843}
17844
17845/* Parse an Objective-C class implementation.  */
17846
17847static void
17848cp_parser_objc_class_implementation (cp_parser* parser)
17849{
17850  tree name, super, categ;
17851
17852  cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
17853  name = cp_parser_identifier (parser);
17854  cp_parser_objc_superclass_or_category (parser, &super, &categ);
17855
17856  /* We have either a class or a category on our hands.  */
17857  if (categ)
17858    objc_start_category_implementation (name, categ);
17859  else
17860    {
17861      objc_start_class_implementation (name, super);
17862      /* Handle instance variable declarations, if any.  */
17863      cp_parser_objc_class_ivars (parser);
17864      objc_continue_implementation ();
17865    }
17866
17867  cp_parser_objc_method_definition_list (parser);
17868}
17869
17870/* Consume the @end token and finish off the implementation.  */
17871
17872static void
17873cp_parser_objc_end_implementation (cp_parser* parser)
17874{
17875  cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17876  objc_finish_implementation ();
17877}
17878
17879/* Parse an Objective-C declaration.  */
17880
17881static void
17882cp_parser_objc_declaration (cp_parser* parser)
17883{
17884  /* Try to figure out what kind of declaration is present.  */
17885  cp_token *kwd = cp_lexer_peek_token (parser->lexer);
17886
17887  switch (kwd->keyword)
17888    {
17889    case RID_AT_ALIAS:
17890      cp_parser_objc_alias_declaration (parser);
17891      break;
17892    case RID_AT_CLASS:
17893      cp_parser_objc_class_declaration (parser);
17894      break;
17895    case RID_AT_PROTOCOL:
17896      cp_parser_objc_protocol_declaration (parser);
17897      break;
17898    case RID_AT_INTERFACE:
17899      cp_parser_objc_class_interface (parser);
17900      break;
17901    case RID_AT_IMPLEMENTATION:
17902      cp_parser_objc_class_implementation (parser);
17903      break;
17904    case RID_AT_END:
17905      cp_parser_objc_end_implementation (parser);
17906      break;
17907    default:
17908      error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
17909      cp_parser_skip_to_end_of_block_or_statement (parser);
17910    }
17911}
17912
17913/* Parse an Objective-C try-catch-finally statement.
17914
17915   objc-try-catch-finally-stmt:
17916     @try compound-statement objc-catch-clause-seq [opt]
17917       objc-finally-clause [opt]
17918
17919   objc-catch-clause-seq:
17920     objc-catch-clause objc-catch-clause-seq [opt]
17921
17922   objc-catch-clause:
17923     @catch ( exception-declaration ) compound-statement
17924
17925   objc-finally-clause
17926     @finally compound-statement
17927
17928   Returns NULL_TREE.  */
17929
17930static tree
17931cp_parser_objc_try_catch_finally_statement (cp_parser *parser) {
17932  location_t location;
17933  tree stmt;
17934
17935  cp_parser_require_keyword (parser, RID_AT_TRY, "`@try'");
17936  location = cp_lexer_peek_token (parser->lexer)->location;
17937  /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
17938     node, lest it get absorbed into the surrounding block.  */
17939  stmt = push_stmt_list ();
17940  cp_parser_compound_statement (parser, NULL, false);
17941  objc_begin_try_stmt (location, pop_stmt_list (stmt));
17942
17943  while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
17944    {
17945      cp_parameter_declarator *parmdecl;
17946      tree parm;
17947
17948      cp_lexer_consume_token (parser->lexer);
17949      cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17950      parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
17951      parm = grokdeclarator (parmdecl->declarator,
17952			     &parmdecl->decl_specifiers,
17953			     PARM, /*initialized=*/0,
17954			     /*attrlist=*/NULL);
17955      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17956      objc_begin_catch_clause (parm);
17957      cp_parser_compound_statement (parser, NULL, false);
17958      objc_finish_catch_clause ();
17959    }
17960
17961  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
17962    {
17963      cp_lexer_consume_token (parser->lexer);
17964      location = cp_lexer_peek_token (parser->lexer)->location;
17965      /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
17966	 node, lest it get absorbed into the surrounding block.  */
17967      stmt = push_stmt_list ();
17968      cp_parser_compound_statement (parser, NULL, false);
17969      objc_build_finally_clause (location, pop_stmt_list (stmt));
17970    }
17971
17972  return objc_finish_try_stmt ();
17973}
17974
17975/* Parse an Objective-C synchronized statement.
17976
17977   objc-synchronized-stmt:
17978     @synchronized ( expression ) compound-statement
17979
17980   Returns NULL_TREE.  */
17981
17982static tree
17983cp_parser_objc_synchronized_statement (cp_parser *parser) {
17984  location_t location;
17985  tree lock, stmt;
17986
17987  cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, "`@synchronized'");
17988
17989  location = cp_lexer_peek_token (parser->lexer)->location;
17990  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17991  lock = cp_parser_expression (parser, false);
17992  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17993
17994  /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
17995     node, lest it get absorbed into the surrounding block.  */
17996  stmt = push_stmt_list ();
17997  cp_parser_compound_statement (parser, NULL, false);
17998
17999  return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
18000}
18001
18002/* Parse an Objective-C throw statement.
18003
18004   objc-throw-stmt:
18005     @throw assignment-expression [opt] ;
18006
18007   Returns a constructed '@throw' statement.  */
18008
18009static tree
18010cp_parser_objc_throw_statement (cp_parser *parser) {
18011  tree expr = NULL_TREE;
18012
18013  cp_parser_require_keyword (parser, RID_AT_THROW, "`@throw'");
18014
18015  if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18016    expr = cp_parser_assignment_expression (parser, false);
18017
18018  cp_parser_consume_semicolon_at_end_of_statement (parser);
18019
18020  return objc_build_throw_stmt (expr);
18021}
18022
18023/* Parse an Objective-C statement.  */
18024
18025static tree
18026cp_parser_objc_statement (cp_parser * parser) {
18027  /* Try to figure out what kind of declaration is present.  */
18028  cp_token *kwd = cp_lexer_peek_token (parser->lexer);
18029
18030  switch (kwd->keyword)
18031    {
18032    case RID_AT_TRY:
18033      return cp_parser_objc_try_catch_finally_statement (parser);
18034    case RID_AT_SYNCHRONIZED:
18035      return cp_parser_objc_synchronized_statement (parser);
18036    case RID_AT_THROW:
18037      return cp_parser_objc_throw_statement (parser);
18038    default:
18039      error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
18040      cp_parser_skip_to_end_of_block_or_statement (parser);
18041    }
18042
18043  return error_mark_node;
18044}
18045
18046/* OpenMP 2.5 parsing routines.  */
18047
18048/* All OpenMP clauses.  OpenMP 2.5.  */
18049typedef enum pragma_omp_clause {
18050  PRAGMA_OMP_CLAUSE_NONE = 0,
18051
18052  PRAGMA_OMP_CLAUSE_COPYIN,
18053  PRAGMA_OMP_CLAUSE_COPYPRIVATE,
18054  PRAGMA_OMP_CLAUSE_DEFAULT,
18055  PRAGMA_OMP_CLAUSE_FIRSTPRIVATE,
18056  PRAGMA_OMP_CLAUSE_IF,
18057  PRAGMA_OMP_CLAUSE_LASTPRIVATE,
18058  PRAGMA_OMP_CLAUSE_NOWAIT,
18059  PRAGMA_OMP_CLAUSE_NUM_THREADS,
18060  PRAGMA_OMP_CLAUSE_ORDERED,
18061  PRAGMA_OMP_CLAUSE_PRIVATE,
18062  PRAGMA_OMP_CLAUSE_REDUCTION,
18063  PRAGMA_OMP_CLAUSE_SCHEDULE,
18064  PRAGMA_OMP_CLAUSE_SHARED
18065} pragma_omp_clause;
18066
18067/* Returns name of the next clause.
18068   If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
18069   the token is not consumed.  Otherwise appropriate pragma_omp_clause is
18070   returned and the token is consumed.  */
18071
18072static pragma_omp_clause
18073cp_parser_omp_clause_name (cp_parser *parser)
18074{
18075  pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
18076
18077  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
18078    result = PRAGMA_OMP_CLAUSE_IF;
18079  else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
18080    result = PRAGMA_OMP_CLAUSE_DEFAULT;
18081  else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
18082    result = PRAGMA_OMP_CLAUSE_PRIVATE;
18083  else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18084    {
18085      tree id = cp_lexer_peek_token (parser->lexer)->u.value;
18086      const char *p = IDENTIFIER_POINTER (id);
18087
18088      switch (p[0])
18089	{
18090	case 'c':
18091	  if (!strcmp ("copyin", p))
18092	    result = PRAGMA_OMP_CLAUSE_COPYIN;
18093	  else if (!strcmp ("copyprivate", p))
18094	    result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
18095	  break;
18096	case 'f':
18097	  if (!strcmp ("firstprivate", p))
18098	    result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
18099	  break;
18100	case 'l':
18101	  if (!strcmp ("lastprivate", p))
18102	    result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
18103	  break;
18104	case 'n':
18105	  if (!strcmp ("nowait", p))
18106	    result = PRAGMA_OMP_CLAUSE_NOWAIT;
18107	  else if (!strcmp ("num_threads", p))
18108	    result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
18109	  break;
18110	case 'o':
18111	  if (!strcmp ("ordered", p))
18112	    result = PRAGMA_OMP_CLAUSE_ORDERED;
18113	  break;
18114	case 'r':
18115	  if (!strcmp ("reduction", p))
18116	    result = PRAGMA_OMP_CLAUSE_REDUCTION;
18117	  break;
18118	case 's':
18119	  if (!strcmp ("schedule", p))
18120	    result = PRAGMA_OMP_CLAUSE_SCHEDULE;
18121	  else if (!strcmp ("shared", p))
18122	    result = PRAGMA_OMP_CLAUSE_SHARED;
18123	  break;
18124	}
18125    }
18126
18127  if (result != PRAGMA_OMP_CLAUSE_NONE)
18128    cp_lexer_consume_token (parser->lexer);
18129
18130  return result;
18131}
18132
18133/* Validate that a clause of the given type does not already exist.  */
18134
18135static void
18136check_no_duplicate_clause (tree clauses, enum tree_code code, const char *name)
18137{
18138  tree c;
18139
18140  for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
18141    if (OMP_CLAUSE_CODE (c) == code)
18142      {
18143	error ("too many %qs clauses", name);
18144	break;
18145      }
18146}
18147
18148/* OpenMP 2.5:
18149   variable-list:
18150     identifier
18151     variable-list , identifier
18152
18153   In addition, we match a closing parenthesis.  An opening parenthesis
18154   will have been consumed by the caller.
18155
18156   If KIND is nonzero, create the appropriate node and install the decl
18157   in OMP_CLAUSE_DECL and add the node to the head of the list.
18158
18159   If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
18160   return the list created.  */
18161
18162static tree
18163cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
18164				tree list)
18165{
18166  while (1)
18167    {
18168      tree name, decl;
18169
18170      name = cp_parser_id_expression (parser, /*template_p=*/false,
18171				      /*check_dependency_p=*/true,
18172				      /*template_p=*/NULL,
18173				      /*declarator_p=*/false,
18174				      /*optional_p=*/false);
18175      if (name == error_mark_node)
18176	goto skip_comma;
18177
18178      decl = cp_parser_lookup_name_simple (parser, name);
18179      if (decl == error_mark_node)
18180	cp_parser_name_lookup_error (parser, name, decl, NULL);
18181      else if (kind != 0)
18182	{
18183	  tree u = build_omp_clause (kind);
18184	  OMP_CLAUSE_DECL (u) = decl;
18185	  OMP_CLAUSE_CHAIN (u) = list;
18186	  list = u;
18187	}
18188      else
18189	list = tree_cons (decl, NULL_TREE, list);
18190
18191    get_comma:
18192      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
18193	break;
18194      cp_lexer_consume_token (parser->lexer);
18195    }
18196
18197  if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18198    {
18199      int ending;
18200
18201      /* Try to resync to an unnested comma.  Copied from
18202	 cp_parser_parenthesized_expression_list.  */
18203    skip_comma:
18204      ending = cp_parser_skip_to_closing_parenthesis (parser,
18205						      /*recovering=*/true,
18206						      /*or_comma=*/true,
18207						      /*consume_paren=*/true);
18208      if (ending < 0)
18209	goto get_comma;
18210    }
18211
18212  return list;
18213}
18214
18215/* Similarly, but expect leading and trailing parenthesis.  This is a very
18216   common case for omp clauses.  */
18217
18218static tree
18219cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
18220{
18221  if (cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18222    return cp_parser_omp_var_list_no_open (parser, kind, list);
18223  return list;
18224}
18225
18226/* OpenMP 2.5:
18227   default ( shared | none ) */
18228
18229static tree
18230cp_parser_omp_clause_default (cp_parser *parser, tree list)
18231{
18232  enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
18233  tree c;
18234
18235  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18236    return list;
18237  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18238    {
18239      tree id = cp_lexer_peek_token (parser->lexer)->u.value;
18240      const char *p = IDENTIFIER_POINTER (id);
18241
18242      switch (p[0])
18243	{
18244	case 'n':
18245	  if (strcmp ("none", p) != 0)
18246	    goto invalid_kind;
18247	  kind = OMP_CLAUSE_DEFAULT_NONE;
18248	  break;
18249
18250	case 's':
18251	  if (strcmp ("shared", p) != 0)
18252	    goto invalid_kind;
18253	  kind = OMP_CLAUSE_DEFAULT_SHARED;
18254	  break;
18255
18256	default:
18257	  goto invalid_kind;
18258	}
18259
18260      cp_lexer_consume_token (parser->lexer);
18261    }
18262  else
18263    {
18264    invalid_kind:
18265      cp_parser_error (parser, "expected %<none%> or %<shared%>");
18266    }
18267
18268  if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18269    cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18270					   /*or_comma=*/false,
18271					   /*consume_paren=*/true);
18272
18273  if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
18274    return list;
18275
18276  check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default");
18277  c = build_omp_clause (OMP_CLAUSE_DEFAULT);
18278  OMP_CLAUSE_CHAIN (c) = list;
18279  OMP_CLAUSE_DEFAULT_KIND (c) = kind;
18280
18281  return c;
18282}
18283
18284/* OpenMP 2.5:
18285   if ( expression ) */
18286
18287static tree
18288cp_parser_omp_clause_if (cp_parser *parser, tree list)
18289{
18290  tree t, c;
18291
18292  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18293    return list;
18294
18295  t = cp_parser_condition (parser);
18296
18297  if (t == error_mark_node
18298      || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18299    cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18300					   /*or_comma=*/false,
18301					   /*consume_paren=*/true);
18302
18303  check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if");
18304
18305  c = build_omp_clause (OMP_CLAUSE_IF);
18306  OMP_CLAUSE_IF_EXPR (c) = t;
18307  OMP_CLAUSE_CHAIN (c) = list;
18308
18309  return c;
18310}
18311
18312/* OpenMP 2.5:
18313   nowait */
18314
18315static tree
18316cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
18317{
18318  tree c;
18319
18320  check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait");
18321
18322  c = build_omp_clause (OMP_CLAUSE_NOWAIT);
18323  OMP_CLAUSE_CHAIN (c) = list;
18324  return c;
18325}
18326
18327/* OpenMP 2.5:
18328   num_threads ( expression ) */
18329
18330static tree
18331cp_parser_omp_clause_num_threads (cp_parser *parser, tree list)
18332{
18333  tree t, c;
18334
18335  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18336    return list;
18337
18338  t = cp_parser_expression (parser, false);
18339
18340  if (t == error_mark_node
18341      || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18342    cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18343					   /*or_comma=*/false,
18344					   /*consume_paren=*/true);
18345
18346  check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS, "num_threads");
18347
18348  c = build_omp_clause (OMP_CLAUSE_NUM_THREADS);
18349  OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
18350  OMP_CLAUSE_CHAIN (c) = list;
18351
18352  return c;
18353}
18354
18355/* OpenMP 2.5:
18356   ordered */
18357
18358static tree
18359cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
18360{
18361  tree c;
18362
18363  check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED, "ordered");
18364
18365  c = build_omp_clause (OMP_CLAUSE_ORDERED);
18366  OMP_CLAUSE_CHAIN (c) = list;
18367  return c;
18368}
18369
18370/* OpenMP 2.5:
18371   reduction ( reduction-operator : variable-list )
18372
18373   reduction-operator:
18374     One of: + * - & ^ | && || */
18375
18376static tree
18377cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
18378{
18379  enum tree_code code;
18380  tree nlist, c;
18381
18382  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18383    return list;
18384
18385  switch (cp_lexer_peek_token (parser->lexer)->type)
18386    {
18387    case CPP_PLUS:
18388      code = PLUS_EXPR;
18389      break;
18390    case CPP_MULT:
18391      code = MULT_EXPR;
18392      break;
18393    case CPP_MINUS:
18394      code = MINUS_EXPR;
18395      break;
18396    case CPP_AND:
18397      code = BIT_AND_EXPR;
18398      break;
18399    case CPP_XOR:
18400      code = BIT_XOR_EXPR;
18401      break;
18402    case CPP_OR:
18403      code = BIT_IOR_EXPR;
18404      break;
18405    case CPP_AND_AND:
18406      code = TRUTH_ANDIF_EXPR;
18407      break;
18408    case CPP_OR_OR:
18409      code = TRUTH_ORIF_EXPR;
18410      break;
18411    default:
18412      cp_parser_error (parser, "`+', `*', `-', `&', `^', `|', `&&', or `||'");
18413    resync_fail:
18414      cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18415					     /*or_comma=*/false,
18416					     /*consume_paren=*/true);
18417      return list;
18418    }
18419  cp_lexer_consume_token (parser->lexer);
18420
18421  if (!cp_parser_require (parser, CPP_COLON, "`:'"))
18422    goto resync_fail;
18423
18424  nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
18425  for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
18426    OMP_CLAUSE_REDUCTION_CODE (c) = code;
18427
18428  return nlist;
18429}
18430
18431/* OpenMP 2.5:
18432   schedule ( schedule-kind )
18433   schedule ( schedule-kind , expression )
18434
18435   schedule-kind:
18436     static | dynamic | guided | runtime  */
18437
18438static tree
18439cp_parser_omp_clause_schedule (cp_parser *parser, tree list)
18440{
18441  tree c, t;
18442
18443  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
18444    return list;
18445
18446  c = build_omp_clause (OMP_CLAUSE_SCHEDULE);
18447
18448  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18449    {
18450      tree id = cp_lexer_peek_token (parser->lexer)->u.value;
18451      const char *p = IDENTIFIER_POINTER (id);
18452
18453      switch (p[0])
18454	{
18455	case 'd':
18456	  if (strcmp ("dynamic", p) != 0)
18457	    goto invalid_kind;
18458	  OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
18459	  break;
18460
18461	case 'g':
18462	  if (strcmp ("guided", p) != 0)
18463	    goto invalid_kind;
18464	  OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
18465	  break;
18466
18467	case 'r':
18468	  if (strcmp ("runtime", p) != 0)
18469	    goto invalid_kind;
18470	  OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
18471	  break;
18472
18473	default:
18474	  goto invalid_kind;
18475	}
18476    }
18477  else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
18478    OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
18479  else
18480    goto invalid_kind;
18481  cp_lexer_consume_token (parser->lexer);
18482
18483  if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
18484    {
18485      cp_lexer_consume_token (parser->lexer);
18486
18487      t = cp_parser_assignment_expression (parser, false);
18488
18489      if (t == error_mark_node)
18490	goto resync_fail;
18491      else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
18492	error ("schedule %<runtime%> does not take "
18493	       "a %<chunk_size%> parameter");
18494      else
18495	OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
18496
18497      if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18498	goto resync_fail;
18499    }
18500  else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`,' or `)'"))
18501    goto resync_fail;
18502
18503  check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule");
18504  OMP_CLAUSE_CHAIN (c) = list;
18505  return c;
18506
18507 invalid_kind:
18508  cp_parser_error (parser, "invalid schedule kind");
18509 resync_fail:
18510  cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18511					 /*or_comma=*/false,
18512					 /*consume_paren=*/true);
18513  return list;
18514}
18515
18516/* Parse all OpenMP clauses.  The set clauses allowed by the directive
18517   is a bitmask in MASK.  Return the list of clauses found; the result
18518   of clause default goes in *pdefault.  */
18519
18520static tree
18521cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
18522			   const char *where, cp_token *pragma_tok)
18523{
18524  tree clauses = NULL;
18525
18526  while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
18527    {
18528      pragma_omp_clause c_kind = cp_parser_omp_clause_name (parser);
18529      const char *c_name;
18530      tree prev = clauses;
18531
18532      switch (c_kind)
18533	{
18534	case PRAGMA_OMP_CLAUSE_COPYIN:
18535	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
18536	  c_name = "copyin";
18537	  break;
18538	case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
18539	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
18540					    clauses);
18541	  c_name = "copyprivate";
18542	  break;
18543	case PRAGMA_OMP_CLAUSE_DEFAULT:
18544	  clauses = cp_parser_omp_clause_default (parser, clauses);
18545	  c_name = "default";
18546	  break;
18547	case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
18548	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
18549					    clauses);
18550	  c_name = "firstprivate";
18551	  break;
18552	case PRAGMA_OMP_CLAUSE_IF:
18553	  clauses = cp_parser_omp_clause_if (parser, clauses);
18554	  c_name = "if";
18555	  break;
18556	case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
18557	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
18558					    clauses);
18559	  c_name = "lastprivate";
18560	  break;
18561	case PRAGMA_OMP_CLAUSE_NOWAIT:
18562	  clauses = cp_parser_omp_clause_nowait (parser, clauses);
18563	  c_name = "nowait";
18564	  break;
18565	case PRAGMA_OMP_CLAUSE_NUM_THREADS:
18566	  clauses = cp_parser_omp_clause_num_threads (parser, clauses);
18567	  c_name = "num_threads";
18568	  break;
18569	case PRAGMA_OMP_CLAUSE_ORDERED:
18570	  clauses = cp_parser_omp_clause_ordered (parser, clauses);
18571	  c_name = "ordered";
18572	  break;
18573	case PRAGMA_OMP_CLAUSE_PRIVATE:
18574	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
18575					    clauses);
18576	  c_name = "private";
18577	  break;
18578	case PRAGMA_OMP_CLAUSE_REDUCTION:
18579	  clauses = cp_parser_omp_clause_reduction (parser, clauses);
18580	  c_name = "reduction";
18581	  break;
18582	case PRAGMA_OMP_CLAUSE_SCHEDULE:
18583	  clauses = cp_parser_omp_clause_schedule (parser, clauses);
18584	  c_name = "schedule";
18585	  break;
18586	case PRAGMA_OMP_CLAUSE_SHARED:
18587	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
18588					    clauses);
18589	  c_name = "shared";
18590	  break;
18591	default:
18592	  cp_parser_error (parser, "expected %<#pragma omp%> clause");
18593	  goto saw_error;
18594	}
18595
18596      if (((mask >> c_kind) & 1) == 0)
18597	{
18598	  /* Remove the invalid clause(s) from the list to avoid
18599	     confusing the rest of the compiler.  */
18600	  clauses = prev;
18601	  error ("%qs is not valid for %qs", c_name, where);
18602	}
18603    }
18604 saw_error:
18605  cp_parser_skip_to_pragma_eol (parser, pragma_tok);
18606  return finish_omp_clauses (clauses);
18607}
18608
18609/* OpenMP 2.5:
18610   structured-block:
18611     statement
18612
18613   In practice, we're also interested in adding the statement to an
18614   outer node.  So it is convenient if we work around the fact that
18615   cp_parser_statement calls add_stmt.  */
18616
18617static unsigned
18618cp_parser_begin_omp_structured_block (cp_parser *parser)
18619{
18620  unsigned save = parser->in_statement;
18621
18622  /* Only move the values to IN_OMP_BLOCK if they weren't false.
18623     This preserves the "not within loop or switch" style error messages
18624     for nonsense cases like
18625	void foo() {
18626	#pragma omp single
18627	  break;
18628	}
18629  */
18630  if (parser->in_statement)
18631    parser->in_statement = IN_OMP_BLOCK;
18632
18633  return save;
18634}
18635
18636static void
18637cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
18638{
18639  parser->in_statement = save;
18640}
18641
18642static tree
18643cp_parser_omp_structured_block (cp_parser *parser)
18644{
18645  tree stmt = begin_omp_structured_block ();
18646  unsigned int save = cp_parser_begin_omp_structured_block (parser);
18647
18648  cp_parser_statement (parser, NULL_TREE, false);
18649
18650  cp_parser_end_omp_structured_block (parser, save);
18651  return finish_omp_structured_block (stmt);
18652}
18653
18654/* OpenMP 2.5:
18655   # pragma omp atomic new-line
18656     expression-stmt
18657
18658   expression-stmt:
18659     x binop= expr | x++ | ++x | x-- | --x
18660   binop:
18661     +, *, -, /, &, ^, |, <<, >>
18662
18663  where x is an lvalue expression with scalar type.  */
18664
18665static void
18666cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
18667{
18668  tree lhs, rhs;
18669  enum tree_code code;
18670
18671  cp_parser_require_pragma_eol (parser, pragma_tok);
18672
18673  lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
18674				    /*cast_p=*/false);
18675  switch (TREE_CODE (lhs))
18676    {
18677    case ERROR_MARK:
18678      goto saw_error;
18679
18680    case PREINCREMENT_EXPR:
18681    case POSTINCREMENT_EXPR:
18682      lhs = TREE_OPERAND (lhs, 0);
18683      code = PLUS_EXPR;
18684      rhs = integer_one_node;
18685      break;
18686
18687    case PREDECREMENT_EXPR:
18688    case POSTDECREMENT_EXPR:
18689      lhs = TREE_OPERAND (lhs, 0);
18690      code = MINUS_EXPR;
18691      rhs = integer_one_node;
18692      break;
18693
18694    default:
18695      switch (cp_lexer_peek_token (parser->lexer)->type)
18696	{
18697	case CPP_MULT_EQ:
18698	  code = MULT_EXPR;
18699	  break;
18700	case CPP_DIV_EQ:
18701	  code = TRUNC_DIV_EXPR;
18702	  break;
18703	case CPP_PLUS_EQ:
18704	  code = PLUS_EXPR;
18705	  break;
18706	case CPP_MINUS_EQ:
18707	  code = MINUS_EXPR;
18708	  break;
18709	case CPP_LSHIFT_EQ:
18710	  code = LSHIFT_EXPR;
18711	  break;
18712	case CPP_RSHIFT_EQ:
18713	  code = RSHIFT_EXPR;
18714	  break;
18715	case CPP_AND_EQ:
18716	  code = BIT_AND_EXPR;
18717	  break;
18718	case CPP_OR_EQ:
18719	  code = BIT_IOR_EXPR;
18720	  break;
18721	case CPP_XOR_EQ:
18722	  code = BIT_XOR_EXPR;
18723	  break;
18724	default:
18725	  cp_parser_error (parser,
18726			   "invalid operator for %<#pragma omp atomic%>");
18727	  goto saw_error;
18728	}
18729      cp_lexer_consume_token (parser->lexer);
18730
18731      rhs = cp_parser_expression (parser, false);
18732      if (rhs == error_mark_node)
18733	goto saw_error;
18734      break;
18735    }
18736  finish_omp_atomic (code, lhs, rhs);
18737  cp_parser_consume_semicolon_at_end_of_statement (parser);
18738  return;
18739
18740 saw_error:
18741  cp_parser_skip_to_end_of_block_or_statement (parser);
18742}
18743
18744
18745/* OpenMP 2.5:
18746   # pragma omp barrier new-line  */
18747
18748static void
18749cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
18750{
18751  cp_parser_require_pragma_eol (parser, pragma_tok);
18752  finish_omp_barrier ();
18753}
18754
18755/* OpenMP 2.5:
18756   # pragma omp critical [(name)] new-line
18757     structured-block  */
18758
18759static tree
18760cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
18761{
18762  tree stmt, name = NULL;
18763
18764  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18765    {
18766      cp_lexer_consume_token (parser->lexer);
18767
18768      name = cp_parser_identifier (parser);
18769
18770      if (name == error_mark_node
18771	  || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18772	cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18773					       /*or_comma=*/false,
18774					       /*consume_paren=*/true);
18775      if (name == error_mark_node)
18776	name = NULL;
18777    }
18778  cp_parser_require_pragma_eol (parser, pragma_tok);
18779
18780  stmt = cp_parser_omp_structured_block (parser);
18781  return c_finish_omp_critical (stmt, name);
18782}
18783
18784/* OpenMP 2.5:
18785   # pragma omp flush flush-vars[opt] new-line
18786
18787   flush-vars:
18788     ( variable-list ) */
18789
18790static void
18791cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
18792{
18793  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18794    (void) cp_parser_omp_var_list (parser, 0, NULL);
18795  cp_parser_require_pragma_eol (parser, pragma_tok);
18796
18797  finish_omp_flush ();
18798}
18799
18800/* Parse the restricted form of the for statment allowed by OpenMP.  */
18801
18802static tree
18803cp_parser_omp_for_loop (cp_parser *parser)
18804{
18805  tree init, cond, incr, body, decl, pre_body;
18806  location_t loc;
18807
18808  if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
18809    {
18810      cp_parser_error (parser, "for statement expected");
18811      return NULL;
18812    }
18813  loc = cp_lexer_consume_token (parser->lexer)->location;
18814  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18815    return NULL;
18816
18817  init = decl = NULL;
18818  pre_body = push_stmt_list ();
18819  if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18820    {
18821      cp_decl_specifier_seq type_specifiers;
18822
18823      /* First, try to parse as an initialized declaration.  See
18824	 cp_parser_condition, from whence the bulk of this is copied.  */
18825
18826      cp_parser_parse_tentatively (parser);
18827      cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
18828				    &type_specifiers);
18829      if (!cp_parser_error_occurred (parser))
18830	{
18831	  tree asm_specification, attributes;
18832	  cp_declarator *declarator;
18833
18834	  declarator = cp_parser_declarator (parser,
18835					     CP_PARSER_DECLARATOR_NAMED,
18836					     /*ctor_dtor_or_conv_p=*/NULL,
18837					     /*parenthesized_p=*/NULL,
18838					     /*member_p=*/false);
18839	  attributes = cp_parser_attributes_opt (parser);
18840	  asm_specification = cp_parser_asm_specification_opt (parser);
18841
18842	  cp_parser_require (parser, CPP_EQ, "`='");
18843	  if (cp_parser_parse_definitely (parser))
18844	    {
18845	      tree pushed_scope;
18846
18847	      decl = start_decl (declarator, &type_specifiers,
18848				 /*initialized_p=*/false, attributes,
18849				 /*prefix_attributes=*/NULL_TREE,
18850				 &pushed_scope);
18851
18852	      init = cp_parser_assignment_expression (parser, false);
18853
18854	      cp_finish_decl (decl, NULL_TREE, /*init_const_expr_p=*/false,
18855			      asm_specification, LOOKUP_ONLYCONVERTING);
18856
18857	      if (pushed_scope)
18858		pop_scope (pushed_scope);
18859	    }
18860	}
18861      else
18862	cp_parser_abort_tentative_parse (parser);
18863
18864      /* If parsing as an initialized declaration failed, try again as
18865	 a simple expression.  */
18866      if (decl == NULL)
18867	init = cp_parser_expression (parser, false);
18868    }
18869  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
18870  pre_body = pop_stmt_list (pre_body);
18871
18872  cond = NULL;
18873  if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18874    cond = cp_parser_condition (parser);
18875  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
18876
18877  incr = NULL;
18878  if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
18879    incr = cp_parser_expression (parser, false);
18880
18881  if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18882    cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18883					   /*or_comma=*/false,
18884					   /*consume_paren=*/true);
18885
18886  /* Note that we saved the original contents of this flag when we entered
18887     the structured block, and so we don't need to re-save it here.  */
18888  parser->in_statement = IN_OMP_FOR;
18889
18890  /* Note that the grammar doesn't call for a structured block here,
18891     though the loop as a whole is a structured block.  */
18892  body = push_stmt_list ();
18893  cp_parser_statement (parser, NULL_TREE, false);
18894  body = pop_stmt_list (body);
18895
18896  return finish_omp_for (loc, decl, init, cond, incr, body, pre_body);
18897}
18898
18899/* OpenMP 2.5:
18900   #pragma omp for for-clause[optseq] new-line
18901     for-loop  */
18902
18903#define OMP_FOR_CLAUSE_MASK				\
18904	( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)		\
18905	| (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)	\
18906	| (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)		\
18907	| (1u << PRAGMA_OMP_CLAUSE_REDUCTION)		\
18908	| (1u << PRAGMA_OMP_CLAUSE_ORDERED)		\
18909	| (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)		\
18910	| (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
18911
18912static tree
18913cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
18914{
18915  tree clauses, sb, ret;
18916  unsigned int save;
18917
18918  clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
18919				       "#pragma omp for", pragma_tok);
18920
18921  sb = begin_omp_structured_block ();
18922  save = cp_parser_begin_omp_structured_block (parser);
18923
18924  ret = cp_parser_omp_for_loop (parser);
18925  if (ret)
18926    OMP_FOR_CLAUSES (ret) = clauses;
18927
18928  cp_parser_end_omp_structured_block (parser, save);
18929  add_stmt (finish_omp_structured_block (sb));
18930
18931  return ret;
18932}
18933
18934/* OpenMP 2.5:
18935   # pragma omp master new-line
18936     structured-block  */
18937
18938static tree
18939cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
18940{
18941  cp_parser_require_pragma_eol (parser, pragma_tok);
18942  return c_finish_omp_master (cp_parser_omp_structured_block (parser));
18943}
18944
18945/* OpenMP 2.5:
18946   # pragma omp ordered new-line
18947     structured-block  */
18948
18949static tree
18950cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
18951{
18952  cp_parser_require_pragma_eol (parser, pragma_tok);
18953  return c_finish_omp_ordered (cp_parser_omp_structured_block (parser));
18954}
18955
18956/* OpenMP 2.5:
18957
18958   section-scope:
18959     { section-sequence }
18960
18961   section-sequence:
18962     section-directive[opt] structured-block
18963     section-sequence section-directive structured-block  */
18964
18965static tree
18966cp_parser_omp_sections_scope (cp_parser *parser)
18967{
18968  tree stmt, substmt;
18969  bool error_suppress = false;
18970  cp_token *tok;
18971
18972  if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
18973    return NULL_TREE;
18974
18975  stmt = push_stmt_list ();
18976
18977  if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
18978    {
18979      unsigned save;
18980
18981      substmt = begin_omp_structured_block ();
18982      save = cp_parser_begin_omp_structured_block (parser);
18983
18984      while (1)
18985	{
18986	  cp_parser_statement (parser, NULL_TREE, false);
18987
18988	  tok = cp_lexer_peek_token (parser->lexer);
18989	  if (tok->pragma_kind == PRAGMA_OMP_SECTION)
18990	    break;
18991	  if (tok->type == CPP_CLOSE_BRACE)
18992	    break;
18993	  if (tok->type == CPP_EOF)
18994	    break;
18995	}
18996
18997      cp_parser_end_omp_structured_block (parser, save);
18998      substmt = finish_omp_structured_block (substmt);
18999      substmt = build1 (OMP_SECTION, void_type_node, substmt);
19000      add_stmt (substmt);
19001    }
19002
19003  while (1)
19004    {
19005      tok = cp_lexer_peek_token (parser->lexer);
19006      if (tok->type == CPP_CLOSE_BRACE)
19007	break;
19008      if (tok->type == CPP_EOF)
19009	break;
19010
19011      if (tok->pragma_kind == PRAGMA_OMP_SECTION)
19012	{
19013	  cp_lexer_consume_token (parser->lexer);
19014	  cp_parser_require_pragma_eol (parser, tok);
19015	  error_suppress = false;
19016	}
19017      else if (!error_suppress)
19018	{
19019	  cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
19020	  error_suppress = true;
19021	}
19022
19023      substmt = cp_parser_omp_structured_block (parser);
19024      substmt = build1 (OMP_SECTION, void_type_node, substmt);
19025      add_stmt (substmt);
19026    }
19027  cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
19028
19029  substmt = pop_stmt_list (stmt);
19030
19031  stmt = make_node (OMP_SECTIONS);
19032  TREE_TYPE (stmt) = void_type_node;
19033  OMP_SECTIONS_BODY (stmt) = substmt;
19034
19035  add_stmt (stmt);
19036  return stmt;
19037}
19038
19039/* OpenMP 2.5:
19040   # pragma omp sections sections-clause[optseq] newline
19041     sections-scope  */
19042
19043#define OMP_SECTIONS_CLAUSE_MASK			\
19044	( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)		\
19045	| (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)	\
19046	| (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)		\
19047	| (1u << PRAGMA_OMP_CLAUSE_REDUCTION)		\
19048	| (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
19049
19050static tree
19051cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
19052{
19053  tree clauses, ret;
19054
19055  clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
19056				       "#pragma omp sections", pragma_tok);
19057
19058  ret = cp_parser_omp_sections_scope (parser);
19059  if (ret)
19060    OMP_SECTIONS_CLAUSES (ret) = clauses;
19061
19062  return ret;
19063}
19064
19065/* OpenMP 2.5:
19066   # pragma parallel parallel-clause new-line
19067   # pragma parallel for parallel-for-clause new-line
19068   # pragma parallel sections parallel-sections-clause new-line  */
19069
19070#define OMP_PARALLEL_CLAUSE_MASK			\
19071	( (1u << PRAGMA_OMP_CLAUSE_IF)			\
19072	| (1u << PRAGMA_OMP_CLAUSE_PRIVATE)		\
19073	| (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)	\
19074	| (1u << PRAGMA_OMP_CLAUSE_DEFAULT)		\
19075	| (1u << PRAGMA_OMP_CLAUSE_SHARED)		\
19076	| (1u << PRAGMA_OMP_CLAUSE_COPYIN)		\
19077	| (1u << PRAGMA_OMP_CLAUSE_REDUCTION)		\
19078	| (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
19079
19080static tree
19081cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
19082{
19083  enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
19084  const char *p_name = "#pragma omp parallel";
19085  tree stmt, clauses, par_clause, ws_clause, block;
19086  unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
19087  unsigned int save;
19088
19089  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
19090    {
19091      cp_lexer_consume_token (parser->lexer);
19092      p_kind = PRAGMA_OMP_PARALLEL_FOR;
19093      p_name = "#pragma omp parallel for";
19094      mask |= OMP_FOR_CLAUSE_MASK;
19095      mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
19096    }
19097  else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
19098    {
19099      tree id = cp_lexer_peek_token (parser->lexer)->u.value;
19100      const char *p = IDENTIFIER_POINTER (id);
19101      if (strcmp (p, "sections") == 0)
19102	{
19103	  cp_lexer_consume_token (parser->lexer);
19104	  p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
19105	  p_name = "#pragma omp parallel sections";
19106	  mask |= OMP_SECTIONS_CLAUSE_MASK;
19107	  mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
19108	}
19109    }
19110
19111  clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
19112  block = begin_omp_parallel ();
19113  save = cp_parser_begin_omp_structured_block (parser);
19114
19115  switch (p_kind)
19116    {
19117    case PRAGMA_OMP_PARALLEL:
19118      cp_parser_already_scoped_statement (parser);
19119      par_clause = clauses;
19120      break;
19121
19122    case PRAGMA_OMP_PARALLEL_FOR:
19123      c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
19124      stmt = cp_parser_omp_for_loop (parser);
19125      if (stmt)
19126	OMP_FOR_CLAUSES (stmt) = ws_clause;
19127      break;
19128
19129    case PRAGMA_OMP_PARALLEL_SECTIONS:
19130      c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
19131      stmt = cp_parser_omp_sections_scope (parser);
19132      if (stmt)
19133	OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
19134      break;
19135
19136    default:
19137      gcc_unreachable ();
19138    }
19139
19140  cp_parser_end_omp_structured_block (parser, save);
19141  stmt = finish_omp_parallel (par_clause, block);
19142  if (p_kind != PRAGMA_OMP_PARALLEL)
19143    OMP_PARALLEL_COMBINED (stmt) = 1;
19144  return stmt;
19145}
19146
19147/* OpenMP 2.5:
19148   # pragma omp single single-clause[optseq] new-line
19149     structured-block  */
19150
19151#define OMP_SINGLE_CLAUSE_MASK				\
19152	( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)		\
19153	| (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)	\
19154	| (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)		\
19155	| (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
19156
19157static tree
19158cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
19159{
19160  tree stmt = make_node (OMP_SINGLE);
19161  TREE_TYPE (stmt) = void_type_node;
19162
19163  OMP_SINGLE_CLAUSES (stmt)
19164    = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
19165				 "#pragma omp single", pragma_tok);
19166  OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
19167
19168  return add_stmt (stmt);
19169}
19170
19171/* OpenMP 2.5:
19172   # pragma omp threadprivate (variable-list) */
19173
19174static void
19175cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
19176{
19177  tree vars;
19178
19179  vars = cp_parser_omp_var_list (parser, 0, NULL);
19180  cp_parser_require_pragma_eol (parser, pragma_tok);
19181
19182  if (!targetm.have_tls)
19183    sorry ("threadprivate variables not supported in this target");
19184
19185  finish_omp_threadprivate (vars);
19186}
19187
19188/* Main entry point to OpenMP statement pragmas.  */
19189
19190static void
19191cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
19192{
19193  tree stmt;
19194
19195  switch (pragma_tok->pragma_kind)
19196    {
19197    case PRAGMA_OMP_ATOMIC:
19198      cp_parser_omp_atomic (parser, pragma_tok);
19199      return;
19200    case PRAGMA_OMP_CRITICAL:
19201      stmt = cp_parser_omp_critical (parser, pragma_tok);
19202      break;
19203    case PRAGMA_OMP_FOR:
19204      stmt = cp_parser_omp_for (parser, pragma_tok);
19205      break;
19206    case PRAGMA_OMP_MASTER:
19207      stmt = cp_parser_omp_master (parser, pragma_tok);
19208      break;
19209    case PRAGMA_OMP_ORDERED:
19210      stmt = cp_parser_omp_ordered (parser, pragma_tok);
19211      break;
19212    case PRAGMA_OMP_PARALLEL:
19213      stmt = cp_parser_omp_parallel (parser, pragma_tok);
19214      break;
19215    case PRAGMA_OMP_SECTIONS:
19216      stmt = cp_parser_omp_sections (parser, pragma_tok);
19217      break;
19218    case PRAGMA_OMP_SINGLE:
19219      stmt = cp_parser_omp_single (parser, pragma_tok);
19220      break;
19221    default:
19222      gcc_unreachable ();
19223    }
19224
19225  if (stmt)
19226    SET_EXPR_LOCATION (stmt, pragma_tok->location);
19227}
19228
19229/* The parser.  */
19230
19231static GTY (()) cp_parser *the_parser;
19232
19233
19234/* Special handling for the first token or line in the file.  The first
19235   thing in the file might be #pragma GCC pch_preprocess, which loads a
19236   PCH file, which is a GC collection point.  So we need to handle this
19237   first pragma without benefit of an existing lexer structure.
19238
19239   Always returns one token to the caller in *FIRST_TOKEN.  This is
19240   either the true first token of the file, or the first token after
19241   the initial pragma.  */
19242
19243static void
19244cp_parser_initial_pragma (cp_token *first_token)
19245{
19246  tree name = NULL;
19247
19248  cp_lexer_get_preprocessor_token (NULL, first_token);
19249  if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
19250    return;
19251
19252  cp_lexer_get_preprocessor_token (NULL, first_token);
19253  if (first_token->type == CPP_STRING)
19254    {
19255      name = first_token->u.value;
19256
19257      cp_lexer_get_preprocessor_token (NULL, first_token);
19258      if (first_token->type != CPP_PRAGMA_EOL)
19259	error ("junk at end of %<#pragma GCC pch_preprocess%>");
19260    }
19261  else
19262    error ("expected string literal");
19263
19264  /* Skip to the end of the pragma.  */
19265  while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
19266    cp_lexer_get_preprocessor_token (NULL, first_token);
19267
19268  /* Now actually load the PCH file.  */
19269  if (name)
19270    c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
19271
19272  /* Read one more token to return to our caller.  We have to do this
19273     after reading the PCH file in, since its pointers have to be
19274     live.  */
19275  cp_lexer_get_preprocessor_token (NULL, first_token);
19276}
19277
19278/* Normal parsing of a pragma token.  Here we can (and must) use the
19279   regular lexer.  */
19280
19281static bool
19282cp_parser_pragma (cp_parser *parser, enum pragma_context context)
19283{
19284  cp_token *pragma_tok;
19285  unsigned int id;
19286
19287  pragma_tok = cp_lexer_consume_token (parser->lexer);
19288  gcc_assert (pragma_tok->type == CPP_PRAGMA);
19289  parser->lexer->in_pragma = true;
19290
19291  id = pragma_tok->pragma_kind;
19292  switch (id)
19293    {
19294    case PRAGMA_GCC_PCH_PREPROCESS:
19295      error ("%<#pragma GCC pch_preprocess%> must be first");
19296      break;
19297
19298    case PRAGMA_OMP_BARRIER:
19299      switch (context)
19300	{
19301	case pragma_compound:
19302	  cp_parser_omp_barrier (parser, pragma_tok);
19303	  return false;
19304	case pragma_stmt:
19305	  error ("%<#pragma omp barrier%> may only be "
19306		 "used in compound statements");
19307	  break;
19308	default:
19309	  goto bad_stmt;
19310	}
19311      break;
19312
19313    case PRAGMA_OMP_FLUSH:
19314      switch (context)
19315	{
19316	case pragma_compound:
19317	  cp_parser_omp_flush (parser, pragma_tok);
19318	  return false;
19319	case pragma_stmt:
19320	  error ("%<#pragma omp flush%> may only be "
19321		 "used in compound statements");
19322	  break;
19323	default:
19324	  goto bad_stmt;
19325	}
19326      break;
19327
19328    case PRAGMA_OMP_THREADPRIVATE:
19329      cp_parser_omp_threadprivate (parser, pragma_tok);
19330      return false;
19331
19332    case PRAGMA_OMP_ATOMIC:
19333    case PRAGMA_OMP_CRITICAL:
19334    case PRAGMA_OMP_FOR:
19335    case PRAGMA_OMP_MASTER:
19336    case PRAGMA_OMP_ORDERED:
19337    case PRAGMA_OMP_PARALLEL:
19338    case PRAGMA_OMP_SECTIONS:
19339    case PRAGMA_OMP_SINGLE:
19340      if (context == pragma_external)
19341	goto bad_stmt;
19342      cp_parser_omp_construct (parser, pragma_tok);
19343      return true;
19344
19345    case PRAGMA_OMP_SECTION:
19346      error ("%<#pragma omp section%> may only be used in "
19347	     "%<#pragma omp sections%> construct");
19348      break;
19349
19350    default:
19351      gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
19352      c_invoke_pragma_handler (id);
19353      break;
19354
19355    bad_stmt:
19356      cp_parser_error (parser, "expected declaration specifiers");
19357      break;
19358    }
19359
19360  cp_parser_skip_to_pragma_eol (parser, pragma_tok);
19361  return false;
19362}
19363
19364/* The interface the pragma parsers have to the lexer.  */
19365
19366enum cpp_ttype
19367pragma_lex (tree *value)
19368{
19369  cp_token *tok;
19370  enum cpp_ttype ret;
19371
19372  tok = cp_lexer_peek_token (the_parser->lexer);
19373
19374  ret = tok->type;
19375  *value = tok->u.value;
19376
19377  if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
19378    ret = CPP_EOF;
19379  else if (ret == CPP_STRING)
19380    *value = cp_parser_string_literal (the_parser, false, false);
19381  else
19382    {
19383      cp_lexer_consume_token (the_parser->lexer);
19384      if (ret == CPP_KEYWORD)
19385	ret = CPP_NAME;
19386    }
19387
19388  return ret;
19389}
19390
19391
19392/* External interface.  */
19393
19394/* Parse one entire translation unit.  */
19395
19396void
19397c_parse_file (void)
19398{
19399  bool error_occurred;
19400  static bool already_called = false;
19401
19402  if (already_called)
19403    {
19404      sorry ("inter-module optimizations not implemented for C++");
19405      return;
19406    }
19407  already_called = true;
19408
19409  the_parser = cp_parser_new ();
19410  push_deferring_access_checks (flag_access_control
19411				? dk_no_deferred : dk_no_check);
19412  error_occurred = cp_parser_translation_unit (the_parser);
19413  the_parser = NULL;
19414}
19415
19416/* This variable must be provided by every front end.  */
19417
19418int yydebug;
19419
19420#include "gt-cp-parser.h"
19421